File: D:/HostingSpaces/SBogers10/veltech.komma.pro/wwwroot/js/site/vendor.js
(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{1:function(t,e,n){n("yLV6"),n("eCb9"),t.exports=n("x0D+")},eCb9:function(t,e){!function(){"use strict";if("undefined"!=typeof window){var t=window.navigator.userAgent.match(/Edge\/(\d{2})\./),e=!!t&&16<=parseInt(t[1],10);if("objectFit"in document.documentElement.style==0||e){var n=function(t,e,n){var i,o,r,s,a;if((n=n.split(" ")).length<2&&(n[1]=n[0]),"x"===t)i=n[0],o=n[1],r="left",s="right",a=e.clientWidth;else{if("y"!==t)return;i=n[1],o=n[0],r="top",s="bottom",a=e.clientHeight}if(i!==r&&o!==r){if(i!==s&&o!==s)return"center"===i||"50%"===i?(e.style[r]="50%",void(e.style["margin-"+r]=a/-2+"px")):void(0<=i.indexOf("%")?(i=parseInt(i))<50?(e.style[r]=i+"%",e.style["margin-"+r]=a*(i/-100)+"px"):(i=100-i,e.style[s]=i+"%",e.style["margin-"+s]=a*(i/-100)+"px"):e.style[r]=i);e.style[s]="0"}else e.style[r]="0"},i=function(t){var e=t.dataset?t.dataset.objectFit:t.getAttribute("data-object-fit"),i=t.dataset?t.dataset.objectPosition:t.getAttribute("data-object-position");e=e||"cover",i=i||"50% 50%";var o=t.parentNode;return function(t){var e=window.getComputedStyle(t,null),n=e.getPropertyValue("position"),i=e.getPropertyValue("overflow"),o=e.getPropertyValue("display");n&&"static"!==n||(t.style.position="relative"),"hidden"!==i&&(t.style.overflow="hidden"),o&&"inline"!==o||(t.style.display="block"),0===t.clientHeight&&(t.style.height="100%"),-1===t.className.indexOf("object-fit-polyfill")&&(t.className=t.className+" object-fit-polyfill")}(o),function(t){var e=window.getComputedStyle(t,null),n={"max-width":"none","max-height":"none","min-width":"0px","min-height":"0px",top:"auto",right:"auto",bottom:"auto",left:"auto","margin-top":"0px","margin-right":"0px","margin-bottom":"0px","margin-left":"0px"};for(var i in n)e.getPropertyValue(i)!==n[i]&&(t.style[i]=n[i])}(t),t.style.position="absolute",t.style.width="auto",t.style.height="auto","scale-down"===e&&(e=t.clientWidth<o.clientWidth&&t.clientHeight<o.clientHeight?"none":"contain"),"none"===e?(n("x",t,i),void n("y",t,i)):"fill"===e?(t.style.width="100%",t.style.height="100%",n("x",t,i),void n("y",t,i)):(t.style.height="100%",void("cover"===e&&t.clientWidth>o.clientWidth||"contain"===e&&t.clientWidth<o.clientWidth?(t.style.top="0",t.style.marginTop="0",n("x",t,i)):(t.style.width="100%",t.style.height="auto",t.style.left="0",t.style.marginLeft="0",n("y",t,i))))},o=function(t){if(void 0===t||t instanceof Event)t=document.querySelectorAll("[data-object-fit]");else if(t&&t.nodeName)t=[t];else{if("object"!=typeof t||!t.length||!t[0].nodeName)return!1;t=t}for(var n=0;n<t.length;n++)if(t[n].nodeName){var o=t[n].nodeName.toLowerCase();if("img"===o){if(e)continue;t[n].complete?i(t[n]):t[n].addEventListener("load",function(){i(this)})}else"video"===o?0<t[n].readyState?i(t[n]):t[n].addEventListener("loadedmetadata",function(){i(this)}):i(t[n])}return!0};"loading"===document.readyState?document.addEventListener("DOMContentLoaded",o):o(),window.addEventListener("resize",o),window.objectFitPolyfill=o}else window.objectFitPolyfill=function(){return!1}}}()},"x0D+":function(t,e,n){var i,o,r;o=[e],void 0===(r="function"==typeof(i=function(t){"use strict";function e(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}Object.defineProperty(t,"__esModule",{value:!0});var n=!1;if("undefined"!=typeof window){var i={get passive(){n=!0}};window.addEventListener("testPassive",null,i),window.removeEventListener("testPassive",null,i)}var o="undefined"!=typeof window&&window.navigator&&window.navigator.platform&&/iP(ad|hone|od)/.test(window.navigator.platform),r=[],s=!1,a=-1,u=void 0,c=void 0,l=function(t){return r.some(function(e){return!(!e.options.allowTouchMove||!e.options.allowTouchMove(t))})},h=function(t){var e=t||window.event;return!!l(e.target)||1<e.touches.length||(e.preventDefault&&e.preventDefault(),!1)},p=function(){setTimeout(function(){void 0!==c&&(document.body.style.paddingRight=c,c=void 0),void 0!==u&&(document.body.style.overflow=u,u=void 0)})};t.disableBodyScroll=function(t,i){if(o){if(!t)return void console.error("disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.");if(t&&!r.some(function(e){return e.targetElement===t})){var p={targetElement:t,options:i||{}};r=[].concat(e(r),[p]),t.ontouchstart=function(t){1===t.targetTouches.length&&(a=t.targetTouches[0].clientY)},t.ontouchmove=function(e){var n,i,o,r;1===e.targetTouches.length&&(i=t,r=(n=e).targetTouches[0].clientY-a,!l(n.target)&&(i&&0===i.scrollTop&&0<r?h(n):(o=i)&&o.scrollHeight-o.scrollTop<=o.clientHeight&&r<0?h(n):n.stopPropagation()))},s||(document.addEventListener("touchmove",h,n?{passive:!1}:void 0),s=!0)}}else{d=i,setTimeout(function(){if(void 0===c){var t=!!d&&!0===d.reserveScrollBarGap,e=window.innerWidth-document.documentElement.clientWidth;t&&0<e&&(c=document.body.style.paddingRight,document.body.style.paddingRight=e+"px")}void 0===u&&(u=document.body.style.overflow,document.body.style.overflow="hidden")});var f={targetElement:t,options:i||{}};r=[].concat(e(r),[f])}var d},t.clearAllBodyScrollLocks=function(){o?(r.forEach(function(t){t.targetElement.ontouchstart=null,t.targetElement.ontouchmove=null}),s&&(document.removeEventListener("touchmove",h,n?{passive:!1}:void 0),s=!1),r=[],a=-1):(p(),r=[])},t.enableBodyScroll=function(t){if(o){if(!t)return void console.error("enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.");t.ontouchstart=null,t.ontouchmove=null,r=r.filter(function(e){return e.targetElement!==t}),s&&0===r.length&&(document.removeEventListener("touchmove",h,n?{passive:!1}:void 0),s=!1)}else(r=r.filter(function(e){return e.targetElement!==t})).length||p()}})?i.apply(e,o):i)||(t.exports=r)},yLV6:function(t,e,n){var i;!function(o,r,s,a){"use strict";var u,c=["","webkit","Moz","MS","ms","o"],l=r.createElement("div"),h="function",p=Math.round,f=Math.abs,d=Date.now;function v(t,e,n){return setTimeout(b(t,n),e)}function m(t,e,n){return!!Array.isArray(t)&&(g(t,n[e],n),!0)}function g(t,e,n){var i;if(t)if(t.forEach)t.forEach(e,n);else if(t.length!==a)for(i=0;i<t.length;)e.call(n,t[i],i,t),i++;else for(i in t)t.hasOwnProperty(i)&&e.call(n,t[i],i,t)}function y(t,e,n){var i="DEPRECATED METHOD: "+e+"\n"+n+" AT \n";return function(){var e=new Error("get-stack-trace"),n=e&&e.stack?e.stack.replace(/^[^\(]+?[\n$]/gm,"").replace(/^\s+at\s+/gm,"").replace(/^Object.<anonymous>\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",r=o.console&&(o.console.warn||o.console.log);return r&&r.call(o.console,i,n),t.apply(this,arguments)}}u="function"!=typeof Object.assign?function(t){if(t===a||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n<arguments.length;n++){var i=arguments[n];if(i!==a&&null!==i)for(var o in i)i.hasOwnProperty(o)&&(e[o]=i[o])}return e}:Object.assign;var T=y(function(t,e,n){for(var i=Object.keys(e),o=0;o<i.length;)(!n||n&&t[i[o]]===a)&&(t[i[o]]=e[i[o]]),o++;return t},"extend","Use `assign`."),E=y(function(t,e){return T(t,e,!0)},"merge","Use `assign`.");function w(t,e,n){var i,o=e.prototype;(i=t.prototype=Object.create(o)).constructor=t,i._super=o,n&&u(i,n)}function b(t,e){return function(){return t.apply(e,arguments)}}function x(t,e){return typeof t==h?t.apply(e&&e[0]||a,e):t}function S(t,e){return t===a?e:t}function A(t,e,n){g(D(e),function(e){t.addEventListener(e,n,!1)})}function I(t,e,n){g(D(e),function(e){t.removeEventListener(e,n,!1)})}function P(t,e){for(;t;){if(t==e)return!0;t=t.parentNode}return!1}function C(t,e){return t.indexOf(e)>-1}function D(t){return t.trim().split(/\s+/g)}function _(t,e,n){if(t.indexOf&&!n)return t.indexOf(e);for(var i=0;i<t.length;){if(n&&t[i][n]==e||!n&&t[i]===e)return i;i++}return-1}function O(t){return Array.prototype.slice.call(t,0)}function N(t,e,n){for(var i=[],o=[],r=0;r<t.length;){var s=e?t[r][e]:t[r];_(o,s)<0&&i.push(t[r]),o[r]=s,r++}return n&&(i=e?i.sort(function(t,n){return t[e]>n[e]}):i.sort()),i}function M(t,e){for(var n,i,o=e[0].toUpperCase()+e.slice(1),r=0;r<c.length;){if((i=(n=c[r])?n+o:e)in t)return i;r++}return a}var R=1;function L(t){var e=t.ownerDocument||t;return e.defaultView||e.parentWindow||o}var z="ontouchstart"in o,Y=M(o,"PointerEvent")!==a,W=z&&/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),X=25,F=1,j=2,H=4,k=8,q=1,V=2,B=4,U=8,G=16,Z=V|B,J=U|G,$=Z|J,K=["x","y"],Q=["clientX","clientY"];function tt(t,e){var n=this;this.manager=t,this.callback=e,this.element=t.element,this.target=t.options.inputTarget,this.domHandler=function(e){x(t.options.enable,[t])&&n.handler(e)},this.init()}function et(t,e,n){var i=n.pointers.length,o=n.changedPointers.length,r=e&F&&i-o==0,s=e&(H|k)&&i-o==0;n.isFirst=!!r,n.isFinal=!!s,r&&(t.session={}),n.eventType=e,function(t,e){var n=t.session,i=e.pointers,o=i.length;n.firstInput||(n.firstInput=nt(e));o>1&&!n.firstMultiple?n.firstMultiple=nt(e):1===o&&(n.firstMultiple=!1);var r=n.firstInput,s=n.firstMultiple,u=s?s.center:r.center,c=e.center=it(i);e.timeStamp=d(),e.deltaTime=e.timeStamp-r.timeStamp,e.angle=at(u,c),e.distance=st(u,c),function(t,e){var n=e.center,i=t.offsetDelta||{},o=t.prevDelta||{},r=t.prevInput||{};e.eventType!==F&&r.eventType!==H||(o=t.prevDelta={x:r.deltaX||0,y:r.deltaY||0},i=t.offsetDelta={x:n.x,y:n.y});e.deltaX=o.x+(n.x-i.x),e.deltaY=o.y+(n.y-i.y)}(n,e),e.offsetDirection=rt(e.deltaX,e.deltaY);var l=ot(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX=l.x,e.overallVelocityY=l.y,e.overallVelocity=f(l.x)>f(l.y)?l.x:l.y,e.scale=s?(h=s.pointers,p=i,st(p[0],p[1],Q)/st(h[0],h[1],Q)):1,e.rotation=s?function(t,e){return at(e[1],e[0],Q)+at(t[1],t[0],Q)}(s.pointers,i):0,e.maxPointers=n.prevInput?e.pointers.length>n.prevInput.maxPointers?e.pointers.length:n.prevInput.maxPointers:e.pointers.length,function(t,e){var n,i,o,r,s=t.lastInterval||e,u=e.timeStamp-s.timeStamp;if(e.eventType!=k&&(u>X||s.velocity===a)){var c=e.deltaX-s.deltaX,l=e.deltaY-s.deltaY,h=ot(u,c,l);i=h.x,o=h.y,n=f(h.x)>f(h.y)?h.x:h.y,r=rt(c,l),t.lastInterval=e}else n=s.velocity,i=s.velocityX,o=s.velocityY,r=s.direction;e.velocity=n,e.velocityX=i,e.velocityY=o,e.direction=r}(n,e);var h,p;var v=t.element;P(e.srcEvent.target,v)&&(v=e.srcEvent.target);e.target=v}(t,n),t.emit("hammer.input",n),t.recognize(n),t.session.prevInput=n}function nt(t){for(var e=[],n=0;n<t.pointers.length;)e[n]={clientX:p(t.pointers[n].clientX),clientY:p(t.pointers[n].clientY)},n++;return{timeStamp:d(),pointers:e,center:it(e),deltaX:t.deltaX,deltaY:t.deltaY}}function it(t){var e=t.length;if(1===e)return{x:p(t[0].clientX),y:p(t[0].clientY)};for(var n=0,i=0,o=0;o<e;)n+=t[o].clientX,i+=t[o].clientY,o++;return{x:p(n/e),y:p(i/e)}}function ot(t,e,n){return{x:e/t||0,y:n/t||0}}function rt(t,e){return t===e?q:f(t)>=f(e)?t<0?V:B:e<0?U:G}function st(t,e,n){n||(n=K);var i=e[n[0]]-t[n[0]],o=e[n[1]]-t[n[1]];return Math.sqrt(i*i+o*o)}function at(t,e,n){n||(n=K);var i=e[n[0]]-t[n[0]],o=e[n[1]]-t[n[1]];return 180*Math.atan2(o,i)/Math.PI}tt.prototype={handler:function(){},init:function(){this.evEl&&A(this.element,this.evEl,this.domHandler),this.evTarget&&A(this.target,this.evTarget,this.domHandler),this.evWin&&A(L(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&I(this.element,this.evEl,this.domHandler),this.evTarget&&I(this.target,this.evTarget,this.domHandler),this.evWin&&I(L(this.element),this.evWin,this.domHandler)}};var ut={mousedown:F,mousemove:j,mouseup:H},ct="mousedown",lt="mousemove mouseup";function ht(){this.evEl=ct,this.evWin=lt,this.pressed=!1,tt.apply(this,arguments)}w(ht,tt,{handler:function(t){var e=ut[t.type];e&F&&0===t.button&&(this.pressed=!0),e&j&&1!==t.which&&(e=H),this.pressed&&(e&H&&(this.pressed=!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:"mouse",srcEvent:t}))}});var pt={pointerdown:F,pointermove:j,pointerup:H,pointercancel:k,pointerout:k},ft={2:"touch",3:"pen",4:"mouse",5:"kinect"},dt="pointerdown",vt="pointermove pointerup pointercancel";function mt(){this.evEl=dt,this.evWin=vt,tt.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}o.MSPointerEvent&&!o.PointerEvent&&(dt="MSPointerDown",vt="MSPointerMove MSPointerUp MSPointerCancel"),w(mt,tt,{handler:function(t){var e=this.store,n=!1,i=t.type.toLowerCase().replace("ms",""),o=pt[i],r=ft[t.pointerType]||t.pointerType,s="touch"==r,a=_(e,t.pointerId,"pointerId");o&F&&(0===t.button||s)?a<0&&(e.push(t),a=e.length-1):o&(H|k)&&(n=!0),a<0||(e[a]=t,this.callback(this.manager,o,{pointers:e,changedPointers:[t],pointerType:r,srcEvent:t}),n&&e.splice(a,1))}});var gt={touchstart:F,touchmove:j,touchend:H,touchcancel:k},yt="touchstart",Tt="touchstart touchmove touchend touchcancel";function Et(){this.evTarget=yt,this.evWin=Tt,this.started=!1,tt.apply(this,arguments)}w(Et,tt,{handler:function(t){var e=gt[t.type];if(e===F&&(this.started=!0),this.started){var n=function(t,e){var n=O(t.touches),i=O(t.changedTouches);e&(H|k)&&(n=N(n.concat(i),"identifier",!0));return[n,i]}.call(this,t,e);e&(H|k)&&n[0].length-n[1].length==0&&(this.started=!1),this.callback(this.manager,e,{pointers:n[0],changedPointers:n[1],pointerType:"touch",srcEvent:t})}}});var wt={touchstart:F,touchmove:j,touchend:H,touchcancel:k},bt="touchstart touchmove touchend touchcancel";function xt(){this.evTarget=bt,this.targetIds={},tt.apply(this,arguments)}w(xt,tt,{handler:function(t){var e=wt[t.type],n=function(t,e){var n=O(t.touches),i=this.targetIds;if(e&(F|j)&&1===n.length)return i[n[0].identifier]=!0,[n,n];var o,r,s=O(t.changedTouches),a=[],u=this.target;if(r=n.filter(function(t){return P(t.target,u)}),e===F)for(o=0;o<r.length;)i[r[o].identifier]=!0,o++;o=0;for(;o<s.length;)i[s[o].identifier]&&a.push(s[o]),e&(H|k)&&delete i[s[o].identifier],o++;if(!a.length)return;return[N(r.concat(a),"identifier",!0),a]}.call(this,t,e);n&&this.callback(this.manager,e,{pointers:n[0],changedPointers:n[1],pointerType:"touch",srcEvent:t})}});var St=2500,At=25;function It(){tt.apply(this,arguments);var t=b(this.handler,this);this.touch=new xt(this.manager,t),this.mouse=new ht(this.manager,t),this.primaryTouch=null,this.lastTouches=[]}function Pt(t){var e=t.changedPointers[0];if(e.identifier===this.primaryTouch){var n={x:e.clientX,y:e.clientY};this.lastTouches.push(n);var i=this.lastTouches;setTimeout(function(){var t=i.indexOf(n);t>-1&&i.splice(t,1)},St)}}w(It,tt,{handler:function(t,e,n){var i="touch"==n.pointerType,o="mouse"==n.pointerType;if(!(o&&n.sourceCapabilities&&n.sourceCapabilities.firesTouchEvents)){if(i)(function(t,e){t&F?(this.primaryTouch=e.changedPointers[0].identifier,Pt.call(this,e)):t&(H|k)&&Pt.call(this,e)}).call(this,e,n);else if(o&&function(t){for(var e=t.srcEvent.clientX,n=t.srcEvent.clientY,i=0;i<this.lastTouches.length;i++){var o=this.lastTouches[i],r=Math.abs(e-o.x),s=Math.abs(n-o.y);if(r<=At&&s<=At)return!0}return!1}.call(this,n))return;this.callback(t,e,n)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var Ct=M(l.style,"touchAction"),Dt=Ct!==a,_t="auto",Ot="manipulation",Nt="none",Mt="pan-x",Rt="pan-y",Lt=function(){if(!Dt)return!1;var t={},e=o.CSS&&o.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(n){t[n]=!e||o.CSS.supports("touch-action",n)}),t}();function zt(t,e){this.manager=t,this.set(e)}zt.prototype={set:function(t){"compute"==t&&(t=this.compute()),Dt&&this.manager.element.style&&Lt[t]&&(this.manager.element.style[Ct]=t),this.actions=t.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t=[];return g(this.manager.recognizers,function(e){x(e.options.enable,[e])&&(t=t.concat(e.getTouchAction()))}),function(t){if(C(t,Nt))return Nt;var e=C(t,Mt),n=C(t,Rt);if(e&&n)return Nt;if(e||n)return e?Mt:Rt;if(C(t,Ot))return Ot;return _t}(t.join(" "))},preventDefaults:function(t){var e=t.srcEvent,n=t.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var i=this.actions,o=C(i,Nt)&&!Lt[Nt],r=C(i,Rt)&&!Lt[Rt],s=C(i,Mt)&&!Lt[Mt];if(o){var a=1===t.pointers.length,u=t.distance<2,c=t.deltaTime<250;if(a&&u&&c)return}if(!s||!r)return o||r&&n&Z||s&&n&J?this.preventSrc(e):void 0}},preventSrc:function(t){this.manager.session.prevented=!0,t.preventDefault()}};var Yt=1,Wt=2,Xt=4,Ft=8,jt=Ft,Ht=16;function kt(t){this.options=u({},this.defaults,t||{}),this.id=R++,this.manager=null,this.options.enable=S(this.options.enable,!0),this.state=Yt,this.simultaneous={},this.requireFail=[]}function qt(t){return t&Ht?"cancel":t&Ft?"end":t&Xt?"move":t&Wt?"start":""}function Vt(t){return t==G?"down":t==U?"up":t==V?"left":t==B?"right":""}function Bt(t,e){var n=e.manager;return n?n.get(t):t}function Ut(){kt.apply(this,arguments)}function Gt(){Ut.apply(this,arguments),this.pX=null,this.pY=null}function Zt(){Ut.apply(this,arguments)}function Jt(){kt.apply(this,arguments),this._timer=null,this._input=null}function $t(){Ut.apply(this,arguments)}function Kt(){Ut.apply(this,arguments)}function Qt(){kt.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function te(t,e){return(e=e||{}).recognizers=S(e.recognizers,te.defaults.preset),new ee(t,e)}kt.prototype={defaults:{},set:function(t){return u(this.options,t),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(t){if(m(t,"recognizeWith",this))return this;var e=this.simultaneous;return e[(t=Bt(t,this)).id]||(e[t.id]=t,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return m(t,"dropRecognizeWith",this)?this:(t=Bt(t,this),delete this.simultaneous[t.id],this)},requireFailure:function(t){if(m(t,"requireFailure",this))return this;var e=this.requireFail;return-1===_(e,t=Bt(t,this))&&(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(m(t,"dropRequireFailure",this))return this;t=Bt(t,this);var e=_(this.requireFail,t);return e>-1&&this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){var e=this,n=this.state;function i(n){e.manager.emit(n,t)}n<Ft&&i(e.options.event+qt(n)),i(e.options.event),t.additionalEvent&&i(t.additionalEvent),n>=Ft&&i(e.options.event+qt(n))},tryEmit:function(t){if(this.canEmit())return this.emit(t);this.state=32},canEmit:function(){for(var t=0;t<this.requireFail.length;){if(!(this.requireFail[t].state&(32|Yt)))return!1;t++}return!0},recognize:function(t){var e=u({},t);if(!x(this.options.enable,[this,e]))return this.reset(),void(this.state=32);this.state&(jt|Ht|32)&&(this.state=Yt),this.state=this.process(e),this.state&(Wt|Xt|Ft|Ht)&&this.tryEmit(e)},process:function(t){},getTouchAction:function(){},reset:function(){}},w(Ut,kt,{defaults:{pointers:1},attrTest:function(t){var e=this.options.pointers;return 0===e||t.pointers.length===e},process:function(t){var e=this.state,n=t.eventType,i=e&(Wt|Xt),o=this.attrTest(t);return i&&(n&k||!o)?e|Ht:i||o?n&H?e|Ft:e&Wt?e|Xt:Wt:32}}),w(Gt,Ut,{defaults:{event:"pan",threshold:10,pointers:1,direction:$},getTouchAction:function(){var t=this.options.direction,e=[];return t&Z&&e.push(Rt),t&J&&e.push(Mt),e},directionTest:function(t){var e=this.options,n=!0,i=t.distance,o=t.direction,r=t.deltaX,s=t.deltaY;return o&e.direction||(e.direction&Z?(o=0===r?q:r<0?V:B,n=r!=this.pX,i=Math.abs(t.deltaX)):(o=0===s?q:s<0?U:G,n=s!=this.pY,i=Math.abs(t.deltaY))),t.direction=o,n&&i>e.threshold&&o&e.direction},attrTest:function(t){return Ut.prototype.attrTest.call(this,t)&&(this.state&Wt||!(this.state&Wt)&&this.directionTest(t))},emit:function(t){this.pX=t.deltaX,this.pY=t.deltaY;var e=Vt(t.direction);e&&(t.additionalEvent=this.options.event+e),this._super.emit.call(this,t)}}),w(Zt,Ut,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[Nt]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.scale-1)>this.options.threshold||this.state&Wt)},emit:function(t){if(1!==t.scale){var e=t.scale<1?"in":"out";t.additionalEvent=this.options.event+e}this._super.emit.call(this,t)}}),w(Jt,kt,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[_t]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distance<e.threshold,o=t.deltaTime>e.time;if(this._input=t,!i||!n||t.eventType&(H|k)&&!o)this.reset();else if(t.eventType&F)this.reset(),this._timer=v(function(){this.state=jt,this.tryEmit()},e.time,this);else if(t.eventType&H)return jt;return 32},reset:function(){clearTimeout(this._timer)},emit:function(t){this.state===jt&&(t&&t.eventType&H?this.manager.emit(this.options.event+"up",t):(this._input.timeStamp=d(),this.manager.emit(this.options.event,this._input)))}}),w($t,Ut,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[Nt]},attrTest:function(t){return this._super.attrTest.call(this,t)&&(Math.abs(t.rotation)>this.options.threshold||this.state&Wt)}}),w(Kt,Ut,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Z|J,pointers:1},getTouchAction:function(){return Gt.prototype.getTouchAction.call(this)},attrTest:function(t){var e,n=this.options.direction;return n&(Z|J)?e=t.overallVelocity:n&Z?e=t.overallVelocityX:n&J&&(e=t.overallVelocityY),this._super.attrTest.call(this,t)&&n&t.offsetDirection&&t.distance>this.options.threshold&&t.maxPointers==this.options.pointers&&f(e)>this.options.velocity&&t.eventType&H},emit:function(t){var e=Vt(t.offsetDirection);e&&this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),w(Qt,kt,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[Ot]},process:function(t){var e=this.options,n=t.pointers.length===e.pointers,i=t.distance<e.threshold,o=t.deltaTime<e.time;if(this.reset(),t.eventType&F&&0===this.count)return this.failTimeout();if(i&&o&&n){if(t.eventType!=H)return this.failTimeout();var r=!this.pTime||t.timeStamp-this.pTime<e.interval,s=!this.pCenter||st(this.pCenter,t.center)<e.posThreshold;if(this.pTime=t.timeStamp,this.pCenter=t.center,s&&r?this.count+=1:this.count=1,this._input=t,0===this.count%e.taps)return this.hasRequireFailures()?(this._timer=v(function(){this.state=jt,this.tryEmit()},e.interval,this),Wt):jt}return 32},failTimeout:function(){return this._timer=v(function(){this.state=32},this.options.interval,this),32},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==jt&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),te.VERSION="2.0.7",te.defaults={domEvents:!1,touchAction:"compute",enable:!0,inputTarget:null,inputClass:null,preset:[[$t,{enable:!1}],[Zt,{enable:!1},["rotate"]],[Kt,{direction:Z}],[Gt,{direction:Z},["swipe"]],[Qt],[Qt,{event:"doubletap",taps:2},["tap"]],[Jt]],cssProps:{userSelect:"none",touchSelect:"none",touchCallout:"none",contentZooming:"none",userDrag:"none",tapHighlightColor:"rgba(0,0,0,0)"}};function ee(t,e){var n;this.options=u({},te.defaults,e||{}),this.options.inputTarget=this.options.inputTarget||t,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=t,this.input=new((n=this).options.inputClass||(Y?mt:W?xt:z?It:ht))(n,et),this.touchAction=new zt(this,this.options.touchAction),ne(this,!0),g(this.options.recognizers,function(t){var e=this.add(new t[0](t[1]));t[2]&&e.recognizeWith(t[2]),t[3]&&e.requireFailure(t[3])},this)}function ne(t,e){var n,i=t.element;i.style&&(g(t.options.cssProps,function(o,r){n=M(i.style,r),e?(t.oldCssProps[n]=i.style[n],i.style[n]=o):i.style[n]=t.oldCssProps[n]||""}),e||(t.oldCssProps={}))}ee.prototype={set:function(t){return u(this.options,t),t.touchAction&&this.touchAction.update(),t.inputTarget&&(this.input.destroy(),this.input.target=t.inputTarget,this.input.init()),this},stop:function(t){this.session.stopped=t?2:1},recognize:function(t){var e=this.session;if(!e.stopped){var n;this.touchAction.preventDefaults(t);var i=this.recognizers,o=e.curRecognizer;(!o||o&&o.state&jt)&&(o=e.curRecognizer=null);for(var r=0;r<i.length;)n=i[r],2===e.stopped||o&&n!=o&&!n.canRecognizeWith(o)?n.reset():n.recognize(t),!o&&n.state&(Wt|Xt|Ft)&&(o=e.curRecognizer=n),r++}},get:function(t){if(t instanceof kt)return t;for(var e=this.recognizers,n=0;n<e.length;n++)if(e[n].options.event==t)return e[n];return null},add:function(t){if(m(t,"add",this))return this;var e=this.get(t.options.event);return e&&this.remove(e),this.recognizers.push(t),t.manager=this,this.touchAction.update(),t},remove:function(t){if(m(t,"remove",this))return this;if(t=this.get(t)){var e=this.recognizers,n=_(e,t);-1!==n&&(e.splice(n,1),this.touchAction.update())}return this},on:function(t,e){if(t!==a&&e!==a){var n=this.handlers;return g(D(t),function(t){n[t]=n[t]||[],n[t].push(e)}),this}},off:function(t,e){if(t!==a){var n=this.handlers;return g(D(t),function(t){e?n[t]&&n[t].splice(_(n[t],e),1):delete n[t]}),this}},emit:function(t,e){this.options.domEvents&&function(t,e){var n=r.createEvent("Event");n.initEvent(t,!0,!0),n.gesture=e,e.target.dispatchEvent(n)}(t,e);var n=this.handlers[t]&&this.handlers[t].slice();if(n&&n.length){e.type=t,e.preventDefault=function(){e.srcEvent.preventDefault()};for(var i=0;i<n.length;)n[i](e),i++}},destroy:function(){this.element&&ne(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},u(te,{INPUT_START:F,INPUT_MOVE:j,INPUT_END:H,INPUT_CANCEL:k,STATE_POSSIBLE:Yt,STATE_BEGAN:Wt,STATE_CHANGED:Xt,STATE_ENDED:Ft,STATE_RECOGNIZED:jt,STATE_CANCELLED:Ht,STATE_FAILED:32,DIRECTION_NONE:q,DIRECTION_LEFT:V,DIRECTION_RIGHT:B,DIRECTION_UP:U,DIRECTION_DOWN:G,DIRECTION_HORIZONTAL:Z,DIRECTION_VERTICAL:J,DIRECTION_ALL:$,Manager:ee,Input:tt,TouchAction:zt,TouchInput:xt,MouseInput:ht,PointerEventInput:mt,TouchMouseInput:It,SingleTouchInput:Et,Recognizer:kt,AttrRecognizer:Ut,Tap:Qt,Pan:Gt,Swipe:Kt,Pinch:Zt,Rotate:$t,Press:Jt,on:A,off:I,each:g,merge:E,extend:T,assign:u,inherit:w,bindFn:b,prefixed:M}),(void 0!==o?o:"undefined"!=typeof self?self:{}).Hammer=te,(i=function(){return te}.call(e,n,e,t))===a||(t.exports=i)}(window,document)}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0Rml0UG9seWZpbGwvZGlzdC9vYmplY3RGaXRQb2x5ZmlsbC5taW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2JvZHktc2Nyb2xsLWxvY2svbGliL2JvZHlTY3JvbGxMb2NrLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFtbWVyanMvaGFtbWVyLmpzIl0sIm5hbWVzIjpbIndpbmRvdyIsInQiLCJuYXZpZ2F0b3IiLCJ1c2VyQWdlbnQiLCJtYXRjaCIsIm4iLCJwYXJzZUludCIsImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiwic3R5bGUiLCJvIiwiZSIsImkiLCJsIiwiYSIsImQiLCJzcGxpdCIsImxlbmd0aCIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0IiwiaW5kZXhPZiIsImRhdGFzZXQiLCJvYmplY3RGaXQiLCJnZXRBdHRyaWJ1dGUiLCJvYmplY3RQb3NpdGlvbiIsInBhcmVudE5vZGUiLCJnZXRDb21wdXRlZFN0eWxlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInBvc2l0aW9uIiwib3ZlcmZsb3ciLCJkaXNwbGF5IiwiaGVpZ2h0IiwiY2xhc3NOYW1lIiwibWF4LXdpZHRoIiwibWF4LWhlaWdodCIsIm1pbi13aWR0aCIsIm1pbi1oZWlnaHQiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJtYXJnaW4tdG9wIiwibWFyZ2luLXJpZ2h0IiwibWFyZ2luLWJvdHRvbSIsIm1hcmdpbi1sZWZ0Iiwid2lkdGgiLCJtYXJnaW5Ub3AiLCJtYXJnaW5MZWZ0IiwiRXZlbnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwibm9kZU5hbWUiLCJ0b0xvd2VyQ2FzZSIsImNvbXBsZXRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInRoaXMiLCJyZWFkeVN0YXRlIiwib2JqZWN0Rml0UG9seWZpbGwiLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9GQUNUT1JZX18iLCJfX1dFQlBBQ0tfQU1EX0RFRklORV9BUlJBWV9fIiwiX19XRUJQQUNLX0FNRF9ERUZJTkVfUkVTVUxUX18iLCJleHBvcnRzIiwidW5kZWZpbmVkIiwiciIsIkFycmF5IiwiaXNBcnJheSIsImZyb20iLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwicGFzc2l2ZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJwbGF0Zm9ybSIsInRlc3QiLCJjIiwidSIsInMiLCJ2IiwiZiIsInNvbWUiLCJvcHRpb25zIiwiYWxsb3dUb3VjaE1vdmUiLCJtIiwiZXZlbnQiLCJ0YXJnZXQiLCJ0b3VjaGVzIiwicHJldmVudERlZmF1bHQiLCJzZXRUaW1lb3V0IiwiYm9keSIsInBhZGRpbmdSaWdodCIsImRpc2FibGVCb2R5U2Nyb2xsIiwiY29uc29sZSIsImVycm9yIiwidGFyZ2V0RWxlbWVudCIsImNvbmNhdCIsIm9udG91Y2hzdGFydCIsInRhcmdldFRvdWNoZXMiLCJjbGllbnRZIiwib250b3VjaG1vdmUiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJzdG9wUHJvcGFnYXRpb24iLCJyZXNlcnZlU2Nyb2xsQmFyR2FwIiwiaW5uZXJXaWR0aCIsImNsZWFyQWxsQm9keVNjcm9sbExvY2tzIiwiZm9yRWFjaCIsImVuYWJsZUJvZHlTY3JvbGwiLCJmaWx0ZXIiLCJhcHBseSIsIm1vZHVsZSIsImV4cG9ydE5hbWUiLCJhc3NpZ24iLCJWRU5ET1JfUFJFRklYRVMiLCJURVNUX0VMRU1FTlQiLCJjcmVhdGVFbGVtZW50IiwiVFlQRV9GVU5DVElPTiIsInJvdW5kIiwiTWF0aCIsImFicyIsIm5vdyIsIkRhdGUiLCJzZXRUaW1lb3V0Q29udGV4dCIsImZuIiwidGltZW91dCIsImNvbnRleHQiLCJiaW5kRm4iLCJpbnZva2VBcnJheUFyZyIsImFyZyIsImVhY2giLCJvYmoiLCJpdGVyYXRvciIsImNhbGwiLCJoYXNPd25Qcm9wZXJ0eSIsImRlcHJlY2F0ZSIsIm1ldGhvZCIsIm5hbWUiLCJtZXNzYWdlIiwiZGVwcmVjYXRpb25NZXNzYWdlIiwiRXJyb3IiLCJzdGFjayIsInJlcGxhY2UiLCJsb2ciLCJ3YXJuIiwiYXJndW1lbnRzIiwiVHlwZUVycm9yIiwib3V0cHV0IiwiaW5kZXgiLCJzb3VyY2UiLCJuZXh0S2V5IiwiZXh0ZW5kIiwiZGVzdCIsInNyYyIsIm1lcmdlIiwia2V5cyIsImluaGVyaXQiLCJjaGlsZCIsImJhc2UiLCJwcm9wZXJ0aWVzIiwiY2hpbGRQIiwiYmFzZVAiLCJwcm90b3R5cGUiLCJjcmVhdGUiLCJjb25zdHJ1Y3RvciIsIl9zdXBlciIsImJvb2xPckZuIiwidmFsIiwiYXJncyIsImlmVW5kZWZpbmVkIiwidmFsMSIsInZhbDIiLCJhZGRFdmVudExpc3RlbmVycyIsInR5cGVzIiwiaGFuZGxlciIsInNwbGl0U3RyIiwidHlwZSIsInJlbW92ZUV2ZW50TGlzdGVuZXJzIiwiaGFzUGFyZW50Iiwibm9kZSIsInBhcmVudCIsImluU3RyIiwic3RyIiwiZmluZCIsInRyaW0iLCJpbkFycmF5IiwiZmluZEJ5S2V5IiwidG9BcnJheSIsInNsaWNlIiwidW5pcXVlQXJyYXkiLCJrZXkiLCJzb3J0IiwicmVzdWx0cyIsInZhbHVlcyIsInB1c2giLCJiIiwicHJlZml4ZWQiLCJwcm9wZXJ0eSIsInByZWZpeCIsInByb3AiLCJjYW1lbFByb3AiLCJ0b1VwcGVyQ2FzZSIsIl91bmlxdWVJZCIsImdldFdpbmRvd0ZvckVsZW1lbnQiLCJlbGVtZW50IiwiZG9jIiwib3duZXJEb2N1bWVudCIsImRlZmF1bHRWaWV3IiwicGFyZW50V2luZG93IiwiU1VQUE9SVF9UT1VDSCIsIlNVUFBPUlRfUE9JTlRFUl9FVkVOVFMiLCJTVVBQT1JUX09OTFlfVE9VQ0giLCJDT01QVVRFX0lOVEVSVkFMIiwiSU5QVVRfU1RBUlQiLCJJTlBVVF9NT1ZFIiwiSU5QVVRfRU5EIiwiSU5QVVRfQ0FOQ0VMIiwiRElSRUNUSU9OX05PTkUiLCJESVJFQ1RJT05fTEVGVCIsIkRJUkVDVElPTl9SSUdIVCIsIkRJUkVDVElPTl9VUCIsIkRJUkVDVElPTl9ET1dOIiwiRElSRUNUSU9OX0hPUklaT05UQUwiLCJESVJFQ1RJT05fVkVSVElDQUwiLCJESVJFQ1RJT05fQUxMIiwiUFJPUFNfWFkiLCJQUk9QU19DTElFTlRfWFkiLCJJbnB1dCIsIm1hbmFnZXIiLCJjYWxsYmFjayIsInNlbGYiLCJpbnB1dFRhcmdldCIsImRvbUhhbmRsZXIiLCJldiIsImVuYWJsZSIsImluaXQiLCJpbnB1dEhhbmRsZXIiLCJldmVudFR5cGUiLCJpbnB1dCIsInBvaW50ZXJzTGVuIiwicG9pbnRlcnMiLCJjaGFuZ2VkUG9pbnRlcnNMZW4iLCJjaGFuZ2VkUG9pbnRlcnMiLCJpc0ZpcnN0IiwiaXNGaW5hbCIsInNlc3Npb24iLCJwb2ludGVyc0xlbmd0aCIsImZpcnN0SW5wdXQiLCJzaW1wbGVDbG9uZUlucHV0RGF0YSIsImZpcnN0TXVsdGlwbGUiLCJvZmZzZXRDZW50ZXIiLCJjZW50ZXIiLCJnZXRDZW50ZXIiLCJ0aW1lU3RhbXAiLCJkZWx0YVRpbWUiLCJhbmdsZSIsImdldEFuZ2xlIiwiZGlzdGFuY2UiLCJnZXREaXN0YW5jZSIsIm9mZnNldCIsIm9mZnNldERlbHRhIiwicHJldkRlbHRhIiwicHJldklucHV0IiwieCIsImRlbHRhWCIsInkiLCJkZWx0YVkiLCJjb21wdXRlRGVsdGFYWSIsIm9mZnNldERpcmVjdGlvbiIsImdldERpcmVjdGlvbiIsIm92ZXJhbGxWZWxvY2l0eSIsImdldFZlbG9jaXR5Iiwib3ZlcmFsbFZlbG9jaXR5WCIsIm92ZXJhbGxWZWxvY2l0eVkiLCJzY2FsZSIsInN0YXJ0IiwiZW5kIiwicm90YXRpb24iLCJnZXRSb3RhdGlvbiIsIm1heFBvaW50ZXJzIiwidmVsb2NpdHkiLCJ2ZWxvY2l0eVgiLCJ2ZWxvY2l0eVkiLCJkaXJlY3Rpb24iLCJsYXN0IiwibGFzdEludGVydmFsIiwiY29tcHV0ZUludGVydmFsSW5wdXREYXRhIiwic3JjRXZlbnQiLCJjb21wdXRlSW5wdXREYXRhIiwiZW1pdCIsInJlY29nbml6ZSIsImNsaWVudFgiLCJwMSIsInAyIiwicHJvcHMiLCJzcXJ0IiwiYXRhbjIiLCJQSSIsImV2RWwiLCJldlRhcmdldCIsImV2V2luIiwiZGVzdHJveSIsIk1PVVNFX0lOUFVUX01BUCIsIm1vdXNlZG93biIsIm1vdXNlbW92ZSIsIm1vdXNldXAiLCJNT1VTRV9FTEVNRU5UX0VWRU5UUyIsIk1PVVNFX1dJTkRPV19FVkVOVFMiLCJNb3VzZUlucHV0IiwicHJlc3NlZCIsImJ1dHRvbiIsIndoaWNoIiwicG9pbnRlclR5cGUiLCJQT0lOVEVSX0lOUFVUX01BUCIsInBvaW50ZXJkb3duIiwicG9pbnRlcm1vdmUiLCJwb2ludGVydXAiLCJwb2ludGVyY2FuY2VsIiwicG9pbnRlcm91dCIsIklFMTBfUE9JTlRFUl9UWVBFX0VOVU0iLCIyIiwiMyIsIjQiLCI1IiwiUE9JTlRFUl9FTEVNRU5UX0VWRU5UUyIsIlBPSU5URVJfV0lORE9XX0VWRU5UUyIsIlBvaW50ZXJFdmVudElucHV0Iiwic3RvcmUiLCJwb2ludGVyRXZlbnRzIiwiTVNQb2ludGVyRXZlbnQiLCJQb2ludGVyRXZlbnQiLCJyZW1vdmVQb2ludGVyIiwiZXZlbnRUeXBlTm9ybWFsaXplZCIsImlzVG91Y2giLCJzdG9yZUluZGV4IiwicG9pbnRlcklkIiwic3BsaWNlIiwiU0lOR0xFX1RPVUNIX0lOUFVUX01BUCIsInRvdWNoc3RhcnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsInRvdWNoY2FuY2VsIiwiU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFMiLCJTSU5HTEVfVE9VQ0hfV0lORE9XX0VWRU5UUyIsIlNpbmdsZVRvdWNoSW5wdXQiLCJzdGFydGVkIiwiYWxsIiwiY2hhbmdlZCIsImNoYW5nZWRUb3VjaGVzIiwiVE9VQ0hfSU5QVVRfTUFQIiwiVE9VQ0hfVEFSR0VUX0VWRU5UUyIsIlRvdWNoSW5wdXQiLCJ0YXJnZXRJZHMiLCJhbGxUb3VjaGVzIiwiaWRlbnRpZmllciIsImNoYW5nZWRUYXJnZXRUb3VjaGVzIiwidG91Y2giLCJERURVUF9USU1FT1VUIiwiREVEVVBfRElTVEFOQ0UiLCJUb3VjaE1vdXNlSW5wdXQiLCJtb3VzZSIsInByaW1hcnlUb3VjaCIsImxhc3RUb3VjaGVzIiwic2V0TGFzdFRvdWNoIiwiZXZlbnREYXRhIiwibGFzdFRvdWNoIiwibHRzIiwiaW5wdXRFdmVudCIsImlucHV0RGF0YSIsImlzTW91c2UiLCJzb3VyY2VDYXBhYmlsaXRpZXMiLCJmaXJlc1RvdWNoRXZlbnRzIiwiZHgiLCJkeSIsIlBSRUZJWEVEX1RPVUNIX0FDVElPTiIsIk5BVElWRV9UT1VDSF9BQ1RJT04iLCJUT1VDSF9BQ1RJT05fQVVUTyIsIlRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04iLCJUT1VDSF9BQ1RJT05fTk9ORSIsIlRPVUNIX0FDVElPTl9QQU5fWCIsIlRPVUNIX0FDVElPTl9QQU5fWSIsIlRPVUNIX0FDVElPTl9NQVAiLCJ0b3VjaE1hcCIsImNzc1N1cHBvcnRzIiwiQ1NTIiwic3VwcG9ydHMiLCJnZXRUb3VjaEFjdGlvblByb3BzIiwiVG91Y2hBY3Rpb24iLCJzZXQiLCJjb21wdXRlIiwiYWN0aW9ucyIsInVwZGF0ZSIsInRvdWNoQWN0aW9uIiwicmVjb2duaXplcnMiLCJyZWNvZ25pemVyIiwiZ2V0VG91Y2hBY3Rpb24iLCJoYXNQYW5YIiwiaGFzUGFuWSIsImNsZWFuVG91Y2hBY3Rpb25zIiwiam9pbiIsInByZXZlbnREZWZhdWx0cyIsInByZXZlbnRlZCIsImhhc05vbmUiLCJpc1RhcFBvaW50ZXIiLCJpc1RhcE1vdmVtZW50IiwiaXNUYXBUb3VjaFRpbWUiLCJwcmV2ZW50U3JjIiwiU1RBVEVfUE9TU0lCTEUiLCJTVEFURV9CRUdBTiIsIlNUQVRFX0NIQU5HRUQiLCJTVEFURV9FTkRFRCIsIlNUQVRFX1JFQ09HTklaRUQiLCJTVEFURV9DQU5DRUxMRUQiLCJSZWNvZ25pemVyIiwiZGVmYXVsdHMiLCJpZCIsInN0YXRlIiwic2ltdWx0YW5lb3VzIiwicmVxdWlyZUZhaWwiLCJzdGF0ZVN0ciIsImRpcmVjdGlvblN0ciIsImdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIiLCJvdGhlclJlY29nbml6ZXIiLCJnZXQiLCJBdHRyUmVjb2duaXplciIsIlBhblJlY29nbml6ZXIiLCJwWCIsInBZIiwiUGluY2hSZWNvZ25pemVyIiwiUHJlc3NSZWNvZ25pemVyIiwiX3RpbWVyIiwiX2lucHV0IiwiUm90YXRlUmVjb2duaXplciIsIlN3aXBlUmVjb2duaXplciIsIlRhcFJlY29nbml6ZXIiLCJwVGltZSIsInBDZW50ZXIiLCJjb3VudCIsIkhhbW1lciIsInByZXNldCIsIk1hbmFnZXIiLCJyZWNvZ25pemVXaXRoIiwiZHJvcFJlY29nbml6ZVdpdGgiLCJyZXF1aXJlRmFpbHVyZSIsImRyb3BSZXF1aXJlRmFpbHVyZSIsImhhc1JlcXVpcmVGYWlsdXJlcyIsImNhblJlY29nbml6ZVdpdGgiLCJhZGRpdGlvbmFsRXZlbnQiLCJ0cnlFbWl0IiwiY2FuRW1pdCIsImlucHV0RGF0YUNsb25lIiwicmVzZXQiLCJwcm9jZXNzIiwiYXR0clRlc3QiLCJvcHRpb25Qb2ludGVycyIsImlzUmVjb2duaXplZCIsImlzVmFsaWQiLCJ0aHJlc2hvbGQiLCJkaXJlY3Rpb25UZXN0IiwiaGFzTW92ZWQiLCJpbk91dCIsInRpbWUiLCJ2YWxpZFBvaW50ZXJzIiwidmFsaWRNb3ZlbWVudCIsInZhbGlkVGltZSIsImNsZWFyVGltZW91dCIsInRhcHMiLCJpbnRlcnZhbCIsInBvc1RocmVzaG9sZCIsInZhbGlkVG91Y2hUaW1lIiwiZmFpbFRpbWVvdXQiLCJ2YWxpZEludGVydmFsIiwidmFsaWRNdWx0aVRhcCIsInRhcENvdW50IiwiVkVSU0lPTiIsImRvbUV2ZW50cyIsImlucHV0Q2xhc3MiLCJjc3NQcm9wcyIsInVzZXJTZWxlY3QiLCJ0b3VjaFNlbGVjdCIsInRvdWNoQ2FsbG91dCIsImNvbnRlbnRab29taW5nIiwidXNlckRyYWciLCJ0YXBIaWdobGlnaHRDb2xvciIsImhhbmRsZXJzIiwib2xkQ3NzUHJvcHMiLCJ0b2dnbGVDc3NQcm9wcyIsIml0ZW0iLCJhZGQiLCJzdG9wIiwiZm9yY2UiLCJzdG9wcGVkIiwiY3VyUmVjb2duaXplciIsImV4aXN0aW5nIiwicmVtb3ZlIiwib24iLCJldmVudHMiLCJvZmYiLCJkYXRhIiwiZ2VzdHVyZUV2ZW50IiwiY3JlYXRlRXZlbnQiLCJpbml0RXZlbnQiLCJnZXN0dXJlIiwiZGlzcGF0Y2hFdmVudCIsInRyaWdnZXJEb21FdmVudCIsIlNUQVRFX0ZBSUxFRCIsIlRhcCIsIlBhbiIsIlN3aXBlIiwiUGluY2giLCJSb3RhdGUiLCJQcmVzcyIsIl9fd2VicGFja19yZXF1aXJlX18iXSwibWFwcGluZ3MiOiJ3SUFBQSxXQUFZLGFBQWEsdUJBQUFBLE9BQUEsQ0FBK0IsSUFBQUMsRUFBQUQsT0FBQUUsVUFBQUMsVUFBQUMsTUFBQSxtQkFBb0RDLElBQUFKLEdBQUEsSUFBQUssU0FBQUwsRUFBQSxPQUFtQyxpQkFBQU0sU0FBQUMsZ0JBQUFDLE9BQUEsR0FBQUosRUFBQSxDQUEyRCxJQUFBSyxFQUFBLFNBQUFULEVBQUFVLEVBQUFDLEdBQXNCLElBQUFQLEVBQUFLLEVBQUFHLEVBQUFDLEVBQUFDLEVBQWMsSUFBQUgsSUFBQUksTUFBQSxNQUFBQyxPQUFBLElBQUFMLEVBQUEsR0FBQUEsRUFBQSxVQUFBWCxFQUFBSSxFQUFBTyxFQUFBLEdBQUFGLEVBQUFFLEVBQUEsR0FBQUMsRUFBQSxPQUFBQyxFQUFBLFFBQUFDLEVBQUFKLEVBQUFPLGdCQUFtRyxDQUFLLFNBQUFqQixFQUFBLE9BQWtCSSxFQUFBTyxFQUFBLEdBQUFGLEVBQUFFLEVBQUEsR0FBQUMsRUFBQSxNQUFBQyxFQUFBLFNBQUFDLEVBQUFKLEVBQUFRLGFBQWtELEdBQUFkLElBQUFRLEdBQUFILElBQUFHLEVBQUEsQ0FBaUIsR0FBQVIsSUFBQVMsR0FBQUosSUFBQUksRUFBQSxpQkFBQVQsR0FBQSxRQUFBQSxHQUFBTSxFQUFBRixNQUFBSSxHQUFBLFdBQUFGLEVBQUFGLE1BQUEsVUFBQUksR0FBQUUsR0FBQSxpQkFBQVYsRUFBQWUsUUFBQSxNQUFBZixFQUFBQyxTQUFBRCxJQUFBLElBQUFNLEVBQUFGLE1B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QUMsdUJBQ0FDLHFCQUNBQyxnQkFFQXdOLFdBQ0FyTixTQUNBZ0ssZUFFQXBDLGNBQ0EzQyxjQUNBa0IscUJBQ0FpQyxtQkFDQWYsb0JBRUFxRSxjQUNBVyxrQkFDQWtGLElBQUF4RSxHQUNBeUUsSUFBQWxGLEdBQ0FtRixNQUFBM0UsR0FDQTRFLE1BQUFqRixHQUNBa0YsT0FBQTlFLEdBQ0ErRSxNQUFBbEYsR0FFQWtFLEdBQUFuVSxFQUNBcVUsSUFBQWhVLEVBQ0EvQyxPQUNBd0IsUUFDQUgsU0FDQXRDLFNBQ0EyQyxVQUNBN0IsU0FDQXFFLG1CQUtBLElBQUFqTSxJQUFBLG9CQUFBbU8sVUFBQSxJQUNBZ04sV0FHSXhYLEVBQUEsV0FDSixPQUFBd1gsSUFDS2pULEtBQUF0RSxFQUFBaWMsRUFBQWpjLEVBQUFnRCxNQUFBL0MsSUFBQStDLEVBQUFoRCxRQUFBRCxHQXRrRkwsQ0E2a0ZDM0QsT0FBQU8iLCJmaWxlIjoiL2pzL3NpdGUvdmVuZG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyl7dmFyIHQ9d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0VkZ2VcXC8oXFxkezJ9KVxcLi8pLG49ISF0JiYxNjw9cGFyc2VJbnQodFsxXSwxMCk7aWYoIShcIm9iamVjdEZpdFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlIT0hMSl8fG4pe3ZhciBvPWZ1bmN0aW9uKHQsZSxpKXt2YXIgbixvLGwsYSxkO2lmKChpPWkuc3BsaXQoXCIgXCIpKS5sZW5ndGg8MiYmKGlbMV09aVswXSksXCJ4XCI9PT10KW49aVswXSxvPWlbMV0sbD1cImxlZnRcIixhPVwicmlnaHRcIixkPWUuY2xpZW50V2lkdGg7ZWxzZXtpZihcInlcIiE9PXQpcmV0dXJuO249aVsxXSxvPWlbMF0sbD1cInRvcFwiLGE9XCJib3R0b21cIixkPWUuY2xpZW50SGVpZ2h0fWlmKG4hPT1sJiZvIT09bCl7aWYobiE9PWEmJm8hPT1hKXJldHVyblwiY2VudGVyXCI9PT1ufHxcIjUwJVwiPT09bj8oZS5zdHlsZVtsXT1cIjUwJVwiLHZvaWQoZS5zdHlsZVtcIm1hcmdpbi1cIitsXT1kLy0yK1wicHhcIikpOnZvaWQoMDw9bi5pbmRleE9mKFwiJVwiKT8obj1wYXJzZUludChuKSk8NTA/KGUuc3R5bGVbbF09bitcIiVcIixlLnN0eWxlW1wibWFyZ2luLVwiK2xdPWQqKG4vLTEwMCkrXCJweFwiKToobj0xMDAtbixlLnN0eWxlW2FdPW4rXCIlXCIsZS5zdHlsZVtcIm1hcmdpbi1cIithXT1kKihuLy0xMDApK1wicHhcIik6ZS5zdHlsZVtsXT1uKTtlLnN0eWxlW2FdPVwiMFwifWVsc2UgZS5zdHlsZVtsXT1cIjBcIn0sbD1mdW5jdGlvbih0KXt2YXIgZT10LmRhdGFzZXQ/dC5kYXRhc2V0Lm9iamVjdEZpdDp0LmdldEF0dHJpYnV0ZShcImRhdGEtb2JqZWN0LWZpdFwiKSxpPXQuZGF0YXNldD90LmRhdGFzZXQub2JqZWN0UG9zaXRpb246dC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9iamVjdC1wb3NpdGlvblwiKTtlPWV8fFwiY292ZXJcIixpPWl8fFwiNTAlIDUwJVwiO3ZhciBuPXQucGFyZW50Tm9kZTtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKSxpPWUuZ2V0UHJvcGVydHlWYWx1ZShcInBvc2l0aW9uXCIpLG49ZS5nZXRQcm9wZXJ0eVZhbHVlKFwib3ZlcmZsb3dcIiksbz1lLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpO2kmJlwic3RhdGljXCIhPT1pfHwodC5zdHlsZS5wb3NpdGlvbj1cInJlbGF0aXZlXCIpLFwiaGlkZGVuXCIhPT1uJiYodC5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwiKSxvJiZcImlubGluZVwiIT09b3x8KHQuc3R5bGUuZGlzcGxheT1cImJsb2NrXCIpLDA9PT10LmNsaWVudEhlaWdodCYmKHQuc3R5bGUuaGVpZ2h0PVwiMTAwJVwiKSwtMT09PXQuY2xhc3NOYW1lLmluZGV4T2YoXCJvYmplY3QtZml0LXBvbHlmaWxsXCIpJiYodC5jbGFzc05hbWU9dC5jbGFzc05hbWUrXCIgb2JqZWN0LWZpdC1wb2x5ZmlsbFwiKX0obiksZnVuY3Rpb24odCl7dmFyIGU9d2luZG93LmdldENvbXB1dGVkU3R5bGUodCxudWxsKSxpPXtcIm1heC13aWR0aFwiOlwibm9uZVwiLFwibWF4LWhlaWdodFwiOlwibm9uZVwiLFwibWluLXdpZHRoXCI6XCIwcHhcIixcIm1pbi1oZWlnaHRcIjpcIjBweFwiLHRvcDpcImF1dG9cIixyaWdodDpcImF1dG9cIixib3R0b206XCJhdXRvXCIsbGVmdDpcImF1dG9cIixcIm1hcmdpbi10b3BcIjpcIjBweFwiLFwibWFyZ2luLXJpZ2h0XCI6XCIwcHhcIixcIm1hcmdpbi1ib3R0b21cIjpcIjBweFwiLFwibWFyZ2luLWxlZnRcIjpcIjBweFwifTtmb3IodmFyIG4gaW4gaSllLmdldFByb3BlcnR5VmFsdWUobikhPT1pW25dJiYodC5zdHlsZVtuXT1pW25dKX0odCksdC5zdHlsZS5wb3NpdGlvbj1cImFic29sdXRlXCIsdC5zdHlsZS53aWR0aD1cImF1dG9cIix0LnN0eWxlLmhlaWdodD1cImF1dG9cIixcInNjYWxlLWRvd25cIj09PWUmJihlPXQuY2xpZW50V2lkdGg8bi5jbGllbnRXaWR0aCYmdC5jbGllbnRIZWlnaHQ8bi5jbGllbnRIZWlnaHQ/XCJub25lXCI6XCJjb250YWluXCIpLFwibm9uZVwiPT09ZT8obyhcInhcIix0LGkpLHZvaWQgbyhcInlcIix0LGkpKTpcImZpbGxcIj09PWU/KHQuc3R5bGUud2lkdGg9XCIxMDAlXCIsdC5zdHlsZS5oZWlnaHQ9XCIxMDAlXCIsbyhcInhcIix0LGkpLHZvaWQgbyhcInlcIix0LGkpKToodC5zdHlsZS5oZWlnaHQ9XCIxMDAlXCIsdm9pZChcImNvdmVyXCI9PT1lJiZ0LmNsaWVudFdpZHRoPm4uY2xpZW50V2lkdGh8fFwiY29udGFpblwiPT09ZSYmdC5jbGllbnRXaWR0aDxuLmNsaWVudFdpZHRoPyh0LnN0eWxlLnRvcD1cIjBcIix0LnN0eWxlLm1hcmdpblRvcD1cIjBcIixvKFwieFwiLHQsaSkpOih0LnN0eWxlLndpZHRoPVwiMTAwJVwiLHQuc3R5bGUuaGVpZ2h0PVwiYXV0b1wiLHQuc3R5bGUubGVmdD1cIjBcIix0LnN0eWxlLm1hcmdpbkxlZnQ9XCIwXCIsbyhcInlcIix0LGkpKSkpfSxlPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PXR8fHQgaW5zdGFuY2VvZiBFdmVudCl0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vYmplY3QtZml0XVwiKTtlbHNlIGlmKHQmJnQubm9kZU5hbWUpdD1bdF07ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2YgdHx8IXQubGVuZ3RofHwhdFswXS5ub2RlTmFtZSlyZXR1cm4hMTt0PXR9Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspaWYodFtlXS5ub2RlTmFtZSl7dmFyIGk9dFtlXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKFwiaW1nXCI9PT1pKXtpZihuKWNvbnRpbnVlO3RbZV0uY29tcGxldGU/bCh0W2VdKTp0W2VdLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsZnVuY3Rpb24oKXtsKHRoaXMpfSl9ZWxzZVwidmlkZW9cIj09PWk/MDx0W2VdLnJlYWR5U3RhdGU/bCh0W2VdKTp0W2VdLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkZWRtZXRhZGF0YVwiLGZ1bmN0aW9uKCl7bCh0aGlzKX0pOmwodFtlXSl9cmV0dXJuITB9O1wibG9hZGluZ1wiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZT9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLGUpOmUoKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLGUpLHdpbmRvdy5vYmplY3RGaXRQb2x5ZmlsbD1lfWVsc2Ugd2luZG93Lm9iamVjdEZpdFBvbHlmaWxsPWZ1bmN0aW9uKCl7cmV0dXJuITF9fX0oKTsiLCIhZnVuY3Rpb24oZSx0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtcImV4cG9ydHNcIl0sdCk7ZWxzZSBpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgZXhwb3J0cyl0KGV4cG9ydHMpO2Vsc2V7dmFyIG89e307dChvKSxlLmJvZHlTY3JvbGxMb2NrPW99fSh0aGlzLGZ1bmN0aW9uKGV4cG9ydHMpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIoZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAsbz1BcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspb1t0XT1lW3RdO3JldHVybiBvfXJldHVybiBBcnJheS5mcm9tKGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBsPSExO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cpe3ZhciBlPXtnZXQgcGFzc2l2ZSgpe2w9ITB9fTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInRlc3RQYXNzaXZlXCIsbnVsbCxlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRlc3RQYXNzaXZlXCIsbnVsbCxlKX12YXIgZD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cubmF2aWdhdG9yJiZ3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtJiYvaVAoYWR8aG9uZXxvZCkvLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSksYz1bXSx1PSExLGE9LTEscz12b2lkIDAsdj12b2lkIDAsZj1mdW5jdGlvbih0KXtyZXR1cm4gYy5zb21lKGZ1bmN0aW9uKGUpe3JldHVybiEoIWUub3B0aW9ucy5hbGxvd1RvdWNoTW92ZXx8IWUub3B0aW9ucy5hbGxvd1RvdWNoTW92ZSh0KSl9KX0sbT1mdW5jdGlvbihlKXt2YXIgdD1lfHx3aW5kb3cuZXZlbnQ7cmV0dXJuISFmKHQudGFyZ2V0KXx8KDE8dC50b3VjaGVzLmxlbmd0aHx8KHQucHJldmVudERlZmF1bHQmJnQucHJldmVudERlZmF1bHQoKSwhMSkpfSxvPWZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3ZvaWQgMCE9PXYmJihkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD12LHY9dm9pZCAwKSx2b2lkIDAhPT1zJiYoZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz1zLHM9dm9pZCAwKX0pfTtleHBvcnRzLmRpc2FibGVCb2R5U2Nyb2xsPWZ1bmN0aW9uKGksZSl7aWYoZCl7aWYoIWkpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcImRpc2FibGVCb2R5U2Nyb2xsIHVuc3VjY2Vzc2Z1bCAtIHRhcmdldEVsZW1lbnQgbXVzdCBiZSBwcm92aWRlZCB3aGVuIGNhbGxpbmcgZGlzYWJsZUJvZHlTY3JvbGwgb24gSU9TIGRldmljZXMuXCIpO2lmKGkmJiFjLnNvbWUoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0RWxlbWVudD09PWl9KSl7dmFyIHQ9e3RhcmdldEVsZW1lbnQ6aSxvcHRpb25zOmV8fHt9fTtjPVtdLmNvbmNhdChyKGMpLFt0XSksaS5vbnRvdWNoc3RhcnQ9ZnVuY3Rpb24oZSl7MT09PWUudGFyZ2V0VG91Y2hlcy5sZW5ndGgmJihhPWUudGFyZ2V0VG91Y2hlc1swXS5jbGllbnRZKX0saS5vbnRvdWNobW92ZT1mdW5jdGlvbihlKXt2YXIgdCxvLG4scjsxPT09ZS50YXJnZXRUb3VjaGVzLmxlbmd0aCYmKG89aSxyPSh0PWUpLnRhcmdldFRvdWNoZXNbMF0uY2xpZW50WS1hLCFmKHQudGFyZ2V0KSYmKG8mJjA9PT1vLnNjcm9sbFRvcCYmMDxyP20odCk6KG49bykmJm4uc2Nyb2xsSGVpZ2h0LW4uc2Nyb2xsVG9wPD1uLmNsaWVudEhlaWdodCYmcjwwP20odCk6dC5zdG9wUHJvcGFnYXRpb24oKSkpfSx1fHwoZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLG0sbD97cGFzc2l2ZTohMX06dm9pZCAwKSx1PSEwKX19ZWxzZXtuPWUsc2V0VGltZW91dChmdW5jdGlvbigpe2lmKHZvaWQgMD09PXYpe3ZhciBlPSEhbiYmITA9PT1uLnJlc2VydmVTY3JvbGxCYXJHYXAsdD13aW5kb3cuaW5uZXJXaWR0aC1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7ZSYmMDx0JiYodj1kb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodCxkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD10K1wicHhcIil9dm9pZCAwPT09cyYmKHM9ZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyxkb2N1bWVudC5ib2R5LnN0eWxlLm92ZXJmbG93PVwiaGlkZGVuXCIpfSk7dmFyIG89e3RhcmdldEVsZW1lbnQ6aSxvcHRpb25zOmV8fHt9fTtjPVtdLmNvbmNhdChyKGMpLFtvXSl9dmFyIG59LGV4cG9ydHMuY2xlYXJBbGxCb2R5U2Nyb2xsTG9ja3M9ZnVuY3Rpb24oKXtkPyhjLmZvckVhY2goZnVuY3Rpb24oZSl7ZS50YXJnZXRFbGVtZW50Lm9udG91Y2hzdGFydD1udWxsLGUudGFyZ2V0RWxlbWVudC5vbnRvdWNobW92ZT1udWxsfSksdSYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIixtLGw/e3Bhc3NpdmU6ITF9OnZvaWQgMCksdT0hMSksYz1bXSxhPS0xKToobygpLGM9W10pfSxleHBvcnRzLmVuYWJsZUJvZHlTY3JvbGw9ZnVuY3Rpb24odCl7aWYoZCl7aWYoIXQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihcImVuYWJsZUJvZHlTY3JvbGwgdW5zdWNjZXNzZnVsIC0gdGFyZ2V0RWxlbWVudCBtdXN0IGJlIHByb3ZpZGVkIHdoZW4gY2FsbGluZyBlbmFibGVCb2R5U2Nyb2xsIG9uIElPUyBkZXZpY2VzLlwiKTt0Lm9udG91Y2hzdGFydD1udWxsLHQub250b3VjaG1vdmU9bnVsbCxjPWMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRhcmdldEVsZW1lbnQhPT10fSksdSYmMD09PWMubGVuZ3RoJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLG0sbD97cGFzc2l2ZTohMX06dm9pZCAwKSx1PSExKX1lbHNlKGM9Yy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGFyZ2V0RWxlbWVudCE9PXR9KSkubGVuZ3RofHxvKCl9fSk7XG4iLCIvKiEgSGFtbWVyLkpTIC0gdjIuMC43IC0gMjAxNi0wNC0yMlxuICogaHR0cDovL2hhbW1lcmpzLmdpdGh1Yi5pby9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYgSm9yaWsgVGFuZ2VsZGVyO1xuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlICovXG4oZnVuY3Rpb24od2luZG93LCBkb2N1bWVudCwgZXhwb3J0TmFtZSwgdW5kZWZpbmVkKSB7XG4gICd1c2Ugc3RyaWN0JztcblxudmFyIFZFTkRPUl9QUkVGSVhFUyA9IFsnJywgJ3dlYmtpdCcsICdNb3onLCAnTVMnLCAnbXMnLCAnbyddO1xudmFyIFRFU1RfRUxFTUVOVCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuXG52YXIgVFlQRV9GVU5DVElPTiA9ICdmdW5jdGlvbic7XG5cbnZhciByb3VuZCA9IE1hdGgucm91bmQ7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgbm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogc2V0IGEgdGltZW91dCB3aXRoIGEgZ2l2ZW4gc2NvcGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gdGltZW91dFxuICogQHBhcmFtIHtPYmplY3R9IGNvbnRleHRcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIHNldFRpbWVvdXRDb250ZXh0KGZuLCB0aW1lb3V0LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIHNldFRpbWVvdXQoYmluZEZuKGZuLCBjb250ZXh0KSwgdGltZW91dCk7XG59XG5cbi8qKlxuICogaWYgdGhlIGFyZ3VtZW50IGlzIGFuIGFycmF5LCB3ZSB3YW50IHRvIGV4ZWN1dGUgdGhlIGZuIG9uIGVhY2ggZW50cnlcbiAqIGlmIGl0IGFpbnQgYW4gYXJyYXkgd2UgZG9uJ3Qgd2FudCB0byBkbyBhIHRoaW5nLlxuICogdGhpcyBpcyB1c2VkIGJ5IGFsbCB0aGUgbWV0aG9kcyB0aGF0IGFjY2VwdCBhIHNpbmdsZSBhbmQgYXJyYXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp8QXJyYXl9IGFyZ1xuICogQHBhcmFtIHtTdHJpbmd9IGZuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbnRleHRdXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaW52b2tlQXJyYXlBcmcoYXJnLCBmbiwgY29udGV4dCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgZWFjaChhcmcsIGNvbnRleHRbZm5dLCBjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiB3YWxrIG9iamVjdHMgYW5kIGFycmF5c1xuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGVhY2gob2JqLCBpdGVyYXRvciwgY29udGV4dCkge1xuICAgIHZhciBpO1xuXG4gICAgaWYgKCFvYmopIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChvYmouZm9yRWFjaCkge1xuICAgICAgICBvYmouZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCk7XG4gICAgfSBlbHNlIGlmIChvYmoubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgb2JqLmxlbmd0aCkge1xuICAgICAgICAgICAgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICAgICAgICBvYmouaGFzT3duUHJvcGVydHkoaSkgJiYgaXRlcmF0b3IuY2FsbChjb250ZXh0LCBvYmpbaV0sIGksIG9iaik7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogd3JhcCBhIG1ldGhvZCB3aXRoIGEgZGVwcmVjYXRpb24gd2FybmluZyBhbmQgc3RhY2sgdHJhY2VcbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1ldGhvZFxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IEEgbmV3IGZ1bmN0aW9uIHdyYXBwaW5nIHRoZSBzdXBwbGllZCBtZXRob2QuXG4gKi9cbmZ1bmN0aW9uIGRlcHJlY2F0ZShtZXRob2QsIG5hbWUsIG1lc3NhZ2UpIHtcbiAgICB2YXIgZGVwcmVjYXRpb25NZXNzYWdlID0gJ0RFUFJFQ0FURUQgTUVUSE9EOiAnICsgbmFtZSArICdcXG4nICsgbWVzc2FnZSArICcgQVQgXFxuJztcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBlID0gbmV3IEVycm9yKCdnZXQtc3RhY2stdHJhY2UnKTtcbiAgICAgICAgdmFyIHN0YWNrID0gZSAmJiBlLnN0YWNrID8gZS5zdGFjay5yZXBsYWNlKC9eW15cXChdKz9bXFxuJF0vZ20sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHMrYXRcXHMrL2dtLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eT2JqZWN0Ljxhbm9ueW1vdXM+XFxzKlxcKC9nbSwgJ3thbm9ueW1vdXN9KClAJykgOiAnVW5rbm93biBTdGFjayBUcmFjZSc7XG5cbiAgICAgICAgdmFyIGxvZyA9IHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS53YXJuIHx8IHdpbmRvdy5jb25zb2xlLmxvZyk7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICAgIGxvZy5jYWxsKHdpbmRvdy5jb25zb2xlLCBkZXByZWNhdGlvbk1lc3NhZ2UsIHN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWV0aG9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn1cblxuLyoqXG4gKiBleHRlbmQgb2JqZWN0LlxuICogbWVhbnMgdGhhdCBwcm9wZXJ0aWVzIGluIGRlc3Qgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgb25lcyBpbiBzcmMuXG4gKiBAcGFyYW0ge09iamVjdH0gdGFyZ2V0XG4gKiBAcGFyYW0gey4uLk9iamVjdH0gb2JqZWN0c190b19hc3NpZ25cbiAqIEByZXR1cm5zIHtPYmplY3R9IHRhcmdldFxuICovXG52YXIgYXNzaWduO1xuaWYgKHR5cGVvZiBPYmplY3QuYXNzaWduICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgYXNzaWduID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCkge1xuICAgICAgICBpZiAodGFyZ2V0ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAxOyBpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHNvdXJjZSAhPT0gdW5kZWZpbmVkICYmIHNvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIG5leHRLZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UuaGFzT3duUHJvcGVydHkobmV4dEtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtuZXh0S2V5XSA9IHNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH07XG59IGVsc2Uge1xuICAgIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG59XG5cbi8qKlxuICogZXh0ZW5kIG9iamVjdC5cbiAqIG1lYW5zIHRoYXQgcHJvcGVydGllcyBpbiBkZXN0IHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG9uZXMgaW4gc3JjLlxuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW21lcmdlPWZhbHNlXVxuICogQHJldHVybnMge09iamVjdH0gZGVzdFxuICovXG52YXIgZXh0ZW5kID0gZGVwcmVjYXRlKGZ1bmN0aW9uIGV4dGVuZChkZXN0LCBzcmMsIG1lcmdlKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhzcmMpO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGtleXMubGVuZ3RoKSB7XG4gICAgICAgIGlmICghbWVyZ2UgfHwgKG1lcmdlICYmIGRlc3Rba2V5c1tpXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICAgIGRlc3Rba2V5c1tpXV0gPSBzcmNba2V5c1tpXV07XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4gZGVzdDtcbn0sICdleHRlbmQnLCAnVXNlIGBhc3NpZ25gLicpO1xuXG4vKipcbiAqIG1lcmdlIHRoZSB2YWx1ZXMgZnJvbSBzcmMgaW4gdGhlIGRlc3QuXG4gKiBtZWFucyB0aGF0IHByb3BlcnRpZXMgdGhhdCBleGlzdCBpbiBkZXN0IHdpbGwgbm90IGJlIG92ZXJ3cml0dGVuIGJ5IHNyY1xuICogQHBhcmFtIHtPYmplY3R9IGRlc3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzcmNcbiAqIEByZXR1cm5zIHtPYmplY3R9IGRlc3RcbiAqL1xudmFyIG1lcmdlID0gZGVwcmVjYXRlKGZ1bmN0aW9uIG1lcmdlKGRlc3QsIHNyYykge1xuICAgIHJldHVybiBleHRlbmQoZGVzdCwgc3JjLCB0cnVlKTtcbn0sICdtZXJnZScsICdVc2UgYGFzc2lnbmAuJyk7XG5cbi8qKlxuICogc2ltcGxlIGNsYXNzIGluaGVyaXRhbmNlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjaGlsZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gYmFzZVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzXVxuICovXG5mdW5jdGlvbiBpbmhlcml0KGNoaWxkLCBiYXNlLCBwcm9wZXJ0aWVzKSB7XG4gICAgdmFyIGJhc2VQID0gYmFzZS5wcm90b3R5cGUsXG4gICAgICAgIGNoaWxkUDtcblxuICAgIGNoaWxkUCA9IGNoaWxkLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYmFzZVApO1xuICAgIGNoaWxkUC5jb25zdHJ1Y3RvciA9IGNoaWxkO1xuICAgIGNoaWxkUC5fc3VwZXIgPSBiYXNlUDtcblxuICAgIGlmIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgIGFzc2lnbihjaGlsZFAsIHByb3BlcnRpZXMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBzaW1wbGUgZnVuY3Rpb24gYmluZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGJpbmRGbihmbiwgY29udGV4dCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBib3VuZEZuKCkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkoY29udGV4dCwgYXJndW1lbnRzKTtcbiAgICB9O1xufVxuXG4vKipcbiAqIGxldCBhIGJvb2xlYW4gdmFsdWUgYWxzbyBiZSBhIGZ1bmN0aW9uIHRoYXQgbXVzdCByZXR1cm4gYSBib29sZWFuXG4gKiB0aGlzIGZpcnN0IGl0ZW0gaW4gYXJncyB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRleHRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxGdW5jdGlvbn0gdmFsXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnc11cbiAqIEByZXR1cm5zIHtCb29sZWFufVxuICovXG5mdW5jdGlvbiBib29sT3JGbih2YWwsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIHZhbCA9PSBUWVBFX0ZVTkNUSU9OKSB7XG4gICAgICAgIHJldHVybiB2YWwuYXBwbHkoYXJncyA/IGFyZ3NbMF0gfHwgdW5kZWZpbmVkIDogdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiB1c2UgdGhlIHZhbDIgd2hlbiB2YWwxIGlzIHVuZGVmaW5lZFxuICogQHBhcmFtIHsqfSB2YWwxXG4gKiBAcGFyYW0geyp9IHZhbDJcbiAqIEByZXR1cm5zIHsqfVxuICovXG5mdW5jdGlvbiBpZlVuZGVmaW5lZCh2YWwxLCB2YWwyKSB7XG4gICAgcmV0dXJuICh2YWwxID09PSB1bmRlZmluZWQpID8gdmFsMiA6IHZhbDE7XG59XG5cbi8qKlxuICogYWRkRXZlbnRMaXN0ZW5lciB3aXRoIG11bHRpcGxlIGV2ZW50cyBhdCBvbmNlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICovXG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVycyh0YXJnZXQsIHR5cGVzLCBoYW5kbGVyKSB7XG4gICAgZWFjaChzcGxpdFN0cih0eXBlcyksIGZ1bmN0aW9uKHR5cGUpIHtcbiAgICAgICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIHJlbW92ZUV2ZW50TGlzdGVuZXIgd2l0aCBtdWx0aXBsZSBldmVudHMgYXQgb25jZVxuICogQHBhcmFtIHtFdmVudFRhcmdldH0gdGFyZ2V0XG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXJcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGFyZ2V0LCB0eXBlcywgaGFuZGxlcikge1xuICAgIGVhY2goc3BsaXRTdHIodHlwZXMpLCBmdW5jdGlvbih0eXBlKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBmaW5kIGlmIGEgbm9kZSBpcyBpbiB0aGUgZ2l2ZW4gcGFyZW50XG4gKiBAbWV0aG9kIGhhc1BhcmVudFxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gcGFyZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufSBmb3VuZFxuICovXG5mdW5jdGlvbiBoYXNQYXJlbnQobm9kZSwgcGFyZW50KSB7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgPT0gcGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogc21hbGwgaW5kZXhPZiB3cmFwcGVyXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gZmluZFxuICogQHJldHVybnMge0Jvb2xlYW59IGZvdW5kXG4gKi9cbmZ1bmN0aW9uIGluU3RyKHN0ciwgZmluZCkge1xuICAgIHJldHVybiBzdHIuaW5kZXhPZihmaW5kKSA+IC0xO1xufVxuXG4vKipcbiAqIHNwbGl0IHN0cmluZyBvbiB3aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7QXJyYXl9IHdvcmRzXG4gKi9cbmZ1bmN0aW9uIHNwbGl0U3RyKHN0cikge1xuICAgIHJldHVybiBzdHIudHJpbSgpLnNwbGl0KC9cXHMrL2cpO1xufVxuXG4vKipcbiAqIGZpbmQgaWYgYSBhcnJheSBjb250YWlucyB0aGUgb2JqZWN0IHVzaW5nIGluZGV4T2Ygb3IgYSBzaW1wbGUgcG9seUZpbGxcbiAqIEBwYXJhbSB7QXJyYXl9IHNyY1xuICogQHBhcmFtIHtTdHJpbmd9IGZpbmRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmluZEJ5S2V5XVxuICogQHJldHVybiB7Qm9vbGVhbnxOdW1iZXJ9IGZhbHNlIHdoZW4gbm90IGZvdW5kLCBvciB0aGUgaW5kZXhcbiAqL1xuZnVuY3Rpb24gaW5BcnJheShzcmMsIGZpbmQsIGZpbmRCeUtleSkge1xuICAgIGlmIChzcmMuaW5kZXhPZiAmJiAhZmluZEJ5S2V5KSB7XG4gICAgICAgIHJldHVybiBzcmMuaW5kZXhPZihmaW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKChmaW5kQnlLZXkgJiYgc3JjW2ldW2ZpbmRCeUtleV0gPT0gZmluZCkgfHwgKCFmaW5kQnlLZXkgJiYgc3JjW2ldID09PSBmaW5kKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG59XG5cbi8qKlxuICogY29udmVydCBhcnJheS1saWtlIG9iamVjdHMgdG8gcmVhbCBhcnJheXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqLCAwKTtcbn1cblxuLyoqXG4gKiB1bmlxdWUgYXJyYXkgd2l0aCBvYmplY3RzIGJhc2VkIG9uIGEga2V5IChsaWtlICdpZCcpIG9yIGp1c3QgYnkgdGhlIGFycmF5J3MgdmFsdWVcbiAqIEBwYXJhbSB7QXJyYXl9IHNyYyBbe2lkOjF9LHtpZDoyfSx7aWQ6MX1dXG4gKiBAcGFyYW0ge1N0cmluZ30gW2tleV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW3NvcnQ9RmFsc2VdXG4gKiBAcmV0dXJucyB7QXJyYXl9IFt7aWQ6MX0se2lkOjJ9XVxuICovXG5mdW5jdGlvbiB1bmlxdWVBcnJheShzcmMsIGtleSwgc29ydCkge1xuICAgIHZhciByZXN1bHRzID0gW107XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgc3JjLmxlbmd0aCkge1xuICAgICAgICB2YXIgdmFsID0ga2V5ID8gc3JjW2ldW2tleV0gOiBzcmNbaV07XG4gICAgICAgIGlmIChpbkFycmF5KHZhbHVlcywgdmFsKSA8IDApIHtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChzcmNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlc1tpXSA9IHZhbDtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIGlmIChzb3J0KSB7XG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cy5zb3J0KGZ1bmN0aW9uIHNvcnRVbmlxdWVBcnJheShhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFba2V5XSA+IGJba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogZ2V0IHRoZSBwcmVmaXhlZCBwcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHtTdHJpbmd9IHByb3BlcnR5XG4gKiBAcmV0dXJucyB7U3RyaW5nfFVuZGVmaW5lZH0gcHJlZml4ZWRcbiAqL1xuZnVuY3Rpb24gcHJlZml4ZWQob2JqLCBwcm9wZXJ0eSkge1xuICAgIHZhciBwcmVmaXgsIHByb3A7XG4gICAgdmFyIGNhbWVsUHJvcCA9IHByb3BlcnR5WzBdLnRvVXBwZXJDYXNlKCkgKyBwcm9wZXJ0eS5zbGljZSgxKTtcblxuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IFZFTkRPUl9QUkVGSVhFUy5sZW5ndGgpIHtcbiAgICAgICAgcHJlZml4ID0gVkVORE9SX1BSRUZJWEVTW2ldO1xuICAgICAgICBwcm9wID0gKHByZWZpeCkgPyBwcmVmaXggKyBjYW1lbFByb3AgOiBwcm9wZXJ0eTtcblxuICAgICAgICBpZiAocHJvcCBpbiBvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBnZXQgYSB1bmlxdWUgaWRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHVuaXF1ZUlkXG4gKi9cbnZhciBfdW5pcXVlSWQgPSAxO1xuZnVuY3Rpb24gdW5pcXVlSWQoKSB7XG4gICAgcmV0dXJuIF91bmlxdWVJZCsrO1xufVxuXG4vKipcbiAqIGdldCB0aGUgd2luZG93IG9iamVjdCBvZiBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJucyB7RG9jdW1lbnRWaWV3fFdpbmRvd31cbiAqL1xuZnVuY3Rpb24gZ2V0V2luZG93Rm9yRWxlbWVudChlbGVtZW50KSB7XG4gICAgdmFyIGRvYyA9IGVsZW1lbnQub3duZXJEb2N1bWVudCB8fCBlbGVtZW50O1xuICAgIHJldHVybiAoZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3cgfHwgd2luZG93KTtcbn1cblxudmFyIE1PQklMRV9SRUdFWCA9IC9tb2JpbGV8dGFibGV0fGlwKGFkfGhvbmV8b2QpfGFuZHJvaWQvaTtcblxudmFyIFNVUFBPUlRfVE9VQ0ggPSAoJ29udG91Y2hzdGFydCcgaW4gd2luZG93KTtcbnZhciBTVVBQT1JUX1BPSU5URVJfRVZFTlRTID0gcHJlZml4ZWQod2luZG93LCAnUG9pbnRlckV2ZW50JykgIT09IHVuZGVmaW5lZDtcbnZhciBTVVBQT1JUX09OTFlfVE9VQ0ggPSBTVVBQT1JUX1RPVUNIICYmIE1PQklMRV9SRUdFWC50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG52YXIgSU5QVVRfVFlQRV9UT1VDSCA9ICd0b3VjaCc7XG52YXIgSU5QVVRfVFlQRV9QRU4gPSAncGVuJztcbnZhciBJTlBVVF9UWVBFX01PVVNFID0gJ21vdXNlJztcbnZhciBJTlBVVF9UWVBFX0tJTkVDVCA9ICdraW5lY3QnO1xuXG52YXIgQ09NUFVURV9JTlRFUlZBTCA9IDI1O1xuXG52YXIgSU5QVVRfU1RBUlQgPSAxO1xudmFyIElOUFVUX01PVkUgPSAyO1xudmFyIElOUFVUX0VORCA9IDQ7XG52YXIgSU5QVVRfQ0FOQ0VMID0gODtcblxudmFyIERJUkVDVElPTl9OT05FID0gMTtcbnZhciBESVJFQ1RJT05fTEVGVCA9IDI7XG52YXIgRElSRUNUSU9OX1JJR0hUID0gNDtcbnZhciBESVJFQ1RJT05fVVAgPSA4O1xudmFyIERJUkVDVElPTl9ET1dOID0gMTY7XG5cbnZhciBESVJFQ1RJT05fSE9SSVpPTlRBTCA9IERJUkVDVElPTl9MRUZUIHwgRElSRUNUSU9OX1JJR0hUO1xudmFyIERJUkVDVElPTl9WRVJUSUNBTCA9IERJUkVDVElPTl9VUCB8IERJUkVDVElPTl9ET1dOO1xudmFyIERJUkVDVElPTl9BTEwgPSBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTDtcblxudmFyIFBST1BTX1hZID0gWyd4JywgJ3knXTtcbnZhciBQUk9QU19DTElFTlRfWFkgPSBbJ2NsaWVudFgnLCAnY2xpZW50WSddO1xuXG4vKipcbiAqIGNyZWF0ZSBuZXcgaW5wdXQgdHlwZSBtYW5hZ2VyXG4gKiBAcGFyYW0ge01hbmFnZXJ9IG1hbmFnZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7SW5wdXR9XG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gSW5wdXQobWFuYWdlciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdGhpcy5tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5lbGVtZW50ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbWFuYWdlci5vcHRpb25zLmlucHV0VGFyZ2V0O1xuXG4gICAgLy8gc21hbGxlciB3cmFwcGVyIGFyb3VuZCB0aGUgaGFuZGxlciwgZm9yIHRoZSBzY29wZSBhbmQgdGhlIGVuYWJsZWQgc3RhdGUgb2YgdGhlIG1hbmFnZXIsXG4gICAgLy8gc28gd2hlbiBkaXNhYmxlZCB0aGUgaW5wdXQgZXZlbnRzIGFyZSBjb21wbGV0ZWx5IGJ5cGFzc2VkLlxuICAgIHRoaXMuZG9tSGFuZGxlciA9IGZ1bmN0aW9uKGV2KSB7XG4gICAgICAgIGlmIChib29sT3JGbihtYW5hZ2VyLm9wdGlvbnMuZW5hYmxlLCBbbWFuYWdlcl0pKSB7XG4gICAgICAgICAgICBzZWxmLmhhbmRsZXIoZXYpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMuaW5pdCgpO1xuXG59XG5cbklucHV0LnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzaG91bGQgaGFuZGxlIHRoZSBpbnB1dEV2ZW50IGRhdGEgYW5kIHRyaWdnZXIgdGhlIGNhbGxiYWNrXG4gICAgICogQHZpcnR1YWxcbiAgICAgKi9cbiAgICBoYW5kbGVyOiBmdW5jdGlvbigpIHsgfSxcblxuICAgIC8qKlxuICAgICAqIGJpbmQgdGhlIGV2ZW50c1xuICAgICAqL1xuICAgIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmV2RWwgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZUYXJnZXQgJiYgYWRkRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZXaW4gJiYgYWRkRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1bmJpbmQgdGhlIGV2ZW50c1xuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmV2RWwgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy5lbGVtZW50LCB0aGlzLmV2RWwsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZUYXJnZXQgJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnModGhpcy50YXJnZXQsIHRoaXMuZXZUYXJnZXQsIHRoaXMuZG9tSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZXZXaW4gJiYgcmVtb3ZlRXZlbnRMaXN0ZW5lcnMoZ2V0V2luZG93Rm9yRWxlbWVudCh0aGlzLmVsZW1lbnQpLCB0aGlzLmV2V2luLCB0aGlzLmRvbUhhbmRsZXIpO1xuICAgIH1cbn07XG5cbi8qKlxuICogY3JlYXRlIG5ldyBpbnB1dCB0eXBlIG1hbmFnZXJcbiAqIGNhbGxlZCBieSB0aGUgTWFuYWdlciBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtIYW1tZXJ9IG1hbmFnZXJcbiAqIEByZXR1cm5zIHtJbnB1dH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRJbnN0YW5jZShtYW5hZ2VyKSB7XG4gICAgdmFyIFR5cGU7XG4gICAgdmFyIGlucHV0Q2xhc3MgPSBtYW5hZ2VyLm9wdGlvbnMuaW5wdXRDbGFzcztcblxuICAgIGlmIChpbnB1dENsYXNzKSB7XG4gICAgICAgIFR5cGUgPSBpbnB1dENsYXNzO1xuICAgIH0gZWxzZSBpZiAoU1VQUE9SVF9QT0lOVEVSX0VWRU5UUykge1xuICAgICAgICBUeXBlID0gUG9pbnRlckV2ZW50SW5wdXQ7XG4gICAgfSBlbHNlIGlmIChTVVBQT1JUX09OTFlfVE9VQ0gpIHtcbiAgICAgICAgVHlwZSA9IFRvdWNoSW5wdXQ7XG4gICAgfSBlbHNlIGlmICghU1VQUE9SVF9UT1VDSCkge1xuICAgICAgICBUeXBlID0gTW91c2VJbnB1dDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBUeXBlID0gVG91Y2hNb3VzZUlucHV0O1xuICAgIH1cbiAgICByZXR1cm4gbmV3IChUeXBlKShtYW5hZ2VyLCBpbnB1dEhhbmRsZXIpO1xufVxuXG4vKipcbiAqIGhhbmRsZSBpbnB1dCBldmVudHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50VHlwZVxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGlucHV0SGFuZGxlcihtYW5hZ2VyLCBldmVudFR5cGUsIGlucHV0KSB7XG4gICAgdmFyIHBvaW50ZXJzTGVuID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoO1xuICAgIHZhciBjaGFuZ2VkUG9pbnRlcnNMZW4gPSBpbnB1dC5jaGFuZ2VkUG9pbnRlcnMubGVuZ3RoO1xuICAgIHZhciBpc0ZpcnN0ID0gKGV2ZW50VHlwZSAmIElOUFVUX1NUQVJUICYmIChwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMCkpO1xuICAgIHZhciBpc0ZpbmFsID0gKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpICYmIChwb2ludGVyc0xlbiAtIGNoYW5nZWRQb2ludGVyc0xlbiA9PT0gMCkpO1xuXG4gICAgaW5wdXQuaXNGaXJzdCA9ICEhaXNGaXJzdDtcbiAgICBpbnB1dC5pc0ZpbmFsID0gISFpc0ZpbmFsO1xuXG4gICAgaWYgKGlzRmlyc3QpIHtcbiAgICAgICAgbWFuYWdlci5zZXNzaW9uID0ge307XG4gICAgfVxuXG4gICAgLy8gc291cmNlIGV2ZW50IGlzIHRoZSBub3JtYWxpemVkIHZhbHVlIG9mIHRoZSBkb21FdmVudHNcbiAgICAvLyBsaWtlICd0b3VjaHN0YXJ0LCBtb3VzZXVwLCBwb2ludGVyZG93bidcbiAgICBpbnB1dC5ldmVudFR5cGUgPSBldmVudFR5cGU7XG5cbiAgICAvLyBjb21wdXRlIHNjYWxlLCByb3RhdGlvbiBldGNcbiAgICBjb21wdXRlSW5wdXREYXRhKG1hbmFnZXIsIGlucHV0KTtcblxuICAgIC8vIGVtaXQgc2VjcmV0IGV2ZW50XG4gICAgbWFuYWdlci5lbWl0KCdoYW1tZXIuaW5wdXQnLCBpbnB1dCk7XG5cbiAgICBtYW5hZ2VyLnJlY29nbml6ZShpbnB1dCk7XG4gICAgbWFuYWdlci5zZXNzaW9uLnByZXZJbnB1dCA9IGlucHV0O1xufVxuXG4vKipcbiAqIGV4dGVuZCB0aGUgZGF0YSB3aXRoIHNvbWUgdXNhYmxlIHByb3BlcnRpZXMgbGlrZSBzY2FsZSwgcm90YXRlLCB2ZWxvY2l0eSBldGNcbiAqIEBwYXJhbSB7T2JqZWN0fSBtYW5hZ2VyXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gY29tcHV0ZUlucHV0RGF0YShtYW5hZ2VyLCBpbnB1dCkge1xuICAgIHZhciBzZXNzaW9uID0gbWFuYWdlci5zZXNzaW9uO1xuICAgIHZhciBwb2ludGVycyA9IGlucHV0LnBvaW50ZXJzO1xuICAgIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDtcblxuICAgIC8vIHN0b3JlIHRoZSBmaXJzdCBpbnB1dCB0byBjYWxjdWxhdGUgdGhlIGRpc3RhbmNlIGFuZCBkaXJlY3Rpb25cbiAgICBpZiAoIXNlc3Npb24uZmlyc3RJbnB1dCkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0SW5wdXQgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gICAgfVxuXG4gICAgLy8gdG8gY29tcHV0ZSBzY2FsZSBhbmQgcm90YXRpb24gd2UgbmVlZCB0byBzdG9yZSB0aGUgbXVsdGlwbGUgdG91Y2hlc1xuICAgIGlmIChwb2ludGVyc0xlbmd0aCA+IDEgJiYgIXNlc3Npb24uZmlyc3RNdWx0aXBsZSkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCk7XG4gICAgfSBlbHNlIGlmIChwb2ludGVyc0xlbmd0aCA9PT0gMSkge1xuICAgICAgICBzZXNzaW9uLmZpcnN0TXVsdGlwbGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RJbnB1dCA9IHNlc3Npb24uZmlyc3RJbnB1dDtcbiAgICB2YXIgZmlyc3RNdWx0aXBsZSA9IHNlc3Npb24uZmlyc3RNdWx0aXBsZTtcbiAgICB2YXIgb2Zmc2V0Q2VudGVyID0gZmlyc3RNdWx0aXBsZSA/IGZpcnN0TXVsdGlwbGUuY2VudGVyIDogZmlyc3RJbnB1dC5jZW50ZXI7XG5cbiAgICB2YXIgY2VudGVyID0gaW5wdXQuY2VudGVyID0gZ2V0Q2VudGVyKHBvaW50ZXJzKTtcbiAgICBpbnB1dC50aW1lU3RhbXAgPSBub3coKTtcbiAgICBpbnB1dC5kZWx0YVRpbWUgPSBpbnB1dC50aW1lU3RhbXAgLSBmaXJzdElucHV0LnRpbWVTdGFtcDtcblxuICAgIGlucHV0LmFuZ2xlID0gZ2V0QW5nbGUob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuICAgIGlucHV0LmRpc3RhbmNlID0gZ2V0RGlzdGFuY2Uob2Zmc2V0Q2VudGVyLCBjZW50ZXIpO1xuXG4gICAgY29tcHV0ZURlbHRhWFkoc2Vzc2lvbiwgaW5wdXQpO1xuICAgIGlucHV0Lm9mZnNldERpcmVjdGlvbiA9IGdldERpcmVjdGlvbihpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG5cbiAgICB2YXIgb3ZlcmFsbFZlbG9jaXR5ID0gZ2V0VmVsb2NpdHkoaW5wdXQuZGVsdGFUaW1lLCBpbnB1dC5kZWx0YVgsIGlucHV0LmRlbHRhWSk7XG4gICAgaW5wdXQub3ZlcmFsbFZlbG9jaXR5WCA9IG92ZXJhbGxWZWxvY2l0eS54O1xuICAgIGlucHV0Lm92ZXJhbGxWZWxvY2l0eVkgPSBvdmVyYWxsVmVsb2NpdHkueTtcbiAgICBpbnB1dC5vdmVyYWxsVmVsb2NpdHkgPSAoYWJzKG92ZXJhbGxWZWxvY2l0eS54KSA+IGFicyhvdmVyYWxsVmVsb2NpdHkueSkpID8gb3ZlcmFsbFZlbG9jaXR5LnggOiBvdmVyYWxsVmVsb2NpdHkueTtcblxuICAgIGlucHV0LnNjYWxlID0gZmlyc3RNdWx0aXBsZSA/IGdldFNjYWxlKGZpcnN0TXVsdGlwbGUucG9pbnRlcnMsIHBvaW50ZXJzKSA6IDE7XG4gICAgaW5wdXQucm90YXRpb24gPSBmaXJzdE11bHRpcGxlID8gZ2V0Um90YXRpb24oZmlyc3RNdWx0aXBsZS5wb2ludGVycywgcG9pbnRlcnMpIDogMDtcblxuICAgIGlucHV0Lm1heFBvaW50ZXJzID0gIXNlc3Npb24ucHJldklucHV0ID8gaW5wdXQucG9pbnRlcnMubGVuZ3RoIDogKChpbnB1dC5wb2ludGVycy5sZW5ndGggPlxuICAgICAgICBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycykgPyBpbnB1dC5wb2ludGVycy5sZW5ndGggOiBzZXNzaW9uLnByZXZJbnB1dC5tYXhQb2ludGVycyk7XG5cbiAgICBjb21wdXRlSW50ZXJ2YWxJbnB1dERhdGEoc2Vzc2lvbiwgaW5wdXQpO1xuXG4gICAgLy8gZmluZCB0aGUgY29ycmVjdCB0YXJnZXRcbiAgICB2YXIgdGFyZ2V0ID0gbWFuYWdlci5lbGVtZW50O1xuICAgIGlmIChoYXNQYXJlbnQoaW5wdXQuc3JjRXZlbnQudGFyZ2V0LCB0YXJnZXQpKSB7XG4gICAgICAgIHRhcmdldCA9IGlucHV0LnNyY0V2ZW50LnRhcmdldDtcbiAgICB9XG4gICAgaW5wdXQudGFyZ2V0ID0gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRGVsdGFYWShzZXNzaW9uLCBpbnB1dCkge1xuICAgIHZhciBjZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG4gICAgdmFyIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgfHwge307XG4gICAgdmFyIHByZXZEZWx0YSA9IHNlc3Npb24ucHJldkRlbHRhIHx8IHt9O1xuICAgIHZhciBwcmV2SW5wdXQgPSBzZXNzaW9uLnByZXZJbnB1dCB8fCB7fTtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX1NUQVJUIHx8IHByZXZJbnB1dC5ldmVudFR5cGUgPT09IElOUFVUX0VORCkge1xuICAgICAgICBwcmV2RGVsdGEgPSBzZXNzaW9uLnByZXZEZWx0YSA9IHtcbiAgICAgICAgICAgIHg6IHByZXZJbnB1dC5kZWx0YVggfHwgMCxcbiAgICAgICAgICAgIHk6IHByZXZJbnB1dC5kZWx0YVkgfHwgMFxuICAgICAgICB9O1xuXG4gICAgICAgIG9mZnNldCA9IHNlc3Npb24ub2Zmc2V0RGVsdGEgPSB7XG4gICAgICAgICAgICB4OiBjZW50ZXIueCxcbiAgICAgICAgICAgIHk6IGNlbnRlci55XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgaW5wdXQuZGVsdGFYID0gcHJldkRlbHRhLnggKyAoY2VudGVyLnggLSBvZmZzZXQueCk7XG4gICAgaW5wdXQuZGVsdGFZID0gcHJldkRlbHRhLnkgKyAoY2VudGVyLnkgLSBvZmZzZXQueSk7XG59XG5cbi8qKlxuICogdmVsb2NpdHkgaXMgY2FsY3VsYXRlZCBldmVyeSB4IG1zXG4gKiBAcGFyYW0ge09iamVjdH0gc2Vzc2lvblxuICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGNvbXB1dGVJbnRlcnZhbElucHV0RGF0YShzZXNzaW9uLCBpbnB1dCkge1xuICAgIHZhciBsYXN0ID0gc2Vzc2lvbi5sYXN0SW50ZXJ2YWwgfHwgaW5wdXQsXG4gICAgICAgIGRlbHRhVGltZSA9IGlucHV0LnRpbWVTdGFtcCAtIGxhc3QudGltZVN0YW1wLFxuICAgICAgICB2ZWxvY2l0eSwgdmVsb2NpdHlYLCB2ZWxvY2l0eVksIGRpcmVjdGlvbjtcblxuICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT0gSU5QVVRfQ0FOQ0VMICYmIChkZWx0YVRpbWUgPiBDT01QVVRFX0lOVEVSVkFMIHx8IGxhc3QudmVsb2NpdHkgPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgdmFyIGRlbHRhWCA9IGlucHV0LmRlbHRhWCAtIGxhc3QuZGVsdGFYO1xuICAgICAgICB2YXIgZGVsdGFZID0gaW5wdXQuZGVsdGFZIC0gbGFzdC5kZWx0YVk7XG5cbiAgICAgICAgdmFyIHYgPSBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIGRlbHRhWCwgZGVsdGFZKTtcbiAgICAgICAgdmVsb2NpdHlYID0gdi54O1xuICAgICAgICB2ZWxvY2l0eVkgPSB2Lnk7XG4gICAgICAgIHZlbG9jaXR5ID0gKGFicyh2LngpID4gYWJzKHYueSkpID8gdi54IDogdi55O1xuICAgICAgICBkaXJlY3Rpb24gPSBnZXREaXJlY3Rpb24oZGVsdGFYLCBkZWx0YVkpO1xuXG4gICAgICAgIHNlc3Npb24ubGFzdEludGVydmFsID0gaW5wdXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXNlIGxhdGVzdCB2ZWxvY2l0eSBpbmZvIGlmIGl0IGRvZXNuJ3Qgb3ZlcnRha2UgYSBtaW5pbXVtIHBlcmlvZFxuICAgICAgICB2ZWxvY2l0eSA9IGxhc3QudmVsb2NpdHk7XG4gICAgICAgIHZlbG9jaXR5WCA9IGxhc3QudmVsb2NpdHlYO1xuICAgICAgICB2ZWxvY2l0eVkgPSBsYXN0LnZlbG9jaXR5WTtcbiAgICAgICAgZGlyZWN0aW9uID0gbGFzdC5kaXJlY3Rpb247XG4gICAgfVxuXG4gICAgaW5wdXQudmVsb2NpdHkgPSB2ZWxvY2l0eTtcbiAgICBpbnB1dC52ZWxvY2l0eVggPSB2ZWxvY2l0eVg7XG4gICAgaW5wdXQudmVsb2NpdHlZID0gdmVsb2NpdHlZO1xuICAgIGlucHV0LmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbn1cblxuLyoqXG4gKiBjcmVhdGUgYSBzaW1wbGUgY2xvbmUgZnJvbSB0aGUgaW5wdXQgdXNlZCBmb3Igc3RvcmFnZSBvZiBmaXJzdElucHV0IGFuZCBmaXJzdE11bHRpcGxlXG4gKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAqIEByZXR1cm5zIHtPYmplY3R9IGNsb25lZElucHV0RGF0YVxuICovXG5mdW5jdGlvbiBzaW1wbGVDbG9uZUlucHV0RGF0YShpbnB1dCkge1xuICAgIC8vIG1ha2UgYSBzaW1wbGUgY29weSBvZiB0aGUgcG9pbnRlcnMgYmVjYXVzZSB3ZSB3aWxsIGdldCBhIHJlZmVyZW5jZSBpZiB3ZSBkb24ndFxuICAgIC8vIHdlIG9ubHkgbmVlZCBjbGllbnRYWSBmb3IgdGhlIGNhbGN1bGF0aW9uc1xuICAgIHZhciBwb2ludGVycyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAoaSA8IGlucHV0LnBvaW50ZXJzLmxlbmd0aCkge1xuICAgICAgICBwb2ludGVyc1tpXSA9IHtcbiAgICAgICAgICAgIGNsaWVudFg6IHJvdW5kKGlucHV0LnBvaW50ZXJzW2ldLmNsaWVudFgpLFxuICAgICAgICAgICAgY2xpZW50WTogcm91bmQoaW5wdXQucG9pbnRlcnNbaV0uY2xpZW50WSlcbiAgICAgICAgfTtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHRpbWVTdGFtcDogbm93KCksXG4gICAgICAgIHBvaW50ZXJzOiBwb2ludGVycyxcbiAgICAgICAgY2VudGVyOiBnZXRDZW50ZXIocG9pbnRlcnMpLFxuICAgICAgICBkZWx0YVg6IGlucHV0LmRlbHRhWCxcbiAgICAgICAgZGVsdGFZOiBpbnB1dC5kZWx0YVlcbiAgICB9O1xufVxuXG4vKipcbiAqIGdldCB0aGUgY2VudGVyIG9mIGFsbCB0aGUgcG9pbnRlcnNcbiAqIEBwYXJhbSB7QXJyYXl9IHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtPYmplY3R9IGNlbnRlciBjb250YWlucyBgeGAgYW5kIGB5YCBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIGdldENlbnRlcihwb2ludGVycykge1xuICAgIHZhciBwb2ludGVyc0xlbmd0aCA9IHBvaW50ZXJzLmxlbmd0aDtcblxuICAgIC8vIG5vIG5lZWQgdG8gbG9vcCB3aGVuIG9ubHkgb25lIHRvdWNoXG4gICAgaWYgKHBvaW50ZXJzTGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiByb3VuZChwb2ludGVyc1swXS5jbGllbnRYKSxcbiAgICAgICAgICAgIHk6IHJvdW5kKHBvaW50ZXJzWzBdLmNsaWVudFkpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIHggPSAwLCB5ID0gMCwgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBwb2ludGVyc0xlbmd0aCkge1xuICAgICAgICB4ICs9IHBvaW50ZXJzW2ldLmNsaWVudFg7XG4gICAgICAgIHkgKz0gcG9pbnRlcnNbaV0uY2xpZW50WTtcbiAgICAgICAgaSsrO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHJvdW5kKHggLyBwb2ludGVyc0xlbmd0aCksXG4gICAgICAgIHk6IHJvdW5kKHkgLyBwb2ludGVyc0xlbmd0aClcbiAgICB9O1xufVxuXG4vKipcbiAqIGNhbGN1bGF0ZSB0aGUgdmVsb2NpdHkgYmV0d2VlbiB0d28gcG9pbnRzLiB1bml0IGlzIGluIHB4IHBlciBtcy5cbiAqIEBwYXJhbSB7TnVtYmVyfSBkZWx0YVRpbWVcbiAqIEBwYXJhbSB7TnVtYmVyfSB4XG4gKiBAcGFyYW0ge051bWJlcn0geVxuICogQHJldHVybiB7T2JqZWN0fSB2ZWxvY2l0eSBgeGAgYW5kIGB5YFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eShkZWx0YVRpbWUsIHgsIHkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiB4IC8gZGVsdGFUaW1lIHx8IDAsXG4gICAgICAgIHk6IHkgLyBkZWx0YVRpbWUgfHwgMFxuICAgIH07XG59XG5cbi8qKlxuICogZ2V0IHRoZSBkaXJlY3Rpb24gYmV0d2VlbiB0d28gcG9pbnRzXG4gKiBAcGFyYW0ge051bWJlcn0geFxuICogQHBhcmFtIHtOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge051bWJlcn0gZGlyZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdldERpcmVjdGlvbih4LCB5KSB7XG4gICAgaWYgKHggPT09IHkpIHtcbiAgICAgICAgcmV0dXJuIERJUkVDVElPTl9OT05FO1xuICAgIH1cblxuICAgIGlmIChhYnMoeCkgPj0gYWJzKHkpKSB7XG4gICAgICAgIHJldHVybiB4IDwgMCA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUO1xuICAgIH1cbiAgICByZXR1cm4geSA8IDAgPyBESVJFQ1RJT05fVVAgOiBESVJFQ1RJT05fRE9XTjtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIGFic29sdXRlIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IHAxIHt4LCB5fVxuICogQHBhcmFtIHtPYmplY3R9IHAyIHt4LCB5fVxuICogQHBhcmFtIHtBcnJheX0gW3Byb3BzXSBjb250YWluaW5nIHggYW5kIHkga2V5c1xuICogQHJldHVybiB7TnVtYmVyfSBkaXN0YW5jZVxuICovXG5mdW5jdGlvbiBnZXREaXN0YW5jZShwMSwgcDIsIHByb3BzKSB7XG4gICAgaWYgKCFwcm9wcykge1xuICAgICAgICBwcm9wcyA9IFBST1BTX1hZO1xuICAgIH1cbiAgICB2YXIgeCA9IHAyW3Byb3BzWzBdXSAtIHAxW3Byb3BzWzBdXSxcbiAgICAgICAgeSA9IHAyW3Byb3BzWzFdXSAtIHAxW3Byb3BzWzFdXTtcblxuICAgIHJldHVybiBNYXRoLnNxcnQoKHggKiB4KSArICh5ICogeSkpO1xufVxuXG4vKipcbiAqIGNhbGN1bGF0ZSB0aGUgYW5nbGUgYmV0d2VlbiB0d28gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBwMVxuICogQHBhcmFtIHtPYmplY3R9IHAyXG4gKiBAcGFyYW0ge0FycmF5fSBbcHJvcHNdIGNvbnRhaW5pbmcgeCBhbmQgeSBrZXlzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IGFuZ2xlXG4gKi9cbmZ1bmN0aW9uIGdldEFuZ2xlKHAxLCBwMiwgcHJvcHMpIHtcbiAgICBpZiAoIXByb3BzKSB7XG4gICAgICAgIHByb3BzID0gUFJPUFNfWFk7XG4gICAgfVxuICAgIHZhciB4ID0gcDJbcHJvcHNbMF1dIC0gcDFbcHJvcHNbMF1dLFxuICAgICAgICB5ID0gcDJbcHJvcHNbMV1dIC0gcDFbcHJvcHNbMV1dO1xuICAgIHJldHVybiBNYXRoLmF0YW4yKHksIHgpICogMTgwIC8gTWF0aC5QSTtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIHJvdGF0aW9uIGRlZ3JlZXMgYmV0d2VlbiB0d28gcG9pbnRlcnNldHNcbiAqIEBwYXJhbSB7QXJyYXl9IHN0YXJ0IGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcGFyYW0ge0FycmF5fSBlbmQgYXJyYXkgb2YgcG9pbnRlcnNcbiAqIEByZXR1cm4ge051bWJlcn0gcm90YXRpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Um90YXRpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBnZXRBbmdsZShlbmRbMV0sIGVuZFswXSwgUFJPUFNfQ0xJRU5UX1hZKSArIGdldEFuZ2xlKHN0YXJ0WzFdLCBzdGFydFswXSwgUFJPUFNfQ0xJRU5UX1hZKTtcbn1cblxuLyoqXG4gKiBjYWxjdWxhdGUgdGhlIHNjYWxlIGZhY3RvciBiZXR3ZWVuIHR3byBwb2ludGVyc2V0c1xuICogbm8gc2NhbGUgaXMgMSwgYW5kIGdvZXMgZG93biB0byAwIHdoZW4gcGluY2hlZCB0b2dldGhlciwgYW5kIGJpZ2dlciB3aGVuIHBpbmNoZWQgb3V0XG4gKiBAcGFyYW0ge0FycmF5fSBzdGFydCBhcnJheSBvZiBwb2ludGVyc1xuICogQHBhcmFtIHtBcnJheX0gZW5kIGFycmF5IG9mIHBvaW50ZXJzXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IHNjYWxlXG4gKi9cbmZ1bmN0aW9uIGdldFNjYWxlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gZ2V0RGlzdGFuY2UoZW5kWzBdLCBlbmRbMV0sIFBST1BTX0NMSUVOVF9YWSkgLyBnZXREaXN0YW5jZShzdGFydFswXSwgc3RhcnRbMV0sIFBST1BTX0NMSUVOVF9YWSk7XG59XG5cbnZhciBNT1VTRV9JTlBVVF9NQVAgPSB7XG4gICAgbW91c2Vkb3duOiBJTlBVVF9TVEFSVCxcbiAgICBtb3VzZW1vdmU6IElOUFVUX01PVkUsXG4gICAgbW91c2V1cDogSU5QVVRfRU5EXG59O1xuXG52YXIgTU9VU0VfRUxFTUVOVF9FVkVOVFMgPSAnbW91c2Vkb3duJztcbnZhciBNT1VTRV9XSU5ET1dfRVZFTlRTID0gJ21vdXNlbW92ZSBtb3VzZXVwJztcblxuLyoqXG4gKiBNb3VzZSBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gTW91c2VJbnB1dCgpIHtcbiAgICB0aGlzLmV2RWwgPSBNT1VTRV9FTEVNRU5UX0VWRU5UUztcbiAgICB0aGlzLmV2V2luID0gTU9VU0VfV0lORE9XX0VWRU5UUztcblxuICAgIHRoaXMucHJlc3NlZCA9IGZhbHNlOyAvLyBtb3VzZWRvd24gc3RhdGVcblxuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoTW91c2VJbnB1dCwgSW5wdXQsIHtcbiAgICAvKipcbiAgICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24gTUVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciBldmVudFR5cGUgPSBNT1VTRV9JTlBVVF9NQVBbZXYudHlwZV07XG5cbiAgICAgICAgLy8gb24gc3RhcnQgd2Ugd2FudCB0byBoYXZlIHRoZSBsZWZ0IG1vdXNlIGJ1dHRvbiBkb3duXG4gICAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiBldi5idXR0b24gPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMucHJlc3NlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfTU9WRSAmJiBldi53aGljaCAhPT0gMSkge1xuICAgICAgICAgICAgZXZlbnRUeXBlID0gSU5QVVRfRU5EO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbW91c2UgbXVzdCBiZSBkb3duXG4gICAgICAgIGlmICghdGhpcy5wcmVzc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICB0aGlzLnByZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiBbZXZdLFxuICAgICAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiBbZXZdLFxuICAgICAgICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfTU9VU0UsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG5cbnZhciBQT0lOVEVSX0lOUFVUX01BUCA9IHtcbiAgICBwb2ludGVyZG93bjogSU5QVVRfU1RBUlQsXG4gICAgcG9pbnRlcm1vdmU6IElOUFVUX01PVkUsXG4gICAgcG9pbnRlcnVwOiBJTlBVVF9FTkQsXG4gICAgcG9pbnRlcmNhbmNlbDogSU5QVVRfQ0FOQ0VMLFxuICAgIHBvaW50ZXJvdXQ6IElOUFVUX0NBTkNFTFxufTtcblxuLy8gaW4gSUUxMCB0aGUgcG9pbnRlciB0eXBlcyBpcyBkZWZpbmVkIGFzIGFuIGVudW1cbnZhciBJRTEwX1BPSU5URVJfVFlQRV9FTlVNID0ge1xuICAgIDI6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgMzogSU5QVVRfVFlQRV9QRU4sXG4gICAgNDogSU5QVVRfVFlQRV9NT1VTRSxcbiAgICA1OiBJTlBVVF9UWVBFX0tJTkVDVCAvLyBzZWUgaHR0cHM6Ly90d2l0dGVyLmNvbS9qYWNvYnJvc3NpL3N0YXR1cy80ODA1OTY0Mzg0ODk4OTA4MTZcbn07XG5cbnZhciBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ3BvaW50ZXJkb3duJztcbnZhciBQT0lOVEVSX1dJTkRPV19FVkVOVFMgPSAncG9pbnRlcm1vdmUgcG9pbnRlcnVwIHBvaW50ZXJjYW5jZWwnO1xuXG4vLyBJRTEwIGhhcyBwcmVmaXhlZCBzdXBwb3J0LCBhbmQgY2FzZS1zZW5zaXRpdmVcbmlmICh3aW5kb3cuTVNQb2ludGVyRXZlbnQgJiYgIXdpbmRvdy5Qb2ludGVyRXZlbnQpIHtcbiAgICBQT0lOVEVSX0VMRU1FTlRfRVZFTlRTID0gJ01TUG9pbnRlckRvd24nO1xuICAgIFBPSU5URVJfV0lORE9XX0VWRU5UUyA9ICdNU1BvaW50ZXJNb3ZlIE1TUG9pbnRlclVwIE1TUG9pbnRlckNhbmNlbCc7XG59XG5cbi8qKlxuICogUG9pbnRlciBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gUG9pbnRlckV2ZW50SW5wdXQoKSB7XG4gICAgdGhpcy5ldkVsID0gUE9JTlRFUl9FTEVNRU5UX0VWRU5UUztcbiAgICB0aGlzLmV2V2luID0gUE9JTlRFUl9XSU5ET1dfRVZFTlRTO1xuXG4gICAgSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHRoaXMuc3RvcmUgPSAodGhpcy5tYW5hZ2VyLnNlc3Npb24ucG9pbnRlckV2ZW50cyA9IFtdKTtcbn1cblxuaW5oZXJpdChQb2ludGVyRXZlbnRJbnB1dCwgSW5wdXQsIHtcbiAgICAvKipcbiAgICAgKiBoYW5kbGUgbW91c2UgZXZlbnRzXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGV2XG4gICAgICovXG4gICAgaGFuZGxlcjogZnVuY3Rpb24gUEVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciBzdG9yZSA9IHRoaXMuc3RvcmU7XG4gICAgICAgIHZhciByZW1vdmVQb2ludGVyID0gZmFsc2U7XG5cbiAgICAgICAgdmFyIGV2ZW50VHlwZU5vcm1hbGl6ZWQgPSBldi50eXBlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnbXMnLCAnJyk7XG4gICAgICAgIHZhciBldmVudFR5cGUgPSBQT0lOVEVSX0lOUFVUX01BUFtldmVudFR5cGVOb3JtYWxpemVkXTtcbiAgICAgICAgdmFyIHBvaW50ZXJUeXBlID0gSUUxMF9QT0lOVEVSX1RZUEVfRU5VTVtldi5wb2ludGVyVHlwZV0gfHwgZXYucG9pbnRlclR5cGU7XG5cbiAgICAgICAgdmFyIGlzVG91Y2ggPSAocG9pbnRlclR5cGUgPT0gSU5QVVRfVFlQRV9UT1VDSCk7XG5cbiAgICAgICAgLy8gZ2V0IGluZGV4IG9mIHRoZSBldmVudCBpbiB0aGUgc3RvcmVcbiAgICAgICAgdmFyIHN0b3JlSW5kZXggPSBpbkFycmF5KHN0b3JlLCBldi5wb2ludGVySWQsICdwb2ludGVySWQnKTtcblxuICAgICAgICAvLyBzdGFydCBhbmQgbW91c2UgbXVzdCBiZSBkb3duXG4gICAgICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCAmJiAoZXYuYnV0dG9uID09PSAwIHx8IGlzVG91Y2gpKSB7XG4gICAgICAgICAgICBpZiAoc3RvcmVJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICBzdG9yZS5wdXNoKGV2KTtcbiAgICAgICAgICAgICAgICBzdG9yZUluZGV4ID0gc3RvcmUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChldmVudFR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSkge1xuICAgICAgICAgICAgcmVtb3ZlUG9pbnRlciA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpdCBub3QgZm91bmQsIHNvIHRoZSBwb2ludGVyIGhhc24ndCBiZWVuIGRvd24gKHNvIGl0J3MgcHJvYmFibHkgYSBob3ZlcilcbiAgICAgICAgaWYgKHN0b3JlSW5kZXggPCAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1cGRhdGUgdGhlIGV2ZW50IGluIHRoZSBzdG9yZVxuICAgICAgICBzdG9yZVtzdG9yZUluZGV4XSA9IGV2O1xuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCBldmVudFR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiBzdG9yZSxcbiAgICAgICAgICAgIGNoYW5nZWRQb2ludGVyczogW2V2XSxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiBwb2ludGVyVHlwZSxcbiAgICAgICAgICAgIHNyY0V2ZW50OiBldlxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocmVtb3ZlUG9pbnRlcikge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gdGhlIHN0b3JlXG4gICAgICAgICAgICBzdG9yZS5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxudmFyIFNJTkdMRV9UT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcblxudmFyIFNJTkdMRV9UT1VDSF9UQVJHRVRfRVZFTlRTID0gJ3RvdWNoc3RhcnQnO1xudmFyIFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTID0gJ3RvdWNoc3RhcnQgdG91Y2htb3ZlIHRvdWNoZW5kIHRvdWNoY2FuY2VsJztcblxuLyoqXG4gKiBUb3VjaCBldmVudHMgaW5wdXRcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuZnVuY3Rpb24gU2luZ2xlVG91Y2hJbnB1dCgpIHtcbiAgICB0aGlzLmV2VGFyZ2V0ID0gU0lOR0xFX1RPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgdGhpcy5ldldpbiA9IFNJTkdMRV9UT1VDSF9XSU5ET1dfRVZFTlRTO1xuICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuXG4gICAgSW5wdXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChTaW5nbGVUb3VjaElucHV0LCBJbnB1dCwge1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFRFaGFuZGxlcihldikge1xuICAgICAgICB2YXIgdHlwZSA9IFNJTkdMRV9UT1VDSF9JTlBVVF9NQVBbZXYudHlwZV07XG5cbiAgICAgICAgLy8gc2hvdWxkIHdlIGhhbmRsZSB0aGUgdG91Y2ggZXZlbnRzP1xuICAgICAgICBpZiAodHlwZSA9PT0gSU5QVVRfU1RBUlQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRvdWNoZXMgPSBub3JtYWxpemVTaW5nbGVUb3VjaGVzLmNhbGwodGhpcywgZXYsIHR5cGUpO1xuXG4gICAgICAgIC8vIHdoZW4gZG9uZSwgcmVzZXQgdGhlIHN0YXJ0ZWQgc3RhdGVcbiAgICAgICAgaWYgKHR5cGUgJiAoSU5QVVRfRU5EIHwgSU5QVVRfQ0FOQ0VMKSAmJiB0b3VjaGVzWzBdLmxlbmd0aCAtIHRvdWNoZXNbMV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sodGhpcy5tYW5hZ2VyLCB0eXBlLCB7XG4gICAgICAgICAgICBwb2ludGVyczogdG91Y2hlc1swXSxcbiAgICAgICAgICAgIGNoYW5nZWRQb2ludGVyczogdG91Y2hlc1sxXSxcbiAgICAgICAgICAgIHBvaW50ZXJUeXBlOiBJTlBVVF9UWVBFX1RPVUNILFxuICAgICAgICAgICAgc3JjRXZlbnQ6IGV2XG4gICAgICAgIH0pO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIEB0aGlzIHtUb3VjaElucHV0fVxuICogQHBhcmFtIHtPYmplY3R9IGV2XG4gKiBAcGFyYW0ge051bWJlcn0gdHlwZSBmbGFnXG4gKiBAcmV0dXJucyB7dW5kZWZpbmVkfEFycmF5fSBbYWxsLCBjaGFuZ2VkXVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVTaW5nbGVUb3VjaGVzKGV2LCB0eXBlKSB7XG4gICAgdmFyIGFsbCA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gICAgdmFyIGNoYW5nZWQgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKTtcblxuICAgIGlmICh0eXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkpIHtcbiAgICAgICAgYWxsID0gdW5pcXVlQXJyYXkoYWxsLmNvbmNhdChjaGFuZ2VkKSwgJ2lkZW50aWZpZXInLCB0cnVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2FsbCwgY2hhbmdlZF07XG59XG5cbnZhciBUT1VDSF9JTlBVVF9NQVAgPSB7XG4gICAgdG91Y2hzdGFydDogSU5QVVRfU1RBUlQsXG4gICAgdG91Y2htb3ZlOiBJTlBVVF9NT1ZFLFxuICAgIHRvdWNoZW5kOiBJTlBVVF9FTkQsXG4gICAgdG91Y2hjYW5jZWw6IElOUFVUX0NBTkNFTFxufTtcblxudmFyIFRPVUNIX1RBUkdFVF9FVkVOVFMgPSAndG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQgdG91Y2hjYW5jZWwnO1xuXG4vKipcbiAqIE11bHRpLXVzZXIgdG91Y2ggZXZlbnRzIGlucHV0XG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIElucHV0XG4gKi9cbmZ1bmN0aW9uIFRvdWNoSW5wdXQoKSB7XG4gICAgdGhpcy5ldlRhcmdldCA9IFRPVUNIX1RBUkdFVF9FVkVOVFM7XG4gICAgdGhpcy50YXJnZXRJZHMgPSB7fTtcblxuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoVG91Y2hJbnB1dCwgSW5wdXQsIHtcbiAgICBoYW5kbGVyOiBmdW5jdGlvbiBNVEVoYW5kbGVyKGV2KSB7XG4gICAgICAgIHZhciB0eXBlID0gVE9VQ0hfSU5QVVRfTUFQW2V2LnR5cGVdO1xuICAgICAgICB2YXIgdG91Y2hlcyA9IGdldFRvdWNoZXMuY2FsbCh0aGlzLCBldiwgdHlwZSk7XG4gICAgICAgIGlmICghdG91Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLm1hbmFnZXIsIHR5cGUsIHtcbiAgICAgICAgICAgIHBvaW50ZXJzOiB0b3VjaGVzWzBdLFxuICAgICAgICAgICAgY2hhbmdlZFBvaW50ZXJzOiB0b3VjaGVzWzFdLFxuICAgICAgICAgICAgcG9pbnRlclR5cGU6IElOUFVUX1RZUEVfVE9VQ0gsXG4gICAgICAgICAgICBzcmNFdmVudDogZXZcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQHRoaXMge1RvdWNoSW5wdXR9XG4gKiBAcGFyYW0ge09iamVjdH0gZXZcbiAqIEBwYXJhbSB7TnVtYmVyfSB0eXBlIGZsYWdcbiAqIEByZXR1cm5zIHt1bmRlZmluZWR8QXJyYXl9IFthbGwsIGNoYW5nZWRdXG4gKi9cbmZ1bmN0aW9uIGdldFRvdWNoZXMoZXYsIHR5cGUpIHtcbiAgICB2YXIgYWxsVG91Y2hlcyA9IHRvQXJyYXkoZXYudG91Y2hlcyk7XG4gICAgdmFyIHRhcmdldElkcyA9IHRoaXMudGFyZ2V0SWRzO1xuXG4gICAgLy8gd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSB0b3VjaCwgdGhlIHByb2Nlc3MgY2FuIGJlIHNpbXBsaWZpZWRcbiAgICBpZiAodHlwZSAmIChJTlBVVF9TVEFSVCB8IElOUFVUX01PVkUpICYmIGFsbFRvdWNoZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRhcmdldElkc1thbGxUb3VjaGVzWzBdLmlkZW50aWZpZXJdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFthbGxUb3VjaGVzLCBhbGxUb3VjaGVzXTtcbiAgICB9XG5cbiAgICB2YXIgaSxcbiAgICAgICAgdGFyZ2V0VG91Y2hlcyxcbiAgICAgICAgY2hhbmdlZFRvdWNoZXMgPSB0b0FycmF5KGV2LmNoYW5nZWRUb3VjaGVzKSxcbiAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMgPSBbXSxcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG5cbiAgICAvLyBnZXQgdGFyZ2V0IHRvdWNoZXMgZnJvbSB0b3VjaGVzXG4gICAgdGFyZ2V0VG91Y2hlcyA9IGFsbFRvdWNoZXMuZmlsdGVyKGZ1bmN0aW9uKHRvdWNoKSB7XG4gICAgICAgIHJldHVybiBoYXNQYXJlbnQodG91Y2gudGFyZ2V0LCB0YXJnZXQpO1xuICAgIH0pO1xuXG4gICAgLy8gY29sbGVjdCB0b3VjaGVzXG4gICAgaWYgKHR5cGUgPT09IElOUFVUX1NUQVJUKSB7XG4gICAgICAgIGkgPSAwO1xuICAgICAgICB3aGlsZSAoaSA8IHRhcmdldFRvdWNoZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0YXJnZXRJZHNbdGFyZ2V0VG91Y2hlc1tpXS5pZGVudGlmaWVyXSA9IHRydWU7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmaWx0ZXIgY2hhbmdlZCB0b3VjaGVzIHRvIG9ubHkgY29udGFpbiB0b3VjaGVzIHRoYXQgZXhpc3QgaW4gdGhlIGNvbGxlY3RlZCB0YXJnZXQgaWRzXG4gICAgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBjaGFuZ2VkVG91Y2hlcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRhcmdldElkc1tjaGFuZ2VkVG91Y2hlc1tpXS5pZGVudGlmaWVyXSkge1xuICAgICAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXMucHVzaChjaGFuZ2VkVG91Y2hlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhbnVwIHJlbW92ZWQgdG91Y2hlc1xuICAgICAgICBpZiAodHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgICAgICBkZWxldGUgdGFyZ2V0SWRzW2NoYW5nZWRUb3VjaGVzW2ldLmlkZW50aWZpZXJdO1xuICAgICAgICB9XG4gICAgICAgIGkrKztcbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWRUYXJnZXRUb3VjaGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgICAgLy8gbWVyZ2UgdGFyZ2V0VG91Y2hlcyB3aXRoIGNoYW5nZWRUYXJnZXRUb3VjaGVzIHNvIGl0IGNvbnRhaW5zIEFMTCB0b3VjaGVzLCBpbmNsdWRpbmcgJ2VuZCcgYW5kICdjYW5jZWwnXG4gICAgICAgIHVuaXF1ZUFycmF5KHRhcmdldFRvdWNoZXMuY29uY2F0KGNoYW5nZWRUYXJnZXRUb3VjaGVzKSwgJ2lkZW50aWZpZXInLCB0cnVlKSxcbiAgICAgICAgY2hhbmdlZFRhcmdldFRvdWNoZXNcbiAgICBdO1xufVxuXG4vKipcbiAqIENvbWJpbmVkIHRvdWNoIGFuZCBtb3VzZSBpbnB1dFxuICpcbiAqIFRvdWNoIGhhcyBhIGhpZ2hlciBwcmlvcml0eSB0aGVuIG1vdXNlLCBhbmQgd2hpbGUgdG91Y2hpbmcgbm8gbW91c2UgZXZlbnRzIGFyZSBhbGxvd2VkLlxuICogVGhpcyBiZWNhdXNlIHRvdWNoIGRldmljZXMgYWxzbyBlbWl0IG1vdXNlIGV2ZW50cyB3aGlsZSBkb2luZyBhIHRvdWNoLlxuICpcbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgSW5wdXRcbiAqL1xuXG52YXIgREVEVVBfVElNRU9VVCA9IDI1MDA7XG52YXIgREVEVVBfRElTVEFOQ0UgPSAyNTtcblxuZnVuY3Rpb24gVG91Y2hNb3VzZUlucHV0KCkge1xuICAgIElucHV0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB2YXIgaGFuZGxlciA9IGJpbmRGbih0aGlzLmhhbmRsZXIsIHRoaXMpO1xuICAgIHRoaXMudG91Y2ggPSBuZXcgVG91Y2hJbnB1dCh0aGlzLm1hbmFnZXIsIGhhbmRsZXIpO1xuICAgIHRoaXMubW91c2UgPSBuZXcgTW91c2VJbnB1dCh0aGlzLm1hbmFnZXIsIGhhbmRsZXIpO1xuXG4gICAgdGhpcy5wcmltYXJ5VG91Y2ggPSBudWxsO1xuICAgIHRoaXMubGFzdFRvdWNoZXMgPSBbXTtcbn1cblxuaW5oZXJpdChUb3VjaE1vdXNlSW5wdXQsIElucHV0LCB7XG4gICAgLyoqXG4gICAgICogaGFuZGxlIG1vdXNlIGFuZCB0b3VjaCBldmVudHNcbiAgICAgKiBAcGFyYW0ge0hhbW1lcn0gbWFuYWdlclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dEV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0RGF0YVxuICAgICAqL1xuICAgIGhhbmRsZXI6IGZ1bmN0aW9uIFRNRWhhbmRsZXIobWFuYWdlciwgaW5wdXRFdmVudCwgaW5wdXREYXRhKSB7XG4gICAgICAgIHZhciBpc1RvdWNoID0gKGlucHV0RGF0YS5wb2ludGVyVHlwZSA9PSBJTlBVVF9UWVBFX1RPVUNIKSxcbiAgICAgICAgICAgIGlzTW91c2UgPSAoaW5wdXREYXRhLnBvaW50ZXJUeXBlID09IElOUFVUX1RZUEVfTU9VU0UpO1xuXG4gICAgICAgIGlmIChpc01vdXNlICYmIGlucHV0RGF0YS5zb3VyY2VDYXBhYmlsaXRpZXMgJiYgaW5wdXREYXRhLnNvdXJjZUNhcGFiaWxpdGllcy5maXJlc1RvdWNoRXZlbnRzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3aGVuIHdlJ3JlIGluIGEgdG91Y2ggZXZlbnQsIHJlY29yZCB0b3VjaGVzIHRvICBkZS1kdXBlIHN5bnRoZXRpYyBtb3VzZSBldmVudFxuICAgICAgICBpZiAoaXNUb3VjaCkge1xuICAgICAgICAgICAgcmVjb3JkVG91Y2hlcy5jYWxsKHRoaXMsIGlucHV0RXZlbnQsIGlucHV0RGF0YSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNb3VzZSAmJiBpc1N5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgaW5wdXREYXRhKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYWxsYmFjayhtYW5hZ2VyLCBpbnB1dEV2ZW50LCBpbnB1dERhdGEpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZW1vdmUgdGhlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudG91Y2guZGVzdHJveSgpO1xuICAgICAgICB0aGlzLm1vdXNlLmRlc3Ryb3koKTtcbiAgICB9XG59KTtcblxuZnVuY3Rpb24gcmVjb3JkVG91Y2hlcyhldmVudFR5cGUsIGV2ZW50RGF0YSkge1xuICAgIGlmIChldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgICB0aGlzLnByaW1hcnlUb3VjaCA9IGV2ZW50RGF0YS5jaGFuZ2VkUG9pbnRlcnNbMF0uaWRlbnRpZmllcjtcbiAgICAgICAgc2V0TGFzdFRvdWNoLmNhbGwodGhpcywgZXZlbnREYXRhKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSAmIChJTlBVVF9FTkQgfCBJTlBVVF9DQU5DRUwpKSB7XG4gICAgICAgIHNldExhc3RUb3VjaC5jYWxsKHRoaXMsIGV2ZW50RGF0YSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzZXRMYXN0VG91Y2goZXZlbnREYXRhKSB7XG4gICAgdmFyIHRvdWNoID0gZXZlbnREYXRhLmNoYW5nZWRQb2ludGVyc1swXTtcblxuICAgIGlmICh0b3VjaC5pZGVudGlmaWVyID09PSB0aGlzLnByaW1hcnlUb3VjaCkge1xuICAgICAgICB2YXIgbGFzdFRvdWNoID0ge3g6IHRvdWNoLmNsaWVudFgsIHk6IHRvdWNoLmNsaWVudFl9O1xuICAgICAgICB0aGlzLmxhc3RUb3VjaGVzLnB1c2gobGFzdFRvdWNoKTtcbiAgICAgICAgdmFyIGx0cyA9IHRoaXMubGFzdFRvdWNoZXM7XG4gICAgICAgIHZhciByZW1vdmVMYXN0VG91Y2ggPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBpID0gbHRzLmluZGV4T2YobGFzdFRvdWNoKTtcbiAgICAgICAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBsdHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRUaW1lb3V0KHJlbW92ZUxhc3RUb3VjaCwgREVEVVBfVElNRU9VVCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1N5bnRoZXRpY0V2ZW50KGV2ZW50RGF0YSkge1xuICAgIHZhciB4ID0gZXZlbnREYXRhLnNyY0V2ZW50LmNsaWVudFgsIHkgPSBldmVudERhdGEuc3JjRXZlbnQuY2xpZW50WTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGFzdFRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHQgPSB0aGlzLmxhc3RUb3VjaGVzW2ldO1xuICAgICAgICB2YXIgZHggPSBNYXRoLmFicyh4IC0gdC54KSwgZHkgPSBNYXRoLmFicyh5IC0gdC55KTtcbiAgICAgICAgaWYgKGR4IDw9IERFRFVQX0RJU1RBTkNFICYmIGR5IDw9IERFRFVQX0RJU1RBTkNFKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gPSBwcmVmaXhlZChURVNUX0VMRU1FTlQuc3R5bGUsICd0b3VjaEFjdGlvbicpO1xudmFyIE5BVElWRV9UT1VDSF9BQ1RJT04gPSBQUkVGSVhFRF9UT1VDSF9BQ1RJT04gIT09IHVuZGVmaW5lZDtcblxuLy8gbWFnaWNhbCB0b3VjaEFjdGlvbiB2YWx1ZVxudmFyIFRPVUNIX0FDVElPTl9DT01QVVRFID0gJ2NvbXB1dGUnO1xudmFyIFRPVUNIX0FDVElPTl9BVVRPID0gJ2F1dG8nO1xudmFyIFRPVUNIX0FDVElPTl9NQU5JUFVMQVRJT04gPSAnbWFuaXB1bGF0aW9uJzsgLy8gbm90IGltcGxlbWVudGVkXG52YXIgVE9VQ0hfQUNUSU9OX05PTkUgPSAnbm9uZSc7XG52YXIgVE9VQ0hfQUNUSU9OX1BBTl9YID0gJ3Bhbi14JztcbnZhciBUT1VDSF9BQ1RJT05fUEFOX1kgPSAncGFuLXknO1xudmFyIFRPVUNIX0FDVElPTl9NQVAgPSBnZXRUb3VjaEFjdGlvblByb3BzKCk7XG5cbi8qKlxuICogVG91Y2ggQWN0aW9uXG4gKiBzZXRzIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eSBvciB1c2VzIHRoZSBqcyBhbHRlcm5hdGl2ZVxuICogQHBhcmFtIHtNYW5hZ2VyfSBtYW5hZ2VyXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWVcbiAqIEBjb25zdHJ1Y3RvclxuICovXG5mdW5jdGlvbiBUb3VjaEFjdGlvbihtYW5hZ2VyLCB2YWx1ZSkge1xuICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgdGhpcy5zZXQodmFsdWUpO1xufVxuXG5Ub3VjaEFjdGlvbi5wcm90b3R5cGUgPSB7XG4gICAgLyoqXG4gICAgICogc2V0IHRoZSB0b3VjaEFjdGlvbiB2YWx1ZSBvbiB0aGUgZWxlbWVudCBvciBlbmFibGUgdGhlIHBvbHlmaWxsXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAvLyBmaW5kIG91dCB0aGUgdG91Y2gtYWN0aW9uIGJ5IHRoZSBldmVudCBoYW5kbGVyc1xuICAgICAgICBpZiAodmFsdWUgPT0gVE9VQ0hfQUNUSU9OX0NPTVBVVEUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jb21wdXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoTkFUSVZFX1RPVUNIX0FDVElPTiAmJiB0aGlzLm1hbmFnZXIuZWxlbWVudC5zdHlsZSAmJiBUT1VDSF9BQ1RJT05fTUFQW3ZhbHVlXSkge1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVsZW1lbnQuc3R5bGVbUFJFRklYRURfVE9VQ0hfQUNUSU9OXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBqdXN0IHJlLXNldCB0aGUgdG91Y2hBY3Rpb24gdmFsdWVcbiAgICAgKi9cbiAgICB1cGRhdGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldCh0aGlzLm1hbmFnZXIub3B0aW9ucy50b3VjaEFjdGlvbik7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGNvbXB1dGUgdGhlIHZhbHVlIGZvciB0aGUgdG91Y2hBY3Rpb24gcHJvcGVydHkgYmFzZWQgb24gdGhlIHJlY29nbml6ZXIncyBzZXR0aW5nc1xuICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IHZhbHVlXG4gICAgICovXG4gICAgY29tcHV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gW107XG4gICAgICAgIGVhY2godGhpcy5tYW5hZ2VyLnJlY29nbml6ZXJzLCBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgICAgICAgICBpZiAoYm9vbE9yRm4ocmVjb2duaXplci5vcHRpb25zLmVuYWJsZSwgW3JlY29nbml6ZXJdKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbnMgPSBhY3Rpb25zLmNvbmNhdChyZWNvZ25pemVyLmdldFRvdWNoQWN0aW9uKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMuam9pbignICcpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogdGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGVhY2ggaW5wdXQgY3ljbGUgYW5kIHByb3ZpZGVzIHRoZSBwcmV2ZW50aW5nIG9mIHRoZSBicm93c2VyIGJlaGF2aW9yXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHRzOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgc3JjRXZlbnQgPSBpbnB1dC5zcmNFdmVudDtcbiAgICAgICAgdmFyIGRpcmVjdGlvbiA9IGlucHV0Lm9mZnNldERpcmVjdGlvbjtcblxuICAgICAgICAvLyBpZiB0aGUgdG91Y2ggYWN0aW9uIGRpZCBwcmV2ZW50ZWQgb25jZSB0aGlzIHNlc3Npb25cbiAgICAgICAgaWYgKHRoaXMubWFuYWdlci5zZXNzaW9uLnByZXZlbnRlZCkge1xuICAgICAgICAgICAgc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICB2YXIgaGFzTm9uZSA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fTk9ORV07XG4gICAgICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKSAmJiAhVE9VQ0hfQUNUSU9OX01BUFtUT1VDSF9BQ1RJT05fUEFOX1ldO1xuICAgICAgICB2YXIgaGFzUGFuWCA9IGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9QQU5fWCkgJiYgIVRPVUNIX0FDVElPTl9NQVBbVE9VQ0hfQUNUSU9OX1BBTl9YXTtcblxuICAgICAgICBpZiAoaGFzTm9uZSkge1xuICAgICAgICAgICAgLy9kbyBub3QgcHJldmVudCBkZWZhdWx0cyBpZiB0aGlzIGlzIGEgdGFwIGdlc3R1cmVcblxuICAgICAgICAgICAgdmFyIGlzVGFwUG9pbnRlciA9IGlucHV0LnBvaW50ZXJzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgICAgIHZhciBpc1RhcE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCAyO1xuICAgICAgICAgICAgdmFyIGlzVGFwVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgMjUwO1xuXG4gICAgICAgICAgICBpZiAoaXNUYXBQb2ludGVyICYmIGlzVGFwTW92ZW1lbnQgJiYgaXNUYXBUb3VjaFRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzUGFuWCAmJiBoYXNQYW5ZKSB7XG4gICAgICAgICAgICAvLyBgcGFuLXggcGFuLXlgIG1lYW5zIGJyb3dzZXIgaGFuZGxlcyBhbGwgc2Nyb2xsaW5nL3Bhbm5pbmcsIGRvIG5vdCBwcmV2ZW50XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzTm9uZSB8fFxuICAgICAgICAgICAgKGhhc1BhblkgJiYgZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHx8XG4gICAgICAgICAgICAoaGFzUGFuWCAmJiBkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmV2ZW50U3JjKHNyY0V2ZW50KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBjYWxsIHByZXZlbnREZWZhdWx0IHRvIHByZXZlbnQgdGhlIGJyb3dzZXIncyBkZWZhdWx0IGJlaGF2aW9yIChzY3JvbGxpbmcgaW4gbW9zdCBjYXNlcylcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gc3JjRXZlbnRcbiAgICAgKi9cbiAgICBwcmV2ZW50U3JjOiBmdW5jdGlvbihzcmNFdmVudCkge1xuICAgICAgICB0aGlzLm1hbmFnZXIuc2Vzc2lvbi5wcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgICBzcmNFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbn07XG5cbi8qKlxuICogd2hlbiB0aGUgdG91Y2hBY3Rpb25zIGFyZSBjb2xsZWN0ZWQgdGhleSBhcmUgbm90IGEgdmFsaWQgdmFsdWUsIHNvIHdlIG5lZWQgdG8gY2xlYW4gdGhpbmdzIHVwLiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYWN0aW9uc1xuICogQHJldHVybnMgeyp9XG4gKi9cbmZ1bmN0aW9uIGNsZWFuVG91Y2hBY3Rpb25zKGFjdGlvbnMpIHtcbiAgICAvLyBub25lXG4gICAgaWYgKGluU3RyKGFjdGlvbnMsIFRPVUNIX0FDVElPTl9OT05FKSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gICAgfVxuXG4gICAgdmFyIGhhc1BhblggPSBpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgIHZhciBoYXNQYW5ZID0gaW5TdHIoYWN0aW9ucywgVE9VQ0hfQUNUSU9OX1BBTl9ZKTtcblxuICAgIC8vIGlmIGJvdGggcGFuLXggYW5kIHBhbi15IGFyZSBzZXQgKGRpZmZlcmVudCByZWNvZ25pemVyc1xuICAgIC8vIGZvciBkaWZmZXJlbnQgZGlyZWN0aW9ucywgZS5nLiBob3Jpem9udGFsIHBhbiBidXQgdmVydGljYWwgc3dpcGU/KVxuICAgIC8vIHdlIG5lZWQgbm9uZSAoYXMgb3RoZXJ3aXNlIHdpdGggcGFuLXggcGFuLXkgY29tYmluZWQgbm9uZSBvZiB0aGVzZVxuICAgIC8vIHJlY29nbml6ZXJzIHdpbGwgd29yaywgc2luY2UgdGhlIGJyb3dzZXIgd291bGQgaGFuZGxlIGFsbCBwYW5uaW5nXG4gICAgaWYgKGhhc1BhblggJiYgaGFzUGFuWSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX05PTkU7XG4gICAgfVxuXG4gICAgLy8gcGFuLXggT1IgcGFuLXlcbiAgICBpZiAoaGFzUGFuWCB8fCBoYXNQYW5ZKSB7XG4gICAgICAgIHJldHVybiBoYXNQYW5YID8gVE9VQ0hfQUNUSU9OX1BBTl9YIDogVE9VQ0hfQUNUSU9OX1BBTl9ZO1xuICAgIH1cblxuICAgIC8vIG1hbmlwdWxhdGlvblxuICAgIGlmIChpblN0cihhY3Rpb25zLCBUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OKSkge1xuICAgICAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX01BTklQVUxBVElPTjtcbiAgICB9XG5cbiAgICByZXR1cm4gVE9VQ0hfQUNUSU9OX0FVVE87XG59XG5cbmZ1bmN0aW9uIGdldFRvdWNoQWN0aW9uUHJvcHMoKSB7XG4gICAgaWYgKCFOQVRJVkVfVE9VQ0hfQUNUSU9OKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdmFyIHRvdWNoTWFwID0ge307XG4gICAgdmFyIGNzc1N1cHBvcnRzID0gd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLnN1cHBvcnRzO1xuICAgIFsnYXV0bycsICdtYW5pcHVsYXRpb24nLCAncGFuLXknLCAncGFuLXgnLCAncGFuLXggcGFuLXknLCAnbm9uZSddLmZvckVhY2goZnVuY3Rpb24odmFsKSB7XG5cbiAgICAgICAgLy8gSWYgY3NzLnN1cHBvcnRzIGlzIG5vdCBzdXBwb3J0ZWQgYnV0IHRoZXJlIGlzIG5hdGl2ZSB0b3VjaC1hY3Rpb24gYXNzdW1lIGl0IHN1cHBvcnRzXG4gICAgICAgIC8vIGFsbCB2YWx1ZXMuIFRoaXMgaXMgdGhlIGNhc2UgZm9yIElFIDEwIGFuZCAxMS5cbiAgICAgICAgdG91Y2hNYXBbdmFsXSA9IGNzc1N1cHBvcnRzID8gd2luZG93LkNTUy5zdXBwb3J0cygndG91Y2gtYWN0aW9uJywgdmFsKSA6IHRydWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvdWNoTWFwO1xufVxuXG4vKipcbiAqIFJlY29nbml6ZXIgZmxvdyBleHBsYWluZWQ7ICpcbiAqIEFsbCByZWNvZ25pemVycyBoYXZlIHRoZSBpbml0aWFsIHN0YXRlIG9mIFBPU1NJQkxFIHdoZW4gYSBpbnB1dCBzZXNzaW9uIHN0YXJ0cy5cbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgaW5wdXQgc2Vzc2lvbiBpcyBmcm9tIHRoZSBmaXJzdCBpbnB1dCB1bnRpbCB0aGUgbGFzdCBpbnB1dCwgd2l0aCBhbGwgaXQncyBtb3ZlbWVudCBpbiBpdC4gKlxuICogRXhhbXBsZSBzZXNzaW9uIGZvciBtb3VzZS1pbnB1dDogbW91c2Vkb3duIC0+IG1vdXNlbW92ZSAtPiBtb3VzZXVwXG4gKlxuICogT24gZWFjaCByZWNvZ25pemluZyBjeWNsZSAoc2VlIE1hbmFnZXIucmVjb2duaXplKSB0aGUgLnJlY29nbml6ZSgpIG1ldGhvZCBpcyBleGVjdXRlZFxuICogd2hpY2ggZGV0ZXJtaW5lcyB3aXRoIHN0YXRlIGl0IHNob3VsZCBiZS5cbiAqXG4gKiBJZiB0aGUgcmVjb2duaXplciBoYXMgdGhlIHN0YXRlIEZBSUxFRCwgQ0FOQ0VMTEVEIG9yIFJFQ09HTklaRUQgKGVxdWFscyBFTkRFRCksIGl0IGlzIHJlc2V0IHRvXG4gKiBQT1NTSUJMRSB0byBnaXZlIGl0IGFub3RoZXIgY2hhbmdlIG9uIHRoZSBuZXh0IGN5Y2xlLlxuICpcbiAqICAgICAgICAgICAgICAgUG9zc2libGVcbiAqICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICArLS0tLS0rLS0tLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICArLS0tLS0rLS0tLS0rICAgICAgICAgICAgICAgfFxuICogICAgICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgfFxuICogICBGYWlsZWQgICAgICBDYW5jZWxsZWQgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tKy0tLS0tLStcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICBSZWNvZ25pemVkICAgICAgIEJlZ2FuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRlZC9SZWNvZ25pemVkXG4gKi9cbnZhciBTVEFURV9QT1NTSUJMRSA9IDE7XG52YXIgU1RBVEVfQkVHQU4gPSAyO1xudmFyIFNUQVRFX0NIQU5HRUQgPSA0O1xudmFyIFNUQVRFX0VOREVEID0gODtcbnZhciBTVEFURV9SRUNPR05JWkVEID0gU1RBVEVfRU5ERUQ7XG52YXIgU1RBVEVfQ0FOQ0VMTEVEID0gMTY7XG52YXIgU1RBVEVfRkFJTEVEID0gMzI7XG5cbi8qKlxuICogUmVjb2duaXplclxuICogRXZlcnkgcmVjb2duaXplciBuZWVkcyB0byBleHRlbmQgZnJvbSB0aGlzIGNsYXNzLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICovXG5mdW5jdGlvbiBSZWNvZ25pemVyKG9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBhc3NpZ24oe30sIHRoaXMuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdGhpcy5pZCA9IHVuaXF1ZUlkKCk7XG5cbiAgICB0aGlzLm1hbmFnZXIgPSBudWxsO1xuXG4gICAgLy8gZGVmYXVsdCBpcyBlbmFibGUgdHJ1ZVxuICAgIHRoaXMub3B0aW9ucy5lbmFibGUgPSBpZlVuZGVmaW5lZCh0aGlzLm9wdGlvbnMuZW5hYmxlLCB0cnVlKTtcblxuICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcblxuICAgIHRoaXMuc2ltdWx0YW5lb3VzID0ge307XG4gICAgdGhpcy5yZXF1aXJlRmFpbCA9IFtdO1xufVxuXG5SZWNvZ25pemVyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBAdmlydHVhbFxuICAgICAqIEB0eXBlIHtPYmplY3R9XG4gICAgICovXG4gICAgZGVmYXVsdHM6IHt9LFxuXG4gICAgLyoqXG4gICAgICogc2V0IG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgICAqIEByZXR1cm4ge1JlY29nbml6ZXJ9XG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIGFsc28gdXBkYXRlIHRoZSB0b3VjaEFjdGlvbiwgaW4gY2FzZSBzb21ldGhpbmcgY2hhbmdlZCBhYm91dCB0aGUgZGlyZWN0aW9ucy9lbmFibGVkIHN0YXRlXG4gICAgICAgIHRoaXMubWFuYWdlciAmJiB0aGlzLm1hbmFnZXIudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplci5cbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAgICovXG4gICAgcmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdyZWNvZ25pemVXaXRoJywgdGhpcykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpbXVsdGFuZW91cyA9IHRoaXMuc2ltdWx0YW5lb3VzO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIGlmICghc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF0pIHtcbiAgICAgICAgICAgIHNpbXVsdGFuZW91c1tvdGhlclJlY29nbml6ZXIuaWRdID0gb3RoZXJSZWNvZ25pemVyO1xuICAgICAgICAgICAgb3RoZXJSZWNvZ25pemVyLnJlY29nbml6ZVdpdGgodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGRyb3AgdGhlIHNpbXVsdGFuZW91cyBsaW5rLiBpdCBkb2VzbnQgcmVtb3ZlIHRoZSBsaW5rIG9uIHRoZSBvdGhlciByZWNvZ25pemVyLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge1JlY29nbml6ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBkcm9wUmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVjb2duaXplV2l0aCcsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyUmVjb2duaXplciA9IGdldFJlY29nbml6ZXJCeU5hbWVJZk1hbmFnZXIob3RoZXJSZWNvZ25pemVyLCB0aGlzKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZWNvZ25pemVyIGNhbiBvbmx5IHJ1biB3aGVuIGFuIG90aGVyIGlzIGZhaWxpbmdcbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IG90aGVyUmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtSZWNvZ25pemVyfSB0aGlzXG4gICAgICovXG4gICAgcmVxdWlyZUZhaWx1cmU6IGZ1bmN0aW9uKG90aGVyUmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcob3RoZXJSZWNvZ25pemVyLCAncmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmVxdWlyZUZhaWwgPSB0aGlzLnJlcXVpcmVGYWlsO1xuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIGlmIChpbkFycmF5KHJlcXVpcmVGYWlsLCBvdGhlclJlY29nbml6ZXIpID09PSAtMSkge1xuICAgICAgICAgICAgcmVxdWlyZUZhaWwucHVzaChvdGhlclJlY29nbml6ZXIpO1xuICAgICAgICAgICAgb3RoZXJSZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkcm9wIHRoZSByZXF1aXJlRmFpbHVyZSBsaW5rLiBpdCBkb2VzIG5vdCByZW1vdmUgdGhlIGxpbmsgb24gdGhlIG90aGVyIHJlY29nbml6ZXIuXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfSBvdGhlclJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcn0gdGhpc1xuICAgICAqL1xuICAgIGRyb3BSZXF1aXJlRmFpbHVyZTogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIGlmIChpbnZva2VBcnJheUFyZyhvdGhlclJlY29nbml6ZXIsICdkcm9wUmVxdWlyZUZhaWx1cmUnLCB0aGlzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlclJlY29nbml6ZXIgPSBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgdGhpcyk7XG4gICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkodGhpcy5yZXF1aXJlRmFpbCwgb3RoZXJSZWNvZ25pemVyKTtcbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMucmVxdWlyZUZhaWwuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogaGFzIHJlcXVpcmUgZmFpbHVyZXMgYm9vbGVhblxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGhhc1JlcXVpcmVGYWlsdXJlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCA+IDA7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGlmIHRoZSByZWNvZ25pemVyIGNhbiByZWNvZ25pemUgc2ltdWx0YW5lb3VzIHdpdGggYW4gb3RoZXIgcmVjb2duaXplclxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcn0gb3RoZXJSZWNvZ25pemVyXG4gICAgICogQHJldHVybnMge0Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuUmVjb2duaXplV2l0aDogZnVuY3Rpb24ob3RoZXJSZWNvZ25pemVyKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuc2ltdWx0YW5lb3VzW290aGVyUmVjb2duaXplci5pZF07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFlvdSBzaG91bGQgdXNlIGB0cnlFbWl0YCBpbnN0ZWFkIG9mIGBlbWl0YCBkaXJlY3RseSB0byBjaGVja1xuICAgICAqIHRoYXQgYWxsIHRoZSBuZWVkZWQgcmVjb2duaXplcnMgaGFzIGZhaWxlZCBiZWZvcmUgZW1pdHRpbmcuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGlucHV0XG4gICAgICovXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuXG4gICAgICAgIGZ1bmN0aW9uIGVtaXQoZXZlbnQpIHtcbiAgICAgICAgICAgIHNlbGYubWFuYWdlci5lbWl0KGV2ZW50LCBpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAncGFuc3RhcnQnIGFuZCAncGFubW92ZSdcbiAgICAgICAgaWYgKHN0YXRlIDwgU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50KTsgLy8gc2ltcGxlICdldmVudE5hbWUnIGV2ZW50c1xuXG4gICAgICAgIGlmIChpbnB1dC5hZGRpdGlvbmFsRXZlbnQpIHsgLy8gYWRkaXRpb25hbCBldmVudChwYW5sZWZ0LCBwYW5yaWdodCwgcGluY2hpbiwgcGluY2hvdXQuLi4pXG4gICAgICAgICAgICBlbWl0KGlucHV0LmFkZGl0aW9uYWxFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwYW5lbmQgYW5kIHBhbmNhbmNlbFxuICAgICAgICBpZiAoc3RhdGUgPj0gU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgICAgIGVtaXQoc2VsZi5vcHRpb25zLmV2ZW50ICsgc3RhdGVTdHIoc3RhdGUpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayB0aGF0IGFsbCB0aGUgcmVxdWlyZSBmYWlsdXJlIHJlY29nbml6ZXJzIGhhcyBmYWlsZWQsXG4gICAgICogaWYgdHJ1ZSwgaXQgZW1pdHMgYSBnZXN0dXJlIGV2ZW50LFxuICAgICAqIG90aGVyd2lzZSwgc2V0dXAgdGhlIHN0YXRlIHRvIEZBSUxFRC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKi9cbiAgICB0cnlFbWl0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5jYW5FbWl0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVtaXQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGl0J3MgZmFpbGluZyBhbnl3YXlcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogY2FuIHdlIGVtaXQ/XG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgY2FuRW1pdDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPCB0aGlzLnJlcXVpcmVGYWlsLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKCEodGhpcy5yZXF1aXJlRmFpbFtpXS5zdGF0ZSAmIChTVEFURV9GQUlMRUQgfCBTVEFURV9QT1NTSUJMRSkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiB1cGRhdGUgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbihpbnB1dERhdGEpIHtcbiAgICAgICAgLy8gbWFrZSBhIG5ldyBjb3B5IG9mIHRoZSBpbnB1dERhdGFcbiAgICAgICAgLy8gc28gd2UgY2FuIGNoYW5nZSB0aGUgaW5wdXREYXRhIHdpdGhvdXQgbWVzc2luZyB1cCB0aGUgb3RoZXIgcmVjb2duaXplcnNcbiAgICAgICAgdmFyIGlucHV0RGF0YUNsb25lID0gYXNzaWduKHt9LCBpbnB1dERhdGEpO1xuXG4gICAgICAgIC8vIGlzIGlzIGVuYWJsZWQgYW5kIGFsbG93IHJlY29nbml6aW5nP1xuICAgICAgICBpZiAoIWJvb2xPckZuKHRoaXMub3B0aW9ucy5lbmFibGUsIFt0aGlzLCBpbnB1dERhdGFDbG9uZV0pKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfRkFJTEVEO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVzZXQgd2hlbiB3ZSd2ZSByZWFjaGVkIHRoZSBlbmRcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgJiAoU1RBVEVfUkVDT0dOSVpFRCB8IFNUQVRFX0NBTkNFTExFRCB8IFNUQVRFX0ZBSUxFRCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTVEFURV9QT1NTSUJMRTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnByb2Nlc3MoaW5wdXREYXRhQ2xvbmUpO1xuXG4gICAgICAgIC8vIHRoZSByZWNvZ25pemVyIGhhcyByZWNvZ25pemVkIGEgZ2VzdHVyZVxuICAgICAgICAvLyBzbyB0cmlnZ2VyIGFuIGV2ZW50XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICYgKFNUQVRFX0JFR0FOIHwgU1RBVEVfQ0hBTkdFRCB8IFNUQVRFX0VOREVEIHwgU1RBVEVfQ0FOQ0VMTEVEKSkge1xuICAgICAgICAgICAgdGhpcy50cnlFbWl0KGlucHV0RGF0YUNsb25lKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gdGhlIHN0YXRlIG9mIHRoZSByZWNvZ25pemVyXG4gICAgICogdGhlIGFjdHVhbCByZWNvZ25pemluZyBoYXBwZW5zIGluIHRoaXMgbWV0aG9kXG4gICAgICogQHZpcnR1YWxcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICogQHJldHVybnMge0NvbnN0fSBTVEFURVxuICAgICAqL1xuICAgIHByb2Nlc3M6IGZ1bmN0aW9uKGlucHV0RGF0YSkgeyB9LCAvLyBqc2hpbnQgaWdub3JlOmxpbmVcblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgcHJlZmVycmVkIHRvdWNoLWFjdGlvblxuICAgICAqIEB2aXJ0dWFsXG4gICAgICogQHJldHVybnMge0FycmF5fVxuICAgICAqL1xuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbigpIHsgfSxcblxuICAgIC8qKlxuICAgICAqIGNhbGxlZCB3aGVuIHRoZSBnZXN0dXJlIGlzbid0IGFsbG93ZWQgdG8gcmVjb2duaXplXG4gICAgICogbGlrZSB3aGVuIGFub3RoZXIgaXMgYmVpbmcgcmVjb2duaXplZCBvciBpdCBpcyBkaXNhYmxlZFxuICAgICAqIEB2aXJ0dWFsXG4gICAgICovXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkgeyB9XG59O1xuXG4vKipcbiAqIGdldCBhIHVzYWJsZSBzdHJpbmcsIHVzZWQgYXMgZXZlbnQgcG9zdGZpeFxuICogQHBhcmFtIHtDb25zdH0gc3RhdGVcbiAqIEByZXR1cm5zIHtTdHJpbmd9IHN0YXRlXG4gKi9cbmZ1bmN0aW9uIHN0YXRlU3RyKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlICYgU1RBVEVfQ0FOQ0VMTEVEKSB7XG4gICAgICAgIHJldHVybiAnY2FuY2VsJztcbiAgICB9IGVsc2UgaWYgKHN0YXRlICYgU1RBVEVfRU5ERUQpIHtcbiAgICAgICAgcmV0dXJuICdlbmQnO1xuICAgIH0gZWxzZSBpZiAoc3RhdGUgJiBTVEFURV9DSEFOR0VEKSB7XG4gICAgICAgIHJldHVybiAnbW92ZSc7XG4gICAgfSBlbHNlIGlmIChzdGF0ZSAmIFNUQVRFX0JFR0FOKSB7XG4gICAgICAgIHJldHVybiAnc3RhcnQnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogZGlyZWN0aW9uIGNvbnMgdG8gc3RyaW5nXG4gKiBAcGFyYW0ge0NvbnN0fSBkaXJlY3Rpb25cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGRpcmVjdGlvblN0cihkaXJlY3Rpb24pIHtcbiAgICBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9ET1dOKSB7XG4gICAgICAgIHJldHVybiAnZG93bic7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRElSRUNUSU9OX1VQKSB7XG4gICAgICAgIHJldHVybiAndXAnO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09IERJUkVDVElPTl9MRUZUKSB7XG4gICAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gRElSRUNUSU9OX1JJR0hUKSB7XG4gICAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogZ2V0IGEgcmVjb2duaXplciBieSBuYW1lIGlmIGl0IGlzIGJvdW5kIHRvIGEgbWFuYWdlclxuICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gb3RoZXJSZWNvZ25pemVyXG4gKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAqIEByZXR1cm5zIHtSZWNvZ25pemVyfVxuICovXG5mdW5jdGlvbiBnZXRSZWNvZ25pemVyQnlOYW1lSWZNYW5hZ2VyKG90aGVyUmVjb2duaXplciwgcmVjb2duaXplcikge1xuICAgIHZhciBtYW5hZ2VyID0gcmVjb2duaXplci5tYW5hZ2VyO1xuICAgIGlmIChtYW5hZ2VyKSB7XG4gICAgICAgIHJldHVybiBtYW5hZ2VyLmdldChvdGhlclJlY29nbml6ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gb3RoZXJSZWNvZ25pemVyO1xufVxuXG4vKipcbiAqIFRoaXMgcmVjb2duaXplciBpcyBqdXN0IHVzZWQgYXMgYSBiYXNlIGZvciB0aGUgc2ltcGxlIGF0dHJpYnV0ZSByZWNvZ25pemVycy5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBBdHRyUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmluaGVyaXQoQXR0clJlY29nbml6ZXIsIFJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIEF0dHJSZWNvZ25pemVyXG4gICAgICovXG4gICAgZGVmYXVsdHM6IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEB0eXBlIHtOdW1iZXJ9XG4gICAgICAgICAqIEBkZWZhdWx0IDFcbiAgICAgICAgICovXG4gICAgICAgIHBvaW50ZXJzOiAxXG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVzZWQgdG8gY2hlY2sgaWYgaXQgdGhlIHJlY29nbml6ZXIgcmVjZWl2ZXMgdmFsaWQgaW5wdXQsIGxpa2UgaW5wdXQuZGlzdGFuY2UgPiAxMC5cbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gcmVjb2duaXplZFxuICAgICAqL1xuICAgIGF0dHJUZXN0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgb3B0aW9uUG9pbnRlcnMgPSB0aGlzLm9wdGlvbnMucG9pbnRlcnM7XG4gICAgICAgIHJldHVybiBvcHRpb25Qb2ludGVycyA9PT0gMCB8fCBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvblBvaW50ZXJzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzIHRoZSBpbnB1dCBhbmQgcmV0dXJuIHRoZSBzdGF0ZSBmb3IgdGhlIHJlY29nbml6ZXJcbiAgICAgKiBAbWVtYmVyb2YgQXR0clJlY29nbml6ZXJcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXRcbiAgICAgKiBAcmV0dXJucyB7Kn0gU3RhdGVcbiAgICAgKi9cbiAgICBwcm9jZXNzOiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgICB2YXIgZXZlbnRUeXBlID0gaW5wdXQuZXZlbnRUeXBlO1xuXG4gICAgICAgIHZhciBpc1JlY29nbml6ZWQgPSBzdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQpO1xuICAgICAgICB2YXIgaXNWYWxpZCA9IHRoaXMuYXR0clRlc3QoaW5wdXQpO1xuXG4gICAgICAgIC8vIG9uIGNhbmNlbCBpbnB1dCBhbmQgd2UndmUgcmVjb2duaXplZCBiZWZvcmUsIHJldHVybiBTVEFURV9DQU5DRUxMRURcbiAgICAgICAgaWYgKGlzUmVjb2duaXplZCAmJiAoZXZlbnRUeXBlICYgSU5QVVRfQ0FOQ0VMIHx8ICFpc1ZhbGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfQ0FOQ0VMTEVEO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUmVjb2duaXplZCB8fCBpc1ZhbGlkKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlIHwgU1RBVEVfRU5ERUQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCEoc3RhdGUgJiBTVEFURV9CRUdBTikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfQkVHQU47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUgfCBTVEFURV9DSEFOR0VEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBTVEFURV9GQUlMRUQ7XG4gICAgfVxufSk7XG5cbi8qKlxuICogUGFuXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBhbmQgbW92ZWQgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQYW5SZWNvZ25pemVyKCkge1xuICAgIEF0dHJSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICB0aGlzLnBYID0gbnVsbDtcbiAgICB0aGlzLnBZID0gbnVsbDtcbn1cblxuaW5oZXJpdChQYW5SZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUGFuUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncGFuJyxcbiAgICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgICAgcG9pbnRlcnM6IDEsXG4gICAgICAgIGRpcmVjdGlvbjogRElSRUNUSU9OX0FMTFxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgICAgICB2YXIgYWN0aW9ucyA9IFtdO1xuICAgICAgICBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1kpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkaXJlY3Rpb24gJiBESVJFQ1RJT05fVkVSVElDQUwpIHtcbiAgICAgICAgICAgIGFjdGlvbnMucHVzaChUT1VDSF9BQ1RJT05fUEFOX1gpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb25zO1xuICAgIH0sXG5cbiAgICBkaXJlY3Rpb25UZXN0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgdmFyIGhhc01vdmVkID0gdHJ1ZTtcbiAgICAgICAgdmFyIGRpc3RhbmNlID0gaW5wdXQuZGlzdGFuY2U7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBpbnB1dC5kaXJlY3Rpb247XG4gICAgICAgIHZhciB4ID0gaW5wdXQuZGVsdGFYO1xuICAgICAgICB2YXIgeSA9IGlucHV0LmRlbHRhWTtcblxuICAgICAgICAvLyBsb2NrIHRvIGF4aXM/XG4gICAgICAgIGlmICghKGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGlyZWN0aW9uICYgRElSRUNUSU9OX0hPUklaT05UQUwpIHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSAoeCA9PT0gMCkgPyBESVJFQ1RJT05fTk9ORSA6ICh4IDwgMCkgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICAgICAgICAgICAgICBoYXNNb3ZlZCA9IHggIT0gdGhpcy5wWDtcbiAgICAgICAgICAgICAgICBkaXN0YW5jZSA9IE1hdGguYWJzKGlucHV0LmRlbHRhWCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICh5ID09PSAwKSA/IERJUkVDVElPTl9OT05FIDogKHkgPCAwKSA/IERJUkVDVElPTl9VUCA6IERJUkVDVElPTl9ET1dOO1xuICAgICAgICAgICAgICAgIGhhc01vdmVkID0geSAhPSB0aGlzLnBZO1xuICAgICAgICAgICAgICAgIGRpc3RhbmNlID0gTWF0aC5hYnMoaW5wdXQuZGVsdGFZKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpbnB1dC5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgIHJldHVybiBoYXNNb3ZlZCAmJiBkaXN0YW5jZSA+IG9wdGlvbnMudGhyZXNob2xkICYmIGRpcmVjdGlvbiAmIG9wdGlvbnMuZGlyZWN0aW9uO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIEF0dHJSZWNvZ25pemVyLnByb3RvdHlwZS5hdHRyVGVzdC5jYWxsKHRoaXMsIGlucHV0KSAmJlxuICAgICAgICAgICAgKHRoaXMuc3RhdGUgJiBTVEFURV9CRUdBTiB8fCAoISh0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pICYmIHRoaXMuZGlyZWN0aW9uVGVzdChpbnB1dCkpKTtcbiAgICB9LFxuXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcblxuICAgICAgICB0aGlzLnBYID0gaW5wdXQuZGVsdGFYO1xuICAgICAgICB0aGlzLnBZID0gaW5wdXQuZGVsdGFZO1xuXG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSBkaXJlY3Rpb25TdHIoaW5wdXQuZGlyZWN0aW9uKTtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBkaXJlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3VwZXIuZW1pdC5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB9XG59KTtcblxuLyoqXG4gKiBQaW5jaFxuICogUmVjb2duaXplZCB3aGVuIHR3byBvciBtb3JlIHBvaW50ZXJzIGFyZSBtb3ZpbmcgdG93YXJkICh6b29tLWluKSBvciBhd2F5IGZyb20gZWFjaCBvdGhlciAoem9vbS1vdXQpLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQaW5jaFJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChQaW5jaFJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQaW5jaFJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3BpbmNoJyxcbiAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICBwb2ludGVyczogMlxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmXG4gICAgICAgICAgICAoTWF0aC5hYnMoaW5wdXQuc2NhbGUgLSAxKSA+IHRoaXMub3B0aW9ucy50aHJlc2hvbGQgfHwgdGhpcy5zdGF0ZSAmIFNUQVRFX0JFR0FOKTtcbiAgICB9LFxuXG4gICAgZW1pdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0LnNjYWxlICE9PSAxKSB7XG4gICAgICAgICAgICB2YXIgaW5PdXQgPSBpbnB1dC5zY2FsZSA8IDEgPyAnaW4nIDogJ291dCc7XG4gICAgICAgICAgICBpbnB1dC5hZGRpdGlvbmFsRXZlbnQgPSB0aGlzLm9wdGlvbnMuZXZlbnQgKyBpbk91dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdXBlci5lbWl0LmNhbGwodGhpcywgaW5wdXQpO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIFByZXNzXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG93biBmb3IgeCBtcyB3aXRob3V0IGFueSBtb3ZlbWVudC5cbiAqIEBjb25zdHJ1Y3RvclxuICogQGV4dGVuZHMgUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBQcmVzc1JlY29nbml6ZXIoKSB7XG4gICAgUmVjb2duaXplci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbn1cblxuaW5oZXJpdChQcmVzc1JlY29nbml6ZXIsIFJlY29nbml6ZXIsIHtcbiAgICAvKipcbiAgICAgKiBAbmFtZXNwYWNlXG4gICAgICogQG1lbWJlcm9mIFByZXNzUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncHJlc3MnLFxuICAgICAgICBwb2ludGVyczogMSxcbiAgICAgICAgdGltZTogMjUxLCAvLyBtaW5pbWFsIHRpbWUgb2YgdGhlIHBvaW50ZXIgdG8gYmUgcHJlc3NlZFxuICAgICAgICB0aHJlc2hvbGQ6IDkgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICB9LFxuXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gW1RPVUNIX0FDVElPTl9BVVRPXTtcbiAgICB9LFxuXG4gICAgcHJvY2VzczogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHZhciB2YWxpZFBvaW50ZXJzID0gaW5wdXQucG9pbnRlcnMubGVuZ3RoID09PSBvcHRpb25zLnBvaW50ZXJzO1xuICAgICAgICB2YXIgdmFsaWRNb3ZlbWVudCA9IGlucHV0LmRpc3RhbmNlIDwgb3B0aW9ucy50aHJlc2hvbGQ7XG4gICAgICAgIHZhciB2YWxpZFRpbWUgPSBpbnB1dC5kZWx0YVRpbWUgPiBvcHRpb25zLnRpbWU7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSBpbnB1dDtcblxuICAgICAgICAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgICAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG4gICAgICAgIGlmICghdmFsaWRNb3ZlbWVudCB8fCAhdmFsaWRQb2ludGVycyB8fCAoaW5wdXQuZXZlbnRUeXBlICYgKElOUFVUX0VORCB8IElOUFVUX0NBTkNFTCkgJiYgIXZhbGlkVGltZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dC5ldmVudFR5cGUgJiBJTlBVVF9TVEFSVCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0Q29udGV4dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICAgICAgICB0aGlzLnRyeUVtaXQoKTtcbiAgICAgICAgICAgIH0sIG9wdGlvbnMudGltZSwgdGhpcyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU1RBVEVfRkFJTEVEO1xuICAgIH0sXG5cbiAgICByZXNldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgfSxcblxuICAgIGVtaXQ6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9PSBTVEFURV9SRUNPR05JWkVEKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5wdXQgJiYgKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX0VORCkpIHtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArICd1cCcsIGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LnRpbWVTdGFtcCA9IG5vdygpO1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBSb3RhdGVcbiAqIFJlY29nbml6ZWQgd2hlbiB0d28gb3IgbW9yZSBwb2ludGVyIGFyZSBtb3ZpbmcgaW4gYSBjaXJjdWxhciBtb3Rpb24uXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIEF0dHJSZWNvZ25pemVyXG4gKi9cbmZ1bmN0aW9uIFJvdGF0ZVJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChSb3RhdGVSZWNvZ25pemVyLCBBdHRyUmVjb2duaXplciwge1xuICAgIC8qKlxuICAgICAqIEBuYW1lc3BhY2VcbiAgICAgKiBAbWVtYmVyb2YgUm90YXRlUmVjb2duaXplclxuICAgICAqL1xuICAgIGRlZmF1bHRzOiB7XG4gICAgICAgIGV2ZW50OiAncm90YXRlJyxcbiAgICAgICAgdGhyZXNob2xkOiAwLFxuICAgICAgICBwb2ludGVyczogMlxuICAgIH0sXG5cbiAgICBnZXRUb3VjaEFjdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBbVE9VQ0hfQUNUSU9OX05PTkVdO1xuICAgIH0sXG5cbiAgICBhdHRyVGVzdDogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1cGVyLmF0dHJUZXN0LmNhbGwodGhpcywgaW5wdXQpICYmXG4gICAgICAgICAgICAoTWF0aC5hYnMoaW5wdXQucm90YXRpb24pID4gdGhpcy5vcHRpb25zLnRocmVzaG9sZCB8fCB0aGlzLnN0YXRlICYgU1RBVEVfQkVHQU4pO1xuICAgIH1cbn0pO1xuXG4vKipcbiAqIFN3aXBlXG4gKiBSZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgbW92aW5nIGZhc3QgKHZlbG9jaXR5KSwgd2l0aCBlbm91Z2ggZGlzdGFuY2UgaW4gdGhlIGFsbG93ZWQgZGlyZWN0aW9uLlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBBdHRyUmVjb2duaXplclxuICovXG5mdW5jdGlvbiBTd2lwZVJlY29nbml6ZXIoKSB7XG4gICAgQXR0clJlY29nbml6ZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cblxuaW5oZXJpdChTd2lwZVJlY29nbml6ZXIsIEF0dHJSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBTd2lwZVJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3N3aXBlJyxcbiAgICAgICAgdGhyZXNob2xkOiAxMCxcbiAgICAgICAgdmVsb2NpdHk6IDAuMyxcbiAgICAgICAgZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICAgICAgcG9pbnRlcnM6IDFcbiAgICB9LFxuXG4gICAgZ2V0VG91Y2hBY3Rpb246IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gUGFuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG91Y2hBY3Rpb24uY2FsbCh0aGlzKTtcbiAgICB9LFxuXG4gICAgYXR0clRlc3Q6IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xuICAgICAgICB2YXIgdmVsb2NpdHk7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiAmIChESVJFQ1RJT05fSE9SSVpPTlRBTCB8IERJUkVDVElPTl9WRVJUSUNBTCkpIHtcbiAgICAgICAgICAgIHZlbG9jaXR5ID0gaW5wdXQub3ZlcmFsbFZlbG9jaXR5O1xuICAgICAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiAmIERJUkVDVElPTl9IT1JJWk9OVEFMKSB7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVg7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uICYgRElSRUNUSU9OX1ZFUlRJQ0FMKSB7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IGlucHV0Lm92ZXJhbGxWZWxvY2l0eVk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc3VwZXIuYXR0clRlc3QuY2FsbCh0aGlzLCBpbnB1dCkgJiZcbiAgICAgICAgICAgIGRpcmVjdGlvbiAmIGlucHV0Lm9mZnNldERpcmVjdGlvbiAmJlxuICAgICAgICAgICAgaW5wdXQuZGlzdGFuY2UgPiB0aGlzLm9wdGlvbnMudGhyZXNob2xkICYmXG4gICAgICAgICAgICBpbnB1dC5tYXhQb2ludGVycyA9PSB0aGlzLm9wdGlvbnMucG9pbnRlcnMgJiZcbiAgICAgICAgICAgIGFicyh2ZWxvY2l0eSkgPiB0aGlzLm9wdGlvbnMudmVsb2NpdHkgJiYgaW5wdXQuZXZlbnRUeXBlICYgSU5QVVRfRU5EO1xuICAgIH0sXG5cbiAgICBlbWl0OiBmdW5jdGlvbihpbnB1dCkge1xuICAgICAgICB2YXIgZGlyZWN0aW9uID0gZGlyZWN0aW9uU3RyKGlucHV0Lm9mZnNldERpcmVjdGlvbik7XG4gICAgICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMubWFuYWdlci5lbWl0KHRoaXMub3B0aW9ucy5ldmVudCArIGRpcmVjdGlvbiwgaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCBpbnB1dCk7XG4gICAgfVxufSk7XG5cbi8qKlxuICogQSB0YXAgaXMgZWNvZ25pemVkIHdoZW4gdGhlIHBvaW50ZXIgaXMgZG9pbmcgYSBzbWFsbCB0YXAvY2xpY2suIE11bHRpcGxlIHRhcHMgYXJlIHJlY29nbml6ZWQgaWYgdGhleSBvY2N1clxuICogYmV0d2VlbiB0aGUgZ2l2ZW4gaW50ZXJ2YWwgYW5kIHBvc2l0aW9uLiBUaGUgZGVsYXkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHJlY29nbml6ZSBtdWx0aS10YXBzIHdpdGhvdXQgZmlyaW5nXG4gKiBhIHNpbmdsZSB0YXAuXG4gKlxuICogVGhlIGV2ZW50RGF0YSBmcm9tIHRoZSBlbWl0dGVkIGV2ZW50IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSBgdGFwQ291bnRgLCB3aGljaCBjb250YWlucyB0aGUgYW1vdW50IG9mXG4gKiBtdWx0aS10YXBzIGJlaW5nIHJlY29nbml6ZWQuXG4gKiBAY29uc3RydWN0b3JcbiAqIEBleHRlbmRzIFJlY29nbml6ZXJcbiAqL1xuZnVuY3Rpb24gVGFwUmVjb2duaXplcigpIHtcbiAgICBSZWNvZ25pemVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBwcmV2aW91cyB0aW1lIGFuZCBjZW50ZXIsXG4gICAgLy8gdXNlZCBmb3IgdGFwIGNvdW50aW5nXG4gICAgdGhpcy5wVGltZSA9IGZhbHNlO1xuICAgIHRoaXMucENlbnRlciA9IGZhbHNlO1xuXG4gICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgIHRoaXMuX2lucHV0ID0gbnVsbDtcbiAgICB0aGlzLmNvdW50ID0gMDtcbn1cblxuaW5oZXJpdChUYXBSZWNvZ25pemVyLCBSZWNvZ25pemVyLCB7XG4gICAgLyoqXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqIEBtZW1iZXJvZiBQaW5jaFJlY29nbml6ZXJcbiAgICAgKi9cbiAgICBkZWZhdWx0czoge1xuICAgICAgICBldmVudDogJ3RhcCcsXG4gICAgICAgIHBvaW50ZXJzOiAxLFxuICAgICAgICB0YXBzOiAxLFxuICAgICAgICBpbnRlcnZhbDogMzAwLCAvLyBtYXggdGltZSBiZXR3ZWVuIHRoZSBtdWx0aS10YXAgdGFwc1xuICAgICAgICB0aW1lOiAyNTAsIC8vIG1heCB0aW1lIG9mIHRoZSBwb2ludGVyIHRvIGJlIGRvd24gKGxpa2UgZmluZ2VyIG9uIHRoZSBzY3JlZW4pXG4gICAgICAgIHRocmVzaG9sZDogOSwgLy8gYSBtaW5pbWFsIG1vdmVtZW50IGlzIG9rLCBidXQga2VlcCBpdCBsb3dcbiAgICAgICAgcG9zVGhyZXNob2xkOiAxMCAvLyBhIG11bHRpLXRhcCBjYW4gYmUgYSBiaXQgb2ZmIHRoZSBpbml0aWFsIHBvc2l0aW9uXG4gICAgfSxcblxuICAgIGdldFRvdWNoQWN0aW9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIFtUT1VDSF9BQ1RJT05fTUFOSVBVTEFUSU9OXTtcbiAgICB9LFxuXG4gICAgcHJvY2VzczogZnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgICAgICAgdmFyIHZhbGlkUG9pbnRlcnMgPSBpbnB1dC5wb2ludGVycy5sZW5ndGggPT09IG9wdGlvbnMucG9pbnRlcnM7XG4gICAgICAgIHZhciB2YWxpZE1vdmVtZW50ID0gaW5wdXQuZGlzdGFuY2UgPCBvcHRpb25zLnRocmVzaG9sZDtcbiAgICAgICAgdmFyIHZhbGlkVG91Y2hUaW1lID0gaW5wdXQuZGVsdGFUaW1lIDwgb3B0aW9ucy50aW1lO1xuXG4gICAgICAgIHRoaXMucmVzZXQoKTtcblxuICAgICAgICBpZiAoKGlucHV0LmV2ZW50VHlwZSAmIElOUFVUX1NUQVJUKSAmJiAodGhpcy5jb3VudCA9PT0gMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZhaWxUaW1lb3V0KCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3ZSBvbmx5IGFsbG93IGxpdHRsZSBtb3ZlbWVudFxuICAgICAgICAvLyBhbmQgd2UndmUgcmVhY2hlZCBhbiBlbmQgZXZlbnQsIHNvIGEgdGFwIGlzIHBvc3NpYmxlXG4gICAgICAgIGlmICh2YWxpZE1vdmVtZW50ICYmIHZhbGlkVG91Y2hUaW1lICYmIHZhbGlkUG9pbnRlcnMpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5ldmVudFR5cGUgIT0gSU5QVVRfRU5EKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmFpbFRpbWVvdXQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHZhbGlkSW50ZXJ2YWwgPSB0aGlzLnBUaW1lID8gKGlucHV0LnRpbWVTdGFtcCAtIHRoaXMucFRpbWUgPCBvcHRpb25zLmludGVydmFsKSA6IHRydWU7XG4gICAgICAgICAgICB2YXIgdmFsaWRNdWx0aVRhcCA9ICF0aGlzLnBDZW50ZXIgfHwgZ2V0RGlzdGFuY2UodGhpcy5wQ2VudGVyLCBpbnB1dC5jZW50ZXIpIDwgb3B0aW9ucy5wb3NUaHJlc2hvbGQ7XG5cbiAgICAgICAgICAgIHRoaXMucFRpbWUgPSBpbnB1dC50aW1lU3RhbXA7XG4gICAgICAgICAgICB0aGlzLnBDZW50ZXIgPSBpbnB1dC5jZW50ZXI7XG5cbiAgICAgICAgICAgIGlmICghdmFsaWRNdWx0aVRhcCB8fCAhdmFsaWRJbnRlcnZhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnQgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ICs9IDE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cbiAgICAgICAgICAgIC8vIGlmIHRhcCBjb3VudCBtYXRjaGVzIHdlIGhhdmUgcmVjb2duaXplZCBpdCxcbiAgICAgICAgICAgIC8vIGVsc2UgaXQgaGFzIGJlZ2FuIHJlY29nbml6aW5nLi4uXG4gICAgICAgICAgICB2YXIgdGFwQ291bnQgPSB0aGlzLmNvdW50ICUgb3B0aW9ucy50YXBzO1xuICAgICAgICAgICAgaWYgKHRhcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gZmFpbGluZyByZXF1aXJlbWVudHMsIGltbWVkaWF0ZWx5IHRyaWdnZXIgdGhlIHRhcCBldmVudFxuICAgICAgICAgICAgICAgIC8vIG9yIHdhaXQgYXMgbG9uZyBhcyB0aGUgbXVsdGl0YXAgaW50ZXJ2YWwgdG8gdHJpZ2dlclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5oYXNSZXF1aXJlRmFpbHVyZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1RBVEVfUkVDT0dOSVpFRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXRDb250ZXh0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX1JFQ09HTklaRUQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgb3B0aW9ucy5pbnRlcnZhbCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTVEFURV9CRUdBTjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgZmFpbFRpbWVvdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLl90aW1lciA9IHNldFRpbWVvdXRDb250ZXh0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFNUQVRFX0ZBSUxFRDtcbiAgICAgICAgfSwgdGhpcy5vcHRpb25zLmludGVydmFsLCB0aGlzKTtcbiAgICAgICAgcmV0dXJuIFNUQVRFX0ZBSUxFRDtcbiAgICB9LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgIH0sXG5cbiAgICBlbWl0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgPT0gU1RBVEVfUkVDT0dOSVpFRCkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXQudGFwQ291bnQgPSB0aGlzLmNvdW50O1xuICAgICAgICAgICAgdGhpcy5tYW5hZ2VyLmVtaXQodGhpcy5vcHRpb25zLmV2ZW50LCB0aGlzLl9pbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcblxuLyoqXG4gKiBTaW1wbGUgd2F5IHRvIGNyZWF0ZSBhIG1hbmFnZXIgd2l0aCBhIGRlZmF1bHQgc2V0IG9mIHJlY29nbml6ZXJzLlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmZ1bmN0aW9uIEhhbW1lcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgb3B0aW9ucy5yZWNvZ25pemVycyA9IGlmVW5kZWZpbmVkKG9wdGlvbnMucmVjb2duaXplcnMsIEhhbW1lci5kZWZhdWx0cy5wcmVzZXQpO1xuICAgIHJldHVybiBuZXcgTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBAY29uc3Qge3N0cmluZ31cbiAqL1xuSGFtbWVyLlZFUlNJT04gPSAnMi4wLjcnO1xuXG4vKipcbiAqIGRlZmF1bHQgc2V0dGluZ3NcbiAqIEBuYW1lc3BhY2VcbiAqL1xuSGFtbWVyLmRlZmF1bHRzID0ge1xuICAgIC8qKlxuICAgICAqIHNldCBpZiBET00gZXZlbnRzIGFyZSBiZWluZyB0cmlnZ2VyZWQuXG4gICAgICogQnV0IHRoaXMgaXMgc2xvd2VyIGFuZCB1bnVzZWQgYnkgc2ltcGxlIGltcGxlbWVudGF0aW9ucywgc28gZGlzYWJsZWQgYnkgZGVmYXVsdC5cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIGRvbUV2ZW50czogZmFsc2UsXG5cbiAgICAvKipcbiAgICAgKiBUaGUgdmFsdWUgZm9yIHRoZSB0b3VjaEFjdGlvbiBwcm9wZXJ0eS9mYWxsYmFjay5cbiAgICAgKiBXaGVuIHNldCB0byBgY29tcHV0ZWAgaXQgd2lsbCBtYWdpY2FsbHkgc2V0IHRoZSBjb3JyZWN0IHZhbHVlIGJhc2VkIG9uIHRoZSBhZGRlZCByZWNvZ25pemVycy5cbiAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAqIEBkZWZhdWx0IGNvbXB1dGVcbiAgICAgKi9cbiAgICB0b3VjaEFjdGlvbjogVE9VQ0hfQUNUSU9OX0NPTVBVVEUsXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlOiB0cnVlLFxuXG4gICAgLyoqXG4gICAgICogRVhQRVJJTUVOVEFMIEZFQVRVUkUgLS0gY2FuIGJlIHJlbW92ZWQvY2hhbmdlZFxuICAgICAqIENoYW5nZSB0aGUgcGFyZW50IGlucHV0IHRhcmdldCBlbGVtZW50LlxuICAgICAqIElmIE51bGwsIHRoZW4gaXQgaXMgYmVpbmcgc2V0IHRoZSB0byBtYWluIGVsZW1lbnQuXG4gICAgICogQHR5cGUge051bGx8RXZlbnRUYXJnZXR9XG4gICAgICogQGRlZmF1bHQgbnVsbFxuICAgICAqL1xuICAgIGlucHV0VGFyZ2V0OiBudWxsLFxuXG4gICAgLyoqXG4gICAgICogZm9yY2UgYW4gaW5wdXQgY2xhc3NcbiAgICAgKiBAdHlwZSB7TnVsbHxGdW5jdGlvbn1cbiAgICAgKiBAZGVmYXVsdCBudWxsXG4gICAgICovXG4gICAgaW5wdXRDbGFzczogbnVsbCxcblxuICAgIC8qKlxuICAgICAqIERlZmF1bHQgcmVjb2duaXplciBzZXR1cCB3aGVuIGNhbGxpbmcgYEhhbW1lcigpYFxuICAgICAqIFdoZW4gY3JlYXRpbmcgYSBuZXcgTWFuYWdlciB0aGVzZSB3aWxsIGJlIHNraXBwZWQuXG4gICAgICogQHR5cGUge0FycmF5fVxuICAgICAqL1xuICAgIHByZXNldDogW1xuICAgICAgICAvLyBSZWNvZ25pemVyQ2xhc3MsIG9wdGlvbnMsIFtyZWNvZ25pemVXaXRoLCAuLi5dLCBbcmVxdWlyZUZhaWx1cmUsIC4uLl1cbiAgICAgICAgW1JvdGF0ZVJlY29nbml6ZXIsIHtlbmFibGU6IGZhbHNlfV0sXG4gICAgICAgIFtQaW5jaFJlY29nbml6ZXIsIHtlbmFibGU6IGZhbHNlfSwgWydyb3RhdGUnXV0sXG4gICAgICAgIFtTd2lwZVJlY29nbml6ZXIsIHtkaXJlY3Rpb246IERJUkVDVElPTl9IT1JJWk9OVEFMfV0sXG4gICAgICAgIFtQYW5SZWNvZ25pemVyLCB7ZGlyZWN0aW9uOiBESVJFQ1RJT05fSE9SSVpPTlRBTH0sIFsnc3dpcGUnXV0sXG4gICAgICAgIFtUYXBSZWNvZ25pemVyXSxcbiAgICAgICAgW1RhcFJlY29nbml6ZXIsIHtldmVudDogJ2RvdWJsZXRhcCcsIHRhcHM6IDJ9LCBbJ3RhcCddXSxcbiAgICAgICAgW1ByZXNzUmVjb2duaXplcl1cbiAgICBdLFxuXG4gICAgLyoqXG4gICAgICogU29tZSBDU1MgcHJvcGVydGllcyBjYW4gYmUgdXNlZCB0byBpbXByb3ZlIHRoZSB3b3JraW5nIG9mIEhhbW1lci5cbiAgICAgKiBBZGQgdGhlbSB0byB0aGlzIG1ldGhvZCBhbmQgdGhleSB3aWxsIGJlIHNldCB3aGVuIGNyZWF0aW5nIGEgbmV3IE1hbmFnZXIuXG4gICAgICogQG5hbWVzcGFjZVxuICAgICAqL1xuICAgIGNzc1Byb3BzOiB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlcyB0ZXh0IHNlbGVjdGlvbiB0byBpbXByb3ZlIHRoZSBkcmFnZ2luZyBnZXN0dXJlLiBNYWlubHkgZm9yIGRlc2t0b3AgYnJvd3NlcnMuXG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICAgKi9cbiAgICAgICAgdXNlclNlbGVjdDogJ25vbmUnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlIHRoZSBXaW5kb3dzIFBob25lIGdyaXBwZXJzIHdoZW4gcHJlc3NpbmcgYW4gZWxlbWVudC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgICAqL1xuICAgICAgICB0b3VjaFNlbGVjdDogJ25vbmUnLFxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEaXNhYmxlcyB0aGUgZGVmYXVsdCBjYWxsb3V0IHNob3duIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0LlxuICAgICAgICAgKiBPbiBpT1MsIHdoZW4geW91IHRvdWNoIGFuZCBob2xkIGEgdG91Y2ggdGFyZ2V0IHN1Y2ggYXMgYSBsaW5rLCBTYWZhcmkgZGlzcGxheXNcbiAgICAgICAgICogYSBjYWxsb3V0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxpbmsuIFRoaXMgcHJvcGVydHkgYWxsb3dzIHlvdSB0byBkaXNhYmxlIHRoYXQgY2FsbG91dC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAgICAgICAqL1xuICAgICAgICB0b3VjaENhbGxvdXQ6ICdub25lJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgem9vbWluZyBpcyBlbmFibGVkLiBVc2VkIGJ5IElFMTA+XG4gICAgICAgICAqIEB0eXBlIHtTdHJpbmd9XG4gICAgICAgICAqIEBkZWZhdWx0ICdub25lJ1xuICAgICAgICAgKi9cbiAgICAgICAgY29udGVudFpvb21pbmc6ICdub25lJyxcblxuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoYXQgYW4gZW50aXJlIGVsZW1lbnQgc2hvdWxkIGJlIGRyYWdnYWJsZSBpbnN0ZWFkIG9mIGl0cyBjb250ZW50cy4gTWFpbmx5IGZvciBkZXNrdG9wIGJyb3dzZXJzLlxuICAgICAgICAgKiBAdHlwZSB7U3RyaW5nfVxuICAgICAgICAgKiBAZGVmYXVsdCAnbm9uZSdcbiAgICAgICAgICovXG4gICAgICAgIHVzZXJEcmFnOiAnbm9uZScsXG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIE92ZXJyaWRlcyB0aGUgaGlnaGxpZ2h0IGNvbG9yIHNob3duIHdoZW4gdGhlIHVzZXIgdGFwcyBhIGxpbmsgb3IgYSBKYXZhU2NyaXB0XG4gICAgICAgICAqIGNsaWNrYWJsZSBlbGVtZW50IGluIGlPUy4gVGhpcyBwcm9wZXJ0eSBvYmV5cyB0aGUgYWxwaGEgdmFsdWUsIGlmIHNwZWNpZmllZC5cbiAgICAgICAgICogQHR5cGUge1N0cmluZ31cbiAgICAgICAgICogQGRlZmF1bHQgJ3JnYmEoMCwwLDAsMCknXG4gICAgICAgICAqL1xuICAgICAgICB0YXBIaWdobGlnaHRDb2xvcjogJ3JnYmEoMCwwLDAsMCknXG4gICAgfVxufTtcblxudmFyIFNUT1AgPSAxO1xudmFyIEZPUkNFRF9TVE9QID0gMjtcblxuLyoqXG4gKiBNYW5hZ2VyXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gKiBAY29uc3RydWN0b3JcbiAqL1xuZnVuY3Rpb24gTWFuYWdlcihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gYXNzaWduKHt9LCBIYW1tZXIuZGVmYXVsdHMsIG9wdGlvbnMgfHwge30pO1xuXG4gICAgdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0ID0gdGhpcy5vcHRpb25zLmlucHV0VGFyZ2V0IHx8IGVsZW1lbnQ7XG5cbiAgICB0aGlzLmhhbmRsZXJzID0ge307XG4gICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgdGhpcy5yZWNvZ25pemVycyA9IFtdO1xuICAgIHRoaXMub2xkQ3NzUHJvcHMgPSB7fTtcblxuICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5pbnB1dCA9IGNyZWF0ZUlucHV0SW5zdGFuY2UodGhpcyk7XG4gICAgdGhpcy50b3VjaEFjdGlvbiA9IG5ldyBUb3VjaEFjdGlvbih0aGlzLCB0aGlzLm9wdGlvbnMudG91Y2hBY3Rpb24pO1xuXG4gICAgdG9nZ2xlQ3NzUHJvcHModGhpcywgdHJ1ZSk7XG5cbiAgICBlYWNoKHRoaXMub3B0aW9ucy5yZWNvZ25pemVycywgZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICB2YXIgcmVjb2duaXplciA9IHRoaXMuYWRkKG5ldyAoaXRlbVswXSkoaXRlbVsxXSkpO1xuICAgICAgICBpdGVtWzJdICYmIHJlY29nbml6ZXIucmVjb2duaXplV2l0aChpdGVtWzJdKTtcbiAgICAgICAgaXRlbVszXSAmJiByZWNvZ25pemVyLnJlcXVpcmVGYWlsdXJlKGl0ZW1bM10pO1xuICAgIH0sIHRoaXMpO1xufVxuXG5NYW5hZ2VyLnByb3RvdHlwZSA9IHtcbiAgICAvKipcbiAgICAgKiBzZXQgb3B0aW9uc1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAgICogQHJldHVybnMge01hbmFnZXJ9XG4gICAgICovXG4gICAgc2V0OiBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICAgIGFzc2lnbih0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuXG4gICAgICAgIC8vIE9wdGlvbnMgdGhhdCBuZWVkIGEgbGl0dGxlIG1vcmUgc2V0dXBcbiAgICAgICAgaWYgKG9wdGlvbnMudG91Y2hBY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMudG91Y2hBY3Rpb24udXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuaW5wdXRUYXJnZXQpIHtcbiAgICAgICAgICAgIC8vIENsZWFuIHVwIGV4aXN0aW5nIGV2ZW50IGxpc3RlbmVycyBhbmQgcmVpbml0aWFsaXplXG4gICAgICAgICAgICB0aGlzLmlucHV0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQudGFyZ2V0ID0gb3B0aW9ucy5pbnB1dFRhcmdldDtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBzdG9wIHJlY29nbml6aW5nIGZvciB0aGlzIHNlc3Npb24uXG4gICAgICogVGhpcyBzZXNzaW9uIHdpbGwgYmUgZGlzY2FyZGVkLCB3aGVuIGEgbmV3IFtpbnB1dF1zdGFydCBldmVudCBpcyBmaXJlZC5cbiAgICAgKiBXaGVuIGZvcmNlZCwgdGhlIHJlY29nbml6ZXIgY3ljbGUgaXMgc3RvcHBlZCBpbW1lZGlhdGVseS5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtmb3JjZV1cbiAgICAgKi9cbiAgICBzdG9wOiBmdW5jdGlvbihmb3JjZSkge1xuICAgICAgICB0aGlzLnNlc3Npb24uc3RvcHBlZCA9IGZvcmNlID8gRk9SQ0VEX1NUT1AgOiBTVE9QO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBydW4gdGhlIHJlY29nbml6ZXJzIVxuICAgICAqIGNhbGxlZCBieSB0aGUgaW5wdXRIYW5kbGVyIGZ1bmN0aW9uIG9uIGV2ZXJ5IG1vdmVtZW50IG9mIHRoZSBwb2ludGVycyAodG91Y2hlcylcbiAgICAgKiBpdCB3YWxrcyB0aHJvdWdoIGFsbCB0aGUgcmVjb2duaXplcnMgYW5kIHRyaWVzIHRvIGRldGVjdCB0aGUgZ2VzdHVyZSB0aGF0IGlzIGJlaW5nIG1hZGVcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gaW5wdXREYXRhXG4gICAgICovXG4gICAgcmVjb2duaXplOiBmdW5jdGlvbihpbnB1dERhdGEpIHtcbiAgICAgICAgdmFyIHNlc3Npb24gPSB0aGlzLnNlc3Npb247XG4gICAgICAgIGlmIChzZXNzaW9uLnN0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJ1biB0aGUgdG91Y2gtYWN0aW9uIHBvbHlmaWxsXG4gICAgICAgIHRoaXMudG91Y2hBY3Rpb24ucHJldmVudERlZmF1bHRzKGlucHV0RGF0YSk7XG5cbiAgICAgICAgdmFyIHJlY29nbml6ZXI7XG4gICAgICAgIHZhciByZWNvZ25pemVycyA9IHRoaXMucmVjb2duaXplcnM7XG5cbiAgICAgICAgLy8gdGhpcyBob2xkcyB0aGUgcmVjb2duaXplciB0aGF0IGlzIGJlaW5nIHJlY29nbml6ZWQuXG4gICAgICAgIC8vIHNvIHRoZSByZWNvZ25pemVyJ3Mgc3RhdGUgbmVlZHMgdG8gYmUgQkVHQU4sIENIQU5HRUQsIEVOREVEIG9yIFJFQ09HTklaRURcbiAgICAgICAgLy8gaWYgbm8gcmVjb2duaXplciBpcyBkZXRlY3RpbmcgYSB0aGluZywgaXQgaXMgc2V0IHRvIGBudWxsYFxuICAgICAgICB2YXIgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplcjtcblxuICAgICAgICAvLyByZXNldCB3aGVuIHRoZSBsYXN0IHJlY29nbml6ZXIgaXMgcmVjb2duaXplZFxuICAgICAgICAvLyBvciB3aGVuIHdlJ3JlIGluIGEgbmV3IHNlc3Npb25cbiAgICAgICAgaWYgKCFjdXJSZWNvZ25pemVyIHx8IChjdXJSZWNvZ25pemVyICYmIGN1clJlY29nbml6ZXIuc3RhdGUgJiBTVEFURV9SRUNPR05JWkVEKSkge1xuICAgICAgICAgICAgY3VyUmVjb2duaXplciA9IHNlc3Npb24uY3VyUmVjb2duaXplciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgcmVjb2duaXplcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZWNvZ25pemVyID0gcmVjb2duaXplcnNbaV07XG5cbiAgICAgICAgICAgIC8vIGZpbmQgb3V0IGlmIHdlIGFyZSBhbGxvd2VkIHRyeSB0byByZWNvZ25pemUgdGhlIGlucHV0IGZvciB0aGlzIG9uZS5cbiAgICAgICAgICAgIC8vIDEuICAgYWxsb3cgaWYgdGhlIHNlc3Npb24gaXMgTk9UIGZvcmNlZCBzdG9wcGVkIChzZWUgdGhlIC5zdG9wKCkgbWV0aG9kKVxuICAgICAgICAgICAgLy8gMi4gICBhbGxvdyBpZiB3ZSBzdGlsbCBoYXZlbid0IHJlY29nbml6ZWQgYSBnZXN0dXJlIGluIHRoaXMgc2Vzc2lvbiwgb3IgdGhlIHRoaXMgcmVjb2duaXplciBpcyB0aGUgb25lXG4gICAgICAgICAgICAvLyAgICAgIHRoYXQgaXMgYmVpbmcgcmVjb2duaXplZC5cbiAgICAgICAgICAgIC8vIDMuICAgYWxsb3cgaWYgdGhlIHJlY29nbml6ZXIgaXMgYWxsb3dlZCB0byBydW4gc2ltdWx0YW5lb3VzIHdpdGggdGhlIGN1cnJlbnQgcmVjb2duaXplZCByZWNvZ25pemVyLlxuICAgICAgICAgICAgLy8gICAgICB0aGlzIGNhbiBiZSBzZXR1cCB3aXRoIHRoZSBgcmVjb2duaXplV2l0aCgpYCBtZXRob2Qgb24gdGhlIHJlY29nbml6ZXIuXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdG9wcGVkICE9PSBGT1JDRURfU1RPUCAmJiAoIC8vIDFcbiAgICAgICAgICAgICAgICAgICAgIWN1clJlY29nbml6ZXIgfHwgcmVjb2duaXplciA9PSBjdXJSZWNvZ25pemVyIHx8IC8vIDJcbiAgICAgICAgICAgICAgICAgICAgcmVjb2duaXplci5jYW5SZWNvZ25pemVXaXRoKGN1clJlY29nbml6ZXIpKSkgeyAvLyAzXG4gICAgICAgICAgICAgICAgcmVjb2duaXplci5yZWNvZ25pemUoaW5wdXREYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVjb2duaXplci5yZXNldCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGUgcmVjb2duaXplciBoYXMgYmVlbiByZWNvZ25pemluZyB0aGUgaW5wdXQgYXMgYSB2YWxpZCBnZXN0dXJlLCB3ZSB3YW50IHRvIHN0b3JlIHRoaXMgb25lIGFzIHRoZVxuICAgICAgICAgICAgLy8gY3VycmVudCBhY3RpdmUgcmVjb2duaXplci4gYnV0IG9ubHkgaWYgd2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGFuIGFjdGl2ZSByZWNvZ25pemVyXG4gICAgICAgICAgICBpZiAoIWN1clJlY29nbml6ZXIgJiYgcmVjb2duaXplci5zdGF0ZSAmIChTVEFURV9CRUdBTiB8IFNUQVRFX0NIQU5HRUQgfCBTVEFURV9FTkRFRCkpIHtcbiAgICAgICAgICAgICAgICBjdXJSZWNvZ25pemVyID0gc2Vzc2lvbi5jdXJSZWNvZ25pemVyID0gcmVjb2duaXplcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBnZXQgYSByZWNvZ25pemVyIGJ5IGl0cyBldmVudCBuYW1lLlxuICAgICAqIEBwYXJhbSB7UmVjb2duaXplcnxTdHJpbmd9IHJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxOdWxsfVxuICAgICAqL1xuICAgIGdldDogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAocmVjb2duaXplciBpbnN0YW5jZW9mIFJlY29nbml6ZXIpIHtcbiAgICAgICAgICAgIHJldHVybiByZWNvZ25pemVyO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWNvZ25pemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHJlY29nbml6ZXJzW2ldLm9wdGlvbnMuZXZlbnQgPT0gcmVjb2duaXplcikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZWNvZ25pemVyc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogYWRkIGEgcmVjb2duaXplciB0byB0aGUgbWFuYWdlclxuICAgICAqIGV4aXN0aW5nIHJlY29nbml6ZXJzIHdpdGggdGhlIHNhbWUgZXZlbnQgbmFtZSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgKiBAcGFyYW0ge1JlY29nbml6ZXJ9IHJlY29nbml6ZXJcbiAgICAgKiBAcmV0dXJucyB7UmVjb2duaXplcnxNYW5hZ2VyfVxuICAgICAqL1xuICAgIGFkZDogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgJ2FkZCcsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlbW92ZSBleGlzdGluZ1xuICAgICAgICB2YXIgZXhpc3RpbmcgPSB0aGlzLmdldChyZWNvZ25pemVyLm9wdGlvbnMuZXZlbnQpO1xuICAgICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKGV4aXN0aW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVjb2duaXplcnMucHVzaChyZWNvZ25pemVyKTtcbiAgICAgICAgcmVjb2duaXplci5tYW5hZ2VyID0gdGhpcztcblxuICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICByZXR1cm4gcmVjb2duaXplcjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogcmVtb3ZlIGEgcmVjb2duaXplciBieSBuYW1lIG9yIGluc3RhbmNlXG4gICAgICogQHBhcmFtIHtSZWNvZ25pemVyfFN0cmluZ30gcmVjb2duaXplclxuICAgICAqIEByZXR1cm5zIHtNYW5hZ2VyfVxuICAgICAqL1xuICAgIHJlbW92ZTogZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgICAgICBpZiAoaW52b2tlQXJyYXlBcmcocmVjb2duaXplciwgJ3JlbW92ZScsIHRoaXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlY29nbml6ZXIgPSB0aGlzLmdldChyZWNvZ25pemVyKTtcblxuICAgICAgICAvLyBsZXQncyBtYWtlIHN1cmUgdGhpcyByZWNvZ25pemVyIGV4aXN0c1xuICAgICAgICBpZiAocmVjb2duaXplcikge1xuICAgICAgICAgICAgdmFyIHJlY29nbml6ZXJzID0gdGhpcy5yZWNvZ25pemVycztcbiAgICAgICAgICAgIHZhciBpbmRleCA9IGluQXJyYXkocmVjb2duaXplcnMsIHJlY29nbml6ZXIpO1xuXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVjb2duaXplcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdWNoQWN0aW9uLnVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIGJpbmQgZXZlbnRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRzXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlclxuICAgICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBvbjogZnVuY3Rpb24oZXZlbnRzLCBoYW5kbGVyKSB7XG4gICAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYW5kbGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XSA9IGhhbmRsZXJzW2V2ZW50XSB8fCBbXTtcbiAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XS5wdXNoKGhhbmRsZXIpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIHVuYmluZCBldmVudCwgbGVhdmUgZW1pdCBibGFuayB0byByZW1vdmUgYWxsIGhhbmRsZXJzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50c1xuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtoYW5kbGVyXVxuICAgICAqIEByZXR1cm5zIHtFdmVudEVtaXR0ZXJ9IHRoaXNcbiAgICAgKi9cbiAgICBvZmY6IGZ1bmN0aW9uKGV2ZW50cywgaGFuZGxlcikge1xuICAgICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnM7XG4gICAgICAgIGVhY2goc3BsaXRTdHIoZXZlbnRzKSwgZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoYW5kbGVyc1tldmVudF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZXJzW2V2ZW50XSAmJiBoYW5kbGVyc1tldmVudF0uc3BsaWNlKGluQXJyYXkoaGFuZGxlcnNbZXZlbnRdLCBoYW5kbGVyKSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogZW1pdCBldmVudCB0byB0aGUgbGlzdGVuZXJzXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gICAgICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAgICAgKi9cbiAgICBlbWl0OiBmdW5jdGlvbihldmVudCwgZGF0YSkge1xuICAgICAgICAvLyB3ZSBhbHNvIHdhbnQgdG8gdHJpZ2dlciBkb20gZXZlbnRzXG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZG9tRXZlbnRzKSB7XG4gICAgICAgICAgICB0cmlnZ2VyRG9tRXZlbnQoZXZlbnQsIGRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbm8gaGFuZGxlcnMsIHNvIHNraXAgaXQgYWxsXG4gICAgICAgIHZhciBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNbZXZlbnRdICYmIHRoaXMuaGFuZGxlcnNbZXZlbnRdLnNsaWNlKCk7XG4gICAgICAgIGlmICghaGFuZGxlcnMgfHwgIWhhbmRsZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS50eXBlID0gZXZlbnQ7XG4gICAgICAgIGRhdGEucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGRhdGEuc3JjRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgaGFuZGxlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBoYW5kbGVyc1tpXShkYXRhKTtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBkZXN0cm95IHRoZSBtYW5hZ2VyIGFuZCB1bmJpbmRzIGFsbCBldmVudHNcbiAgICAgKiBpdCBkb2Vzbid0IHVuYmluZCBkb20gZXZlbnRzLCB0aGF0IGlzIHRoZSB1c2VyIG93biByZXNwb25zaWJpbGl0eVxuICAgICAqL1xuICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgJiYgdG9nZ2xlQ3NzUHJvcHModGhpcywgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5zZXNzaW9uID0ge307XG4gICAgICAgIHRoaXMuaW5wdXQuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBudWxsO1xuICAgIH1cbn07XG5cbi8qKlxuICogYWRkL3JlbW92ZSB0aGUgY3NzIHByb3BlcnRpZXMgYXMgZGVmaW5lZCBpbiBtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHNcbiAqIEBwYXJhbSB7TWFuYWdlcn0gbWFuYWdlclxuICogQHBhcmFtIHtCb29sZWFufSBhZGRcbiAqL1xuZnVuY3Rpb24gdG9nZ2xlQ3NzUHJvcHMobWFuYWdlciwgYWRkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBtYW5hZ2VyLmVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50LnN0eWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHByb3A7XG4gICAgZWFjaChtYW5hZ2VyLm9wdGlvbnMuY3NzUHJvcHMsIGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIHByb3AgPSBwcmVmaXhlZChlbGVtZW50LnN0eWxlLCBuYW1lKTtcbiAgICAgICAgaWYgKGFkZCkge1xuICAgICAgICAgICAgbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSA9IGVsZW1lbnQuc3R5bGVbcHJvcF07XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50LnN0eWxlW3Byb3BdID0gbWFuYWdlci5vbGRDc3NQcm9wc1twcm9wXSB8fCAnJztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghYWRkKSB7XG4gICAgICAgIG1hbmFnZXIub2xkQ3NzUHJvcHMgPSB7fTtcbiAgICB9XG59XG5cbi8qKlxuICogdHJpZ2dlciBkb20gZXZlbnRcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtPYmplY3R9IGRhdGFcbiAqL1xuZnVuY3Rpb24gdHJpZ2dlckRvbUV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gICAgdmFyIGdlc3R1cmVFdmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGdlc3R1cmVFdmVudC5pbml0RXZlbnQoZXZlbnQsIHRydWUsIHRydWUpO1xuICAgIGdlc3R1cmVFdmVudC5nZXN0dXJlID0gZGF0YTtcbiAgICBkYXRhLnRhcmdldC5kaXNwYXRjaEV2ZW50KGdlc3R1cmVFdmVudCk7XG59XG5cbmFzc2lnbihIYW1tZXIsIHtcbiAgICBJTlBVVF9TVEFSVDogSU5QVVRfU1RBUlQsXG4gICAgSU5QVVRfTU9WRTogSU5QVVRfTU9WRSxcbiAgICBJTlBVVF9FTkQ6IElOUFVUX0VORCxcbiAgICBJTlBVVF9DQU5DRUw6IElOUFVUX0NBTkNFTCxcblxuICAgIFNUQVRFX1BPU1NJQkxFOiBTVEFURV9QT1NTSUJMRSxcbiAgICBTVEFURV9CRUdBTjogU1RBVEVfQkVHQU4sXG4gICAgU1RBVEVfQ0hBTkdFRDogU1RBVEVfQ0hBTkdFRCxcbiAgICBTVEFURV9FTkRFRDogU1RBVEVfRU5ERUQsXG4gICAgU1RBVEVfUkVDT0dOSVpFRDogU1RBVEVfUkVDT0dOSVpFRCxcbiAgICBTVEFURV9DQU5DRUxMRUQ6IFNUQVRFX0NBTkNFTExFRCxcbiAgICBTVEFURV9GQUlMRUQ6IFNUQVRFX0ZBSUxFRCxcblxuICAgIERJUkVDVElPTl9OT05FOiBESVJFQ1RJT05fTk9ORSxcbiAgICBESVJFQ1RJT05fTEVGVDogRElSRUNUSU9OX0xFRlQsXG4gICAgRElSRUNUSU9OX1JJR0hUOiBESVJFQ1RJT05fUklHSFQsXG4gICAgRElSRUNUSU9OX1VQOiBESVJFQ1RJT05fVVAsXG4gICAgRElSRUNUSU9OX0RPV046IERJUkVDVElPTl9ET1dOLFxuICAgIERJUkVDVElPTl9IT1JJWk9OVEFMOiBESVJFQ1RJT05fSE9SSVpPTlRBTCxcbiAgICBESVJFQ1RJT05fVkVSVElDQUw6IERJUkVDVElPTl9WRVJUSUNBTCxcbiAgICBESVJFQ1RJT05fQUxMOiBESVJFQ1RJT05fQUxMLFxuXG4gICAgTWFuYWdlcjogTWFuYWdlcixcbiAgICBJbnB1dDogSW5wdXQsXG4gICAgVG91Y2hBY3Rpb246IFRvdWNoQWN0aW9uLFxuXG4gICAgVG91Y2hJbnB1dDogVG91Y2hJbnB1dCxcbiAgICBNb3VzZUlucHV0OiBNb3VzZUlucHV0LFxuICAgIFBvaW50ZXJFdmVudElucHV0OiBQb2ludGVyRXZlbnRJbnB1dCxcbiAgICBUb3VjaE1vdXNlSW5wdXQ6IFRvdWNoTW91c2VJbnB1dCxcbiAgICBTaW5nbGVUb3VjaElucHV0OiBTaW5nbGVUb3VjaElucHV0LFxuXG4gICAgUmVjb2duaXplcjogUmVjb2duaXplcixcbiAgICBBdHRyUmVjb2duaXplcjogQXR0clJlY29nbml6ZXIsXG4gICAgVGFwOiBUYXBSZWNvZ25pemVyLFxuICAgIFBhbjogUGFuUmVjb2duaXplcixcbiAgICBTd2lwZTogU3dpcGVSZWNvZ25pemVyLFxuICAgIFBpbmNoOiBQaW5jaFJlY29nbml6ZXIsXG4gICAgUm90YXRlOiBSb3RhdGVSZWNvZ25pemVyLFxuICAgIFByZXNzOiBQcmVzc1JlY29nbml6ZXIsXG5cbiAgICBvbjogYWRkRXZlbnRMaXN0ZW5lcnMsXG4gICAgb2ZmOiByZW1vdmVFdmVudExpc3RlbmVycyxcbiAgICBlYWNoOiBlYWNoLFxuICAgIG1lcmdlOiBtZXJnZSxcbiAgICBleHRlbmQ6IGV4dGVuZCxcbiAgICBhc3NpZ246IGFzc2lnbixcbiAgICBpbmhlcml0OiBpbmhlcml0LFxuICAgIGJpbmRGbjogYmluZEZuLFxuICAgIHByZWZpeGVkOiBwcmVmaXhlZFxufSk7XG5cbi8vIHRoaXMgcHJldmVudHMgZXJyb3JzIHdoZW4gSGFtbWVyIGlzIGxvYWRlZCBpbiB0aGUgcHJlc2VuY2Ugb2YgYW4gQU1EXG4vLyAgc3R5bGUgbG9hZGVyIGJ1dCBieSBzY3JpcHQgdGFnLCBub3QgYnkgdGhlIGxvYWRlci5cbnZhciBmcmVlR2xvYmFsID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGYgOiB7fSkpOyAvLyBqc2hpbnQgaWdub3JlOmxpbmVcbmZyZWVHbG9iYWwuSGFtbWVyID0gSGFtbWVyO1xuXG5pZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gSGFtbWVyO1xuICAgIH0pO1xufSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBIYW1tZXI7XG59IGVsc2Uge1xuICAgIHdpbmRvd1tleHBvcnROYW1lXSA9IEhhbW1lcjtcbn1cblxufSkod2luZG93LCBkb2N1bWVudCwgJ0hhbW1lcicpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==