Feeds for YouTube (YouTube video, channel, and gallery plugin) - Version 2.0.3

Version Description

  • Fix: Removed DotEnv code that was causing a conflict in some rare circumstances.
  • Fix: When using two or more feeds on one page and the "AJAX theme loading fix" setting, an empty lightbox related element would display at the bottom of the page.
Download this release

Release Info

Developer Craig at Smash Balloon
Plugin Icon 128x128 Feeds for YouTube (YouTube video, channel, and gallery plugin)
Version 2.0.3
Comparing to
See all releases

Code changes from version 2.0.2 to 2.0.3

Files changed (4) hide show
  1. README.txt +7 -3
  2. bootstrap.php +0 -6
  3. js/sb-youtube.min.js +1 -1
  4. youtube-feed.php +2 -2
README.txt CHANGED
@@ -1,11 +1,11 @@
1
  === Feeds for YouTube (YouTube video, channel, and gallery plugin) ===
2
  Author: Smash Balloon
3
- Contributors: smashballoon, craig-at-smash-balloon, am, smub
4
  Support Website: http://smashballoon/youtube-feed/
5
  Tags: YouTube, YouTube feed, YouTube widget, YouTube channel, YouTube gallery
6
  Requires at least: 4.1
7
- Tested up to: 6.0
8
- Stable tag: 2.0.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -162,6 +162,10 @@ By default, the plugin retrieves new videos for your YouTube gallery once every
162
  6. Embed your feed using a shortcode you can copy and paste after you are done creating
163
 
164
  == Changelog ==
 
 
 
 
165
  = 2.0.2 =
166
  * Fix: Fixed a conflict with the All in One SEO plugin causing menu tabs to not work properly.
167
 
1
  === Feeds for YouTube (YouTube video, channel, and gallery plugin) ===
2
  Author: Smash Balloon
3
+ Contributors: smashballoon, craig-at-smash-balloon
4
  Support Website: http://smashballoon/youtube-feed/
5
  Tags: YouTube, YouTube feed, YouTube widget, YouTube channel, YouTube gallery
6
  Requires at least: 4.1
7
+ Tested up to: 6.1
8
+ Stable tag: 2.0.3
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
162
  6. Embed your feed using a shortcode you can copy and paste after you are done creating
163
 
164
  == Changelog ==
165
+ = 2.0.3 =
166
+ * Fix: Removed DotEnv code that was causing a conflict in some rare circumstances.
167
+ * Fix: When using two or more feeds on one page and the "AJAX theme loading fix" setting, an empty lightbox related element would display at the bottom of the page.
168
+
169
  = 2.0.2 =
170
  * Fix: Fixed a conflict with the All in One SEO plugin causing menu tabs to not work properly.
171
 
bootstrap.php CHANGED
@@ -52,10 +52,4 @@ if (!defined('CUSTOMIZER_ABSPATH')) {
52
 
53
  if (!defined('CUSTOMIZER_PLUGIN_URL')) {
54
  define('CUSTOMIZER_PLUGIN_URL', plugin_dir_url(__DIR__ . '/vendor/smashballoon/customizer/bootstrap.php'));
55
- }
56
-
57
- //Load .env variables
58
- if (class_exists('Dotenv\Dotenv')) {
59
- $dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
60
- $dotenv->safeLoad();
61
  }
52
 
53
  if (!defined('CUSTOMIZER_PLUGIN_URL')) {
54
  define('CUSTOMIZER_PLUGIN_URL', plugin_dir_url(__DIR__ . '/vendor/smashballoon/customizer/bootstrap.php'));
 
 
 
 
 
 
55
  }
js/sb-youtube.min.js CHANGED
@@ -1,3 +1,3 @@
1
  /*! For license information please see sb-youtube.min.js.LICENSE.txt */
2
- (()=>{function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}var e,i,s,n,a,o,r,l,d=void 0!==d;if(!d){var h=function(){return!!document.createElement("video").canPlayType};if(window.sbyLinkify=("[a-z\\d.-]+://",n="mailto:",a=new RegExp("(?:\\b[a-z\\d.-]+://[^<>\\s]+|\\b(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:[;/][^#?<>\\s]*)?(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w)|(?:mailto:)?[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w))","ig"),o=new RegExp("^[a-z\\d.-]+://","i"),r={"'":"`",">":"<",")":"(","]":"[","}":"{","B;":"B+","b:":"b9"},l={callback:function(t,e){return e?'<a href="'+e+'" title="'+e+'" target="_blank" rel="noopener">'+t+"</a>":t},punct_regexp:/(?:[!?.,:;'"]|(?:&|&amp;)(?:lt|gt|quot|apos|raquo|laquo|rsaquo|lsaquo);)$/},function(t,e){e=e||{};var i,s,d,h,c,u,g,y,p,f,b,m,_="",v=[];for(s in l)void 0===e[s]&&(e[s]=l[s]);for(;i=a.exec(t);)if(d=i[0],g=(u=a.lastIndex)-d.length,!/[\/:]/.test(t.charAt(g-1))){do{y=d,m=d.substr(-1),(b=r[m])&&(p=d.match(new RegExp("\\"+b+"(?!$)","g")),f=d.match(new RegExp("\\"+m,"g")),(p?p.length:0)<(f?f.length:0)&&(d=d.substr(0,d.length-1),u--)),e.punct_regexp&&(d=d.replace(e.punct_regexp,(function(t){return u-=t.length,""})))}while(d.length&&d!==y);h=d,o.test(h)||(h=(-1!==h.indexOf("@")?h.indexOf(n)?n:"":h.indexOf("irc.")?h.indexOf("ftp.")?"http://":"ftp://":"irc://")+h),c!=g&&(v.push([t.slice(c,g)]),c=u),v.push([d,h])}for(v.push([t.substr(c)]),s=0;s<v.length;s++)_+=e.callback.apply(window,v[s]);return _||t}),function(e,i,s,n){function a(t,i){this.settings=null,this.options=e.extend({},a.Defaults,i),this.$element=e(t),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},e.each(["onResize","onThrottledResize"],e.proxy((function(t,i){this._handlers[i]=e.proxy(this[i],this)}),this)),e.each(a.Plugins,e.proxy((function(t,e){this._plugins[t.charAt(0).toLowerCase()+t.slice(1)]=new e(this)}),this)),e.each(a.Workers,e.proxy((function(t,i){this._pipe.push({filter:i.filter,run:e.proxy(i.run,this)})}),this)),this.setup(),this.initialize()}a.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:i,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"sby-owl-refresh",loadedClass:"sby-owl-loaded",loadingClass:"sby-owl-loading",rtlClass:"sby-owl-rtl",responsiveClass:"sby-owl-responsive",dragClass:"sby-owl-drag",itemClass:"sby-owl-item",stageClass:"sby-owl-stage",stageOuterClass:"sby-owl-stage-outer",grabClass:"sby-owl-grab"},a.Width={Default:"default",Inner:"inner",Outer:"outer"},a.Type={Event:"event",State:"state"},a.Plugins={},a.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(t){t.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(t){var e=this.settings.margin||"",i=!this.settings.autoWidth,s=this.settings.rtl,n={width:"auto","margin-left":s?e:"","margin-right":s?"":e};!i&&this.$stage.children().css(n),t.css=n}},{filter:["width","items","settings"],run:function(t){var e=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,i=null,s=this._items.length,n=!this.settings.autoWidth,a=[];for(t.items={merge:!1,width:e};s--;)i=this._mergers[s],i=this.settings.mergeFit&&Math.min(i,this.settings.items)||i,t.items.merge=i>1||t.items.merge,a[s]=n?e*i:this._items[s].width();this._widths=a}},{filter:["items","settings"],run:function(){var t=[],i=this._items,s=this.settings,n=Math.max(2*s.items,4),a=2*Math.ceil(i.length/2),o=s.loop&&i.length?s.rewind?n:Math.max(n,a):0,r="",l="";for(o/=2;o--;)t.push(this.normalize(t.length/2,!0)),r+=i[t[t.length-1]][0].outerHTML,t.push(this.normalize(i.length-1-(t.length-1)/2,!0)),l=i[t[t.length-1]][0].outerHTML+l;this._clones=t,e(r).addClass("cloned").appendTo(this.$stage),e(l).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var t=this.settings.rtl?1:-1,e=this._clones.length+this._items.length,i=-1,s=0,n=0,a=[];++i<e;)s=a[i-1]||0,n=this._widths[this.relative(i)]+this.settings.margin,a.push(s+n*t);this._coordinates=a}},{filter:["width","items","settings"],run:function(){var t=this.settings.stagePadding,e=this._coordinates,i={width:Math.ceil(Math.abs(e[e.length-1]))+2*t,"padding-left":t||"","padding-right":t||""};this.$stage.css(i)}},{filter:["width","items","settings"],run:function(t){var e=this._coordinates.length,i=!this.settings.autoWidth,s=this.$stage.children();if(i&&t.items.merge)for(;e--;)t.css.width=this._widths[this.relative(e)],s.eq(e).css(t.css);else i&&(t.css.width=t.items.width,s.css(t.css))}},{filter:["items"],run:function(){this._coordinates.length<1&&this.$stage.removeAttr("style")}},{filter:["width","items","settings"],run:function(t){t.current=t.current?this.$stage.children().index(t.current):0,t.current=Math.max(this.minimum(),Math.min(this.maximum(),t.current)),this.reset(t.current)}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width","position","items","settings"],run:function(){var t,e,i,s,n=this.settings.rtl?1:-1,a=2*this.settings.stagePadding,o=this.coordinates(this.current())+a,r=o+this.width()*n,l=[];for(i=0,s=this._coordinates.length;i<s;i++)t=this._coordinates[i-1]||0,e=Math.abs(this._coordinates[i])+a*n,(this.op(t,"<=",o)&&this.op(t,">",r)||this.op(e,"<",o)&&this.op(e,">",r))&&l.push(i);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+l.join("), :eq(")+")").addClass("active"),this.settings.center&&(this.$stage.children(".center").removeClass("center"),this.$stage.children().eq(this.current()).addClass("center"))}}],a.prototype.initialize=function(){var t,i,s;this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")&&(t=this.$element.find("img"),i=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:n,s=this.$element.children(i).width(),t.length&&s<=0&&this.preloadAutoWidthImages(t)),this.$element.addClass(this.options.loadingClass),this.$stage=e("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('<div class="'+this.settings.stageOuterClass+'"/>'),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},a.prototype.setup=function(){var t=this.viewport(),i=this.options.responsive,s=-1,n=null;i?(e.each(i,(function(e){e<=t&&e>s&&(s=Number(e))})),"function"==typeof(n=e.extend({},this.options,i[s])).stagePadding&&(n.stagePadding=n.stagePadding()),delete n.responsive,n.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+s))):n=e.extend({},this.options),this.trigger("change",{property:{name:"settings",value:n}}),this._breakpoint=s,this.settings=n,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},a.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},a.prototype.prepare=function(t){var i=this.trigger("prepare",{content:t});return i.data||(i.data=e("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(t)),this.trigger("prepared",{content:i.data}),i.data},a.prototype.update=function(){for(var t=0,i=this._pipe.length,s=e.proxy((function(t){return this[t]}),this._invalidated),n={};t<i;)(this._invalidated.all||e.grep(this._pipe[t].filter,s).length>0)&&this._pipe[t].run(n),t++;this._invalidated={},!this.is("valid")&&this.enter("valid")},a.prototype.width=function(t){switch(t=t||a.Width.Default){case a.Width.Inner:case a.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},a.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},a.prototype.onThrottledResize=function(){i.clearTimeout(this.resizeTimer),this.resizeTimer=i.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},a.prototype.onResize=function(){return!!this._items.length&&this._width!==this.$element.width()&&!!this.$element.is(":visible")&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))},a.prototype.registerEventHandlers=function(){e.support.transition&&this.$stage.on(e.support.transition.end+".owl.core",e.proxy(this.onTransitionEnd,this)),!1!==this.settings.responsive&&this.on(i,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",e.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",(function(){return!1}))),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",e.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",e.proxy(this.onDragEnd,this)))},a.prototype.onDragStart=function(t){var i=null;3!==t.which&&(e.support.transform?i={x:(i=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","))[16===i.length?12:4],y:i[16===i.length?13:5]}:(i=this.$stage.position(),i={x:this.settings.rtl?i.left+this.$stage.width()-this.width()+this.settings.margin:i.left,y:i.top}),this.is("animating")&&(e.support.transform?this.animate(i.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===t.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=e(t.target),this._drag.stage.start=i,this._drag.stage.current=i,this._drag.pointer=this.pointer(t),e(s).on("mouseup.owl.core touchend.owl.core",e.proxy(this.onDragEnd,this)),e(s).one("mousemove.owl.core touchmove.owl.core",e.proxy((function(t){var i=this.difference(this._drag.pointer,this.pointer(t));e(s).on("mousemove.owl.core touchmove.owl.core",e.proxy(this.onDragMove,this)),Math.abs(i.x)<Math.abs(i.y)&&this.is("valid")||(t.preventDefault(),this.enter("dragging"),this.trigger("drag"))}),this)))},a.prototype.onDragMove=function(t){var e=null,i=null,s=null,n=this.difference(this._drag.pointer,this.pointer(t)),a=this.difference(this._drag.stage.start,n);this.is("dragging")&&(t.preventDefault(),this.settings.loop?(e=this.coordinates(this.minimum()),i=this.coordinates(this.maximum()+1)-e,a.x=((a.x-e)%i+i)%i+e):(e=this.settings.rtl?this.coordinates(this.maximum()):this.coordinates(this.minimum()),i=this.settings.rtl?this.coordinates(this.minimum()):this.coordinates(this.maximum()),s=this.settings.pullDrag?-1*n.x/5:0,a.x=Math.max(Math.min(a.x,e+s),i+s)),this._drag.stage.current=a,this.animate(a.x))},a.prototype.onDragEnd=function(t){var i=this.difference(this._drag.pointer,this.pointer(t)),n=this._drag.stage.current,a=i.x>0^this.settings.rtl?"left":"right";e(s).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==i.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(n.x,0!==i.x?a:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=a,(Math.abs(i.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",(function(){return!1}))),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},a.prototype.closest=function(t,i){var s=-1,n=this.width(),a=this.coordinates();return this.settings.freeDrag||e.each(a,e.proxy((function(e,o){return"left"===i&&t>o-30&&t<o+30?s=e:"right"===i&&t>o-n-30&&t<o-n+30?s=e+1:this.op(t,"<",o)&&this.op(t,">",a[e+1]||o-n)&&(s="left"===i?e+1:e),-1===s}),this)),this.settings.loop||(this.op(t,">",a[this.minimum()])?s=t=this.minimum():this.op(t,"<",a[this.maximum()])&&(s=t=this.maximum())),s},a.prototype.animate=function(t){var i=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),i&&(this.enter("animating"),this.trigger("translate")),e.support.transform3d&&e.support.transition?this.$stage.css({transform:"translate3d("+t+"px,0px,0px)",transition:this.speed()/1e3+"s"}):i?this.$stage.animate({left:t+"px"},this.speed(),this.settings.fallbackEasing,e.proxy(this.onTransitionEnd,this)):this.$stage.css({left:t+"px"})},a.prototype.is=function(t){return this._states.current[t]&&this._states.current[t]>0},a.prototype.current=function(t){if(t===n)return this._current;if(0===this._items.length)return n;if(t=this.normalize(t),this._current!==t){var e=this.trigger("change",{property:{name:"position",value:t}});e.data!==n&&(t=this.normalize(e.data)),this._current=t,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},a.prototype.invalidate=function(t){return"string"===e.type(t)&&(this._invalidated[t]=!0,this.is("valid")&&this.leave("valid")),e.map(this._invalidated,(function(t,e){return e}))},a.prototype.reset=function(t){(t=this.normalize(t))!==n&&(this._speed=0,this._current=t,this.suppress(["translate","translated"]),this.animate(this.coordinates(t)),this.release(["translate","translated"]))},a.prototype.normalize=function(t,e){var i=this._items.length,s=e?0:this._clones.length;return!this.isNumeric(t)||i<1?t=n:(t<0||t>=i+s)&&(t=((t-s/2)%i+i)%i+s/2),t},a.prototype.relative=function(t){return t-=this._clones.length/2,this.normalize(t,!0)},a.prototype.maximum=function(t){var e,i,s,n=this.settings,a=this._coordinates.length;if(n.loop)a=this._clones.length/2+this._items.length-1;else if(n.autoWidth||n.merge){for(e=this._items.length,i=this._items[--e].width(),s=this.$element.width();e--&&!((i+=this._items[e].width()+this.settings.margin)>s););a=e+1}else a=n.center?this._items.length-1:this._items.length-n.items;return t&&(a-=this._clones.length/2),Math.max(a,0)},a.prototype.minimum=function(t){return t?0:this._clones.length/2},a.prototype.items=function(t){return t===n?this._items.slice():(t=this.normalize(t,!0),this._items[t])},a.prototype.mergers=function(t){return t===n?this._mergers.slice():(t=this.normalize(t,!0),this._mergers[t])},a.prototype.clones=function(t){var i=this._clones.length/2,s=i+this._items.length,a=function(t){return t%2==0?s+t/2:i-(t+1)/2};return t===n?e.map(this._clones,(function(t,e){return a(e)})):e.map(this._clones,(function(e,i){return e===t?a(i):null}))},a.prototype.speed=function(t){return t!==n&&(this._speed=t),this._speed},a.prototype.coordinates=function(t){var i,s=1,a=t-1;return t===n?e.map(this._coordinates,e.proxy((function(t,e){return this.coordinates(e)}),this)):(this.settings.center?(this.settings.rtl&&(s=-1,a=t+1),i=this._coordinates[t],i+=(this.width()-i+(this._coordinates[a]||0))/2*s):i=this._coordinates[a]||0,i=Math.ceil(i))},a.prototype.duration=function(t,e,i){return 0===i?0:Math.min(Math.max(Math.abs(e-t),1),6)*Math.abs(i||this.settings.smartSpeed)},a.prototype.to=function(t,e){var i=this.current(),s=null,n=t-this.relative(i),a=(n>0)-(n<0),o=this._items.length,r=this.minimum(),l=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(n)>o/2&&(n+=-1*a*o),(s=(((t=i+n)-r)%o+o)%o+r)!==t&&s-n<=l&&s-n>0&&(i=s-n,t=s,this.reset(i))):t=this.settings.rewind?(t%(l+=1)+l)%l:Math.max(r,Math.min(l,t)),this.speed(this.duration(i,t,e)),this.current(t),this.$element.is(":visible")&&this.update()},a.prototype.next=function(t){t=t||!1,this.to(this.relative(this.current())+1,t)},a.prototype.prev=function(t){t=t||!1,this.to(this.relative(this.current())-1,t)},a.prototype.onTransitionEnd=function(t){if(t!==n&&(t.stopPropagation(),(t.target||t.srcElement||t.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},a.prototype.viewport=function(){var t;return this.options.responsiveBaseElement!==i?t=e(this.options.responsiveBaseElement).width():i.innerWidth?t=i.innerWidth:s.documentElement&&s.documentElement.clientWidth?t=s.documentElement.clientWidth:console.warn("Can not detect viewport width."),t},a.prototype.replace=function(t){this.$stage.empty(),this._items=[],t&&(t=t instanceof jQuery?t:e(t)),this.settings.nestedItemSelector&&(t=t.find("."+this.settings.nestedItemSelector)),t.filter((function(){return 1===this.nodeType})).each(e.proxy((function(t,e){e=this.prepare(e),this.$stage.append(e),this._items.push(e),this._mergers.push(1*e.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)}),this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},a.prototype.add=function(t,i){var s=this.relative(this._current);i=i===n?this._items.length:this.normalize(i,!0),t=t instanceof jQuery?t:e(t),this.trigger("add",{content:t,position:i}),t=this.prepare(t),0===this._items.length||i===this._items.length?(0===this._items.length&&this.$stage.append(t),0!==this._items.length&&this._items[i-1].after(t),this._items.push(t),this._mergers.push(1*t.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[i].before(t),this._items.splice(i,0,t),this._mergers.splice(i,0,1*t.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[s]&&this.reset(this._items[s].index()),this.invalidate("items"),this.trigger("added",{content:t,position:i})},a.prototype.remove=function(t){(t=this.normalize(t,!0))!==n&&(this.trigger("remove",{content:this._items[t],position:t}),this._items[t].remove(),this._items.splice(t,1),this._mergers.splice(t,1),this.invalidate("items"),this.trigger("removed",{content:null,position:t}))},a.prototype.preloadAutoWidthImages=function(t){t.each(e.proxy((function(t,i){this.enter("pre-loading"),i=e(i),e(new Image).one("load",e.proxy((function(t){i.attr("src",t.target.src),i.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()}),this)).attr("src",i.attr("src")||i.attr("data-src")||i.attr("data-src-retina"))}),this))},a.prototype.destroy=function(){for(var t in this.$element.off(".owl.core"),this.$stage.off(".owl.core"),e(s).off(".owl.core"),!1!==this.settings.responsive&&(i.clearTimeout(this.resizeTimer),this.off(i,"resize",this._handlers.onThrottledResize)),this._plugins)this._plugins[t].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},a.prototype.op=function(t,e,i){var s=this.settings.rtl;switch(e){case"<":return s?t>i:t<i;case">":return s?t<i:t>i;case">=":return s?t<=i:t>=i;case"<=":return s?t>=i:t<=i}},a.prototype.on=function(t,e,i,s){t.addEventListener?t.addEventListener(e,i,s):t.attachEvent&&t.attachEvent("on"+e,i)},a.prototype.off=function(t,e,i,s){t.removeEventListener?t.removeEventListener(e,i,s):t.detachEvent&&t.detachEvent("on"+e,i)},a.prototype.trigger=function(t,i,s,n,o){var r={item:{count:this._items.length,index:this.current()}},l=e.camelCase(e.grep(["on",t,s],(function(t){return t})).join("-").toLowerCase()),d=e.Event([t,"owl",s||"carousel"].join(".").toLowerCase(),e.extend({relatedTarget:this},r,i));return this._supress[t]||(e.each(this._plugins,(function(t,e){e.onTrigger&&e.onTrigger(d)})),this.register({type:a.Type.Event,name:t}),this.$element.trigger(d),this.settings&&"function"==typeof this.settings[l]&&this.settings[l].call(this,d)),d},a.prototype.enter=function(t){e.each([t].concat(this._states.tags[t]||[]),e.proxy((function(t,e){this._states.current[e]===n&&(this._states.current[e]=0),this._states.current[e]++}),this))},a.prototype.leave=function(t){e.each([t].concat(this._states.tags[t]||[]),e.proxy((function(t,e){this._states.current[e]--}),this))},a.prototype.register=function(t){if(t.type===a.Type.Event){if(e.event.special[t.name]||(e.event.special[t.name]={}),!e.event.special[t.name].owl){var i=e.event.special[t.name]._default;e.event.special[t.name]._default=function(t){return!i||!i.apply||t.namespace&&-1!==t.namespace.indexOf("owl")?t.namespace&&t.namespace.indexOf("owl")>-1:i.apply(this,arguments)},e.event.special[t.name].owl=!0}}else t.type===a.Type.State&&(this._states.tags[t.name]?this._states.tags[t.name]=this._states.tags[t.name].concat(t.tags):this._states.tags[t.name]=t.tags,this._states.tags[t.name]=e.grep(this._states.tags[t.name],e.proxy((function(i,s){return e.inArray(i,this._states.tags[t.name])===s}),this)))},a.prototype.suppress=function(t){e.each(t,e.proxy((function(t,e){this._supress[e]=!0}),this))},a.prototype.release=function(t){e.each(t,e.proxy((function(t,e){delete this._supress[e]}),this))},a.prototype.pointer=function(t){var e={x:null,y:null};return(t=(t=t.originalEvent||t||i.event).touches&&t.touches.length?t.touches[0]:t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t).pageX?(e.x=t.pageX,e.y=t.pageY):(e.x=t.clientX,e.y=t.clientY),e},a.prototype.isNumeric=function(t){return!isNaN(parseFloat(t))},a.prototype.difference=function(t,e){return{x:t.x-e.x,y:t.y-e.y}},e.fn.sbyOwlCarousel=function(i){var s=Array.prototype.slice.call(arguments,1);return this.each((function(){var n=e(this),o=n.data("owl.carousel");o||(o=new a(this,"object"==t(i)&&i),n.data("owl.carousel",o),e.each(["next","prev","to","destroy","refresh","replace","add","remove"],(function(t,i){o.register({type:a.Type.Event,name:i}),o.$element.on(i+".owl.carousel.core",e.proxy((function(t){t.namespace&&t.relatedTarget!==this&&(this.suppress([i]),o[i].apply(this,[].slice.call(arguments,1)),this.release([i]))}),o))}))),"string"==typeof i&&"_"!==i.charAt(0)&&o[i].apply(o,s)}))},e.fn.sbyOwlCarousel.Constructor=a}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.autoRefresh&&this.watch()}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};n.Defaults={autoRefresh:!0,autoRefreshInterval:500},n.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=e.setInterval(t.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},n.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("sby-owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},n.prototype.destroy=function(){var t,i;for(t in e.clearInterval(this._interval),this._handlers)this._core.$element.off(t,this._handlers[t]);for(i in Object.getOwnPropertyNames(this))"function"!=typeof this[i]&&(this[i]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.AutoRefresh=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":t.proxy((function(e){if(e.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(e.property&&"position"==e.property.name||"initialized"==e.type))for(var i=this._core.settings,s=i.center&&Math.ceil(i.items/2)||i.items,n=i.center&&-1*s||0,a=(e.property&&void 0!==e.property.value?e.property.value:this._core.current())+n,o=this._core.clones().length,r=t.proxy((function(t,e){this.load(e)}),this);n++<s;)this.load(o/2+this._core.relative(a)),o&&t.each(this._core.clones(this._core.relative(a)),r),a++}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};n.Defaults={lazyLoad:!1},n.prototype.load=function(i){var s=this._core.$stage.children().eq(i),n=s&&s.find(".sby-owl-lazy");!n||t.inArray(s.get(0),this._loaded)>-1||(n.each(t.proxy((function(i,s){var n,a=t(s),o=e.devicePixelRatio>1&&a.attr("data-src-retina")||a.attr("data-src");this._core.trigger("load",{element:a,url:o},"lazy"),a.is("img")?a.one("load.owl.lazy",t.proxy((function(){a.css("opacity",1),this._core.trigger("loaded",{element:a,url:o},"lazy")}),this)).attr("src",o):((n=new Image).onload=t.proxy((function(){a.css({"background-image":'url("'+o+'")',opacity:"1"}),this._core.trigger("loaded",{element:a,url:o},"lazy")}),this),n.src=o)}),this)),this._loaded.push(s.get(0)))},n.prototype.destroy=function(){var t,e;for(t in this.handlers)this._core.$element.off(t,this.handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Lazy=n}(window.Zepto||window.jQuery,window,document),i=window.Zepto||window.jQuery,window,document,s=function t(e){this._core=e,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&this.update()}),this),"changed.owl.carousel":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&"position"==t.property.name&&this.update()}),this),"loaded.owl.lazy":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&t.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()}),this)},this._core.options=i.extend({},t.Defaults,this._core.options),this._core.$element.on(this._handlers)},s.Defaults={autoHeight:!1,autoHeightClass:"sby-owl-height"},s.prototype.update=function(){var t,e=this._core._current,s=e+this._core.settings.items,n=this._core.$stage.children().toArray().slice(e,s),a=[];i.each(n,(function(t,e){a.push(i(e).height())})),t=Math.max.apply(null,a),this._core.$stage.parent().height(t).addClass(this._core.settings.autoHeightClass)},s.prototype.destroy=function(){var t,e;for(t in this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},i.fn.sbyOwlCarousel.Constructor.Plugins.AutoHeight=s,function(t,e,i,s){var n=function e(i){this._core=i,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})}),this),"resize.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.video&&this.isInFullScreen()&&t.preventDefault()}),this),"refreshed.owl.carousel":t.proxy((function(t){t.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .sby-owl-video-frame").remove()}),this),"changed.owl.carousel":t.proxy((function(t){t.namespace&&"position"===t.property.name&&this._playing&&this.stop()}),this),"prepared.owl.carousel":t.proxy((function(e){if(e.namespace){var i=t(e.content).find(".sby-owl-video");i.length&&(i.css("display","none"),this.fetch(i,t(e.content)))}}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".sby-owl-video-play-icon",t.proxy((function(t){this.play(t)}),this))};n.Defaults={video:!1,videoHeight:!1,videoWidth:!1},n.prototype.fetch=function(t,e){var i=t.attr("data-vimeo-id")?"vimeo":t.attr("data-vzaar-id")?"vzaar":"youtube",s=t.attr("data-vimeo-id")||t.attr("data-youtube-id")||t.attr("data-vzaar-id"),n=t.attr("data-width")||this._core.settings.videoWidth,a=t.attr("data-height")||this._core.settings.videoHeight,o=t.attr("href");if(!o)throw new Error("Missing video URL.");if((s=o.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/))[3].indexOf("youtu")>-1)i="youtube";else if(s[3].indexOf("vimeo")>-1)i="vimeo";else{if(!(s[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");i="vzaar"}s=s[6],this._videos[o]={type:i,id:s,width:n,height:a},e.attr("data-video",o),this.thumbnail(t,this._videos[o])},n.prototype.thumbnail=function(e,i){var s,n,a=i.width&&i.height?'style="width:'+i.width+"px;height:"+i.height+'px;"':"",o=e.find("img"),r="src",l="",d=this._core.settings,h=function(t){s=d.lazyLoad?'<div class="sby-owl-video-tn '+l+'" '+r+'="'+t+'"></div>':'<div class="sby-owl-video-tn" style="opacity:1;background-image:url('+t+')"></div>',e.after(s),e.after('<div class="sby-owl-video-play-icon"></div>')};if(e.wrap('<div class="sby-owl-video-wrapper"'+a+"></div>"),this._core.settings.lazyLoad&&(r="data-src",l="sby-owl-lazy"),o.length)return h(o.attr(r)),o.remove(),!1;"youtube"===i.type?(n="//img.youtube.com/vi/"+i.id+"/hqdefault.jpg",h(n)):"vimeo"===i.type?t.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(t){n=t[0].thumbnail_large,h(n)}}):"vzaar"===i.type&&t.ajax({type:"GET",url:"//vzaar.com/api/videos/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(t){n=t.framegrab_url,h(n)}})},n.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".sby-owl-video-frame").remove(),this._playing.removeClass("sby-owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},n.prototype.play=function(e){var i,s=t(e.target).closest("."+this._core.settings.itemClass),n=this._videos[s.attr("data-video")],a=n.width||"100%",o=n.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),s=this._core.items(this._core.relative(s.index())),this._core.reset(s.index()),"youtube"===n.type?i='<iframe width="'+a+'" height="'+o+'" src="//www.youtube.com/embed/'+n.id+"?autoplay=1&rel=0&v="+n.id+'" frameborder="0" allowfullscreen></iframe>':"vimeo"===n.type?i='<iframe src="//player.vimeo.com/video/'+n.id+'?autoplay=1" width="'+a+'" height="'+o+'" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>':"vzaar"===n.type&&(i='<iframe frameborder="0"height="'+o+'"width="'+a+'" allowfullscreen mozallowfullscreen webkitAllowFullScreen src="//view.vzaar.com/'+n.id+'/player?autoplay=true"></iframe>'),t('<div class="sby-owl-video-frame">'+i+"</div>").insertAfter(s.find(".sby-owl-video")),this._playing=s.addClass("sby-owl-video-playing"))},n.prototype.isInFullScreen=function(){var e=i.fullscreenElement||i.mozFullScreenElement||i.webkitFullscreenElement;return e&&t(e).parent().hasClass("sby-owl-video-frame")},n.prototype.destroy=function(){var t,e;for(t in this._core.$element.off("click.owl.video"),this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Video=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this.core=i,this.core.options=t.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=s,this.next=s,this.handlers={"change.owl.carousel":t.proxy((function(t){t.namespace&&"position"==t.property.name&&(this.previous=this.core.current(),this.next=t.property.value)}),this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":t.proxy((function(t){t.namespace&&(this.swapping="translated"==t.type)}),this),"translate.owl.carousel":t.proxy((function(t){t.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()}),this)},this.core.$element.on(this.handlers)};n.Defaults={animateOut:!1,animateIn:!1},n.prototype.swap=function(){if(1===this.core.settings.items&&t.support.animation&&t.support.transition){this.core.speed(0);var e,i=t.proxy(this.clear,this),s=this.core.$stage.children().eq(this.previous),n=this.core.$stage.children().eq(this.next),a=this.core.settings.animateIn,o=this.core.settings.animateOut;this.core.current()!==this.previous&&(o&&(e=this.core.coordinates(this.previous)-this.core.coordinates(this.next),s.one(t.support.animation.end,i).css({left:e+"px"}).addClass("animated sby-owl-animated-out").addClass(o)),a&&n.one(t.support.animation.end,i).addClass("animated sby-owl-animated-in").addClass(a))}},n.prototype.clear=function(e){t(e.target).css({left:""}).removeClass("animated sby-owl-animated-out sby-owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},n.prototype.destroy=function(){var t,e;for(t in this.handlers)this.core.$element.off(t,this.handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Animate=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._timeout=null,this._paused=!1,this._handlers={"changed.owl.carousel":t.proxy((function(t){t.namespace&&"settings"===t.property.name?this._core.settings.autoplay?this.play():this.stop():t.namespace&&"position"===t.property.name&&this._core.settings.autoplay&&this._setAutoPlayInterval()}),this),"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.autoplay&&this.play()}),this),"play.owl.autoplay":t.proxy((function(t,e,i){t.namespace&&this.play(e,i)}),this),"stop.owl.autoplay":t.proxy((function(t){t.namespace&&this.stop()}),this),"mouseover.owl.autoplay":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()}),this),"mouseleave.owl.autoplay":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()}),this),"touchstart.owl.core":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()}),this),"touchend.owl.core":t.proxy((function(){this._core.settings.autoplayHoverPause&&this.play()}),this)},this._core.$element.on(this._handlers),this._core.options=t.extend({},e.Defaults,this._core.options)};n.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},n.prototype.play=function(t,e){this._paused=!1,this._core.is("rotating")||(this._core.enter("rotating"),this._setAutoPlayInterval())},n.prototype._getNextTimeout=function(s,n){return this._timeout&&e.clearTimeout(this._timeout),e.setTimeout(t.proxy((function(){this._paused||this._core.is("busy")||this._core.is("interacting")||i.hidden||this._core.next(n||this._core.settings.autoplaySpeed)}),this),s||this._core.settings.autoplayTimeout)},n.prototype._setAutoPlayInterval=function(){this._timeout=this._getNextTimeout()},n.prototype.stop=function(){this._core.is("rotating")&&(e.clearTimeout(this._timeout),this._core.leave("rotating"))},n.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)},n.prototype.destroy=function(){var t,e;for(t in this.stop(),this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.autoplay=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){"use strict";var n=function e(i){this._core=i,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":t.proxy((function(e){e.namespace&&this._core.settings.dotsData&&this._templates.push('<div class="'+this._core.settings.dotClass+'">'+t(e.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"</div>")}),this),"added.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.dotsData&&this._templates.splice(t.position,0,this._templates.pop())}),this),"remove.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.dotsData&&this._templates.splice(t.position,1)}),this),"changed.owl.carousel":t.proxy((function(t){t.namespace&&"position"==t.property.name&&this.draw()}),this),"initialized.owl.carousel":t.proxy((function(t){t.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))}),this),"refreshed.owl.carousel":t.proxy((function(t){t.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};n.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"sby-owl-nav",navClass:["sby-owl-prev","sby-owl-next"],slideBy:1,dotClass:"sby-owl-dot",dotsClass:"sby-owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},n.prototype.initialize=function(){var e,i=this._core.settings;for(e in this._controls.$relative=(i.navContainer?t(i.navContainer):t("<div>").addClass(i.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=t("<"+i.navElement+">").addClass(i.navClass[0]).html(i.navText[0]).prependTo(this._controls.$relative).on("click",t.proxy((function(t){this.prev(i.navSpeed)}),this)),this._controls.$next=t("<"+i.navElement+">").addClass(i.navClass[1]).html(i.navText[1]).appendTo(this._controls.$relative).on("click",t.proxy((function(t){this.next(i.navSpeed)}),this)),i.dotsData||(this._templates=[t("<div>").addClass(i.dotClass).append(t("<span>")).prop("outerHTML")]),this._controls.$absolute=(i.dotsContainer?t(i.dotsContainer):t("<div>").addClass(i.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","div",t.proxy((function(e){var s=t(e.target).parent().is(this._controls.$absolute)?t(e.target).index():t(e.target).parent().index();e.preventDefault(),this.to(s,i.dotsSpeed)}),this)),this._overrides)this._core[e]=t.proxy(this[e],this)},n.prototype.destroy=function(){var t,e,i,s;for(t in this._handlers)this.$element.off(t,this._handlers[t]);for(e in this._controls)this._controls[e].remove();for(s in this.overides)this._core[s]=this._overrides[s];for(i in Object.getOwnPropertyNames(this))"function"!=typeof this[i]&&(this[i]=null)},n.prototype.update=function(){var t,e,i=this._core.clones().length/2,s=i+this._core.items().length,n=this._core.maximum(!0),a=this._core.settings,o=a.center||a.autoWidth||a.dotsData?1:a.dotsEach||a.items;if("page"!==a.slideBy&&(a.slideBy=Math.min(a.slideBy,a.items)),a.dots||"page"==a.slideBy)for(this._pages=[],t=i,e=0;t<s;t++){if(e>=o||0===e){if(this._pages.push({start:Math.min(n,t-i),end:t-i+o-1}),Math.min(n,t-i)===n)break;e=0}e+=this._core.mergers(this._core.relative(t))}},n.prototype.draw=function(){var e,i=this._core.settings,s=this._core.items().length<=i.items,n=this._core.relative(this._core.current()),a=i.loop||i.rewind;this._controls.$relative.toggleClass("disabled",!i.nav||s),i.nav&&(this._controls.$previous.toggleClass("disabled",!a&&n<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!a&&n>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!i.dots||s),i.dots&&(e=this._pages.length-this._controls.$absolute.children().length,i.dotsData&&0!==e?this._controls.$absolute.html(this._templates.join("")):e>0?this._controls.$absolute.append(new Array(e+1).join(this._templates[0])):e<0&&this._controls.$absolute.children().slice(e).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(t.inArray(this.current(),this._pages)).addClass("active"))},n.prototype.onTrigger=function(e){var i=this._core.settings;e.page={index:t.inArray(this.current(),this._pages),count:this._pages.length,size:i&&(i.center||i.autoWidth||i.dotsData?1:i.dotsEach||i.items)}},n.prototype.current=function(){var e=this._core.relative(this._core.current());return t.grep(this._pages,t.proxy((function(t,i){return t.start<=e&&t.end>=e}),this)).pop()},n.prototype.getPosition=function(e){var i,s,n=this._core.settings;return"page"==n.slideBy?(i=t.inArray(this.current(),this._pages),s=this._pages.length,e?++i:--i,i=this._pages[(i%s+s)%s].start):(i=this._core.relative(this._core.current()),s=this._core.items().length,e?i+=n.slideBy:i-=n.slideBy),i},n.prototype.next=function(e){t.proxy(this._overrides.to,this._core)(this.getPosition(!0),e)},n.prototype.prev=function(e){t.proxy(this._overrides.to,this._core)(this.getPosition(!1),e)},n.prototype.to=function(e,i,s){var n;!s&&this._pages.length?(n=this._pages.length,t.proxy(this._overrides.to,this._core)(this._pages[(e%n+n)%n].start,i)):t.proxy(this._overrides.to,this._core)(e,i)},t.fn.sbyOwlCarousel.Constructor.Plugins.Navigation=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){"use strict";var n=function i(s){this._core=s,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":t.proxy((function(i){i.namespace&&"URLHash"===this._core.settings.startPosition&&t(e).trigger("hashchange.owl.navigation")}),this),"prepared.owl.carousel":t.proxy((function(e){if(e.namespace){var i=t(e.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!i)return;this._hashes[i]=e.content}}),this),"changed.owl.carousel":t.proxy((function(i){if(i.namespace&&"position"===i.property.name){var s=this._core.items(this._core.relative(this._core.current())),n=t.map(this._hashes,(function(t,e){return t===s?e:null})).join();if(!n||e.location.hash.slice(1)===n)return;e.location.hash=n}}),this)},this._core.options=t.extend({},i.Defaults,this._core.options),this.$element.on(this._handlers),t(e).on("hashchange.owl.navigation",t.proxy((function(t){var i=e.location.hash.substring(1),s=this._core.$stage.children(),n=this._hashes[i]&&s.index(this._hashes[i]);void 0!==n&&n!==this._core.current()&&this._core.to(this._core.relative(n),!1,!0)}),this))};n.Defaults={URLhashListener:!1},n.prototype.destroy=function(){var i,s;for(i in t(e).off("hashchange.owl.navigation"),this._handlers)this._core.$element.off(i,this._handlers[i]);for(s in Object.getOwnPropertyNames(this))"function"!=typeof this[s]&&(this[s]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Hash=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){function n(e,i){var s=!1,n=e.charAt(0).toUpperCase()+e.slice(1);return t.each((e+" "+r.join(n+" ")+n).split(" "),(function(t,e){if(void 0!==o[e])return s=!i||e,!1})),s}function a(t){return n(t,!0)}var o=t("<support>").get(0).style,r="Webkit Moz O ms".split(" "),l={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}};!!n("transition")&&(t.support.transition=new String(a("transition")),t.support.transition.end=l.transition.end[t.support.transition]),!!n("animation")&&(t.support.animation=new String(a("animation")),t.support.animation.end=l.animation.end[t.support.animation]),n("transform")&&(t.support.transform=new String(a("transform")),t.support.transform3d=!!n("perspective"))}(window.Zepto||window.jQuery,window,document),e=window.Zepto||window.jQuery,window,document,Owl2row=function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}((function(t){this.owl=t,this.owl.options=e.extend({},Owl2row.Defaults,this.owl.options),this.handlers={"initialize.owl.carousel":e.proxy((function(t){this.owl.settings.owl2row&&this.build2row(this)}),this)},this.owl.$element.on(this.handlers)})),Owl2row.Defaults={owl2row:!1,owl2rowTarget:"sby_item",owl2rowContainer:"sby_owl2row-item",owl2rowDirection:"utd"},Owl2row.prototype.build2row=function(t){var i=e(t.owl.$element),s=i.find("."+t.owl.options.owl2rowTarget),n=[],a=[];e.each(s,(function(t,e){t%2==0?n.push(e):a.push(e)})),"ltr"===t.owl.options.owl2rowDirection?t.leftToright(t,i,s):t.upTodown(t,n,a,i)},Owl2row.prototype.leftToright=function(t,i,s){var n=t.owl.options.owl2rowContainer,a=t.owl.options.margin,o=s.length,r=[],l=[];o%2==1?o=(o-1)/2+1:o/=2,e.each(s,(function(t,e){t<o?r.push(e):l.push(e)})),e.each(r,(function(t,s){var o=e('<div class="'+n+'"/>'),d=r[t];d.style.marginBottom=a+"px",o.append(d).append(l[t]),i.append(o)}))},Owl2row.prototype.upTodown=function(t,i,s,n){var a=t.owl.options.owl2rowContainer,o=t.owl.options.margin;e.each(i,(function(t,r){var l=e('<div class="'+a+'"/>'),d=i[t];d.style.marginBottom=o+"px",l.append(d).append(s[t]),n.append(l)}))},Owl2row.prototype.destroy=function(){},e.fn.sbyOwlCarousel.Constructor.Plugins.owl2row=Owl2row,function(e){function i(){this.feeds={},this.ctas={},this.options=sbyOptions,this.isTouch="ontouchstart"in document.documentElement}function s(t,e,i){this.el=t,this.index=e,this.settings=i,this.placeholderURL=window.sby.options.placeholder,i.narrowPlayer&&(this.placeholderURL=window.sby.options.placeholderNarrow),this.playerAPIReady=!1,this.consentGiven=i.consentGiven,this.players={},this.minImageWidth=0,this.imageResolution=150,this.resizedImages={},this.needsResizing=[],this.outOfPages=!1,this.isInitialized=!1,this.mostRecentlyLoadedPosts=[],this.embedURL="//www.youtube-nocookie.com",i.allowCookies&&(this.embedURL="//www.youtube.com")}function n(t,i,n){s.call(this,t,i,n),this.CTA={},this.initLayout=function(){this.initGalleryLayout(),this.initGrid(),this.initCarousels();var t=jQuery.Event("sbyafterlayoutinit");t.feed=this,jQuery(window).trigger(t)},this.initGrid=function(){if(window.sbySemiEagerLoading&&jQuery("#sby_lightbox").length){var t=this;playerID="sby_lb-player",jQuery("#sby_lightbox").addClass("sby_video_lightbox");var i=e(this.el).find("sby_item").first().attr("data-video-id"),s=sbyOptions.autoplay;if(void 0===window.sbyLightboxPlayer){var n={host:window.location.protocol+t.embedURL,videoId:i,playerVars:{modestbranding:1,rel:0,autoplay:s},events:{onStateChange:function(i){var s=i.target.getVideoData().video_id;t.afterStateChange(playerID,s,i,e("#"+playerID).closest(".sby_video_thumbnail_wrap"))}}};t.maybeAddCTA(playerID),window.sbyLightboxPlayer=new window.YT.Player(playerID,n)}}},this.initCarousels=function(){var t=this,i=e(this.el);if(void 0!==this.settings.general.carousel){var s=this.settings.cols,n=this.settings.colsmobile;i.find(".sby_items_wrap").addClass("sby_carousel"),i.find(".sby_load_btn").remove(),i.find(".sby_item").css({"padding-top":i.find(".sby_items_wrap").css("padding-top"),"padding-right":i.find(".sby_items_wrap").css("padding-top"),"padding-bottom":i.find(".sby_items_wrap").css("padding-top"),"padding-left":i.find(".sby_items_wrap").css("padding-top")}),i.find(".sby_item").each((function(){e(this).attr("style",e(this).attr("style").replace("padding: "+i.find(".sby_items_wrap").css("padding-top"),"padding: "+i.find(".sby_items_wrap").css("padding-top")+" !important"))}));var a=t.settings.general.carousel[0],o=t.settings.general.carousel[1],r=t.settings.general.carousel[2],l=t.settings.general.carousel[3],d=t.settings.general.carousel[4],h=t.settings.general.carousel[5];r||(l=!1);var c=s,u=s,g=(a=a?"onhover":"hide",r=!1!==l,2==h);d=!d,i.hasClass("sby_mob_col_auto")?(c=2,2!=parseInt(s)&&(u=1),2==parseInt(s)&&(u=2)):u=n,this.carouselArgs={items:s,loop:d,rewind:!d,autoplay:r,autoplayTimeout:Math.max(l,2e3),autoplayHoverPause:!0,nav:!0,navText:['<svg class="svg-inline--fa fa-chevron-left fa-w-10" aria-hidden="true" data-fa-processed="" data-prefix="fa" data-icon="chevron-left" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z"></path></svg>','<svg class="svg-inline--fa fa-chevron-right fa-w-10" aria-hidden="true" data-fa-processed="" data-prefix="fa" data-icon="chevron-right" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"></path></svg>'],dots:o,owl2row:g,responsive:{0:{items:u},480:{items:c},640:{items:s}},onChange:function(){setTimeout((function(){t.afterResize()}),1)},onInitialize:function(){var e=jQuery(t.el);e.find(".sby_items_wrap.sby_carousel").fadeIn(),setTimeout((function(){e.find(".sby_items_wrap.sby_carousel .sby_info, .sby_owl2row-item,.sby_items_wrap.sby_carousel").fadeIn()}),1),setTimeout((function(){var t=e.find(".sby-owl-nav");if("onhover"===a);else if("below"===a){var i=e.find(".sby-owl-dots"),s=e.find(".sby-owl-prev"),n=e.find(".sby-owl-next"),o=e.find(".sby-owl-nav"),r=e.find(".sby-owl-dot"),l=r.length*r.innerWidth();e.innerWidth(),s.after(i),o.css("position","relative"),n.css("position","absolute").css("top","-6px").css("right",Math.max(.5*o.innerWidth()-.5*l-n.innerWidth()-6,0)),s.css("position","absolute").css("top","-6px").css("left",Math.max(.5*o.innerWidth()-.5*l-s.innerWidth()-6,0))}else"hide"===a&&t.addClass("hide").hide()}),1)}}}},this.stripEmojihtml=function(t){return t.find(".emoji").each((function(){e(this).replaceWith(e(this).attr("alt"))})),t.html()},this.afterItemRevealed=function(t){var e=this;if(t.find(".sby_caption").length&&!t.find(".sby_caption").hasClass("sby_full_caption")){var i=t.find(".sby_item_caption_wrap .sby_caption"),s=t.find(".sby_item_video_thumbnail .sby_caption"),n=void 0!==e.settings.general.descriptionlength?parseInt(e.settings.general.descriptionlength):150;n<1&&(n=99999);var a=this.stripEmojihtml(t.find(".sby_caption").first()),o=(a.match(/<br>/g)||[]).length;if((void 0===sbyOptions.brAdjust||"1"===sbyOptions.brAdjust||!0===sbyOptions.brAdjust)&&o>0&&a.indexOf("<br>")<n){var r=t.find(".sby_caption").first();captionWidth=r.width()>20?r.width():t.width(),fontSize=r.css("font-size"),charactersPerLine=captionWidth/parseInt(fontSize)*1.85,maxCharsPerLine=Math.floor(charactersPerLine),projectedMaxLines=Math.ceil(n/charactersPerLine);var l=a.split("<br>"),d=0,h=0;jQuery.each(l,(function(){var t=projectedMaxLines-d;if(t>0){var e=Math.max(1,Math.ceil(this.length/charactersPerLine));h+=Math.min(this.length+4,t*maxCharsPerLine),d+=e}})),n=h}var c=a.substring(0,n);if(c=a.length>n?c.substr(0,Math.min(c.length,c.lastIndexOf(" "))):c,i.length&&(i.html(sbyLinkify(c)),c===a&&i.next(".sby_expand").remove()),s.length){var u=c;c!==a&&(u+='<span class="sby_more">...</span>'),s.html(u)}a.length>n&&t.find(".sby_expand").show(),t.find(".sby_expand a").off("click").on("click",(function(s){s.preventDefault(),jQuery(this),i=void 0!==i?i:t.find(".sby_info .sby_caption"),a="undefined"!=typeof captiontext?a:t.find(".sby_item_video_thumbnail").attr("data-title"),t.hasClass("sby_caption_full")&&void 0!==c?(i.html(c),t.removeClass("sby_caption_full")):(i.html(sbyLinkify(a)),t.addClass("sby_caption_full")),e.afterResize()}))}this.setUpCTA(t);var g=void 0!==e.settings.general.disablelightbox&&e.settings.general.disablelightbox,y=void 0!==e.settings.general.captionlinks&&e.settings.general.captionlinks;if(g||y){if(y){var p="";void 0!==t.find("img").attr("alt")?p=t.find("img").attr("alt"):void 0!==t.find("video").attr("alt")&&(p=t.find("video").attr("alt"));var f=p.match(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g);f&&t.find("a").attr("href",f)}t.find(".sby_link").addClass("sby_disable_lightbox")}else{var b=t.find(".sby_photo_wrap"),m=b.find(".sby_link");feedOptions={hovereffect:"true"},"none"==feedOptions.hovereffect?(m.css("background","none").show(),m.find("*").hide().end().find(".sby_link_area").show()):b.on("mouseenter mouseleave",(function(e){switch(e.type){case"mouseenter":t.addClass("sby_animate");break;case"mouseleave":t.removeClass("sby_animate")}}))}var _=void 0!==t.attr("data-video-id")?t.attr("data-video-id"):t.find(".sby_video_thumbnail").attr("data-video-id");this.mostRecentlyLoadedPosts.push(_)},this.afterFeedSet=function(){void 0!==this.carouselArgs&&(e(this.el).find(".sby_carousel").sbyOwlCarousel(this.carouselArgs),2===parseInt(this.settings.general.carousel[5])&&e(this.el).addClass("sby_carousel_2_row"))},this.setUpCTA=function(t,e){e=void 0!==e?e:t.find(".sby_item_video_thumbnail").attr("data-video-id");var i=void 0!==t.find(".sby_item_video_thumbnail").attr("data-title")?t.find(".sby_item_video_thumbnail").attr("data-title"):"",s=window.sby.ctaDetect(i);window.sby.ctas[e]=s||this.getDefaultCTA()},this.getDefaultCTA=function(){return void 0!==this.settings.general.cta&&"default"!==this.settings.general.cta.type&&("link"===this.settings.general.cta.type?{callback:"link",url:this.settings.general.cta.defaultLink,text:this.settings.general.cta.defaultText}:{callback:"related",related:this.settings.general.cta.defaultPosts})},this.afterResize=function(){this.setImageHeight(),this.setImageResolution(),this.maybeRaiseImageResolution(),this.setImageSizeClass(),this.setAllCTADimensions(),this.sizePlayer(),this.sizeItems()},this.setAllCTADimensions=function(){e.each(this.CTA,(function(t,e){e.isInitialized&&e.setCTAStyles()}))},this.afterSendCheckWPPostsToServer=function(t){var s=e(this.el);s.find(".sby_item").each((function(){if(void 0!==t[e(this).attr("data-video-id")]){var i=t[e(this).attr("data-video-id")];e(this).find(".sby_view_count").text(i.sby_view_count),e(this).find(".sby_comment_count").text(i.sby_comment_count),e(this).find(".sby_like_count").text(i.sby_like_count),"none"!==i.sby_live_broadcast.broadcast_type&&(e(this).find(".sby_ls_message").text(i.sby_live_broadcast.live_streaming_string),e(this).find(".sby_date").html(i.sby_live_broadcast.live_streaming_date)),void 0!==i.sby_live_broadcast.live_streaming_timestamp&&e(this).attr("data-live-date",i.sby_live_broadcast.live_streaming_timestamp),void 0!==i.sby_description&&e(this).find(".sby_item_video_thumbnail").attr("data-title",i.sby_description)}})),s.find(".sby_player_item").each((function(){if(void 0!==t[e(this).find(".sby_video_thumbnail").attr("data-video-id")]){var i=t[e(this).find(".sby_video_thumbnail").attr("data-video-id")];e(this).find(".sby_view_count").text(i.sby_view_count),e(this).find(".sby_comment_count").text(i.sby_comment_count),e(this).find(".sby_like_count").text(i.sby_like_count),"none"!==i.sby_live_broadcast.broadcast_type&&(e(this).find(".sby_ls_message").text(i.sby_live_broadcast.live_streaming_string),e(this).find(".sby_date").html(i.sby_live_broadcast.live_streaming_date)),void 0!==i.sby_live_broadcast.live_streaming_timestamp&&e(this).attr("data-live-date",i.sby_live_broadcast.live_streaming_timestamp)}}));var n=jQuery.Event("sbyaftercheckposts");n.feed=window.sby.feeds[i],n.response=t,jQuery(window).trigger(n)},this.afterStateChange=function(t,e,i,s){},this.changePlayerInfo=function(t){e(this.el).find(".sby_player_item").find(".sby_info").replaceWith(t.find(".sby_info").clone(!0,!0))},this.maybeAddCTA=function(t,e){}}function a(){}function o(t,i){e.ajax({url:sbyOptions.adminAjaxUrl,type:"post",data:t,success:i})}i.prototype={createPage:function(t,i){void 0!==window.sbyajaxurl&&-1!==window.sbyajaxurl.indexOf(window.location.hostname)||(window.sbyajaxurl=window.location.hostname+"/wp-admin/admin-ajax.php"),e(".sby_no_js_error_message").remove(),e(".sby_no_js").removeClass("sby_no_js"),t(i)},maybeAddYTAPI:function(){var t="sby-youtube-api";if(null===document.getElementById(t)){var e=document.createElement("script"),i=document.getElementsByTagName("script")[0];e.src="https://www.youtube.com/iframe_api",e.id=t,i.parentNode.insertBefore(e,i)}},createLightbox:function(){var t,i=new a,s=(t=0,function(e,i){clearTimeout(t),t=setTimeout(e,i)});jQuery(window).on("resize",(function(){s((function(){i.afterResize()}),200)})),function(){var t=jQuery,s=function(){function t(){this.fadeDuration=500,this.fitImagesInViewport=!0,this.resizeDuration=700,this.positionFromTop=50,this.showImageNumberLabel=!0,this.alwaysShowNavOnTouchDevices=!1,this.wrapAround=!1}return t.prototype.albumLabel=function(t,e){return t+" / "+e},t}(),n=function(){function s(t){this.options=t,this.album=[],this.currentImageIndex=void 0,this.init()}return s.prototype.init=function(){this.enable(),this.build()},s.prototype.enable=function(){var e=this;t("body").on("click","a[data-sby-lightbox]",(function(i){return e.start(t(i.currentTarget)),!1}))},s.prototype.build=function(){var e=this;t(""+i.template()).appendTo(t("body")),this.$lightbox=t("#sby_lightbox"),this.$overlay=t("#sby_lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".sby_lb-outerContainer"),this.$container=this.$lightbox.find(".sby_lb-container"),this.containerTopPadding=parseInt(this.$container.css("padding-top"),10),this.containerRightPadding=parseInt(this.$container.css("padding-right"),10),this.containerBottomPadding=parseInt(this.$container.css("padding-bottom"),10),this.containerLeftPadding=parseInt(this.$container.css("padding-left"),10),this.$overlay.hide().on("click",(function(){return e.end(),!1})),jQuery(document).on("click",(function(t,e,s){jQuery(t.target).closest(".sby_lb-outerContainer").length||jQuery(t.target).closest(".sby_lb-dataContainer").length||(i.pausePlayer(),jQuery("#sby_lightboxOverlay, #sby_lightbox").fadeOut())})),this.$lightbox.hide(),jQuery("#sby_lightboxOverlay").on("click",(function(s){return i.pausePlayer(),"sby_lightbox"===t(s.target).attr("id")&&e.end(),!1})),this.$lightbox.find(".sby_lb-prev").on("click",(function(){return i.pausePlayer(),e.changeImage(0===e.currentImageIndex?e.album.length-1:e.currentImageIndex-1),!1})),this.$lightbox.find(".sby_lb-container").on("swiperight",(function(){return i.pausePlayer(),e.changeImage(0===e.currentImageIndex?e.album.length-1:e.currentImageIndex-1),!1})),this.$lightbox.find(".sby_lb-next").on("click",(function(){return i.pausePlayer(),e.changeImage(e.currentImageIndex===e.album.length-1?0:e.currentImageIndex+1),!1})),this.$lightbox.find(".sby_lb-container").on("swipeleft",(function(){return i.pausePlayer(),e.changeImage(e.currentImageIndex===e.album.length-1?0:e.currentImageIndex+1),!1})),this.$lightbox.find(".sby_lb-loader, .sby_lb-close").on("click",(function(){return i.pausePlayer(),e.end(),!1}))},s.prototype.start=function(e){function s(t){n.album.push(i.getData(t))}var n=this,a=t(window);a.on("resize",t.proxy(this.sizeOverlay,this)),t("select, object, embed").css({visibility:"hidden"}),this.sizeOverlay(),this.album=[];var o,r=0,l=e.attr("data-sby-lightbox");if(l){o=t(e.prop("tagName")+'[data-sby-lightbox="'+l+'"]');for(var d=0;d<o.length;d=++d)s(t(o[d])),o[d]===e[0]&&(r=d)}else if("lightbox"===e.attr("rel"))s(e);else{o=t(e.prop("tagName")+'[rel="'+e.attr("rel")+'"]');for(var h=0;h<o.length;h=++h)s(t(o[h])),o[h]===e[0]&&(r=h)}var c=a.scrollTop()+this.options.positionFromTop,u=a.scrollLeft();this.$lightbox.css({top:c+"px",left:u+"px"}).fadeIn(this.options.fadeDuration),this.changeImage(r)},s.prototype.changeImage=function(e){var i=this;this.disableKeyboardNav();var s=this.$lightbox.find(".sby_lb-image");this.$overlay.fadeIn(this.options.fadeDuration),t(".sby_lb-loader").fadeIn("slow"),this.$lightbox.find(".sby_lb-image, .sby_lb-nav, .sby_lb-prev, .sby_lb-next, .sby_lb-dataContainer, .sby_lb-numbers, .sby_lb-caption").hide(),this.$outerContainer.addClass("animating");var n=new Image;n.onload=function(){var a,o,r,l,d,h;s.attr("src",i.album[e].link),t(n),s.width(n.width),s.height(n.height),i.options.fitImagesInViewport&&(h=t(window).width(),d=t(window).height(),l=h-i.containerLeftPadding-i.containerRightPadding-20-100,r=d-i.containerTopPadding-i.containerBottomPadding-150,(n.width>l||n.height>r)&&(n.width/l>n.height/r?(o=l,a=parseInt(n.height/(n.width/o),10),s.width(o),s.height(a)):(a=r,o=parseInt(n.width/(n.height/a),10),s.width(o),s.height(a)))),i.sizeContainer(s.width(),s.height())},n.src=this.album[e].link,this.currentImageIndex=e},s.prototype.sizeOverlay=function(){this.$overlay.width(t(window).width()).height(t(document).height())},s.prototype.sizeContainer=function(t,e){function i(){s.$lightbox.find(".sby_lb-dataContainer").width(o),s.$lightbox.find(".sby_lb-prevLink").height(r),s.$lightbox.find(".sby_lb-nextLink").height(r),s.showImage()}var s=this,n=this.$outerContainer.outerWidth(),a=this.$outerContainer.outerHeight(),o=t+this.containerLeftPadding+this.containerRightPadding,r=e+this.containerTopPadding+this.containerBottomPadding;n!==o||a!==r?this.$outerContainer.animate({width:o,height:r},this.options.resizeDuration,"swing",(function(){i()})):i()},s.prototype.showImage=function(){this.$lightbox.find(".sby_lb-loader").hide(),this.$lightbox.find(".sby_lb-image").fadeIn("slow"),this.updateNav(),this.updateDetails(),this.preloadNeighboringImages(),this.enableKeyboardNav()},s.prototype.updateNav=function(){var t=!1;try{document.createEvent("TouchEvent"),t=!!this.options.alwaysShowNavOnTouchDevices}catch(t){}this.$lightbox.find(".sby_lb-nav").show(),this.album.length>1&&(this.options.wrapAround?(t&&this.$lightbox.find(".sby_lb-prev, .sby_lb-next").css("opacity","1"),this.$lightbox.find(".sby_lb-prev, .sby_lb-next").show()):(this.currentImageIndex>0&&(this.$lightbox.find(".sby_lb-prev").show(),t&&this.$lightbox.find(".sby_lb-prev").css("opacity","1")),this.currentImageIndex<this.album.length-1&&(this.$lightbox.find(".sby_lb-next").show(),t&&this.$lightbox.find(".sby_lb-next").css("opacity","1"))))},s.prototype.updateDetails=function(){var t=this;jQuery("iframe.sby_lb-player-loaded").length&&(jQuery(".sby_lb-player-placeholder").replaceWith(jQuery("iframe.sby_lb-player-loaded")),jQuery("iframe.sby_lb-player-loaded").removeClass("sby_lb-player-loaded").show());var s=window.sby.feeds[this.album[this.currentImageIndex].feedIndex];if(i.beforePlayerSetup(this.$lightbox,this.album[this.currentImageIndex],this.currentImageIndex,this.album,s),h()){if(jQuery("#sby_lightbox").removeClass("sby_video_lightbox"),s.settings.consentGiven&&this.album[this.currentImageIndex].video.length){jQuery(".sby_gdpr_notice").remove();var n="sby_lb-player";jQuery("#sby_lightbox").addClass("sby_video_lightbox");var a=this.album[this.currentImageIndex].video,o=sbyOptions.autoplay;if(void 0===window.sbyLightboxPlayer){var r={host:window.location.protocol+s.embedURL,videoId:a,playerVars:{modestbranding:1,rel:0,autoplay:o},events:{onStateChange:function(t){var i=t.target.getVideoData().video_id;s.afterStateChange(n,i,t,e("#"+n).closest(".sby_video_thumbnail_wrap"))}}};s.maybeAddCTA(n),window.sbyLightboxPlayer=new window.YT.Player(n,r)}else window.sbyLightboxPlayer.loadVideoById(a);this.$outerContainer.removeClass("animating"),this.$lightbox.find(".sby_lb-dataContainer").fadeIn(this.options.resizeDuration,(function(){return t.sizeOverlay()})),setTimeout((function(){e("#sby_lightbox .sby_lb-player").css({height:e("#sby_lightbox .sby_lb-outerContainer").height()+"px",width:e("#sby_lightbox .sby_lb-outerContainer").width()+"px",top:0})}),1),this.$lightbox.find("iframe").length&&this.$lightbox.find("iframe").attr("title",this.album[this.currentImageIndex].videoTitle)}else{var l=e(".sby_item[data-video-id="+this.album[this.currentImageIndex].video+"]").find(".sby_video_thumbnail").attr("data-full-res");e(".sby_lb-image").attr("src",l),this.$outerContainer.removeClass("animating"),this.$lightbox.find(".sby_lb-dataContainer").fadeIn(this.options.resizeDuration,(function(){return t.sizeOverlay()})),jQuery(".sby_lb-container").prepend('<a href="https://www.youtube.com/watch?v='+this.album[this.currentImageIndex].video+'" target="_blank" rel="noopener noreferrer" class="sby_gdpr_notice"><svg style="color: rgba(255,255,255,1)" class="svg-inline--fa fa-play fa-w-14 sby_playbtn" aria-label="Play" aria-hidden="true" data-fa-processed="" data-prefix="fa" data-icon="play" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"></path></svg></a>')}i.afterPlayerSetup(this.$lightbox,this.album[this.currentImageIndex],this.currentImageIndex,this.album),this.album.length>1&&this.options.showImageNumberLabel?this.$lightbox.find(".sby_lb-number").text(this.options.albumLabel(this.currentImageIndex+1,this.album.length)).fadeIn("fast"):this.$lightbox.find(".sby_lb-number").hide()}},s.prototype.preloadNeighboringImages=function(){this.album.length>this.currentImageIndex+1&&((new Image).src=this.album[this.currentImageIndex+1].link),this.currentImageIndex>0&&((new Image).src=this.album[this.currentImageIndex-1].link)},s.prototype.enableKeyboardNav=function(){t(document).on("keyup.keyboard",t.proxy(this.keyboardAction,this))},s.prototype.disableKeyboardNav=function(){t(document).off(".keyboard")},s.prototype.keyboardAction=function(t){var s=event.keyCode,n=String.fromCharCode(s).toLowerCase();27===s||n.match(/x|o|c/)?(h()&&e("#sby_lightbox video.sby_video")[0].pause(),e("#sby_lightbox iframe").attr("src",""),this.end()):"p"===n||37===s?(0!==this.currentImageIndex?this.changeImage(this.currentImageIndex-1):this.options.wrapAround&&this.album.length>1&&this.changeImage(this.album.length-1),h()&&e("#sby_lightbox video.sby_video")[0].pause(),e("#sby_lightbox iframe").attr("src","")):"n"!==n&&39!==s||(this.currentImageIndex!==this.album.length-1?this.changeImage(this.currentImageIndex+1):this.options.wrapAround&&this.album.length>1&&this.changeImage(0),i.pausePlayer())},s.prototype.end=function(){this.disableKeyboardNav(),t(window).off("resize",this.sizeOverlay),this.$lightbox.fadeOut(this.options.fadeDuration),this.$overlay.fadeOut(this.options.fadeDuration),t("select, object, embed").css({visibility:"visible"})},s}();t((function(){var t=new s;new n(t),e(".sby_lightbox_action a").off().on("click",(function(){e(this).parent().find(".sby_lightbox_tooltip").toggle()}))}))}.call(this)},createFeeds:function(t){sbyOptions.isAdmin||window.sby.createLightbox(),t.whenFeedsCreated(e(".sb_youtube").each((function(t){e(this).attr("data-sby-index",t+1),e(this).find(".sby_player").replaceWith('<div id="sby_player'+t+'"></div>');var i=e(this),s=void 0!==i.attr("data-sby-flags")?i.attr("data-sby-flags").split(","):[],a=void 0!==i.attr("data-options")?JSON.parse(i.attr("data-options")):{};s.indexOf("testAjax")>-1&&(window.sby.triggeredTest=!0,o({action:"sby_on_ajax_test_trigger"},(function(t){console.log("did test")})));var r={cols:i.attr("data-cols"),colsmobile:"same"!==i.attr("data-colsmobile")?i.attr("data-colsmobile"):i.attr("data-cols"),num:i.attr("data-num"),imgRes:i.attr("data-res"),feedID:i.attr("data-feedid"),postID:"undefind"!=typeof i.attr("data-postid")?i.attr("data-postid"):"unknown",shortCodeAtts:i.attr("data-shortcode-atts"),resizingEnabled:-1===s.indexOf("resizeDisable"),imageLoadEnabled:-1===s.indexOf("imageLoadDisable"),debugEnabled:s.indexOf("debug")>-1,favorLocal:s.indexOf("favorLocal")>-1,ajaxPostLoad:s.indexOf("ajaxPostLoad")>-1,checkWPPosts:s.indexOf("checkWPPosts")>-1,singleCheckPosts:s.indexOf("singleCheckPosts")>-1,narrowPlayer:s.indexOf("narrowPlayer")>-1,gdpr:s.indexOf("gdpr")>-1,consentGiven:-1===s.indexOf("gdpr"),noCDN:s.indexOf("disablecdn")>-1,allowCookies:s.indexOf("allowcookies")>-1,lightboxEnabled:void 0!==i.attr("data-sby-supports-lightbox"),locator:s.indexOf("locator")>-1,autoMinRes:1,general:a};window.sby.feeds[t]=function(t,e,i){return new n(t,e,i)}(this,t,r),void 0!==window.sbyAPIReady&&(window.sby.feeds[t].playerAPIReady=!0),window.sby.feeds[t].setResizedImages(),window.sby.feeds[t].init();var l=jQuery.Event("sbyafterfeedcreate");l.feed=window.sby.feeds[t],jQuery(window).trigger(l)})))},afterFeedsCreated:function(){if(e(".sb_youtube_header").each((function(){var t=e(this);t.find(".sby_header_link").on("mouseenter mouseleave",(function(e){switch(e.type){case"mouseenter":t.find(".sby_header_img_hover").addClass("sby_fade_in");break;case"mouseleave":t.find(".sby_header_img_hover").removeClass("sby_fade_in")}}))})),window.sbyAPIReady){var t=jQuery.Event("sbyfeedandytready");jQuery(window).trigger(t)}},encodeHTML:function(t){return void 0===t?"":t.replace(/(>)/g,"&gt;").replace(/(<)/g,"&lt;").replace(/(&lt;br\/&gt;)/g,"<br>").replace(/(&lt;br&gt;)/g,"<br>")},urlDetect:function(t){return t.match(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g)},ctaDetect:function(t){var e=t.match(/{Link:(.*)}/g),i=!1;if(null!==e){var s=window.sby.urlDetect(e[0]);if(null!==s){var n=s[0].trim();i={callback:"link",url:n,text:e[0].replace("{Link:","").replace("}","").replace(n,"").replace(" "," ").trim()}}else console.log("CTA found but no URL")}return i},shuffle:function(t){for(var e,i,s=t.length;0!==s;)i=Math.floor(Math.random()*s),e=t[s-=1],t[s]=t[i],t[i]=e;return t}},s.prototype={init:function(){var t=this;t.settings.consentGiven=t.checkConsent(),t.settings.consentGiven&&window.sby.maybeAddYTAPI(),t.settings.noCDN&&!t.settings.consentGiven&&(e(this.el).find(".sb_youtube_header").length?e(this.el).find(".sb_youtube_header").addClass("sby_no_consent"):e(this.el).prev(".sb_youtube_header").length&&e(this.el).prev(".sb_youtube_header").addClass("sby_no_consent")),e(this.el).find("#sby_mod_error").length&&e(this.el).prepend(e(this.el).find("#sby_mod_error")),this.settings.ajaxPostLoad?this.getNewPostSet():this.afterInitialImagesLoaded();var i,s=(i=0,function(t,e){clearTimeout(i),i=setTimeout(t,e)});jQuery(window).on("resize",(function(){s((function(){t.afterResize()}),1)}))},initLayout:function(){this.initGalleryLayout()},initGalleryLayout:function(){var i=e(this.el),s=this;i.hasClass("sby_layout_gallery")&&i.find(".sby_player_outer_wrap").length&&(this.maybeRaiseSingleImageResolution(i.find(".sby_player_outer_wrap"),0,!0),i.find(".sby_player_outer_wrap .sby_video_thumbnail").off().on("click",(function(i){!(!s.settings.lightboxEnabled||s.settings.lightboxEnabled&&s.settings.noCDN)||!s.settings.noCDN&&s.settings.consentGiven?(i.preventDefault(),s.onThumbnailClick(e(this),!0)):t(e(this).closest(".sby_item").length)&&void 0!==e(this).closest(".sby_item").attr("data-video-id")&&e(this).attr("href","https://www.youtube.com/watch?v="+e(this).closest(".sby_item").attr("data-video-id"))})),i.find(".sby_item").first().addClass("sby_current"),i.on("mouseenter",(function(){s.canCreatePlayer()&&(i.find(".sby_player_outer_wrap iframe").length?void 0===s.player&&s.playerEagerLoaded()&&s.createPlayer("sby_player"+s.index):(i.addClass("sby_player_added").find(".sby_player_outer_wrap").addClass("sby_player_loading"),i.find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").show().removeClass("sby_hidden"),s.createPlayer("sby_player"+s.index)))})),window.sbySemiEagerLoading&&s.createPlayer("sby_player"+s.index),s.settings.noCDN&&i.find(".sby_player_outer_wrap").append('<div class="sby_play_btn">\n <span class="sby_play_btn_bg"></span>\n <svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" class="svg-inline--fa fa-youtube fa-w-18"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z" class=""></path></svg> </div>'))},createPlayer:function(t,i,s,n){var a=e(this.el),o=this;if(i=void 0!==i?i:this.getVideoID(a.find(".sby_item").first()),s=void 0!==s?s:0,void 0===n&&(n={host:window.location.protocol+o.embedURL,videoId:i,playerVars:{modestbranding:1,rel:0,autoplay:s}}),void 0===n.events&&(n.events={onReady:function(){a.find(".sby_player_outer_wrap").removeClass("sby_player_loading").find(".sby_video_thumbnail").css("z-index",-1).find(".sby_loader").hide().addClass("sby_hidden"),e("#"+t).length&&e("#"+t).closest(".sby_video_thumbnail_wrap").find(".sby_video_thumbnail").length&&e("#"+t).closest(".sby_video_thumbnail_wrap").find(".sby_video_thumbnail").fadeTo(0,"slow",(function(){e(this).css("z-index",-1),e(this).find(".sby_loader").hide().addClass("sby_hidden"),e(this).closest(".sby_item").removeClass("sby_player_loading")}));var i=jQuery.Event("sbyafterplayerready");i.feed=o,i.player=this,jQuery(window).trigger(i)},onStateChange:function(s){a.find(".sby_player_outer_wrap").removeClass("sby_player_loading").find(".sby_video_thumbnail").css("z-index",-1).find(".sby_loader").hide().addClass("sby_hidden"),o.afterStateChange(t,i,s,e("#"+t).closest(".sby_video_thumbnail_wrap")),1===s.data&&void 0!==o.players&&a.find(".sby_item").each((function(){var t=o.getVideoID(e(this));e(this).find("iframe").length&&t!==i&&void 0!==o.players[t]&&"function"==typeof o.players[t].pauseVideo&&o.players[t].pauseVideo()}))}}),window.sbyEagerLoading)var r=YT.get(t);else r=new window.YT.Player(t,n);this.maybeAddCTA(t),a.hasClass("sby_layout_list")&&void 0===this.players[i]?this.players[i]=r:void 0===this.player&&(this.player=r);var l=jQuery.Event("sbyafterplayercreated");return l.feed=this,jQuery(window).trigger(l),a.find(".sby_player_outer_wrap .sby_play_btn").remove(),r},afterStateChange:function(t,e,i,s){},afterInitialImagesLoaded:function(){this.initLayout(),this.loadMoreButtonInit(),this.hideExtraItemsForWidth(),this.beforeNewImagesRevealed(),this.revealNewImages(),this.afterNewImagesRevealed(),this.afterFeedSet(),this.sizePlayer(),this.sizeItems(),this.settings.consentGiven?this.applyFullFeatures():this.removeFeatures()},afterResize:function(){this.setImageHeight(),this.setImageResolution(),this.maybeRaiseImageResolution(),this.setImageSizeClass()},afterLoadMoreClicked:function(t){t.find(".sby_loader").removeClass("sby_hidden"),t.find(".sby_btn_text").addClass("sby_hidden"),t.closest(".sb_youtube").find(".sby_num_diff_hide").addClass("sby_transition").removeClass("sby_num_diff_hide")},afterNewImagesLoaded:function(){var t=e(this.el),i=this;this.beforeNewImagesRevealed(),this.revealNewImages(),this.afterNewImagesRevealed(),this.sizePlayer(),this.sizeItems(),setTimeout((function(){t.find(".sby_loader").addClass("sby_hidden"),t.find(".sby_btn_text").removeClass("sby_hidden"),i.maybeRaiseImageResolution()}),1),this.settings.consentGiven?this.applyFullFeatures():this.removeFeatures()},beforeNewImagesRevealed:function(){this.setImageHeight(),this.maybeRaiseImageResolution(!0),this.setImageSizeClass()},afterFeedSet:function(){},sizePlayer:function(){var t=e(this.el),i=this;if(t.hasClass("sby_layout_gallery")){$playerThumbnail=t.find(".sby_player_item").find(".sby_player_video_thumbnail");var s=$playerThumbnail.innerWidth(),n=Math.floor(9*s/16);i.settings.narrowPlayer&&(n=Math.floor(3*s/4)),$playerThumbnail.css("height",n+"px").css("overflow","hidden")}else t.hasClass("sby_layout_list")&&t.find(".sby_item").each((function(){$playerThumbnail=e(this).find(".sby_item_video_thumbnail");var t=$playerThumbnail.innerWidth(),s=Math.floor(9*t/16);i.settings.narrowPlayer&&(s=Math.floor(3*t/4)),$playerThumbnail.css("height",s+"px").css("overflow","hidden")}))},sizeItems:function(){var t=e(this.el);t.hasClass("sby_layout_list")||t.find(".sby_item").find(".sby_item_video_thumbnail").each((function(){if(e(this).hasClass("sby_imgLiquid_ready")){var t=e(this).innerWidth(),i=Math.floor(9*t/16);e(this).css("height",i+"px").css("overflow","hidden")}}))},revealNewImages:function(){var i=e(this.el),s=this;this.applyImageLiquid(),"function"==typeof sbyCustomJS&&setTimeout((function(){sbyCustomJS()}),100),i.find(".sby-screenreader").find("img").remove(),i.find(".sby_item.sby_new").each((function(i){var n=jQuery(this);videoID=n.attr("data-video-id"),window.sbyEagerLoading&&s.canCreatePlayer()&&e("#sby_player_"+videoID).length&&(player=new YT.Player("sby_player_"+videoID,{height:"100",width:"100",videoId:videoID,playerVars:{modestbranding:1,rel:0,autoplay:0},events:{onStateChange:function(t){t.target.getVideoData().video_id,1===t.data&&n.find(".sby_item").each((function(){var e=jQuery(this).attr("data-video-id");jQuery(this).find("iframe").length&&jQuery(t.target.a).attr("id")!==jQuery(this).find("iframe").attr("id")&&YT.get("sby_player_"+e).pauseVideo()}))}}})),n.find(".sby_video_thumbnail").on("mouseenter",(function(){s.onThumbnailEnter(e(this),!1)})),n.find(".sby_player_wrap").on("mouseleave",(function(){s.onThumbnailLeave(e(this),!1)})),n.find(".sby_video_thumbnail").on("click",(function(i){!(!s.settings.lightboxEnabled||s.settings.lightboxEnabled&&s.settings.noCDN)||!s.settings.noCDN&&s.settings.consentGiven?(i.preventDefault(),s.onThumbnailClick(e(this),!1)):t(e(this).closest(".sby_item").length)&&void 0!==e(this).closest(".sby_item").attr("data-video-id")&&e(this).attr("href","https://www.youtube.com/watch?v="+e(this).closest(".sby_item").attr("data-video-id"))})),s.settings.lightboxEnabled&&(n.find(".sby_video_thumbnail").attr("data-sby-lightbox",s.index),"undefined"!=typeof sbyOptions&&void 0!==sbyOptions.lightboxPlaceholder&&(s.settings.narrowPlayer?n.find(".sby_video_thumbnail").attr("href",sbyOptions.lightboxPlaceholderNarrow):n.find(".sby_video_thumbnail").attr("href",sbyOptions.lightboxPlaceholder))),s.afterItemRevealed(n),""===n.find(".sby_info_item").text().trim()&&n.find(".sby_info_item").addClass("sby_no_space")})),i.find(".sby_player_item").each((function(t){var e=jQuery(this);s.afterItemRevealed(e)})),setTimeout((function(){i.find(".sby_item.sby_new").removeClass("sby_new"),i.find(".sby_transition").length,i.find(".sby_transition").each((function(t){var e=jQuery(this);setTimeout((function(){e.removeClass("sby_transition")}),1)}))}),1)},afterItemRevealed:function(){},afterNewImagesRevealed:function(){this.listenForVisibilityChange(),this.sendNeedsResizingToServer(),this.sendCheckWPPostsToServer(),this.settings.imageLoadEnabled||e(".sby_no_resraise").removeClass("sby_no_resraise");var t=e.Event("sbyafterimagesloaded");t.el=e(this.el),e(window).trigger(t)},setResizedImages:function(){e(this.el).find(".sby_resized_image_data").length&&void 0!==e(this.el).find(".sby_resized_image_data").attr("data-resized")&&0===e(this.el).find(".sby_resized_image_data").attr("data-resized").indexOf('{"')&&(this.resizedImages=JSON.parse(e(this.el).find(".sby_resized_image_data").attr("data-resized")),e(this.el).find(".sby_resized_image_data").remove())},sendNeedsResizingToServer:function(){var t=this;if(t.needsResizing.length>0&&t.settings.resizingEnabled){var i=e(this.el).find(".sby_item").length;o({action:"sby_resized_images_submit",needs_resizing:t.needsResizing,offset:i,feed_id:t.settings.feedID,location:t.locationGuess(),post_id:t.settings.postID,atts:t.settings.shortCodeAtts},(function(e){if(0===e.trim().indexOf("{")){var i=JSON.parse(e);t.settings.debugEnabled&&console.log(i)}}))}},sendCheckWPPostsToServer:function(){var t=this;if(t.settings.checkWPPosts||t.settings.singleCheckPosts){var i=void 0!==t.settings.feedID?t.settings.feedID:"sby_single",s=t.mostRecentlyLoadedPosts;t.mostRecentlyLoadedPosts=[],o({action:"sby_check_wp_submit",feed_id:i,atts:t.settings.shortCodeAtts,location:t.locationGuess(),post_id:t.settings.postID,offset:e(this.el).hasClass("sby_layout_carousel")?Math.floor(e(this.el).find(".sby_item").length/2-1):e(this.el).find(".sby_item").length,posts:s},(function(e){if(0===e.trim().indexOf("{")){var i=JSON.parse(e);t.settings.debugEnabled&&console.log(i),t.afterSendCheckWPPostsToServer(i)}}))}},afterSendCheckWPPostsToServer:function(t){},loadMoreButtonInit:function(){var t=e(this.el),i=this;t.find(".sby_footer .sby_load_btn").off().on("click",(function(){i.afterLoadMoreClicked(jQuery(this)),i.getNewPostSet()}))},getNewPostSet:function(){var t=e(this.el),i=this;o({action:"sby_load_more_clicked",offset:t.find(".sby_item").length,feed_id:i.settings.feedID,atts:i.settings.shortCodeAtts,location:i.locationGuess(),post_id:i.settings.postID,current_resolution:i.imageResolution},(function(s){if(0===s.trim().indexOf("{")){var n=JSON.parse(s),a=void 0!==n.feedStatus.checkWPPosts&&n.feedStatus.checkWPPosts;i.settings.debugEnabled&&console.log(n),i.settings.checkWPPosts=!!a,i.appendNewPosts(n.html),i.addResizedImages(n.resizedImages),i.settings.ajaxPostLoad?(i.settings.ajaxPostLoad=!1,i.afterInitialImagesLoaded()):i.afterNewImagesLoaded(),n.feedStatus.shouldPaginate?i.outOfPages=!1:(i.outOfPages=!0,t.find(".sby_load_btn").hide()),e(".sby_no_js").removeClass("sby_no_js")}}))},appendNewPosts:function(t){var i=e(this.el);i.find(".sby_items_wrap .sby_item").length?i.find(".sby_items_wrap .sby_item").last().after(t):i.find(".sby_items_wrap").append(t)},addResizedImages:function(t){for(var e in t)this.resizedImages[e]=t[e]},setImageHeight:function(){},maybeRaiseSingleImageResolution:function(t,i,s){var n=this,a=n.getImageUrls(t),o=t.find(".sby_video_thumbnail > img").attr("src"),r=150;if(s=void 0!==s&&s,!(t.hasClass("sby_no_resraise")||!n.settings.consentGiven&&n.settings.noCDN)){e.each(a,(function(t,e){e===o&&(r=parseInt(t),s=!1)}));var l=640;switch(n.settings.imgRes){case"thumb":l=120;break;case"medium":l=320;break;case"large":l=480;break;case"full":l=640;break;default:var d=Math.max(n.settings.autoMinRes,t.find(".sby_video_thumbnail").innerWidth());switch(n.getBestResolutionForAuto(d,1,e(this.el).find("sby_item").first())){case 480:l=480;break;case 320:l=320;break;case 120:l=120}}if(l>r||o===n.placeholderURL||s){if(n.settings.debugEnabled){var h=o===n.placeholderURL?"was placeholder":"too small";console.log("rais res for "+o,h)}var c=a[l];t.find(".sby_video_thumbnail > img").attr("src",c),t.find(".sby_video_thumbnail").hasClass("sby_imgLiquid_ready")&&t.find(".sby_video_thumbnail").css("background-image",'url("'+c+'")')}t.find("img").on("error",(function(){if(e(this).hasClass("sby_img_error"))console.log("unfixed error "+e(this).attr("src"));else{if(e(this).addClass("sby_img_error"),e(this).attr("src").indexOf("i.ytimg.com")>-1){n.settings.favorLocal=!0;var t=n.getImageUrls(e(this).closest(".sby_item"));void 0!==t[640]&&(e(this).attr("src",t[640]),e(this).closest(".sby_video_thumbnail").css("background-image","url("+t[640]+")"))}else void 0!==e(this).closest(".sby_video_thumbnail").attr("data-full-res")?(e(this).attr("src",e(this).closest(".sby_video_thumbnail").attr("data-full-res")),e(this).closest(".sby_video_thumbnail").css("background-image","url("+e(this).closest(".sby_video_thumbnail").attr("data-full-res")+")")):"undefined"!==e(this).closest(".sby_video_thumbnail").attr("href")&&(e(this).attr("src",e(this).closest(".sby_video_thumbnail").attr("href")+"media?size=l"),e(this).closest(".sby_video_thumbnail").css("background-image","url("+e(this).closest(".sby_video_thumbnail").attr("href")+"media?size=l)"));setTimeout((function(){n.afterResize()}),1)}}))}},maybeRaiseImageResolution:function(t){var i=this,s=void 0!==t&&!0===t?".sby_item.sby_new":".sby_item",n=!i.isInitialized;e(i.el).find(s).each((function(t){!e(this).hasClass("sby_num_diff_hide")&&e(this).find(".sby_video_thumbnail").length&&void 0!==e(this).find(".sby_video_thumbnail").attr("data-img-src-set")&&i.maybeRaiseSingleImageResolution(e(this),t,n)})),i.isInitialized=!0},getBestResolutionForAuto:function(t,i,s){(isNaN(i)||i<1)&&(i=1);var n=t*i,a=10*Math.ceil(n/10),o=[120,320,480,640];if(s.hasClass("sby_highlighted")&&(a*=2),-1===o.indexOf(parseInt(a))){var r=!1;e.each(o,(function(t,e){e>parseInt(a)&&!r&&(a=e,r=!0)}))}return a},hideExtraItemsForWidth:function(){if("carousel"!==this.layout){var t=e(this.el),i=void 0!==t.attr("data-num")&&""!==t.attr("data-num")?parseInt(t.attr("data-num")):1,s=void 0!==t.attr("data-nummobile")&&""!==t.attr("data-nummobile")?parseInt(t.attr("data-nummobile")):i;t.hasClass(".sby_layout_carousel")||(e(window).width()<480?s<t.find(".sby_item").length&&t.find(".sby_item").slice(s-t.find(".sby_item").length).addClass("sby_num_diff_hide"):i<t.find(".sby_item").length&&t.find(".sby_item").slice(i-t.find(".sby_item").length).addClass("sby_num_diff_hide"))}},setImageSizeClass:function(){var t=e(this.el);t.removeClass("sby_small sby_medium");var i=t.innerWidth(),s=parseInt(t.find(".sby_items_wrap").outerWidth()-t.find(".sby_items_wrap").width())/2,n=this.getColumnCount(),a=(i-s*(n+2))/n;a>140&&a<240?t.addClass("sby_medium"):a<=140&&t.addClass("sby_small")},setMinImageWidth:function(){e(this.el).find(".sby_item .sby_video_thumbnail").first().length?this.minImageWidth=e(this.el).find(".sby_item .sby_video_thumbnail").first().innerWidth():this.minImageWidth=150},setImageResolution:function(){if("auto"===this.settings.imgRes)this.imageResolution="auto";else switch(this.settings.imgRes){case"thumb":this.imageResolution=150;break;case"medium":this.imageResolution=320;break;default:this.imageResolution=640}},getImageUrls:function(t){var e=JSON.parse(t.find(".sby_video_thumbnail").attr("data-img-src-set").replace(/\\\//g,"/")),i=t.attr("id").replace("sby_","").replace("player_","");if(void 0!==this.resizedImages[i]&&"video"!==this.resizedImages[i]&&"pending"!==this.resizedImages[i]&&"error"!==this.resizedImages[i].id&&"video"!==this.resizedImages[i].id&&"pending"!==this.resizedImages[i].id){if(void 0!==this.resizedImages[i].sizes){var s=[];void 0!==this.resizedImages[i].sizes.full&&(s.push(640),e[640]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg",t.find(".sby_link_area").attr("href",sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg"),t.find(".sby_video_thumbnail").attr("data-full-res",sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg")),void 0!==this.resizedImages[i].sizes.low&&(s.push(320),e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg",this.settings.favorLocal&&void 0===this.resizedImages[i].sizes.full&&(t.find(".sby_link_area").attr("href",sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"),t.find(".sby_video_thumbnail").attr("data-full-res",sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"))),void 0!==this.resizedImages[i].sizes.thumb&&(s.push(150),e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"thumb.jpg"),this.settings.favorLocal&&(-1===s.indexOf(640)&&s.indexOf(320)>-1&&(e[640]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"),-1===s.indexOf(320)&&(s.indexOf(640)>-1?e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg":s.indexOf(150)>-1&&(e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"thumb.jpg")),-1===s.indexOf(150)&&(s.indexOf(320)>-1?e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg":s.indexOf(640)>-1&&(e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg")))}}else(void 0===this.resizedImages[i]||void 0!==this.resizedImages[i].id&&"pending"!==this.resizedImages[i].id&&"error"!==this.resizedImages[i].id)&&this.addToNeedsResizing(i);return e},getVideoID:function(t){if(t.hasClass("sby_item")||t.hasClass("sby_player_item")){if(void 0!==t.find(".sby_video_thumbnail").attr("data-video-id"))return t.find(".sby_video_thumbnail").attr("data-video-id")}else if(t.closest("sby_item").length||t.closest("sby_player_item").length){var i=t.closest("sby_item").length?t.closest("sby_item"):t.closest("sby_player_item");if(void 0!==i.find(".sby_video_thumbnail").attr("data-video-id"))return i.find(".sby_video_thumbnail").attr("data-video-id")}else{if(t.hasClass("sb_youtube"))return t.find(".sby_item").first().find(".sby_video_thumbnail").attr("data-video-id");if(e(this.el).find(".sby_video_thumbnail").first().length&&void 0!==e(this.el).find(".sby_video_thumbnail").first().attr("data-video-id"))return e(this.el).find(".sby_video_thumbnail").first().attr("data-video-id")}return""},getAvatarUrl:function(t,e){if(""===t)return"";var i=this.settings.general.avatars;return"local"===(e=void 0!==e?e:"local")?void 0!==i["LCL"+t]&&1===parseInt(i["LCL"+t])?sbyOptions.resized_url+t+".jpg":void 0!==i[t]?i[t]:"":void 0!==i[t]?i[t]:void 0!==i["LCL"+t]&&1===parseInt(i["LCL"+t])?sbyOptions.resized_url+t+".jpg":""},addToNeedsResizing:function(t){-1===this.needsResizing.indexOf(t)&&this.needsResizing.push(t)},applyImageLiquid:function(){var t=e(this.el);(function(){var t,e,i,s,n=n||{VER:"0.9.944"};n.bgs_Available=!1,n.bgs_CheckRunned=!1,(t=jQuery).fn.extend({sby_imgLiquid:function(e){this.defaults={fill:!0,verticalAlign:"center",horizontalAlign:"center",useBackgroundSize:!0,useDataHtmlAttr:!0,responsive:!0,delay:0,fadeInTime:0,removeBoxBackground:!0,hardPixels:!0,responsiveCheckTime:500,timecheckvisibility:500,onStart:null,onFinish:null,onItemStart:null,onItemFinish:null,onItemError:null},function(){if(!n.bgs_CheckRunned){n.bgs_CheckRunned=!0;var e=t('<span style="background-size:cover" />');t("body").append(e),function(){var t=e[0];if(t&&window.getComputedStyle){var i=window.getComputedStyle(t,null);i&&i.backgroundSize&&(n.bgs_Available="cover"===i.backgroundSize)}}(),e.remove()}}();var i=this;return this.options=e,this.settings=t.extend({},this.defaults,this.options),this.settings.onStart&&this.settings.onStart(),this.each((function(e){function s(){(l.responsive||h.data("sby_imgLiquid_oldProcessed"))&&h.data("sby_imgLiquid_settings")&&(l=h.data("sby_imgLiquid_settings"),d.actualSize=d.get(0).offsetWidth+d.get(0).offsetHeight/1e4,d.sizeOld&&d.actualSize!==d.sizeOld&&o(),d.sizeOld=d.actualSize,setTimeout(s,l.responsiveCheckTime))}function a(){h.data("sby_imgLiquid_error",!0),d.addClass("sby_imgLiquid_error"),l.onItemError&&l.onItemError(e,d,h),r()}function o(){var t,i,s,n,a,o,c,u,g=0,y=0,p=d.width(),f=d.height();void 0===h.data("owidth")&&h.data("owidth",h[0].width),void 0===h.data("oheight")&&h.data("oheight",h[0].height),l.fill===p/f>=h.data("owidth")/h.data("oheight")?(t="100%",i="auto",s=Math.floor(p),n=Math.floor(p*(h.data("oheight")/h.data("owidth")))):(t="auto",i="100%",s=Math.floor(f*(h.data("owidth")/h.data("oheight"))),n=Math.floor(f)),c=p-s,"left"===(a=l.horizontalAlign.toLowerCase())&&(y=0),"center"===a&&(y=.5*c),"right"===a&&(y=c),-1!==a.indexOf("%")&&(a=parseInt(a.replace("%",""),10))>0&&(y=c*a*.01),u=f-n,"left"===(o=l.verticalAlign.toLowerCase())&&(g=0),"center"===o&&(g=.5*u),"bottom"===o&&(g=u),-1!==o.indexOf("%")&&(o=parseInt(o.replace("%",""),10))>0&&(g=u*o*.01),l.hardPixels&&(t=s,i=n),h.css({width:t,height:i,"margin-left":Math.floor(y),"margin-top":Math.floor(g)}),h.data("sby_imgLiquid_oldProcessed")||(h.fadeTo(l.fadeInTime,1),h.data("sby_imgLiquid_oldProcessed",!0),l.removeBoxBackground&&d.css("background-image","none"),d.addClass("sby_imgLiquid_nobgSize"),d.addClass("sby_imgLiquid_ready")),l.onItemFinish&&l.onItemFinish(e,d,h),r()}function r(){e===i.length-1&&i.settings.onFinish&&i.settings.onFinish()}var l=i.settings,d=t(this),h=t("img:first",d);return h.length?(h.data("sby_imgLiquid_settings")?(d.removeClass("sby_imgLiquid_error").removeClass("sby_imgLiquid_ready"),l=t.extend({},h.data("sby_imgLiquid_settings"),i.options)):l=t.extend({},i.settings,function(){var t={};if(i.settings.useDataHtmlAttr){var e=d.attr("data-sby_imgLiquid-fill"),s=d.attr("data-sby_imgLiquid-horizontalAlign"),a=d.attr("data-sby_imgLiquid-verticalAlign");("true"===e||"false"===e)&&(t.fill=Boolean("true"===e)),void 0===s||"left"!==s&&"center"!==s&&"right"!==s&&-1===s.indexOf("%")||(t.horizontalAlign=s),void 0===a||"top"!==a&&"bottom"!==a&&"center"!==a&&-1===a.indexOf("%")||(t.verticalAlign=a)}return n.isIE&&i.settings.ieFadeInDisabled&&(t.fadeInTime=0),t}()),h.data("sby_imgLiquid_settings",l),l.onItemStart&&l.onItemStart(e,d,h),void(n.bgs_Available&&l.useBackgroundSize?(-1===d.css("background-image").indexOf(encodeURI(h.attr("src")))&&d.css({"background-image":'url("'+encodeURI(h.attr("src"))+'")'}),d.css({"background-size":l.fill?"cover":"contain","background-position":(l.horizontalAlign+" "+l.verticalAlign).toLowerCase(),"background-repeat":"no-repeat"}),t("a:first",d).css({display:"block",width:"100%",height:"100%"}),t("img",d).css({display:"none"}),l.onItemFinish&&l.onItemFinish(e,d,h),d.addClass("sby_imgLiquid_bgSize"),d.addClass("sby_imgLiquid_ready"),r()):function i(){if(h.data("oldSrc")&&h.data("oldSrc")!==h.attr("src")){var n=h.clone().removeAttr("style");return n.data("sby_imgLiquid_settings",h.data("sby_imgLiquid_settings")),h.parent().prepend(n),h.remove(),(h=n)[0].width=0,void setTimeout(i,10)}return h.data("sby_imgLiquid_oldProcessed")?void o():(h.data("sby_imgLiquid_oldProcessed",!1),h.data("oldSrc",h.attr("src")),t("img:not(:first)",d).css("display","none"),d.css({overflow:"hidden"}),h.fadeTo(0,0).removeAttr("width").removeAttr("height").css({visibility:"visible","max-width":"none","max-height":"none",width:"auto",height:"auto",display:"block"}),h.on("error",a),h[0].onerror=a,function t(){h.data("sby_imgLiquid_error")||h.data("sby_imgLiquid_loaded")||h.data("sby_imgLiquid_oldProcessed")||(d.is(":visible")&&h[0].complete&&h[0].width>0&&h[0].height>0?(h.data("sby_imgLiquid_loaded",!0),setTimeout(o,e*l.delay)):setTimeout(t,l.timecheckvisibility))}(),void s())}())):void a()}))}}),e=n.injectCss,i=document.getElementsByTagName("head")[0],(s=document.createElement("style")).type="text/css",s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e)),i.appendChild(s)})(),"function"==typeof t.find(".sby_player_item").sby_imgLiquid&&(t.find(".sby_player_item").length&&t.find(".sby_player_item .sby_player_video_thumbnail").sby_imgLiquid({fill:!0}),t.find(".sby_item .sby_item_video_thumbnail").sby_imgLiquid({fill:!0}))},listenForVisibilityChange:function(){var t=this;!function(t){var e={callback:function(){},runOnLoad:!0,frequency:100,sbyPreviousVisibility:null},i={sbyCheckVisibility:function(t,e){if(jQuery.contains(document,t[0])){var s=e.sbyPreviousVisibility,n=t.is(":visible");e.sbyPreviousVisibility=n,null==s?e.runOnLoad&&e.callback(t,n):s!==n&&e.callback(t,n),setTimeout((function(){i.sbyCheckVisibility(t,e)}),e.frequency)}}};t.fn.sbyVisibilityChanged=function(s){var n=t.extend({},e,s);return this.each((function(){i.sbyCheckVisibility(t(this),n)}))}}(jQuery),"function"==typeof e(this.el).filter(":hidden").sbyVisibilityChanged&&e(this.el).filter(":hidden").sbyVisibilityChanged({callback:function(e,i){t.afterResize()},runOnLoad:!1})},getColumnCount:function(){var t=e(this.el),i=this.settings.cols,s=this.settings.colsmobile,n=i;return sbyWindowWidth=window.innerWidth,t.hasClass("sby_mob_col_auto")?(sbyWindowWidth<640&&parseInt(i)>2&&parseInt(i)<7&&(n=2),sbyWindowWidth<640&&parseInt(i)>6&&parseInt(i)<11&&(n=4),sbyWindowWidth<=480&&parseInt(i)>2&&(n=1)):sbyWindowWidth<=480&&(n=s),parseInt(n)},onThumbnailClick:function(t,i,s){if(this.canCreatePlayer()){var n=e(this.el);if(n.hasClass("sby_layout_gallery"))if(n.find(".sby_current").removeClass("sby_current"),t.closest(".sby_item").addClass("sby_current"),t.closest(".sby_item").addClass("sby_current"),n.addClass("sby_player_added").find(".sby_player_outer_wrap").addClass("sby_player_loading"),n.find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").show().removeClass("sby_hidden"),n.find(".sby_player_outer_wrap iframe").length)i?(s=void 0===s?this.getVideoID(n.find(".sby_item").first()):s,this.playVideoInPlayer(s)):(s=void 0===s?this.getVideoID(t.closest(".sby_item")):s,this.changePlayerInfo(t.closest(".sby_item")),this.playVideoInPlayer(s),this.afterVideoChanged());else if(i)this.createPlayer("sby_player"+this.index);else{s=void 0===s?this.getVideoID(t.closest(".sby_item")):s;this.createPlayer("sby_player"+this.index,s)}else if(e(this.el).hasClass("sby_layout_grid")||e(this.el).hasClass("sby_layout_carousel")){var a=t.closest(".sby_item");s=void 0===s?this.getVideoID(a):s,this.playVideoInPlayer(s),this.afterVideoChanged()}else e(this.el).hasClass("sby_layout_list")&&(a=t.closest(".sby_item"),s=void 0===s?this.getVideoID(a):s,a.length&&!a.find("iframe").length?(a.find(".sby_loader").show().removeClass("sby_hidden"),a.addClass("sby_player_loading sby_player_loaded"),this.createPlayer("sby_player_"+s,s)):(this.playVideoInPlayer(s,a.attr("data-video-id")),this.afterVideoChanged()))}},onThumbnailEnter:function(t){if(this.canCreatePlayer()&&e(this.el).hasClass("sby_layout_list")){var i=t.closest(".sby_item"),s=this.getVideoID(i);i.find("iframe").length||(i.find(".sby_loader").show().removeClass("sby_hidden"),i.addClass("sby_player_loading sby_player_loaded"),this.createPlayer("sby_player_"+s,s,0))}},onThumbnailLeave:function(t){},changePlayerInfo:function(t){},playerEagerLoaded:function(){if(void 0!==this.player||e(this.el).hasClass("sby_player_loaded"))return!0},canCreatePlayer:function(){return!e(this.el).find("#sby_blank").length&&(this.playerEagerLoaded()||this.playerAPIReady&&this.settings.consentGiven||window.sbyAPIReady&&this.settings.consentGiven)},playVideoInPlayer:function(t,e){void 0!==this.player&&void 0!==this.player.loadVideoById?this.player.loadVideoById(t):void 0!==window.sbyLightboxPlayer&&void 0!==window.sbyLightboxPlayer.loadVideoById?window.sbyLightboxPlayer.loadVideoById(t):void 0!==e&&void 0!==this.players&&void 0!==this.players[e]&&void 0!==this.players[e].loadVideoById&&this.players[e].loadVideoById(t)},afterVideoChanged:function(){e(this.el).hasClass("sby_layout_gallery")&&(e(this.el).find(".sby_player_outer_wrap").removeClass("sby_player_loading"),e(this.el).find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").hide().addClass("sby_hidden"),e(window).width()<480&&e("html, body").animate({scrollTop:e(this.el).find(".sby_player_outer_wrap").offset().top},300))},checkConsent:function(){if(this.settings.consentGiven||!this.settings.gdpr)return this.settings.noCDN=!1,!0;if("undefined"!=typeof CLI_Cookie)null!==CLI_Cookie.read(CLI_ACCEPT_COOKIE_NAME)&&("null"!==CLI_Cookie.read("cookielawinfo-checkbox-non-necessary")&&(this.settings.consentGiven="yes"===CLI_Cookie.read("cookielawinfo-checkbox-non-necessary")),"null"!==CLI_Cookie.read("cookielawinfo-checkbox-necessary")&&(this.settings.consentGiven="yes"===CLI_Cookie.read("cookielawinfo-checkbox-necessary")));else if(void 0!==window.cnArgs){var t=("; "+document.cookie).split("; cookie_notice_accepted=");if(2===t.length){var e=t.pop().split(";").shift();this.settings.consentGiven="true"===e}}else void 0!==window.cookieconsent?this.settings.consentGiven="allow"===function(t){for(var e="cmplz_consent_status=",i=window.document.cookie.split(";"),s=0;s<i.length;s++){var n=i[s].trim();if(0==n.indexOf(e))return n.substring(e.length,n.length)}return""}()||jQuery("body").hasClass("cmplz-status-marketing"):void 0!==window.Cookiebot?this.settings.consentGiven=Cookiebot.consented:void 0!==window.BorlabsCookie&&(this.settings.consentGiven=window.BorlabsCookie.checkCookieConsent("youtube"));var i=jQuery.Event("sbycheckconsent");return i.feed=this,jQuery(window).trigger(i),this.settings.consentGiven&&(this.settings.noCDN=!1),this.settings.consentGiven},afterConsentToggled:function(){if(this.checkConsent()){var t=this;window.sby.maybeAddYTAPI(),t.maybeRaiseImageResolution(),t.applyFullFeatures(),setTimeout((function(){t.afterResize()}),500)}},removeFeatures:function(){this.settings.noCDN&&e(this.el).find(".sby_video_thumbnail").each((function(){e(this).removeAttr("data-sby-lightbox")}))},applyFullFeatures:function(){var t=this;e(t.el).find(".sby_header_img img").attr("src",e(t.el).find(".sby_header_img").attr("data-avatar-url")),void 0===e(t.el).find(".sby_video_thumbnail").first().attr("data-sby-lightbox")&&t.settings.lightboxEnabled&&e(t.el).find(".sby_video_thumbnail").each((function(){e(this).attr("data-sby-lightbox",t.index)}));var i=e(t.el);if(i.find(".sby_no_consent").removeClass("sby_no_consent"),i.hasClass("sby_layout_gallery")&&i.find(".sby_player_outer_wrap").length){if(this.maybeRaiseSingleImageResolution(i.find(".sby_player_outer_wrap"),0,!0),i.find(".sby_item").first().addClass("sby_current"),!t.canCreatePlayer())return;i.find(".sby_player_outer_wrap iframe").length||t.createPlayer("sby_player"+t.index)}},locationGuess:function(){var t=e(this.el),i="content";return t.closest("footer").length?i="footer":t.closest(".header").length||t.closest("header").length?i="header":(t.closest(".sidebar").length||t.closest("aside").length)&&(i="sidebar"),i}},n.prototype=Object.create(s.prototype),a.prototype={getData:function(t){return{feedIndex:parseInt(t.closest(".sb_youtube").attr("data-sby-index")-1),link:t.attr("href"),videoTitle:void 0!==t.attr("data-video-title")?t.attr("data-video-title"):"YouTube Video",video:t.attr("data-video-id")}},template:function(){return"<div id='sby_lightboxOverlay' class='sby_lightboxOverlay'></div><div id='sby_lightbox' class='sby_lightbox'><div class='sby_lb-outerContainer'><div class='sby_lb-container'><img class='sby_lb-image' alt='Lightbox image placeholder' src='' /><div class='sby_lb-player sby_lb-player-placeholder' id='sby_lb-player'></div><div class='sby_lb-nav'><a class='sby_lb-prev' href='#' ><p class='sby-screenreader'>Previous Slide</p><span></span></a><a class='sby_lb-next' href='#' ><p class='sby-screenreader'>Next Slide</p><span></span></a></div><div class='sby_lb-loader'><a class='sby_lb-cancel'></a></div></div></div><div class='sby_lb-dataContainer'><div class='sby_lb-data'><div class='sby_lb-details'><div class='sby_lb-caption'></div><div class='sby_lb-info'><div class='sby_lb-number'></div></div></div><div class='sby_lb-closeContainer'><a class='sby_lb-close'></a></div></div></div></div>"},beforePlayerSetup:function(t,e,i,s,n){},afterPlayerSetup:function(t,e,i,s){},afterResize:function(){var t=e("#sby_lightbox .sby_lb-player").height();if(t>100){var i=e("#sby_lightbox .sby_lb-outerContainer").height()-t;i>10&&e("#sby_lightbox .sby_lb-player").css("top",i/2)}},pausePlayer:function(){void 0===window.sbyLightboxPlayer&&"undefined"==typeof YT||(void 0!==YT.get("sby_lb-player")&&"function"==typeof YT.get("sby_lb-player").pauseVideo?YT.get("sby_lb-player").pauseVideo():void 0!==window.sbyLightboxPlayer&&"function"==typeof window.sbyLightboxPlayer.pauseVideo&&window.sbyLightboxPlayer.pauseVideo())}},window.sby_init=function(){window.sby=new i,window.sby.createPage(window.sby.createFeeds,{whenFeedsCreated:window.sby.afterFeedsCreated})},window.sby_carousel_init=function(){console.log("log")}}(jQuery),void 0===window.sbyEagerLoading){if(window.sbyEagerLoading=void 0!==window.sbyOptions&&window.sbyOptions.eagerload,jQuery(".elementor-widget-video").length){var c=void 0!==jQuery(".elementor-widget-video").attr("data-settings")&&JSON.parse(jQuery(".elementor-widget-video").attr("data-settings"));c&&void 0!==c.youtube_url&&(window.sbyEagerLoading=!0)}jQuery("div[data-vc-video-bg]").length&&(window.sbyEagerLoading=!0)}void 0===window.sbySemiEagerLoading&&(window.sbySemiEagerLoading=void 0!==window.sbyOptions&&window.sbyOptions.semiEagerload,(jQuery("div[data-vc-video-bg]").length||window.sbyEagerLoading)&&(window.sbySemiEagerLoading=!1)),jQuery(document).ready((function(t){window.sbySemiEagerLoading||sby_init(),t("#cookie-notice a").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t("#cookie-law-info-bar a").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t(".cli-user-preference-checkbox").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!1,window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t(window).on("CookiebotOnAccept",(function(e){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),t(document).on("cmplzEnableScripts",(function(e){"marketing"===e.detail&&t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),t(document).on("cmplzFireCategories",(function(e){"marketing"===e.detail.category&&t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),t(document).on("borlabs-cookie-consent-saved",(function(e){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!1,window.sby.feeds[t].afterConsentToggled()}))}))}))}if(window.sbySemiEagerLoading){var u="sby-youtube-api";if(null===document.getElementById(u)){var g=document.createElement("script"),y=document.getElementsByTagName("script")[0];g.src="https://www.youtube.com/iframe_api",g.id=u,y.parentNode.insertBefore(g,y)}}window.onYouTubeIframeAPIReady=function(){var t=document.getElementsByClassName("sb_youtube").length;if(t>0){if(window.sbySemiEagerLoading){if(void 0!==window.sby)for(var e=0;e<t;e++)window.sby.feeds[e].playerAPIReady=!0;else window.sbyAPIReady=!0;sby_init()}else if(window.sbyEagerLoading){var i=!1,s=!1;jQuery(".sb_youtube").each((function(t){var e=jQuery(this);e.hasClass("sby_layout_list")?(jQuery(this).addClass("sby_player_loaded"),e.find(".sby_item").each((function(){videoID=jQuery(this).attr("data-video-id"),player=new YT.Player("sby_player_"+videoID,{height:"100",width:"100",videoId:videoID,playerVars:{modestbranding:1,rel:0,autoplay:s},events:{onStateChange:function(t){t.target.getVideoData().video_id,1===t.data&&e.find(".sby_item").each((function(){var e=jQuery(this).attr("data-video-id");jQuery(this).find("iframe").length&&jQuery(t.target.a).attr("id")!==jQuery(this).find("iframe").attr("id")&&YT.get("sby_player_"+e).pauseVideo()}))}}})}))):e.hasClass("sby_layout_gallery")?(jQuery(this).addClass("sby_player_loaded"),player=new YT.Player("sby_player"+t,{height:"100",width:"100",videoId:jQuery(this).find(".sby_item").first().attr("data-video-id"),playerVars:{modestbranding:1,rel:0,autoplay:s},events:{onStateChange:function(t){t.target.getVideoData().video_id,1===t.data&&e.find(".sby_item").each((function(){var e=jQuery(this).attr("data-video-id");jQuery(this).find("iframe").length&&jQuery(t.target.a).attr("id")!==jQuery(this).find("iframe").attr("id")&&YT.get("sby_player_"+e).pauseVideo()}))}}})):i=!0}))}else if(void 0!==window.sby)for(e=0;e<t;e++)window.sby.feeds[e].playerAPIReady=!0;else window.sbyAPIReady=!0;jQuery(".sb_youtube").each((function(t){var e=jQuery(this);e.find(".sby_live_player").length&&(player=new YT.Player(e.find(".sby_live_player").attr("id"),{events:{onReady:function(){e.find(".sby_live_player").hide(),e.find(".sby_item").remove();var i=YT.get(e.find(".sby_live_player").attr("id")).getVideoData().video_id;e.find(".sby_player_video_thumbnail").attr("data-video-id",i).css("z-index",-1),e.find(".sby_item").length;var s={action:"sby_live_retrieve",video_id:i,feed_id:e.attr("data-feedid"),atts:e.attr("data-shortcode-atts")};jQuery.ajax({url:sbyOptions.adminAjaxUrl,type:"post",data:s,success:function(i){if(0===i.trim().indexOf("{")){var s=window.sby.feeds[t],n=JSON.parse(i),a=void 0!==n.feedStatus.checkWPPosts&&n.feedStatus.checkWPPosts;s.settings.debugEnabled&&console.log(n),s.settings.checkWPPosts=!!a,s.appendNewPosts(n.html),s.addResizedImages(n.resizedImages),s.afterInitialImagesLoaded(),n.feedStatus.shouldPaginate?s.outOfPages=!1:(s.outOfPages=!0,e.find(".sby_load_btn").hide()),jQuery(".sby_no_js").removeClass("sby_no_js"),e.find(".sby_live_player").remove(),e.hasClass("sby_layout_gallery")&&s.createPlayer("sby_player"+s.index),e.find(".sby_player_item").css("opacity",1),e.find(".sby_item").css("opacity",1),e.find(".sby_player_loading").removeClass("sby_player_loading"),e.hasClass("sby_layout_list")&&e.find(".sby_item_video_thumbnail").on("mouseenter",(function(){jQuery(this).css("z-index",-1)}))}}})}}}))})),i&&(jQuery("#sby_lb-player").length||jQuery(".sb_youtube").first().append('<div class="sby_lb-player-loaded sby_lb-player" id="sby_lb-player" style="display: none;"></div>'),player=new YT.Player("sby_lb-player",{height:"100",width:"100",videoId:jQuery(this).find(".sby_item").first().attr("data-video-id"),playerVars:{modestbranding:1,rel:0,autoplay:s}}),window.sbyLightboxPlayer=player)}if(void 0!==window.sby){var n=jQuery.Event("sbyfeedandytready");jQuery(window).trigger(n)}}})();
3
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,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SSxTQUFTLHVCQUNqQjJILEVBQUtrUCxhQUFhLGFBQWFsUCxFQUFLbFQsT0FFdENxVSxFQUFNdlQsS0FBSyxvQkFBb0I5QixJQUFJLFVBQVUsR0FDN0NxVixFQUFNdlQsS0FBSyxhQUFhOUIsSUFBSSxVQUFVLEdBQ3RDcVYsRUFBTXZULEtBQUssdUJBQXVCUCxZQUFZLHNCQUMxQzhULEVBQU05SSxTQUFTLG9CQUNqQjhJLEVBQU12VCxLQUFLLDZCQUE2QitCLEdBQUcsY0FBYSxXQUN0RDJDLE9BQU9sTSxNQUFNMEYsSUFBSSxXQUFXLGtCQW1CMUNtdUIsSUFDRzNuQixPQUFPLGtCQUFrQi9NLFFBQzVCK00sT0FBTyxlQUFlOE4sUUFBUXJTLE9BQU8sb0dBRXZDaWhCLE9BQVMsSUFBSS9OLEdBQUdDLE9BQU8sZ0JBQWlCLENBQ3RDckssT0FBUSxNQUNScEwsTUFBTyxNQUNQZ1YsUUFBU25PLE9BQU9sTSxNQUFNd0gsS0FBSyxhQUFhd1MsUUFBUTVSLEtBQUssaUJBQ3JEa1MsV0FBWSxDQUNWQyxlQUFnQixFQUNoQkMsSUFBSyxFQUNMMUgsU0FBVUEsS0FHZG5WLE9BQU9zYyxrQkFBb0IyTyxRQUsvQixRQUEwQixJQUFmanJCLE9BQU8wYSxJQUFxQixDQUNyQyxJQUFJc0IsRUFBTXpOLE9BQU8vRyxNQUFNLHFCQUN2QitHLE9BQU92TyxRQUFRMEosUUFBUXNTIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL2pzL3NiLXlvdXR1YmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHNieV9qc19leGlzdHMgPSAodHlwZW9mIHNieV9qc19leGlzdHMgIT09ICd1bmRlZmluZWQnKSA/IHRydWUgOiBmYWxzZTtcbmlmKCFzYnlfanNfZXhpc3RzKSB7XG5cbiAgZnVuY3Rpb24gc2J5QWRkSW1nTGlxdWlkKCkge1xuICAgIC8qISBpbWdMaXF1aWQgdjAuOS45NDQgLyAwMy0wNS0yMDEzIGh0dHBzOi8vZ2l0aHViLmNvbS9rYXJhY2FzL2ltZ0xpcXVpZCAqL1xuICAgIHZhciBzYnlfaW1nTGlxdWlkID0gc2J5X2ltZ0xpcXVpZCB8fCB7VkVSOiBcIjAuOS45NDRcIn07XG4gICAgc2J5X2ltZ0xpcXVpZC5iZ3NfQXZhaWxhYmxlID0gITEsIHNieV9pbWdMaXF1aWQuYmdzX0NoZWNrUnVubmVkID0gITEsIGZ1bmN0aW9uIChpKSB7XG4gICAgICBmdW5jdGlvbiB0KCkge1xuICAgICAgICBpZiAoIXNieV9pbWdMaXF1aWQuYmdzX0NoZWNrUnVubmVkKSB7XG4gICAgICAgICAgc2J5X2ltZ0xpcXVpZC5iZ3NfQ2hlY2tSdW5uZWQgPSAhMDtcbiAgICAgICAgICB2YXIgdCA9IGkoJzxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1zaXplOmNvdmVyXCIgLz4nKTtcbiAgICAgICAgICBpKFwiYm9keVwiKS5hcHBlbmQodCksICFmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaSA9IHRbMF07XG4gICAgICAgICAgICBpZiAoaSAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xuICAgICAgICAgICAgICB2YXIgZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGksIG51bGwpO1xuICAgICAgICAgICAgICBlICYmIGUuYmFja2dyb3VuZFNpemUgJiYgKHNieV9pbWdMaXF1aWQuYmdzX0F2YWlsYWJsZSA9IFwiY292ZXJcIiA9PT0gZS5iYWNrZ3JvdW5kU2l6ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KCksIHQucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpLmZuLmV4dGVuZCh7XG4gICAgICAgIHNieV9pbWdMaXF1aWQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIGZpbGw6ICEwLFxuICAgICAgICAgICAgdmVydGljYWxBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgIGhvcml6b250YWxBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgIHVzZUJhY2tncm91bmRTaXplOiAhMCxcbiAgICAgICAgICAgIHVzZURhdGFIdG1sQXR0cjogITAsXG4gICAgICAgICAgICByZXNwb25zaXZlOiAhMCxcbiAgICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgICAgZmFkZUluVGltZTogMCxcbiAgICAgICAgICAgIHJlbW92ZUJveEJhY2tncm91bmQ6ICEwLFxuICAgICAgICAgICAgaGFyZFBpeGVsczogITAsXG4gICAgICAgICAgICByZXNwb25zaXZlQ2hlY2tUaW1lOiA1MDAsXG4gICAgICAgICAgICB0aW1lY2hlY2t2aXNpYmlsaXR5OiA1MDAsXG4gICAgICAgICAgICBvblN0YXJ0OiBudWxsLFxuICAgICAgICAgICAgb25GaW5pc2g6IG51bGwsXG4gICAgICAgICAgICBvbkl0ZW1TdGFydDogbnVsbCxcbiAgICAgICAgICAgIG9uSXRlbUZpbmlzaDogbnVsbCxcbiAgICAgICAgICAgIG9uSXRlbUVycm9yOiBudWxsXG4gICAgICAgICAgfSwgdCgpO1xuICAgICAgICAgIHZhciBhID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zID0gZSwgdGhpcy5zZXR0aW5ncyA9IGkuZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzLCB0aGlzLm9wdGlvbnMpLCB0aGlzLnNldHRpbmdzLm9uU3RhcnQgJiYgdGhpcy5zZXR0aW5ncy5vblN0YXJ0KCksIHRoaXMuZWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgICAgICAgICAgLTEgPT09IHUuY3NzKFwiYmFja2dyb3VuZC1pbWFnZVwiKS5pbmRleE9mKGVuY29kZVVSSShjLmF0dHIoXCJzcmNcIikpKSAmJiB1LmNzcyh7XCJiYWNrZ3JvdW5kLWltYWdlXCI6ICd1cmwoXCInICsgZW5jb2RlVVJJKGMuYXR0cihcInNyY1wiKSkgKyAnXCIpJ30pLCB1LmNzcyh7XG4gICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kLXNpemVcIjogZy5maWxsID8gXCJjb3ZlclwiIDogXCJjb250YWluXCIsXG4gICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kLXBvc2l0aW9uXCI6IChnLmhvcml6b250YWxBbGlnbiArIFwiIFwiICsgZy52ZXJ0aWNhbEFsaWduKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1yZXBlYXRcIjogXCJuby1yZXBlYXRcIlxuICAgICAgICAgICAgICB9KSwgaShcImE6Zmlyc3RcIiwgdSkuY3NzKHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcbiAgICAgICAgICAgICAgfSksIGkoXCJpbWdcIiwgdSkuY3NzKHtkaXNwbGF5OiBcIm5vbmVcIn0pLCBnLm9uSXRlbUZpbmlzaCAmJiBnLm9uSXRlbUZpbmlzaCh0LCB1LCBjKSwgdS5hZGRDbGFzcyhcInNieV9pbWdMaXF1aWRfYmdTaXplXCIpLCB1LmFkZENsYXNzKFwic2J5X2ltZ0xpcXVpZF9yZWFkeVwiKSwgbCgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oKSB7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICAgICAgICAgICAgYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9lcnJvclwiKSB8fCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX2xvYWRlZFwiKSB8fCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX29sZFByb2Nlc3NlZFwiKSB8fCAodS5pcyhcIjp2aXNpYmxlXCIpICYmIGNbMF0uY29tcGxldGUgJiYgY1swXS53aWR0aCA+IDAgJiYgY1swXS5oZWlnaHQgPiAwID8gKGMuZGF0YShcInNieV9pbWdMaXF1aWRfbG9hZGVkXCIsICEwKSwgc2V0VGltZW91dChyLCB0ICogZy5kZWxheSkpIDogc2V0VGltZW91dChlLCBnLnRpbWVjaGVja3Zpc2liaWxpdHkpKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGMuZGF0YShcIm9sZFNyY1wiKSAmJiBjLmRhdGEoXCJvbGRTcmNcIikgIT09IGMuYXR0cihcInNyY1wiKSkge1xuICAgICAgICAgICAgICAgIHZhciBhID0gYy5jbG9uZSgpLnJlbW92ZUF0dHIoXCJzdHlsZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5kYXRhKFwic2J5X2ltZ0xpcXVpZF9zZXR0aW5nc1wiLCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIpKSwgYy5wYXJlbnQoKS5wcmVwZW5kKGEpLCBjLnJlbW92ZSgpLCBjID0gYSwgY1swXS53aWR0aCA9IDAsIHZvaWQgc2V0VGltZW91dChvLCAxMClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9vbGRQcm9jZXNzZWRcIikgPyB2b2lkIHIoKSA6IChjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX29sZFByb2Nlc3NlZFwiLCAhMSksIGMuZGF0YShcIm9sZFNyY1wiLCBjLmF0dHIoXCJzcmNcIikpLCBpKFwiaW1nOm5vdCg6Zmlyc3QpXCIsIHUpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpLCB1LmNzcyh7b3ZlcmZsb3c6IFwiaGlkZGVuXCJ9KSwgYy5mYWRlVG8oMCwgMCkucmVtb3ZlQXR0cihcIndpZHRoXCIpLnJlbW92ZUF0dHIoXCJoZWlnaHRcIikuY3NzKHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgICAgICAgICAgICBcIm1heC13aWR0aFwiOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICBcIm1heC1oZWlnaHRcIjogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgIGhlaWdodDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJibG9ja1wiXG4gICAgICAgICAgICAgIH0pLCBjLm9uKFwiZXJyb3JcIiwgbiksIGNbMF0ub25lcnJvciA9IG4sIGUoKSwgdm9pZCBkKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGQoKSB7XG4gICAgICAgICAgICAgIChnLnJlc3BvbnNpdmUgfHwgYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9vbGRQcm9jZXNzZWRcIikpICYmIGMuZGF0YShcInNieV9pbWdMaXF1aWRfc2V0dGluZ3NcIikgJiYgKGcgPSBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIpLCB1LmFjdHVhbFNpemUgPSB1LmdldCgwKS5vZmZzZXRXaWR0aCArIHUuZ2V0KDApLm9mZnNldEhlaWdodCAvIDFlNCwgdS5zaXplT2xkICYmIHUuYWN0dWFsU2l6ZSAhPT0gdS5zaXplT2xkICYmIHIoKSwgdS5zaXplT2xkID0gdS5hY3R1YWxTaXplLCBzZXRUaW1lb3V0KGQsIGcucmVzcG9uc2l2ZUNoZWNrVGltZSkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICAgICAgICAgIGMuZGF0YShcInNieV9pbWdMaXF1aWRfZXJyb3JcIiwgITApLCB1LmFkZENsYXNzKFwic2J5X2ltZ0xpcXVpZF9lcnJvclwiKSwgZy5vbkl0ZW1FcnJvciAmJiBnLm9uSXRlbUVycm9yKHQsIHUsIGMpLCBsKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcygpIHtcbiAgICAgICAgICAgICAgdmFyIGkgPSB7fTtcbiAgICAgICAgICAgICAgaWYgKGEuc2V0dGluZ3MudXNlRGF0YUh0bWxBdHRyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQgPSB1LmF0dHIoXCJkYXRhLXNieV9pbWdMaXF1aWQtZmlsbFwiKSxcbiAgICAgICAgICAgICAgICAgIGUgPSB1LmF0dHIoXCJkYXRhLXNieV9pbWdMaXF1aWQtaG9yaXpvbnRhbEFsaWduXCIpLFxuICAgICAgICAgICAgICAgICAgbyA9IHUuYXR0cihcImRhdGEtc2J5X2ltZ0xpcXVpZC12ZXJ0aWNhbEFsaWduXCIpO1xuICAgICAgICAgICAgICAgIChcInRydWVcIiA9PT0gdCB8fCBcImZhbHNlXCIgPT09IHQpICYmIChpLmZpbGwgPSBCb29sZWFuKFwidHJ1ZVwiID09PSB0KSksIHZvaWQgMCA9PT0gZSB8fCBcImxlZnRcIiAhPT0gZSAmJiBcImNlbnRlclwiICE9PSBlICYmIFwicmlnaHRcIiAhPT0gZSAmJiAtMSA9PT0gZS5pbmRleE9mKFwiJVwiKSB8fCAoaS5ob3Jpem9udGFsQWxpZ24gPSBlKSwgdm9pZCAwID09PSBvIHx8IFwidG9wXCIgIT09IG8gJiYgXCJib3R0b21cIiAhPT0gbyAmJiBcImNlbnRlclwiICE9PSBvICYmIC0xID09PSBvLmluZGV4T2YoXCIlXCIpIHx8IChpLnZlcnRpY2FsQWxpZ24gPSBvKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBzYnlfaW1nTGlxdWlkLmlzSUUgJiYgYS5zZXR0aW5ncy5pZUZhZGVJbkRpc2FibGVkICYmIChpLmZhZGVJblRpbWUgPSAwKSwgaVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiByKCkge1xuICAgICAgICAgICAgICB2YXIgaSwgZSwgYSwgbywgZCwgbiwgcywgciwgbSA9IDAsIGggPSAwLCBmID0gdS53aWR0aCgpLCB2ID0gdS5oZWlnaHQoKTtcbiAgICAgICAgICAgICAgdm9pZCAwID09PSBjLmRhdGEoXCJvd2lkdGhcIikgJiYgYy5kYXRhKFwib3dpZHRoXCIsIGNbMF0ud2lkdGgpLCB2b2lkIDAgPT09IGMuZGF0YShcIm9oZWlnaHRcIikgJiYgYy5kYXRhKFwib2hlaWdodFwiLCBjWzBdLmhlaWdodCksIGcuZmlsbCA9PT0gZiAvIHYgPj0gYy5kYXRhKFwib3dpZHRoXCIpIC8gYy5kYXRhKFwib2hlaWdodFwiKSA/IChpID0gXCIxMDAlXCIsIGUgPSBcImF1dG9cIiwgYSA9IE1hdGguZmxvb3IoZiksIG8gPSBNYXRoLmZsb29yKGYgKiAoYy5kYXRhKFwib2hlaWdodFwiKSAvIGMuZGF0YShcIm93aWR0aFwiKSkpKSA6IChpID0gXCJhdXRvXCIsIGUgPSBcIjEwMCVcIiwgYSA9IE1hdGguZmxvb3IodiAqIChjLmRhdGEoXCJvd2lkdGhcIikgLyBjLmRhdGEoXCJvaGVpZ2h0XCIpKSksIG8gPSBNYXRoLmZsb29yKHYpKSwgZCA9IGcuaG9yaXpvbnRhbEFsaWduLnRvTG93ZXJDYXNlKCksIHMgPSBmIC0gYSwgXCJsZWZ0XCIgPT09IGQgJiYgKGggPSAwKSwgXCJjZW50ZXJcIiA9PT0gZCAmJiAoaCA9IC41ICogcyksIFwicmlnaHRcIiA9PT0gZCAmJiAoaCA9IHMpLCAtMSAhPT0gZC5pbmRleE9mKFwiJVwiKSAmJiAoZCA9IHBhcnNlSW50KGQucmVwbGFjZShcIiVcIiwgXCJcIiksIDEwKSwgZCA+IDAgJiYgKGggPSBzICogZCAqIC4wMSkpLCBuID0gZy52ZXJ0aWNhbEFsaWduLnRvTG93ZXJDYXNlKCksIHIgPSB2IC0gbywgXCJsZWZ0XCIgPT09IG4gJiYgKG0gPSAwKSwgXCJjZW50ZXJcIiA9PT0gbiAmJiAobSA9IC41ICogciksIFwiYm90dG9tXCIgPT09IG4gJiYgKG0gPSByKSwgLTEgIT09IG4uaW5kZXhPZihcIiVcIikgJiYgKG4gPSBwYXJzZUludChuLnJlcGxhY2UoXCIlXCIsIFwiXCIpLCAxMCksIG4gPiAwICYmIChtID0gciAqIG4gKiAuMDEpKSwgZy5oYXJkUGl4ZWxzICYmIChpID0gYSwgZSA9IG8pLCBjLmNzcyh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGksXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBlLFxuICAgICAgICAgICAgICAgIFwibWFyZ2luLWxlZnRcIjogTWF0aC5mbG9vcihoKSxcbiAgICAgICAgICAgICAgICBcIm1hcmdpbi10b3BcIjogTWF0aC5mbG9vcihtKVxuICAgICAgICAgICAgICB9KSwgYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9vbGRQcm9jZXNzZWRcIikgfHwgKGMuZmFkZVRvKGcuZmFkZUluVGltZSwgMSksIGMuZGF0YShcInNieV9pbWdMaXF1aWRfb2xkUHJvY2Vzc2VkXCIsICEwKSwgZy5yZW1vdmVCb3hCYWNrZ3JvdW5kICYmIHUuY3NzKFwiYmFja2dyb3VuZC1pbWFnZVwiLCBcIm5vbmVcIiksIHUuYWRkQ2xhc3MoXCJzYnlfaW1nTGlxdWlkX25vYmdTaXplXCIpLCB1LmFkZENsYXNzKFwic2J5X2ltZ0xpcXVpZF9yZWFkeVwiKSksIGcub25JdGVtRmluaXNoICYmIGcub25JdGVtRmluaXNoKHQsIHUsIGMpLCBsKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gbCgpIHtcbiAgICAgICAgICAgICAgdCA9PT0gYS5sZW5ndGggLSAxICYmIGEuc2V0dGluZ3Mub25GaW5pc2ggJiYgYS5zZXR0aW5ncy5vbkZpbmlzaCgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBnID0gYS5zZXR0aW5ncywgdSA9IGkodGhpcyksIGMgPSBpKFwiaW1nOmZpcnN0XCIsIHUpO1xuICAgICAgICAgICAgcmV0dXJuIGMubGVuZ3RoID8gKGMuZGF0YShcInNieV9pbWdMaXF1aWRfc2V0dGluZ3NcIikgPyAodS5yZW1vdmVDbGFzcyhcInNieV9pbWdMaXF1aWRfZXJyb3JcIikucmVtb3ZlQ2xhc3MoXCJzYnlfaW1nTGlxdWlkX3JlYWR5XCIpLCBnID0gaS5leHRlbmQoe30sIGMuZGF0YShcInNieV9pbWdMaXF1aWRfc2V0dGluZ3NcIiksIGEub3B0aW9ucykpIDogZyA9IGkuZXh0ZW5kKHt9LCBhLnNldHRpbmdzLCBzKCkpLCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIsIGcpLCBnLm9uSXRlbVN0YXJ0ICYmIGcub25JdGVtU3RhcnQodCwgdSwgYyksIHZvaWQgKHNieV9pbWdMaXF1aWQuYmdzX0F2YWlsYWJsZSAmJiBnLnVzZUJhY2tncm91bmRTaXplID8gZSgpIDogbygpKSkgOiB2b2lkIG4oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfShqUXVlcnkpO1xuXG4gICAgLy8gVXNlIGltYWdlZmlsbCB0byBzZXQgdGhlIGltYWdlcyBhcyBiYWNrZ3JvdW5kcyBzbyB0aGV5IGNhbiBiZSBzcXVhcmVcbiAgICAhZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNzcyA9IHNieV9pbWdMaXF1aWQuaW5qZWN0Q3NzLFxuICAgICAgICBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSxcbiAgICAgICAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICAgIH1cbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH0oKTtcbiAgfVxuXG4gIC8qIEphdmFTY3JpcHQgTGlua2lmeSAtIHYwLjMgLSA2LzI3LzIwMDkgLSBodHRwOi8vYmVuYWxtYW4uY29tL3Byb2plY3RzL2phdmFzY3JpcHQtbGlua2lmeS8gKi9cbiAgd2luZG93LnNieUxpbmtpZnkgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBrID0gXCJbYS16XFxcXGQuLV0rOi8vXCIsXG4gICAgICBoID0gXCIoPzooPzpbMC05XXxbMS05XVxcXFxkfDFcXFxcZHsyfXwyWzAtNF1cXFxcZHwyNVswLTVdKVxcXFwuKXszfSg/OlswLTldfFsxLTldXFxcXGR8MVxcXFxkezJ9fDJbMC00XVxcXFxkfDI1WzAtNV0pXCIsXG4gICAgICBjID0gXCIoPzooPzpbXlxcXFxzIUAjJCVeJiooKV89K1tcXFxcXXt9XFxcXFxcXFx8OzonXFxcIiwuPD4vP10rKVxcXFwuKStcIixcbiAgICAgIG4gPSBcIig/OmFjfGFkfGFlcm98YWV8YWZ8YWd8YWl8YWx8YW18YW58YW98YXF8YXJwYXxhcnxhc2lhfGFzfGF0fGF1fGF3fGF4fGF6fGJhfGJifGJkfGJlfGJmfGJnfGJofGJpenxiaXxianxibXxibnxib3xicnxic3xidHxidnxid3xieXxienxjYXR8Y2F8Y2N8Y2R8Y2Z8Y2d8Y2h8Y2l8Y2t8Y2x8Y218Y258Y29vcHxjb218Y298Y3J8Y3V8Y3Z8Y3h8Y3l8Y3p8ZGV8ZGp8ZGt8ZG18ZG98ZHp8ZWN8ZWR1fGVlfGVnfGVyfGVzfGV0fGV1fGZpfGZqfGZrfGZtfGZvfGZyfGdhfGdifGdkfGdlfGdmfGdnfGdofGdpfGdsfGdtfGdufGdvdnxncHxncXxncnxnc3xndHxndXxnd3xneXxoa3xobXxobnxocnxodHxodXxpZHxpZXxpbHxpbXxpbmZvfGludHxpbnxpb3xpcXxpcnxpc3xpdHxqZXxqbXxqb2JzfGpvfGpwfGtlfGtnfGtofGtpfGttfGtufGtwfGtyfGt3fGt5fGt6fGxhfGxifGxjfGxpfGxrfGxyfGxzfGx0fGx1fGx2fGx5fG1hfG1jfG1kfG1lfG1nfG1ofG1pbHxta3xtbHxtbXxtbnxtb2JpfG1vfG1wfG1xfG1yfG1zfG10fG11c2V1bXxtdXxtdnxtd3xteHxteXxtenxuYW1lfG5hfG5jfG5ldHxuZXxuZnxuZ3xuaXxubHxub3xucHxucnxudXxuenxvbXxvcmd8cGF8cGV8cGZ8cGd8cGh8cGt8cGx8cG18cG58cHJvfHByfHBzfHB0fHB3fHB5fHFhfHJlfHJvfHJzfHJ1fHJ3fHNhfHNifHNjfHNkfHNlfHNnfHNofHNpfHNqfHNrfHNsfHNtfHNufHNvfHNyfHN0fHN1fHN2fHN5fHN6fHRjfHRkfHRlbHx0Znx0Z3x0aHx0anx0a3x0bHx0bXx0bnx0b3x0cHx0cmF2ZWx8dHJ8dHR8dHZ8dHd8dHp8dWF8dWd8dWt8dW18dXN8dXl8dXp8dmF8dmN8dmV8dmd8dml8dm58dnV8d2Z8d3N8eG4tLTB6d201NmR8eG4tLTExYjViczNhOWFqNmd8eG4tLTgwYWtoYnlrbmo0Znx4bi0tOXQ0YjExeWk1YXx4bi0tZGViYTBhZHx4bi0tZzZ3MjUxZHx4bi0taGdiazZhajdmNTNiYmF8eG4tLWhsY2o2YXlhOWVzYzdhfHhuLS1qeGFscGRscHx4bi0ta2diZWNodHZ8eG4tLXpja3phaHx5ZXx5dHx5dXx6YXx6bXx6dylcIixcbiAgICAgIGYgPSBcIig/OlwiICsgYyArIG4gKyBcInxcIiArIGggKyBcIilcIiwgbyA9IFwiKD86WzsvXVteIz88PlxcXFxzXSopP1wiLCBlID0gXCIoPzpcXFxcP1teIzw+XFxcXHNdKik/KD86I1tePD5cXFxcc10qKT9cIixcbiAgICAgIGQgPSBcIlxcXFxiXCIgKyBrICsgXCJbXjw+XFxcXHNdK1wiLCBhID0gXCJcXFxcYlwiICsgZiArIG8gKyBlICsgXCIoPyFcXFxcdylcIiwgbSA9IFwibWFpbHRvOlwiLFxuICAgICAgaiA9IFwiKD86XCIgKyBtICsgXCIpP1thLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXFxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkBcIiArIGYgKyBlICsgXCIoPyFcXFxcdylcIixcbiAgICAgIGwgPSBuZXcgUmVnRXhwKFwiKD86XCIgKyBkICsgXCJ8XCIgKyBhICsgXCJ8XCIgKyBqICsgXCIpXCIsIFwiaWdcIiksIGcgPSBuZXcgUmVnRXhwKFwiXlwiICsgaywgXCJpXCIpLFxuICAgICAgYiA9IHtcIidcIjogXCJgXCIsIFwiPlwiOiBcIjxcIiwgXCIpXCI6IFwiKFwiLCBcIl1cIjogXCJbXCIsIFwifVwiOiBcIntcIiwgXCJCO1wiOiBcIkIrXCIsIFwiYjpcIjogXCJiOVwifSwgaSA9IHtcbiAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIChxLCBwKSB7XG4gICAgICAgICAgcmV0dXJuIHAgPyAnPGEgaHJlZj1cIicgKyBwICsgJ1wiIHRpdGxlPVwiJyArIHAgKyAnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIj4nICsgcSArIFwiPC9hPlwiIDogcVxuICAgICAgICB9LCBwdW5jdF9yZWdleHA6IC8oPzpbIT8uLDo7J1wiXXwoPzomfCZhbXA7KSg/Omx0fGd0fHF1b3R8YXBvc3xyYXF1b3xsYXF1b3xyc2FxdW98bHNhcXVvKTspJC9cbiAgICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh1LCB6KSB7XG4gICAgICB6ID0geiB8fCB7fTtcbiAgICAgIHZhciB3LCB2LCBBLCBwLCB4ID0gXCJcIiwgdCA9IFtdLCBzLCBFLCBDLCB5LCBxLCBELCBCLCByO1xuICAgICAgZm9yICh2IGluIGkpIHtcbiAgICAgICAgaWYgKHpbdl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHpbdl0gPSBpW3ZdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlICh3ID0gbC5leGVjKHUpKSB7XG4gICAgICAgIEEgPSB3WzBdO1xuICAgICAgICBFID0gbC5sYXN0SW5kZXg7XG4gICAgICAgIEMgPSBFIC0gQS5sZW5ndGg7XG4gICAgICAgIGlmICgvW1xcLzpdLy50ZXN0KHUuY2hhckF0KEMgLSAxKSkpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGRvIHtcbiAgICAgICAgICB5ID0gQTtcbiAgICAgICAgICByID0gQS5zdWJzdHIoLTEpO1xuICAgICAgICAgIEIgPSBiW3JdO1xuICAgICAgICAgIGlmIChCKSB7XG4gICAgICAgICAgICBxID0gQS5tYXRjaChuZXcgUmVnRXhwKFwiXFxcXFwiICsgQiArIFwiKD8hJClcIiwgXCJnXCIpKTtcbiAgICAgICAgICAgIEQgPSBBLm1hdGNoKG5ldyBSZWdFeHAoXCJcXFxcXCIgKyByLCBcImdcIikpO1xuICAgICAgICAgICAgaWYgKChxID8gcS5sZW5ndGggOiAwKSA8IChEID8gRC5sZW5ndGggOiAwKSkge1xuICAgICAgICAgICAgICBBID0gQS5zdWJzdHIoMCwgQS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgRS0tXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh6LnB1bmN0X3JlZ2V4cCkge1xuICAgICAgICAgICAgQSA9IEEucmVwbGFjZSh6LnB1bmN0X3JlZ2V4cCwgZnVuY3Rpb24gKEYpIHtcbiAgICAgICAgICAgICAgRSAtPSBGLmxlbmd0aDtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChBLmxlbmd0aCAmJiBBICE9PSB5KTtcbiAgICAgICAgcCA9IEE7XG4gICAgICAgIGlmICghZy50ZXN0KHApKSB7XG4gICAgICAgICAgcCA9IChwLmluZGV4T2YoXCJAXCIpICE9PSAtMSA/ICghcC5pbmRleE9mKG0pID8gXCJcIiA6IG0pIDogIXAuaW5kZXhPZihcImlyYy5cIikgPyBcImlyYzovL1wiIDogIXAuaW5kZXhPZihcImZ0cC5cIikgPyBcImZ0cDovL1wiIDogXCJodHRwOi8vXCIpICsgcFxuICAgICAgICB9XG4gICAgICAgIGlmIChzICE9IEMpIHtcbiAgICAgICAgICB0LnB1c2goW3Uuc2xpY2UocywgQyldKTtcbiAgICAgICAgICBzID0gRVxuICAgICAgICB9XG4gICAgICAgIHQucHVzaChbQSwgcF0pXG4gICAgICB9XG4gICAgICB0LnB1c2goW3Uuc3Vic3RyKHMpXSk7XG4gICAgICBmb3IgKHYgPSAwOyB2IDwgdC5sZW5ndGg7IHYrKykge1xuICAgICAgICB4ICs9IHouY2FsbGJhY2suYXBwbHkod2luZG93LCB0W3ZdKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHggfHwgdVxuICAgIH1cbiAgfSkoKTtcblxuICAvL0NoZWNrcyB3aGV0aGVyIGJyb3dzZXIgc3VwcG9ydCBIVE1MNSB2aWRlbyBlbGVtZW50XG4gIGZ1bmN0aW9uIHNieV9zdXBwb3J0c192aWRlbygpIHtcbiAgICByZXR1cm4gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpLmNhblBsYXlUeXBlO1xuICB9XG5cbiAgLy8gQ2Fyb3VzZWxcbiAgIWZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgZnVuY3Rpb24gZShiLCBjKSB7XG4gICAgICB0aGlzLnNldHRpbmdzID0gbnVsbCwgdGhpcy5vcHRpb25zID0gYS5leHRlbmQoe30sIGUuRGVmYXVsdHMsIGMpLCB0aGlzLiRlbGVtZW50ID0gYShiKSwgdGhpcy5faGFuZGxlcnMgPSB7fSwgdGhpcy5fcGx1Z2lucyA9IHt9LCB0aGlzLl9zdXByZXNzID0ge30sIHRoaXMuX2N1cnJlbnQgPSBudWxsLCB0aGlzLl9zcGVlZCA9IG51bGwsIHRoaXMuX2Nvb3JkaW5hdGVzID0gW10sIHRoaXMuX2JyZWFrcG9pbnQgPSBudWxsLCB0aGlzLl93aWR0aCA9IG51bGwsIHRoaXMuX2l0ZW1zID0gW10sIHRoaXMuX2Nsb25lcyA9IFtdLCB0aGlzLl9tZXJnZXJzID0gW10sIHRoaXMuX3dpZHRocyA9IFtdLCB0aGlzLl9pbnZhbGlkYXRlZCA9IHt9LCB0aGlzLl9waXBlID0gW10sIHRoaXMuX2RyYWcgPSB7XG4gICAgICAgIHRpbWU6IG51bGwsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgcG9pbnRlcjogbnVsbCxcbiAgICAgICAgc3RhZ2U6IHtzdGFydDogbnVsbCwgY3VycmVudDogbnVsbH0sXG4gICAgICAgIGRpcmVjdGlvbjogbnVsbFxuICAgICAgfSwgdGhpcy5fc3RhdGVzID0ge1xuICAgICAgICBjdXJyZW50OiB7fSxcbiAgICAgICAgdGFnczoge2luaXRpYWxpemluZzogW1wiYnVzeVwiXSwgYW5pbWF0aW5nOiBbXCJidXN5XCJdLCBkcmFnZ2luZzogW1wiaW50ZXJhY3RpbmdcIl19XG4gICAgICB9LCBhLmVhY2goW1wib25SZXNpemVcIiwgXCJvblRocm90dGxlZFJlc2l6ZVwiXSwgYS5wcm94eShmdW5jdGlvbiAoYiwgYykge1xuICAgICAgICB0aGlzLl9oYW5kbGVyc1tjXSA9IGEucHJveHkodGhpc1tjXSwgdGhpcylcbiAgICAgIH0sIHRoaXMpKSwgYS5lYWNoKGUuUGx1Z2lucywgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICB0aGlzLl9wbHVnaW5zW2EuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBhLnNsaWNlKDEpXSA9IG5ldyBiKHRoaXMpXG4gICAgICB9LCB0aGlzKSksIGEuZWFjaChlLldvcmtlcnMsIGEucHJveHkoZnVuY3Rpb24gKGIsIGMpIHtcbiAgICAgICAgdGhpcy5fcGlwZS5wdXNoKHtmaWx0ZXI6IGMuZmlsdGVyLCBydW46IGEucHJveHkoYy5ydW4sIHRoaXMpfSlcbiAgICAgIH0sIHRoaXMpKSwgdGhpcy5zZXR1cCgpLCB0aGlzLmluaXRpYWxpemUoKVxuICAgIH1cblxuICAgIGUuRGVmYXVsdHMgPSB7XG4gICAgICBpdGVtczogMyxcbiAgICAgIGxvb3A6ICExLFxuICAgICAgY2VudGVyOiAhMSxcbiAgICAgIHJld2luZDogITEsXG4gICAgICBtb3VzZURyYWc6ICEwLFxuICAgICAgdG91Y2hEcmFnOiAhMCxcbiAgICAgIHB1bGxEcmFnOiAhMCxcbiAgICAgIGZyZWVEcmFnOiAhMSxcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIHN0YWdlUGFkZGluZzogMCxcbiAgICAgIG1lcmdlOiAhMSxcbiAgICAgIG1lcmdlRml0OiAhMCxcbiAgICAgIGF1dG9XaWR0aDogITEsXG4gICAgICBzdGFydFBvc2l0aW9uOiAwLFxuICAgICAgcnRsOiAhMSxcbiAgICAgIHNtYXJ0U3BlZWQ6IDI1MCxcbiAgICAgIGZsdWlkU3BlZWQ6ICExLFxuICAgICAgZHJhZ0VuZFNwZWVkOiAhMSxcbiAgICAgIHJlc3BvbnNpdmU6IHt9LFxuICAgICAgcmVzcG9uc2l2ZVJlZnJlc2hSYXRlOiAyMDAsXG4gICAgICByZXNwb25zaXZlQmFzZUVsZW1lbnQ6IGIsXG4gICAgICBmYWxsYmFja0Vhc2luZzogXCJzd2luZ1wiLFxuICAgICAgaW5mbzogITEsXG4gICAgICBuZXN0ZWRJdGVtU2VsZWN0b3I6ICExLFxuICAgICAgaXRlbUVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgICBzdGFnZUVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgICByZWZyZXNoQ2xhc3M6IFwic2J5LW93bC1yZWZyZXNoXCIsXG4gICAgICBsb2FkZWRDbGFzczogXCJzYnktb3dsLWxvYWRlZFwiLFxuICAgICAgbG9hZGluZ0NsYXNzOiBcInNieS1vd2wtbG9hZGluZ1wiLFxuICAgICAgcnRsQ2xhc3M6IFwic2J5LW93bC1ydGxcIixcbiAgICAgIHJlc3BvbnNpdmVDbGFzczogXCJzYnktb3dsLXJlc3BvbnNpdmVcIixcbiAgICAgIGRyYWdDbGFzczogXCJzYnktb3dsLWRyYWdcIixcbiAgICAgIGl0ZW1DbGFzczogXCJzYnktb3dsLWl0ZW1cIixcbiAgICAgIHN0YWdlQ2xhc3M6IFwic2J5LW93bC1zdGFnZVwiLFxuICAgICAgc3RhZ2VPdXRlckNsYXNzOiBcInNieS1vd2wtc3RhZ2Utb3V0ZXJcIixcbiAgICAgIGdyYWJDbGFzczogXCJzYnktb3dsLWdyYWJcIlxuICAgIH0sIGUuV2lkdGggPSB7RGVmYXVsdDogXCJkZWZhdWx0XCIsIElubmVyOiBcImlubmVyXCIsIE91dGVyOiBcIm91dGVyXCJ9LCBlLlR5cGUgPSB7XG4gICAgICBFdmVudDogXCJldmVudFwiLFxuICAgICAgU3RhdGU6IFwic3RhdGVcIlxuICAgIH0sIGUuUGx1Z2lucyA9IHt9LCBlLldvcmtlcnMgPSBbe1xuICAgICAgZmlsdGVyOiBbXCJ3aWR0aFwiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fd2lkdGggPSB0aGlzLiRlbGVtZW50LndpZHRoKClcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBmaWx0ZXI6IFtcIndpZHRoXCIsIFwiaXRlbXNcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoYSkge1xuICAgICAgICBhLmN1cnJlbnQgPSB0aGlzLl9pdGVtcyAmJiB0aGlzLl9pdGVtc1t0aGlzLnJlbGF0aXZlKHRoaXMuX2N1cnJlbnQpXVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpbHRlcjogW1wiaXRlbXNcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiLmNsb25lZFwiKS5yZW1vdmUoKVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBiID0gdGhpcy5zZXR0aW5ncy5tYXJnaW4gfHwgXCJcIiwgYyA9ICF0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCwgZCA9IHRoaXMuc2V0dGluZ3MucnRsLFxuICAgICAgICAgIGUgPSB7d2lkdGg6IFwiYXV0b1wiLCBcIm1hcmdpbi1sZWZ0XCI6IGQgPyBiIDogXCJcIiwgXCJtYXJnaW4tcmlnaHRcIjogZCA/IFwiXCIgOiBifTtcbiAgICAgICAgIWMgJiYgdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5jc3MoZSksIGEuY3NzID0gZVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBiID0gKHRoaXMud2lkdGgoKSAvIHRoaXMuc2V0dGluZ3MuaXRlbXMpLnRvRml4ZWQoMykgLSB0aGlzLnNldHRpbmdzLm1hcmdpbiwgYyA9IG51bGwsXG4gICAgICAgICAgZCA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgZSA9ICF0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCwgZiA9IFtdO1xuICAgICAgICBmb3IgKGEuaXRlbXMgPSB7XG4gICAgICAgICAgbWVyZ2U6ICExLFxuICAgICAgICAgIHdpZHRoOiBiXG4gICAgICAgIH07IGQtLTspIGMgPSB0aGlzLl9tZXJnZXJzW2RdLCBjID0gdGhpcy5zZXR0aW5ncy5tZXJnZUZpdCAmJiBNYXRoLm1pbihjLCB0aGlzLnNldHRpbmdzLml0ZW1zKSB8fCBjLCBhLml0ZW1zLm1lcmdlID0gYyA+IDEgfHwgYS5pdGVtcy5tZXJnZSwgZltkXSA9IGUgPyBiICogYyA6IHRoaXMuX2l0ZW1zW2RdLndpZHRoKCk7XG4gICAgICAgIHRoaXMuX3dpZHRocyA9IGZcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBmaWx0ZXI6IFtcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYiA9IFtdLCBjID0gdGhpcy5faXRlbXMsIGQgPSB0aGlzLnNldHRpbmdzLCBlID0gTWF0aC5tYXgoMiAqIGQuaXRlbXMsIDQpLFxuICAgICAgICAgIGYgPSAyICogTWF0aC5jZWlsKGMubGVuZ3RoIC8gMiksIGcgPSBkLmxvb3AgJiYgYy5sZW5ndGggPyBkLnJld2luZCA/IGUgOiBNYXRoLm1heChlLCBmKSA6IDAsIGggPSBcIlwiLFxuICAgICAgICAgIGkgPSBcIlwiO1xuICAgICAgICBmb3IgKGcgLz0gMjsgZy0tOykgYi5wdXNoKHRoaXMubm9ybWFsaXplKGIubGVuZ3RoIC8gMiwgITApKSwgaCArPSBjW2JbYi5sZW5ndGggLSAxXV1bMF0ub3V0ZXJIVE1MLCBiLnB1c2godGhpcy5ub3JtYWxpemUoYy5sZW5ndGggLSAxIC0gKGIubGVuZ3RoIC0gMSkgLyAyLCAhMCkpLCBpID0gY1tiW2IubGVuZ3RoIC0gMV1dWzBdLm91dGVySFRNTCArIGk7XG4gICAgICAgIHRoaXMuX2Nsb25lcyA9IGIsIGEoaCkuYWRkQ2xhc3MoXCJjbG9uZWRcIikuYXBwZW5kVG8odGhpcy4kc3RhZ2UpLCBhKGkpLmFkZENsYXNzKFwiY2xvbmVkXCIpLnByZXBlbmRUbyh0aGlzLiRzdGFnZSlcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBmaWx0ZXI6IFtcIndpZHRoXCIsIFwiaXRlbXNcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGEgPSB0aGlzLnNldHRpbmdzLnJ0bCA/IDEgOiAtMSwgYiA9IHRoaXMuX2Nsb25lcy5sZW5ndGggKyB0aGlzLl9pdGVtcy5sZW5ndGgsIGMgPSAtMSwgZCA9IDAsIGUgPSAwLCBmID0gW107ICsrYyA8IGI7KSBkID0gZltjIC0gMV0gfHwgMCwgZSA9IHRoaXMuX3dpZHRoc1t0aGlzLnJlbGF0aXZlKGMpXSArIHRoaXMuc2V0dGluZ3MubWFyZ2luLCBmLnB1c2goZCArIGUgKiBhKTtcbiAgICAgICAgdGhpcy5fY29vcmRpbmF0ZXMgPSBmXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmlsdGVyOiBbXCJ3aWR0aFwiLCBcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYSA9IHRoaXMuc2V0dGluZ3Muc3RhZ2VQYWRkaW5nLCBiID0gdGhpcy5fY29vcmRpbmF0ZXMsIGMgPSB7XG4gICAgICAgICAgd2lkdGg6IE1hdGguY2VpbChNYXRoLmFicyhiW2IubGVuZ3RoIC0gMV0pKSArIDIgKiBhLFxuICAgICAgICAgIFwicGFkZGluZy1sZWZ0XCI6IGEgfHwgXCJcIixcbiAgICAgICAgICBcInBhZGRpbmctcmlnaHRcIjogYSB8fCBcIlwiXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuJHN0YWdlLmNzcyhjKVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBiID0gdGhpcy5fY29vcmRpbmF0ZXMubGVuZ3RoLCBjID0gIXRoaXMuc2V0dGluZ3MuYXV0b1dpZHRoLCBkID0gdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKGMgJiYgYS5pdGVtcy5tZXJnZSkgZm9yICg7IGItLTspIGEuY3NzLndpZHRoID0gdGhpcy5fd2lkdGhzW3RoaXMucmVsYXRpdmUoYildLCBkLmVxKGIpLmNzcyhhLmNzcyk7IGVsc2UgYyAmJiAoYS5jc3Mud2lkdGggPSBhLml0ZW1zLndpZHRoLCBkLmNzcyhhLmNzcykpXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmlsdGVyOiBbXCJpdGVtc1wiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2Nvb3JkaW5hdGVzLmxlbmd0aCA8IDEgJiYgdGhpcy4kc3RhZ2UucmVtb3ZlQXR0cihcInN0eWxlXCIpXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmlsdGVyOiBbXCJ3aWR0aFwiLCBcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgYS5jdXJyZW50ID0gYS5jdXJyZW50ID8gdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5pbmRleChhLmN1cnJlbnQpIDogMCwgYS5jdXJyZW50ID0gTWF0aC5tYXgodGhpcy5taW5pbXVtKCksIE1hdGgubWluKHRoaXMubWF4aW11bSgpLCBhLmN1cnJlbnQpKSwgdGhpcy5yZXNldChhLmN1cnJlbnQpXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmlsdGVyOiBbXCJwb3NpdGlvblwiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYW5pbWF0ZSh0aGlzLmNvb3JkaW5hdGVzKHRoaXMuX2N1cnJlbnQpKVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJwb3NpdGlvblwiLCBcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYSwgYiwgYywgZCwgZSA9IHRoaXMuc2V0dGluZ3MucnRsID8gMSA6IC0xLCBmID0gMiAqIHRoaXMuc2V0dGluZ3Muc3RhZ2VQYWRkaW5nLFxuICAgICAgICAgIGcgPSB0aGlzLmNvb3JkaW5hdGVzKHRoaXMuY3VycmVudCgpKSArIGYsIGggPSBnICsgdGhpcy53aWR0aCgpICogZSwgaSA9IFtdO1xuICAgICAgICBmb3IgKGMgPSAwLCBkID0gdGhpcy5fY29vcmRpbmF0ZXMubGVuZ3RoOyBjIDwgZDsgYysrKSBhID0gdGhpcy5fY29vcmRpbmF0ZXNbYyAtIDFdIHx8IDAsIGIgPSBNYXRoLmFicyh0aGlzLl9jb29yZGluYXRlc1tjXSkgKyBmICogZSwgKHRoaXMub3AoYSwgXCI8PVwiLCBnKSAmJiB0aGlzLm9wKGEsIFwiPlwiLCBoKSB8fCB0aGlzLm9wKGIsIFwiPFwiLCBnKSAmJiB0aGlzLm9wKGIsIFwiPlwiLCBoKSkgJiYgaS5wdXNoKGMpO1xuICAgICAgICB0aGlzLiRzdGFnZS5jaGlsZHJlbihcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksIHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiOmVxKFwiICsgaS5qb2luKFwiKSwgOmVxKFwiKSArIFwiKVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSwgdGhpcy5zZXR0aW5ncy5jZW50ZXIgJiYgKHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiLmNlbnRlclwiKS5yZW1vdmVDbGFzcyhcImNlbnRlclwiKSwgdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5lcSh0aGlzLmN1cnJlbnQoKSkuYWRkQ2xhc3MoXCJjZW50ZXJcIikpXG4gICAgICB9XG4gICAgfV0sIGUucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5lbnRlcihcImluaXRpYWxpemluZ1wiKSwgdGhpcy50cmlnZ2VyKFwiaW5pdGlhbGl6ZVwiKSwgdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyh0aGlzLnNldHRpbmdzLnJ0bENsYXNzLCB0aGlzLnNldHRpbmdzLnJ0bCksIHRoaXMuc2V0dGluZ3MuYXV0b1dpZHRoICYmICF0aGlzLmlzKFwicHJlLWxvYWRpbmdcIikpIHtcbiAgICAgICAgdmFyIGIsIGMsIGU7XG4gICAgICAgIGIgPSB0aGlzLiRlbGVtZW50LmZpbmQoXCJpbWdcIiksIGMgPSB0aGlzLnNldHRpbmdzLm5lc3RlZEl0ZW1TZWxlY3RvciA/IFwiLlwiICsgdGhpcy5zZXR0aW5ncy5uZXN0ZWRJdGVtU2VsZWN0b3IgOiBkLCBlID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbihjKS53aWR0aCgpLCBiLmxlbmd0aCAmJiBlIDw9IDAgJiYgdGhpcy5wcmVsb2FkQXV0b1dpZHRoSW1hZ2VzKGIpXG4gICAgICB9XG4gICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5sb2FkaW5nQ2xhc3MpLCB0aGlzLiRzdGFnZSA9IGEoXCI8XCIgKyB0aGlzLnNldHRpbmdzLnN0YWdlRWxlbWVudCArICcgY2xhc3M9XCInICsgdGhpcy5zZXR0aW5ncy5zdGFnZUNsYXNzICsgJ1wiLz4nKS53cmFwKCc8ZGl2IGNsYXNzPVwiJyArIHRoaXMuc2V0dGluZ3Muc3RhZ2VPdXRlckNsYXNzICsgJ1wiLz4nKSwgdGhpcy4kZWxlbWVudC5hcHBlbmQodGhpcy4kc3RhZ2UucGFyZW50KCkpLCB0aGlzLnJlcGxhY2UodGhpcy4kZWxlbWVudC5jaGlsZHJlbigpLm5vdCh0aGlzLiRzdGFnZS5wYXJlbnQoKSkpLCB0aGlzLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIikgPyB0aGlzLnJlZnJlc2goKSA6IHRoaXMuaW52YWxpZGF0ZShcIndpZHRoXCIpLCB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sb2FkaW5nQ2xhc3MpLmFkZENsYXNzKHRoaXMub3B0aW9ucy5sb2FkZWRDbGFzcyksIHRoaXMucmVnaXN0ZXJFdmVudEhhbmRsZXJzKCksIHRoaXMubGVhdmUoXCJpbml0aWFsaXppbmdcIiksIHRoaXMudHJpZ2dlcihcImluaXRpYWxpemVkXCIpXG4gICAgfSwgZS5wcm90b3R5cGUuc2V0dXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYiA9IHRoaXMudmlld3BvcnQoKSwgYyA9IHRoaXMub3B0aW9ucy5yZXNwb25zaXZlLCBkID0gLTEsIGUgPSBudWxsO1xuICAgICAgYyA/IChhLmVhY2goYywgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgYSA8PSBiICYmIGEgPiBkICYmIChkID0gTnVtYmVyKGEpKVxuICAgICAgfSksIGUgPSBhLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBjW2RdKSwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLnN0YWdlUGFkZGluZyAmJiAoZS5zdGFnZVBhZGRpbmcgPSBlLnN0YWdlUGFkZGluZygpKSwgZGVsZXRlIGUucmVzcG9uc2l2ZSwgZS5yZXNwb25zaXZlQ2xhc3MgJiYgdGhpcy4kZWxlbWVudC5hdHRyKFwiY2xhc3NcIiwgdGhpcy4kZWxlbWVudC5hdHRyKFwiY2xhc3NcIikucmVwbGFjZShuZXcgUmVnRXhwKFwiKFwiICsgdGhpcy5vcHRpb25zLnJlc3BvbnNpdmVDbGFzcyArIFwiLSlcXFxcUytcXFxcc1wiLCBcImdcIiksIFwiJDFcIiArIGQpKSkgOiBlID0gYS5leHRlbmQoe30sIHRoaXMub3B0aW9ucyksIHRoaXMudHJpZ2dlcihcImNoYW5nZVwiLCB7XG4gICAgICAgIHByb3BlcnR5OiB7XG4gICAgICAgICAgbmFtZTogXCJzZXR0aW5nc1wiLFxuICAgICAgICAgIHZhbHVlOiBlXG4gICAgICAgIH1cbiAgICAgIH0pLCB0aGlzLl9icmVha3BvaW50ID0gZCwgdGhpcy5zZXR0aW5ncyA9IGUsIHRoaXMuaW52YWxpZGF0ZShcInNldHRpbmdzXCIpLCB0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIsIHtcbiAgICAgICAgcHJvcGVydHk6IHtcbiAgICAgICAgICBuYW1lOiBcInNldHRpbmdzXCIsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuc2V0dGluZ3NcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LCBlLnByb3RvdHlwZS5vcHRpb25zTG9naWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCAmJiAodGhpcy5zZXR0aW5ncy5zdGFnZVBhZGRpbmcgPSAhMSwgdGhpcy5zZXR0aW5ncy5tZXJnZSA9ICExKVxuICAgIH0sIGUucHJvdG90eXBlLnByZXBhcmUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdmFyIGMgPSB0aGlzLnRyaWdnZXIoXCJwcmVwYXJlXCIsIHtjb250ZW50OiBifSk7XG4gICAgICByZXR1cm4gYy5kYXRhIHx8IChjLmRhdGEgPSBhKFwiPFwiICsgdGhpcy5zZXR0aW5ncy5pdGVtRWxlbWVudCArIFwiLz5cIikuYWRkQ2xhc3ModGhpcy5vcHRpb25zLml0ZW1DbGFzcykuYXBwZW5kKGIpKSwgdGhpcy50cmlnZ2VyKFwicHJlcGFyZWRcIiwge2NvbnRlbnQ6IGMuZGF0YX0pLCBjLmRhdGFcbiAgICB9LCBlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBiID0gMCwgYyA9IHRoaXMuX3BpcGUubGVuZ3RoLCBkID0gYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gdGhpc1thXVxuICAgICAgfSwgdGhpcy5faW52YWxpZGF0ZWQpLCBlID0ge307IGIgPCBjOykgKHRoaXMuX2ludmFsaWRhdGVkLmFsbCB8fCBhLmdyZXAodGhpcy5fcGlwZVtiXS5maWx0ZXIsIGQpLmxlbmd0aCA+IDApICYmIHRoaXMuX3BpcGVbYl0ucnVuKGUpLCBiKys7XG4gICAgICB0aGlzLl9pbnZhbGlkYXRlZCA9IHt9LCAhdGhpcy5pcyhcInZhbGlkXCIpICYmIHRoaXMuZW50ZXIoXCJ2YWxpZFwiKVxuICAgIH0sIGUucHJvdG90eXBlLndpZHRoID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHN3aXRjaCAoYSA9IGEgfHwgZS5XaWR0aC5EZWZhdWx0KSB7XG4gICAgICAgIGNhc2UgZS5XaWR0aC5Jbm5lcjpcbiAgICAgICAgY2FzZSBlLldpZHRoLk91dGVyOlxuICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGggLSAyICogdGhpcy5zZXR0aW5ncy5zdGFnZVBhZGRpbmcgKyB0aGlzLnNldHRpbmdzLm1hcmdpblxuICAgICAgfVxuICAgIH0sIGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmVudGVyKFwicmVmcmVzaGluZ1wiKSwgdGhpcy50cmlnZ2VyKFwicmVmcmVzaFwiKSwgdGhpcy5zZXR1cCgpLCB0aGlzLm9wdGlvbnNMb2dpYygpLCB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5yZWZyZXNoQ2xhc3MpLCB0aGlzLnVwZGF0ZSgpLCB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5yZWZyZXNoQ2xhc3MpLCB0aGlzLmxlYXZlKFwicmVmcmVzaGluZ1wiKSwgdGhpcy50cmlnZ2VyKFwicmVmcmVzaGVkXCIpXG4gICAgfSwgZS5wcm90b3R5cGUub25UaHJvdHRsZWRSZXNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBiLmNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVyKSwgdGhpcy5yZXNpemVUaW1lciA9IGIuc2V0VGltZW91dCh0aGlzLl9oYW5kbGVycy5vblJlc2l6ZSwgdGhpcy5zZXR0aW5ncy5yZXNwb25zaXZlUmVmcmVzaFJhdGUpXG4gICAgfSwgZS5wcm90b3R5cGUub25SZXNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLl9pdGVtcy5sZW5ndGggJiYgKHRoaXMuX3dpZHRoICE9PSB0aGlzLiRlbGVtZW50LndpZHRoKCkgJiYgKCEhdGhpcy4kZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpICYmICh0aGlzLmVudGVyKFwicmVzaXppbmdcIiksIHRoaXMudHJpZ2dlcihcInJlc2l6ZVwiKS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSA/ICh0aGlzLmxlYXZlKFwicmVzaXppbmdcIiksICExKSA6ICh0aGlzLmludmFsaWRhdGUoXCJ3aWR0aFwiKSwgdGhpcy5yZWZyZXNoKCksIHRoaXMubGVhdmUoXCJyZXNpemluZ1wiKSwgdm9pZCB0aGlzLnRyaWdnZXIoXCJyZXNpemVkXCIpKSkpKVxuICAgIH0sIGUucHJvdG90eXBlLnJlZ2lzdGVyRXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGEuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRoaXMuJHN0YWdlLm9uKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCArIFwiLm93bC5jb3JlXCIsIGEucHJveHkodGhpcy5vblRyYW5zaXRpb25FbmQsIHRoaXMpKSwgdGhpcy5zZXR0aW5ncy5yZXNwb25zaXZlICE9PSAhMSAmJiB0aGlzLm9uKGIsIFwicmVzaXplXCIsIHRoaXMuX2hhbmRsZXJzLm9uVGhyb3R0bGVkUmVzaXplKSwgdGhpcy5zZXR0aW5ncy5tb3VzZURyYWcgJiYgKHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmRyYWdDbGFzcyksIHRoaXMuJHN0YWdlLm9uKFwibW91c2Vkb3duLm93bC5jb3JlXCIsIGEucHJveHkodGhpcy5vbkRyYWdTdGFydCwgdGhpcykpLCB0aGlzLiRzdGFnZS5vbihcImRyYWdzdGFydC5vd2wuY29yZSBzZWxlY3RzdGFydC5vd2wuY29yZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhMVxuICAgICAgfSkpLCB0aGlzLnNldHRpbmdzLnRvdWNoRHJhZyAmJiAodGhpcy4kc3RhZ2Uub24oXCJ0b3VjaHN0YXJ0Lm93bC5jb3JlXCIsIGEucHJveHkodGhpcy5vbkRyYWdTdGFydCwgdGhpcykpLCB0aGlzLiRzdGFnZS5vbihcInRvdWNoY2FuY2VsLm93bC5jb3JlXCIsIGEucHJveHkodGhpcy5vbkRyYWdFbmQsIHRoaXMpKSlcbiAgICB9LCBlLnByb3RvdHlwZS5vbkRyYWdTdGFydCA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB2YXIgZCA9IG51bGw7XG4gICAgICAzICE9PSBiLndoaWNoICYmIChhLnN1cHBvcnQudHJhbnNmb3JtID8gKGQgPSB0aGlzLiRzdGFnZS5jc3MoXCJ0cmFuc2Zvcm1cIikucmVwbGFjZSgvLipcXCh8XFwpfCAvZywgXCJcIikuc3BsaXQoXCIsXCIpLCBkID0ge1xuICAgICAgICB4OiBkWzE2ID09PSBkLmxlbmd0aCA/IDEyIDogNF0sXG4gICAgICAgIHk6IGRbMTYgPT09IGQubGVuZ3RoID8gMTMgOiA1XVxuICAgICAgfSkgOiAoZCA9IHRoaXMuJHN0YWdlLnBvc2l0aW9uKCksIGQgPSB7XG4gICAgICAgIHg6IHRoaXMuc2V0dGluZ3MucnRsID8gZC5sZWZ0ICsgdGhpcy4kc3RhZ2Uud2lkdGgoKSAtIHRoaXMud2lkdGgoKSArIHRoaXMuc2V0dGluZ3MubWFyZ2luIDogZC5sZWZ0LFxuICAgICAgICB5OiBkLnRvcFxuICAgICAgfSksIHRoaXMuaXMoXCJhbmltYXRpbmdcIikgJiYgKGEuc3VwcG9ydC50cmFuc2Zvcm0gPyB0aGlzLmFuaW1hdGUoZC54KSA6IHRoaXMuJHN0YWdlLnN0b3AoKSwgdGhpcy5pbnZhbGlkYXRlKFwicG9zaXRpb25cIikpLCB0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKHRoaXMub3B0aW9ucy5ncmFiQ2xhc3MsIFwibW91c2Vkb3duXCIgPT09IGIudHlwZSksIHRoaXMuc3BlZWQoMCksIHRoaXMuX2RyYWcudGltZSA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpLCB0aGlzLl9kcmFnLnRhcmdldCA9IGEoYi50YXJnZXQpLCB0aGlzLl9kcmFnLnN0YWdlLnN0YXJ0ID0gZCwgdGhpcy5fZHJhZy5zdGFnZS5jdXJyZW50ID0gZCwgdGhpcy5fZHJhZy5wb2ludGVyID0gdGhpcy5wb2ludGVyKGIpLCBhKGMpLm9uKFwibW91c2V1cC5vd2wuY29yZSB0b3VjaGVuZC5vd2wuY29yZVwiLCBhLnByb3h5KHRoaXMub25EcmFnRW5kLCB0aGlzKSksIGEoYykub25lKFwibW91c2Vtb3ZlLm93bC5jb3JlIHRvdWNobW92ZS5vd2wuY29yZVwiLCBhLnByb3h5KGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHZhciBkID0gdGhpcy5kaWZmZXJlbmNlKHRoaXMuX2RyYWcucG9pbnRlciwgdGhpcy5wb2ludGVyKGIpKTtcbiAgICAgICAgYShjKS5vbihcIm1vdXNlbW92ZS5vd2wuY29yZSB0b3VjaG1vdmUub3dsLmNvcmVcIiwgYS5wcm94eSh0aGlzLm9uRHJhZ01vdmUsIHRoaXMpKSwgTWF0aC5hYnMoZC54KSA8IE1hdGguYWJzKGQueSkgJiYgdGhpcy5pcyhcInZhbGlkXCIpIHx8IChiLnByZXZlbnREZWZhdWx0KCksIHRoaXMuZW50ZXIoXCJkcmFnZ2luZ1wiKSwgdGhpcy50cmlnZ2VyKFwiZHJhZ1wiKSlcbiAgICAgIH0sIHRoaXMpKSlcbiAgICB9LCBlLnByb3RvdHlwZS5vbkRyYWdNb3ZlID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHZhciBiID0gbnVsbCwgYyA9IG51bGwsIGQgPSBudWxsLCBlID0gdGhpcy5kaWZmZXJlbmNlKHRoaXMuX2RyYWcucG9pbnRlciwgdGhpcy5wb2ludGVyKGEpKSxcbiAgICAgICAgZiA9IHRoaXMuZGlmZmVyZW5jZSh0aGlzLl9kcmFnLnN0YWdlLnN0YXJ0LCBlKTtcbiAgICAgIHRoaXMuaXMoXCJkcmFnZ2luZ1wiKSAmJiAoYS5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLnNldHRpbmdzLmxvb3AgPyAoYiA9IHRoaXMuY29vcmRpbmF0ZXModGhpcy5taW5pbXVtKCkpLCBjID0gdGhpcy5jb29yZGluYXRlcyh0aGlzLm1heGltdW0oKSArIDEpIC0gYiwgZi54ID0gKChmLnggLSBiKSAlIGMgKyBjKSAlIGMgKyBiKSA6IChiID0gdGhpcy5zZXR0aW5ncy5ydGwgPyB0aGlzLmNvb3JkaW5hdGVzKHRoaXMubWF4aW11bSgpKSA6IHRoaXMuY29vcmRpbmF0ZXModGhpcy5taW5pbXVtKCkpLCBjID0gdGhpcy5zZXR0aW5ncy5ydGwgPyB0aGlzLmNvb3JkaW5hdGVzKHRoaXMubWluaW11bSgpKSA6IHRoaXMuY29vcmRpbmF0ZXModGhpcy5tYXhpbXVtKCkpLCBkID0gdGhpcy5zZXR0aW5ncy5wdWxsRHJhZyA/IC0xICogZS54IC8gNSA6IDAsIGYueCA9IE1hdGgubWF4KE1hdGgubWluKGYueCwgYiArIGQpLCBjICsgZCkpLCB0aGlzLl9kcmFnLnN0YWdlLmN1cnJlbnQgPSBmLCB0aGlzLmFuaW1hdGUoZi54KSlcbiAgICB9LCBlLnByb3RvdHlwZS5vbkRyYWdFbmQgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdmFyIGQgPSB0aGlzLmRpZmZlcmVuY2UodGhpcy5fZHJhZy5wb2ludGVyLCB0aGlzLnBvaW50ZXIoYikpLCBlID0gdGhpcy5fZHJhZy5zdGFnZS5jdXJyZW50LFxuICAgICAgICBmID0gZC54ID4gMCBeIHRoaXMuc2V0dGluZ3MucnRsID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCI7XG4gICAgICBhKGMpLm9mZihcIi5vd2wuY29yZVwiKSwgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZ3JhYkNsYXNzKSwgKDAgIT09IGQueCAmJiB0aGlzLmlzKFwiZHJhZ2dpbmdcIikgfHwgIXRoaXMuaXMoXCJ2YWxpZFwiKSkgJiYgKHRoaXMuc3BlZWQodGhpcy5zZXR0aW5ncy5kcmFnRW5kU3BlZWQgfHwgdGhpcy5zZXR0aW5ncy5zbWFydFNwZWVkKSwgdGhpcy5jdXJyZW50KHRoaXMuY2xvc2VzdChlLngsIDAgIT09IGQueCA/IGYgOiB0aGlzLl9kcmFnLmRpcmVjdGlvbikpLCB0aGlzLmludmFsaWRhdGUoXCJwb3NpdGlvblwiKSwgdGhpcy51cGRhdGUoKSwgdGhpcy5fZHJhZy5kaXJlY3Rpb24gPSBmLCAoTWF0aC5hYnMoZC54KSA+IDMgfHwgKG5ldyBEYXRlKS5nZXRUaW1lKCkgLSB0aGlzLl9kcmFnLnRpbWUgPiAzMDApICYmIHRoaXMuX2RyYWcudGFyZ2V0Lm9uZShcImNsaWNrLm93bC5jb3JlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICExXG4gICAgICB9KSksIHRoaXMuaXMoXCJkcmFnZ2luZ1wiKSAmJiAodGhpcy5sZWF2ZShcImRyYWdnaW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJkcmFnZ2VkXCIpKVxuICAgIH0sIGUucHJvdG90eXBlLmNsb3Nlc3QgPSBmdW5jdGlvbiAoYiwgYykge1xuICAgICAgdmFyIGQgPSAtMSwgZSA9IDMwLCBmID0gdGhpcy53aWR0aCgpLCBnID0gdGhpcy5jb29yZGluYXRlcygpO1xuICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuZnJlZURyYWcgfHwgYS5lYWNoKGcsIGEucHJveHkoZnVuY3Rpb24gKGEsIGgpIHtcbiAgICAgICAgcmV0dXJuIFwibGVmdFwiID09PSBjICYmIGIgPiBoIC0gZSAmJiBiIDwgaCArIGUgPyBkID0gYSA6IFwicmlnaHRcIiA9PT0gYyAmJiBiID4gaCAtIGYgLSBlICYmIGIgPCBoIC0gZiArIGUgPyBkID0gYSArIDEgOiB0aGlzLm9wKGIsIFwiPFwiLCBoKSAmJiB0aGlzLm9wKGIsIFwiPlwiLCBnW2EgKyAxXSB8fCBoIC0gZikgJiYgKGQgPSBcImxlZnRcIiA9PT0gYyA/IGEgKyAxIDogYSksIGQgPT09IC0xXG4gICAgICB9LCB0aGlzKSksIHRoaXMuc2V0dGluZ3MubG9vcCB8fCAodGhpcy5vcChiLCBcIj5cIiwgZ1t0aGlzLm1pbmltdW0oKV0pID8gZCA9IGIgPSB0aGlzLm1pbmltdW0oKSA6IHRoaXMub3AoYiwgXCI8XCIsIGdbdGhpcy5tYXhpbXVtKCldKSAmJiAoZCA9IGIgPSB0aGlzLm1heGltdW0oKSkpLCBkXG4gICAgfSwgZS5wcm90b3R5cGUuYW5pbWF0ZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB2YXIgYyA9IHRoaXMuc3BlZWQoKSA+IDA7XG4gICAgICB0aGlzLmlzKFwiYW5pbWF0aW5nXCIpICYmIHRoaXMub25UcmFuc2l0aW9uRW5kKCksIGMgJiYgKHRoaXMuZW50ZXIoXCJhbmltYXRpbmdcIiksIHRoaXMudHJpZ2dlcihcInRyYW5zbGF0ZVwiKSksIGEuc3VwcG9ydC50cmFuc2Zvcm0zZCAmJiBhLnN1cHBvcnQudHJhbnNpdGlvbiA/IHRoaXMuJHN0YWdlLmNzcyh7XG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUzZChcIiArIGIgKyBcInB4LDBweCwwcHgpXCIsXG4gICAgICAgIHRyYW5zaXRpb246IHRoaXMuc3BlZWQoKSAvIDFlMyArIFwic1wiXG4gICAgICB9KSA6IGMgPyB0aGlzLiRzdGFnZS5hbmltYXRlKHtsZWZ0OiBiICsgXCJweFwifSwgdGhpcy5zcGVlZCgpLCB0aGlzLnNldHRpbmdzLmZhbGxiYWNrRWFzaW5nLCBhLnByb3h5KHRoaXMub25UcmFuc2l0aW9uRW5kLCB0aGlzKSkgOiB0aGlzLiRzdGFnZS5jc3Moe2xlZnQ6IGIgKyBcInB4XCJ9KVxuICAgIH0sIGUucHJvdG90eXBlLmlzID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuY3VycmVudFthXSAmJiB0aGlzLl9zdGF0ZXMuY3VycmVudFthXSA+IDBcbiAgICB9LCBlLnByb3RvdHlwZS5jdXJyZW50ID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIGlmIChhID09PSBkKSByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgICAgIGlmICgwID09PSB0aGlzLl9pdGVtcy5sZW5ndGgpIHJldHVybiBkO1xuICAgICAgaWYgKGEgPSB0aGlzLm5vcm1hbGl6ZShhKSwgdGhpcy5fY3VycmVudCAhPT0gYSkge1xuICAgICAgICB2YXIgYiA9IHRoaXMudHJpZ2dlcihcImNoYW5nZVwiLCB7cHJvcGVydHk6IHtuYW1lOiBcInBvc2l0aW9uXCIsIHZhbHVlOiBhfX0pO1xuICAgICAgICBiLmRhdGEgIT09IGQgJiYgKGEgPSB0aGlzLm5vcm1hbGl6ZShiLmRhdGEpKSwgdGhpcy5fY3VycmVudCA9IGEsIHRoaXMuaW52YWxpZGF0ZShcInBvc2l0aW9uXCIpLCB0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIsIHtcbiAgICAgICAgICBwcm9wZXJ0eToge1xuICAgICAgICAgICAgbmFtZTogXCJwb3NpdGlvblwiLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2N1cnJlbnRcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fY3VycmVudFxuICAgIH0sIGUucHJvdG90eXBlLmludmFsaWRhdGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCIgPT09IGEudHlwZShiKSAmJiAodGhpcy5faW52YWxpZGF0ZWRbYl0gPSAhMCwgdGhpcy5pcyhcInZhbGlkXCIpICYmIHRoaXMubGVhdmUoXCJ2YWxpZFwiKSksIGEubWFwKHRoaXMuX2ludmFsaWRhdGVkLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYlxuICAgICAgfSlcbiAgICB9LCBlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICBhID0gdGhpcy5ub3JtYWxpemUoYSksIGEgIT09IGQgJiYgKHRoaXMuX3NwZWVkID0gMCwgdGhpcy5fY3VycmVudCA9IGEsIHRoaXMuc3VwcHJlc3MoW1widHJhbnNsYXRlXCIsIFwidHJhbnNsYXRlZFwiXSksIHRoaXMuYW5pbWF0ZSh0aGlzLmNvb3JkaW5hdGVzKGEpKSwgdGhpcy5yZWxlYXNlKFtcInRyYW5zbGF0ZVwiLCBcInRyYW5zbGF0ZWRcIl0pKVxuICAgIH0sIGUucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICB2YXIgYyA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgZSA9IGIgPyAwIDogdGhpcy5fY2xvbmVzLmxlbmd0aDtcbiAgICAgIHJldHVybiAhdGhpcy5pc051bWVyaWMoYSkgfHwgYyA8IDEgPyBhID0gZCA6IChhIDwgMCB8fCBhID49IGMgKyBlKSAmJiAoYSA9ICgoYSAtIGUgLyAyKSAlIGMgKyBjKSAlIGMgKyBlIC8gMiksIGFcbiAgICB9LCBlLnByb3RvdHlwZS5yZWxhdGl2ZSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gYSAtPSB0aGlzLl9jbG9uZXMubGVuZ3RoIC8gMiwgdGhpcy5ub3JtYWxpemUoYSwgITApXG4gICAgfSwgZS5wcm90b3R5cGUubWF4aW11bSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICB2YXIgYiwgYywgZCwgZSA9IHRoaXMuc2V0dGluZ3MsIGYgPSB0aGlzLl9jb29yZGluYXRlcy5sZW5ndGg7XG4gICAgICBpZiAoZS5sb29wKSBmID0gdGhpcy5fY2xvbmVzLmxlbmd0aCAvIDIgKyB0aGlzLl9pdGVtcy5sZW5ndGggLSAxOyBlbHNlIGlmIChlLmF1dG9XaWR0aCB8fCBlLm1lcmdlKSB7XG4gICAgICAgIGZvciAoYiA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgYyA9IHRoaXMuX2l0ZW1zWy0tYl0ud2lkdGgoKSwgZCA9IHRoaXMuJGVsZW1lbnQud2lkdGgoKTsgYi0tICYmIChjICs9IHRoaXMuX2l0ZW1zW2JdLndpZHRoKCkgKyB0aGlzLnNldHRpbmdzLm1hcmdpbiwgIShjID4gZCkpOykgO1xuICAgICAgICBmID0gYiArIDFcbiAgICAgIH0gZWxzZSBmID0gZS5jZW50ZXIgPyB0aGlzLl9pdGVtcy5sZW5ndGggLSAxIDogdGhpcy5faXRlbXMubGVuZ3RoIC0gZS5pdGVtcztcbiAgICAgIHJldHVybiBhICYmIChmIC09IHRoaXMuX2Nsb25lcy5sZW5ndGggLyAyKSwgTWF0aC5tYXgoZiwgMClcbiAgICB9LCBlLnByb3RvdHlwZS5taW5pbXVtID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBhID8gMCA6IHRoaXMuX2Nsb25lcy5sZW5ndGggLyAyXG4gICAgfSwgZS5wcm90b3R5cGUuaXRlbXMgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGEgPT09IGQgPyB0aGlzLl9pdGVtcy5zbGljZSgpIDogKGEgPSB0aGlzLm5vcm1hbGl6ZShhLCAhMCksIHRoaXMuX2l0ZW1zW2FdKVxuICAgIH0sIGUucHJvdG90eXBlLm1lcmdlcnMgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGEgPT09IGQgPyB0aGlzLl9tZXJnZXJzLnNsaWNlKCkgOiAoYSA9IHRoaXMubm9ybWFsaXplKGEsICEwKSwgdGhpcy5fbWVyZ2Vyc1thXSlcbiAgICB9LCBlLnByb3RvdHlwZS5jbG9uZXMgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdmFyIGMgPSB0aGlzLl9jbG9uZXMubGVuZ3RoIC8gMiwgZSA9IGMgKyB0aGlzLl9pdGVtcy5sZW5ndGgsIGYgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gYSAlIDIgPT09IDAgPyBlICsgYSAvIDIgOiBjIC0gKGEgKyAxKSAvIDJcbiAgICAgIH07XG4gICAgICByZXR1cm4gYiA9PT0gZCA/IGEubWFwKHRoaXMuX2Nsb25lcywgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGYoYilcbiAgICAgIH0pIDogYS5tYXAodGhpcy5fY2xvbmVzLCBmdW5jdGlvbiAoYSwgYykge1xuICAgICAgICByZXR1cm4gYSA9PT0gYiA/IGYoYykgOiBudWxsXG4gICAgICB9KVxuICAgIH0sIGUucHJvdG90eXBlLnNwZWVkID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBhICE9PSBkICYmICh0aGlzLl9zcGVlZCA9IGEpLCB0aGlzLl9zcGVlZFxuICAgIH0sIGUucHJvdG90eXBlLmNvb3JkaW5hdGVzID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIHZhciBjLCBlID0gMSwgZiA9IGIgLSAxO1xuICAgICAgcmV0dXJuIGIgPT09IGQgPyBhLm1hcCh0aGlzLl9jb29yZGluYXRlcywgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gdGhpcy5jb29yZGluYXRlcyhiKVxuICAgICAgfSwgdGhpcykpIDogKHRoaXMuc2V0dGluZ3MuY2VudGVyID8gKHRoaXMuc2V0dGluZ3MucnRsICYmIChlID0gLTEsIGYgPSBiICsgMSksIGMgPSB0aGlzLl9jb29yZGluYXRlc1tiXSwgYyArPSAodGhpcy53aWR0aCgpIC0gYyArICh0aGlzLl9jb29yZGluYXRlc1tmXSB8fCAwKSkgLyAyICogZSkgOiBjID0gdGhpcy5fY29vcmRpbmF0ZXNbZl0gfHwgMCwgYyA9IE1hdGguY2VpbChjKSlcbiAgICB9LCBlLnByb3RvdHlwZS5kdXJhdGlvbiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gMCA9PT0gYyA/IDAgOiBNYXRoLm1pbihNYXRoLm1heChNYXRoLmFicyhiIC0gYSksIDEpLCA2KSAqIE1hdGguYWJzKGMgfHwgdGhpcy5zZXR0aW5ncy5zbWFydFNwZWVkKVxuICAgIH0sIGUucHJvdG90eXBlLnRvID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHZhciBjID0gdGhpcy5jdXJyZW50KCksIGQgPSBudWxsLCBlID0gYSAtIHRoaXMucmVsYXRpdmUoYyksIGYgPSAoZSA+IDApIC0gKGUgPCAwKSwgZyA9IHRoaXMuX2l0ZW1zLmxlbmd0aCxcbiAgICAgICAgaCA9IHRoaXMubWluaW11bSgpLCBpID0gdGhpcy5tYXhpbXVtKCk7XG4gICAgICB0aGlzLnNldHRpbmdzLmxvb3AgPyAoIXRoaXMuc2V0dGluZ3MucmV3aW5kICYmIE1hdGguYWJzKGUpID4gZyAvIDIgJiYgKGUgKz0gZiAqIC0xICogZyksIGEgPSBjICsgZSwgZCA9ICgoYSAtIGgpICUgZyArIGcpICUgZyArIGgsIGQgIT09IGEgJiYgZCAtIGUgPD0gaSAmJiBkIC0gZSA+IDAgJiYgKGMgPSBkIC0gZSwgYSA9IGQsIHRoaXMucmVzZXQoYykpKSA6IHRoaXMuc2V0dGluZ3MucmV3aW5kID8gKGkgKz0gMSwgYSA9IChhICUgaSArIGkpICUgaSkgOiBhID0gTWF0aC5tYXgoaCwgTWF0aC5taW4oaSwgYSkpLCB0aGlzLnNwZWVkKHRoaXMuZHVyYXRpb24oYywgYSwgYikpLCB0aGlzLmN1cnJlbnQoYSksIHRoaXMuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSAmJiB0aGlzLnVwZGF0ZSgpXG4gICAgfSwgZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICBhID0gYSB8fCAhMSwgdGhpcy50byh0aGlzLnJlbGF0aXZlKHRoaXMuY3VycmVudCgpKSArIDEsIGEpXG4gICAgfSwgZS5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICBhID0gYSB8fCAhMSwgdGhpcy50byh0aGlzLnJlbGF0aXZlKHRoaXMuY3VycmVudCgpKSAtIDEsIGEpXG4gICAgfSwgZS5wcm90b3R5cGUub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIGlmIChhICE9PSBkICYmIChhLnN0b3BQcm9wYWdhdGlvbigpLCAoYS50YXJnZXQgfHwgYS5zcmNFbGVtZW50IHx8IGEub3JpZ2luYWxUYXJnZXQpICE9PSB0aGlzLiRzdGFnZS5nZXQoMCkpKSByZXR1cm4gITE7XG4gICAgICB0aGlzLmxlYXZlKFwiYW5pbWF0aW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJ0cmFuc2xhdGVkXCIpXG4gICAgfSwgZS5wcm90b3R5cGUudmlld3BvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZDtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZUJhc2VFbGVtZW50ICE9PSBiID8gZCA9IGEodGhpcy5vcHRpb25zLnJlc3BvbnNpdmVCYXNlRWxlbWVudCkud2lkdGgoKSA6IGIuaW5uZXJXaWR0aCA/IGQgPSBiLmlubmVyV2lkdGggOiBjLmRvY3VtZW50RWxlbWVudCAmJiBjLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA/IGQgPSBjLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA6IGNvbnNvbGUud2FybihcIkNhbiBub3QgZGV0ZWN0IHZpZXdwb3J0IHdpZHRoLlwiKSwgZFxuICAgIH0sIGUucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdGhpcy4kc3RhZ2UuZW1wdHkoKSwgdGhpcy5faXRlbXMgPSBbXSwgYiAmJiAoYiA9IGIgaW5zdGFuY2VvZiBqUXVlcnkgPyBiIDogYShiKSksIHRoaXMuc2V0dGluZ3MubmVzdGVkSXRlbVNlbGVjdG9yICYmIChiID0gYi5maW5kKFwiLlwiICsgdGhpcy5zZXR0aW5ncy5uZXN0ZWRJdGVtU2VsZWN0b3IpKSwgYi5maWx0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gMSA9PT0gdGhpcy5ub2RlVHlwZVxuICAgICAgfSkuZWFjaChhLnByb3h5KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIGIgPSB0aGlzLnByZXBhcmUoYiksIHRoaXMuJHN0YWdlLmFwcGVuZChiKSwgdGhpcy5faXRlbXMucHVzaChiKSwgdGhpcy5fbWVyZ2Vycy5wdXNoKDEgKiBiLmZpbmQoXCJbZGF0YS1tZXJnZV1cIikuYWRkQmFjayhcIltkYXRhLW1lcmdlXVwiKS5hdHRyKFwiZGF0YS1tZXJnZVwiKSB8fCAxKVxuICAgICAgfSwgdGhpcykpLCB0aGlzLnJlc2V0KHRoaXMuaXNOdW1lcmljKHRoaXMuc2V0dGluZ3Muc3RhcnRQb3NpdGlvbikgPyB0aGlzLnNldHRpbmdzLnN0YXJ0UG9zaXRpb24gOiAwKSwgdGhpcy5pbnZhbGlkYXRlKFwiaXRlbXNcIilcbiAgICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoYiwgYykge1xuICAgICAgdmFyIGUgPSB0aGlzLnJlbGF0aXZlKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgYyA9IGMgPT09IGQgPyB0aGlzLl9pdGVtcy5sZW5ndGggOiB0aGlzLm5vcm1hbGl6ZShjLCAhMCksIGIgPSBiIGluc3RhbmNlb2YgalF1ZXJ5ID8gYiA6IGEoYiksIHRoaXMudHJpZ2dlcihcImFkZFwiLCB7XG4gICAgICAgIGNvbnRlbnQ6IGIsXG4gICAgICAgIHBvc2l0aW9uOiBjXG4gICAgICB9KSwgYiA9IHRoaXMucHJlcGFyZShiKSwgMCA9PT0gdGhpcy5faXRlbXMubGVuZ3RoIHx8IGMgPT09IHRoaXMuX2l0ZW1zLmxlbmd0aCA/ICgwID09PSB0aGlzLl9pdGVtcy5sZW5ndGggJiYgdGhpcy4kc3RhZ2UuYXBwZW5kKGIpLCAwICE9PSB0aGlzLl9pdGVtcy5sZW5ndGggJiYgdGhpcy5faXRlbXNbYyAtIDFdLmFmdGVyKGIpLCB0aGlzLl9pdGVtcy5wdXNoKGIpLCB0aGlzLl9tZXJnZXJzLnB1c2goMSAqIGIuZmluZChcIltkYXRhLW1lcmdlXVwiKS5hZGRCYWNrKFwiW2RhdGEtbWVyZ2VdXCIpLmF0dHIoXCJkYXRhLW1lcmdlXCIpIHx8IDEpKSA6ICh0aGlzLl9pdGVtc1tjXS5iZWZvcmUoYiksIHRoaXMuX2l0ZW1zLnNwbGljZShjLCAwLCBiKSwgdGhpcy5fbWVyZ2Vycy5zcGxpY2UoYywgMCwgMSAqIGIuZmluZChcIltkYXRhLW1lcmdlXVwiKS5hZGRCYWNrKFwiW2RhdGEtbWVyZ2VdXCIpLmF0dHIoXCJkYXRhLW1lcmdlXCIpIHx8IDEpKSwgdGhpcy5faXRlbXNbZV0gJiYgdGhpcy5yZXNldCh0aGlzLl9pdGVtc1tlXS5pbmRleCgpKSwgdGhpcy5pbnZhbGlkYXRlKFwiaXRlbXNcIiksIHRoaXMudHJpZ2dlcihcImFkZGVkXCIsIHtcbiAgICAgICAgY29udGVudDogYixcbiAgICAgICAgcG9zaXRpb246IGNcbiAgICAgIH0pXG4gICAgfSwgZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIGEgPSB0aGlzLm5vcm1hbGl6ZShhLCAhMCksIGEgIT09IGQgJiYgKHRoaXMudHJpZ2dlcihcInJlbW92ZVwiLCB7XG4gICAgICAgIGNvbnRlbnQ6IHRoaXMuX2l0ZW1zW2FdLFxuICAgICAgICBwb3NpdGlvbjogYVxuICAgICAgfSksIHRoaXMuX2l0ZW1zW2FdLnJlbW92ZSgpLCB0aGlzLl9pdGVtcy5zcGxpY2UoYSwgMSksIHRoaXMuX21lcmdlcnMuc3BsaWNlKGEsIDEpLCB0aGlzLmludmFsaWRhdGUoXCJpdGVtc1wiKSwgdGhpcy50cmlnZ2VyKFwicmVtb3ZlZFwiLCB7XG4gICAgICAgIGNvbnRlbnQ6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiBhXG4gICAgICB9KSlcbiAgICB9LCBlLnByb3RvdHlwZS5wcmVsb2FkQXV0b1dpZHRoSW1hZ2VzID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIGIuZWFjaChhLnByb3h5KGZ1bmN0aW9uIChiLCBjKSB7XG4gICAgICAgIHRoaXMuZW50ZXIoXCJwcmUtbG9hZGluZ1wiKSwgYyA9IGEoYyksIGEobmV3IEltYWdlKS5vbmUoXCJsb2FkXCIsIGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICBjLmF0dHIoXCJzcmNcIiwgYS50YXJnZXQuc3JjKSwgYy5jc3MoXCJvcGFjaXR5XCIsIDEpLCB0aGlzLmxlYXZlKFwicHJlLWxvYWRpbmdcIiksICF0aGlzLmlzKFwicHJlLWxvYWRpbmdcIikgJiYgIXRoaXMuaXMoXCJpbml0aWFsaXppbmdcIikgJiYgdGhpcy5yZWZyZXNoKClcbiAgICAgICAgfSwgdGhpcykpLmF0dHIoXCJzcmNcIiwgYy5hdHRyKFwic3JjXCIpIHx8IGMuYXR0cihcImRhdGEtc3JjXCIpIHx8IGMuYXR0cihcImRhdGEtc3JjLXJldGluYVwiKSlcbiAgICAgIH0sIHRoaXMpKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9mZihcIi5vd2wuY29yZVwiKSwgdGhpcy4kc3RhZ2Uub2ZmKFwiLm93bC5jb3JlXCIpLCBhKGMpLm9mZihcIi5vd2wuY29yZVwiKSwgdGhpcy5zZXR0aW5ncy5yZXNwb25zaXZlICE9PSAhMSAmJiAoYi5jbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lciksIHRoaXMub2ZmKGIsIFwicmVzaXplXCIsIHRoaXMuX2hhbmRsZXJzLm9uVGhyb3R0bGVkUmVzaXplKSk7XG4gICAgICBmb3IgKHZhciBkIGluIHRoaXMuX3BsdWdpbnMpIHRoaXMuX3BsdWdpbnNbZF0uZGVzdHJveSgpO1xuICAgICAgdGhpcy4kc3RhZ2UuY2hpbGRyZW4oXCIuY2xvbmVkXCIpLnJlbW92ZSgpLCB0aGlzLiRzdGFnZS51bndyYXAoKSwgdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5jb250ZW50cygpLnVud3JhcCgpLCB0aGlzLiRzdGFnZS5jaGlsZHJlbigpLnVud3JhcCgpLCB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5yZWZyZXNoQ2xhc3MpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sb2FkaW5nQ2xhc3MpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sb2FkZWRDbGFzcykucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLnJ0bENsYXNzKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZHJhZ0NsYXNzKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZ3JhYkNsYXNzKS5hdHRyKFwiY2xhc3NcIiwgdGhpcy4kZWxlbWVudC5hdHRyKFwiY2xhc3NcIikucmVwbGFjZShuZXcgUmVnRXhwKHRoaXMub3B0aW9ucy5yZXNwb25zaXZlQ2xhc3MgKyBcIi1cXFxcUytcXFxcc1wiLCBcImdcIiksIFwiXCIpKS5yZW1vdmVEYXRhKFwib3dsLmNhcm91c2VsXCIpXG4gICAgfSwgZS5wcm90b3R5cGUub3AgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgdmFyIGQgPSB0aGlzLnNldHRpbmdzLnJ0bDtcbiAgICAgIHN3aXRjaCAoYikge1xuICAgICAgICBjYXNlXCI8XCI6XG4gICAgICAgICAgcmV0dXJuIGQgPyBhID4gYyA6IGEgPCBjO1xuICAgICAgICBjYXNlXCI+XCI6XG4gICAgICAgICAgcmV0dXJuIGQgPyBhIDwgYyA6IGEgPiBjO1xuICAgICAgICBjYXNlXCI+PVwiOlxuICAgICAgICAgIHJldHVybiBkID8gYSA8PSBjIDogYSA+PSBjO1xuICAgICAgICBjYXNlXCI8PVwiOlxuICAgICAgICAgIHJldHVybiBkID8gYSA+PSBjIDogYSA8PSBjXG4gICAgICB9XG4gICAgfSwgZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgYS5hZGRFdmVudExpc3RlbmVyID8gYS5hZGRFdmVudExpc3RlbmVyKGIsIGMsIGQpIDogYS5hdHRhY2hFdmVudCAmJiBhLmF0dGFjaEV2ZW50KFwib25cIiArIGIsIGMpXG4gICAgfSwgZS5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgIGEucmVtb3ZlRXZlbnRMaXN0ZW5lciA/IGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLCBjLCBkKSA6IGEuZGV0YWNoRXZlbnQgJiYgYS5kZXRhY2hFdmVudChcIm9uXCIgKyBiLCBjKVxuICAgIH0sIGUucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbiAoYiwgYywgZCwgZiwgZykge1xuICAgICAgdmFyIGggPSB7aXRlbToge2NvdW50OiB0aGlzLl9pdGVtcy5sZW5ndGgsIGluZGV4OiB0aGlzLmN1cnJlbnQoKX19LFxuICAgICAgICBpID0gYS5jYW1lbENhc2UoYS5ncmVwKFtcIm9uXCIsIGIsIGRdLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIHJldHVybiBhXG4gICAgICAgIH0pLmpvaW4oXCItXCIpLnRvTG93ZXJDYXNlKCkpLFxuICAgICAgICBqID0gYS5FdmVudChbYiwgXCJvd2xcIiwgZCB8fCBcImNhcm91c2VsXCJdLmpvaW4oXCIuXCIpLnRvTG93ZXJDYXNlKCksIGEuZXh0ZW5kKHtyZWxhdGVkVGFyZ2V0OiB0aGlzfSwgaCwgYykpO1xuICAgICAgcmV0dXJuIHRoaXMuX3N1cHJlc3NbYl0gfHwgKGEuZWFjaCh0aGlzLl9wbHVnaW5zLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBiLm9uVHJpZ2dlciAmJiBiLm9uVHJpZ2dlcihqKVxuICAgICAgfSksIHRoaXMucmVnaXN0ZXIoe1xuICAgICAgICB0eXBlOiBlLlR5cGUuRXZlbnQsXG4gICAgICAgIG5hbWU6IGJcbiAgICAgIH0pLCB0aGlzLiRlbGVtZW50LnRyaWdnZXIoaiksIHRoaXMuc2V0dGluZ3MgJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiB0aGlzLnNldHRpbmdzW2ldICYmIHRoaXMuc2V0dGluZ3NbaV0uY2FsbCh0aGlzLCBqKSksIGpcbiAgICB9LCBlLnByb3RvdHlwZS5lbnRlciA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICBhLmVhY2goW2JdLmNvbmNhdCh0aGlzLl9zdGF0ZXMudGFnc1tiXSB8fCBbXSksIGEucHJveHkoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgdGhpcy5fc3RhdGVzLmN1cnJlbnRbYl0gPT09IGQgJiYgKHRoaXMuX3N0YXRlcy5jdXJyZW50W2JdID0gMCksIHRoaXMuX3N0YXRlcy5jdXJyZW50W2JdKytcbiAgICAgIH0sIHRoaXMpKVxuICAgIH0sIGUucHJvdG90eXBlLmxlYXZlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIGEuZWFjaChbYl0uY29uY2F0KHRoaXMuX3N0YXRlcy50YWdzW2JdIHx8IFtdKSwgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICB0aGlzLl9zdGF0ZXMuY3VycmVudFtiXS0tXG4gICAgICB9LCB0aGlzKSlcbiAgICB9LCBlLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICBpZiAoYi50eXBlID09PSBlLlR5cGUuRXZlbnQpIHtcbiAgICAgICAgaWYgKGEuZXZlbnQuc3BlY2lhbFtiLm5hbWVdIHx8IChhLmV2ZW50LnNwZWNpYWxbYi5uYW1lXSA9IHt9KSwgIWEuZXZlbnQuc3BlY2lhbFtiLm5hbWVdLm93bCkge1xuICAgICAgICAgIHZhciBjID0gYS5ldmVudC5zcGVjaWFsW2IubmFtZV0uX2RlZmF1bHQ7XG4gICAgICAgICAgYS5ldmVudC5zcGVjaWFsW2IubmFtZV0uX2RlZmF1bHQgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuICFjIHx8ICFjLmFwcGx5IHx8IGEubmFtZXNwYWNlICYmIGEubmFtZXNwYWNlLmluZGV4T2YoXCJvd2xcIikgIT09IC0xID8gYS5uYW1lc3BhY2UgJiYgYS5uYW1lc3BhY2UuaW5kZXhPZihcIm93bFwiKSA+IC0xIDogYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgfSwgYS5ldmVudC5zcGVjaWFsW2IubmFtZV0ub3dsID0gITBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGIudHlwZSA9PT0gZS5UeXBlLlN0YXRlICYmICh0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdID8gdGhpcy5fc3RhdGVzLnRhZ3NbYi5uYW1lXSA9IHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0uY29uY2F0KGIudGFncykgOiB0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdID0gYi50YWdzLCB0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdID0gYS5ncmVwKHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0sIGEucHJveHkoZnVuY3Rpb24gKGMsIGQpIHtcbiAgICAgICAgcmV0dXJuIGEuaW5BcnJheShjLCB0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdKSA9PT0gZFxuICAgICAgfSwgdGhpcykpKVxuICAgIH0sIGUucHJvdG90eXBlLnN1cHByZXNzID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIGEuZWFjaChiLCBhLnByb3h5KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHRoaXMuX3N1cHJlc3NbYl0gPSAhMFxuICAgICAgfSwgdGhpcykpXG4gICAgfSwgZS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICBhLmVhY2goYiwgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBkZWxldGUgdGhpcy5fc3VwcmVzc1tiXVxuICAgICAgfSwgdGhpcykpXG4gICAgfSwgZS5wcm90b3R5cGUucG9pbnRlciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICB2YXIgYyA9IHt4OiBudWxsLCB5OiBudWxsfTtcbiAgICAgIHJldHVybiBhID0gYS5vcmlnaW5hbEV2ZW50IHx8IGEgfHwgYi5ldmVudCwgYSA9IGEudG91Y2hlcyAmJiBhLnRvdWNoZXMubGVuZ3RoID8gYS50b3VjaGVzWzBdIDogYS5jaGFuZ2VkVG91Y2hlcyAmJiBhLmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA/IGEuY2hhbmdlZFRvdWNoZXNbMF0gOiBhLCBhLnBhZ2VYID8gKGMueCA9IGEucGFnZVgsIGMueSA9IGEucGFnZVkpIDogKGMueCA9IGEuY2xpZW50WCwgYy55ID0gYS5jbGllbnRZKSwgY1xuICAgIH0sIGUucHJvdG90eXBlLmlzTnVtZXJpYyA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQoYSkpXG4gICAgfSwgZS5wcm90b3R5cGUuZGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4ge3g6IGEueCAtIGIueCwgeTogYS55IC0gYi55fVxuICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdmFyIGMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkID0gYSh0aGlzKSwgZiA9IGQuZGF0YShcIm93bC5jYXJvdXNlbFwiKTtcbiAgICAgICAgZiB8fCAoZiA9IG5ldyBlKHRoaXMsIFwib2JqZWN0XCIgPT0gdHlwZW9mIGIgJiYgYiksIGQuZGF0YShcIm93bC5jYXJvdXNlbFwiLCBmKSwgYS5lYWNoKFtcIm5leHRcIiwgXCJwcmV2XCIsIFwidG9cIiwgXCJkZXN0cm95XCIsIFwicmVmcmVzaFwiLCBcInJlcGxhY2VcIiwgXCJhZGRcIiwgXCJyZW1vdmVcIl0sIGZ1bmN0aW9uIChiLCBjKSB7XG4gICAgICAgICAgZi5yZWdpc3Rlcih7XG4gICAgICAgICAgICB0eXBlOiBlLlR5cGUuRXZlbnQsXG4gICAgICAgICAgICBuYW1lOiBjXG4gICAgICAgICAgfSksIGYuJGVsZW1lbnQub24oYyArIFwiLm93bC5jYXJvdXNlbC5jb3JlXCIsIGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIGEucmVsYXRlZFRhcmdldCAhPT0gdGhpcyAmJiAodGhpcy5zdXBwcmVzcyhbY10pLCBmW2NdLmFwcGx5KHRoaXMsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSksIHRoaXMucmVsZWFzZShbY10pKVxuICAgICAgICAgIH0sIGYpKVxuICAgICAgICB9KSksIFwic3RyaW5nXCIgPT0gdHlwZW9mIGIgJiYgXCJfXCIgIT09IGIuY2hhckF0KDApICYmIGZbYl0uYXBwbHkoZiwgYylcbiAgICAgIH0pXG4gICAgfSwgYS5mbi5zYnlPd2xDYXJvdXNlbC5Db25zdHJ1Y3RvciA9IGVcbiAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCksIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgdmFyIGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdGhpcy5fY29yZSA9IGIsIHRoaXMuX2ludGVydmFsID0gbnVsbCwgdGhpcy5fdmlzaWJsZSA9IG51bGwsIHRoaXMuX2hhbmRsZXJzID0ge1xuICAgICAgICBcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvUmVmcmVzaCAmJiB0aGlzLndhdGNoKClcbiAgICAgICAgfSwgdGhpcylcbiAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKVxuICAgIH07XG4gICAgZS5EZWZhdWx0cyA9IHthdXRvUmVmcmVzaDogITAsIGF1dG9SZWZyZXNoSW50ZXJ2YWw6IDUwMH0sIGUucHJvdG90eXBlLndhdGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5faW50ZXJ2YWwgfHwgKHRoaXMuX3Zpc2libGUgPSB0aGlzLl9jb3JlLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIiksIHRoaXMuX2ludGVydmFsID0gYi5zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMucmVmcmVzaCwgdGhpcyksIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b1JlZnJlc2hJbnRlcnZhbCkpXG4gICAgfSwgZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2NvcmUuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSAhPT0gdGhpcy5fdmlzaWJsZSAmJiAodGhpcy5fdmlzaWJsZSA9ICF0aGlzLl92aXNpYmxlLCB0aGlzLl9jb3JlLiRlbGVtZW50LnRvZ2dsZUNsYXNzKFwic2J5LW93bC1oaWRkZW5cIiwgIXRoaXMuX3Zpc2libGUpLCB0aGlzLl92aXNpYmxlICYmIHRoaXMuX2NvcmUuaW52YWxpZGF0ZShcIndpZHRoXCIpICYmIHRoaXMuX2NvcmUucmVmcmVzaCgpKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYSwgYztcbiAgICAgIGIuY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCk7XG4gICAgICBmb3IgKGEgaW4gdGhpcy5faGFuZGxlcnMpIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuX2hhbmRsZXJzW2FdKTtcbiAgICAgIGZvciAoYyBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0aGlzW2NdICYmICh0aGlzW2NdID0gbnVsbClcbiAgICB9LCBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuQXV0b1JlZnJlc2ggPSBlXG4gIH0od2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgIHZhciBlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIHRoaXMuX2NvcmUgPSBiLCB0aGlzLl9sb2FkZWQgPSBbXSwgdGhpcy5faGFuZGxlcnMgPSB7XG4gICAgICAgIFwiaW5pdGlhbGl6ZWQub3dsLmNhcm91c2VsIGNoYW5nZS5vd2wuY2Fyb3VzZWwgcmVzaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYikge1xuICAgICAgICAgIGlmIChiLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MubGF6eUxvYWQgJiYgKGIucHJvcGVydHkgJiYgXCJwb3NpdGlvblwiID09IGIucHJvcGVydHkubmFtZSB8fCBcImluaXRpYWxpemVkXCIgPT0gYi50eXBlKSkgZm9yICh2YXIgYyA9IHRoaXMuX2NvcmUuc2V0dGluZ3MsIGUgPSBjLmNlbnRlciAmJiBNYXRoLmNlaWwoYy5pdGVtcyAvIDIpIHx8IGMuaXRlbXMsIGYgPSBjLmNlbnRlciAmJiBlICogLTEgfHwgMCwgZyA9IChiLnByb3BlcnR5ICYmIGIucHJvcGVydHkudmFsdWUgIT09IGQgPyBiLnByb3BlcnR5LnZhbHVlIDogdGhpcy5fY29yZS5jdXJyZW50KCkpICsgZiwgaCA9IHRoaXMuX2NvcmUuY2xvbmVzKCkubGVuZ3RoLCBpID0gYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgdGhpcy5sb2FkKGIpXG4gICAgICAgICAgfSwgdGhpcyk7IGYrKyA8IGU7KSB0aGlzLmxvYWQoaCAvIDIgKyB0aGlzLl9jb3JlLnJlbGF0aXZlKGcpKSwgaCAmJiBhLmVhY2godGhpcy5fY29yZS5jbG9uZXModGhpcy5fY29yZS5yZWxhdGl2ZShnKSksIGkpLCBnKytcbiAgICAgICAgfSwgdGhpcylcbiAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKVxuICAgIH07XG4gICAgZS5EZWZhdWx0cyA9IHtsYXp5TG9hZDogITF9LCBlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgIHZhciBkID0gdGhpcy5fY29yZS4kc3RhZ2UuY2hpbGRyZW4oKS5lcShjKSwgZSA9IGQgJiYgZC5maW5kKFwiLnNieS1vd2wtbGF6eVwiKTtcbiAgICAgICFlIHx8IGEuaW5BcnJheShkLmdldCgwKSwgdGhpcy5fbG9hZGVkKSA+IC0xIHx8IChlLmVhY2goYS5wcm94eShmdW5jdGlvbiAoYywgZCkge1xuICAgICAgICB2YXIgZSwgZiA9IGEoZCksIGcgPSBiLmRldmljZVBpeGVsUmF0aW8gPiAxICYmIGYuYXR0cihcImRhdGEtc3JjLXJldGluYVwiKSB8fCBmLmF0dHIoXCJkYXRhLXNyY1wiKTtcbiAgICAgICAgdGhpcy5fY29yZS50cmlnZ2VyKFwibG9hZFwiLCB7XG4gICAgICAgICAgZWxlbWVudDogZixcbiAgICAgICAgICB1cmw6IGdcbiAgICAgICAgfSwgXCJsYXp5XCIpLCBmLmlzKFwiaW1nXCIpID8gZi5vbmUoXCJsb2FkLm93bC5sYXp5XCIsIGEucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGYuY3NzKFwib3BhY2l0eVwiLCAxKSwgdGhpcy5fY29yZS50cmlnZ2VyKFwibG9hZGVkXCIsIHtlbGVtZW50OiBmLCB1cmw6IGd9LCBcImxhenlcIilcbiAgICAgICAgfSwgdGhpcykpLmF0dHIoXCJzcmNcIiwgZykgOiAoZSA9IG5ldyBJbWFnZSwgZS5vbmxvYWQgPSBhLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmLmNzcyh7XG4gICAgICAgICAgICBcImJhY2tncm91bmQtaW1hZ2VcIjogJ3VybChcIicgKyBnICsgJ1wiKScsXG4gICAgICAgICAgICBvcGFjaXR5OiBcIjFcIlxuICAgICAgICAgIH0pLCB0aGlzLl9jb3JlLnRyaWdnZXIoXCJsb2FkZWRcIiwge2VsZW1lbnQ6IGYsIHVybDogZ30sIFwibGF6eVwiKVxuICAgICAgICB9LCB0aGlzKSwgZS5zcmMgPSBnKVxuICAgICAgfSwgdGhpcykpLCB0aGlzLl9sb2FkZWQucHVzaChkLmdldCgwKSkpXG4gICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhLCBiO1xuICAgICAgZm9yIChhIGluIHRoaXMuaGFuZGxlcnMpIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuaGFuZGxlcnNbYV0pO1xuICAgICAgZm9yIChiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbYl0gJiYgKHRoaXNbYl0gPSBudWxsKVxuICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5MYXp5ID0gZVxuICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICB2YXIgZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB0aGlzLl9jb3JlID0gYiwgdGhpcy5faGFuZGxlcnMgPSB7XG4gICAgICAgIFwiaW5pdGlhbGl6ZWQub3dsLmNhcm91c2VsIHJlZnJlc2hlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodCAmJiB0aGlzLnVwZGF0ZSgpXG4gICAgICAgIH0sIHRoaXMpLCBcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICBhLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9IZWlnaHQgJiYgXCJwb3NpdGlvblwiID09IGEucHJvcGVydHkubmFtZSAmJiB0aGlzLnVwZGF0ZSgpXG4gICAgICAgIH0sIHRoaXMpLCBcImxvYWRlZC5vd2wubGF6eVwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvSGVpZ2h0ICYmIGEuZWxlbWVudC5jbG9zZXN0KFwiLlwiICsgdGhpcy5fY29yZS5zZXR0aW5ncy5pdGVtQ2xhc3MpLmluZGV4KCkgPT09IHRoaXMuX2NvcmUuY3VycmVudCgpICYmIHRoaXMudXBkYXRlKClcbiAgICAgICAgfSwgdGhpcylcbiAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKVxuICAgIH07XG4gICAgZS5EZWZhdWx0cyA9IHthdXRvSGVpZ2h0OiAhMSwgYXV0b0hlaWdodENsYXNzOiBcInNieS1vd2wtaGVpZ2h0XCJ9LCBlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYiA9IHRoaXMuX2NvcmUuX2N1cnJlbnQsIGMgPSBiICsgdGhpcy5fY29yZS5zZXR0aW5ncy5pdGVtcyxcbiAgICAgICAgZCA9IHRoaXMuX2NvcmUuJHN0YWdlLmNoaWxkcmVuKCkudG9BcnJheSgpLnNsaWNlKGIsIGMpLCBlID0gW10sIGYgPSAwO1xuICAgICAgYS5lYWNoKGQsIGZ1bmN0aW9uIChiLCBjKSB7XG4gICAgICAgIGUucHVzaChhKGMpLmhlaWdodCgpKVxuICAgICAgfSksIGYgPSBNYXRoLm1heC5hcHBseShudWxsLCBlKSwgdGhpcy5fY29yZS4kc3RhZ2UucGFyZW50KCkuaGVpZ2h0KGYpLmFkZENsYXNzKHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodENsYXNzKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYSwgYjtcbiAgICAgIGZvciAoYSBpbiB0aGlzLl9oYW5kbGVycykgdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoYSwgdGhpcy5faGFuZGxlcnNbYV0pO1xuICAgICAgZm9yIChiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbYl0gJiYgKHRoaXNbYl0gPSBudWxsKVxuICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5BdXRvSGVpZ2h0ID0gZVxuICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICB2YXIgZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB0aGlzLl9jb3JlID0gYiwgdGhpcy5fdmlkZW9zID0ge30sIHRoaXMuX3BsYXlpbmcgPSBudWxsLCB0aGlzLl9oYW5kbGVycyA9IHtcbiAgICAgICAgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUucmVnaXN0ZXIoe3R5cGU6IFwic3RhdGVcIiwgbmFtZTogXCJwbGF5aW5nXCIsIHRhZ3M6IFtcImludGVyYWN0aW5nXCJdfSlcbiAgICAgICAgfSwgdGhpcyksIFwicmVzaXplLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy52aWRlbyAmJiB0aGlzLmlzSW5GdWxsU2NyZWVuKCkgJiYgYS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH0sIHRoaXMpLCBcInJlZnJlc2hlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuaXMoXCJyZXNpemluZ1wiKSAmJiB0aGlzLl9jb3JlLiRzdGFnZS5maW5kKFwiLmNsb25lZCAuc2J5LW93bC12aWRlby1mcmFtZVwiKS5yZW1vdmUoKVxuICAgICAgICB9LCB0aGlzKSwgXCJjaGFuZ2VkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgXCJwb3NpdGlvblwiID09PSBhLnByb3BlcnR5Lm5hbWUgJiYgdGhpcy5fcGxheWluZyAmJiB0aGlzLnN0b3AoKVxuICAgICAgICB9LCB0aGlzKSwgXCJwcmVwYXJlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYikge1xuICAgICAgICAgIGlmIChiLm5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdmFyIGMgPSBhKGIuY29udGVudCkuZmluZChcIi5zYnktb3dsLXZpZGVvXCIpO1xuICAgICAgICAgICAgYy5sZW5ndGggJiYgKGMuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIiksIHRoaXMuZmV0Y2goYywgYShiLmNvbnRlbnQpKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMpXG4gICAgICB9LCB0aGlzLl9jb3JlLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgdGhpcy5fY29yZS5vcHRpb25zKSwgdGhpcy5fY29yZS4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycyksIHRoaXMuX2NvcmUuJGVsZW1lbnQub24oXCJjbGljay5vd2wudmlkZW9cIiwgXCIuc2J5LW93bC12aWRlby1wbGF5LWljb25cIiwgYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICB0aGlzLnBsYXkoYSlcbiAgICAgIH0sIHRoaXMpKVxuICAgIH07XG4gICAgZS5EZWZhdWx0cyA9IHt2aWRlbzogITEsIHZpZGVvSGVpZ2h0OiAhMSwgdmlkZW9XaWR0aDogITF9LCBlLnByb3RvdHlwZS5mZXRjaCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICB2YXIgYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gYS5hdHRyKFwiZGF0YS12aW1lby1pZFwiKSA/IFwidmltZW9cIiA6IGEuYXR0cihcImRhdGEtdnphYXItaWRcIikgPyBcInZ6YWFyXCIgOiBcInlvdXR1YmVcIlxuICAgICAgICB9KCksIGQgPSBhLmF0dHIoXCJkYXRhLXZpbWVvLWlkXCIpIHx8IGEuYXR0cihcImRhdGEteW91dHViZS1pZFwiKSB8fCBhLmF0dHIoXCJkYXRhLXZ6YWFyLWlkXCIpLFxuICAgICAgICBlID0gYS5hdHRyKFwiZGF0YS13aWR0aFwiKSB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLnZpZGVvV2lkdGgsXG4gICAgICAgIGYgPSBhLmF0dHIoXCJkYXRhLWhlaWdodFwiKSB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLnZpZGVvSGVpZ2h0LCBnID0gYS5hdHRyKFwiaHJlZlwiKTtcbiAgICAgIGlmICghZykgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB2aWRlbyBVUkwuXCIpO1xuICAgICAgaWYgKGQgPSBnLm1hdGNoKC8oaHR0cDp8aHR0cHM6fClcXC9cXC8ocGxheWVyLnx3d3cufGFwcC4pPyh2aW1lb1xcLmNvbXx5b3V0dShiZVxcLmNvbXxcXC5iZXxiZVxcLmdvb2dsZWFwaXNcXC5jb20pfHZ6YWFyXFwuY29tKVxcLyh2aWRlb1xcL3x2aWRlb3NcXC98ZW1iZWRcXC98Y2hhbm5lbHNcXC8uK1xcL3xncm91cHNcXC8uK1xcL3x3YXRjaFxcP3Y9fHZcXC8pPyhbQS1aYS16MC05Ll8lLV0qKShcXCZcXFMrKT8vKSwgZFszXS5pbmRleE9mKFwieW91dHVcIikgPiAtMSkgYyA9IFwieW91dHViZVwiOyBlbHNlIGlmIChkWzNdLmluZGV4T2YoXCJ2aW1lb1wiKSA+IC0xKSBjID0gXCJ2aW1lb1wiOyBlbHNlIHtcbiAgICAgICAgaWYgKCEoZFszXS5pbmRleE9mKFwidnphYXJcIikgPiAtMSkpIHRocm93IG5ldyBFcnJvcihcIlZpZGVvIFVSTCBub3Qgc3VwcG9ydGVkLlwiKTtcbiAgICAgICAgYyA9IFwidnphYXJcIlxuICAgICAgfVxuICAgICAgZCA9IGRbNl0sIHRoaXMuX3ZpZGVvc1tnXSA9IHtcbiAgICAgICAgdHlwZTogYyxcbiAgICAgICAgaWQ6IGQsXG4gICAgICAgIHdpZHRoOiBlLFxuICAgICAgICBoZWlnaHQ6IGZcbiAgICAgIH0sIGIuYXR0cihcImRhdGEtdmlkZW9cIiwgZyksIHRoaXMudGh1bWJuYWlsKGEsIHRoaXMuX3ZpZGVvc1tnXSlcbiAgICB9LCBlLnByb3RvdHlwZS50aHVtYm5haWwgPSBmdW5jdGlvbiAoYiwgYykge1xuICAgICAgdmFyIGQsIGUsIGYsIGcgPSBjLndpZHRoICYmIGMuaGVpZ2h0ID8gJ3N0eWxlPVwid2lkdGg6JyArIGMud2lkdGggKyBcInB4O2hlaWdodDpcIiArIGMuaGVpZ2h0ICsgJ3B4O1wiJyA6IFwiXCIsXG4gICAgICAgIGggPSBiLmZpbmQoXCJpbWdcIiksIGkgPSBcInNyY1wiLCBqID0gXCJcIiwgayA9IHRoaXMuX2NvcmUuc2V0dGluZ3MsIGwgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGUgPSAnPGRpdiBjbGFzcz1cInNieS1vd2wtdmlkZW8tcGxheS1pY29uXCI+PC9kaXY+JywgZCA9IGsubGF6eUxvYWQgPyAnPGRpdiBjbGFzcz1cInNieS1vd2wtdmlkZW8tdG4gJyArIGogKyAnXCIgJyArIGkgKyAnPVwiJyArIGEgKyAnXCI+PC9kaXY+JyA6ICc8ZGl2IGNsYXNzPVwic2J5LW93bC12aWRlby10blwiIHN0eWxlPVwib3BhY2l0eToxO2JhY2tncm91bmQtaW1hZ2U6dXJsKCcgKyBhICsgJylcIj48L2Rpdj4nLCBiLmFmdGVyKGQpLCBiLmFmdGVyKGUpXG4gICAgICAgIH07XG4gICAgICBpZiAoYi53cmFwKCc8ZGl2IGNsYXNzPVwic2J5LW93bC12aWRlby13cmFwcGVyXCInICsgZyArIFwiPjwvZGl2PlwiKSwgdGhpcy5fY29yZS5zZXR0aW5ncy5sYXp5TG9hZCAmJiAoaSA9IFwiZGF0YS1zcmNcIiwgaiA9IFwic2J5LW93bC1sYXp5XCIpLCBoLmxlbmd0aCkgcmV0dXJuIGwoaC5hdHRyKGkpKSwgaC5yZW1vdmUoKSwgITE7XG4gICAgICBcInlvdXR1YmVcIiA9PT0gYy50eXBlID8gKGYgPSBcIi8vaW1nLnlvdXR1YmUuY29tL3ZpL1wiICsgYy5pZCArIFwiL2hxZGVmYXVsdC5qcGdcIiwgbChmKSkgOiBcInZpbWVvXCIgPT09IGMudHlwZSA/IGEuYWpheCh7XG4gICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgIHVybDogXCIvL3ZpbWVvLmNvbS9hcGkvdjIvdmlkZW8vXCIgKyBjLmlkICsgXCIuanNvblwiLFxuICAgICAgICBqc29ucDogXCJjYWxsYmFja1wiLFxuICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGYgPSBhWzBdLnRodW1ibmFpbF9sYXJnZSwgbChmKVxuICAgICAgICB9XG4gICAgICB9KSA6IFwidnphYXJcIiA9PT0gYy50eXBlICYmIGEuYWpheCh7XG4gICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgIHVybDogXCIvL3Z6YWFyLmNvbS9hcGkvdmlkZW9zL1wiICsgYy5pZCArIFwiLmpzb25cIixcbiAgICAgICAganNvbnA6IFwiY2FsbGJhY2tcIixcbiAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICBmID0gYS5mcmFtZWdyYWJfdXJsLCBsKGYpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSwgZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2NvcmUudHJpZ2dlcihcInN0b3BcIiwgbnVsbCwgXCJ2aWRlb1wiKSwgdGhpcy5fcGxheWluZy5maW5kKFwiLnNieS1vd2wtdmlkZW8tZnJhbWVcIikucmVtb3ZlKCksIHRoaXMuX3BsYXlpbmcucmVtb3ZlQ2xhc3MoXCJzYnktb3dsLXZpZGVvLXBsYXlpbmdcIiksIHRoaXMuX3BsYXlpbmcgPSBudWxsLCB0aGlzLl9jb3JlLmxlYXZlKFwicGxheWluZ1wiKSwgdGhpcy5fY29yZS50cmlnZ2VyKFwic3RvcHBlZFwiLCBudWxsLCBcInZpZGVvXCIpXG4gICAgfSwgZS5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB2YXIgYywgZCA9IGEoYi50YXJnZXQpLCBlID0gZC5jbG9zZXN0KFwiLlwiICsgdGhpcy5fY29yZS5zZXR0aW5ncy5pdGVtQ2xhc3MpLFxuICAgICAgICBmID0gdGhpcy5fdmlkZW9zW2UuYXR0cihcImRhdGEtdmlkZW9cIildLCBnID0gZi53aWR0aCB8fCBcIjEwMCVcIixcbiAgICAgICAgaCA9IGYuaGVpZ2h0IHx8IHRoaXMuX2NvcmUuJHN0YWdlLmhlaWdodCgpO1xuICAgICAgdGhpcy5fcGxheWluZyB8fCAodGhpcy5fY29yZS5lbnRlcihcInBsYXlpbmdcIiksIHRoaXMuX2NvcmUudHJpZ2dlcihcInBsYXlcIiwgbnVsbCwgXCJ2aWRlb1wiKSwgZSA9IHRoaXMuX2NvcmUuaXRlbXModGhpcy5fY29yZS5yZWxhdGl2ZShlLmluZGV4KCkpKSwgdGhpcy5fY29yZS5yZXNldChlLmluZGV4KCkpLCBcInlvdXR1YmVcIiA9PT0gZi50eXBlID8gYyA9ICc8aWZyYW1lIHdpZHRoPVwiJyArIGcgKyAnXCIgaGVpZ2h0PVwiJyArIGggKyAnXCIgc3JjPVwiLy93d3cueW91dHViZS5jb20vZW1iZWQvJyArIGYuaWQgKyBcIj9hdXRvcGxheT0xJnJlbD0wJnY9XCIgKyBmLmlkICsgJ1wiIGZyYW1lYm9yZGVyPVwiMFwiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4nIDogXCJ2aW1lb1wiID09PSBmLnR5cGUgPyBjID0gJzxpZnJhbWUgc3JjPVwiLy9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLycgKyBmLmlkICsgJz9hdXRvcGxheT0xXCIgd2lkdGg9XCInICsgZyArICdcIiBoZWlnaHQ9XCInICsgaCArICdcIiBmcmFtZWJvcmRlcj1cIjBcIiB3ZWJraXRhbGxvd2Z1bGxzY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4nIDogXCJ2emFhclwiID09PSBmLnR5cGUgJiYgKGMgPSAnPGlmcmFtZSBmcmFtZWJvcmRlcj1cIjBcImhlaWdodD1cIicgKyBoICsgJ1wid2lkdGg9XCInICsgZyArICdcIiBhbGxvd2Z1bGxzY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIHdlYmtpdEFsbG93RnVsbFNjcmVlbiBzcmM9XCIvL3ZpZXcudnphYXIuY29tLycgKyBmLmlkICsgJy9wbGF5ZXI/YXV0b3BsYXk9dHJ1ZVwiPjwvaWZyYW1lPicpLCBhKCc8ZGl2IGNsYXNzPVwic2J5LW93bC12aWRlby1mcmFtZVwiPicgKyBjICsgXCI8L2Rpdj5cIikuaW5zZXJ0QWZ0ZXIoZS5maW5kKFwiLnNieS1vd2wtdmlkZW9cIikpLCB0aGlzLl9wbGF5aW5nID0gZS5hZGRDbGFzcyhcInNieS1vd2wtdmlkZW8tcGxheWluZ1wiKSlcbiAgICB9LCBlLnByb3RvdHlwZS5pc0luRnVsbFNjcmVlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBiID0gYy5mdWxsc2NyZWVuRWxlbWVudCB8fCBjLm1vekZ1bGxTY3JlZW5FbGVtZW50IHx8IGMud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQ7XG4gICAgICByZXR1cm4gYiAmJiBhKGIpLnBhcmVudCgpLmhhc0NsYXNzKFwic2J5LW93bC12aWRlby1mcmFtZVwiKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYSwgYjtcbiAgICAgIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKFwiY2xpY2sub3dsLnZpZGVvXCIpO1xuICAgICAgZm9yIChhIGluIHRoaXMuX2hhbmRsZXJzKSB0aGlzLl9jb3JlLiRlbGVtZW50Lm9mZihhLCB0aGlzLl9oYW5kbGVyc1thXSk7XG4gICAgICBmb3IgKGIgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdGhpc1tiXSAmJiAodGhpc1tiXSA9IG51bGwpXG4gICAgfSwgYS5mbi5zYnlPd2xDYXJvdXNlbC5Db25zdHJ1Y3Rvci5QbHVnaW5zLlZpZGVvID0gZVxuICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICB2YXIgZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB0aGlzLmNvcmUgPSBiLCB0aGlzLmNvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLmNvcmUub3B0aW9ucyksIHRoaXMuc3dhcHBpbmcgPSAhMCwgdGhpcy5wcmV2aW91cyA9IGQsIHRoaXMubmV4dCA9IGQsIHRoaXMuaGFuZGxlcnMgPSB7XG4gICAgICAgIFwiY2hhbmdlLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgXCJwb3NpdGlvblwiID09IGEucHJvcGVydHkubmFtZSAmJiAodGhpcy5wcmV2aW91cyA9IHRoaXMuY29yZS5jdXJyZW50KCksIHRoaXMubmV4dCA9IGEucHJvcGVydHkudmFsdWUpXG4gICAgICAgIH0sIHRoaXMpLCBcImRyYWcub3dsLmNhcm91c2VsIGRyYWdnZWQub3dsLmNhcm91c2VsIHRyYW5zbGF0ZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICBhLm5hbWVzcGFjZSAmJiAodGhpcy5zd2FwcGluZyA9IFwidHJhbnNsYXRlZFwiID09IGEudHlwZSlcbiAgICAgICAgfSwgdGhpcyksIFwidHJhbnNsYXRlLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5zd2FwcGluZyAmJiAodGhpcy5jb3JlLm9wdGlvbnMuYW5pbWF0ZU91dCB8fCB0aGlzLmNvcmUub3B0aW9ucy5hbmltYXRlSW4pICYmIHRoaXMuc3dhcCgpXG4gICAgICAgIH0sIHRoaXMpXG4gICAgICB9LCB0aGlzLmNvcmUuJGVsZW1lbnQub24odGhpcy5oYW5kbGVycylcbiAgICB9O1xuICAgIGUuRGVmYXVsdHMgPSB7YW5pbWF0ZU91dDogITEsIGFuaW1hdGVJbjogITF9LCBlLnByb3RvdHlwZS5zd2FwID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKDEgPT09IHRoaXMuY29yZS5zZXR0aW5ncy5pdGVtcyAmJiBhLnN1cHBvcnQuYW5pbWF0aW9uICYmIGEuc3VwcG9ydC50cmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuY29yZS5zcGVlZCgwKTtcbiAgICAgICAgdmFyIGIsIGMgPSBhLnByb3h5KHRoaXMuY2xlYXIsIHRoaXMpLCBkID0gdGhpcy5jb3JlLiRzdGFnZS5jaGlsZHJlbigpLmVxKHRoaXMucHJldmlvdXMpLFxuICAgICAgICAgIGUgPSB0aGlzLmNvcmUuJHN0YWdlLmNoaWxkcmVuKCkuZXEodGhpcy5uZXh0KSwgZiA9IHRoaXMuY29yZS5zZXR0aW5ncy5hbmltYXRlSW4sXG4gICAgICAgICAgZyA9IHRoaXMuY29yZS5zZXR0aW5ncy5hbmltYXRlT3V0O1xuICAgICAgICB0aGlzLmNvcmUuY3VycmVudCgpICE9PSB0aGlzLnByZXZpb3VzICYmIChnICYmIChiID0gdGhpcy5jb3JlLmNvb3JkaW5hdGVzKHRoaXMucHJldmlvdXMpIC0gdGhpcy5jb3JlLmNvb3JkaW5hdGVzKHRoaXMubmV4dCksIGQub25lKGEuc3VwcG9ydC5hbmltYXRpb24uZW5kLCBjKS5jc3Moe2xlZnQ6IGIgKyBcInB4XCJ9KS5hZGRDbGFzcyhcImFuaW1hdGVkIHNieS1vd2wtYW5pbWF0ZWQtb3V0XCIpLmFkZENsYXNzKGcpKSwgZiAmJiBlLm9uZShhLnN1cHBvcnQuYW5pbWF0aW9uLmVuZCwgYykuYWRkQ2xhc3MoXCJhbmltYXRlZCBzYnktb3dsLWFuaW1hdGVkLWluXCIpLmFkZENsYXNzKGYpKVxuICAgICAgfVxuICAgIH0sIGUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIGEoYi50YXJnZXQpLmNzcyh7bGVmdDogXCJcIn0pLnJlbW92ZUNsYXNzKFwiYW5pbWF0ZWQgc2J5LW93bC1hbmltYXRlZC1vdXQgc2J5LW93bC1hbmltYXRlZC1pblwiKS5yZW1vdmVDbGFzcyh0aGlzLmNvcmUuc2V0dGluZ3MuYW5pbWF0ZUluKS5yZW1vdmVDbGFzcyh0aGlzLmNvcmUuc2V0dGluZ3MuYW5pbWF0ZU91dCksIHRoaXMuY29yZS5vblRyYW5zaXRpb25FbmQoKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYSwgYjtcbiAgICAgIGZvciAoYSBpbiB0aGlzLmhhbmRsZXJzKSB0aGlzLmNvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuaGFuZGxlcnNbYV0pO1xuICAgICAgZm9yIChiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbYl0gJiYgKHRoaXNbYl0gPSBudWxsKVxuICAgIH0sXG4gICAgICBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuQW5pbWF0ZSA9IGVcbiAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCksIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgdmFyIGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdGhpcy5fY29yZSA9IGIsIHRoaXMuX3RpbWVvdXQgPSBudWxsLCB0aGlzLl9wYXVzZWQgPSAhMSwgdGhpcy5faGFuZGxlcnMgPSB7XG4gICAgICAgIFwiY2hhbmdlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIFwic2V0dGluZ3NcIiA9PT0gYS5wcm9wZXJ0eS5uYW1lID8gdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheSA/IHRoaXMucGxheSgpIDogdGhpcy5zdG9wKCkgOiBhLm5hbWVzcGFjZSAmJiBcInBvc2l0aW9uXCIgPT09IGEucHJvcGVydHkubmFtZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5ICYmIHRoaXMuX3NldEF1dG9QbGF5SW50ZXJ2YWwoKVxuICAgICAgICB9LCB0aGlzKSwgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXkgJiYgdGhpcy5wbGF5KClcbiAgICAgICAgfSwgdGhpcyksIFwicGxheS5vd2wuYXV0b3BsYXlcIjogYS5wcm94eShmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMucGxheShiLCBjKVxuICAgICAgICB9LCB0aGlzKSwgXCJzdG9wLm93bC5hdXRvcGxheVwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5zdG9wKClcbiAgICAgICAgfSwgdGhpcyksIFwibW91c2VvdmVyLm93bC5hdXRvcGxheVwiOiBhLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5SG92ZXJQYXVzZSAmJiB0aGlzLl9jb3JlLmlzKFwicm90YXRpbmdcIikgJiYgdGhpcy5wYXVzZSgpXG4gICAgICAgIH0sIHRoaXMpLCBcIm1vdXNlbGVhdmUub3dsLmF1dG9wbGF5XCI6IGEucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlIb3ZlclBhdXNlICYmIHRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSAmJiB0aGlzLnBsYXkoKVxuICAgICAgICB9LCB0aGlzKSwgXCJ0b3VjaHN0YXJ0Lm93bC5jb3JlXCI6IGEucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlIb3ZlclBhdXNlICYmIHRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSAmJiB0aGlzLnBhdXNlKClcbiAgICAgICAgfSwgdGhpcyksIFwidG91Y2hlbmQub3dsLmNvcmVcIjogYS5wcm94eShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheUhvdmVyUGF1c2UgJiYgdGhpcy5wbGF5KClcbiAgICAgICAgfSwgdGhpcylcbiAgICAgIH0sIHRoaXMuX2NvcmUuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpLCB0aGlzLl9jb3JlLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgdGhpcy5fY29yZS5vcHRpb25zKVxuICAgIH07XG4gICAgZS5EZWZhdWx0cyA9IHtcbiAgICAgIGF1dG9wbGF5OiAhMSxcbiAgICAgIGF1dG9wbGF5VGltZW91dDogNWUzLFxuICAgICAgYXV0b3BsYXlIb3ZlclBhdXNlOiAhMSxcbiAgICAgIGF1dG9wbGF5U3BlZWQ6ICExXG4gICAgfSwgZS5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICB0aGlzLl9wYXVzZWQgPSAhMSwgdGhpcy5fY29yZS5pcyhcInJvdGF0aW5nXCIpIHx8ICh0aGlzLl9jb3JlLmVudGVyKFwicm90YXRpbmdcIiksIHRoaXMuX3NldEF1dG9QbGF5SW50ZXJ2YWwoKSlcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0TmV4dFRpbWVvdXQgPSBmdW5jdGlvbiAoZCwgZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RpbWVvdXQgJiYgYi5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCksIGIuc2V0VGltZW91dChhLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fcGF1c2VkIHx8IHRoaXMuX2NvcmUuaXMoXCJidXN5XCIpIHx8IHRoaXMuX2NvcmUuaXMoXCJpbnRlcmFjdGluZ1wiKSB8fCBjLmhpZGRlbiB8fCB0aGlzLl9jb3JlLm5leHQoZSB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5U3BlZWQpXG4gICAgICB9LCB0aGlzKSwgZCB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5VGltZW91dClcbiAgICB9LCBlLnByb3RvdHlwZS5fc2V0QXV0b1BsYXlJbnRlcnZhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSB0aGlzLl9nZXROZXh0VGltZW91dCgpXG4gICAgfSwgZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSAmJiAoYi5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCksIHRoaXMuX2NvcmUubGVhdmUoXCJyb3RhdGluZ1wiKSlcbiAgICB9LCBlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSAmJiAodGhpcy5fcGF1c2VkID0gITApXG4gICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhLCBiO1xuICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICBmb3IgKGEgaW4gdGhpcy5faGFuZGxlcnMpIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuX2hhbmRsZXJzW2FdKTtcbiAgICAgIGZvciAoYiBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0aGlzW2JdICYmICh0aGlzW2JdID0gbnVsbClcbiAgICB9LCBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuYXV0b3BsYXkgPSBlXG4gIH0od2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIHZhciBlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIHRoaXMuX2NvcmUgPSBiLCB0aGlzLl9pbml0aWFsaXplZCA9ICExLCB0aGlzLl9wYWdlcyA9IFtdLCB0aGlzLl9jb250cm9scyA9IHt9LCB0aGlzLl90ZW1wbGF0ZXMgPSBbXSwgdGhpcy4kZWxlbWVudCA9IHRoaXMuX2NvcmUuJGVsZW1lbnQsIHRoaXMuX292ZXJyaWRlcyA9IHtcbiAgICAgICAgbmV4dDogdGhpcy5fY29yZS5uZXh0LFxuICAgICAgICBwcmV2OiB0aGlzLl9jb3JlLnByZXYsXG4gICAgICAgIHRvOiB0aGlzLl9jb3JlLnRvXG4gICAgICB9LCB0aGlzLl9oYW5kbGVycyA9IHtcbiAgICAgICAgXCJwcmVwYXJlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYikge1xuICAgICAgICAgIGIubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MuZG90c0RhdGEgJiYgdGhpcy5fdGVtcGxhdGVzLnB1c2goJzxkaXYgY2xhc3M9XCInICsgdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RDbGFzcyArICdcIj4nICsgYShiLmNvbnRlbnQpLmZpbmQoXCJbZGF0YS1kb3RdXCIpLmFkZEJhY2soXCJbZGF0YS1kb3RdXCIpLmF0dHIoXCJkYXRhLWRvdFwiKSArIFwiPC9kaXY+XCIpXG4gICAgICAgIH0sIHRoaXMpLCBcImFkZGVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RzRGF0YSAmJiB0aGlzLl90ZW1wbGF0ZXMuc3BsaWNlKGEucG9zaXRpb24sIDAsIHRoaXMuX3RlbXBsYXRlcy5wb3AoKSlcbiAgICAgICAgfSwgdGhpcyksIFwicmVtb3ZlLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RzRGF0YSAmJiB0aGlzLl90ZW1wbGF0ZXMuc3BsaWNlKGEucG9zaXRpb24sIDEpXG4gICAgICAgIH0sIHRoaXMpLCBcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICBhLm5hbWVzcGFjZSAmJiBcInBvc2l0aW9uXCIgPT0gYS5wcm9wZXJ0eS5uYW1lICYmIHRoaXMuZHJhdygpXG4gICAgICAgIH0sIHRoaXMpLCBcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgIXRoaXMuX2luaXRpYWxpemVkICYmICh0aGlzLl9jb3JlLnRyaWdnZXIoXCJpbml0aWFsaXplXCIsIG51bGwsIFwibmF2aWdhdGlvblwiKSwgdGhpcy5pbml0aWFsaXplKCksIHRoaXMudXBkYXRlKCksIHRoaXMuZHJhdygpLCB0aGlzLl9pbml0aWFsaXplZCA9ICEwLCB0aGlzLl9jb3JlLnRyaWdnZXIoXCJpbml0aWFsaXplZFwiLCBudWxsLCBcIm5hdmlnYXRpb25cIikpXG4gICAgICAgIH0sIHRoaXMpLCBcInJlZnJlc2hlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2luaXRpYWxpemVkICYmICh0aGlzLl9jb3JlLnRyaWdnZXIoXCJyZWZyZXNoXCIsIG51bGwsIFwibmF2aWdhdGlvblwiKSwgdGhpcy51cGRhdGUoKSwgdGhpcy5kcmF3KCksIHRoaXMuX2NvcmUudHJpZ2dlcihcInJlZnJlc2hlZFwiLCBudWxsLCBcIm5hdmlnYXRpb25cIikpXG4gICAgICAgIH0sIHRoaXMpXG4gICAgICB9LCB0aGlzLl9jb3JlLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgdGhpcy5fY29yZS5vcHRpb25zKSwgdGhpcy4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycylcbiAgICB9O1xuICAgIGUuRGVmYXVsdHMgPSB7XG4gICAgICBuYXY6ICExLFxuICAgICAgbmF2VGV4dDogW1wicHJldlwiLCBcIm5leHRcIl0sXG4gICAgICBuYXZTcGVlZDogITEsXG4gICAgICBuYXZFbGVtZW50OiBcImRpdlwiLFxuICAgICAgbmF2Q29udGFpbmVyOiAhMSxcbiAgICAgIG5hdkNvbnRhaW5lckNsYXNzOiBcInNieS1vd2wtbmF2XCIsXG4gICAgICBuYXZDbGFzczogW1wic2J5LW93bC1wcmV2XCIsIFwic2J5LW93bC1uZXh0XCJdLFxuICAgICAgc2xpZGVCeTogMSxcbiAgICAgIGRvdENsYXNzOiBcInNieS1vd2wtZG90XCIsXG4gICAgICBkb3RzQ2xhc3M6IFwic2J5LW93bC1kb3RzXCIsXG4gICAgICBkb3RzOiAhMCxcbiAgICAgIGRvdHNFYWNoOiAhMSxcbiAgICAgIGRvdHNEYXRhOiAhMSxcbiAgICAgIGRvdHNTcGVlZDogITEsXG4gICAgICBkb3RzQ29udGFpbmVyOiAhMVxuICAgIH0sIGUucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYiwgYyA9IHRoaXMuX2NvcmUuc2V0dGluZ3M7XG4gICAgICB0aGlzLl9jb250cm9scy4kcmVsYXRpdmUgPSAoYy5uYXZDb250YWluZXIgPyBhKGMubmF2Q29udGFpbmVyKSA6IGEoXCI8ZGl2PlwiKS5hZGRDbGFzcyhjLm5hdkNvbnRhaW5lckNsYXNzKS5hcHBlbmRUbyh0aGlzLiRlbGVtZW50KSkuYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKSwgdGhpcy5fY29udHJvbHMuJHByZXZpb3VzID0gYShcIjxcIiArIGMubmF2RWxlbWVudCArIFwiPlwiKS5hZGRDbGFzcyhjLm5hdkNsYXNzWzBdKS5odG1sKGMubmF2VGV4dFswXSkucHJlcGVuZFRvKHRoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZSkub24oXCJjbGlja1wiLCBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHRoaXMucHJldihjLm5hdlNwZWVkKVxuICAgICAgfSwgdGhpcykpLCB0aGlzLl9jb250cm9scy4kbmV4dCA9IGEoXCI8XCIgKyBjLm5hdkVsZW1lbnQgKyBcIj5cIikuYWRkQ2xhc3MoYy5uYXZDbGFzc1sxXSkuaHRtbChjLm5hdlRleHRbMV0pLmFwcGVuZFRvKHRoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZSkub24oXCJjbGlja1wiLCBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHRoaXMubmV4dChjLm5hdlNwZWVkKVxuICAgICAgfSwgdGhpcykpLCBjLmRvdHNEYXRhIHx8ICh0aGlzLl90ZW1wbGF0ZXMgPSBbYShcIjxkaXY+XCIpLmFkZENsYXNzKGMuZG90Q2xhc3MpLmFwcGVuZChhKFwiPHNwYW4+XCIpKS5wcm9wKFwib3V0ZXJIVE1MXCIpXSksIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZSA9IChjLmRvdHNDb250YWluZXIgPyBhKGMuZG90c0NvbnRhaW5lcikgOiBhKFwiPGRpdj5cIikuYWRkQ2xhc3MoYy5kb3RzQ2xhc3MpLmFwcGVuZFRvKHRoaXMuJGVsZW1lbnQpKS5hZGRDbGFzcyhcImRpc2FibGVkXCIpLCB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUub24oXCJjbGlja1wiLCBcImRpdlwiLCBhLnByb3h5KGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHZhciBkID0gYShiLnRhcmdldCkucGFyZW50KCkuaXModGhpcy5fY29udHJvbHMuJGFic29sdXRlKSA/IGEoYi50YXJnZXQpLmluZGV4KCkgOiBhKGIudGFyZ2V0KS5wYXJlbnQoKS5pbmRleCgpO1xuICAgICAgICBiLnByZXZlbnREZWZhdWx0KCksIHRoaXMudG8oZCwgYy5kb3RzU3BlZWQpXG4gICAgICB9LCB0aGlzKSk7XG4gICAgICBmb3IgKGIgaW4gdGhpcy5fb3ZlcnJpZGVzKSB0aGlzLl9jb3JlW2JdID0gYS5wcm94eSh0aGlzW2JdLCB0aGlzKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYSwgYiwgYywgZDtcbiAgICAgIGZvciAoYSBpbiB0aGlzLl9oYW5kbGVycykgdGhpcy4kZWxlbWVudC5vZmYoYSwgdGhpcy5faGFuZGxlcnNbYV0pO1xuICAgICAgZm9yIChiIGluIHRoaXMuX2NvbnRyb2xzKSB0aGlzLl9jb250cm9sc1tiXS5yZW1vdmUoKTtcbiAgICAgIGZvciAoZCBpbiB0aGlzLm92ZXJpZGVzKSB0aGlzLl9jb3JlW2RdID0gdGhpcy5fb3ZlcnJpZGVzW2RdO1xuICAgICAgZm9yIChjIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbY10gJiYgKHRoaXNbY10gPSBudWxsKVxuICAgIH0sIGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhLCBiLCBjLCBkID0gdGhpcy5fY29yZS5jbG9uZXMoKS5sZW5ndGggLyAyLCBlID0gZCArIHRoaXMuX2NvcmUuaXRlbXMoKS5sZW5ndGgsXG4gICAgICAgIGYgPSB0aGlzLl9jb3JlLm1heGltdW0oITApLCBnID0gdGhpcy5fY29yZS5zZXR0aW5ncyxcbiAgICAgICAgaCA9IGcuY2VudGVyIHx8IGcuYXV0b1dpZHRoIHx8IGcuZG90c0RhdGEgPyAxIDogZy5kb3RzRWFjaCB8fCBnLml0ZW1zO1xuICAgICAgaWYgKFwicGFnZVwiICE9PSBnLnNsaWRlQnkgJiYgKGcuc2xpZGVCeSA9IE1hdGgubWluKGcuc2xpZGVCeSwgZy5pdGVtcykpLCBnLmRvdHMgfHwgXCJwYWdlXCIgPT0gZy5zbGlkZUJ5KSBmb3IgKHRoaXMuX3BhZ2VzID0gW10sIGEgPSBkLCBiID0gMCwgYyA9IDA7IGEgPCBlOyBhKyspIHtcbiAgICAgICAgaWYgKGIgPj0gaCB8fCAwID09PSBiKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX3BhZ2VzLnB1c2goe1xuICAgICAgICAgICAgc3RhcnQ6IE1hdGgubWluKGYsIGEgLSBkKSxcbiAgICAgICAgICAgIGVuZDogYSAtIGQgKyBoIC0gMVxuICAgICAgICAgIH0pLCBNYXRoLm1pbihmLCBhIC0gZCkgPT09IGYpIGJyZWFrO1xuICAgICAgICAgIGIgPSAwLCArK2NcbiAgICAgICAgfVxuICAgICAgICBiICs9IHRoaXMuX2NvcmUubWVyZ2Vycyh0aGlzLl9jb3JlLnJlbGF0aXZlKGEpKVxuICAgICAgfVxuICAgIH0sIGUucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYiwgYyA9IHRoaXMuX2NvcmUuc2V0dGluZ3MsIGQgPSB0aGlzLl9jb3JlLml0ZW1zKCkubGVuZ3RoIDw9IGMuaXRlbXMsXG4gICAgICAgIGUgPSB0aGlzLl9jb3JlLnJlbGF0aXZlKHRoaXMuX2NvcmUuY3VycmVudCgpKSwgZiA9IGMubG9vcCB8fCBjLnJld2luZDtcbiAgICAgIHRoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZS50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsICFjLm5hdiB8fCBkKSwgYy5uYXYgJiYgKHRoaXMuX2NvbnRyb2xzLiRwcmV2aW91cy50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsICFmICYmIGUgPD0gdGhpcy5fY29yZS5taW5pbXVtKCEwKSksIHRoaXMuX2NvbnRyb2xzLiRuZXh0LnRvZ2dsZUNsYXNzKFwiZGlzYWJsZWRcIiwgIWYgJiYgZSA+PSB0aGlzLl9jb3JlLm1heGltdW0oITApKSksIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsICFjLmRvdHMgfHwgZCksIGMuZG90cyAmJiAoYiA9IHRoaXMuX3BhZ2VzLmxlbmd0aCAtIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5jaGlsZHJlbigpLmxlbmd0aCwgYy5kb3RzRGF0YSAmJiAwICE9PSBiID8gdGhpcy5fY29udHJvbHMuJGFic29sdXRlLmh0bWwodGhpcy5fdGVtcGxhdGVzLmpvaW4oXCJcIikpIDogYiA+IDAgPyB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUuYXBwZW5kKG5ldyBBcnJheShiICsgMSkuam9pbih0aGlzLl90ZW1wbGF0ZXNbMF0pKSA6IGIgPCAwICYmIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5jaGlsZHJlbigpLnNsaWNlKGIpLnJlbW92ZSgpLCB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUuZmluZChcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5jaGlsZHJlbigpLmVxKGEuaW5BcnJheSh0aGlzLmN1cnJlbnQoKSwgdGhpcy5fcGFnZXMpKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSlcbiAgICB9LCBlLnByb3RvdHlwZS5vblRyaWdnZXIgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdmFyIGMgPSB0aGlzLl9jb3JlLnNldHRpbmdzO1xuICAgICAgYi5wYWdlID0ge1xuICAgICAgICBpbmRleDogYS5pbkFycmF5KHRoaXMuY3VycmVudCgpLCB0aGlzLl9wYWdlcyksXG4gICAgICAgIGNvdW50OiB0aGlzLl9wYWdlcy5sZW5ndGgsXG4gICAgICAgIHNpemU6IGMgJiYgKGMuY2VudGVyIHx8IGMuYXV0b1dpZHRoIHx8IGMuZG90c0RhdGEgPyAxIDogYy5kb3RzRWFjaCB8fCBjLml0ZW1zKVxuICAgICAgfVxuICAgIH0sIGUucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYiA9IHRoaXMuX2NvcmUucmVsYXRpdmUodGhpcy5fY29yZS5jdXJyZW50KCkpO1xuICAgICAgcmV0dXJuIGEuZ3JlcCh0aGlzLl9wYWdlcywgYS5wcm94eShmdW5jdGlvbiAoYSwgYykge1xuICAgICAgICByZXR1cm4gYS5zdGFydCA8PSBiICYmIGEuZW5kID49IGJcbiAgICAgIH0sIHRoaXMpKS5wb3AoKVxuICAgIH0sIGUucHJvdG90eXBlLmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIHZhciBjLCBkLCBlID0gdGhpcy5fY29yZS5zZXR0aW5ncztcbiAgICAgIHJldHVybiBcInBhZ2VcIiA9PSBlLnNsaWRlQnkgPyAoYyA9IGEuaW5BcnJheSh0aGlzLmN1cnJlbnQoKSwgdGhpcy5fcGFnZXMpLCBkID0gdGhpcy5fcGFnZXMubGVuZ3RoLCBiID8gKytjIDogLS1jLCBjID0gdGhpcy5fcGFnZXNbKGMgJSBkICsgZCkgJSBkXS5zdGFydCkgOiAoYyA9IHRoaXMuX2NvcmUucmVsYXRpdmUodGhpcy5fY29yZS5jdXJyZW50KCkpLCBkID0gdGhpcy5fY29yZS5pdGVtcygpLmxlbmd0aCwgYiA/IGMgKz0gZS5zbGlkZUJ5IDogYyAtPSBlLnNsaWRlQnkpLCBjXG4gICAgfSwgZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICBhLnByb3h5KHRoaXMuX292ZXJyaWRlcy50bywgdGhpcy5fY29yZSkodGhpcy5nZXRQb3NpdGlvbighMCksIGIpXG4gICAgfSwgZS5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICBhLnByb3h5KHRoaXMuX292ZXJyaWRlcy50bywgdGhpcy5fY29yZSkodGhpcy5nZXRQb3NpdGlvbighMSksIGIpXG4gICAgfSwgZS5wcm90b3R5cGUudG8gPSBmdW5jdGlvbiAoYiwgYywgZCkge1xuICAgICAgdmFyIGU7XG4gICAgICAhZCAmJiB0aGlzLl9wYWdlcy5sZW5ndGggPyAoZSA9IHRoaXMuX3BhZ2VzLmxlbmd0aCwgYS5wcm94eSh0aGlzLl9vdmVycmlkZXMudG8sIHRoaXMuX2NvcmUpKHRoaXMuX3BhZ2VzWyhiICUgZSArIGUpICUgZV0uc3RhcnQsIGMpKSA6IGEucHJveHkodGhpcy5fb3ZlcnJpZGVzLnRvLCB0aGlzLl9jb3JlKShiLCBjKVxuICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5OYXZpZ2F0aW9uID0gZVxuICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcbiAgICB2YXIgZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICB0aGlzLl9jb3JlID0gYywgdGhpcy5faGFzaGVzID0ge30sIHRoaXMuJGVsZW1lbnQgPSB0aGlzLl9jb3JlLiRlbGVtZW50LCB0aGlzLl9oYW5kbGVycyA9IHtcbiAgICAgICAgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYykge1xuICAgICAgICAgIGMubmFtZXNwYWNlICYmIFwiVVJMSGFzaFwiID09PSB0aGlzLl9jb3JlLnNldHRpbmdzLnN0YXJ0UG9zaXRpb24gJiYgYShiKS50cmlnZ2VyKFwiaGFzaGNoYW5nZS5vd2wubmF2aWdhdGlvblwiKVxuICAgICAgICB9LCB0aGlzKSwgXCJwcmVwYXJlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYikge1xuICAgICAgICAgIGlmIChiLm5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdmFyIGMgPSBhKGIuY29udGVudCkuZmluZChcIltkYXRhLWhhc2hdXCIpLmFkZEJhY2soXCJbZGF0YS1oYXNoXVwiKS5hdHRyKFwiZGF0YS1oYXNoXCIpO1xuICAgICAgICAgICAgaWYgKCFjKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLl9oYXNoZXNbY10gPSBiLmNvbnRlbnRcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMpLCBcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICBpZiAoYy5uYW1lc3BhY2UgJiYgXCJwb3NpdGlvblwiID09PSBjLnByb3BlcnR5Lm5hbWUpIHtcbiAgICAgICAgICAgIHZhciBkID0gdGhpcy5fY29yZS5pdGVtcyh0aGlzLl9jb3JlLnJlbGF0aXZlKHRoaXMuX2NvcmUuY3VycmVudCgpKSksXG4gICAgICAgICAgICAgIGUgPSBhLm1hcCh0aGlzLl9oYXNoZXMsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT09IGQgPyBiIDogbnVsbFxuICAgICAgICAgICAgICB9KS5qb2luKCk7XG4gICAgICAgICAgICBpZiAoIWUgfHwgYi5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpID09PSBlKSByZXR1cm47XG4gICAgICAgICAgICBiLmxvY2F0aW9uLmhhc2ggPSBlXG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKVxuICAgICAgfSwgdGhpcy5fY29yZS5vcHRpb25zID0gYS5leHRlbmQoe30sIGUuRGVmYXVsdHMsIHRoaXMuX2NvcmUub3B0aW9ucyksIHRoaXMuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpLCBhKGIpLm9uKFwiaGFzaGNoYW5nZS5vd2wubmF2aWdhdGlvblwiLCBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBjID0gYi5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKSwgZSA9IHRoaXMuX2NvcmUuJHN0YWdlLmNoaWxkcmVuKCksXG4gICAgICAgICAgZiA9IHRoaXMuX2hhc2hlc1tjXSAmJiBlLmluZGV4KHRoaXMuX2hhc2hlc1tjXSk7XG4gICAgICAgIGYgIT09IGQgJiYgZiAhPT0gdGhpcy5fY29yZS5jdXJyZW50KCkgJiYgdGhpcy5fY29yZS50byh0aGlzLl9jb3JlLnJlbGF0aXZlKGYpLCAhMSwgITApXG4gICAgICB9LCB0aGlzKSlcbiAgICB9O1xuICAgIGUuRGVmYXVsdHMgPSB7VVJMaGFzaExpc3RlbmVyOiAhMX0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYywgZDtcbiAgICAgIGEoYikub2ZmKFwiaGFzaGNoYW5nZS5vd2wubmF2aWdhdGlvblwiKTtcbiAgICAgIGZvciAoYyBpbiB0aGlzLl9oYW5kbGVycykgdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoYywgdGhpcy5faGFuZGxlcnNbY10pO1xuICAgICAgZm9yIChkIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbZF0gJiYgKHRoaXNbZF0gPSBudWxsKVxuICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5IYXNoID0gZVxuICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICBmdW5jdGlvbiBlKGIsIGMpIHtcbiAgICAgIHZhciBlID0gITEsIGYgPSBiLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgYi5zbGljZSgxKTtcbiAgICAgIHJldHVybiBhLmVhY2goKGIgKyBcIiBcIiArIGguam9pbihmICsgXCIgXCIpICsgZikuc3BsaXQoXCIgXCIpLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBpZiAoZ1tiXSAhPT0gZCkgcmV0dXJuIGUgPSAhYyB8fCBiLCAhMVxuICAgICAgfSksIGVcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmKGEpIHtcbiAgICAgIHJldHVybiBlKGEsICEwKVxuICAgIH1cblxuICAgIHZhciBnID0gYShcIjxzdXBwb3J0PlwiKS5nZXQoMCkuc3R5bGUsIGggPSBcIldlYmtpdCBNb3ogTyBtc1wiLnNwbGl0KFwiIFwiKSwgaSA9IHtcbiAgICAgIHRyYW5zaXRpb246IHtcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgV2Via2l0VHJhbnNpdGlvbjogXCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIsXG4gICAgICAgICAgTW96VHJhbnNpdGlvbjogXCJ0cmFuc2l0aW9uZW5kXCIsXG4gICAgICAgICAgT1RyYW5zaXRpb246IFwib1RyYW5zaXRpb25FbmRcIixcbiAgICAgICAgICB0cmFuc2l0aW9uOiBcInRyYW5zaXRpb25lbmRcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgIGVuZDoge1xuICAgICAgICAgIFdlYmtpdEFuaW1hdGlvbjogXCJ3ZWJraXRBbmltYXRpb25FbmRcIixcbiAgICAgICAgICBNb3pBbmltYXRpb246IFwiYW5pbWF0aW9uZW5kXCIsXG4gICAgICAgICAgT0FuaW1hdGlvbjogXCJvQW5pbWF0aW9uRW5kXCIsXG4gICAgICAgICAgYW5pbWF0aW9uOiBcImFuaW1hdGlvbmVuZFwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBqID0ge1xuICAgICAgY3NzdHJhbnNmb3JtczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISFlKFwidHJhbnNmb3JtXCIpXG4gICAgICB9LCBjc3N0cmFuc2Zvcm1zM2Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhZShcInBlcnNwZWN0aXZlXCIpXG4gICAgICB9LCBjc3N0cmFuc2l0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISFlKFwidHJhbnNpdGlvblwiKVxuICAgICAgfSwgY3NzYW5pbWF0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISFlKFwiYW5pbWF0aW9uXCIpXG4gICAgICB9XG4gICAgfTtcbiAgICBqLmNzc3RyYW5zaXRpb25zKCkgJiYgKGEuc3VwcG9ydC50cmFuc2l0aW9uID0gbmV3IFN0cmluZyhmKFwidHJhbnNpdGlvblwiKSksIGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCA9IGkudHJhbnNpdGlvbi5lbmRbYS5zdXBwb3J0LnRyYW5zaXRpb25dKSwgai5jc3NhbmltYXRpb25zKCkgJiYgKGEuc3VwcG9ydC5hbmltYXRpb24gPSBuZXcgU3RyaW5nKGYoXCJhbmltYXRpb25cIikpLCBhLnN1cHBvcnQuYW5pbWF0aW9uLmVuZCA9IGkuYW5pbWF0aW9uLmVuZFthLnN1cHBvcnQuYW5pbWF0aW9uXSksIGouY3NzdHJhbnNmb3JtcygpICYmIChhLnN1cHBvcnQudHJhbnNmb3JtID0gbmV3IFN0cmluZyhmKFwidHJhbnNmb3JtXCIpKSwgYS5zdXBwb3J0LnRyYW5zZm9ybTNkID0gai5jc3N0cmFuc2Zvcm1zM2QoKSlcbiAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCk7XG5cbiAgLy8gVHdvIFJvdyBDYXJvdXNlbFxuICA7KGZ1bmN0aW9uICgkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHtcbiAgICBPd2wycm93ID0gZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgICB0aGlzLm93bCA9IHNjb3BlO1xuICAgICAgdGhpcy5vd2wub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBPd2wycm93LkRlZmF1bHRzLCB0aGlzLm93bC5vcHRpb25zKTtcbiAgICAgIC8vbGluayBjYWxsYmFjayBldmVudHMgd2l0aCBvd2wgY2Fyb3VzZWwgaGVyZVxuXG4gICAgICB0aGlzLmhhbmRsZXJzID0ge1xuICAgICAgICAnaW5pdGlhbGl6ZS5vd2wuY2Fyb3VzZWwnOiAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKHRoaXMub3dsLnNldHRpbmdzLm93bDJyb3cpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGQycm93KHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcylcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3dsLiRlbGVtZW50Lm9uKHRoaXMuaGFuZGxlcnMpO1xuICAgIH07XG5cbiAgICBPd2wycm93LkRlZmF1bHRzID0ge1xuICAgICAgb3dsMnJvdzogZmFsc2UsXG4gICAgICBvd2wycm93VGFyZ2V0OiAnc2J5X2l0ZW0nLFxuICAgICAgb3dsMnJvd0NvbnRhaW5lcjogJ3NieV9vd2wycm93LWl0ZW0nLFxuICAgICAgb3dsMnJvd0RpcmVjdGlvbjogJ3V0ZCcgLy8gbHRyXG4gICAgfTtcblxuICAgIC8vbWVodG9kczpcbiAgICBPd2wycm93LnByb3RvdHlwZS5idWlsZDJyb3cgPSBmdW5jdGlvbiAodGhpc1Njb3BlKSB7XG5cbiAgICAgIHZhciBjYXJvdXNlbCA9ICQodGhpc1Njb3BlLm93bC4kZWxlbWVudCk7XG4gICAgICB2YXIgY2Fyb3VzZWxJdGVtcyA9IGNhcm91c2VsLmZpbmQoJy4nICsgdGhpc1Njb3BlLm93bC5vcHRpb25zLm93bDJyb3dUYXJnZXQpO1xuXG4gICAgICB2YXIgYUV2ZW5FbGVtZW50cyA9IFtdO1xuICAgICAgdmFyIGFPZGRFbGVtZW50cyA9IFtdO1xuXG4gICAgICAkLmVhY2goY2Fyb3VzZWxJdGVtcywgZnVuY3Rpb24gKGluZGV4LCBpdGVtKSB7XG4gICAgICAgIGlmIChpbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICBhRXZlbkVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYU9kZEVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvL2Nhcm91c2VsLmVtcHR5KCk7XG5cbiAgICAgIHN3aXRjaCAodGhpc1Njb3BlLm93bC5vcHRpb25zLm93bDJyb3dEaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnbHRyJzpcbiAgICAgICAgICB0aGlzU2NvcGUubGVmdFRvcmlnaHQodGhpc1Njb3BlLCBjYXJvdXNlbCwgY2Fyb3VzZWxJdGVtcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdCA6XG4gICAgICAgICAgdGhpc1Njb3BlLnVwVG9kb3duKHRoaXNTY29wZSwgYUV2ZW5FbGVtZW50cywgYU9kZEVsZW1lbnRzLCBjYXJvdXNlbCk7XG4gICAgICB9XG5cbiAgICB9O1xuXG4gICAgT3dsMnJvdy5wcm90b3R5cGUubGVmdFRvcmlnaHQgPSBmdW5jdGlvbiAodGhpc1Njb3BlLCBjYXJvdXNlbCwgY2Fyb3VzZWxJdGVtcykge1xuXG4gICAgICB2YXIgbzJ3Q29udGFpbmVyQ2xhc3MgPSB0aGlzU2NvcGUub3dsLm9wdGlvbnMub3dsMnJvd0NvbnRhaW5lcjtcbiAgICAgIHZhciBvd2xNYXJnaW4gPSB0aGlzU2NvcGUub3dsLm9wdGlvbnMubWFyZ2luO1xuICAgICAgdmFyIGNhcm91c2VsSXRlbXNMZW5ndGggPSBjYXJvdXNlbEl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciBmaXJzQXJyID0gW107XG4gICAgICB2YXIgc2Vjb25kQXJyID0gW107XG5cbiAgICAgIGlmIChjYXJvdXNlbEl0ZW1zTGVuZ3RoICUgMiA9PT0gMSkge1xuICAgICAgICBjYXJvdXNlbEl0ZW1zTGVuZ3RoID0gKChjYXJvdXNlbEl0ZW1zTGVuZ3RoIC0gMSkgLyAyKSArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXJvdXNlbEl0ZW1zTGVuZ3RoID0gY2Fyb3VzZWxJdGVtc0xlbmd0aCAvIDI7XG4gICAgICB9XG5cbiAgICAgICQuZWFjaChjYXJvdXNlbEl0ZW1zLCBmdW5jdGlvbiAoaW5kZXgsIGl0ZW0pIHtcblxuXG4gICAgICAgIGlmIChpbmRleCA8IGNhcm91c2VsSXRlbXNMZW5ndGgpIHtcbiAgICAgICAgICBmaXJzQXJyLnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Vjb25kQXJyLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAkLmVhY2goZmlyc0FyciwgZnVuY3Rpb24gKGluZGV4LCBpdGVtKSB7XG4gICAgICAgIHZhciByb3dDb250YWluZXIgPSAkKCc8ZGl2IGNsYXNzPVwiJyArIG8yd0NvbnRhaW5lckNsYXNzICsgJ1wiLz4nKTtcblxuICAgICAgICB2YXIgZmlyc3RSb3dFbGVtZW50ID0gZmlyc0FycltpbmRleF07XG4gICAgICAgIGZpcnN0Um93RWxlbWVudC5zdHlsZS5tYXJnaW5Cb3R0b20gPSBvd2xNYXJnaW4gKyAncHgnO1xuXG4gICAgICAgIHJvd0NvbnRhaW5lclxuICAgICAgICAgIC5hcHBlbmQoZmlyc3RSb3dFbGVtZW50KVxuICAgICAgICAgIC5hcHBlbmQoc2Vjb25kQXJyW2luZGV4XSk7XG5cbiAgICAgICAgY2Fyb3VzZWwuYXBwZW5kKHJvd0NvbnRhaW5lcik7XG4gICAgICB9KTtcblxuICAgIH07XG5cbiAgICBPd2wycm93LnByb3RvdHlwZS51cFRvZG93biA9IGZ1bmN0aW9uICh0aGlzU2NvcGUsIGFFdmVuRWxlbWVudHMsIGFPZGRFbGVtZW50cywgY2Fyb3VzZWwpIHtcblxuICAgICAgdmFyIG8yd0NvbnRhaW5lckNsYXNzID0gdGhpc1Njb3BlLm93bC5vcHRpb25zLm93bDJyb3dDb250YWluZXI7XG4gICAgICB2YXIgb3dsTWFyZ2luID0gdGhpc1Njb3BlLm93bC5vcHRpb25zLm1hcmdpbjtcblxuICAgICAgJC5lYWNoKGFFdmVuRWxlbWVudHMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuXG4gICAgICAgIHZhciByb3dDb250YWluZXIgPSAkKCc8ZGl2IGNsYXNzPVwiJyArIG8yd0NvbnRhaW5lckNsYXNzICsgJ1wiLz4nKTtcbiAgICAgICAgdmFyIGV2ZW5FbGVtZW50ID0gYUV2ZW5FbGVtZW50c1tpbmRleF07XG5cbiAgICAgICAgZXZlbkVsZW1lbnQuc3R5bGUubWFyZ2luQm90dG9tID0gb3dsTWFyZ2luICsgJ3B4JztcblxuICAgICAgICByb3dDb250YWluZXJcbiAgICAgICAgICAuYXBwZW5kKGV2ZW5FbGVtZW50KVxuICAgICAgICAgIC5hcHBlbmQoYU9kZEVsZW1lbnRzW2luZGV4XSk7XG5cbiAgICAgICAgY2Fyb3VzZWwuYXBwZW5kKHJvd0NvbnRhaW5lcik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRGVzdHJveXMgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBPd2wycm93LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGhhbmRsZXIsIHByb3BlcnR5O1xuICAgIH07XG5cbiAgICAkLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnNbJ293bDJyb3cnXSA9IE93bDJyb3c7XG4gIH0pKHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KTtcblxuICAoZnVuY3Rpb24oJCl7XG5cbiAgICBmdW5jdGlvbiBzYnlBZGRWaXNpYmlsaXR5TGlzdGVuZXIoKSB7XG4gICAgICAvKiBEZXRlY3Qgd2hlbiBlbGVtZW50IGJlY29tZXMgdmlzaWJsZS4gVXNlZCBmb3Igd2hlbiB0aGUgZmVlZCBpcyBpbml0aWFsbHkgaGlkZGVuLCBpbiBhIHRhYiBmb3IgZXhhbXBsZS4gaHR0cHM6Ly9naXRodWIuY29tL3NoYXVuYm93ZS9qcXVlcnkudmlzaWJpbGl0eUNoYW5nZWQgKi9cbiAgICAgICFmdW5jdGlvbiAoaSkge1xuICAgICAgICB2YXIgbiA9IHtcbiAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIH0sIHJ1bk9uTG9hZDogITAsIGZyZXF1ZW5jeTogMTAwLCBzYnlQcmV2aW91c1Zpc2liaWxpdHk6IG51bGxcbiAgICAgICAgfSwgYyA9IHt9O1xuICAgICAgICBjLnNieUNoZWNrVmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChpLCBuKSB7XG4gICAgICAgICAgaWYgKGpRdWVyeS5jb250YWlucyhkb2N1bWVudCwgaVswXSkpIHtcbiAgICAgICAgICAgIHZhciBlID0gbi5zYnlQcmV2aW91c1Zpc2liaWxpdHksIHQgPSBpLmlzKFwiOnZpc2libGVcIik7XG4gICAgICAgICAgICBuLnNieVByZXZpb3VzVmlzaWJpbGl0eSA9IHQsIG51bGwgPT0gZSA/IG4ucnVuT25Mb2FkICYmIG4uY2FsbGJhY2soaSwgdCkgOiBlICE9PSB0ICYmIG4uY2FsbGJhY2soaSwgdCksIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBjLnNieUNoZWNrVmlzaWJpbGl0eShpLCBuKVxuICAgICAgICAgICAgfSwgbi5mcmVxdWVuY3kpXG4gICAgICAgICAgfVxuICAgICAgICB9LCBpLmZuLnNieVZpc2liaWxpdHlDaGFuZ2VkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgdCA9IGkuZXh0ZW5kKHt9LCBuLCBlKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGMuc2J5Q2hlY2tWaXNpYmlsaXR5KGkodGhpcyksIHQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfShqUXVlcnkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFNieSgpIHtcbiAgICAgIHRoaXMuZmVlZHMgPSB7fTtcbiAgICAgIHRoaXMuY3RhcyA9IHt9O1xuICAgICAgdGhpcy5vcHRpb25zID0gc2J5T3B0aW9ucztcbiAgICAgIHRoaXMuaXNUb3VjaCA9IHNieUlzVG91Y2goKTtcbiAgICB9XG5cbiAgICBTYnkucHJvdG90eXBlID0ge1xuICAgICAgY3JlYXRlUGFnZTogZnVuY3Rpb24gKGNyZWF0ZUZlZWRzLCBjcmVhdGVGZWVkc0FyZ3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5YWpheHVybCA9PT0gJ3VuZGVmaW5lZCcgfHwgd2luZG93LnNieWFqYXh1cmwuaW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpID09PSAtMSkge1xuICAgICAgICAgIHdpbmRvdy5zYnlhamF4dXJsID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgJy93cC1hZG1pbi9hZG1pbi1hamF4LnBocCc7XG4gICAgICAgIH1cblxuICAgICAgICAkKCcuc2J5X25vX2pzX2Vycm9yX21lc3NhZ2UnKS5yZW1vdmUoKTtcbiAgICAgICAgJCgnLnNieV9ub19qcycpLnJlbW92ZUNsYXNzKCdzYnlfbm9fanMnKTtcblxuICAgICAgICBjcmVhdGVGZWVkcyhjcmVhdGVGZWVkc0FyZ3MpO1xuICAgICAgfSxcbiAgICAgIG1heWJlQWRkWVRBUEk6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgeW91dHViZVNjcmlwdElkID0gXCJzYnkteW91dHViZS1hcGlcIjtcbiAgICAgICAgdmFyIHlvdXR1YmVTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh5b3V0dWJlU2NyaXB0SWQpO1xuXG4gICAgICAgIGlmICh5b3V0dWJlU2NyaXB0ID09PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgdmFyIGZpcnN0U2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIilbMF07XG5cbiAgICAgICAgICB0YWcuc3JjID0gXCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9pZnJhbWVfYXBpXCI7XG4gICAgICAgICAgdGFnLmlkID0geW91dHViZVNjcmlwdElkO1xuICAgICAgICAgIGZpcnN0U2NyaXB0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRhZywgZmlyc3RTY3JpcHQpO1xuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjcmVhdGVMaWdodGJveDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBsYkJ1aWxkZXIgPSBzYnlHZXRsaWdodGJveEJ1aWxkZXIoKTtcbiAgICAgICAgdmFyIHNieV9sYl9kZWxheSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHNieV90aW1lciA9IDA7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzYnlfY2FsbGJhY2ssIHNieV9tcykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHNieV90aW1lcik7XG4gICAgICAgICAgICBzYnlfdGltZXIgPSBzZXRUaW1lb3V0KHNieV9jYWxsYmFjaywgc2J5X21zKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KSgpO1xuICAgICAgICBqUXVlcnkod2luZG93KS5vbigncmVzaXplJyxmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2J5X2xiX2RlbGF5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxiQnVpbGRlci5hZnRlclJlc2l6ZSgpO1xuICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvKiBMaWdodGJveCB2Mi43LjEgYnkgTG9rZXNoIERoYWthciAtIGh0dHA6Ly9sb2tlc2hkaGFrYXIuY29tL3Byb2plY3RzL2xpZ2h0Ym94Mi8gLSBIZWF2aWx5IG1vZGlmaWVkIHNwZWNpZmljYWxseSBmb3IgdGhpcyBwbHVnaW4gKi9cbiAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBhID0galF1ZXJ5LFxuICAgICAgICAgICAgYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBhKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFkZUR1cmF0aW9uID0gNTAwLCB0aGlzLmZpdEltYWdlc0luVmlld3BvcnQgPSAhMCwgdGhpcy5yZXNpemVEdXJhdGlvbiA9IDcwMCwgdGhpcy5wb3NpdGlvbkZyb21Ub3AgPSA1MCwgdGhpcy5zaG93SW1hZ2VOdW1iZXJMYWJlbCA9ICEwLCB0aGlzLmFsd2F5c1Nob3dOYXZPblRvdWNoRGV2aWNlcyA9ICExLCB0aGlzLndyYXBBcm91bmQgPSAhMVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBhLnByb3RvdHlwZS5hbGJ1bUxhYmVsID0gZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhICsgXCIgLyBcIiArIGJcbiAgICAgICAgICAgICAgfSwgYVxuICAgICAgICAgICAgfSgpLFxuICAgICAgICAgICAgYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBiKGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBhLCB0aGlzLmFsYnVtID0gW10sIHRoaXMuY3VycmVudEltYWdlSW5kZXggPSB2b2lkIDAsIHRoaXMuaW5pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpLCB0aGlzLmJ1aWxkKClcbiAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGEoXCJib2R5XCIpLm9uKFwiY2xpY2tcIiwgXCJhW2RhdGEtc2J5LWxpZ2h0Ym94XVwiLCBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYi5zdGFydChhKGMuY3VycmVudFRhcmdldCkpLCAhMVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGEoXCJcIitcbiAgICAgICAgICAgICAgICAgIGxiQnVpbGRlci50ZW1wbGF0ZSgpKS5hcHBlbmRUbyhhKFwiYm9keVwiKSksIHRoaXMuJGxpZ2h0Ym94ID0gYShcIiNzYnlfbGlnaHRib3hcIiksIHRoaXMuJG92ZXJsYXkgPSBhKFwiI3NieV9saWdodGJveE92ZXJsYXlcIiksIHRoaXMuJG91dGVyQ29udGFpbmVyID0gdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItb3V0ZXJDb250YWluZXJcIiksIHRoaXMuJGNvbnRhaW5lciA9IHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWNvbnRhaW5lclwiKSwgdGhpcy5jb250YWluZXJUb3BQYWRkaW5nID0gcGFyc2VJbnQodGhpcy4kY29udGFpbmVyLmNzcyhcInBhZGRpbmctdG9wXCIpLCAxMCksIHRoaXMuY29udGFpbmVyUmlnaHRQYWRkaW5nID0gcGFyc2VJbnQodGhpcy4kY29udGFpbmVyLmNzcyhcInBhZGRpbmctcmlnaHRcIiksIDEwKSwgdGhpcy5jb250YWluZXJCb3R0b21QYWRkaW5nID0gcGFyc2VJbnQodGhpcy4kY29udGFpbmVyLmNzcyhcInBhZGRpbmctYm90dG9tXCIpLCAxMCksIHRoaXMuY29udGFpbmVyTGVmdFBhZGRpbmcgPSBwYXJzZUludCh0aGlzLiRjb250YWluZXIuY3NzKFwicGFkZGluZy1sZWZ0XCIpLCAxMCksIHRoaXMuJG92ZXJsYXkuaGlkZSgpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYi5lbmQoKSwgITFcbiAgICAgICAgICAgICAgICB9KSwgalF1ZXJ5KGRvY3VtZW50KS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCwgYiwgYykge1xuICAgICAgICAgICAgICAgICAgLy9GYWRlIG91dCB0aGUgbGlnaHRib3ggaWYgY2xpY2sgYW55d2hlcmUgb3V0c2lkZSBvZiB0aGUgdHdvIGVsZW1lbnRzIGRlZmluZWQgYmVsb3dcbiAgICAgICAgICAgICAgICAgIGlmICghalF1ZXJ5KGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnLnNieV9sYi1vdXRlckNvbnRhaW5lcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWpRdWVyeShldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5zYnlfbGItZGF0YUNvbnRhaW5lcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vRmFkZSBvdXQgbGlnaHRib3hcbiAgICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NieV9saWdodGJveE92ZXJsYXksICNzYnlfbGlnaHRib3gnKS5mYWRlT3V0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSwgdGhpcy4kbGlnaHRib3guaGlkZSgpLFxuICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2J5X2xpZ2h0Ym94T3ZlcmxheScpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzYnlfbGlnaHRib3hcIiA9PT0gYShjLnRhcmdldCkuYXR0cihcImlkXCIpICYmIGIuZW5kKCksICExXG4gICAgICAgICAgICAgICAgICB9KSwgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItcHJldlwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBiLmNoYW5nZUltYWdlKDAgPT09IGIuY3VycmVudEltYWdlSW5kZXggPyBiLmFsYnVtLmxlbmd0aCAtIDEgOiBiLmN1cnJlbnRJbWFnZUluZGV4IC0gMSksICExXG4gICAgICAgICAgICAgICAgfSksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWNvbnRhaW5lclwiKS5vbihcInN3aXBlcmlnaHRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGIuY2hhbmdlSW1hZ2UoMCA9PT0gYi5jdXJyZW50SW1hZ2VJbmRleCA/IGIuYWxidW0ubGVuZ3RoIC0gMSA6IGIuY3VycmVudEltYWdlSW5kZXggLSAxKSwgITFcbiAgICAgICAgICAgICAgICB9KSwgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbmV4dFwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBiLmNoYW5nZUltYWdlKGIuY3VycmVudEltYWdlSW5kZXggPT09IGIuYWxidW0ubGVuZ3RoIC0gMSA/IDAgOiBiLmN1cnJlbnRJbWFnZUluZGV4ICsgMSksICExXG4gICAgICAgICAgICAgICAgfSksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWNvbnRhaW5lclwiKS5vbihcInN3aXBlbGVmdFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIGxiQnVpbGRlci5wYXVzZVBsYXllcigpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYi5jaGFuZ2VJbWFnZShiLmN1cnJlbnRJbWFnZUluZGV4ID09PSBiLmFsYnVtLmxlbmd0aCAtIDEgPyAwIDogYi5jdXJyZW50SW1hZ2VJbmRleCArIDEpLCAhMVxuICAgICAgICAgICAgICAgIH0pLCB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1sb2FkZXIsIC5zYnlfbGItY2xvc2VcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBiLmVuZCgpLCAhMVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24oYikge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGMoYSkge1xuICAgICAgICAgICAgICAgICAgZC5hbGJ1bS5wdXNoKGxiQnVpbGRlci5nZXREYXRhKGEpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZCA9IHRoaXMsXG4gICAgICAgICAgICAgICAgICBlID0gYSh3aW5kb3cpO1xuICAgICAgICAgICAgICAgIGUub24oXCJyZXNpemVcIiwgYS5wcm94eSh0aGlzLnNpemVPdmVybGF5LCB0aGlzKSksIGEoXCJzZWxlY3QsIG9iamVjdCwgZW1iZWRcIikuY3NzKHtcbiAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICB9KSwgdGhpcy5zaXplT3ZlcmxheSgpLCB0aGlzLmFsYnVtID0gW107XG4gICAgICAgICAgICAgICAgdmFyIGYsIGcgPSAwLFxuICAgICAgICAgICAgICAgICAgaCA9IGIuYXR0cihcImRhdGEtc2J5LWxpZ2h0Ym94XCIpO1xuICAgICAgICAgICAgICAgIGlmIChoKSB7XG4gICAgICAgICAgICAgICAgICBmID0gYShiLnByb3AoXCJ0YWdOYW1lXCIpICsgJ1tkYXRhLXNieS1saWdodGJveD1cIicgKyBoICsgJ1wiXScpO1xuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmLmxlbmd0aDsgaSA9ICsraSkgYyhhKGZbaV0pKSwgZltpXSA9PT0gYlswXSAmJiAoZyA9IGkpXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcImxpZ2h0Ym94XCIgPT09IGIuYXR0cihcInJlbFwiKSkgYyhiKTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGYgPSBhKGIucHJvcChcInRhZ05hbWVcIikgKyAnW3JlbD1cIicgKyBiLmF0dHIoXCJyZWxcIikgKyAnXCJdJyk7XG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGYubGVuZ3RoOyBqID0gKytqKSBjKGEoZltqXSkpLCBmW2pdID09PSBiWzBdICYmIChnID0gailcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGsgPSBlLnNjcm9sbFRvcCgpICsgdGhpcy5vcHRpb25zLnBvc2l0aW9uRnJvbVRvcCxcbiAgICAgICAgICAgICAgICAgIGwgPSBlLnNjcm9sbExlZnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5jc3Moe1xuICAgICAgICAgICAgICAgICAgdG9wOiBrICsgXCJweFwiLFxuICAgICAgICAgICAgICAgICAgbGVmdDogbCArIFwicHhcIlxuICAgICAgICAgICAgICAgIH0pLmZhZGVJbih0aGlzLm9wdGlvbnMuZmFkZUR1cmF0aW9uKSwgdGhpcy5jaGFuZ2VJbWFnZShnKVxuICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5jaGFuZ2VJbWFnZSA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHRoaXM7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlS2V5Ym9hcmROYXYoKTtcbiAgICAgICAgICAgICAgICB2YXIgZCA9IHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWltYWdlXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuJG92ZXJsYXkuZmFkZUluKHRoaXMub3B0aW9ucy5mYWRlRHVyYXRpb24pLCBhKFwiLnNieV9sYi1sb2FkZXJcIikuZmFkZUluKFwic2xvd1wiKSwgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItaW1hZ2UsIC5zYnlfbGItbmF2LCAuc2J5X2xiLXByZXYsIC5zYnlfbGItbmV4dCwgLnNieV9sYi1kYXRhQ29udGFpbmVyLCAuc2J5X2xiLW51bWJlcnMsIC5zYnlfbGItY2FwdGlvblwiKS5oaWRlKCksIHRoaXMuJG91dGVyQ29udGFpbmVyLmFkZENsYXNzKFwiYW5pbWF0aW5nXCIpO1xuICAgICAgICAgICAgICAgIHZhciBlID0gbmV3IEltYWdlO1xuICAgICAgICAgICAgICAgIGUub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZiwgZywgaCwgaSwgaiwgaywgbDtcbiAgICAgICAgICAgICAgICAgIHZhciBzYnlBcnJvd1dpZHRoID0gMTAwO1xuICAgICAgICAgICAgICAgICAgZC5hdHRyKFwic3JjXCIsIGMuYWxidW1bYl0ubGluayksIGYgPSBhKGUpLCBkLndpZHRoKGUud2lkdGgpLCBkLmhlaWdodChlLmhlaWdodCksIGMub3B0aW9ucy5maXRJbWFnZXNJblZpZXdwb3J0ICYmIChsID0gYSh3aW5kb3cpLndpZHRoKCksIGsgPSBhKHdpbmRvdykuaGVpZ2h0KCksIGogPSBsIC0gYy5jb250YWluZXJMZWZ0UGFkZGluZyAtIGMuY29udGFpbmVyUmlnaHRQYWRkaW5nIC0gMjAgLSBzYnlBcnJvd1dpZHRoLCBpID0gayAtIGMuY29udGFpbmVyVG9wUGFkZGluZyAtIGMuY29udGFpbmVyQm90dG9tUGFkZGluZyAtIDE1MCwgKGUud2lkdGggPiBqIHx8IGUuaGVpZ2h0ID4gaSkgJiYgKGUud2lkdGggLyBqID4gZS5oZWlnaHQgLyBpID8gKGggPSBqLCBnID0gcGFyc2VJbnQoZS5oZWlnaHQgLyAoZS53aWR0aCAvIGgpLCAxMCksIGQud2lkdGgoaCksIGQuaGVpZ2h0KGcpKSA6IChnID0gaSwgaCA9IHBhcnNlSW50KGUud2lkdGggLyAoZS5oZWlnaHQgLyBnKSwgMTApLCBkLndpZHRoKGgpLCBkLmhlaWdodChnKSkpKSwgYy5zaXplQ29udGFpbmVyKGQud2lkdGgoKSwgZC5oZWlnaHQoKSlcbiAgICAgICAgICAgICAgICB9LCBlLnNyYyA9IHRoaXMuYWxidW1bYl0ubGluaywgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA9IGJcbiAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuc2l6ZU92ZXJsYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRvdmVybGF5LndpZHRoKGEod2luZG93KS53aWR0aCgpKS5oZWlnaHQoYShkb2N1bWVudCkuaGVpZ2h0KCkpXG4gICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLnNpemVDb250YWluZXIgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYygpIHtcbiAgICAgICAgICAgICAgICAgIGQuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWRhdGFDb250YWluZXJcIikud2lkdGgoZyksIGQuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLXByZXZMaW5rXCIpLmhlaWdodChoKSwgZC4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbmV4dExpbmtcIikuaGVpZ2h0KGgpLCBkLnNob3dJbWFnZSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBkID0gdGhpcyxcbiAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLiRvdXRlckNvbnRhaW5lci5vdXRlcldpZHRoKCksXG4gICAgICAgICAgICAgICAgICBmID0gdGhpcy4kb3V0ZXJDb250YWluZXIub3V0ZXJIZWlnaHQoKSxcbiAgICAgICAgICAgICAgICAgIGcgPSBhICsgdGhpcy5jb250YWluZXJMZWZ0UGFkZGluZyArIHRoaXMuY29udGFpbmVyUmlnaHRQYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgaCA9IGIgKyB0aGlzLmNvbnRhaW5lclRvcFBhZGRpbmcgKyB0aGlzLmNvbnRhaW5lckJvdHRvbVBhZGRpbmc7XG4gICAgICAgICAgICAgICAgZSAhPT0gZyB8fCBmICE9PSBoID8gdGhpcy4kb3V0ZXJDb250YWluZXIuYW5pbWF0ZSh7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogZyxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogaFxuICAgICAgICAgICAgICAgIH0sIHRoaXMub3B0aW9ucy5yZXNpemVEdXJhdGlvbiwgXCJzd2luZ1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIGMoKVxuICAgICAgICAgICAgICAgIH0pIDogYygpXG4gICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLnNob3dJbWFnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWxvYWRlclwiKS5oaWRlKCksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWltYWdlXCIpLmZhZGVJbihcInNsb3dcIiksIHRoaXMudXBkYXRlTmF2KCksIHRoaXMudXBkYXRlRGV0YWlscygpLCB0aGlzLnByZWxvYWROZWlnaGJvcmluZ0ltYWdlcygpLCB0aGlzLmVuYWJsZUtleWJvYXJkTmF2KClcbiAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUudXBkYXRlTmF2ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGEgPSAhMTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJUb3VjaEV2ZW50XCIpLCBhID0gdGhpcy5vcHRpb25zLmFsd2F5c1Nob3dOYXZPblRvdWNoRGV2aWNlcyA/ICEwIDogITFcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChiKSB7fVxuICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLW5hdlwiKS5zaG93KCksIHRoaXMuYWxidW0ubGVuZ3RoID4gMSAmJiAodGhpcy5vcHRpb25zLndyYXBBcm91bmQgPyAoYSAmJiB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1wcmV2LCAuc2J5X2xiLW5leHRcIikuY3NzKFwib3BhY2l0eVwiLCBcIjFcIiksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLXByZXYsIC5zYnlfbGItbmV4dFwiKS5zaG93KCkpIDogKHRoaXMuY3VycmVudEltYWdlSW5kZXggPiAwICYmICh0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1wcmV2XCIpLnNob3coKSwgYSAmJiB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1wcmV2XCIpLmNzcyhcIm9wYWNpdHlcIiwgXCIxXCIpKSwgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA8IHRoaXMuYWxidW0ubGVuZ3RoIC0gMSAmJiAodGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbmV4dFwiKS5zaG93KCksIGEgJiYgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbmV4dFwiKS5jc3MoXCJvcGFjaXR5XCIsIFwiMVwiKSkpKVxuICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS51cGRhdGVEZXRhaWxzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgLyoqIE5FVyBQSE9UTyBBQ1RJT04gKiovXG4gICAgICAgICAgICAgICAgaWYoalF1ZXJ5KCdpZnJhbWUuc2J5X2xiLXBsYXllci1sb2FkZWQnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLnNieV9sYi1wbGF5ZXItcGxhY2Vob2xkZXInKS5yZXBsYWNlV2l0aChqUXVlcnkoJ2lmcmFtZS5zYnlfbGItcGxheWVyLWxvYWRlZCcpKTtcbiAgICAgICAgICAgICAgICAgIGpRdWVyeSgnaWZyYW1lLnNieV9sYi1wbGF5ZXItbG9hZGVkJykucmVtb3ZlQ2xhc3MoJ3NieV9sYi1wbGF5ZXItbG9hZGVkJykuc2hvdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL1N3aXRjaCB2aWRlbyB3aGVuIGVpdGhlciBhIG5ldyBwb3B1cCBvciBuYXZpZ2F0aW5nIHRvIG5ldyBvbmVcbiAgICAgICAgICAgICAgICB2YXIgZmVlZCA9IHdpbmRvdy5zYnkuZmVlZHNbdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XS5mZWVkSW5kZXhdO1xuICAgICAgICAgICAgICAgIGxiQnVpbGRlci5iZWZvcmVQbGF5ZXJTZXR1cCh0aGlzLiRsaWdodGJveCx0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXhdLHRoaXMuY3VycmVudEltYWdlSW5kZXgsdGhpcy5hbGJ1bSxmZWVkKTtcblxuICAgICAgICAgICAgICAgIGlmKCBzYnlfc3VwcG9ydHNfdmlkZW8oKSApe1xuICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2J5X2xpZ2h0Ym94JykucmVtb3ZlQ2xhc3MoJ3NieV92aWRlb19saWdodGJveCcpO1xuICAgICAgICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuY29uc2VudEdpdmVuICYmIHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0udmlkZW8ubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcuc2J5X2dkcHJfbm90aWNlJykucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXllcklEID0gJ3NieV9sYi1wbGF5ZXInO1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJyNzYnlfbGlnaHRib3gnKS5hZGRDbGFzcygnc2J5X3ZpZGVvX2xpZ2h0Ym94Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSB0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXhdLnZpZGVvLFxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5ID0gc2J5T3B0aW9ucy5hdXRvcGxheTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBob3N0OiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBmZWVkLmVtYmVkVVJMLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9JZDogdmlkZW9JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllclZhcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZXN0YnJhbmRpbmc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXk6IGF1dG9wbGF5XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZnRlclN0YXRlQ2hhbmdlKHBsYXllcklELHZpZGVvSUQsZGF0YSwkKCcjJyArIHBsYXllcklEKS5jbG9zZXN0KCcuc2J5X3ZpZGVvX3RodW1ibmFpbF93cmFwJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICBmZWVkLm1heWJlQWRkQ1RBKHBsYXllcklEKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9IG5ldyB3aW5kb3cuWVQuUGxheWVyKHBsYXllcklELCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIubG9hZFZpZGVvQnlJZCh2aWRlb0lEKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG91dGVyQ29udGFpbmVyLnJlbW92ZUNsYXNzKFwiYW5pbWF0aW5nXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1kYXRhQ29udGFpbmVyXCIpLmZhZGVJbih0aGlzLm9wdGlvbnMucmVzaXplRHVyYXRpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiLnNpemVPdmVybGF5KClcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAkKCcjc2J5X2xpZ2h0Ym94IC5zYnlfbGItcGxheWVyJykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQnIDogJCgnI3NieV9saWdodGJveCAuc2J5X2xiLW91dGVyQ29udGFpbmVyJykuaGVpZ2h0KCkrJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd3aWR0aCcgOiAkKCcjc2J5X2xpZ2h0Ym94IC5zYnlfbGItb3V0ZXJDb250YWluZXInKS53aWR0aCgpKydweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAndG9wJzogMFxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRsaWdodGJveC5maW5kKCdpZnJhbWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKCdpZnJhbWUnKS5hdHRyKCd0aXRsZScsdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XS52aWRlb1RpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdWxsSW1hZ2UgPSAkKCcuc2J5X2l0ZW1bZGF0YS12aWRlby1pZD0nICsgdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XS52aWRlbysnXScpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1mdWxsLXJlcycpO1xuICAgICAgICAgICAgICAgICAgICAkKCcuc2J5X2xiLWltYWdlJykuYXR0cignc3JjJyxmdWxsSW1hZ2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRvdXRlckNvbnRhaW5lci5yZW1vdmVDbGFzcyhcImFuaW1hdGluZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItZGF0YUNvbnRhaW5lclwiKS5mYWRlSW4odGhpcy5vcHRpb25zLnJlc2l6ZUR1cmF0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5zaXplT3ZlcmxheSgpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoXCIuc2J5X2xiLWNvbnRhaW5lclwiKS5wcmVwZW5kKCc8YSBocmVmPVwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0nK3RoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0udmlkZW8rJ1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiBjbGFzcz1cInNieV9nZHByX25vdGljZVwiPjxzdmcgc3R5bGU9XCJjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwxKVwiIGNsYXNzPVwic3ZnLWlubGluZS0tZmEgZmEtcGxheSBmYS13LTE0IHNieV9wbGF5YnRuXCIgYXJpYS1sYWJlbD1cIlBsYXlcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWZhLXByb2Nlc3NlZD1cIlwiIGRhdGEtcHJlZml4PVwiZmFcIiBkYXRhLWljb249XCJwbGF5XCIgcm9sZT1cInByZXNlbnRhdGlvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDQ0OCA1MTJcIj48cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00MjQuNCAyMTQuN0w3Mi40IDYuNkM0My44LTEwLjMgMCA2LjEgMCA0Ny45VjQ2NGMwIDM3LjUgNDAuNyA2MC4xIDcyLjQgNDEuM2wzNTItMjA4YzMxLjQtMTguNSAzMS41LTY0LjEgMC04Mi42elwiPjwvcGF0aD48L3N2Zz48L2E+Jyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIuYWZ0ZXJQbGF5ZXJTZXR1cCh0aGlzLiRsaWdodGJveCx0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXhdLHRoaXMuY3VycmVudEltYWdlSW5kZXgsdGhpcy5hbGJ1bSk7XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsYnVtLmxlbmd0aCA+IDEgJiYgdGhpcy5vcHRpb25zLnNob3dJbWFnZU51bWJlckxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLW51bWJlclwiKS50ZXh0KHRoaXMub3B0aW9ucy5hbGJ1bUxhYmVsKHRoaXMuY3VycmVudEltYWdlSW5kZXggKyAxLCB0aGlzLmFsYnVtLmxlbmd0aCkpLmZhZGVJbihcImZhc3RcIik7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1udW1iZXJcIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5wcmVsb2FkTmVpZ2hib3JpbmdJbWFnZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hbGJ1bS5sZW5ndGggPiB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgICAgdmFyIGEgPSBuZXcgSW1hZ2U7XG4gICAgICAgICAgICAgICAgICBhLnNyYyA9IHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleCArIDFdLmxpbmtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEltYWdlSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgYiA9IG5ldyBJbWFnZTtcbiAgICAgICAgICAgICAgICAgIGIuc3JjID0gdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4IC0gMV0ubGlua1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuZW5hYmxlS2V5Ym9hcmROYXYgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBhKGRvY3VtZW50KS5vbihcImtleXVwLmtleWJvYXJkXCIsIGEucHJveHkodGhpcy5rZXlib2FyZEFjdGlvbiwgdGhpcykpXG4gICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLmRpc2FibGVLZXlib2FyZE5hdiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGEoZG9jdW1lbnQpLm9mZihcIi5rZXlib2FyZFwiKVxuICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5rZXlib2FyZEFjdGlvbiA9IGZ1bmN0aW9uKGEpIHtcblxuICAgICAgICAgICAgICAgIHZhciBLRVlDT0RFX0VTQyAgICAgICAgPSAyNztcbiAgICAgICAgICAgICAgICB2YXIgS0VZQ09ERV9MRUZUQVJST1cgID0gMzc7XG4gICAgICAgICAgICAgICAgdmFyIEtFWUNPREVfUklHSFRBUlJPVyA9IDM5O1xuXG4gICAgICAgICAgICAgICAgdmFyIGtleWNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgICAgICAgICAgICAgIHZhciBrZXkgICAgID0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXljb2RlKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChrZXljb2RlID09PSBLRVlDT0RFX0VTQyB8fCBrZXkubWF0Y2goL3h8b3xjLykpIHtcbiAgICAgICAgICAgICAgICAgIGlmKCBzYnlfc3VwcG9ydHNfdmlkZW8oKSApICQoJyNzYnlfbGlnaHRib3ggdmlkZW8uc2J5X3ZpZGVvJylbMF0ucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICQoJyNzYnlfbGlnaHRib3ggaWZyYW1lJykuYXR0cignc3JjJywgJycpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5lbmQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3AnIHx8IGtleWNvZGUgPT09IEtFWUNPREVfTEVGVEFSUk9XKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50SW1hZ2VJbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUltYWdlKHRoaXMuY3VycmVudEltYWdlSW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLndyYXBBcm91bmQgJiYgdGhpcy5hbGJ1bS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlSW1hZ2UodGhpcy5hbGJ1bS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYoIHNieV9zdXBwb3J0c192aWRlbygpICkgJCgnI3NieV9saWdodGJveCB2aWRlby5zYnlfdmlkZW8nKVswXS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgJCgnI3NieV9saWdodGJveCBpZnJhbWUnKS5hdHRyKCdzcmMnLCAnJyk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ24nIHx8IGtleWNvZGUgPT09IEtFWUNPREVfUklHSFRBUlJPVykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEltYWdlSW5kZXggIT09IHRoaXMuYWxidW0ubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUltYWdlKHRoaXMuY3VycmVudEltYWdlSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLndyYXBBcm91bmQgJiYgdGhpcy5hbGJ1bS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlSW1hZ2UoMCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlS2V5Ym9hcmROYXYoKSwgYSh3aW5kb3cpLm9mZihcInJlc2l6ZVwiLCB0aGlzLnNpemVPdmVybGF5KSwgdGhpcy4kbGlnaHRib3guZmFkZU91dCh0aGlzLm9wdGlvbnMuZmFkZUR1cmF0aW9uKSwgdGhpcy4kb3ZlcmxheS5mYWRlT3V0KHRoaXMub3B0aW9ucy5mYWRlRHVyYXRpb24pLCBhKFwic2VsZWN0LCBvYmplY3QsIGVtYmVkXCIpLmNzcyh7XG4gICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2libGVcIlxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0sIGJcbiAgICAgICAgICAgIH0oKTtcbiAgICAgICAgICBhKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgYSA9IG5ldyBiO1xuICAgICAgICAgICAgICBuZXcgYyhhKVxuXG4gICAgICAgICAgICAgIC8vTGlnaHRib3ggaGlkZSBwaG90byBmdW5jdGlvblxuICAgICAgICAgICAgICAkKCcuc2J5X2xpZ2h0Ym94X2FjdGlvbiBhJykub2ZmKCkub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmZpbmQoJy5zYnlfbGlnaHRib3hfdG9vbHRpcCcpLnRvZ2dsZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9KS5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIGNyZWF0ZUZlZWRzOiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICBpZiAoICFzYnlPcHRpb25zLmlzQWRtaW4gKSB7XG4gICAgICAgICAgd2luZG93LnNieS5jcmVhdGVMaWdodGJveCgpO1xuICAgICAgICB9XG4gICAgICAgIGFyZ3Mud2hlbkZlZWRzQ3JlYXRlZChcbiAgICAgICAgICAkKCcuc2JfeW91dHViZScpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2RhdGEtc2J5LWluZGV4JywgaW5kZXggKyAxKTtcbiAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9wbGF5ZXInKS5yZXBsYWNlV2l0aCgnPGRpdiBpZD1cInNieV9wbGF5ZXInK2luZGV4KydcIj48L2Rpdj4nKTtcbiAgICAgICAgICAgIHZhciAkc2VsZiA9ICQodGhpcyksXG4gICAgICAgICAgICAgIGZsYWdzID0gdHlwZW9mICRzZWxmLmF0dHIoJ2RhdGEtc2J5LWZsYWdzJykgIT09ICd1bmRlZmluZWQnID8gJHNlbGYuYXR0cignZGF0YS1zYnktZmxhZ3MnKS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgIGdlbmVyYWwgPSB0eXBlb2YgJHNlbGYuYXR0cignZGF0YS1vcHRpb25zJykgIT09ICd1bmRlZmluZWQnID8gSlNPTi5wYXJzZSgkc2VsZi5hdHRyKCdkYXRhLW9wdGlvbnMnKSkgOiB7fTtcbiAgICAgICAgICAgIGlmIChmbGFncy5pbmRleE9mKCd0ZXN0QWpheCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgd2luZG93LnNieS50cmlnZ2VyZWRUZXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmFyIHN1Ym1pdERhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAnYWN0aW9uJyA6ICdzYnlfb25fYWpheF90ZXN0X3RyaWdnZXInXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvblN1Y2Nlc3MgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGlkIHRlc3QnKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBzYnlBamF4KHN1Ym1pdERhdGEsb25TdWNjZXNzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGZlZWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICBjb2xzIDogJHNlbGYuYXR0cignZGF0YS1jb2xzJyksXG4gICAgICAgICAgICAgIGNvbHNtb2JpbGUgOiAkc2VsZi5hdHRyKCdkYXRhLWNvbHNtb2JpbGUnKSAhPT0gJ3NhbWUnID8gJHNlbGYuYXR0cignZGF0YS1jb2xzbW9iaWxlJykgOiAkc2VsZi5hdHRyKCdkYXRhLWNvbHMnKSxcbiAgICAgICAgICAgICAgbnVtIDogJHNlbGYuYXR0cignZGF0YS1udW0nKSxcbiAgICAgICAgICAgICAgaW1nUmVzIDogJHNlbGYuYXR0cignZGF0YS1yZXMnKSxcbiAgICAgICAgICAgICAgZmVlZElEIDogJHNlbGYuYXR0cignZGF0YS1mZWVkaWQnKSxcbiAgICAgICAgICAgICAgcG9zdElEIDogdHlwZW9mICRzZWxmLmF0dHIoICdkYXRhLXBvc3RpZCcgKSAhPT0gJ3VuZGVmaW5kJyA/ICRzZWxmLmF0dHIoICdkYXRhLXBvc3RpZCcgKSA6ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgc2hvcnRDb2RlQXR0cyA6ICRzZWxmLmF0dHIoJ2RhdGEtc2hvcnRjb2RlLWF0dHMnKSxcbiAgICAgICAgICAgICAgcmVzaXppbmdFbmFibGVkIDogKGZsYWdzLmluZGV4T2YoJ3Jlc2l6ZURpc2FibGUnKSA9PT0gLTEpLFxuICAgICAgICAgICAgICBpbWFnZUxvYWRFbmFibGVkIDogKGZsYWdzLmluZGV4T2YoJ2ltYWdlTG9hZERpc2FibGUnKSA9PT0gLTEpLFxuICAgICAgICAgICAgICBkZWJ1Z0VuYWJsZWQgOiAoZmxhZ3MuaW5kZXhPZignZGVidWcnKSA+IC0xKSxcbiAgICAgICAgICAgICAgZmF2b3JMb2NhbCA6IChmbGFncy5pbmRleE9mKCdmYXZvckxvY2FsJykgPiAtMSksXG4gICAgICAgICAgICAgIGFqYXhQb3N0TG9hZCA6IChmbGFncy5pbmRleE9mKCdhamF4UG9zdExvYWQnKSA+IC0xKSxcbiAgICAgICAgICAgICAgY2hlY2tXUFBvc3RzIDogKGZsYWdzLmluZGV4T2YoJ2NoZWNrV1BQb3N0cycpID4gLTEpLFxuICAgICAgICAgICAgICBzaW5nbGVDaGVja1Bvc3RzIDogKGZsYWdzLmluZGV4T2YoJ3NpbmdsZUNoZWNrUG9zdHMnKSA+IC0xKSxcbiAgICAgICAgICAgICAgbmFycm93UGxheWVyIDogKGZsYWdzLmluZGV4T2YoJ25hcnJvd1BsYXllcicpID4gLTEpLFxuICAgICAgICAgICAgICBnZHByIDogKGZsYWdzLmluZGV4T2YoJ2dkcHInKSA+IC0xKSxcbiAgICAgICAgICAgICAgY29uc2VudEdpdmVuIDogKGZsYWdzLmluZGV4T2YoJ2dkcHInKSA9PT0gLTEpLFxuICAgICAgICAgICAgICBub0NETiA6IChmbGFncy5pbmRleE9mKCdkaXNhYmxlY2RuJykgPiAtMSksXG4gICAgICAgICAgICAgIGFsbG93Q29va2llczogKGZsYWdzLmluZGV4T2YoJ2FsbG93Y29va2llcycpID4gLTEpLFxuICAgICAgICAgICAgICBsaWdodGJveEVuYWJsZWQgOiB0eXBlb2YgJHNlbGYuYXR0cignZGF0YS1zYnktc3VwcG9ydHMtbGlnaHRib3gnKSAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgICAgICAgICAgIGxvY2F0b3IgOiAoZmxhZ3MuaW5kZXhPZignbG9jYXRvcicpID4gLTEpLFxuICAgICAgICAgICAgICBhdXRvTWluUmVzIDogMSxcbiAgICAgICAgICAgICAgZ2VuZXJhbCA6IGdlbmVyYWxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdID0gc2J5R2V0TmV3RmVlZCh0aGlzLCBpbmRleCwgZmVlZE9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5QVBJUmVhZHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdLnBsYXllckFQSVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdLnNldFJlc2l6ZWRJbWFnZXMoKTtcbiAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdLmluaXQoKTtcblxuICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnc2J5YWZ0ZXJmZWVkY3JlYXRlJyk7XG4gICAgICAgICAgICBldnQuZmVlZCA9IHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdO1xuICAgICAgICAgICAgalF1ZXJ5KHdpbmRvdykudHJpZ2dlcihldnQpO1xuXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBhZnRlckZlZWRzQ3JlYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBlbmFibGUgaGVhZGVyIGhvdmVyIGFjdGlvblxuICAgICAgICAkKCcuc2JfeW91dHViZV9oZWFkZXInKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgJHRoaXNIZWFkZXIgPSAkKHRoaXMpO1xuICAgICAgICAgICR0aGlzSGVhZGVyLmZpbmQoJy5zYnlfaGVhZGVyX2xpbmsnKS5vbignbW91c2VlbnRlciBtb3VzZWxlYXZlJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgc3dpdGNoKGUudHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICdtb3VzZWVudGVyJzpcbiAgICAgICAgICAgICAgICAkdGhpc0hlYWRlci5maW5kKCcuc2J5X2hlYWRlcl9pbWdfaG92ZXInKS5hZGRDbGFzcygnc2J5X2ZhZGVfaW4nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnbW91c2VsZWF2ZSc6XG4gICAgICAgICAgICAgICAgJHRoaXNIZWFkZXIuZmluZCgnLnNieV9oZWFkZXJfaW1nX2hvdmVyJykucmVtb3ZlQ2xhc3MoJ3NieV9mYWRlX2luJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh3aW5kb3cuc2J5QVBJUmVhZHkpIHtcbiAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlmZWVkYW5keXRyZWFkeScpO1xuICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcbiAgICAgICAgfVxuXG4gICAgICB9LFxuICAgICAgZW5jb2RlSFRNTDogZnVuY3Rpb24ocmF3KSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBwYXNzZWQgdmFyaWFibGUgaXMgZGVmaW5lZFxuICAgICAgICBpZiAodHlwZW9mIHJhdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVwbGFjZSBncmVhdGVyIHRoYW4gYW5kIGxlc3MgdGhhbiBzeW1ib2xzIHdpdGggaHRtbCBlbnRpdHkgdG8gZGlzYWxsb3cgaHRtbCBpbiBjb21tZW50c1xuICAgICAgICB2YXIgZW5jb2RlZCA9IHJhdy5yZXBsYWNlKC8oPikvZywnJmd0OycpLFxuICAgICAgICAgIGVuY29kZWQgPSBlbmNvZGVkLnJlcGxhY2UoLyg8KS9nLCcmbHQ7Jyk7XG4gICAgICAgIGVuY29kZWQgPSBlbmNvZGVkLnJlcGxhY2UoLygmbHQ7YnJcXC8mZ3Q7KS9nLCc8YnI+Jyk7XG4gICAgICAgIGVuY29kZWQgPSBlbmNvZGVkLnJlcGxhY2UoLygmbHQ7YnImZ3Q7KS9nLCc8YnI+Jyk7XG5cbiAgICAgICAgcmV0dXJuIGVuY29kZWQ7XG4gICAgICB9LFxuICAgICAgdXJsRGV0ZWN0OiBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciB1cmxSZWdleCA9IC9odHRwcz86XFwvXFwvKHd3d1xcLik/Wy1hLXpBLVowLTlAOiUuX1xcK34jPV17MiwyNTZ9XFwuW2Etel17Miw2fVxcYihbLWEtekEtWjAtOUA6JV9cXCsufiM/Ji8vPV0qKS9nO1xuICAgICAgICByZXR1cm4gdGV4dC5tYXRjaCh1cmxSZWdleCk7XG4gICAgICB9LFxuICAgICAgY3RhRGV0ZWN0OiBmdW5jdGlvbih0ZXh0KSB7XG5cbiAgICAgICAgdmFyIGN0YU1hdGNoZXMgPSB0ZXh0Lm1hdGNoKC97TGluazooLiopfS9nKSxcbiAgICAgICAgICBjdGEgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY3RhTWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciB1cmxNYXRjaGVzID0gd2luZG93LnNieS51cmxEZXRlY3QoY3RhTWF0Y2hlc1swXSk7XG5cbiAgICAgICAgICBpZiAodXJsTWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IHVybE1hdGNoZXNbMF0udHJpbSgpLFxuICAgICAgICAgICAgICBzYnlCdXR0b25UZXh0ID0gY3RhTWF0Y2hlc1swXS5yZXBsYWNlKCd7TGluazonLCcnKS5yZXBsYWNlKCd9JywnJykucmVwbGFjZSh1cmwsJycpLnJlcGxhY2UoJyAgJywnICcpLnRyaW0oKTtcbiAgICAgICAgICAgIGN0YSA9IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2s6ICdsaW5rJyxcbiAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgIHRleHQ6IHNieUJ1dHRvblRleHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDVEEgZm91bmQgYnV0IG5vIFVSTCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdGE7XG4gICAgICB9LFxuICAgICAgc2h1ZmZsZTogZnVuY3Rpb24oYXJyYXkpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICB0ZW1wb3JhcnlWYWx1ZSxcbiAgICAgICAgICByYW5kb21JbmRleDtcblxuICAgICAgICAvLyBXaGlsZSB0aGVyZSByZW1haW4gZWxlbWVudHMgdG8gc2h1ZmZsZS4uLlxuICAgICAgICB3aGlsZSAoMCAhPT0gY3VycmVudEluZGV4KSB7XG4gICAgICAgICAgLy8gUGljayBhIHJlbWFpbmluZyBlbGVtZW50Li4uXG4gICAgICAgICAgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjdXJyZW50SW5kZXgpO1xuICAgICAgICAgIGN1cnJlbnRJbmRleCAtPSAxO1xuXG4gICAgICAgICAgLy8gQW5kIHN3YXAgaXQgd2l0aCB0aGUgY3VycmVudCBlbGVtZW50LlxuICAgICAgICAgIHRlbXBvcmFyeVZhbHVlID0gYXJyYXlbY3VycmVudEluZGV4XTtcbiAgICAgICAgICBhcnJheVtjdXJyZW50SW5kZXhdID0gYXJyYXlbcmFuZG9tSW5kZXhdO1xuICAgICAgICAgIGFycmF5W3JhbmRvbUluZGV4XSA9IHRlbXBvcmFyeVZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBTYnlGZWVkKGVsLCBpbmRleCwgc2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuZWwgPSBlbDtcbiAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJVUkwgPSB3aW5kb3cuc2J5Lm9wdGlvbnMucGxhY2Vob2xkZXI7XG4gICAgICBpZiAoc2V0dGluZ3MubmFycm93UGxheWVyKSB7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXJVUkwgPSB3aW5kb3cuc2J5Lm9wdGlvbnMucGxhY2Vob2xkZXJOYXJyb3dcbiAgICAgIH1cbiAgICAgIHRoaXMucGxheWVyQVBJUmVhZHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuY29uc2VudEdpdmVuID0gc2V0dGluZ3MuY29uc2VudEdpdmVuO1xuICAgICAgdGhpcy5wbGF5ZXJzID0ge307XG4gICAgICB0aGlzLm1pbkltYWdlV2lkdGggPSAwO1xuICAgICAgdGhpcy5pbWFnZVJlc29sdXRpb24gPSAxNTA7XG4gICAgICB0aGlzLnJlc2l6ZWRJbWFnZXMgPSB7fTtcbiAgICAgIHRoaXMubmVlZHNSZXNpemluZyA9IFtdO1xuICAgICAgdGhpcy5vdXRPZlBhZ2VzID0gZmFsc2U7XG4gICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMubW9zdFJlY2VudGx5TG9hZGVkUG9zdHMgPSBbXTtcbiAgICAgIHRoaXMuZW1iZWRVUkwgPSAnLy93d3cueW91dHViZS1ub2Nvb2tpZS5jb20nO1xuICAgICAgaWYgKHNldHRpbmdzLmFsbG93Q29va2llcykge1xuICAgICAgICB0aGlzLmVtYmVkVVJMID0gJy8vd3d3LnlvdXR1YmUuY29tJ1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgU2J5RmVlZC5wcm90b3R5cGUgPSB7XG4gICAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICBmZWVkLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IGZlZWQuY2hlY2tDb25zZW50KCk7XG5cbiAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuY29uc2VudEdpdmVuKSB7XG4gICAgICAgICAgd2luZG93LnNieS5tYXliZUFkZFlUQVBJKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5ub0NETiAmJiAhZmVlZC5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHtcbiAgICAgICAgICBpZiAoJCh0aGlzLmVsKS5maW5kKCcuc2JfeW91dHViZV9oZWFkZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICQodGhpcy5lbCkuZmluZCgnLnNiX3lvdXR1YmVfaGVhZGVyJykuYWRkQ2xhc3MoJ3NieV9ub19jb25zZW50JylcbiAgICAgICAgICB9IGVsc2UgaWYgKCQodGhpcy5lbCkucHJldignLnNiX3lvdXR1YmVfaGVhZGVyJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAkKHRoaXMuZWwpLnByZXYoJy5zYl95b3V0dWJlX2hlYWRlcicpLmFkZENsYXNzKCdzYnlfbm9fY29uc2VudCcpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgkKHRoaXMuZWwpLmZpbmQoJyNzYnlfbW9kX2Vycm9yJykubGVuZ3RoKSB7XG4gICAgICAgICAgJCh0aGlzLmVsKS5wcmVwZW5kKCQodGhpcy5lbCkuZmluZCgnI3NieV9tb2RfZXJyb3InKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYWpheFBvc3RMb2FkKSB7XG4gICAgICAgICAgdGhpcy5nZXROZXdQb3N0U2V0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hZnRlckluaXRpYWxJbWFnZXNMb2FkZWQoKTtcbiAgICAgICAgICAvL09ubHkgY2hlY2sgdGhlIHdpZHRoIG9uY2UgdGhlIHJlc2l6ZSBldmVudCBpcyBvdmVyXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNieV9kZWxheSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHNieV90aW1lciA9IDA7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzYnlfY2FsbGJhY2ssIHNieV9tcykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHNieV90aW1lcik7XG4gICAgICAgICAgICBzYnlfdGltZXIgPSBzZXRUaW1lb3V0KHNieV9jYWxsYmFjaywgc2J5X21zKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KSgpO1xuICAgICAgICBqUXVlcnkod2luZG93KS5vbigncmVzaXplJyxmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2J5X2RlbGF5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZlZWQuYWZ0ZXJSZXNpemUoKTtcbiAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgaW5pdExheW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuaW5pdEdhbGxlcnlMYXlvdXQoKTtcbiAgICAgIH0sXG4gICAgICBpbml0R2FsbGVyeUxheW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCksXG4gICAgICAgICAgZmVlZCA9IHRoaXM7XG4gICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9nYWxsZXJ5JykgJiYgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubWF5YmVSYWlzZVNpbmdsZUltYWdlUmVzb2x1dGlvbigkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJyksIDAsIHRydWUpO1xuICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAgLnNieV92aWRlb190aHVtYm5haWwnKS5vZmYoKS5vbignY2xpY2snLGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCghZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQgfHwgKGZlZWQuc2V0dGluZ3MubGlnaHRib3hFbmFibGVkICYmIGZlZWQuc2V0dGluZ3Mubm9DRE4pKVxuICAgICAgICAgICAgICAmJiAoZmVlZC5zZXR0aW5ncy5ub0NETiB8fCAhZmVlZC5zZXR0aW5ncy5jb25zZW50R2l2ZW4pKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X2l0ZW0nKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAmJiB0eXBlb2YgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X2l0ZW0nKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdocmVmJywnaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0nKyQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykuYXR0cignZGF0YS12aWRlby1pZCcpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZmVlZC5vblRodW1ibmFpbENsaWNrKCQodGhpcyksIHRydWUpO1xuXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpLmFkZENsYXNzKCdzYnlfY3VycmVudCcpO1xuXG4gICAgICAgICAgJHNlbGYub24oJ21vdXNlZW50ZXInLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCFmZWVkLmNhbkNyZWF0ZVBsYXllcigpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCBpZnJhbWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgJHNlbGYuYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfYWRkZWQnKS5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJykuYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZycpO1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwIC5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmluZCgnLnNieV9sb2FkZXInKS5zaG93KCkucmVtb3ZlQ2xhc3MoJ3NieV9oaWRkZW4nKTtcbiAgICAgICAgICAgICAgZmVlZC5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXInK2ZlZWQuaW5kZXgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmVlZC5wbGF5ZXIgPT09ICd1bmRlZmluZWQnICYmIGZlZWQucGxheWVyRWFnZXJMb2FkZWQoKSkge1xuICAgICAgICAgICAgICBmZWVkLmNyZWF0ZVBsYXllcignc2J5X3BsYXllcicrZmVlZC5pbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAod2luZG93LnNieVNlbWlFYWdlckxvYWRpbmcpIHtcbiAgICAgICAgICAgIGZlZWQuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJytmZWVkLmluZGV4KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5ub0NETikge1xuICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLmFwcGVuZCgnPGRpdiBjbGFzcz1cInNieV9wbGF5X2J0blwiPlxcbicgK1xuICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYnlfcGxheV9idG5fYmdcIj48L3NwYW4+XFxuJyArXG4gICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIDxzdmcgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZm9jdXNhYmxlPVwiZmFsc2VcIiBkYXRhLXByZWZpeD1cImZhYlwiIGRhdGEtaWNvbj1cInlvdXR1YmVcIiByb2xlPVwiaW1nXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTc2IDUxMlwiIGNsYXNzPVwic3ZnLWlubGluZS0tZmEgZmEteW91dHViZSBmYS13LTE4XCI+PHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNTQ5LjY1NSAxMjQuMDgzYy02LjI4MS0yMy42NS0yNC43ODctNDIuMjc2LTQ4LjI4NC00OC41OTdDNDU4Ljc4MSA2NCAyODggNjQgMjg4IDY0UzExNy4yMiA2NCA3NC42MjkgNzUuNDg2Yy0yMy40OTcgNi4zMjItNDIuMDAzIDI0Ljk0Ny00OC4yODQgNDguNTk3LTExLjQxMiA0Mi44NjctMTEuNDEyIDEzMi4zMDUtMTEuNDEyIDEzMi4zMDVzMCA4OS40MzggMTEuNDEyIDEzMi4zMDVjNi4yODEgMjMuNjUgMjQuNzg3IDQxLjUgNDguMjg0IDQ3LjgyMUMxMTcuMjIgNDQ4IDI4OCA0NDggMjg4IDQ0OHMxNzAuNzggMCAyMTMuMzcxLTExLjQ4NmMyMy40OTctNi4zMjEgNDIuMDAzLTI0LjE3MSA0OC4yODQtNDcuODIxIDExLjQxMi00Mi44NjcgMTEuNDEyLTEzMi4zMDUgMTEuNDEyLTEzMi4zMDVzMC04OS40MzgtMTEuNDEyLTEzMi4zMDV6bS0zMTcuNTEgMjEzLjUwOFYxNzUuMTg1bDE0Mi43MzkgODEuMjA1LTE0Mi43MzkgODEuMjAxelwiIGNsYXNzPVwiXCI+PC9wYXRoPjwvc3ZnPiAgICAgICAgICAgICAgICAgICAgPC9kaXY+Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjcmVhdGVQbGF5ZXI6IGZ1bmN0aW9uKHBsYXllcklELHZpZGVvSUQsYXV0b3BsYXksYXJncykge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgIT09ICd1bmRlZmluZWQnID8gdmlkZW9JRCA6IHRoaXMuZ2V0VmlkZW9JRCgkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpKTtcbiAgICAgICAgYXV0b3BsYXkgPSB0eXBlb2YgYXV0b3BsYXkgIT09ICd1bmRlZmluZWQnID8gYXV0b3BsYXkgOiAwO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBhcmdzID0ge1xuICAgICAgICAgICAgaG9zdDogd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgZmVlZC5lbWJlZFVSTCxcbiAgICAgICAgICAgIHZpZGVvSWQ6IHZpZGVvSUQsXG4gICAgICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgICAgIG1vZGVzdGJyYW5kaW5nOiAxLFxuICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgIGF1dG9wbGF5OiBhdXRvcGxheVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzLmV2ZW50cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBhcmdzLmV2ZW50cyA9IHtcbiAgICAgICAgICAgICdvblJlYWR5JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJykucmVtb3ZlQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZycpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuY3NzKCd6LWluZGV4JywgLTEpLmZpbmQoJy5zYnlfbG9hZGVyJykuaGlkZSgpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgIGlmICgkKCcjJyArIHBsYXllcklEKS5sZW5ndGggJiYgJCgnIycgKyBwbGF5ZXJJRCkuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWxfd3JhcCcpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgJCgnIycgKyBwbGF5ZXJJRCkuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWxfd3JhcCcpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmFkZVRvKDAsICdzbG93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ3otaW5kZXgnLCAtMSk7XG4gICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy5zYnlfbG9hZGVyJykuaGlkZSgpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfaXRlbScpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlhZnRlcnBsYXllcnJlYWR5Jyk7XG4gICAgICAgICAgICAgIGV2dC5mZWVkID0gZmVlZDtcbiAgICAgICAgICAgICAgZXZ0LnBsYXllciA9IHRoaXM7XG4gICAgICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnb25TdGF0ZUNoYW5nZSc6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmNzcygnei1pbmRleCcsIC0xKS5maW5kKCcuc2J5X2xvYWRlcicpLmhpZGUoKS5hZGRDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgICBmZWVkLmFmdGVyU3RhdGVDaGFuZ2UocGxheWVySUQsdmlkZW9JRCxkYXRhLCQoJyMnICsgcGxheWVySUQpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsX3dyYXAnKSk7XG4gICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEgIT09IDEpIHJldHVybjtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmZWVkLnBsYXllcnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBpdGVtVmlkSUQgPSBmZWVkLmdldFZpZGVvSUQoJCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5maW5kKCdpZnJhbWUnKS5sZW5ndGggJiYgKGl0ZW1WaWRJRCAhPT0gdmlkZW9JRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmZWVkLnBsYXllcnNbaXRlbVZpZElEXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGZlZWQucGxheWVyc1tpdGVtVmlkSURdLnBhdXNlVmlkZW8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmZWVkLnBsYXllcnNbaXRlbVZpZElEXS5wYXVzZVZpZGVvKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2luZG93LnNieUVhZ2VyTG9hZGluZykge1xuICAgICAgICAgIHZhciBuZXdQbGF5ZXIgPSBZVC5nZXQocGxheWVySUQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBuZXdQbGF5ZXIgPSBuZXcgd2luZG93LllULlBsYXllcihwbGF5ZXJJRCwgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1heWJlQWRkQ1RBKHBsYXllcklEKTtcblxuICAgICAgICBpZiAoJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfbGlzdCcpICYmIHR5cGVvZiB0aGlzLnBsYXllcnNbdmlkZW9JRF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5wbGF5ZXJzW3ZpZGVvSURdID0gbmV3UGxheWVyO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnBsYXllciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLnBsYXllciA9IG5ld1BsYXllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ3NieWFmdGVycGxheWVyY3JlYXRlZCcpO1xuICAgICAgICBldnQuZmVlZCA9IHRoaXM7XG4gICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcblxuICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwIC5zYnlfcGxheV9idG4nKS5yZW1vdmUoKTtcblxuICAgICAgICByZXR1cm4gbmV3UGxheWVyO1xuICAgICAgfSxcbiAgICAgIGFmdGVyU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKHBsYXllcklELHZpZGVvSUQsZGF0YSwkcGxheWVyKSB7XG4gICAgICB9LFxuICAgICAgYWZ0ZXJJbml0aWFsSW1hZ2VzTG9hZGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5pbml0TGF5b3V0KCk7XG4gICAgICAgIHRoaXMubG9hZE1vcmVCdXR0b25Jbml0KCk7XG4gICAgICAgIHRoaXMuaGlkZUV4dHJhSXRlbXNGb3JXaWR0aCgpO1xuICAgICAgICB0aGlzLmJlZm9yZU5ld0ltYWdlc1JldmVhbGVkKCk7XG4gICAgICAgIHRoaXMucmV2ZWFsTmV3SW1hZ2VzKCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJOZXdJbWFnZXNSZXZlYWxlZCgpO1xuICAgICAgICB0aGlzLmFmdGVyRmVlZFNldCgpO1xuICAgICAgICB0aGlzLnNpemVQbGF5ZXIoKTtcbiAgICAgICAgdGhpcy5zaXplSXRlbXMoKTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuKSB7XG4gICAgICAgICAgdGhpcy5hcHBseUZ1bGxGZWF0dXJlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVtb3ZlRmVhdHVyZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFmdGVyUmVzaXplOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5zZXRJbWFnZUhlaWdodCgpO1xuICAgICAgICB0aGlzLnNldEltYWdlUmVzb2x1dGlvbigpO1xuICAgICAgICB0aGlzLm1heWJlUmFpc2VJbWFnZVJlc29sdXRpb24oKTtcbiAgICAgICAgdGhpcy5zZXRJbWFnZVNpemVDbGFzcygpO1xuICAgICAgfSxcbiAgICAgIGFmdGVyTG9hZE1vcmVDbGlja2VkOiBmdW5jdGlvbigkYnV0dG9uKSB7XG4gICAgICAgICRidXR0b24uZmluZCgnLnNieV9sb2FkZXInKS5yZW1vdmVDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAkYnV0dG9uLmZpbmQoJy5zYnlfYnRuX3RleHQnKS5hZGRDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAkYnV0dG9uLmNsb3Nlc3QoJy5zYl95b3V0dWJlJykuZmluZCgnLnNieV9udW1fZGlmZl9oaWRlJykuYWRkQ2xhc3MoJ3NieV90cmFuc2l0aW9uJykucmVtb3ZlQ2xhc3MoJ3NieV9udW1fZGlmZl9oaWRlJyk7XG4gICAgICB9LFxuICAgICAgYWZ0ZXJOZXdJbWFnZXNMb2FkZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICB0aGlzLmJlZm9yZU5ld0ltYWdlc1JldmVhbGVkKCk7XG4gICAgICAgIHRoaXMucmV2ZWFsTmV3SW1hZ2VzKCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJOZXdJbWFnZXNSZXZlYWxlZCgpO1xuICAgICAgICB0aGlzLnNpemVQbGF5ZXIoKTtcbiAgICAgICAgdGhpcy5zaXplSXRlbXMoKTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy9IaWRlIHRoZSBsb2FkZXIgaW4gdGhlIGxvYWQgbW9yZSBidXR0b25cbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xvYWRlcicpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9idG5fdGV4dCcpLnJlbW92ZUNsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgZmVlZC5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHtcbiAgICAgICAgICB0aGlzLmFwcGx5RnVsbEZlYXR1cmVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGZWF0dXJlcygpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYmVmb3JlTmV3SW1hZ2VzUmV2ZWFsZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldEltYWdlSGVpZ2h0KCk7XG4gICAgICAgIHRoaXMubWF5YmVSYWlzZUltYWdlUmVzb2x1dGlvbih0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRJbWFnZVNpemVDbGFzcygpO1xuICAgICAgfSxcbiAgICAgIGFmdGVyRmVlZFNldDogZnVuY3Rpb24oKSB7XG5cbiAgICAgIH0sXG4gICAgICBzaXplUGxheWVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSkge1xuICAgICAgICAgICRwbGF5ZXJUaHVtYm5haWwgPSAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9pdGVtJykuZmluZCgnLnNieV9wbGF5ZXJfdmlkZW9fdGh1bWJuYWlsJyk7XG4gICAgICAgICAgdmFyIHBsYXllcldpZHRoID0gJHBsYXllclRodW1ibmFpbC5pbm5lcldpZHRoKCksXG4gICAgICAgICAgICBuZXdQbGF5ZXJIZWlnaHQgPSBNYXRoLmZsb29yKHBsYXllcldpZHRoICogOSAvIDE2KTtcbiAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5uYXJyb3dQbGF5ZXIpIHtcbiAgICAgICAgICAgIG5ld1BsYXllckhlaWdodCA9IE1hdGguZmxvb3IocGxheWVyV2lkdGggKiAzIC8gNCk7XG4gICAgICAgICAgfVxuICAgICAgICAgICRwbGF5ZXJUaHVtYm5haWwuY3NzKCdoZWlnaHQnLG5ld1BsYXllckhlaWdodCsncHgnKS5jc3MoJ292ZXJmbG93JywnaGlkZGVuJyk7XG5cbiAgICAgICAgfSBlbHNlIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykpIHtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAkcGxheWVyVGh1bWJuYWlsID0gJCh0aGlzKS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJyk7XG4gICAgICAgICAgICB2YXIgcGxheWVyV2lkdGggPSAkcGxheWVyVGh1bWJuYWlsLmlubmVyV2lkdGgoKSxcbiAgICAgICAgICAgICAgbmV3UGxheWVySGVpZ2h0ID0gTWF0aC5mbG9vcihwbGF5ZXJXaWR0aCAqIDkgLyAxNik7XG4gICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5uYXJyb3dQbGF5ZXIpIHtcbiAgICAgICAgICAgICAgbmV3UGxheWVySGVpZ2h0ID0gTWF0aC5mbG9vcihwbGF5ZXJXaWR0aCAqIDMgLyA0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRwbGF5ZXJUaHVtYm5haWwuY3NzKCdoZWlnaHQnLG5ld1BsYXllckhlaWdodCsncHgnKS5jc3MoJ292ZXJmbG93JywnaGlkZGVuJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzaXplSXRlbXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICBpZiAoISRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2xpc3QnKSkge1xuICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwnKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ3NieV9pbWdMaXF1aWRfcmVhZHknKSkge1xuICAgICAgICAgICAgICB2YXIgdGh1bWJXaWR0aCA9ICQodGhpcykuaW5uZXJXaWR0aCgpLFxuICAgICAgICAgICAgICAgIG5ld1RodW1iSGVpZ2h0ID0gTWF0aC5mbG9vcih0aHVtYldpZHRoICogOSAvIDE2KTtcbiAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ2hlaWdodCcsbmV3VGh1bWJIZWlnaHQrJ3B4JykuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZXZlYWxOZXdJbWFnZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICB0aGlzLmFwcGx5SW1hZ2VMaXF1aWQoKTtcblxuICAgICAgICAvLyBDYWxsIEN1c3RvbSBKUyBpZiBpdCBleGlzdHNcbiAgICAgICAgaWYgKHR5cGVvZiBzYnlDdXN0b21KUyA9PSAnZnVuY3Rpb24nKSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHNieUN1c3RvbUpTKCk7IH0sIDEwMCk7XG5cbiAgICAgICAgJHNlbGYuZmluZCgnLnNieS1zY3JlZW5yZWFkZXInKS5maW5kKCdpbWcnKS5yZW1vdmUoKTtcblxuICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0uc2J5X25ldycpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgdmFyICRzZWxmID0galF1ZXJ5KHRoaXMpO1xuXG4gICAgICAgICAgLy9QaG90byBsaW5rc1xuICAgICAgICAgIC8vSWYgbGlnaHRib3ggaXMgZGlzYWJsZWRcbiAgICAgICAgICB2aWRlb0lEID0gJHNlbGYuYXR0cignZGF0YS12aWRlby1pZCcpO1xuXG4gICAgICAgICAgaWYgKHdpbmRvdy5zYnlFYWdlckxvYWRpbmcgJiYgZmVlZC5jYW5DcmVhdGVQbGF5ZXIoKSAmJiAkKCcjc2J5X3BsYXllcl8nK3ZpZGVvSUQpLmxlbmd0aCkge1xuICAgICAgICAgICAgcGxheWVyID0gbmV3IFlULlBsYXllcignc2J5X3BsYXllcl8nK3ZpZGVvSUQsIHtcbiAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJyxcbiAgICAgICAgICAgICAgd2lkdGg6ICcxMDAnLFxuICAgICAgICAgICAgICB2aWRlb0lkOiB2aWRlb0lELFxuICAgICAgICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgICAgICAgbW9kZXN0YnJhbmRpbmc6IDEsXG4gICAgICAgICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgICAgICAgIGF1dG9wbGF5OiAwXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSBkYXRhLnRhcmdldC5nZXRWaWRlb0RhdGEoKVsndmlkZW9faWQnXTtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEgIT09IDEpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtVmlkSUQgPSBqUXVlcnkodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykubGVuZ3RoICYmIGpRdWVyeShkYXRhLnRhcmdldC5hKS5hdHRyKCdpZCcpICE9PSBqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykuYXR0cignaWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgIFlULmdldCgnc2J5X3BsYXllcl8nK2l0ZW1WaWRJRCkucGF1c2VWaWRlbygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykub24oJ21vdXNlZW50ZXInLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZmVlZC5vblRodW1ibmFpbEVudGVyKCQodGhpcyksIGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl93cmFwJykub24oJ21vdXNlbGVhdmUnLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZmVlZC5vblRodW1ibmFpbExlYXZlKCQodGhpcyksIGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvL2luaXQgY2xpY2tcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLm9uKCdjbGljaycsZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICgoIWZlZWQuc2V0dGluZ3MubGlnaHRib3hFbmFibGVkIHx8IChmZWVkLnNldHRpbmdzLmxpZ2h0Ym94RW5hYmxlZCAmJiBmZWVkLnNldHRpbmdzLm5vQ0ROKSlcbiAgICAgICAgICAgICAgJiYgKGZlZWQuc2V0dGluZ3Mubm9DRE4gfHwgIWZlZWQuc2V0dGluZ3MuY29uc2VudEdpdmVuKSkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mICQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgJiYgdHlwZW9mICQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykuYXR0cignZGF0YS12aWRlby1pZCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignaHJlZicsJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9JyskKHRoaXMpLmNsb3Nlc3QoJy5zYnlfaXRlbScpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGZlZWQub25UaHVtYm5haWxDbGljaygkKHRoaXMpLCBmYWxzZSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBsaWdodGJveFxuICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmxpZ2h0Ym94RW5hYmxlZCkge1xuICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXNieS1saWdodGJveCcsZmVlZC5pbmRleCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNieU9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBzYnlPcHRpb25zLmxpZ2h0Ym94UGxhY2Vob2xkZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLm5hcnJvd1BsYXllcikge1xuICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignaHJlZicsc2J5T3B0aW9ucy5saWdodGJveFBsYWNlaG9sZGVyTmFycm93KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2hyZWYnLHNieU9wdGlvbnMubGlnaHRib3hQbGFjZWhvbGRlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmVlZC5hZnRlckl0ZW1SZXZlYWxlZCgkc2VsZik7XG5cbiAgICAgICAgICAvLyBubyBpbmZvXG4gICAgICAgICAgaWYgKCRzZWxmLmZpbmQoJy5zYnlfaW5mb19pdGVtJykudGV4dCgpLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaW5mb19pdGVtJykuYWRkQ2xhc3MoJ3NieV9ub19zcGFjZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7IC8vRW5kIC5zYnlfaXRlbSBlYWNoXG5cbiAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgdmFyICRzZWxmID0galF1ZXJ5KHRoaXMpO1xuXG4gICAgICAgICAgZmVlZC5hZnRlckl0ZW1SZXZlYWxlZCgkc2VsZik7XG4gICAgICAgIH0pOyAvL0VuZCAuc2J5X2l0ZW0gZWFjaFxuXG4gICAgICAgIC8vUmVtb3ZlIHRoZSBuZXcgY2xhc3MgYWZ0ZXIgNTAwbXMsIG9uY2UgdGhlIHNvcnRpbmcgaXMgZG9uZVxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0uc2J5X25ldycpLnJlbW92ZUNsYXNzKCdzYnlfbmV3Jyk7XG4gICAgICAgICAgLy9Mb29wIHRocm91Z2ggaXRlbXMgYW5kIHJlbW92ZSBjbGFzcyB0byByZXZlYWwgdGhlbVxuICAgICAgICAgIHZhciB0aW1lID0gMSxcbiAgICAgICAgICAgIG51bSA9ICRzZWxmLmZpbmQoJy5zYnlfdHJhbnNpdGlvbicpLmxlbmd0aDtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3RyYW5zaXRpb24nKS5lYWNoKGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgJHNieV9pdGVtX3RyYW5zaXRpb25fZWwgPSBqUXVlcnkodGhpcyk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICRzYnlfaXRlbV90cmFuc2l0aW9uX2VsLnJlbW92ZUNsYXNzKCdzYnlfdHJhbnNpdGlvbicpO1xuICAgICAgICAgICAgfSwgdGltZSk7XG4gICAgICAgICAgICAvL3RpbWUgKz0gMTA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDEpO1xuXG4gICAgICB9LFxuICAgICAgYWZ0ZXJJdGVtUmV2ZWFsZWQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB9LFxuICAgICAgYWZ0ZXJOZXdJbWFnZXNSZXZlYWxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubGlzdGVuRm9yVmlzaWJpbGl0eUNoYW5nZSgpO1xuICAgICAgICB0aGlzLnNlbmROZWVkc1Jlc2l6aW5nVG9TZXJ2ZXIoKTtcbiAgICAgICAgdGhpcy5zZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIoKTtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmltYWdlTG9hZEVuYWJsZWQpIHtcbiAgICAgICAgICAkKCcuc2J5X25vX3Jlc3JhaXNlJykucmVtb3ZlQ2xhc3MoJ3NieV9ub19yZXNyYWlzZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGV2dCA9ICQuRXZlbnQoJ3NieWFmdGVyaW1hZ2VzbG9hZGVkJyk7XG4gICAgICAgIGV2dC5lbCA9ICQodGhpcy5lbCk7XG4gICAgICAgICQod2luZG93KS50cmlnZ2VyKGV2dCk7XG4gICAgICB9LFxuICAgICAgc2V0UmVzaXplZEltYWdlczogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoJCh0aGlzLmVsKS5maW5kKCcuc2J5X3Jlc2l6ZWRfaW1hZ2VfZGF0YScpLmxlbmd0aFxuICAgICAgICAgICYmIHR5cGVvZiAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykuYXR0cignZGF0YS1yZXNpemVkJykgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgJiYgJCh0aGlzLmVsKS5maW5kKCcuc2J5X3Jlc2l6ZWRfaW1hZ2VfZGF0YScpLmF0dHIoJ2RhdGEtcmVzaXplZCcpLmluZGV4T2YoJ3tcIicpID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5yZXNpemVkSW1hZ2VzID0gSlNPTi5wYXJzZSgkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykuYXR0cignZGF0YS1yZXNpemVkJykpO1xuICAgICAgICAgICQodGhpcy5lbCkuZmluZCgnLnNieV9yZXNpemVkX2ltYWdlX2RhdGEnKS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNlbmROZWVkc1Jlc2l6aW5nVG9TZXJ2ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZmVlZCA9IHRoaXM7XG4gICAgICAgIGlmIChmZWVkLm5lZWRzUmVzaXppbmcubGVuZ3RoID4gMCAmJiBmZWVkLnNldHRpbmdzLnJlc2l6aW5nRW5hYmxlZCkge1xuICAgICAgICAgIHZhciBpdGVtT2Zmc2V0ID0gJCh0aGlzLmVsKS5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGg7XG5cbiAgICAgICAgICB2YXIgc3VibWl0RGF0YSA9IHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3NieV9yZXNpemVkX2ltYWdlc19zdWJtaXQnLFxuICAgICAgICAgICAgbmVlZHNfcmVzaXppbmc6IGZlZWQubmVlZHNSZXNpemluZyxcbiAgICAgICAgICAgIG9mZnNldDogaXRlbU9mZnNldCxcbiAgICAgICAgICAgIGZlZWRfaWQ6IGZlZWQuc2V0dGluZ3MuZmVlZElELFxuICAgICAgICAgICAgbG9jYXRpb246IGZlZWQubG9jYXRpb25HdWVzcygpLFxuICAgICAgICAgICAgcG9zdF9pZDogZmVlZC5zZXR0aW5ncy5wb3N0SUQsXG4gICAgICAgICAgICBhdHRzOiBmZWVkLnNldHRpbmdzLnNob3J0Q29kZUF0dHMsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB2YXIgb25TdWNjZXNzID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgaWYgKGRhdGEudHJpbSgpLmluZGV4T2YoJ3snKSA9PT0gMCkge1xuICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5kZWJ1Z0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHNieUFqYXgoc3VibWl0RGF0YSxvblN1Y2Nlc3MpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2VuZENoZWNrV1BQb3N0c1RvU2VydmVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5jaGVja1dQUG9zdHMgfHwgZmVlZC5zZXR0aW5ncy5zaW5nbGVDaGVja1Bvc3RzKSB7XG4gICAgICAgICAgdmFyIGZlZWRJRCA9IHR5cGVvZiBmZWVkLnNldHRpbmdzLmZlZWRJRCAhPT0gJ3VuZGVmaW5lZCcgPyBmZWVkLnNldHRpbmdzLmZlZWRJRCA6ICdzYnlfc2luZ2xlJyxcbiAgICAgICAgICAgIHBvc3RzID0gZmVlZC5tb3N0UmVjZW50bHlMb2FkZWRQb3N0cztcbiAgICAgICAgICBmZWVkLm1vc3RSZWNlbnRseUxvYWRlZFBvc3RzID0gW107XG4gICAgICAgICAgdmFyIHN1Ym1pdERhdGEgPSB7XG4gICAgICAgICAgICBhY3Rpb246ICdzYnlfY2hlY2tfd3Bfc3VibWl0JyxcbiAgICAgICAgICAgIGZlZWRfaWQ6IGZlZWRJRCxcbiAgICAgICAgICAgIGF0dHM6IGZlZWQuc2V0dGluZ3Muc2hvcnRDb2RlQXR0cyxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBmZWVkLmxvY2F0aW9uR3Vlc3MoKSxcbiAgICAgICAgICAgIHBvc3RfaWQ6IGZlZWQuc2V0dGluZ3MucG9zdElELFxuICAgICAgICAgICAgb2Zmc2V0OiAhICQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfY2Fyb3VzZWwnKSA/ICQodGhpcy5lbCkuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoIDogTWF0aC5mbG9vcigoJCh0aGlzLmVsKS5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGggLyAyKSAtMSksXG4gICAgICAgICAgICBwb3N0czogcG9zdHNcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS50cmltKCkuaW5kZXhPZigneycpID09PSAwKSB7XG4gICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmZWVkLmFmdGVyU2VuZENoZWNrV1BQb3N0c1RvU2VydmVyKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgc2J5QWpheChzdWJtaXREYXRhLG9uU3VjY2Vzcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhZnRlclNlbmRDaGVja1dQUG9zdHNUb1NlcnZlcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cbiAgICAgIH0sXG4gICAgICBsb2FkTW9yZUJ1dHRvbkluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgJHNlbGYuZmluZCgnLnNieV9mb290ZXIgLnNieV9sb2FkX2J0bicpLm9mZigpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmZWVkLmFmdGVyTG9hZE1vcmVDbGlja2VkKGpRdWVyeSh0aGlzKSk7XG4gICAgICAgICAgZmVlZC5nZXROZXdQb3N0U2V0KCk7XG4gICAgICAgIH0pOyAvL0VuZCBjbGljayBldmVudFxuICAgICAgfSxcbiAgICAgIGdldE5ld1Bvc3RTZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgdmFyIGl0ZW1PZmZzZXQgPSAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGgsXG4gICAgICAgICAgc3VibWl0RGF0YSA9IHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3NieV9sb2FkX21vcmVfY2xpY2tlZCcsXG4gICAgICAgICAgICBvZmZzZXQ6IGl0ZW1PZmZzZXQsXG4gICAgICAgICAgICBmZWVkX2lkOiBmZWVkLnNldHRpbmdzLmZlZWRJRCxcbiAgICAgICAgICAgIGF0dHM6IGZlZWQuc2V0dGluZ3Muc2hvcnRDb2RlQXR0cyxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBmZWVkLmxvY2F0aW9uR3Vlc3MoKSxcbiAgICAgICAgICAgIHBvc3RfaWQ6IGZlZWQuc2V0dGluZ3MucG9zdElELFxuICAgICAgICAgICAgY3VycmVudF9yZXNvbHV0aW9uOiBmZWVkLmltYWdlUmVzb2x1dGlvblxuICAgICAgICAgIH07XG4gICAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmIChkYXRhLnRyaW0oKS5pbmRleE9mKCd7JykgPT09IDApIHtcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSksXG4gICAgICAgICAgICAgIGNoZWNrV1BQb3N0cyA9IHR5cGVvZiByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgPyByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyA6IGZhbHNlOztcbiAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tXUFBvc3RzKSB7XG4gICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuY2hlY2tXUFBvc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuY2hlY2tXUFBvc3RzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWVkLmFwcGVuZE5ld1Bvc3RzKHJlc3BvbnNlLmh0bWwpO1xuICAgICAgICAgICAgZmVlZC5hZGRSZXNpemVkSW1hZ2VzKHJlc3BvbnNlLnJlc2l6ZWRJbWFnZXMpO1xuICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuYWpheFBvc3RMb2FkKSB7XG4gICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuYWpheFBvc3RMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGZlZWQuYWZ0ZXJJbml0aWFsSW1hZ2VzTG9hZGVkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmZWVkLmFmdGVyTmV3SW1hZ2VzTG9hZGVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZmVlZFN0YXR1cy5zaG91bGRQYWdpbmF0ZSkge1xuICAgICAgICAgICAgICBmZWVkLm91dE9mUGFnZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xvYWRfYnRuJykuaGlkZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmVlZC5vdXRPZlBhZ2VzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICQoJy5zYnlfbm9fanMnKS5yZW1vdmVDbGFzcygnc2J5X25vX2pzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH07XG4gICAgICAgIHNieUFqYXgoc3VibWl0RGF0YSwgb25TdWNjZXNzKTtcbiAgICAgIH0sXG4gICAgICBhcHBlbmROZXdQb3N0czogZnVuY3Rpb24gKG5ld1Bvc3RzSHRtbCkge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICBpZiAoJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwIC5zYnlfaXRlbScpLmxlbmd0aCkge1xuICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCAuc2J5X2l0ZW0nKS5sYXN0KCkuYWZ0ZXIobmV3UG9zdHNIdG1sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5hcHBlbmQobmV3UG9zdHNIdG1sKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFkZFJlc2l6ZWRJbWFnZXM6IGZ1bmN0aW9uIChyZXNpemVkSW1hZ2VzVG9BZGQpIHtcbiAgICAgICAgZm9yICh2YXIgaW1hZ2VJRCBpbiByZXNpemVkSW1hZ2VzVG9BZGQpIHtcbiAgICAgICAgICB0aGlzLnJlc2l6ZWRJbWFnZXNbaW1hZ2VJRF0gPSByZXNpemVkSW1hZ2VzVG9BZGRbaW1hZ2VJRF07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXRJbWFnZUhlaWdodDogZnVuY3Rpb24oKSB7XG4gICAgICB9LFxuICAgICAgbWF5YmVSYWlzZVNpbmdsZUltYWdlUmVzb2x1dGlvbjogZnVuY3Rpb24gKCRpdGVtLCBpbmRleCwgZm9yY2VDaGFuZ2UpIHtcbiAgICAgICAgdmFyIGZlZWQgPSB0aGlzLFxuICAgICAgICAgIGltZ1NyY1NldCA9IGZlZWQuZ2V0SW1hZ2VVcmxzKCRpdGVtKSxcbiAgICAgICAgICBjdXJyZW50VXJsID0gJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwgPiBpbWcnKS5hdHRyKCdzcmMnKSxcbiAgICAgICAgICBjdXJyZW50UmVzID0gMTUwLFxuICAgICAgICAgIGFzcGVjdFJhdGlvID0gMSwgLy8gYWxsIHRodW1ibmFpbHMgYXJlIG9yaWVudGVkIHRoZSBzYW1lIHNvIHRoZSBiZXN0IGNhbGN1bGF0aW9uIHVzZXMgMVxuICAgICAgICAgIGZvcmNlQ2hhbmdlID0gdHlwZW9mIGZvcmNlQ2hhbmdlICE9PSAndW5kZWZpbmVkJyA/IGZvcmNlQ2hhbmdlIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKCRpdGVtLmhhc0NsYXNzKCdzYnlfbm9fcmVzcmFpc2UnKSAgIHx8XG4gICAgICAgICAgKCFmZWVkLnNldHRpbmdzLmNvbnNlbnRHaXZlbiAmJiBmZWVkLnNldHRpbmdzLm5vQ0ROKSApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAkLmVhY2goaW1nU3JjU2V0LCBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBjdXJyZW50VXJsKSB7XG4gICAgICAgICAgICBjdXJyZW50UmVzID0gcGFyc2VJbnQoaW5kZXgpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGltYWdlIGhhcyBhbHJlYWR5IGJlZW4gY2hhbmdlZCB0byBhbiBleGlzdGluZyByZWFsIHNvdXJjZSwgZG9uJ3QgZm9yY2UgdGhlIGNoYW5nZVxuICAgICAgICAgICAgZm9yY2VDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvL0ltYWdlIHJlc1xuICAgICAgICB2YXIgbmV3UmVzID0gNjQwO1xuICAgICAgICBzd2l0Y2ggKGZlZWQuc2V0dGluZ3MuaW1nUmVzKSB7XG4gICAgICAgICAgY2FzZSAndGh1bWInOlxuICAgICAgICAgICAgbmV3UmVzID0gMTIwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWVkaXVtJzpcbiAgICAgICAgICAgIG5ld1JlcyA9IDMyMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgICAgICAgIG5ld1JlcyA9IDQ4MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICAgICAgbmV3UmVzID0gNjQwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciBtaW5JbWFnZVdpZHRoID0gTWF0aC5tYXgoZmVlZC5zZXR0aW5ncy5hdXRvTWluUmVzLCRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuaW5uZXJXaWR0aCgpKSxcbiAgICAgICAgICAgICAgdGhpc0ltYWdlUmVwbGFjZSA9IGZlZWQuZ2V0QmVzdFJlc29sdXRpb25Gb3JBdXRvKG1pbkltYWdlV2lkdGgsIGFzcGVjdFJhdGlvLCAkKHRoaXMuZWwpLmZpbmQoJ3NieV9pdGVtJykuZmlyc3QoKSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXNJbWFnZVJlcGxhY2UpIHtcbiAgICAgICAgICAgICAgY2FzZSA0ODA6XG4gICAgICAgICAgICAgICAgbmV3UmVzID0gNDgwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDMyMDpcbiAgICAgICAgICAgICAgICBuZXdSZXMgPSAzMjA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMTIwOlxuICAgICAgICAgICAgICAgIG5ld1JlcyA9IDEyMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld1JlcyA+IGN1cnJlbnRSZXMgfHwgY3VycmVudFVybCA9PT0gZmVlZC5wbGFjZWhvbGRlclVSTCB8fCBmb3JjZUNoYW5nZSkge1xuICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgdmFyIHJlYXNvbiA9IGN1cnJlbnRVcmwgPT09IGZlZWQucGxhY2Vob2xkZXJVUkwgPyAnd2FzIHBsYWNlaG9sZGVyJyA6ICd0b28gc21hbGwnO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3JhaXMgcmVzIGZvciAnICsgY3VycmVudFVybCwgcmVhc29uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG5ld1VybCA9IGltZ1NyY1NldFtuZXdSZXNdO1xuICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsID4gaW1nJykuYXR0cignc3JjJywgbmV3VXJsKTtcbiAgICAgICAgICBpZiAoJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5oYXNDbGFzcygnc2J5X2ltZ0xpcXVpZF9yZWFkeScpKSB7XG4gICAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmNzcygnYmFja2dyb3VuZC1pbWFnZScsICd1cmwoXCInICsgbmV3VXJsICsgJ1wiKScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICRpdGVtLmZpbmQoJ2ltZycpLm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoISQodGhpcykuaGFzQ2xhc3MoJ3NieV9pbWdfZXJyb3InKSkge1xuICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnc2J5X2ltZ19lcnJvcicpO1xuICAgICAgICAgICAgdmFyIHNvdXJjZUZyb21BUEkgPSAoJCh0aGlzKS5hdHRyKCdzcmMnKS5pbmRleE9mKCdpLnl0aW1nLmNvbScpID4gLTEpO1xuXG4gICAgICAgICAgICBpZiAoIXNvdXJjZUZyb21BUEkpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1mdWxsLXJlcycpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignc3JjJywgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtZnVsbC1yZXMnKSk7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmNzcygnYmFja2dyb3VuZC1pbWFnZScsICd1cmwoJyArICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLWZ1bGwtcmVzJykgKyAnKScpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdocmVmJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdzcmMnLCAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignaHJlZicpICsgJ21lZGlhP3NpemU9bCcpO1xuICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignaHJlZicpICsgJ21lZGlhP3NpemU9bCknKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmVlZC5zZXR0aW5ncy5mYXZvckxvY2FsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmFyIHNyY1NldCA9IGZlZWQuZ2V0SW1hZ2VVcmxzKCQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykpO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHNyY1NldFs2NDBdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignc3JjJywgc3JjU2V0WzY0MF0pO1xuICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyBzcmNTZXRbNjQwXSArICcpJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGZlZWQuYWZ0ZXJSZXNpemUoKTtcbiAgICAgICAgICAgIH0sIDEpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1bmZpeGVkIGVycm9yICcgKyAkKHRoaXMpLmF0dHIoJ3NyYycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG1heWJlUmFpc2VJbWFnZVJlc29sdXRpb246IGZ1bmN0aW9uIChqdXN0TmV3KSB7XG4gICAgICAgIHZhciBmZWVkID0gdGhpcyxcbiAgICAgICAgICBpdGVtc1NlbGVjdG9yID0gdHlwZW9mIGp1c3ROZXcgIT09ICd1bmRlZmluZWQnICYmIGp1c3ROZXcgPT09IHRydWUgPyAnLnNieV9pdGVtLnNieV9uZXcnIDogJy5zYnlfaXRlbScsXG4gICAgICAgICAgZm9yY2VDaGFuZ2UgPSAhZmVlZC5pc0luaXRpYWxpemVkID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkKGZlZWQuZWwpLmZpbmQoaXRlbXNTZWxlY3RvcikuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICBpZiAoISQodGhpcykuaGFzQ2xhc3MoJ3NieV9udW1fZGlmZl9oaWRlJylcbiAgICAgICAgICAgICYmICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5sZW5ndGhcbiAgICAgICAgICAgICYmIHR5cGVvZiAkKHRoaXMpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1pbWctc3JjLXNldCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmVlZC5tYXliZVJhaXNlU2luZ2xlSW1hZ2VSZXNvbHV0aW9uKCQodGhpcyksaW5kZXgsZm9yY2VDaGFuZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7IC8vRW5kIC5zYnlfaXRlbSBlYWNoXG4gICAgICAgIGZlZWQuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZ2V0QmVzdFJlc29sdXRpb25Gb3JBdXRvOiBmdW5jdGlvbihjb2xXaWR0aCwgYXNwZWN0UmF0aW8sICRpdGVtKSB7XG4gICAgICAgIGlmIChpc05hTihhc3BlY3RSYXRpbykgfHwgYXNwZWN0UmF0aW8gPCAxKSB7XG4gICAgICAgICAgYXNwZWN0UmF0aW8gPSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciBiZXN0V2lkdGggPSBjb2xXaWR0aCAqIGFzcGVjdFJhdGlvLFxuICAgICAgICAgIGJlc3RXaWR0aFJvdW5kZWQgPSBNYXRoLmNlaWwoYmVzdFdpZHRoIC8gMTApICogMTAsXG4gICAgICAgICAgY3VzdG9tU2l6ZXMgPSBbMTIwLCAzMjAsIDQ4MCwgNjQwXTtcblxuICAgICAgICBpZiAoJGl0ZW0uaGFzQ2xhc3MoJ3NieV9oaWdobGlnaHRlZCcpKSB7XG4gICAgICAgICAgYmVzdFdpZHRoUm91bmRlZCA9IGJlc3RXaWR0aFJvdW5kZWQgKjI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VzdG9tU2l6ZXMuaW5kZXhPZihwYXJzZUludChiZXN0V2lkdGhSb3VuZGVkKSkgPT09IC0xKSB7XG4gICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAkLmVhY2goY3VzdG9tU2l6ZXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0gPiBwYXJzZUludChiZXN0V2lkdGhSb3VuZGVkKSAmJiAhZG9uZSkge1xuICAgICAgICAgICAgICBiZXN0V2lkdGhSb3VuZGVkID0gaXRlbTtcbiAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYmVzdFdpZHRoUm91bmRlZDtcbiAgICAgIH0sXG4gICAgICBoaWRlRXh0cmFJdGVtc0ZvcldpZHRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0ID09PSAnY2Fyb3VzZWwnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCksXG4gICAgICAgICAgbnVtID0gdHlwZW9mICRzZWxmLmF0dHIoJ2RhdGEtbnVtJykgIT09ICd1bmRlZmluZWQnICYmICRzZWxmLmF0dHIoJ2RhdGEtbnVtJykgIT09ICcnID8gcGFyc2VJbnQoJHNlbGYuYXR0cignZGF0YS1udW0nKSkgOiAxLFxuICAgICAgICAgIG51bW1vYmlsZSA9IHR5cGVvZiAkc2VsZi5hdHRyKCdkYXRhLW51bW1vYmlsZScpICE9PSAndW5kZWZpbmVkJyAmJiAkc2VsZi5hdHRyKCdkYXRhLW51bW1vYmlsZScpICE9PSAnJyA/IHBhcnNlSW50KCRzZWxmLmF0dHIoJ2RhdGEtbnVtbW9iaWxlJykpIDogbnVtO1xuXG4gICAgICAgIGlmICghJHNlbGYuaGFzQ2xhc3MoJy5zYnlfbGF5b3V0X2Nhcm91c2VsJykpIHtcbiAgICAgICAgICBpZiAoJCh3aW5kb3cpLndpZHRoKCkgPCA0ODApIHtcbiAgICAgICAgICAgIGlmIChudW1tb2JpbGUgPCAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuc2xpY2UobnVtbW9iaWxlIC0gJHNlbGYuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoKS5hZGRDbGFzcygnc2J5X251bV9kaWZmX2hpZGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG51bSA8ICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5zbGljZShudW0gLSAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGgpLmFkZENsYXNzKCdzYnlfbnVtX2RpZmZfaGlkZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9LFxuICAgICAgc2V0SW1hZ2VTaXplQ2xhc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKTtcbiAgICAgICAgJHNlbGYucmVtb3ZlQ2xhc3MoJ3NieV9zbWFsbCBzYnlfbWVkaXVtJyk7XG4gICAgICAgIHZhciBmZWVkV2lkdGggPSAkc2VsZi5pbm5lcldpZHRoKCksXG4gICAgICAgICAgcGhvdG9QYWRkaW5nID0gcGFyc2VJbnQoKCRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLm91dGVyV2lkdGgoKSAtICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLndpZHRoKCkpKSAvIDIsXG4gICAgICAgICAgY29scyA9IHRoaXMuZ2V0Q29sdW1uQ291bnQoKSxcbiAgICAgICAgICBmZWVkV2lkdGhTYW5zUGFkZGluZyA9IGZlZWRXaWR0aCAtIChwaG90b1BhZGRpbmcgKiAoY29scysyKSksXG4gICAgICAgICAgY29sV2lkdGggPSAoZmVlZFdpZHRoU2Fuc1BhZGRpbmcgLyBjb2xzKTtcblxuICAgICAgICBpZiAoY29sV2lkdGggPiAxNDAgJiYgY29sV2lkdGggPCAyNDApIHtcbiAgICAgICAgICAkc2VsZi5hZGRDbGFzcygnc2J5X21lZGl1bScpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbFdpZHRoIDw9IDE0MCkge1xuICAgICAgICAgICRzZWxmLmFkZENsYXNzKCdzYnlfc21hbGwnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldE1pbkltYWdlV2lkdGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCQodGhpcy5lbCkuZmluZCgnLnNieV9pdGVtIC5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmlyc3QoKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLm1pbkltYWdlV2lkdGggPSAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfaXRlbSAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpcnN0KCkuaW5uZXJXaWR0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWluSW1hZ2VXaWR0aCA9IDE1MDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldEltYWdlUmVzb2x1dGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5pbWdSZXMgPT09ICdhdXRvJykge1xuICAgICAgICAgIHRoaXMuaW1hZ2VSZXNvbHV0aW9uID0gJ2F1dG8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXRjaCAodGhpcy5zZXR0aW5ncy5pbWdSZXMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RodW1iJzpcbiAgICAgICAgICAgICAgdGhpcy5pbWFnZVJlc29sdXRpb24gPSAxNTA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWVkaXVtJzpcbiAgICAgICAgICAgICAgdGhpcy5pbWFnZVJlc29sdXRpb24gPSAzMjA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhpcy5pbWFnZVJlc29sdXRpb24gPSA2NDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZ2V0SW1hZ2VVcmxzOiBmdW5jdGlvbiAoJGl0ZW0pIHtcbiAgICAgICAgdmFyIHNyY1NldCA9IEpTT04ucGFyc2UoJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLWltZy1zcmMtc2V0JykucmVwbGFjZSgvXFxcXFxcLy9nLCAnLycpKSxcbiAgICAgICAgICBpZCA9ICRpdGVtLmF0dHIoJ2lkJykucmVwbGFjZSgnc2J5XycsICcnKS5yZXBsYWNlKCdwbGF5ZXJfJywnJyk7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdICE9PSAndmlkZW8nXG4gICAgICAgICAgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXSAhPT0gJ3BlbmRpbmcnXG4gICAgICAgICAgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCAhPT0gJ2Vycm9yJ1xuICAgICAgICAgICYmIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgIT09ICd2aWRlbydcbiAgICAgICAgICAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICE9PSAncGVuZGluZycpIHtcblxuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnc2l6ZXMnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHZhciBmb3VuZFNpemVzID0gW107XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzaXplZEltYWdlc1tpZF1bJ3NpemVzJ11bJ2Z1bGwnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgZm91bmRTaXplcy5wdXNoKDY0MCk7XG4gICAgICAgICAgICAgIHNyY1NldFs2NDBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnZnVsbC5qcGcnO1xuICAgICAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X2xpbmtfYXJlYScpLmF0dHIoICdocmVmJywgc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnZnVsbC5qcGcnICk7XG4gICAgICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0ciggJ2RhdGEtZnVsbC1yZXMnLCBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdmdWxsLmpwZycgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnc2l6ZXMnXVsnbG93J10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGZvdW5kU2l6ZXMucHVzaCgzMjApO1xuICAgICAgICAgICAgICBzcmNTZXRbMzIwXSA9IHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2xvdy5qcGcnO1xuICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5mYXZvckxvY2FsICYmIHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydzaXplcyddWydmdWxsJ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV9saW5rX2FyZWEnKS5hdHRyKCAnaHJlZicsIHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2xvdy5qcGcnICk7XG4gICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCAnZGF0YS1mdWxsLXJlcycsIHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2xvdy5qcGcnICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnc2l6ZXMnXVsndGh1bWInXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgZm91bmRTaXplcy5wdXNoKDE1MCk7XG4gICAgICAgICAgICAgIHNyY1NldFsxNTBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAndGh1bWIuanBnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmZhdm9yTG9jYWwpIHtcbiAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZig2NDApID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZFNpemVzLmluZGV4T2YoMzIwKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICBzcmNTZXRbNjQwXSA9IHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2xvdy5qcGcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZm91bmRTaXplcy5pbmRleE9mKDMyMCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZig2NDApID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHNyY1NldFszMjBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnZnVsbC5qcGcnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmRTaXplcy5pbmRleE9mKDE1MCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgc3JjU2V0WzMyMF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICd0aHVtYi5qcGcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZm91bmRTaXplcy5pbmRleE9mKDE1MCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZigzMjApID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHNyY1NldFsxNTBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnbG93LmpwZyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZFNpemVzLmluZGV4T2YoNjQwKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICBzcmNTZXRbMTUwXSA9IHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2Z1bGwuanBnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmVzaXplZEltYWdlc1tpZF0gPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgfHwgKHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydpZCddICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydpZCddICE9PSAncGVuZGluZycgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnaWQnXSAhPT0gJ2Vycm9yJykpIHtcbiAgICAgICAgICB0aGlzLmFkZFRvTmVlZHNSZXNpemluZyhpZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3JjU2V0O1xuICAgICAgfSxcbiAgICAgIGdldFZpZGVvSUQ6IGZ1bmN0aW9uICgkZWwpIHtcbiAgICAgICAgaWYgKCRlbC5oYXNDbGFzcygnc2J5X2l0ZW0nKSB8fCAkZWwuaGFzQ2xhc3MoJ3NieV9wbGF5ZXJfaXRlbScpKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiAkZWwuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gJGVsLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgkZWwuY2xvc2VzdCgnc2J5X2l0ZW0nKS5sZW5ndGggfHwgJGVsLmNsb3Nlc3QoJ3NieV9wbGF5ZXJfaXRlbScpLmxlbmd0aCkge1xuICAgICAgICAgIHZhciAkdGFyZ2VFbCA9ICRlbC5jbG9zZXN0KCdzYnlfaXRlbScpLmxlbmd0aCA/ICRlbC5jbG9zZXN0KCdzYnlfaXRlbScpIDogJGVsLmNsb3Nlc3QoJ3NieV9wbGF5ZXJfaXRlbScpO1xuICAgICAgICAgIGlmICh0eXBlb2YgJHRhcmdlRWwuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gJHRhcmdlRWwuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCRlbC5oYXNDbGFzcygnc2JfeW91dHViZScpKSB7XG4gICAgICAgICAgcmV0dXJuICRlbC5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKCQodGhpcy5lbCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5maXJzdCgpLmxlbmd0aCAmJiB0eXBlb2YgJCh0aGlzLmVsKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpcnN0KCkuYXR0cignZGF0YS12aWRlby1pZCcpICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICAgICAgcmV0dXJuICQodGhpcy5lbCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5maXJzdCgpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9LFxuICAgICAgZ2V0QXZhdGFyVXJsOiBmdW5jdGlvbiAodXNlcm5hbWUsZmF2b3JUeXBlKSB7XG4gICAgICAgIGlmICh1c2VybmFtZSA9PT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYXZhaWxhYmxlQXZhdGFycyA9IHRoaXMuc2V0dGluZ3MuZ2VuZXJhbC5hdmF0YXJzLFxuICAgICAgICAgIGZhdm9yVHlwZSA9IHR5cGVvZiBmYXZvclR5cGUgIT09ICd1bmRlZmluZWQnID8gZmF2b3JUeXBlIDogJ2xvY2FsJztcblxuICAgICAgICBpZiAoZmF2b3JUeXBlID09PSAnbG9jYWwnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhdmFpbGFibGVBdmF0YXJzWydMQ0wnK3VzZXJuYW1lXSAhPT0gJ3VuZGVmaW5lZCcgJiYgcGFyc2VJbnQoYXZhaWxhYmxlQXZhdGFyc1snTENMJyt1c2VybmFtZV0pID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHVzZXJuYW1lICsgJy5qcGcnO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGF2YWlsYWJsZUF2YXRhcnNbdXNlcm5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUF2YXRhcnNbdXNlcm5hbWVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgYXZhaWxhYmxlQXZhdGFyc1t1c2VybmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlQXZhdGFyc1t1c2VybmFtZV07XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXZhaWxhYmxlQXZhdGFyc1snTENMJyt1c2VybmFtZV0gIT09ICd1bmRlZmluZWQnICYmIHBhcnNlSW50KGF2YWlsYWJsZUF2YXRhcnNbJ0xDTCcrdXNlcm5hbWVdKSA9PT0gMSkgIHtcbiAgICAgICAgICAgIHJldHVybiBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdXNlcm5hbWUgKyAnLmpwZyc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhZGRUb05lZWRzUmVzaXppbmc6IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICBpZiAodGhpcy5uZWVkc1Jlc2l6aW5nLmluZGV4T2YoaWQpID09PSAtMSkge1xuICAgICAgICAgIHRoaXMubmVlZHNSZXNpemluZy5wdXNoKGlkKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFwcGx5SW1hZ2VMaXF1aWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgc2J5QWRkSW1nTGlxdWlkKCk7XG4gICAgICAgIGlmICh0eXBlb2YgJHNlbGYuZmluZChcIi5zYnlfcGxheWVyX2l0ZW1cIikuc2J5X2ltZ0xpcXVpZCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKCRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX2l0ZW0nKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICRzZWxmLmZpbmQoXCIuc2J5X3BsYXllcl9pdGVtIC5zYnlfcGxheWVyX3ZpZGVvX3RodW1ibmFpbFwiKS5zYnlfaW1nTGlxdWlkKHtmaWxsOiB0cnVlfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgICRzZWxmLmZpbmQoXCIuc2J5X2l0ZW0gLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbFwiKS5zYnlfaW1nTGlxdWlkKHtmaWxsOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBsaXN0ZW5Gb3JWaXNpYmlsaXR5Q2hhbmdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICBzYnlBZGRWaXNpYmlsaXR5TGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiAkKHRoaXMuZWwpLmZpbHRlcignOmhpZGRlbicpLnNieVZpc2liaWxpdHlDaGFuZ2VkID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvL0lmIHRoZSBmZWVkIGlzIGluaXRpYWxseSBoaWRkZW4gKGluIGEgdGFiIGZvciBleGFtcGxlKSB0aGVuIGNoZWNrIGZvciB3aGVuIGl0IGJlY29tZXMgdmlzaWJsZSBhbmQgc2V0IHRoZW4gc2V0IHRoZSBoZWlnaHRcbiAgICAgICAgICAkKHRoaXMuZWwpLmZpbHRlcignOmhpZGRlbicpLnNieVZpc2liaWxpdHlDaGFuZ2VkKHtcbiAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoZWxlbWVudCwgdmlzaWJsZSkge1xuICAgICAgICAgICAgICBmZWVkLmFmdGVyUmVzaXplKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVuT25Mb2FkOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZ2V0Q29sdW1uQ291bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGNvbHMgPSB0aGlzLnNldHRpbmdzLmNvbHMsXG4gICAgICAgICAgY29sc21vYmlsZSA9IHRoaXMuc2V0dGluZ3MuY29sc21vYmlsZSxcbiAgICAgICAgICByZXR1cm5Db2xzID0gY29scztcblxuICAgICAgICBzYnlXaW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXG4gICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X21vYl9jb2xfYXV0bycpKSB7XG4gICAgICAgICAgaWYgKHNieVdpbmRvd1dpZHRoIDwgNjQwICYmIChwYXJzZUludChjb2xzKSA+IDIgJiYgcGFyc2VJbnQoY29scykgPCA3KSkgcmV0dXJuQ29scyA9IDI7XG4gICAgICAgICAgaWYgKHNieVdpbmRvd1dpZHRoIDwgNjQwICYmIChwYXJzZUludChjb2xzKSA+IDYgJiYgcGFyc2VJbnQoY29scykgPCAxMSkpIHJldHVybkNvbHMgPSA0O1xuICAgICAgICAgIGlmIChzYnlXaW5kb3dXaWR0aCA8PSA0ODAgJiYgcGFyc2VJbnQoY29scykgPiAyKSByZXR1cm5Db2xzID0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChzYnlXaW5kb3dXaWR0aCA8PSA0ODApIHtcbiAgICAgICAgICByZXR1cm5Db2xzID0gY29sc21vYmlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZUludChyZXR1cm5Db2xzKTtcbiAgICAgIH0sXG4gICAgICBvblRodW1ibmFpbENsaWNrOiBmdW5jdGlvbigkY2xpY2tlZCxpc1BsYXllcix2aWRlb0lEKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5DcmVhdGVQbGF5ZXIoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpO1xuICAgICAgICBpZiAoJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfZ2FsbGVyeScpKSB7XG4gICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9jdXJyZW50JykucmVtb3ZlQ2xhc3MoJ3NieV9jdXJyZW50Jyk7XG4gICAgICAgICAgJGNsaWNrZWQuY2xvc2VzdCgnLnNieV9pdGVtJykuYWRkQ2xhc3MoJ3NieV9jdXJyZW50Jyk7XG5cbiAgICAgICAgICAkY2xpY2tlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKS5hZGRDbGFzcygnc2J5X2N1cnJlbnQnKTtcbiAgICAgICAgICAkc2VsZi5hZGRDbGFzcygnc2J5X3BsYXllcl9hZGRlZCcpLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKS5hZGRDbGFzcygnc2J5X3BsYXllcl9sb2FkaW5nJyk7XG4gICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpbmQoJy5zYnlfbG9hZGVyJykuc2hvdygpLnJlbW92ZUNsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgaWYgKCEkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwIGlmcmFtZScpLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGlzUGxheWVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJyt0aGlzLmluZGV4KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgPT09ICd1bmRlZmluZWQnID8gdGhpcy5nZXRWaWRlb0lEKCRjbGlja2VkLmNsb3Nlc3QoJy5zYnlfaXRlbScpKSA6IHZpZGVvSUQ7XG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJyt0aGlzLmluZGV4LHZpZGVvSUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNQbGF5ZXIpIHtcbiAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSB0eXBlb2YgdmlkZW9JRCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmdldFZpZGVvSUQoJHNlbGYuZmluZCgnLnNieV9pdGVtJykuZmlyc3QoKSkgOiB2aWRlb0lEO1xuXG4gICAgICAgICAgICAgIHRoaXMucGxheVZpZGVvSW5QbGF5ZXIodmlkZW9JRCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgdmlkZW9JRCA9IHR5cGVvZiB2aWRlb0lEID09PSAndW5kZWZpbmVkJyA/IHRoaXMuZ2V0VmlkZW9JRCgkY2xpY2tlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKSkgOiB2aWRlb0lEO1xuXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlUGxheWVySW5mbygkY2xpY2tlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKSk7XG4gICAgICAgICAgICAgIHRoaXMucGxheVZpZGVvSW5QbGF5ZXIodmlkZW9JRCk7XG4gICAgICAgICAgICAgIHRoaXMuYWZ0ZXJWaWRlb0NoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dyaWQnKSB8fCAkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2Nhcm91c2VsJykpIHtcbiAgICAgICAgICB2YXIgJHNieUl0ZW0gPSAkY2xpY2tlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKSxcbiAgICAgICAgICAgIHZpZGVvSUQgPSB0eXBlb2YgdmlkZW9JRCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmdldFZpZGVvSUQoJHNieUl0ZW0pIDogdmlkZW9JRDtcbiAgICAgICAgICB0aGlzLnBsYXlWaWRlb0luUGxheWVyKHZpZGVvSUQpO1xuICAgICAgICAgIHRoaXMuYWZ0ZXJWaWRlb0NoYW5nZWQoKTtcbiAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2xpc3QnKSkge1xuICAgICAgICAgIHZhciAkc2J5SXRlbSA9ICRjbGlja2VkLmNsb3Nlc3QoJy5zYnlfaXRlbScpLFxuICAgICAgICAgICAgdmlkZW9JRCA9IHR5cGVvZiB2aWRlb0lEID09PSAndW5kZWZpbmVkJyA/IHRoaXMuZ2V0VmlkZW9JRCgkc2J5SXRlbSkgOiB2aWRlb0lEO1xuICAgICAgICAgIGlmICgkc2J5SXRlbS5sZW5ndGggJiYgISRzYnlJdGVtLmZpbmQoJ2lmcmFtZScpLmxlbmd0aCkge1xuICAgICAgICAgICAgJHNieUl0ZW0uZmluZCgnLnNieV9sb2FkZXInKS5zaG93KCkucmVtb3ZlQ2xhc3MoJ3NieV9oaWRkZW4nKTtcbiAgICAgICAgICAgICRzYnlJdGVtLmFkZENsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcgc2J5X3BsYXllcl9sb2FkZWQnKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyXycrdmlkZW9JRCx2aWRlb0lEKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wbGF5VmlkZW9JblBsYXllcih2aWRlb0lELCRzYnlJdGVtLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSk7XG4gICAgICAgICAgICB0aGlzLmFmdGVyVmlkZW9DaGFuZ2VkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25UaHVtYm5haWxFbnRlcjogZnVuY3Rpb24oJGhvdmVyZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkNyZWF0ZVBsYXllcigpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCk7XG4gICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykpIHtcbiAgICAgICAgICB2YXIgJHNieUl0ZW0gPSAkaG92ZXJlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKSxcbiAgICAgICAgICAgIHZpZGVvSUQgPSB0aGlzLmdldFZpZGVvSUQoJHNieUl0ZW0pO1xuICAgICAgICAgIGlmICghJHNieUl0ZW0uZmluZCgnaWZyYW1lJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAkc2J5SXRlbS5maW5kKCcuc2J5X2xvYWRlcicpLnNob3coKS5yZW1vdmVDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgJHNieUl0ZW0uYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZyBzYnlfcGxheWVyX2xvYWRlZCcpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXJfJyt2aWRlb0lELHZpZGVvSUQsMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25UaHVtYm5haWxMZWF2ZTogZnVuY3Rpb24oJGhvdmVyZWQpIHtcbiAgICAgIH0sXG4gICAgICBjaGFuZ2VQbGF5ZXJJbmZvOiBmdW5jdGlvbigkbmV3SXRlbSkge1xuXG4gICAgICB9LFxuICAgICAgcGxheWVyRWFnZXJMb2FkZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGxheWVyICE9PSAndW5kZWZpbmVkJyB8fCAkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfcGxheWVyX2xvYWRlZCcpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYW5DcmVhdGVQbGF5ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoJCh0aGlzLmVsKS5maW5kKCcjc2J5X2JsYW5rJykubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXllckVhZ2VyTG9hZGVkKCkgfHwgKHRoaXMucGxheWVyQVBJUmVhZHkgJiYgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHx8ICh3aW5kb3cuc2J5QVBJUmVhZHkgJiYgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pO1xuICAgICAgfSxcbiAgICAgIHBsYXlWaWRlb0luUGxheWVyOiBmdW5jdGlvbih2aWRlb0lELHBsYXllcklEKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wbGF5ZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB0aGlzLnBsYXllci5sb2FkVmlkZW9CeUlkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRoaXMucGxheWVyLmxvYWRWaWRlb0J5SWQodmlkZW9JRCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAmJiB0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyLmxvYWRWaWRlb0J5SWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LnNieUxpZ2h0Ym94UGxheWVyLmxvYWRWaWRlb0J5SWQodmlkZW9JRCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBsYXllcklEICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICYmIHR5cGVvZiB0aGlzLnBsYXllcnMgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgJiYgdHlwZW9mIHRoaXMucGxheWVyc1twbGF5ZXJJRF0gIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgJiYgdHlwZW9mIHRoaXMucGxheWVyc1twbGF5ZXJJRF0ubG9hZFZpZGVvQnlJZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLnBsYXllcnNbcGxheWVySURdLmxvYWRWaWRlb0J5SWQodmlkZW9JRCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhZnRlclZpZGVvQ2hhbmdlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICgkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSkge1xuICAgICAgICAgICQodGhpcy5lbCkuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAgLnNieV92aWRlb190aHVtYm5haWwnKS5maW5kKCcuc2J5X2xvYWRlcicpLmhpZGUoKS5hZGRDbGFzcygnc2J5X2hpZGRlbicpO1xuXG4gICAgICAgICAgaWYgKCQod2luZG93KS53aWR0aCgpIDwgNDgwKSB7XG4gICAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7XG4gICAgICAgICAgICAgIHNjcm9sbFRvcDogJCh0aGlzLmVsKS5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJykub2Zmc2V0KCkudG9wXG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2hlY2tDb25zZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuIHx8ICF0aGlzLnNldHRpbmdzLmdkcHIpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLm5vQ0ROID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBDTElfQ29va2llICE9PSBcInVuZGVmaW5lZFwiKSB7IC8vIEdEUFIgQ29va2llIENvbnNlbnQgYnkgV2ViVG9mZmVlXG4gICAgICAgICAgaWYgKENMSV9Db29raWUucmVhZChDTElfQUNDRVBUX0NPT0tJRV9OQU1FKSAhPT0gbnVsbCkgIHtcblxuICAgICAgICAgICAgLy8gV2ViVG9mZmVlIG5vIGxvbmdlciB1c2VzIHRoaXMgY29va2llIGJ1dCBiZWluZyBsZWZ0IGhlcmUgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgIGlmIChDTElfQ29va2llLnJlYWQoJ2Nvb2tpZWxhd2luZm8tY2hlY2tib3gtbm9uLW5lY2Vzc2FyeScpICE9PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4gPSBDTElfQ29va2llLnJlYWQoJ2Nvb2tpZWxhd2luZm8tY2hlY2tib3gtbm9uLW5lY2Vzc2FyeScpID09PSAneWVzJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKENMSV9Db29raWUucmVhZCgnY29va2llbGF3aW5mby1jaGVja2JveC1uZWNlc3NhcnknKSAhPT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuID0gQ0xJX0Nvb2tpZS5yZWFkKCdjb29raWVsYXdpbmZvLWNoZWNrYm94LW5lY2Vzc2FyeScpID09PSAneWVzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LmNuQXJncyAhPT0gXCJ1bmRlZmluZWRcIikgeyAvLyBDb29raWUgTm90aWNlIGJ5IGRGYWN0b3J5XG4gICAgICAgICAgdmFyIHZhbHVlID0gXCI7IFwiICsgZG9jdW1lbnQuY29va2llLFxuICAgICAgICAgICAgcGFydHMgPSB2YWx1ZS5zcGxpdCggJzsgY29va2llX25vdGljZV9hY2NlcHRlZD0nICk7XG5cbiAgICAgICAgICBpZiAoIHBhcnRzLmxlbmd0aCA9PT0gMiApIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBwYXJ0cy5wb3AoKS5zcGxpdCggJzsnICkuc2hpZnQoKTtcblxuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4gPSAodmFsID09PSAndHJ1ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LmNvb2tpZWNvbnNlbnQgIT09ICd1bmRlZmluZWQnKSB7IC8vIENvbXBsaWFueiBieSBSZWFsbHkgU2ltcGxlIFBsdWdpbnNcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9ICggc2J5Q21wbHpHZXRDb29raWUoJ2NtcGx6X2NvbnNlbnRfc3RhdHVzJykgPT09ICdhbGxvdycgfHwgalF1ZXJ5KCdib2R5JykuaGFzQ2xhc3MoJ2NtcGx6LXN0YXR1cy1tYXJrZXRpbmcnKSApO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cuQ29va2llYm90ICE9PSBcInVuZGVmaW5lZFwiKSB7IC8vIENvb2tpZWJvdCBieSBDeWJvdCBBL1NcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IENvb2tpZWJvdC5jb25zZW50ZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5Cb3JsYWJzQ29va2llICE9PSAndW5kZWZpbmVkJykgeyAvLyBCb3JsYWJzIENvb2tpZSBieSBCb3JsYWJzXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4gPSB3aW5kb3cuQm9ybGFic0Nvb2tpZS5jaGVja0Nvb2tpZUNvbnNlbnQoJ3lvdXR1YmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ3NieWNoZWNrY29uc2VudCcpO1xuICAgICAgICBldnQuZmVlZCA9IHRoaXM7XG4gICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLm5vQ0ROID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW47IC8vIEdEUFIgbm90IGVuYWJsZWRcbiAgICAgIH0sXG4gICAgICBhZnRlckNvbnNlbnRUb2dnbGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tDb25zZW50KCkpIHtcbiAgICAgICAgICB2YXIgZmVlZCA9IHRoaXM7XG4gICAgICAgICAgd2luZG93LnNieS5tYXliZUFkZFlUQVBJKCk7XG4gICAgICAgICAgZmVlZC5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgZmVlZC5hcHBseUZ1bGxGZWF0dXJlcygpO1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmZWVkLmFmdGVyUmVzaXplKCk7XG4gICAgICAgICAgfSw1MDApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVtb3ZlRmVhdHVyZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZmVlZCA9IHRoaXM7XG4gICAgICAgIGlmIChmZWVkLnNldHRpbmdzLm5vQ0ROKSB7XG4gICAgICAgICAgJChmZWVkLmVsKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUF0dHIoJ2RhdGEtc2J5LWxpZ2h0Ym94Jyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhcHBseUZ1bGxGZWF0dXJlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmZWVkID0gdGhpcztcblxuICAgICAgICAkKGZlZWQuZWwpLmZpbmQoJy5zYnlfaGVhZGVyX2ltZyBpbWcnKS5hdHRyKCdzcmMnLCQoZmVlZC5lbCkuZmluZCgnLnNieV9oZWFkZXJfaW1nJykuYXR0cignZGF0YS1hdmF0YXItdXJsJykpO1xuICAgICAgICBpZiAodHlwZW9mICQoZmVlZC5lbCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5maXJzdCgpLmF0dHIoJ2RhdGEtc2J5LWxpZ2h0Ym94JykgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgJiYgZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQpIHtcbiAgICAgICAgICAkKGZlZWQuZWwpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1zYnktbGlnaHRib3gnLGZlZWQuaW5kZXgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkc2VsZiA9ICQoZmVlZC5lbCk7XG4gICAgICAgICRzZWxmLmZpbmQoJy5zYnlfbm9fY29uc2VudCcpLnJlbW92ZUNsYXNzKCdzYnlfbm9fY29uc2VudCcpO1xuICAgICAgICBpZiAoJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfZ2FsbGVyeScpICYmICRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLm1heWJlUmFpc2VTaW5nbGVJbWFnZVJlc29sdXRpb24oJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLCAwLCB0cnVlKTtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpLmFkZENsYXNzKCdzYnlfY3VycmVudCcpO1xuXG4gICAgICAgICAgaWYgKCFmZWVkLmNhbkNyZWF0ZVBsYXllcigpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCBpZnJhbWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZlZWQuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJytmZWVkLmluZGV4KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxvY2F0aW9uR3Vlc3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJGZlZWQgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGxvY2F0aW9uID0gJ2NvbnRlbnQnO1xuXG4gICAgICAgIGlmICgkZmVlZC5jbG9zZXN0KCdmb290ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICBsb2NhdGlvbiA9ICdmb290ZXInO1xuICAgICAgICB9IGVsc2UgaWYgKCRmZWVkLmNsb3Nlc3QoJy5oZWFkZXInKS5sZW5ndGhcbiAgICAgICAgICB8fCAkZmVlZC5jbG9zZXN0KCdoZWFkZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICBsb2NhdGlvbiA9ICdoZWFkZXInO1xuICAgICAgICB9IGVsc2UgaWYgKCRmZWVkLmNsb3Nlc3QoJy5zaWRlYmFyJykubGVuZ3RoXG4gICAgICAgICAgfHwgJGZlZWQuY2xvc2VzdCgnYXNpZGUnKS5sZW5ndGgpIHtcbiAgICAgICAgICBsb2NhdGlvbiA9ICdzaWRlYmFyJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gU2J5RmVlZFBybyhlbCwgaW5kZXgsIHNldHRpbmdzKSB7XG4gICAgICBTYnlGZWVkLmNhbGwodGhpcywgZWwsIGluZGV4LCBzZXR0aW5ncyk7XG5cbiAgICAgIHRoaXMuQ1RBID0ge307XG5cbiAgICAgIHRoaXMuaW5pdExheW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmluaXRHYWxsZXJ5TGF5b3V0KCk7XG4gICAgICAgIHRoaXMuaW5pdEdyaWQoKTtcblxuICAgICAgICB0aGlzLmluaXRDYXJvdXNlbHMoKTtcbiAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnc2J5YWZ0ZXJsYXlvdXRpbml0Jyk7XG4gICAgICAgIGV2dC5mZWVkID0gdGhpcztcbiAgICAgICAgalF1ZXJ5KHdpbmRvdykudHJpZ2dlcihldnQpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5pbml0R3JpZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAod2luZG93LnNieVNlbWlFYWdlckxvYWRpbmcgJiYgalF1ZXJ5KCcjc2J5X2xpZ2h0Ym94JykubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICAgIHBsYXllcklEID0gJ3NieV9sYi1wbGF5ZXInO1xuICAgICAgICAgIGpRdWVyeSgnI3NieV9saWdodGJveCcpLmFkZENsYXNzKCdzYnlfdmlkZW9fbGlnaHRib3gnKTtcblxuICAgICAgICAgIHZhciB2aWRlb0lEID0gJCh0aGlzLmVsKS5maW5kKCdzYnlfaXRlbScpLmZpcnN0KCkuYXR0cignZGF0YS12aWRlby1pZCcpLFxuICAgICAgICAgICAgYXV0b3BsYXkgPSBzYnlPcHRpb25zLmF1dG9wbGF5O1xuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSB7XG4gICAgICAgICAgICAgIGhvc3Q6IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIGZlZWQuZW1iZWRVUkwsXG4gICAgICAgICAgICAgIHZpZGVvSWQ6IHZpZGVvSUQsXG4gICAgICAgICAgICAgIHBsYXllclZhcnM6IHtcbiAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMSxcbiAgICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgICAgYXV0b3BsYXk6IGF1dG9wbGF5XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICBmZWVkLmFmdGVyU3RhdGVDaGFuZ2UocGxheWVySUQsIHZpZGVvSUQsIGRhdGEsICQoJyMnICsgcGxheWVySUQpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsX3dyYXAnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZmVlZC5tYXliZUFkZENUQShwbGF5ZXJJRCk7XG5cbiAgICAgICAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9IG5ldyB3aW5kb3cuWVQuUGxheWVyKHBsYXllcklELCBhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuaW5pdENhcm91c2VscyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZmVlZCA9IHRoaXMsXG4gICAgICAgICAgJHNlbGYgPSAkKHRoaXMuZWwpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29scyA9IHRoaXMuc2V0dGluZ3MuY29scyxcbiAgICAgICAgICBjb2xzbW9iaWxlID0gdGhpcy5zZXR0aW5ncy5jb2xzbW9iaWxlO1xuXG4gICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmFkZENsYXNzKCdzYnlfY2Fyb3VzZWwnKTtcbiAgICAgICAgJHNlbGYuZmluZCgnLnNieV9sb2FkX2J0bicpLnJlbW92ZSgpO1xuICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5jc3Moe1xuICAgICAgICAgICdwYWRkaW5nLXRvcCcgOiAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5jc3MoJ3BhZGRpbmctdG9wJyksXG4gICAgICAgICAgJ3BhZGRpbmctcmlnaHQnIDogJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwJykuY3NzKCdwYWRkaW5nLXRvcCcpLFxuICAgICAgICAgICdwYWRkaW5nLWJvdHRvbScgOiAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5jc3MoJ3BhZGRpbmctdG9wJyksXG4gICAgICAgICAgJ3BhZGRpbmctbGVmdCcgOiAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5jc3MoJ3BhZGRpbmctdG9wJylcbiAgICAgICAgfSk7XG4gICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJCh0aGlzKS5hdHRyKCdzdHlsZScsJCh0aGlzKS5hdHRyKCdzdHlsZScpLnJlcGxhY2UoJ3BhZGRpbmc6ICcrJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwJykuY3NzKCdwYWRkaW5nLXRvcCcpLCdwYWRkaW5nOiAnKyRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmNzcygncGFkZGluZy10b3AnKSArICcgIWltcG9ydGFudCcpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGFycm93cyA9IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXJvdXNlbFswXSxcbiAgICAgICAgICBwYWdpbmF0aW9uID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzFdLFxuICAgICAgICAgIGF1dG9wbGF5ID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzJdLFxuICAgICAgICAgIHRpbWUgPSBmZWVkLnNldHRpbmdzLmdlbmVyYWwuY2Fyb3VzZWxbM10sXG4gICAgICAgICAgbG9vcCA9IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXJvdXNlbFs0XSxcbiAgICAgICAgICByb3dzID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzVdO1xuICAgICAgICAvL0luaXRpYXRlIGNhcm91c2VsXG4gICAgICAgIGlmKCAhYXV0b3BsYXkgKSB0aW1lID0gZmFsc2U7XG5cbiAgICAgICAgLy9TZXQgZGVmYXVsdHMgZm9yIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiAgICAgICAgdmFyIGl0ZW1zVGFibGV0U21hbGwgPSBjb2xzLFxuICAgICAgICAgIGl0ZW1zTW9iaWxlID0gY29scyxcbiAgICAgICAgICBhcnJvd3MgPSBhcnJvd3MgPyAnb25ob3ZlcicgOiAnaGlkZScsXG4gICAgICAgICAgYXV0b3BsYXkgPSB0aW1lICE9PSBmYWxzZSxcbiAgICAgICAgICBoYXMycm93cyA9IChyb3dzID09IDIpLFxuICAgICAgICAgIGxvb3AgPSAoIWxvb3ApLFxuICAgICAgICAgIG9uQ2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgIGZlZWQuYWZ0ZXJSZXNpemUoKTtcbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYWZ0ZXJJbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgJHNlbGYgPSBqUXVlcnkoZmVlZC5lbCk7XG4gICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAuc2J5X2Nhcm91c2VsJykuZmFkZUluKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcC5zYnlfY2Fyb3VzZWwgLnNieV9pbmZvLCAuc2J5X293bDJyb3ctaXRlbSwuc2J5X2l0ZW1zX3dyYXAuc2J5X2Nhcm91c2VsJykuZmFkZUluKCk7XG5cbiAgICAgICAgICAgIH0sIDEpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgICAgICAgdmFyICRuYXZFbGVtZW50c1dyYXBwZXIgPSAkc2VsZi5maW5kKCcuc2J5LW93bC1uYXYnKTtcbiAgICAgICAgICAgICAgaWYgKGFycm93cyA9PT0gJ29uaG92ZXInKSB7XG5cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcnJvd3MgPT09ICdiZWxvdycpIHtcbiAgICAgICAgICAgICAgICB2YXIgJGRvdHMgPSAkc2VsZi5maW5kKCcuc2J5LW93bC1kb3RzJyksXG4gICAgICAgICAgICAgICAgICAkcHJldiA9ICRzZWxmLmZpbmQoJy5zYnktb3dsLXByZXYnKSxcbiAgICAgICAgICAgICAgICAgICRuZXh0ID0gJHNlbGYuZmluZCgnLnNieS1vd2wtbmV4dCcpLFxuICAgICAgICAgICAgICAgICAgJG5hdiA9ICRzZWxmLmZpbmQoJy5zYnktb3dsLW5hdicpLFxuICAgICAgICAgICAgICAgICAgJGRvdCA9ICRzZWxmLmZpbmQoJy5zYnktb3dsLWRvdCcpLFxuICAgICAgICAgICAgICAgICAgd2lkdGhEb3RzID0gJGRvdC5sZW5ndGggKiAkZG90LmlubmVyV2lkdGgoKSxcbiAgICAgICAgICAgICAgICAgIG1heFdpZHRoID0gJHNlbGYuaW5uZXJXaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgJHByZXYuYWZ0ZXIoJGRvdHMpO1xuXG4gICAgICAgICAgICAgICAgJG5hdi5jc3MoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XG4gICAgICAgICAgICAgICAgJG5leHQuY3NzKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpLmNzcygndG9wJywgJy02cHgnKS5jc3MoJ3JpZ2h0JywgTWF0aC5tYXgoKC41ICogJG5hdi5pbm5lcldpZHRoKCkgLSAuNSAqICh3aWR0aERvdHMpIC0gJG5leHQuaW5uZXJXaWR0aCgpIC0gNiksIDApKTtcbiAgICAgICAgICAgICAgICAkcHJldi5jc3MoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJykuY3NzKCd0b3AnLCAnLTZweCcpLmNzcygnbGVmdCcsIE1hdGgubWF4KCguNSAqICRuYXYuaW5uZXJXaWR0aCgpIC0gLjUgKiAod2lkdGhEb3RzKSAtICRwcmV2LmlubmVyV2lkdGgoKSAtIDYpLCAwKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyb3dzID09PSAnaGlkZScpIHtcbiAgICAgICAgICAgICAgICAkbmF2RWxlbWVudHNXcmFwcGVyLmFkZENsYXNzKCdoaWRlJykuaGlkZSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgLy9EaXNhYmxlIG1vYmlsZSBsYXlvdXRcbiAgICAgICAgaWYoICRzZWxmLmhhc0NsYXNzKCdzYnlfbW9iX2NvbF9hdXRvJykgKSB7XG4gICAgICAgICAgaXRlbXNUYWJsZXRTbWFsbCA9IDI7XG4gICAgICAgICAgaWYoIHBhcnNlSW50KGNvbHMpICE9IDIgKSBpdGVtc01vYmlsZSA9IDE7XG4gICAgICAgICAgaWYoIHBhcnNlSW50KGNvbHMpID09IDIgKSBpdGVtc01vYmlsZSA9IDI7IC8vSWYgdGhlIGNvbHMgYXJlIHNldCB0byAyIHRoZW4gZG9uJ3QgY2hhbmdlIHRvIDEgY29sIG9uIG1vYmlsZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1zTW9iaWxlID0gY29sc21vYmlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2Fyb3VzZWxBcmdzID0ge1xuICAgICAgICAgIGl0ZW1zOiBjb2xzLFxuICAgICAgICAgIGxvb3A6IGxvb3AsXG4gICAgICAgICAgcmV3aW5kOiAhbG9vcCxcbiAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXksXG4gICAgICAgICAgYXV0b3BsYXlUaW1lb3V0OiBNYXRoLm1heCh0aW1lLDIwMDApLFxuICAgICAgICAgIGF1dG9wbGF5SG92ZXJQYXVzZTogdHJ1ZSxcbiAgICAgICAgICBuYXY6IHRydWUsXG4gICAgICAgICAgbmF2VGV4dDogWyc8c3ZnIGNsYXNzPVwic3ZnLWlubGluZS0tZmEgZmEtY2hldnJvbi1sZWZ0IGZhLXctMTBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWZhLXByb2Nlc3NlZD1cIlwiIGRhdGEtcHJlZml4PVwiZmFcIiBkYXRhLWljb249XCJjaGV2cm9uLWxlZnRcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMzIwIDUxMlwiPjxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTM0LjUyIDIzOS4wM0wyMjguODcgNDQuNjljOS4zNy05LjM3IDI0LjU3LTkuMzcgMzMuOTQgMGwyMi42NyAyMi42N2M5LjM2IDkuMzYgOS4zNyAyNC41Mi4wNCAzMy45TDEzMS40OSAyNTZsMTU0LjAyIDE1NC43NWM5LjM0IDkuMzggOS4zMiAyNC41NC0uMDQgMzMuOWwtMjIuNjcgMjIuNjdjLTkuMzcgOS4zNy0yNC41NyA5LjM3LTMzLjk0IDBMMzQuNTIgMjcyLjk3Yy05LjM3LTkuMzctOS4zNy0yNC41NyAwLTMzLjk0elwiPjwvcGF0aD48L3N2Zz4nLCAnPHN2ZyBjbGFzcz1cInN2Zy1pbmxpbmUtLWZhIGZhLWNoZXZyb24tcmlnaHQgZmEtdy0xMFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGRhdGEtZmEtcHJvY2Vzc2VkPVwiXCIgZGF0YS1wcmVmaXg9XCJmYVwiIGRhdGEtaWNvbj1cImNoZXZyb24tcmlnaHRcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMzIwIDUxMlwiPjxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTI4NS40NzYgMjcyLjk3MUw5MS4xMzIgNDY3LjMxNGMtOS4zNzMgOS4zNzMtMjQuNTY5IDkuMzczLTMzLjk0MSAwbC0yMi42NjctMjIuNjY3Yy05LjM1Ny05LjM1Ny05LjM3NS0yNC41MjItLjA0LTMzLjkwMUwxODguNTA1IDI1NiAzNC40ODQgMTAxLjI1NWMtOS4zMzUtOS4zNzktOS4zMTctMjQuNTQ0LjA0LTMzLjkwMWwyMi42NjctMjIuNjY3YzkuMzczLTkuMzczIDI0LjU2OS05LjM3MyAzMy45NDEgMEwyODUuNDc1IDIzOS4wM2M5LjM3MyA5LjM3MiA5LjM3MyAyNC41NjguMDAxIDMzLjk0MXpcIj48L3BhdGg+PC9zdmc+J10sXG4gICAgICAgICAgZG90czogcGFnaW5hdGlvbixcbiAgICAgICAgICBvd2wycm93OiBoYXMycm93cyxcbiAgICAgICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICAgICAwOiB7XG4gICAgICAgICAgICAgIGl0ZW1zOiBpdGVtc01vYmlsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDQ4MDoge1xuICAgICAgICAgICAgICBpdGVtczogaXRlbXNUYWJsZXRTbWFsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDY0MDoge1xuICAgICAgICAgICAgICBpdGVtczogY29sc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICAgIG9uSW5pdGlhbGl6ZTogYWZ0ZXJJbml0XG4gICAgICAgIH07XG5cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc3RyaXBFbW9qaWh0bWwgPSBmdW5jdGlvbiAoJGVsKSB7XG4gICAgICAgICRlbC5maW5kKCcuZW1vamknKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICQodGhpcykucmVwbGFjZVdpdGgoJCh0aGlzKS5hdHRyKCdhbHQnKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZWwuaHRtbCgpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5hZnRlckl0ZW1SZXZlYWxlZCA9IGZ1bmN0aW9uKCRpdGVtKSB7XG5cbiAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICBpZiAoJGl0ZW0uZmluZCgnLnNieV9jYXB0aW9uJykubGVuZ3RoICYmICEgJGl0ZW0uZmluZCgnLnNieV9jYXB0aW9uJykuaGFzQ2xhc3MoJ3NieV9mdWxsX2NhcHRpb24nKSkge1xuICAgICAgICAgIC8vRXhwYW5kIHBvc3RcbiAgICAgICAgICB2YXIgJGNhcHRpb24gPSAkaXRlbS5maW5kKCcuc2J5X2l0ZW1fY2FwdGlvbl93cmFwIC5zYnlfY2FwdGlvbicpLFxuICAgICAgICAgICAgJGhvdmVyQ2FwdGlvbiA9ICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwgLnNieV9jYXB0aW9uJyksXG4gICAgICAgICAgICB0ZXh0X2xpbWl0ID0gdHlwZW9mIGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5kZXNjcmlwdGlvbmxlbmd0aCAhPT0gJ3VuZGVmaW5lZCcgPyBwYXJzZUludChmZWVkLnNldHRpbmdzLmdlbmVyYWwuZGVzY3JpcHRpb25sZW5ndGgpIDogMTUwO1xuICAgICAgICAgIGlmICh0ZXh0X2xpbWl0IDwgMSkgdGV4dF9saW1pdCA9IDk5OTk5O1xuICAgICAgICAgIC8vU2V0IHRoZSBmdWxsIHRleHQgdG8gYmUgdGhlIGNhcHRpb24gKHVzZWQgaW4gdGhlIGltYWdlIGFsdClcblxuICAgICAgICAgIHZhciBjYXB0aW9uVGV4dCA9IHRoaXMuc3RyaXBFbW9qaWh0bWwoJGl0ZW0uZmluZCgnLnNieV9jYXB0aW9uJykuZmlyc3QoKSksXG4gICAgICAgICAgICBickNvdW50ID0gKGNhcHRpb25UZXh0Lm1hdGNoKC88YnI+L2cpIHx8IFtdKS5sZW5ndGgsXG4gICAgICAgICAgICBickFkanVzdCA9ICh0eXBlb2Ygc2J5T3B0aW9ucy5ickFkanVzdCA9PT0gJ3VuZGVmaW5lZCcgfHwgc2J5T3B0aW9ucy5ickFkanVzdCA9PT0gJzEnIHx8IHNieU9wdGlvbnMuYnJBZGp1c3QgPT09IHRydWUpO1xuICAgICAgICAgIC8vIHJlcGxhY2UgZW1vamkgd2l0aCBhbHQgZm9yIG1vcmUgYWNjdXJhdGUgc2hvcnRlbmluZ1xuICAgICAgICAgIGlmIChickFkanVzdCAmJiBickNvdW50ID4gMCAmJiBjYXB0aW9uVGV4dC5pbmRleE9mKCc8YnI+JykgPCB0ZXh0X2xpbWl0KSB7XG4gICAgICAgICAgICB2YXIgJHNpemluZ0NhcHRpb24gPSAkaXRlbS5maW5kKCcuc2J5X2NhcHRpb24nKS5maXJzdCgpO1xuICAgICAgICAgICAgY2FwdGlvbldpZHRoID0gJHNpemluZ0NhcHRpb24ud2lkdGgoKSA+IDIwID8gJHNpemluZ0NhcHRpb24ud2lkdGgoKSA6ICRpdGVtLndpZHRoKCksXG4gICAgICAgICAgICAgIGZvbnRTaXplID0gJHNpemluZ0NhcHRpb24uY3NzKCdmb250LXNpemUnKSxcbiAgICAgICAgICAgICAgY2hhcmFjdGVyc1BlckxpbmUgPSBjYXB0aW9uV2lkdGggLyBwYXJzZUludChmb250U2l6ZSkgKiAxLjg1LFxuICAgICAgICAgICAgICBtYXhDaGFyc1BlckxpbmUgPSBNYXRoLmZsb29yKGNoYXJhY3RlcnNQZXJMaW5lKSxcbiAgICAgICAgICAgICAgcHJvamVjdGVkTWF4TGluZXMgPSBNYXRoLmNlaWwodGV4dF9saW1pdCAvIGNoYXJhY3RlcnNQZXJMaW5lKTtcblxuICAgICAgICAgICAgdmFyIHNwbGl0Q2FwdGlvbiA9IGNhcHRpb25UZXh0LnNwbGl0KCc8YnI+JyksXG4gICAgICAgICAgICAgIGxpbmVzQ29uc3VtZWQgPSAwLFxuICAgICAgICAgICAgICBhZGp1c3RlZFRleHRMaW1pdCA9IDA7XG4gICAgICAgICAgICBqUXVlcnkuZWFjaChzcGxpdENhcHRpb24sIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICB2YXIgbGluZXNMZWZ0ID0gcHJvamVjdGVkTWF4TGluZXMgLSBsaW5lc0NvbnN1bWVkO1xuICAgICAgICAgICAgICBpZiAobGluZXNMZWZ0ID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzTGluZXNDb25zdW1lZCA9IE1hdGgubWF4KDEsIE1hdGguY2VpbCh0aGlzLmxlbmd0aCAvIGNoYXJhY3RlcnNQZXJMaW5lKSk7XG5cbiAgICAgICAgICAgICAgICBhZGp1c3RlZFRleHRMaW1pdCArPSBNYXRoLm1pbih0aGlzLmxlbmd0aCArIDQsIGxpbmVzTGVmdCAqIG1heENoYXJzUGVyTGluZSk7XG4gICAgICAgICAgICAgICAgbGluZXNDb25zdW1lZCArPSB0aGlzTGluZXNDb25zdW1lZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRleHRfbGltaXQgPSBhZGp1c3RlZFRleHRMaW1pdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc2hvcnRfdGV4dCA9IGNhcHRpb25UZXh0LnN1YnN0cmluZygwLCB0ZXh0X2xpbWl0KTtcbiAgICAgICAgICBzaG9ydF90ZXh0ID0gY2FwdGlvblRleHQubGVuZ3RoID4gdGV4dF9saW1pdCA/IHNob3J0X3RleHQuc3Vic3RyKDAsIE1hdGgubWluKHNob3J0X3RleHQubGVuZ3RoLCBzaG9ydF90ZXh0Lmxhc3RJbmRleE9mKFwiIFwiKSkpIDogc2hvcnRfdGV4dDtcblxuXG4gICAgICAgICAgLy9DdXQgdGhlIHRleHQgYmFzZWQgb24gbGltaXRzIHNldFxuICAgICAgICAgIGlmICgkY2FwdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICRjYXB0aW9uLmh0bWwoc2J5TGlua2lmeShzaG9ydF90ZXh0KSk7XG4gICAgICAgICAgICBpZiAoc2hvcnRfdGV4dCA9PT0gY2FwdGlvblRleHQpIHtcbiAgICAgICAgICAgICAgJGNhcHRpb24ubmV4dCgnLnNieV9leHBhbmQnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRob3ZlckNhcHRpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgaG92ZXJDYXB0aW9uVGV4dCA9IHNob3J0X3RleHQ7XG4gICAgICAgICAgICBpZiAoc2hvcnRfdGV4dCAhPT0gY2FwdGlvblRleHQpIHtcbiAgICAgICAgICAgICAgaG92ZXJDYXB0aW9uVGV4dCArPSAnPHNwYW4gY2xhc3M9XCJzYnlfbW9yZVwiPi4uLjwvc3Bhbj4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGhvdmVyQ2FwdGlvbi5odG1sKGhvdmVyQ2FwdGlvblRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vU2hvdyB0aGUgJ1NlZSBNb3JlJyBsaW5rIGlmIG5lZWRlZFxuICAgICAgICAgIGlmIChjYXB0aW9uVGV4dC5sZW5ndGggPiB0ZXh0X2xpbWl0KSB7XG4gICAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X2V4cGFuZCcpLnNob3coKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9DbGljayBmdW5jdGlvblxuICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfZXhwYW5kIGEnKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHZhciAkZXhwYW5kID0galF1ZXJ5KHRoaXMpO1xuICAgICAgICAgICAgJGNhcHRpb24gPSB0eXBlb2YgJGNhcHRpb24gIT09ICd1bmRlZmluZWQnID8gJGNhcHRpb24gOiAkaXRlbS5maW5kKCcuc2J5X2luZm8gLnNieV9jYXB0aW9uJyk7XG4gICAgICAgICAgICBjYXB0aW9uVGV4dCA9IHR5cGVvZiBjYXB0aW9udGV4dCAhPT0gJ3VuZGVmaW5lZCcgPyBjYXB0aW9uVGV4dCA6ICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXRpdGxlJyk7XG4gICAgICAgICAgICBpZiAoJGl0ZW0uaGFzQ2xhc3MoJ3NieV9jYXB0aW9uX2Z1bGwnKSAmJiB0eXBlb2Ygc2hvcnRfdGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgJGNhcHRpb24uaHRtbChzaG9ydF90ZXh0KTtcbiAgICAgICAgICAgICAgJGl0ZW0ucmVtb3ZlQ2xhc3MoJ3NieV9jYXB0aW9uX2Z1bGwnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICRjYXB0aW9uLmh0bWwoc2J5TGlua2lmeShjYXB0aW9uVGV4dCkpO1xuICAgICAgICAgICAgICAkaXRlbS5hZGRDbGFzcygnc2J5X2NhcHRpb25fZnVsbCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVlZC5hZnRlclJlc2l6ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRVcENUQSgkaXRlbSk7XG5cbiAgICAgICAgLy9QaG90byBsaW5rc1xuICAgICAgICAvL0lmIGxpZ2h0Ym94IGlzIGRpc2FibGVkXG4gICAgICAgIHZhciBkaXNhYmxlbGlnaHRib3ggPSB0eXBlb2YgZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmRpc2FibGVsaWdodGJveCAhPT0gJ3VuZGVmaW5lZCcgPyBmZWVkLnNldHRpbmdzLmdlbmVyYWwuZGlzYWJsZWxpZ2h0Ym94IDogZmFsc2UsXG4gICAgICAgICAgY2FwdGlvbmxpbmtzID0gdHlwZW9mIGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXB0aW9ubGlua3MgIT09ICd1bmRlZmluZWQnID8gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcHRpb25saW5rcyA6IGZhbHNlO1xuICAgICAgICBpZiggZGlzYWJsZWxpZ2h0Ym94IHx8IGNhcHRpb25saW5rcyApe1xuXG4gICAgICAgICAgaWYgKGNhcHRpb25saW5rcykge1xuICAgICAgICAgICAgZnVuY3Rpb24gc2J5VXJsRGV0ZWN0KHRleHQpIHtcbiAgICAgICAgICAgICAgdmFyIHVybFJlZ2V4ID0gL2h0dHBzPzpcXC9cXC8od3d3XFwuKT9bLWEtekEtWjAtOUA6JS5fXFwrfiM9XXsyLDI1Nn1cXC5bYS16XXsyLDZ9XFxiKFstYS16QS1aMC05QDolX1xcKy5+Iz8mLy89XSopL2c7XG4gICAgICAgICAgICAgIHJldHVybiB0ZXh0Lm1hdGNoKHVybFJlZ2V4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhcCA9ICcnO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiAkaXRlbS5maW5kKCdpbWcnKS5hdHRyKCdhbHQnKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgY2FwID0gJGl0ZW0uZmluZCgnaW1nJykuYXR0cignYWx0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAkaXRlbS5maW5kKCd2aWRlbycpLmF0dHIoJ2FsdCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjYXAgPSAkaXRlbS5maW5kKCd2aWRlbycpLmF0dHIoJ2FsdCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdXJsID0gc2J5VXJsRGV0ZWN0KGNhcCk7XG4gICAgICAgICAgICBpZih1cmwpIHtcbiAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnYScpLmF0dHIoJ2hyZWYnLCB1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X2xpbmsnKS5hZGRDbGFzcygnc2J5X2Rpc2FibGVfbGlnaHRib3gnKTtcbiAgICAgICAgICAvL0lmIGxpZ2h0Ym94IGlzIGVuYWJsZWQgYWRkIGxpZ2h0Ym94IGxpbmtzXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICB2YXIgJHNieV9waG90b193cmFwID0gJGl0ZW0uZmluZCgnLnNieV9waG90b193cmFwJyksXG4gICAgICAgICAgICAkc2J5X2xpbmsgPSAkc2J5X3Bob3RvX3dyYXAuZmluZCgnLnNieV9saW5rJyk7XG4gICAgICAgICAgZmVlZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBob3ZlcmVmZmVjdDogJ3RydWUnXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZihmZWVkT3B0aW9ucy5ob3ZlcmVmZmVjdCA9PSAnbm9uZScpe1xuICAgICAgICAgICAgLy9sYXVuY2ggbGlnaHRib3ggb24gY2xpY2tcbiAgICAgICAgICAgICRzYnlfbGluay5jc3MoJ2JhY2tncm91bmQnLCAnbm9uZScpLnNob3coKTtcbiAgICAgICAgICAgICRzYnlfbGluay5maW5kKCcqJykuaGlkZSgpLmVuZCgpLmZpbmQoJy5zYnlfbGlua19hcmVhJykuc2hvdygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc2J5X3Bob3RvX3dyYXAub24oJ21vdXNlZW50ZXIgbW91c2VsZWF2ZScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgc3dpdGNoKGUudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ21vdXNlZW50ZXInOlxuICAgICAgICAgICAgICAgICAgJGl0ZW0uYWRkQ2xhc3MoJ3NieV9hbmltYXRlJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtb3VzZWxlYXZlJzpcbiAgICAgICAgICAgICAgICAgICRpdGVtLnJlbW92ZUNsYXNzKCdzYnlfYW5pbWF0ZScpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdmlkZW9JRCA9IHR5cGVvZiAkaXRlbS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnID8gJGl0ZW0uYXR0cignZGF0YS12aWRlby1pZCcpIDogJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG4gICAgICAgIHRoaXMubW9zdFJlY2VudGx5TG9hZGVkUG9zdHMucHVzaCh2aWRlb0lEKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuYWZ0ZXJGZWVkU2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYXJvdXNlbEFyZ3MgIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICQodGhpcy5lbCkuZmluZCgnLnNieV9jYXJvdXNlbCcpLnNieU93bENhcm91c2VsKHRoaXMuY2Fyb3VzZWxBcmdzKTtcbiAgICAgICAgICBpZiAocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzVdKSA9PT0gMikge1xuICAgICAgICAgICAgJCh0aGlzLmVsKS5hZGRDbGFzcygnc2J5X2Nhcm91c2VsXzJfcm93Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc2V0VXBDVEEgPSBmdW5jdGlvbigkaXRlbSx2aWRlb0lEKSB7XG4gICAgICAgIC8vd2luZG93LnNieS5jdGFzXG5cbiAgICAgICAgdmFyIHZpZGVvSUQgPSB0eXBlb2YgdmlkZW9JRCAhPT0gJ3VuZGVmaW5lZCcgPyB2aWRlb0lEIDogJGl0ZW0uZmluZCgnLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSxcbiAgICAgICAgICB0ZXh0ID0gdHlwZW9mICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXRpdGxlJykgIT09ICd1bmRlZmluZWQnID8gJGl0ZW0uZmluZCgnLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtdGl0bGUnKSA6ICcnLFxuICAgICAgICAgIGN0YUluQ2FwdGlvbiA9IHdpbmRvdy5zYnkuY3RhRGV0ZWN0KHRleHQpO1xuXG4gICAgICAgIGlmIChjdGFJbkNhcHRpb24pIHtcbiAgICAgICAgICB3aW5kb3cuc2J5LmN0YXNbdmlkZW9JRF0gPSBjdGFJbkNhcHRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2luZG93LnNieS5jdGFzW3ZpZGVvSURdID0gdGhpcy5nZXREZWZhdWx0Q1RBKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZ2V0RGVmYXVsdENUQSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS50eXBlICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS50eXBlID09PSAnbGluaycpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrOiAnbGluaycsXG4gICAgICAgICAgICAgIHVybDogdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS5kZWZhdWx0TGluayxcbiAgICAgICAgICAgICAgdGV4dDogdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS5kZWZhdWx0VGV4dCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2s6ICdyZWxhdGVkJyxcbiAgICAgICAgICAgICAgcmVsYXRlZDogdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS5kZWZhdWx0UG9zdHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFmdGVyUmVzaXplID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2V0SW1hZ2VIZWlnaHQoKTtcbiAgICAgICAgdGhpcy5zZXRJbWFnZVJlc29sdXRpb24oKTtcbiAgICAgICAgdGhpcy5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgIHRoaXMuc2V0SW1hZ2VTaXplQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5zZXRBbGxDVEFEaW1lbnNpb25zKCk7XG4gICAgICAgIHRoaXMuc2l6ZVBsYXllcigpO1xuICAgICAgICB0aGlzLnNpemVJdGVtcygpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5zZXRBbGxDVEFEaW1lbnNpb25zID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICQuZWFjaCh0aGlzLkNUQSwgZnVuY3Rpb24oaW5kZXgsIENUQU9iaikge1xuICAgICAgICAgIGlmIChDVEFPYmouaXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgQ1RBT2JqLnNldENUQVN0eWxlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFmdGVyU2VuZENoZWNrV1BQb3N0c1RvU2VydmVyID0gZnVuY3Rpb24ocmVzcG9uc2Upe1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpO1xuXG4gICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZVsgJCh0aGlzKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2VbICQodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpIF07XG4gICAgICAgICAgICAvL3NieV92aWV3c19jb3VudFxuICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X3ZpZXdfY291bnQnKS50ZXh0KGRhdGEuc2J5X3ZpZXdfY291bnQpO1xuICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2NvbW1lbnRfY291bnQnKS50ZXh0KGRhdGEuc2J5X2NvbW1lbnRfY291bnQpO1xuICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2xpa2VfY291bnQnKS50ZXh0KGRhdGEuc2J5X2xpa2VfY291bnQpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmJyb2FkY2FzdF90eXBlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2xzX21lc3NhZ2UnKS50ZXh0KGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX3N0cmluZyk7XG4gICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9kYXRlJykuaHRtbChkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5saXZlX3N0cmVhbWluZ19kYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5zYnlfbGl2ZV9icm9hZGNhc3QubGl2ZV9zdHJlYW1pbmdfdGltZXN0YW1wICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2RhdGEtbGl2ZS1kYXRlJyxkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5saXZlX3N0cmVhbWluZ190aW1lc3RhbXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLnNieV9kZXNjcmlwdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS10aXRsZScsZGF0YS5zYnlfZGVzY3JpcHRpb24gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX2l0ZW0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VbICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2VbICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgXTtcbiAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV92aWV3X2NvdW50JykudGV4dChkYXRhLnNieV92aWV3X2NvdW50KTtcbiAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9jb21tZW50X2NvdW50JykudGV4dChkYXRhLnNieV9jb21tZW50X2NvdW50KTtcbiAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9saWtlX2NvdW50JykudGV4dChkYXRhLnNieV9saWtlX2NvdW50KTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5icm9hZGNhc3RfdHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9sc19tZXNzYWdlJykudGV4dChkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5saXZlX3N0cmVhbWluZ19zdHJpbmcpO1xuICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy5zYnlfZGF0ZScpLmh0bWwoZGF0YS5zYnlfbGl2ZV9icm9hZGNhc3QubGl2ZV9zdHJlYW1pbmdfZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX3RpbWVzdGFtcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdkYXRhLWxpdmUtZGF0ZScsZGF0YS5zYnlfbGl2ZV9icm9hZGNhc3QubGl2ZV9zdHJlYW1pbmdfdGltZXN0YW1wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ3NieWFmdGVyY2hlY2twb3N0cycpO1xuICAgICAgICBldnQuZmVlZCA9IHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdO1xuICAgICAgICBldnQucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgalF1ZXJ5KHdpbmRvdykudHJpZ2dlcihldnQpO1xuXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFmdGVyU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbihwbGF5ZXJJRCx2aWRlb0lELGRhdGEsJHBsYXllcikge1xuICAgICAgfTtcblxuICAgICAgdGhpcy5jaGFuZ2VQbGF5ZXJJbmZvID0gZnVuY3Rpb24oJG5ld0l0ZW0pIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKTtcbiAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmZpbmQoJy5zYnlfaW5mbycpLnJlcGxhY2VXaXRoKFxuICAgICAgICAgICRuZXdJdGVtLmZpbmQoJy5zYnlfaW5mbycpLmNsb25lKHRydWUsdHJ1ZSlcbiAgICAgICAgKTtcbiAgICAgICAgLy9zYnlfaW5mb1xuICAgICAgfTtcblxuICAgICAgdGhpcy5tYXliZUFkZENUQSA9IGZ1bmN0aW9uKHBsYXllcklELCRlbCkge1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBTYnlGZWVkUHJvLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2J5RmVlZC5wcm90b3R5cGUpO1xuXG4gICAgZnVuY3Rpb24gU2J5TGlnaHRib3hCdWlsZGVyKCkge31cblxuICAgIFNieUxpZ2h0Ym94QnVpbGRlci5wcm90b3R5cGUgPSB7XG4gICAgICBnZXREYXRhOiBmdW5jdGlvbihhKXtcbiAgICAgICAgdmFyIGNsb3Nlc3RGZWVkSW5kZXggPSBwYXJzZUludChhLmNsb3Nlc3QoJy5zYl95b3V0dWJlJykuYXR0cignZGF0YS1zYnktaW5kZXgnKS0xKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmZWVkSW5kZXggOiBjbG9zZXN0RmVlZEluZGV4LFxuICAgICAgICAgIGxpbms6IGEuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgdmlkZW9UaXRsZTogdHlwZW9mIGEuYXR0cihcImRhdGEtdmlkZW8tdGl0bGVcIikgIT09ICd1bmRlZmluZWQnID8gYS5hdHRyKFwiZGF0YS12aWRlby10aXRsZVwiKSA6ICdZb3VUdWJlIFZpZGVvJyxcbiAgICAgICAgICB2aWRlbzogYS5hdHRyKFwiZGF0YS12aWRlby1pZFwiKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdGVtcGxhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiPGRpdiBpZD0nc2J5X2xpZ2h0Ym94T3ZlcmxheScgY2xhc3M9J3NieV9saWdodGJveE92ZXJsYXknPjwvZGl2PlwiK1xuICAgICAgICAgIFwiPGRpdiBpZD0nc2J5X2xpZ2h0Ym94JyBjbGFzcz0nc2J5X2xpZ2h0Ym94Jz5cIitcbiAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1vdXRlckNvbnRhaW5lcic+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItY29udGFpbmVyJz5cIitcbiAgICAgICAgICBcIjxpbWcgY2xhc3M9J3NieV9sYi1pbWFnZScgYWx0PSdMaWdodGJveCBpbWFnZSBwbGFjZWhvbGRlcicgc3JjPScnIC8+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItcGxheWVyIHNieV9sYi1wbGF5ZXItcGxhY2Vob2xkZXInIGlkPSdzYnlfbGItcGxheWVyJz48L2Rpdj5cIiArXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItbmF2Jz48YSBjbGFzcz0nc2J5X2xiLXByZXYnIGhyZWY9JyMnID48cCBjbGFzcz0nc2J5LXNjcmVlbnJlYWRlcic+UHJldmlvdXMgU2xpZGU8L3A+PHNwYW4+PC9zcGFuPjwvYT48YSBjbGFzcz0nc2J5X2xiLW5leHQnIGhyZWY9JyMnID48cCBjbGFzcz0nc2J5LXNjcmVlbnJlYWRlcic+TmV4dCBTbGlkZTwvcD48c3Bhbj48L3NwYW4+PC9hPjwvZGl2PlwiK1xuICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLWxvYWRlcic+PGEgY2xhc3M9J3NieV9sYi1jYW5jZWwnPjwvYT48L2Rpdj5cIitcbiAgICAgICAgICBcIjwvZGl2PlwiK1xuICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItZGF0YUNvbnRhaW5lcic+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItZGF0YSc+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItZGV0YWlscyc+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItY2FwdGlvbic+PC9kaXY+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItaW5mbyc+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItbnVtYmVyJz48L2Rpdj5cIitcbiAgICAgICAgICBcIjwvZGl2PlwiK1xuICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItY2xvc2VDb250YWluZXInPjxhIGNsYXNzPSdzYnlfbGItY2xvc2UnPjwvYT48L2Rpdj5cIitcbiAgICAgICAgICBcIjwvZGl2PlwiK1xuICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgXCI8L2Rpdj5cIjtcbiAgICAgIH0sXG4gICAgICBiZWZvcmVQbGF5ZXJTZXR1cDogZnVuY3Rpb24oJGxpZ2h0Ym94LGRhdGEsaW5kZXgsYWxidW0sZmVlZCl7XG5cbiAgICAgIH0sXG4gICAgICBhZnRlclBsYXllclNldHVwOiBmdW5jdGlvbiAoJGxpZ2h0Ym94LGRhdGEsaW5kZXgsYWxidW0pIHtcbiAgICAgIH0sXG4gICAgICBhZnRlclJlc2l6ZTogZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHBsYXllckhlaWdodCA9ICQoJyNzYnlfbGlnaHRib3ggLnNieV9sYi1wbGF5ZXInKS5oZWlnaHQoKTtcblxuICAgICAgICBpZiAocGxheWVySGVpZ2h0ID4gMTAwKSB7XG4gICAgICAgICAgdmFyIGhlaWdodERpZiA9ICQoJyNzYnlfbGlnaHRib3ggLnNieV9sYi1vdXRlckNvbnRhaW5lcicpLmhlaWdodCgpIC0gcGxheWVySGVpZ2h0O1xuICAgICAgICAgIGlmIChoZWlnaHREaWYgPiAxMCkge1xuICAgICAgICAgICAgJCgnI3NieV9saWdodGJveCAuc2J5X2xiLXBsYXllcicpLmNzcygndG9wJyxoZWlnaHREaWYvMik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcGF1c2VQbGF5ZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgJiYgdHlwZW9mIFlUID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIFlULmdldCgnc2J5X2xiLXBsYXllcicpICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICYmIHR5cGVvZiBZVC5nZXQoJ3NieV9sYi1wbGF5ZXInKS5wYXVzZVZpZGVvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgWVQuZ2V0KCdzYnlfbGItcGxheWVyJykucGF1c2VWaWRlbygpXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAmJiB0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyLnBhdXNlVmlkZW8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIucGF1c2VWaWRlbygpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LnNieV9pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB3aW5kb3cuc2J5ID0gbmV3IFNieSgpO1xuICAgICAgd2luZG93LnNieS5jcmVhdGVQYWdlKCB3aW5kb3cuc2J5LmNyZWF0ZUZlZWRzLCB7d2hlbkZlZWRzQ3JlYXRlZDogd2luZG93LnNieS5hZnRlckZlZWRzQ3JlYXRlZH0pO1xuICAgIH07XG5cbiAgICB3aW5kb3cuc2J5X2Nhcm91c2VsX2luaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdsb2cnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYnlHZXROZXdGZWVkKGZlZWQsaW5kZXgsZmVlZE9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBuZXcgU2J5RmVlZFBybyhmZWVkLGluZGV4LGZlZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYnlHZXRsaWdodGJveEJ1aWxkZXIoKSB7XG4gICAgICByZXR1cm4gbmV3IFNieUxpZ2h0Ym94QnVpbGRlcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNieUFqYXgoc3VibWl0RGF0YSxvblN1Y2Nlc3MpIHtcbiAgICAgICQuYWpheCh7XG4gICAgICAgIHVybDogc2J5T3B0aW9ucy5hZG1pbkFqYXhVcmwsXG4gICAgICAgIHR5cGU6ICdwb3N0JyxcbiAgICAgICAgZGF0YTogc3VibWl0RGF0YSxcbiAgICAgICAgc3VjY2Vzczogb25TdWNjZXNzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYnlJc1RvdWNoKCkge1xuICAgICAgaWYgKFwib250b3VjaHN0YXJ0XCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNieUNtcGx6R2V0Q29va2llKGNuYW1lKSB7XG4gICAgICB2YXIgbmFtZSA9IGNuYW1lICsgXCI9XCI7IC8vQ3JlYXRlIHRoZSBjb29raWUgbmFtZSB2YXJpYWJsZSB3aXRoIGNvb2tpZSBuYW1lIGNvbmNhdGVuYXRlIHdpdGggPSBzaWduXG4gICAgICB2YXIgY0FyciA9IHdpbmRvdy5kb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgLy9DcmVhdGUgY29va2llIGFycmF5IGJ5IHNwbGl0IHRoZSBjb29raWUgYnkgJzsnXG5cbiAgICAgIC8vTG9vcCB0aHJvdWdoIHRoZSBjb29raWVzIGFuZCByZXR1cm4gdGhlIGNvb2tpZSB2YWx1ZSBpZiBpdCBmaW5kIHRoZSBjb29raWUgbmFtZVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gY0FycltpXS50cmltKCk7XG4gICAgICAgIC8vSWYgdGhlIG5hbWUgaXMgdGhlIGNvb2tpZSBzdHJpbmcgYXQgcG9zaXRpb24gMCwgd2UgZm91bmQgdGhlIGNvb2tpZSBhbmQgcmV0dXJuIHRoZSBjb29raWUgdmFsdWVcbiAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lKSA9PSAwKVxuICAgICAgICAgIHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cblxuICB9KShqUXVlcnkpO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93LnNieUVhZ2VyTG9hZGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB3aW5kb3cuc2J5RWFnZXJMb2FkaW5nID0gdHlwZW9mIHdpbmRvdy5zYnlPcHRpb25zICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5zYnlPcHRpb25zLmVhZ2VybG9hZCA6IGZhbHNlO1xuICAgIGlmIChqUXVlcnkoJy5lbGVtZW50b3Itd2lkZ2V0LXZpZGVvJykubGVuZ3RoKSB7XG4gICAgICB2YXIgc2V0dGluZ3MgPSB0eXBlb2YgalF1ZXJ5KCcuZWxlbWVudG9yLXdpZGdldC12aWRlbycpLmF0dHIoJ2RhdGEtc2V0dGluZ3MnKSAhPT0gJ3VuZGVmaW5lZCcgPyBKU09OLnBhcnNlKCBqUXVlcnkoJy5lbGVtZW50b3Itd2lkZ2V0LXZpZGVvJykuYXR0cignZGF0YS1zZXR0aW5ncycpKSA6IGZhbHNlO1xuICAgICAgaWYgKHNldHRpbmdzICYmIHR5cGVvZiBzZXR0aW5ncy55b3V0dWJlX3VybCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LnNieUVhZ2VyTG9hZGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGpRdWVyeSgnZGl2W2RhdGEtdmMtdmlkZW8tYmddJykubGVuZ3RoKSB7XG4gICAgICB3aW5kb3cuc2J5RWFnZXJMb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZyA9IHR5cGVvZiB3aW5kb3cuc2J5T3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuc2J5T3B0aW9ucy5zZW1pRWFnZXJsb2FkIDogZmFsc2U7XG4gICAgaWYgKGpRdWVyeSgnZGl2W2RhdGEtdmMtdmlkZW8tYmddJykubGVuZ3RoIHx8IHdpbmRvdy5zYnlFYWdlckxvYWRpbmcpIHtcbiAgICAgIHdpbmRvdy5zYnlTZW1pRWFnZXJMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKSB7XG4gICAgaWYgKCF3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZykge1xuICAgICAgc2J5X2luaXQoKTtcbiAgICB9XG5cbiAgICAvLyBDb29raWUgTm90aWNlIGJ5IGRGYWN0b3J5XG4gICAgJCgnI2Nvb2tpZS1ub3RpY2UgYScpLm9uKCdjbGljaycsZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwxMDAwKTtcbiAgICB9KTtcblxuICAgIC8vIENvb2tpZSBOb3RpY2UgYnkgZEZhY3RvcnlcbiAgICAkKCcjY29va2llLWxhdy1pbmZvLWJhciBhJykub24oJ2NsaWNrJyxmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLmFmdGVyQ29uc2VudFRvZ2dsZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LDEwMDApO1xuICAgIH0pO1xuXG4gICAgLy8gR0RQUiBDb29raWUgQ29uc2VudCBieSBXZWJUb2ZmZWVcbiAgICAkKCcuY2xpLXVzZXItcHJlZmVyZW5jZS1jaGVja2JveCcpLm9uKCdjbGljaycsZnVuY3Rpb24oKXtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IGZhbHNlO1xuICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0sMTAwMCk7XG4gICAgfSk7XG5cbiAgICAvLyBDb29raWVib3RcbiAgICAkKHdpbmRvdykub24oJ0Nvb2tpZWJvdE9uQWNjZXB0JywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uc2V0dGluZ3MuY29uc2VudEdpdmVuID0gdHJ1ZTtcbiAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIENvbXBsaWFueiBieSBSZWFsbHkgU2ltcGxlIFBsdWdpbnNcbiAgICAkKGRvY3VtZW50KS5vbignY21wbHpFbmFibGVTY3JpcHRzJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoIGV2ZW50LmRldGFpbCA9PT0gJ21hcmtldGluZycgKSB7XG4gICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IHRydWU7XG4gICAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJChkb2N1bWVudCkub24oJ2NtcGx6RmlyZUNhdGVnb3JpZXMnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICggZXZlbnQuZGV0YWlsLmNhdGVnb3J5PT09J21hcmtldGluZycgKSB7XG4gICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IHRydWU7XG4gICAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQm9ybGFicyBDb29raWUgYnkgQm9ybGFic1xuICAgICQoZG9jdW1lbnQpLm9uKCdib3JsYWJzLWNvb2tpZS1jb25zZW50LXNhdmVkJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uc2V0dGluZ3MuY29uc2VudEdpdmVuID0gZmFsc2U7XG4gICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG59IC8vIGlmIHNieV9qc19leGlzdHNcblxuaWYgKHdpbmRvdy5zYnlTZW1pRWFnZXJMb2FkaW5nKSB7XG4gIHZhciBzYnlZU2NyaXB0SWQgPSBcInNieS15b3V0dWJlLWFwaVwiO1xuICB2YXIgc2J5WVNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNieVlTY3JpcHRJZCk7XG5cbiAgaWYgKHNieVlTY3JpcHQgPT09IG51bGwpIHtcbiAgICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICB2YXIgZmlyc3RTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKVswXTtcblxuICAgIHRhZy5zcmMgPSBcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2lmcmFtZV9hcGlcIjtcbiAgICB0YWcuaWQgPSBzYnlZU2NyaXB0SWQ7XG4gICAgZmlyc3RTY3JpcHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGFnLCBmaXJzdFNjcmlwdCk7XG5cbiAgfVxufVxuXG53aW5kb3cub25Zb3VUdWJlSWZyYW1lQVBJUmVhZHkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG51bUZlZWRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc2JfeW91dHViZScpLmxlbmd0aDtcbiAgaWYgKG51bUZlZWRzID4gMCkge1xuICAgIGlmICh3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZykge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUZlZWRzOyBpKyspIHtcbiAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzW2ldLnBsYXllckFQSVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnNieUFQSVJlYWR5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHNieV9pbml0KCk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgaWYgKHdpbmRvdy5zYnlFYWdlckxvYWRpbmcpIHtcbiAgICAgICAgdmFyIGZsYWdMaWdodGJveCA9IGZhbHNlLFxuICAgICAgICAgIGF1dG9wbGF5ID0gZmFsc2U7XG5cbiAgICAgICAgalF1ZXJ5KCcuc2JfeW91dHViZScpLmVhY2goZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgICB2YXIgJHNlbGYgPSBqUXVlcnkodGhpcyk7XG5cbiAgICAgICAgICBpZiAoJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfbGlzdCcpKSB7XG4gICAgICAgICAgICBqUXVlcnkodGhpcykuYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGVkJyk7XG5cbiAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZpZGVvSUQgPSBqUXVlcnkodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgICAgICAvL3RoaXMuY3JlYXRlUGxheWVyKCx2aWRlb0lELDApO1xuICAgICAgICAgICAgICBwbGF5ZXIgPSBuZXcgWVQuUGxheWVyKCdzYnlfcGxheWVyXycrdmlkZW9JRCwge1xuICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCcsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAnLFxuICAgICAgICAgICAgICAgIHZpZGVvSWQ6IHZpZGVvSUQsXG4gICAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgICAgbW9kZXN0YnJhbmRpbmc6IDEsXG4gICAgICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgJ29uU3RhdGVDaGFuZ2UnOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEgIT09IDEpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbVZpZElEID0galF1ZXJ5KHRoaXMpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykubGVuZ3RoICYmIGpRdWVyeShkYXRhLnRhcmdldC5hKS5hdHRyKCdpZCcpICE9PSBqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykuYXR0cignaWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgWVQuZ2V0KCdzYnlfcGxheWVyXycraXRlbVZpZElEKS5wYXVzZVZpZGVvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSkge1xuICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLmFkZENsYXNzKCdzYnlfcGxheWVyX2xvYWRlZCcpO1xuXG4gICAgICAgICAgICBwbGF5ZXIgPSBuZXcgWVQuUGxheWVyKCdzYnlfcGxheWVyJytpbmRleCwge1xuICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAnLFxuICAgICAgICAgICAgICB3aWR0aDogJzEwMCcsXG4gICAgICAgICAgICAgIHZpZGVvSWQ6IGpRdWVyeSh0aGlzKS5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSxcbiAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgIG1vZGVzdGJyYW5kaW5nOiAxLFxuICAgICAgICAgICAgICAgIHJlbDogMCxcbiAgICAgICAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXlcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgJ29uU3RhdGVDaGFuZ2UnOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgdmlkZW9JRCA9IGRhdGEudGFyZ2V0LmdldFZpZGVvRGF0YSgpWyd2aWRlb19pZCddO1xuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSAhPT0gMSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1WaWRJRCA9IGpRdWVyeSh0aGlzKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeSh0aGlzKS5maW5kKCdpZnJhbWUnKS5sZW5ndGggJiYgalF1ZXJ5KGRhdGEudGFyZ2V0LmEpLmF0dHIoJ2lkJykgIT09IGpRdWVyeSh0aGlzKS5maW5kKCdpZnJhbWUnKS5hdHRyKCdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgWVQuZ2V0KCdzYnlfcGxheWVyXycraXRlbVZpZElEKS5wYXVzZVZpZGVvKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsYWdMaWdodGJveCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LnNieSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1GZWVkczsgaSsrKSB7XG4gICAgICAgICAgd2luZG93LnNieS5mZWVkc1tpXS5wbGF5ZXJBUElSZWFkeSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5zYnlBUElSZWFkeSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgalF1ZXJ5KCcuc2JfeW91dHViZScpLmVhY2goZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgIHZhciAkc2VsZiA9IGpRdWVyeSh0aGlzKTtcbiAgICAgIGlmICgkc2VsZi5maW5kKCcuc2J5X2xpdmVfcGxheWVyJykubGVuZ3RoKSB7XG4gICAgICAgIHBsYXllciA9IG5ldyBZVC5QbGF5ZXIoJHNlbGYuZmluZCgnLnNieV9saXZlX3BsYXllcicpLmF0dHIoJ2lkJyksIHtcbiAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICdvblJlYWR5JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xpdmVfcGxheWVyJykuaGlkZSgpO1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSBZVC5nZXQoJHNlbGYuZmluZCgnLnNieV9saXZlX3BsYXllcicpLmF0dHIoJ2lkJykpLmdldFZpZGVvRGF0YSgpLnZpZGVvX2lkO1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyx2aWRlb0lEKS5jc3MoJ3otaW5kZXgnLC0xKTtcbiAgICAgICAgICAgICAgdmFyIGl0ZW1PZmZzZXQgPSAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgc3VibWl0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ3NieV9saXZlX3JldHJpZXZlJyxcbiAgICAgICAgICAgICAgICAgIHZpZGVvX2lkOiB2aWRlb0lELFxuICAgICAgICAgICAgICAgICAgZmVlZF9pZDogJHNlbGYuYXR0cignZGF0YS1mZWVkaWQnKSxcbiAgICAgICAgICAgICAgICAgIGF0dHM6ICRzZWxmLmF0dHIoJ2RhdGEtc2hvcnRjb2RlLWF0dHMnKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB2YXIgb25TdWNjZXNzID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS50cmltKCkuaW5kZXhPZigneycpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZmVlZCA9IHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrV1BQb3N0cyA9IHR5cGVvZiByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgPyByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuZGVidWdFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChjaGVja1dQUG9zdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5zZXR0aW5ncy5jaGVja1dQUG9zdHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5zZXR0aW5ncy5jaGVja1dQUG9zdHMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGZlZWQuYXBwZW5kTmV3UG9zdHMocmVzcG9uc2UuaHRtbCk7XG4gICAgICAgICAgICAgICAgICBmZWVkLmFkZFJlc2l6ZWRJbWFnZXMocmVzcG9uc2UucmVzaXplZEltYWdlcyk7XG5cbiAgICAgICAgICAgICAgICAgIGZlZWQuYWZ0ZXJJbml0aWFsSW1hZ2VzTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZmVlZFN0YXR1cy5zaG91bGRQYWdpbmF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBmZWVkLm91dE9mUGFnZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xvYWRfYnRuJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5vdXRPZlBhZ2VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLnNieV9ub19qcycpLnJlbW92ZUNsYXNzKCdzYnlfbm9fanMnKTtcbiAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfbGl2ZV9wbGF5ZXInKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9nYWxsZXJ5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXInK2ZlZWQuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmNzcygnb3BhY2l0eScsMSk7XG4gICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5jc3MoJ29wYWNpdHknLDEpO1xuICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfbG9hZGluZycpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbCcpLm9uKCdtb3VzZWVudGVyJyxmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykuY3NzKCd6LWluZGV4JywtMSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgalF1ZXJ5LmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogc2J5T3B0aW9ucy5hZG1pbkFqYXhVcmwsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHN1Ym1pdERhdGEsXG4gICAgICAgICAgICAgICAgc3VjY2Vzczogb25TdWNjZXNzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZmxhZ0xpZ2h0Ym94KSB7XG4gICAgICBpZiAoIWpRdWVyeSgnI3NieV9sYi1wbGF5ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgalF1ZXJ5KCcuc2JfeW91dHViZScpLmZpcnN0KCkuYXBwZW5kKCc8ZGl2IGNsYXNzPVwic2J5X2xiLXBsYXllci1sb2FkZWQgc2J5X2xiLXBsYXllclwiIGlkPVwic2J5X2xiLXBsYXllclwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L2Rpdj4nKTtcbiAgICAgIH1cbiAgICAgIHBsYXllciA9IG5ldyBZVC5QbGF5ZXIoJ3NieV9sYi1wbGF5ZXInLCB7XG4gICAgICAgIGhlaWdodDogJzEwMCcsXG4gICAgICAgIHdpZHRoOiAnMTAwJyxcbiAgICAgICAgdmlkZW9JZDogalF1ZXJ5KHRoaXMpLmZpbmQoJy5zYnlfaXRlbScpLmZpcnN0KCkuYXR0cignZGF0YS12aWRlby1pZCcpLFxuICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgbW9kZXN0YnJhbmRpbmc6IDEsXG4gICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgIGF1dG9wbGF5OiBhdXRvcGxheVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9IHBsYXllcjtcbiAgICB9XG5cbiAgfVxuXG4gIGlmICh0eXBlb2Ygd2luZG93LnNieSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlmZWVkYW5keXRyZWFkeScpO1xuICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcbiAgfVxuXG59O1xuIl0sIm5hbWVzIjpbIiQiLCJhIiwiZSIsIm0iLCJsIiwiZyIsImIiLCJpIiwic2J5X2pzX2V4aXN0cyIsInNieV9zdXBwb3J0c192aWRlbyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNhblBsYXlUeXBlIiwid2luZG93Iiwic2J5TGlua2lmeSIsIlJlZ0V4cCIsImNhbGxiYWNrIiwicSIsInAiLCJwdW5jdF9yZWdleHAiLCJ1IiwieiIsInciLCJ2IiwiQSIsInMiLCJFIiwiQyIsInkiLCJEIiwiQiIsInIiLCJ4IiwidCIsInVuZGVmaW5lZCIsImV4ZWMiLCJsYXN0SW5kZXgiLCJsZW5ndGgiLCJ0ZXN0IiwiY2hhckF0Iiwic3Vic3RyIiwibWF0Y2giLCJyZXBsYWNlIiwiRiIsImluZGV4T2YiLCJwdXNoIiwic2xpY2UiLCJhcHBseSIsImMiLCJkIiwidGhpcyIsInNldHRpbmdzIiwib3B0aW9ucyIsImV4dGVuZCIsIkRlZmF1bHRzIiwiJGVsZW1lbnQiLCJfaGFuZGxlcnMiLCJfcGx1Z2lucyIsIl9zdXByZXNzIiwiX2N1cnJlbnQiLCJfc3BlZWQiLCJfY29vcmRpbmF0ZXMiLCJfYnJlYWtwb2ludCIsIl93aWR0aCIsIl9pdGVtcyIsIl9jbG9uZXMiLCJfbWVyZ2VycyIsIl93aWR0aHMiLCJfaW52YWxpZGF0ZWQiLCJfcGlwZSIsIl9kcmFnIiwidGltZSIsInRhcmdldCIsInBvaW50ZXIiLCJzdGFnZSIsInN0YXJ0IiwiY3VycmVudCIsImRpcmVjdGlvbiIsIl9zdGF0ZXMiLCJ0YWdzIiwiaW5pdGlhbGl6aW5nIiwiYW5pbWF0aW5nIiwiZHJhZ2dpbmciLCJlYWNoIiwicHJveHkiLCJQbHVnaW5zIiwidG9Mb3dlckNhc2UiLCJXb3JrZXJzIiwiZmlsdGVyIiwicnVuIiwic2V0dXAiLCJpbml0aWFsaXplIiwiaXRlbXMiLCJsb29wIiwiY2VudGVyIiwicmV3aW5kIiwibW91c2VEcmFnIiwidG91Y2hEcmFnIiwicHVsbERyYWciLCJmcmVlRHJhZyIsIm1hcmdpbiIsInN0YWdlUGFkZGluZyIsIm1lcmdlIiwibWVyZ2VGaXQiLCJhdXRvV2lkdGgiLCJzdGFydFBvc2l0aW9uIiwicnRsIiwic21hcnRTcGVlZCIsImZsdWlkU3BlZWQiLCJkcmFnRW5kU3BlZWQiLCJyZXNwb25zaXZlIiwicmVzcG9uc2l2ZVJlZnJlc2hSYXRlIiwicmVzcG9uc2l2ZUJhc2VFbGVtZW50IiwiZmFsbGJhY2tFYXNpbmciLCJpbmZvIiwibmVzdGVkSXRlbVNlbGVjdG9yIiwiaXRlbUVsZW1lbnQiLCJzdGFnZUVsZW1lbnQiLCJyZWZyZXNoQ2xhc3MiLCJsb2FkZWRDbGFzcyIsImxvYWRpbmdDbGFzcyIsInJ0bENsYXNzIiwicmVzcG9uc2l2ZUNsYXNzIiwiZHJhZ0NsYXNzIiwiaXRlbUNsYXNzIiwic3RhZ2VDbGFzcyIsInN0YWdlT3V0ZXJDbGFzcyIsImdyYWJDbGFzcyIsIldpZHRoIiwiRGVmYXVsdCIsIklubmVyIiwiT3V0ZXIiLCJUeXBlIiwiRXZlbnQiLCJTdGF0ZSIsIndpZHRoIiwicmVsYXRpdmUiLCIkc3RhZ2UiLCJjaGlsZHJlbiIsInJlbW92ZSIsImNzcyIsInRvRml4ZWQiLCJmIiwiTWF0aCIsIm1pbiIsIm1heCIsImNlaWwiLCJoIiwibm9ybWFsaXplIiwib3V0ZXJIVE1MIiwiYWRkQ2xhc3MiLCJhcHBlbmRUbyIsInByZXBlbmRUbyIsImFicyIsImVxIiwicmVtb3ZlQXR0ciIsImluZGV4IiwibWluaW11bSIsIm1heGltdW0iLCJyZXNldCIsImFuaW1hdGUiLCJjb29yZGluYXRlcyIsIm9wIiwicmVtb3ZlQ2xhc3MiLCJqb2luIiwicHJvdG90eXBlIiwiZW50ZXIiLCJ0cmlnZ2VyIiwidG9nZ2xlQ2xhc3MiLCJpcyIsImZpbmQiLCJwcmVsb2FkQXV0b1dpZHRoSW1hZ2VzIiwid3JhcCIsImFwcGVuZCIsInBhcmVudCIsIm5vdCIsInJlZnJlc2giLCJpbnZhbGlkYXRlIiwicmVnaXN0ZXJFdmVudEhhbmRsZXJzIiwibGVhdmUiLCJ2aWV3cG9ydCIsIk51bWJlciIsImF0dHIiLCJwcm9wZXJ0eSIsIm5hbWUiLCJ2YWx1ZSIsIm9wdGlvbnNMb2dpYyIsInByZXBhcmUiLCJjb250ZW50IiwiZGF0YSIsInVwZGF0ZSIsImFsbCIsImdyZXAiLCJvblRocm90dGxlZFJlc2l6ZSIsImNsZWFyVGltZW91dCIsInJlc2l6ZVRpbWVyIiwic2V0VGltZW91dCIsIm9uUmVzaXplIiwiaXNEZWZhdWx0UHJldmVudGVkIiwic3VwcG9ydCIsInRyYW5zaXRpb24iLCJvbiIsImVuZCIsIm9uVHJhbnNpdGlvbkVuZCIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnRW5kIiwid2hpY2giLCJ0cmFuc2Zvcm0iLCJzcGxpdCIsInBvc2l0aW9uIiwibGVmdCIsInRvcCIsInN0b3AiLCJ0eXBlIiwic3BlZWQiLCJEYXRlIiwiZ2V0VGltZSIsIm9uZSIsImRpZmZlcmVuY2UiLCJvbkRyYWdNb3ZlIiwicHJldmVudERlZmF1bHQiLCJvZmYiLCJjbG9zZXN0IiwidHJhbnNmb3JtM2QiLCJtYXAiLCJzdXBwcmVzcyIsInJlbGVhc2UiLCJpc051bWVyaWMiLCJtZXJnZXJzIiwiY2xvbmVzIiwiZHVyYXRpb24iLCJ0byIsIm5leHQiLCJwcmV2Iiwic3RvcFByb3BhZ2F0aW9uIiwic3JjRWxlbWVudCIsIm9yaWdpbmFsVGFyZ2V0IiwiZ2V0IiwiaW5uZXJXaWR0aCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiY29uc29sZSIsIndhcm4iLCJlbXB0eSIsImpRdWVyeSIsIm5vZGVUeXBlIiwiYWRkQmFjayIsImFkZCIsImFmdGVyIiwiYmVmb3JlIiwic3BsaWNlIiwiSW1hZ2UiLCJzcmMiLCJkZXN0cm95IiwidW53cmFwIiwiY29udGVudHMiLCJyZW1vdmVEYXRhIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRldGFjaEV2ZW50IiwiaXRlbSIsImNvdW50IiwiY2FtZWxDYXNlIiwiaiIsInJlbGF0ZWRUYXJnZXQiLCJvblRyaWdnZXIiLCJyZWdpc3RlciIsImNhbGwiLCJjb25jYXQiLCJldmVudCIsInNwZWNpYWwiLCJvd2wiLCJfZGVmYXVsdCIsIm5hbWVzcGFjZSIsImFyZ3VtZW50cyIsImluQXJyYXkiLCJvcmlnaW5hbEV2ZW50IiwidG91Y2hlcyIsImNoYW5nZWRUb3VjaGVzIiwicGFnZVgiLCJwYWdlWSIsImNsaWVudFgiLCJjbGllbnRZIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwiZm4iLCJzYnlPd2xDYXJvdXNlbCIsIkFycmF5IiwiQ29uc3RydWN0b3IiLCJaZXB0byIsIl9jb3JlIiwiX2ludGVydmFsIiwiX3Zpc2libGUiLCJhdXRvUmVmcmVzaCIsIndhdGNoIiwiYXV0b1JlZnJlc2hJbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJBdXRvUmVmcmVzaCIsIl9sb2FkZWQiLCJsYXp5TG9hZCIsImxvYWQiLCJkZXZpY2VQaXhlbFJhdGlvIiwiZWxlbWVudCIsInVybCIsIm9ubG9hZCIsIm9wYWNpdHkiLCJoYW5kbGVycyIsIkxhenkiLCJhdXRvSGVpZ2h0IiwiYXV0b0hlaWdodENsYXNzIiwidG9BcnJheSIsImhlaWdodCIsIkF1dG9IZWlnaHQiLCJfdmlkZW9zIiwiX3BsYXlpbmciLCJ2aWRlbyIsImlzSW5GdWxsU2NyZWVuIiwiZmV0Y2giLCJwbGF5IiwidmlkZW9IZWlnaHQiLCJ2aWRlb1dpZHRoIiwiRXJyb3IiLCJpZCIsInRodW1ibmFpbCIsImsiLCJhamF4IiwianNvbnAiLCJkYXRhVHlwZSIsInN1Y2Nlc3MiLCJ0aHVtYm5haWxfbGFyZ2UiLCJmcmFtZWdyYWJfdXJsIiwiaW5zZXJ0QWZ0ZXIiLCJmdWxsc2NyZWVuRWxlbWVudCIsIm1vekZ1bGxTY3JlZW5FbGVtZW50Iiwid2Via2l0RnVsbHNjcmVlbkVsZW1lbnQiLCJoYXNDbGFzcyIsIlZpZGVvIiwiY29yZSIsInN3YXBwaW5nIiwicHJldmlvdXMiLCJhbmltYXRlT3V0IiwiYW5pbWF0ZUluIiwic3dhcCIsImFuaW1hdGlvbiIsImNsZWFyIiwiQW5pbWF0ZSIsIl90aW1lb3V0IiwiX3BhdXNlZCIsImF1dG9wbGF5IiwiX3NldEF1dG9QbGF5SW50ZXJ2YWwiLCJhdXRvcGxheUhvdmVyUGF1c2UiLCJwYXVzZSIsImF1dG9wbGF5VGltZW91dCIsImF1dG9wbGF5U3BlZWQiLCJfZ2V0TmV4dFRpbWVvdXQiLCJoaWRkZW4iLCJfaW5pdGlhbGl6ZWQiLCJfcGFnZXMiLCJfY29udHJvbHMiLCJfdGVtcGxhdGVzIiwiX292ZXJyaWRlcyIsImRvdHNEYXRhIiwiZG90Q2xhc3MiLCJwb3AiLCJkcmF3IiwibmF2IiwibmF2VGV4dCIsIm5hdlNwZWVkIiwibmF2RWxlbWVudCIsIm5hdkNvbnRhaW5lciIsIm5hdkNvbnRhaW5lckNsYXNzIiwibmF2Q2xhc3MiLCJzbGlkZUJ5IiwiZG90c0NsYXNzIiwiZG90cyIsImRvdHNFYWNoIiwiZG90c1NwZWVkIiwiZG90c0NvbnRhaW5lciIsIiRyZWxhdGl2ZSIsIiRwcmV2aW91cyIsImh0bWwiLCIkbmV4dCIsInByb3AiLCIkYWJzb2x1dGUiLCJvdmVyaWRlcyIsInBhZ2UiLCJzaXplIiwiZ2V0UG9zaXRpb24iLCJOYXZpZ2F0aW9uIiwiX2hhc2hlcyIsImxvY2F0aW9uIiwiaGFzaCIsInN1YnN0cmluZyIsIlVSTGhhc2hMaXN0ZW5lciIsIkhhc2giLCJ0b1VwcGVyQ2FzZSIsInN0eWxlIiwiV2Via2l0VHJhbnNpdGlvbiIsIk1velRyYW5zaXRpb24iLCJPVHJhbnNpdGlvbiIsIldlYmtpdEFuaW1hdGlvbiIsIk1vekFuaW1hdGlvbiIsIk9BbmltYXRpb24iLCJTdHJpbmciLCJPd2wycm93Iiwic2NvcGUiLCJvd2wycm93IiwiYnVpbGQycm93Iiwib3dsMnJvd1RhcmdldCIsIm93bDJyb3dDb250YWluZXIiLCJvd2wycm93RGlyZWN0aW9uIiwidGhpc1Njb3BlIiwiY2Fyb3VzZWwiLCJjYXJvdXNlbEl0ZW1zIiwiYUV2ZW5FbGVtZW50cyIsImFPZGRFbGVtZW50cyIsImxlZnRUb3JpZ2h0IiwidXBUb2Rvd24iLCJvMndDb250YWluZXJDbGFzcyIsIm93bE1hcmdpbiIsImNhcm91c2VsSXRlbXNMZW5ndGgiLCJmaXJzQXJyIiwic2Vjb25kQXJyIiwicm93Q29udGFpbmVyIiwiZmlyc3RSb3dFbGVtZW50IiwibWFyZ2luQm90dG9tIiwiZXZlbkVsZW1lbnQiLCJTYnkiLCJmZWVkcyIsImN0YXMiLCJzYnlPcHRpb25zIiwiaXNUb3VjaCIsIlNieUZlZWQiLCJlbCIsInBsYWNlaG9sZGVyVVJMIiwic2J5IiwicGxhY2Vob2xkZXIiLCJuYXJyb3dQbGF5ZXIiLCJwbGFjZWhvbGRlck5hcnJvdyIsInBsYXllckFQSVJlYWR5IiwiY29uc2VudEdpdmVuIiwicGxheWVycyIsIm1pbkltYWdlV2lkdGgiLCJpbWFnZVJlc29sdXRpb24iLCJyZXNpemVkSW1hZ2VzIiwibmVlZHNSZXNpemluZyIsIm91dE9mUGFnZXMiLCJpc0luaXRpYWxpemVkIiwibW9zdFJlY2VudGx5TG9hZGVkUG9zdHMiLCJlbWJlZFVSTCIsImFsbG93Q29va2llcyIsIlNieUZlZWRQcm8iLCJDVEEiLCJpbml0TGF5b3V0IiwiaW5pdEdhbGxlcnlMYXlvdXQiLCJpbml0R3JpZCIsImluaXRDYXJvdXNlbHMiLCJldnQiLCJmZWVkIiwic2J5U2VtaUVhZ2VyTG9hZGluZyIsInBsYXllcklEIiwidmlkZW9JRCIsImZpcnN0Iiwic2J5TGlnaHRib3hQbGF5ZXIiLCJhcmdzIiwiaG9zdCIsInByb3RvY29sIiwidmlkZW9JZCIsInBsYXllclZhcnMiLCJtb2Rlc3RicmFuZGluZyIsInJlbCIsImV2ZW50cyIsImdldFZpZGVvRGF0YSIsImFmdGVyU3RhdGVDaGFuZ2UiLCJtYXliZUFkZENUQSIsIllUIiwiUGxheWVyIiwiJHNlbGYiLCJnZW5lcmFsIiwiY29scyIsImNvbHNtb2JpbGUiLCJhcnJvd3MiLCJwYWdpbmF0aW9uIiwicm93cyIsIml0ZW1zVGFibGV0U21hbGwiLCJpdGVtc01vYmlsZSIsImhhczJyb3dzIiwicGFyc2VJbnQiLCJjYXJvdXNlbEFyZ3MiLCJvbkNoYW5nZSIsImFmdGVyUmVzaXplIiwib25Jbml0aWFsaXplIiwiZmFkZUluIiwiJG5hdkVsZW1lbnRzV3JhcHBlciIsIiRkb3RzIiwiJHByZXYiLCIkbmF2IiwiJGRvdCIsIndpZHRoRG90cyIsImhpZGUiLCJzdHJpcEVtb2ppaHRtbCIsIiRlbCIsInJlcGxhY2VXaXRoIiwiYWZ0ZXJJdGVtUmV2ZWFsZWQiLCIkaXRlbSIsIiRjYXB0aW9uIiwiJGhvdmVyQ2FwdGlvbiIsInRleHRfbGltaXQiLCJkZXNjcmlwdGlvbmxlbmd0aCIsImNhcHRpb25UZXh0IiwiYnJDb3VudCIsImJyQWRqdXN0IiwiJHNpemluZ0NhcHRpb24iLCJjYXB0aW9uV2lkdGgiLCJmb250U2l6ZSIsImNoYXJhY3RlcnNQZXJMaW5lIiwibWF4Q2hhcnNQZXJMaW5lIiwiZmxvb3IiLCJwcm9qZWN0ZWRNYXhMaW5lcyIsInNwbGl0Q2FwdGlvbiIsImxpbmVzQ29uc3VtZWQiLCJhZGp1c3RlZFRleHRMaW1pdCIsImxpbmVzTGVmdCIsInRoaXNMaW5lc0NvbnN1bWVkIiwic2hvcnRfdGV4dCIsImxhc3RJbmRleE9mIiwiaG92ZXJDYXB0aW9uVGV4dCIsInNob3ciLCJjYXB0aW9udGV4dCIsInNldFVwQ1RBIiwiZGlzYWJsZWxpZ2h0Ym94IiwiY2FwdGlvbmxpbmtzIiwiY2FwIiwiJHNieV9waG90b193cmFwIiwiJHNieV9saW5rIiwiZmVlZE9wdGlvbnMiLCJob3ZlcmVmZmVjdCIsImFmdGVyRmVlZFNldCIsInRleHQiLCJjdGFJbkNhcHRpb24iLCJjdGFEZXRlY3QiLCJnZXREZWZhdWx0Q1RBIiwiY3RhIiwiZGVmYXVsdExpbmsiLCJkZWZhdWx0VGV4dCIsInJlbGF0ZWQiLCJkZWZhdWx0UG9zdHMiLCJzZXRJbWFnZUhlaWdodCIsInNldEltYWdlUmVzb2x1dGlvbiIsIm1heWJlUmFpc2VJbWFnZVJlc29sdXRpb24iLCJzZXRJbWFnZVNpemVDbGFzcyIsInNldEFsbENUQURpbWVuc2lvbnMiLCJzaXplUGxheWVyIiwic2l6ZUl0ZW1zIiwiQ1RBT2JqIiwic2V0Q1RBU3R5bGVzIiwiYWZ0ZXJTZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIiLCJyZXNwb25zZSIsInNieV92aWV3X2NvdW50Iiwic2J5X2NvbW1lbnRfY291bnQiLCJzYnlfbGlrZV9jb3VudCIsInNieV9saXZlX2Jyb2FkY2FzdCIsImJyb2FkY2FzdF90eXBlIiwibGl2ZV9zdHJlYW1pbmdfc3RyaW5nIiwibGl2ZV9zdHJlYW1pbmdfZGF0ZSIsImxpdmVfc3RyZWFtaW5nX3RpbWVzdGFtcCIsInNieV9kZXNjcmlwdGlvbiIsIiRwbGF5ZXIiLCJjaGFuZ2VQbGF5ZXJJbmZvIiwiJG5ld0l0ZW0iLCJjbG9uZSIsIlNieUxpZ2h0Ym94QnVpbGRlciIsInNieUFqYXgiLCJzdWJtaXREYXRhIiwib25TdWNjZXNzIiwiYWRtaW5BamF4VXJsIiwiY3JlYXRlUGFnZSIsImNyZWF0ZUZlZWRzIiwiY3JlYXRlRmVlZHNBcmdzIiwic2J5YWpheHVybCIsImhvc3RuYW1lIiwibWF5YmVBZGRZVEFQSSIsInlvdXR1YmVTY3JpcHRJZCIsImdldEVsZW1lbnRCeUlkIiwidGFnIiwiZmlyc3RTY3JpcHQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJjcmVhdGVMaWdodGJveCIsInNieV90aW1lciIsImxiQnVpbGRlciIsInNieV9sYl9kZWxheSIsInNieV9jYWxsYmFjayIsInNieV9tcyIsImZhZGVEdXJhdGlvbiIsImZpdEltYWdlc0luVmlld3BvcnQiLCJyZXNpemVEdXJhdGlvbiIsInBvc2l0aW9uRnJvbVRvcCIsInNob3dJbWFnZU51bWJlckxhYmVsIiwiYWx3YXlzU2hvd05hdk9uVG91Y2hEZXZpY2VzIiwid3JhcEFyb3VuZCIsImFsYnVtTGFiZWwiLCJhbGJ1bSIsImN1cnJlbnRJbWFnZUluZGV4IiwiaW5pdCIsImVuYWJsZSIsImJ1aWxkIiwiY3VycmVudFRhcmdldCIsInRlbXBsYXRlIiwiJGxpZ2h0Ym94IiwiJG92ZXJsYXkiLCIkb3V0ZXJDb250YWluZXIiLCIkY29udGFpbmVyIiwiY29udGFpbmVyVG9wUGFkZGluZyIsImNvbnRhaW5lclJpZ2h0UGFkZGluZyIsImNvbnRhaW5lckJvdHRvbVBhZGRpbmciLCJjb250YWluZXJMZWZ0UGFkZGluZyIsInBhdXNlUGxheWVyIiwiZmFkZU91dCIsImNoYW5nZUltYWdlIiwiZ2V0RGF0YSIsInNpemVPdmVybGF5IiwidmlzaWJpbGl0eSIsInNjcm9sbFRvcCIsInNjcm9sbExlZnQiLCJkaXNhYmxlS2V5Ym9hcmROYXYiLCJsaW5rIiwic2l6ZUNvbnRhaW5lciIsInNob3dJbWFnZSIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsInVwZGF0ZU5hdiIsInVwZGF0ZURldGFpbHMiLCJwcmVsb2FkTmVpZ2hib3JpbmdJbWFnZXMiLCJlbmFibGVLZXlib2FyZE5hdiIsImNyZWF0ZUV2ZW50IiwiZmVlZEluZGV4IiwiYmVmb3JlUGxheWVyU2V0dXAiLCJsb2FkVmlkZW9CeUlkIiwidmlkZW9UaXRsZSIsImZ1bGxJbWFnZSIsInByZXBlbmQiLCJhZnRlclBsYXllclNldHVwIiwia2V5Ym9hcmRBY3Rpb24iLCJrZXljb2RlIiwia2V5Q29kZSIsImtleSIsImZyb21DaGFyQ29kZSIsInRvZ2dsZSIsImlzQWRtaW4iLCJ3aGVuRmVlZHNDcmVhdGVkIiwiZmxhZ3MiLCJKU09OIiwicGFyc2UiLCJ0cmlnZ2VyZWRUZXN0IiwibG9nIiwibnVtIiwiaW1nUmVzIiwiZmVlZElEIiwicG9zdElEIiwic2hvcnRDb2RlQXR0cyIsInJlc2l6aW5nRW5hYmxlZCIsImltYWdlTG9hZEVuYWJsZWQiLCJkZWJ1Z0VuYWJsZWQiLCJmYXZvckxvY2FsIiwiYWpheFBvc3RMb2FkIiwiY2hlY2tXUFBvc3RzIiwic2luZ2xlQ2hlY2tQb3N0cyIsImdkcHIiLCJub0NETiIsImxpZ2h0Ym94RW5hYmxlZCIsImxvY2F0b3IiLCJhdXRvTWluUmVzIiwic2J5R2V0TmV3RmVlZCIsInNieUFQSVJlYWR5Iiwic2V0UmVzaXplZEltYWdlcyIsImFmdGVyRmVlZHNDcmVhdGVkIiwiJHRoaXNIZWFkZXIiLCJlbmNvZGVIVE1MIiwicmF3IiwidXJsRGV0ZWN0IiwiY3RhTWF0Y2hlcyIsInVybE1hdGNoZXMiLCJ0cmltIiwic2h1ZmZsZSIsImFycmF5IiwidGVtcG9yYXJ5VmFsdWUiLCJyYW5kb21JbmRleCIsImN1cnJlbnRJbmRleCIsInJhbmRvbSIsImNoZWNrQ29uc2VudCIsImdldE5ld1Bvc3RTZXQiLCJhZnRlckluaXRpYWxJbWFnZXNMb2FkZWQiLCJzYnlfZGVsYXkiLCJtYXliZVJhaXNlU2luZ2xlSW1hZ2VSZXNvbHV0aW9uIiwib25UaHVtYm5haWxDbGljayIsImNhbkNyZWF0ZVBsYXllciIsInBsYXllciIsInBsYXllckVhZ2VyTG9hZGVkIiwiY3JlYXRlUGxheWVyIiwiZ2V0VmlkZW9JRCIsImZhZGVUbyIsIml0ZW1WaWRJRCIsInBhdXNlVmlkZW8iLCJzYnlFYWdlckxvYWRpbmciLCJuZXdQbGF5ZXIiLCJsb2FkTW9yZUJ1dHRvbkluaXQiLCJoaWRlRXh0cmFJdGVtc0ZvcldpZHRoIiwiYmVmb3JlTmV3SW1hZ2VzUmV2ZWFsZWQiLCJyZXZlYWxOZXdJbWFnZXMiLCJhZnRlck5ld0ltYWdlc1JldmVhbGVkIiwiYXBwbHlGdWxsRmVhdHVyZXMiLCJyZW1vdmVGZWF0dXJlcyIsImFmdGVyTG9hZE1vcmVDbGlja2VkIiwiJGJ1dHRvbiIsImFmdGVyTmV3SW1hZ2VzTG9hZGVkIiwiJHBsYXllclRodW1ibmFpbCIsInBsYXllcldpZHRoIiwibmV3UGxheWVySGVpZ2h0IiwidGh1bWJXaWR0aCIsIm5ld1RodW1iSGVpZ2h0IiwiYXBwbHlJbWFnZUxpcXVpZCIsInNieUN1c3RvbUpTIiwib25UaHVtYm5haWxFbnRlciIsIm9uVGh1bWJuYWlsTGVhdmUiLCJsaWdodGJveFBsYWNlaG9sZGVyIiwibGlnaHRib3hQbGFjZWhvbGRlck5hcnJvdyIsIiRzYnlfaXRlbV90cmFuc2l0aW9uX2VsIiwibGlzdGVuRm9yVmlzaWJpbGl0eUNoYW5nZSIsInNlbmROZWVkc1Jlc2l6aW5nVG9TZXJ2ZXIiLCJzZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIiLCJpdGVtT2Zmc2V0IiwiYWN0aW9uIiwibmVlZHNfcmVzaXppbmciLCJvZmZzZXQiLCJmZWVkX2lkIiwibG9jYXRpb25HdWVzcyIsInBvc3RfaWQiLCJhdHRzIiwicG9zdHMiLCJjdXJyZW50X3Jlc29sdXRpb24iLCJmZWVkU3RhdHVzIiwiYXBwZW5kTmV3UG9zdHMiLCJhZGRSZXNpemVkSW1hZ2VzIiwic2hvdWxkUGFnaW5hdGUiLCJuZXdQb3N0c0h0bWwiLCJsYXN0IiwicmVzaXplZEltYWdlc1RvQWRkIiwiaW1hZ2VJRCIsImZvcmNlQ2hhbmdlIiwiaW1nU3JjU2V0IiwiZ2V0SW1hZ2VVcmxzIiwiY3VycmVudFVybCIsImN1cnJlbnRSZXMiLCJuZXdSZXMiLCJnZXRCZXN0UmVzb2x1dGlvbkZvckF1dG8iLCJyZWFzb24iLCJuZXdVcmwiLCJzcmNTZXQiLCJqdXN0TmV3IiwiaXRlbXNTZWxlY3RvciIsImNvbFdpZHRoIiwiYXNwZWN0UmF0aW8iLCJiZXN0V2lkdGgiLCJiZXN0V2lkdGhSb3VuZGVkIiwiY3VzdG9tU2l6ZXMiLCJkb25lIiwibGF5b3V0IiwibnVtbW9iaWxlIiwiZmVlZFdpZHRoIiwicGhvdG9QYWRkaW5nIiwiZ2V0Q29sdW1uQ291bnQiLCJzZXRNaW5JbWFnZVdpZHRoIiwiZm91bmRTaXplcyIsInJlc2l6ZWRfdXJsIiwiYWRkVG9OZWVkc1Jlc2l6aW5nIiwiJHRhcmdlRWwiLCJnZXRBdmF0YXJVcmwiLCJ1c2VybmFtZSIsImZhdm9yVHlwZSIsImF2YWlsYWJsZUF2YXRhcnMiLCJhdmF0YXJzIiwiaGVhZCIsInNieV9pbWdMaXF1aWQiLCJWRVIiLCJiZ3NfQXZhaWxhYmxlIiwiYmdzX0NoZWNrUnVubmVkIiwiZGVmYXVsdHMiLCJmaWxsIiwidmVydGljYWxBbGlnbiIsImhvcml6b250YWxBbGlnbiIsInVzZUJhY2tncm91bmRTaXplIiwidXNlRGF0YUh0bWxBdHRyIiwiZGVsYXkiLCJmYWRlSW5UaW1lIiwicmVtb3ZlQm94QmFja2dyb3VuZCIsImhhcmRQaXhlbHMiLCJyZXNwb25zaXZlQ2hlY2tUaW1lIiwidGltZWNoZWNrdmlzaWJpbGl0eSIsIm9uU3RhcnQiLCJvbkZpbmlzaCIsIm9uSXRlbVN0YXJ0Iiwib25JdGVtRmluaXNoIiwib25JdGVtRXJyb3IiLCJnZXRDb21wdXRlZFN0eWxlIiwiYmFja2dyb3VuZFNpemUiLCJhY3R1YWxTaXplIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaXplT2xkIiwibiIsIm8iLCJCb29sZWFuIiwiaXNJRSIsImllRmFkZUluRGlzYWJsZWQiLCJlbmNvZGVVUkkiLCJkaXNwbGF5Iiwib3ZlcmZsb3ciLCJvbmVycm9yIiwiY29tcGxldGUiLCJpbmplY3RDc3MiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImFwcGVuZENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJzYnlBZGRJbWdMaXF1aWQiLCJydW5PbkxvYWQiLCJmcmVxdWVuY3kiLCJzYnlQcmV2aW91c1Zpc2liaWxpdHkiLCJjb250YWlucyIsInNieUNoZWNrVmlzaWJpbGl0eSIsInNieVZpc2liaWxpdHlDaGFuZ2VkIiwidmlzaWJsZSIsInJldHVybkNvbHMiLCJzYnlXaW5kb3dXaWR0aCIsIiRjbGlja2VkIiwiaXNQbGF5ZXIiLCJwbGF5VmlkZW9JblBsYXllciIsImFmdGVyVmlkZW9DaGFuZ2VkIiwiJHNieUl0ZW0iLCIkaG92ZXJlZCIsIkNMSV9Db29raWUiLCJyZWFkIiwiQ0xJX0FDQ0VQVF9DT09LSUVfTkFNRSIsImNuQXJncyIsInBhcnRzIiwiY29va2llIiwidmFsIiwic2hpZnQiLCJjb29raWVjb25zZW50IiwiY25hbWUiLCJjQXJyIiwic2J5Q21wbHpHZXRDb29raWUiLCJDb29raWVib3QiLCJjb25zZW50ZWQiLCJCb3JsYWJzQ29va2llIiwiY2hlY2tDb29raWVDb25zZW50IiwiYWZ0ZXJDb25zZW50VG9nZ2xlZCIsIiRmZWVkIiwiY3JlYXRlIiwicGxheWVySGVpZ2h0IiwiaGVpZ2h0RGlmIiwic2J5X2luaXQiLCJzYnlfY2Fyb3VzZWxfaW5pdCIsImVhZ2VybG9hZCIsInlvdXR1YmVfdXJsIiwic2VtaUVhZ2VybG9hZCIsInJlYWR5IiwiZGV0YWlsIiwiY2F0ZWdvcnkiLCJzYnlZU2NyaXB0SWQiLCJvbllvdVR1YmVJZnJhbWVBUElSZWFkeSIsIm51bUZlZWRzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImZsYWdMaWdodGJveCIsInZpZGVvX2lkIl0sInNvdXJjZVJvb3QiOiIifQ==
1
  /*! For license information please see sb-youtube.min.js.LICENSE.txt */
2
+ var sby_js_exists = (typeof sby_js_exists !== 'undefined') ? true : false;if(!sby_js_exists) {(()=>{function t(e){return t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t(e)}var e,i,s,n,a,o,r,l,d=void 0!==d;if(!d){var h=function(){return!!document.createElement("video").canPlayType};if(window.sbyLinkify=("[a-z\\d.-]+://",n="mailto:",a=new RegExp("(?:\\b[a-z\\d.-]+://[^<>\\s]+|\\b(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:[;/][^#?<>\\s]*)?(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w)|(?:mailto:)?[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:(?:(?:[^\\s!@#$%^&*()_=+[\\]{}\\\\|;:'\",.<>/?]+)\\.)+(?:ac|ad|aero|ae|af|ag|ai|al|am|an|ao|aq|arpa|ar|asia|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|biz|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|cat|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|coop|com|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|info|int|in|io|iq|ir|is|it|je|jm|jobs|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mobi|mo|mp|mq|mr|ms|mt|museum|mu|mv|mw|mx|my|mz|name|na|nc|net|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pro|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|travel|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xn--0zwm56d|xn--11b5bs3a9aj6g|xn--80akhbyknj4f|xn--9t4b11yi5a|xn--deba0ad|xn--g6w251d|xn--hgbk6aj7f53bba|xn--hlcj6aya9esc7a|xn--jxalpdlp|xn--kgbechtv|xn--zckzah|ye|yt|yu|za|zm|zw)|(?:(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])\\.){3}(?:[0-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5]))(?:\\?[^#<>\\s]*)?(?:#[^<>\\s]*)?(?!\\w))","ig"),o=new RegExp("^[a-z\\d.-]+://","i"),r={"'":"`",">":"<",")":"(","]":"[","}":"{","B;":"B+","b:":"b9"},l={callback:function(t,e){return e?'<a href="'+e+'" title="'+e+'" target="_blank" rel="noopener">'+t+"</a>":t},punct_regexp:/(?:[!?.,:;'"]|(?:&|&amp;)(?:lt|gt|quot|apos|raquo|laquo|rsaquo|lsaquo);)$/},function(t,e){e=e||{};var i,s,d,h,c,u,g,y,p,f,b,m,_="",v=[];for(s in l)void 0===e[s]&&(e[s]=l[s]);for(;i=a.exec(t);)if(d=i[0],g=(u=a.lastIndex)-d.length,!/[\/:]/.test(t.charAt(g-1))){do{y=d,m=d.substr(-1),(b=r[m])&&(p=d.match(new RegExp("\\"+b+"(?!$)","g")),f=d.match(new RegExp("\\"+m,"g")),(p?p.length:0)<(f?f.length:0)&&(d=d.substr(0,d.length-1),u--)),e.punct_regexp&&(d=d.replace(e.punct_regexp,(function(t){return u-=t.length,""})))}while(d.length&&d!==y);h=d,o.test(h)||(h=(-1!==h.indexOf("@")?h.indexOf(n)?n:"":h.indexOf("irc.")?h.indexOf("ftp.")?"http://":"ftp://":"irc://")+h),c!=g&&(v.push([t.slice(c,g)]),c=u),v.push([d,h])}for(v.push([t.substr(c)]),s=0;s<v.length;s++)_+=e.callback.apply(window,v[s]);return _||t}),function(e,i,s,n){function a(t,i){this.settings=null,this.options=e.extend({},a.Defaults,i),this.$element=e(t),this._handlers={},this._plugins={},this._supress={},this._current=null,this._speed=null,this._coordinates=[],this._breakpoint=null,this._width=null,this._items=[],this._clones=[],this._mergers=[],this._widths=[],this._invalidated={},this._pipe=[],this._drag={time:null,target:null,pointer:null,stage:{start:null,current:null},direction:null},this._states={current:{},tags:{initializing:["busy"],animating:["busy"],dragging:["interacting"]}},e.each(["onResize","onThrottledResize"],e.proxy((function(t,i){this._handlers[i]=e.proxy(this[i],this)}),this)),e.each(a.Plugins,e.proxy((function(t,e){this._plugins[t.charAt(0).toLowerCase()+t.slice(1)]=new e(this)}),this)),e.each(a.Workers,e.proxy((function(t,i){this._pipe.push({filter:i.filter,run:e.proxy(i.run,this)})}),this)),this.setup(),this.initialize()}a.Defaults={items:3,loop:!1,center:!1,rewind:!1,mouseDrag:!0,touchDrag:!0,pullDrag:!0,freeDrag:!1,margin:0,stagePadding:0,merge:!1,mergeFit:!0,autoWidth:!1,startPosition:0,rtl:!1,smartSpeed:250,fluidSpeed:!1,dragEndSpeed:!1,responsive:{},responsiveRefreshRate:200,responsiveBaseElement:i,fallbackEasing:"swing",info:!1,nestedItemSelector:!1,itemElement:"div",stageElement:"div",refreshClass:"sby-owl-refresh",loadedClass:"sby-owl-loaded",loadingClass:"sby-owl-loading",rtlClass:"sby-owl-rtl",responsiveClass:"sby-owl-responsive",dragClass:"sby-owl-drag",itemClass:"sby-owl-item",stageClass:"sby-owl-stage",stageOuterClass:"sby-owl-stage-outer",grabClass:"sby-owl-grab"},a.Width={Default:"default",Inner:"inner",Outer:"outer"},a.Type={Event:"event",State:"state"},a.Plugins={},a.Workers=[{filter:["width","settings"],run:function(){this._width=this.$element.width()}},{filter:["width","items","settings"],run:function(t){t.current=this._items&&this._items[this.relative(this._current)]}},{filter:["items","settings"],run:function(){this.$stage.children(".cloned").remove()}},{filter:["width","items","settings"],run:function(t){var e=this.settings.margin||"",i=!this.settings.autoWidth,s=this.settings.rtl,n={width:"auto","margin-left":s?e:"","margin-right":s?"":e};!i&&this.$stage.children().css(n),t.css=n}},{filter:["width","items","settings"],run:function(t){var e=(this.width()/this.settings.items).toFixed(3)-this.settings.margin,i=null,s=this._items.length,n=!this.settings.autoWidth,a=[];for(t.items={merge:!1,width:e};s--;)i=this._mergers[s],i=this.settings.mergeFit&&Math.min(i,this.settings.items)||i,t.items.merge=i>1||t.items.merge,a[s]=n?e*i:this._items[s].width();this._widths=a}},{filter:["items","settings"],run:function(){var t=[],i=this._items,s=this.settings,n=Math.max(2*s.items,4),a=2*Math.ceil(i.length/2),o=s.loop&&i.length?s.rewind?n:Math.max(n,a):0,r="",l="";for(o/=2;o--;)t.push(this.normalize(t.length/2,!0)),r+=i[t[t.length-1]][0].outerHTML,t.push(this.normalize(i.length-1-(t.length-1)/2,!0)),l=i[t[t.length-1]][0].outerHTML+l;this._clones=t,e(r).addClass("cloned").appendTo(this.$stage),e(l).addClass("cloned").prependTo(this.$stage)}},{filter:["width","items","settings"],run:function(){for(var t=this.settings.rtl?1:-1,e=this._clones.length+this._items.length,i=-1,s=0,n=0,a=[];++i<e;)s=a[i-1]||0,n=this._widths[this.relative(i)]+this.settings.margin,a.push(s+n*t);this._coordinates=a}},{filter:["width","items","settings"],run:function(){var t=this.settings.stagePadding,e=this._coordinates,i={width:Math.ceil(Math.abs(e[e.length-1]))+2*t,"padding-left":t||"","padding-right":t||""};this.$stage.css(i)}},{filter:["width","items","settings"],run:function(t){var e=this._coordinates.length,i=!this.settings.autoWidth,s=this.$stage.children();if(i&&t.items.merge)for(;e--;)t.css.width=this._widths[this.relative(e)],s.eq(e).css(t.css);else i&&(t.css.width=t.items.width,s.css(t.css))}},{filter:["items"],run:function(){this._coordinates.length<1&&this.$stage.removeAttr("style")}},{filter:["width","items","settings"],run:function(t){t.current=t.current?this.$stage.children().index(t.current):0,t.current=Math.max(this.minimum(),Math.min(this.maximum(),t.current)),this.reset(t.current)}},{filter:["position"],run:function(){this.animate(this.coordinates(this._current))}},{filter:["width","position","items","settings"],run:function(){var t,e,i,s,n=this.settings.rtl?1:-1,a=2*this.settings.stagePadding,o=this.coordinates(this.current())+a,r=o+this.width()*n,l=[];for(i=0,s=this._coordinates.length;i<s;i++)t=this._coordinates[i-1]||0,e=Math.abs(this._coordinates[i])+a*n,(this.op(t,"<=",o)&&this.op(t,">",r)||this.op(e,"<",o)&&this.op(e,">",r))&&l.push(i);this.$stage.children(".active").removeClass("active"),this.$stage.children(":eq("+l.join("), :eq(")+")").addClass("active"),this.settings.center&&(this.$stage.children(".center").removeClass("center"),this.$stage.children().eq(this.current()).addClass("center"))}}],a.prototype.initialize=function(){var t,i,s;this.enter("initializing"),this.trigger("initialize"),this.$element.toggleClass(this.settings.rtlClass,this.settings.rtl),this.settings.autoWidth&&!this.is("pre-loading")&&(t=this.$element.find("img"),i=this.settings.nestedItemSelector?"."+this.settings.nestedItemSelector:n,s=this.$element.children(i).width(),t.length&&s<=0&&this.preloadAutoWidthImages(t)),this.$element.addClass(this.options.loadingClass),this.$stage=e("<"+this.settings.stageElement+' class="'+this.settings.stageClass+'"/>').wrap('<div class="'+this.settings.stageOuterClass+'"/>'),this.$element.append(this.$stage.parent()),this.replace(this.$element.children().not(this.$stage.parent())),this.$element.is(":visible")?this.refresh():this.invalidate("width"),this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass),this.registerEventHandlers(),this.leave("initializing"),this.trigger("initialized")},a.prototype.setup=function(){var t=this.viewport(),i=this.options.responsive,s=-1,n=null;i?(e.each(i,(function(e){e<=t&&e>s&&(s=Number(e))})),"function"==typeof(n=e.extend({},this.options,i[s])).stagePadding&&(n.stagePadding=n.stagePadding()),delete n.responsive,n.responsiveClass&&this.$element.attr("class",this.$element.attr("class").replace(new RegExp("("+this.options.responsiveClass+"-)\\S+\\s","g"),"$1"+s))):n=e.extend({},this.options),this.trigger("change",{property:{name:"settings",value:n}}),this._breakpoint=s,this.settings=n,this.invalidate("settings"),this.trigger("changed",{property:{name:"settings",value:this.settings}})},a.prototype.optionsLogic=function(){this.settings.autoWidth&&(this.settings.stagePadding=!1,this.settings.merge=!1)},a.prototype.prepare=function(t){var i=this.trigger("prepare",{content:t});return i.data||(i.data=e("<"+this.settings.itemElement+"/>").addClass(this.options.itemClass).append(t)),this.trigger("prepared",{content:i.data}),i.data},a.prototype.update=function(){for(var t=0,i=this._pipe.length,s=e.proxy((function(t){return this[t]}),this._invalidated),n={};t<i;)(this._invalidated.all||e.grep(this._pipe[t].filter,s).length>0)&&this._pipe[t].run(n),t++;this._invalidated={},!this.is("valid")&&this.enter("valid")},a.prototype.width=function(t){switch(t=t||a.Width.Default){case a.Width.Inner:case a.Width.Outer:return this._width;default:return this._width-2*this.settings.stagePadding+this.settings.margin}},a.prototype.refresh=function(){this.enter("refreshing"),this.trigger("refresh"),this.setup(),this.optionsLogic(),this.$element.addClass(this.options.refreshClass),this.update(),this.$element.removeClass(this.options.refreshClass),this.leave("refreshing"),this.trigger("refreshed")},a.prototype.onThrottledResize=function(){i.clearTimeout(this.resizeTimer),this.resizeTimer=i.setTimeout(this._handlers.onResize,this.settings.responsiveRefreshRate)},a.prototype.onResize=function(){return!!this._items.length&&this._width!==this.$element.width()&&!!this.$element.is(":visible")&&(this.enter("resizing"),this.trigger("resize").isDefaultPrevented()?(this.leave("resizing"),!1):(this.invalidate("width"),this.refresh(),this.leave("resizing"),void this.trigger("resized")))},a.prototype.registerEventHandlers=function(){e.support.transition&&this.$stage.on(e.support.transition.end+".owl.core",e.proxy(this.onTransitionEnd,this)),!1!==this.settings.responsive&&this.on(i,"resize",this._handlers.onThrottledResize),this.settings.mouseDrag&&(this.$element.addClass(this.options.dragClass),this.$stage.on("mousedown.owl.core",e.proxy(this.onDragStart,this)),this.$stage.on("dragstart.owl.core selectstart.owl.core",(function(){return!1}))),this.settings.touchDrag&&(this.$stage.on("touchstart.owl.core",e.proxy(this.onDragStart,this)),this.$stage.on("touchcancel.owl.core",e.proxy(this.onDragEnd,this)))},a.prototype.onDragStart=function(t){var i=null;3!==t.which&&(e.support.transform?i={x:(i=this.$stage.css("transform").replace(/.*\(|\)| /g,"").split(","))[16===i.length?12:4],y:i[16===i.length?13:5]}:(i=this.$stage.position(),i={x:this.settings.rtl?i.left+this.$stage.width()-this.width()+this.settings.margin:i.left,y:i.top}),this.is("animating")&&(e.support.transform?this.animate(i.x):this.$stage.stop(),this.invalidate("position")),this.$element.toggleClass(this.options.grabClass,"mousedown"===t.type),this.speed(0),this._drag.time=(new Date).getTime(),this._drag.target=e(t.target),this._drag.stage.start=i,this._drag.stage.current=i,this._drag.pointer=this.pointer(t),e(s).on("mouseup.owl.core touchend.owl.core",e.proxy(this.onDragEnd,this)),e(s).one("mousemove.owl.core touchmove.owl.core",e.proxy((function(t){var i=this.difference(this._drag.pointer,this.pointer(t));e(s).on("mousemove.owl.core touchmove.owl.core",e.proxy(this.onDragMove,this)),Math.abs(i.x)<Math.abs(i.y)&&this.is("valid")||(t.preventDefault(),this.enter("dragging"),this.trigger("drag"))}),this)))},a.prototype.onDragMove=function(t){var e=null,i=null,s=null,n=this.difference(this._drag.pointer,this.pointer(t)),a=this.difference(this._drag.stage.start,n);this.is("dragging")&&(t.preventDefault(),this.settings.loop?(e=this.coordinates(this.minimum()),i=this.coordinates(this.maximum()+1)-e,a.x=((a.x-e)%i+i)%i+e):(e=this.settings.rtl?this.coordinates(this.maximum()):this.coordinates(this.minimum()),i=this.settings.rtl?this.coordinates(this.minimum()):this.coordinates(this.maximum()),s=this.settings.pullDrag?-1*n.x/5:0,a.x=Math.max(Math.min(a.x,e+s),i+s)),this._drag.stage.current=a,this.animate(a.x))},a.prototype.onDragEnd=function(t){var i=this.difference(this._drag.pointer,this.pointer(t)),n=this._drag.stage.current,a=i.x>0^this.settings.rtl?"left":"right";e(s).off(".owl.core"),this.$element.removeClass(this.options.grabClass),(0!==i.x&&this.is("dragging")||!this.is("valid"))&&(this.speed(this.settings.dragEndSpeed||this.settings.smartSpeed),this.current(this.closest(n.x,0!==i.x?a:this._drag.direction)),this.invalidate("position"),this.update(),this._drag.direction=a,(Math.abs(i.x)>3||(new Date).getTime()-this._drag.time>300)&&this._drag.target.one("click.owl.core",(function(){return!1}))),this.is("dragging")&&(this.leave("dragging"),this.trigger("dragged"))},a.prototype.closest=function(t,i){var s=-1,n=this.width(),a=this.coordinates();return this.settings.freeDrag||e.each(a,e.proxy((function(e,o){return"left"===i&&t>o-30&&t<o+30?s=e:"right"===i&&t>o-n-30&&t<o-n+30?s=e+1:this.op(t,"<",o)&&this.op(t,">",a[e+1]||o-n)&&(s="left"===i?e+1:e),-1===s}),this)),this.settings.loop||(this.op(t,">",a[this.minimum()])?s=t=this.minimum():this.op(t,"<",a[this.maximum()])&&(s=t=this.maximum())),s},a.prototype.animate=function(t){var i=this.speed()>0;this.is("animating")&&this.onTransitionEnd(),i&&(this.enter("animating"),this.trigger("translate")),e.support.transform3d&&e.support.transition?this.$stage.css({transform:"translate3d("+t+"px,0px,0px)",transition:this.speed()/1e3+"s"}):i?this.$stage.animate({left:t+"px"},this.speed(),this.settings.fallbackEasing,e.proxy(this.onTransitionEnd,this)):this.$stage.css({left:t+"px"})},a.prototype.is=function(t){return this._states.current[t]&&this._states.current[t]>0},a.prototype.current=function(t){if(t===n)return this._current;if(0===this._items.length)return n;if(t=this.normalize(t),this._current!==t){var e=this.trigger("change",{property:{name:"position",value:t}});e.data!==n&&(t=this.normalize(e.data)),this._current=t,this.invalidate("position"),this.trigger("changed",{property:{name:"position",value:this._current}})}return this._current},a.prototype.invalidate=function(t){return"string"===e.type(t)&&(this._invalidated[t]=!0,this.is("valid")&&this.leave("valid")),e.map(this._invalidated,(function(t,e){return e}))},a.prototype.reset=function(t){(t=this.normalize(t))!==n&&(this._speed=0,this._current=t,this.suppress(["translate","translated"]),this.animate(this.coordinates(t)),this.release(["translate","translated"]))},a.prototype.normalize=function(t,e){var i=this._items.length,s=e?0:this._clones.length;return!this.isNumeric(t)||i<1?t=n:(t<0||t>=i+s)&&(t=((t-s/2)%i+i)%i+s/2),t},a.prototype.relative=function(t){return t-=this._clones.length/2,this.normalize(t,!0)},a.prototype.maximum=function(t){var e,i,s,n=this.settings,a=this._coordinates.length;if(n.loop)a=this._clones.length/2+this._items.length-1;else if(n.autoWidth||n.merge){for(e=this._items.length,i=this._items[--e].width(),s=this.$element.width();e--&&!((i+=this._items[e].width()+this.settings.margin)>s););a=e+1}else a=n.center?this._items.length-1:this._items.length-n.items;return t&&(a-=this._clones.length/2),Math.max(a,0)},a.prototype.minimum=function(t){return t?0:this._clones.length/2},a.prototype.items=function(t){return t===n?this._items.slice():(t=this.normalize(t,!0),this._items[t])},a.prototype.mergers=function(t){return t===n?this._mergers.slice():(t=this.normalize(t,!0),this._mergers[t])},a.prototype.clones=function(t){var i=this._clones.length/2,s=i+this._items.length,a=function(t){return t%2==0?s+t/2:i-(t+1)/2};return t===n?e.map(this._clones,(function(t,e){return a(e)})):e.map(this._clones,(function(e,i){return e===t?a(i):null}))},a.prototype.speed=function(t){return t!==n&&(this._speed=t),this._speed},a.prototype.coordinates=function(t){var i,s=1,a=t-1;return t===n?e.map(this._coordinates,e.proxy((function(t,e){return this.coordinates(e)}),this)):(this.settings.center?(this.settings.rtl&&(s=-1,a=t+1),i=this._coordinates[t],i+=(this.width()-i+(this._coordinates[a]||0))/2*s):i=this._coordinates[a]||0,i=Math.ceil(i))},a.prototype.duration=function(t,e,i){return 0===i?0:Math.min(Math.max(Math.abs(e-t),1),6)*Math.abs(i||this.settings.smartSpeed)},a.prototype.to=function(t,e){var i=this.current(),s=null,n=t-this.relative(i),a=(n>0)-(n<0),o=this._items.length,r=this.minimum(),l=this.maximum();this.settings.loop?(!this.settings.rewind&&Math.abs(n)>o/2&&(n+=-1*a*o),(s=(((t=i+n)-r)%o+o)%o+r)!==t&&s-n<=l&&s-n>0&&(i=s-n,t=s,this.reset(i))):t=this.settings.rewind?(t%(l+=1)+l)%l:Math.max(r,Math.min(l,t)),this.speed(this.duration(i,t,e)),this.current(t),this.$element.is(":visible")&&this.update()},a.prototype.next=function(t){t=t||!1,this.to(this.relative(this.current())+1,t)},a.prototype.prev=function(t){t=t||!1,this.to(this.relative(this.current())-1,t)},a.prototype.onTransitionEnd=function(t){if(t!==n&&(t.stopPropagation(),(t.target||t.srcElement||t.originalTarget)!==this.$stage.get(0)))return!1;this.leave("animating"),this.trigger("translated")},a.prototype.viewport=function(){var t;return this.options.responsiveBaseElement!==i?t=e(this.options.responsiveBaseElement).width():i.innerWidth?t=i.innerWidth:s.documentElement&&s.documentElement.clientWidth?t=s.documentElement.clientWidth:console.warn("Can not detect viewport width."),t},a.prototype.replace=function(t){this.$stage.empty(),this._items=[],t&&(t=t instanceof jQuery?t:e(t)),this.settings.nestedItemSelector&&(t=t.find("."+this.settings.nestedItemSelector)),t.filter((function(){return 1===this.nodeType})).each(e.proxy((function(t,e){e=this.prepare(e),this.$stage.append(e),this._items.push(e),this._mergers.push(1*e.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)}),this)),this.reset(this.isNumeric(this.settings.startPosition)?this.settings.startPosition:0),this.invalidate("items")},a.prototype.add=function(t,i){var s=this.relative(this._current);i=i===n?this._items.length:this.normalize(i,!0),t=t instanceof jQuery?t:e(t),this.trigger("add",{content:t,position:i}),t=this.prepare(t),0===this._items.length||i===this._items.length?(0===this._items.length&&this.$stage.append(t),0!==this._items.length&&this._items[i-1].after(t),this._items.push(t),this._mergers.push(1*t.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)):(this._items[i].before(t),this._items.splice(i,0,t),this._mergers.splice(i,0,1*t.find("[data-merge]").addBack("[data-merge]").attr("data-merge")||1)),this._items[s]&&this.reset(this._items[s].index()),this.invalidate("items"),this.trigger("added",{content:t,position:i})},a.prototype.remove=function(t){(t=this.normalize(t,!0))!==n&&(this.trigger("remove",{content:this._items[t],position:t}),this._items[t].remove(),this._items.splice(t,1),this._mergers.splice(t,1),this.invalidate("items"),this.trigger("removed",{content:null,position:t}))},a.prototype.preloadAutoWidthImages=function(t){t.each(e.proxy((function(t,i){this.enter("pre-loading"),i=e(i),e(new Image).one("load",e.proxy((function(t){i.attr("src",t.target.src),i.css("opacity",1),this.leave("pre-loading"),!this.is("pre-loading")&&!this.is("initializing")&&this.refresh()}),this)).attr("src",i.attr("src")||i.attr("data-src")||i.attr("data-src-retina"))}),this))},a.prototype.destroy=function(){for(var t in this.$element.off(".owl.core"),this.$stage.off(".owl.core"),e(s).off(".owl.core"),!1!==this.settings.responsive&&(i.clearTimeout(this.resizeTimer),this.off(i,"resize",this._handlers.onThrottledResize)),this._plugins)this._plugins[t].destroy();this.$stage.children(".cloned").remove(),this.$stage.unwrap(),this.$stage.children().contents().unwrap(),this.$stage.children().unwrap(),this.$element.removeClass(this.options.refreshClass).removeClass(this.options.loadingClass).removeClass(this.options.loadedClass).removeClass(this.options.rtlClass).removeClass(this.options.dragClass).removeClass(this.options.grabClass).attr("class",this.$element.attr("class").replace(new RegExp(this.options.responsiveClass+"-\\S+\\s","g"),"")).removeData("owl.carousel")},a.prototype.op=function(t,e,i){var s=this.settings.rtl;switch(e){case"<":return s?t>i:t<i;case">":return s?t<i:t>i;case">=":return s?t<=i:t>=i;case"<=":return s?t>=i:t<=i}},a.prototype.on=function(t,e,i,s){t.addEventListener?t.addEventListener(e,i,s):t.attachEvent&&t.attachEvent("on"+e,i)},a.prototype.off=function(t,e,i,s){t.removeEventListener?t.removeEventListener(e,i,s):t.detachEvent&&t.detachEvent("on"+e,i)},a.prototype.trigger=function(t,i,s,n,o){var r={item:{count:this._items.length,index:this.current()}},l=e.camelCase(e.grep(["on",t,s],(function(t){return t})).join("-").toLowerCase()),d=e.Event([t,"owl",s||"carousel"].join(".").toLowerCase(),e.extend({relatedTarget:this},r,i));return this._supress[t]||(e.each(this._plugins,(function(t,e){e.onTrigger&&e.onTrigger(d)})),this.register({type:a.Type.Event,name:t}),this.$element.trigger(d),this.settings&&"function"==typeof this.settings[l]&&this.settings[l].call(this,d)),d},a.prototype.enter=function(t){e.each([t].concat(this._states.tags[t]||[]),e.proxy((function(t,e){this._states.current[e]===n&&(this._states.current[e]=0),this._states.current[e]++}),this))},a.prototype.leave=function(t){e.each([t].concat(this._states.tags[t]||[]),e.proxy((function(t,e){this._states.current[e]--}),this))},a.prototype.register=function(t){if(t.type===a.Type.Event){if(e.event.special[t.name]||(e.event.special[t.name]={}),!e.event.special[t.name].owl){var i=e.event.special[t.name]._default;e.event.special[t.name]._default=function(t){return!i||!i.apply||t.namespace&&-1!==t.namespace.indexOf("owl")?t.namespace&&t.namespace.indexOf("owl")>-1:i.apply(this,arguments)},e.event.special[t.name].owl=!0}}else t.type===a.Type.State&&(this._states.tags[t.name]?this._states.tags[t.name]=this._states.tags[t.name].concat(t.tags):this._states.tags[t.name]=t.tags,this._states.tags[t.name]=e.grep(this._states.tags[t.name],e.proxy((function(i,s){return e.inArray(i,this._states.tags[t.name])===s}),this)))},a.prototype.suppress=function(t){e.each(t,e.proxy((function(t,e){this._supress[e]=!0}),this))},a.prototype.release=function(t){e.each(t,e.proxy((function(t,e){delete this._supress[e]}),this))},a.prototype.pointer=function(t){var e={x:null,y:null};return(t=(t=t.originalEvent||t||i.event).touches&&t.touches.length?t.touches[0]:t.changedTouches&&t.changedTouches.length?t.changedTouches[0]:t).pageX?(e.x=t.pageX,e.y=t.pageY):(e.x=t.clientX,e.y=t.clientY),e},a.prototype.isNumeric=function(t){return!isNaN(parseFloat(t))},a.prototype.difference=function(t,e){return{x:t.x-e.x,y:t.y-e.y}},e.fn.sbyOwlCarousel=function(i){var s=Array.prototype.slice.call(arguments,1);return this.each((function(){var n=e(this),o=n.data("owl.carousel");o||(o=new a(this,"object"==t(i)&&i),n.data("owl.carousel",o),e.each(["next","prev","to","destroy","refresh","replace","add","remove"],(function(t,i){o.register({type:a.Type.Event,name:i}),o.$element.on(i+".owl.carousel.core",e.proxy((function(t){t.namespace&&t.relatedTarget!==this&&(this.suppress([i]),o[i].apply(this,[].slice.call(arguments,1)),this.release([i]))}),o))}))),"string"==typeof i&&"_"!==i.charAt(0)&&o[i].apply(o,s)}))},e.fn.sbyOwlCarousel.Constructor=a}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._interval=null,this._visible=null,this._handlers={"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.autoRefresh&&this.watch()}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};n.Defaults={autoRefresh:!0,autoRefreshInterval:500},n.prototype.watch=function(){this._interval||(this._visible=this._core.$element.is(":visible"),this._interval=e.setInterval(t.proxy(this.refresh,this),this._core.settings.autoRefreshInterval))},n.prototype.refresh=function(){this._core.$element.is(":visible")!==this._visible&&(this._visible=!this._visible,this._core.$element.toggleClass("sby-owl-hidden",!this._visible),this._visible&&this._core.invalidate("width")&&this._core.refresh())},n.prototype.destroy=function(){var t,i;for(t in e.clearInterval(this._interval),this._handlers)this._core.$element.off(t,this._handlers[t]);for(i in Object.getOwnPropertyNames(this))"function"!=typeof this[i]&&(this[i]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.AutoRefresh=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._loaded=[],this._handlers={"initialized.owl.carousel change.owl.carousel resized.owl.carousel":t.proxy((function(e){if(e.namespace&&this._core.settings&&this._core.settings.lazyLoad&&(e.property&&"position"==e.property.name||"initialized"==e.type))for(var i=this._core.settings,s=i.center&&Math.ceil(i.items/2)||i.items,n=i.center&&-1*s||0,a=(e.property&&void 0!==e.property.value?e.property.value:this._core.current())+n,o=this._core.clones().length,r=t.proxy((function(t,e){this.load(e)}),this);n++<s;)this.load(o/2+this._core.relative(a)),o&&t.each(this._core.clones(this._core.relative(a)),r),a++}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers)};n.Defaults={lazyLoad:!1},n.prototype.load=function(i){var s=this._core.$stage.children().eq(i),n=s&&s.find(".sby-owl-lazy");!n||t.inArray(s.get(0),this._loaded)>-1||(n.each(t.proxy((function(i,s){var n,a=t(s),o=e.devicePixelRatio>1&&a.attr("data-src-retina")||a.attr("data-src");this._core.trigger("load",{element:a,url:o},"lazy"),a.is("img")?a.one("load.owl.lazy",t.proxy((function(){a.css("opacity",1),this._core.trigger("loaded",{element:a,url:o},"lazy")}),this)).attr("src",o):((n=new Image).onload=t.proxy((function(){a.css({"background-image":'url("'+o+'")',opacity:"1"}),this._core.trigger("loaded",{element:a,url:o},"lazy")}),this),n.src=o)}),this)),this._loaded.push(s.get(0)))},n.prototype.destroy=function(){var t,e;for(t in this.handlers)this._core.$element.off(t,this.handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Lazy=n}(window.Zepto||window.jQuery,window,document),i=window.Zepto||window.jQuery,window,document,s=function t(e){this._core=e,this._handlers={"initialized.owl.carousel refreshed.owl.carousel":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&this.update()}),this),"changed.owl.carousel":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&"position"==t.property.name&&this.update()}),this),"loaded.owl.lazy":i.proxy((function(t){t.namespace&&this._core.settings.autoHeight&&t.element.closest("."+this._core.settings.itemClass).index()===this._core.current()&&this.update()}),this)},this._core.options=i.extend({},t.Defaults,this._core.options),this._core.$element.on(this._handlers)},s.Defaults={autoHeight:!1,autoHeightClass:"sby-owl-height"},s.prototype.update=function(){var t,e=this._core._current,s=e+this._core.settings.items,n=this._core.$stage.children().toArray().slice(e,s),a=[];i.each(n,(function(t,e){a.push(i(e).height())})),t=Math.max.apply(null,a),this._core.$stage.parent().height(t).addClass(this._core.settings.autoHeightClass)},s.prototype.destroy=function(){var t,e;for(t in this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},i.fn.sbyOwlCarousel.Constructor.Plugins.AutoHeight=s,function(t,e,i,s){var n=function e(i){this._core=i,this._videos={},this._playing=null,this._handlers={"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.register({type:"state",name:"playing",tags:["interacting"]})}),this),"resize.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.video&&this.isInFullScreen()&&t.preventDefault()}),this),"refreshed.owl.carousel":t.proxy((function(t){t.namespace&&this._core.is("resizing")&&this._core.$stage.find(".cloned .sby-owl-video-frame").remove()}),this),"changed.owl.carousel":t.proxy((function(t){t.namespace&&"position"===t.property.name&&this._playing&&this.stop()}),this),"prepared.owl.carousel":t.proxy((function(e){if(e.namespace){var i=t(e.content).find(".sby-owl-video");i.length&&(i.css("display","none"),this.fetch(i,t(e.content)))}}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this._core.$element.on(this._handlers),this._core.$element.on("click.owl.video",".sby-owl-video-play-icon",t.proxy((function(t){this.play(t)}),this))};n.Defaults={video:!1,videoHeight:!1,videoWidth:!1},n.prototype.fetch=function(t,e){var i=t.attr("data-vimeo-id")?"vimeo":t.attr("data-vzaar-id")?"vzaar":"youtube",s=t.attr("data-vimeo-id")||t.attr("data-youtube-id")||t.attr("data-vzaar-id"),n=t.attr("data-width")||this._core.settings.videoWidth,a=t.attr("data-height")||this._core.settings.videoHeight,o=t.attr("href");if(!o)throw new Error("Missing video URL.");if((s=o.match(/(http:|https:|)\/\/(player.|www.|app.)?(vimeo\.com|youtu(be\.com|\.be|be\.googleapis\.com)|vzaar\.com)\/(video\/|videos\/|embed\/|channels\/.+\/|groups\/.+\/|watch\?v=|v\/)?([A-Za-z0-9._%-]*)(\&\S+)?/))[3].indexOf("youtu")>-1)i="youtube";else if(s[3].indexOf("vimeo")>-1)i="vimeo";else{if(!(s[3].indexOf("vzaar")>-1))throw new Error("Video URL not supported.");i="vzaar"}s=s[6],this._videos[o]={type:i,id:s,width:n,height:a},e.attr("data-video",o),this.thumbnail(t,this._videos[o])},n.prototype.thumbnail=function(e,i){var s,n,a=i.width&&i.height?'style="width:'+i.width+"px;height:"+i.height+'px;"':"",o=e.find("img"),r="src",l="",d=this._core.settings,h=function(t){s=d.lazyLoad?'<div class="sby-owl-video-tn '+l+'" '+r+'="'+t+'"></div>':'<div class="sby-owl-video-tn" style="opacity:1;background-image:url('+t+')"></div>',e.after(s),e.after('<div class="sby-owl-video-play-icon"></div>')};if(e.wrap('<div class="sby-owl-video-wrapper"'+a+"></div>"),this._core.settings.lazyLoad&&(r="data-src",l="sby-owl-lazy"),o.length)return h(o.attr(r)),o.remove(),!1;"youtube"===i.type?(n="//img.youtube.com/vi/"+i.id+"/hqdefault.jpg",h(n)):"vimeo"===i.type?t.ajax({type:"GET",url:"//vimeo.com/api/v2/video/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(t){n=t[0].thumbnail_large,h(n)}}):"vzaar"===i.type&&t.ajax({type:"GET",url:"//vzaar.com/api/videos/"+i.id+".json",jsonp:"callback",dataType:"jsonp",success:function(t){n=t.framegrab_url,h(n)}})},n.prototype.stop=function(){this._core.trigger("stop",null,"video"),this._playing.find(".sby-owl-video-frame").remove(),this._playing.removeClass("sby-owl-video-playing"),this._playing=null,this._core.leave("playing"),this._core.trigger("stopped",null,"video")},n.prototype.play=function(e){var i,s=t(e.target).closest("."+this._core.settings.itemClass),n=this._videos[s.attr("data-video")],a=n.width||"100%",o=n.height||this._core.$stage.height();this._playing||(this._core.enter("playing"),this._core.trigger("play",null,"video"),s=this._core.items(this._core.relative(s.index())),this._core.reset(s.index()),"youtube"===n.type?i='<iframe width="'+a+'" height="'+o+'" src="//www.youtube.com/embed/'+n.id+"?autoplay=1&rel=0&v="+n.id+'" frameborder="0" allowfullscreen></iframe>':"vimeo"===n.type?i='<iframe src="//player.vimeo.com/video/'+n.id+'?autoplay=1" width="'+a+'" height="'+o+'" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>':"vzaar"===n.type&&(i='<iframe frameborder="0"height="'+o+'"width="'+a+'" allowfullscreen mozallowfullscreen webkitAllowFullScreen src="//view.vzaar.com/'+n.id+'/player?autoplay=true"></iframe>'),t('<div class="sby-owl-video-frame">'+i+"</div>").insertAfter(s.find(".sby-owl-video")),this._playing=s.addClass("sby-owl-video-playing"))},n.prototype.isInFullScreen=function(){var e=i.fullscreenElement||i.mozFullScreenElement||i.webkitFullscreenElement;return e&&t(e).parent().hasClass("sby-owl-video-frame")},n.prototype.destroy=function(){var t,e;for(t in this._core.$element.off("click.owl.video"),this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Video=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this.core=i,this.core.options=t.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=s,this.next=s,this.handlers={"change.owl.carousel":t.proxy((function(t){t.namespace&&"position"==t.property.name&&(this.previous=this.core.current(),this.next=t.property.value)}),this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":t.proxy((function(t){t.namespace&&(this.swapping="translated"==t.type)}),this),"translate.owl.carousel":t.proxy((function(t){t.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()}),this)},this.core.$element.on(this.handlers)};n.Defaults={animateOut:!1,animateIn:!1},n.prototype.swap=function(){if(1===this.core.settings.items&&t.support.animation&&t.support.transition){this.core.speed(0);var e,i=t.proxy(this.clear,this),s=this.core.$stage.children().eq(this.previous),n=this.core.$stage.children().eq(this.next),a=this.core.settings.animateIn,o=this.core.settings.animateOut;this.core.current()!==this.previous&&(o&&(e=this.core.coordinates(this.previous)-this.core.coordinates(this.next),s.one(t.support.animation.end,i).css({left:e+"px"}).addClass("animated sby-owl-animated-out").addClass(o)),a&&n.one(t.support.animation.end,i).addClass("animated sby-owl-animated-in").addClass(a))}},n.prototype.clear=function(e){t(e.target).css({left:""}).removeClass("animated sby-owl-animated-out sby-owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},n.prototype.destroy=function(){var t,e;for(t in this.handlers)this.core.$element.off(t,this.handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Animate=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){var n=function e(i){this._core=i,this._timeout=null,this._paused=!1,this._handlers={"changed.owl.carousel":t.proxy((function(t){t.namespace&&"settings"===t.property.name?this._core.settings.autoplay?this.play():this.stop():t.namespace&&"position"===t.property.name&&this._core.settings.autoplay&&this._setAutoPlayInterval()}),this),"initialized.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.autoplay&&this.play()}),this),"play.owl.autoplay":t.proxy((function(t,e,i){t.namespace&&this.play(e,i)}),this),"stop.owl.autoplay":t.proxy((function(t){t.namespace&&this.stop()}),this),"mouseover.owl.autoplay":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()}),this),"mouseleave.owl.autoplay":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()}),this),"touchstart.owl.core":t.proxy((function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()}),this),"touchend.owl.core":t.proxy((function(){this._core.settings.autoplayHoverPause&&this.play()}),this)},this._core.$element.on(this._handlers),this._core.options=t.extend({},e.Defaults,this._core.options)};n.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},n.prototype.play=function(t,e){this._paused=!1,this._core.is("rotating")||(this._core.enter("rotating"),this._setAutoPlayInterval())},n.prototype._getNextTimeout=function(s,n){return this._timeout&&e.clearTimeout(this._timeout),e.setTimeout(t.proxy((function(){this._paused||this._core.is("busy")||this._core.is("interacting")||i.hidden||this._core.next(n||this._core.settings.autoplaySpeed)}),this),s||this._core.settings.autoplayTimeout)},n.prototype._setAutoPlayInterval=function(){this._timeout=this._getNextTimeout()},n.prototype.stop=function(){this._core.is("rotating")&&(e.clearTimeout(this._timeout),this._core.leave("rotating"))},n.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)},n.prototype.destroy=function(){var t,e;for(t in this.stop(),this._handlers)this._core.$element.off(t,this._handlers[t]);for(e in Object.getOwnPropertyNames(this))"function"!=typeof this[e]&&(this[e]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.autoplay=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){"use strict";var n=function e(i){this._core=i,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":t.proxy((function(e){e.namespace&&this._core.settings.dotsData&&this._templates.push('<div class="'+this._core.settings.dotClass+'">'+t(e.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"</div>")}),this),"added.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.dotsData&&this._templates.splice(t.position,0,this._templates.pop())}),this),"remove.owl.carousel":t.proxy((function(t){t.namespace&&this._core.settings.dotsData&&this._templates.splice(t.position,1)}),this),"changed.owl.carousel":t.proxy((function(t){t.namespace&&"position"==t.property.name&&this.draw()}),this),"initialized.owl.carousel":t.proxy((function(t){t.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))}),this),"refreshed.owl.carousel":t.proxy((function(t){t.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))}),this)},this._core.options=t.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};n.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"sby-owl-nav",navClass:["sby-owl-prev","sby-owl-next"],slideBy:1,dotClass:"sby-owl-dot",dotsClass:"sby-owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},n.prototype.initialize=function(){var e,i=this._core.settings;for(e in this._controls.$relative=(i.navContainer?t(i.navContainer):t("<div>").addClass(i.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=t("<"+i.navElement+">").addClass(i.navClass[0]).html(i.navText[0]).prependTo(this._controls.$relative).on("click",t.proxy((function(t){this.prev(i.navSpeed)}),this)),this._controls.$next=t("<"+i.navElement+">").addClass(i.navClass[1]).html(i.navText[1]).appendTo(this._controls.$relative).on("click",t.proxy((function(t){this.next(i.navSpeed)}),this)),i.dotsData||(this._templates=[t("<div>").addClass(i.dotClass).append(t("<span>")).prop("outerHTML")]),this._controls.$absolute=(i.dotsContainer?t(i.dotsContainer):t("<div>").addClass(i.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","div",t.proxy((function(e){var s=t(e.target).parent().is(this._controls.$absolute)?t(e.target).index():t(e.target).parent().index();e.preventDefault(),this.to(s,i.dotsSpeed)}),this)),this._overrides)this._core[e]=t.proxy(this[e],this)},n.prototype.destroy=function(){var t,e,i,s;for(t in this._handlers)this.$element.off(t,this._handlers[t]);for(e in this._controls)this._controls[e].remove();for(s in this.overides)this._core[s]=this._overrides[s];for(i in Object.getOwnPropertyNames(this))"function"!=typeof this[i]&&(this[i]=null)},n.prototype.update=function(){var t,e,i=this._core.clones().length/2,s=i+this._core.items().length,n=this._core.maximum(!0),a=this._core.settings,o=a.center||a.autoWidth||a.dotsData?1:a.dotsEach||a.items;if("page"!==a.slideBy&&(a.slideBy=Math.min(a.slideBy,a.items)),a.dots||"page"==a.slideBy)for(this._pages=[],t=i,e=0;t<s;t++){if(e>=o||0===e){if(this._pages.push({start:Math.min(n,t-i),end:t-i+o-1}),Math.min(n,t-i)===n)break;e=0}e+=this._core.mergers(this._core.relative(t))}},n.prototype.draw=function(){var e,i=this._core.settings,s=this._core.items().length<=i.items,n=this._core.relative(this._core.current()),a=i.loop||i.rewind;this._controls.$relative.toggleClass("disabled",!i.nav||s),i.nav&&(this._controls.$previous.toggleClass("disabled",!a&&n<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!a&&n>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!i.dots||s),i.dots&&(e=this._pages.length-this._controls.$absolute.children().length,i.dotsData&&0!==e?this._controls.$absolute.html(this._templates.join("")):e>0?this._controls.$absolute.append(new Array(e+1).join(this._templates[0])):e<0&&this._controls.$absolute.children().slice(e).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(t.inArray(this.current(),this._pages)).addClass("active"))},n.prototype.onTrigger=function(e){var i=this._core.settings;e.page={index:t.inArray(this.current(),this._pages),count:this._pages.length,size:i&&(i.center||i.autoWidth||i.dotsData?1:i.dotsEach||i.items)}},n.prototype.current=function(){var e=this._core.relative(this._core.current());return t.grep(this._pages,t.proxy((function(t,i){return t.start<=e&&t.end>=e}),this)).pop()},n.prototype.getPosition=function(e){var i,s,n=this._core.settings;return"page"==n.slideBy?(i=t.inArray(this.current(),this._pages),s=this._pages.length,e?++i:--i,i=this._pages[(i%s+s)%s].start):(i=this._core.relative(this._core.current()),s=this._core.items().length,e?i+=n.slideBy:i-=n.slideBy),i},n.prototype.next=function(e){t.proxy(this._overrides.to,this._core)(this.getPosition(!0),e)},n.prototype.prev=function(e){t.proxy(this._overrides.to,this._core)(this.getPosition(!1),e)},n.prototype.to=function(e,i,s){var n;!s&&this._pages.length?(n=this._pages.length,t.proxy(this._overrides.to,this._core)(this._pages[(e%n+n)%n].start,i)):t.proxy(this._overrides.to,this._core)(e,i)},t.fn.sbyOwlCarousel.Constructor.Plugins.Navigation=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){"use strict";var n=function i(s){this._core=s,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":t.proxy((function(i){i.namespace&&"URLHash"===this._core.settings.startPosition&&t(e).trigger("hashchange.owl.navigation")}),this),"prepared.owl.carousel":t.proxy((function(e){if(e.namespace){var i=t(e.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!i)return;this._hashes[i]=e.content}}),this),"changed.owl.carousel":t.proxy((function(i){if(i.namespace&&"position"===i.property.name){var s=this._core.items(this._core.relative(this._core.current())),n=t.map(this._hashes,(function(t,e){return t===s?e:null})).join();if(!n||e.location.hash.slice(1)===n)return;e.location.hash=n}}),this)},this._core.options=t.extend({},i.Defaults,this._core.options),this.$element.on(this._handlers),t(e).on("hashchange.owl.navigation",t.proxy((function(t){var i=e.location.hash.substring(1),s=this._core.$stage.children(),n=this._hashes[i]&&s.index(this._hashes[i]);void 0!==n&&n!==this._core.current()&&this._core.to(this._core.relative(n),!1,!0)}),this))};n.Defaults={URLhashListener:!1},n.prototype.destroy=function(){var i,s;for(i in t(e).off("hashchange.owl.navigation"),this._handlers)this._core.$element.off(i,this._handlers[i]);for(s in Object.getOwnPropertyNames(this))"function"!=typeof this[s]&&(this[s]=null)},t.fn.sbyOwlCarousel.Constructor.Plugins.Hash=n}(window.Zepto||window.jQuery,window,document),function(t,e,i,s){function n(e,i){var s=!1,n=e.charAt(0).toUpperCase()+e.slice(1);return t.each((e+" "+r.join(n+" ")+n).split(" "),(function(t,e){if(void 0!==o[e])return s=!i||e,!1})),s}function a(t){return n(t,!0)}var o=t("<support>").get(0).style,r="Webkit Moz O ms".split(" "),l={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}};!!n("transition")&&(t.support.transition=new String(a("transition")),t.support.transition.end=l.transition.end[t.support.transition]),!!n("animation")&&(t.support.animation=new String(a("animation")),t.support.animation.end=l.animation.end[t.support.animation]),n("transform")&&(t.support.transform=new String(a("transform")),t.support.transform3d=!!n("perspective"))}(window.Zepto||window.jQuery,window,document),e=window.Zepto||window.jQuery,window,document,Owl2row=function(t){function e(e){return t.apply(this,arguments)}return e.toString=function(){return t.toString()},e}((function(t){this.owl=t,this.owl.options=e.extend({},Owl2row.Defaults,this.owl.options),this.handlers={"initialize.owl.carousel":e.proxy((function(t){this.owl.settings.owl2row&&this.build2row(this)}),this)},this.owl.$element.on(this.handlers)})),Owl2row.Defaults={owl2row:!1,owl2rowTarget:"sby_item",owl2rowContainer:"sby_owl2row-item",owl2rowDirection:"utd"},Owl2row.prototype.build2row=function(t){var i=e(t.owl.$element),s=i.find("."+t.owl.options.owl2rowTarget),n=[],a=[];e.each(s,(function(t,e){t%2==0?n.push(e):a.push(e)})),"ltr"===t.owl.options.owl2rowDirection?t.leftToright(t,i,s):t.upTodown(t,n,a,i)},Owl2row.prototype.leftToright=function(t,i,s){var n=t.owl.options.owl2rowContainer,a=t.owl.options.margin,o=s.length,r=[],l=[];o%2==1?o=(o-1)/2+1:o/=2,e.each(s,(function(t,e){t<o?r.push(e):l.push(e)})),e.each(r,(function(t,s){var o=e('<div class="'+n+'"/>'),d=r[t];d.style.marginBottom=a+"px",o.append(d).append(l[t]),i.append(o)}))},Owl2row.prototype.upTodown=function(t,i,s,n){var a=t.owl.options.owl2rowContainer,o=t.owl.options.margin;e.each(i,(function(t,r){var l=e('<div class="'+a+'"/>'),d=i[t];d.style.marginBottom=o+"px",l.append(d).append(s[t]),n.append(l)}))},Owl2row.prototype.destroy=function(){},e.fn.sbyOwlCarousel.Constructor.Plugins.owl2row=Owl2row,function(e){function i(){this.feeds={},this.ctas={},this.options=sbyOptions,this.isTouch="ontouchstart"in document.documentElement}function s(t,e,i){this.el=t,this.index=e,this.settings=i,this.placeholderURL=window.sby.options.placeholder,i.narrowPlayer&&(this.placeholderURL=window.sby.options.placeholderNarrow),this.playerAPIReady=!1,this.consentGiven=i.consentGiven,this.players={},this.minImageWidth=0,this.imageResolution=150,this.resizedImages={},this.needsResizing=[],this.outOfPages=!1,this.isInitialized=!1,this.mostRecentlyLoadedPosts=[],this.embedURL="//www.youtube-nocookie.com",i.allowCookies&&(this.embedURL="//www.youtube.com")}function n(t,i,n){s.call(this,t,i,n),this.CTA={},this.initLayout=function(){this.initGalleryLayout(),this.initGrid(),this.initCarousels();var t=jQuery.Event("sbyafterlayoutinit");t.feed=this,jQuery(window).trigger(t)},this.initGrid=function(){if(window.sbySemiEagerLoading&&jQuery("#sby_lightbox").length){var t=this;playerID="sby_lb-player",jQuery("#sby_lightbox").addClass("sby_video_lightbox");var i=e(this.el).find("sby_item").first().attr("data-video-id"),s=sbyOptions.autoplay;if(void 0===window.sbyLightboxPlayer){var n={host:window.location.protocol+t.embedURL,videoId:i,playerVars:{modestbranding:1,rel:0,autoplay:s},events:{onStateChange:function(i){var s=i.target.getVideoData().video_id;t.afterStateChange(playerID,s,i,e("#"+playerID).closest(".sby_video_thumbnail_wrap"))}}};t.maybeAddCTA(playerID),window.sbyLightboxPlayer=new window.YT.Player(playerID,n)}}},this.initCarousels=function(){var t=this,i=e(this.el);if(void 0!==this.settings.general.carousel){var s=this.settings.cols,n=this.settings.colsmobile;i.find(".sby_items_wrap").addClass("sby_carousel"),i.find(".sby_load_btn").remove(),i.find(".sby_item").css({"padding-top":i.find(".sby_items_wrap").css("padding-top"),"padding-right":i.find(".sby_items_wrap").css("padding-top"),"padding-bottom":i.find(".sby_items_wrap").css("padding-top"),"padding-left":i.find(".sby_items_wrap").css("padding-top")}),i.find(".sby_item").each((function(){e(this).attr("style",e(this).attr("style").replace("padding: "+i.find(".sby_items_wrap").css("padding-top"),"padding: "+i.find(".sby_items_wrap").css("padding-top")+" !important"))}));var a=t.settings.general.carousel[0],o=t.settings.general.carousel[1],r=t.settings.general.carousel[2],l=t.settings.general.carousel[3],d=t.settings.general.carousel[4],h=t.settings.general.carousel[5];r||(l=!1);var c=s,u=s,g=(a=a?"onhover":"hide",r=!1!==l,2==h);d=!d,i.hasClass("sby_mob_col_auto")?(c=2,2!=parseInt(s)&&(u=1),2==parseInt(s)&&(u=2)):u=n,this.carouselArgs={items:s,loop:d,rewind:!d,autoplay:r,autoplayTimeout:Math.max(l,2e3),autoplayHoverPause:!0,nav:!0,navText:['<svg class="svg-inline--fa fa-chevron-left fa-w-10" aria-hidden="true" data-fa-processed="" data-prefix="fa" data-icon="chevron-left" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M34.52 239.03L228.87 44.69c9.37-9.37 24.57-9.37 33.94 0l22.67 22.67c9.36 9.36 9.37 24.52.04 33.9L131.49 256l154.02 154.75c9.34 9.38 9.32 24.54-.04 33.9l-22.67 22.67c-9.37 9.37-24.57 9.37-33.94 0L34.52 272.97c-9.37-9.37-9.37-24.57 0-33.94z"></path></svg>','<svg class="svg-inline--fa fa-chevron-right fa-w-10" aria-hidden="true" data-fa-processed="" data-prefix="fa" data-icon="chevron-right" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><path fill="currentColor" d="M285.476 272.971L91.132 467.314c-9.373 9.373-24.569 9.373-33.941 0l-22.667-22.667c-9.357-9.357-9.375-24.522-.04-33.901L188.505 256 34.484 101.255c-9.335-9.379-9.317-24.544.04-33.901l22.667-22.667c9.373-9.373 24.569-9.373 33.941 0L285.475 239.03c9.373 9.372 9.373 24.568.001 33.941z"></path></svg>'],dots:o,owl2row:g,responsive:{0:{items:u},480:{items:c},640:{items:s}},onChange:function(){setTimeout((function(){t.afterResize()}),1)},onInitialize:function(){var e=jQuery(t.el);e.find(".sby_items_wrap.sby_carousel").fadeIn(),setTimeout((function(){e.find(".sby_items_wrap.sby_carousel .sby_info, .sby_owl2row-item,.sby_items_wrap.sby_carousel").fadeIn()}),1),setTimeout((function(){var t=e.find(".sby-owl-nav");if("onhover"===a);else if("below"===a){var i=e.find(".sby-owl-dots"),s=e.find(".sby-owl-prev"),n=e.find(".sby-owl-next"),o=e.find(".sby-owl-nav"),r=e.find(".sby-owl-dot"),l=r.length*r.innerWidth();e.innerWidth(),s.after(i),o.css("position","relative"),n.css("position","absolute").css("top","-6px").css("right",Math.max(.5*o.innerWidth()-.5*l-n.innerWidth()-6,0)),s.css("position","absolute").css("top","-6px").css("left",Math.max(.5*o.innerWidth()-.5*l-s.innerWidth()-6,0))}else"hide"===a&&t.addClass("hide").hide()}),1)}}}},this.stripEmojihtml=function(t){return t.find(".emoji").each((function(){e(this).replaceWith(e(this).attr("alt"))})),t.html()},this.afterItemRevealed=function(t){var e=this;if(t.find(".sby_caption").length&&!t.find(".sby_caption").hasClass("sby_full_caption")){var i=t.find(".sby_item_caption_wrap .sby_caption"),s=t.find(".sby_item_video_thumbnail .sby_caption"),n=void 0!==e.settings.general.descriptionlength?parseInt(e.settings.general.descriptionlength):150;n<1&&(n=99999);var a=this.stripEmojihtml(t.find(".sby_caption").first()),o=(a.match(/<br>/g)||[]).length;if((void 0===sbyOptions.brAdjust||"1"===sbyOptions.brAdjust||!0===sbyOptions.brAdjust)&&o>0&&a.indexOf("<br>")<n){var r=t.find(".sby_caption").first();captionWidth=r.width()>20?r.width():t.width(),fontSize=r.css("font-size"),charactersPerLine=captionWidth/parseInt(fontSize)*1.85,maxCharsPerLine=Math.floor(charactersPerLine),projectedMaxLines=Math.ceil(n/charactersPerLine);var l=a.split("<br>"),d=0,h=0;jQuery.each(l,(function(){var t=projectedMaxLines-d;if(t>0){var e=Math.max(1,Math.ceil(this.length/charactersPerLine));h+=Math.min(this.length+4,t*maxCharsPerLine),d+=e}})),n=h}var c=a.substring(0,n);if(c=a.length>n?c.substr(0,Math.min(c.length,c.lastIndexOf(" "))):c,i.length&&(i.html(sbyLinkify(c)),c===a&&i.next(".sby_expand").remove()),s.length){var u=c;c!==a&&(u+='<span class="sby_more">...</span>'),s.html(u)}a.length>n&&t.find(".sby_expand").show(),t.find(".sby_expand a").off("click").on("click",(function(s){s.preventDefault(),jQuery(this),i=void 0!==i?i:t.find(".sby_info .sby_caption"),a="undefined"!=typeof captiontext?a:t.find(".sby_item_video_thumbnail").attr("data-title"),t.hasClass("sby_caption_full")&&void 0!==c?(i.html(c),t.removeClass("sby_caption_full")):(i.html(sbyLinkify(a)),t.addClass("sby_caption_full")),e.afterResize()}))}this.setUpCTA(t);var g=void 0!==e.settings.general.disablelightbox&&e.settings.general.disablelightbox,y=void 0!==e.settings.general.captionlinks&&e.settings.general.captionlinks;if(g||y){if(y){var p="";void 0!==t.find("img").attr("alt")?p=t.find("img").attr("alt"):void 0!==t.find("video").attr("alt")&&(p=t.find("video").attr("alt"));var f=p.match(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g);f&&t.find("a").attr("href",f)}t.find(".sby_link").addClass("sby_disable_lightbox")}else{var b=t.find(".sby_photo_wrap"),m=b.find(".sby_link");feedOptions={hovereffect:"true"},"none"==feedOptions.hovereffect?(m.css("background","none").show(),m.find("*").hide().end().find(".sby_link_area").show()):b.on("mouseenter mouseleave",(function(e){switch(e.type){case"mouseenter":t.addClass("sby_animate");break;case"mouseleave":t.removeClass("sby_animate")}}))}var _=void 0!==t.attr("data-video-id")?t.attr("data-video-id"):t.find(".sby_video_thumbnail").attr("data-video-id");this.mostRecentlyLoadedPosts.push(_)},this.afterFeedSet=function(){void 0!==this.carouselArgs&&(e(this.el).find(".sby_carousel").sbyOwlCarousel(this.carouselArgs),2===parseInt(this.settings.general.carousel[5])&&e(this.el).addClass("sby_carousel_2_row"))},this.setUpCTA=function(t,e){e=void 0!==e?e:t.find(".sby_item_video_thumbnail").attr("data-video-id");var i=void 0!==t.find(".sby_item_video_thumbnail").attr("data-title")?t.find(".sby_item_video_thumbnail").attr("data-title"):"",s=window.sby.ctaDetect(i);window.sby.ctas[e]=s||this.getDefaultCTA()},this.getDefaultCTA=function(){return void 0!==this.settings.general.cta&&"default"!==this.settings.general.cta.type&&("link"===this.settings.general.cta.type?{callback:"link",url:this.settings.general.cta.defaultLink,text:this.settings.general.cta.defaultText}:{callback:"related",related:this.settings.general.cta.defaultPosts})},this.afterResize=function(){this.setImageHeight(),this.setImageResolution(),this.maybeRaiseImageResolution(),this.setImageSizeClass(),this.setAllCTADimensions(),this.sizePlayer(),this.sizeItems()},this.setAllCTADimensions=function(){e.each(this.CTA,(function(t,e){e.isInitialized&&e.setCTAStyles()}))},this.afterSendCheckWPPostsToServer=function(t){var s=e(this.el);s.find(".sby_item").each((function(){if(void 0!==t[e(this).attr("data-video-id")]){var i=t[e(this).attr("data-video-id")];e(this).find(".sby_view_count").text(i.sby_view_count),e(this).find(".sby_comment_count").text(i.sby_comment_count),e(this).find(".sby_like_count").text(i.sby_like_count),"none"!==i.sby_live_broadcast.broadcast_type&&(e(this).find(".sby_ls_message").text(i.sby_live_broadcast.live_streaming_string),e(this).find(".sby_date").html(i.sby_live_broadcast.live_streaming_date)),void 0!==i.sby_live_broadcast.live_streaming_timestamp&&e(this).attr("data-live-date",i.sby_live_broadcast.live_streaming_timestamp),void 0!==i.sby_description&&e(this).find(".sby_item_video_thumbnail").attr("data-title",i.sby_description)}})),s.find(".sby_player_item").each((function(){if(void 0!==t[e(this).find(".sby_video_thumbnail").attr("data-video-id")]){var i=t[e(this).find(".sby_video_thumbnail").attr("data-video-id")];e(this).find(".sby_view_count").text(i.sby_view_count),e(this).find(".sby_comment_count").text(i.sby_comment_count),e(this).find(".sby_like_count").text(i.sby_like_count),"none"!==i.sby_live_broadcast.broadcast_type&&(e(this).find(".sby_ls_message").text(i.sby_live_broadcast.live_streaming_string),e(this).find(".sby_date").html(i.sby_live_broadcast.live_streaming_date)),void 0!==i.sby_live_broadcast.live_streaming_timestamp&&e(this).attr("data-live-date",i.sby_live_broadcast.live_streaming_timestamp)}}));var n=jQuery.Event("sbyaftercheckposts");n.feed=window.sby.feeds[i],n.response=t,jQuery(window).trigger(n)},this.afterStateChange=function(t,e,i,s){},this.changePlayerInfo=function(t){e(this.el).find(".sby_player_item").find(".sby_info").replaceWith(t.find(".sby_info").clone(!0,!0))},this.maybeAddCTA=function(t,e){}}function a(){}function o(t,i){e.ajax({url:sbyOptions.adminAjaxUrl,type:"post",data:t,success:i})}i.prototype={createPage:function(t,i){void 0!==window.sbyajaxurl&&-1!==window.sbyajaxurl.indexOf(window.location.hostname)||(window.sbyajaxurl=window.location.hostname+"/wp-admin/admin-ajax.php"),e(".sby_no_js_error_message").remove(),e(".sby_no_js").removeClass("sby_no_js"),t(i)},maybeAddYTAPI:function(){var t="sby-youtube-api";if(null===document.getElementById(t)){var e=document.createElement("script"),i=document.getElementsByTagName("script")[0];e.src="https://www.youtube.com/iframe_api",e.id=t,i.parentNode.insertBefore(e,i)}},createLightbox:function(){var t,i=new a,s=(t=0,function(e,i){clearTimeout(t),t=setTimeout(e,i)});jQuery(window).on("resize",(function(){s((function(){i.afterResize()}),200)})),function(){var t=jQuery,s=function(){function t(){this.fadeDuration=500,this.fitImagesInViewport=!0,this.resizeDuration=700,this.positionFromTop=50,this.showImageNumberLabel=!0,this.alwaysShowNavOnTouchDevices=!1,this.wrapAround=!1}return t.prototype.albumLabel=function(t,e){return t+" / "+e},t}(),n=function(){function s(t){this.options=t,this.album=[],this.currentImageIndex=void 0,this.init()}return s.prototype.init=function(){this.enable(),this.build()},s.prototype.enable=function(){var e=this;t("body").on("click","a[data-sby-lightbox]",(function(i){return e.start(t(i.currentTarget)),!1}))},s.prototype.build=function(){var e=this;t(""+i.template()).appendTo(t("body")),this.$lightbox=t("#sby_lightbox"),this.$overlay=t("#sby_lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".sby_lb-outerContainer"),this.$container=this.$lightbox.find(".sby_lb-container"),this.containerTopPadding=parseInt(this.$container.css("padding-top"),10),this.containerRightPadding=parseInt(this.$container.css("padding-right"),10),this.containerBottomPadding=parseInt(this.$container.css("padding-bottom"),10),this.containerLeftPadding=parseInt(this.$container.css("padding-left"),10),this.$overlay.hide().on("click",(function(){return e.end(),!1})),jQuery(document).on("click",(function(t,e,s){jQuery(t.target).closest(".sby_lb-outerContainer").length||jQuery(t.target).closest(".sby_lb-dataContainer").length||(i.pausePlayer(),jQuery("#sby_lightboxOverlay, #sby_lightbox").fadeOut())})),this.$lightbox.hide(),jQuery("#sby_lightboxOverlay").on("click",(function(s){return i.pausePlayer(),"sby_lightbox"===t(s.target).attr("id")&&e.end(),!1})),this.$lightbox.find(".sby_lb-prev").on("click",(function(){return i.pausePlayer(),e.changeImage(0===e.currentImageIndex?e.album.length-1:e.currentImageIndex-1),!1})),this.$lightbox.find(".sby_lb-container").on("swiperight",(function(){return i.pausePlayer(),e.changeImage(0===e.currentImageIndex?e.album.length-1:e.currentImageIndex-1),!1})),this.$lightbox.find(".sby_lb-next").on("click",(function(){return i.pausePlayer(),e.changeImage(e.currentImageIndex===e.album.length-1?0:e.currentImageIndex+1),!1})),this.$lightbox.find(".sby_lb-container").on("swipeleft",(function(){return i.pausePlayer(),e.changeImage(e.currentImageIndex===e.album.length-1?0:e.currentImageIndex+1),!1})),this.$lightbox.find(".sby_lb-loader, .sby_lb-close").on("click",(function(){return i.pausePlayer(),e.end(),!1}))},s.prototype.start=function(e){function s(t){n.album.push(i.getData(t))}var n=this,a=t(window);a.on("resize",t.proxy(this.sizeOverlay,this)),t("select, object, embed").css({visibility:"hidden"}),this.sizeOverlay(),this.album=[];var o,r=0,l=e.attr("data-sby-lightbox");if(l){o=t(e.prop("tagName")+'[data-sby-lightbox="'+l+'"]');for(var d=0;d<o.length;d=++d)s(t(o[d])),o[d]===e[0]&&(r=d)}else if("lightbox"===e.attr("rel"))s(e);else{o=t(e.prop("tagName")+'[rel="'+e.attr("rel")+'"]');for(var h=0;h<o.length;h=++h)s(t(o[h])),o[h]===e[0]&&(r=h)}var c=a.scrollTop()+this.options.positionFromTop,u=a.scrollLeft();this.$lightbox.css({top:c+"px",left:u+"px"}).fadeIn(this.options.fadeDuration),this.changeImage(r)},s.prototype.changeImage=function(e){var i=this;this.disableKeyboardNav();var s=this.$lightbox.find(".sby_lb-image");this.$overlay.fadeIn(this.options.fadeDuration),t(".sby_lb-loader").fadeIn("slow"),this.$lightbox.find(".sby_lb-image, .sby_lb-nav, .sby_lb-prev, .sby_lb-next, .sby_lb-dataContainer, .sby_lb-numbers, .sby_lb-caption").hide(),this.$outerContainer.addClass("animating");var n=new Image;n.onload=function(){var a,o,r,l,d,h;s.attr("src",i.album[e].link),t(n),s.width(n.width),s.height(n.height),i.options.fitImagesInViewport&&(h=t(window).width(),d=t(window).height(),l=h-i.containerLeftPadding-i.containerRightPadding-20-100,r=d-i.containerTopPadding-i.containerBottomPadding-150,(n.width>l||n.height>r)&&(n.width/l>n.height/r?(o=l,a=parseInt(n.height/(n.width/o),10),s.width(o),s.height(a)):(a=r,o=parseInt(n.width/(n.height/a),10),s.width(o),s.height(a)))),i.sizeContainer(s.width(),s.height())},n.src=this.album[e].link,this.currentImageIndex=e},s.prototype.sizeOverlay=function(){this.$overlay.width(t(window).width()).height(t(document).height())},s.prototype.sizeContainer=function(t,e){function i(){s.$lightbox.find(".sby_lb-dataContainer").width(o),s.$lightbox.find(".sby_lb-prevLink").height(r),s.$lightbox.find(".sby_lb-nextLink").height(r),s.showImage()}var s=this,n=this.$outerContainer.outerWidth(),a=this.$outerContainer.outerHeight(),o=t+this.containerLeftPadding+this.containerRightPadding,r=e+this.containerTopPadding+this.containerBottomPadding;n!==o||a!==r?this.$outerContainer.animate({width:o,height:r},this.options.resizeDuration,"swing",(function(){i()})):i()},s.prototype.showImage=function(){this.$lightbox.find(".sby_lb-loader").hide(),this.$lightbox.find(".sby_lb-image").fadeIn("slow"),this.updateNav(),this.updateDetails(),this.preloadNeighboringImages(),this.enableKeyboardNav()},s.prototype.updateNav=function(){var t=!1;try{document.createEvent("TouchEvent"),t=!!this.options.alwaysShowNavOnTouchDevices}catch(t){}this.$lightbox.find(".sby_lb-nav").show(),this.album.length>1&&(this.options.wrapAround?(t&&this.$lightbox.find(".sby_lb-prev, .sby_lb-next").css("opacity","1"),this.$lightbox.find(".sby_lb-prev, .sby_lb-next").show()):(this.currentImageIndex>0&&(this.$lightbox.find(".sby_lb-prev").show(),t&&this.$lightbox.find(".sby_lb-prev").css("opacity","1")),this.currentImageIndex<this.album.length-1&&(this.$lightbox.find(".sby_lb-next").show(),t&&this.$lightbox.find(".sby_lb-next").css("opacity","1"))))},s.prototype.updateDetails=function(){var t=this;jQuery("iframe.sby_lb-player-loaded").length&&(jQuery(".sby_lb-player-placeholder").replaceWith(jQuery("iframe.sby_lb-player-loaded")),jQuery("iframe.sby_lb-player-loaded").removeClass("sby_lb-player-loaded").show());var s=window.sby.feeds[this.album[this.currentImageIndex].feedIndex];if(i.beforePlayerSetup(this.$lightbox,this.album[this.currentImageIndex],this.currentImageIndex,this.album,s),h()){if(jQuery("#sby_lightbox").removeClass("sby_video_lightbox"),s.settings.consentGiven&&this.album[this.currentImageIndex].video.length){jQuery(".sby_gdpr_notice").remove();var n="sby_lb-player";jQuery("#sby_lightbox").addClass("sby_video_lightbox");var a=this.album[this.currentImageIndex].video,o=sbyOptions.autoplay;if(void 0===window.sbyLightboxPlayer){var r={host:window.location.protocol+s.embedURL,videoId:a,playerVars:{modestbranding:1,rel:0,autoplay:o},events:{onStateChange:function(t){var i=t.target.getVideoData().video_id;s.afterStateChange(n,i,t,e("#"+n).closest(".sby_video_thumbnail_wrap"))}}};s.maybeAddCTA(n),window.sbyLightboxPlayer=new window.YT.Player(n,r)}else window.sbyLightboxPlayer.loadVideoById(a);this.$outerContainer.removeClass("animating"),this.$lightbox.find(".sby_lb-dataContainer").fadeIn(this.options.resizeDuration,(function(){return t.sizeOverlay()})),setTimeout((function(){e("#sby_lightbox .sby_lb-player").css({height:e("#sby_lightbox .sby_lb-outerContainer").height()+"px",width:e("#sby_lightbox .sby_lb-outerContainer").width()+"px",top:0})}),1),this.$lightbox.find("iframe").length&&this.$lightbox.find("iframe").attr("title",this.album[this.currentImageIndex].videoTitle)}else{var l=e(".sby_item[data-video-id="+this.album[this.currentImageIndex].video+"]").find(".sby_video_thumbnail").attr("data-full-res");e(".sby_lb-image").attr("src",l),this.$outerContainer.removeClass("animating"),this.$lightbox.find(".sby_lb-dataContainer").fadeIn(this.options.resizeDuration,(function(){return t.sizeOverlay()})),jQuery(".sby_lb-container").prepend('<a href="https://www.youtube.com/watch?v='+this.album[this.currentImageIndex].video+'" target="_blank" rel="noopener noreferrer" class="sby_gdpr_notice"><svg style="color: rgba(255,255,255,1)" class="svg-inline--fa fa-play fa-w-14 sby_playbtn" aria-label="Play" aria-hidden="true" data-fa-processed="" data-prefix="fa" data-icon="play" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M424.4 214.7L72.4 6.6C43.8-10.3 0 6.1 0 47.9V464c0 37.5 40.7 60.1 72.4 41.3l352-208c31.4-18.5 31.5-64.1 0-82.6z"></path></svg></a>')}i.afterPlayerSetup(this.$lightbox,this.album[this.currentImageIndex],this.currentImageIndex,this.album),this.album.length>1&&this.options.showImageNumberLabel?this.$lightbox.find(".sby_lb-number").text(this.options.albumLabel(this.currentImageIndex+1,this.album.length)).fadeIn("fast"):this.$lightbox.find(".sby_lb-number").hide()}},s.prototype.preloadNeighboringImages=function(){this.album.length>this.currentImageIndex+1&&((new Image).src=this.album[this.currentImageIndex+1].link),this.currentImageIndex>0&&((new Image).src=this.album[this.currentImageIndex-1].link)},s.prototype.enableKeyboardNav=function(){t(document).on("keyup.keyboard",t.proxy(this.keyboardAction,this))},s.prototype.disableKeyboardNav=function(){t(document).off(".keyboard")},s.prototype.keyboardAction=function(t){var s=event.keyCode,n=String.fromCharCode(s).toLowerCase();27===s||n.match(/x|o|c/)?(h()&&e("#sby_lightbox video.sby_video")[0].pause(),e("#sby_lightbox iframe").attr("src",""),this.end()):"p"===n||37===s?(0!==this.currentImageIndex?this.changeImage(this.currentImageIndex-1):this.options.wrapAround&&this.album.length>1&&this.changeImage(this.album.length-1),h()&&e("#sby_lightbox video.sby_video")[0].pause(),e("#sby_lightbox iframe").attr("src","")):"n"!==n&&39!==s||(this.currentImageIndex!==this.album.length-1?this.changeImage(this.currentImageIndex+1):this.options.wrapAround&&this.album.length>1&&this.changeImage(0),i.pausePlayer())},s.prototype.end=function(){this.disableKeyboardNav(),t(window).off("resize",this.sizeOverlay),this.$lightbox.fadeOut(this.options.fadeDuration),this.$overlay.fadeOut(this.options.fadeDuration),t("select, object, embed").css({visibility:"visible"})},s}();t((function(){var t=new s;new n(t),e(".sby_lightbox_action a").off().on("click",(function(){e(this).parent().find(".sby_lightbox_tooltip").toggle()}))}))}.call(this)},createFeeds:function(t){sbyOptions.isAdmin||window.sby.createLightbox(),t.whenFeedsCreated(e(".sb_youtube").each((function(t){e(this).attr("data-sby-index",t+1),e(this).find(".sby_player").replaceWith('<div id="sby_player'+t+'"></div>');var i=e(this),s=void 0!==i.attr("data-sby-flags")?i.attr("data-sby-flags").split(","):[],a=void 0!==i.attr("data-options")?JSON.parse(i.attr("data-options")):{};s.indexOf("testAjax")>-1&&(window.sby.triggeredTest=!0,o({action:"sby_on_ajax_test_trigger"},(function(t){console.log("did test")})));var r={cols:i.attr("data-cols"),colsmobile:"same"!==i.attr("data-colsmobile")?i.attr("data-colsmobile"):i.attr("data-cols"),num:i.attr("data-num"),imgRes:i.attr("data-res"),feedID:i.attr("data-feedid"),postID:"undefind"!=typeof i.attr("data-postid")?i.attr("data-postid"):"unknown",shortCodeAtts:i.attr("data-shortcode-atts"),resizingEnabled:-1===s.indexOf("resizeDisable"),imageLoadEnabled:-1===s.indexOf("imageLoadDisable"),debugEnabled:s.indexOf("debug")>-1,favorLocal:s.indexOf("favorLocal")>-1,ajaxPostLoad:s.indexOf("ajaxPostLoad")>-1,checkWPPosts:s.indexOf("checkWPPosts")>-1,singleCheckPosts:s.indexOf("singleCheckPosts")>-1,narrowPlayer:s.indexOf("narrowPlayer")>-1,gdpr:s.indexOf("gdpr")>-1,consentGiven:-1===s.indexOf("gdpr"),noCDN:s.indexOf("disablecdn")>-1,allowCookies:s.indexOf("allowcookies")>-1,lightboxEnabled:void 0!==i.attr("data-sby-supports-lightbox"),locator:s.indexOf("locator")>-1,autoMinRes:1,general:a};window.sby.feeds[t]=function(t,e,i){return new n(t,e,i)}(this,t,r),void 0!==window.sbyAPIReady&&(window.sby.feeds[t].playerAPIReady=!0),window.sby.feeds[t].setResizedImages(),window.sby.feeds[t].init();var l=jQuery.Event("sbyafterfeedcreate");l.feed=window.sby.feeds[t],jQuery(window).trigger(l)})))},afterFeedsCreated:function(){if(e(".sb_youtube_header").each((function(){var t=e(this);t.find(".sby_header_link").on("mouseenter mouseleave",(function(e){switch(e.type){case"mouseenter":t.find(".sby_header_img_hover").addClass("sby_fade_in");break;case"mouseleave":t.find(".sby_header_img_hover").removeClass("sby_fade_in")}}))})),window.sbyAPIReady){var t=jQuery.Event("sbyfeedandytready");jQuery(window).trigger(t)}},encodeHTML:function(t){return void 0===t?"":t.replace(/(>)/g,"&gt;").replace(/(<)/g,"&lt;").replace(/(&lt;br\/&gt;)/g,"<br>").replace(/(&lt;br&gt;)/g,"<br>")},urlDetect:function(t){return t.match(/https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g)},ctaDetect:function(t){var e=t.match(/{Link:(.*)}/g),i=!1;if(null!==e){var s=window.sby.urlDetect(e[0]);if(null!==s){var n=s[0].trim();i={callback:"link",url:n,text:e[0].replace("{Link:","").replace("}","").replace(n,"").replace(" "," ").trim()}}else console.log("CTA found but no URL")}return i},shuffle:function(t){for(var e,i,s=t.length;0!==s;)i=Math.floor(Math.random()*s),e=t[s-=1],t[s]=t[i],t[i]=e;return t}},s.prototype={init:function(){var t=this;t.settings.consentGiven=t.checkConsent(),t.settings.consentGiven&&window.sby.maybeAddYTAPI(),t.settings.noCDN&&!t.settings.consentGiven&&(e(this.el).find(".sb_youtube_header").length?e(this.el).find(".sb_youtube_header").addClass("sby_no_consent"):e(this.el).prev(".sb_youtube_header").length&&e(this.el).prev(".sb_youtube_header").addClass("sby_no_consent")),e(this.el).find("#sby_mod_error").length&&e(this.el).prepend(e(this.el).find("#sby_mod_error")),this.settings.ajaxPostLoad?this.getNewPostSet():this.afterInitialImagesLoaded();var i,s=(i=0,function(t,e){clearTimeout(i),i=setTimeout(t,e)});jQuery(window).on("resize",(function(){s((function(){t.afterResize()}),1)}))},initLayout:function(){this.initGalleryLayout()},initGalleryLayout:function(){var i=e(this.el),s=this;i.hasClass("sby_layout_gallery")&&i.find(".sby_player_outer_wrap").length&&(this.maybeRaiseSingleImageResolution(i.find(".sby_player_outer_wrap"),0,!0),i.find(".sby_player_outer_wrap .sby_video_thumbnail").off().on("click",(function(i){!(!s.settings.lightboxEnabled||s.settings.lightboxEnabled&&s.settings.noCDN)||!s.settings.noCDN&&s.settings.consentGiven?(i.preventDefault(),s.onThumbnailClick(e(this),!0)):t(e(this).closest(".sby_item").length)&&void 0!==e(this).closest(".sby_item").attr("data-video-id")&&e(this).attr("href","https://www.youtube.com/watch?v="+e(this).closest(".sby_item").attr("data-video-id"))})),i.find(".sby_item").first().addClass("sby_current"),i.on("mouseenter",(function(){s.canCreatePlayer()&&(i.find(".sby_player_outer_wrap iframe").length?void 0===s.player&&s.playerEagerLoaded()&&s.createPlayer("sby_player"+s.index):(i.addClass("sby_player_added").find(".sby_player_outer_wrap").addClass("sby_player_loading"),i.find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").show().removeClass("sby_hidden"),s.createPlayer("sby_player"+s.index)))})),window.sbySemiEagerLoading&&s.createPlayer("sby_player"+s.index),s.settings.noCDN&&i.find(".sby_player_outer_wrap").append('<div class="sby_play_btn">\n <span class="sby_play_btn_bg"></span>\n <svg aria-hidden="true" focusable="false" data-prefix="fab" data-icon="youtube" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" class="svg-inline--fa fa-youtube fa-w-18"><path fill="currentColor" d="M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z" class=""></path></svg> </div>'))},createPlayer:function(t,i,s,n){var a=e(this.el),o=this;if(i=void 0!==i?i:this.getVideoID(a.find(".sby_item").first()),s=void 0!==s?s:0,void 0===n&&(n={host:window.location.protocol+o.embedURL,videoId:i,playerVars:{modestbranding:1,rel:0,autoplay:s}}),void 0===n.events&&(n.events={onReady:function(){a.find(".sby_player_outer_wrap").removeClass("sby_player_loading").find(".sby_video_thumbnail").css("z-index",-1).find(".sby_loader").hide().addClass("sby_hidden"),e("#"+t).length&&e("#"+t).closest(".sby_video_thumbnail_wrap").find(".sby_video_thumbnail").length&&e("#"+t).closest(".sby_video_thumbnail_wrap").find(".sby_video_thumbnail").fadeTo(0,"slow",(function(){e(this).css("z-index",-1),e(this).find(".sby_loader").hide().addClass("sby_hidden"),e(this).closest(".sby_item").removeClass("sby_player_loading")}));var i=jQuery.Event("sbyafterplayerready");i.feed=o,i.player=this,jQuery(window).trigger(i)},onStateChange:function(s){a.find(".sby_player_outer_wrap").removeClass("sby_player_loading").find(".sby_video_thumbnail").css("z-index",-1).find(".sby_loader").hide().addClass("sby_hidden"),o.afterStateChange(t,i,s,e("#"+t).closest(".sby_video_thumbnail_wrap")),1===s.data&&void 0!==o.players&&a.find(".sby_item").each((function(){var t=o.getVideoID(e(this));e(this).find("iframe").length&&t!==i&&void 0!==o.players[t]&&"function"==typeof o.players[t].pauseVideo&&o.players[t].pauseVideo()}))}}),window.sbyEagerLoading)var r=YT.get(t);else r=new window.YT.Player(t,n);this.maybeAddCTA(t),a.hasClass("sby_layout_list")&&void 0===this.players[i]?this.players[i]=r:void 0===this.player&&(this.player=r);var l=jQuery.Event("sbyafterplayercreated");return l.feed=this,jQuery(window).trigger(l),a.find(".sby_player_outer_wrap .sby_play_btn").remove(),r},afterStateChange:function(t,e,i,s){},afterInitialImagesLoaded:function(){this.initLayout(),this.loadMoreButtonInit(),this.hideExtraItemsForWidth(),this.beforeNewImagesRevealed(),this.revealNewImages(),this.afterNewImagesRevealed(),this.afterFeedSet(),this.sizePlayer(),this.sizeItems(),this.settings.consentGiven?this.applyFullFeatures():this.removeFeatures()},afterResize:function(){this.setImageHeight(),this.setImageResolution(),this.maybeRaiseImageResolution(),this.setImageSizeClass()},afterLoadMoreClicked:function(t){t.find(".sby_loader").removeClass("sby_hidden"),t.find(".sby_btn_text").addClass("sby_hidden"),t.closest(".sb_youtube").find(".sby_num_diff_hide").addClass("sby_transition").removeClass("sby_num_diff_hide")},afterNewImagesLoaded:function(){var t=e(this.el),i=this;this.beforeNewImagesRevealed(),this.revealNewImages(),this.afterNewImagesRevealed(),this.sizePlayer(),this.sizeItems(),setTimeout((function(){t.find(".sby_loader").addClass("sby_hidden"),t.find(".sby_btn_text").removeClass("sby_hidden"),i.maybeRaiseImageResolution()}),1),this.settings.consentGiven?this.applyFullFeatures():this.removeFeatures()},beforeNewImagesRevealed:function(){this.setImageHeight(),this.maybeRaiseImageResolution(!0),this.setImageSizeClass()},afterFeedSet:function(){},sizePlayer:function(){var t=e(this.el),i=this;if(t.hasClass("sby_layout_gallery")){$playerThumbnail=t.find(".sby_player_item").find(".sby_player_video_thumbnail");var s=$playerThumbnail.innerWidth(),n=Math.floor(9*s/16);i.settings.narrowPlayer&&(n=Math.floor(3*s/4)),$playerThumbnail.css("height",n+"px").css("overflow","hidden")}else t.hasClass("sby_layout_list")&&t.find(".sby_item").each((function(){$playerThumbnail=e(this).find(".sby_item_video_thumbnail");var t=$playerThumbnail.innerWidth(),s=Math.floor(9*t/16);i.settings.narrowPlayer&&(s=Math.floor(3*t/4)),$playerThumbnail.css("height",s+"px").css("overflow","hidden")}))},sizeItems:function(){var t=e(this.el);t.hasClass("sby_layout_list")||t.find(".sby_item").find(".sby_item_video_thumbnail").each((function(){if(e(this).hasClass("sby_imgLiquid_ready")){var t=e(this).innerWidth(),i=Math.floor(9*t/16);e(this).css("height",i+"px").css("overflow","hidden")}}))},revealNewImages:function(){var i=e(this.el),s=this;this.applyImageLiquid(),"function"==typeof sbyCustomJS&&setTimeout((function(){sbyCustomJS()}),100),i.find(".sby-screenreader").find("img").remove(),i.find(".sby_item.sby_new").each((function(i){var n=jQuery(this);videoID=n.attr("data-video-id"),window.sbyEagerLoading&&s.canCreatePlayer()&&e("#sby_player_"+videoID).length&&(player=new YT.Player("sby_player_"+videoID,{height:"100",width:"100",videoId:videoID,playerVars:{modestbranding:1,rel:0,autoplay:0},events:{onStateChange:function(t){t.target.getVideoData().video_id,1===t.data&&n.find(".sby_item").each((function(){var e=jQuery(this).attr("data-video-id");jQuery(this).find("iframe").length&&jQuery(t.target.a).attr("id")!==jQuery(this).find("iframe").attr("id")&&YT.get("sby_player_"+e).pauseVideo()}))}}})),n.find(".sby_video_thumbnail").on("mouseenter",(function(){s.onThumbnailEnter(e(this),!1)})),n.find(".sby_player_wrap").on("mouseleave",(function(){s.onThumbnailLeave(e(this),!1)})),n.find(".sby_video_thumbnail").on("click",(function(i){!(!s.settings.lightboxEnabled||s.settings.lightboxEnabled&&s.settings.noCDN)||!s.settings.noCDN&&s.settings.consentGiven?(i.preventDefault(),s.onThumbnailClick(e(this),!1)):t(e(this).closest(".sby_item").length)&&void 0!==e(this).closest(".sby_item").attr("data-video-id")&&e(this).attr("href","https://www.youtube.com/watch?v="+e(this).closest(".sby_item").attr("data-video-id"))})),s.settings.lightboxEnabled&&(n.find(".sby_video_thumbnail").attr("data-sby-lightbox",s.index),"undefined"!=typeof sbyOptions&&void 0!==sbyOptions.lightboxPlaceholder&&(s.settings.narrowPlayer?n.find(".sby_video_thumbnail").attr("href",sbyOptions.lightboxPlaceholderNarrow):n.find(".sby_video_thumbnail").attr("href",sbyOptions.lightboxPlaceholder))),s.afterItemRevealed(n),""===n.find(".sby_info_item").text().trim()&&n.find(".sby_info_item").addClass("sby_no_space")})),i.find(".sby_player_item").each((function(t){var e=jQuery(this);s.afterItemRevealed(e)})),setTimeout((function(){i.find(".sby_item.sby_new").removeClass("sby_new"),i.find(".sby_transition").length,i.find(".sby_transition").each((function(t){var e=jQuery(this);setTimeout((function(){e.removeClass("sby_transition")}),1)}))}),1)},afterItemRevealed:function(){},afterNewImagesRevealed:function(){this.listenForVisibilityChange(),this.sendNeedsResizingToServer(),this.sendCheckWPPostsToServer(),this.settings.imageLoadEnabled||e(".sby_no_resraise").removeClass("sby_no_resraise");var t=e.Event("sbyafterimagesloaded");t.el=e(this.el),e(window).trigger(t)},setResizedImages:function(){e(this.el).find(".sby_resized_image_data").length&&void 0!==e(this.el).find(".sby_resized_image_data").attr("data-resized")&&0===e(this.el).find(".sby_resized_image_data").attr("data-resized").indexOf('{"')&&(this.resizedImages=JSON.parse(e(this.el).find(".sby_resized_image_data").attr("data-resized")),e(this.el).find(".sby_resized_image_data").remove())},sendNeedsResizingToServer:function(){var t=this;if(t.needsResizing.length>0&&t.settings.resizingEnabled){var i=e(this.el).find(".sby_item").length;o({action:"sby_resized_images_submit",needs_resizing:t.needsResizing,offset:i,feed_id:t.settings.feedID,location:t.locationGuess(),post_id:t.settings.postID,atts:t.settings.shortCodeAtts},(function(e){if(0===e.trim().indexOf("{")){var i=JSON.parse(e);t.settings.debugEnabled&&console.log(i)}}))}},sendCheckWPPostsToServer:function(){var t=this;if(t.settings.checkWPPosts||t.settings.singleCheckPosts){var i=void 0!==t.settings.feedID?t.settings.feedID:"sby_single",s=t.mostRecentlyLoadedPosts;t.mostRecentlyLoadedPosts=[],o({action:"sby_check_wp_submit",feed_id:i,atts:t.settings.shortCodeAtts,location:t.locationGuess(),post_id:t.settings.postID,offset:e(this.el).hasClass("sby_layout_carousel")?Math.floor(e(this.el).find(".sby_item").length/2-1):e(this.el).find(".sby_item").length,posts:s},(function(e){if(0===e.trim().indexOf("{")){var i=JSON.parse(e);t.settings.debugEnabled&&console.log(i),t.afterSendCheckWPPostsToServer(i)}}))}},afterSendCheckWPPostsToServer:function(t){},loadMoreButtonInit:function(){var t=e(this.el),i=this;t.find(".sby_footer .sby_load_btn").off().on("click",(function(){i.afterLoadMoreClicked(jQuery(this)),i.getNewPostSet()}))},getNewPostSet:function(){var t=e(this.el),i=this;o({action:"sby_load_more_clicked",offset:t.find(".sby_item").length,feed_id:i.settings.feedID,atts:i.settings.shortCodeAtts,location:i.locationGuess(),post_id:i.settings.postID,current_resolution:i.imageResolution},(function(s){if(0===s.trim().indexOf("{")){var n=JSON.parse(s),a=void 0!==n.feedStatus.checkWPPosts&&n.feedStatus.checkWPPosts;i.settings.debugEnabled&&console.log(n),i.settings.checkWPPosts=!!a,i.appendNewPosts(n.html),i.addResizedImages(n.resizedImages),i.settings.ajaxPostLoad?(i.settings.ajaxPostLoad=!1,i.afterInitialImagesLoaded()):i.afterNewImagesLoaded(),n.feedStatus.shouldPaginate?i.outOfPages=!1:(i.outOfPages=!0,t.find(".sby_load_btn").hide()),e(".sby_no_js").removeClass("sby_no_js")}}))},appendNewPosts:function(t){var i=e(this.el);i.find(".sby_items_wrap .sby_item").length?i.find(".sby_items_wrap .sby_item").last().after(t):i.find(".sby_items_wrap").append(t)},addResizedImages:function(t){for(var e in t)this.resizedImages[e]=t[e]},setImageHeight:function(){},maybeRaiseSingleImageResolution:function(t,i,s){var n=this,a=n.getImageUrls(t),o=t.find(".sby_video_thumbnail > img").attr("src"),r=150;if(s=void 0!==s&&s,!(t.hasClass("sby_no_resraise")||!n.settings.consentGiven&&n.settings.noCDN)){e.each(a,(function(t,e){e===o&&(r=parseInt(t),s=!1)}));var l=640;switch(n.settings.imgRes){case"thumb":l=120;break;case"medium":l=320;break;case"large":l=480;break;case"full":l=640;break;default:var d=Math.max(n.settings.autoMinRes,t.find(".sby_video_thumbnail").innerWidth());switch(n.getBestResolutionForAuto(d,1,e(this.el).find("sby_item").first())){case 480:l=480;break;case 320:l=320;break;case 120:l=120}}if(l>r||o===n.placeholderURL||s){if(n.settings.debugEnabled){var h=o===n.placeholderURL?"was placeholder":"too small";console.log("rais res for "+o,h)}var c=a[l];t.find(".sby_video_thumbnail > img").attr("src",c),t.find(".sby_video_thumbnail").hasClass("sby_imgLiquid_ready")&&t.find(".sby_video_thumbnail").css("background-image",'url("'+c+'")')}t.find("img").on("error",(function(){if(e(this).hasClass("sby_img_error"))console.log("unfixed error "+e(this).attr("src"));else{if(e(this).addClass("sby_img_error"),e(this).attr("src").indexOf("i.ytimg.com")>-1){n.settings.favorLocal=!0;var t=n.getImageUrls(e(this).closest(".sby_item"));void 0!==t[640]&&(e(this).attr("src",t[640]),e(this).closest(".sby_video_thumbnail").css("background-image","url("+t[640]+")"))}else void 0!==e(this).closest(".sby_video_thumbnail").attr("data-full-res")?(e(this).attr("src",e(this).closest(".sby_video_thumbnail").attr("data-full-res")),e(this).closest(".sby_video_thumbnail").css("background-image","url("+e(this).closest(".sby_video_thumbnail").attr("data-full-res")+")")):"undefined"!==e(this).closest(".sby_video_thumbnail").attr("href")&&(e(this).attr("src",e(this).closest(".sby_video_thumbnail").attr("href")+"media?size=l"),e(this).closest(".sby_video_thumbnail").css("background-image","url("+e(this).closest(".sby_video_thumbnail").attr("href")+"media?size=l)"));setTimeout((function(){n.afterResize()}),1)}}))}},maybeRaiseImageResolution:function(t){var i=this,s=void 0!==t&&!0===t?".sby_item.sby_new":".sby_item",n=!i.isInitialized;e(i.el).find(s).each((function(t){!e(this).hasClass("sby_num_diff_hide")&&e(this).find(".sby_video_thumbnail").length&&void 0!==e(this).find(".sby_video_thumbnail").attr("data-img-src-set")&&i.maybeRaiseSingleImageResolution(e(this),t,n)})),i.isInitialized=!0},getBestResolutionForAuto:function(t,i,s){(isNaN(i)||i<1)&&(i=1);var n=t*i,a=10*Math.ceil(n/10),o=[120,320,480,640];if(s.hasClass("sby_highlighted")&&(a*=2),-1===o.indexOf(parseInt(a))){var r=!1;e.each(o,(function(t,e){e>parseInt(a)&&!r&&(a=e,r=!0)}))}return a},hideExtraItemsForWidth:function(){if("carousel"!==this.layout){var t=e(this.el),i=void 0!==t.attr("data-num")&&""!==t.attr("data-num")?parseInt(t.attr("data-num")):1,s=void 0!==t.attr("data-nummobile")&&""!==t.attr("data-nummobile")?parseInt(t.attr("data-nummobile")):i;t.hasClass(".sby_layout_carousel")||(e(window).width()<480?s<t.find(".sby_item").length&&t.find(".sby_item").slice(s-t.find(".sby_item").length).addClass("sby_num_diff_hide"):i<t.find(".sby_item").length&&t.find(".sby_item").slice(i-t.find(".sby_item").length).addClass("sby_num_diff_hide"))}},setImageSizeClass:function(){var t=e(this.el);t.removeClass("sby_small sby_medium");var i=t.innerWidth(),s=parseInt(t.find(".sby_items_wrap").outerWidth()-t.find(".sby_items_wrap").width())/2,n=this.getColumnCount(),a=(i-s*(n+2))/n;a>140&&a<240?t.addClass("sby_medium"):a<=140&&t.addClass("sby_small")},setMinImageWidth:function(){e(this.el).find(".sby_item .sby_video_thumbnail").first().length?this.minImageWidth=e(this.el).find(".sby_item .sby_video_thumbnail").first().innerWidth():this.minImageWidth=150},setImageResolution:function(){if("auto"===this.settings.imgRes)this.imageResolution="auto";else switch(this.settings.imgRes){case"thumb":this.imageResolution=150;break;case"medium":this.imageResolution=320;break;default:this.imageResolution=640}},getImageUrls:function(t){var e=JSON.parse(t.find(".sby_video_thumbnail").attr("data-img-src-set").replace(/\\\//g,"/")),i=t.attr("id").replace("sby_","").replace("player_","");if(void 0!==this.resizedImages[i]&&"video"!==this.resizedImages[i]&&"pending"!==this.resizedImages[i]&&"error"!==this.resizedImages[i].id&&"video"!==this.resizedImages[i].id&&"pending"!==this.resizedImages[i].id){if(void 0!==this.resizedImages[i].sizes){var s=[];void 0!==this.resizedImages[i].sizes.full&&(s.push(640),e[640]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg",t.find(".sby_link_area").attr("href",sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg"),t.find(".sby_video_thumbnail").attr("data-full-res",sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg")),void 0!==this.resizedImages[i].sizes.low&&(s.push(320),e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg",this.settings.favorLocal&&void 0===this.resizedImages[i].sizes.full&&(t.find(".sby_link_area").attr("href",sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"),t.find(".sby_video_thumbnail").attr("data-full-res",sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"))),void 0!==this.resizedImages[i].sizes.thumb&&(s.push(150),e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"thumb.jpg"),this.settings.favorLocal&&(-1===s.indexOf(640)&&s.indexOf(320)>-1&&(e[640]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg"),-1===s.indexOf(320)&&(s.indexOf(640)>-1?e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg":s.indexOf(150)>-1&&(e[320]=sbyOptions.resized_url+this.resizedImages[i].id+"thumb.jpg")),-1===s.indexOf(150)&&(s.indexOf(320)>-1?e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"low.jpg":s.indexOf(640)>-1&&(e[150]=sbyOptions.resized_url+this.resizedImages[i].id+"full.jpg")))}}else(void 0===this.resizedImages[i]||void 0!==this.resizedImages[i].id&&"pending"!==this.resizedImages[i].id&&"error"!==this.resizedImages[i].id)&&this.addToNeedsResizing(i);return e},getVideoID:function(t){if(t.hasClass("sby_item")||t.hasClass("sby_player_item")){if(void 0!==t.find(".sby_video_thumbnail").attr("data-video-id"))return t.find(".sby_video_thumbnail").attr("data-video-id")}else if(t.closest("sby_item").length||t.closest("sby_player_item").length){var i=t.closest("sby_item").length?t.closest("sby_item"):t.closest("sby_player_item");if(void 0!==i.find(".sby_video_thumbnail").attr("data-video-id"))return i.find(".sby_video_thumbnail").attr("data-video-id")}else{if(t.hasClass("sb_youtube"))return t.find(".sby_item").first().find(".sby_video_thumbnail").attr("data-video-id");if(e(this.el).find(".sby_video_thumbnail").first().length&&void 0!==e(this.el).find(".sby_video_thumbnail").first().attr("data-video-id"))return e(this.el).find(".sby_video_thumbnail").first().attr("data-video-id")}return""},getAvatarUrl:function(t,e){if(""===t)return"";var i=this.settings.general.avatars;return"local"===(e=void 0!==e?e:"local")?void 0!==i["LCL"+t]&&1===parseInt(i["LCL"+t])?sbyOptions.resized_url+t+".jpg":void 0!==i[t]?i[t]:"":void 0!==i[t]?i[t]:void 0!==i["LCL"+t]&&1===parseInt(i["LCL"+t])?sbyOptions.resized_url+t+".jpg":""},addToNeedsResizing:function(t){-1===this.needsResizing.indexOf(t)&&this.needsResizing.push(t)},applyImageLiquid:function(){var t=e(this.el);(function(){var t,e,i,s,n=n||{VER:"0.9.944"};n.bgs_Available=!1,n.bgs_CheckRunned=!1,(t=jQuery).fn.extend({sby_imgLiquid:function(e){this.defaults={fill:!0,verticalAlign:"center",horizontalAlign:"center",useBackgroundSize:!0,useDataHtmlAttr:!0,responsive:!0,delay:0,fadeInTime:0,removeBoxBackground:!0,hardPixels:!0,responsiveCheckTime:500,timecheckvisibility:500,onStart:null,onFinish:null,onItemStart:null,onItemFinish:null,onItemError:null},function(){if(!n.bgs_CheckRunned){n.bgs_CheckRunned=!0;var e=t('<span style="background-size:cover" />');t("body").append(e),function(){var t=e[0];if(t&&window.getComputedStyle){var i=window.getComputedStyle(t,null);i&&i.backgroundSize&&(n.bgs_Available="cover"===i.backgroundSize)}}(),e.remove()}}();var i=this;return this.options=e,this.settings=t.extend({},this.defaults,this.options),this.settings.onStart&&this.settings.onStart(),this.each((function(e){function s(){(l.responsive||h.data("sby_imgLiquid_oldProcessed"))&&h.data("sby_imgLiquid_settings")&&(l=h.data("sby_imgLiquid_settings"),d.actualSize=d.get(0).offsetWidth+d.get(0).offsetHeight/1e4,d.sizeOld&&d.actualSize!==d.sizeOld&&o(),d.sizeOld=d.actualSize,setTimeout(s,l.responsiveCheckTime))}function a(){h.data("sby_imgLiquid_error",!0),d.addClass("sby_imgLiquid_error"),l.onItemError&&l.onItemError(e,d,h),r()}function o(){var t,i,s,n,a,o,c,u,g=0,y=0,p=d.width(),f=d.height();void 0===h.data("owidth")&&h.data("owidth",h[0].width),void 0===h.data("oheight")&&h.data("oheight",h[0].height),l.fill===p/f>=h.data("owidth")/h.data("oheight")?(t="100%",i="auto",s=Math.floor(p),n=Math.floor(p*(h.data("oheight")/h.data("owidth")))):(t="auto",i="100%",s=Math.floor(f*(h.data("owidth")/h.data("oheight"))),n=Math.floor(f)),c=p-s,"left"===(a=l.horizontalAlign.toLowerCase())&&(y=0),"center"===a&&(y=.5*c),"right"===a&&(y=c),-1!==a.indexOf("%")&&(a=parseInt(a.replace("%",""),10))>0&&(y=c*a*.01),u=f-n,"left"===(o=l.verticalAlign.toLowerCase())&&(g=0),"center"===o&&(g=.5*u),"bottom"===o&&(g=u),-1!==o.indexOf("%")&&(o=parseInt(o.replace("%",""),10))>0&&(g=u*o*.01),l.hardPixels&&(t=s,i=n),h.css({width:t,height:i,"margin-left":Math.floor(y),"margin-top":Math.floor(g)}),h.data("sby_imgLiquid_oldProcessed")||(h.fadeTo(l.fadeInTime,1),h.data("sby_imgLiquid_oldProcessed",!0),l.removeBoxBackground&&d.css("background-image","none"),d.addClass("sby_imgLiquid_nobgSize"),d.addClass("sby_imgLiquid_ready")),l.onItemFinish&&l.onItemFinish(e,d,h),r()}function r(){e===i.length-1&&i.settings.onFinish&&i.settings.onFinish()}var l=i.settings,d=t(this),h=t("img:first",d);return h.length?(h.data("sby_imgLiquid_settings")?(d.removeClass("sby_imgLiquid_error").removeClass("sby_imgLiquid_ready"),l=t.extend({},h.data("sby_imgLiquid_settings"),i.options)):l=t.extend({},i.settings,function(){var t={};if(i.settings.useDataHtmlAttr){var e=d.attr("data-sby_imgLiquid-fill"),s=d.attr("data-sby_imgLiquid-horizontalAlign"),a=d.attr("data-sby_imgLiquid-verticalAlign");("true"===e||"false"===e)&&(t.fill=Boolean("true"===e)),void 0===s||"left"!==s&&"center"!==s&&"right"!==s&&-1===s.indexOf("%")||(t.horizontalAlign=s),void 0===a||"top"!==a&&"bottom"!==a&&"center"!==a&&-1===a.indexOf("%")||(t.verticalAlign=a)}return n.isIE&&i.settings.ieFadeInDisabled&&(t.fadeInTime=0),t}()),h.data("sby_imgLiquid_settings",l),l.onItemStart&&l.onItemStart(e,d,h),void(n.bgs_Available&&l.useBackgroundSize?(-1===d.css("background-image").indexOf(encodeURI(h.attr("src")))&&d.css({"background-image":'url("'+encodeURI(h.attr("src"))+'")'}),d.css({"background-size":l.fill?"cover":"contain","background-position":(l.horizontalAlign+" "+l.verticalAlign).toLowerCase(),"background-repeat":"no-repeat"}),t("a:first",d).css({display:"block",width:"100%",height:"100%"}),t("img",d).css({display:"none"}),l.onItemFinish&&l.onItemFinish(e,d,h),d.addClass("sby_imgLiquid_bgSize"),d.addClass("sby_imgLiquid_ready"),r()):function i(){if(h.data("oldSrc")&&h.data("oldSrc")!==h.attr("src")){var n=h.clone().removeAttr("style");return n.data("sby_imgLiquid_settings",h.data("sby_imgLiquid_settings")),h.parent().prepend(n),h.remove(),(h=n)[0].width=0,void setTimeout(i,10)}return h.data("sby_imgLiquid_oldProcessed")?void o():(h.data("sby_imgLiquid_oldProcessed",!1),h.data("oldSrc",h.attr("src")),t("img:not(:first)",d).css("display","none"),d.css({overflow:"hidden"}),h.fadeTo(0,0).removeAttr("width").removeAttr("height").css({visibility:"visible","max-width":"none","max-height":"none",width:"auto",height:"auto",display:"block"}),h.on("error",a),h[0].onerror=a,function t(){h.data("sby_imgLiquid_error")||h.data("sby_imgLiquid_loaded")||h.data("sby_imgLiquid_oldProcessed")||(d.is(":visible")&&h[0].complete&&h[0].width>0&&h[0].height>0?(h.data("sby_imgLiquid_loaded",!0),setTimeout(o,e*l.delay)):setTimeout(t,l.timecheckvisibility))}(),void s())}())):void a()}))}}),e=n.injectCss,i=document.getElementsByTagName("head")[0],(s=document.createElement("style")).type="text/css",s.styleSheet?s.styleSheet.cssText=e:s.appendChild(document.createTextNode(e)),i.appendChild(s)})(),"function"==typeof t.find(".sby_player_item").sby_imgLiquid&&(t.find(".sby_player_item").length&&t.find(".sby_player_item .sby_player_video_thumbnail").sby_imgLiquid({fill:!0}),t.find(".sby_item .sby_item_video_thumbnail").sby_imgLiquid({fill:!0}))},listenForVisibilityChange:function(){var t=this;!function(t){var e={callback:function(){},runOnLoad:!0,frequency:100,sbyPreviousVisibility:null},i={sbyCheckVisibility:function(t,e){if(jQuery.contains(document,t[0])){var s=e.sbyPreviousVisibility,n=t.is(":visible");e.sbyPreviousVisibility=n,null==s?e.runOnLoad&&e.callback(t,n):s!==n&&e.callback(t,n),setTimeout((function(){i.sbyCheckVisibility(t,e)}),e.frequency)}}};t.fn.sbyVisibilityChanged=function(s){var n=t.extend({},e,s);return this.each((function(){i.sbyCheckVisibility(t(this),n)}))}}(jQuery),"function"==typeof e(this.el).filter(":hidden").sbyVisibilityChanged&&e(this.el).filter(":hidden").sbyVisibilityChanged({callback:function(e,i){t.afterResize()},runOnLoad:!1})},getColumnCount:function(){var t=e(this.el),i=this.settings.cols,s=this.settings.colsmobile,n=i;return sbyWindowWidth=window.innerWidth,t.hasClass("sby_mob_col_auto")?(sbyWindowWidth<640&&parseInt(i)>2&&parseInt(i)<7&&(n=2),sbyWindowWidth<640&&parseInt(i)>6&&parseInt(i)<11&&(n=4),sbyWindowWidth<=480&&parseInt(i)>2&&(n=1)):sbyWindowWidth<=480&&(n=s),parseInt(n)},onThumbnailClick:function(t,i,s){if(this.canCreatePlayer()){var n=e(this.el);if(n.hasClass("sby_layout_gallery"))if(n.find(".sby_current").removeClass("sby_current"),t.closest(".sby_item").addClass("sby_current"),t.closest(".sby_item").addClass("sby_current"),n.addClass("sby_player_added").find(".sby_player_outer_wrap").addClass("sby_player_loading"),n.find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").show().removeClass("sby_hidden"),n.find(".sby_player_outer_wrap iframe").length)i?(s=void 0===s?this.getVideoID(n.find(".sby_item").first()):s,this.playVideoInPlayer(s)):(s=void 0===s?this.getVideoID(t.closest(".sby_item")):s,this.changePlayerInfo(t.closest(".sby_item")),this.playVideoInPlayer(s),this.afterVideoChanged());else if(i)this.createPlayer("sby_player"+this.index);else{s=void 0===s?this.getVideoID(t.closest(".sby_item")):s;this.createPlayer("sby_player"+this.index,s)}else if(e(this.el).hasClass("sby_layout_grid")||e(this.el).hasClass("sby_layout_carousel")){var a=t.closest(".sby_item");s=void 0===s?this.getVideoID(a):s,this.playVideoInPlayer(s),this.afterVideoChanged()}else e(this.el).hasClass("sby_layout_list")&&(a=t.closest(".sby_item"),s=void 0===s?this.getVideoID(a):s,a.length&&!a.find("iframe").length?(a.find(".sby_loader").show().removeClass("sby_hidden"),a.addClass("sby_player_loading sby_player_loaded"),this.createPlayer("sby_player_"+s,s)):(this.playVideoInPlayer(s,a.attr("data-video-id")),this.afterVideoChanged()))}},onThumbnailEnter:function(t){if(this.canCreatePlayer()&&e(this.el).hasClass("sby_layout_list")){var i=t.closest(".sby_item"),s=this.getVideoID(i);i.find("iframe").length||(i.find(".sby_loader").show().removeClass("sby_hidden"),i.addClass("sby_player_loading sby_player_loaded"),this.createPlayer("sby_player_"+s,s,0))}},onThumbnailLeave:function(t){},changePlayerInfo:function(t){},playerEagerLoaded:function(){if(void 0!==this.player||e(this.el).hasClass("sby_player_loaded"))return!0},canCreatePlayer:function(){return!e(this.el).find("#sby_blank").length&&(this.playerEagerLoaded()||this.playerAPIReady&&this.settings.consentGiven||window.sbyAPIReady&&this.settings.consentGiven)},playVideoInPlayer:function(t,e){void 0!==this.player&&void 0!==this.player.loadVideoById?this.player.loadVideoById(t):void 0!==window.sbyLightboxPlayer&&void 0!==window.sbyLightboxPlayer.loadVideoById?window.sbyLightboxPlayer.loadVideoById(t):void 0!==e&&void 0!==this.players&&void 0!==this.players[e]&&void 0!==this.players[e].loadVideoById&&this.players[e].loadVideoById(t)},afterVideoChanged:function(){e(this.el).hasClass("sby_layout_gallery")&&(e(this.el).find(".sby_player_outer_wrap").removeClass("sby_player_loading"),e(this.el).find(".sby_player_outer_wrap .sby_video_thumbnail").find(".sby_loader").hide().addClass("sby_hidden"),e(window).width()<480&&e("html, body").animate({scrollTop:e(this.el).find(".sby_player_outer_wrap").offset().top},300))},checkConsent:function(){if(this.settings.consentGiven||!this.settings.gdpr)return this.settings.noCDN=!1,!0;if("undefined"!=typeof CLI_Cookie)null!==CLI_Cookie.read(CLI_ACCEPT_COOKIE_NAME)&&("null"!==CLI_Cookie.read("cookielawinfo-checkbox-non-necessary")&&(this.settings.consentGiven="yes"===CLI_Cookie.read("cookielawinfo-checkbox-non-necessary")),"null"!==CLI_Cookie.read("cookielawinfo-checkbox-necessary")&&(this.settings.consentGiven="yes"===CLI_Cookie.read("cookielawinfo-checkbox-necessary")));else if(void 0!==window.cnArgs){var t=("; "+document.cookie).split("; cookie_notice_accepted=");if(2===t.length){var e=t.pop().split(";").shift();this.settings.consentGiven="true"===e}}else void 0!==window.cookieconsent?this.settings.consentGiven="allow"===function(t){for(var e="cmplz_consent_status=",i=window.document.cookie.split(";"),s=0;s<i.length;s++){var n=i[s].trim();if(0==n.indexOf(e))return n.substring(e.length,n.length)}return""}()||jQuery("body").hasClass("cmplz-status-marketing"):void 0!==window.Cookiebot?this.settings.consentGiven=Cookiebot.consented:void 0!==window.BorlabsCookie&&(this.settings.consentGiven=window.BorlabsCookie.checkCookieConsent("youtube"));var i=jQuery.Event("sbycheckconsent");return i.feed=this,jQuery(window).trigger(i),this.settings.consentGiven&&(this.settings.noCDN=!1),this.settings.consentGiven},afterConsentToggled:function(){if(this.checkConsent()){var t=this;window.sby.maybeAddYTAPI(),t.maybeRaiseImageResolution(),t.applyFullFeatures(),setTimeout((function(){t.afterResize()}),500)}},removeFeatures:function(){this.settings.noCDN&&e(this.el).find(".sby_video_thumbnail").each((function(){e(this).removeAttr("data-sby-lightbox")}))},applyFullFeatures:function(){var t=this;e(t.el).find(".sby_header_img img").attr("src",e(t.el).find(".sby_header_img").attr("data-avatar-url")),void 0===e(t.el).find(".sby_video_thumbnail").first().attr("data-sby-lightbox")&&t.settings.lightboxEnabled&&e(t.el).find(".sby_video_thumbnail").each((function(){e(this).attr("data-sby-lightbox",t.index)}));var i=e(t.el);if(i.find(".sby_no_consent").removeClass("sby_no_consent"),i.hasClass("sby_layout_gallery")&&i.find(".sby_player_outer_wrap").length){if(this.maybeRaiseSingleImageResolution(i.find(".sby_player_outer_wrap"),0,!0),i.find(".sby_item").first().addClass("sby_current"),!t.canCreatePlayer())return;i.find(".sby_player_outer_wrap iframe").length||t.createPlayer("sby_player"+t.index)}},locationGuess:function(){var t=e(this.el),i="content";return t.closest("footer").length?i="footer":t.closest(".header").length||t.closest("header").length?i="header":(t.closest(".sidebar").length||t.closest("aside").length)&&(i="sidebar"),i}},n.prototype=Object.create(s.prototype),a.prototype={getData:function(t){return{feedIndex:parseInt(t.closest(".sb_youtube").attr("data-sby-index")-1),link:t.attr("href"),videoTitle:void 0!==t.attr("data-video-title")?t.attr("data-video-title"):"YouTube Video",video:t.attr("data-video-id")}},template:function(){return"<div id='sby_lightboxOverlay' class='sby_lightboxOverlay'></div><div id='sby_lightbox' class='sby_lightbox'><div class='sby_lb-outerContainer'><div class='sby_lb-container'><img class='sby_lb-image' alt='Lightbox image placeholder' src='' /><div class='sby_lb-player sby_lb-player-placeholder' id='sby_lb-player'></div><div class='sby_lb-nav'><a class='sby_lb-prev' href='#' ><p class='sby-screenreader'>Previous Slide</p><span></span></a><a class='sby_lb-next' href='#' ><p class='sby-screenreader'>Next Slide</p><span></span></a></div><div class='sby_lb-loader'><a class='sby_lb-cancel'></a></div></div></div><div class='sby_lb-dataContainer'><div class='sby_lb-data'><div class='sby_lb-details'><div class='sby_lb-caption'></div><div class='sby_lb-info'><div class='sby_lb-number'></div></div></div><div class='sby_lb-closeContainer'><a class='sby_lb-close'></a></div></div></div></div>"},beforePlayerSetup:function(t,e,i,s,n){},afterPlayerSetup:function(t,e,i,s){},afterResize:function(){var t=e("#sby_lightbox .sby_lb-player").height();if(t>100){var i=e("#sby_lightbox .sby_lb-outerContainer").height()-t;i>10&&e("#sby_lightbox .sby_lb-player").css("top",i/2)}},pausePlayer:function(){void 0===window.sbyLightboxPlayer&&"undefined"==typeof YT||(void 0!==YT.get("sby_lb-player")&&"function"==typeof YT.get("sby_lb-player").pauseVideo?YT.get("sby_lb-player").pauseVideo():void 0!==window.sbyLightboxPlayer&&"function"==typeof window.sbyLightboxPlayer.pauseVideo&&window.sbyLightboxPlayer.pauseVideo())}},window.sby_init=function(){window.sby=new i,window.sby.createPage(window.sby.createFeeds,{whenFeedsCreated:window.sby.afterFeedsCreated})},window.sby_carousel_init=function(){console.log("log")}}(jQuery),void 0===window.sbyEagerLoading){if(window.sbyEagerLoading=void 0!==window.sbyOptions&&window.sbyOptions.eagerload,jQuery(".elementor-widget-video").length){var c=void 0!==jQuery(".elementor-widget-video").attr("data-settings")&&JSON.parse(jQuery(".elementor-widget-video").attr("data-settings"));c&&void 0!==c.youtube_url&&(window.sbyEagerLoading=!0)}jQuery("div[data-vc-video-bg]").length&&(window.sbyEagerLoading=!0)}void 0===window.sbySemiEagerLoading&&(window.sbySemiEagerLoading=void 0!==window.sbyOptions&&window.sbyOptions.semiEagerload,(jQuery("div[data-vc-video-bg]").length||window.sbyEagerLoading)&&(window.sbySemiEagerLoading=!1)),jQuery(document).ready((function(t){window.sbySemiEagerLoading||sby_init(),t("#cookie-notice a").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t("#cookie-law-info-bar a").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t(".cli-user-preference-checkbox").on("click",(function(){setTimeout((function(){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!1,window.sby.feeds[t].afterConsentToggled()}))}),1e3)})),t(window).on("CookiebotOnAccept",(function(e){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),t(document).on("cmplzEnableScripts",(function(e){"marketing"===e.detail&&t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),t(document).on("cmplzFireCategories",(function(e){"marketing"===e.detail.category&&t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!0,window.sby.feeds[t].afterConsentToggled()}))})),t(document).on("borlabs-cookie-consent-saved",(function(e){t.each(window.sby.feeds,(function(t){window.sby.feeds[t].settings.consentGiven=!1,window.sby.feeds[t].afterConsentToggled()}))}))}))}if(window.sbySemiEagerLoading){var u="sby-youtube-api";if(null===document.getElementById(u)){var g=document.createElement("script"),y=document.getElementsByTagName("script")[0];g.src="https://www.youtube.com/iframe_api",g.id=u,y.parentNode.insertBefore(g,y)}}window.onYouTubeIframeAPIReady=function(){var t=document.getElementsByClassName("sb_youtube").length;if(t>0){if(window.sbySemiEagerLoading){if(void 0!==window.sby)for(var e=0;e<t;e++)window.sby.feeds[e].playerAPIReady=!0;else window.sbyAPIReady=!0;sby_init()}else if(window.sbyEagerLoading){var i=!1,s=!1;jQuery(".sb_youtube").each((function(t){var e=jQuery(this);e.hasClass("sby_layout_list")?(jQuery(this).addClass("sby_player_loaded"),e.find(".sby_item").each((function(){videoID=jQuery(this).attr("data-video-id"),player=new YT.Player("sby_player_"+videoID,{height:"100",width:"100",videoId:videoID,playerVars:{modestbranding:1,rel:0,autoplay:s},events:{onStateChange:function(t){t.target.getVideoData().video_id,1===t.data&&e.find(".sby_item").each((function(){var e=jQuery(this).attr("data-video-id");jQuery(this).find("iframe").length&&jQuery(t.target.a).attr("id")!==jQuery(this).find("iframe").attr("id")&&YT.get("sby_player_"+e).pauseVideo()}))}}})}))):e.hasClass("sby_layout_gallery")?(jQuery(this).addClass("sby_player_loaded"),player=new YT.Player("sby_player"+t,{height:"100",width:"100",videoId:jQuery(this).find(".sby_item").first().attr("data-video-id"),playerVars:{modestbranding:1,rel:0,autoplay:s},events:{onStateChange:function(t){t.target.getVideoData().video_id,1===t.data&&e.find(".sby_item").each((function(){var e=jQuery(this).attr("data-video-id");jQuery(this).find("iframe").length&&jQuery(t.target.a).attr("id")!==jQuery(this).find("iframe").attr("id")&&YT.get("sby_player_"+e).pauseVideo()}))}}})):i=!0}))}else if(void 0!==window.sby)for(e=0;e<t;e++)window.sby.feeds[e].playerAPIReady=!0;else window.sbyAPIReady=!0;jQuery(".sb_youtube").each((function(t){var e=jQuery(this);e.find(".sby_live_player").length&&(player=new YT.Player(e.find(".sby_live_player").attr("id"),{events:{onReady:function(){e.find(".sby_live_player").hide(),e.find(".sby_item").remove();var i=YT.get(e.find(".sby_live_player").attr("id")).getVideoData().video_id;e.find(".sby_player_video_thumbnail").attr("data-video-id",i).css("z-index",-1),e.find(".sby_item").length;var s={action:"sby_live_retrieve",video_id:i,feed_id:e.attr("data-feedid"),atts:e.attr("data-shortcode-atts")};jQuery.ajax({url:sbyOptions.adminAjaxUrl,type:"post",data:s,success:function(i){if(0===i.trim().indexOf("{")){var s=window.sby.feeds[t],n=JSON.parse(i),a=void 0!==n.feedStatus.checkWPPosts&&n.feedStatus.checkWPPosts;s.settings.debugEnabled&&console.log(n),s.settings.checkWPPosts=!!a,s.appendNewPosts(n.html),s.addResizedImages(n.resizedImages),s.afterInitialImagesLoaded(),n.feedStatus.shouldPaginate?s.outOfPages=!1:(s.outOfPages=!0,e.find(".sby_load_btn").hide()),jQuery(".sby_no_js").removeClass("sby_no_js"),e.find(".sby_live_player").remove(),e.hasClass("sby_layout_gallery")&&s.createPlayer("sby_player"+s.index),e.find(".sby_player_item").css("opacity",1),e.find(".sby_item").css("opacity",1),e.find(".sby_player_loading").removeClass("sby_player_loading"),e.hasClass("sby_layout_list")&&e.find(".sby_item_video_thumbnail").on("mouseenter",(function(){jQuery(this).css("z-index",-1)}))}}})}}}))})),i&&(jQuery("#sby_lb-player").length||jQuery(".sb_youtube").first().append('<div class="sby_lb-player-loaded sby_lb-player" id="sby_lb-player" style="display: none;"></div>'),player=new YT.Player("sby_lb-player",{height:"100",width:"100",videoId:jQuery(this).find(".sby_item").first().attr("data-video-id"),playerVars:{modestbranding:1,rel:0,autoplay:s}}),window.sbyLightboxPlayer=player)}if(void 0!==window.sby){var n=jQuery.Event("sbyfeedandytready");jQuery(window).trigger(n)}}})();}
3
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,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SSxTQUFTLHVCQUNqQjJILEVBQUtrUCxhQUFhLGFBQWFsUCxFQUFLbFQsT0FFdENxVSxFQUFNdlQsS0FBSyxvQkFBb0I5QixJQUFJLFVBQVUsR0FDN0NxVixFQUFNdlQsS0FBSyxhQUFhOUIsSUFBSSxVQUFVLEdBQ3RDcVYsRUFBTXZULEtBQUssdUJBQXVCUCxZQUFZLHNCQUMxQzhULEVBQU05SSxTQUFTLG9CQUNqQjhJLEVBQU12VCxLQUFLLDZCQUE2QitCLEdBQUcsY0FBYSxXQUN0RDJDLE9BQU9sTSxNQUFNMEYsSUFBSSxXQUFXLGtCQW1CMUNtdUIsSUFDRzNuQixPQUFPLGtCQUFrQi9NLFFBQzVCK00sT0FBTyxlQUFlOE4sUUFBUXJTLE9BQU8sb0dBRXZDaWhCLE9BQVMsSUFBSS9OLEdBQUdDLE9BQU8sZ0JBQWlCLENBQ3RDckssT0FBUSxNQUNScEwsTUFBTyxNQUNQZ1YsUUFBU25PLE9BQU9sTSxNQUFNd0gsS0FBSyxhQUFhd1MsUUFBUTVSLEtBQUssaUJBQ3JEa1MsV0FBWSxDQUNWQyxlQUFnQixFQUNoQkMsSUFBSyxFQUNMMUgsU0FBVUEsS0FHZG5WLE9BQU9zYyxrQkFBb0IyTyxRQUsvQixRQUEwQixJQUFmanJCLE9BQU8wYSxJQUFxQixDQUNyQyxJQUFJc0IsRUFBTXpOLE9BQU8vRyxNQUFNLHFCQUN2QitHLE9BQU92TyxRQUFRMEosUUFBUXNTIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8veW91dHViZS1mZWVkLXByby8uL2pzL3NiLXlvdXR1YmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIHNieV9qc19leGlzdHMgPSAodHlwZW9mIHNieV9qc19leGlzdHMgIT09ICd1bmRlZmluZWQnKSA/IHRydWUgOiBmYWxzZTtcbmlmKCFzYnlfanNfZXhpc3RzKSB7XG5cbiAgZnVuY3Rpb24gc2J5QWRkSW1nTGlxdWlkKCkge1xuICAgIC8qISBpbWdMaXF1aWQgdjAuOS45NDQgLyAwMy0wNS0yMDEzIGh0dHBzOi8vZ2l0aHViLmNvbS9rYXJhY2FzL2ltZ0xpcXVpZCAqL1xuICAgIHZhciBzYnlfaW1nTGlxdWlkID0gc2J5X2ltZ0xpcXVpZCB8fCB7VkVSOiBcIjAuOS45NDRcIn07XG4gICAgc2J5X2ltZ0xpcXVpZC5iZ3NfQXZhaWxhYmxlID0gITEsIHNieV9pbWdMaXF1aWQuYmdzX0NoZWNrUnVubmVkID0gITEsIGZ1bmN0aW9uIChpKSB7XG4gICAgICBmdW5jdGlvbiB0KCkge1xuICAgICAgICBpZiAoIXNieV9pbWdMaXF1aWQuYmdzX0NoZWNrUnVubmVkKSB7XG4gICAgICAgICAgc2J5X2ltZ0xpcXVpZC5iZ3NfQ2hlY2tSdW5uZWQgPSAhMDtcbiAgICAgICAgICB2YXIgdCA9IGkoJzxzcGFuIHN0eWxlPVwiYmFja2dyb3VuZC1zaXplOmNvdmVyXCIgLz4nKTtcbiAgICAgICAgICBpKFwiYm9keVwiKS5hcHBlbmQodCksICFmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaSA9IHRbMF07XG4gICAgICAgICAgICBpZiAoaSAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSkge1xuICAgICAgICAgICAgICB2YXIgZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGksIG51bGwpO1xuICAgICAgICAgICAgICBlICYmIGUuYmFja2dyb3VuZFNpemUgJiYgKHNieV9pbWdMaXF1aWQuYmdzX0F2YWlsYWJsZSA9IFwiY292ZXJcIiA9PT0gZS5iYWNrZ3JvdW5kU2l6ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KCksIHQucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpLmZuLmV4dGVuZCh7XG4gICAgICAgIHNieV9pbWdMaXF1aWQ6IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgdGhpcy5kZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIGZpbGw6ICEwLFxuICAgICAgICAgICAgdmVydGljYWxBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgIGhvcml6b250YWxBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgICAgIHVzZUJhY2tncm91bmRTaXplOiAhMCxcbiAgICAgICAgICAgIHVzZURhdGFIdG1sQXR0cjogITAsXG4gICAgICAgICAgICByZXNwb25zaXZlOiAhMCxcbiAgICAgICAgICAgIGRlbGF5OiAwLFxuICAgICAgICAgICAgZmFkZUluVGltZTogMCxcbiAgICAgICAgICAgIHJlbW92ZUJveEJhY2tncm91bmQ6ICEwLFxuICAgICAgICAgICAgaGFyZFBpeGVsczogITAsXG4gICAgICAgICAgICByZXNwb25zaXZlQ2hlY2tUaW1lOiA1MDAsXG4gICAgICAgICAgICB0aW1lY2hlY2t2aXNpYmlsaXR5OiA1MDAsXG4gICAgICAgICAgICBvblN0YXJ0OiBudWxsLFxuICAgICAgICAgICAgb25GaW5pc2g6IG51bGwsXG4gICAgICAgICAgICBvbkl0ZW1TdGFydDogbnVsbCxcbiAgICAgICAgICAgIG9uSXRlbUZpbmlzaDogbnVsbCxcbiAgICAgICAgICAgIG9uSXRlbUVycm9yOiBudWxsXG4gICAgICAgICAgfSwgdCgpO1xuICAgICAgICAgIHZhciBhID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zID0gZSwgdGhpcy5zZXR0aW5ncyA9IGkuZXh0ZW5kKHt9LCB0aGlzLmRlZmF1bHRzLCB0aGlzLm9wdGlvbnMpLCB0aGlzLnNldHRpbmdzLm9uU3RhcnQgJiYgdGhpcy5zZXR0aW5ncy5vblN0YXJ0KCksIHRoaXMuZWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgICAgICAgICAgLTEgPT09IHUuY3NzKFwiYmFja2dyb3VuZC1pbWFnZVwiKS5pbmRleE9mKGVuY29kZVVSSShjLmF0dHIoXCJzcmNcIikpKSAmJiB1LmNzcyh7XCJiYWNrZ3JvdW5kLWltYWdlXCI6ICd1cmwoXCInICsgZW5jb2RlVVJJKGMuYXR0cihcInNyY1wiKSkgKyAnXCIpJ30pLCB1LmNzcyh7XG4gICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kLXNpemVcIjogZy5maWxsID8gXCJjb3ZlclwiIDogXCJjb250YWluXCIsXG4gICAgICAgICAgICAgICAgXCJiYWNrZ3JvdW5kLXBvc2l0aW9uXCI6IChnLmhvcml6b250YWxBbGlnbiArIFwiIFwiICsgZy52ZXJ0aWNhbEFsaWduKS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgIFwiYmFja2dyb3VuZC1yZXBlYXRcIjogXCJuby1yZXBlYXRcIlxuICAgICAgICAgICAgICB9KSwgaShcImE6Zmlyc3RcIiwgdSkuY3NzKHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBcImJsb2NrXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICAgICAgICAgIGhlaWdodDogXCIxMDAlXCJcbiAgICAgICAgICAgICAgfSksIGkoXCJpbWdcIiwgdSkuY3NzKHtkaXNwbGF5OiBcIm5vbmVcIn0pLCBnLm9uSXRlbUZpbmlzaCAmJiBnLm9uSXRlbUZpbmlzaCh0LCB1LCBjKSwgdS5hZGRDbGFzcyhcInNieV9pbWdMaXF1aWRfYmdTaXplXCIpLCB1LmFkZENsYXNzKFwic2J5X2ltZ0xpcXVpZF9yZWFkeVwiKSwgbCgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG8oKSB7XG4gICAgICAgICAgICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgICAgICAgICAgICAgYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9lcnJvclwiKSB8fCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX2xvYWRlZFwiKSB8fCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX29sZFByb2Nlc3NlZFwiKSB8fCAodS5pcyhcIjp2aXNpYmxlXCIpICYmIGNbMF0uY29tcGxldGUgJiYgY1swXS53aWR0aCA+IDAgJiYgY1swXS5oZWlnaHQgPiAwID8gKGMuZGF0YShcInNieV9pbWdMaXF1aWRfbG9hZGVkXCIsICEwKSwgc2V0VGltZW91dChyLCB0ICogZy5kZWxheSkpIDogc2V0VGltZW91dChlLCBnLnRpbWVjaGVja3Zpc2liaWxpdHkpKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGMuZGF0YShcIm9sZFNyY1wiKSAmJiBjLmRhdGEoXCJvbGRTcmNcIikgIT09IGMuYXR0cihcInNyY1wiKSkge1xuICAgICAgICAgICAgICAgIHZhciBhID0gYy5jbG9uZSgpLnJlbW92ZUF0dHIoXCJzdHlsZVwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS5kYXRhKFwic2J5X2ltZ0xpcXVpZF9zZXR0aW5nc1wiLCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIpKSwgYy5wYXJlbnQoKS5wcmVwZW5kKGEpLCBjLnJlbW92ZSgpLCBjID0gYSwgY1swXS53aWR0aCA9IDAsIHZvaWQgc2V0VGltZW91dChvLCAxMClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9vbGRQcm9jZXNzZWRcIikgPyB2b2lkIHIoKSA6IChjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX29sZFByb2Nlc3NlZFwiLCAhMSksIGMuZGF0YShcIm9sZFNyY1wiLCBjLmF0dHIoXCJzcmNcIikpLCBpKFwiaW1nOm5vdCg6Zmlyc3QpXCIsIHUpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpLCB1LmNzcyh7b3ZlcmZsb3c6IFwiaGlkZGVuXCJ9KSwgYy5mYWRlVG8oMCwgMCkucmVtb3ZlQXR0cihcIndpZHRoXCIpLnJlbW92ZUF0dHIoXCJoZWlnaHRcIikuY3NzKHtcbiAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2libGVcIixcbiAgICAgICAgICAgICAgICBcIm1heC13aWR0aFwiOiBcIm5vbmVcIixcbiAgICAgICAgICAgICAgICBcIm1heC1oZWlnaHRcIjogXCJub25lXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgIGhlaWdodDogXCJhdXRvXCIsXG4gICAgICAgICAgICAgICAgZGlzcGxheTogXCJibG9ja1wiXG4gICAgICAgICAgICAgIH0pLCBjLm9uKFwiZXJyb3JcIiwgbiksIGNbMF0ub25lcnJvciA9IG4sIGUoKSwgdm9pZCBkKCkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGQoKSB7XG4gICAgICAgICAgICAgIChnLnJlc3BvbnNpdmUgfHwgYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9vbGRQcm9jZXNzZWRcIikpICYmIGMuZGF0YShcInNieV9pbWdMaXF1aWRfc2V0dGluZ3NcIikgJiYgKGcgPSBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIpLCB1LmFjdHVhbFNpemUgPSB1LmdldCgwKS5vZmZzZXRXaWR0aCArIHUuZ2V0KDApLm9mZnNldEhlaWdodCAvIDFlNCwgdS5zaXplT2xkICYmIHUuYWN0dWFsU2l6ZSAhPT0gdS5zaXplT2xkICYmIHIoKSwgdS5zaXplT2xkID0gdS5hY3R1YWxTaXplLCBzZXRUaW1lb3V0KGQsIGcucmVzcG9uc2l2ZUNoZWNrVGltZSkpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICAgICAgICAgIGMuZGF0YShcInNieV9pbWdMaXF1aWRfZXJyb3JcIiwgITApLCB1LmFkZENsYXNzKFwic2J5X2ltZ0xpcXVpZF9lcnJvclwiKSwgZy5vbkl0ZW1FcnJvciAmJiBnLm9uSXRlbUVycm9yKHQsIHUsIGMpLCBsKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcygpIHtcbiAgICAgICAgICAgICAgdmFyIGkgPSB7fTtcbiAgICAgICAgICAgICAgaWYgKGEuc2V0dGluZ3MudXNlRGF0YUh0bWxBdHRyKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQgPSB1LmF0dHIoXCJkYXRhLXNieV9pbWdMaXF1aWQtZmlsbFwiKSxcbiAgICAgICAgICAgICAgICAgIGUgPSB1LmF0dHIoXCJkYXRhLXNieV9pbWdMaXF1aWQtaG9yaXpvbnRhbEFsaWduXCIpLFxuICAgICAgICAgICAgICAgICAgbyA9IHUuYXR0cihcImRhdGEtc2J5X2ltZ0xpcXVpZC12ZXJ0aWNhbEFsaWduXCIpO1xuICAgICAgICAgICAgICAgIChcInRydWVcIiA9PT0gdCB8fCBcImZhbHNlXCIgPT09IHQpICYmIChpLmZpbGwgPSBCb29sZWFuKFwidHJ1ZVwiID09PSB0KSksIHZvaWQgMCA9PT0gZSB8fCBcImxlZnRcIiAhPT0gZSAmJiBcImNlbnRlclwiICE9PSBlICYmIFwicmlnaHRcIiAhPT0gZSAmJiAtMSA9PT0gZS5pbmRleE9mKFwiJVwiKSB8fCAoaS5ob3Jpem9udGFsQWxpZ24gPSBlKSwgdm9pZCAwID09PSBvIHx8IFwidG9wXCIgIT09IG8gJiYgXCJib3R0b21cIiAhPT0gbyAmJiBcImNlbnRlclwiICE9PSBvICYmIC0xID09PSBvLmluZGV4T2YoXCIlXCIpIHx8IChpLnZlcnRpY2FsQWxpZ24gPSBvKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBzYnlfaW1nTGlxdWlkLmlzSUUgJiYgYS5zZXR0aW5ncy5pZUZhZGVJbkRpc2FibGVkICYmIChpLmZhZGVJblRpbWUgPSAwKSwgaVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiByKCkge1xuICAgICAgICAgICAgICB2YXIgaSwgZSwgYSwgbywgZCwgbiwgcywgciwgbSA9IDAsIGggPSAwLCBmID0gdS53aWR0aCgpLCB2ID0gdS5oZWlnaHQoKTtcbiAgICAgICAgICAgICAgdm9pZCAwID09PSBjLmRhdGEoXCJvd2lkdGhcIikgJiYgYy5kYXRhKFwib3dpZHRoXCIsIGNbMF0ud2lkdGgpLCB2b2lkIDAgPT09IGMuZGF0YShcIm9oZWlnaHRcIikgJiYgYy5kYXRhKFwib2hlaWdodFwiLCBjWzBdLmhlaWdodCksIGcuZmlsbCA9PT0gZiAvIHYgPj0gYy5kYXRhKFwib3dpZHRoXCIpIC8gYy5kYXRhKFwib2hlaWdodFwiKSA/IChpID0gXCIxMDAlXCIsIGUgPSBcImF1dG9cIiwgYSA9IE1hdGguZmxvb3IoZiksIG8gPSBNYXRoLmZsb29yKGYgKiAoYy5kYXRhKFwib2hlaWdodFwiKSAvIGMuZGF0YShcIm93aWR0aFwiKSkpKSA6IChpID0gXCJhdXRvXCIsIGUgPSBcIjEwMCVcIiwgYSA9IE1hdGguZmxvb3IodiAqIChjLmRhdGEoXCJvd2lkdGhcIikgLyBjLmRhdGEoXCJvaGVpZ2h0XCIpKSksIG8gPSBNYXRoLmZsb29yKHYpKSwgZCA9IGcuaG9yaXpvbnRhbEFsaWduLnRvTG93ZXJDYXNlKCksIHMgPSBmIC0gYSwgXCJsZWZ0XCIgPT09IGQgJiYgKGggPSAwKSwgXCJjZW50ZXJcIiA9PT0gZCAmJiAoaCA9IC41ICogcyksIFwicmlnaHRcIiA9PT0gZCAmJiAoaCA9IHMpLCAtMSAhPT0gZC5pbmRleE9mKFwiJVwiKSAmJiAoZCA9IHBhcnNlSW50KGQucmVwbGFjZShcIiVcIiwgXCJcIiksIDEwKSwgZCA+IDAgJiYgKGggPSBzICogZCAqIC4wMSkpLCBuID0gZy52ZXJ0aWNhbEFsaWduLnRvTG93ZXJDYXNlKCksIHIgPSB2IC0gbywgXCJsZWZ0XCIgPT09IG4gJiYgKG0gPSAwKSwgXCJjZW50ZXJcIiA9PT0gbiAmJiAobSA9IC41ICogciksIFwiYm90dG9tXCIgPT09IG4gJiYgKG0gPSByKSwgLTEgIT09IG4uaW5kZXhPZihcIiVcIikgJiYgKG4gPSBwYXJzZUludChuLnJlcGxhY2UoXCIlXCIsIFwiXCIpLCAxMCksIG4gPiAwICYmIChtID0gciAqIG4gKiAuMDEpKSwgZy5oYXJkUGl4ZWxzICYmIChpID0gYSwgZSA9IG8pLCBjLmNzcyh7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGksXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBlLFxuICAgICAgICAgICAgICAgIFwibWFyZ2luLWxlZnRcIjogTWF0aC5mbG9vcihoKSxcbiAgICAgICAgICAgICAgICBcIm1hcmdpbi10b3BcIjogTWF0aC5mbG9vcihtKVxuICAgICAgICAgICAgICB9KSwgYy5kYXRhKFwic2J5X2ltZ0xpcXVpZF9vbGRQcm9jZXNzZWRcIikgfHwgKGMuZmFkZVRvKGcuZmFkZUluVGltZSwgMSksIGMuZGF0YShcInNieV9pbWdMaXF1aWRfb2xkUHJvY2Vzc2VkXCIsICEwKSwgZy5yZW1vdmVCb3hCYWNrZ3JvdW5kICYmIHUuY3NzKFwiYmFja2dyb3VuZC1pbWFnZVwiLCBcIm5vbmVcIiksIHUuYWRkQ2xhc3MoXCJzYnlfaW1nTGlxdWlkX25vYmdTaXplXCIpLCB1LmFkZENsYXNzKFwic2J5X2ltZ0xpcXVpZF9yZWFkeVwiKSksIGcub25JdGVtRmluaXNoICYmIGcub25JdGVtRmluaXNoKHQsIHUsIGMpLCBsKClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gbCgpIHtcbiAgICAgICAgICAgICAgdCA9PT0gYS5sZW5ndGggLSAxICYmIGEuc2V0dGluZ3Mub25GaW5pc2ggJiYgYS5zZXR0aW5ncy5vbkZpbmlzaCgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBnID0gYS5zZXR0aW5ncywgdSA9IGkodGhpcyksIGMgPSBpKFwiaW1nOmZpcnN0XCIsIHUpO1xuICAgICAgICAgICAgcmV0dXJuIGMubGVuZ3RoID8gKGMuZGF0YShcInNieV9pbWdMaXF1aWRfc2V0dGluZ3NcIikgPyAodS5yZW1vdmVDbGFzcyhcInNieV9pbWdMaXF1aWRfZXJyb3JcIikucmVtb3ZlQ2xhc3MoXCJzYnlfaW1nTGlxdWlkX3JlYWR5XCIpLCBnID0gaS5leHRlbmQoe30sIGMuZGF0YShcInNieV9pbWdMaXF1aWRfc2V0dGluZ3NcIiksIGEub3B0aW9ucykpIDogZyA9IGkuZXh0ZW5kKHt9LCBhLnNldHRpbmdzLCBzKCkpLCBjLmRhdGEoXCJzYnlfaW1nTGlxdWlkX3NldHRpbmdzXCIsIGcpLCBnLm9uSXRlbVN0YXJ0ICYmIGcub25JdGVtU3RhcnQodCwgdSwgYyksIHZvaWQgKHNieV9pbWdMaXF1aWQuYmdzX0F2YWlsYWJsZSAmJiBnLnVzZUJhY2tncm91bmRTaXplID8gZSgpIDogbygpKSkgOiB2b2lkIG4oKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfShqUXVlcnkpO1xuXG4gICAgLy8gVXNlIGltYWdlZmlsbCB0byBzZXQgdGhlIGltYWdlcyBhcyBiYWNrZ3JvdW5kcyBzbyB0aGV5IGNhbiBiZSBzcXVhcmVcbiAgICAhZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNzcyA9IHNieV9pbWdMaXF1aWQuaW5qZWN0Q3NzLFxuICAgICAgICBoZWFkID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSxcbiAgICAgICAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgICAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgICAgIH1cbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH0oKTtcbiAgfVxuXG4gIC8qIEphdmFTY3JpcHQgTGlua2lmeSAtIHYwLjMgLSA2LzI3LzIwMDkgLSBodHRwOi8vYmVuYWxtYW4uY29tL3Byb2plY3RzL2phdmFzY3JpcHQtbGlua2lmeS8gKi9cbiAgd2luZG93LnNieUxpbmtpZnkgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBrID0gXCJbYS16XFxcXGQuLV0rOi8vXCIsXG4gICAgICBoID0gXCIoPzooPzpbMC05XXxbMS05XVxcXFxkfDFcXFxcZHsyfXwyWzAtNF1cXFxcZHwyNVswLTVdKVxcXFwuKXszfSg/OlswLTldfFsxLTldXFxcXGR8MVxcXFxkezJ9fDJbMC00XVxcXFxkfDI1WzAtNV0pXCIsXG4gICAgICBjID0gXCIoPzooPzpbXlxcXFxzIUAjJCVeJiooKV89K1tcXFxcXXt9XFxcXFxcXFx8OzonXFxcIiwuPD4vP10rKVxcXFwuKStcIixcbiAgICAgIG4gPSBcIig/OmFjfGFkfGFlcm98YWV8YWZ8YWd8YWl8YWx8YW18YW58YW98YXF8YXJwYXxhcnxhc2lhfGFzfGF0fGF1fGF3fGF4fGF6fGJhfGJifGJkfGJlfGJmfGJnfGJofGJpenxiaXxianxibXxibnxib3xicnxic3xidHxidnxid3xieXxienxjYXR8Y2F8Y2N8Y2R8Y2Z8Y2d8Y2h8Y2l8Y2t8Y2x8Y218Y258Y29vcHxjb218Y298Y3J8Y3V8Y3Z8Y3h8Y3l8Y3p8ZGV8ZGp8ZGt8ZG18ZG98ZHp8ZWN8ZWR1fGVlfGVnfGVyfGVzfGV0fGV1fGZpfGZqfGZrfGZtfGZvfGZyfGdhfGdifGdkfGdlfGdmfGdnfGdofGdpfGdsfGdtfGdufGdvdnxncHxncXxncnxnc3xndHxndXxnd3xneXxoa3xobXxobnxocnxodHxodXxpZHxpZXxpbHxpbXxpbmZvfGludHxpbnxpb3xpcXxpcnxpc3xpdHxqZXxqbXxqb2JzfGpvfGpwfGtlfGtnfGtofGtpfGttfGtufGtwfGtyfGt3fGt5fGt6fGxhfGxifGxjfGxpfGxrfGxyfGxzfGx0fGx1fGx2fGx5fG1hfG1jfG1kfG1lfG1nfG1ofG1pbHxta3xtbHxtbXxtbnxtb2JpfG1vfG1wfG1xfG1yfG1zfG10fG11c2V1bXxtdXxtdnxtd3xteHxteXxtenxuYW1lfG5hfG5jfG5ldHxuZXxuZnxuZ3xuaXxubHxub3xucHxucnxudXxuenxvbXxvcmd8cGF8cGV8cGZ8cGd8cGh8cGt8cGx8cG18cG58cHJvfHByfHBzfHB0fHB3fHB5fHFhfHJlfHJvfHJzfHJ1fHJ3fHNhfHNifHNjfHNkfHNlfHNnfHNofHNpfHNqfHNrfHNsfHNtfHNufHNvfHNyfHN0fHN1fHN2fHN5fHN6fHRjfHRkfHRlbHx0Znx0Z3x0aHx0anx0a3x0bHx0bXx0bnx0b3x0cHx0cmF2ZWx8dHJ8dHR8dHZ8dHd8dHp8dWF8dWd8dWt8dW18dXN8dXl8dXp8dmF8dmN8dmV8dmd8dml8dm58dnV8d2Z8d3N8eG4tLTB6d201NmR8eG4tLTExYjViczNhOWFqNmd8eG4tLTgwYWtoYnlrbmo0Znx4bi0tOXQ0YjExeWk1YXx4bi0tZGViYTBhZHx4bi0tZzZ3MjUxZHx4bi0taGdiazZhajdmNTNiYmF8eG4tLWhsY2o2YXlhOWVzYzdhfHhuLS1qeGFscGRscHx4bi0ta2diZWNodHZ8eG4tLXpja3phaHx5ZXx5dHx5dXx6YXx6bXx6dylcIixcbiAgICAgIGYgPSBcIig/OlwiICsgYyArIG4gKyBcInxcIiArIGggKyBcIilcIiwgbyA9IFwiKD86WzsvXVteIz88PlxcXFxzXSopP1wiLCBlID0gXCIoPzpcXFxcP1teIzw+XFxcXHNdKik/KD86I1tePD5cXFxcc10qKT9cIixcbiAgICAgIGQgPSBcIlxcXFxiXCIgKyBrICsgXCJbXjw+XFxcXHNdK1wiLCBhID0gXCJcXFxcYlwiICsgZiArIG8gKyBlICsgXCIoPyFcXFxcdylcIiwgbSA9IFwibWFpbHRvOlwiLFxuICAgICAgaiA9IFwiKD86XCIgKyBtICsgXCIpP1thLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXFxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkBcIiArIGYgKyBlICsgXCIoPyFcXFxcdylcIixcbiAgICAgIGwgPSBuZXcgUmVnRXhwKFwiKD86XCIgKyBkICsgXCJ8XCIgKyBhICsgXCJ8XCIgKyBqICsgXCIpXCIsIFwiaWdcIiksIGcgPSBuZXcgUmVnRXhwKFwiXlwiICsgaywgXCJpXCIpLFxuICAgICAgYiA9IHtcIidcIjogXCJgXCIsIFwiPlwiOiBcIjxcIiwgXCIpXCI6IFwiKFwiLCBcIl1cIjogXCJbXCIsIFwifVwiOiBcIntcIiwgXCJCO1wiOiBcIkIrXCIsIFwiYjpcIjogXCJiOVwifSwgaSA9IHtcbiAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIChxLCBwKSB7XG4gICAgICAgICAgcmV0dXJuIHAgPyAnPGEgaHJlZj1cIicgKyBwICsgJ1wiIHRpdGxlPVwiJyArIHAgKyAnXCIgdGFyZ2V0PVwiX2JsYW5rXCIgcmVsPVwibm9vcGVuZXJcIj4nICsgcSArIFwiPC9hPlwiIDogcVxuICAgICAgICB9LCBwdW5jdF9yZWdleHA6IC8oPzpbIT8uLDo7J1wiXXwoPzomfCZhbXA7KSg/Omx0fGd0fHF1b3R8YXBvc3xyYXF1b3xsYXF1b3xyc2FxdW98bHNhcXVvKTspJC9cbiAgICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh1LCB6KSB7XG4gICAgICB6ID0geiB8fCB7fTtcbiAgICAgIHZhciB3LCB2LCBBLCBwLCB4ID0gXCJcIiwgdCA9IFtdLCBzLCBFLCBDLCB5LCBxLCBELCBCLCByO1xuICAgICAgZm9yICh2IGluIGkpIHtcbiAgICAgICAgaWYgKHpbdl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHpbdl0gPSBpW3ZdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlICh3ID0gbC5leGVjKHUpKSB7XG4gICAgICAgIEEgPSB3WzBdO1xuICAgICAgICBFID0gbC5sYXN0SW5kZXg7XG4gICAgICAgIEMgPSBFIC0gQS5sZW5ndGg7XG4gICAgICAgIGlmICgvW1xcLzpdLy50ZXN0KHUuY2hhckF0KEMgLSAxKSkpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGRvIHtcbiAgICAgICAgICB5ID0gQTtcbiAgICAgICAgICByID0gQS5zdWJzdHIoLTEpO1xuICAgICAgICAgIEIgPSBiW3JdO1xuICAgICAgICAgIGlmIChCKSB7XG4gICAgICAgICAgICBxID0gQS5tYXRjaChuZXcgUmVnRXhwKFwiXFxcXFwiICsgQiArIFwiKD8hJClcIiwgXCJnXCIpKTtcbiAgICAgICAgICAgIEQgPSBBLm1hdGNoKG5ldyBSZWdFeHAoXCJcXFxcXCIgKyByLCBcImdcIikpO1xuICAgICAgICAgICAgaWYgKChxID8gcS5sZW5ndGggOiAwKSA8IChEID8gRC5sZW5ndGggOiAwKSkge1xuICAgICAgICAgICAgICBBID0gQS5zdWJzdHIoMCwgQS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgRS0tXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh6LnB1bmN0X3JlZ2V4cCkge1xuICAgICAgICAgICAgQSA9IEEucmVwbGFjZSh6LnB1bmN0X3JlZ2V4cCwgZnVuY3Rpb24gKEYpIHtcbiAgICAgICAgICAgICAgRSAtPSBGLmxlbmd0aDtcbiAgICAgICAgICAgICAgcmV0dXJuIFwiXCJcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChBLmxlbmd0aCAmJiBBICE9PSB5KTtcbiAgICAgICAgcCA9IEE7XG4gICAgICAgIGlmICghZy50ZXN0KHApKSB7XG4gICAgICAgICAgcCA9IChwLmluZGV4T2YoXCJAXCIpICE9PSAtMSA/ICghcC5pbmRleE9mKG0pID8gXCJcIiA6IG0pIDogIXAuaW5kZXhPZihcImlyYy5cIikgPyBcImlyYzovL1wiIDogIXAuaW5kZXhPZihcImZ0cC5cIikgPyBcImZ0cDovL1wiIDogXCJodHRwOi8vXCIpICsgcFxuICAgICAgICB9XG4gICAgICAgIGlmIChzICE9IEMpIHtcbiAgICAgICAgICB0LnB1c2goW3Uuc2xpY2UocywgQyldKTtcbiAgICAgICAgICBzID0gRVxuICAgICAgICB9XG4gICAgICAgIHQucHVzaChbQSwgcF0pXG4gICAgICB9XG4gICAgICB0LnB1c2goW3Uuc3Vic3RyKHMpXSk7XG4gICAgICBmb3IgKHYgPSAwOyB2IDwgdC5sZW5ndGg7IHYrKykge1xuICAgICAgICB4ICs9IHouY2FsbGJhY2suYXBwbHkod2luZG93LCB0W3ZdKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHggfHwgdVxuICAgIH1cbiAgfSkoKTtcblxuICAvL0NoZWNrcyB3aGV0aGVyIGJyb3dzZXIgc3VwcG9ydCBIVE1MNSB2aWRlbyBlbGVtZW50XG4gIGZ1bmN0aW9uIHNieV9zdXBwb3J0c192aWRlbygpIHtcbiAgICByZXR1cm4gISFkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpLmNhblBsYXlUeXBlO1xuICB9XG5cbiAgLy8gQ2Fyb3VzZWxcbiAgIWZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgZnVuY3Rpb24gZShiLCBjKSB7XG4gICAgICB0aGlzLnNldHRpbmdzID0gbnVsbCwgdGhpcy5vcHRpb25zID0gYS5leHRlbmQoe30sIGUuRGVmYXVsdHMsIGMpLCB0aGlzLiRlbGVtZW50ID0gYShiKSwgdGhpcy5faGFuZGxlcnMgPSB7fSwgdGhpcy5fcGx1Z2lucyA9IHt9LCB0aGlzLl9zdXByZXNzID0ge30sIHRoaXMuX2N1cnJlbnQgPSBudWxsLCB0aGlzLl9zcGVlZCA9IG51bGwsIHRoaXMuX2Nvb3JkaW5hdGVzID0gW10sIHRoaXMuX2JyZWFrcG9pbnQgPSBudWxsLCB0aGlzLl93aWR0aCA9IG51bGwsIHRoaXMuX2l0ZW1zID0gW10sIHRoaXMuX2Nsb25lcyA9IFtdLCB0aGlzLl9tZXJnZXJzID0gW10sIHRoaXMuX3dpZHRocyA9IFtdLCB0aGlzLl9pbnZhbGlkYXRlZCA9IHt9LCB0aGlzLl9waXBlID0gW10sIHRoaXMuX2RyYWcgPSB7XG4gICAgICAgIHRpbWU6IG51bGwsXG4gICAgICAgIHRhcmdldDogbnVsbCxcbiAgICAgICAgcG9pbnRlcjogbnVsbCxcbiAgICAgICAgc3RhZ2U6IHtzdGFydDogbnVsbCwgY3VycmVudDogbnVsbH0sXG4gICAgICAgIGRpcmVjdGlvbjogbnVsbFxuICAgICAgfSwgdGhpcy5fc3RhdGVzID0ge1xuICAgICAgICBjdXJyZW50OiB7fSxcbiAgICAgICAgdGFnczoge2luaXRpYWxpemluZzogW1wiYnVzeVwiXSwgYW5pbWF0aW5nOiBbXCJidXN5XCJdLCBkcmFnZ2luZzogW1wiaW50ZXJhY3RpbmdcIl19XG4gICAgICB9LCBhLmVhY2goW1wib25SZXNpemVcIiwgXCJvblRocm90dGxlZFJlc2l6ZVwiXSwgYS5wcm94eShmdW5jdGlvbiAoYiwgYykge1xuICAgICAgICB0aGlzLl9oYW5kbGVyc1tjXSA9IGEucHJveHkodGhpc1tjXSwgdGhpcylcbiAgICAgIH0sIHRoaXMpKSwgYS5lYWNoKGUuUGx1Z2lucywgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICB0aGlzLl9wbHVnaW5zW2EuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBhLnNsaWNlKDEpXSA9IG5ldyBiKHRoaXMpXG4gICAgICB9LCB0aGlzKSksIGEuZWFjaChlLldvcmtlcnMsIGEucHJveHkoZnVuY3Rpb24gKGIsIGMpIHtcbiAgICAgICAgdGhpcy5fcGlwZS5wdXNoKHtmaWx0ZXI6IGMuZmlsdGVyLCBydW46IGEucHJveHkoYy5ydW4sIHRoaXMpfSlcbiAgICAgIH0sIHRoaXMpKSwgdGhpcy5zZXR1cCgpLCB0aGlzLmluaXRpYWxpemUoKVxuICAgIH1cblxuICAgIGUuRGVmYXVsdHMgPSB7XG4gICAgICBpdGVtczogMyxcbiAgICAgIGxvb3A6ICExLFxuICAgICAgY2VudGVyOiAhMSxcbiAgICAgIHJld2luZDogITEsXG4gICAgICBtb3VzZURyYWc6ICEwLFxuICAgICAgdG91Y2hEcmFnOiAhMCxcbiAgICAgIHB1bGxEcmFnOiAhMCxcbiAgICAgIGZyZWVEcmFnOiAhMSxcbiAgICAgIG1hcmdpbjogMCxcbiAgICAgIHN0YWdlUGFkZGluZzogMCxcbiAgICAgIG1lcmdlOiAhMSxcbiAgICAgIG1lcmdlRml0OiAhMCxcbiAgICAgIGF1dG9XaWR0aDogITEsXG4gICAgICBzdGFydFBvc2l0aW9uOiAwLFxuICAgICAgcnRsOiAhMSxcbiAgICAgIHNtYXJ0U3BlZWQ6IDI1MCxcbiAgICAgIGZsdWlkU3BlZWQ6ICExLFxuICAgICAgZHJhZ0VuZFNwZWVkOiAhMSxcbiAgICAgIHJlc3BvbnNpdmU6IHt9LFxuICAgICAgcmVzcG9uc2l2ZVJlZnJlc2hSYXRlOiAyMDAsXG4gICAgICByZXNwb25zaXZlQmFzZUVsZW1lbnQ6IGIsXG4gICAgICBmYWxsYmFja0Vhc2luZzogXCJzd2luZ1wiLFxuICAgICAgaW5mbzogITEsXG4gICAgICBuZXN0ZWRJdGVtU2VsZWN0b3I6ICExLFxuICAgICAgaXRlbUVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgICBzdGFnZUVsZW1lbnQ6IFwiZGl2XCIsXG4gICAgICByZWZyZXNoQ2xhc3M6IFwic2J5LW93bC1yZWZyZXNoXCIsXG4gICAgICBsb2FkZWRDbGFzczogXCJzYnktb3dsLWxvYWRlZFwiLFxuICAgICAgbG9hZGluZ0NsYXNzOiBcInNieS1vd2wtbG9hZGluZ1wiLFxuICAgICAgcnRsQ2xhc3M6IFwic2J5LW93bC1ydGxcIixcbiAgICAgIHJlc3BvbnNpdmVDbGFzczogXCJzYnktb3dsLXJlc3BvbnNpdmVcIixcbiAgICAgIGRyYWdDbGFzczogXCJzYnktb3dsLWRyYWdcIixcbiAgICAgIGl0ZW1DbGFzczogXCJzYnktb3dsLWl0ZW1cIixcbiAgICAgIHN0YWdlQ2xhc3M6IFwic2J5LW93bC1zdGFnZVwiLFxuICAgICAgc3RhZ2VPdXRlckNsYXNzOiBcInNieS1vd2wtc3RhZ2Utb3V0ZXJcIixcbiAgICAgIGdyYWJDbGFzczogXCJzYnktb3dsLWdyYWJcIlxuICAgIH0sIGUuV2lkdGggPSB7RGVmYXVsdDogXCJkZWZhdWx0XCIsIElubmVyOiBcImlubmVyXCIsIE91dGVyOiBcIm91dGVyXCJ9LCBlLlR5cGUgPSB7XG4gICAgICBFdmVudDogXCJldmVudFwiLFxuICAgICAgU3RhdGU6IFwic3RhdGVcIlxuICAgIH0sIGUuUGx1Z2lucyA9IHt9LCBlLldvcmtlcnMgPSBbe1xuICAgICAgZmlsdGVyOiBbXCJ3aWR0aFwiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fd2lkdGggPSB0aGlzLiRlbGVtZW50LndpZHRoKClcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBmaWx0ZXI6IFtcIndpZHRoXCIsIFwiaXRlbXNcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoYSkge1xuICAgICAgICBhLmN1cnJlbnQgPSB0aGlzLl9pdGVtcyAmJiB0aGlzLl9pdGVtc1t0aGlzLnJlbGF0aXZlKHRoaXMuX2N1cnJlbnQpXVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpbHRlcjogW1wiaXRlbXNcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiLmNsb25lZFwiKS5yZW1vdmUoKVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBiID0gdGhpcy5zZXR0aW5ncy5tYXJnaW4gfHwgXCJcIiwgYyA9ICF0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCwgZCA9IHRoaXMuc2V0dGluZ3MucnRsLFxuICAgICAgICAgIGUgPSB7d2lkdGg6IFwiYXV0b1wiLCBcIm1hcmdpbi1sZWZ0XCI6IGQgPyBiIDogXCJcIiwgXCJtYXJnaW4tcmlnaHRcIjogZCA/IFwiXCIgOiBifTtcbiAgICAgICAgIWMgJiYgdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5jc3MoZSksIGEuY3NzID0gZVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBiID0gKHRoaXMud2lkdGgoKSAvIHRoaXMuc2V0dGluZ3MuaXRlbXMpLnRvRml4ZWQoMykgLSB0aGlzLnNldHRpbmdzLm1hcmdpbiwgYyA9IG51bGwsXG4gICAgICAgICAgZCA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgZSA9ICF0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCwgZiA9IFtdO1xuICAgICAgICBmb3IgKGEuaXRlbXMgPSB7XG4gICAgICAgICAgbWVyZ2U6ICExLFxuICAgICAgICAgIHdpZHRoOiBiXG4gICAgICAgIH07IGQtLTspIGMgPSB0aGlzLl9tZXJnZXJzW2RdLCBjID0gdGhpcy5zZXR0aW5ncy5tZXJnZUZpdCAmJiBNYXRoLm1pbihjLCB0aGlzLnNldHRpbmdzLml0ZW1zKSB8fCBjLCBhLml0ZW1zLm1lcmdlID0gYyA+IDEgfHwgYS5pdGVtcy5tZXJnZSwgZltkXSA9IGUgPyBiICogYyA6IHRoaXMuX2l0ZW1zW2RdLndpZHRoKCk7XG4gICAgICAgIHRoaXMuX3dpZHRocyA9IGZcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBmaWx0ZXI6IFtcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYiA9IFtdLCBjID0gdGhpcy5faXRlbXMsIGQgPSB0aGlzLnNldHRpbmdzLCBlID0gTWF0aC5tYXgoMiAqIGQuaXRlbXMsIDQpLFxuICAgICAgICAgIGYgPSAyICogTWF0aC5jZWlsKGMubGVuZ3RoIC8gMiksIGcgPSBkLmxvb3AgJiYgYy5sZW5ndGggPyBkLnJld2luZCA/IGUgOiBNYXRoLm1heChlLCBmKSA6IDAsIGggPSBcIlwiLFxuICAgICAgICAgIGkgPSBcIlwiO1xuICAgICAgICBmb3IgKGcgLz0gMjsgZy0tOykgYi5wdXNoKHRoaXMubm9ybWFsaXplKGIubGVuZ3RoIC8gMiwgITApKSwgaCArPSBjW2JbYi5sZW5ndGggLSAxXV1bMF0ub3V0ZXJIVE1MLCBiLnB1c2godGhpcy5ub3JtYWxpemUoYy5sZW5ndGggLSAxIC0gKGIubGVuZ3RoIC0gMSkgLyAyLCAhMCkpLCBpID0gY1tiW2IubGVuZ3RoIC0gMV1dWzBdLm91dGVySFRNTCArIGk7XG4gICAgICAgIHRoaXMuX2Nsb25lcyA9IGIsIGEoaCkuYWRkQ2xhc3MoXCJjbG9uZWRcIikuYXBwZW5kVG8odGhpcy4kc3RhZ2UpLCBhKGkpLmFkZENsYXNzKFwiY2xvbmVkXCIpLnByZXBlbmRUbyh0aGlzLiRzdGFnZSlcbiAgICAgIH1cbiAgICB9LCB7XG4gICAgICBmaWx0ZXI6IFtcIndpZHRoXCIsIFwiaXRlbXNcIiwgXCJzZXR0aW5nc1wiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAodmFyIGEgPSB0aGlzLnNldHRpbmdzLnJ0bCA/IDEgOiAtMSwgYiA9IHRoaXMuX2Nsb25lcy5sZW5ndGggKyB0aGlzLl9pdGVtcy5sZW5ndGgsIGMgPSAtMSwgZCA9IDAsIGUgPSAwLCBmID0gW107ICsrYyA8IGI7KSBkID0gZltjIC0gMV0gfHwgMCwgZSA9IHRoaXMuX3dpZHRoc1t0aGlzLnJlbGF0aXZlKGMpXSArIHRoaXMuc2V0dGluZ3MubWFyZ2luLCBmLnB1c2goZCArIGUgKiBhKTtcbiAgICAgICAgdGhpcy5fY29vcmRpbmF0ZXMgPSBmXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmlsdGVyOiBbXCJ3aWR0aFwiLCBcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYSA9IHRoaXMuc2V0dGluZ3Muc3RhZ2VQYWRkaW5nLCBiID0gdGhpcy5fY29vcmRpbmF0ZXMsIGMgPSB7XG4gICAgICAgICAgd2lkdGg6IE1hdGguY2VpbChNYXRoLmFicyhiW2IubGVuZ3RoIC0gMV0pKSArIDIgKiBhLFxuICAgICAgICAgIFwicGFkZGluZy1sZWZ0XCI6IGEgfHwgXCJcIixcbiAgICAgICAgICBcInBhZGRpbmctcmlnaHRcIjogYSB8fCBcIlwiXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuJHN0YWdlLmNzcyhjKVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJpdGVtc1wiLCBcInNldHRpbmdzXCJdLCBydW46IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBiID0gdGhpcy5fY29vcmRpbmF0ZXMubGVuZ3RoLCBjID0gIXRoaXMuc2V0dGluZ3MuYXV0b1dpZHRoLCBkID0gdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKTtcbiAgICAgICAgaWYgKGMgJiYgYS5pdGVtcy5tZXJnZSkgZm9yICg7IGItLTspIGEuY3NzLndpZHRoID0gdGhpcy5fd2lkdGhzW3RoaXMucmVsYXRpdmUoYildLCBkLmVxKGIpLmNzcyhhLmNzcyk7IGVsc2UgYyAmJiAoYS5jc3Mud2lkdGggPSBhLml0ZW1zLndpZHRoLCBkLmNzcyhhLmNzcykpXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmlsdGVyOiBbXCJpdGVtc1wiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2Nvb3JkaW5hdGVzLmxlbmd0aCA8IDEgJiYgdGhpcy4kc3RhZ2UucmVtb3ZlQXR0cihcInN0eWxlXCIpXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmlsdGVyOiBbXCJ3aWR0aFwiLCBcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgYS5jdXJyZW50ID0gYS5jdXJyZW50ID8gdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5pbmRleChhLmN1cnJlbnQpIDogMCwgYS5jdXJyZW50ID0gTWF0aC5tYXgodGhpcy5taW5pbXVtKCksIE1hdGgubWluKHRoaXMubWF4aW11bSgpLCBhLmN1cnJlbnQpKSwgdGhpcy5yZXNldChhLmN1cnJlbnQpXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgZmlsdGVyOiBbXCJwb3NpdGlvblwiXSwgcnVuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYW5pbWF0ZSh0aGlzLmNvb3JkaW5hdGVzKHRoaXMuX2N1cnJlbnQpKVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGZpbHRlcjogW1wid2lkdGhcIiwgXCJwb3NpdGlvblwiLCBcIml0ZW1zXCIsIFwic2V0dGluZ3NcIl0sIHJ1bjogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYSwgYiwgYywgZCwgZSA9IHRoaXMuc2V0dGluZ3MucnRsID8gMSA6IC0xLCBmID0gMiAqIHRoaXMuc2V0dGluZ3Muc3RhZ2VQYWRkaW5nLFxuICAgICAgICAgIGcgPSB0aGlzLmNvb3JkaW5hdGVzKHRoaXMuY3VycmVudCgpKSArIGYsIGggPSBnICsgdGhpcy53aWR0aCgpICogZSwgaSA9IFtdO1xuICAgICAgICBmb3IgKGMgPSAwLCBkID0gdGhpcy5fY29vcmRpbmF0ZXMubGVuZ3RoOyBjIDwgZDsgYysrKSBhID0gdGhpcy5fY29vcmRpbmF0ZXNbYyAtIDFdIHx8IDAsIGIgPSBNYXRoLmFicyh0aGlzLl9jb29yZGluYXRlc1tjXSkgKyBmICogZSwgKHRoaXMub3AoYSwgXCI8PVwiLCBnKSAmJiB0aGlzLm9wKGEsIFwiPlwiLCBoKSB8fCB0aGlzLm9wKGIsIFwiPFwiLCBnKSAmJiB0aGlzLm9wKGIsIFwiPlwiLCBoKSkgJiYgaS5wdXNoKGMpO1xuICAgICAgICB0aGlzLiRzdGFnZS5jaGlsZHJlbihcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksIHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiOmVxKFwiICsgaS5qb2luKFwiKSwgOmVxKFwiKSArIFwiKVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSwgdGhpcy5zZXR0aW5ncy5jZW50ZXIgJiYgKHRoaXMuJHN0YWdlLmNoaWxkcmVuKFwiLmNlbnRlclwiKS5yZW1vdmVDbGFzcyhcImNlbnRlclwiKSwgdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5lcSh0aGlzLmN1cnJlbnQoKSkuYWRkQ2xhc3MoXCJjZW50ZXJcIikpXG4gICAgICB9XG4gICAgfV0sIGUucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAodGhpcy5lbnRlcihcImluaXRpYWxpemluZ1wiKSwgdGhpcy50cmlnZ2VyKFwiaW5pdGlhbGl6ZVwiKSwgdGhpcy4kZWxlbWVudC50b2dnbGVDbGFzcyh0aGlzLnNldHRpbmdzLnJ0bENsYXNzLCB0aGlzLnNldHRpbmdzLnJ0bCksIHRoaXMuc2V0dGluZ3MuYXV0b1dpZHRoICYmICF0aGlzLmlzKFwicHJlLWxvYWRpbmdcIikpIHtcbiAgICAgICAgdmFyIGIsIGMsIGU7XG4gICAgICAgIGIgPSB0aGlzLiRlbGVtZW50LmZpbmQoXCJpbWdcIiksIGMgPSB0aGlzLnNldHRpbmdzLm5lc3RlZEl0ZW1TZWxlY3RvciA/IFwiLlwiICsgdGhpcy5zZXR0aW5ncy5uZXN0ZWRJdGVtU2VsZWN0b3IgOiBkLCBlID0gdGhpcy4kZWxlbWVudC5jaGlsZHJlbihjKS53aWR0aCgpLCBiLmxlbmd0aCAmJiBlIDw9IDAgJiYgdGhpcy5wcmVsb2FkQXV0b1dpZHRoSW1hZ2VzKGIpXG4gICAgICB9XG4gICAgICB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5sb2FkaW5nQ2xhc3MpLCB0aGlzLiRzdGFnZSA9IGEoXCI8XCIgKyB0aGlzLnNldHRpbmdzLnN0YWdlRWxlbWVudCArICcgY2xhc3M9XCInICsgdGhpcy5zZXR0aW5ncy5zdGFnZUNsYXNzICsgJ1wiLz4nKS53cmFwKCc8ZGl2IGNsYXNzPVwiJyArIHRoaXMuc2V0dGluZ3Muc3RhZ2VPdXRlckNsYXNzICsgJ1wiLz4nKSwgdGhpcy4kZWxlbWVudC5hcHBlbmQodGhpcy4kc3RhZ2UucGFyZW50KCkpLCB0aGlzLnJlcGxhY2UodGhpcy4kZWxlbWVudC5jaGlsZHJlbigpLm5vdCh0aGlzLiRzdGFnZS5wYXJlbnQoKSkpLCB0aGlzLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIikgPyB0aGlzLnJlZnJlc2goKSA6IHRoaXMuaW52YWxpZGF0ZShcIndpZHRoXCIpLCB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sb2FkaW5nQ2xhc3MpLmFkZENsYXNzKHRoaXMub3B0aW9ucy5sb2FkZWRDbGFzcyksIHRoaXMucmVnaXN0ZXJFdmVudEhhbmRsZXJzKCksIHRoaXMubGVhdmUoXCJpbml0aWFsaXppbmdcIiksIHRoaXMudHJpZ2dlcihcImluaXRpYWxpemVkXCIpXG4gICAgfSwgZS5wcm90b3R5cGUuc2V0dXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYiA9IHRoaXMudmlld3BvcnQoKSwgYyA9IHRoaXMub3B0aW9ucy5yZXNwb25zaXZlLCBkID0gLTEsIGUgPSBudWxsO1xuICAgICAgYyA/IChhLmVhY2goYywgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgYSA8PSBiICYmIGEgPiBkICYmIChkID0gTnVtYmVyKGEpKVxuICAgICAgfSksIGUgPSBhLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBjW2RdKSwgXCJmdW5jdGlvblwiID09IHR5cGVvZiBlLnN0YWdlUGFkZGluZyAmJiAoZS5zdGFnZVBhZGRpbmcgPSBlLnN0YWdlUGFkZGluZygpKSwgZGVsZXRlIGUucmVzcG9uc2l2ZSwgZS5yZXNwb25zaXZlQ2xhc3MgJiYgdGhpcy4kZWxlbWVudC5hdHRyKFwiY2xhc3NcIiwgdGhpcy4kZWxlbWVudC5hdHRyKFwiY2xhc3NcIikucmVwbGFjZShuZXcgUmVnRXhwKFwiKFwiICsgdGhpcy5vcHRpb25zLnJlc3BvbnNpdmVDbGFzcyArIFwiLSlcXFxcUytcXFxcc1wiLCBcImdcIiksIFwiJDFcIiArIGQpKSkgOiBlID0gYS5leHRlbmQoe30sIHRoaXMub3B0aW9ucyksIHRoaXMudHJpZ2dlcihcImNoYW5nZVwiLCB7XG4gICAgICAgIHByb3BlcnR5OiB7XG4gICAgICAgICAgbmFtZTogXCJzZXR0aW5nc1wiLFxuICAgICAgICAgIHZhbHVlOiBlXG4gICAgICAgIH1cbiAgICAgIH0pLCB0aGlzLl9icmVha3BvaW50ID0gZCwgdGhpcy5zZXR0aW5ncyA9IGUsIHRoaXMuaW52YWxpZGF0ZShcInNldHRpbmdzXCIpLCB0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIsIHtcbiAgICAgICAgcHJvcGVydHk6IHtcbiAgICAgICAgICBuYW1lOiBcInNldHRpbmdzXCIsXG4gICAgICAgICAgdmFsdWU6IHRoaXMuc2V0dGluZ3NcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LCBlLnByb3RvdHlwZS5vcHRpb25zTG9naWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLnNldHRpbmdzLmF1dG9XaWR0aCAmJiAodGhpcy5zZXR0aW5ncy5zdGFnZVBhZGRpbmcgPSAhMSwgdGhpcy5zZXR0aW5ncy5tZXJnZSA9ICExKVxuICAgIH0sIGUucHJvdG90eXBlLnByZXBhcmUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdmFyIGMgPSB0aGlzLnRyaWdnZXIoXCJwcmVwYXJlXCIsIHtjb250ZW50OiBifSk7XG4gICAgICByZXR1cm4gYy5kYXRhIHx8IChjLmRhdGEgPSBhKFwiPFwiICsgdGhpcy5zZXR0aW5ncy5pdGVtRWxlbWVudCArIFwiLz5cIikuYWRkQ2xhc3ModGhpcy5vcHRpb25zLml0ZW1DbGFzcykuYXBwZW5kKGIpKSwgdGhpcy50cmlnZ2VyKFwicHJlcGFyZWRcIiwge2NvbnRlbnQ6IGMuZGF0YX0pLCBjLmRhdGFcbiAgICB9LCBlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBiID0gMCwgYyA9IHRoaXMuX3BpcGUubGVuZ3RoLCBkID0gYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gdGhpc1thXVxuICAgICAgfSwgdGhpcy5faW52YWxpZGF0ZWQpLCBlID0ge307IGIgPCBjOykgKHRoaXMuX2ludmFsaWRhdGVkLmFsbCB8fCBhLmdyZXAodGhpcy5fcGlwZVtiXS5maWx0ZXIsIGQpLmxlbmd0aCA+IDApICYmIHRoaXMuX3BpcGVbYl0ucnVuKGUpLCBiKys7XG4gICAgICB0aGlzLl9pbnZhbGlkYXRlZCA9IHt9LCAhdGhpcy5pcyhcInZhbGlkXCIpICYmIHRoaXMuZW50ZXIoXCJ2YWxpZFwiKVxuICAgIH0sIGUucHJvdG90eXBlLndpZHRoID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHN3aXRjaCAoYSA9IGEgfHwgZS5XaWR0aC5EZWZhdWx0KSB7XG4gICAgICAgIGNhc2UgZS5XaWR0aC5Jbm5lcjpcbiAgICAgICAgY2FzZSBlLldpZHRoLk91dGVyOlxuICAgICAgICAgIHJldHVybiB0aGlzLl93aWR0aDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gdGhpcy5fd2lkdGggLSAyICogdGhpcy5zZXR0aW5ncy5zdGFnZVBhZGRpbmcgKyB0aGlzLnNldHRpbmdzLm1hcmdpblxuICAgICAgfVxuICAgIH0sIGUucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmVudGVyKFwicmVmcmVzaGluZ1wiKSwgdGhpcy50cmlnZ2VyKFwicmVmcmVzaFwiKSwgdGhpcy5zZXR1cCgpLCB0aGlzLm9wdGlvbnNMb2dpYygpLCB0aGlzLiRlbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5yZWZyZXNoQ2xhc3MpLCB0aGlzLnVwZGF0ZSgpLCB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5yZWZyZXNoQ2xhc3MpLCB0aGlzLmxlYXZlKFwicmVmcmVzaGluZ1wiKSwgdGhpcy50cmlnZ2VyKFwicmVmcmVzaGVkXCIpXG4gICAgfSwgZS5wcm90b3R5cGUub25UaHJvdHRsZWRSZXNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBiLmNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVyKSwgdGhpcy5yZXNpemVUaW1lciA9IGIuc2V0VGltZW91dCh0aGlzLl9oYW5kbGVycy5vblJlc2l6ZSwgdGhpcy5zZXR0aW5ncy5yZXNwb25zaXZlUmVmcmVzaFJhdGUpXG4gICAgfSwgZS5wcm90b3R5cGUub25SZXNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLl9pdGVtcy5sZW5ndGggJiYgKHRoaXMuX3dpZHRoICE9PSB0aGlzLiRlbGVtZW50LndpZHRoKCkgJiYgKCEhdGhpcy4kZWxlbWVudC5pcyhcIjp2aXNpYmxlXCIpICYmICh0aGlzLmVudGVyKFwicmVzaXppbmdcIiksIHRoaXMudHJpZ2dlcihcInJlc2l6ZVwiKS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSA/ICh0aGlzLmxlYXZlKFwicmVzaXppbmdcIiksICExKSA6ICh0aGlzLmludmFsaWRhdGUoXCJ3aWR0aFwiKSwgdGhpcy5yZWZyZXNoKCksIHRoaXMubGVhdmUoXCJyZXNpemluZ1wiKSwgdm9pZCB0aGlzLnRyaWdnZXIoXCJyZXNpemVkXCIpKSkpKVxuICAgIH0sIGUucHJvdG90eXBlLnJlZ2lzdGVyRXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGEuc3VwcG9ydC50cmFuc2l0aW9uICYmIHRoaXMuJHN0YWdlLm9uKGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCArIFwiLm93bC5jb3JlXCIsIGEucHJveHkodGhpcy5vblRyYW5zaXRpb25FbmQsIHRoaXMpKSwgdGhpcy5zZXR0aW5ncy5yZXNwb25zaXZlICE9PSAhMSAmJiB0aGlzLm9uKGIsIFwicmVzaXplXCIsIHRoaXMuX2hhbmRsZXJzLm9uVGhyb3R0bGVkUmVzaXplKSwgdGhpcy5zZXR0aW5ncy5tb3VzZURyYWcgJiYgKHRoaXMuJGVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmRyYWdDbGFzcyksIHRoaXMuJHN0YWdlLm9uKFwibW91c2Vkb3duLm93bC5jb3JlXCIsIGEucHJveHkodGhpcy5vbkRyYWdTdGFydCwgdGhpcykpLCB0aGlzLiRzdGFnZS5vbihcImRyYWdzdGFydC5vd2wuY29yZSBzZWxlY3RzdGFydC5vd2wuY29yZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAhMVxuICAgICAgfSkpLCB0aGlzLnNldHRpbmdzLnRvdWNoRHJhZyAmJiAodGhpcy4kc3RhZ2Uub24oXCJ0b3VjaHN0YXJ0Lm93bC5jb3JlXCIsIGEucHJveHkodGhpcy5vbkRyYWdTdGFydCwgdGhpcykpLCB0aGlzLiRzdGFnZS5vbihcInRvdWNoY2FuY2VsLm93bC5jb3JlXCIsIGEucHJveHkodGhpcy5vbkRyYWdFbmQsIHRoaXMpKSlcbiAgICB9LCBlLnByb3RvdHlwZS5vbkRyYWdTdGFydCA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB2YXIgZCA9IG51bGw7XG4gICAgICAzICE9PSBiLndoaWNoICYmIChhLnN1cHBvcnQudHJhbnNmb3JtID8gKGQgPSB0aGlzLiRzdGFnZS5jc3MoXCJ0cmFuc2Zvcm1cIikucmVwbGFjZSgvLipcXCh8XFwpfCAvZywgXCJcIikuc3BsaXQoXCIsXCIpLCBkID0ge1xuICAgICAgICB4OiBkWzE2ID09PSBkLmxlbmd0aCA/IDEyIDogNF0sXG4gICAgICAgIHk6IGRbMTYgPT09IGQubGVuZ3RoID8gMTMgOiA1XVxuICAgICAgfSkgOiAoZCA9IHRoaXMuJHN0YWdlLnBvc2l0aW9uKCksIGQgPSB7XG4gICAgICAgIHg6IHRoaXMuc2V0dGluZ3MucnRsID8gZC5sZWZ0ICsgdGhpcy4kc3RhZ2Uud2lkdGgoKSAtIHRoaXMud2lkdGgoKSArIHRoaXMuc2V0dGluZ3MubWFyZ2luIDogZC5sZWZ0LFxuICAgICAgICB5OiBkLnRvcFxuICAgICAgfSksIHRoaXMuaXMoXCJhbmltYXRpbmdcIikgJiYgKGEuc3VwcG9ydC50cmFuc2Zvcm0gPyB0aGlzLmFuaW1hdGUoZC54KSA6IHRoaXMuJHN0YWdlLnN0b3AoKSwgdGhpcy5pbnZhbGlkYXRlKFwicG9zaXRpb25cIikpLCB0aGlzLiRlbGVtZW50LnRvZ2dsZUNsYXNzKHRoaXMub3B0aW9ucy5ncmFiQ2xhc3MsIFwibW91c2Vkb3duXCIgPT09IGIudHlwZSksIHRoaXMuc3BlZWQoMCksIHRoaXMuX2RyYWcudGltZSA9IChuZXcgRGF0ZSkuZ2V0VGltZSgpLCB0aGlzLl9kcmFnLnRhcmdldCA9IGEoYi50YXJnZXQpLCB0aGlzLl9kcmFnLnN0YWdlLnN0YXJ0ID0gZCwgdGhpcy5fZHJhZy5zdGFnZS5jdXJyZW50ID0gZCwgdGhpcy5fZHJhZy5wb2ludGVyID0gdGhpcy5wb2ludGVyKGIpLCBhKGMpLm9uKFwibW91c2V1cC5vd2wuY29yZSB0b3VjaGVuZC5vd2wuY29yZVwiLCBhLnByb3h5KHRoaXMub25EcmFnRW5kLCB0aGlzKSksIGEoYykub25lKFwibW91c2Vtb3ZlLm93bC5jb3JlIHRvdWNobW92ZS5vd2wuY29yZVwiLCBhLnByb3h5KGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHZhciBkID0gdGhpcy5kaWZmZXJlbmNlKHRoaXMuX2RyYWcucG9pbnRlciwgdGhpcy5wb2ludGVyKGIpKTtcbiAgICAgICAgYShjKS5vbihcIm1vdXNlbW92ZS5vd2wuY29yZSB0b3VjaG1vdmUub3dsLmNvcmVcIiwgYS5wcm94eSh0aGlzLm9uRHJhZ01vdmUsIHRoaXMpKSwgTWF0aC5hYnMoZC54KSA8IE1hdGguYWJzKGQueSkgJiYgdGhpcy5pcyhcInZhbGlkXCIpIHx8IChiLnByZXZlbnREZWZhdWx0KCksIHRoaXMuZW50ZXIoXCJkcmFnZ2luZ1wiKSwgdGhpcy50cmlnZ2VyKFwiZHJhZ1wiKSlcbiAgICAgIH0sIHRoaXMpKSlcbiAgICB9LCBlLnByb3RvdHlwZS5vbkRyYWdNb3ZlID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHZhciBiID0gbnVsbCwgYyA9IG51bGwsIGQgPSBudWxsLCBlID0gdGhpcy5kaWZmZXJlbmNlKHRoaXMuX2RyYWcucG9pbnRlciwgdGhpcy5wb2ludGVyKGEpKSxcbiAgICAgICAgZiA9IHRoaXMuZGlmZmVyZW5jZSh0aGlzLl9kcmFnLnN0YWdlLnN0YXJ0LCBlKTtcbiAgICAgIHRoaXMuaXMoXCJkcmFnZ2luZ1wiKSAmJiAoYS5wcmV2ZW50RGVmYXVsdCgpLCB0aGlzLnNldHRpbmdzLmxvb3AgPyAoYiA9IHRoaXMuY29vcmRpbmF0ZXModGhpcy5taW5pbXVtKCkpLCBjID0gdGhpcy5jb29yZGluYXRlcyh0aGlzLm1heGltdW0oKSArIDEpIC0gYiwgZi54ID0gKChmLnggLSBiKSAlIGMgKyBjKSAlIGMgKyBiKSA6IChiID0gdGhpcy5zZXR0aW5ncy5ydGwgPyB0aGlzLmNvb3JkaW5hdGVzKHRoaXMubWF4aW11bSgpKSA6IHRoaXMuY29vcmRpbmF0ZXModGhpcy5taW5pbXVtKCkpLCBjID0gdGhpcy5zZXR0aW5ncy5ydGwgPyB0aGlzLmNvb3JkaW5hdGVzKHRoaXMubWluaW11bSgpKSA6IHRoaXMuY29vcmRpbmF0ZXModGhpcy5tYXhpbXVtKCkpLCBkID0gdGhpcy5zZXR0aW5ncy5wdWxsRHJhZyA/IC0xICogZS54IC8gNSA6IDAsIGYueCA9IE1hdGgubWF4KE1hdGgubWluKGYueCwgYiArIGQpLCBjICsgZCkpLCB0aGlzLl9kcmFnLnN0YWdlLmN1cnJlbnQgPSBmLCB0aGlzLmFuaW1hdGUoZi54KSlcbiAgICB9LCBlLnByb3RvdHlwZS5vbkRyYWdFbmQgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdmFyIGQgPSB0aGlzLmRpZmZlcmVuY2UodGhpcy5fZHJhZy5wb2ludGVyLCB0aGlzLnBvaW50ZXIoYikpLCBlID0gdGhpcy5fZHJhZy5zdGFnZS5jdXJyZW50LFxuICAgICAgICBmID0gZC54ID4gMCBeIHRoaXMuc2V0dGluZ3MucnRsID8gXCJsZWZ0XCIgOiBcInJpZ2h0XCI7XG4gICAgICBhKGMpLm9mZihcIi5vd2wuY29yZVwiKSwgdGhpcy4kZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZ3JhYkNsYXNzKSwgKDAgIT09IGQueCAmJiB0aGlzLmlzKFwiZHJhZ2dpbmdcIikgfHwgIXRoaXMuaXMoXCJ2YWxpZFwiKSkgJiYgKHRoaXMuc3BlZWQodGhpcy5zZXR0aW5ncy5kcmFnRW5kU3BlZWQgfHwgdGhpcy5zZXR0aW5ncy5zbWFydFNwZWVkKSwgdGhpcy5jdXJyZW50KHRoaXMuY2xvc2VzdChlLngsIDAgIT09IGQueCA/IGYgOiB0aGlzLl9kcmFnLmRpcmVjdGlvbikpLCB0aGlzLmludmFsaWRhdGUoXCJwb3NpdGlvblwiKSwgdGhpcy51cGRhdGUoKSwgdGhpcy5fZHJhZy5kaXJlY3Rpb24gPSBmLCAoTWF0aC5hYnMoZC54KSA+IDMgfHwgKG5ldyBEYXRlKS5nZXRUaW1lKCkgLSB0aGlzLl9kcmFnLnRpbWUgPiAzMDApICYmIHRoaXMuX2RyYWcudGFyZ2V0Lm9uZShcImNsaWNrLm93bC5jb3JlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICExXG4gICAgICB9KSksIHRoaXMuaXMoXCJkcmFnZ2luZ1wiKSAmJiAodGhpcy5sZWF2ZShcImRyYWdnaW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJkcmFnZ2VkXCIpKVxuICAgIH0sIGUucHJvdG90eXBlLmNsb3Nlc3QgPSBmdW5jdGlvbiAoYiwgYykge1xuICAgICAgdmFyIGQgPSAtMSwgZSA9IDMwLCBmID0gdGhpcy53aWR0aCgpLCBnID0gdGhpcy5jb29yZGluYXRlcygpO1xuICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuZnJlZURyYWcgfHwgYS5lYWNoKGcsIGEucHJveHkoZnVuY3Rpb24gKGEsIGgpIHtcbiAgICAgICAgcmV0dXJuIFwibGVmdFwiID09PSBjICYmIGIgPiBoIC0gZSAmJiBiIDwgaCArIGUgPyBkID0gYSA6IFwicmlnaHRcIiA9PT0gYyAmJiBiID4gaCAtIGYgLSBlICYmIGIgPCBoIC0gZiArIGUgPyBkID0gYSArIDEgOiB0aGlzLm9wKGIsIFwiPFwiLCBoKSAmJiB0aGlzLm9wKGIsIFwiPlwiLCBnW2EgKyAxXSB8fCBoIC0gZikgJiYgKGQgPSBcImxlZnRcIiA9PT0gYyA/IGEgKyAxIDogYSksIGQgPT09IC0xXG4gICAgICB9LCB0aGlzKSksIHRoaXMuc2V0dGluZ3MubG9vcCB8fCAodGhpcy5vcChiLCBcIj5cIiwgZ1t0aGlzLm1pbmltdW0oKV0pID8gZCA9IGIgPSB0aGlzLm1pbmltdW0oKSA6IHRoaXMub3AoYiwgXCI8XCIsIGdbdGhpcy5tYXhpbXVtKCldKSAmJiAoZCA9IGIgPSB0aGlzLm1heGltdW0oKSkpLCBkXG4gICAgfSwgZS5wcm90b3R5cGUuYW5pbWF0ZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB2YXIgYyA9IHRoaXMuc3BlZWQoKSA+IDA7XG4gICAgICB0aGlzLmlzKFwiYW5pbWF0aW5nXCIpICYmIHRoaXMub25UcmFuc2l0aW9uRW5kKCksIGMgJiYgKHRoaXMuZW50ZXIoXCJhbmltYXRpbmdcIiksIHRoaXMudHJpZ2dlcihcInRyYW5zbGF0ZVwiKSksIGEuc3VwcG9ydC50cmFuc2Zvcm0zZCAmJiBhLnN1cHBvcnQudHJhbnNpdGlvbiA/IHRoaXMuJHN0YWdlLmNzcyh7XG4gICAgICAgIHRyYW5zZm9ybTogXCJ0cmFuc2xhdGUzZChcIiArIGIgKyBcInB4LDBweCwwcHgpXCIsXG4gICAgICAgIHRyYW5zaXRpb246IHRoaXMuc3BlZWQoKSAvIDFlMyArIFwic1wiXG4gICAgICB9KSA6IGMgPyB0aGlzLiRzdGFnZS5hbmltYXRlKHtsZWZ0OiBiICsgXCJweFwifSwgdGhpcy5zcGVlZCgpLCB0aGlzLnNldHRpbmdzLmZhbGxiYWNrRWFzaW5nLCBhLnByb3h5KHRoaXMub25UcmFuc2l0aW9uRW5kLCB0aGlzKSkgOiB0aGlzLiRzdGFnZS5jc3Moe2xlZnQ6IGIgKyBcInB4XCJ9KVxuICAgIH0sIGUucHJvdG90eXBlLmlzID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zdGF0ZXMuY3VycmVudFthXSAmJiB0aGlzLl9zdGF0ZXMuY3VycmVudFthXSA+IDBcbiAgICB9LCBlLnByb3RvdHlwZS5jdXJyZW50ID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIGlmIChhID09PSBkKSByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgICAgIGlmICgwID09PSB0aGlzLl9pdGVtcy5sZW5ndGgpIHJldHVybiBkO1xuICAgICAgaWYgKGEgPSB0aGlzLm5vcm1hbGl6ZShhKSwgdGhpcy5fY3VycmVudCAhPT0gYSkge1xuICAgICAgICB2YXIgYiA9IHRoaXMudHJpZ2dlcihcImNoYW5nZVwiLCB7cHJvcGVydHk6IHtuYW1lOiBcInBvc2l0aW9uXCIsIHZhbHVlOiBhfX0pO1xuICAgICAgICBiLmRhdGEgIT09IGQgJiYgKGEgPSB0aGlzLm5vcm1hbGl6ZShiLmRhdGEpKSwgdGhpcy5fY3VycmVudCA9IGEsIHRoaXMuaW52YWxpZGF0ZShcInBvc2l0aW9uXCIpLCB0aGlzLnRyaWdnZXIoXCJjaGFuZ2VkXCIsIHtcbiAgICAgICAgICBwcm9wZXJ0eToge1xuICAgICAgICAgICAgbmFtZTogXCJwb3NpdGlvblwiLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2N1cnJlbnRcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fY3VycmVudFxuICAgIH0sIGUucHJvdG90eXBlLmludmFsaWRhdGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCIgPT09IGEudHlwZShiKSAmJiAodGhpcy5faW52YWxpZGF0ZWRbYl0gPSAhMCwgdGhpcy5pcyhcInZhbGlkXCIpICYmIHRoaXMubGVhdmUoXCJ2YWxpZFwiKSksIGEubWFwKHRoaXMuX2ludmFsaWRhdGVkLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYlxuICAgICAgfSlcbiAgICB9LCBlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICBhID0gdGhpcy5ub3JtYWxpemUoYSksIGEgIT09IGQgJiYgKHRoaXMuX3NwZWVkID0gMCwgdGhpcy5fY3VycmVudCA9IGEsIHRoaXMuc3VwcHJlc3MoW1widHJhbnNsYXRlXCIsIFwidHJhbnNsYXRlZFwiXSksIHRoaXMuYW5pbWF0ZSh0aGlzLmNvb3JkaW5hdGVzKGEpKSwgdGhpcy5yZWxlYXNlKFtcInRyYW5zbGF0ZVwiLCBcInRyYW5zbGF0ZWRcIl0pKVxuICAgIH0sIGUucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICB2YXIgYyA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgZSA9IGIgPyAwIDogdGhpcy5fY2xvbmVzLmxlbmd0aDtcbiAgICAgIHJldHVybiAhdGhpcy5pc051bWVyaWMoYSkgfHwgYyA8IDEgPyBhID0gZCA6IChhIDwgMCB8fCBhID49IGMgKyBlKSAmJiAoYSA9ICgoYSAtIGUgLyAyKSAlIGMgKyBjKSAlIGMgKyBlIC8gMiksIGFcbiAgICB9LCBlLnByb3RvdHlwZS5yZWxhdGl2ZSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gYSAtPSB0aGlzLl9jbG9uZXMubGVuZ3RoIC8gMiwgdGhpcy5ub3JtYWxpemUoYSwgITApXG4gICAgfSwgZS5wcm90b3R5cGUubWF4aW11bSA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICB2YXIgYiwgYywgZCwgZSA9IHRoaXMuc2V0dGluZ3MsIGYgPSB0aGlzLl9jb29yZGluYXRlcy5sZW5ndGg7XG4gICAgICBpZiAoZS5sb29wKSBmID0gdGhpcy5fY2xvbmVzLmxlbmd0aCAvIDIgKyB0aGlzLl9pdGVtcy5sZW5ndGggLSAxOyBlbHNlIGlmIChlLmF1dG9XaWR0aCB8fCBlLm1lcmdlKSB7XG4gICAgICAgIGZvciAoYiA9IHRoaXMuX2l0ZW1zLmxlbmd0aCwgYyA9IHRoaXMuX2l0ZW1zWy0tYl0ud2lkdGgoKSwgZCA9IHRoaXMuJGVsZW1lbnQud2lkdGgoKTsgYi0tICYmIChjICs9IHRoaXMuX2l0ZW1zW2JdLndpZHRoKCkgKyB0aGlzLnNldHRpbmdzLm1hcmdpbiwgIShjID4gZCkpOykgO1xuICAgICAgICBmID0gYiArIDFcbiAgICAgIH0gZWxzZSBmID0gZS5jZW50ZXIgPyB0aGlzLl9pdGVtcy5sZW5ndGggLSAxIDogdGhpcy5faXRlbXMubGVuZ3RoIC0gZS5pdGVtcztcbiAgICAgIHJldHVybiBhICYmIChmIC09IHRoaXMuX2Nsb25lcy5sZW5ndGggLyAyKSwgTWF0aC5tYXgoZiwgMClcbiAgICB9LCBlLnByb3RvdHlwZS5taW5pbXVtID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBhID8gMCA6IHRoaXMuX2Nsb25lcy5sZW5ndGggLyAyXG4gICAgfSwgZS5wcm90b3R5cGUuaXRlbXMgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGEgPT09IGQgPyB0aGlzLl9pdGVtcy5zbGljZSgpIDogKGEgPSB0aGlzLm5vcm1hbGl6ZShhLCAhMCksIHRoaXMuX2l0ZW1zW2FdKVxuICAgIH0sIGUucHJvdG90eXBlLm1lcmdlcnMgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGEgPT09IGQgPyB0aGlzLl9tZXJnZXJzLnNsaWNlKCkgOiAoYSA9IHRoaXMubm9ybWFsaXplKGEsICEwKSwgdGhpcy5fbWVyZ2Vyc1thXSlcbiAgICB9LCBlLnByb3RvdHlwZS5jbG9uZXMgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdmFyIGMgPSB0aGlzLl9jbG9uZXMubGVuZ3RoIC8gMiwgZSA9IGMgKyB0aGlzLl9pdGVtcy5sZW5ndGgsIGYgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gYSAlIDIgPT09IDAgPyBlICsgYSAvIDIgOiBjIC0gKGEgKyAxKSAvIDJcbiAgICAgIH07XG4gICAgICByZXR1cm4gYiA9PT0gZCA/IGEubWFwKHRoaXMuX2Nsb25lcywgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGYoYilcbiAgICAgIH0pIDogYS5tYXAodGhpcy5fY2xvbmVzLCBmdW5jdGlvbiAoYSwgYykge1xuICAgICAgICByZXR1cm4gYSA9PT0gYiA/IGYoYykgOiBudWxsXG4gICAgICB9KVxuICAgIH0sIGUucHJvdG90eXBlLnNwZWVkID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBhICE9PSBkICYmICh0aGlzLl9zcGVlZCA9IGEpLCB0aGlzLl9zcGVlZFxuICAgIH0sIGUucHJvdG90eXBlLmNvb3JkaW5hdGVzID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIHZhciBjLCBlID0gMSwgZiA9IGIgLSAxO1xuICAgICAgcmV0dXJuIGIgPT09IGQgPyBhLm1hcCh0aGlzLl9jb29yZGluYXRlcywgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gdGhpcy5jb29yZGluYXRlcyhiKVxuICAgICAgfSwgdGhpcykpIDogKHRoaXMuc2V0dGluZ3MuY2VudGVyID8gKHRoaXMuc2V0dGluZ3MucnRsICYmIChlID0gLTEsIGYgPSBiICsgMSksIGMgPSB0aGlzLl9jb29yZGluYXRlc1tiXSwgYyArPSAodGhpcy53aWR0aCgpIC0gYyArICh0aGlzLl9jb29yZGluYXRlc1tmXSB8fCAwKSkgLyAyICogZSkgOiBjID0gdGhpcy5fY29vcmRpbmF0ZXNbZl0gfHwgMCwgYyA9IE1hdGguY2VpbChjKSlcbiAgICB9LCBlLnByb3RvdHlwZS5kdXJhdGlvbiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gMCA9PT0gYyA/IDAgOiBNYXRoLm1pbihNYXRoLm1heChNYXRoLmFicyhiIC0gYSksIDEpLCA2KSAqIE1hdGguYWJzKGMgfHwgdGhpcy5zZXR0aW5ncy5zbWFydFNwZWVkKVxuICAgIH0sIGUucHJvdG90eXBlLnRvID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHZhciBjID0gdGhpcy5jdXJyZW50KCksIGQgPSBudWxsLCBlID0gYSAtIHRoaXMucmVsYXRpdmUoYyksIGYgPSAoZSA+IDApIC0gKGUgPCAwKSwgZyA9IHRoaXMuX2l0ZW1zLmxlbmd0aCxcbiAgICAgICAgaCA9IHRoaXMubWluaW11bSgpLCBpID0gdGhpcy5tYXhpbXVtKCk7XG4gICAgICB0aGlzLnNldHRpbmdzLmxvb3AgPyAoIXRoaXMuc2V0dGluZ3MucmV3aW5kICYmIE1hdGguYWJzKGUpID4gZyAvIDIgJiYgKGUgKz0gZiAqIC0xICogZyksIGEgPSBjICsgZSwgZCA9ICgoYSAtIGgpICUgZyArIGcpICUgZyArIGgsIGQgIT09IGEgJiYgZCAtIGUgPD0gaSAmJiBkIC0gZSA+IDAgJiYgKGMgPSBkIC0gZSwgYSA9IGQsIHRoaXMucmVzZXQoYykpKSA6IHRoaXMuc2V0dGluZ3MucmV3aW5kID8gKGkgKz0gMSwgYSA9IChhICUgaSArIGkpICUgaSkgOiBhID0gTWF0aC5tYXgoaCwgTWF0aC5taW4oaSwgYSkpLCB0aGlzLnNwZWVkKHRoaXMuZHVyYXRpb24oYywgYSwgYikpLCB0aGlzLmN1cnJlbnQoYSksIHRoaXMuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSAmJiB0aGlzLnVwZGF0ZSgpXG4gICAgfSwgZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICBhID0gYSB8fCAhMSwgdGhpcy50byh0aGlzLnJlbGF0aXZlKHRoaXMuY3VycmVudCgpKSArIDEsIGEpXG4gICAgfSwgZS5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICBhID0gYSB8fCAhMSwgdGhpcy50byh0aGlzLnJlbGF0aXZlKHRoaXMuY3VycmVudCgpKSAtIDEsIGEpXG4gICAgfSwgZS5wcm90b3R5cGUub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIGlmIChhICE9PSBkICYmIChhLnN0b3BQcm9wYWdhdGlvbigpLCAoYS50YXJnZXQgfHwgYS5zcmNFbGVtZW50IHx8IGEub3JpZ2luYWxUYXJnZXQpICE9PSB0aGlzLiRzdGFnZS5nZXQoMCkpKSByZXR1cm4gITE7XG4gICAgICB0aGlzLmxlYXZlKFwiYW5pbWF0aW5nXCIpLCB0aGlzLnRyaWdnZXIoXCJ0cmFuc2xhdGVkXCIpXG4gICAgfSwgZS5wcm90b3R5cGUudmlld3BvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZDtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucmVzcG9uc2l2ZUJhc2VFbGVtZW50ICE9PSBiID8gZCA9IGEodGhpcy5vcHRpb25zLnJlc3BvbnNpdmVCYXNlRWxlbWVudCkud2lkdGgoKSA6IGIuaW5uZXJXaWR0aCA/IGQgPSBiLmlubmVyV2lkdGggOiBjLmRvY3VtZW50RWxlbWVudCAmJiBjLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA/IGQgPSBjLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA6IGNvbnNvbGUud2FybihcIkNhbiBub3QgZGV0ZWN0IHZpZXdwb3J0IHdpZHRoLlwiKSwgZFxuICAgIH0sIGUucHJvdG90eXBlLnJlcGxhY2UgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdGhpcy4kc3RhZ2UuZW1wdHkoKSwgdGhpcy5faXRlbXMgPSBbXSwgYiAmJiAoYiA9IGIgaW5zdGFuY2VvZiBqUXVlcnkgPyBiIDogYShiKSksIHRoaXMuc2V0dGluZ3MubmVzdGVkSXRlbVNlbGVjdG9yICYmIChiID0gYi5maW5kKFwiLlwiICsgdGhpcy5zZXR0aW5ncy5uZXN0ZWRJdGVtU2VsZWN0b3IpKSwgYi5maWx0ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gMSA9PT0gdGhpcy5ub2RlVHlwZVxuICAgICAgfSkuZWFjaChhLnByb3h5KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIGIgPSB0aGlzLnByZXBhcmUoYiksIHRoaXMuJHN0YWdlLmFwcGVuZChiKSwgdGhpcy5faXRlbXMucHVzaChiKSwgdGhpcy5fbWVyZ2Vycy5wdXNoKDEgKiBiLmZpbmQoXCJbZGF0YS1tZXJnZV1cIikuYWRkQmFjayhcIltkYXRhLW1lcmdlXVwiKS5hdHRyKFwiZGF0YS1tZXJnZVwiKSB8fCAxKVxuICAgICAgfSwgdGhpcykpLCB0aGlzLnJlc2V0KHRoaXMuaXNOdW1lcmljKHRoaXMuc2V0dGluZ3Muc3RhcnRQb3NpdGlvbikgPyB0aGlzLnNldHRpbmdzLnN0YXJ0UG9zaXRpb24gOiAwKSwgdGhpcy5pbnZhbGlkYXRlKFwiaXRlbXNcIilcbiAgICB9LCBlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoYiwgYykge1xuICAgICAgdmFyIGUgPSB0aGlzLnJlbGF0aXZlKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgYyA9IGMgPT09IGQgPyB0aGlzLl9pdGVtcy5sZW5ndGggOiB0aGlzLm5vcm1hbGl6ZShjLCAhMCksIGIgPSBiIGluc3RhbmNlb2YgalF1ZXJ5ID8gYiA6IGEoYiksIHRoaXMudHJpZ2dlcihcImFkZFwiLCB7XG4gICAgICAgIGNvbnRlbnQ6IGIsXG4gICAgICAgIHBvc2l0aW9uOiBjXG4gICAgICB9KSwgYiA9IHRoaXMucHJlcGFyZShiKSwgMCA9PT0gdGhpcy5faXRlbXMubGVuZ3RoIHx8IGMgPT09IHRoaXMuX2l0ZW1zLmxlbmd0aCA/ICgwID09PSB0aGlzLl9pdGVtcy5sZW5ndGggJiYgdGhpcy4kc3RhZ2UuYXBwZW5kKGIpLCAwICE9PSB0aGlzLl9pdGVtcy5sZW5ndGggJiYgdGhpcy5faXRlbXNbYyAtIDFdLmFmdGVyKGIpLCB0aGlzLl9pdGVtcy5wdXNoKGIpLCB0aGlzLl9tZXJnZXJzLnB1c2goMSAqIGIuZmluZChcIltkYXRhLW1lcmdlXVwiKS5hZGRCYWNrKFwiW2RhdGEtbWVyZ2VdXCIpLmF0dHIoXCJkYXRhLW1lcmdlXCIpIHx8IDEpKSA6ICh0aGlzLl9pdGVtc1tjXS5iZWZvcmUoYiksIHRoaXMuX2l0ZW1zLnNwbGljZShjLCAwLCBiKSwgdGhpcy5fbWVyZ2Vycy5zcGxpY2UoYywgMCwgMSAqIGIuZmluZChcIltkYXRhLW1lcmdlXVwiKS5hZGRCYWNrKFwiW2RhdGEtbWVyZ2VdXCIpLmF0dHIoXCJkYXRhLW1lcmdlXCIpIHx8IDEpKSwgdGhpcy5faXRlbXNbZV0gJiYgdGhpcy5yZXNldCh0aGlzLl9pdGVtc1tlXS5pbmRleCgpKSwgdGhpcy5pbnZhbGlkYXRlKFwiaXRlbXNcIiksIHRoaXMudHJpZ2dlcihcImFkZGVkXCIsIHtcbiAgICAgICAgY29udGVudDogYixcbiAgICAgICAgcG9zaXRpb246IGNcbiAgICAgIH0pXG4gICAgfSwgZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGEpIHtcbiAgICAgIGEgPSB0aGlzLm5vcm1hbGl6ZShhLCAhMCksIGEgIT09IGQgJiYgKHRoaXMudHJpZ2dlcihcInJlbW92ZVwiLCB7XG4gICAgICAgIGNvbnRlbnQ6IHRoaXMuX2l0ZW1zW2FdLFxuICAgICAgICBwb3NpdGlvbjogYVxuICAgICAgfSksIHRoaXMuX2l0ZW1zW2FdLnJlbW92ZSgpLCB0aGlzLl9pdGVtcy5zcGxpY2UoYSwgMSksIHRoaXMuX21lcmdlcnMuc3BsaWNlKGEsIDEpLCB0aGlzLmludmFsaWRhdGUoXCJpdGVtc1wiKSwgdGhpcy50cmlnZ2VyKFwicmVtb3ZlZFwiLCB7XG4gICAgICAgIGNvbnRlbnQ6IG51bGwsXG4gICAgICAgIHBvc2l0aW9uOiBhXG4gICAgICB9KSlcbiAgICB9LCBlLnByb3RvdHlwZS5wcmVsb2FkQXV0b1dpZHRoSW1hZ2VzID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIGIuZWFjaChhLnByb3h5KGZ1bmN0aW9uIChiLCBjKSB7XG4gICAgICAgIHRoaXMuZW50ZXIoXCJwcmUtbG9hZGluZ1wiKSwgYyA9IGEoYyksIGEobmV3IEltYWdlKS5vbmUoXCJsb2FkXCIsIGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICBjLmF0dHIoXCJzcmNcIiwgYS50YXJnZXQuc3JjKSwgYy5jc3MoXCJvcGFjaXR5XCIsIDEpLCB0aGlzLmxlYXZlKFwicHJlLWxvYWRpbmdcIiksICF0aGlzLmlzKFwicHJlLWxvYWRpbmdcIikgJiYgIXRoaXMuaXMoXCJpbml0aWFsaXppbmdcIikgJiYgdGhpcy5yZWZyZXNoKClcbiAgICAgICAgfSwgdGhpcykpLmF0dHIoXCJzcmNcIiwgYy5hdHRyKFwic3JjXCIpIHx8IGMuYXR0cihcImRhdGEtc3JjXCIpIHx8IGMuYXR0cihcImRhdGEtc3JjLXJldGluYVwiKSlcbiAgICAgIH0sIHRoaXMpKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLiRlbGVtZW50Lm9mZihcIi5vd2wuY29yZVwiKSwgdGhpcy4kc3RhZ2Uub2ZmKFwiLm93bC5jb3JlXCIpLCBhKGMpLm9mZihcIi5vd2wuY29yZVwiKSwgdGhpcy5zZXR0aW5ncy5yZXNwb25zaXZlICE9PSAhMSAmJiAoYi5jbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lciksIHRoaXMub2ZmKGIsIFwicmVzaXplXCIsIHRoaXMuX2hhbmRsZXJzLm9uVGhyb3R0bGVkUmVzaXplKSk7XG4gICAgICBmb3IgKHZhciBkIGluIHRoaXMuX3BsdWdpbnMpIHRoaXMuX3BsdWdpbnNbZF0uZGVzdHJveSgpO1xuICAgICAgdGhpcy4kc3RhZ2UuY2hpbGRyZW4oXCIuY2xvbmVkXCIpLnJlbW92ZSgpLCB0aGlzLiRzdGFnZS51bndyYXAoKSwgdGhpcy4kc3RhZ2UuY2hpbGRyZW4oKS5jb250ZW50cygpLnVud3JhcCgpLCB0aGlzLiRzdGFnZS5jaGlsZHJlbigpLnVud3JhcCgpLCB0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5yZWZyZXNoQ2xhc3MpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sb2FkaW5nQ2xhc3MpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5sb2FkZWRDbGFzcykucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLnJ0bENsYXNzKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZHJhZ0NsYXNzKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZ3JhYkNsYXNzKS5hdHRyKFwiY2xhc3NcIiwgdGhpcy4kZWxlbWVudC5hdHRyKFwiY2xhc3NcIikucmVwbGFjZShuZXcgUmVnRXhwKHRoaXMub3B0aW9ucy5yZXNwb25zaXZlQ2xhc3MgKyBcIi1cXFxcUytcXFxcc1wiLCBcImdcIiksIFwiXCIpKS5yZW1vdmVEYXRhKFwib3dsLmNhcm91c2VsXCIpXG4gICAgfSwgZS5wcm90b3R5cGUub3AgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgdmFyIGQgPSB0aGlzLnNldHRpbmdzLnJ0bDtcbiAgICAgIHN3aXRjaCAoYikge1xuICAgICAgICBjYXNlXCI8XCI6XG4gICAgICAgICAgcmV0dXJuIGQgPyBhID4gYyA6IGEgPCBjO1xuICAgICAgICBjYXNlXCI+XCI6XG4gICAgICAgICAgcmV0dXJuIGQgPyBhIDwgYyA6IGEgPiBjO1xuICAgICAgICBjYXNlXCI+PVwiOlxuICAgICAgICAgIHJldHVybiBkID8gYSA8PSBjIDogYSA+PSBjO1xuICAgICAgICBjYXNlXCI8PVwiOlxuICAgICAgICAgIHJldHVybiBkID8gYSA+PSBjIDogYSA8PSBjXG4gICAgICB9XG4gICAgfSwgZS5wcm90b3R5cGUub24gPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgICAgYS5hZGRFdmVudExpc3RlbmVyID8gYS5hZGRFdmVudExpc3RlbmVyKGIsIGMsIGQpIDogYS5hdHRhY2hFdmVudCAmJiBhLmF0dGFjaEV2ZW50KFwib25cIiArIGIsIGMpXG4gICAgfSwgZS5wcm90b3R5cGUub2ZmID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgIGEucmVtb3ZlRXZlbnRMaXN0ZW5lciA/IGEucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLCBjLCBkKSA6IGEuZGV0YWNoRXZlbnQgJiYgYS5kZXRhY2hFdmVudChcIm9uXCIgKyBiLCBjKVxuICAgIH0sIGUucHJvdG90eXBlLnRyaWdnZXIgPSBmdW5jdGlvbiAoYiwgYywgZCwgZiwgZykge1xuICAgICAgdmFyIGggPSB7aXRlbToge2NvdW50OiB0aGlzLl9pdGVtcy5sZW5ndGgsIGluZGV4OiB0aGlzLmN1cnJlbnQoKX19LFxuICAgICAgICBpID0gYS5jYW1lbENhc2UoYS5ncmVwKFtcIm9uXCIsIGIsIGRdLCBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIHJldHVybiBhXG4gICAgICAgIH0pLmpvaW4oXCItXCIpLnRvTG93ZXJDYXNlKCkpLFxuICAgICAgICBqID0gYS5FdmVudChbYiwgXCJvd2xcIiwgZCB8fCBcImNhcm91c2VsXCJdLmpvaW4oXCIuXCIpLnRvTG93ZXJDYXNlKCksIGEuZXh0ZW5kKHtyZWxhdGVkVGFyZ2V0OiB0aGlzfSwgaCwgYykpO1xuICAgICAgcmV0dXJuIHRoaXMuX3N1cHJlc3NbYl0gfHwgKGEuZWFjaCh0aGlzLl9wbHVnaW5zLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBiLm9uVHJpZ2dlciAmJiBiLm9uVHJpZ2dlcihqKVxuICAgICAgfSksIHRoaXMucmVnaXN0ZXIoe1xuICAgICAgICB0eXBlOiBlLlR5cGUuRXZlbnQsXG4gICAgICAgIG5hbWU6IGJcbiAgICAgIH0pLCB0aGlzLiRlbGVtZW50LnRyaWdnZXIoaiksIHRoaXMuc2V0dGluZ3MgJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiB0aGlzLnNldHRpbmdzW2ldICYmIHRoaXMuc2V0dGluZ3NbaV0uY2FsbCh0aGlzLCBqKSksIGpcbiAgICB9LCBlLnByb3RvdHlwZS5lbnRlciA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICBhLmVhY2goW2JdLmNvbmNhdCh0aGlzLl9zdGF0ZXMudGFnc1tiXSB8fCBbXSksIGEucHJveHkoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgdGhpcy5fc3RhdGVzLmN1cnJlbnRbYl0gPT09IGQgJiYgKHRoaXMuX3N0YXRlcy5jdXJyZW50W2JdID0gMCksIHRoaXMuX3N0YXRlcy5jdXJyZW50W2JdKytcbiAgICAgIH0sIHRoaXMpKVxuICAgIH0sIGUucHJvdG90eXBlLmxlYXZlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIGEuZWFjaChbYl0uY29uY2F0KHRoaXMuX3N0YXRlcy50YWdzW2JdIHx8IFtdKSwgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICB0aGlzLl9zdGF0ZXMuY3VycmVudFtiXS0tXG4gICAgICB9LCB0aGlzKSlcbiAgICB9LCBlLnByb3RvdHlwZS5yZWdpc3RlciA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICBpZiAoYi50eXBlID09PSBlLlR5cGUuRXZlbnQpIHtcbiAgICAgICAgaWYgKGEuZXZlbnQuc3BlY2lhbFtiLm5hbWVdIHx8IChhLmV2ZW50LnNwZWNpYWxbYi5uYW1lXSA9IHt9KSwgIWEuZXZlbnQuc3BlY2lhbFtiLm5hbWVdLm93bCkge1xuICAgICAgICAgIHZhciBjID0gYS5ldmVudC5zcGVjaWFsW2IubmFtZV0uX2RlZmF1bHQ7XG4gICAgICAgICAgYS5ldmVudC5zcGVjaWFsW2IubmFtZV0uX2RlZmF1bHQgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgcmV0dXJuICFjIHx8ICFjLmFwcGx5IHx8IGEubmFtZXNwYWNlICYmIGEubmFtZXNwYWNlLmluZGV4T2YoXCJvd2xcIikgIT09IC0xID8gYS5uYW1lc3BhY2UgJiYgYS5uYW1lc3BhY2UuaW5kZXhPZihcIm93bFwiKSA+IC0xIDogYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gICAgICAgICAgfSwgYS5ldmVudC5zcGVjaWFsW2IubmFtZV0ub3dsID0gITBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGIudHlwZSA9PT0gZS5UeXBlLlN0YXRlICYmICh0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdID8gdGhpcy5fc3RhdGVzLnRhZ3NbYi5uYW1lXSA9IHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0uY29uY2F0KGIudGFncykgOiB0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdID0gYi50YWdzLCB0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdID0gYS5ncmVwKHRoaXMuX3N0YXRlcy50YWdzW2IubmFtZV0sIGEucHJveHkoZnVuY3Rpb24gKGMsIGQpIHtcbiAgICAgICAgcmV0dXJuIGEuaW5BcnJheShjLCB0aGlzLl9zdGF0ZXMudGFnc1tiLm5hbWVdKSA9PT0gZFxuICAgICAgfSwgdGhpcykpKVxuICAgIH0sIGUucHJvdG90eXBlLnN1cHByZXNzID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIGEuZWFjaChiLCBhLnByb3h5KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIHRoaXMuX3N1cHJlc3NbYl0gPSAhMFxuICAgICAgfSwgdGhpcykpXG4gICAgfSwgZS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICBhLmVhY2goYiwgYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBkZWxldGUgdGhpcy5fc3VwcmVzc1tiXVxuICAgICAgfSwgdGhpcykpXG4gICAgfSwgZS5wcm90b3R5cGUucG9pbnRlciA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICB2YXIgYyA9IHt4OiBudWxsLCB5OiBudWxsfTtcbiAgICAgIHJldHVybiBhID0gYS5vcmlnaW5hbEV2ZW50IHx8IGEgfHwgYi5ldmVudCwgYSA9IGEudG91Y2hlcyAmJiBhLnRvdWNoZXMubGVuZ3RoID8gYS50b3VjaGVzWzBdIDogYS5jaGFuZ2VkVG91Y2hlcyAmJiBhLmNoYW5nZWRUb3VjaGVzLmxlbmd0aCA/IGEuY2hhbmdlZFRvdWNoZXNbMF0gOiBhLCBhLnBhZ2VYID8gKGMueCA9IGEucGFnZVgsIGMueSA9IGEucGFnZVkpIDogKGMueCA9IGEuY2xpZW50WCwgYy55ID0gYS5jbGllbnRZKSwgY1xuICAgIH0sIGUucHJvdG90eXBlLmlzTnVtZXJpYyA9IGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gIWlzTmFOKHBhcnNlRmxvYXQoYSkpXG4gICAgfSwgZS5wcm90b3R5cGUuZGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4ge3g6IGEueCAtIGIueCwgeTogYS55IC0gYi55fVxuICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdmFyIGMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkID0gYSh0aGlzKSwgZiA9IGQuZGF0YShcIm93bC5jYXJvdXNlbFwiKTtcbiAgICAgICAgZiB8fCAoZiA9IG5ldyBlKHRoaXMsIFwib2JqZWN0XCIgPT0gdHlwZW9mIGIgJiYgYiksIGQuZGF0YShcIm93bC5jYXJvdXNlbFwiLCBmKSwgYS5lYWNoKFtcIm5leHRcIiwgXCJwcmV2XCIsIFwidG9cIiwgXCJkZXN0cm95XCIsIFwicmVmcmVzaFwiLCBcInJlcGxhY2VcIiwgXCJhZGRcIiwgXCJyZW1vdmVcIl0sIGZ1bmN0aW9uIChiLCBjKSB7XG4gICAgICAgICAgZi5yZWdpc3Rlcih7XG4gICAgICAgICAgICB0eXBlOiBlLlR5cGUuRXZlbnQsXG4gICAgICAgICAgICBuYW1lOiBjXG4gICAgICAgICAgfSksIGYuJGVsZW1lbnQub24oYyArIFwiLm93bC5jYXJvdXNlbC5jb3JlXCIsIGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIGEubmFtZXNwYWNlICYmIGEucmVsYXRlZFRhcmdldCAhPT0gdGhpcyAmJiAodGhpcy5zdXBwcmVzcyhbY10pLCBmW2NdLmFwcGx5KHRoaXMsIFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSksIHRoaXMucmVsZWFzZShbY10pKVxuICAgICAgICAgIH0sIGYpKVxuICAgICAgICB9KSksIFwic3RyaW5nXCIgPT0gdHlwZW9mIGIgJiYgXCJfXCIgIT09IGIuY2hhckF0KDApICYmIGZbYl0uYXBwbHkoZiwgYylcbiAgICAgIH0pXG4gICAgfSwgYS5mbi5zYnlPd2xDYXJvdXNlbC5Db25zdHJ1Y3RvciA9IGVcbiAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCksIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgdmFyIGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdGhpcy5fY29yZSA9IGIsIHRoaXMuX2ludGVydmFsID0gbnVsbCwgdGhpcy5fdmlzaWJsZSA9IG51bGwsIHRoaXMuX2hhbmRsZXJzID0ge1xuICAgICAgICBcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvUmVmcmVzaCAmJiB0aGlzLndhdGNoKClcbiAgICAgICAgfSwgdGhpcylcbiAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKVxuICAgIH07XG4gICAgZS5EZWZhdWx0cyA9IHthdXRvUmVmcmVzaDogITAsIGF1dG9SZWZyZXNoSW50ZXJ2YWw6IDUwMH0sIGUucHJvdG90eXBlLndhdGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5faW50ZXJ2YWwgfHwgKHRoaXMuX3Zpc2libGUgPSB0aGlzLl9jb3JlLiRlbGVtZW50LmlzKFwiOnZpc2libGVcIiksIHRoaXMuX2ludGVydmFsID0gYi5zZXRJbnRlcnZhbChhLnByb3h5KHRoaXMucmVmcmVzaCwgdGhpcyksIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b1JlZnJlc2hJbnRlcnZhbCkpXG4gICAgfSwgZS5wcm90b3R5cGUucmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2NvcmUuJGVsZW1lbnQuaXMoXCI6dmlzaWJsZVwiKSAhPT0gdGhpcy5fdmlzaWJsZSAmJiAodGhpcy5fdmlzaWJsZSA9ICF0aGlzLl92aXNpYmxlLCB0aGlzLl9jb3JlLiRlbGVtZW50LnRvZ2dsZUNsYXNzKFwic2J5LW93bC1oaWRkZW5cIiwgIXRoaXMuX3Zpc2libGUpLCB0aGlzLl92aXNpYmxlICYmIHRoaXMuX2NvcmUuaW52YWxpZGF0ZShcIndpZHRoXCIpICYmIHRoaXMuX2NvcmUucmVmcmVzaCgpKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYSwgYztcbiAgICAgIGIuY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCk7XG4gICAgICBmb3IgKGEgaW4gdGhpcy5faGFuZGxlcnMpIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuX2hhbmRsZXJzW2FdKTtcbiAgICAgIGZvciAoYyBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0aGlzW2NdICYmICh0aGlzW2NdID0gbnVsbClcbiAgICB9LCBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuQXV0b1JlZnJlc2ggPSBlXG4gIH0od2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgIHZhciBlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIHRoaXMuX2NvcmUgPSBiLCB0aGlzLl9sb2FkZWQgPSBbXSwgdGhpcy5faGFuZGxlcnMgPSB7XG4gICAgICAgIFwiaW5pdGlhbGl6ZWQub3dsLmNhcm91c2VsIGNoYW5nZS5vd2wuY2Fyb3VzZWwgcmVzaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYikge1xuICAgICAgICAgIGlmIChiLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MubGF6eUxvYWQgJiYgKGIucHJvcGVydHkgJiYgXCJwb3NpdGlvblwiID09IGIucHJvcGVydHkubmFtZSB8fCBcImluaXRpYWxpemVkXCIgPT0gYi50eXBlKSkgZm9yICh2YXIgYyA9IHRoaXMuX2NvcmUuc2V0dGluZ3MsIGUgPSBjLmNlbnRlciAmJiBNYXRoLmNlaWwoYy5pdGVtcyAvIDIpIHx8IGMuaXRlbXMsIGYgPSBjLmNlbnRlciAmJiBlICogLTEgfHwgMCwgZyA9IChiLnByb3BlcnR5ICYmIGIucHJvcGVydHkudmFsdWUgIT09IGQgPyBiLnByb3BlcnR5LnZhbHVlIDogdGhpcy5fY29yZS5jdXJyZW50KCkpICsgZiwgaCA9IHRoaXMuX2NvcmUuY2xvbmVzKCkubGVuZ3RoLCBpID0gYS5wcm94eShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgdGhpcy5sb2FkKGIpXG4gICAgICAgICAgfSwgdGhpcyk7IGYrKyA8IGU7KSB0aGlzLmxvYWQoaCAvIDIgKyB0aGlzLl9jb3JlLnJlbGF0aXZlKGcpKSwgaCAmJiBhLmVhY2godGhpcy5fY29yZS5jbG9uZXModGhpcy5fY29yZS5yZWxhdGl2ZShnKSksIGkpLCBnKytcbiAgICAgICAgfSwgdGhpcylcbiAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKVxuICAgIH07XG4gICAgZS5EZWZhdWx0cyA9IHtsYXp5TG9hZDogITF9LCBlLnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgIHZhciBkID0gdGhpcy5fY29yZS4kc3RhZ2UuY2hpbGRyZW4oKS5lcShjKSwgZSA9IGQgJiYgZC5maW5kKFwiLnNieS1vd2wtbGF6eVwiKTtcbiAgICAgICFlIHx8IGEuaW5BcnJheShkLmdldCgwKSwgdGhpcy5fbG9hZGVkKSA+IC0xIHx8IChlLmVhY2goYS5wcm94eShmdW5jdGlvbiAoYywgZCkge1xuICAgICAgICB2YXIgZSwgZiA9IGEoZCksIGcgPSBiLmRldmljZVBpeGVsUmF0aW8gPiAxICYmIGYuYXR0cihcImRhdGEtc3JjLXJldGluYVwiKSB8fCBmLmF0dHIoXCJkYXRhLXNyY1wiKTtcbiAgICAgICAgdGhpcy5fY29yZS50cmlnZ2VyKFwibG9hZFwiLCB7XG4gICAgICAgICAgZWxlbWVudDogZixcbiAgICAgICAgICB1cmw6IGdcbiAgICAgICAgfSwgXCJsYXp5XCIpLCBmLmlzKFwiaW1nXCIpID8gZi5vbmUoXCJsb2FkLm93bC5sYXp5XCIsIGEucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGYuY3NzKFwib3BhY2l0eVwiLCAxKSwgdGhpcy5fY29yZS50cmlnZ2VyKFwibG9hZGVkXCIsIHtlbGVtZW50OiBmLCB1cmw6IGd9LCBcImxhenlcIilcbiAgICAgICAgfSwgdGhpcykpLmF0dHIoXCJzcmNcIiwgZykgOiAoZSA9IG5ldyBJbWFnZSwgZS5vbmxvYWQgPSBhLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmLmNzcyh7XG4gICAgICAgICAgICBcImJhY2tncm91bmQtaW1hZ2VcIjogJ3VybChcIicgKyBnICsgJ1wiKScsXG4gICAgICAgICAgICBvcGFjaXR5OiBcIjFcIlxuICAgICAgICAgIH0pLCB0aGlzLl9jb3JlLnRyaWdnZXIoXCJsb2FkZWRcIiwge2VsZW1lbnQ6IGYsIHVybDogZ30sIFwibGF6eVwiKVxuICAgICAgICB9LCB0aGlzKSwgZS5zcmMgPSBnKVxuICAgICAgfSwgdGhpcykpLCB0aGlzLl9sb2FkZWQucHVzaChkLmdldCgwKSkpXG4gICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhLCBiO1xuICAgICAgZm9yIChhIGluIHRoaXMuaGFuZGxlcnMpIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuaGFuZGxlcnNbYV0pO1xuICAgICAgZm9yIChiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbYl0gJiYgKHRoaXNbYl0gPSBudWxsKVxuICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5MYXp5ID0gZVxuICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICB2YXIgZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB0aGlzLl9jb3JlID0gYiwgdGhpcy5faGFuZGxlcnMgPSB7XG4gICAgICAgIFwiaW5pdGlhbGl6ZWQub3dsLmNhcm91c2VsIHJlZnJlc2hlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodCAmJiB0aGlzLnVwZGF0ZSgpXG4gICAgICAgIH0sIHRoaXMpLCBcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICBhLm5hbWVzcGFjZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9IZWlnaHQgJiYgXCJwb3NpdGlvblwiID09IGEucHJvcGVydHkubmFtZSAmJiB0aGlzLnVwZGF0ZSgpXG4gICAgICAgIH0sIHRoaXMpLCBcImxvYWRlZC5vd2wubGF6eVwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvSGVpZ2h0ICYmIGEuZWxlbWVudC5jbG9zZXN0KFwiLlwiICsgdGhpcy5fY29yZS5zZXR0aW5ncy5pdGVtQ2xhc3MpLmluZGV4KCkgPT09IHRoaXMuX2NvcmUuY3VycmVudCgpICYmIHRoaXMudXBkYXRlKClcbiAgICAgICAgfSwgdGhpcylcbiAgICAgIH0sIHRoaXMuX2NvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLl9jb3JlLm9wdGlvbnMpLCB0aGlzLl9jb3JlLiRlbGVtZW50Lm9uKHRoaXMuX2hhbmRsZXJzKVxuICAgIH07XG4gICAgZS5EZWZhdWx0cyA9IHthdXRvSGVpZ2h0OiAhMSwgYXV0b0hlaWdodENsYXNzOiBcInNieS1vd2wtaGVpZ2h0XCJ9LCBlLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYiA9IHRoaXMuX2NvcmUuX2N1cnJlbnQsIGMgPSBiICsgdGhpcy5fY29yZS5zZXR0aW5ncy5pdGVtcyxcbiAgICAgICAgZCA9IHRoaXMuX2NvcmUuJHN0YWdlLmNoaWxkcmVuKCkudG9BcnJheSgpLnNsaWNlKGIsIGMpLCBlID0gW10sIGYgPSAwO1xuICAgICAgYS5lYWNoKGQsIGZ1bmN0aW9uIChiLCBjKSB7XG4gICAgICAgIGUucHVzaChhKGMpLmhlaWdodCgpKVxuICAgICAgfSksIGYgPSBNYXRoLm1heC5hcHBseShudWxsLCBlKSwgdGhpcy5fY29yZS4kc3RhZ2UucGFyZW50KCkuaGVpZ2h0KGYpLmFkZENsYXNzKHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b0hlaWdodENsYXNzKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYSwgYjtcbiAgICAgIGZvciAoYSBpbiB0aGlzLl9oYW5kbGVycykgdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoYSwgdGhpcy5faGFuZGxlcnNbYV0pO1xuICAgICAgZm9yIChiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbYl0gJiYgKHRoaXNbYl0gPSBudWxsKVxuICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5BdXRvSGVpZ2h0ID0gZVxuICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICB2YXIgZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB0aGlzLl9jb3JlID0gYiwgdGhpcy5fdmlkZW9zID0ge30sIHRoaXMuX3BsYXlpbmcgPSBudWxsLCB0aGlzLl9oYW5kbGVycyA9IHtcbiAgICAgICAgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUucmVnaXN0ZXIoe3R5cGU6IFwic3RhdGVcIiwgbmFtZTogXCJwbGF5aW5nXCIsIHRhZ3M6IFtcImludGVyYWN0aW5nXCJdfSlcbiAgICAgICAgfSwgdGhpcyksIFwicmVzaXplLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy52aWRlbyAmJiB0aGlzLmlzSW5GdWxsU2NyZWVuKCkgJiYgYS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIH0sIHRoaXMpLCBcInJlZnJlc2hlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuaXMoXCJyZXNpemluZ1wiKSAmJiB0aGlzLl9jb3JlLiRzdGFnZS5maW5kKFwiLmNsb25lZCAuc2J5LW93bC12aWRlby1mcmFtZVwiKS5yZW1vdmUoKVxuICAgICAgICB9LCB0aGlzKSwgXCJjaGFuZ2VkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgXCJwb3NpdGlvblwiID09PSBhLnByb3BlcnR5Lm5hbWUgJiYgdGhpcy5fcGxheWluZyAmJiB0aGlzLnN0b3AoKVxuICAgICAgICB9LCB0aGlzKSwgXCJwcmVwYXJlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYikge1xuICAgICAgICAgIGlmIChiLm5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdmFyIGMgPSBhKGIuY29udGVudCkuZmluZChcIi5zYnktb3dsLXZpZGVvXCIpO1xuICAgICAgICAgICAgYy5sZW5ndGggJiYgKGMuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIiksIHRoaXMuZmV0Y2goYywgYShiLmNvbnRlbnQpKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMpXG4gICAgICB9LCB0aGlzLl9jb3JlLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgdGhpcy5fY29yZS5vcHRpb25zKSwgdGhpcy5fY29yZS4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycyksIHRoaXMuX2NvcmUuJGVsZW1lbnQub24oXCJjbGljay5vd2wudmlkZW9cIiwgXCIuc2J5LW93bC12aWRlby1wbGF5LWljb25cIiwgYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICB0aGlzLnBsYXkoYSlcbiAgICAgIH0sIHRoaXMpKVxuICAgIH07XG4gICAgZS5EZWZhdWx0cyA9IHt2aWRlbzogITEsIHZpZGVvSGVpZ2h0OiAhMSwgdmlkZW9XaWR0aDogITF9LCBlLnByb3RvdHlwZS5mZXRjaCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICB2YXIgYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gYS5hdHRyKFwiZGF0YS12aW1lby1pZFwiKSA/IFwidmltZW9cIiA6IGEuYXR0cihcImRhdGEtdnphYXItaWRcIikgPyBcInZ6YWFyXCIgOiBcInlvdXR1YmVcIlxuICAgICAgICB9KCksIGQgPSBhLmF0dHIoXCJkYXRhLXZpbWVvLWlkXCIpIHx8IGEuYXR0cihcImRhdGEteW91dHViZS1pZFwiKSB8fCBhLmF0dHIoXCJkYXRhLXZ6YWFyLWlkXCIpLFxuICAgICAgICBlID0gYS5hdHRyKFwiZGF0YS13aWR0aFwiKSB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLnZpZGVvV2lkdGgsXG4gICAgICAgIGYgPSBhLmF0dHIoXCJkYXRhLWhlaWdodFwiKSB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLnZpZGVvSGVpZ2h0LCBnID0gYS5hdHRyKFwiaHJlZlwiKTtcbiAgICAgIGlmICghZykgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyB2aWRlbyBVUkwuXCIpO1xuICAgICAgaWYgKGQgPSBnLm1hdGNoKC8oaHR0cDp8aHR0cHM6fClcXC9cXC8ocGxheWVyLnx3d3cufGFwcC4pPyh2aW1lb1xcLmNvbXx5b3V0dShiZVxcLmNvbXxcXC5iZXxiZVxcLmdvb2dsZWFwaXNcXC5jb20pfHZ6YWFyXFwuY29tKVxcLyh2aWRlb1xcL3x2aWRlb3NcXC98ZW1iZWRcXC98Y2hhbm5lbHNcXC8uK1xcL3xncm91cHNcXC8uK1xcL3x3YXRjaFxcP3Y9fHZcXC8pPyhbQS1aYS16MC05Ll8lLV0qKShcXCZcXFMrKT8vKSwgZFszXS5pbmRleE9mKFwieW91dHVcIikgPiAtMSkgYyA9IFwieW91dHViZVwiOyBlbHNlIGlmIChkWzNdLmluZGV4T2YoXCJ2aW1lb1wiKSA+IC0xKSBjID0gXCJ2aW1lb1wiOyBlbHNlIHtcbiAgICAgICAgaWYgKCEoZFszXS5pbmRleE9mKFwidnphYXJcIikgPiAtMSkpIHRocm93IG5ldyBFcnJvcihcIlZpZGVvIFVSTCBub3Qgc3VwcG9ydGVkLlwiKTtcbiAgICAgICAgYyA9IFwidnphYXJcIlxuICAgICAgfVxuICAgICAgZCA9IGRbNl0sIHRoaXMuX3ZpZGVvc1tnXSA9IHtcbiAgICAgICAgdHlwZTogYyxcbiAgICAgICAgaWQ6IGQsXG4gICAgICAgIHdpZHRoOiBlLFxuICAgICAgICBoZWlnaHQ6IGZcbiAgICAgIH0sIGIuYXR0cihcImRhdGEtdmlkZW9cIiwgZyksIHRoaXMudGh1bWJuYWlsKGEsIHRoaXMuX3ZpZGVvc1tnXSlcbiAgICB9LCBlLnByb3RvdHlwZS50aHVtYm5haWwgPSBmdW5jdGlvbiAoYiwgYykge1xuICAgICAgdmFyIGQsIGUsIGYsIGcgPSBjLndpZHRoICYmIGMuaGVpZ2h0ID8gJ3N0eWxlPVwid2lkdGg6JyArIGMud2lkdGggKyBcInB4O2hlaWdodDpcIiArIGMuaGVpZ2h0ICsgJ3B4O1wiJyA6IFwiXCIsXG4gICAgICAgIGggPSBiLmZpbmQoXCJpbWdcIiksIGkgPSBcInNyY1wiLCBqID0gXCJcIiwgayA9IHRoaXMuX2NvcmUuc2V0dGluZ3MsIGwgPSBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGUgPSAnPGRpdiBjbGFzcz1cInNieS1vd2wtdmlkZW8tcGxheS1pY29uXCI+PC9kaXY+JywgZCA9IGsubGF6eUxvYWQgPyAnPGRpdiBjbGFzcz1cInNieS1vd2wtdmlkZW8tdG4gJyArIGogKyAnXCIgJyArIGkgKyAnPVwiJyArIGEgKyAnXCI+PC9kaXY+JyA6ICc8ZGl2IGNsYXNzPVwic2J5LW93bC12aWRlby10blwiIHN0eWxlPVwib3BhY2l0eToxO2JhY2tncm91bmQtaW1hZ2U6dXJsKCcgKyBhICsgJylcIj48L2Rpdj4nLCBiLmFmdGVyKGQpLCBiLmFmdGVyKGUpXG4gICAgICAgIH07XG4gICAgICBpZiAoYi53cmFwKCc8ZGl2IGNsYXNzPVwic2J5LW93bC12aWRlby13cmFwcGVyXCInICsgZyArIFwiPjwvZGl2PlwiKSwgdGhpcy5fY29yZS5zZXR0aW5ncy5sYXp5TG9hZCAmJiAoaSA9IFwiZGF0YS1zcmNcIiwgaiA9IFwic2J5LW93bC1sYXp5XCIpLCBoLmxlbmd0aCkgcmV0dXJuIGwoaC5hdHRyKGkpKSwgaC5yZW1vdmUoKSwgITE7XG4gICAgICBcInlvdXR1YmVcIiA9PT0gYy50eXBlID8gKGYgPSBcIi8vaW1nLnlvdXR1YmUuY29tL3ZpL1wiICsgYy5pZCArIFwiL2hxZGVmYXVsdC5qcGdcIiwgbChmKSkgOiBcInZpbWVvXCIgPT09IGMudHlwZSA/IGEuYWpheCh7XG4gICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgIHVybDogXCIvL3ZpbWVvLmNvbS9hcGkvdjIvdmlkZW8vXCIgKyBjLmlkICsgXCIuanNvblwiLFxuICAgICAgICBqc29ucDogXCJjYWxsYmFja1wiLFxuICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGYgPSBhWzBdLnRodW1ibmFpbF9sYXJnZSwgbChmKVxuICAgICAgICB9XG4gICAgICB9KSA6IFwidnphYXJcIiA9PT0gYy50eXBlICYmIGEuYWpheCh7XG4gICAgICAgIHR5cGU6IFwiR0VUXCIsXG4gICAgICAgIHVybDogXCIvL3Z6YWFyLmNvbS9hcGkvdmlkZW9zL1wiICsgYy5pZCArIFwiLmpzb25cIixcbiAgICAgICAganNvbnA6IFwiY2FsbGJhY2tcIixcbiAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICBmID0gYS5mcmFtZWdyYWJfdXJsLCBsKGYpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSwgZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2NvcmUudHJpZ2dlcihcInN0b3BcIiwgbnVsbCwgXCJ2aWRlb1wiKSwgdGhpcy5fcGxheWluZy5maW5kKFwiLnNieS1vd2wtdmlkZW8tZnJhbWVcIikucmVtb3ZlKCksIHRoaXMuX3BsYXlpbmcucmVtb3ZlQ2xhc3MoXCJzYnktb3dsLXZpZGVvLXBsYXlpbmdcIiksIHRoaXMuX3BsYXlpbmcgPSBudWxsLCB0aGlzLl9jb3JlLmxlYXZlKFwicGxheWluZ1wiKSwgdGhpcy5fY29yZS50cmlnZ2VyKFwic3RvcHBlZFwiLCBudWxsLCBcInZpZGVvXCIpXG4gICAgfSwgZS5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB2YXIgYywgZCA9IGEoYi50YXJnZXQpLCBlID0gZC5jbG9zZXN0KFwiLlwiICsgdGhpcy5fY29yZS5zZXR0aW5ncy5pdGVtQ2xhc3MpLFxuICAgICAgICBmID0gdGhpcy5fdmlkZW9zW2UuYXR0cihcImRhdGEtdmlkZW9cIildLCBnID0gZi53aWR0aCB8fCBcIjEwMCVcIixcbiAgICAgICAgaCA9IGYuaGVpZ2h0IHx8IHRoaXMuX2NvcmUuJHN0YWdlLmhlaWdodCgpO1xuICAgICAgdGhpcy5fcGxheWluZyB8fCAodGhpcy5fY29yZS5lbnRlcihcInBsYXlpbmdcIiksIHRoaXMuX2NvcmUudHJpZ2dlcihcInBsYXlcIiwgbnVsbCwgXCJ2aWRlb1wiKSwgZSA9IHRoaXMuX2NvcmUuaXRlbXModGhpcy5fY29yZS5yZWxhdGl2ZShlLmluZGV4KCkpKSwgdGhpcy5fY29yZS5yZXNldChlLmluZGV4KCkpLCBcInlvdXR1YmVcIiA9PT0gZi50eXBlID8gYyA9ICc8aWZyYW1lIHdpZHRoPVwiJyArIGcgKyAnXCIgaGVpZ2h0PVwiJyArIGggKyAnXCIgc3JjPVwiLy93d3cueW91dHViZS5jb20vZW1iZWQvJyArIGYuaWQgKyBcIj9hdXRvcGxheT0xJnJlbD0wJnY9XCIgKyBmLmlkICsgJ1wiIGZyYW1lYm9yZGVyPVwiMFwiIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4nIDogXCJ2aW1lb1wiID09PSBmLnR5cGUgPyBjID0gJzxpZnJhbWUgc3JjPVwiLy9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLycgKyBmLmlkICsgJz9hdXRvcGxheT0xXCIgd2lkdGg9XCInICsgZyArICdcIiBoZWlnaHQ9XCInICsgaCArICdcIiBmcmFtZWJvcmRlcj1cIjBcIiB3ZWJraXRhbGxvd2Z1bGxzY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIGFsbG93ZnVsbHNjcmVlbj48L2lmcmFtZT4nIDogXCJ2emFhclwiID09PSBmLnR5cGUgJiYgKGMgPSAnPGlmcmFtZSBmcmFtZWJvcmRlcj1cIjBcImhlaWdodD1cIicgKyBoICsgJ1wid2lkdGg9XCInICsgZyArICdcIiBhbGxvd2Z1bGxzY3JlZW4gbW96YWxsb3dmdWxsc2NyZWVuIHdlYmtpdEFsbG93RnVsbFNjcmVlbiBzcmM9XCIvL3ZpZXcudnphYXIuY29tLycgKyBmLmlkICsgJy9wbGF5ZXI/YXV0b3BsYXk9dHJ1ZVwiPjwvaWZyYW1lPicpLCBhKCc8ZGl2IGNsYXNzPVwic2J5LW93bC12aWRlby1mcmFtZVwiPicgKyBjICsgXCI8L2Rpdj5cIikuaW5zZXJ0QWZ0ZXIoZS5maW5kKFwiLnNieS1vd2wtdmlkZW9cIikpLCB0aGlzLl9wbGF5aW5nID0gZS5hZGRDbGFzcyhcInNieS1vd2wtdmlkZW8tcGxheWluZ1wiKSlcbiAgICB9LCBlLnByb3RvdHlwZS5pc0luRnVsbFNjcmVlbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBiID0gYy5mdWxsc2NyZWVuRWxlbWVudCB8fCBjLm1vekZ1bGxTY3JlZW5FbGVtZW50IHx8IGMud2Via2l0RnVsbHNjcmVlbkVsZW1lbnQ7XG4gICAgICByZXR1cm4gYiAmJiBhKGIpLnBhcmVudCgpLmhhc0NsYXNzKFwic2J5LW93bC12aWRlby1mcmFtZVwiKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYSwgYjtcbiAgICAgIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKFwiY2xpY2sub3dsLnZpZGVvXCIpO1xuICAgICAgZm9yIChhIGluIHRoaXMuX2hhbmRsZXJzKSB0aGlzLl9jb3JlLiRlbGVtZW50Lm9mZihhLCB0aGlzLl9oYW5kbGVyc1thXSk7XG4gICAgICBmb3IgKGIgaW4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgdGhpc1tiXSAmJiAodGhpc1tiXSA9IG51bGwpXG4gICAgfSwgYS5mbi5zYnlPd2xDYXJvdXNlbC5Db25zdHJ1Y3Rvci5QbHVnaW5zLlZpZGVvID0gZVxuICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICB2YXIgZSA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICB0aGlzLmNvcmUgPSBiLCB0aGlzLmNvcmUub3B0aW9ucyA9IGEuZXh0ZW5kKHt9LCBlLkRlZmF1bHRzLCB0aGlzLmNvcmUub3B0aW9ucyksIHRoaXMuc3dhcHBpbmcgPSAhMCwgdGhpcy5wcmV2aW91cyA9IGQsIHRoaXMubmV4dCA9IGQsIHRoaXMuaGFuZGxlcnMgPSB7XG4gICAgICAgIFwiY2hhbmdlLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgXCJwb3NpdGlvblwiID09IGEucHJvcGVydHkubmFtZSAmJiAodGhpcy5wcmV2aW91cyA9IHRoaXMuY29yZS5jdXJyZW50KCksIHRoaXMubmV4dCA9IGEucHJvcGVydHkudmFsdWUpXG4gICAgICAgIH0sIHRoaXMpLCBcImRyYWcub3dsLmNhcm91c2VsIGRyYWdnZWQub3dsLmNhcm91c2VsIHRyYW5zbGF0ZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICBhLm5hbWVzcGFjZSAmJiAodGhpcy5zd2FwcGluZyA9IFwidHJhbnNsYXRlZFwiID09IGEudHlwZSlcbiAgICAgICAgfSwgdGhpcyksIFwidHJhbnNsYXRlLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5zd2FwcGluZyAmJiAodGhpcy5jb3JlLm9wdGlvbnMuYW5pbWF0ZU91dCB8fCB0aGlzLmNvcmUub3B0aW9ucy5hbmltYXRlSW4pICYmIHRoaXMuc3dhcCgpXG4gICAgICAgIH0sIHRoaXMpXG4gICAgICB9LCB0aGlzLmNvcmUuJGVsZW1lbnQub24odGhpcy5oYW5kbGVycylcbiAgICB9O1xuICAgIGUuRGVmYXVsdHMgPSB7YW5pbWF0ZU91dDogITEsIGFuaW1hdGVJbjogITF9LCBlLnByb3RvdHlwZS5zd2FwID0gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKDEgPT09IHRoaXMuY29yZS5zZXR0aW5ncy5pdGVtcyAmJiBhLnN1cHBvcnQuYW5pbWF0aW9uICYmIGEuc3VwcG9ydC50cmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMuY29yZS5zcGVlZCgwKTtcbiAgICAgICAgdmFyIGIsIGMgPSBhLnByb3h5KHRoaXMuY2xlYXIsIHRoaXMpLCBkID0gdGhpcy5jb3JlLiRzdGFnZS5jaGlsZHJlbigpLmVxKHRoaXMucHJldmlvdXMpLFxuICAgICAgICAgIGUgPSB0aGlzLmNvcmUuJHN0YWdlLmNoaWxkcmVuKCkuZXEodGhpcy5uZXh0KSwgZiA9IHRoaXMuY29yZS5zZXR0aW5ncy5hbmltYXRlSW4sXG4gICAgICAgICAgZyA9IHRoaXMuY29yZS5zZXR0aW5ncy5hbmltYXRlT3V0O1xuICAgICAgICB0aGlzLmNvcmUuY3VycmVudCgpICE9PSB0aGlzLnByZXZpb3VzICYmIChnICYmIChiID0gdGhpcy5jb3JlLmNvb3JkaW5hdGVzKHRoaXMucHJldmlvdXMpIC0gdGhpcy5jb3JlLmNvb3JkaW5hdGVzKHRoaXMubmV4dCksIGQub25lKGEuc3VwcG9ydC5hbmltYXRpb24uZW5kLCBjKS5jc3Moe2xlZnQ6IGIgKyBcInB4XCJ9KS5hZGRDbGFzcyhcImFuaW1hdGVkIHNieS1vd2wtYW5pbWF0ZWQtb3V0XCIpLmFkZENsYXNzKGcpKSwgZiAmJiBlLm9uZShhLnN1cHBvcnQuYW5pbWF0aW9uLmVuZCwgYykuYWRkQ2xhc3MoXCJhbmltYXRlZCBzYnktb3dsLWFuaW1hdGVkLWluXCIpLmFkZENsYXNzKGYpKVxuICAgICAgfVxuICAgIH0sIGUucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIGEoYi50YXJnZXQpLmNzcyh7bGVmdDogXCJcIn0pLnJlbW92ZUNsYXNzKFwiYW5pbWF0ZWQgc2J5LW93bC1hbmltYXRlZC1vdXQgc2J5LW93bC1hbmltYXRlZC1pblwiKS5yZW1vdmVDbGFzcyh0aGlzLmNvcmUuc2V0dGluZ3MuYW5pbWF0ZUluKS5yZW1vdmVDbGFzcyh0aGlzLmNvcmUuc2V0dGluZ3MuYW5pbWF0ZU91dCksIHRoaXMuY29yZS5vblRyYW5zaXRpb25FbmQoKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYSwgYjtcbiAgICAgIGZvciAoYSBpbiB0aGlzLmhhbmRsZXJzKSB0aGlzLmNvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuaGFuZGxlcnNbYV0pO1xuICAgICAgZm9yIChiIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbYl0gJiYgKHRoaXNbYl0gPSBudWxsKVxuICAgIH0sXG4gICAgICBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuQW5pbWF0ZSA9IGVcbiAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCksIGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7XG4gICAgdmFyIGUgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdGhpcy5fY29yZSA9IGIsIHRoaXMuX3RpbWVvdXQgPSBudWxsLCB0aGlzLl9wYXVzZWQgPSAhMSwgdGhpcy5faGFuZGxlcnMgPSB7XG4gICAgICAgIFwiY2hhbmdlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIFwic2V0dGluZ3NcIiA9PT0gYS5wcm9wZXJ0eS5uYW1lID8gdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheSA/IHRoaXMucGxheSgpIDogdGhpcy5zdG9wKCkgOiBhLm5hbWVzcGFjZSAmJiBcInBvc2l0aW9uXCIgPT09IGEucHJvcGVydHkubmFtZSAmJiB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5ICYmIHRoaXMuX3NldEF1dG9QbGF5SW50ZXJ2YWwoKVxuICAgICAgICB9LCB0aGlzKSwgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXkgJiYgdGhpcy5wbGF5KClcbiAgICAgICAgfSwgdGhpcyksIFwicGxheS5vd2wuYXV0b3BsYXlcIjogYS5wcm94eShmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMucGxheShiLCBjKVxuICAgICAgICB9LCB0aGlzKSwgXCJzdG9wLm93bC5hdXRvcGxheVwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5zdG9wKClcbiAgICAgICAgfSwgdGhpcyksIFwibW91c2VvdmVyLm93bC5hdXRvcGxheVwiOiBhLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5SG92ZXJQYXVzZSAmJiB0aGlzLl9jb3JlLmlzKFwicm90YXRpbmdcIikgJiYgdGhpcy5wYXVzZSgpXG4gICAgICAgIH0sIHRoaXMpLCBcIm1vdXNlbGVhdmUub3dsLmF1dG9wbGF5XCI6IGEucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlIb3ZlclBhdXNlICYmIHRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSAmJiB0aGlzLnBsYXkoKVxuICAgICAgICB9LCB0aGlzKSwgXCJ0b3VjaHN0YXJ0Lm93bC5jb3JlXCI6IGEucHJveHkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMuX2NvcmUuc2V0dGluZ3MuYXV0b3BsYXlIb3ZlclBhdXNlICYmIHRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSAmJiB0aGlzLnBhdXNlKClcbiAgICAgICAgfSwgdGhpcyksIFwidG91Y2hlbmQub3dsLmNvcmVcIjogYS5wcm94eShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdGhpcy5fY29yZS5zZXR0aW5ncy5hdXRvcGxheUhvdmVyUGF1c2UgJiYgdGhpcy5wbGF5KClcbiAgICAgICAgfSwgdGhpcylcbiAgICAgIH0sIHRoaXMuX2NvcmUuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpLCB0aGlzLl9jb3JlLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgdGhpcy5fY29yZS5vcHRpb25zKVxuICAgIH07XG4gICAgZS5EZWZhdWx0cyA9IHtcbiAgICAgIGF1dG9wbGF5OiAhMSxcbiAgICAgIGF1dG9wbGF5VGltZW91dDogNWUzLFxuICAgICAgYXV0b3BsYXlIb3ZlclBhdXNlOiAhMSxcbiAgICAgIGF1dG9wbGF5U3BlZWQ6ICExXG4gICAgfSwgZS5wcm90b3R5cGUucGxheSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICB0aGlzLl9wYXVzZWQgPSAhMSwgdGhpcy5fY29yZS5pcyhcInJvdGF0aW5nXCIpIHx8ICh0aGlzLl9jb3JlLmVudGVyKFwicm90YXRpbmdcIiksIHRoaXMuX3NldEF1dG9QbGF5SW50ZXJ2YWwoKSlcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0TmV4dFRpbWVvdXQgPSBmdW5jdGlvbiAoZCwgZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3RpbWVvdXQgJiYgYi5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCksIGIuc2V0VGltZW91dChhLnByb3h5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5fcGF1c2VkIHx8IHRoaXMuX2NvcmUuaXMoXCJidXN5XCIpIHx8IHRoaXMuX2NvcmUuaXMoXCJpbnRlcmFjdGluZ1wiKSB8fCBjLmhpZGRlbiB8fCB0aGlzLl9jb3JlLm5leHQoZSB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5U3BlZWQpXG4gICAgICB9LCB0aGlzKSwgZCB8fCB0aGlzLl9jb3JlLnNldHRpbmdzLmF1dG9wbGF5VGltZW91dClcbiAgICB9LCBlLnByb3RvdHlwZS5fc2V0QXV0b1BsYXlJbnRlcnZhbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSB0aGlzLl9nZXROZXh0VGltZW91dCgpXG4gICAgfSwgZS5wcm90b3R5cGUuc3RvcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSAmJiAoYi5jbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCksIHRoaXMuX2NvcmUubGVhdmUoXCJyb3RhdGluZ1wiKSlcbiAgICB9LCBlLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2NvcmUuaXMoXCJyb3RhdGluZ1wiKSAmJiAodGhpcy5fcGF1c2VkID0gITApXG4gICAgfSwgZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhLCBiO1xuICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICBmb3IgKGEgaW4gdGhpcy5faGFuZGxlcnMpIHRoaXMuX2NvcmUuJGVsZW1lbnQub2ZmKGEsIHRoaXMuX2hhbmRsZXJzW2FdKTtcbiAgICAgIGZvciAoYiBpbiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkgXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0aGlzW2JdICYmICh0aGlzW2JdID0gbnVsbClcbiAgICB9LCBhLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnMuYXV0b3BsYXkgPSBlXG4gIH0od2luZG93LlplcHRvIHx8IHdpbmRvdy5qUXVlcnksIHdpbmRvdywgZG9jdW1lbnQpLCBmdW5jdGlvbiAoYSwgYiwgYywgZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIHZhciBlID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIHRoaXMuX2NvcmUgPSBiLCB0aGlzLl9pbml0aWFsaXplZCA9ICExLCB0aGlzLl9wYWdlcyA9IFtdLCB0aGlzLl9jb250cm9scyA9IHt9LCB0aGlzLl90ZW1wbGF0ZXMgPSBbXSwgdGhpcy4kZWxlbWVudCA9IHRoaXMuX2NvcmUuJGVsZW1lbnQsIHRoaXMuX292ZXJyaWRlcyA9IHtcbiAgICAgICAgbmV4dDogdGhpcy5fY29yZS5uZXh0LFxuICAgICAgICBwcmV2OiB0aGlzLl9jb3JlLnByZXYsXG4gICAgICAgIHRvOiB0aGlzLl9jb3JlLnRvXG4gICAgICB9LCB0aGlzLl9oYW5kbGVycyA9IHtcbiAgICAgICAgXCJwcmVwYXJlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYikge1xuICAgICAgICAgIGIubmFtZXNwYWNlICYmIHRoaXMuX2NvcmUuc2V0dGluZ3MuZG90c0RhdGEgJiYgdGhpcy5fdGVtcGxhdGVzLnB1c2goJzxkaXYgY2xhc3M9XCInICsgdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RDbGFzcyArICdcIj4nICsgYShiLmNvbnRlbnQpLmZpbmQoXCJbZGF0YS1kb3RdXCIpLmFkZEJhY2soXCJbZGF0YS1kb3RdXCIpLmF0dHIoXCJkYXRhLWRvdFwiKSArIFwiPC9kaXY+XCIpXG4gICAgICAgIH0sIHRoaXMpLCBcImFkZGVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RzRGF0YSAmJiB0aGlzLl90ZW1wbGF0ZXMuc3BsaWNlKGEucG9zaXRpb24sIDAsIHRoaXMuX3RlbXBsYXRlcy5wb3AoKSlcbiAgICAgICAgfSwgdGhpcyksIFwicmVtb3ZlLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgdGhpcy5fY29yZS5zZXR0aW5ncy5kb3RzRGF0YSAmJiB0aGlzLl90ZW1wbGF0ZXMuc3BsaWNlKGEucG9zaXRpb24sIDEpXG4gICAgICAgIH0sIHRoaXMpLCBcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICBhLm5hbWVzcGFjZSAmJiBcInBvc2l0aW9uXCIgPT0gYS5wcm9wZXJ0eS5uYW1lICYmIHRoaXMuZHJhdygpXG4gICAgICAgIH0sIHRoaXMpLCBcImluaXRpYWxpemVkLm93bC5jYXJvdXNlbFwiOiBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgYS5uYW1lc3BhY2UgJiYgIXRoaXMuX2luaXRpYWxpemVkICYmICh0aGlzLl9jb3JlLnRyaWdnZXIoXCJpbml0aWFsaXplXCIsIG51bGwsIFwibmF2aWdhdGlvblwiKSwgdGhpcy5pbml0aWFsaXplKCksIHRoaXMudXBkYXRlKCksIHRoaXMuZHJhdygpLCB0aGlzLl9pbml0aWFsaXplZCA9ICEwLCB0aGlzLl9jb3JlLnRyaWdnZXIoXCJpbml0aWFsaXplZFwiLCBudWxsLCBcIm5hdmlnYXRpb25cIikpXG4gICAgICAgIH0sIHRoaXMpLCBcInJlZnJlc2hlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYSkge1xuICAgICAgICAgIGEubmFtZXNwYWNlICYmIHRoaXMuX2luaXRpYWxpemVkICYmICh0aGlzLl9jb3JlLnRyaWdnZXIoXCJyZWZyZXNoXCIsIG51bGwsIFwibmF2aWdhdGlvblwiKSwgdGhpcy51cGRhdGUoKSwgdGhpcy5kcmF3KCksIHRoaXMuX2NvcmUudHJpZ2dlcihcInJlZnJlc2hlZFwiLCBudWxsLCBcIm5hdmlnYXRpb25cIikpXG4gICAgICAgIH0sIHRoaXMpXG4gICAgICB9LCB0aGlzLl9jb3JlLm9wdGlvbnMgPSBhLmV4dGVuZCh7fSwgZS5EZWZhdWx0cywgdGhpcy5fY29yZS5vcHRpb25zKSwgdGhpcy4kZWxlbWVudC5vbih0aGlzLl9oYW5kbGVycylcbiAgICB9O1xuICAgIGUuRGVmYXVsdHMgPSB7XG4gICAgICBuYXY6ICExLFxuICAgICAgbmF2VGV4dDogW1wicHJldlwiLCBcIm5leHRcIl0sXG4gICAgICBuYXZTcGVlZDogITEsXG4gICAgICBuYXZFbGVtZW50OiBcImRpdlwiLFxuICAgICAgbmF2Q29udGFpbmVyOiAhMSxcbiAgICAgIG5hdkNvbnRhaW5lckNsYXNzOiBcInNieS1vd2wtbmF2XCIsXG4gICAgICBuYXZDbGFzczogW1wic2J5LW93bC1wcmV2XCIsIFwic2J5LW93bC1uZXh0XCJdLFxuICAgICAgc2xpZGVCeTogMSxcbiAgICAgIGRvdENsYXNzOiBcInNieS1vd2wtZG90XCIsXG4gICAgICBkb3RzQ2xhc3M6IFwic2J5LW93bC1kb3RzXCIsXG4gICAgICBkb3RzOiAhMCxcbiAgICAgIGRvdHNFYWNoOiAhMSxcbiAgICAgIGRvdHNEYXRhOiAhMSxcbiAgICAgIGRvdHNTcGVlZDogITEsXG4gICAgICBkb3RzQ29udGFpbmVyOiAhMVxuICAgIH0sIGUucHJvdG90eXBlLmluaXRpYWxpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYiwgYyA9IHRoaXMuX2NvcmUuc2V0dGluZ3M7XG4gICAgICB0aGlzLl9jb250cm9scy4kcmVsYXRpdmUgPSAoYy5uYXZDb250YWluZXIgPyBhKGMubmF2Q29udGFpbmVyKSA6IGEoXCI8ZGl2PlwiKS5hZGRDbGFzcyhjLm5hdkNvbnRhaW5lckNsYXNzKS5hcHBlbmRUbyh0aGlzLiRlbGVtZW50KSkuYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKSwgdGhpcy5fY29udHJvbHMuJHByZXZpb3VzID0gYShcIjxcIiArIGMubmF2RWxlbWVudCArIFwiPlwiKS5hZGRDbGFzcyhjLm5hdkNsYXNzWzBdKS5odG1sKGMubmF2VGV4dFswXSkucHJlcGVuZFRvKHRoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZSkub24oXCJjbGlja1wiLCBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHRoaXMucHJldihjLm5hdlNwZWVkKVxuICAgICAgfSwgdGhpcykpLCB0aGlzLl9jb250cm9scy4kbmV4dCA9IGEoXCI8XCIgKyBjLm5hdkVsZW1lbnQgKyBcIj5cIikuYWRkQ2xhc3MoYy5uYXZDbGFzc1sxXSkuaHRtbChjLm5hdlRleHRbMV0pLmFwcGVuZFRvKHRoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZSkub24oXCJjbGlja1wiLCBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHRoaXMubmV4dChjLm5hdlNwZWVkKVxuICAgICAgfSwgdGhpcykpLCBjLmRvdHNEYXRhIHx8ICh0aGlzLl90ZW1wbGF0ZXMgPSBbYShcIjxkaXY+XCIpLmFkZENsYXNzKGMuZG90Q2xhc3MpLmFwcGVuZChhKFwiPHNwYW4+XCIpKS5wcm9wKFwib3V0ZXJIVE1MXCIpXSksIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZSA9IChjLmRvdHNDb250YWluZXIgPyBhKGMuZG90c0NvbnRhaW5lcikgOiBhKFwiPGRpdj5cIikuYWRkQ2xhc3MoYy5kb3RzQ2xhc3MpLmFwcGVuZFRvKHRoaXMuJGVsZW1lbnQpKS5hZGRDbGFzcyhcImRpc2FibGVkXCIpLCB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUub24oXCJjbGlja1wiLCBcImRpdlwiLCBhLnByb3h5KGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHZhciBkID0gYShiLnRhcmdldCkucGFyZW50KCkuaXModGhpcy5fY29udHJvbHMuJGFic29sdXRlKSA/IGEoYi50YXJnZXQpLmluZGV4KCkgOiBhKGIudGFyZ2V0KS5wYXJlbnQoKS5pbmRleCgpO1xuICAgICAgICBiLnByZXZlbnREZWZhdWx0KCksIHRoaXMudG8oZCwgYy5kb3RzU3BlZWQpXG4gICAgICB9LCB0aGlzKSk7XG4gICAgICBmb3IgKGIgaW4gdGhpcy5fb3ZlcnJpZGVzKSB0aGlzLl9jb3JlW2JdID0gYS5wcm94eSh0aGlzW2JdLCB0aGlzKVxuICAgIH0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYSwgYiwgYywgZDtcbiAgICAgIGZvciAoYSBpbiB0aGlzLl9oYW5kbGVycykgdGhpcy4kZWxlbWVudC5vZmYoYSwgdGhpcy5faGFuZGxlcnNbYV0pO1xuICAgICAgZm9yIChiIGluIHRoaXMuX2NvbnRyb2xzKSB0aGlzLl9jb250cm9sc1tiXS5yZW1vdmUoKTtcbiAgICAgIGZvciAoZCBpbiB0aGlzLm92ZXJpZGVzKSB0aGlzLl9jb3JlW2RdID0gdGhpcy5fb3ZlcnJpZGVzW2RdO1xuICAgICAgZm9yIChjIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbY10gJiYgKHRoaXNbY10gPSBudWxsKVxuICAgIH0sIGUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhLCBiLCBjLCBkID0gdGhpcy5fY29yZS5jbG9uZXMoKS5sZW5ndGggLyAyLCBlID0gZCArIHRoaXMuX2NvcmUuaXRlbXMoKS5sZW5ndGgsXG4gICAgICAgIGYgPSB0aGlzLl9jb3JlLm1heGltdW0oITApLCBnID0gdGhpcy5fY29yZS5zZXR0aW5ncyxcbiAgICAgICAgaCA9IGcuY2VudGVyIHx8IGcuYXV0b1dpZHRoIHx8IGcuZG90c0RhdGEgPyAxIDogZy5kb3RzRWFjaCB8fCBnLml0ZW1zO1xuICAgICAgaWYgKFwicGFnZVwiICE9PSBnLnNsaWRlQnkgJiYgKGcuc2xpZGVCeSA9IE1hdGgubWluKGcuc2xpZGVCeSwgZy5pdGVtcykpLCBnLmRvdHMgfHwgXCJwYWdlXCIgPT0gZy5zbGlkZUJ5KSBmb3IgKHRoaXMuX3BhZ2VzID0gW10sIGEgPSBkLCBiID0gMCwgYyA9IDA7IGEgPCBlOyBhKyspIHtcbiAgICAgICAgaWYgKGIgPj0gaCB8fCAwID09PSBiKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX3BhZ2VzLnB1c2goe1xuICAgICAgICAgICAgc3RhcnQ6IE1hdGgubWluKGYsIGEgLSBkKSxcbiAgICAgICAgICAgIGVuZDogYSAtIGQgKyBoIC0gMVxuICAgICAgICAgIH0pLCBNYXRoLm1pbihmLCBhIC0gZCkgPT09IGYpIGJyZWFrO1xuICAgICAgICAgIGIgPSAwLCArK2NcbiAgICAgICAgfVxuICAgICAgICBiICs9IHRoaXMuX2NvcmUubWVyZ2Vycyh0aGlzLl9jb3JlLnJlbGF0aXZlKGEpKVxuICAgICAgfVxuICAgIH0sIGUucHJvdG90eXBlLmRyYXcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYiwgYyA9IHRoaXMuX2NvcmUuc2V0dGluZ3MsIGQgPSB0aGlzLl9jb3JlLml0ZW1zKCkubGVuZ3RoIDw9IGMuaXRlbXMsXG4gICAgICAgIGUgPSB0aGlzLl9jb3JlLnJlbGF0aXZlKHRoaXMuX2NvcmUuY3VycmVudCgpKSwgZiA9IGMubG9vcCB8fCBjLnJld2luZDtcbiAgICAgIHRoaXMuX2NvbnRyb2xzLiRyZWxhdGl2ZS50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsICFjLm5hdiB8fCBkKSwgYy5uYXYgJiYgKHRoaXMuX2NvbnRyb2xzLiRwcmV2aW91cy50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsICFmICYmIGUgPD0gdGhpcy5fY29yZS5taW5pbXVtKCEwKSksIHRoaXMuX2NvbnRyb2xzLiRuZXh0LnRvZ2dsZUNsYXNzKFwiZGlzYWJsZWRcIiwgIWYgJiYgZSA+PSB0aGlzLl9jb3JlLm1heGltdW0oITApKSksIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS50b2dnbGVDbGFzcyhcImRpc2FibGVkXCIsICFjLmRvdHMgfHwgZCksIGMuZG90cyAmJiAoYiA9IHRoaXMuX3BhZ2VzLmxlbmd0aCAtIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5jaGlsZHJlbigpLmxlbmd0aCwgYy5kb3RzRGF0YSAmJiAwICE9PSBiID8gdGhpcy5fY29udHJvbHMuJGFic29sdXRlLmh0bWwodGhpcy5fdGVtcGxhdGVzLmpvaW4oXCJcIikpIDogYiA+IDAgPyB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUuYXBwZW5kKG5ldyBBcnJheShiICsgMSkuam9pbih0aGlzLl90ZW1wbGF0ZXNbMF0pKSA6IGIgPCAwICYmIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5jaGlsZHJlbigpLnNsaWNlKGIpLnJlbW92ZSgpLCB0aGlzLl9jb250cm9scy4kYWJzb2x1dGUuZmluZChcIi5hY3RpdmVcIikucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksIHRoaXMuX2NvbnRyb2xzLiRhYnNvbHV0ZS5jaGlsZHJlbigpLmVxKGEuaW5BcnJheSh0aGlzLmN1cnJlbnQoKSwgdGhpcy5fcGFnZXMpKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSlcbiAgICB9LCBlLnByb3RvdHlwZS5vblRyaWdnZXIgPSBmdW5jdGlvbiAoYikge1xuICAgICAgdmFyIGMgPSB0aGlzLl9jb3JlLnNldHRpbmdzO1xuICAgICAgYi5wYWdlID0ge1xuICAgICAgICBpbmRleDogYS5pbkFycmF5KHRoaXMuY3VycmVudCgpLCB0aGlzLl9wYWdlcyksXG4gICAgICAgIGNvdW50OiB0aGlzLl9wYWdlcy5sZW5ndGgsXG4gICAgICAgIHNpemU6IGMgJiYgKGMuY2VudGVyIHx8IGMuYXV0b1dpZHRoIHx8IGMuZG90c0RhdGEgPyAxIDogYy5kb3RzRWFjaCB8fCBjLml0ZW1zKVxuICAgICAgfVxuICAgIH0sIGUucHJvdG90eXBlLmN1cnJlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYiA9IHRoaXMuX2NvcmUucmVsYXRpdmUodGhpcy5fY29yZS5jdXJyZW50KCkpO1xuICAgICAgcmV0dXJuIGEuZ3JlcCh0aGlzLl9wYWdlcywgYS5wcm94eShmdW5jdGlvbiAoYSwgYykge1xuICAgICAgICByZXR1cm4gYS5zdGFydCA8PSBiICYmIGEuZW5kID49IGJcbiAgICAgIH0sIHRoaXMpKS5wb3AoKVxuICAgIH0sIGUucHJvdG90eXBlLmdldFBvc2l0aW9uID0gZnVuY3Rpb24gKGIpIHtcbiAgICAgIHZhciBjLCBkLCBlID0gdGhpcy5fY29yZS5zZXR0aW5ncztcbiAgICAgIHJldHVybiBcInBhZ2VcIiA9PSBlLnNsaWRlQnkgPyAoYyA9IGEuaW5BcnJheSh0aGlzLmN1cnJlbnQoKSwgdGhpcy5fcGFnZXMpLCBkID0gdGhpcy5fcGFnZXMubGVuZ3RoLCBiID8gKytjIDogLS1jLCBjID0gdGhpcy5fcGFnZXNbKGMgJSBkICsgZCkgJSBkXS5zdGFydCkgOiAoYyA9IHRoaXMuX2NvcmUucmVsYXRpdmUodGhpcy5fY29yZS5jdXJyZW50KCkpLCBkID0gdGhpcy5fY29yZS5pdGVtcygpLmxlbmd0aCwgYiA/IGMgKz0gZS5zbGlkZUJ5IDogYyAtPSBlLnNsaWRlQnkpLCBjXG4gICAgfSwgZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICBhLnByb3h5KHRoaXMuX292ZXJyaWRlcy50bywgdGhpcy5fY29yZSkodGhpcy5nZXRQb3NpdGlvbighMCksIGIpXG4gICAgfSwgZS5wcm90b3R5cGUucHJldiA9IGZ1bmN0aW9uIChiKSB7XG4gICAgICBhLnByb3h5KHRoaXMuX292ZXJyaWRlcy50bywgdGhpcy5fY29yZSkodGhpcy5nZXRQb3NpdGlvbighMSksIGIpXG4gICAgfSwgZS5wcm90b3R5cGUudG8gPSBmdW5jdGlvbiAoYiwgYywgZCkge1xuICAgICAgdmFyIGU7XG4gICAgICAhZCAmJiB0aGlzLl9wYWdlcy5sZW5ndGggPyAoZSA9IHRoaXMuX3BhZ2VzLmxlbmd0aCwgYS5wcm94eSh0aGlzLl9vdmVycmlkZXMudG8sIHRoaXMuX2NvcmUpKHRoaXMuX3BhZ2VzWyhiICUgZSArIGUpICUgZV0uc3RhcnQsIGMpKSA6IGEucHJveHkodGhpcy5fb3ZlcnJpZGVzLnRvLCB0aGlzLl9jb3JlKShiLCBjKVxuICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5OYXZpZ2F0aW9uID0gZVxuICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcbiAgICB2YXIgZSA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICB0aGlzLl9jb3JlID0gYywgdGhpcy5faGFzaGVzID0ge30sIHRoaXMuJGVsZW1lbnQgPSB0aGlzLl9jb3JlLiRlbGVtZW50LCB0aGlzLl9oYW5kbGVycyA9IHtcbiAgICAgICAgXCJpbml0aWFsaXplZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYykge1xuICAgICAgICAgIGMubmFtZXNwYWNlICYmIFwiVVJMSGFzaFwiID09PSB0aGlzLl9jb3JlLnNldHRpbmdzLnN0YXJ0UG9zaXRpb24gJiYgYShiKS50cmlnZ2VyKFwiaGFzaGNoYW5nZS5vd2wubmF2aWdhdGlvblwiKVxuICAgICAgICB9LCB0aGlzKSwgXCJwcmVwYXJlZC5vd2wuY2Fyb3VzZWxcIjogYS5wcm94eShmdW5jdGlvbiAoYikge1xuICAgICAgICAgIGlmIChiLm5hbWVzcGFjZSkge1xuICAgICAgICAgICAgdmFyIGMgPSBhKGIuY29udGVudCkuZmluZChcIltkYXRhLWhhc2hdXCIpLmFkZEJhY2soXCJbZGF0YS1oYXNoXVwiKS5hdHRyKFwiZGF0YS1oYXNoXCIpO1xuICAgICAgICAgICAgaWYgKCFjKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLl9oYXNoZXNbY10gPSBiLmNvbnRlbnRcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRoaXMpLCBcImNoYW5nZWQub3dsLmNhcm91c2VsXCI6IGEucHJveHkoZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICBpZiAoYy5uYW1lc3BhY2UgJiYgXCJwb3NpdGlvblwiID09PSBjLnByb3BlcnR5Lm5hbWUpIHtcbiAgICAgICAgICAgIHZhciBkID0gdGhpcy5fY29yZS5pdGVtcyh0aGlzLl9jb3JlLnJlbGF0aXZlKHRoaXMuX2NvcmUuY3VycmVudCgpKSksXG4gICAgICAgICAgICAgIGUgPSBhLm1hcCh0aGlzLl9oYXNoZXMsIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEgPT09IGQgPyBiIDogbnVsbFxuICAgICAgICAgICAgICB9KS5qb2luKCk7XG4gICAgICAgICAgICBpZiAoIWUgfHwgYi5sb2NhdGlvbi5oYXNoLnNsaWNlKDEpID09PSBlKSByZXR1cm47XG4gICAgICAgICAgICBiLmxvY2F0aW9uLmhhc2ggPSBlXG4gICAgICAgICAgfVxuICAgICAgICB9LCB0aGlzKVxuICAgICAgfSwgdGhpcy5fY29yZS5vcHRpb25zID0gYS5leHRlbmQoe30sIGUuRGVmYXVsdHMsIHRoaXMuX2NvcmUub3B0aW9ucyksIHRoaXMuJGVsZW1lbnQub24odGhpcy5faGFuZGxlcnMpLCBhKGIpLm9uKFwiaGFzaGNoYW5nZS5vd2wubmF2aWdhdGlvblwiLCBhLnByb3h5KGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBjID0gYi5sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKSwgZSA9IHRoaXMuX2NvcmUuJHN0YWdlLmNoaWxkcmVuKCksXG4gICAgICAgICAgZiA9IHRoaXMuX2hhc2hlc1tjXSAmJiBlLmluZGV4KHRoaXMuX2hhc2hlc1tjXSk7XG4gICAgICAgIGYgIT09IGQgJiYgZiAhPT0gdGhpcy5fY29yZS5jdXJyZW50KCkgJiYgdGhpcy5fY29yZS50byh0aGlzLl9jb3JlLnJlbGF0aXZlKGYpLCAhMSwgITApXG4gICAgICB9LCB0aGlzKSlcbiAgICB9O1xuICAgIGUuRGVmYXVsdHMgPSB7VVJMaGFzaExpc3RlbmVyOiAhMX0sIGUucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYywgZDtcbiAgICAgIGEoYikub2ZmKFwiaGFzaGNoYW5nZS5vd2wubmF2aWdhdGlvblwiKTtcbiAgICAgIGZvciAoYyBpbiB0aGlzLl9oYW5kbGVycykgdGhpcy5fY29yZS4kZWxlbWVudC5vZmYoYywgdGhpcy5faGFuZGxlcnNbY10pO1xuICAgICAgZm9yIChkIGluIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSBcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHRoaXNbZF0gJiYgKHRoaXNbZF0gPSBudWxsKVxuICAgIH0sIGEuZm4uc2J5T3dsQ2Fyb3VzZWwuQ29uc3RydWN0b3IuUGx1Z2lucy5IYXNoID0gZVxuICB9KHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KSwgZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICBmdW5jdGlvbiBlKGIsIGMpIHtcbiAgICAgIHZhciBlID0gITEsIGYgPSBiLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgYi5zbGljZSgxKTtcbiAgICAgIHJldHVybiBhLmVhY2goKGIgKyBcIiBcIiArIGguam9pbihmICsgXCIgXCIpICsgZikuc3BsaXQoXCIgXCIpLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBpZiAoZ1tiXSAhPT0gZCkgcmV0dXJuIGUgPSAhYyB8fCBiLCAhMVxuICAgICAgfSksIGVcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmKGEpIHtcbiAgICAgIHJldHVybiBlKGEsICEwKVxuICAgIH1cblxuICAgIHZhciBnID0gYShcIjxzdXBwb3J0PlwiKS5nZXQoMCkuc3R5bGUsIGggPSBcIldlYmtpdCBNb3ogTyBtc1wiLnNwbGl0KFwiIFwiKSwgaSA9IHtcbiAgICAgIHRyYW5zaXRpb246IHtcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgV2Via2l0VHJhbnNpdGlvbjogXCJ3ZWJraXRUcmFuc2l0aW9uRW5kXCIsXG4gICAgICAgICAgTW96VHJhbnNpdGlvbjogXCJ0cmFuc2l0aW9uZW5kXCIsXG4gICAgICAgICAgT1RyYW5zaXRpb246IFwib1RyYW5zaXRpb25FbmRcIixcbiAgICAgICAgICB0cmFuc2l0aW9uOiBcInRyYW5zaXRpb25lbmRcIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYW5pbWF0aW9uOiB7XG4gICAgICAgIGVuZDoge1xuICAgICAgICAgIFdlYmtpdEFuaW1hdGlvbjogXCJ3ZWJraXRBbmltYXRpb25FbmRcIixcbiAgICAgICAgICBNb3pBbmltYXRpb246IFwiYW5pbWF0aW9uZW5kXCIsXG4gICAgICAgICAgT0FuaW1hdGlvbjogXCJvQW5pbWF0aW9uRW5kXCIsXG4gICAgICAgICAgYW5pbWF0aW9uOiBcImFuaW1hdGlvbmVuZFwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBqID0ge1xuICAgICAgY3NzdHJhbnNmb3JtczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISFlKFwidHJhbnNmb3JtXCIpXG4gICAgICB9LCBjc3N0cmFuc2Zvcm1zM2Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhZShcInBlcnNwZWN0aXZlXCIpXG4gICAgICB9LCBjc3N0cmFuc2l0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISFlKFwidHJhbnNpdGlvblwiKVxuICAgICAgfSwgY3NzYW5pbWF0aW9uczogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISFlKFwiYW5pbWF0aW9uXCIpXG4gICAgICB9XG4gICAgfTtcbiAgICBqLmNzc3RyYW5zaXRpb25zKCkgJiYgKGEuc3VwcG9ydC50cmFuc2l0aW9uID0gbmV3IFN0cmluZyhmKFwidHJhbnNpdGlvblwiKSksIGEuc3VwcG9ydC50cmFuc2l0aW9uLmVuZCA9IGkudHJhbnNpdGlvbi5lbmRbYS5zdXBwb3J0LnRyYW5zaXRpb25dKSwgai5jc3NhbmltYXRpb25zKCkgJiYgKGEuc3VwcG9ydC5hbmltYXRpb24gPSBuZXcgU3RyaW5nKGYoXCJhbmltYXRpb25cIikpLCBhLnN1cHBvcnQuYW5pbWF0aW9uLmVuZCA9IGkuYW5pbWF0aW9uLmVuZFthLnN1cHBvcnQuYW5pbWF0aW9uXSksIGouY3NzdHJhbnNmb3JtcygpICYmIChhLnN1cHBvcnQudHJhbnNmb3JtID0gbmV3IFN0cmluZyhmKFwidHJhbnNmb3JtXCIpKSwgYS5zdXBwb3J0LnRyYW5zZm9ybTNkID0gai5jc3N0cmFuc2Zvcm1zM2QoKSlcbiAgfSh3aW5kb3cuWmVwdG8gfHwgd2luZG93LmpRdWVyeSwgd2luZG93LCBkb2N1bWVudCk7XG5cbiAgLy8gVHdvIFJvdyBDYXJvdXNlbFxuICA7KGZ1bmN0aW9uICgkLCB3aW5kb3csIGRvY3VtZW50LCB1bmRlZmluZWQpIHtcbiAgICBPd2wycm93ID0gZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgICB0aGlzLm93bCA9IHNjb3BlO1xuICAgICAgdGhpcy5vd2wub3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCBPd2wycm93LkRlZmF1bHRzLCB0aGlzLm93bC5vcHRpb25zKTtcbiAgICAgIC8vbGluayBjYWxsYmFjayBldmVudHMgd2l0aCBvd2wgY2Fyb3VzZWwgaGVyZVxuXG4gICAgICB0aGlzLmhhbmRsZXJzID0ge1xuICAgICAgICAnaW5pdGlhbGl6ZS5vd2wuY2Fyb3VzZWwnOiAkLnByb3h5KGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgaWYgKHRoaXMub3dsLnNldHRpbmdzLm93bDJyb3cpIHtcbiAgICAgICAgICAgIHRoaXMuYnVpbGQycm93KHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcylcbiAgICAgIH07XG5cbiAgICAgIHRoaXMub3dsLiRlbGVtZW50Lm9uKHRoaXMuaGFuZGxlcnMpO1xuICAgIH07XG5cbiAgICBPd2wycm93LkRlZmF1bHRzID0ge1xuICAgICAgb3dsMnJvdzogZmFsc2UsXG4gICAgICBvd2wycm93VGFyZ2V0OiAnc2J5X2l0ZW0nLFxuICAgICAgb3dsMnJvd0NvbnRhaW5lcjogJ3NieV9vd2wycm93LWl0ZW0nLFxuICAgICAgb3dsMnJvd0RpcmVjdGlvbjogJ3V0ZCcgLy8gbHRyXG4gICAgfTtcblxuICAgIC8vbWVodG9kczpcbiAgICBPd2wycm93LnByb3RvdHlwZS5idWlsZDJyb3cgPSBmdW5jdGlvbiAodGhpc1Njb3BlKSB7XG5cbiAgICAgIHZhciBjYXJvdXNlbCA9ICQodGhpc1Njb3BlLm93bC4kZWxlbWVudCk7XG4gICAgICB2YXIgY2Fyb3VzZWxJdGVtcyA9IGNhcm91c2VsLmZpbmQoJy4nICsgdGhpc1Njb3BlLm93bC5vcHRpb25zLm93bDJyb3dUYXJnZXQpO1xuXG4gICAgICB2YXIgYUV2ZW5FbGVtZW50cyA9IFtdO1xuICAgICAgdmFyIGFPZGRFbGVtZW50cyA9IFtdO1xuXG4gICAgICAkLmVhY2goY2Fyb3VzZWxJdGVtcywgZnVuY3Rpb24gKGluZGV4LCBpdGVtKSB7XG4gICAgICAgIGlmIChpbmRleCAlIDIgPT09IDApIHtcbiAgICAgICAgICBhRXZlbkVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYU9kZEVsZW1lbnRzLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvL2Nhcm91c2VsLmVtcHR5KCk7XG5cbiAgICAgIHN3aXRjaCAodGhpc1Njb3BlLm93bC5vcHRpb25zLm93bDJyb3dEaXJlY3Rpb24pIHtcbiAgICAgICAgY2FzZSAnbHRyJzpcbiAgICAgICAgICB0aGlzU2NvcGUubGVmdFRvcmlnaHQodGhpc1Njb3BlLCBjYXJvdXNlbCwgY2Fyb3VzZWxJdGVtcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdCA6XG4gICAgICAgICAgdGhpc1Njb3BlLnVwVG9kb3duKHRoaXNTY29wZSwgYUV2ZW5FbGVtZW50cywgYU9kZEVsZW1lbnRzLCBjYXJvdXNlbCk7XG4gICAgICB9XG5cbiAgICB9O1xuXG4gICAgT3dsMnJvdy5wcm90b3R5cGUubGVmdFRvcmlnaHQgPSBmdW5jdGlvbiAodGhpc1Njb3BlLCBjYXJvdXNlbCwgY2Fyb3VzZWxJdGVtcykge1xuXG4gICAgICB2YXIgbzJ3Q29udGFpbmVyQ2xhc3MgPSB0aGlzU2NvcGUub3dsLm9wdGlvbnMub3dsMnJvd0NvbnRhaW5lcjtcbiAgICAgIHZhciBvd2xNYXJnaW4gPSB0aGlzU2NvcGUub3dsLm9wdGlvbnMubWFyZ2luO1xuICAgICAgdmFyIGNhcm91c2VsSXRlbXNMZW5ndGggPSBjYXJvdXNlbEl0ZW1zLmxlbmd0aDtcbiAgICAgIHZhciBmaXJzQXJyID0gW107XG4gICAgICB2YXIgc2Vjb25kQXJyID0gW107XG5cbiAgICAgIGlmIChjYXJvdXNlbEl0ZW1zTGVuZ3RoICUgMiA9PT0gMSkge1xuICAgICAgICBjYXJvdXNlbEl0ZW1zTGVuZ3RoID0gKChjYXJvdXNlbEl0ZW1zTGVuZ3RoIC0gMSkgLyAyKSArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYXJvdXNlbEl0ZW1zTGVuZ3RoID0gY2Fyb3VzZWxJdGVtc0xlbmd0aCAvIDI7XG4gICAgICB9XG5cbiAgICAgICQuZWFjaChjYXJvdXNlbEl0ZW1zLCBmdW5jdGlvbiAoaW5kZXgsIGl0ZW0pIHtcblxuXG4gICAgICAgIGlmIChpbmRleCA8IGNhcm91c2VsSXRlbXNMZW5ndGgpIHtcbiAgICAgICAgICBmaXJzQXJyLnB1c2goaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Vjb25kQXJyLnB1c2goaXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAkLmVhY2goZmlyc0FyciwgZnVuY3Rpb24gKGluZGV4LCBpdGVtKSB7XG4gICAgICAgIHZhciByb3dDb250YWluZXIgPSAkKCc8ZGl2IGNsYXNzPVwiJyArIG8yd0NvbnRhaW5lckNsYXNzICsgJ1wiLz4nKTtcblxuICAgICAgICB2YXIgZmlyc3RSb3dFbGVtZW50ID0gZmlyc0FycltpbmRleF07XG4gICAgICAgIGZpcnN0Um93RWxlbWVudC5zdHlsZS5tYXJnaW5Cb3R0b20gPSBvd2xNYXJnaW4gKyAncHgnO1xuXG4gICAgICAgIHJvd0NvbnRhaW5lclxuICAgICAgICAgIC5hcHBlbmQoZmlyc3RSb3dFbGVtZW50KVxuICAgICAgICAgIC5hcHBlbmQoc2Vjb25kQXJyW2luZGV4XSk7XG5cbiAgICAgICAgY2Fyb3VzZWwuYXBwZW5kKHJvd0NvbnRhaW5lcik7XG4gICAgICB9KTtcblxuICAgIH07XG5cbiAgICBPd2wycm93LnByb3RvdHlwZS51cFRvZG93biA9IGZ1bmN0aW9uICh0aGlzU2NvcGUsIGFFdmVuRWxlbWVudHMsIGFPZGRFbGVtZW50cywgY2Fyb3VzZWwpIHtcblxuICAgICAgdmFyIG8yd0NvbnRhaW5lckNsYXNzID0gdGhpc1Njb3BlLm93bC5vcHRpb25zLm93bDJyb3dDb250YWluZXI7XG4gICAgICB2YXIgb3dsTWFyZ2luID0gdGhpc1Njb3BlLm93bC5vcHRpb25zLm1hcmdpbjtcblxuICAgICAgJC5lYWNoKGFFdmVuRWxlbWVudHMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuXG4gICAgICAgIHZhciByb3dDb250YWluZXIgPSAkKCc8ZGl2IGNsYXNzPVwiJyArIG8yd0NvbnRhaW5lckNsYXNzICsgJ1wiLz4nKTtcbiAgICAgICAgdmFyIGV2ZW5FbGVtZW50ID0gYUV2ZW5FbGVtZW50c1tpbmRleF07XG5cbiAgICAgICAgZXZlbkVsZW1lbnQuc3R5bGUubWFyZ2luQm90dG9tID0gb3dsTWFyZ2luICsgJ3B4JztcblxuICAgICAgICByb3dDb250YWluZXJcbiAgICAgICAgICAuYXBwZW5kKGV2ZW5FbGVtZW50KVxuICAgICAgICAgIC5hcHBlbmQoYU9kZEVsZW1lbnRzW2luZGV4XSk7XG5cbiAgICAgICAgY2Fyb3VzZWwuYXBwZW5kKHJvd0NvbnRhaW5lcik7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRGVzdHJveXMgdGhlIHBsdWdpbi5cbiAgICAgKi9cbiAgICBPd2wycm93LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGhhbmRsZXIsIHByb3BlcnR5O1xuICAgIH07XG5cbiAgICAkLmZuLnNieU93bENhcm91c2VsLkNvbnN0cnVjdG9yLlBsdWdpbnNbJ293bDJyb3cnXSA9IE93bDJyb3c7XG4gIH0pKHdpbmRvdy5aZXB0byB8fCB3aW5kb3cualF1ZXJ5LCB3aW5kb3csIGRvY3VtZW50KTtcblxuICAoZnVuY3Rpb24oJCl7XG5cbiAgICBmdW5jdGlvbiBzYnlBZGRWaXNpYmlsaXR5TGlzdGVuZXIoKSB7XG4gICAgICAvKiBEZXRlY3Qgd2hlbiBlbGVtZW50IGJlY29tZXMgdmlzaWJsZS4gVXNlZCBmb3Igd2hlbiB0aGUgZmVlZCBpcyBpbml0aWFsbHkgaGlkZGVuLCBpbiBhIHRhYiBmb3IgZXhhbXBsZS4gaHR0cHM6Ly9naXRodWIuY29tL3NoYXVuYm93ZS9qcXVlcnkudmlzaWJpbGl0eUNoYW5nZWQgKi9cbiAgICAgICFmdW5jdGlvbiAoaSkge1xuICAgICAgICB2YXIgbiA9IHtcbiAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIH0sIHJ1bk9uTG9hZDogITAsIGZyZXF1ZW5jeTogMTAwLCBzYnlQcmV2aW91c1Zpc2liaWxpdHk6IG51bGxcbiAgICAgICAgfSwgYyA9IHt9O1xuICAgICAgICBjLnNieUNoZWNrVmlzaWJpbGl0eSA9IGZ1bmN0aW9uIChpLCBuKSB7XG4gICAgICAgICAgaWYgKGpRdWVyeS5jb250YWlucyhkb2N1bWVudCwgaVswXSkpIHtcbiAgICAgICAgICAgIHZhciBlID0gbi5zYnlQcmV2aW91c1Zpc2liaWxpdHksIHQgPSBpLmlzKFwiOnZpc2libGVcIik7XG4gICAgICAgICAgICBuLnNieVByZXZpb3VzVmlzaWJpbGl0eSA9IHQsIG51bGwgPT0gZSA/IG4ucnVuT25Mb2FkICYmIG4uY2FsbGJhY2soaSwgdCkgOiBlICE9PSB0ICYmIG4uY2FsbGJhY2soaSwgdCksIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBjLnNieUNoZWNrVmlzaWJpbGl0eShpLCBuKVxuICAgICAgICAgICAgfSwgbi5mcmVxdWVuY3kpXG4gICAgICAgICAgfVxuICAgICAgICB9LCBpLmZuLnNieVZpc2liaWxpdHlDaGFuZ2VkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICB2YXIgdCA9IGkuZXh0ZW5kKHt9LCBuLCBlKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGMuc2J5Q2hlY2tWaXNpYmlsaXR5KGkodGhpcyksIHQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfShqUXVlcnkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFNieSgpIHtcbiAgICAgIHRoaXMuZmVlZHMgPSB7fTtcbiAgICAgIHRoaXMuY3RhcyA9IHt9O1xuICAgICAgdGhpcy5vcHRpb25zID0gc2J5T3B0aW9ucztcbiAgICAgIHRoaXMuaXNUb3VjaCA9IHNieUlzVG91Y2goKTtcbiAgICB9XG5cbiAgICBTYnkucHJvdG90eXBlID0ge1xuICAgICAgY3JlYXRlUGFnZTogZnVuY3Rpb24gKGNyZWF0ZUZlZWRzLCBjcmVhdGVGZWVkc0FyZ3MpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5YWpheHVybCA9PT0gJ3VuZGVmaW5lZCcgfHwgd2luZG93LnNieWFqYXh1cmwuaW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUpID09PSAtMSkge1xuICAgICAgICAgIHdpbmRvdy5zYnlhamF4dXJsID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICsgJy93cC1hZG1pbi9hZG1pbi1hamF4LnBocCc7XG4gICAgICAgIH1cblxuICAgICAgICAkKCcuc2J5X25vX2pzX2Vycm9yX21lc3NhZ2UnKS5yZW1vdmUoKTtcbiAgICAgICAgJCgnLnNieV9ub19qcycpLnJlbW92ZUNsYXNzKCdzYnlfbm9fanMnKTtcblxuICAgICAgICBjcmVhdGVGZWVkcyhjcmVhdGVGZWVkc0FyZ3MpO1xuICAgICAgfSxcbiAgICAgIG1heWJlQWRkWVRBUEk6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgeW91dHViZVNjcmlwdElkID0gXCJzYnkteW91dHViZS1hcGlcIjtcbiAgICAgICAgdmFyIHlvdXR1YmVTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh5b3V0dWJlU2NyaXB0SWQpO1xuXG4gICAgICAgIGlmICh5b3V0dWJlU2NyaXB0ID09PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgdmFyIGZpcnN0U2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJzY3JpcHRcIilbMF07XG5cbiAgICAgICAgICB0YWcuc3JjID0gXCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9pZnJhbWVfYXBpXCI7XG4gICAgICAgICAgdGFnLmlkID0geW91dHViZVNjcmlwdElkO1xuICAgICAgICAgIGZpcnN0U2NyaXB0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRhZywgZmlyc3RTY3JpcHQpO1xuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjcmVhdGVMaWdodGJveDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBsYkJ1aWxkZXIgPSBzYnlHZXRsaWdodGJveEJ1aWxkZXIoKTtcbiAgICAgICAgdmFyIHNieV9sYl9kZWxheSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHNieV90aW1lciA9IDA7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzYnlfY2FsbGJhY2ssIHNieV9tcykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHNieV90aW1lcik7XG4gICAgICAgICAgICBzYnlfdGltZXIgPSBzZXRUaW1lb3V0KHNieV9jYWxsYmFjaywgc2J5X21zKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KSgpO1xuICAgICAgICBqUXVlcnkod2luZG93KS5vbigncmVzaXplJyxmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2J5X2xiX2RlbGF5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxiQnVpbGRlci5hZnRlclJlc2l6ZSgpO1xuICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvKiBMaWdodGJveCB2Mi43LjEgYnkgTG9rZXNoIERoYWthciAtIGh0dHA6Ly9sb2tlc2hkaGFrYXIuY29tL3Byb2plY3RzL2xpZ2h0Ym94Mi8gLSBIZWF2aWx5IG1vZGlmaWVkIHNwZWNpZmljYWxseSBmb3IgdGhpcyBwbHVnaW4gKi9cbiAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBhID0galF1ZXJ5LFxuICAgICAgICAgICAgYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBhKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFkZUR1cmF0aW9uID0gNTAwLCB0aGlzLmZpdEltYWdlc0luVmlld3BvcnQgPSAhMCwgdGhpcy5yZXNpemVEdXJhdGlvbiA9IDcwMCwgdGhpcy5wb3NpdGlvbkZyb21Ub3AgPSA1MCwgdGhpcy5zaG93SW1hZ2VOdW1iZXJMYWJlbCA9ICEwLCB0aGlzLmFsd2F5c1Nob3dOYXZPblRvdWNoRGV2aWNlcyA9ICExLCB0aGlzLndyYXBBcm91bmQgPSAhMVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBhLnByb3RvdHlwZS5hbGJ1bUxhYmVsID0gZnVuY3Rpb24oYSwgYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhICsgXCIgLyBcIiArIGJcbiAgICAgICAgICAgICAgfSwgYVxuICAgICAgICAgICAgfSgpLFxuICAgICAgICAgICAgYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBmdW5jdGlvbiBiKGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSBhLCB0aGlzLmFsYnVtID0gW10sIHRoaXMuY3VycmVudEltYWdlSW5kZXggPSB2b2lkIDAsIHRoaXMuaW5pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGIucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpLCB0aGlzLmJ1aWxkKClcbiAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGEoXCJib2R5XCIpLm9uKFwiY2xpY2tcIiwgXCJhW2RhdGEtc2J5LWxpZ2h0Ym94XVwiLCBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYi5zdGFydChhKGMuY3VycmVudFRhcmdldCkpLCAhMVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGEoXCJcIitcbiAgICAgICAgICAgICAgICAgIGxiQnVpbGRlci50ZW1wbGF0ZSgpKS5hcHBlbmRUbyhhKFwiYm9keVwiKSksIHRoaXMuJGxpZ2h0Ym94ID0gYShcIiNzYnlfbGlnaHRib3hcIiksIHRoaXMuJG92ZXJsYXkgPSBhKFwiI3NieV9saWdodGJveE92ZXJsYXlcIiksIHRoaXMuJG91dGVyQ29udGFpbmVyID0gdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItb3V0ZXJDb250YWluZXJcIiksIHRoaXMuJGNvbnRhaW5lciA9IHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWNvbnRhaW5lclwiKSwgdGhpcy5jb250YWluZXJUb3BQYWRkaW5nID0gcGFyc2VJbnQodGhpcy4kY29udGFpbmVyLmNzcyhcInBhZGRpbmctdG9wXCIpLCAxMCksIHRoaXMuY29udGFpbmVyUmlnaHRQYWRkaW5nID0gcGFyc2VJbnQodGhpcy4kY29udGFpbmVyLmNzcyhcInBhZGRpbmctcmlnaHRcIiksIDEwKSwgdGhpcy5jb250YWluZXJCb3R0b21QYWRkaW5nID0gcGFyc2VJbnQodGhpcy4kY29udGFpbmVyLmNzcyhcInBhZGRpbmctYm90dG9tXCIpLCAxMCksIHRoaXMuY29udGFpbmVyTGVmdFBhZGRpbmcgPSBwYXJzZUludCh0aGlzLiRjb250YWluZXIuY3NzKFwicGFkZGluZy1sZWZ0XCIpLCAxMCksIHRoaXMuJG92ZXJsYXkuaGlkZSgpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYi5lbmQoKSwgITFcbiAgICAgICAgICAgICAgICB9KSwgalF1ZXJ5KGRvY3VtZW50KS5vbignY2xpY2snLCBmdW5jdGlvbihldmVudCwgYiwgYykge1xuICAgICAgICAgICAgICAgICAgLy9GYWRlIG91dCB0aGUgbGlnaHRib3ggaWYgY2xpY2sgYW55d2hlcmUgb3V0c2lkZSBvZiB0aGUgdHdvIGVsZW1lbnRzIGRlZmluZWQgYmVsb3dcbiAgICAgICAgICAgICAgICAgIGlmICghalF1ZXJ5KGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnLnNieV9sYi1vdXRlckNvbnRhaW5lcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWpRdWVyeShldmVudC50YXJnZXQpLmNsb3Nlc3QoJy5zYnlfbGItZGF0YUNvbnRhaW5lcicpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgIC8vRmFkZSBvdXQgbGlnaHRib3hcbiAgICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeSgnI3NieV9saWdodGJveE92ZXJsYXksICNzYnlfbGlnaHRib3gnKS5mYWRlT3V0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSwgdGhpcy4kbGlnaHRib3guaGlkZSgpLFxuICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2J5X2xpZ2h0Ym94T3ZlcmxheScpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJzYnlfbGlnaHRib3hcIiA9PT0gYShjLnRhcmdldCkuYXR0cihcImlkXCIpICYmIGIuZW5kKCksICExXG4gICAgICAgICAgICAgICAgICB9KSwgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItcHJldlwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBiLmNoYW5nZUltYWdlKDAgPT09IGIuY3VycmVudEltYWdlSW5kZXggPyBiLmFsYnVtLmxlbmd0aCAtIDEgOiBiLmN1cnJlbnRJbWFnZUluZGV4IC0gMSksICExXG4gICAgICAgICAgICAgICAgfSksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWNvbnRhaW5lclwiKS5vbihcInN3aXBlcmlnaHRcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGIuY2hhbmdlSW1hZ2UoMCA9PT0gYi5jdXJyZW50SW1hZ2VJbmRleCA/IGIuYWxidW0ubGVuZ3RoIC0gMSA6IGIuY3VycmVudEltYWdlSW5kZXggLSAxKSwgITFcbiAgICAgICAgICAgICAgICB9KSwgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbmV4dFwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBiLmNoYW5nZUltYWdlKGIuY3VycmVudEltYWdlSW5kZXggPT09IGIuYWxidW0ubGVuZ3RoIC0gMSA/IDAgOiBiLmN1cnJlbnRJbWFnZUluZGV4ICsgMSksICExXG4gICAgICAgICAgICAgICAgfSksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWNvbnRhaW5lclwiKS5vbihcInN3aXBlbGVmdFwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIGxiQnVpbGRlci5wYXVzZVBsYXllcigpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gYi5jaGFuZ2VJbWFnZShiLmN1cnJlbnRJbWFnZUluZGV4ID09PSBiLmFsYnVtLmxlbmd0aCAtIDEgPyAwIDogYi5jdXJyZW50SW1hZ2VJbmRleCArIDEpLCAhMVxuICAgICAgICAgICAgICAgIH0pLCB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1sb2FkZXIsIC5zYnlfbGItY2xvc2VcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbigpIHtcblxuICAgICAgICAgICAgICAgICAgbGJCdWlsZGVyLnBhdXNlUGxheWVyKCk7XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBiLmVuZCgpLCAhMVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24oYikge1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGMoYSkge1xuICAgICAgICAgICAgICAgICAgZC5hbGJ1bS5wdXNoKGxiQnVpbGRlci5nZXREYXRhKGEpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZCA9IHRoaXMsXG4gICAgICAgICAgICAgICAgICBlID0gYSh3aW5kb3cpO1xuICAgICAgICAgICAgICAgIGUub24oXCJyZXNpemVcIiwgYS5wcm94eSh0aGlzLnNpemVPdmVybGF5LCB0aGlzKSksIGEoXCJzZWxlY3QsIG9iamVjdCwgZW1iZWRcIikuY3NzKHtcbiAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICB9KSwgdGhpcy5zaXplT3ZlcmxheSgpLCB0aGlzLmFsYnVtID0gW107XG4gICAgICAgICAgICAgICAgdmFyIGYsIGcgPSAwLFxuICAgICAgICAgICAgICAgICAgaCA9IGIuYXR0cihcImRhdGEtc2J5LWxpZ2h0Ym94XCIpO1xuICAgICAgICAgICAgICAgIGlmIChoKSB7XG4gICAgICAgICAgICAgICAgICBmID0gYShiLnByb3AoXCJ0YWdOYW1lXCIpICsgJ1tkYXRhLXNieS1saWdodGJveD1cIicgKyBoICsgJ1wiXScpO1xuICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmLmxlbmd0aDsgaSA9ICsraSkgYyhhKGZbaV0pKSwgZltpXSA9PT0gYlswXSAmJiAoZyA9IGkpXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcImxpZ2h0Ym94XCIgPT09IGIuYXR0cihcInJlbFwiKSkgYyhiKTtcbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGYgPSBhKGIucHJvcChcInRhZ05hbWVcIikgKyAnW3JlbD1cIicgKyBiLmF0dHIoXCJyZWxcIikgKyAnXCJdJyk7XG4gICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGYubGVuZ3RoOyBqID0gKytqKSBjKGEoZltqXSkpLCBmW2pdID09PSBiWzBdICYmIChnID0gailcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGsgPSBlLnNjcm9sbFRvcCgpICsgdGhpcy5vcHRpb25zLnBvc2l0aW9uRnJvbVRvcCxcbiAgICAgICAgICAgICAgICAgIGwgPSBlLnNjcm9sbExlZnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5jc3Moe1xuICAgICAgICAgICAgICAgICAgdG9wOiBrICsgXCJweFwiLFxuICAgICAgICAgICAgICAgICAgbGVmdDogbCArIFwicHhcIlxuICAgICAgICAgICAgICAgIH0pLmZhZGVJbih0aGlzLm9wdGlvbnMuZmFkZUR1cmF0aW9uKSwgdGhpcy5jaGFuZ2VJbWFnZShnKVxuICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5jaGFuZ2VJbWFnZSA9IGZ1bmN0aW9uKGIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IHRoaXM7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlS2V5Ym9hcmROYXYoKTtcbiAgICAgICAgICAgICAgICB2YXIgZCA9IHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWltYWdlXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuJG92ZXJsYXkuZmFkZUluKHRoaXMub3B0aW9ucy5mYWRlRHVyYXRpb24pLCBhKFwiLnNieV9sYi1sb2FkZXJcIikuZmFkZUluKFwic2xvd1wiKSwgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItaW1hZ2UsIC5zYnlfbGItbmF2LCAuc2J5X2xiLXByZXYsIC5zYnlfbGItbmV4dCwgLnNieV9sYi1kYXRhQ29udGFpbmVyLCAuc2J5X2xiLW51bWJlcnMsIC5zYnlfbGItY2FwdGlvblwiKS5oaWRlKCksIHRoaXMuJG91dGVyQ29udGFpbmVyLmFkZENsYXNzKFwiYW5pbWF0aW5nXCIpO1xuICAgICAgICAgICAgICAgIHZhciBlID0gbmV3IEltYWdlO1xuICAgICAgICAgICAgICAgIGUub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZiwgZywgaCwgaSwgaiwgaywgbDtcbiAgICAgICAgICAgICAgICAgIHZhciBzYnlBcnJvd1dpZHRoID0gMTAwO1xuICAgICAgICAgICAgICAgICAgZC5hdHRyKFwic3JjXCIsIGMuYWxidW1bYl0ubGluayksIGYgPSBhKGUpLCBkLndpZHRoKGUud2lkdGgpLCBkLmhlaWdodChlLmhlaWdodCksIGMub3B0aW9ucy5maXRJbWFnZXNJblZpZXdwb3J0ICYmIChsID0gYSh3aW5kb3cpLndpZHRoKCksIGsgPSBhKHdpbmRvdykuaGVpZ2h0KCksIGogPSBsIC0gYy5jb250YWluZXJMZWZ0UGFkZGluZyAtIGMuY29udGFpbmVyUmlnaHRQYWRkaW5nIC0gMjAgLSBzYnlBcnJvd1dpZHRoLCBpID0gayAtIGMuY29udGFpbmVyVG9wUGFkZGluZyAtIGMuY29udGFpbmVyQm90dG9tUGFkZGluZyAtIDE1MCwgKGUud2lkdGggPiBqIHx8IGUuaGVpZ2h0ID4gaSkgJiYgKGUud2lkdGggLyBqID4gZS5oZWlnaHQgLyBpID8gKGggPSBqLCBnID0gcGFyc2VJbnQoZS5oZWlnaHQgLyAoZS53aWR0aCAvIGgpLCAxMCksIGQud2lkdGgoaCksIGQuaGVpZ2h0KGcpKSA6IChnID0gaSwgaCA9IHBhcnNlSW50KGUud2lkdGggLyAoZS5oZWlnaHQgLyBnKSwgMTApLCBkLndpZHRoKGgpLCBkLmhlaWdodChnKSkpKSwgYy5zaXplQ29udGFpbmVyKGQud2lkdGgoKSwgZC5oZWlnaHQoKSlcbiAgICAgICAgICAgICAgICB9LCBlLnNyYyA9IHRoaXMuYWxidW1bYl0ubGluaywgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA9IGJcbiAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuc2l6ZU92ZXJsYXkgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRvdmVybGF5LndpZHRoKGEod2luZG93KS53aWR0aCgpKS5oZWlnaHQoYShkb2N1bWVudCkuaGVpZ2h0KCkpXG4gICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLnNpemVDb250YWluZXIgPSBmdW5jdGlvbihhLCBiKSB7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYygpIHtcbiAgICAgICAgICAgICAgICAgIGQuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWRhdGFDb250YWluZXJcIikud2lkdGgoZyksIGQuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLXByZXZMaW5rXCIpLmhlaWdodChoKSwgZC4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbmV4dExpbmtcIikuaGVpZ2h0KGgpLCBkLnNob3dJbWFnZSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBkID0gdGhpcyxcbiAgICAgICAgICAgICAgICAgIGUgPSB0aGlzLiRvdXRlckNvbnRhaW5lci5vdXRlcldpZHRoKCksXG4gICAgICAgICAgICAgICAgICBmID0gdGhpcy4kb3V0ZXJDb250YWluZXIub3V0ZXJIZWlnaHQoKSxcbiAgICAgICAgICAgICAgICAgIGcgPSBhICsgdGhpcy5jb250YWluZXJMZWZ0UGFkZGluZyArIHRoaXMuY29udGFpbmVyUmlnaHRQYWRkaW5nLFxuICAgICAgICAgICAgICAgICAgaCA9IGIgKyB0aGlzLmNvbnRhaW5lclRvcFBhZGRpbmcgKyB0aGlzLmNvbnRhaW5lckJvdHRvbVBhZGRpbmc7XG4gICAgICAgICAgICAgICAgZSAhPT0gZyB8fCBmICE9PSBoID8gdGhpcy4kb3V0ZXJDb250YWluZXIuYW5pbWF0ZSh7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogZyxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogaFxuICAgICAgICAgICAgICAgIH0sIHRoaXMub3B0aW9ucy5yZXNpemVEdXJhdGlvbiwgXCJzd2luZ1wiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIGMoKVxuICAgICAgICAgICAgICAgIH0pIDogYygpXG4gICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLnNob3dJbWFnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWxvYWRlclwiKS5oaWRlKCksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLWltYWdlXCIpLmZhZGVJbihcInNsb3dcIiksIHRoaXMudXBkYXRlTmF2KCksIHRoaXMudXBkYXRlRGV0YWlscygpLCB0aGlzLnByZWxvYWROZWlnaGJvcmluZ0ltYWdlcygpLCB0aGlzLmVuYWJsZUtleWJvYXJkTmF2KClcbiAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUudXBkYXRlTmF2ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGEgPSAhMTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJUb3VjaEV2ZW50XCIpLCBhID0gdGhpcy5vcHRpb25zLmFsd2F5c1Nob3dOYXZPblRvdWNoRGV2aWNlcyA/ICEwIDogITFcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChiKSB7fVxuICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLW5hdlwiKS5zaG93KCksIHRoaXMuYWxidW0ubGVuZ3RoID4gMSAmJiAodGhpcy5vcHRpb25zLndyYXBBcm91bmQgPyAoYSAmJiB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1wcmV2LCAuc2J5X2xiLW5leHRcIikuY3NzKFwib3BhY2l0eVwiLCBcIjFcIiksIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLXByZXYsIC5zYnlfbGItbmV4dFwiKS5zaG93KCkpIDogKHRoaXMuY3VycmVudEltYWdlSW5kZXggPiAwICYmICh0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1wcmV2XCIpLnNob3coKSwgYSAmJiB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1wcmV2XCIpLmNzcyhcIm9wYWNpdHlcIiwgXCIxXCIpKSwgdGhpcy5jdXJyZW50SW1hZ2VJbmRleCA8IHRoaXMuYWxidW0ubGVuZ3RoIC0gMSAmJiAodGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbmV4dFwiKS5zaG93KCksIGEgJiYgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItbmV4dFwiKS5jc3MoXCJvcGFjaXR5XCIsIFwiMVwiKSkpKVxuICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS51cGRhdGVEZXRhaWxzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgLyoqIE5FVyBQSE9UTyBBQ1RJT04gKiovXG4gICAgICAgICAgICAgICAgaWYoalF1ZXJ5KCdpZnJhbWUuc2J5X2xiLXBsYXllci1sb2FkZWQnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLnNieV9sYi1wbGF5ZXItcGxhY2Vob2xkZXInKS5yZXBsYWNlV2l0aChqUXVlcnkoJ2lmcmFtZS5zYnlfbGItcGxheWVyLWxvYWRlZCcpKTtcbiAgICAgICAgICAgICAgICAgIGpRdWVyeSgnaWZyYW1lLnNieV9sYi1wbGF5ZXItbG9hZGVkJykucmVtb3ZlQ2xhc3MoJ3NieV9sYi1wbGF5ZXItbG9hZGVkJykuc2hvdygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL1N3aXRjaCB2aWRlbyB3aGVuIGVpdGhlciBhIG5ldyBwb3B1cCBvciBuYXZpZ2F0aW5nIHRvIG5ldyBvbmVcbiAgICAgICAgICAgICAgICB2YXIgZmVlZCA9IHdpbmRvdy5zYnkuZmVlZHNbdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XS5mZWVkSW5kZXhdO1xuICAgICAgICAgICAgICAgIGxiQnVpbGRlci5iZWZvcmVQbGF5ZXJTZXR1cCh0aGlzLiRsaWdodGJveCx0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXhdLHRoaXMuY3VycmVudEltYWdlSW5kZXgsdGhpcy5hbGJ1bSxmZWVkKTtcblxuICAgICAgICAgICAgICAgIGlmKCBzYnlfc3VwcG9ydHNfdmlkZW8oKSApe1xuICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcjc2J5X2xpZ2h0Ym94JykucmVtb3ZlQ2xhc3MoJ3NieV92aWRlb19saWdodGJveCcpO1xuICAgICAgICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuY29uc2VudEdpdmVuICYmIHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0udmlkZW8ubGVuZ3RoKXtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcuc2J5X2dkcHJfbm90aWNlJykucmVtb3ZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXllcklEID0gJ3NieV9sYi1wbGF5ZXInO1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoJyNzYnlfbGlnaHRib3gnKS5hZGRDbGFzcygnc2J5X3ZpZGVvX2xpZ2h0Ym94Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSB0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXhdLnZpZGVvLFxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9wbGF5ID0gc2J5T3B0aW9ucy5hdXRvcGxheTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBob3N0OiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyBmZWVkLmVtYmVkVVJMLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9JZDogdmlkZW9JRCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXllclZhcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZXN0YnJhbmRpbmc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlbDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b3BsYXk6IGF1dG9wbGF5XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVlZC5hZnRlclN0YXRlQ2hhbmdlKHBsYXllcklELHZpZGVvSUQsZGF0YSwkKCcjJyArIHBsYXllcklEKS5jbG9zZXN0KCcuc2J5X3ZpZGVvX3RodW1ibmFpbF93cmFwJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICBmZWVkLm1heWJlQWRkQ1RBKHBsYXllcklEKTtcblxuICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9IG5ldyB3aW5kb3cuWVQuUGxheWVyKHBsYXllcklELCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIubG9hZFZpZGVvQnlJZCh2aWRlb0lEKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG91dGVyQ29udGFpbmVyLnJlbW92ZUNsYXNzKFwiYW5pbWF0aW5nXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1kYXRhQ29udGFpbmVyXCIpLmZhZGVJbih0aGlzLm9wdGlvbnMucmVzaXplRHVyYXRpb24sIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiLnNpemVPdmVybGF5KClcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAkKCcjc2J5X2xpZ2h0Ym94IC5zYnlfbGItcGxheWVyJykuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQnIDogJCgnI3NieV9saWdodGJveCAuc2J5X2xiLW91dGVyQ29udGFpbmVyJykuaGVpZ2h0KCkrJ3B4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICd3aWR0aCcgOiAkKCcjc2J5X2xpZ2h0Ym94IC5zYnlfbGItb3V0ZXJDb250YWluZXInKS53aWR0aCgpKydweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAndG9wJzogMFxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LDEpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLiRsaWdodGJveC5maW5kKCdpZnJhbWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKCdpZnJhbWUnKS5hdHRyKCd0aXRsZScsdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XS52aWRlb1RpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmdWxsSW1hZ2UgPSAkKCcuc2J5X2l0ZW1bZGF0YS12aWRlby1pZD0nICsgdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4XS52aWRlbysnXScpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1mdWxsLXJlcycpO1xuICAgICAgICAgICAgICAgICAgICAkKCcuc2J5X2xiLWltYWdlJykuYXR0cignc3JjJyxmdWxsSW1hZ2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRvdXRlckNvbnRhaW5lci5yZW1vdmVDbGFzcyhcImFuaW1hdGluZ1wiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbGlnaHRib3guZmluZChcIi5zYnlfbGItZGF0YUNvbnRhaW5lclwiKS5mYWRlSW4odGhpcy5vcHRpb25zLnJlc2l6ZUR1cmF0aW9uLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYi5zaXplT3ZlcmxheSgpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBqUXVlcnkoXCIuc2J5X2xiLWNvbnRhaW5lclwiKS5wcmVwZW5kKCc8YSBocmVmPVwiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0nK3RoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleF0udmlkZW8rJ1wiIHRhcmdldD1cIl9ibGFua1wiIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiBjbGFzcz1cInNieV9nZHByX25vdGljZVwiPjxzdmcgc3R5bGU9XCJjb2xvcjogcmdiYSgyNTUsMjU1LDI1NSwxKVwiIGNsYXNzPVwic3ZnLWlubGluZS0tZmEgZmEtcGxheSBmYS13LTE0IHNieV9wbGF5YnRuXCIgYXJpYS1sYWJlbD1cIlBsYXlcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWZhLXByb2Nlc3NlZD1cIlwiIGRhdGEtcHJlZml4PVwiZmFcIiBkYXRhLWljb249XCJwbGF5XCIgcm9sZT1cInByZXNlbnRhdGlvblwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDQ0OCA1MTJcIj48cGF0aCBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00MjQuNCAyMTQuN0w3Mi40IDYuNkM0My44LTEwLjMgMCA2LjEgMCA0Ny45VjQ2NGMwIDM3LjUgNDAuNyA2MC4xIDcyLjQgNDEuM2wzNTItMjA4YzMxLjQtMTguNSAzMS41LTY0LjEgMC04Mi42elwiPjwvcGF0aD48L3N2Zz48L2E+Jyk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIuYWZ0ZXJQbGF5ZXJTZXR1cCh0aGlzLiRsaWdodGJveCx0aGlzLmFsYnVtW3RoaXMuY3VycmVudEltYWdlSW5kZXhdLHRoaXMuY3VycmVudEltYWdlSW5kZXgsdGhpcy5hbGJ1bSk7XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsYnVtLmxlbmd0aCA+IDEgJiYgdGhpcy5vcHRpb25zLnNob3dJbWFnZU51bWJlckxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJGxpZ2h0Ym94LmZpbmQoXCIuc2J5X2xiLW51bWJlclwiKS50ZXh0KHRoaXMub3B0aW9ucy5hbGJ1bUxhYmVsKHRoaXMuY3VycmVudEltYWdlSW5kZXggKyAxLCB0aGlzLmFsYnVtLmxlbmd0aCkpLmZhZGVJbihcImZhc3RcIik7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRsaWdodGJveC5maW5kKFwiLnNieV9sYi1udW1iZXJcIikuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5wcmVsb2FkTmVpZ2hib3JpbmdJbWFnZXMgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hbGJ1bS5sZW5ndGggPiB0aGlzLmN1cnJlbnRJbWFnZUluZGV4ICsgMSkge1xuICAgICAgICAgICAgICAgICAgdmFyIGEgPSBuZXcgSW1hZ2U7XG4gICAgICAgICAgICAgICAgICBhLnNyYyA9IHRoaXMuYWxidW1bdGhpcy5jdXJyZW50SW1hZ2VJbmRleCArIDFdLmxpbmtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEltYWdlSW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgYiA9IG5ldyBJbWFnZTtcbiAgICAgICAgICAgICAgICAgIGIuc3JjID0gdGhpcy5hbGJ1bVt0aGlzLmN1cnJlbnRJbWFnZUluZGV4IC0gMV0ubGlua1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuZW5hYmxlS2V5Ym9hcmROYXYgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBhKGRvY3VtZW50KS5vbihcImtleXVwLmtleWJvYXJkXCIsIGEucHJveHkodGhpcy5rZXlib2FyZEFjdGlvbiwgdGhpcykpXG4gICAgICAgICAgICAgIH0sIGIucHJvdG90eXBlLmRpc2FibGVLZXlib2FyZE5hdiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGEoZG9jdW1lbnQpLm9mZihcIi5rZXlib2FyZFwiKVxuICAgICAgICAgICAgICB9LCBiLnByb3RvdHlwZS5rZXlib2FyZEFjdGlvbiA9IGZ1bmN0aW9uKGEpIHtcblxuICAgICAgICAgICAgICAgIHZhciBLRVlDT0RFX0VTQyAgICAgICAgPSAyNztcbiAgICAgICAgICAgICAgICB2YXIgS0VZQ09ERV9MRUZUQVJST1cgID0gMzc7XG4gICAgICAgICAgICAgICAgdmFyIEtFWUNPREVfUklHSFRBUlJPVyA9IDM5O1xuXG4gICAgICAgICAgICAgICAgdmFyIGtleWNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgICAgICAgICAgICAgIHZhciBrZXkgICAgID0gU3RyaW5nLmZyb21DaGFyQ29kZShrZXljb2RlKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChrZXljb2RlID09PSBLRVlDT0RFX0VTQyB8fCBrZXkubWF0Y2goL3h8b3xjLykpIHtcbiAgICAgICAgICAgICAgICAgIGlmKCBzYnlfc3VwcG9ydHNfdmlkZW8oKSApICQoJyNzYnlfbGlnaHRib3ggdmlkZW8uc2J5X3ZpZGVvJylbMF0ucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICQoJyNzYnlfbGlnaHRib3ggaWZyYW1lJykuYXR0cignc3JjJywgJycpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5lbmQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3AnIHx8IGtleWNvZGUgPT09IEtFWUNPREVfTEVGVEFSUk9XKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50SW1hZ2VJbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUltYWdlKHRoaXMuY3VycmVudEltYWdlSW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLndyYXBBcm91bmQgJiYgdGhpcy5hbGJ1bS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlSW1hZ2UodGhpcy5hbGJ1bS5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgaWYoIHNieV9zdXBwb3J0c192aWRlbygpICkgJCgnI3NieV9saWdodGJveCB2aWRlby5zYnlfdmlkZW8nKVswXS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgJCgnI3NieV9saWdodGJveCBpZnJhbWUnKS5hdHRyKCdzcmMnLCAnJyk7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ24nIHx8IGtleWNvZGUgPT09IEtFWUNPREVfUklHSFRBUlJPVykge1xuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEltYWdlSW5kZXggIT09IHRoaXMuYWxidW0ubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUltYWdlKHRoaXMuY3VycmVudEltYWdlSW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLndyYXBBcm91bmQgJiYgdGhpcy5hbGJ1bS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlSW1hZ2UoMCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBsYkJ1aWxkZXIucGF1c2VQbGF5ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfSwgYi5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlS2V5Ym9hcmROYXYoKSwgYSh3aW5kb3cpLm9mZihcInJlc2l6ZVwiLCB0aGlzLnNpemVPdmVybGF5KSwgdGhpcy4kbGlnaHRib3guZmFkZU91dCh0aGlzLm9wdGlvbnMuZmFkZUR1cmF0aW9uKSwgdGhpcy4kb3ZlcmxheS5mYWRlT3V0KHRoaXMub3B0aW9ucy5mYWRlRHVyYXRpb24pLCBhKFwic2VsZWN0LCBvYmplY3QsIGVtYmVkXCIpLmNzcyh7XG4gICAgICAgICAgICAgICAgICB2aXNpYmlsaXR5OiBcInZpc2libGVcIlxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH0sIGJcbiAgICAgICAgICAgIH0oKTtcbiAgICAgICAgICBhKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgYSA9IG5ldyBiO1xuICAgICAgICAgICAgICBuZXcgYyhhKVxuXG4gICAgICAgICAgICAgIC8vTGlnaHRib3ggaGlkZSBwaG90byBmdW5jdGlvblxuICAgICAgICAgICAgICAkKCcuc2J5X2xpZ2h0Ym94X2FjdGlvbiBhJykub2ZmKCkub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAkKHRoaXMpLnBhcmVudCgpLmZpbmQoJy5zYnlfbGlnaHRib3hfdG9vbHRpcCcpLnRvZ2dsZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9KS5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIGNyZWF0ZUZlZWRzOiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICBpZiAoICFzYnlPcHRpb25zLmlzQWRtaW4gKSB7XG4gICAgICAgICAgd2luZG93LnNieS5jcmVhdGVMaWdodGJveCgpO1xuICAgICAgICB9XG4gICAgICAgIGFyZ3Mud2hlbkZlZWRzQ3JlYXRlZChcbiAgICAgICAgICAkKCcuc2JfeW91dHViZScpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2RhdGEtc2J5LWluZGV4JywgaW5kZXggKyAxKTtcbiAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9wbGF5ZXInKS5yZXBsYWNlV2l0aCgnPGRpdiBpZD1cInNieV9wbGF5ZXInK2luZGV4KydcIj48L2Rpdj4nKTtcbiAgICAgICAgICAgIHZhciAkc2VsZiA9ICQodGhpcyksXG4gICAgICAgICAgICAgIGZsYWdzID0gdHlwZW9mICRzZWxmLmF0dHIoJ2RhdGEtc2J5LWZsYWdzJykgIT09ICd1bmRlZmluZWQnID8gJHNlbGYuYXR0cignZGF0YS1zYnktZmxhZ3MnKS5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgIGdlbmVyYWwgPSB0eXBlb2YgJHNlbGYuYXR0cignZGF0YS1vcHRpb25zJykgIT09ICd1bmRlZmluZWQnID8gSlNPTi5wYXJzZSgkc2VsZi5hdHRyKCdkYXRhLW9wdGlvbnMnKSkgOiB7fTtcbiAgICAgICAgICAgIGlmIChmbGFncy5pbmRleE9mKCd0ZXN0QWpheCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgd2luZG93LnNieS50cmlnZ2VyZWRUZXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmFyIHN1Ym1pdERhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAnYWN0aW9uJyA6ICdzYnlfb25fYWpheF90ZXN0X3RyaWdnZXInXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvblN1Y2Nlc3MgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGlkIHRlc3QnKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBzYnlBamF4KHN1Ym1pdERhdGEsb25TdWNjZXNzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGZlZWRPcHRpb25zID0ge1xuICAgICAgICAgICAgICBjb2xzIDogJHNlbGYuYXR0cignZGF0YS1jb2xzJyksXG4gICAgICAgICAgICAgIGNvbHNtb2JpbGUgOiAkc2VsZi5hdHRyKCdkYXRhLWNvbHNtb2JpbGUnKSAhPT0gJ3NhbWUnID8gJHNlbGYuYXR0cignZGF0YS1jb2xzbW9iaWxlJykgOiAkc2VsZi5hdHRyKCdkYXRhLWNvbHMnKSxcbiAgICAgICAgICAgICAgbnVtIDogJHNlbGYuYXR0cignZGF0YS1udW0nKSxcbiAgICAgICAgICAgICAgaW1nUmVzIDogJHNlbGYuYXR0cignZGF0YS1yZXMnKSxcbiAgICAgICAgICAgICAgZmVlZElEIDogJHNlbGYuYXR0cignZGF0YS1mZWVkaWQnKSxcbiAgICAgICAgICAgICAgcG9zdElEIDogdHlwZW9mICRzZWxmLmF0dHIoICdkYXRhLXBvc3RpZCcgKSAhPT0gJ3VuZGVmaW5kJyA/ICRzZWxmLmF0dHIoICdkYXRhLXBvc3RpZCcgKSA6ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgc2hvcnRDb2RlQXR0cyA6ICRzZWxmLmF0dHIoJ2RhdGEtc2hvcnRjb2RlLWF0dHMnKSxcbiAgICAgICAgICAgICAgcmVzaXppbmdFbmFibGVkIDogKGZsYWdzLmluZGV4T2YoJ3Jlc2l6ZURpc2FibGUnKSA9PT0gLTEpLFxuICAgICAgICAgICAgICBpbWFnZUxvYWRFbmFibGVkIDogKGZsYWdzLmluZGV4T2YoJ2ltYWdlTG9hZERpc2FibGUnKSA9PT0gLTEpLFxuICAgICAgICAgICAgICBkZWJ1Z0VuYWJsZWQgOiAoZmxhZ3MuaW5kZXhPZignZGVidWcnKSA+IC0xKSxcbiAgICAgICAgICAgICAgZmF2b3JMb2NhbCA6IChmbGFncy5pbmRleE9mKCdmYXZvckxvY2FsJykgPiAtMSksXG4gICAgICAgICAgICAgIGFqYXhQb3N0TG9hZCA6IChmbGFncy5pbmRleE9mKCdhamF4UG9zdExvYWQnKSA+IC0xKSxcbiAgICAgICAgICAgICAgY2hlY2tXUFBvc3RzIDogKGZsYWdzLmluZGV4T2YoJ2NoZWNrV1BQb3N0cycpID4gLTEpLFxuICAgICAgICAgICAgICBzaW5nbGVDaGVja1Bvc3RzIDogKGZsYWdzLmluZGV4T2YoJ3NpbmdsZUNoZWNrUG9zdHMnKSA+IC0xKSxcbiAgICAgICAgICAgICAgbmFycm93UGxheWVyIDogKGZsYWdzLmluZGV4T2YoJ25hcnJvd1BsYXllcicpID4gLTEpLFxuICAgICAgICAgICAgICBnZHByIDogKGZsYWdzLmluZGV4T2YoJ2dkcHInKSA+IC0xKSxcbiAgICAgICAgICAgICAgY29uc2VudEdpdmVuIDogKGZsYWdzLmluZGV4T2YoJ2dkcHInKSA9PT0gLTEpLFxuICAgICAgICAgICAgICBub0NETiA6IChmbGFncy5pbmRleE9mKCdkaXNhYmxlY2RuJykgPiAtMSksXG4gICAgICAgICAgICAgIGFsbG93Q29va2llczogKGZsYWdzLmluZGV4T2YoJ2FsbG93Y29va2llcycpID4gLTEpLFxuICAgICAgICAgICAgICBsaWdodGJveEVuYWJsZWQgOiB0eXBlb2YgJHNlbGYuYXR0cignZGF0YS1zYnktc3VwcG9ydHMtbGlnaHRib3gnKSAhPT0gJ3VuZGVmaW5lZCcsXG4gICAgICAgICAgICAgIGxvY2F0b3IgOiAoZmxhZ3MuaW5kZXhPZignbG9jYXRvcicpID4gLTEpLFxuICAgICAgICAgICAgICBhdXRvTWluUmVzIDogMSxcbiAgICAgICAgICAgICAgZ2VuZXJhbCA6IGdlbmVyYWxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdID0gc2J5R2V0TmV3RmVlZCh0aGlzLCBpbmRleCwgZmVlZE9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5QVBJUmVhZHkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdLnBsYXllckFQSVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdLnNldFJlc2l6ZWRJbWFnZXMoKTtcbiAgICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdLmluaXQoKTtcblxuICAgICAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnc2J5YWZ0ZXJmZWVkY3JlYXRlJyk7XG4gICAgICAgICAgICBldnQuZmVlZCA9IHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdO1xuICAgICAgICAgICAgalF1ZXJ5KHdpbmRvdykudHJpZ2dlcihldnQpO1xuXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBhZnRlckZlZWRzQ3JlYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBlbmFibGUgaGVhZGVyIGhvdmVyIGFjdGlvblxuICAgICAgICAkKCcuc2JfeW91dHViZV9oZWFkZXInKS5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgJHRoaXNIZWFkZXIgPSAkKHRoaXMpO1xuICAgICAgICAgICR0aGlzSGVhZGVyLmZpbmQoJy5zYnlfaGVhZGVyX2xpbmsnKS5vbignbW91c2VlbnRlciBtb3VzZWxlYXZlJywgZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgc3dpdGNoKGUudHlwZSkge1xuICAgICAgICAgICAgICBjYXNlICdtb3VzZWVudGVyJzpcbiAgICAgICAgICAgICAgICAkdGhpc0hlYWRlci5maW5kKCcuc2J5X2hlYWRlcl9pbWdfaG92ZXInKS5hZGRDbGFzcygnc2J5X2ZhZGVfaW4nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSAnbW91c2VsZWF2ZSc6XG4gICAgICAgICAgICAgICAgJHRoaXNIZWFkZXIuZmluZCgnLnNieV9oZWFkZXJfaW1nX2hvdmVyJykucmVtb3ZlQ2xhc3MoJ3NieV9mYWRlX2luJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh3aW5kb3cuc2J5QVBJUmVhZHkpIHtcbiAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlmZWVkYW5keXRyZWFkeScpO1xuICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcbiAgICAgICAgfVxuXG4gICAgICB9LFxuICAgICAgZW5jb2RlSFRNTDogZnVuY3Rpb24ocmF3KSB7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSBwYXNzZWQgdmFyaWFibGUgaXMgZGVmaW5lZFxuICAgICAgICBpZiAodHlwZW9mIHJhdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVwbGFjZSBncmVhdGVyIHRoYW4gYW5kIGxlc3MgdGhhbiBzeW1ib2xzIHdpdGggaHRtbCBlbnRpdHkgdG8gZGlzYWxsb3cgaHRtbCBpbiBjb21tZW50c1xuICAgICAgICB2YXIgZW5jb2RlZCA9IHJhdy5yZXBsYWNlKC8oPikvZywnJmd0OycpLFxuICAgICAgICAgIGVuY29kZWQgPSBlbmNvZGVkLnJlcGxhY2UoLyg8KS9nLCcmbHQ7Jyk7XG4gICAgICAgIGVuY29kZWQgPSBlbmNvZGVkLnJlcGxhY2UoLygmbHQ7YnJcXC8mZ3Q7KS9nLCc8YnI+Jyk7XG4gICAgICAgIGVuY29kZWQgPSBlbmNvZGVkLnJlcGxhY2UoLygmbHQ7YnImZ3Q7KS9nLCc8YnI+Jyk7XG5cbiAgICAgICAgcmV0dXJuIGVuY29kZWQ7XG4gICAgICB9LFxuICAgICAgdXJsRGV0ZWN0OiBmdW5jdGlvbih0ZXh0KSB7XG4gICAgICAgIHZhciB1cmxSZWdleCA9IC9odHRwcz86XFwvXFwvKHd3d1xcLik/Wy1hLXpBLVowLTlAOiUuX1xcK34jPV17MiwyNTZ9XFwuW2Etel17Miw2fVxcYihbLWEtekEtWjAtOUA6JV9cXCsufiM/Ji8vPV0qKS9nO1xuICAgICAgICByZXR1cm4gdGV4dC5tYXRjaCh1cmxSZWdleCk7XG4gICAgICB9LFxuICAgICAgY3RhRGV0ZWN0OiBmdW5jdGlvbih0ZXh0KSB7XG5cbiAgICAgICAgdmFyIGN0YU1hdGNoZXMgPSB0ZXh0Lm1hdGNoKC97TGluazooLiopfS9nKSxcbiAgICAgICAgICBjdGEgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY3RhTWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciB1cmxNYXRjaGVzID0gd2luZG93LnNieS51cmxEZXRlY3QoY3RhTWF0Y2hlc1swXSk7XG5cbiAgICAgICAgICBpZiAodXJsTWF0Y2hlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHVybCA9IHVybE1hdGNoZXNbMF0udHJpbSgpLFxuICAgICAgICAgICAgICBzYnlCdXR0b25UZXh0ID0gY3RhTWF0Y2hlc1swXS5yZXBsYWNlKCd7TGluazonLCcnKS5yZXBsYWNlKCd9JywnJykucmVwbGFjZSh1cmwsJycpLnJlcGxhY2UoJyAgJywnICcpLnRyaW0oKTtcbiAgICAgICAgICAgIGN0YSA9IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2s6ICdsaW5rJyxcbiAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgIHRleHQ6IHNieUJ1dHRvblRleHRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDVEEgZm91bmQgYnV0IG5vIFVSTCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjdGE7XG4gICAgICB9LFxuICAgICAgc2h1ZmZsZTogZnVuY3Rpb24oYXJyYXkpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRJbmRleCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgICAgICB0ZW1wb3JhcnlWYWx1ZSxcbiAgICAgICAgICByYW5kb21JbmRleDtcblxuICAgICAgICAvLyBXaGlsZSB0aGVyZSByZW1haW4gZWxlbWVudHMgdG8gc2h1ZmZsZS4uLlxuICAgICAgICB3aGlsZSAoMCAhPT0gY3VycmVudEluZGV4KSB7XG4gICAgICAgICAgLy8gUGljayBhIHJlbWFpbmluZyBlbGVtZW50Li4uXG4gICAgICAgICAgcmFuZG9tSW5kZXggPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjdXJyZW50SW5kZXgpO1xuICAgICAgICAgIGN1cnJlbnRJbmRleCAtPSAxO1xuXG4gICAgICAgICAgLy8gQW5kIHN3YXAgaXQgd2l0aCB0aGUgY3VycmVudCBlbGVtZW50LlxuICAgICAgICAgIHRlbXBvcmFyeVZhbHVlID0gYXJyYXlbY3VycmVudEluZGV4XTtcbiAgICAgICAgICBhcnJheVtjdXJyZW50SW5kZXhdID0gYXJyYXlbcmFuZG9tSW5kZXhdO1xuICAgICAgICAgIGFycmF5W3JhbmRvbUluZGV4XSA9IHRlbXBvcmFyeVZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFycmF5O1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBTYnlGZWVkKGVsLCBpbmRleCwgc2V0dGluZ3MpIHtcbiAgICAgIHRoaXMuZWwgPSBlbDtcbiAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgIHRoaXMucGxhY2Vob2xkZXJVUkwgPSB3aW5kb3cuc2J5Lm9wdGlvbnMucGxhY2Vob2xkZXI7XG4gICAgICBpZiAoc2V0dGluZ3MubmFycm93UGxheWVyKSB7XG4gICAgICAgIHRoaXMucGxhY2Vob2xkZXJVUkwgPSB3aW5kb3cuc2J5Lm9wdGlvbnMucGxhY2Vob2xkZXJOYXJyb3dcbiAgICAgIH1cbiAgICAgIHRoaXMucGxheWVyQVBJUmVhZHkgPSBmYWxzZTtcbiAgICAgIHRoaXMuY29uc2VudEdpdmVuID0gc2V0dGluZ3MuY29uc2VudEdpdmVuO1xuICAgICAgdGhpcy5wbGF5ZXJzID0ge307XG4gICAgICB0aGlzLm1pbkltYWdlV2lkdGggPSAwO1xuICAgICAgdGhpcy5pbWFnZVJlc29sdXRpb24gPSAxNTA7XG4gICAgICB0aGlzLnJlc2l6ZWRJbWFnZXMgPSB7fTtcbiAgICAgIHRoaXMubmVlZHNSZXNpemluZyA9IFtdO1xuICAgICAgdGhpcy5vdXRPZlBhZ2VzID0gZmFsc2U7XG4gICAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMubW9zdFJlY2VudGx5TG9hZGVkUG9zdHMgPSBbXTtcbiAgICAgIHRoaXMuZW1iZWRVUkwgPSAnLy93d3cueW91dHViZS1ub2Nvb2tpZS5jb20nO1xuICAgICAgaWYgKHNldHRpbmdzLmFsbG93Q29va2llcykge1xuICAgICAgICB0aGlzLmVtYmVkVVJMID0gJy8vd3d3LnlvdXR1YmUuY29tJ1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgU2J5RmVlZC5wcm90b3R5cGUgPSB7XG4gICAgICBpbml0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICBmZWVkLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IGZlZWQuY2hlY2tDb25zZW50KCk7XG5cbiAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuY29uc2VudEdpdmVuKSB7XG4gICAgICAgICAgd2luZG93LnNieS5tYXliZUFkZFlUQVBJKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5ub0NETiAmJiAhZmVlZC5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHtcbiAgICAgICAgICBpZiAoJCh0aGlzLmVsKS5maW5kKCcuc2JfeW91dHViZV9oZWFkZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICQodGhpcy5lbCkuZmluZCgnLnNiX3lvdXR1YmVfaGVhZGVyJykuYWRkQ2xhc3MoJ3NieV9ub19jb25zZW50JylcbiAgICAgICAgICB9IGVsc2UgaWYgKCQodGhpcy5lbCkucHJldignLnNiX3lvdXR1YmVfaGVhZGVyJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAkKHRoaXMuZWwpLnByZXYoJy5zYl95b3V0dWJlX2hlYWRlcicpLmFkZENsYXNzKCdzYnlfbm9fY29uc2VudCcpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgkKHRoaXMuZWwpLmZpbmQoJyNzYnlfbW9kX2Vycm9yJykubGVuZ3RoKSB7XG4gICAgICAgICAgJCh0aGlzLmVsKS5wcmVwZW5kKCQodGhpcy5lbCkuZmluZCgnI3NieV9tb2RfZXJyb3InKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYWpheFBvc3RMb2FkKSB7XG4gICAgICAgICAgdGhpcy5nZXROZXdQb3N0U2V0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hZnRlckluaXRpYWxJbWFnZXNMb2FkZWQoKTtcbiAgICAgICAgICAvL09ubHkgY2hlY2sgdGhlIHdpZHRoIG9uY2UgdGhlIHJlc2l6ZSBldmVudCBpcyBvdmVyXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNieV9kZWxheSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHNieV90aW1lciA9IDA7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzYnlfY2FsbGJhY2ssIHNieV9tcykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHNieV90aW1lcik7XG4gICAgICAgICAgICBzYnlfdGltZXIgPSBzZXRUaW1lb3V0KHNieV9jYWxsYmFjaywgc2J5X21zKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KSgpO1xuICAgICAgICBqUXVlcnkod2luZG93KS5vbigncmVzaXplJyxmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2J5X2RlbGF5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGZlZWQuYWZ0ZXJSZXNpemUoKTtcbiAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgaW5pdExheW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuaW5pdEdhbGxlcnlMYXlvdXQoKTtcbiAgICAgIH0sXG4gICAgICBpbml0R2FsbGVyeUxheW91dDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCksXG4gICAgICAgICAgZmVlZCA9IHRoaXM7XG4gICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9nYWxsZXJ5JykgJiYgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMubWF5YmVSYWlzZVNpbmdsZUltYWdlUmVzb2x1dGlvbigkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJyksIDAsIHRydWUpO1xuICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAgLnNieV92aWRlb190aHVtYm5haWwnKS5vZmYoKS5vbignY2xpY2snLGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCghZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQgfHwgKGZlZWQuc2V0dGluZ3MubGlnaHRib3hFbmFibGVkICYmIGZlZWQuc2V0dGluZ3Mubm9DRE4pKVxuICAgICAgICAgICAgICAmJiAoZmVlZC5zZXR0aW5ncy5ub0NETiB8fCAhZmVlZC5zZXR0aW5ncy5jb25zZW50R2l2ZW4pKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X2l0ZW0nKS5sZW5ndGhcbiAgICAgICAgICAgICAgICAmJiB0eXBlb2YgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X2l0ZW0nKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdocmVmJywnaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj0nKyQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykuYXR0cignZGF0YS12aWRlby1pZCcpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZmVlZC5vblRodW1ibmFpbENsaWNrKCQodGhpcyksIHRydWUpO1xuXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpLmFkZENsYXNzKCdzYnlfY3VycmVudCcpO1xuXG4gICAgICAgICAgJHNlbGYub24oJ21vdXNlZW50ZXInLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCFmZWVkLmNhbkNyZWF0ZVBsYXllcigpKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCBpZnJhbWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgJHNlbGYuYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfYWRkZWQnKS5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJykuYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZycpO1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwIC5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmluZCgnLnNieV9sb2FkZXInKS5zaG93KCkucmVtb3ZlQ2xhc3MoJ3NieV9oaWRkZW4nKTtcbiAgICAgICAgICAgICAgZmVlZC5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXInK2ZlZWQuaW5kZXgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmVlZC5wbGF5ZXIgPT09ICd1bmRlZmluZWQnICYmIGZlZWQucGxheWVyRWFnZXJMb2FkZWQoKSkge1xuICAgICAgICAgICAgICBmZWVkLmNyZWF0ZVBsYXllcignc2J5X3BsYXllcicrZmVlZC5pbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAod2luZG93LnNieVNlbWlFYWdlckxvYWRpbmcpIHtcbiAgICAgICAgICAgIGZlZWQuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJytmZWVkLmluZGV4KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5ub0NETikge1xuICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLmFwcGVuZCgnPGRpdiBjbGFzcz1cInNieV9wbGF5X2J0blwiPlxcbicgK1xuICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYnlfcGxheV9idG5fYmdcIj48L3NwYW4+XFxuJyArXG4gICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIDxzdmcgYXJpYS1oaWRkZW49XCJ0cnVlXCIgZm9jdXNhYmxlPVwiZmFsc2VcIiBkYXRhLXByZWZpeD1cImZhYlwiIGRhdGEtaWNvbj1cInlvdXR1YmVcIiByb2xlPVwiaW1nXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgNTc2IDUxMlwiIGNsYXNzPVwic3ZnLWlubGluZS0tZmEgZmEteW91dHViZSBmYS13LTE4XCI+PHBhdGggZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNTQ5LjY1NSAxMjQuMDgzYy02LjI4MS0yMy42NS0yNC43ODctNDIuMjc2LTQ4LjI4NC00OC41OTdDNDU4Ljc4MSA2NCAyODggNjQgMjg4IDY0UzExNy4yMiA2NCA3NC42MjkgNzUuNDg2Yy0yMy40OTcgNi4zMjItNDIuMDAzIDI0Ljk0Ny00OC4yODQgNDguNTk3LTExLjQxMiA0Mi44NjctMTEuNDEyIDEzMi4zMDUtMTEuNDEyIDEzMi4zMDVzMCA4OS40MzggMTEuNDEyIDEzMi4zMDVjNi4yODEgMjMuNjUgMjQuNzg3IDQxLjUgNDguMjg0IDQ3LjgyMUMxMTcuMjIgNDQ4IDI4OCA0NDggMjg4IDQ0OHMxNzAuNzggMCAyMTMuMzcxLTExLjQ4NmMyMy40OTctNi4zMjEgNDIuMDAzLTI0LjE3MSA0OC4yODQtNDcuODIxIDExLjQxMi00Mi44NjcgMTEuNDEyLTEzMi4zMDUgMTEuNDEyLTEzMi4zMDVzMC04OS40MzgtMTEuNDEyLTEzMi4zMDV6bS0zMTcuNTEgMjEzLjUwOFYxNzUuMTg1bDE0Mi43MzkgODEuMjA1LTE0Mi43MzkgODEuMjAxelwiIGNsYXNzPVwiXCI+PC9wYXRoPjwvc3ZnPiAgICAgICAgICAgICAgICAgICAgPC9kaXY+Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjcmVhdGVQbGF5ZXI6IGZ1bmN0aW9uKHBsYXllcklELHZpZGVvSUQsYXV0b3BsYXksYXJncykge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgIT09ICd1bmRlZmluZWQnID8gdmlkZW9JRCA6IHRoaXMuZ2V0VmlkZW9JRCgkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpKTtcbiAgICAgICAgYXV0b3BsYXkgPSB0eXBlb2YgYXV0b3BsYXkgIT09ICd1bmRlZmluZWQnID8gYXV0b3BsYXkgOiAwO1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJncyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBhcmdzID0ge1xuICAgICAgICAgICAgaG9zdDogd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgZmVlZC5lbWJlZFVSTCxcbiAgICAgICAgICAgIHZpZGVvSWQ6IHZpZGVvSUQsXG4gICAgICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgICAgIG1vZGVzdGJyYW5kaW5nOiAxLFxuICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgIGF1dG9wbGF5OiBhdXRvcGxheVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzLmV2ZW50cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBhcmdzLmV2ZW50cyA9IHtcbiAgICAgICAgICAgICdvblJlYWR5JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJykucmVtb3ZlQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZycpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuY3NzKCd6LWluZGV4JywgLTEpLmZpbmQoJy5zYnlfbG9hZGVyJykuaGlkZSgpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgIGlmICgkKCcjJyArIHBsYXllcklEKS5sZW5ndGggJiYgJCgnIycgKyBwbGF5ZXJJRCkuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWxfd3JhcCcpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgJCgnIycgKyBwbGF5ZXJJRCkuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWxfd3JhcCcpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmFkZVRvKDAsICdzbG93JywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ3otaW5kZXgnLCAtMSk7XG4gICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy5zYnlfbG9hZGVyJykuaGlkZSgpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfaXRlbScpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlhZnRlcnBsYXllcnJlYWR5Jyk7XG4gICAgICAgICAgICAgIGV2dC5mZWVkID0gZmVlZDtcbiAgICAgICAgICAgICAgZXZ0LnBsYXllciA9IHRoaXM7XG4gICAgICAgICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnb25TdGF0ZUNoYW5nZSc6IGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmNzcygnei1pbmRleCcsIC0xKS5maW5kKCcuc2J5X2xvYWRlcicpLmhpZGUoKS5hZGRDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgICBmZWVkLmFmdGVyU3RhdGVDaGFuZ2UocGxheWVySUQsdmlkZW9JRCxkYXRhLCQoJyMnICsgcGxheWVySUQpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsX3dyYXAnKSk7XG4gICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEgIT09IDEpIHJldHVybjtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmZWVkLnBsYXllcnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgIHZhciBpdGVtVmlkSUQgPSBmZWVkLmdldFZpZGVvSUQoJCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5maW5kKCdpZnJhbWUnKS5sZW5ndGggJiYgKGl0ZW1WaWRJRCAhPT0gdmlkZW9JRCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmZWVkLnBsYXllcnNbaXRlbVZpZElEXSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGZlZWQucGxheWVyc1tpdGVtVmlkSURdLnBhdXNlVmlkZW8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmZWVkLnBsYXllcnNbaXRlbVZpZElEXS5wYXVzZVZpZGVvKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2luZG93LnNieUVhZ2VyTG9hZGluZykge1xuICAgICAgICAgIHZhciBuZXdQbGF5ZXIgPSBZVC5nZXQocGxheWVySUQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBuZXdQbGF5ZXIgPSBuZXcgd2luZG93LllULlBsYXllcihwbGF5ZXJJRCwgYXJncyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1heWJlQWRkQ1RBKHBsYXllcklEKTtcblxuICAgICAgICBpZiAoJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfbGlzdCcpICYmIHR5cGVvZiB0aGlzLnBsYXllcnNbdmlkZW9JRF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5wbGF5ZXJzW3ZpZGVvSURdID0gbmV3UGxheWVyO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnBsYXllciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLnBsYXllciA9IG5ld1BsYXllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ3NieWFmdGVycGxheWVyY3JlYXRlZCcpO1xuICAgICAgICBldnQuZmVlZCA9IHRoaXM7XG4gICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcblxuICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwIC5zYnlfcGxheV9idG4nKS5yZW1vdmUoKTtcblxuICAgICAgICByZXR1cm4gbmV3UGxheWVyO1xuICAgICAgfSxcbiAgICAgIGFmdGVyU3RhdGVDaGFuZ2U6IGZ1bmN0aW9uKHBsYXllcklELHZpZGVvSUQsZGF0YSwkcGxheWVyKSB7XG4gICAgICB9LFxuICAgICAgYWZ0ZXJJbml0aWFsSW1hZ2VzTG9hZGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5pbml0TGF5b3V0KCk7XG4gICAgICAgIHRoaXMubG9hZE1vcmVCdXR0b25Jbml0KCk7XG4gICAgICAgIHRoaXMuaGlkZUV4dHJhSXRlbXNGb3JXaWR0aCgpO1xuICAgICAgICB0aGlzLmJlZm9yZU5ld0ltYWdlc1JldmVhbGVkKCk7XG4gICAgICAgIHRoaXMucmV2ZWFsTmV3SW1hZ2VzKCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJOZXdJbWFnZXNSZXZlYWxlZCgpO1xuICAgICAgICB0aGlzLmFmdGVyRmVlZFNldCgpO1xuICAgICAgICB0aGlzLnNpemVQbGF5ZXIoKTtcbiAgICAgICAgdGhpcy5zaXplSXRlbXMoKTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuKSB7XG4gICAgICAgICAgdGhpcy5hcHBseUZ1bGxGZWF0dXJlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVtb3ZlRmVhdHVyZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFmdGVyUmVzaXplOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhpcy5zZXRJbWFnZUhlaWdodCgpO1xuICAgICAgICB0aGlzLnNldEltYWdlUmVzb2x1dGlvbigpO1xuICAgICAgICB0aGlzLm1heWJlUmFpc2VJbWFnZVJlc29sdXRpb24oKTtcbiAgICAgICAgdGhpcy5zZXRJbWFnZVNpemVDbGFzcygpO1xuICAgICAgfSxcbiAgICAgIGFmdGVyTG9hZE1vcmVDbGlja2VkOiBmdW5jdGlvbigkYnV0dG9uKSB7XG4gICAgICAgICRidXR0b24uZmluZCgnLnNieV9sb2FkZXInKS5yZW1vdmVDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAkYnV0dG9uLmZpbmQoJy5zYnlfYnRuX3RleHQnKS5hZGRDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAkYnV0dG9uLmNsb3Nlc3QoJy5zYl95b3V0dWJlJykuZmluZCgnLnNieV9udW1fZGlmZl9oaWRlJykuYWRkQ2xhc3MoJ3NieV90cmFuc2l0aW9uJykucmVtb3ZlQ2xhc3MoJ3NieV9udW1fZGlmZl9oaWRlJyk7XG4gICAgICB9LFxuICAgICAgYWZ0ZXJOZXdJbWFnZXNMb2FkZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICB0aGlzLmJlZm9yZU5ld0ltYWdlc1JldmVhbGVkKCk7XG4gICAgICAgIHRoaXMucmV2ZWFsTmV3SW1hZ2VzKCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJOZXdJbWFnZXNSZXZlYWxlZCgpO1xuICAgICAgICB0aGlzLnNpemVQbGF5ZXIoKTtcbiAgICAgICAgdGhpcy5zaXplSXRlbXMoKTtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy9IaWRlIHRoZSBsb2FkZXIgaW4gdGhlIGxvYWQgbW9yZSBidXR0b25cbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xvYWRlcicpLmFkZENsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9idG5fdGV4dCcpLnJlbW92ZUNsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgZmVlZC5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgIH0sIDEpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHtcbiAgICAgICAgICB0aGlzLmFwcGx5RnVsbEZlYXR1cmVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVGZWF0dXJlcygpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYmVmb3JlTmV3SW1hZ2VzUmV2ZWFsZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLnNldEltYWdlSGVpZ2h0KCk7XG4gICAgICAgIHRoaXMubWF5YmVSYWlzZUltYWdlUmVzb2x1dGlvbih0cnVlKTtcbiAgICAgICAgdGhpcy5zZXRJbWFnZVNpemVDbGFzcygpO1xuICAgICAgfSxcbiAgICAgIGFmdGVyRmVlZFNldDogZnVuY3Rpb24oKSB7XG5cbiAgICAgIH0sXG4gICAgICBzaXplUGxheWVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSkge1xuICAgICAgICAgICRwbGF5ZXJUaHVtYm5haWwgPSAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9pdGVtJykuZmluZCgnLnNieV9wbGF5ZXJfdmlkZW9fdGh1bWJuYWlsJyk7XG4gICAgICAgICAgdmFyIHBsYXllcldpZHRoID0gJHBsYXllclRodW1ibmFpbC5pbm5lcldpZHRoKCksXG4gICAgICAgICAgICBuZXdQbGF5ZXJIZWlnaHQgPSBNYXRoLmZsb29yKHBsYXllcldpZHRoICogOSAvIDE2KTtcbiAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5uYXJyb3dQbGF5ZXIpIHtcbiAgICAgICAgICAgIG5ld1BsYXllckhlaWdodCA9IE1hdGguZmxvb3IocGxheWVyV2lkdGggKiAzIC8gNCk7XG4gICAgICAgICAgfVxuICAgICAgICAgICRwbGF5ZXJUaHVtYm5haWwuY3NzKCdoZWlnaHQnLG5ld1BsYXllckhlaWdodCsncHgnKS5jc3MoJ292ZXJmbG93JywnaGlkZGVuJyk7XG5cbiAgICAgICAgfSBlbHNlIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykpIHtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5lYWNoKGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAkcGxheWVyVGh1bWJuYWlsID0gJCh0aGlzKS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJyk7XG4gICAgICAgICAgICB2YXIgcGxheWVyV2lkdGggPSAkcGxheWVyVGh1bWJuYWlsLmlubmVyV2lkdGgoKSxcbiAgICAgICAgICAgICAgbmV3UGxheWVySGVpZ2h0ID0gTWF0aC5mbG9vcihwbGF5ZXJXaWR0aCAqIDkgLyAxNik7XG4gICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5uYXJyb3dQbGF5ZXIpIHtcbiAgICAgICAgICAgICAgbmV3UGxheWVySGVpZ2h0ID0gTWF0aC5mbG9vcihwbGF5ZXJXaWR0aCAqIDMgLyA0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRwbGF5ZXJUaHVtYm5haWwuY3NzKCdoZWlnaHQnLG5ld1BsYXllckhlaWdodCsncHgnKS5jc3MoJ292ZXJmbG93JywnaGlkZGVuJyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzaXplSXRlbXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICBpZiAoISRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2xpc3QnKSkge1xuICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwnKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoJ3NieV9pbWdMaXF1aWRfcmVhZHknKSkge1xuICAgICAgICAgICAgICB2YXIgdGh1bWJXaWR0aCA9ICQodGhpcykuaW5uZXJXaWR0aCgpLFxuICAgICAgICAgICAgICAgIG5ld1RodW1iSGVpZ2h0ID0gTWF0aC5mbG9vcih0aHVtYldpZHRoICogOSAvIDE2KTtcbiAgICAgICAgICAgICAgJCh0aGlzKS5jc3MoJ2hlaWdodCcsbmV3VGh1bWJIZWlnaHQrJ3B4JykuY3NzKCdvdmVyZmxvdycsJ2hpZGRlbicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICByZXZlYWxOZXdJbWFnZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICB0aGlzLmFwcGx5SW1hZ2VMaXF1aWQoKTtcblxuICAgICAgICAvLyBDYWxsIEN1c3RvbSBKUyBpZiBpdCBleGlzdHNcbiAgICAgICAgaWYgKHR5cGVvZiBzYnlDdXN0b21KUyA9PSAnZnVuY3Rpb24nKSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHNieUN1c3RvbUpTKCk7IH0sIDEwMCk7XG5cbiAgICAgICAgJHNlbGYuZmluZCgnLnNieS1zY3JlZW5yZWFkZXInKS5maW5kKCdpbWcnKS5yZW1vdmUoKTtcblxuICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0uc2J5X25ldycpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgdmFyICRzZWxmID0galF1ZXJ5KHRoaXMpO1xuXG4gICAgICAgICAgLy9QaG90byBsaW5rc1xuICAgICAgICAgIC8vSWYgbGlnaHRib3ggaXMgZGlzYWJsZWRcbiAgICAgICAgICB2aWRlb0lEID0gJHNlbGYuYXR0cignZGF0YS12aWRlby1pZCcpO1xuXG4gICAgICAgICAgaWYgKHdpbmRvdy5zYnlFYWdlckxvYWRpbmcgJiYgZmVlZC5jYW5DcmVhdGVQbGF5ZXIoKSAmJiAkKCcjc2J5X3BsYXllcl8nK3ZpZGVvSUQpLmxlbmd0aCkge1xuICAgICAgICAgICAgcGxheWVyID0gbmV3IFlULlBsYXllcignc2J5X3BsYXllcl8nK3ZpZGVvSUQsIHtcbiAgICAgICAgICAgICAgaGVpZ2h0OiAnMTAwJyxcbiAgICAgICAgICAgICAgd2lkdGg6ICcxMDAnLFxuICAgICAgICAgICAgICB2aWRlb0lkOiB2aWRlb0lELFxuICAgICAgICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgICAgICAgbW9kZXN0YnJhbmRpbmc6IDEsXG4gICAgICAgICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgICAgICAgIGF1dG9wbGF5OiAwXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSBkYXRhLnRhcmdldC5nZXRWaWRlb0RhdGEoKVsndmlkZW9faWQnXTtcbiAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEgIT09IDEpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtVmlkSUQgPSBqUXVlcnkodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykubGVuZ3RoICYmIGpRdWVyeShkYXRhLnRhcmdldC5hKS5hdHRyKCdpZCcpICE9PSBqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykuYXR0cignaWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgIFlULmdldCgnc2J5X3BsYXllcl8nK2l0ZW1WaWRJRCkucGF1c2VWaWRlbygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykub24oJ21vdXNlZW50ZXInLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZmVlZC5vblRodW1ibmFpbEVudGVyKCQodGhpcyksIGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl93cmFwJykub24oJ21vdXNlbGVhdmUnLGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgZmVlZC5vblRodW1ibmFpbExlYXZlKCQodGhpcyksIGZhbHNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvL2luaXQgY2xpY2tcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLm9uKCdjbGljaycsZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICgoIWZlZWQuc2V0dGluZ3MubGlnaHRib3hFbmFibGVkIHx8IChmZWVkLnNldHRpbmdzLmxpZ2h0Ym94RW5hYmxlZCAmJiBmZWVkLnNldHRpbmdzLm5vQ0ROKSlcbiAgICAgICAgICAgICAgJiYgKGZlZWQuc2V0dGluZ3Mubm9DRE4gfHwgIWZlZWQuc2V0dGluZ3MuY29uc2VudEdpdmVuKSkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mICQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykubGVuZ3RoXG4gICAgICAgICAgICAgICAgJiYgdHlwZW9mICQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykuYXR0cignZGF0YS12aWRlby1pZCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignaHJlZicsJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9JyskKHRoaXMpLmNsb3Nlc3QoJy5zYnlfaXRlbScpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGZlZWQub25UaHVtYm5haWxDbGljaygkKHRoaXMpLCBmYWxzZSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBsaWdodGJveFxuICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmxpZ2h0Ym94RW5hYmxlZCkge1xuICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXNieS1saWdodGJveCcsZmVlZC5pbmRleCk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHNieU9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBzYnlPcHRpb25zLmxpZ2h0Ym94UGxhY2Vob2xkZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLm5hcnJvd1BsYXllcikge1xuICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignaHJlZicsc2J5T3B0aW9ucy5saWdodGJveFBsYWNlaG9sZGVyTmFycm93KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2hyZWYnLHNieU9wdGlvbnMubGlnaHRib3hQbGFjZWhvbGRlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmVlZC5hZnRlckl0ZW1SZXZlYWxlZCgkc2VsZik7XG5cbiAgICAgICAgICAvLyBubyBpbmZvXG4gICAgICAgICAgaWYgKCRzZWxmLmZpbmQoJy5zYnlfaW5mb19pdGVtJykudGV4dCgpLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaW5mb19pdGVtJykuYWRkQ2xhc3MoJ3NieV9ub19zcGFjZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7IC8vRW5kIC5zYnlfaXRlbSBlYWNoXG5cbiAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgdmFyICRzZWxmID0galF1ZXJ5KHRoaXMpO1xuXG4gICAgICAgICAgZmVlZC5hZnRlckl0ZW1SZXZlYWxlZCgkc2VsZik7XG4gICAgICAgIH0pOyAvL0VuZCAuc2J5X2l0ZW0gZWFjaFxuXG4gICAgICAgIC8vUmVtb3ZlIHRoZSBuZXcgY2xhc3MgYWZ0ZXIgNTAwbXMsIG9uY2UgdGhlIHNvcnRpbmcgaXMgZG9uZVxuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0uc2J5X25ldycpLnJlbW92ZUNsYXNzKCdzYnlfbmV3Jyk7XG4gICAgICAgICAgLy9Mb29wIHRocm91Z2ggaXRlbXMgYW5kIHJlbW92ZSBjbGFzcyB0byByZXZlYWwgdGhlbVxuICAgICAgICAgIHZhciB0aW1lID0gMSxcbiAgICAgICAgICAgIG51bSA9ICRzZWxmLmZpbmQoJy5zYnlfdHJhbnNpdGlvbicpLmxlbmd0aDtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3RyYW5zaXRpb24nKS5lYWNoKGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICAgICAgICB2YXIgJHNieV9pdGVtX3RyYW5zaXRpb25fZWwgPSBqUXVlcnkodGhpcyk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICRzYnlfaXRlbV90cmFuc2l0aW9uX2VsLnJlbW92ZUNsYXNzKCdzYnlfdHJhbnNpdGlvbicpO1xuICAgICAgICAgICAgfSwgdGltZSk7XG4gICAgICAgICAgICAvL3RpbWUgKz0gMTA7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sIDEpO1xuXG4gICAgICB9LFxuICAgICAgYWZ0ZXJJdGVtUmV2ZWFsZWQ6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB9LFxuICAgICAgYWZ0ZXJOZXdJbWFnZXNSZXZlYWxlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMubGlzdGVuRm9yVmlzaWJpbGl0eUNoYW5nZSgpO1xuICAgICAgICB0aGlzLnNlbmROZWVkc1Jlc2l6aW5nVG9TZXJ2ZXIoKTtcbiAgICAgICAgdGhpcy5zZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIoKTtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmltYWdlTG9hZEVuYWJsZWQpIHtcbiAgICAgICAgICAkKCcuc2J5X25vX3Jlc3JhaXNlJykucmVtb3ZlQ2xhc3MoJ3NieV9ub19yZXNyYWlzZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGV2dCA9ICQuRXZlbnQoJ3NieWFmdGVyaW1hZ2VzbG9hZGVkJyk7XG4gICAgICAgIGV2dC5lbCA9ICQodGhpcy5lbCk7XG4gICAgICAgICQod2luZG93KS50cmlnZ2VyKGV2dCk7XG4gICAgICB9LFxuICAgICAgc2V0UmVzaXplZEltYWdlczogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoJCh0aGlzLmVsKS5maW5kKCcuc2J5X3Jlc2l6ZWRfaW1hZ2VfZGF0YScpLmxlbmd0aFxuICAgICAgICAgICYmIHR5cGVvZiAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykuYXR0cignZGF0YS1yZXNpemVkJykgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgJiYgJCh0aGlzLmVsKS5maW5kKCcuc2J5X3Jlc2l6ZWRfaW1hZ2VfZGF0YScpLmF0dHIoJ2RhdGEtcmVzaXplZCcpLmluZGV4T2YoJ3tcIicpID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5yZXNpemVkSW1hZ2VzID0gSlNPTi5wYXJzZSgkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcmVzaXplZF9pbWFnZV9kYXRhJykuYXR0cignZGF0YS1yZXNpemVkJykpO1xuICAgICAgICAgICQodGhpcy5lbCkuZmluZCgnLnNieV9yZXNpemVkX2ltYWdlX2RhdGEnKS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNlbmROZWVkc1Jlc2l6aW5nVG9TZXJ2ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZmVlZCA9IHRoaXM7XG4gICAgICAgIGlmIChmZWVkLm5lZWRzUmVzaXppbmcubGVuZ3RoID4gMCAmJiBmZWVkLnNldHRpbmdzLnJlc2l6aW5nRW5hYmxlZCkge1xuICAgICAgICAgIHZhciBpdGVtT2Zmc2V0ID0gJCh0aGlzLmVsKS5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGg7XG5cbiAgICAgICAgICB2YXIgc3VibWl0RGF0YSA9IHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3NieV9yZXNpemVkX2ltYWdlc19zdWJtaXQnLFxuICAgICAgICAgICAgbmVlZHNfcmVzaXppbmc6IGZlZWQubmVlZHNSZXNpemluZyxcbiAgICAgICAgICAgIG9mZnNldDogaXRlbU9mZnNldCxcbiAgICAgICAgICAgIGZlZWRfaWQ6IGZlZWQuc2V0dGluZ3MuZmVlZElELFxuICAgICAgICAgICAgbG9jYXRpb246IGZlZWQubG9jYXRpb25HdWVzcygpLFxuICAgICAgICAgICAgcG9zdF9pZDogZmVlZC5zZXR0aW5ncy5wb3N0SUQsXG4gICAgICAgICAgICBhdHRzOiBmZWVkLnNldHRpbmdzLnNob3J0Q29kZUF0dHMsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB2YXIgb25TdWNjZXNzID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgICAgaWYgKGRhdGEudHJpbSgpLmluZGV4T2YoJ3snKSA9PT0gMCkge1xuICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5kZWJ1Z0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHNieUFqYXgoc3VibWl0RGF0YSxvblN1Y2Nlc3MpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc2VuZENoZWNrV1BQb3N0c1RvU2VydmVyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICBpZiAoZmVlZC5zZXR0aW5ncy5jaGVja1dQUG9zdHMgfHwgZmVlZC5zZXR0aW5ncy5zaW5nbGVDaGVja1Bvc3RzKSB7XG4gICAgICAgICAgdmFyIGZlZWRJRCA9IHR5cGVvZiBmZWVkLnNldHRpbmdzLmZlZWRJRCAhPT0gJ3VuZGVmaW5lZCcgPyBmZWVkLnNldHRpbmdzLmZlZWRJRCA6ICdzYnlfc2luZ2xlJyxcbiAgICAgICAgICAgIHBvc3RzID0gZmVlZC5tb3N0UmVjZW50bHlMb2FkZWRQb3N0cztcbiAgICAgICAgICBmZWVkLm1vc3RSZWNlbnRseUxvYWRlZFBvc3RzID0gW107XG4gICAgICAgICAgdmFyIHN1Ym1pdERhdGEgPSB7XG4gICAgICAgICAgICBhY3Rpb246ICdzYnlfY2hlY2tfd3Bfc3VibWl0JyxcbiAgICAgICAgICAgIGZlZWRfaWQ6IGZlZWRJRCxcbiAgICAgICAgICAgIGF0dHM6IGZlZWQuc2V0dGluZ3Muc2hvcnRDb2RlQXR0cyxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBmZWVkLmxvY2F0aW9uR3Vlc3MoKSxcbiAgICAgICAgICAgIHBvc3RfaWQ6IGZlZWQuc2V0dGluZ3MucG9zdElELFxuICAgICAgICAgICAgb2Zmc2V0OiAhICQodGhpcy5lbCkuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfY2Fyb3VzZWwnKSA/ICQodGhpcy5lbCkuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoIDogTWF0aC5mbG9vcigoJCh0aGlzLmVsKS5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGggLyAyKSAtMSksXG4gICAgICAgICAgICBwb3N0czogcG9zdHNcbiAgICAgICAgICB9O1xuICAgICAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICBpZiAoZGF0YS50cmltKCkuaW5kZXhPZigneycpID09PSAwKSB7XG4gICAgICAgICAgICAgIHZhciByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmZWVkLmFmdGVyU2VuZENoZWNrV1BQb3N0c1RvU2VydmVyKHJlc3BvbnNlKTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgc2J5QWpheChzdWJtaXREYXRhLG9uU3VjY2Vzcyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhZnRlclNlbmRDaGVja1dQUG9zdHNUb1NlcnZlcjogZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG5cbiAgICAgIH0sXG4gICAgICBsb2FkTW9yZUJ1dHRvbkluaXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgJHNlbGYuZmluZCgnLnNieV9mb290ZXIgLnNieV9sb2FkX2J0bicpLm9mZigpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmZWVkLmFmdGVyTG9hZE1vcmVDbGlja2VkKGpRdWVyeSh0aGlzKSk7XG4gICAgICAgICAgZmVlZC5nZXROZXdQb3N0U2V0KCk7XG4gICAgICAgIH0pOyAvL0VuZCBjbGljayBldmVudFxuICAgICAgfSxcbiAgICAgIGdldE5ld1Bvc3RTZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgdmFyIGl0ZW1PZmZzZXQgPSAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGgsXG4gICAgICAgICAgc3VibWl0RGF0YSA9IHtcbiAgICAgICAgICAgIGFjdGlvbjogJ3NieV9sb2FkX21vcmVfY2xpY2tlZCcsXG4gICAgICAgICAgICBvZmZzZXQ6IGl0ZW1PZmZzZXQsXG4gICAgICAgICAgICBmZWVkX2lkOiBmZWVkLnNldHRpbmdzLmZlZWRJRCxcbiAgICAgICAgICAgIGF0dHM6IGZlZWQuc2V0dGluZ3Muc2hvcnRDb2RlQXR0cyxcbiAgICAgICAgICAgIGxvY2F0aW9uOiBmZWVkLmxvY2F0aW9uR3Vlc3MoKSxcbiAgICAgICAgICAgIHBvc3RfaWQ6IGZlZWQuc2V0dGluZ3MucG9zdElELFxuICAgICAgICAgICAgY3VycmVudF9yZXNvbHV0aW9uOiBmZWVkLmltYWdlUmVzb2x1dGlvblxuICAgICAgICAgIH07XG4gICAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmIChkYXRhLnRyaW0oKS5pbmRleE9mKCd7JykgPT09IDApIHtcbiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSksXG4gICAgICAgICAgICAgIGNoZWNrV1BQb3N0cyA9IHR5cGVvZiByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgPyByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyA6IGZhbHNlOztcbiAgICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hlY2tXUFBvc3RzKSB7XG4gICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuY2hlY2tXUFBvc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuY2hlY2tXUFBvc3RzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmZWVkLmFwcGVuZE5ld1Bvc3RzKHJlc3BvbnNlLmh0bWwpO1xuICAgICAgICAgICAgZmVlZC5hZGRSZXNpemVkSW1hZ2VzKHJlc3BvbnNlLnJlc2l6ZWRJbWFnZXMpO1xuICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuYWpheFBvc3RMb2FkKSB7XG4gICAgICAgICAgICAgIGZlZWQuc2V0dGluZ3MuYWpheFBvc3RMb2FkID0gZmFsc2U7XG4gICAgICAgICAgICAgIGZlZWQuYWZ0ZXJJbml0aWFsSW1hZ2VzTG9hZGVkKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmZWVkLmFmdGVyTmV3SW1hZ2VzTG9hZGVkKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZmVlZFN0YXR1cy5zaG91bGRQYWdpbmF0ZSkge1xuICAgICAgICAgICAgICBmZWVkLm91dE9mUGFnZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xvYWRfYnRuJykuaGlkZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmVlZC5vdXRPZlBhZ2VzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICQoJy5zYnlfbm9fanMnKS5yZW1vdmVDbGFzcygnc2J5X25vX2pzJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH07XG4gICAgICAgIHNieUFqYXgoc3VibWl0RGF0YSwgb25TdWNjZXNzKTtcbiAgICAgIH0sXG4gICAgICBhcHBlbmROZXdQb3N0czogZnVuY3Rpb24gKG5ld1Bvc3RzSHRtbCkge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGZlZWQgPSB0aGlzO1xuICAgICAgICBpZiAoJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwIC5zYnlfaXRlbScpLmxlbmd0aCkge1xuICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCAuc2J5X2l0ZW0nKS5sYXN0KCkuYWZ0ZXIobmV3UG9zdHNIdG1sKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5hcHBlbmQobmV3UG9zdHNIdG1sKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFkZFJlc2l6ZWRJbWFnZXM6IGZ1bmN0aW9uIChyZXNpemVkSW1hZ2VzVG9BZGQpIHtcbiAgICAgICAgZm9yICh2YXIgaW1hZ2VJRCBpbiByZXNpemVkSW1hZ2VzVG9BZGQpIHtcbiAgICAgICAgICB0aGlzLnJlc2l6ZWRJbWFnZXNbaW1hZ2VJRF0gPSByZXNpemVkSW1hZ2VzVG9BZGRbaW1hZ2VJRF07XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXRJbWFnZUhlaWdodDogZnVuY3Rpb24oKSB7XG4gICAgICB9LFxuICAgICAgbWF5YmVSYWlzZVNpbmdsZUltYWdlUmVzb2x1dGlvbjogZnVuY3Rpb24gKCRpdGVtLCBpbmRleCwgZm9yY2VDaGFuZ2UpIHtcbiAgICAgICAgdmFyIGZlZWQgPSB0aGlzLFxuICAgICAgICAgIGltZ1NyY1NldCA9IGZlZWQuZ2V0SW1hZ2VVcmxzKCRpdGVtKSxcbiAgICAgICAgICBjdXJyZW50VXJsID0gJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwgPiBpbWcnKS5hdHRyKCdzcmMnKSxcbiAgICAgICAgICBjdXJyZW50UmVzID0gMTUwLFxuICAgICAgICAgIGFzcGVjdFJhdGlvID0gMSwgLy8gYWxsIHRodW1ibmFpbHMgYXJlIG9yaWVudGVkIHRoZSBzYW1lIHNvIHRoZSBiZXN0IGNhbGN1bGF0aW9uIHVzZXMgMVxuICAgICAgICAgIGZvcmNlQ2hhbmdlID0gdHlwZW9mIGZvcmNlQ2hhbmdlICE9PSAndW5kZWZpbmVkJyA/IGZvcmNlQ2hhbmdlIDogZmFsc2U7XG5cbiAgICAgICAgaWYgKCRpdGVtLmhhc0NsYXNzKCdzYnlfbm9fcmVzcmFpc2UnKSAgIHx8XG4gICAgICAgICAgKCFmZWVkLnNldHRpbmdzLmNvbnNlbnRHaXZlbiAmJiBmZWVkLnNldHRpbmdzLm5vQ0ROKSApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAkLmVhY2goaW1nU3JjU2V0LCBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID09PSBjdXJyZW50VXJsKSB7XG4gICAgICAgICAgICBjdXJyZW50UmVzID0gcGFyc2VJbnQoaW5kZXgpO1xuICAgICAgICAgICAgLy8gSWYgdGhlIGltYWdlIGhhcyBhbHJlYWR5IGJlZW4gY2hhbmdlZCB0byBhbiBleGlzdGluZyByZWFsIHNvdXJjZSwgZG9uJ3QgZm9yY2UgdGhlIGNoYW5nZVxuICAgICAgICAgICAgZm9yY2VDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvL0ltYWdlIHJlc1xuICAgICAgICB2YXIgbmV3UmVzID0gNjQwO1xuICAgICAgICBzd2l0Y2ggKGZlZWQuc2V0dGluZ3MuaW1nUmVzKSB7XG4gICAgICAgICAgY2FzZSAndGh1bWInOlxuICAgICAgICAgICAgbmV3UmVzID0gMTIwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWVkaXVtJzpcbiAgICAgICAgICAgIG5ld1JlcyA9IDMyMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2xhcmdlJzpcbiAgICAgICAgICAgIG5ld1JlcyA9IDQ4MDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2Z1bGwnOlxuICAgICAgICAgICAgbmV3UmVzID0gNjQwO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciBtaW5JbWFnZVdpZHRoID0gTWF0aC5tYXgoZmVlZC5zZXR0aW5ncy5hdXRvTWluUmVzLCRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuaW5uZXJXaWR0aCgpKSxcbiAgICAgICAgICAgICAgdGhpc0ltYWdlUmVwbGFjZSA9IGZlZWQuZ2V0QmVzdFJlc29sdXRpb25Gb3JBdXRvKG1pbkltYWdlV2lkdGgsIGFzcGVjdFJhdGlvLCAkKHRoaXMuZWwpLmZpbmQoJ3NieV9pdGVtJykuZmlyc3QoKSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXNJbWFnZVJlcGxhY2UpIHtcbiAgICAgICAgICAgICAgY2FzZSA0ODA6XG4gICAgICAgICAgICAgICAgbmV3UmVzID0gNDgwO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDMyMDpcbiAgICAgICAgICAgICAgICBuZXdSZXMgPSAzMjA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgMTIwOlxuICAgICAgICAgICAgICAgIG5ld1JlcyA9IDEyMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld1JlcyA+IGN1cnJlbnRSZXMgfHwgY3VycmVudFVybCA9PT0gZmVlZC5wbGFjZWhvbGRlclVSTCB8fCBmb3JjZUNoYW5nZSkge1xuICAgICAgICAgIGlmIChmZWVkLnNldHRpbmdzLmRlYnVnRW5hYmxlZCkge1xuICAgICAgICAgICAgdmFyIHJlYXNvbiA9IGN1cnJlbnRVcmwgPT09IGZlZWQucGxhY2Vob2xkZXJVUkwgPyAnd2FzIHBsYWNlaG9sZGVyJyA6ICd0b28gc21hbGwnO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3JhaXMgcmVzIGZvciAnICsgY3VycmVudFVybCwgcmVhc29uKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIG5ld1VybCA9IGltZ1NyY1NldFtuZXdSZXNdO1xuICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsID4gaW1nJykuYXR0cignc3JjJywgbmV3VXJsKTtcbiAgICAgICAgICBpZiAoJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5oYXNDbGFzcygnc2J5X2ltZ0xpcXVpZF9yZWFkeScpKSB7XG4gICAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmNzcygnYmFja2dyb3VuZC1pbWFnZScsICd1cmwoXCInICsgbmV3VXJsICsgJ1wiKScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICRpdGVtLmZpbmQoJ2ltZycpLm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoISQodGhpcykuaGFzQ2xhc3MoJ3NieV9pbWdfZXJyb3InKSkge1xuICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnc2J5X2ltZ19lcnJvcicpO1xuICAgICAgICAgICAgdmFyIHNvdXJjZUZyb21BUEkgPSAoJCh0aGlzKS5hdHRyKCdzcmMnKS5pbmRleE9mKCdpLnl0aW1nLmNvbScpID4gLTEpO1xuXG4gICAgICAgICAgICBpZiAoIXNvdXJjZUZyb21BUEkpIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1mdWxsLXJlcycpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignc3JjJywgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtZnVsbC1yZXMnKSk7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmNzcygnYmFja2dyb3VuZC1pbWFnZScsICd1cmwoJyArICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLWZ1bGwtcmVzJykgKyAnKScpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKCQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdocmVmJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdzcmMnLCAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignaHJlZicpICsgJ21lZGlhP3NpemU9bCcpO1xuICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyAkKHRoaXMpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignaHJlZicpICsgJ21lZGlhP3NpemU9bCknKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZmVlZC5zZXR0aW5ncy5mYXZvckxvY2FsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgdmFyIHNyY1NldCA9IGZlZWQuZ2V0SW1hZ2VVcmxzKCQodGhpcykuY2xvc2VzdCgnLnNieV9pdGVtJykpO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHNyY1NldFs2NDBdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignc3JjJywgc3JjU2V0WzY0MF0pO1xuICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgnLnNieV92aWRlb190aHVtYm5haWwnKS5jc3MoJ2JhY2tncm91bmQtaW1hZ2UnLCAndXJsKCcgKyBzcmNTZXRbNjQwXSArICcpJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIGZlZWQuYWZ0ZXJSZXNpemUoKTtcbiAgICAgICAgICAgIH0sIDEpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd1bmZpeGVkIGVycm9yICcgKyAkKHRoaXMpLmF0dHIoJ3NyYycpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIG1heWJlUmFpc2VJbWFnZVJlc29sdXRpb246IGZ1bmN0aW9uIChqdXN0TmV3KSB7XG4gICAgICAgIHZhciBmZWVkID0gdGhpcyxcbiAgICAgICAgICBpdGVtc1NlbGVjdG9yID0gdHlwZW9mIGp1c3ROZXcgIT09ICd1bmRlZmluZWQnICYmIGp1c3ROZXcgPT09IHRydWUgPyAnLnNieV9pdGVtLnNieV9uZXcnIDogJy5zYnlfaXRlbScsXG4gICAgICAgICAgZm9yY2VDaGFuZ2UgPSAhZmVlZC5pc0luaXRpYWxpemVkID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAkKGZlZWQuZWwpLmZpbmQoaXRlbXNTZWxlY3RvcikuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICBpZiAoISQodGhpcykuaGFzQ2xhc3MoJ3NieV9udW1fZGlmZl9oaWRlJylcbiAgICAgICAgICAgICYmICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5sZW5ndGhcbiAgICAgICAgICAgICYmIHR5cGVvZiAkKHRoaXMpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS1pbWctc3JjLXNldCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmVlZC5tYXliZVJhaXNlU2luZ2xlSW1hZ2VSZXNvbHV0aW9uKCQodGhpcyksaW5kZXgsZm9yY2VDaGFuZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7IC8vRW5kIC5zYnlfaXRlbSBlYWNoXG4gICAgICAgIGZlZWQuaXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB9LFxuICAgICAgZ2V0QmVzdFJlc29sdXRpb25Gb3JBdXRvOiBmdW5jdGlvbihjb2xXaWR0aCwgYXNwZWN0UmF0aW8sICRpdGVtKSB7XG4gICAgICAgIGlmIChpc05hTihhc3BlY3RSYXRpbykgfHwgYXNwZWN0UmF0aW8gPCAxKSB7XG4gICAgICAgICAgYXNwZWN0UmF0aW8gPSAxO1xuICAgICAgICB9XG4gICAgICAgIHZhciBiZXN0V2lkdGggPSBjb2xXaWR0aCAqIGFzcGVjdFJhdGlvLFxuICAgICAgICAgIGJlc3RXaWR0aFJvdW5kZWQgPSBNYXRoLmNlaWwoYmVzdFdpZHRoIC8gMTApICogMTAsXG4gICAgICAgICAgY3VzdG9tU2l6ZXMgPSBbMTIwLCAzMjAsIDQ4MCwgNjQwXTtcblxuICAgICAgICBpZiAoJGl0ZW0uaGFzQ2xhc3MoJ3NieV9oaWdobGlnaHRlZCcpKSB7XG4gICAgICAgICAgYmVzdFdpZHRoUm91bmRlZCA9IGJlc3RXaWR0aFJvdW5kZWQgKjI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VzdG9tU2l6ZXMuaW5kZXhPZihwYXJzZUludChiZXN0V2lkdGhSb3VuZGVkKSkgPT09IC0xKSB7XG4gICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAkLmVhY2goY3VzdG9tU2l6ZXMsIGZ1bmN0aW9uIChpbmRleCwgaXRlbSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0gPiBwYXJzZUludChiZXN0V2lkdGhSb3VuZGVkKSAmJiAhZG9uZSkge1xuICAgICAgICAgICAgICBiZXN0V2lkdGhSb3VuZGVkID0gaXRlbTtcbiAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYmVzdFdpZHRoUm91bmRlZDtcbiAgICAgIH0sXG4gICAgICBoaWRlRXh0cmFJdGVtc0ZvcldpZHRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMubGF5b3V0ID09PSAnY2Fyb3VzZWwnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCksXG4gICAgICAgICAgbnVtID0gdHlwZW9mICRzZWxmLmF0dHIoJ2RhdGEtbnVtJykgIT09ICd1bmRlZmluZWQnICYmICRzZWxmLmF0dHIoJ2RhdGEtbnVtJykgIT09ICcnID8gcGFyc2VJbnQoJHNlbGYuYXR0cignZGF0YS1udW0nKSkgOiAxLFxuICAgICAgICAgIG51bW1vYmlsZSA9IHR5cGVvZiAkc2VsZi5hdHRyKCdkYXRhLW51bW1vYmlsZScpICE9PSAndW5kZWZpbmVkJyAmJiAkc2VsZi5hdHRyKCdkYXRhLW51bW1vYmlsZScpICE9PSAnJyA/IHBhcnNlSW50KCRzZWxmLmF0dHIoJ2RhdGEtbnVtbW9iaWxlJykpIDogbnVtO1xuXG4gICAgICAgIGlmICghJHNlbGYuaGFzQ2xhc3MoJy5zYnlfbGF5b3V0X2Nhcm91c2VsJykpIHtcbiAgICAgICAgICBpZiAoJCh3aW5kb3cpLndpZHRoKCkgPCA0ODApIHtcbiAgICAgICAgICAgIGlmIChudW1tb2JpbGUgPCAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuc2xpY2UobnVtbW9iaWxlIC0gJHNlbGYuZmluZCgnLnNieV9pdGVtJykubGVuZ3RoKS5hZGRDbGFzcygnc2J5X251bV9kaWZmX2hpZGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG51bSA8ICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5zbGljZShudW0gLSAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGgpLmFkZENsYXNzKCdzYnlfbnVtX2RpZmZfaGlkZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9LFxuICAgICAgc2V0SW1hZ2VTaXplQ2xhc3M6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKTtcbiAgICAgICAgJHNlbGYucmVtb3ZlQ2xhc3MoJ3NieV9zbWFsbCBzYnlfbWVkaXVtJyk7XG4gICAgICAgIHZhciBmZWVkV2lkdGggPSAkc2VsZi5pbm5lcldpZHRoKCksXG4gICAgICAgICAgcGhvdG9QYWRkaW5nID0gcGFyc2VJbnQoKCRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLm91dGVyV2lkdGgoKSAtICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLndpZHRoKCkpKSAvIDIsXG4gICAgICAgICAgY29scyA9IHRoaXMuZ2V0Q29sdW1uQ291bnQoKSxcbiAgICAgICAgICBmZWVkV2lkdGhTYW5zUGFkZGluZyA9IGZlZWRXaWR0aCAtIChwaG90b1BhZGRpbmcgKiAoY29scysyKSksXG4gICAgICAgICAgY29sV2lkdGggPSAoZmVlZFdpZHRoU2Fuc1BhZGRpbmcgLyBjb2xzKTtcblxuICAgICAgICBpZiAoY29sV2lkdGggPiAxNDAgJiYgY29sV2lkdGggPCAyNDApIHtcbiAgICAgICAgICAkc2VsZi5hZGRDbGFzcygnc2J5X21lZGl1bScpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbFdpZHRoIDw9IDE0MCkge1xuICAgICAgICAgICRzZWxmLmFkZENsYXNzKCdzYnlfc21hbGwnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldE1pbkltYWdlV2lkdGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCQodGhpcy5lbCkuZmluZCgnLnNieV9pdGVtIC5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZmlyc3QoKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLm1pbkltYWdlV2lkdGggPSAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfaXRlbSAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpcnN0KCkuaW5uZXJXaWR0aCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubWluSW1hZ2VXaWR0aCA9IDE1MDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldEltYWdlUmVzb2x1dGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5pbWdSZXMgPT09ICdhdXRvJykge1xuICAgICAgICAgIHRoaXMuaW1hZ2VSZXNvbHV0aW9uID0gJ2F1dG8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN3aXRjaCAodGhpcy5zZXR0aW5ncy5pbWdSZXMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RodW1iJzpcbiAgICAgICAgICAgICAgdGhpcy5pbWFnZVJlc29sdXRpb24gPSAxNTA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWVkaXVtJzpcbiAgICAgICAgICAgICAgdGhpcy5pbWFnZVJlc29sdXRpb24gPSAzMjA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhpcy5pbWFnZVJlc29sdXRpb24gPSA2NDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZ2V0SW1hZ2VVcmxzOiBmdW5jdGlvbiAoJGl0ZW0pIHtcbiAgICAgICAgdmFyIHNyY1NldCA9IEpTT04ucGFyc2UoJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLWltZy1zcmMtc2V0JykucmVwbGFjZSgvXFxcXFxcLy9nLCAnLycpKSxcbiAgICAgICAgICBpZCA9ICRpdGVtLmF0dHIoJ2lkJykucmVwbGFjZSgnc2J5XycsICcnKS5yZXBsYWNlKCdwbGF5ZXJfJywnJyk7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdICE9PSAndmlkZW8nXG4gICAgICAgICAgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXSAhPT0gJ3BlbmRpbmcnXG4gICAgICAgICAgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCAhPT0gJ2Vycm9yJ1xuICAgICAgICAgICYmIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgIT09ICd2aWRlbydcbiAgICAgICAgICAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICE9PSAncGVuZGluZycpIHtcblxuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnc2l6ZXMnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHZhciBmb3VuZFNpemVzID0gW107XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMucmVzaXplZEltYWdlc1tpZF1bJ3NpemVzJ11bJ2Z1bGwnXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgZm91bmRTaXplcy5wdXNoKDY0MCk7XG4gICAgICAgICAgICAgIHNyY1NldFs2NDBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnZnVsbC5qcGcnO1xuICAgICAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X2xpbmtfYXJlYScpLmF0dHIoICdocmVmJywgc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnZnVsbC5qcGcnICk7XG4gICAgICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0ciggJ2RhdGEtZnVsbC1yZXMnLCBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICdmdWxsLmpwZycgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnc2l6ZXMnXVsnbG93J10gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgIGZvdW5kU2l6ZXMucHVzaCgzMjApO1xuICAgICAgICAgICAgICBzcmNTZXRbMzIwXSA9IHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2xvdy5qcGcnO1xuICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5mYXZvckxvY2FsICYmIHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydzaXplcyddWydmdWxsJ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV9saW5rX2FyZWEnKS5hdHRyKCAnaHJlZicsIHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2xvdy5qcGcnICk7XG4gICAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCAnZGF0YS1mdWxsLXJlcycsIHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2xvdy5qcGcnICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnc2l6ZXMnXVsndGh1bWInXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgZm91bmRTaXplcy5wdXNoKDE1MCk7XG4gICAgICAgICAgICAgIHNyY1NldFsxNTBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAndGh1bWIuanBnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmZhdm9yTG9jYWwpIHtcbiAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZig2NDApID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChmb3VuZFNpemVzLmluZGV4T2YoMzIwKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICBzcmNTZXRbNjQwXSA9IHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2xvdy5qcGcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZm91bmRTaXplcy5pbmRleE9mKDMyMCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZig2NDApID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHNyY1NldFszMjBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnZnVsbC5qcGcnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm91bmRTaXplcy5pbmRleE9mKDE1MCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgc3JjU2V0WzMyMF0gPSBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXS5pZCArICd0aHVtYi5qcGcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZm91bmRTaXplcy5pbmRleE9mKDE1MCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvdW5kU2l6ZXMuaW5kZXhPZigzMjApID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgIHNyY1NldFsxNTBdID0gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHRoaXMucmVzaXplZEltYWdlc1tpZF0uaWQgKyAnbG93LmpwZyc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZFNpemVzLmluZGV4T2YoNjQwKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICBzcmNTZXRbMTUwXSA9IHNieU9wdGlvbnMucmVzaXplZF91cmwgKyB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdLmlkICsgJ2Z1bGwuanBnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmVzaXplZEltYWdlc1tpZF0gPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgfHwgKHR5cGVvZiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydpZCddICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnJlc2l6ZWRJbWFnZXNbaWRdWydpZCddICE9PSAncGVuZGluZycgJiYgdGhpcy5yZXNpemVkSW1hZ2VzW2lkXVsnaWQnXSAhPT0gJ2Vycm9yJykpIHtcbiAgICAgICAgICB0aGlzLmFkZFRvTmVlZHNSZXNpemluZyhpZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3JjU2V0O1xuICAgICAgfSxcbiAgICAgIGdldFZpZGVvSUQ6IGZ1bmN0aW9uICgkZWwpIHtcbiAgICAgICAgaWYgKCRlbC5oYXNDbGFzcygnc2J5X2l0ZW0nKSB8fCAkZWwuaGFzQ2xhc3MoJ3NieV9wbGF5ZXJfaXRlbScpKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiAkZWwuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gJGVsLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgkZWwuY2xvc2VzdCgnc2J5X2l0ZW0nKS5sZW5ndGggfHwgJGVsLmNsb3Nlc3QoJ3NieV9wbGF5ZXJfaXRlbScpLmxlbmd0aCkge1xuICAgICAgICAgIHZhciAkdGFyZ2VFbCA9ICRlbC5jbG9zZXN0KCdzYnlfaXRlbScpLmxlbmd0aCA/ICRlbC5jbG9zZXN0KCdzYnlfaXRlbScpIDogJGVsLmNsb3Nlc3QoJ3NieV9wbGF5ZXJfaXRlbScpO1xuICAgICAgICAgIGlmICh0eXBlb2YgJHRhcmdlRWwuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gJHRhcmdlRWwuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCRlbC5oYXNDbGFzcygnc2JfeW91dHViZScpKSB7XG4gICAgICAgICAgcmV0dXJuICRlbC5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKCQodGhpcy5lbCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5maXJzdCgpLmxlbmd0aCAmJiB0eXBlb2YgJCh0aGlzLmVsKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpcnN0KCkuYXR0cignZGF0YS12aWRlby1pZCcpICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICAgICAgcmV0dXJuICQodGhpcy5lbCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5maXJzdCgpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9LFxuICAgICAgZ2V0QXZhdGFyVXJsOiBmdW5jdGlvbiAodXNlcm5hbWUsZmF2b3JUeXBlKSB7XG4gICAgICAgIGlmICh1c2VybmFtZSA9PT0gJycpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYXZhaWxhYmxlQXZhdGFycyA9IHRoaXMuc2V0dGluZ3MuZ2VuZXJhbC5hdmF0YXJzLFxuICAgICAgICAgIGZhdm9yVHlwZSA9IHR5cGVvZiBmYXZvclR5cGUgIT09ICd1bmRlZmluZWQnID8gZmF2b3JUeXBlIDogJ2xvY2FsJztcblxuICAgICAgICBpZiAoZmF2b3JUeXBlID09PSAnbG9jYWwnKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBhdmFpbGFibGVBdmF0YXJzWydMQ0wnK3VzZXJuYW1lXSAhPT0gJ3VuZGVmaW5lZCcgJiYgcGFyc2VJbnQoYXZhaWxhYmxlQXZhdGFyc1snTENMJyt1c2VybmFtZV0pID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gc2J5T3B0aW9ucy5yZXNpemVkX3VybCArIHVzZXJuYW1lICsgJy5qcGcnO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGF2YWlsYWJsZUF2YXRhcnNbdXNlcm5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUF2YXRhcnNbdXNlcm5hbWVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgYXZhaWxhYmxlQXZhdGFyc1t1c2VybmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gYXZhaWxhYmxlQXZhdGFyc1t1c2VybmFtZV07XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXZhaWxhYmxlQXZhdGFyc1snTENMJyt1c2VybmFtZV0gIT09ICd1bmRlZmluZWQnICYmIHBhcnNlSW50KGF2YWlsYWJsZUF2YXRhcnNbJ0xDTCcrdXNlcm5hbWVdKSA9PT0gMSkgIHtcbiAgICAgICAgICAgIHJldHVybiBzYnlPcHRpb25zLnJlc2l6ZWRfdXJsICsgdXNlcm5hbWUgKyAnLmpwZyc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhZGRUb05lZWRzUmVzaXppbmc6IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICBpZiAodGhpcy5uZWVkc1Jlc2l6aW5nLmluZGV4T2YoaWQpID09PSAtMSkge1xuICAgICAgICAgIHRoaXMubmVlZHNSZXNpemluZy5wdXNoKGlkKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGFwcGx5SW1hZ2VMaXF1aWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKSxcbiAgICAgICAgICBmZWVkID0gdGhpcztcbiAgICAgICAgc2J5QWRkSW1nTGlxdWlkKCk7XG4gICAgICAgIGlmICh0eXBlb2YgJHNlbGYuZmluZChcIi5zYnlfcGxheWVyX2l0ZW1cIikuc2J5X2ltZ0xpcXVpZCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKCRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX2l0ZW0nKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICRzZWxmLmZpbmQoXCIuc2J5X3BsYXllcl9pdGVtIC5zYnlfcGxheWVyX3ZpZGVvX3RodW1ibmFpbFwiKS5zYnlfaW1nTGlxdWlkKHtmaWxsOiB0cnVlfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgICRzZWxmLmZpbmQoXCIuc2J5X2l0ZW0gLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbFwiKS5zYnlfaW1nTGlxdWlkKHtmaWxsOiB0cnVlfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBsaXN0ZW5Gb3JWaXNpYmlsaXR5Q2hhbmdlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICBzYnlBZGRWaXNpYmlsaXR5TGlzdGVuZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiAkKHRoaXMuZWwpLmZpbHRlcignOmhpZGRlbicpLnNieVZpc2liaWxpdHlDaGFuZ2VkID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvL0lmIHRoZSBmZWVkIGlzIGluaXRpYWxseSBoaWRkZW4gKGluIGEgdGFiIGZvciBleGFtcGxlKSB0aGVuIGNoZWNrIGZvciB3aGVuIGl0IGJlY29tZXMgdmlzaWJsZSBhbmQgc2V0IHRoZW4gc2V0IHRoZSBoZWlnaHRcbiAgICAgICAgICAkKHRoaXMuZWwpLmZpbHRlcignOmhpZGRlbicpLnNieVZpc2liaWxpdHlDaGFuZ2VkKHtcbiAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoZWxlbWVudCwgdmlzaWJsZSkge1xuICAgICAgICAgICAgICBmZWVkLmFmdGVyUmVzaXplKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcnVuT25Mb2FkOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZ2V0Q29sdW1uQ291bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGNvbHMgPSB0aGlzLnNldHRpbmdzLmNvbHMsXG4gICAgICAgICAgY29sc21vYmlsZSA9IHRoaXMuc2V0dGluZ3MuY29sc21vYmlsZSxcbiAgICAgICAgICByZXR1cm5Db2xzID0gY29scztcblxuICAgICAgICBzYnlXaW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXG4gICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X21vYl9jb2xfYXV0bycpKSB7XG4gICAgICAgICAgaWYgKHNieVdpbmRvd1dpZHRoIDwgNjQwICYmIChwYXJzZUludChjb2xzKSA+IDIgJiYgcGFyc2VJbnQoY29scykgPCA3KSkgcmV0dXJuQ29scyA9IDI7XG4gICAgICAgICAgaWYgKHNieVdpbmRvd1dpZHRoIDwgNjQwICYmIChwYXJzZUludChjb2xzKSA+IDYgJiYgcGFyc2VJbnQoY29scykgPCAxMSkpIHJldHVybkNvbHMgPSA0O1xuICAgICAgICAgIGlmIChzYnlXaW5kb3dXaWR0aCA8PSA0ODAgJiYgcGFyc2VJbnQoY29scykgPiAyKSByZXR1cm5Db2xzID0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChzYnlXaW5kb3dXaWR0aCA8PSA0ODApIHtcbiAgICAgICAgICByZXR1cm5Db2xzID0gY29sc21vYmlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJzZUludChyZXR1cm5Db2xzKTtcbiAgICAgIH0sXG4gICAgICBvblRodW1ibmFpbENsaWNrOiBmdW5jdGlvbigkY2xpY2tlZCxpc1BsYXllcix2aWRlb0lEKSB7XG4gICAgICAgIGlmICghdGhpcy5jYW5DcmVhdGVQbGF5ZXIoKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpO1xuICAgICAgICBpZiAoJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfZ2FsbGVyeScpKSB7XG4gICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9jdXJyZW50JykucmVtb3ZlQ2xhc3MoJ3NieV9jdXJyZW50Jyk7XG4gICAgICAgICAgJGNsaWNrZWQuY2xvc2VzdCgnLnNieV9pdGVtJykuYWRkQ2xhc3MoJ3NieV9jdXJyZW50Jyk7XG5cbiAgICAgICAgICAkY2xpY2tlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKS5hZGRDbGFzcygnc2J5X2N1cnJlbnQnKTtcbiAgICAgICAgICAkc2VsZi5hZGRDbGFzcygnc2J5X3BsYXllcl9hZGRlZCcpLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKS5hZGRDbGFzcygnc2J5X3BsYXllcl9sb2FkaW5nJyk7XG4gICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCAuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmZpbmQoJy5zYnlfbG9hZGVyJykuc2hvdygpLnJlbW92ZUNsYXNzKCdzYnlfaGlkZGVuJyk7XG4gICAgICAgICAgaWYgKCEkc2VsZi5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwIGlmcmFtZScpLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGlzUGxheWVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJyt0aGlzLmluZGV4KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gdHlwZW9mIHZpZGVvSUQgPT09ICd1bmRlZmluZWQnID8gdGhpcy5nZXRWaWRlb0lEKCRjbGlja2VkLmNsb3Nlc3QoJy5zYnlfaXRlbScpKSA6IHZpZGVvSUQ7XG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJyt0aGlzLmluZGV4LHZpZGVvSUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNQbGF5ZXIpIHtcbiAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSB0eXBlb2YgdmlkZW9JRCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmdldFZpZGVvSUQoJHNlbGYuZmluZCgnLnNieV9pdGVtJykuZmlyc3QoKSkgOiB2aWRlb0lEO1xuXG4gICAgICAgICAgICAgIHRoaXMucGxheVZpZGVvSW5QbGF5ZXIodmlkZW9JRCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgdmlkZW9JRCA9IHR5cGVvZiB2aWRlb0lEID09PSAndW5kZWZpbmVkJyA/IHRoaXMuZ2V0VmlkZW9JRCgkY2xpY2tlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKSkgOiB2aWRlb0lEO1xuXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlUGxheWVySW5mbygkY2xpY2tlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKSk7XG4gICAgICAgICAgICAgIHRoaXMucGxheVZpZGVvSW5QbGF5ZXIodmlkZW9JRCk7XG4gICAgICAgICAgICAgIHRoaXMuYWZ0ZXJWaWRlb0NoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dyaWQnKSB8fCAkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2Nhcm91c2VsJykpIHtcbiAgICAgICAgICB2YXIgJHNieUl0ZW0gPSAkY2xpY2tlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKSxcbiAgICAgICAgICAgIHZpZGVvSUQgPSB0eXBlb2YgdmlkZW9JRCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLmdldFZpZGVvSUQoJHNieUl0ZW0pIDogdmlkZW9JRDtcbiAgICAgICAgICB0aGlzLnBsYXlWaWRlb0luUGxheWVyKHZpZGVvSUQpO1xuICAgICAgICAgIHRoaXMuYWZ0ZXJWaWRlb0NoYW5nZWQoKTtcbiAgICAgICAgfSBlbHNlIGlmICgkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2xpc3QnKSkge1xuICAgICAgICAgIHZhciAkc2J5SXRlbSA9ICRjbGlja2VkLmNsb3Nlc3QoJy5zYnlfaXRlbScpLFxuICAgICAgICAgICAgdmlkZW9JRCA9IHR5cGVvZiB2aWRlb0lEID09PSAndW5kZWZpbmVkJyA/IHRoaXMuZ2V0VmlkZW9JRCgkc2J5SXRlbSkgOiB2aWRlb0lEO1xuICAgICAgICAgIGlmICgkc2J5SXRlbS5sZW5ndGggJiYgISRzYnlJdGVtLmZpbmQoJ2lmcmFtZScpLmxlbmd0aCkge1xuICAgICAgICAgICAgJHNieUl0ZW0uZmluZCgnLnNieV9sb2FkZXInKS5zaG93KCkucmVtb3ZlQ2xhc3MoJ3NieV9oaWRkZW4nKTtcbiAgICAgICAgICAgICRzYnlJdGVtLmFkZENsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcgc2J5X3BsYXllcl9sb2FkZWQnKTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyXycrdmlkZW9JRCx2aWRlb0lEKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wbGF5VmlkZW9JblBsYXllcih2aWRlb0lELCRzYnlJdGVtLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSk7XG4gICAgICAgICAgICB0aGlzLmFmdGVyVmlkZW9DaGFuZ2VkKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25UaHVtYm5haWxFbnRlcjogZnVuY3Rpb24oJGhvdmVyZWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkNyZWF0ZVBsYXllcigpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkc2VsZiA9ICQodGhpcy5lbCk7XG4gICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykpIHtcbiAgICAgICAgICB2YXIgJHNieUl0ZW0gPSAkaG92ZXJlZC5jbG9zZXN0KCcuc2J5X2l0ZW0nKSxcbiAgICAgICAgICAgIHZpZGVvSUQgPSB0aGlzLmdldFZpZGVvSUQoJHNieUl0ZW0pO1xuICAgICAgICAgIGlmICghJHNieUl0ZW0uZmluZCgnaWZyYW1lJykubGVuZ3RoKSB7XG4gICAgICAgICAgICAkc2J5SXRlbS5maW5kKCcuc2J5X2xvYWRlcicpLnNob3coKS5yZW1vdmVDbGFzcygnc2J5X2hpZGRlbicpO1xuICAgICAgICAgICAgJHNieUl0ZW0uYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGluZyBzYnlfcGxheWVyX2xvYWRlZCcpO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXJfJyt2aWRlb0lELHZpZGVvSUQsMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25UaHVtYm5haWxMZWF2ZTogZnVuY3Rpb24oJGhvdmVyZWQpIHtcbiAgICAgIH0sXG4gICAgICBjaGFuZ2VQbGF5ZXJJbmZvOiBmdW5jdGlvbigkbmV3SXRlbSkge1xuXG4gICAgICB9LFxuICAgICAgcGxheWVyRWFnZXJMb2FkZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMucGxheWVyICE9PSAndW5kZWZpbmVkJyB8fCAkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfcGxheWVyX2xvYWRlZCcpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjYW5DcmVhdGVQbGF5ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAoJCh0aGlzLmVsKS5maW5kKCcjc2J5X2JsYW5rJykubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBsYXllckVhZ2VyTG9hZGVkKCkgfHwgKHRoaXMucGxheWVyQVBJUmVhZHkgJiYgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHx8ICh3aW5kb3cuc2J5QVBJUmVhZHkgJiYgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pO1xuICAgICAgfSxcbiAgICAgIHBsYXlWaWRlb0luUGxheWVyOiBmdW5jdGlvbih2aWRlb0lELHBsYXllcklEKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wbGF5ZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB0aGlzLnBsYXllci5sb2FkVmlkZW9CeUlkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRoaXMucGxheWVyLmxvYWRWaWRlb0J5SWQodmlkZW9JRCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAmJiB0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyLmxvYWRWaWRlb0J5SWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgd2luZG93LnNieUxpZ2h0Ym94UGxheWVyLmxvYWRWaWRlb0J5SWQodmlkZW9JRCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBsYXllcklEICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICYmIHR5cGVvZiB0aGlzLnBsYXllcnMgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgJiYgdHlwZW9mIHRoaXMucGxheWVyc1twbGF5ZXJJRF0gIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgJiYgdHlwZW9mIHRoaXMucGxheWVyc1twbGF5ZXJJRF0ubG9hZFZpZGVvQnlJZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLnBsYXllcnNbcGxheWVySURdLmxvYWRWaWRlb0J5SWQodmlkZW9JRCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhZnRlclZpZGVvQ2hhbmdlZDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICgkKHRoaXMuZWwpLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSkge1xuICAgICAgICAgICQodGhpcy5lbCkuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAkKHRoaXMuZWwpLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAgLnNieV92aWRlb190aHVtYm5haWwnKS5maW5kKCcuc2J5X2xvYWRlcicpLmhpZGUoKS5hZGRDbGFzcygnc2J5X2hpZGRlbicpO1xuXG4gICAgICAgICAgaWYgKCQod2luZG93KS53aWR0aCgpIDwgNDgwKSB7XG4gICAgICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7XG4gICAgICAgICAgICAgIHNjcm9sbFRvcDogJCh0aGlzLmVsKS5maW5kKCcuc2J5X3BsYXllcl9vdXRlcl93cmFwJykub2Zmc2V0KCkudG9wXG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2hlY2tDb25zZW50OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuIHx8ICF0aGlzLnNldHRpbmdzLmdkcHIpIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLm5vQ0ROID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBDTElfQ29va2llICE9PSBcInVuZGVmaW5lZFwiKSB7IC8vIEdEUFIgQ29va2llIENvbnNlbnQgYnkgV2ViVG9mZmVlXG4gICAgICAgICAgaWYgKENMSV9Db29raWUucmVhZChDTElfQUNDRVBUX0NPT0tJRV9OQU1FKSAhPT0gbnVsbCkgIHtcblxuICAgICAgICAgICAgLy8gV2ViVG9mZmVlIG5vIGxvbmdlciB1c2VzIHRoaXMgY29va2llIGJ1dCBiZWluZyBsZWZ0IGhlcmUgdG8gbWFpbnRhaW4gYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgIGlmIChDTElfQ29va2llLnJlYWQoJ2Nvb2tpZWxhd2luZm8tY2hlY2tib3gtbm9uLW5lY2Vzc2FyeScpICE9PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4gPSBDTElfQ29va2llLnJlYWQoJ2Nvb2tpZWxhd2luZm8tY2hlY2tib3gtbm9uLW5lY2Vzc2FyeScpID09PSAneWVzJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKENMSV9Db29raWUucmVhZCgnY29va2llbGF3aW5mby1jaGVja2JveC1uZWNlc3NhcnknKSAhPT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY29uc2VudEdpdmVuID0gQ0xJX0Nvb2tpZS5yZWFkKCdjb29raWVsYXdpbmZvLWNoZWNrYm94LW5lY2Vzc2FyeScpID09PSAneWVzJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LmNuQXJncyAhPT0gXCJ1bmRlZmluZWRcIikgeyAvLyBDb29raWUgTm90aWNlIGJ5IGRGYWN0b3J5XG4gICAgICAgICAgdmFyIHZhbHVlID0gXCI7IFwiICsgZG9jdW1lbnQuY29va2llLFxuICAgICAgICAgICAgcGFydHMgPSB2YWx1ZS5zcGxpdCggJzsgY29va2llX25vdGljZV9hY2NlcHRlZD0nICk7XG5cbiAgICAgICAgICBpZiAoIHBhcnRzLmxlbmd0aCA9PT0gMiApIHtcbiAgICAgICAgICAgIHZhciB2YWwgPSBwYXJ0cy5wb3AoKS5zcGxpdCggJzsnICkuc2hpZnQoKTtcblxuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4gPSAodmFsID09PSAndHJ1ZScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LmNvb2tpZWNvbnNlbnQgIT09ICd1bmRlZmluZWQnKSB7IC8vIENvbXBsaWFueiBieSBSZWFsbHkgU2ltcGxlIFBsdWdpbnNcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9ICggc2J5Q21wbHpHZXRDb29raWUoJ2NtcGx6X2NvbnNlbnRfc3RhdHVzJykgPT09ICdhbGxvdycgfHwgalF1ZXJ5KCdib2R5JykuaGFzQ2xhc3MoJ2NtcGx6LXN0YXR1cy1tYXJrZXRpbmcnKSApO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cuQ29va2llYm90ICE9PSBcInVuZGVmaW5lZFwiKSB7IC8vIENvb2tpZWJvdCBieSBDeWJvdCBBL1NcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IENvb2tpZWJvdC5jb25zZW50ZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5Cb3JsYWJzQ29va2llICE9PSAndW5kZWZpbmVkJykgeyAvLyBCb3JsYWJzIENvb2tpZSBieSBCb3JsYWJzXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4gPSB3aW5kb3cuQm9ybGFic0Nvb2tpZS5jaGVja0Nvb2tpZUNvbnNlbnQoJ3lvdXR1YmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ3NieWNoZWNrY29uc2VudCcpO1xuICAgICAgICBldnQuZmVlZCA9IHRoaXM7XG4gICAgICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW4pIHtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLm5vQ0ROID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5jb25zZW50R2l2ZW47IC8vIEdEUFIgbm90IGVuYWJsZWRcbiAgICAgIH0sXG4gICAgICBhZnRlckNvbnNlbnRUb2dnbGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tDb25zZW50KCkpIHtcbiAgICAgICAgICB2YXIgZmVlZCA9IHRoaXM7XG4gICAgICAgICAgd2luZG93LnNieS5tYXliZUFkZFlUQVBJKCk7XG4gICAgICAgICAgZmVlZC5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgICAgZmVlZC5hcHBseUZ1bGxGZWF0dXJlcygpO1xuICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBmZWVkLmFmdGVyUmVzaXplKCk7XG4gICAgICAgICAgfSw1MDApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcmVtb3ZlRmVhdHVyZXM6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZmVlZCA9IHRoaXM7XG4gICAgICAgIGlmIChmZWVkLnNldHRpbmdzLm5vQ0ROKSB7XG4gICAgICAgICAgJChmZWVkLmVsKS5maW5kKCcuc2J5X3ZpZGVvX3RodW1ibmFpbCcpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAkKHRoaXMpLnJlbW92ZUF0dHIoJ2RhdGEtc2J5LWxpZ2h0Ym94Jyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBhcHBseUZ1bGxGZWF0dXJlczogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBmZWVkID0gdGhpcztcblxuICAgICAgICAkKGZlZWQuZWwpLmZpbmQoJy5zYnlfaGVhZGVyX2ltZyBpbWcnKS5hdHRyKCdzcmMnLCQoZmVlZC5lbCkuZmluZCgnLnNieV9oZWFkZXJfaW1nJykuYXR0cignZGF0YS1hdmF0YXItdXJsJykpO1xuICAgICAgICBpZiAodHlwZW9mICQoZmVlZC5lbCkuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5maXJzdCgpLmF0dHIoJ2RhdGEtc2J5LWxpZ2h0Ym94JykgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgJiYgZmVlZC5zZXR0aW5ncy5saWdodGJveEVuYWJsZWQpIHtcbiAgICAgICAgICAkKGZlZWQuZWwpLmZpbmQoJy5zYnlfdmlkZW9fdGh1bWJuYWlsJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICQodGhpcykuYXR0cignZGF0YS1zYnktbGlnaHRib3gnLGZlZWQuaW5kZXgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkc2VsZiA9ICQoZmVlZC5lbCk7XG4gICAgICAgICRzZWxmLmZpbmQoJy5zYnlfbm9fY29uc2VudCcpLnJlbW92ZUNsYXNzKCdzYnlfbm9fY29uc2VudCcpO1xuICAgICAgICBpZiAoJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfZ2FsbGVyeScpICYmICRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX291dGVyX3dyYXAnKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLm1heWJlUmFpc2VTaW5nbGVJbWFnZVJlc29sdXRpb24oJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCcpLCAwLCB0cnVlKTtcbiAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpLmFkZENsYXNzKCdzYnlfY3VycmVudCcpO1xuXG4gICAgICAgICAgaWYgKCFmZWVkLmNhbkNyZWF0ZVBsYXllcigpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfb3V0ZXJfd3JhcCBpZnJhbWUnKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZlZWQuY3JlYXRlUGxheWVyKCdzYnlfcGxheWVyJytmZWVkLmluZGV4KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGxvY2F0aW9uR3Vlc3M6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgJGZlZWQgPSAkKHRoaXMuZWwpLFxuICAgICAgICAgIGxvY2F0aW9uID0gJ2NvbnRlbnQnO1xuXG4gICAgICAgIGlmICgkZmVlZC5jbG9zZXN0KCdmb290ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICBsb2NhdGlvbiA9ICdmb290ZXInO1xuICAgICAgICB9IGVsc2UgaWYgKCRmZWVkLmNsb3Nlc3QoJy5oZWFkZXInKS5sZW5ndGhcbiAgICAgICAgICB8fCAkZmVlZC5jbG9zZXN0KCdoZWFkZXInKS5sZW5ndGgpIHtcbiAgICAgICAgICBsb2NhdGlvbiA9ICdoZWFkZXInO1xuICAgICAgICB9IGVsc2UgaWYgKCRmZWVkLmNsb3Nlc3QoJy5zaWRlYmFyJykubGVuZ3RoXG4gICAgICAgICAgfHwgJGZlZWQuY2xvc2VzdCgnYXNpZGUnKS5sZW5ndGgpIHtcbiAgICAgICAgICBsb2NhdGlvbiA9ICdzaWRlYmFyJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gU2J5RmVlZFBybyhlbCwgaW5kZXgsIHNldHRpbmdzKSB7XG4gICAgICBTYnlGZWVkLmNhbGwodGhpcywgZWwsIGluZGV4LCBzZXR0aW5ncyk7XG5cbiAgICAgIHRoaXMuQ1RBID0ge307XG5cbiAgICAgIHRoaXMuaW5pdExheW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmluaXRHYWxsZXJ5TGF5b3V0KCk7XG4gICAgICAgIHRoaXMuaW5pdEdyaWQoKTtcblxuICAgICAgICB0aGlzLmluaXRDYXJvdXNlbHMoKTtcbiAgICAgICAgdmFyIGV2dCA9IGpRdWVyeS5FdmVudCgnc2J5YWZ0ZXJsYXlvdXRpbml0Jyk7XG4gICAgICAgIGV2dC5mZWVkID0gdGhpcztcbiAgICAgICAgalF1ZXJ5KHdpbmRvdykudHJpZ2dlcihldnQpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5pbml0R3JpZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAod2luZG93LnNieVNlbWlFYWdlckxvYWRpbmcgJiYgalF1ZXJ5KCcjc2J5X2xpZ2h0Ym94JykubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICAgIHBsYXllcklEID0gJ3NieV9sYi1wbGF5ZXInO1xuICAgICAgICAgIGpRdWVyeSgnI3NieV9saWdodGJveCcpLmFkZENsYXNzKCdzYnlfdmlkZW9fbGlnaHRib3gnKTtcblxuICAgICAgICAgIHZhciB2aWRlb0lEID0gJCh0aGlzLmVsKS5maW5kKCdzYnlfaXRlbScpLmZpcnN0KCkuYXR0cignZGF0YS12aWRlby1pZCcpLFxuICAgICAgICAgICAgYXV0b3BsYXkgPSBzYnlPcHRpb25zLmF1dG9wbGF5O1xuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSB7XG4gICAgICAgICAgICAgIGhvc3Q6IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArIGZlZWQuZW1iZWRVUkwsXG4gICAgICAgICAgICAgIHZpZGVvSWQ6IHZpZGVvSUQsXG4gICAgICAgICAgICAgIHBsYXllclZhcnM6IHtcbiAgICAgICAgICAgICAgICBtb2Rlc3RicmFuZGluZzogMSxcbiAgICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgICAgYXV0b3BsYXk6IGF1dG9wbGF5XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICdvblN0YXRlQ2hhbmdlJzogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICBmZWVkLmFmdGVyU3RhdGVDaGFuZ2UocGxheWVySUQsIHZpZGVvSUQsIGRhdGEsICQoJyMnICsgcGxheWVySUQpLmNsb3Nlc3QoJy5zYnlfdmlkZW9fdGh1bWJuYWlsX3dyYXAnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZmVlZC5tYXliZUFkZENUQShwbGF5ZXJJRCk7XG5cbiAgICAgICAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9IG5ldyB3aW5kb3cuWVQuUGxheWVyKHBsYXllcklELCBhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuaW5pdENhcm91c2VscyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgZmVlZCA9IHRoaXMsXG4gICAgICAgICAgJHNlbGYgPSAkKHRoaXMuZWwpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29scyA9IHRoaXMuc2V0dGluZ3MuY29scyxcbiAgICAgICAgICBjb2xzbW9iaWxlID0gdGhpcy5zZXR0aW5ncy5jb2xzbW9iaWxlO1xuXG4gICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmFkZENsYXNzKCdzYnlfY2Fyb3VzZWwnKTtcbiAgICAgICAgJHNlbGYuZmluZCgnLnNieV9sb2FkX2J0bicpLnJlbW92ZSgpO1xuICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5jc3Moe1xuICAgICAgICAgICdwYWRkaW5nLXRvcCcgOiAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5jc3MoJ3BhZGRpbmctdG9wJyksXG4gICAgICAgICAgJ3BhZGRpbmctcmlnaHQnIDogJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwJykuY3NzKCdwYWRkaW5nLXRvcCcpLFxuICAgICAgICAgICdwYWRkaW5nLWJvdHRvbScgOiAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5jc3MoJ3BhZGRpbmctdG9wJyksXG4gICAgICAgICAgJ3BhZGRpbmctbGVmdCcgOiAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAnKS5jc3MoJ3BhZGRpbmctdG9wJylcbiAgICAgICAgfSk7XG4gICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgJCh0aGlzKS5hdHRyKCdzdHlsZScsJCh0aGlzKS5hdHRyKCdzdHlsZScpLnJlcGxhY2UoJ3BhZGRpbmc6ICcrJHNlbGYuZmluZCgnLnNieV9pdGVtc193cmFwJykuY3NzKCdwYWRkaW5nLXRvcCcpLCdwYWRkaW5nOiAnKyRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcCcpLmNzcygncGFkZGluZy10b3AnKSArICcgIWltcG9ydGFudCcpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdmFyIGFycm93cyA9IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXJvdXNlbFswXSxcbiAgICAgICAgICBwYWdpbmF0aW9uID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzFdLFxuICAgICAgICAgIGF1dG9wbGF5ID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzJdLFxuICAgICAgICAgIHRpbWUgPSBmZWVkLnNldHRpbmdzLmdlbmVyYWwuY2Fyb3VzZWxbM10sXG4gICAgICAgICAgbG9vcCA9IGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXJvdXNlbFs0XSxcbiAgICAgICAgICByb3dzID0gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzVdO1xuICAgICAgICAvL0luaXRpYXRlIGNhcm91c2VsXG4gICAgICAgIGlmKCAhYXV0b3BsYXkgKSB0aW1lID0gZmFsc2U7XG5cbiAgICAgICAgLy9TZXQgZGVmYXVsdHMgZm9yIHJlc3BvbnNpdmUgYnJlYWtwb2ludHNcbiAgICAgICAgdmFyIGl0ZW1zVGFibGV0U21hbGwgPSBjb2xzLFxuICAgICAgICAgIGl0ZW1zTW9iaWxlID0gY29scyxcbiAgICAgICAgICBhcnJvd3MgPSBhcnJvd3MgPyAnb25ob3ZlcicgOiAnaGlkZScsXG4gICAgICAgICAgYXV0b3BsYXkgPSB0aW1lICE9PSBmYWxzZSxcbiAgICAgICAgICBoYXMycm93cyA9IChyb3dzID09IDIpLFxuICAgICAgICAgIGxvb3AgPSAoIWxvb3ApLFxuICAgICAgICAgIG9uQ2hhbmdlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgIGZlZWQuYWZ0ZXJSZXNpemUoKTtcbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgYWZ0ZXJJbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgJHNlbGYgPSBqUXVlcnkoZmVlZC5lbCk7XG4gICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW1zX3dyYXAuc2J5X2Nhcm91c2VsJykuZmFkZUluKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbXNfd3JhcC5zYnlfY2Fyb3VzZWwgLnNieV9pbmZvLCAuc2J5X293bDJyb3ctaXRlbSwuc2J5X2l0ZW1zX3dyYXAuc2J5X2Nhcm91c2VsJykuZmFkZUluKCk7XG5cbiAgICAgICAgICAgIH0sIDEpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG5cbiAgICAgICAgICAgICAgdmFyICRuYXZFbGVtZW50c1dyYXBwZXIgPSAkc2VsZi5maW5kKCcuc2J5LW93bC1uYXYnKTtcbiAgICAgICAgICAgICAgaWYgKGFycm93cyA9PT0gJ29uaG92ZXInKSB7XG5cbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcnJvd3MgPT09ICdiZWxvdycpIHtcbiAgICAgICAgICAgICAgICB2YXIgJGRvdHMgPSAkc2VsZi5maW5kKCcuc2J5LW93bC1kb3RzJyksXG4gICAgICAgICAgICAgICAgICAkcHJldiA9ICRzZWxmLmZpbmQoJy5zYnktb3dsLXByZXYnKSxcbiAgICAgICAgICAgICAgICAgICRuZXh0ID0gJHNlbGYuZmluZCgnLnNieS1vd2wtbmV4dCcpLFxuICAgICAgICAgICAgICAgICAgJG5hdiA9ICRzZWxmLmZpbmQoJy5zYnktb3dsLW5hdicpLFxuICAgICAgICAgICAgICAgICAgJGRvdCA9ICRzZWxmLmZpbmQoJy5zYnktb3dsLWRvdCcpLFxuICAgICAgICAgICAgICAgICAgd2lkdGhEb3RzID0gJGRvdC5sZW5ndGggKiAkZG90LmlubmVyV2lkdGgoKSxcbiAgICAgICAgICAgICAgICAgIG1heFdpZHRoID0gJHNlbGYuaW5uZXJXaWR0aCgpO1xuXG4gICAgICAgICAgICAgICAgJHByZXYuYWZ0ZXIoJGRvdHMpO1xuXG4gICAgICAgICAgICAgICAgJG5hdi5jc3MoJ3Bvc2l0aW9uJywgJ3JlbGF0aXZlJyk7XG4gICAgICAgICAgICAgICAgJG5leHQuY3NzKCdwb3NpdGlvbicsICdhYnNvbHV0ZScpLmNzcygndG9wJywgJy02cHgnKS5jc3MoJ3JpZ2h0JywgTWF0aC5tYXgoKC41ICogJG5hdi5pbm5lcldpZHRoKCkgLSAuNSAqICh3aWR0aERvdHMpIC0gJG5leHQuaW5uZXJXaWR0aCgpIC0gNiksIDApKTtcbiAgICAgICAgICAgICAgICAkcHJldi5jc3MoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJykuY3NzKCd0b3AnLCAnLTZweCcpLmNzcygnbGVmdCcsIE1hdGgubWF4KCguNSAqICRuYXYuaW5uZXJXaWR0aCgpIC0gLjUgKiAod2lkdGhEb3RzKSAtICRwcmV2LmlubmVyV2lkdGgoKSAtIDYpLCAwKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyb3dzID09PSAnaGlkZScpIHtcbiAgICAgICAgICAgICAgICAkbmF2RWxlbWVudHNXcmFwcGVyLmFkZENsYXNzKCdoaWRlJykuaGlkZSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0sIDEpO1xuICAgICAgICAgIH07XG5cbiAgICAgICAgLy9EaXNhYmxlIG1vYmlsZSBsYXlvdXRcbiAgICAgICAgaWYoICRzZWxmLmhhc0NsYXNzKCdzYnlfbW9iX2NvbF9hdXRvJykgKSB7XG4gICAgICAgICAgaXRlbXNUYWJsZXRTbWFsbCA9IDI7XG4gICAgICAgICAgaWYoIHBhcnNlSW50KGNvbHMpICE9IDIgKSBpdGVtc01vYmlsZSA9IDE7XG4gICAgICAgICAgaWYoIHBhcnNlSW50KGNvbHMpID09IDIgKSBpdGVtc01vYmlsZSA9IDI7IC8vSWYgdGhlIGNvbHMgYXJlIHNldCB0byAyIHRoZW4gZG9uJ3QgY2hhbmdlIHRvIDEgY29sIG9uIG1vYmlsZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1zTW9iaWxlID0gY29sc21vYmlsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2Fyb3VzZWxBcmdzID0ge1xuICAgICAgICAgIGl0ZW1zOiBjb2xzLFxuICAgICAgICAgIGxvb3A6IGxvb3AsXG4gICAgICAgICAgcmV3aW5kOiAhbG9vcCxcbiAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXksXG4gICAgICAgICAgYXV0b3BsYXlUaW1lb3V0OiBNYXRoLm1heCh0aW1lLDIwMDApLFxuICAgICAgICAgIGF1dG9wbGF5SG92ZXJQYXVzZTogdHJ1ZSxcbiAgICAgICAgICBuYXY6IHRydWUsXG4gICAgICAgICAgbmF2VGV4dDogWyc8c3ZnIGNsYXNzPVwic3ZnLWlubGluZS0tZmEgZmEtY2hldnJvbi1sZWZ0IGZhLXctMTBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWZhLXByb2Nlc3NlZD1cIlwiIGRhdGEtcHJlZml4PVwiZmFcIiBkYXRhLWljb249XCJjaGV2cm9uLWxlZnRcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMzIwIDUxMlwiPjxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTM0LjUyIDIzOS4wM0wyMjguODcgNDQuNjljOS4zNy05LjM3IDI0LjU3LTkuMzcgMzMuOTQgMGwyMi42NyAyMi42N2M5LjM2IDkuMzYgOS4zNyAyNC41Mi4wNCAzMy45TDEzMS40OSAyNTZsMTU0LjAyIDE1NC43NWM5LjM0IDkuMzggOS4zMiAyNC41NC0uMDQgMzMuOWwtMjIuNjcgMjIuNjdjLTkuMzcgOS4zNy0yNC41NyA5LjM3LTMzLjk0IDBMMzQuNTIgMjcyLjk3Yy05LjM3LTkuMzctOS4zNy0yNC41NyAwLTMzLjk0elwiPjwvcGF0aD48L3N2Zz4nLCAnPHN2ZyBjbGFzcz1cInN2Zy1pbmxpbmUtLWZhIGZhLWNoZXZyb24tcmlnaHQgZmEtdy0xMFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGRhdGEtZmEtcHJvY2Vzc2VkPVwiXCIgZGF0YS1wcmVmaXg9XCJmYVwiIGRhdGEtaWNvbj1cImNoZXZyb24tcmlnaHRcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMzIwIDUxMlwiPjxwYXRoIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBkPVwiTTI4NS40NzYgMjcyLjk3MUw5MS4xMzIgNDY3LjMxNGMtOS4zNzMgOS4zNzMtMjQuNTY5IDkuMzczLTMzLjk0MSAwbC0yMi42NjctMjIuNjY3Yy05LjM1Ny05LjM1Ny05LjM3NS0yNC41MjItLjA0LTMzLjkwMUwxODguNTA1IDI1NiAzNC40ODQgMTAxLjI1NWMtOS4zMzUtOS4zNzktOS4zMTctMjQuNTQ0LjA0LTMzLjkwMWwyMi42NjctMjIuNjY3YzkuMzczLTkuMzczIDI0LjU2OS05LjM3MyAzMy45NDEgMEwyODUuNDc1IDIzOS4wM2M5LjM3MyA5LjM3MiA5LjM3MyAyNC41NjguMDAxIDMzLjk0MXpcIj48L3BhdGg+PC9zdmc+J10sXG4gICAgICAgICAgZG90czogcGFnaW5hdGlvbixcbiAgICAgICAgICBvd2wycm93OiBoYXMycm93cyxcbiAgICAgICAgICByZXNwb25zaXZlOiB7XG4gICAgICAgICAgICAwOiB7XG4gICAgICAgICAgICAgIGl0ZW1zOiBpdGVtc01vYmlsZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDQ4MDoge1xuICAgICAgICAgICAgICBpdGVtczogaXRlbXNUYWJsZXRTbWFsbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIDY0MDoge1xuICAgICAgICAgICAgICBpdGVtczogY29sc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICAgIG9uSW5pdGlhbGl6ZTogYWZ0ZXJJbml0XG4gICAgICAgIH07XG5cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc3RyaXBFbW9qaWh0bWwgPSBmdW5jdGlvbiAoJGVsKSB7XG4gICAgICAgICRlbC5maW5kKCcuZW1vamknKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICQodGhpcykucmVwbGFjZVdpdGgoJCh0aGlzKS5hdHRyKCdhbHQnKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiAkZWwuaHRtbCgpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5hZnRlckl0ZW1SZXZlYWxlZCA9IGZ1bmN0aW9uKCRpdGVtKSB7XG5cbiAgICAgICAgdmFyIGZlZWQgPSB0aGlzO1xuICAgICAgICBpZiAoJGl0ZW0uZmluZCgnLnNieV9jYXB0aW9uJykubGVuZ3RoICYmICEgJGl0ZW0uZmluZCgnLnNieV9jYXB0aW9uJykuaGFzQ2xhc3MoJ3NieV9mdWxsX2NhcHRpb24nKSkge1xuICAgICAgICAgIC8vRXhwYW5kIHBvc3RcbiAgICAgICAgICB2YXIgJGNhcHRpb24gPSAkaXRlbS5maW5kKCcuc2J5X2l0ZW1fY2FwdGlvbl93cmFwIC5zYnlfY2FwdGlvbicpLFxuICAgICAgICAgICAgJGhvdmVyQ2FwdGlvbiA9ICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwgLnNieV9jYXB0aW9uJyksXG4gICAgICAgICAgICB0ZXh0X2xpbWl0ID0gdHlwZW9mIGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5kZXNjcmlwdGlvbmxlbmd0aCAhPT0gJ3VuZGVmaW5lZCcgPyBwYXJzZUludChmZWVkLnNldHRpbmdzLmdlbmVyYWwuZGVzY3JpcHRpb25sZW5ndGgpIDogMTUwO1xuICAgICAgICAgIGlmICh0ZXh0X2xpbWl0IDwgMSkgdGV4dF9saW1pdCA9IDk5OTk5O1xuICAgICAgICAgIC8vU2V0IHRoZSBmdWxsIHRleHQgdG8gYmUgdGhlIGNhcHRpb24gKHVzZWQgaW4gdGhlIGltYWdlIGFsdClcblxuICAgICAgICAgIHZhciBjYXB0aW9uVGV4dCA9IHRoaXMuc3RyaXBFbW9qaWh0bWwoJGl0ZW0uZmluZCgnLnNieV9jYXB0aW9uJykuZmlyc3QoKSksXG4gICAgICAgICAgICBickNvdW50ID0gKGNhcHRpb25UZXh0Lm1hdGNoKC88YnI+L2cpIHx8IFtdKS5sZW5ndGgsXG4gICAgICAgICAgICBickFkanVzdCA9ICh0eXBlb2Ygc2J5T3B0aW9ucy5ickFkanVzdCA9PT0gJ3VuZGVmaW5lZCcgfHwgc2J5T3B0aW9ucy5ickFkanVzdCA9PT0gJzEnIHx8IHNieU9wdGlvbnMuYnJBZGp1c3QgPT09IHRydWUpO1xuICAgICAgICAgIC8vIHJlcGxhY2UgZW1vamkgd2l0aCBhbHQgZm9yIG1vcmUgYWNjdXJhdGUgc2hvcnRlbmluZ1xuICAgICAgICAgIGlmIChickFkanVzdCAmJiBickNvdW50ID4gMCAmJiBjYXB0aW9uVGV4dC5pbmRleE9mKCc8YnI+JykgPCB0ZXh0X2xpbWl0KSB7XG4gICAgICAgICAgICB2YXIgJHNpemluZ0NhcHRpb24gPSAkaXRlbS5maW5kKCcuc2J5X2NhcHRpb24nKS5maXJzdCgpO1xuICAgICAgICAgICAgY2FwdGlvbldpZHRoID0gJHNpemluZ0NhcHRpb24ud2lkdGgoKSA+IDIwID8gJHNpemluZ0NhcHRpb24ud2lkdGgoKSA6ICRpdGVtLndpZHRoKCksXG4gICAgICAgICAgICAgIGZvbnRTaXplID0gJHNpemluZ0NhcHRpb24uY3NzKCdmb250LXNpemUnKSxcbiAgICAgICAgICAgICAgY2hhcmFjdGVyc1BlckxpbmUgPSBjYXB0aW9uV2lkdGggLyBwYXJzZUludChmb250U2l6ZSkgKiAxLjg1LFxuICAgICAgICAgICAgICBtYXhDaGFyc1BlckxpbmUgPSBNYXRoLmZsb29yKGNoYXJhY3RlcnNQZXJMaW5lKSxcbiAgICAgICAgICAgICAgcHJvamVjdGVkTWF4TGluZXMgPSBNYXRoLmNlaWwodGV4dF9saW1pdCAvIGNoYXJhY3RlcnNQZXJMaW5lKTtcblxuICAgICAgICAgICAgdmFyIHNwbGl0Q2FwdGlvbiA9IGNhcHRpb25UZXh0LnNwbGl0KCc8YnI+JyksXG4gICAgICAgICAgICAgIGxpbmVzQ29uc3VtZWQgPSAwLFxuICAgICAgICAgICAgICBhZGp1c3RlZFRleHRMaW1pdCA9IDA7XG4gICAgICAgICAgICBqUXVlcnkuZWFjaChzcGxpdENhcHRpb24sIGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgICAgICB2YXIgbGluZXNMZWZ0ID0gcHJvamVjdGVkTWF4TGluZXMgLSBsaW5lc0NvbnN1bWVkO1xuICAgICAgICAgICAgICBpZiAobGluZXNMZWZ0ID4gMCkge1xuICAgICAgICAgICAgICAgIHZhciB0aGlzTGluZXNDb25zdW1lZCA9IE1hdGgubWF4KDEsIE1hdGguY2VpbCh0aGlzLmxlbmd0aCAvIGNoYXJhY3RlcnNQZXJMaW5lKSk7XG5cbiAgICAgICAgICAgICAgICBhZGp1c3RlZFRleHRMaW1pdCArPSBNYXRoLm1pbih0aGlzLmxlbmd0aCArIDQsIGxpbmVzTGVmdCAqIG1heENoYXJzUGVyTGluZSk7XG4gICAgICAgICAgICAgICAgbGluZXNDb25zdW1lZCArPSB0aGlzTGluZXNDb25zdW1lZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRleHRfbGltaXQgPSBhZGp1c3RlZFRleHRMaW1pdDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgc2hvcnRfdGV4dCA9IGNhcHRpb25UZXh0LnN1YnN0cmluZygwLCB0ZXh0X2xpbWl0KTtcbiAgICAgICAgICBzaG9ydF90ZXh0ID0gY2FwdGlvblRleHQubGVuZ3RoID4gdGV4dF9saW1pdCA/IHNob3J0X3RleHQuc3Vic3RyKDAsIE1hdGgubWluKHNob3J0X3RleHQubGVuZ3RoLCBzaG9ydF90ZXh0Lmxhc3RJbmRleE9mKFwiIFwiKSkpIDogc2hvcnRfdGV4dDtcblxuXG4gICAgICAgICAgLy9DdXQgdGhlIHRleHQgYmFzZWQgb24gbGltaXRzIHNldFxuICAgICAgICAgIGlmICgkY2FwdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICRjYXB0aW9uLmh0bWwoc2J5TGlua2lmeShzaG9ydF90ZXh0KSk7XG4gICAgICAgICAgICBpZiAoc2hvcnRfdGV4dCA9PT0gY2FwdGlvblRleHQpIHtcbiAgICAgICAgICAgICAgJGNhcHRpb24ubmV4dCgnLnNieV9leHBhbmQnKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRob3ZlckNhcHRpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgaG92ZXJDYXB0aW9uVGV4dCA9IHNob3J0X3RleHQ7XG4gICAgICAgICAgICBpZiAoc2hvcnRfdGV4dCAhPT0gY2FwdGlvblRleHQpIHtcbiAgICAgICAgICAgICAgaG92ZXJDYXB0aW9uVGV4dCArPSAnPHNwYW4gY2xhc3M9XCJzYnlfbW9yZVwiPi4uLjwvc3Bhbj4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGhvdmVyQ2FwdGlvbi5odG1sKGhvdmVyQ2FwdGlvblRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vU2hvdyB0aGUgJ1NlZSBNb3JlJyBsaW5rIGlmIG5lZWRlZFxuICAgICAgICAgIGlmIChjYXB0aW9uVGV4dC5sZW5ndGggPiB0ZXh0X2xpbWl0KSB7XG4gICAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X2V4cGFuZCcpLnNob3coKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9DbGljayBmdW5jdGlvblxuICAgICAgICAgICRpdGVtLmZpbmQoJy5zYnlfZXhwYW5kIGEnKS5vZmYoJ2NsaWNrJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHZhciAkZXhwYW5kID0galF1ZXJ5KHRoaXMpO1xuICAgICAgICAgICAgJGNhcHRpb24gPSB0eXBlb2YgJGNhcHRpb24gIT09ICd1bmRlZmluZWQnID8gJGNhcHRpb24gOiAkaXRlbS5maW5kKCcuc2J5X2luZm8gLnNieV9jYXB0aW9uJyk7XG4gICAgICAgICAgICBjYXB0aW9uVGV4dCA9IHR5cGVvZiBjYXB0aW9udGV4dCAhPT0gJ3VuZGVmaW5lZCcgPyBjYXB0aW9uVGV4dCA6ICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXRpdGxlJyk7XG4gICAgICAgICAgICBpZiAoJGl0ZW0uaGFzQ2xhc3MoJ3NieV9jYXB0aW9uX2Z1bGwnKSAmJiB0eXBlb2Ygc2hvcnRfdGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgJGNhcHRpb24uaHRtbChzaG9ydF90ZXh0KTtcbiAgICAgICAgICAgICAgJGl0ZW0ucmVtb3ZlQ2xhc3MoJ3NieV9jYXB0aW9uX2Z1bGwnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICRjYXB0aW9uLmh0bWwoc2J5TGlua2lmeShjYXB0aW9uVGV4dCkpO1xuICAgICAgICAgICAgICAkaXRlbS5hZGRDbGFzcygnc2J5X2NhcHRpb25fZnVsbCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmVlZC5hZnRlclJlc2l6ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRVcENUQSgkaXRlbSk7XG5cbiAgICAgICAgLy9QaG90byBsaW5rc1xuICAgICAgICAvL0lmIGxpZ2h0Ym94IGlzIGRpc2FibGVkXG4gICAgICAgIHZhciBkaXNhYmxlbGlnaHRib3ggPSB0eXBlb2YgZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmRpc2FibGVsaWdodGJveCAhPT0gJ3VuZGVmaW5lZCcgPyBmZWVkLnNldHRpbmdzLmdlbmVyYWwuZGlzYWJsZWxpZ2h0Ym94IDogZmFsc2UsXG4gICAgICAgICAgY2FwdGlvbmxpbmtzID0gdHlwZW9mIGZlZWQuc2V0dGluZ3MuZ2VuZXJhbC5jYXB0aW9ubGlua3MgIT09ICd1bmRlZmluZWQnID8gZmVlZC5zZXR0aW5ncy5nZW5lcmFsLmNhcHRpb25saW5rcyA6IGZhbHNlO1xuICAgICAgICBpZiggZGlzYWJsZWxpZ2h0Ym94IHx8IGNhcHRpb25saW5rcyApe1xuXG4gICAgICAgICAgaWYgKGNhcHRpb25saW5rcykge1xuICAgICAgICAgICAgZnVuY3Rpb24gc2J5VXJsRGV0ZWN0KHRleHQpIHtcbiAgICAgICAgICAgICAgdmFyIHVybFJlZ2V4ID0gL2h0dHBzPzpcXC9cXC8od3d3XFwuKT9bLWEtekEtWjAtOUA6JS5fXFwrfiM9XXsyLDI1Nn1cXC5bYS16XXsyLDZ9XFxiKFstYS16QS1aMC05QDolX1xcKy5+Iz8mLy89XSopL2c7XG4gICAgICAgICAgICAgIHJldHVybiB0ZXh0Lm1hdGNoKHVybFJlZ2V4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGNhcCA9ICcnO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiAkaXRlbS5maW5kKCdpbWcnKS5hdHRyKCdhbHQnKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgY2FwID0gJGl0ZW0uZmluZCgnaW1nJykuYXR0cignYWx0Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAkaXRlbS5maW5kKCd2aWRlbycpLmF0dHIoJ2FsdCcpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICBjYXAgPSAkaXRlbS5maW5kKCd2aWRlbycpLmF0dHIoJ2FsdCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgdXJsID0gc2J5VXJsRGV0ZWN0KGNhcCk7XG4gICAgICAgICAgICBpZih1cmwpIHtcbiAgICAgICAgICAgICAgJGl0ZW0uZmluZCgnYScpLmF0dHIoJ2hyZWYnLCB1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAkaXRlbS5maW5kKCcuc2J5X2xpbmsnKS5hZGRDbGFzcygnc2J5X2Rpc2FibGVfbGlnaHRib3gnKTtcbiAgICAgICAgICAvL0lmIGxpZ2h0Ym94IGlzIGVuYWJsZWQgYWRkIGxpZ2h0Ym94IGxpbmtzXG4gICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICB2YXIgJHNieV9waG90b193cmFwID0gJGl0ZW0uZmluZCgnLnNieV9waG90b193cmFwJyksXG4gICAgICAgICAgICAkc2J5X2xpbmsgPSAkc2J5X3Bob3RvX3dyYXAuZmluZCgnLnNieV9saW5rJyk7XG4gICAgICAgICAgZmVlZE9wdGlvbnMgPSB7XG4gICAgICAgICAgICBob3ZlcmVmZmVjdDogJ3RydWUnXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZihmZWVkT3B0aW9ucy5ob3ZlcmVmZmVjdCA9PSAnbm9uZScpe1xuICAgICAgICAgICAgLy9sYXVuY2ggbGlnaHRib3ggb24gY2xpY2tcbiAgICAgICAgICAgICRzYnlfbGluay5jc3MoJ2JhY2tncm91bmQnLCAnbm9uZScpLnNob3coKTtcbiAgICAgICAgICAgICRzYnlfbGluay5maW5kKCcqJykuaGlkZSgpLmVuZCgpLmZpbmQoJy5zYnlfbGlua19hcmVhJykuc2hvdygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkc2J5X3Bob3RvX3dyYXAub24oJ21vdXNlZW50ZXIgbW91c2VsZWF2ZScsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgc3dpdGNoKGUudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ21vdXNlZW50ZXInOlxuICAgICAgICAgICAgICAgICAgJGl0ZW0uYWRkQ2xhc3MoJ3NieV9hbmltYXRlJyk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdtb3VzZWxlYXZlJzpcbiAgICAgICAgICAgICAgICAgICRpdGVtLnJlbW92ZUNsYXNzKCdzYnlfYW5pbWF0ZScpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdmlkZW9JRCA9IHR5cGVvZiAkaXRlbS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgIT09ICd1bmRlZmluZWQnID8gJGl0ZW0uYXR0cignZGF0YS12aWRlby1pZCcpIDogJGl0ZW0uZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG4gICAgICAgIHRoaXMubW9zdFJlY2VudGx5TG9hZGVkUG9zdHMucHVzaCh2aWRlb0lEKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuYWZ0ZXJGZWVkU2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYXJvdXNlbEFyZ3MgIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICQodGhpcy5lbCkuZmluZCgnLnNieV9jYXJvdXNlbCcpLnNieU93bENhcm91c2VsKHRoaXMuY2Fyb3VzZWxBcmdzKTtcbiAgICAgICAgICBpZiAocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5nZW5lcmFsLmNhcm91c2VsWzVdKSA9PT0gMikge1xuICAgICAgICAgICAgJCh0aGlzLmVsKS5hZGRDbGFzcygnc2J5X2Nhcm91c2VsXzJfcm93Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuc2V0VXBDVEEgPSBmdW5jdGlvbigkaXRlbSx2aWRlb0lEKSB7XG4gICAgICAgIC8vd2luZG93LnNieS5jdGFzXG5cbiAgICAgICAgdmFyIHZpZGVvSUQgPSB0eXBlb2YgdmlkZW9JRCAhPT0gJ3VuZGVmaW5lZCcgPyB2aWRlb0lEIDogJGl0ZW0uZmluZCgnLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSxcbiAgICAgICAgICB0ZXh0ID0gdHlwZW9mICRpdGVtLmZpbmQoJy5zYnlfaXRlbV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXRpdGxlJykgIT09ICd1bmRlZmluZWQnID8gJGl0ZW0uZmluZCgnLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbCcpLmF0dHIoJ2RhdGEtdGl0bGUnKSA6ICcnLFxuICAgICAgICAgIGN0YUluQ2FwdGlvbiA9IHdpbmRvdy5zYnkuY3RhRGV0ZWN0KHRleHQpO1xuXG4gICAgICAgIGlmIChjdGFJbkNhcHRpb24pIHtcbiAgICAgICAgICB3aW5kb3cuc2J5LmN0YXNbdmlkZW9JRF0gPSBjdGFJbkNhcHRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2luZG93LnNieS5jdGFzW3ZpZGVvSURdID0gdGhpcy5nZXREZWZhdWx0Q1RBKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZ2V0RGVmYXVsdENUQSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS50eXBlICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS50eXBlID09PSAnbGluaycpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrOiAnbGluaycsXG4gICAgICAgICAgICAgIHVybDogdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS5kZWZhdWx0TGluayxcbiAgICAgICAgICAgICAgdGV4dDogdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS5kZWZhdWx0VGV4dCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2s6ICdyZWxhdGVkJyxcbiAgICAgICAgICAgICAgcmVsYXRlZDogdGhpcy5zZXR0aW5ncy5nZW5lcmFsLmN0YS5kZWZhdWx0UG9zdHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFmdGVyUmVzaXplID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuc2V0SW1hZ2VIZWlnaHQoKTtcbiAgICAgICAgdGhpcy5zZXRJbWFnZVJlc29sdXRpb24oKTtcbiAgICAgICAgdGhpcy5tYXliZVJhaXNlSW1hZ2VSZXNvbHV0aW9uKCk7XG4gICAgICAgIHRoaXMuc2V0SW1hZ2VTaXplQ2xhc3MoKTtcbiAgICAgICAgdGhpcy5zZXRBbGxDVEFEaW1lbnNpb25zKCk7XG4gICAgICAgIHRoaXMuc2l6ZVBsYXllcigpO1xuICAgICAgICB0aGlzLnNpemVJdGVtcygpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5zZXRBbGxDVEFEaW1lbnNpb25zID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICQuZWFjaCh0aGlzLkNUQSwgZnVuY3Rpb24oaW5kZXgsIENUQU9iaikge1xuICAgICAgICAgIGlmIChDVEFPYmouaXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgQ1RBT2JqLnNldENUQVN0eWxlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFmdGVyU2VuZENoZWNrV1BQb3N0c1RvU2VydmVyID0gZnVuY3Rpb24ocmVzcG9uc2Upe1xuICAgICAgICB2YXIgJHNlbGYgPSAkKHRoaXMuZWwpO1xuXG4gICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiByZXNwb25zZVsgJCh0aGlzKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2VbICQodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpIF07XG4gICAgICAgICAgICAvL3NieV92aWV3c19jb3VudFxuICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X3ZpZXdfY291bnQnKS50ZXh0KGRhdGEuc2J5X3ZpZXdfY291bnQpO1xuICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2NvbW1lbnRfY291bnQnKS50ZXh0KGRhdGEuc2J5X2NvbW1lbnRfY291bnQpO1xuICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2xpa2VfY291bnQnKS50ZXh0KGRhdGEuc2J5X2xpa2VfY291bnQpO1xuICAgICAgICAgICAgaWYgKGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmJyb2FkY2FzdF90eXBlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2xzX21lc3NhZ2UnKS50ZXh0KGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX3N0cmluZyk7XG4gICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9kYXRlJykuaHRtbChkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5saXZlX3N0cmVhbWluZ19kYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5zYnlfbGl2ZV9icm9hZGNhc3QubGl2ZV9zdHJlYW1pbmdfdGltZXN0YW1wICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2RhdGEtbGl2ZS1kYXRlJyxkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5saXZlX3N0cmVhbWluZ190aW1lc3RhbXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLnNieV9kZXNjcmlwdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgJCh0aGlzKS5maW5kKCcuc2J5X2l0ZW1fdmlkZW9fdGh1bWJuYWlsJykuYXR0cignZGF0YS10aXRsZScsZGF0YS5zYnlfZGVzY3JpcHRpb24gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICRzZWxmLmZpbmQoJy5zYnlfcGxheWVyX2l0ZW0nKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VbICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2VbICQodGhpcykuZmluZCgnLnNieV92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJykgXTtcbiAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV92aWV3X2NvdW50JykudGV4dChkYXRhLnNieV92aWV3X2NvdW50KTtcbiAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9jb21tZW50X2NvdW50JykudGV4dChkYXRhLnNieV9jb21tZW50X2NvdW50KTtcbiAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9saWtlX2NvdW50JykudGV4dChkYXRhLnNieV9saWtlX2NvdW50KTtcbiAgICAgICAgICAgIGlmIChkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5icm9hZGNhc3RfdHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICQodGhpcykuZmluZCgnLnNieV9sc19tZXNzYWdlJykudGV4dChkYXRhLnNieV9saXZlX2Jyb2FkY2FzdC5saXZlX3N0cmVhbWluZ19zdHJpbmcpO1xuICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy5zYnlfZGF0ZScpLmh0bWwoZGF0YS5zYnlfbGl2ZV9icm9hZGNhc3QubGl2ZV9zdHJlYW1pbmdfZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuc2J5X2xpdmVfYnJvYWRjYXN0LmxpdmVfc3RyZWFtaW5nX3RpbWVzdGFtcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdkYXRhLWxpdmUtZGF0ZScsZGF0YS5zYnlfbGl2ZV9icm9hZGNhc3QubGl2ZV9zdHJlYW1pbmdfdGltZXN0YW1wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHZhciBldnQgPSBqUXVlcnkuRXZlbnQoJ3NieWFmdGVyY2hlY2twb3N0cycpO1xuICAgICAgICBldnQuZmVlZCA9IHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdO1xuICAgICAgICBldnQucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgICAgalF1ZXJ5KHdpbmRvdykudHJpZ2dlcihldnQpO1xuXG4gICAgICB9O1xuXG4gICAgICB0aGlzLmFmdGVyU3RhdGVDaGFuZ2UgPSBmdW5jdGlvbihwbGF5ZXJJRCx2aWRlb0lELGRhdGEsJHBsYXllcikge1xuICAgICAgfTtcblxuICAgICAgdGhpcy5jaGFuZ2VQbGF5ZXJJbmZvID0gZnVuY3Rpb24oJG5ld0l0ZW0pIHtcbiAgICAgICAgdmFyICRzZWxmID0gJCh0aGlzLmVsKTtcbiAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmZpbmQoJy5zYnlfaW5mbycpLnJlcGxhY2VXaXRoKFxuICAgICAgICAgICRuZXdJdGVtLmZpbmQoJy5zYnlfaW5mbycpLmNsb25lKHRydWUsdHJ1ZSlcbiAgICAgICAgKTtcbiAgICAgICAgLy9zYnlfaW5mb1xuICAgICAgfTtcblxuICAgICAgdGhpcy5tYXliZUFkZENUQSA9IGZ1bmN0aW9uKHBsYXllcklELCRlbCkge1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBTYnlGZWVkUHJvLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2J5RmVlZC5wcm90b3R5cGUpO1xuXG4gICAgZnVuY3Rpb24gU2J5TGlnaHRib3hCdWlsZGVyKCkge31cblxuICAgIFNieUxpZ2h0Ym94QnVpbGRlci5wcm90b3R5cGUgPSB7XG4gICAgICBnZXREYXRhOiBmdW5jdGlvbihhKXtcbiAgICAgICAgdmFyIGNsb3Nlc3RGZWVkSW5kZXggPSBwYXJzZUludChhLmNsb3Nlc3QoJy5zYl95b3V0dWJlJykuYXR0cignZGF0YS1zYnktaW5kZXgnKS0xKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmZWVkSW5kZXggOiBjbG9zZXN0RmVlZEluZGV4LFxuICAgICAgICAgIGxpbms6IGEuYXR0cihcImhyZWZcIiksXG4gICAgICAgICAgdmlkZW9UaXRsZTogdHlwZW9mIGEuYXR0cihcImRhdGEtdmlkZW8tdGl0bGVcIikgIT09ICd1bmRlZmluZWQnID8gYS5hdHRyKFwiZGF0YS12aWRlby10aXRsZVwiKSA6ICdZb3VUdWJlIFZpZGVvJyxcbiAgICAgICAgICB2aWRlbzogYS5hdHRyKFwiZGF0YS12aWRlby1pZFwiKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdGVtcGxhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIFwiPGRpdiBpZD0nc2J5X2xpZ2h0Ym94T3ZlcmxheScgY2xhc3M9J3NieV9saWdodGJveE92ZXJsYXknPjwvZGl2PlwiK1xuICAgICAgICAgIFwiPGRpdiBpZD0nc2J5X2xpZ2h0Ym94JyBjbGFzcz0nc2J5X2xpZ2h0Ym94Jz5cIitcbiAgICAgICAgICBcIjxkaXYgY2xhc3M9J3NieV9sYi1vdXRlckNvbnRhaW5lcic+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItY29udGFpbmVyJz5cIitcbiAgICAgICAgICBcIjxpbWcgY2xhc3M9J3NieV9sYi1pbWFnZScgYWx0PSdMaWdodGJveCBpbWFnZSBwbGFjZWhvbGRlcicgc3JjPScnIC8+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItcGxheWVyIHNieV9sYi1wbGF5ZXItcGxhY2Vob2xkZXInIGlkPSdzYnlfbGItcGxheWVyJz48L2Rpdj5cIiArXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItbmF2Jz48YSBjbGFzcz0nc2J5X2xiLXByZXYnIGhyZWY9JyMnID48cCBjbGFzcz0nc2J5LXNjcmVlbnJlYWRlcic+UHJldmlvdXMgU2xpZGU8L3A+PHNwYW4+PC9zcGFuPjwvYT48YSBjbGFzcz0nc2J5X2xiLW5leHQnIGhyZWY9JyMnID48cCBjbGFzcz0nc2J5LXNjcmVlbnJlYWRlcic+TmV4dCBTbGlkZTwvcD48c3Bhbj48L3NwYW4+PC9hPjwvZGl2PlwiK1xuICAgICAgICAgIFwiPGRpdiBjbGFzcz0nc2J5X2xiLWxvYWRlcic+PGEgY2xhc3M9J3NieV9sYi1jYW5jZWwnPjwvYT48L2Rpdj5cIitcbiAgICAgICAgICBcIjwvZGl2PlwiK1xuICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItZGF0YUNvbnRhaW5lcic+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItZGF0YSc+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItZGV0YWlscyc+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItY2FwdGlvbic+PC9kaXY+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItaW5mbyc+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItbnVtYmVyJz48L2Rpdj5cIitcbiAgICAgICAgICBcIjwvZGl2PlwiK1xuICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdzYnlfbGItY2xvc2VDb250YWluZXInPjxhIGNsYXNzPSdzYnlfbGItY2xvc2UnPjwvYT48L2Rpdj5cIitcbiAgICAgICAgICBcIjwvZGl2PlwiK1xuICAgICAgICAgIFwiPC9kaXY+XCIrXG4gICAgICAgICAgXCI8L2Rpdj5cIjtcbiAgICAgIH0sXG4gICAgICBiZWZvcmVQbGF5ZXJTZXR1cDogZnVuY3Rpb24oJGxpZ2h0Ym94LGRhdGEsaW5kZXgsYWxidW0sZmVlZCl7XG5cbiAgICAgIH0sXG4gICAgICBhZnRlclBsYXllclNldHVwOiBmdW5jdGlvbiAoJGxpZ2h0Ym94LGRhdGEsaW5kZXgsYWxidW0pIHtcbiAgICAgIH0sXG4gICAgICBhZnRlclJlc2l6ZTogZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIHBsYXllckhlaWdodCA9ICQoJyNzYnlfbGlnaHRib3ggLnNieV9sYi1wbGF5ZXInKS5oZWlnaHQoKTtcblxuICAgICAgICBpZiAocGxheWVySGVpZ2h0ID4gMTAwKSB7XG4gICAgICAgICAgdmFyIGhlaWdodERpZiA9ICQoJyNzYnlfbGlnaHRib3ggLnNieV9sYi1vdXRlckNvbnRhaW5lcicpLmhlaWdodCgpIC0gcGxheWVySGVpZ2h0O1xuICAgICAgICAgIGlmIChoZWlnaHREaWYgPiAxMCkge1xuICAgICAgICAgICAgJCgnI3NieV9saWdodGJveCAuc2J5X2xiLXBsYXllcicpLmNzcygndG9wJyxoZWlnaHREaWYvMik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcGF1c2VQbGF5ZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIgPT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgJiYgdHlwZW9mIFlUID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIFlULmdldCgnc2J5X2xiLXBsYXllcicpICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICYmIHR5cGVvZiBZVC5nZXQoJ3NieV9sYi1wbGF5ZXInKS5wYXVzZVZpZGVvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgWVQuZ2V0KCdzYnlfbGItcGxheWVyJykucGF1c2VWaWRlbygpXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAmJiB0eXBlb2Ygd2luZG93LnNieUxpZ2h0Ym94UGxheWVyLnBhdXNlVmlkZW8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3aW5kb3cuc2J5TGlnaHRib3hQbGF5ZXIucGF1c2VWaWRlbygpO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgd2luZG93LnNieV9pbml0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB3aW5kb3cuc2J5ID0gbmV3IFNieSgpO1xuICAgICAgd2luZG93LnNieS5jcmVhdGVQYWdlKCB3aW5kb3cuc2J5LmNyZWF0ZUZlZWRzLCB7d2hlbkZlZWRzQ3JlYXRlZDogd2luZG93LnNieS5hZnRlckZlZWRzQ3JlYXRlZH0pO1xuICAgIH07XG5cbiAgICB3aW5kb3cuc2J5X2Nhcm91c2VsX2luaXQgPSBmdW5jdGlvbigpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdsb2cnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYnlHZXROZXdGZWVkKGZlZWQsaW5kZXgsZmVlZE9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBuZXcgU2J5RmVlZFBybyhmZWVkLGluZGV4LGZlZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYnlHZXRsaWdodGJveEJ1aWxkZXIoKSB7XG4gICAgICByZXR1cm4gbmV3IFNieUxpZ2h0Ym94QnVpbGRlcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNieUFqYXgoc3VibWl0RGF0YSxvblN1Y2Nlc3MpIHtcbiAgICAgICQuYWpheCh7XG4gICAgICAgIHVybDogc2J5T3B0aW9ucy5hZG1pbkFqYXhVcmwsXG4gICAgICAgIHR5cGU6ICdwb3N0JyxcbiAgICAgICAgZGF0YTogc3VibWl0RGF0YSxcbiAgICAgICAgc3VjY2Vzczogb25TdWNjZXNzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzYnlJc1RvdWNoKCkge1xuICAgICAgaWYgKFwib250b3VjaHN0YXJ0XCIgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNieUNtcGx6R2V0Q29va2llKGNuYW1lKSB7XG4gICAgICB2YXIgbmFtZSA9IGNuYW1lICsgXCI9XCI7IC8vQ3JlYXRlIHRoZSBjb29raWUgbmFtZSB2YXJpYWJsZSB3aXRoIGNvb2tpZSBuYW1lIGNvbmNhdGVuYXRlIHdpdGggPSBzaWduXG4gICAgICB2YXIgY0FyciA9IHdpbmRvdy5kb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKTsgLy9DcmVhdGUgY29va2llIGFycmF5IGJ5IHNwbGl0IHRoZSBjb29raWUgYnkgJzsnXG5cbiAgICAgIC8vTG9vcCB0aHJvdWdoIHRoZSBjb29raWVzIGFuZCByZXR1cm4gdGhlIGNvb2tpZSB2YWx1ZSBpZiBpdCBmaW5kIHRoZSBjb29raWUgbmFtZVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjQXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gY0FycltpXS50cmltKCk7XG4gICAgICAgIC8vSWYgdGhlIG5hbWUgaXMgdGhlIGNvb2tpZSBzdHJpbmcgYXQgcG9zaXRpb24gMCwgd2UgZm91bmQgdGhlIGNvb2tpZSBhbmQgcmV0dXJuIHRoZSBjb29raWUgdmFsdWVcbiAgICAgICAgaWYgKGMuaW5kZXhPZihuYW1lKSA9PSAwKVxuICAgICAgICAgIHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCwgYy5sZW5ndGgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cblxuICB9KShqUXVlcnkpO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93LnNieUVhZ2VyTG9hZGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB3aW5kb3cuc2J5RWFnZXJMb2FkaW5nID0gdHlwZW9mIHdpbmRvdy5zYnlPcHRpb25zICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5zYnlPcHRpb25zLmVhZ2VybG9hZCA6IGZhbHNlO1xuICAgIGlmIChqUXVlcnkoJy5lbGVtZW50b3Itd2lkZ2V0LXZpZGVvJykubGVuZ3RoKSB7XG4gICAgICB2YXIgc2V0dGluZ3MgPSB0eXBlb2YgalF1ZXJ5KCcuZWxlbWVudG9yLXdpZGdldC12aWRlbycpLmF0dHIoJ2RhdGEtc2V0dGluZ3MnKSAhPT0gJ3VuZGVmaW5lZCcgPyBKU09OLnBhcnNlKCBqUXVlcnkoJy5lbGVtZW50b3Itd2lkZ2V0LXZpZGVvJykuYXR0cignZGF0YS1zZXR0aW5ncycpKSA6IGZhbHNlO1xuICAgICAgaWYgKHNldHRpbmdzICYmIHR5cGVvZiBzZXR0aW5ncy55b3V0dWJlX3VybCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93LnNieUVhZ2VyTG9hZGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGpRdWVyeSgnZGl2W2RhdGEtdmMtdmlkZW8tYmddJykubGVuZ3RoKSB7XG4gICAgICB3aW5kb3cuc2J5RWFnZXJMb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZyA9IHR5cGVvZiB3aW5kb3cuc2J5T3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cuc2J5T3B0aW9ucy5zZW1pRWFnZXJsb2FkIDogZmFsc2U7XG4gICAgaWYgKGpRdWVyeSgnZGl2W2RhdGEtdmMtdmlkZW8tYmddJykubGVuZ3RoIHx8IHdpbmRvdy5zYnlFYWdlckxvYWRpbmcpIHtcbiAgICAgIHdpbmRvdy5zYnlTZW1pRWFnZXJMb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgalF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigkKSB7XG4gICAgaWYgKCF3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZykge1xuICAgICAgc2J5X2luaXQoKTtcbiAgICB9XG5cbiAgICAvLyBDb29raWUgTm90aWNlIGJ5IGRGYWN0b3J5XG4gICAgJCgnI2Nvb2tpZS1ub3RpY2UgYScpLm9uKCdjbGljaycsZnVuY3Rpb24oKSB7XG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSwxMDAwKTtcbiAgICB9KTtcblxuICAgIC8vIENvb2tpZSBOb3RpY2UgYnkgZEZhY3RvcnlcbiAgICAkKCcjY29va2llLWxhdy1pbmZvLWJhciBhJykub24oJ2NsaWNrJyxmdW5jdGlvbigpIHtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLmFmdGVyQ29uc2VudFRvZ2dsZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9LDEwMDApO1xuICAgIH0pO1xuXG4gICAgLy8gR0RQUiBDb29raWUgQ29uc2VudCBieSBXZWJUb2ZmZWVcbiAgICAkKCcuY2xpLXVzZXItcHJlZmVyZW5jZS1jaGVja2JveCcpLm9uKCdjbGljaycsZnVuY3Rpb24oKXtcbiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IGZhbHNlO1xuICAgICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0sMTAwMCk7XG4gICAgfSk7XG5cbiAgICAvLyBDb29raWVib3RcbiAgICAkKHdpbmRvdykub24oJ0Nvb2tpZWJvdE9uQWNjZXB0JywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uc2V0dGluZ3MuY29uc2VudEdpdmVuID0gdHJ1ZTtcbiAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIENvbXBsaWFueiBieSBSZWFsbHkgU2ltcGxlIFBsdWdpbnNcbiAgICAkKGRvY3VtZW50KS5vbignY21wbHpFbmFibGVTY3JpcHRzJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoIGV2ZW50LmRldGFpbCA9PT0gJ21hcmtldGluZycgKSB7XG4gICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IHRydWU7XG4gICAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJChkb2N1bWVudCkub24oJ2NtcGx6RmlyZUNhdGVnb3JpZXMnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmICggZXZlbnQuZGV0YWlsLmNhdGVnb3J5PT09J21hcmtldGluZycgKSB7XG4gICAgICAgICQuZWFjaCh3aW5kb3cuc2J5LmZlZWRzLGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzWyBpbmRleCBdLnNldHRpbmdzLmNvbnNlbnRHaXZlbiA9IHRydWU7XG4gICAgICAgICAgd2luZG93LnNieS5mZWVkc1sgaW5kZXggXS5hZnRlckNvbnNlbnRUb2dnbGVkKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gQm9ybGFicyBDb29raWUgYnkgQm9ybGFic1xuICAgICQoZG9jdW1lbnQpLm9uKCdib3JsYWJzLWNvb2tpZS1jb25zZW50LXNhdmVkJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAkLmVhY2god2luZG93LnNieS5mZWVkcyxmdW5jdGlvbihpbmRleCl7XG4gICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uc2V0dGluZ3MuY29uc2VudEdpdmVuID0gZmFsc2U7XG4gICAgICAgIHdpbmRvdy5zYnkuZmVlZHNbIGluZGV4IF0uYWZ0ZXJDb25zZW50VG9nZ2xlZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG59IC8vIGlmIHNieV9qc19leGlzdHNcblxuaWYgKHdpbmRvdy5zYnlTZW1pRWFnZXJMb2FkaW5nKSB7XG4gIHZhciBzYnlZU2NyaXB0SWQgPSBcInNieS15b3V0dWJlLWFwaVwiO1xuICB2YXIgc2J5WVNjcmlwdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNieVlTY3JpcHRJZCk7XG5cbiAgaWYgKHNieVlTY3JpcHQgPT09IG51bGwpIHtcbiAgICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICB2YXIgZmlyc3RTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKVswXTtcblxuICAgIHRhZy5zcmMgPSBcImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2lmcmFtZV9hcGlcIjtcbiAgICB0YWcuaWQgPSBzYnlZU2NyaXB0SWQ7XG4gICAgZmlyc3RTY3JpcHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGFnLCBmaXJzdFNjcmlwdCk7XG5cbiAgfVxufVxuXG53aW5kb3cub25Zb3VUdWJlSWZyYW1lQVBJUmVhZHkgPSBmdW5jdGlvbigpIHtcbiAgdmFyIG51bUZlZWRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnc2JfeW91dHViZScpLmxlbmd0aDtcbiAgaWYgKG51bUZlZWRzID4gMCkge1xuICAgIGlmICh3aW5kb3cuc2J5U2VtaUVhZ2VyTG9hZGluZykge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuc2J5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUZlZWRzOyBpKyspIHtcbiAgICAgICAgICB3aW5kb3cuc2J5LmZlZWRzW2ldLnBsYXllckFQSVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnNieUFQSVJlYWR5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHNieV9pbml0KCk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgaWYgKHdpbmRvdy5zYnlFYWdlckxvYWRpbmcpIHtcbiAgICAgICAgdmFyIGZsYWdMaWdodGJveCA9IGZhbHNlLFxuICAgICAgICAgIGF1dG9wbGF5ID0gZmFsc2U7XG5cbiAgICAgICAgalF1ZXJ5KCcuc2JfeW91dHViZScpLmVhY2goZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgICAgICB2YXIgJHNlbGYgPSBqUXVlcnkodGhpcyk7XG5cbiAgICAgICAgICBpZiAoJHNlbGYuaGFzQ2xhc3MoJ3NieV9sYXlvdXRfbGlzdCcpKSB7XG4gICAgICAgICAgICBqUXVlcnkodGhpcykuYWRkQ2xhc3MoJ3NieV9wbGF5ZXJfbG9hZGVkJyk7XG5cbiAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfaXRlbScpLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZpZGVvSUQgPSBqUXVlcnkodGhpcykuYXR0cignZGF0YS12aWRlby1pZCcpO1xuICAgICAgICAgICAgICAvL3RoaXMuY3JlYXRlUGxheWVyKCx2aWRlb0lELDApO1xuICAgICAgICAgICAgICBwbGF5ZXIgPSBuZXcgWVQuUGxheWVyKCdzYnlfcGxheWVyXycrdmlkZW9JRCwge1xuICAgICAgICAgICAgICAgIGhlaWdodDogJzEwMCcsXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMDAnLFxuICAgICAgICAgICAgICAgIHZpZGVvSWQ6IHZpZGVvSUQsXG4gICAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgICAgbW9kZXN0YnJhbmRpbmc6IDEsXG4gICAgICAgICAgICAgICAgICByZWw6IDAsXG4gICAgICAgICAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXlcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgJ29uU3RhdGVDaGFuZ2UnOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2aWRlb0lEID0gZGF0YS50YXJnZXQuZ2V0VmlkZW9EYXRhKClbJ3ZpZGVvX2lkJ107XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmRhdGEgIT09IDEpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbVZpZElEID0galF1ZXJ5KHRoaXMpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykubGVuZ3RoICYmIGpRdWVyeShkYXRhLnRhcmdldC5hKS5hdHRyKCdpZCcpICE9PSBqUXVlcnkodGhpcykuZmluZCgnaWZyYW1lJykuYXR0cignaWQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgWVQuZ2V0KCdzYnlfcGxheWVyXycraXRlbVZpZElEKS5wYXVzZVZpZGVvKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKCRzZWxmLmhhc0NsYXNzKCdzYnlfbGF5b3V0X2dhbGxlcnknKSkge1xuICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLmFkZENsYXNzKCdzYnlfcGxheWVyX2xvYWRlZCcpO1xuXG4gICAgICAgICAgICBwbGF5ZXIgPSBuZXcgWVQuUGxheWVyKCdzYnlfcGxheWVyJytpbmRleCwge1xuICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDAnLFxuICAgICAgICAgICAgICB3aWR0aDogJzEwMCcsXG4gICAgICAgICAgICAgIHZpZGVvSWQ6IGpRdWVyeSh0aGlzKS5maW5kKCcuc2J5X2l0ZW0nKS5maXJzdCgpLmF0dHIoJ2RhdGEtdmlkZW8taWQnKSxcbiAgICAgICAgICAgICAgcGxheWVyVmFyczoge1xuICAgICAgICAgICAgICAgIG1vZGVzdGJyYW5kaW5nOiAxLFxuICAgICAgICAgICAgICAgIHJlbDogMCxcbiAgICAgICAgICAgICAgICBhdXRvcGxheTogYXV0b3BsYXlcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgJ29uU3RhdGVDaGFuZ2UnOiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgdmlkZW9JRCA9IGRhdGEudGFyZ2V0LmdldFZpZGVvRGF0YSgpWyd2aWRlb19pZCddO1xuICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZGF0YSAhPT0gMSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtJykuZWFjaChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1WaWRJRCA9IGpRdWVyeSh0aGlzKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGpRdWVyeSh0aGlzKS5maW5kKCdpZnJhbWUnKS5sZW5ndGggJiYgalF1ZXJ5KGRhdGEudGFyZ2V0LmEpLmF0dHIoJ2lkJykgIT09IGpRdWVyeSh0aGlzKS5maW5kKCdpZnJhbWUnKS5hdHRyKCdpZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgWVQuZ2V0KCdzYnlfcGxheWVyXycraXRlbVZpZElEKS5wYXVzZVZpZGVvKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsYWdMaWdodGJveCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygd2luZG93LnNieSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1GZWVkczsgaSsrKSB7XG4gICAgICAgICAgd2luZG93LnNieS5mZWVkc1tpXS5wbGF5ZXJBUElSZWFkeSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5zYnlBUElSZWFkeSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgalF1ZXJ5KCcuc2JfeW91dHViZScpLmVhY2goZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgIHZhciAkc2VsZiA9IGpRdWVyeSh0aGlzKTtcbiAgICAgIGlmICgkc2VsZi5maW5kKCcuc2J5X2xpdmVfcGxheWVyJykubGVuZ3RoKSB7XG4gICAgICAgIHBsYXllciA9IG5ldyBZVC5QbGF5ZXIoJHNlbGYuZmluZCgnLnNieV9saXZlX3BsYXllcicpLmF0dHIoJ2lkJyksIHtcbiAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICdvblJlYWR5JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xpdmVfcGxheWVyJykuaGlkZSgpO1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgdmFyIHZpZGVvSUQgPSBZVC5nZXQoJHNlbGYuZmluZCgnLnNieV9saXZlX3BsYXllcicpLmF0dHIoJ2lkJykpLmdldFZpZGVvRGF0YSgpLnZpZGVvX2lkO1xuICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X3BsYXllcl92aWRlb190aHVtYm5haWwnKS5hdHRyKCdkYXRhLXZpZGVvLWlkJyx2aWRlb0lEKS5jc3MoJ3otaW5kZXgnLC0xKTtcbiAgICAgICAgICAgICAgdmFyIGl0ZW1PZmZzZXQgPSAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgc3VibWl0RGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgIGFjdGlvbjogJ3NieV9saXZlX3JldHJpZXZlJyxcbiAgICAgICAgICAgICAgICAgIHZpZGVvX2lkOiB2aWRlb0lELFxuICAgICAgICAgICAgICAgICAgZmVlZF9pZDogJHNlbGYuYXR0cignZGF0YS1mZWVkaWQnKSxcbiAgICAgICAgICAgICAgICAgIGF0dHM6ICRzZWxmLmF0dHIoJ2RhdGEtc2hvcnRjb2RlLWF0dHMnKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB2YXIgb25TdWNjZXNzID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS50cmltKCkuaW5kZXhPZigneycpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICB2YXIgZmVlZCA9IHdpbmRvdy5zYnkuZmVlZHNbaW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrV1BQb3N0cyA9IHR5cGVvZiByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgPyByZXNwb25zZS5mZWVkU3RhdHVzLmNoZWNrV1BQb3N0cyA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgaWYgKGZlZWQuc2V0dGluZ3MuZGVidWdFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChjaGVja1dQUG9zdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5zZXR0aW5ncy5jaGVja1dQUG9zdHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5zZXR0aW5ncy5jaGVja1dQUG9zdHMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGZlZWQuYXBwZW5kTmV3UG9zdHMocmVzcG9uc2UuaHRtbCk7XG4gICAgICAgICAgICAgICAgICBmZWVkLmFkZFJlc2l6ZWRJbWFnZXMocmVzcG9uc2UucmVzaXplZEltYWdlcyk7XG5cbiAgICAgICAgICAgICAgICAgIGZlZWQuYWZ0ZXJJbml0aWFsSW1hZ2VzTG9hZGVkKCk7XG5cbiAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZmVlZFN0YXR1cy5zaG91bGRQYWdpbmF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBmZWVkLm91dE9mUGFnZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2xvYWRfYnRuJykuaGlkZSgpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5vdXRPZlBhZ2VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGpRdWVyeSgnLnNieV9ub19qcycpLnJlbW92ZUNsYXNzKCdzYnlfbm9fanMnKTtcbiAgICAgICAgICAgICAgICAgICRzZWxmLmZpbmQoJy5zYnlfbGl2ZV9wbGF5ZXInKS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9nYWxsZXJ5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgZmVlZC5jcmVhdGVQbGF5ZXIoJ3NieV9wbGF5ZXInK2ZlZWQuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfaXRlbScpLmNzcygnb3BhY2l0eScsMSk7XG4gICAgICAgICAgICAgICAgICAkc2VsZi5maW5kKCcuc2J5X2l0ZW0nKS5jc3MoJ29wYWNpdHknLDEpO1xuICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9wbGF5ZXJfbG9hZGluZycpLnJlbW92ZUNsYXNzKCdzYnlfcGxheWVyX2xvYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgIGlmICgkc2VsZi5oYXNDbGFzcygnc2J5X2xheW91dF9saXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgJHNlbGYuZmluZCgnLnNieV9pdGVtX3ZpZGVvX3RodW1ibmFpbCcpLm9uKCdtb3VzZWVudGVyJyxmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkodGhpcykuY3NzKCd6LWluZGV4JywtMSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgalF1ZXJ5LmFqYXgoe1xuICAgICAgICAgICAgICAgIHVybDogc2J5T3B0aW9ucy5hZG1pbkFqYXhVcmwsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHN1Ym1pdERhdGEsXG4gICAgICAgICAgICAgICAgc3VjY2Vzczogb25TdWNjZXNzXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZmxhZ0xpZ2h0Ym94KSB7XG4gICAgICBpZiAoIWpRdWVyeSgnI3NieV9sYi1wbGF5ZXInKS5sZW5ndGgpIHtcbiAgICAgICAgalF1ZXJ5KCcuc2JfeW91dHViZScpLmZpcnN0KCkuYXBwZW5kKCc8ZGl2IGNsYXNzPVwic2J5X2xiLXBsYXllci1sb2FkZWQgc2J5X2xiLXBsYXllclwiIGlkPVwic2J5X2xiLXBsYXllclwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L2Rpdj4nKTtcbiAgICAgIH1cbiAgICAgIHBsYXllciA9IG5ldyBZVC5QbGF5ZXIoJ3NieV9sYi1wbGF5ZXInLCB7XG4gICAgICAgIGhlaWdodDogJzEwMCcsXG4gICAgICAgIHdpZHRoOiAnMTAwJyxcbiAgICAgICAgdmlkZW9JZDogalF1ZXJ5KHRoaXMpLmZpbmQoJy5zYnlfaXRlbScpLmZpcnN0KCkuYXR0cignZGF0YS12aWRlby1pZCcpLFxuICAgICAgICBwbGF5ZXJWYXJzOiB7XG4gICAgICAgICAgbW9kZXN0YnJhbmRpbmc6IDEsXG4gICAgICAgICAgcmVsOiAwLFxuICAgICAgICAgIGF1dG9wbGF5OiBhdXRvcGxheVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHdpbmRvdy5zYnlMaWdodGJveFBsYXllciA9IHBsYXllcjtcbiAgICB9XG5cbiAgfVxuXG4gIGlmICh0eXBlb2Ygd2luZG93LnNieSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgZXZ0ID0galF1ZXJ5LkV2ZW50KCdzYnlmZWVkYW5keXRyZWFkeScpO1xuICAgIGpRdWVyeSh3aW5kb3cpLnRyaWdnZXIoZXZ0KTtcbiAgfVxuXG59O1xuIl0sIm5hbWVzIjpbIiQiLCJhIiwiZSIsIm0iLCJsIiwiZyIsImIiLCJpIiwic2J5X2pzX2V4aXN0cyIsInNieV9zdXBwb3J0c192aWRlbyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNhblBsYXlUeXBlIiwid2luZG93Iiwic2J5TGlua2lmeSIsIlJlZ0V4cCIsImNhbGxiYWNrIiwicSIsInAiLCJwdW5jdF9yZWdleHAiLCJ1IiwieiIsInciLCJ2IiwiQSIsInMiLCJFIiwiQyIsInkiLCJEIiwiQiIsInIiLCJ4IiwidCIsInVuZGVmaW5lZCIsImV4ZWMiLCJsYXN0SW5kZXgiLCJsZW5ndGgiLCJ0ZXN0IiwiY2hhckF0Iiwic3Vic3RyIiwibWF0Y2giLCJyZXBsYWNlIiwiRiIsImluZGV4T2YiLCJwdXNoIiwic2xpY2UiLCJhcHBseSIsImMiLCJkIiwidGhpcyIsInNldHRpbmdzIiwib3B0aW9ucyIsImV4dGVuZCIsIkRlZmF1bHRzIiwiJGVsZW1lbnQiLCJfaGFuZGxlcnMiLCJfcGx1Z2lucyIsIl9zdXByZXNzIiwiX2N1cnJlbnQiLCJfc3BlZWQiLCJfY29vcmRpbmF0ZXMiLCJfYnJlYWtwb2ludCIsIl93aWR0aCIsIl9pdGVtcyIsIl9jbG9uZXMiLCJfbWVyZ2VycyIsIl93aWR0aHMiLCJfaW52YWxpZGF0ZWQiLCJfcGlwZSIsIl9kcmFnIiwidGltZSIsInRhcmdldCIsInBvaW50ZXIiLCJzdGFnZSIsInN0YXJ0IiwiY3VycmVudCIsImRpcmVjdGlvbiIsIl9zdGF0ZXMiLCJ0YWdzIiwiaW5pdGlhbGl6aW5nIiwiYW5pbWF0aW5nIiwiZHJhZ2dpbmciLCJlYWNoIiwicHJveHkiLCJQbHVnaW5zIiwidG9Mb3dlckNhc2UiLCJXb3JrZXJzIiwiZmlsdGVyIiwicnVuIiwic2V0dXAiLCJpbml0aWFsaXplIiwiaXRlbXMiLCJsb29wIiwiY2VudGVyIiwicmV3aW5kIiwibW91c2VEcmFnIiwidG91Y2hEcmFnIiwicHVsbERyYWciLCJmcmVlRHJhZyIsIm1hcmdpbiIsInN0YWdlUGFkZGluZyIsIm1lcmdlIiwibWVyZ2VGaXQiLCJhdXRvV2lkdGgiLCJzdGFydFBvc2l0aW9uIiwicnRsIiwic21hcnRTcGVlZCIsImZsdWlkU3BlZWQiLCJkcmFnRW5kU3BlZWQiLCJyZXNwb25zaXZlIiwicmVzcG9uc2l2ZVJlZnJlc2hSYXRlIiwicmVzcG9uc2l2ZUJhc2VFbGVtZW50IiwiZmFsbGJhY2tFYXNpbmciLCJpbmZvIiwibmVzdGVkSXRlbVNlbGVjdG9yIiwiaXRlbUVsZW1lbnQiLCJzdGFnZUVsZW1lbnQiLCJyZWZyZXNoQ2xhc3MiLCJsb2FkZWRDbGFzcyIsImxvYWRpbmdDbGFzcyIsInJ0bENsYXNzIiwicmVzcG9uc2l2ZUNsYXNzIiwiZHJhZ0NsYXNzIiwiaXRlbUNsYXNzIiwic3RhZ2VDbGFzcyIsInN0YWdlT3V0ZXJDbGFzcyIsImdyYWJDbGFzcyIsIldpZHRoIiwiRGVmYXVsdCIsIklubmVyIiwiT3V0ZXIiLCJUeXBlIiwiRXZlbnQiLCJTdGF0ZSIsIndpZHRoIiwicmVsYXRpdmUiLCIkc3RhZ2UiLCJjaGlsZHJlbiIsInJlbW92ZSIsImNzcyIsInRvRml4ZWQiLCJmIiwiTWF0aCIsIm1pbiIsIm1heCIsImNlaWwiLCJoIiwibm9ybWFsaXplIiwib3V0ZXJIVE1MIiwiYWRkQ2xhc3MiLCJhcHBlbmRUbyIsInByZXBlbmRUbyIsImFicyIsImVxIiwicmVtb3ZlQXR0ciIsImluZGV4IiwibWluaW11bSIsIm1heGltdW0iLCJyZXNldCIsImFuaW1hdGUiLCJjb29yZGluYXRlcyIsIm9wIiwicmVtb3ZlQ2xhc3MiLCJqb2luIiwicHJvdG90eXBlIiwiZW50ZXIiLCJ0cmlnZ2VyIiwidG9nZ2xlQ2xhc3MiLCJpcyIsImZpbmQiLCJwcmVsb2FkQXV0b1dpZHRoSW1hZ2VzIiwid3JhcCIsImFwcGVuZCIsInBhcmVudCIsIm5vdCIsInJlZnJlc2giLCJpbnZhbGlkYXRlIiwicmVnaXN0ZXJFdmVudEhhbmRsZXJzIiwibGVhdmUiLCJ2aWV3cG9ydCIsIk51bWJlciIsImF0dHIiLCJwcm9wZXJ0eSIsIm5hbWUiLCJ2YWx1ZSIsIm9wdGlvbnNMb2dpYyIsInByZXBhcmUiLCJjb250ZW50IiwiZGF0YSIsInVwZGF0ZSIsImFsbCIsImdyZXAiLCJvblRocm90dGxlZFJlc2l6ZSIsImNsZWFyVGltZW91dCIsInJlc2l6ZVRpbWVyIiwic2V0VGltZW91dCIsIm9uUmVzaXplIiwiaXNEZWZhdWx0UHJldmVudGVkIiwic3VwcG9ydCIsInRyYW5zaXRpb24iLCJvbiIsImVuZCIsIm9uVHJhbnNpdGlvbkVuZCIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnRW5kIiwid2hpY2giLCJ0cmFuc2Zvcm0iLCJzcGxpdCIsInBvc2l0aW9uIiwibGVmdCIsInRvcCIsInN0b3AiLCJ0eXBlIiwic3BlZWQiLCJEYXRlIiwiZ2V0VGltZSIsIm9uZSIsImRpZmZlcmVuY2UiLCJvbkRyYWdNb3ZlIiwicHJldmVudERlZmF1bHQiLCJvZmYiLCJjbG9zZXN0IiwidHJhbnNmb3JtM2QiLCJtYXAiLCJzdXBwcmVzcyIsInJlbGVhc2UiLCJpc051bWVyaWMiLCJtZXJnZXJzIiwiY2xvbmVzIiwiZHVyYXRpb24iLCJ0byIsIm5leHQiLCJwcmV2Iiwic3RvcFByb3BhZ2F0aW9uIiwic3JjRWxlbWVudCIsIm9yaWdpbmFsVGFyZ2V0IiwiZ2V0IiwiaW5uZXJXaWR0aCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwiY29uc29sZSIsIndhcm4iLCJlbXB0eSIsImpRdWVyeSIsIm5vZGVUeXBlIiwiYWRkQmFjayIsImFkZCIsImFmdGVyIiwiYmVmb3JlIiwic3BsaWNlIiwiSW1hZ2UiLCJzcmMiLCJkZXN0cm95IiwidW53cmFwIiwiY29udGVudHMiLCJyZW1vdmVEYXRhIiwiYWRkRXZlbnRMaXN0ZW5lciIsImF0dGFjaEV2ZW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRldGFjaEV2ZW50IiwiaXRlbSIsImNvdW50IiwiY2FtZWxDYXNlIiwiaiIsInJlbGF0ZWRUYXJnZXQiLCJvblRyaWdnZXIiLCJyZWdpc3RlciIsImNhbGwiLCJjb25jYXQiLCJldmVudCIsInNwZWNpYWwiLCJvd2wiLCJfZGVmYXVsdCIsIm5hbWVzcGFjZSIsImFyZ3VtZW50cyIsImluQXJyYXkiLCJvcmlnaW5hbEV2ZW50IiwidG91Y2hlcyIsImNoYW5nZWRUb3VjaGVzIiwicGFnZVgiLCJwYWdlWSIsImNsaWVudFgiLCJjbGllbnRZIiwiaXNOYU4iLCJwYXJzZUZsb2F0IiwiZm4iLCJzYnlPd2xDYXJvdXNlbCIsIkFycmF5IiwiQ29uc3RydWN0b3IiLCJaZXB0byIsIl9jb3JlIiwiX2ludGVydmFsIiwiX3Zpc2libGUiLCJhdXRvUmVmcmVzaCIsIndhdGNoIiwiYXV0b1JlZnJlc2hJbnRlcnZhbCIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJBdXRvUmVmcmVzaCIsIl9sb2FkZWQiLCJsYXp5TG9hZCIsImxvYWQiLCJkZXZpY2VQaXhlbFJhdGlvIiwiZWxlbWVudCIsInVybCIsIm9ubG9hZCIsIm9wYWNpdHkiLCJoYW5kbGVycyIsIkxhenkiLCJhdXRvSGVpZ2h0IiwiYXV0b0hlaWdodENsYXNzIiwidG9BcnJheSIsImhlaWdodCIsIkF1dG9IZWlnaHQiLCJfdmlkZW9zIiwiX3BsYXlpbmciLCJ2aWRlbyIsImlzSW5GdWxsU2NyZWVuIiwiZmV0Y2giLCJwbGF5IiwidmlkZW9IZWlnaHQiLCJ2aWRlb1dpZHRoIiwiRXJyb3IiLCJpZCIsInRodW1ibmFpbCIsImsiLCJhamF4IiwianNvbnAiLCJkYXRhVHlwZSIsInN1Y2Nlc3MiLCJ0aHVtYm5haWxfbGFyZ2UiLCJmcmFtZWdyYWJfdXJsIiwiaW5zZXJ0QWZ0ZXIiLCJmdWxsc2NyZWVuRWxlbWVudCIsIm1vekZ1bGxTY3JlZW5FbGVtZW50Iiwid2Via2l0RnVsbHNjcmVlbkVsZW1lbnQiLCJoYXNDbGFzcyIsIlZpZGVvIiwiY29yZSIsInN3YXBwaW5nIiwicHJldmlvdXMiLCJhbmltYXRlT3V0IiwiYW5pbWF0ZUluIiwic3dhcCIsImFuaW1hdGlvbiIsImNsZWFyIiwiQW5pbWF0ZSIsIl90aW1lb3V0IiwiX3BhdXNlZCIsImF1dG9wbGF5IiwiX3NldEF1dG9QbGF5SW50ZXJ2YWwiLCJhdXRvcGxheUhvdmVyUGF1c2UiLCJwYXVzZSIsImF1dG9wbGF5VGltZW91dCIsImF1dG9wbGF5U3BlZWQiLCJfZ2V0TmV4dFRpbWVvdXQiLCJoaWRkZW4iLCJfaW5pdGlhbGl6ZWQiLCJfcGFnZXMiLCJfY29udHJvbHMiLCJfdGVtcGxhdGVzIiwiX292ZXJyaWRlcyIsImRvdHNEYXRhIiwiZG90Q2xhc3MiLCJwb3AiLCJkcmF3IiwibmF2IiwibmF2VGV4dCIsIm5hdlNwZWVkIiwibmF2RWxlbWVudCIsIm5hdkNvbnRhaW5lciIsIm5hdkNvbnRhaW5lckNsYXNzIiwibmF2Q2xhc3MiLCJzbGlkZUJ5IiwiZG90c0NsYXNzIiwiZG90cyIsImRvdHNFYWNoIiwiZG90c1NwZWVkIiwiZG90c0NvbnRhaW5lciIsIiRyZWxhdGl2ZSIsIiRwcmV2aW91cyIsImh0bWwiLCIkbmV4dCIsInByb3AiLCIkYWJzb2x1dGUiLCJvdmVyaWRlcyIsInBhZ2UiLCJzaXplIiwiZ2V0UG9zaXRpb24iLCJOYXZpZ2F0aW9uIiwiX2hhc2hlcyIsImxvY2F0aW9uIiwiaGFzaCIsInN1YnN0cmluZyIsIlVSTGhhc2hMaXN0ZW5lciIsIkhhc2giLCJ0b1VwcGVyQ2FzZSIsInN0eWxlIiwiV2Via2l0VHJhbnNpdGlvbiIsIk1velRyYW5zaXRpb24iLCJPVHJhbnNpdGlvbiIsIldlYmtpdEFuaW1hdGlvbiIsIk1vekFuaW1hdGlvbiIsIk9BbmltYXRpb24iLCJTdHJpbmciLCJPd2wycm93Iiwic2NvcGUiLCJvd2wycm93IiwiYnVpbGQycm93Iiwib3dsMnJvd1RhcmdldCIsIm93bDJyb3dDb250YWluZXIiLCJvd2wycm93RGlyZWN0aW9uIiwidGhpc1Njb3BlIiwiY2Fyb3VzZWwiLCJjYXJvdXNlbEl0ZW1zIiwiYUV2ZW5FbGVtZW50cyIsImFPZGRFbGVtZW50cyIsImxlZnRUb3JpZ2h0IiwidXBUb2Rvd24iLCJvMndDb250YWluZXJDbGFzcyIsIm93bE1hcmdpbiIsImNhcm91c2VsSXRlbXNMZW5ndGgiLCJmaXJzQXJyIiwic2Vjb25kQXJyIiwicm93Q29udGFpbmVyIiwiZmlyc3RSb3dFbGVtZW50IiwibWFyZ2luQm90dG9tIiwiZXZlbkVsZW1lbnQiLCJTYnkiLCJmZWVkcyIsImN0YXMiLCJzYnlPcHRpb25zIiwiaXNUb3VjaCIsIlNieUZlZWQiLCJlbCIsInBsYWNlaG9sZGVyVVJMIiwic2J5IiwicGxhY2Vob2xkZXIiLCJuYXJyb3dQbGF5ZXIiLCJwbGFjZWhvbGRlck5hcnJvdyIsInBsYXllckFQSVJlYWR5IiwiY29uc2VudEdpdmVuIiwicGxheWVycyIsIm1pbkltYWdlV2lkdGgiLCJpbWFnZVJlc29sdXRpb24iLCJyZXNpemVkSW1hZ2VzIiwibmVlZHNSZXNpemluZyIsIm91dE9mUGFnZXMiLCJpc0luaXRpYWxpemVkIiwibW9zdFJlY2VudGx5TG9hZGVkUG9zdHMiLCJlbWJlZFVSTCIsImFsbG93Q29va2llcyIsIlNieUZlZWRQcm8iLCJDVEEiLCJpbml0TGF5b3V0IiwiaW5pdEdhbGxlcnlMYXlvdXQiLCJpbml0R3JpZCIsImluaXRDYXJvdXNlbHMiLCJldnQiLCJmZWVkIiwic2J5U2VtaUVhZ2VyTG9hZGluZyIsInBsYXllcklEIiwidmlkZW9JRCIsImZpcnN0Iiwic2J5TGlnaHRib3hQbGF5ZXIiLCJhcmdzIiwiaG9zdCIsInByb3RvY29sIiwidmlkZW9JZCIsInBsYXllclZhcnMiLCJtb2Rlc3RicmFuZGluZyIsInJlbCIsImV2ZW50cyIsImdldFZpZGVvRGF0YSIsImFmdGVyU3RhdGVDaGFuZ2UiLCJtYXliZUFkZENUQSIsIllUIiwiUGxheWVyIiwiJHNlbGYiLCJnZW5lcmFsIiwiY29scyIsImNvbHNtb2JpbGUiLCJhcnJvd3MiLCJwYWdpbmF0aW9uIiwicm93cyIsIml0ZW1zVGFibGV0U21hbGwiLCJpdGVtc01vYmlsZSIsImhhczJyb3dzIiwicGFyc2VJbnQiLCJjYXJvdXNlbEFyZ3MiLCJvbkNoYW5nZSIsImFmdGVyUmVzaXplIiwib25Jbml0aWFsaXplIiwiZmFkZUluIiwiJG5hdkVsZW1lbnRzV3JhcHBlciIsIiRkb3RzIiwiJHByZXYiLCIkbmF2IiwiJGRvdCIsIndpZHRoRG90cyIsImhpZGUiLCJzdHJpcEVtb2ppaHRtbCIsIiRlbCIsInJlcGxhY2VXaXRoIiwiYWZ0ZXJJdGVtUmV2ZWFsZWQiLCIkaXRlbSIsIiRjYXB0aW9uIiwiJGhvdmVyQ2FwdGlvbiIsInRleHRfbGltaXQiLCJkZXNjcmlwdGlvbmxlbmd0aCIsImNhcHRpb25UZXh0IiwiYnJDb3VudCIsImJyQWRqdXN0IiwiJHNpemluZ0NhcHRpb24iLCJjYXB0aW9uV2lkdGgiLCJmb250U2l6ZSIsImNoYXJhY3RlcnNQZXJMaW5lIiwibWF4Q2hhcnNQZXJMaW5lIiwiZmxvb3IiLCJwcm9qZWN0ZWRNYXhMaW5lcyIsInNwbGl0Q2FwdGlvbiIsImxpbmVzQ29uc3VtZWQiLCJhZGp1c3RlZFRleHRMaW1pdCIsImxpbmVzTGVmdCIsInRoaXNMaW5lc0NvbnN1bWVkIiwic2hvcnRfdGV4dCIsImxhc3RJbmRleE9mIiwiaG92ZXJDYXB0aW9uVGV4dCIsInNob3ciLCJjYXB0aW9udGV4dCIsInNldFVwQ1RBIiwiZGlzYWJsZWxpZ2h0Ym94IiwiY2FwdGlvbmxpbmtzIiwiY2FwIiwiJHNieV9waG90b193cmFwIiwiJHNieV9saW5rIiwiZmVlZE9wdGlvbnMiLCJob3ZlcmVmZmVjdCIsImFmdGVyRmVlZFNldCIsInRleHQiLCJjdGFJbkNhcHRpb24iLCJjdGFEZXRlY3QiLCJnZXREZWZhdWx0Q1RBIiwiY3RhIiwiZGVmYXVsdExpbmsiLCJkZWZhdWx0VGV4dCIsInJlbGF0ZWQiLCJkZWZhdWx0UG9zdHMiLCJzZXRJbWFnZUhlaWdodCIsInNldEltYWdlUmVzb2x1dGlvbiIsIm1heWJlUmFpc2VJbWFnZVJlc29sdXRpb24iLCJzZXRJbWFnZVNpemVDbGFzcyIsInNldEFsbENUQURpbWVuc2lvbnMiLCJzaXplUGxheWVyIiwic2l6ZUl0ZW1zIiwiQ1RBT2JqIiwic2V0Q1RBU3R5bGVzIiwiYWZ0ZXJTZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIiLCJyZXNwb25zZSIsInNieV92aWV3X2NvdW50Iiwic2J5X2NvbW1lbnRfY291bnQiLCJzYnlfbGlrZV9jb3VudCIsInNieV9saXZlX2Jyb2FkY2FzdCIsImJyb2FkY2FzdF90eXBlIiwibGl2ZV9zdHJlYW1pbmdfc3RyaW5nIiwibGl2ZV9zdHJlYW1pbmdfZGF0ZSIsImxpdmVfc3RyZWFtaW5nX3RpbWVzdGFtcCIsInNieV9kZXNjcmlwdGlvbiIsIiRwbGF5ZXIiLCJjaGFuZ2VQbGF5ZXJJbmZvIiwiJG5ld0l0ZW0iLCJjbG9uZSIsIlNieUxpZ2h0Ym94QnVpbGRlciIsInNieUFqYXgiLCJzdWJtaXREYXRhIiwib25TdWNjZXNzIiwiYWRtaW5BamF4VXJsIiwiY3JlYXRlUGFnZSIsImNyZWF0ZUZlZWRzIiwiY3JlYXRlRmVlZHNBcmdzIiwic2J5YWpheHVybCIsImhvc3RuYW1lIiwibWF5YmVBZGRZVEFQSSIsInlvdXR1YmVTY3JpcHRJZCIsImdldEVsZW1lbnRCeUlkIiwidGFnIiwiZmlyc3RTY3JpcHQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInBhcmVudE5vZGUiLCJpbnNlcnRCZWZvcmUiLCJjcmVhdGVMaWdodGJveCIsInNieV90aW1lciIsImxiQnVpbGRlciIsInNieV9sYl9kZWxheSIsInNieV9jYWxsYmFjayIsInNieV9tcyIsImZhZGVEdXJhdGlvbiIsImZpdEltYWdlc0luVmlld3BvcnQiLCJyZXNpemVEdXJhdGlvbiIsInBvc2l0aW9uRnJvbVRvcCIsInNob3dJbWFnZU51bWJlckxhYmVsIiwiYWx3YXlzU2hvd05hdk9uVG91Y2hEZXZpY2VzIiwid3JhcEFyb3VuZCIsImFsYnVtTGFiZWwiLCJhbGJ1bSIsImN1cnJlbnRJbWFnZUluZGV4IiwiaW5pdCIsImVuYWJsZSIsImJ1aWxkIiwiY3VycmVudFRhcmdldCIsInRlbXBsYXRlIiwiJGxpZ2h0Ym94IiwiJG92ZXJsYXkiLCIkb3V0ZXJDb250YWluZXIiLCIkY29udGFpbmVyIiwiY29udGFpbmVyVG9wUGFkZGluZyIsImNvbnRhaW5lclJpZ2h0UGFkZGluZyIsImNvbnRhaW5lckJvdHRvbVBhZGRpbmciLCJjb250YWluZXJMZWZ0UGFkZGluZyIsInBhdXNlUGxheWVyIiwiZmFkZU91dCIsImNoYW5nZUltYWdlIiwiZ2V0RGF0YSIsInNpemVPdmVybGF5IiwidmlzaWJpbGl0eSIsInNjcm9sbFRvcCIsInNjcm9sbExlZnQiLCJkaXNhYmxlS2V5Ym9hcmROYXYiLCJsaW5rIiwic2l6ZUNvbnRhaW5lciIsInNob3dJbWFnZSIsIm91dGVyV2lkdGgiLCJvdXRlckhlaWdodCIsInVwZGF0ZU5hdiIsInVwZGF0ZURldGFpbHMiLCJwcmVsb2FkTmVpZ2hib3JpbmdJbWFnZXMiLCJlbmFibGVLZXlib2FyZE5hdiIsImNyZWF0ZUV2ZW50IiwiZmVlZEluZGV4IiwiYmVmb3JlUGxheWVyU2V0dXAiLCJsb2FkVmlkZW9CeUlkIiwidmlkZW9UaXRsZSIsImZ1bGxJbWFnZSIsInByZXBlbmQiLCJhZnRlclBsYXllclNldHVwIiwia2V5Ym9hcmRBY3Rpb24iLCJrZXljb2RlIiwia2V5Q29kZSIsImtleSIsImZyb21DaGFyQ29kZSIsInRvZ2dsZSIsImlzQWRtaW4iLCJ3aGVuRmVlZHNDcmVhdGVkIiwiZmxhZ3MiLCJKU09OIiwicGFyc2UiLCJ0cmlnZ2VyZWRUZXN0IiwibG9nIiwibnVtIiwiaW1nUmVzIiwiZmVlZElEIiwicG9zdElEIiwic2hvcnRDb2RlQXR0cyIsInJlc2l6aW5nRW5hYmxlZCIsImltYWdlTG9hZEVuYWJsZWQiLCJkZWJ1Z0VuYWJsZWQiLCJmYXZvckxvY2FsIiwiYWpheFBvc3RMb2FkIiwiY2hlY2tXUFBvc3RzIiwic2luZ2xlQ2hlY2tQb3N0cyIsImdkcHIiLCJub0NETiIsImxpZ2h0Ym94RW5hYmxlZCIsImxvY2F0b3IiLCJhdXRvTWluUmVzIiwic2J5R2V0TmV3RmVlZCIsInNieUFQSVJlYWR5Iiwic2V0UmVzaXplZEltYWdlcyIsImFmdGVyRmVlZHNDcmVhdGVkIiwiJHRoaXNIZWFkZXIiLCJlbmNvZGVIVE1MIiwicmF3IiwidXJsRGV0ZWN0IiwiY3RhTWF0Y2hlcyIsInVybE1hdGNoZXMiLCJ0cmltIiwic2h1ZmZsZSIsImFycmF5IiwidGVtcG9yYXJ5VmFsdWUiLCJyYW5kb21JbmRleCIsImN1cnJlbnRJbmRleCIsInJhbmRvbSIsImNoZWNrQ29uc2VudCIsImdldE5ld1Bvc3RTZXQiLCJhZnRlckluaXRpYWxJbWFnZXNMb2FkZWQiLCJzYnlfZGVsYXkiLCJtYXliZVJhaXNlU2luZ2xlSW1hZ2VSZXNvbHV0aW9uIiwib25UaHVtYm5haWxDbGljayIsImNhbkNyZWF0ZVBsYXllciIsInBsYXllciIsInBsYXllckVhZ2VyTG9hZGVkIiwiY3JlYXRlUGxheWVyIiwiZ2V0VmlkZW9JRCIsImZhZGVUbyIsIml0ZW1WaWRJRCIsInBhdXNlVmlkZW8iLCJzYnlFYWdlckxvYWRpbmciLCJuZXdQbGF5ZXIiLCJsb2FkTW9yZUJ1dHRvbkluaXQiLCJoaWRlRXh0cmFJdGVtc0ZvcldpZHRoIiwiYmVmb3JlTmV3SW1hZ2VzUmV2ZWFsZWQiLCJyZXZlYWxOZXdJbWFnZXMiLCJhZnRlck5ld0ltYWdlc1JldmVhbGVkIiwiYXBwbHlGdWxsRmVhdHVyZXMiLCJyZW1vdmVGZWF0dXJlcyIsImFmdGVyTG9hZE1vcmVDbGlja2VkIiwiJGJ1dHRvbiIsImFmdGVyTmV3SW1hZ2VzTG9hZGVkIiwiJHBsYXllclRodW1ibmFpbCIsInBsYXllcldpZHRoIiwibmV3UGxheWVySGVpZ2h0IiwidGh1bWJXaWR0aCIsIm5ld1RodW1iSGVpZ2h0IiwiYXBwbHlJbWFnZUxpcXVpZCIsInNieUN1c3RvbUpTIiwib25UaHVtYm5haWxFbnRlciIsIm9uVGh1bWJuYWlsTGVhdmUiLCJsaWdodGJveFBsYWNlaG9sZGVyIiwibGlnaHRib3hQbGFjZWhvbGRlck5hcnJvdyIsIiRzYnlfaXRlbV90cmFuc2l0aW9uX2VsIiwibGlzdGVuRm9yVmlzaWJpbGl0eUNoYW5nZSIsInNlbmROZWVkc1Jlc2l6aW5nVG9TZXJ2ZXIiLCJzZW5kQ2hlY2tXUFBvc3RzVG9TZXJ2ZXIiLCJpdGVtT2Zmc2V0IiwiYWN0aW9uIiwibmVlZHNfcmVzaXppbmciLCJvZmZzZXQiLCJmZWVkX2lkIiwibG9jYXRpb25HdWVzcyIsInBvc3RfaWQiLCJhdHRzIiwicG9zdHMiLCJjdXJyZW50X3Jlc29sdXRpb24iLCJmZWVkU3RhdHVzIiwiYXBwZW5kTmV3UG9zdHMiLCJhZGRSZXNpemVkSW1hZ2VzIiwic2hvdWxkUGFnaW5hdGUiLCJuZXdQb3N0c0h0bWwiLCJsYXN0IiwicmVzaXplZEltYWdlc1RvQWRkIiwiaW1hZ2VJRCIsImZvcmNlQ2hhbmdlIiwiaW1nU3JjU2V0IiwiZ2V0SW1hZ2VVcmxzIiwiY3VycmVudFVybCIsImN1cnJlbnRSZXMiLCJuZXdSZXMiLCJnZXRCZXN0UmVzb2x1dGlvbkZvckF1dG8iLCJyZWFzb24iLCJuZXdVcmwiLCJzcmNTZXQiLCJqdXN0TmV3IiwiaXRlbXNTZWxlY3RvciIsImNvbFdpZHRoIiwiYXNwZWN0UmF0aW8iLCJiZXN0V2lkdGgiLCJiZXN0V2lkdGhSb3VuZGVkIiwiY3VzdG9tU2l6ZXMiLCJkb25lIiwibGF5b3V0IiwibnVtbW9iaWxlIiwiZmVlZFdpZHRoIiwicGhvdG9QYWRkaW5nIiwiZ2V0Q29sdW1uQ291bnQiLCJzZXRNaW5JbWFnZVdpZHRoIiwiZm91bmRTaXplcyIsInJlc2l6ZWRfdXJsIiwiYWRkVG9OZWVkc1Jlc2l6aW5nIiwiJHRhcmdlRWwiLCJnZXRBdmF0YXJVcmwiLCJ1c2VybmFtZSIsImZhdm9yVHlwZSIsImF2YWlsYWJsZUF2YXRhcnMiLCJhdmF0YXJzIiwiaGVhZCIsInNieV9pbWdMaXF1aWQiLCJWRVIiLCJiZ3NfQXZhaWxhYmxlIiwiYmdzX0NoZWNrUnVubmVkIiwiZGVmYXVsdHMiLCJmaWxsIiwidmVydGljYWxBbGlnbiIsImhvcml6b250YWxBbGlnbiIsInVzZUJhY2tncm91bmRTaXplIiwidXNlRGF0YUh0bWxBdHRyIiwiZGVsYXkiLCJmYWRlSW5UaW1lIiwicmVtb3ZlQm94QmFja2dyb3VuZCIsImhhcmRQaXhlbHMiLCJyZXNwb25zaXZlQ2hlY2tUaW1lIiwidGltZWNoZWNrdmlzaWJpbGl0eSIsIm9uU3RhcnQiLCJvbkZpbmlzaCIsIm9uSXRlbVN0YXJ0Iiwib25JdGVtRmluaXNoIiwib25JdGVtRXJyb3IiLCJnZXRDb21wdXRlZFN0eWxlIiwiYmFja2dyb3VuZFNpemUiLCJhY3R1YWxTaXplIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJzaXplT2xkIiwibiIsIm8iLCJCb29sZWFuIiwiaXNJRSIsImllRmFkZUluRGlzYWJsZWQiLCJlbmNvZGVVUkkiLCJkaXNwbGF5Iiwib3ZlcmZsb3ciLCJvbmVycm9yIiwiY29tcGxldGUiLCJpbmplY3RDc3MiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImFwcGVuZENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJzYnlBZGRJbWdMaXF1aWQiLCJydW5PbkxvYWQiLCJmcmVxdWVuY3kiLCJzYnlQcmV2aW91c1Zpc2liaWxpdHkiLCJjb250YWlucyIsInNieUNoZWNrVmlzaWJpbGl0eSIsInNieVZpc2liaWxpdHlDaGFuZ2VkIiwidmlzaWJsZSIsInJldHVybkNvbHMiLCJzYnlXaW5kb3dXaWR0aCIsIiRjbGlja2VkIiwiaXNQbGF5ZXIiLCJwbGF5VmlkZW9JblBsYXllciIsImFmdGVyVmlkZW9DaGFuZ2VkIiwiJHNieUl0ZW0iLCIkaG92ZXJlZCIsIkNMSV9Db29raWUiLCJyZWFkIiwiQ0xJX0FDQ0VQVF9DT09LSUVfTkFNRSIsImNuQXJncyIsInBhcnRzIiwiY29va2llIiwidmFsIiwic2hpZnQiLCJjb29raWVjb25zZW50IiwiY25hbWUiLCJjQXJyIiwic2J5Q21wbHpHZXRDb29raWUiLCJDb29raWVib3QiLCJjb25zZW50ZWQiLCJCb3JsYWJzQ29va2llIiwiY2hlY2tDb29raWVDb25zZW50IiwiYWZ0ZXJDb25zZW50VG9nZ2xlZCIsIiRmZWVkIiwiY3JlYXRlIiwicGxheWVySGVpZ2h0IiwiaGVpZ2h0RGlmIiwic2J5X2luaXQiLCJzYnlfY2Fyb3VzZWxfaW5pdCIsImVhZ2VybG9hZCIsInlvdXR1YmVfdXJsIiwic2VtaUVhZ2VybG9hZCIsInJlYWR5IiwiZGV0YWlsIiwiY2F0ZWdvcnkiLCJzYnlZU2NyaXB0SWQiLCJvbllvdVR1YmVJZnJhbWVBUElSZWFkeSIsIm51bUZlZWRzIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImZsYWdMaWdodGJveCIsInZpZGVvX2lkIl0sInNvdXJjZVJvb3QiOiIifQ==
youtube-feed.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Feeds for YouTube
4
  Plugin URI: http://smashballoon.com/youtube-feed
5
  Description: The Feeds for YouTube plugin allows you to display customizable YouTube feeds from any YouTube channel.
6
- Version: 2.0.2
7
  Author: Smash Balloon YouTube Team
8
  Author URI: http://smashballoon.com/
9
  Text Domain: feeds-for-youtube
@@ -56,7 +56,7 @@ if ( ! defined( 'SBY_PLUGIN_EDD_NAME' ) ) {
56
  define( 'SBY_PLUGIN_EDD_NAME', 'YouTube Feed Pro Personal' );
57
  }
58
  if ( ! defined( 'SBYVER' ) ) {
59
- define( 'SBYVER', '2.0.2' );
60
  }
61
  if ( ! defined( 'SBY_DBVERSION' ) ) {
62
  define( 'SBY_DBVERSION', '2.0' );
3
  Plugin Name: Feeds for YouTube
4
  Plugin URI: http://smashballoon.com/youtube-feed
5
  Description: The Feeds for YouTube plugin allows you to display customizable YouTube feeds from any YouTube channel.
6
+ Version: 2.0.3
7
  Author: Smash Balloon YouTube Team
8
  Author URI: http://smashballoon.com/
9
  Text Domain: feeds-for-youtube
56
  define( 'SBY_PLUGIN_EDD_NAME', 'YouTube Feed Pro Personal' );
57
  }
58
  if ( ! defined( 'SBYVER' ) ) {
59
+ define( 'SBYVER', '2.0.3' );
60
  }
61
  if ( ! defined( 'SBY_DBVERSION' ) ) {
62
  define( 'SBY_DBVERSION', '2.0' );