
META-INF.resources.butterfaces-dist-bundle-js.butterfaces-js-bundle.min.js Maven / Gradle / Ivy
The newest version!
!function(){var s=!1,u=/xyz/.test(function(){xyz})?/\b_super\b/:/.*/;this.Class=function(){},Class.extend=function(t){var o=this.prototype;s=!0;var e,n=new this;for(e in s=!1,t)n[e]="function"==typeof t[e]&&"function"==typeof o[e]&&u.test(t[e])?function(n,i){return function(){var t=this._super;this._super=o[n];var e=i.apply(this,arguments);return this._super=t,e}}(e,t[e]):t[e];function i(){!s&&this.init&&this.init.apply(this,arguments)}return((i.prototype=n).constructor=i).extend=arguments.callee,i}}(),function(n){n.fn._butterAutoCompleteInit=function(){return this.each(function(){new t(this)})};var t=Class.extend({init:function(t){this.SEARCH_REQUEST_DELAY=300;t=n(t);this.$input=t.prev(),this.$input.parent().css({position:"relative"}),this.autocompleteId=t.attr("id"),this.$selectedOption=null,this.ignoreKeyupEvent=!1,this.requestDelayTimerId=null,this.isRequestRunning=!1,this.areChangesMadeWhileRequestWasRunning=!1,this._keyCodes={tab:9,enter:13,shift:16,ctrl:17,alt:18,pause:19,caps_lock:20,escape:27,page_up:33,page_down:34,end:35,home:36,arrow_left:37,arrow_up:38,arrow_right:39,arrow_down:40,insert:45,delete_key:46,left_window_key:91,right_window_key:92,select_key:93,num_lock:144,scroll_lock:145};var e=this;e.$input.on("keydown",function(t){t.which===e._keyCodes.enter?e._handleEnterKeyDown(t):t.which===e._keyCodes.arrow_up||t.which===e._keyCodes.arrow_down?e._handleArrowUpAndDownKeyDown(t):t.which===e._keyCodes.escape&&e._handleEscapeKeyDown(t)}).on("keyup",function(t){for(keyName in e._keyCodes)if(e._keyCodes[keyName]===t.which)return void e._stopEvent(t);return e.ignoreKeyupEvent?(e._stopEvent(t),void(e.ignoreKeyupEvent=!1)):0===e.$input.val().length?(e._stopEvent(t),void e._hideAutocompleteResultList()):void e._trySendJsfAjaxRequest()}).on("blur",function(t){window.setTimeout(function(){e._hideAutocompleteResultList()},100)})},_handleEnterKeyDown:function(t){null!==this.$selectedOption&&(this._stopEvent(t),this._setSelectedValue())},_handleArrowUpAndDownKeyDown:function(t){this._stopEvent(t);var e=this._getAutocompleteElement();!e.is(":visible")&&0
").addClass("input-group-append").insertAfter(this.$input),t=n("").addClass("input-group-text").addClass("butter-component-number-buttons").appendTo(t),e=this;n("").addClass("glyphicon glyphicon-chevron-up").addClass("butter-component-number-button").addClass(function(){return e._options.disabled?"disabled":""}).click(function(){e._options.disabled||e.increaseCounter()}).appendTo(t),n("").addClass("glyphicon glyphicon-chevron-down").addClass("butter-component-number-button").addClass(function(){return e._options.disabled?"disabled":""}).click(function(){e._options.disabled||e.decreaseCounter()}).appendTo(t)},_initArrowKeys:function(){var e=this;this.$input.keydown(function(t){38===t.which?(t.stopPropagation(),t.preventDefault(),e.increaseCounter()):40===t.which&&(t.stopPropagation(),t.preventDefault(),e.decreaseCounter())})},_initMouseWheel:function(){var n=this;this.$input.on("mousewheel DOMMouseScroll",function(t){var e;n.$input.is(":focus")&&(e=t.originalEvent.wheelDelta||-t.originalEvent.deltaY||-t.originalEvent.detail,t.stopPropagation(),t.preventDefault(),e<0?n.decreaseCounter():n.increaseCounter())})},_initCounter:function(){this._counter=null,this._isValueSet=!1;var t=this.$input.val();this._isStringEmpty(t)||(t=parseInt(t),isNaN(t)||(this.setCounter(t),this._isValueSet=!0)),this._isValueSet||this.setCounter(0)},_setValueOnBlur:function(){var t=this.$input.val();this._isStringEmpty(t)?(this.$input.val(""),this.setCounter(0),this._isValueSet=!1):(t=parseInt(t),isNaN(t)?this._isValueSet?this.$input.val(this._counter):(this.$input.val(""),this.setCounter(0),this._isValueSet=!1):(this.setCounter(t),this.$input.val(this._counter),this._isValueSet=!0))},increaseCounter:function(){this._isValueSet?this.setCounter(this._counter+this._options.step):this._isValueSet=!0,this.$input.val(this._counter),this.$input.change()},decreaseCounter:function(){this._isValueSet?this.setCounter(this._counter-this._options.step):this._isValueSet=!0,this.$input.val(this._counter),this.$input.change()},_isStringEmpty:function(t){return 0===t.length||!t.trim()},setCounter:function(t){void 0!==this._options.min&&tthis._options.max?this._counter=this._options.max:this._counter=t}})}(jQuery),"undefined"==typeof butter&&(butter={}),butter.prettyprint={},butter.prettyprint.cleanup=function(){prettyPrint(),jQuery(".butter-component-prettyprint").each(function(){var t=jQuery(this).find("pre span").first(),e=jQuery(this).find("pre span").last();void 0!==t.html()&&(t.html().trim()||t.remove()),void 0!==e.html()&&(e.html().trim()||e.remove())})},function(e){e.fn.butterScrollToFirst=function(t){t=void 0===t?e(this).first().offset().top:e(this).first().offset().top+t;e("html, body").animate({scrollTop:t+"px"},"fast")},e.fn.butterScrollToLast=function(t){t=void 0===t?e(this).last().offset().top:e(this).last().offset().top+t;e("html, body").animate({scrollTop:t+"px"},"fast")}}(jQuery),function(l){l.fn.toggleColumnVisibilty=function(i,o){return this.each(function(){var n,t=l(this),e=JSON.stringify((n=[],t.find(".butter-table-toolbar-column-option input[type=checkbox]").each(function(t,e){e=l(e).parent(".butter-table-toolbar-column-option");n.push({identifier:e.attr("data-column-model-identifier"),visible:e.find("input[type=checkbox]").is(":checked")})}),n));ButterFaces.Ajax.sendRequest(t.attr("id"),"toggle",i,e,o)})},l.fn.orderColumn=function(s,u,r,a){return this.each(function(){var t,e,n=l(this);r?(e=a,t=(t=n).find('li[data-original-column="'+e+'"]'),e=t.prev(),t=t.detach(),e.before(t)):(t=a,o=(o=n).find('li[data-original-column="'+t+'"]'),t=o.next(),o=o.detach(),t.after(o));var i,o=JSON.stringify((i=[],n.find(".butter-table-toolbar-column-option input[type=checkbox]").each(function(t,e){e=l(e).parent(".butter-table-toolbar-column-option");i.push({identifier:e.attr("data-column-model-identifier"),position:t})}),i));ButterFaces.Ajax.sendRequest(n.attr("id"),"order",s,o,u)})}}(jQuery),function(i){i.fn._closePopoverOnBlur=function(t){return this.each(function(){var t=i(this);t.find(".butter-input-component").on("blur",function(){t.popover("hide")})})},i.fn._butterTooltip=function(t){var e=i(this),n=jQuery("[name="+t.contentByName+"]"),t={trigger:t.trigger,title:t.title,placement:t.placement,placementFunction:t.placementFunction,minVerticalOffset:t.minVerticalOffset,minHorizontalOffset:t.minHorizontalOffset,content:n.html().trim()};n.remove(),e.butterTooltip(t)},i.fn.butterTooltip=function(n){return this.each(function(){var t=i(this),e=n.trigger||"hover";n.minVerticalOffset&&t.attr("data-tooltip-min-vertical-offset",n.minVerticalOffset),n.minHorizontalOffset&&t.attr("data-tooltip-min-horizontal-offset",n.minHorizontalOffset),t.next().hasClass("popover")&&t.next().remove(),t.popover({trigger:e,placement:function(t,e){return n.placement||n.placementFunction||(new ButterFaces.Tooltip).calculateTooltipPosition(t,e)},title:n.title,html:!0,content:n.content,viewport:n.viewport})})}}(jQuery);
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJ1dHRlcmZhY2VzLTAxLWJhc2VDbGFzcy5qcyIsImJ1dHRlcmZhY2VzLWF1dG9jb21wbGV0ZS5qcXVlcnkuanMiLCJidXR0ZXJmYWNlcy1ib290c3RyYXAtZml4ZXMuanF1ZXJ5LmpzIiwiYnV0dGVyZmFjZXMtY2xpZW50U2lkZUZpbHRlci5qcXVlcnkuanMiLCJidXR0ZXJmYWNlcy1kb3RzLmpxdWVyeS5qcyIsImJ1dHRlcmZhY2VzLWhpZ2hsaWdodC5qcXVlcnkuanMiLCJidXR0ZXJmYWNlcy1tYXJrZG93bi5qcXVlcnkuanMiLCJidXR0ZXJmYWNlcy1tb2RhbC5qcyIsImJ1dHRlcmZhY2VzLW51bWJlclNwaW5uZXIuanF1ZXJ5LmpzIiwiYnV0dGVyZmFjZXMtcHJldHR5cHJpbnQuanMiLCJidXR0ZXJmYWNlcy1zY3JvbGwuanF1ZXJ5LmpzIiwiYnV0dGVyZmFjZXMtdGFibGUtdG9vbGJhci5qcXVlcnkuanMiLCJidXR0ZXJmYWNlcy10b29sdGlwLmpxdWVyeS5qcyJdLCJuYW1lcyI6WyJpbml0aWFsaXppbmciLCJmblRlc3QiLCJ0ZXN0IiwieHl6IiwidGhpcyIsIkNsYXNzIiwiZXh0ZW5kIiwicHJvcCIsIl9zdXBlciIsInByb3RvdHlwZSIsIm5hbWUiLCJmbiIsInRtcCIsInJldCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaW5pdCIsImNvbnN0cnVjdG9yIiwiY2FsbGVlIiwiJCIsIl9idXR0ZXJBdXRvQ29tcGxldGVJbml0IiwiZWFjaCIsIkF1dG9jb21wbGV0ZUxpc3QiLCJyb290RWxlbWVudCIsIlNFQVJDSF9SRVFVRVNUX0RFTEFZIiwiJGF1dG9jb21wbGV0ZVRtcCIsIiRpbnB1dCIsInByZXYiLCJwYXJlbnQiLCJjc3MiLCJwb3NpdGlvbiIsImF1dG9jb21wbGV0ZUlkIiwiYXR0ciIsIiRzZWxlY3RlZE9wdGlvbiIsImlnbm9yZUtleXVwRXZlbnQiLCJyZXF1ZXN0RGVsYXlUaW1lcklkIiwiaXNSZXF1ZXN0UnVubmluZyIsImFyZUNoYW5nZXNNYWRlV2hpbGVSZXF1ZXN0V2FzUnVubmluZyIsIl9rZXlDb2RlcyIsInRhYiIsImVudGVyIiwic2hpZnQiLCJjdHJsIiwiYWx0IiwicGF1c2UiLCJjYXBzX2xvY2siLCJlc2NhcGUiLCJwYWdlX3VwIiwicGFnZV9kb3duIiwiZW5kIiwiaG9tZSIsImFycm93X2xlZnQiLCJhcnJvd191cCIsImFycm93X3JpZ2h0IiwiYXJyb3dfZG93biIsImluc2VydCIsImRlbGV0ZV9rZXkiLCJsZWZ0X3dpbmRvd19rZXkiLCJyaWdodF93aW5kb3dfa2V5Iiwic2VsZWN0X2tleSIsIm51bV9sb2NrIiwic2Nyb2xsX2xvY2siLCJzZWxmIiwib24iLCJldmVudCIsIndoaWNoIiwiX2hhbmRsZUVudGVyS2V5RG93biIsIl9oYW5kbGVBcnJvd1VwQW5kRG93bktleURvd24iLCJfaGFuZGxlRXNjYXBlS2V5RG93biIsImtleU5hbWUiLCJfc3RvcEV2ZW50IiwidmFsIiwibGVuZ3RoIiwiX2hpZGVBdXRvY29tcGxldGVSZXN1bHRMaXN0IiwiX3RyeVNlbmRKc2ZBamF4UmVxdWVzdCIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJfc2V0U2VsZWN0ZWRWYWx1ZSIsIiRhdXRvY29tcGxldGUiLCJfZ2V0QXV0b2NvbXBsZXRlRWxlbWVudCIsImlzIiwiZmluZCIsIl9zZWxlY3RSZXN1bHRPcHRpb25FbGVtZW50IiwiX21vdmVSZXN1bHRPcHRpb25FbGVtZW50U2VsZWN0aW9uQ3Vyc29yIiwiY2xlYXJUaW1lb3V0IiwiX3NlbmRKc2ZBamF4UmVxdWVzdCIsImlkIiwicGFyYW1zIiwiX3Nob3dMb2FkaW5nU3Bpbm5lciIsImpzZiIsImFqYXgiLCJyZXF1ZXN0IiwiamF2YXguZmFjZXMuYmVoYXZpb3IuZXZlbnQiLCJyZW5kZXIiLCJidXR0ZXJmYWNlcy5wYXJhbXMiLCJvbmV2ZW50IiwiZGF0YSIsInN0YXR1cyIsIl9oYW5kbGVBdXRvY29tcGxldGVSZXN1bHRMaXN0VmlzaWJpbGl0eSIsIl9oaWRlTG9hZGluZ1NwaW5uZXIiLCJfaW5pdEFuZFNob3dBdXRvY29tcGxldGVSZXN1bHRMaXN0IiwiYXBwZW5kVG8iLCJyZW1vdmUiLCJzaG93Iiwid2lkdGgiLCJpbm5lcldpZHRoIiwiaGlnaGxpZ2h0IiwiX2NsZWFyUmVzdWx0T3B0aW9uU2VsZWN0aW9uIiwib3B0aW9uRWxlbWVudCIsIiRzZWxlY3RlZE9wdGlvbkVsZW1lbnQiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwiZGlyZWN0aW9uIiwiJHByZXYiLCIkbmV4dCIsIm5leHQiLCJyZXN1bHRMaXN0T3B0aW9ucyIsImNoYW5nZSIsImZvY3VzIiwia2V5dXAiLCJoaWRlIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwialF1ZXJ5IiwiZml4Qm9vdHN0cmFwRHJvcERvd24iLCJlIiwiaGFzQ2xhc3MiLCJ0aW1lciIsImRlbGF5IiwiY2FsbGJhY2siLCJtcyIsImJ1dHRlckl0ZW1GaWx0ZXJGaWVsZCIsImZpbHRlcmFibGVJdGVtQ29udGFpbmVyU2VsZWN0b3IiLCIkdGhpcyIsImNvbnRhaW5lclNlbGVjdG9yIiwiZmlsdGVyVmFsdWUiLCJpIiwiZWxlbSIsIiRmaWx0ZXJhYmxlSXRlbSIsInJlbW92ZUF0dHIiLCJleHByIiwiY29udGFpbnNJZ25vcmVDYXNlIiwiY3JlYXRlUHNldWRvIiwiYXJnIiwidGV4dCIsInRvVXBwZXJDYXNlIiwiaW5kZXhPZiIsImludGVydmFsVHJpZ2dlciIsInN0YXJ0RG90cyIsIiRvcmlnaW5hbEVsZW1lbnQiLCJodG1sIiwic2V0SW50ZXJ2YWwiLCJhcHBlbmQiLCJzdG9wRG90cyIsImNsZWFySW50ZXJ2YWwiLCJzZWFyY2hTdHJpbmciLCJoaWdobGlnaHRDbGFzc05hbWUiLCJyZWdleCIsIlJlZ0V4cCIsImVsZW1lbnRzIiwicHVzaCIsImNvbnRlbnRzIiwidW53cmFwIiwibm9ybWFsaXplIiwiZmlsdGVyIiwibm9kZVR5cGUiLCJub2RlVmFsdWUiLCJyZXBsYWNlV2l0aCIsInJlcGxhY2UiLCJtYXRjaCIsIm1hcmtkb3duUmVhZG9ubHkiLCIkcmVhZG9ubHlNYXJrZG93biIsIm1hcmtkb3duVGV4dCIsIm1hcmtkb3duVGV4dFRvSHRtbCIsInNob3dkb3duIiwiQ29udmVydGVyIiwibWFrZUh0bWwiLCJlbXB0eSIsImJ1dHRlciIsIm1vZGFsIiwib3BlbiIsIm1vZGFsUGFuZWxJZCIsImtleWJvYXJkIiwiYmFja2Ryb3AiLCJjbG9zZSIsImJ1dHRlck51bWJlclNwaW5uZXIiLCJvcHRpb25zIiwiTnVtYmVyU3Bpbm5lciIsImVsZW1lbnQiLCJfaW5pdElucHV0IiwiX2luaXRPcHRpb25zIiwiX2luaXRDb3VudGVyIiwiX2luaXRCdXR0b25zIiwiX2luaXRBcnJvd0tleXMiLCJfaW5pdE1vdXNlV2hlZWwiLCJibHVyIiwiX3NldFZhbHVlT25CbHVyIiwiX29wdGlvbnMiLCJzdGVwIiwiZGlzYWJsZWQiLCJ1bmRlZmluZWQiLCJtaW4iLCJtYXgiLCIkb3V0ZXJBZGRvbiIsImluc2VydEFmdGVyIiwiJGFkZG9uIiwiY2xpY2siLCJpbmNyZWFzZUNvdW50ZXIiLCJkZWNyZWFzZUNvdW50ZXIiLCJrZXlkb3duIiwiZGVsdGEiLCJvcmlnaW5hbEV2ZW50Iiwid2hlZWxEZWx0YSIsImRlbHRhWSIsImRldGFpbCIsIl9jb3VudGVyIiwiX2lzVmFsdWVTZXQiLCJ2YWx1ZSIsIl9pc1N0cmluZ0VtcHR5IiwicGFyc2VkSW50IiwicGFyc2VJbnQiLCJpc05hTiIsInNldENvdW50ZXIiLCJ0cmltIiwicHJldHR5cHJpbnQiLCJjbGVhbnVwIiwicHJldHR5UHJpbnQiLCIkZmlyc3RQcmVDaGlsZCIsImZpcnN0IiwiJGxhc3RQcmVDaGlsZCIsImxhc3QiLCJidXR0ZXJTY3JvbGxUb0ZpcnN0Iiwib2Zmc2V0IiwiX29mZnNldCIsInRvcCIsImFuaW1hdGUiLCJzY3JvbGxUb3AiLCJidXR0ZXJTY3JvbGxUb0xhc3QiLCJ0b2dnbGVDb2x1bW5WaXNpYmlsdHkiLCJyZW5kZXJJZHMiLCJkaXNhYmxlUmVuZGVySWRzIiwiY29sdW1ucyIsIiR0b29sYmFyIiwianNvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJpbmRleCIsImNoZWNrYm94IiwiJGNoZWNrYm94IiwiaWRlbnRpZmllciIsInZpc2libGUiLCJCdXR0ZXJGYWNlcyIsIkFqYXgiLCJzZW5kUmVxdWVzdCIsIm9yZGVyQ29sdW1uIiwidG9MZWZ0IiwiY29sdW1uTnVtYmVyIiwiJGNvbHVtbiIsIiRuZXh0Q29sdW1uIiwiJGRldGFjaHRlZENvbHVtbiIsImRldGFjaCIsImJlZm9yZSIsImFmdGVyIiwiX2Nsb3NlUG9wb3Zlck9uQmx1ciIsInJvb3QiLCJwb3BvdmVyIiwiX2J1dHRlclRvb2x0aXAiLCJjb250ZW50IiwiY29udGVudEJ5TmFtZSIsIm5ld0RhdGEiLCJ0cmlnZ2VyIiwidGl0bGUiLCJwbGFjZW1lbnQiLCJwbGFjZW1lbnRGdW5jdGlvbiIsIm1pblZlcnRpY2FsT2Zmc2V0IiwibWluSG9yaXpvbnRhbE9mZnNldCIsImJ1dHRlclRvb2x0aXAiLCJzb3VyY2UiLCJUb29sdGlwIiwiY2FsY3VsYXRlVG9vbHRpcFBvc2l0aW9uIiwidmlld3BvcnQiXSwibWFwcGluZ3MiOiJDQUtBLFdBQ0EsSUFBQUEsR0FBQSxFQUFBQyxFQUFBLE1BQUFDLEtBQUEsV0FBQUMsTUFBQSxhQUFBLEtBR0FDLEtBQUFDLE1BQUEsYUFHQUEsTUFBQUMsT0FBQSxTQUFBQyxHQUNBLElBQUFDLEVBQUFKLEtBQUFLLFVBSUFULEdBQUEsRUFDQSxJQUlBVSxFQUpBRCxFQUFBLElBQUFMLEtBSUEsSUFBQU0sS0FIQVYsR0FBQSxFQUdBTyxFQUVBRSxFQUFBQyxHQUFBLG1CQUFBSCxFQUFBRyxJQUNBLG1CQUFBRixFQUFBRSxJQUFBVCxFQUFBQyxLQUFBSyxFQUFBRyxJQUNBLFNBQUFBLEVBQUFDLEdBQ0EsT0FBQSxXQUNBLElBQUFDLEVBQUFSLEtBQUFJLE9BSUFKLEtBQUFJLE9BQUFBLEVBQUFFLEdBSUEsSUFBQUcsRUFBQUYsRUFBQUcsTUFBQVYsS0FBQVcsV0FHQSxPQUZBWCxL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YnVuZGxlLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIFNpbXBsZSBKYXZhU2NyaXB0IEluaGVyaXRhbmNlXG4gKiBCeSBKb2huIFJlc2lnIGh0dHA6Ly9lam9obi5vcmcvXG4gKiBNSVQgTGljZW5zZWQuXG4gKi9cbi8vIEluc3BpcmVkIGJ5IGJhc2UyIGFuZCBQcm90b3R5cGVcbihmdW5jdGlvbigpe1xuICAgIHZhciBpbml0aWFsaXppbmcgPSBmYWxzZSwgZm5UZXN0ID0gL3h5ei8udGVzdChmdW5jdGlvbigpe3h5ejt9KSA/IC9cXGJfc3VwZXJcXGIvIDogLy4qLztcblxuICAgIC8vIFRoZSBiYXNlIENsYXNzIGltcGxlbWVudGF0aW9uIChkb2VzIG5vdGhpbmcpXG4gICAgdGhpcy5DbGFzcyA9IGZ1bmN0aW9uKCl7fTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBDbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBjbGFzc1xuICAgIENsYXNzLmV4dGVuZCA9IGZ1bmN0aW9uKHByb3ApIHtcbiAgICAgICAgdmFyIF9zdXBlciA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgICAgIC8vIEluc3RhbnRpYXRlIGEgYmFzZSBjbGFzcyAoYnV0IG9ubHkgY3JlYXRlIHRoZSBpbnN0YW5jZSxcbiAgICAgICAgLy8gZG9uJ3QgcnVuIHRoZSBpbml0IGNvbnN0cnVjdG9yKVxuICAgICAgICBpbml0aWFsaXppbmcgPSB0cnVlO1xuICAgICAgICB2YXIgcHJvdG90eXBlID0gbmV3IHRoaXMoKTtcbiAgICAgICAgaW5pdGlhbGl6aW5nID0gZmFsc2U7XG5cbiAgICAgICAgLy8gQ29weSB0aGUgcHJvcGVydGllcyBvdmVyIG9udG8gdGhlIG5ldyBwcm90b3R5cGVcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBwcm9wKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSdyZSBvdmVyd3JpdGluZyBhbiBleGlzdGluZyBmdW5jdGlvblxuICAgICAgICAgICAgcHJvdG90eXBlW25hbWVdID0gdHlwZW9mIHByb3BbbmFtZV0gPT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICB0eXBlb2YgX3N1cGVyW25hbWVdID09IFwiZnVuY3Rpb25cIiAmJiBmblRlc3QudGVzdChwcm9wW25hbWVdKSA/XG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbihuYW1lLCBmbil7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9IHRoaXMuX3N1cGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGEgbmV3IC5fc3VwZXIoKSBtZXRob2QgdGhhdCBpcyB0aGUgc2FtZSBtZXRob2RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidXQgb24gdGhlIHN1cGVyLWNsYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3VwZXIgPSBfc3VwZXJbbmFtZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbWV0aG9kIG9ubHkgbmVlZCB0byBiZSBib3VuZCB0ZW1wb3JhcmlseSwgc28gd2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgaXQgd2hlbiB3ZSdyZSBkb25lIGV4ZWN1dGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N1cGVyID0gdG1wO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pKG5hbWUsIHByb3BbbmFtZV0pIDpcbiAgICAgICAgICAgICAgICAgICAgcHJvcFtuYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBkdW1teSBjbGFzcyBjb25zdHJ1Y3RvclxuICAgICAgICBmdW5jdGlvbiBDbGFzcygpIHtcbiAgICAgICAgICAgIC8vIEFsbCBjb25zdHJ1Y3Rpb24gaXMgYWN0dWFsbHkgZG9uZSBpbiB0aGUgaW5pdCBtZXRob2RcbiAgICAgICAgICAgIGlmICggIWluaXRpYWxpemluZyAmJiB0aGlzLmluaXQgKVxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUG9wdWxhdGUgb3VyIGNvbnN0cnVjdGVkIHByb3RvdHlwZSBvYmplY3RcbiAgICAgICAgQ2xhc3MucHJvdG90eXBlID0gcHJvdG90eXBlO1xuXG4gICAgICAgIC8vIEVuZm9yY2UgdGhlIGNvbnN0cnVjdG9yIHRvIGJlIHdoYXQgd2UgZXhwZWN0XG4gICAgICAgIENsYXNzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENsYXNzO1xuXG4gICAgICAgIC8vIEFuZCBtYWtlIHRoaXMgY2xhc3MgZXh0ZW5kYWJsZVxuICAgICAgICBDbGFzcy5leHRlbmQgPSBhcmd1bWVudHMuY2FsbGVlO1xuXG4gICAgICAgIHJldHVybiBDbGFzcztcbiAgICB9O1xufSkoKTsiLCIvKipcbiAqIGpRdWVyeS1QbHVnaW4gXCJidXR0ZXJIYW5kbGVBdXRvQ29tcGxldGVcIiBmb3IgdGV4dCBhdXRvY29tcGxldGUgdGFnLiBJbml0aWFsaXplcyBhdXRvIGNvbXBsZXRlIGZ1bmN0aW9uYWxpdHkgdG9cbiAqIHRleHQgY29tcG9uZW50LlxuICpcbiAqIEhvdyB0byB1c2U6XG4gKiBqUXVlcnkoXCIjc2VsZWN0b3JcIikuX2J1dHRlckF1dG9Db21wbGV0ZUluaXQoKTtcbiAqL1xuKGZ1bmN0aW9uICgkKSB7XG4gICAgLy8gZXh0ZW5kIGpRdWVyeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgJC5mbi5fYnV0dGVyQXV0b0NvbXBsZXRlSW5pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBuZXcgQXV0b2NvbXBsZXRlTGlzdCh0aGlzKTtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIGRlZmluZSBvYmplY3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICB2YXIgQXV0b2NvbXBsZXRlTGlzdCA9IENsYXNzLmV4dGVuZCh7XG4gICAgICAgIGluaXQ6IGZ1bmN0aW9uIChyb290RWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5TRUFSQ0hfUkVRVUVTVF9ERUxBWSA9IDMwMDsvLyBpbiBtc1xuXG4gICAgICAgICAgICB2YXIgJGF1dG9jb21wbGV0ZVRtcCA9ICQocm9vdEVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy4kaW5wdXQgPSAkYXV0b2NvbXBsZXRlVG1wLnByZXYoKTtcbiAgICAgICAgICAgIHRoaXMuJGlucHV0LnBhcmVudCgpLmNzcyh7cG9zaXRpb246IFwicmVsYXRpdmVcIn0pO1xuICAgICAgICAgICAgdGhpcy5hdXRvY29tcGxldGVJZCA9ICRhdXRvY29tcGxldGVUbXAuYXR0cihcImlkXCIpO1xuICAgICAgICAgICAgdGhpcy4kc2VsZWN0ZWRPcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5pZ25vcmVLZXl1cEV2ZW50ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnJlcXVlc3REZWxheVRpbWVySWQgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5pc1JlcXVlc3RSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmFyZUNoYW5nZXNNYWRlV2hpbGVSZXF1ZXN0V2FzUnVubmluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICB0aGlzLl9rZXlDb2RlcyA9IHtcbiAgICAgICAgICAgICAgICAvL2JhY2tzcGFjZTogOCxcbiAgICAgICAgICAgICAgICB0YWI6IDksXG4gICAgICAgICAgICAgICAgZW50ZXI6IDEzLFxuICAgICAgICAgICAgICAgIHNoaWZ0OiAxNixcbiAgICAgICAgICAgICAgICBjdHJsOiAxNyxcbiAgICAgICAgICAgICAgICBhbHQ6IDE4LFxuICAgICAgICAgICAgICAgIHBhdXNlOiAxOSxcbiAgICAgICAgICAgICAgICBjYXBzX2xvY2s6IDIwLFxuICAgICAgICAgICAgICAgIGVzY2FwZTogMjcsXG4gICAgICAgICAgICAgICAgcGFnZV91cDogMzMsXG4gICAgICAgICAgICAgICAgcGFnZV9kb3duOiAzNCxcbiAgICAgICAgICAgICAgICBlbmQ6IDM1LFxuICAgICAgICAgICAgICAgIGhvbWU6IDM2LFxuICAgICAgICAgICAgICAgIGFycm93X2xlZnQ6IDM3LFxuICAgICAgICAgICAgICAgIGFycm93X3VwOiAzOCxcbiAgICAgICAgICAgICAgICBhcnJvd19yaWdodDogMzksXG4gICAgICAgICAgICAgICAgYXJyb3dfZG93bjogNDAsXG4gICAgICAgICAgICAgICAgaW5zZXJ0OiA0NSxcbiAgICAgICAgICAgICAgICAvLyAnZGVsZXRlJyBpcyBhIHJlc2VydmVkIGtleSB3b3JkXG4gICAgICAgICAgICAgICAgZGVsZXRlX2tleTogNDYsXG4gICAgICAgICAgICAgICAgbGVmdF93aW5kb3dfa2V5OiA5MSxcbiAgICAgICAgICAgICAgICByaWdodF93aW5kb3dfa2V5OiA5MixcbiAgICAgICAgICAgICAgICBzZWxlY3Rfa2V5OiA5MyxcbiAgICAgICAgICAgICAgICBudW1fbG9jazogMTQ0LFxuICAgICAgICAgICAgICAgIHNjcm9sbF9sb2NrOiAxNDVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIHNlbGYuJGlucHV0XG4gICAgICAgICAgICAgICAgICAgIC5vbihcImtleWRvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IHNlbGYuX2tleUNvZGVzLmVudGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlRW50ZXJLZXlEb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQud2hpY2ggPT09IHNlbGYuX2tleUNvZGVzLmFycm93X3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGV2ZW50LndoaWNoID09PSBzZWxmLl9rZXlDb2Rlcy5hcnJvd19kb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlQXJyb3dVcEFuZERvd25LZXlEb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQud2hpY2ggPT09IHNlbGYuX2tleUNvZGVzLmVzY2FwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZUVzY2FwZUtleURvd24oZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAub24oXCJrZXl1cFwiLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvbid0IGhhbmRsZSBvdGhlciBrZXlzIHRoYW4gY2hhcmFjdGVyIGtleXNcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5TmFtZSBpbiBzZWxmLl9rZXlDb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLl9rZXlDb2Rlc1trZXlOYW1lXSA9PT0gZXZlbnQud2hpY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuaWdub3JlS2V5dXBFdmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0b3BFdmVudChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pZ25vcmVLZXl1cEV2ZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi4kaW5wdXQudmFsKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oaWRlQXV0b2NvbXBsZXRlUmVzdWx0TGlzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHJ5U2VuZEpzZkFqYXhSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5vbihcImJsdXJcIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGlkZUF1dG9jb21wbGV0ZVJlc3VsdExpc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9oYW5kbGVFbnRlcktleURvd246IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHNlbGVjdGVkT3B0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RvcEV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRTZWxlY3RlZFZhbHVlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2hhbmRsZUFycm93VXBBbmREb3duS2V5RG93bjogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9zdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgdmFyICRhdXRvY29tcGxldGUgPSB0aGlzLl9nZXRBdXRvY29tcGxldGVFbGVtZW50KCk7XG4gICAgICAgICAgICBpZiAoISRhdXRvY29tcGxldGUuaXMoXCI6dmlzaWJsZVwiKSAmJiB0aGlzLiRpbnB1dC52YWwoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJ5U2VuZEpzZkFqYXhSZXF1ZXN0KCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCRhdXRvY29tcGxldGUuaXMoXCI6dmlzaWJsZVwiKSAmJiAkYXV0b2NvbXBsZXRlLmZpbmQoXCJsaVwiKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHNlbGVjdGVkT3B0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdFJlc3VsdE9wdGlvbkVsZW1lbnQoJGF1dG9jb21wbGV0ZS5maW5kKFwibGlcIilbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vdmVSZXN1bHRPcHRpb25FbGVtZW50U2VsZWN0aW9uQ3Vyc29yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhdXRvY29tcGxldGUsIGV2ZW50LndoaWNoID09PSB0aGlzLl9rZXlDb2Rlcy5hcnJvd191cCA/IC0xIDogMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIF9oYW5kbGVFc2NhcGVLZXlEb3duOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N0b3BFdmVudChldmVudCk7XG4gICAgICAgICAgICB0aGlzLl9oaWRlQXV0b2NvbXBsZXRlUmVzdWx0TGlzdCgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIF90cnlTZW5kSnNmQWpheFJlcXVlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgICAgICAgICAgaWYgKHNlbGYuaXNSZXF1ZXN0UnVubmluZykge1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwicmVxdWVzdCBpcyBhY3RpdmUsIHNvIHJlbWVtYmVyIHRoYXQgY2hhbmdlcyBoYXMgYmVlbiBtYWRlIHdoaWxlIHJlcXVlc3Qgd2FzIHJ1bm5pbmdcIik7XG4gICAgICAgICAgICAgICAgc2VsZi5hcmVDaGFuZ2VzTWFkZVdoaWxlUmVxdWVzdFdhc1J1bm5pbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2VsZi5yZXF1ZXN0RGVsYXlUaW1lcklkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChzZWxmLnJlcXVlc3REZWxheVRpbWVySWQpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNlbGYucmVxdWVzdERlbGF5VGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlcXVlc3REZWxheVRpbWVySWQgPSBudWxsO1xuICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRKc2ZBamF4UmVxdWVzdCgpO1xuICAgICAgICAgICAgfSwgc2VsZi5TRUFSQ0hfUkVRVUVTVF9ERUxBWSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX3NlbmRKc2ZBamF4UmVxdWVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgICAgICBpZiAoc2VsZi5pc1JlcXVlc3RSdW5uaW5nKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZXF1ZXN0IGlzIHJ1bm5pbmcsIGFib3J0XCIpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGYuaXNSZXF1ZXN0UnVubmluZyA9IHRydWU7XG5cbiAgICAgICAgICAgIHNlbGYuYXJlQ2hhbmdlc01hZGVXaGlsZVJlcXVlc3RXYXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzZWxmLl9zaG93TG9hZGluZ1NwaW5uZXIoKTtcblxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJzdGFydGluZyByZXF1ZXN0XCIpO1xuXG4gICAgICAgICAgICB2YXIgaWQgPSBzZWxmLiRpbnB1dC5wYXJlbnQoKS5wYXJlbnQoKS5hdHRyKCdpZCcpO1xuICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHNlbGYuJGlucHV0LnZhbCgpO1xuXG4gICAgICAgICAgICBqc2YuYWpheC5yZXF1ZXN0KGlkLCBcImF1dG9jb21wbGV0ZVwiLCB7XG4gICAgICAgICAgICAgICAgXCJqYXZheC5mYWNlcy5iZWhhdmlvci5ldmVudFwiOiBcImF1dG9jb21wbGV0ZVwiLFxuICAgICAgICAgICAgICAgIHJlbmRlcjogc2VsZi5hdXRvY29tcGxldGVJZCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICBcImJ1dHRlcmZhY2VzLnBhcmFtc1wiOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgb25ldmVudDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZXF1ZXN0IGZpbmlzaGVkXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IHNob3cgcmVzdWx0IGlmIGlucHV0IGZpZWxkIHN0aWxsIGhhcyBmb2N1c1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuJGlucHV0LmlzKFwiOmZvY3VzXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlQXV0b2NvbXBsZXRlUmVzdWx0TGlzdFZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hpZGVMb2FkaW5nU3Bpbm5lcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pc1JlcXVlc3RSdW5uaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLmFyZUNoYW5nZXNNYWRlV2hpbGVSZXF1ZXN0V2FzUnVubmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiY2hhbmdlcyBtYWRlIHdoaWxlIHJlcXVlc3Qgd2FzIHJ1bm5pbmcsIHN0YXJ0IG5ldyByZXF1ZXN0IGF1dG9tYXRpY2FsbHlcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VuZEpzZkFqYXhSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBfaGFuZGxlQXV0b2NvbXBsZXRlUmVzdWx0TGlzdFZpc2liaWxpdHk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIHZhciAkYXV0b2NvbXBsZXRlID0gc2VsZi5fZ2V0QXV0b2NvbXBsZXRlRWxlbWVudCgpO1xuXG4gICAgICAgICAgICBpZiAoJGF1dG9jb21wbGV0ZS5maW5kKFwibGlcIikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX2luaXRBbmRTaG93QXV0b2NvbXBsZXRlUmVzdWx0TGlzdCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9oaWRlQXV0b2NvbXBsZXRlUmVzdWx0TGlzdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIF9zaG93TG9hZGluZ1NwaW5uZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICQoJzxkaXYgY2xhc3M9XCJidXR0ZXItZHJvcGRvd25saXN0LXNwaW5uZXItY29udGFpbmVyXCI+PGRpdiBjbGFzcz1cImJ1dHRlci1kcm9wZG93bmxpc3Qtc3Bpbm5lclwiPjwvZGl2PjwvZGl2PicpXG4gICAgICAgICAgICAgICAgICAgIC5hcHBlbmRUbyh0aGlzLiRpbnB1dC5wYXJlbnQoKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2hpZGVMb2FkaW5nU3Bpbm5lcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy4kaW5wdXQucGFyZW50KCkuZmluZChcIi5idXR0ZXItZHJvcGRvd25saXN0LXNwaW5uZXJcIikucmVtb3ZlKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2luaXRBbmRTaG93QXV0b2NvbXBsZXRlUmVzdWx0TGlzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgdmFyICRhdXRvY29tcGxldGUgPSBzZWxmLl9nZXRBdXRvY29tcGxldGVFbGVtZW50KCk7XG4gICAgICAgICAgICAkYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgIC5zaG93KClcbiAgICAgICAgICAgICAgICAgICAgLmNzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogc2VsZi4kaW5wdXQuaW5uZXJXaWR0aCgpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5oaWdobGlnaHQoc2VsZi4kaW5wdXQudmFsKCkpO1xuXG4gICAgICAgICAgICAkYXV0b2NvbXBsZXRlLmZpbmQoXCJ1bFwiKVxuICAgICAgICAgICAgICAgICAgICAub24oXCJtb3VzZWxlYXZlXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NsZWFyUmVzdWx0T3B0aW9uU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAkYXV0b2NvbXBsZXRlLmZpbmQoXCJsaVwiKVxuICAgICAgICAgICAgICAgICAgICAub24oXCJtb3VzZWRvd25cIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2V0U2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAub24oXCJtb3VzZWVudGVyXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlbGVjdFJlc3VsdE9wdGlvbkVsZW1lbnQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9zZWxlY3RSZXN1bHRPcHRpb25FbGVtZW50OiBmdW5jdGlvbiAob3B0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fY2xlYXJSZXN1bHRPcHRpb25TZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHZhciAkc2VsZWN0ZWRPcHRpb25FbGVtZW50ID0gJChvcHRpb25FbGVtZW50KTtcbiAgICAgICAgICAgICRzZWxlY3RlZE9wdGlvbkVsZW1lbnQuYWRkQ2xhc3MoXCJidXR0ZXItZHJvcGRvd25saXN0LXJlc3VsdEl0ZW0tc2VsZWN0ZWRcIik7XG4gICAgICAgICAgICB0aGlzLiRzZWxlY3RlZE9wdGlvbiA9ICRzZWxlY3RlZE9wdGlvbkVsZW1lbnQ7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2NsZWFyUmVzdWx0T3B0aW9uU2VsZWN0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLiRzZWxlY3RlZE9wdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9nZXRBdXRvY29tcGxldGVFbGVtZW50KClcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXCIuYnV0dGVyLWRyb3Bkb3dubGlzdC1yZXN1bHRJdGVtLXNlbGVjdGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcyhcImJ1dHRlci1kcm9wZG93bmxpc3QtcmVzdWx0SXRlbS1zZWxlY3RlZFwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfbW92ZVJlc3VsdE9wdGlvbkVsZW1lbnRTZWxlY3Rpb25DdXJzb3I6IGZ1bmN0aW9uICgkYXV0b2NvbXBsZXRlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPiAwKSB7XG4gICAgICAgICAgICAgICAgdmFyICRuZXh0ID0gdGhpcy4kc2VsZWN0ZWRPcHRpb24ubmV4dCgpO1xuICAgICAgICAgICAgICAgIGlmICgkbmV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdFJlc3VsdE9wdGlvbkVsZW1lbnQoJG5leHRbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlcmUgaXMgbm8gbmV4dFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RSZXN1bHRPcHRpb25FbGVtZW50KCRhdXRvY29tcGxldGUuZmluZChcImxpXCIpWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciAkcHJldiA9IHRoaXMuJHNlbGVjdGVkT3B0aW9uLnByZXYoKTtcbiAgICAgICAgICAgICAgICBpZiAoJHByZXYubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RSZXN1bHRPcHRpb25FbGVtZW50KCRwcmV2WzBdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZXJlIGlzIG5vIHByZXZpb3VzXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRMaXN0T3B0aW9ucyA9ICRhdXRvY29tcGxldGUuZmluZChcImxpXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RSZXN1bHRPcHRpb25FbGVtZW50KHJlc3VsdExpc3RPcHRpb25zW3Jlc3VsdExpc3RPcHRpb25zLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgX3NldFNlbGVjdGVkVmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRzZWxlY3RlZE9wdGlvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWdub3JlS2V5dXBFdmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy4kaW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIC52YWwodGhpcy4kc2VsZWN0ZWRPcHRpb24uYXR0cihcImRhdGEtc2VsZWN0LXZhbHVlXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmNoYW5nZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9jdXMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmtleXVwKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faGlkZUF1dG9jb21wbGV0ZVJlc3VsdExpc3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfaGlkZUF1dG9jb21wbGV0ZVJlc3VsdExpc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlcXVlc3REZWxheVRpbWVySWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMucmVxdWVzdERlbGF5VGltZXJJZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuJHNlbGVjdGVkT3B0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2dldEF1dG9jb21wbGV0ZUVsZW1lbnQoKS5oaWRlKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2dldEF1dG9jb21wbGV0ZUVsZW1lbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXV0b2NvbXBsZXRlSWQpKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfc3RvcEV2ZW50OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG59KGpRdWVyeSkpOyIsIi8qKlxuICogalF1ZXJ5LVBsdWdpbiB0byBoYW5kbGUgYm9vdHN0cmFwIGZpeGVzLlxuICogV29ya3Mgd2l0aCBhdCBsZWFzdCBqUXVlcnkgMS4zLjIuXG4gKlxuICogSG93IHRvIHVzZTpcbiAqIGpRdWVyeShcIiNzb21lVHJlZVNlbGVjdG9yXCIpLmZpeEJvb3RzdHJhcERyb3BEb3duKCk7XG4gKi9cbihmdW5jdGlvbiAoJCkge1xuICAgICQuZm4uZml4Qm9vdHN0cmFwRHJvcERvd24gPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAkKCcuZHJvcGRvd24tbWVudScpLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBpZigkKHRoaXMpLmhhc0NsYXNzKCdkcm9wZG93bi1tZW51LWZvcm0nKSkge1xuICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgIH07XG59KGpRdWVyeSkpOyIsIi8qKlxuICogYnV0dGVySXRlbUZpbHRlckZpZWxkIGlzIGEgalF1ZXJ5IHBsdWdpbiB0aGF0IGZpbHRlcnMgaHRtbCBlbGVtZW50IHdpdGggdGhlIGNzcyBjbGFzcyA8Y29kZT5maWx0ZXJhYmxlLWl0ZW08L2NvZGU+LlxuICogSXQgaXMgYXBwbGllZCB0byB0aGUgc2VhcmNoIGZpZWxkLjxici8+XG4gKiBJZiBubyBmaWx0ZXIgdGV4dCBpcyBlbnRlcmVkLCB0aGVuIGFsbCBmaWx0ZXJhYmxlLWl0ZW1zIGFyZSBkaXNwbGF5ZWQuIEVsc2UgdGhlIHNlYXJjaCBmaWVsZCB2YWx1ZSBpcyBtYXRjaGVkIGFnYWluc3QgPGI+YWxsPC9iPiB0ZXh0IGNvbnRhaW5lZCBieSBhIGZpbHRlcmFibGUtaXRlbS5cbiAqXG4gKiBIb3cgdG8gdXNlOlxuICogalF1ZXJ5KFwiI3NvbWVJbnB1dFNlbGVjdG9yXCIpLmJ1dHRlckl0ZW1GaWx0ZXJGaWVsZCgpO1xuICpcbiAqIEF1dGhvcjogWWFubiBNYXNzYXJkXG4gKi9cbihmdW5jdGlvbiAoJCkge1xuICAgIHZhciBkZWxheSA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0aW1lciA9IDA7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGJhY2ssIG1zKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCBtcyk7XG4gICAgICAgIH07XG4gICAgfSkoKTtcblxuICAgIC8vIGV4dGVuZCBqUXVlcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAkLmZuLmJ1dHRlckl0ZW1GaWx0ZXJGaWVsZCA9IGZ1bmN0aW9uIChmaWx0ZXJhYmxlSXRlbUNvbnRhaW5lclNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcbiAgICAgICAgICAgICR0aGlzLmtleXVwKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkZWxheShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJWYWx1ZSA9ICR0aGlzLnZhbCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbmQgY29udGFpbmVyIGFnYWluIGV2ZXJ5IHRpbWUsIGJlY2F1c2UgaXQgY291bGQgaGF2ZSBiZWVuIHJlcmVuZGVyZWQuXG4gICAgICAgICAgICAgICAgICAgIHZhciAkZmlsdGVyYWJsZUl0ZW1Db250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJhYmxlSXRlbUNvbnRhaW5lclNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZmlsdGVyYWJsZUl0ZW1Db250YWluZXIgPSAkKGZpbHRlcmFibGVJdGVtQ29udGFpbmVyU2VsZWN0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lclNlbGVjdG9yID0gJHRoaXMuYXR0cignZGF0YS1maWx0ZXJhYmxlLWl0ZW0tY29udGFpbmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZmlsdGVyYWJsZUl0ZW1Db250YWluZXIgPSAkKGNvbnRhaW5lclNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJhYmxlSXRlbXMgPSAkZmlsdGVyYWJsZUl0ZW1Db250YWluZXIuZmluZCgnLmZpbHRlcmFibGUtaXRlbScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmFibGVJdGVtcy5lYWNoKGZ1bmN0aW9uIChpLCBlbGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGZpbHRlcmFibGVJdGVtID0gJChlbGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZmlsdGVyYWJsZUl0ZW0uaXMoJzpjb250YWluc0lnbm9yZUNhc2UoJyArIGZpbHRlclZhbHVlICsgJyknKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWx0ZXJhYmxlSXRlbS5yZW1vdmVBdHRyKFwiaGlkZGVuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWx0ZXJhYmxlSXRlbS5oaWdobGlnaHQoZmlsdGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsdGVyYWJsZUl0ZW0uYXR0cihcImhpZGRlblwiLCBcImhpZGRlblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG59KGpRdWVyeSkpO1xuXG4oZnVuY3Rpb24gKCQpIHtcbiAgICAkLmV4cHJbXCI6XCJdLmNvbnRhaW5zSWdub3JlQ2FzZSA9ICQuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgIHJldHVybiAhYXJnIHx8ICQoZWxlbSkudGV4dCgpLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihhcmcudG9VcHBlckNhc2UoKSkgPj0gMDtcbiAgICAgICAgfTtcbiAgICB9KTtcbn0oalF1ZXJ5KSk7IiwiLyoqXG4gKiBqUXVlcnktUGx1Z2luIFwiQW5pbWF0ZSBkb3RzXCIgZm9yIHRyZWUgYW5pbWF0aW9uLiBBbmltYXRlcyBhIHdhaXRpbmcgZG90IGxpbmUgKDQgZG90cykgaW4gYW4gaW50ZXJ2YWwgb2YgMjAwIG1pbGxpc1xuICogYXMgaHRtbCBzdHJpbmcgaW4gZ2l2ZW4gY29tcG9uZW50LiBOb3RlOiBleGlzdGluZyBodG1sIGNvZGUgd2lsbCBiZSBjbGVhcmVkLlxuICogV29ya3Mgd2l0aCBhdCBsZWFzdCBqUXVlcnkgMS4zLjIuXG4gKlxuICogSG93IHRvIHVzZTpcbiAqIGpRdWVyeShcIiNzZWxlY3RvclwiKS5zdGFydERvdHMoKTtcbiAqIGpRdWVyeShcIiNzZWxlY3RvclwiKS5zdG9wRG90cygpO1xuICovXG4oZnVuY3Rpb24gKCQpIHtcbiAgICAvLyBleHRlbmQgalF1ZXJ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICB2YXIgaW50ZXJ2YWxUcmlnZ2VyID0gbnVsbDtcblxuICAgICQuZm4uc3RhcnREb3RzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciAkb3JpZ2luYWxFbGVtZW50ID0gJCh0aGlzKTtcblxuICAgICAgICAgICAgJG9yaWdpbmFsRWxlbWVudC5odG1sKCcnKTtcblxuICAgICAgICAgICAgaW50ZXJ2YWxUcmlnZ2VyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICRvcmlnaW5hbEVsZW1lbnQuYXBwZW5kKCcuJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoJG9yaWdpbmFsRWxlbWVudC5odG1sKCkubGVuZ3RoID4gNSkge1xuICAgICAgICAgICAgICAgICAgICAkb3JpZ2luYWxFbGVtZW50Lmh0bWwoJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAkLmZuLnN0b3BEb3RzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciAkb3JpZ2luYWxFbGVtZW50ID0gJCh0aGlzKTtcblxuICAgICAgICAgICAgJG9yaWdpbmFsRWxlbWVudC5odG1sKCcnKTtcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsVHJpZ2dlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbn0oalF1ZXJ5KSk7IiwiKGZ1bmN0aW9uICgkKSB7XG4gICAgJC5mbi5oaWdobGlnaHQgPSBmdW5jdGlvbiAoc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgIHZhciBoaWdobGlnaHRDbGFzc05hbWUgPSBcInNlYXJjaC1oaWdobGlnaHRlZFwiO1xuICAgICAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKHNlYXJjaFN0cmluZywgXCJnaVwiKTtcblxuICAgICAgICB2YXIgZWxlbWVudHMgPSB0aGlzLmZpbmQoJyonKTtcbiAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2godGhpcyk7XG4gICAgICAgICAgICAkKHRoaXMpLmZpbmQoJy4nICsgaGlnaGxpZ2h0Q2xhc3NOYW1lKS5jb250ZW50cygpLnVud3JhcCgpO1xuICAgICAgICAgICAgdGhpcy5ub3JtYWxpemUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHNlYXJjaFN0cmluZyAmJiBzZWFyY2hTdHJpbmcgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgJHRoaXMuY29udGVudHMoKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVUeXBlID09PSAzICYmIHJlZ2V4LnRlc3QodGhpcy5ub2RlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZVdpdGgoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLm5vZGVWYWx1ZSB8fCBcIlwiKS5yZXBsYWNlKHJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCI8c3BhbiBjbGFzcz1cXFwiXCIgKyBoaWdobGlnaHRDbGFzc05hbWUgKyBcIlxcXCI+XCIgKyBtYXRjaCArIFwiPC9zcGFuPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xufShqUXVlcnkpKTsiLCIoZnVuY3Rpb24gKCQpIHtcbiAgICAvLyBleHRlbmQgalF1ZXJ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgJC5mbi5tYXJrZG93blJlYWRvbmx5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcm9vdCA9ICQodGhpcyk7XG5cbiAgICAgICAgdmFyICRyZWFkb25seU1hcmtkb3duID0gcm9vdC5maW5kKCcuYnV0dGVyLWNvbXBvbmVudC12YWx1ZS1yZWFkb25seS13cmFwcGVyJyk7XG4gICAgICAgIHZhciBtYXJrZG93blRleHQgPSAkcmVhZG9ubHlNYXJrZG93bi5odG1sKClcbiAgICAgICAgICAgIC5yZXBsYWNlKCcmYW1wOycsICcmJylcbiAgICAgICAgICAgIC5yZXBsYWNlKCcmbHQ7JywgJzwnKVxuICAgICAgICAgICAgLnJlcGxhY2UoJyZndDsnLCAnPicpO1xuICAgICAgICB2YXIgbWFya2Rvd25UZXh0VG9IdG1sID0gbmV3IHNob3dkb3duLkNvbnZlcnRlcigpLm1ha2VIdG1sKG1hcmtkb3duVGV4dCk7XG5cbiAgICAgICAgJHJlYWRvbmx5TWFya2Rvd24uZW1wdHkoKTtcbiAgICAgICAgJHJlYWRvbmx5TWFya2Rvd24uYXBwZW5kKG1hcmtkb3duVGV4dFRvSHRtbCk7XG4gICAgfTtcbn0oalF1ZXJ5KSk7IiwiaWYgKHR5cGVvZiBidXR0ZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgYnV0dGVyID0ge307XG59XG5idXR0ZXIubW9kYWwgPSB7fTtcblxuYnV0dGVyLm1vZGFsLm9wZW4gPSBmdW5jdGlvbiAoLyogc3RyaW5nICovIG1vZGFsUGFuZWxJZCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdPcGVuaW5nIG1vZGFsIHBhbmVsIHdpdGggZGF0YS1tb2RhbC1pZCAnICsgbW9kYWxQYW5lbElkKTtcbiAgICAkKCcuYnV0dGVyLW1vZGFsW2RhdGEtbW9kYWwtaWQ9JyArIG1vZGFsUGFuZWxJZCArICddJykubW9kYWwoe3Nob3c6IHRydWUsIGtleWJvYXJkOiBmYWxzZSwgYmFja2Ryb3A6ICdzdGF0aWMnfSlcbn07XG5cbmJ1dHRlci5tb2RhbC5jbG9zZSA9IGZ1bmN0aW9uICgvKiBzdHJpbmcgKi8gbW9kYWxQYW5lbElkKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ0Nsb3NpbmcgbW9kYWwgcGFuZWwgd2l0aCBkYXRhLW1vZGFsLWlkICcgKyBtb2RhbFBhbmVsSWQpO1xuICAgICQoJy5idXR0ZXItbW9kYWxbZGF0YS1tb2RhbC1pZD0nICsgbW9kYWxQYW5lbElkICsgJ10nKS5tb2RhbCgnaGlkZScpO1xufTsiLCIvKipcbiAqIGpRdWVyeS1QbHVnaW4gXCJOdW1iZXIgU3Bpbm5lclwiIGZvciBpbnB1dCBmaWVsZHMuXG4gKiBXb3JrcyB3aXRoIGF0IGxlYXN0IGpRdWVyeSAxLjMuMi5cbiAqXG4gKiBIb3cgdG8gdXNlOlxuICogalF1ZXJ5KFwic29tZUJ1dHRlckNvbXBvbmVudFNlbGVjdG9yXCIpLmJ1dHRlck51bWJlclNwaW5uZXIoKTtcbiAqL1xuKGZ1bmN0aW9uICgkKSB7XG4gICAgLy8gZXh0ZW5kIGpRdWVyeSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICQuZm4uYnV0dGVyTnVtYmVyU3Bpbm5lciA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbmV3IE51bWJlclNwaW5uZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBkZWZpbmUgY2xhc3NlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHZhciBOdW1iZXJTcGlubmVyID0gQ2xhc3MuZXh0ZW5kKHtcbiAgICAgICAgaW5pdDogZnVuY3Rpb24gKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuJGlucHV0ID0gJChlbGVtZW50KS5maW5kKFwiaW5wdXRcIik7XG4gICAgICAgICAgICB0aGlzLl9pbml0SW5wdXQoKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy5faW5pdENvdW50ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuX2luaXRCdXR0b25zKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0QXJyb3dLZXlzKCk7XG4gICAgICAgICAgICB0aGlzLl9pbml0TW91c2VXaGVlbCgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9pbml0SW5wdXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuJGlucHV0XG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKFwiYnV0dGVyLWNvbXBvbmVudC1udW1iZXItaW5wdXRcIilcbiAgICAgICAgICAgICAgICAuYmx1cihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX3NldFZhbHVlT25CbHVyKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucGFyZW50KCkuYWRkQ2xhc3MoXCJpbnB1dC1ncm91cFwiKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfaW5pdE9wdGlvbnM6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgc3RlcDogMSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gJC5leHRlbmQoe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcblxuICAgICAgICAgICAgLy8gZW5zdXJlIHRoYXQgdGhpcyB2YWx1ZXMgYXJlIG51bWJlcnNcbiAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnN0ZXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuc3RlcCA9IHRoaXMuX29wdGlvbnMuc3RlcCAqIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5taW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMubWluID0gdGhpcy5fb3B0aW9ucy5taW4gKiAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zLm1heCA9IHRoaXMuX29wdGlvbnMubWF4ICogMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfaW5pdEJ1dHRvbnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciAkb3V0ZXJBZGRvbiA9ICQoXCI8ZGl2PlwiKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhcImlucHV0LWdyb3VwLWFwcGVuZFwiKVxuICAgICAgICAgICAgICAgIC5pbnNlcnRBZnRlcih0aGlzLiRpbnB1dCk7XG5cbiAgICAgICAgICAgIHZhciAkYWRkb24gPSAkKFwiPHNwYW4+XCIpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKFwiaW5wdXQtZ3JvdXAtdGV4dFwiKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhcImJ1dHRlci1jb21wb25lbnQtbnVtYmVyLWJ1dHRvbnNcIilcbiAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJG91dGVyQWRkb24pO1xuXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAkKFwiPHNwYW4+XCIpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKFwiZ2x5cGhpY29uIGdseXBoaWNvbi1jaGV2cm9uLXVwXCIpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKFwiYnV0dGVyLWNvbXBvbmVudC1udW1iZXItYnV0dG9uXCIpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29wdGlvbnMuZGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwiO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxmLl9vcHRpb25zLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluY3JlYXNlQ291bnRlcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJGFkZG9uKTtcblxuICAgICAgICAgICAgJChcIjxzcGFuPlwiKVxuICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhcImdseXBoaWNvbiBnbHlwaGljb24tY2hldnJvbi1kb3duXCIpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKFwiYnV0dGVyLWNvbXBvbmVudC1udW1iZXItYnV0dG9uXCIpXG4gICAgICAgICAgICAgICAgLmFkZENsYXNzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29wdGlvbnMuZGlzYWJsZWQgPyBcImRpc2FibGVkXCIgOiBcIlwiO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxmLl9vcHRpb25zLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRlY3JlYXNlQ291bnRlcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXBwZW5kVG8oJGFkZG9uKTtcbiAgICAgICAgfSxcblxuICAgICAgICBfaW5pdEFycm93S2V5czogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy4kaW5wdXQua2V5ZG93bihmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQud2hpY2ggPT09IDM4KSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmluY3JlYXNlQ291bnRlcigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQud2hpY2ggPT09IDQwKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRlY3JlYXNlQ291bnRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuXG4gICAgICAgIF9pbml0TW91c2VXaGVlbDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy4kaW5wdXQub24oXCJtb3VzZXdoZWVsIERPTU1vdXNlU2Nyb2xsXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgIGlmICghc2VsZi4kaW5wdXQuaXMoJzpmb2N1cycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSBldmVudC5vcmlnaW5hbEV2ZW50LndoZWVsRGVsdGEgfHwgLWV2ZW50Lm9yaWdpbmFsRXZlbnQuZGVsdGFZIHx8IC1ldmVudC5vcmlnaW5hbEV2ZW50LmRldGFpbDtcblxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGVsdGEgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZGVjcmVhc2VDb3VudGVyKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmNyZWFzZUNvdW50ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcblxuICAgICAgICBfaW5pdENvdW50ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5fY291bnRlciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9pc1ZhbHVlU2V0ID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuJGlucHV0LnZhbCgpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1N0cmluZ0VtcHR5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZWRJbnQgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihwYXJzZWRJbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q291bnRlcihwYXJzZWRJbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1ZhbHVlU2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNWYWx1ZVNldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q291bnRlcigwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBfc2V0VmFsdWVPbkJsdXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuJGlucHV0LnZhbCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzU3RyaW5nRW1wdHkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKFwiXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q291bnRlcigwKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1ZhbHVlU2V0ID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBwYXJzZWRJbnQgPSBwYXJzZUludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmFOKHBhcnNlZEludCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzVmFsdWVTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0LnZhbCh0aGlzLl9jb3VudGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGlucHV0LnZhbChcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q291bnRlcigwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzVmFsdWVTZXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q291bnRlcihwYXJzZWRJbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRpbnB1dC52YWwodGhpcy5fY291bnRlcik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzVmFsdWVTZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBpbmNyZWFzZUNvdW50ZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc1ZhbHVlU2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb3VudGVyKHRoaXMuX2NvdW50ZXIgKyB0aGlzLl9vcHRpb25zLnN0ZXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1ZhbHVlU2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuJGlucHV0LnZhbCh0aGlzLl9jb3VudGVyKTtcbiAgICAgICAgICAgIHRoaXMuJGlucHV0LmNoYW5nZSgpO1xuICAgICAgICB9LFxuXG4gICAgICAgIGRlY3JlYXNlQ291bnRlcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzVmFsdWVTZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldENvdW50ZXIodGhpcy5fY291bnRlciAtIHRoaXMuX29wdGlvbnMuc3RlcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzVmFsdWVTZXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy4kaW5wdXQudmFsKHRoaXMuX2NvdW50ZXIpO1xuICAgICAgICAgICAgdGhpcy4kaW5wdXQuY2hhbmdlKCk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgX2lzU3RyaW5nRW1wdHk6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICh2YWx1ZS5sZW5ndGggPT09IDAgfHwgIXZhbHVlLnRyaW0oKSk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0Q291bnRlcjogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5taW4gIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSA8IHRoaXMuX29wdGlvbnMubWluKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY291bnRlciA9IHRoaXMuX29wdGlvbnMubWluO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9vcHRpb25zLm1heCAhPT0gdW5kZWZpbmVkICYmIHZhbHVlID4gdGhpcy5fb3B0aW9ucy5tYXgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb3VudGVyID0gdGhpcy5fb3B0aW9ucy5tYXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvdW50ZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufShqUXVlcnkpKTsiLCJpZiAodHlwZW9mIGJ1dHRlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBidXR0ZXIgPSB7fTtcbn1cbmJ1dHRlci5wcmV0dHlwcmludCA9IHt9O1xuXG4vKipcbiAqIGNhbGxzIHByZXR0eSBwcmludCBqYXZhc2NyaXB0IGZyYW1ld29yayBhbmQgcmVtb3ZlcyBmaXJzdCBhbmQgbGFzdCBlbXB0eSBjaGlsZHJlbi5cbiAqL1xuYnV0dGVyLnByZXR0eXByaW50LmNsZWFudXAgPSBmdW5jdGlvbigpIHtcbiAgICBwcmV0dHlQcmludCgpO1xuXG4gICAgalF1ZXJ5KCcuYnV0dGVyLWNvbXBvbmVudC1wcmV0dHlwcmludCcpLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgJGZpcnN0UHJlQ2hpbGQgPSBqUXVlcnkodGhpcykuZmluZChcInByZSBzcGFuXCIpLmZpcnN0KCk7XG4gICAgICAgIHZhciAkbGFzdFByZUNoaWxkID0galF1ZXJ5KHRoaXMpLmZpbmQoXCJwcmUgc3BhblwiKS5sYXN0KCk7XG5cblxuICAgICAgICBpZiAoISh0eXBlb2YgJGZpcnN0UHJlQ2hpbGQuaHRtbCgpID09PSBcInVuZGVmaW5lZFwiKSkge1xuICAgICAgICAgICAgaWYgKCEkZmlyc3RQcmVDaGlsZC5odG1sKCkudHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgJGZpcnN0UHJlQ2hpbGQucmVtb3ZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEodHlwZW9mICRsYXN0UHJlQ2hpbGQuaHRtbCgpID09PSBcInVuZGVmaW5lZFwiKSkge1xuICAgICAgICAgICAgaWYgKCEkbGFzdFByZUNoaWxkLmh0bWwoKS50cmltKCkpIHtcbiAgICAgICAgICAgICAgICAkbGFzdFByZUNoaWxkLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59OyIsIi8qKlxuICogSG93IHRvIHVzZTpcbiAqIGpRdWVyeShcIiNzb21lU2VsZWN0b3JcIikuc2Nyb2xsVG9GaXJzdCgpIG9yIGpRdWVyeShcIiNzb21lU2VsZWN0b3JcIikuc2Nyb2xsVG9MYXN0KCk7XG4gKi9cbihmdW5jdGlvbiAoJCkge1xuICAgIC8vIGV4dGVuZCBqUXVlcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAkLmZuLmJ1dHRlclNjcm9sbFRvRmlyc3QgPSBmdW5jdGlvbiAoLyogaW50ICovIG9mZnNldCkge1xuICAgICAgICBjb25zb2xlLmxvZyhvZmZzZXQpO1xuICAgICAgICB2YXIgX29mZnNldCA9IG9mZnNldCA9PT0gdW5kZWZpbmVkID8gJCh0aGlzKS5maXJzdCgpLm9mZnNldCgpLnRvcCA6ICQodGhpcykuZmlyc3QoKS5vZmZzZXQoKS50b3AgKyBvZmZzZXQ7XG4gICAgICAgICQoJ2h0bWwsIGJvZHknKS5hbmltYXRlKHtzY3JvbGxUb3A6IF9vZmZzZXQgKyAncHgnfSwgJ2Zhc3QnKTtcbiAgICB9O1xuXG4gICAgJC5mbi5idXR0ZXJTY3JvbGxUb0xhc3QgPSBmdW5jdGlvbiAoLyogaW50ICovIG9mZnNldCkge1xuICAgICAgICBjb25zb2xlLmxvZyhvZmZzZXQpO1xuICAgICAgICB2YXIgX29mZnNldCA9IG9mZnNldCA9PT0gdW5kZWZpbmVkID8gJCh0aGlzKS5sYXN0KCkub2Zmc2V0KCkudG9wIDogJCh0aGlzKS5sYXN0KCkub2Zmc2V0KCkudG9wICsgb2Zmc2V0O1xuICAgICAgICAkKCdodG1sLCBib2R5JykuYW5pbWF0ZSh7c2Nyb2xsVG9wOiBfb2Zmc2V0ICsgJ3B4J30sICdmYXN0Jyk7XG4gICAgfTtcbn0oalF1ZXJ5KSk7IiwiLyoqXG4gKiBqUXVlcnktUGx1Z2luIHRvIGhhbmRsZSBzZWxlY3Rpb24gc3R5bGUgY2xhc3NlcyBvbiBKU0YtQ29tcG9uZW50IFwiYjp0YWJsZVwiLlxuICogV29ya3Mgd2l0aCBhdCBsZWFzdCBqUXVlcnkgMS4zLjIuXG4gKlxuICogSG93IHRvIHVzZTpcbiAqIGpRdWVyeShcIiNzb21lVHJlZVNlbGVjdG9yXCIpLnNlbGVjdFJvdygge3Jvd0luZGV4OiAnNid9ICk7XG4gKi9cbihmdW5jdGlvbiAoJCkge1xuICAgIC8vIGV4dGVuZCBqUXVlcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAkLmZuLnRvZ2dsZUNvbHVtblZpc2liaWx0eSA9IGZ1bmN0aW9uIChyZW5kZXJJZHMsIGRpc2FibGVSZW5kZXJJZHMpIHtcblxuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciAkdG9vbGJhciA9ICQodGhpcyk7XG5cbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5zdHJpbmdpZnkoY3JlYXRlQ29sdW1uVmlzaWJpbHR5KCR0b29sYmFyKSk7XG4gICAgICAgICAgICBCdXR0ZXJGYWNlcy5BamF4LnNlbmRSZXF1ZXN0KCR0b29sYmFyLmF0dHIoJ2lkJyksICd0b2dnbGUnLCByZW5kZXJJZHMsIGpzb24sIGRpc2FibGVSZW5kZXJJZHMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVDb2x1bW5WaXNpYmlsdHkoJHRvb2xiYXIpIHtcbiAgICAgICAgICAgIHZhciBjb2x1bW5zID0gW107XG5cbiAgICAgICAgICAgICR0b29sYmFyLmZpbmQoJy5idXR0ZXItdGFibGUtdG9vbGJhci1jb2x1bW4tb3B0aW9uIGlucHV0W3R5cGU9Y2hlY2tib3hdJykuZWFjaChmdW5jdGlvbiAoaW5kZXgsIGNoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgdmFyICRjaGVja2JveCA9ICQoY2hlY2tib3gpLnBhcmVudCgnLmJ1dHRlci10YWJsZS10b29sYmFyLWNvbHVtbi1vcHRpb24nKTtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiAkY2hlY2tib3guYXR0cignZGF0YS1jb2x1bW4tbW9kZWwtaWRlbnRpZmllcicpLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiAkY2hlY2tib3guZmluZCgnaW5wdXRbdHlwZT1jaGVja2JveF0nKS5pcygnOmNoZWNrZWQnKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBjb2x1bW5zO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgICQuZm4ub3JkZXJDb2x1bW4gPSBmdW5jdGlvbiAocmVuZGVySWRzLCBkaXNhYmxlUmVuZGVySWRzLCB0b0xlZnQsIGNvbHVtbk51bWJlcikge1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyICR0b29sYmFyID0gJCh0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHRvTGVmdCkge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ29yZGVyIGNvbHVtbiAnICsgY29sdW1uTnVtYmVyICsgJyB0byBsZWZ0Jyk7XG4gICAgICAgICAgICAgICAgb3JkZXJDb2x1bW5MZWZ0KCR0b29sYmFyLCBjb2x1bW5OdW1iZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdvcmRlciBjb2x1bW4gJyArIGNvbHVtbk51bWJlciArICcgdG8gcmlnaHQnKTtcbiAgICAgICAgICAgICAgICBvcmRlckNvbHVtblJpZ2h0KCR0b29sYmFyLCBjb2x1bW5OdW1iZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIganNvbiA9IEpTT04uc3RyaW5naWZ5KGNyZWF0ZUNvbHVtbk9yZGVyKCR0b29sYmFyKSk7XG4gICAgICAgICAgICBCdXR0ZXJGYWNlcy5BamF4LnNlbmRSZXF1ZXN0KCR0b29sYmFyLmF0dHIoJ2lkJyksICdvcmRlcicsIHJlbmRlcklkcywganNvbiwgZGlzYWJsZVJlbmRlcklkcyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbHVtbk9yZGVyKCR0b29sYmFyKSB7XG4gICAgICAgICAgICB2YXIgY29sdW1ucyA9IFtdO1xuXG4gICAgICAgICAgICAkdG9vbGJhci5maW5kKCcuYnV0dGVyLXRhYmxlLXRvb2xiYXItY29sdW1uLW9wdGlvbiBpbnB1dFt0eXBlPWNoZWNrYm94XScpLmVhY2goZnVuY3Rpb24gKGluZGV4LCBjaGVja2JveCkge1xuICAgICAgICAgICAgICAgIHZhciAkY2hlY2tib3ggPSAkKGNoZWNrYm94KS5wYXJlbnQoJy5idXR0ZXItdGFibGUtdG9vbGJhci1jb2x1bW4tb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcjogJGNoZWNrYm94LmF0dHIoJ2RhdGEtY29sdW1uLW1vZGVsLWlkZW50aWZpZXInKSxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGluZGV4XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbnM7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvcmRlckNvbHVtbkxlZnQoLyoganF1ZXJ5IHRvb2xiYXIgKi8gJHRvb2xiYXIsIGNvbHVtbk51bWJlcikge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygkdG9vbGJhcik7XG5cbiAgICAgICAgICAgIHZhciAkY29sdW1uID0gJHRvb2xiYXIuZmluZCgnbGlbZGF0YS1vcmlnaW5hbC1jb2x1bW49XCInICsgY29sdW1uTnVtYmVyICsgJ1wiXScpO1xuICAgICAgICAgICAgdmFyICRuZXh0Q29sdW1uID0gJGNvbHVtbi5wcmV2KCk7XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJGNvbHVtbik7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCRuZXh0Q29sdW1uKTtcblxuICAgICAgICAgICAgdmFyICRkZXRhY2h0ZWRDb2x1bW4gPSAkY29sdW1uLmRldGFjaCgpO1xuICAgICAgICAgICAgJG5leHRDb2x1bW4uYmVmb3JlKCRkZXRhY2h0ZWRDb2x1bW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gb3JkZXJDb2x1bW5SaWdodCgvKiBqcXVlcnkgdG9vbGJhciAqLyAkdG9vbGJhciwgY29sdW1uTnVtYmVyKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCR0b29sYmFyKTtcblxuICAgICAgICAgICAgdmFyICRjb2x1bW4gPSAkdG9vbGJhci5maW5kKCdsaVtkYXRhLW9yaWdpbmFsLWNvbHVtbj1cIicgKyBjb2x1bW5OdW1iZXIgKyAnXCJdJyk7XG4gICAgICAgICAgICB2YXIgJG5leHRDb2x1bW4gPSAkY29sdW1uLm5leHQoKTtcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygkY29sdW1uKTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJG5leHRDb2x1bW4pO1xuXG4gICAgICAgICAgICB2YXIgJGRldGFjaHRlZENvbHVtbiA9ICRjb2x1bW4uZGV0YWNoKCk7XG4gICAgICAgICAgICAkbmV4dENvbHVtbi5hZnRlcigkZGV0YWNodGVkQ29sdW1uKTtcbiAgICAgICAgfVxuICAgIH07XG59KGpRdWVyeSkpOyIsIihmdW5jdGlvbiAoJCkge1xuXG4gICAgJC5mbi5fY2xvc2VQb3BvdmVyT25CbHVyID0gZnVuY3Rpb24gKC8qIG9iamVjdCAqLyBkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJvb3QgPSAkKHRoaXMpO1xuXG4gICAgICAgICAgICByb290LmZpbmQoJy5idXR0ZXItaW5wdXQtY29tcG9uZW50Jykub24oJ2JsdXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcm9vdC5wb3BvdmVyKCdoaWRlJylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgJC5mbi5fYnV0dGVyVG9vbHRpcCA9IGZ1bmN0aW9uICgvKiBvYmplY3QgKi8gZGF0YSkge1xuICAgICAgICB2YXIgcm9vdCA9ICQodGhpcyk7XG5cbiAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRhKTtcblxuICAgICAgICB2YXIgY29udGVudCA9IGpRdWVyeSgnW25hbWU9JyArIGRhdGEuY29udGVudEJ5TmFtZSArICddJyk7XG5cbiAgICAgICAgdmFyIG5ld0RhdGEgPSB7XG4gICAgICAgICAgICB0cmlnZ2VyOiBkYXRhLnRyaWdnZXIsXG4gICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSxcbiAgICAgICAgICAgIHBsYWNlbWVudDogZGF0YS5wbGFjZW1lbnQsXG4gICAgICAgICAgICBwbGFjZW1lbnRGdW5jdGlvbjogZGF0YS5wbGFjZW1lbnRGdW5jdGlvbixcbiAgICAgICAgICAgIG1pblZlcnRpY2FsT2Zmc2V0OiBkYXRhLm1pblZlcnRpY2FsT2Zmc2V0LFxuICAgICAgICAgICAgbWluSG9yaXpvbnRhbE9mZnNldDogZGF0YS5taW5Ib3Jpem9udGFsT2Zmc2V0LFxuICAgICAgICAgICAgY29udGVudDogY29udGVudC5odG1sKCkudHJpbSgpXG4gICAgICAgIH07XG5cbiAgICAgICAgLy9jb25zb2xlLmxvZyhuZXdEYXRhKTtcblxuICAgICAgICBjb250ZW50LnJlbW92ZSgpO1xuXG4gICAgICAgIHJvb3QuYnV0dGVyVG9vbHRpcChuZXdEYXRhKTtcbiAgICB9O1xuXG4gICAgJC5mbi5idXR0ZXJUb29sdGlwID0gZnVuY3Rpb24gKC8qIG9iamVjdCAqLyBkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJvb3QgPSAkKHRoaXMpO1xuICAgICAgICAgICAgdmFyIHRyaWdnZXIgPSBkYXRhLnRyaWdnZXIgPyBkYXRhLnRyaWdnZXIgOiAnaG92ZXInO1xuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygncGxhY2VtZW50OiAnICsgcGxhY2VtZW50KTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3RyaWdnZXI6ICcgKyB0cmlnZ2VyKTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3ZpZXdwb3J0OiAnICsgZGF0YS52aWV3cG9ydCk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhLm1pblZlcnRpY2FsT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgcm9vdC5hdHRyKCdkYXRhLXRvb2x0aXAtbWluLXZlcnRpY2FsLW9mZnNldCcsIGRhdGEubWluVmVydGljYWxPZmZzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEubWluSG9yaXpvbnRhbE9mZnNldCkge1xuICAgICAgICAgICAgICAgIHJvb3QuYXR0cignZGF0YS10b29sdGlwLW1pbi1ob3Jpem9udGFsLW9mZnNldCcsIGRhdGEubWluSG9yaXpvbnRhbE9mZnNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocm9vdC5uZXh0KCkuaGFzQ2xhc3MoJ3BvcG92ZXInKSkge1xuICAgICAgICAgICAgICAgIHJvb3QubmV4dCgpLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHJvb3QucG9wb3Zlcih7XG4gICAgICAgICAgICAgICAgdHJpZ2dlcjogdHJpZ2dlcixcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6IGZ1bmN0aW9uIChwb3BvdmVyLCBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEucGxhY2VtZW50ID8gZGF0YS5wbGFjZW1lbnQgOiAoZGF0YS5wbGFjZW1lbnRGdW5jdGlvbiA/IGRhdGEucGxhY2VtZW50RnVuY3Rpb24gOiBuZXcgQnV0dGVyRmFjZXMuVG9vbHRpcCgpLmNhbGN1bGF0ZVRvb2x0aXBQb3NpdGlvbihwb3BvdmVyLCBzb3VyY2UpKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhLnRpdGxlLFxuICAgICAgICAgICAgICAgIGh0bWw6IHRydWUsXG4gICAgICAgICAgICAgICAgY29udGVudDogZGF0YS5jb250ZW50LFxuICAgICAgICAgICAgICAgIHZpZXdwb3J0OiBkYXRhLnZpZXdwb3J0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn0oalF1ZXJ5KSk7Il19
© 2015 - 2025 Weber Informatics LLC | Privacy Policy