You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

23694 lines
2.3MB

  1. (self["webpackChunk"] = self["webpackChunk"] || []).push([["vendors-node_modules_admin-lte_dist_js_adminlte_min_js-node_modules_bootstrap-autocomplete_di-57a6be"],{
  2. /***/ "./node_modules/admin-lte/dist/js/adminlte.min.js":
  3. /*!********************************************************!*\
  4. !*** ./node_modules/admin-lte/dist/js/adminlte.min.js ***!
  5. \********************************************************/
  6. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  7. /*!
  8. * AdminLTE v3.1.0 (https://adminlte.io)
  9. * Copyright 2014-2021 Colorlib <https://colorlib.com>
  10. * Licensed under MIT (https://github.com/ColorlibHQ/AdminLTE/blob/master/LICENSE)
  11. */
  12. !function(e,t){ true?t(exports,__webpack_require__(/*! jquery */ "./node_modules/jquery/src/jquery.js")):0}(this,(function(e,t){"use strict";function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=a(t),i="CardRefresh",o="lte.cardrefresh",s=n.default.fn[i],l="card",r='[data-card-widget="card-refresh"]',d={source:"",sourceSelector:"",params:{},trigger:r,content:".card-body",loadInContent:!0,loadOnInit:!0,responseType:"",overlayTemplate:'<div class="overlay"><i class="fas fa-2x fa-sync-alt fa-spin"></i></div>',onLoadStart:function(){},onLoadDone:function(e){return e}},f=function(){function e(e,t){if(this._element=e,this._parent=e.parents(".card").first(),this._settings=n.default.extend({},d,t),this._overlay=n.default(this._settings.overlayTemplate),e.hasClass(l)&&(this._parent=e),""===this._settings.source)throw new Error("Source url was not defined. Please specify a url in your CardRefresh source option.")}var t=e.prototype;return t.load=function(){var e=this;this._addOverlay(),this._settings.onLoadStart.call(n.default(this)),n.default.get(this._settings.source,this._settings.params,(function(t){e._settings.loadInContent&&(""!==e._settings.sourceSelector&&(t=n.default(t).find(e._settings.sourceSelector).html()),e._parent.find(e._settings.content).html(t)),e._settings.onLoadDone.call(n.default(e),t),e._removeOverlay()}),""!==this._settings.responseType&&this._settings.responseType),n.default(this._element).trigger(n.default.Event("loaded.lte.cardrefresh"))},t._addOverlay=function(){this._parent.append(this._overlay),n.default(this._element).trigger(n.default.Event("overlay.added.lte.cardrefresh"))},t._removeOverlay=function(){this._parent.find(this._overlay).remove(),n.default(this._element).trigger(n.default.Event("overlay.removed.lte.cardrefresh"))},t._init=function(){var e=this;n.default(this).find(this._settings.trigger).on("click",(function(){e.load()})),this._settings.loadOnInit&&this.load()},e._jQueryInterface=function(t){var a=n.default(this).data(o),i=n.default.extend({},d,n.default(this).data());a||(a=new e(n.default(this),i),n.default(this).data(o,"string"==typeof t?a:t)),"string"==typeof t&&/load/.test(t)?a[t]():a._init(n.default(this))},e}();n.default(document).on("click",r,(function(e){e&&e.preventDefault(),f._jQueryInterface.call(n.default(this),"load")})),n.default((function(){n.default(r).each((function(){f._jQueryInterface.call(n.default(this))}))})),n.default.fn[i]=f._jQueryInterface,n.default.fn[i].Constructor=f,n.default.fn[i].noConflict=function(){return n.default.fn[i]=s,f._jQueryInterface};var u="CardWidget",c="lte.cardwidget",h=n.default.fn[u],g="card",p="collapsed-card",m="collapsing-card",v="expanding-card",_="was-collapsed",b="maximized-card",y='[data-card-widget="remove"]',C='[data-card-widget="collapse"]',w='[data-card-widget="maximize"]',x={animationSpeed:"normal",collapseTrigger:C,removeTrigger:y,maximizeTrigger:w,collapseIcon:"fa-minus",expandIcon:"fa-plus",maximizeIcon:"fa-expand",minimizeIcon:"fa-compress"},I=function(){function e(e,t){this._element=e,this._parent=e.parents(".card").first(),e.hasClass(g)&&(this._parent=e),this._settings=n.default.extend({},x,t)}var t=e.prototype;return t.collapse=function(){var e=this;this._parent.addClass(m).children(".card-body, .card-footer").slideUp(this._settings.animationSpeed,(function(){e._parent.addClass(p).removeClass(m)})),this._parent.find("> .card-header "+this._settings.collapseTrigger+" ."+this._settings.collapseIcon).addClass(this._settings.expandIcon).removeClass(this._settings.collapseIcon),this._element.trigger(n.default.Event("collapsed.lte.cardwidget"),this._parent)},t.expand=function(){var e=this;this._parent.addClass(v).children(".card-body, .card-footer").slideDown(this._settings.animationSpeed,(function(){e._parent.removeClass(p).removeClass(v)})),this._parent.find("> .card-header "+this._settings.collapseTrigger+" ."+this._settings.expandIcon).addClass(this._settings.collapseIcon).removeClass(this._settings.expandIcon),this._element.trigger(n.default.Event("expanded.lte.cardwidget"),this._parent)},t.remove=function(){this._parent.slideUp(),this._element.trigger(n.default.Event("removed.lte.cardwidget"),this._parent)},t.toggle=function(){this._parent.hasClass(p)?this.expand():this.collapse()},t.maximize=function(){this._parent.find(this._settings.maximizeTrigger+" ."+this._settings.maximizeIcon).addClass(this._settings.minimizeIcon).removeClass(this._settings.maximizeIcon),this._parent.css({height:this._parent.height(),width:this._parent.width(),transition:"all .15s"}).delay(150).queue((function(){var e=n.default(this);e.addClass(b),n.default("html").addClass(b),e.hasClass(p)&&e.addClass(_),e.dequeue()})),this._element.trigger(n.default.Event("maximized.lte.cardwidget"),this._parent)},t.minimize=function(){this._parent.find(this._settings.maximizeTrigger+" ."+this._settings.minimizeIcon).addClass(this._settings.maximizeIcon).removeClass(this._settings.minimizeIcon),this._parent.css("cssText","height: "+this._parent[0].style.height+" !important; width: "+this._parent[0].style.width+" !important; transition: all .15s;").delay(10).queue((function(){var e=n.default(this);e.removeClass(b),n.default("html").removeClass(b),e.css({height:"inherit",width:"inherit"}),e.hasClass(_)&&e.removeClass(_),e.dequeue()})),this._element.trigger(n.default.Event("minimized.lte.cardwidget"),this._parent)},t.toggleMaximize=function(){this._parent.hasClass(b)?this.minimize():this.maximize()},t._init=function(e){var t=this;this._parent=e,n.default(this).find(this._settings.collapseTrigger).click((function(){t.toggle()})),n.default(this).find(this._settings.maximizeTrigger).click((function(){t.toggleMaximize()})),n.default(this).find(this._settings.removeTrigger).click((function(){t.remove()}))},e._jQueryInterface=function(t){var a=n.default(this).data(c),i=n.default.extend({},x,n.default(this).data());a||(a=new e(n.default(this),i),n.default(this).data(c,"string"==typeof t?a:t)),"string"==typeof t&&/collapse|expand|remove|toggle|maximize|minimize|toggleMaximize/.test(t)?a[t]():"object"==typeof t&&a._init(n.default(this))},e}();n.default(document).on("click",C,(function(e){e&&e.preventDefault(),I._jQueryInterface.call(n.default(this),"toggle")})),n.default(document).on("click",y,(function(e){e&&e.preventDefault(),I._jQueryInterface.call(n.default(this),"remove")})),n.default(document).on("click",w,(function(e){e&&e.preventDefault(),I._jQueryInterface.call(n.default(this),"toggleMaximize")})),n.default.fn[u]=I._jQueryInterface,n.default.fn[u].Constructor=I,n.default.fn[u].noConflict=function(){return n.default.fn[u]=h,I._jQueryInterface};var T="ControlSidebar",j="lte.controlsidebar",S=n.default.fn[T],k=".control-sidebar",Q=".control-sidebar-content",H='[data-widget="control-sidebar"]',z=".main-header",F=".main-footer",E="control-sidebar-animate",D="control-sidebar-open",L="control-sidebar-slide-open",A="layout-fixed",R={controlsidebarSlide:!0,scrollbarTheme:"os-theme-light",scrollbarAutoHide:"l",target:k},M=function(){function e(e,t){this._element=e,this._config=t}var t=e.prototype;return t.collapse=function(){var e=n.default("body"),t=n.default("html"),a=this._config.target;this._config.controlsidebarSlide?(t.addClass(E),e.removeClass(L).delay(300).queue((function(){n.default(a).hide(),t.removeClass(E),n.default(this).dequeue()}))):e.removeClass(D),n.default(this._element).trigger(n.default.Event("collapsed.lte.controlsidebar"))},t.show=function(){var e=n.default("body"),t=n.default("html");this._config.controlsidebarSlide?(t.addClass(E),n.default(this._config.target).show().delay(10).queue((function(){e.addClass(L).delay(300).queue((function(){t.removeClass(E),n.default(this).dequeue()})),n.default(this).dequeue()}))):e.addClass(D),this._fixHeight(),this._fixScrollHeight(),n.default(this._element).trigger(n.default.Event("expanded.lte.controlsidebar"))},t.toggle=function(){var e=n.default("body");e.hasClass(D)||e.hasClass(L)?this.collapse():this.show()},t._init=function(){var e=this,t=n.default("body");t.hasClass(D)||t.hasClass(L)?(n.default(k).not(this._config.target).hide(),n.default(this._config.target).css("display","block")):n.default(k).hide(),this._fixHeight(),this._fixScrollHeight(),n.default(window).resize((function(){e._fixHeight(),e._fixScrollHeight()})),n.default(window).scroll((function(){var t=n.default("body");(t.hasClass(D)||t.hasClass(L))&&e._fixScrollHeight()}))},t._isNavbarFixed=function(){var e=n.default("body");return e.hasClass("layout-navbar-fixed")||e.hasClass("layout-sm-navbar-fixed")||e.hasClass("layout-md-navbar-fixed")||e.hasClass("layout-lg-navbar-fixed")||e.hasClass("layout-xl-navbar-fixed")},t._isFooterFixed=function(){var e=n.default("body");return e.hasClass("layout-footer-fixed")||e.hasClass("layout-sm-footer-fixed")||e.hasClass("layout-md-footer-fixed")||e.hasClass("layout-lg-footer-fixed")||e.hasClass("layout-xl-footer-fixed")},t._fixScrollHeight=function(){var e=n.default("body"),t=n.default(this._config.target);if(e.hasClass(A)){var a={scroll:n.default(document).height(),window:n.default(window).height(),header:n.default(z).outerHeight(),footer:n.default(F).outerHeight()},i=Math.abs(a.window+n.default(window).scrollTop()-a.scroll),o=n.default(window).scrollTop(),s=this._isNavbarFixed()&&"fixed"===n.default(z).css("position"),l=this._isFooterFixed()&&"fixed"===n.default(F).css("position"),r=n.default(this._config.target+", "+this._config.target+" "+Q);if(0===o&&0===i)t.css({bottom:a.footer,top:a.header}),r.css("height",a.window-(a.header+a.footer));else if(i<=a.footer)if(!1===l){var d=a.header-o;t.css("bottom",a.footer-i).css("top",d>=0?d:0),r.css("height",a.window-(a.footer-i))}else t.css("bottom",a.footer);else o<=a.header?!1===s?(t.css("top",a.header-o),r.css("height",a.window-(a.header-o))):t.css("top",a.header):!1===s?(t.css("top",0),r.css("height",a.window)):t.css("top",a.header);l&&s?(r.css("height","100%"),t.css("height","")):(l||s)&&(r.css("height","100%"),r.css("height",""))}},t._fixHeight=function(){var e=n.default("body"),t=n.default(this._config.target+" "+Q);if(e.hasClass(A)){var a=n.default(window).height(),i=n.default(z).outerHeight(),o=n.default(F).outerHeight(),s=a-i;this._isFooterFixed()&&"fixed"===n.default(F).css("position")&&(s=a-i-o),t.css("height",s),"undefined"!=typeof n.default.fn.overlayScrollbars&&t.overlayScrollbars({className:this._config.scrollbarTheme,sizeAutoCapable:!0,scrollbars:{autoHide:this._config.scrollbarAutoHide,clickScrolling:!0}})}else t.attr("style","")},e._jQueryInterface=function(t){return this.each((function(){var a=n.default(this).data(j),i=n.default.extend({},R,n.default(this).data());if(a||(a=new e(this,i),n.default(this).data(j,a)),"undefined"===a[t])throw new Error(t+" is not a function");a[t]()}))},e}();n.default(document).on("click",H,(function(e){e.preventDefault(),M._jQueryInterface.call(n.default(this),"toggle")})),n.default(document).ready((function(){M._jQueryInterface.call(n.default(H),"_init")})),n.default.fn[T]=M._jQueryInterface,n.default.fn[T].Constructor=M,n.default.fn[T].noConflict=function(){return n.default.fn[T]=S,M._jQueryInterface};var q="DirectChat",N="lte.directchat",O=n.default.fn[q],P=function(){function e(e){this._element=e}return e.prototype.toggle=function(){n.default(this._element).parents(".direct-chat").first().toggleClass("direct-chat-contacts-open"),n.default(this._element).trigger(n.default.Event("toggled.lte.directchat"))},e._jQueryInterface=function(t){return this.each((function(){var a=n.default(this).data(N);a||(a=new e(n.default(this)),n.default(this).data(N,a)),a[t]()}))},e}();n.default(document).on("click",'[data-widget="chat-pane-toggle"]',(function(e){e&&e.preventDefault(),P._jQueryInterface.call(n.default(this),"toggle")})),n.default.fn[q]=P._jQueryInterface,n.default.fn[q].Constructor=P,n.default.fn[q].noConflict=function(){return n.default.fn[q]=O,P._jQueryInterface};var U="Dropdown",B="lte.dropdown",$=n.default.fn[U],W=".dropdown-menu",V={},G=function(){function e(e,t){this._config=t,this._element=e}var t=e.prototype;return t.toggleSubmenu=function(){this._element.siblings().show().toggleClass("show"),this._element.next().hasClass("show")||this._element.parents(W).first().find(".show").removeClass("show").hide(),this._element.parents("li.nav-item.dropdown.show").on("hidden.bs.dropdown",(function(){n.default(".dropdown-submenu .show").removeClass("show").hide()}))},t.fixPosition=function(){var e=n.default(".dropdown-menu.show");if(0!==e.length){e.hasClass("dropdown-menu-right")?e.css({left:"inherit",right:0}):e.css({left:0,right:"inherit"});var t=e.offset(),a=e.width(),i=n.default(window).width()-t.left;t.left<0?e.css({left:"inherit",right:t.left-5}):i<a&&e.css({left:"inherit",right:0})}},e._jQueryInterface=function(t){return this.each((function(){var a=n.default(this).data(B),i=n.default.extend({},V,n.default(this).data());a||(a=new e(n.default(this),i),n.default(this).data(B,a)),"toggleSubmenu"!==t&&"fixPosition"!==t||a[t]()}))},e}();n.default('.dropdown-menu [data-toggle="dropdown"]').on("click",(function(e){e.preventDefault(),e.stopPropagation(),G._jQueryInterface.call(n.default(this),"toggleSubmenu")})),n.default('.navbar [data-toggle="dropdown"]').on("click",(function(e){e.preventDefault(),n.default(e.target).parent().hasClass("dropdown-submenu")||setTimeout((function(){G._jQueryInterface.call(n.default(this),"fixPosition")}),1)})),n.default.fn[U]=G._jQueryInterface,n.default.fn[U].Constructor=G,n.default.fn[U].noConflict=function(){return n.default.fn[U]=$,G._jQueryInterface};var J="ExpandableTable",K="lte.expandableTable",X=n.default.fn[J],Y=".expandable-body",Z='[data-widget="expandable-table"]',ee="aria-expanded",te=function(){function e(e,t){this._options=t,this._element=e}var t=e.prototype;return t.init=function(){n.default(Z).each((function(e,t){var a=n.default(t).attr(ee),i=n.default(t).next(Y).children().first().children();"true"===a?i.show():"false"===a&&(i.hide(),i.parent().parent().addClass("d-none"))}))},t.toggleRow=function(){var e=this._element,t=e.attr(ee),a=e.next(Y).children().first().children();a.stop(),"true"===t?(a.slideUp(500,(function(){e.next(Y).addClass("d-none")})),e.attr(ee,"false"),e.trigger(n.default.Event("collapsed.lte.expandableTable"))):"false"===t&&(e.next(Y).removeClass("d-none"),a.slideDown(500),e.attr(ee,"true"),e.trigger(n.default.Event("expanded.lte.expandableTable")))},e._jQueryInterface=function(t){return this.each((function(){var a=n.default(this).data(K);a||(a=new e(n.default(this)),n.default(this).data(K,a)),"string"==typeof t&&/init|toggleRow/.test(t)&&a[t]()}))},e}();n.default(".expandable-table").ready((function(){te._jQueryInterface.call(n.default(this),"init")})),n.default(document).on("click",Z,(function(){te._jQueryInterface.call(n.default(this),"toggleRow")})),n.default.fn[J]=te._jQueryInterface,n.default.fn[J].Constructor=te,n.default.fn[J].noConflict=function(){return n.default.fn[J]=X,te._jQueryInterface};var ae="Fullscreen",ne="lte.fullscreen",ie=n.default.fn[ae],oe='[data-widget="fullscreen"]',se=oe+" i",le={minimizeIcon:"fa-compress-arrows-alt",maximizeIcon:"fa-expand-arrows-alt"},re=function(){function e(e,t){this.element=e,this.options=n.default.extend({},le,t)}var t=e.prototype;return t.toggle=function(){document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement?this.windowed():this.fullscreen()},t.fullscreen=function(){document.documentElement.requestFullscreen?document.documentElement.requestFullscreen():document.documentElement.webkitRequestFullscreen?document.documentElement.webkitRequestFullscreen():document.documentElement.msRequestFullscreen&&document.documentElement.msRequestFullscreen(),n.default(se).removeClass(this.options.maximizeIcon).addClass(this.options.minimizeIcon)},t.windowed=function(){document.exitFullscreen?document.exitFullscreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.msExitFullscreen&&document.msExitFullscreen(),n.default(se).removeClass(this.options.minimizeIcon).addClass(this.options.maximizeIcon)},e._jQueryInterface=function(t){var a=n.default(this).data(ne);a||(a=n.default(this).data());var i=n.default.extend({},le,"object"==typeof t?t:a),o=new e(n.default(this),i);n.default(this).data(ne,"object"==typeof t?t:a),"string"==typeof t&&/toggle|fullscreen|windowed/.test(t)?o[t]():o.init()},e}();n.default(document).on("click",oe,(function(){re._jQueryInterface.call(n.default(this),"toggle")})),n.default.fn[ae]=re._jQueryInterface,n.default.fn[ae].Constructor=re,n.default.fn[ae].noConflict=function(){return n.default.fn[ae]=ie,re._jQueryInterface};var de="lte.iframe",fe=n.default.fn.IFrame,ue='[data-widget="iframe"]',ce='[data-widget="iframe-fullscreen"]',he=".content-wrapper",ge=".content-wrapper iframe",pe='[data-widget="iframe"].iframe-mode .nav',me='[data-widget="iframe"].iframe-mode .navbar-nav',ve=me+" .nav-item",_e=me+" .nav-link",be='[data-widget="iframe"].iframe-mode .tab-content',ye=be+" .tab-empty",Ce=be+" .tab-loading",we=be+" .tab-pane",xe=".main-sidebar .nav-item > a.nav-link",Ie=".main-header .nav-item a.nav-link",Te=".main-header a.dropdown-item",je="iframe-mode",Se="iframe-mode-fullscreen",ke={onTabClick:function(e){return e},onTabChanged:function(e){return e},onTabCreated:function(e){return e},autoIframeMode:!0,autoItemActive:!0,autoShowNewTab:!0,allowDuplicates:!1,loadingScreen:!0,useNavbarItems:!0,scrollOffset:40,scrollBehaviorSwap:!1,iconMaximize:"fa-expand",iconMinimize:"fa-compress"},Qe=function(){function e(e,t){this._config=t,this._element=e,this._init()}var t=e.prototype;return t.onTabClick=function(e){this._config.onTabClick(e)},t.onTabChanged=function(e){this._config.onTabChanged(e)},t.onTabCreated=function(e){this._config.onTabCreated(e)},t.createTab=function(e,t,a,i){var o=this,s="panel-"+a,l="tab-"+a;this._config.allowDuplicates&&(s+="-"+Math.floor(1e3*Math.random()),l+="-"+Math.floor(1e3*Math.random()));var r='<li class="nav-item" role="presentation"><a href="#" class="btn-iframe-close" data-widget="iframe-close" data-type="only-this"><i class="fas fa-times"></i></a><a class="nav-link" data-toggle="row" id="'+l+'" href="#'+s+'" role="tab" aria-controls="'+s+'" aria-selected="false">'+e+"</a></li>";n.default(me).append(unescape(escape(r)));var d='<div class="tab-pane fade" id="'+s+'" role="tabpanel" aria-labelledby="'+l+'"><iframe src="'+t+'"></iframe></div>';if(n.default(be).append(unescape(escape(d))),i)if(this._config.loadingScreen){var f=n.default(Ce);f.fadeIn(),n.default(s+" iframe").ready((function(){"number"==typeof o._config.loadingScreen?(o.switchTab("#"+l),setTimeout((function(){f.fadeOut()}),o._config.loadingScreen)):(o.switchTab("#"+l),f.fadeOut())}))}else this.switchTab("#"+l);this.onTabCreated(n.default("#"+l))},t.openTabSidebar=function(e,t){void 0===t&&(t=this._config.autoShowNewTab);var a=n.default(e).clone();void 0===a.attr("href")&&(a=n.default(e).parent("a").clone()),a.find(".right, .search-path").remove();var i=a.find("p").text();""===i&&(i=a.text());var o=a.attr("href");if("#"!==o&&""!==o&&void 0!==o){var s=o.replace("./","").replace(/["&'./:=?[\]]/gi,"-").replace(/(--)/gi,""),l="tab-"+s;if(!this._config.allowDuplicates&&n.default("#"+l).length>0)return this.switchTab("#"+l);(!this._config.allowDuplicates&&0===n.default("#"+l).length||this._config.allowDuplicates)&&this.createTab(i,o,s,t)}},t.switchTab=function(e){var t=n.default(e),a=t.attr("href");n.default(ye).hide(),n.default(me+" .active").tab("dispose").removeClass("active"),this._fixHeight(),t.tab("show"),t.parents("li").addClass("active"),this.onTabChanged(t),this._config.autoItemActive&&this._setItemActive(n.default(a+" iframe").attr("src"))},t.removeActiveTab=function(e,t){if("all"==e)n.default(ve).remove(),n.default(we).remove(),n.default(ye).show();else if("all-other"==e)n.default(ve+":not(.active)").remove(),n.default(we+":not(.active)").remove();else if("only-this"==e){var a=n.default(t),i=a.parent(".nav-item"),o=i.parent(),s=i.index(),l=a.siblings(".nav-link").attr("aria-controls");if(i.remove(),n.default("#"+l).remove(),n.default(be).children().length==n.default(ye+", "+Ce).length)n.default(ye).show();else{var r=s-1;this.switchTab(o.children().eq(r).find("a.nav-link"))}}else{var d=n.default(ve+".active"),f=d.parent(),u=d.index();if(d.remove(),n.default(we+".active").remove(),n.default(be).children().length==n.default(ye+", "+Ce).length)n.default(ye).show();else{var c=u-1;this.switchTab(f.children().eq(c).find("a.nav-link"))}}},t.toggleFullscreen=function(){n.default("body").hasClass(Se)?(n.default(ce+" i").removeClass(this._config.iconMinimize).addClass(this._config.iconMaximize),n.default("body").removeClass(Se),n.default(ye+", "+Ce).height("auto"),n.default(he).height("auto"),n.default(ge).height("auto")):(n.default(ce+" i").removeClass(this._config.iconMaximize).addClass(this._config.iconMinimize),n.default("body").addClass(Se)),n.default(window).trigger("resize"),this._fixHeight(!0)},t._init=function(){if(window.frameElement&&this._config.autoIframeMode)n.default("body").addClass(je);else if(n.default(he).hasClass(je)){if(n.default(be).children().length>2){var e=n.default(we+":first-child");e.show(),this._setItemActive(e.find("iframe").attr("src"))}this._setupListeners(),this._fixHeight(!0)}},t._navScroll=function(e){var t=n.default(me).scrollLeft();n.default(me).animate({scrollLeft:t+e},250,"linear")},t._setupListeners=function(){var e=this;n.default(window).on("resize",(function(){setTimeout((function(){e._fixHeight()}),1)})),n.default(document).on("click",xe+", .sidebar-search-results .list-group-item",(function(t){t.preventDefault(),e.openTabSidebar(t.target)})),this._config.useNavbarItems&&n.default(document).on("click",Ie+", "+Te,(function(t){t.preventDefault(),e.openTabSidebar(t.target)})),n.default(document).on("click",_e,(function(t){t.preventDefault(),e.onTabClick(t.target),e.switchTab(t.target)})),n.default(document).on("click",_e,(function(t){t.preventDefault(),e.onTabClick(t.target),e.switchTab(t.target)})),n.default(document).on("click",'[data-widget="iframe-close"]',(function(t){t.preventDefault();var a=t.target;"I"==a.nodeName&&(a=t.target.offsetParent),e.removeActiveTab(a.attributes["data-type"]?a.attributes["data-type"].nodeValue:null,a)})),n.default(document).on("click",ce,(function(t){t.preventDefault(),e.toggleFullscreen()}));var t=!1,a=null;n.default(document).on("mousedown",'[data-widget="iframe-scrollleft"]',(function(n){n.preventDefault(),clearInterval(a);var i=e._config.scrollOffset;e._config.scrollBehaviorSwap||(i=-i),t=!0,e._navScroll(i),a=setInterval((function(){e._navScroll(i)}),250)})),n.default(document).on("mousedown",'[data-widget="iframe-scrollright"]',(function(n){n.preventDefault(),clearInterval(a);var i=e._config.scrollOffset;e._config.scrollBehaviorSwap&&(i=-i),t=!0,e._navScroll(i),a=setInterval((function(){e._navScroll(i)}),250)})),n.default(document).on("mouseup",(function(){t&&(t=!1,clearInterval(a),a=null)}))},t._setItemActive=function(e){n.default(xe+", "+Te).removeClass("active"),n.default(Ie).parent().removeClass("active");var t=n.default(Ie+'[href$="'+e+'"]'),a=n.default('.main-header a.dropdown-item[href$="'+e+'"]'),i=n.default(xe+'[href$="'+e+'"]');t.each((function(e,t){n.default(t).parent().addClass("active")})),a.each((function(e,t){n.default(t).addClass("active")})),i.each((function(e,t){n.default(t).addClass("active"),n.default(t).parents(".nav-treeview").prevAll(".nav-link").addClass("active")}))},t._fixHeight=function(e){if(void 0===e&&(e=!1),n.default("body").hasClass(Se)){var t=n.default(window).height(),a=n.default(pe).outerHeight();n.default(ye+", "+Ce+", "+ge).height(t-a),n.default(he).height(t)}else{var i=parseFloat(n.default(he).css("height")),o=n.default(pe).outerHeight();1==e?setTimeout((function(){n.default(ye+", "+Ce).height(i-o)}),50):n.default(ge).height(i-o)}},e._jQueryInterface=function(t){var a=n.default(this).data(de),i=n.default.extend({},ke,n.default(this).data());if(a||(a=new e(this,i),n.default(this).data(de,a)),"string"==typeof t&&/createTab|openTabSidebar|switchTab|removeActiveTab/.test(t)){for(var o,s=arguments.length,l=new Array(s>1?s-1:0),r=1;r<s;r++)l[r-1]=arguments[r];(o=a)[t].apply(o,l)}},e}();n.default(window).on("load",(function(){Qe._jQueryInterface.call(n.default(ue))})),n.default.fn.IFrame=Qe._jQueryInterface,n.default.fn.IFrame.Constructor=Qe,n.default.fn.IFrame.noConflict=function(){return n.default.fn.IFrame=fe,Qe._jQueryInterface};var He="lte.layout",ze=n.default.fn.Layout,Fe=".main-header",Ee=".main-sidebar",De=".main-sidebar .sidebar",Le=".main-footer",Ae="sidebar-focused",Re={scrollbarTheme:"os-theme-light",scrollbarAutoHide:"l",panelAutoHeight:!0,panelAutoHeightMode:"min-height",preloadDuration:200,loginRegisterAutoHeight:!0},Me=function(){function e(e,t){this._config=t,this._element=e}var t=e.prototype;return t.fixLayoutHeight=function(e){void 0===e&&(e=null);var t=n.default("body"),a=0;(t.hasClass("control-sidebar-slide-open")||t.hasClass("control-sidebar-open")||"control_sidebar"===e)&&(a=n.default(".control-sidebar-content").outerHeight());var i={window:n.default(window).height(),header:n.default(Fe).length>0?n.default(Fe).outerHeight():0,footer:n.default(Le).length>0?n.default(Le).outerHeight():0,sidebar:n.default(De).length>0?n.default(De).height():0,controlSidebar:a},o=this._max(i),s=this._config.panelAutoHeight;!0===s&&(s=0);var l=n.default(".content-wrapper");!1!==s&&(o===i.controlSidebar?l.css(this._config.panelAutoHeightMode,o+s):o===i.window?l.css(this._config.panelAutoHeightMode,o+s-i.header-i.footer):l.css(this._config.panelAutoHeightMode,o+s-i.header),this._isFooterFixed()&&l.css(this._config.panelAutoHeightMode,parseFloat(l.css(this._config.panelAutoHeightMode))+i.footer)),t.hasClass("layout-fixed")&&("undefined"!=typeof n.default.fn.overlayScrollbars?n.default(De).overlayScrollbars({className:this._config.scrollbarTheme,sizeAutoCapable:!0,scrollbars:{autoHide:this._config.scrollbarAutoHide,clickScrolling:!0}}):n.default(De).css("overflow-y","auto"))},t.fixLoginRegisterHeight=function(){var e=n.default("body"),t=n.default(".login-box, .register-box");if(0===t.length)e.css("height","auto"),n.default("html").css("height","auto");else{var a=t.height();e.css(this._config.panelAutoHeightMode)!==a&&e.css(this._config.panelAutoHeightMode,a)}},t._init=function(){var e=this;this.fixLayoutHeight(),!0===this._config.loginRegisterAutoHeight?this.fixLoginRegisterHeight():this._config.loginRegisterAutoHeight===parseInt(this._config.loginRegisterAutoHeight,10)&&setInterval(this.fixLoginRegisterHeight,this._config.loginRegisterAutoHeight),n.default(De).on("collapsed.lte.treeview expanded.lte.treeview",(function(){e.fixLayoutHeight()})),n.default(Ee).on("mouseenter mouseleave",(function(){n.default("body").hasClass("sidebar-collapse")&&e.fixLayoutHeight()})),n.default('[data-widget="pushmenu"]').on("collapsed.lte.pushmenu shown.lte.pushmenu",(function(){setTimeout((function(){e.fixLayoutHeight()}),300)})),n.default('[data-widget="control-sidebar"]').on("collapsed.lte.controlsidebar",(function(){e.fixLayoutHeight()})).on("expanded.lte.controlsidebar",(function(){e.fixLayoutHeight("control_sidebar")})),n.default(window).resize((function(){e.fixLayoutHeight()})),setTimeout((function(){n.default("body.hold-transition").removeClass("hold-transition")}),50),setTimeout((function(){var e=n.default(".preloader");e&&(e.css("height",0),setTimeout((function(){e.children().hide()}),200))}),this._config.preloadDuration)},t._max=function(e){var t=0;return Object.keys(e).forEach((function(a){e[a]>t&&(t=e[a])})),t},t._isFooterFixed=function(){return"fixed"===n.default(Le).css("position")},e._jQueryInterface=function(t){return void 0===t&&(t=""),this.each((function(){var a=n.default(this).data(He),i=n.default.extend({},Re,n.default(this).data());a||(a=new e(n.default(this),i),n.default(this).data(He,a)),"init"===t||""===t?a._init():"fixLayoutHeight"!==t&&"fixLoginRegisterHeight"!==t||a[t]()}))},e}();n.default(window).on("load",(function(){Me._jQueryInterface.call(n.default("body"))})),n.default(De+" a").on("focusin",(function(){n.default(Ee).addClass(Ae)})).on("focusout",(function(){n.default(Ee).removeClass(Ae)})),n.default.fn.Layout=Me._jQueryInterface,n.default.fn.Layout.Constructor=Me,n.default.fn.Layout.noConflict=function(){return n.default.fn.Layout=ze,Me._jQueryInterface};var qe="PushMenu",Ne="lte.pushmenu",Oe="."+Ne,Pe=n.default.fn[qe],Ue='[data-widget="pushmenu"]',Be="body",$e="sidebar-collapse",We="sidebar-open",Ve="sidebar-is-opening",Ge="sidebar-closed",Je={autoCollapseSize:992,enableRemember:!1,noTransitionAfterReload:!0},Ke=function(){function e(e,t){this._element=e,this._options=n.default.extend({},Je,t),0===n.default("#sidebar-overlay").length&&this._addOverlay(),this._init()}var t=e.prototype;return t.expand=function(){var e=n.default(Be);this._options.autoCollapseSize&&n.default(window).width()<=this._options.autoCollapseSize&&e.addClass(We),e.addClass(Ve).removeClass("sidebar-collapse sidebar-closed").delay(50).queue((function(){e.removeClass(Ve),n.default(this).dequeue()})),this._options.enableRemember&&localStorage.setItem("remember"+Oe,We),n.default(this._element).trigger(n.default.Event("shown.lte.pushmenu"))},t.collapse=function(){var e=n.default(Be);this._options.autoCollapseSize&&n.default(window).width()<=this._options.autoCollapseSize&&e.removeClass(We).addClass(Ge),e.addClass($e),this._options.enableRemember&&localStorage.setItem("remember"+Oe,$e),n.default(this._element).trigger(n.default.Event("collapsed.lte.pushmenu"))},t.toggle=function(){n.default(Be).hasClass($e)?this.expand():this.collapse()},t.autoCollapse=function(e){if(void 0===e&&(e=!1),this._options.autoCollapseSize){var t=n.default(Be);n.default(window).width()<=this._options.autoCollapseSize?t.hasClass(We)||this.collapse():!0===e&&(t.hasClass(We)?t.removeClass(We):t.hasClass(Ge)&&this.expand())}},t.remember=function(){if(this._options.enableRemember){var e=n.default("body");localStorage.getItem("remember"+Oe)===$e?this._options.noTransitionAfterReload?e.addClass("hold-transition").addClass($e).delay(50).queue((function(){n.default(this).removeClass("hold-transition"),n.default(this).dequeue()})):e.addClass($e):this._options.noTransitionAfterReload?e.addClass("hold-transition").removeClass($e).delay(50).queue((function(){n.default(this).removeClass("hold-transition"),n.default(this).dequeue()})):e.removeClass($e)}},t._init=function(){var e=this;this.remember(),this.autoCollapse(),n.default(window).resize((function(){e.autoCollapse(!0)}))},t._addOverlay=function(){var e=this,t=n.default("<div />",{id:"sidebar-overlay"});t.on("click",(function(){e.collapse()})),n.default(".wrapper").append(t)},e._jQueryInterface=function(t){return this.each((function(){var a=n.default(this).data(Ne),i=n.default.extend({},Je,n.default(this).data());a||(a=new e(this,i),n.default(this).data(Ne,a)),"string"==typeof t&&/collapse|expand|toggle/.test(t)&&a[t]()}))},e}();n.default(document).on("click",Ue,(function(e){e.preventDefault();var t=e.currentTarget;"pushmenu"!==n.default(t).data("widget")&&(t=n.default(t).closest(Ue)),Ke._jQueryInterface.call(n.default(t),"toggle")})),n.default(window).on("load",(function(){Ke._jQueryInterface.call(n.default(Ue))})),n.default.fn[qe]=Ke._jQueryInterface,n.default.fn[qe].Constructor=Ke,n.default.fn[qe].noConflict=function(){return n.default.fn[qe]=Pe,Ke._jQueryInterface};var Xe="SidebarSearch",Ye="lte.sidebar-search",Ze=n.default.fn[Xe],et="sidebar-search-open",tt="fa-search",at="fa-times",nt="sidebar-search-results",it="list-group",ot='[data-widget="sidebar-search"]',st=ot+" .form-control",lt=ot+" .btn",rt=lt+" i",dt=".sidebar-search-results",ft=".sidebar-search-results .list-group",ut={arrowSign:"->",minLength:3,maxResults:7,highlightName:!0,highlightPath:!1,highlightClass:"text-light",notFoundText:"No element found!"},ct=[],ht=function(){function e(e,t){this.element=e,this.options=n.default.extend({},ut,t),this.items=[]}var a=e.prototype;return a.init=function(){var e=this;0!==n.default(ot).length&&(0===n.default(ot).next(dt).length&&n.default(ot).after(n.default("<div />",{class:nt})),0===n.default(dt).children(".list-group").length&&n.default(dt).append(n.default("<div />",{class:it})),this._addNotFound(),n.default(".main-sidebar .nav-sidebar").children().each((function(t,a){e._parseItem(a)})))},a.search=function(){var e=this,t=n.default(st).val().toLowerCase();if(t.length<this.options.minLength)return n.default(ft).empty(),this._addNotFound(),void this.close();var a=ct.filter((function(e){return e.name.toLowerCase().includes(t)})),i=n.default(a.slice(0,this.options.maxResults));n.default(ft).empty(),0===i.length?this._addNotFound():i.each((function(t,a){n.default(ft).append(e._renderItem(escape(a.name),escape(a.link),a.path))})),this.open()},a.open=function(){n.default(ot).parent().addClass(et),n.default(rt).removeClass(tt).addClass(at)},a.close=function(){n.default(ot).parent().removeClass(et),n.default(rt).removeClass(at).addClass(tt)},a.toggle=function(){n.default(ot).parent().hasClass(et)?this.close():this.open()},a._parseItem=function(e,t){var a=this;if(void 0===t&&(t=[]),!n.default(e).hasClass("nav-header")){var i={},o=n.default(e).clone().find("> .nav-link"),s=n.default(e).clone().find("> .nav-treeview"),l=o.attr("href"),r=o.find("p").children().remove().end().text();if(i.name=this._trimText(r),i.link=l,i.path=t,0===s.length)ct.push(i);else{var d=i.path.concat([i.name]);s.children().each((function(e,t){a._parseItem(t,d)}))}}},a._trimText=function(e){return t.trim(e.replace(/(\r\n|\n|\r)/gm," "))},a._renderItem=function(e,t,a){var i=this;if(a=a.join(" "+this.options.arrowSign+" "),e=unescape(e),this.options.highlightName||this.options.highlightPath){var o=n.default(st).val().toLowerCase(),s=new RegExp(o,"gi");this.options.highlightName&&(e=e.replace(s,(function(e){return'<strong class="'+i.options.highlightClass+'">'+e+"</strong>"}))),this.options.highlightPath&&(a=a.replace(s,(function(e){return'<strong class="'+i.options.highlightClass+'">'+e+"</strong>"})))}var l=n.default("<a/>",{href:t,class:"list-group-item"}),r=n.default("<div/>",{class:"search-title"}).html(e),d=n.default("<div/>",{class:"search-path"}).html(a);return l.append(r).append(d),l},a._addNotFound=function(){n.default(ft).append(this._renderItem(this.options.notFoundText,"#",[]))},e._jQueryInterface=function(t){var a=n.default(this).data(Ye);a||(a=n.default(this).data());var i=n.default.extend({},ut,"object"==typeof t?t:a),o=new e(n.default(this),i);n.default(this).data(Ye,"object"==typeof t?t:a),"string"==typeof t&&/init|toggle|close|open|search/.test(t)?o[t]():o.init()},e}();n.default(document).on("click",lt,(function(e){e.preventDefault(),ht._jQueryInterface.call(n.default(ot),"toggle")})),n.default(document).on("keyup",st,(function(e){return 38==e.keyCode?(e.preventDefault(),void n.default(ft).children().last().focus()):40==e.keyCode?(e.preventDefault(),void n.default(ft).children().first().focus()):void setTimeout((function(){ht._jQueryInterface.call(n.default(ot),"search")}),100)})),n.default(document).on("keydown",ft,(function(e){var t=n.default(":focus");38==e.keyCode&&(e.preventDefault(),t.is(":first-child")?t.siblings().last().focus():t.prev().focus()),40==e.keyCode&&(e.preventDefault(),t.is(":last-child")?t.siblings().first().focus():t.next().focus())})),n.default(window).on("load",(function(){ht._jQueryInterface.call(n.default(ot),"init")})),n.default.fn[Xe]=ht._jQueryInterface,n.default.fn[Xe].Constructor=ht,n.default.fn[Xe].noConflict=function(){return n.default.fn[Xe]=Ze,ht._jQueryInterface};var gt="NavbarSearch",pt="lte.navbar-search",mt=n.default.fn[gt],vt='[data-widget="navbar-search"]',_t=".form-control",bt="navbar-search-open",yt={resetOnClose:!0,target:".navbar-search-block"},Ct=function(){function e(e,t){this._element=e,this._config=n.default.extend({},yt,t)}var t=e.prototype;return t.open=function(){n.default(this._config.target).css("display","flex").hide().fadeIn().addClass(bt),n.default(this._config.target+" "+_t).focus()},t.close=function(){n.default(this._config.target).fadeOut().removeClass(bt),this._config.resetOnClose&&n.default(this._config.target+" "+_t).val("")},t.toggle=function(){n.default(this._config.target).hasClass(bt)?this.close():this.open()},e._jQueryInterface=function(t){return this.each((function(){var a=n.default(this).data(pt),i=n.default.extend({},yt,n.default(this).data());if(a||(a=new e(this,i),n.default(this).data(pt,a)),!/toggle|close|open/.test(t))throw new Error("Undefined method "+t);a[t]()}))},e}();n.default(document).on("click",vt,(function(e){e.preventDefault();var t=n.default(e.currentTarget);"navbar-search"!==t.data("widget")&&(t=t.closest(vt)),Ct._jQueryInterface.call(t,"toggle")})),n.default.fn[gt]=Ct._jQueryInterface,n.default.fn[gt].Constructor=Ct,n.default.fn[gt].noConflict=function(){return n.default.fn[gt]=mt,Ct._jQueryInterface};var wt=n.default.fn.Toasts,xt="topRight",It="topLeft",Tt="bottomRight",jt="bottomLeft",St={position:xt,fixed:!0,autohide:!1,autoremove:!0,delay:1e3,fade:!0,icon:null,image:null,imageAlt:null,imageHeight:"25px",title:null,subtitle:null,close:!0,body:null,class:null},kt=function(){function e(e,t){this._config=t,this._prepareContainer(),n.default("body").trigger(n.default.Event("init.lte.toasts"))}var t=e.prototype;return t.create=function(){var e=n.default('<div class="toast" role="alert" aria-live="assertive" aria-atomic="true"/>');e.data("autohide",this._config.autohide),e.data("animation",this._config.fade),this._config.class&&e.addClass(this._config.class),this._config.delay&&500!=this._config.delay&&e.data("delay",this._config.delay);var t=n.default('<div class="toast-header">');if(null!=this._config.image){var a=n.default("<img />").addClass("rounded mr-2").attr("src",this._config.image).attr("alt",this._config.imageAlt);null!=this._config.imageHeight&&a.height(this._config.imageHeight).width("auto"),t.append(a)}if(null!=this._config.icon&&t.append(n.default("<i />").addClass("mr-2").addClass(this._config.icon)),null!=this._config.title&&t.append(n.default("<strong />").addClass("mr-auto").html(this._config.title)),null!=this._config.subtitle&&t.append(n.default("<small />").html(this._config.subtitle)),1==this._config.close){var i=n.default('<button data-dismiss="toast" />').attr("type","button").addClass("ml-2 mb-1 close").attr("aria-label","Close").append('<span aria-hidden="true">&times;</span>');null==this._config.title&&i.toggleClass("ml-2 ml-auto"),t.append(i)}e.append(t),null!=this._config.body&&e.append(n.default('<div class="toast-body" />').html(this._config.body)),n.default(this._getContainerId()).prepend(e);var o=n.default("body");o.trigger(n.default.Event("created.lte.toasts")),e.toast("show"),this._config.autoremove&&e.on("hidden.bs.toast",(function(){n.default(this).delay(200).remove(),o.trigger(n.default.Event("removed.lte.toasts"))}))},t._getContainerId=function(){return this._config.position==xt?"#toastsContainerTopRight":this._config.position==It?"#toastsContainerTopLeft":this._config.position==Tt?"#toastsContainerBottomRight":this._config.position==jt?"#toastsContainerBottomLeft":void 0},t._prepareContainer=function(){if(0===n.default(this._getContainerId()).length){var e=n.default("<div />").attr("id",this._getContainerId().replace("#",""));this._config.position==xt?e.addClass("toasts-top-right"):this._config.position==It?e.addClass("toasts-top-left"):this._config.position==Tt?e.addClass("toasts-bottom-right"):this._config.position==jt&&e.addClass("toasts-bottom-left"),n.default("body").append(e)}this._config.fixed?n.default(this._getContainerId()).addClass("fixed"):n.default(this._getContainerId()).removeClass("fixed")},e._jQueryInterface=function(t,a){return this.each((function(){var i=n.default.extend({},St,a),o=new e(n.default(this),i);"create"===t&&o[t]()}))},e}();n.default.fn.Toasts=kt._jQueryInterface,n.default.fn.Toasts.Constructor=kt,n.default.fn.Toasts.noConflict=function(){return n.default.fn.Toasts=wt,kt._jQueryInterface};var Qt="TodoList",Ht="lte.todolist",zt=n.default.fn[Qt],Ft="done",Et={onCheck:function(e){return e},onUnCheck:function(e){return e}},Dt=function(){function e(e,t){this._config=t,this._element=e,this._init()}var t=e.prototype;return t.toggle=function(e){e.parents("li").toggleClass(Ft),n.default(e).prop("checked")?this.check(e):this.unCheck(n.default(e))},t.check=function(e){this._config.onCheck.call(e)},t.unCheck=function(e){this._config.onUnCheck.call(e)},t._init=function(){var e=this,t=this._element;t.find("input:checkbox:checked").parents("li").toggleClass(Ft),t.on("change","input:checkbox",(function(t){e.toggle(n.default(t.target))}))},e._jQueryInterface=function(t){return this.each((function(){var a=n.default(this).data(Ht);a||(a=n.default(this).data());var i=n.default.extend({},Et,"object"==typeof t?t:a),o=new e(n.default(this),i);n.default(this).data(Ht,"object"==typeof t?t:a),"init"===t&&o[t]()}))},e}();n.default(window).on("load",(function(){Dt._jQueryInterface.call(n.default('[data-widget="todo-list"]'))})),n.default.fn[Qt]=Dt._jQueryInterface,n.default.fn[Qt].Constructor=Dt,n.default.fn[Qt].noConflict=function(){return n.default.fn[Qt]=zt,Dt._jQueryInterface};var Lt="Treeview",At="lte.treeview",Rt=n.default.fn[Lt],Mt=".nav-item",qt=".nav-treeview",Nt=".menu-open",Ot='[data-widget="treeview"]',Pt="menu-open",Ut="menu-is-opening",Bt={trigger:Ot+" .nav-link",animationSpeed:300,accordion:!0,expandSidebar:!1,sidebarButtonSelector:'[data-widget="pushmenu"]'},$t=function(){function e(e,t){this._config=t,this._element=e}var t=e.prototype;return t.init=function(){n.default(".nav-item.menu-open .nav-treeview.menu-open").css("display","block"),this._setupListeners()},t.expand=function(e,t){var a=this,i=n.default.Event("expanded.lte.treeview");if(this._config.accordion){var o=t.siblings(Nt).first(),s=o.find(qt).first();this.collapse(s,o)}t.addClass(Ut),e.stop().slideDown(this._config.animationSpeed,(function(){t.addClass(Pt),n.default(a._element).trigger(i)})),this._config.expandSidebar&&this._expandSidebar()},t.collapse=function(e,t){var a=this,i=n.default.Event("collapsed.lte.treeview");t.removeClass("menu-is-opening menu-open"),e.stop().slideUp(this._config.animationSpeed,(function(){n.default(a._element).trigger(i),e.find(".menu-open > .nav-treeview").slideUp(),e.find(Nt).removeClass(Pt)}))},t.toggle=function(e){var t=n.default(e.currentTarget),a=t.parent(),i=a.find("> .nav-treeview");if(i.is(qt)||(a.is(Mt)||(i=a.parent().find("> .nav-treeview")),i.is(qt))){e.preventDefault();var o=t.parents(Mt).first();o.hasClass(Pt)?this.collapse(n.default(i),o):this.expand(n.default(i),o)}},t._setupListeners=function(){var e=this,t=void 0!==this._element.attr("id")?"#"+this._element.attr("id"):"";n.default(document).on("click",""+t+this._config.trigger,(function(t){e.toggle(t)}))},t._expandSidebar=function(){n.default("body").hasClass("sidebar-collapse")&&n.default(this._config.sidebarButtonSelector).PushMenu("expand")},e._jQueryInterface=function(t){return this.each((function(){var a=n.default(this).data(At),i=n.default.extend({},Bt,n.default(this).data());a||(a=new e(n.default(this),i),n.default(this).data(At,a)),"init"===t&&a[t]()}))},e}();n.default(window).on("load.lte.treeview",(function(){n.default(Ot).each((function(){$t._jQueryInterface.call(n.default(this),"init")}))})),n.default.fn[Lt]=$t._jQueryInterface,n.default.fn[Lt].Constructor=$t,n.default.fn[Lt].noConflict=function(){return n.default.fn[Lt]=Rt,$t._jQueryInterface},e.CardRefresh=f,e.CardWidget=I,e.ControlSidebar=M,e.DirectChat=P,e.Dropdown=G,e.ExpandableTable=te,e.Fullscreen=re,e.IFrame=Qe,e.Layout=Me,e.NavbarSearch=Ct,e.PushMenu=Ke,e.SidebarSearch=ht,e.Toasts=kt,e.TodoList=Dt,e.Treeview=$t,Object.defineProperty(e,"__esModule",{value:!0})}));
  13. //# sourceMappingURL=adminlte.min.js.map
  14. /***/ }),
  15. /***/ "./node_modules/bootstrap-autocomplete/dist/latest/bootstrap-autocomplete.min.js":
  16. /*!***************************************************************************************!*\
  17. !*** ./node_modules/bootstrap-autocomplete/dist/latest/bootstrap-autocomplete.min.js ***!
  18. \***************************************************************************************/
  19. /***/ (() => {
  20. !function(s){var i={};function o(t){if(i[t])return i[t].exports;var e=i[t]={i:t,l:!1,exports:{}};return s[t].call(e.exports,e,e.exports,o),e.l=!0,e.exports}o.m=s,o.c=i,o.d=function(t,e,s){o.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:s})},o.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var s=Object.create(null);if(o.r(s),Object.defineProperty(s,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)o.d(s,i,function(t){return e[t]}.bind(null,i));return s},o.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(e,"a",e),e},o.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},o.p="",o(o.s=0)}([function(t,e,s){"use strict";s.r(e),s.d(e,"AutoComplete",function(){return d});var i,o,n,r=(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var s in e)e.hasOwnProperty(s)&&(t[s]=e[s])})(t,e)},function(t,e){function s(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(s.prototype=e.prototype,new s)}),l=(_.prototype.getDefaults=function(){return{}},_.prototype.getResults=function(t,e,s){return this.results},_.prototype.search=function(t,e){e(this.getResults())},r(p,o=_),p.prototype.getDefaults=function(){return{url:"",method:"get",queryKey:"q",extraData:{},timeout:void 0,requestThrottling:500}},p.prototype.search=function(t,e){var s=this;null!=this.jqXHR&&this.jqXHR.abort();var i={};i[this._settings.queryKey]=t,$.extend(i,this._settings.extraData),this.requestTID&&window.clearTimeout(this.requestTID),this.requestTID=window.setTimeout(function(){s.jqXHR=$.ajax(s._settings.url,{method:s._settings.method,data:i,timeout:s._settings.timeout}),s.jqXHR.done(function(t){e(t)}),s.jqXHR.fail(function(t){var e;null===(e=s._settings)||void 0===e||e.fail(t)}),s.jqXHR.always(function(){s.jqXHR=null})},this._settings.requestThrottling)},p),a=(f.prototype.init=function(){var s=this,t=$.extend({},this._$el.position(),{height:this._$el[0].offsetHeight});this._dd=$("<ul />"),this._dd.addClass("bootstrap-autocomplete dropdown-menu"),this._dd.insertAfter(this._$el),this._dd.css({top:t.top+this._$el.outerHeight(),left:t.left,width:this._$el.outerWidth()}),this._dd.on("click","li",function(t){var e=$(t.currentTarget).data("item");s.itemSelectedLaunchEvent(e)}),this._dd.on("keyup",function(t){if(s.shown){switch(t.which){case 27:s.hide(),s._$el.focus()}return!1}}),this._dd.on("mouseenter",function(t){s.ddMouseover=!0}),this._dd.on("mouseleave",function(t){s.ddMouseover=!1}),this._dd.on("mouseenter","li",function(t){s.haveResults&&($(t.currentTarget).closest("ul").find("li.active").removeClass("active"),$(t.currentTarget).addClass("active"),s.mouseover=!0)}),this._dd.on("mouseleave","li",function(t){s.mouseover=!1}),this.initialized=!0},f.prototype.checkInitialized=function(){this.initialized||this.init()},Object.defineProperty(f.prototype,"isMouseOver",{get:function(){return this.mouseover},enumerable:!1,configurable:!0}),Object.defineProperty(f.prototype,"isDdMouseOver",{get:function(){return this.ddMouseover},enumerable:!1,configurable:!0}),Object.defineProperty(f.prototype,"haveResults",{get:function(){return 0<this.items.length},enumerable:!1,configurable:!0}),f.prototype.focusNextItem=function(t){var e,s;this.haveResults&&(e=this._dd.find("li.active"),0===(s=t?e.prev():e.next()).length&&(s=t?this._dd.find("li").last():this._dd.find("li").first()),e.removeClass("active"),s.addClass("active"))},f.prototype.focusPreviousItem=function(){this.focusNextItem(!0)},f.prototype.selectFocusItem=function(){this._dd.find("li.active").trigger("click")},Object.defineProperty(f.prototype,"isItemFocused",{get:function(){return!!(this.isShown()&&0<this._dd.find("li.active").length)},enumerable:!1,configurable:!0}),f.prototype.show=function(){this.shown||(this._dd.dropdown().show(),this.shown=!0)},f.prototype.isShown=function(){return this.shown},f.prototype.hide=function(){this.shown&&(this._dd.dropdown().hide(),this.shown=!1)},f.prototype.updateItems=function(t,e){this.items=t,this.searchText=e,this.refreshItemList()},f.prototype.showMatchedText=function(t,e){var s=t.toLowerCase().indexOf(e.toLowerCase());if(-1<s){var i=s+e.length;return t.slice(0,s)+"<b>"+t.slice(s,i)+"</b>"+t.slice(i)}return t},f.prototype.refreshItemList=function(){var r=this;this.checkInitialized(),this._dd.empty();var t,l=[];0<this.items.length?this.items.forEach(function(t){var e,s,i=r.formatItem(t);"string"==typeof i&&(i={text:i}),e=r.showMatchedText(i.text,r.searchText),s=void 0!==i.html?i.html:e;var o=i.disabled,n=$("<li >");n.append($("<a>").attr("href","#!").html(s)).data("item",t),o&&n.addClass("disabled"),l.push(n)}):((t=$("<li >")).append($("<a>").attr("href","#!").html(this.noResultsText)).addClass("disabled"),l.push(t)),this._dd.append(l)},f.prototype.itemSelectedLaunchEvent=function(t){this._$el.trigger("autocomplete.select",t)},f),h=(c.prototype.getElPos=function(){return $.extend({},this._$el.position(),{height:this._$el[0].offsetHeight})},c.prototype.init=function(){var s=this,t=this.getElPos();this._dd=$("<div />"),this._dd.addClass("bootstrap-autocomplete dropdown-menu"),this._dd.insertAfter(this._$el),this._dd.css({top:t.top+this._$el.outerHeight(),left:t.left,width:this._$el.outerWidth()}),this._dd.on("click",".dropdown-item",function(t){var e=$(t.currentTarget).data("item");s.itemSelectedLaunchEvent(e),t.preventDefault()}),this._dd.on("keyup",function(t){if(s.shown){switch(t.which){case 27:s.hide(),s._$el.focus()}return!1}}),this._dd.on("mouseenter",function(t){s.ddMouseover=!0}),this._dd.on("mouseleave",function(t){s.ddMouseover=!1}),this._dd.on("mouseenter",".dropdown-item",function(t){s.haveResults&&($(t.currentTarget).closest("div").find(".dropdown-item.active").removeClass("active"),$(t.currentTarget).addClass("active"),s.mouseover=!0)}),this._dd.on("mouseleave",".dropdown-item",function(t){s.mouseover=!1}),this.initialized=!0},c.prototype.checkInitialized=function(){this.initialized||this.init()},Object.defineProperty(c.prototype,"isMouseOver",{get:function(){return this.mouseover},enumerable:!1,configurable:!0}),Object.defineProperty(c.prototype,"isDdMouseOver",{get:function(){return this.ddMouseover},enumerable:!1,configurable:!0}),Object.defineProperty(c.prototype,"haveResults",{get:function(){return 0<this.items.length},enumerable:!1,configurable:!0}),c.prototype.focusNextItem=function(t){var e,s;this.haveResults&&(e=this._dd.find(".dropdown-item.active"),0===(s=t?e.prev():e.next()).length&&(s=t?this._dd.find(".dropdown-item").last():this._dd.find(".dropdown-item").first()),e.removeClass("active"),s.addClass("active"))},c.prototype.focusPreviousItem=function(){this.focusNextItem(!0)},c.prototype.selectFocusItem=function(){this._dd.find(".dropdown-item.active").trigger("click")},Object.defineProperty(c.prototype,"isItemFocused",{get:function(){return!!(this._dd&&this.isShown()&&0<this._dd.find(".dropdown-item.active").length)},enumerable:!1,configurable:!0}),c.prototype.show=function(){this.shown||(this.getElPos(),this._dd.addClass("show"),this.shown=!0,this._$el.trigger("autocomplete.dd.shown"))},c.prototype.isShown=function(){return this.shown},c.prototype.hide=function(){this.shown&&(this._dd.removeClass("show"),this.shown=!1,this._$el.trigger("autocomplete.dd.hidden"))},c.prototype.updateItems=function(t,e){this.items=t,this.searchText=e,this.refreshItemList()},c.prototype.showMatchedText=function(t,e){var s=t.toLowerCase().indexOf(e.toLowerCase());if(-1<s){var i=s+e.length;return t.slice(0,s)+"<b>"+t.slice(s,i)+"</b>"+t.slice(i)}return t},c.prototype.refreshItemList=function(){var r=this;this.checkInitialized(),this._dd.empty();var t,l=[];0<this.items.length?(this.items.forEach(function(t){var e,s,i=r.formatItem(t);"string"==typeof i&&(i={text:i}),e=r.showMatchedText(i.text,r.searchText),s=void 0!==i.html?i.html:e;var o=i.disabled,n=$("<a >");n.addClass("dropdown-item").css({overflow:"hidden","text-overflow":"ellipsis"}).html(s).data("item",t),o&&n.addClass("disabled"),l.push(n)}),this._dd.append(l),this.show()):""===this.noResultsText?this.hide():((t=$("<a >")).addClass("dropdown-item disabled").html(this.noResultsText),l.push(t),this._dd.append(l),this.show())},c.prototype.itemSelectedLaunchEvent=function(t){this._$el.trigger("autocomplete.select",t)},c),d=(u.prototype.manageInlineDataAttributes=function(){var t=this.getSettings();this._$el.data("url")&&(t.resolverSettings.url=this._$el.data("url")),this._$el.data("default-value")&&(this._defaultValue=this._$el.data("default-value")),this._$el.data("default-text")&&(this._defaultText=this._$el.data("default-text")),void 0!==this._$el.data("noresults-text")&&(t.noResultsText=this._$el.data("noresults-text"))},u.prototype.getSettings=function(){return this._settings},u.prototype.getBootstrapVersion=function(){var t="auto"===this._settings.bootstrapVersion?$.fn.button.Constructor.VERSION.split(".").map(parseInt):"4"===this._settings.bootstrapVersion?[4]:"3"===this._settings.bootstrapVersion?[3]:(console.error("INVALID value for 'bootstrapVersion' settings property: "+this._settings.bootstrapVersion+" defaulting to 4"),[4]);return t},u.prototype.convertSelectToText=function(){var t=$("<input>");t.attr("type","hidden"),t.attr("name",this._$el.attr("name")),this._defaultValue&&t.val(this._defaultValue),(this._selectHiddenField=t).insertAfter(this._$el);var e=$("<input>");e.attr("type","search"),e.attr("name",this._$el.attr("name")+"_text"),e.attr("id",this._$el.attr("id")),e.attr("disabled",this._$el.attr("disabled")),e.attr("placeholder",this._$el.attr("placeholder")),e.attr("autocomplete","off"),e.addClass(this._$el.attr("class")),this._defaultText&&e.val(this._defaultText);var s=this._$el.attr("required");s&&e.attr("required",s),e.data(u.NAME,this),this._$el.replaceWith(e),this._$el=e,this._el=e.get(0)},u.prototype.init=function(){this.bindDefaultEventListeners(),"ajax"===this._settings.resolver&&(this.resolver=new l(this._settings.resolverSettings)),4===this.getBootstrapVersion()[0]?this._dd=new h(this._$el,this._settings.formatResult,this._settings.autoSelect,this._settings.noResultsText):this._dd=new a(this._$el,this._settings.formatResult,this._settings.autoSelect,this._settings.noResultsText)},u.prototype.bindDefaultEventListeners=function(){var s=this;this._$el.on("keydown",function(t){switch(t.which){case 9:s._dd.isItemFocused?s._dd.selectFocusItem():s._selectedItem||""!==s._$el.val()&&s._$el.trigger("autocomplete.freevalue",s._$el.val()),s._dd.hide();break;case 13:s._dd.isItemFocused?s._dd.selectFocusItem():s._selectedItem||""!==s._$el.val()&&s._$el.trigger("autocomplete.freevalue",s._$el.val()),s._dd.hide(),s._settings.preventEnter&&t.preventDefault();break;case 40:s._dd.focusNextItem();break;case 38:s._dd.focusPreviousItem()}}),this._$el.on("keyup",function(t){switch(t.which){case 16:case 17:case 18:case 39:case 37:case 36:case 35:break;case 13:case 27:s._dd.hide();break;case 40:case 38:break;default:s._selectedItem=null;var e=s._$el.val();s.handlerTyped(e)}}),this._$el.on("blur",function(t){!s._dd.isMouseOver&&s._dd.isDdMouseOver&&s._dd.isShown()?(setTimeout(function(){s._$el.focus()}),s._$el.focus()):s._dd.isMouseOver||(s._isSelectElement?s._dd.isItemFocused?s._dd.selectFocusItem():(null!==s._selectedItem&&""!==s._$el.val()||(""!==s._$el.val()&&null!==s._defaultValue?(s._$el.val(s._defaultText),s._selectHiddenField.val(s._defaultValue)):(s._$el.val(""),s._selectHiddenField.val("")),s._selectedItem=null),s._$el.trigger("autocomplete.select",s._selectedItem)):null===s._selectedItem&&s._$el.trigger("autocomplete.freevalue",s._$el.val()),s._dd.hide())}),this._$el.on("autocomplete.select",function(t,e){s._selectedItem=e,s.itemSelectedDefaultHandler(e)}),this._$el.on("paste",function(t){setTimeout(function(){s._$el.trigger("keyup",t)},0)})},u.prototype.handlerTyped=function(t){null!==this._settings.events.typed&&!(t=this._settings.events.typed(t,this._$el))||(t.length>=this._settings.minLength?(this._searchText=t,this.handlerPreSearch()):this._dd.hide())},u.prototype.handlerPreSearch=function(){if(null!==this._settings.events.searchPre){var t=this._settings.events.searchPre(this._searchText,this._$el);if(!t)return;this._searchText=t}this.handlerDoSearch()},u.prototype.handlerDoSearch=function(){var e=this;null!==this._settings.events.search?this._settings.events.search(this._searchText,function(t){e.postSearchCallback(t)},this._$el):this.resolver&&this.resolver.search(this._searchText,function(t){e.postSearchCallback(t)})},u.prototype.postSearchCallback=function(t){this._settings.events.searchPost&&"boolean"==typeof(t=this._settings.events.searchPost(t,this._$el))&&!t||this.handlerStartShow(t)},u.prototype.handlerStartShow=function(t){this._dd.updateItems(t,this._searchText)},u.prototype.itemSelectedDefaultHandler=function(t){var e;null!=t?("string"==typeof(e=this._settings.formatResult(t))&&(e={text:e}),this._$el.val(e.text),this._isSelectElement&&this._selectHiddenField.val(e.value)):(this._$el.val(""),this._isSelectElement&&this._selectHiddenField.val("")),this._selectedItem=t,this._dd.hide()},u.prototype.defaultFormatResult=function(t){return"string"==typeof t?{text:t}:t.text?t:{text:t.toString()}},u.prototype.manageAPI=function(t,e){"set"===t?this.itemSelectedDefaultHandler(e):"clear"===t?this.itemSelectedDefaultHandler(null):"show"===t?this._$el.trigger("keyup"):"updateResolver"===t&&(this.resolver=new l(e))},u.NAME="autoComplete",u);function u(t,e){this._selectedItem=null,this._defaultValue=null,this._defaultText=null,this._isSelectElement=!1,this._settings={resolver:"ajax",resolverSettings:{},minLength:3,valueKey:"value",formatResult:this.defaultFormatResult,autoSelect:!0,noResultsText:"No results",bootstrapVersion:"auto",preventEnter:!1,events:{typed:null,searchPre:null,search:null,searchPost:null,select:null,focus:null}},this._el=t,this._$el=$(this._el),this._$el.is("select")&&(this._isSelectElement=!0),this.manageInlineDataAttributes(),"object"==typeof e&&(this._settings=$.extend(!0,{},this.getSettings(),e)),this._isSelectElement&&this.convertSelectToText(),this.init()}function c(t,e,s,i){this.initialized=!1,this.shown=!1,this.items=[],this.ddMouseover=!1,this._$el=t,this.formatItem=e,this.autoSelect=s,this.noResultsText=i}function f(t,e,s,i){this.initialized=!1,this.shown=!1,this.items=[],this.ddMouseover=!1,this._$el=t,this.formatItem=e,this.autoSelect=s,this.noResultsText=i}function p(t){return o.call(this,t)||this}function _(t){this._settings=$.extend(!0,{},this.getDefaults(),t)}n=jQuery,window,document,n.fn[d.NAME]=function(e,s){return this.each(function(){var t;(t=n(this).data(d.NAME))||(t=new d(this,e),n(this).data(d.NAME,t)),t.manageAPI(e,s)})}}]);
  21. /***/ }),
  22. /***/ "./node_modules/bootstrap-daterangepicker/daterangepicker.js":
  23. /*!*******************************************************************!*\
  24. !*** ./node_modules/bootstrap-daterangepicker/daterangepicker.js ***!
  25. \*******************************************************************/
  26. /***/ (function(module, exports, __webpack_require__) {
  27. var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/**
  28. * @version: 3.1
  29. * @author: Dan Grossman http://www.dangrossman.info/
  30. * @copyright: Copyright (c) 2012-2019 Dan Grossman. All rights reserved.
  31. * @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php
  32. * @website: http://www.daterangepicker.com/
  33. */
  34. // Following the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js
  35. (function (root, factory) {
  36. if (true) {
  37. // AMD. Make globaly available as well
  38. !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! moment */ "./node_modules/moment/dist/moment.js"), __webpack_require__(/*! jquery */ "./node_modules/jquery/src/jquery.js")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (moment, jquery) {
  39. if (!jquery.fn) jquery.fn = {}; // webpack server rendering
  40. if (typeof moment !== 'function' && moment.hasOwnProperty('default')) moment = moment['default']
  41. return factory(moment, jquery);
  42. }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
  43. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  44. } else { var moment, jQuery; }
  45. }(this, function(moment, $) {
  46. var DateRangePicker = function(element, options, cb) {
  47. //default settings for options
  48. this.parentEl = 'body';
  49. this.element = $(element);
  50. this.startDate = moment().startOf('day');
  51. this.endDate = moment().endOf('day');
  52. this.minDate = false;
  53. this.maxDate = false;
  54. this.maxSpan = false;
  55. this.autoApply = false;
  56. this.singleDatePicker = false;
  57. this.showDropdowns = false;
  58. this.minYear = moment().subtract(100, 'year').format('YYYY');
  59. this.maxYear = moment().add(100, 'year').format('YYYY');
  60. this.showWeekNumbers = false;
  61. this.showISOWeekNumbers = false;
  62. this.showCustomRangeLabel = true;
  63. this.timePicker = false;
  64. this.timePicker24Hour = false;
  65. this.timePickerIncrement = 1;
  66. this.timePickerSeconds = false;
  67. this.linkedCalendars = true;
  68. this.autoUpdateInput = true;
  69. this.alwaysShowCalendars = false;
  70. this.ranges = {};
  71. this.opens = 'right';
  72. if (this.element.hasClass('pull-right'))
  73. this.opens = 'left';
  74. this.drops = 'down';
  75. if (this.element.hasClass('dropup'))
  76. this.drops = 'up';
  77. this.buttonClasses = 'btn btn-sm';
  78. this.applyButtonClasses = 'btn-primary';
  79. this.cancelButtonClasses = 'btn-default';
  80. this.locale = {
  81. direction: 'ltr',
  82. format: moment.localeData().longDateFormat('L'),
  83. separator: ' - ',
  84. applyLabel: 'Apply',
  85. cancelLabel: 'Cancel',
  86. weekLabel: 'W',
  87. customRangeLabel: 'Custom Range',
  88. daysOfWeek: moment.weekdaysMin(),
  89. monthNames: moment.monthsShort(),
  90. firstDay: moment.localeData().firstDayOfWeek()
  91. };
  92. this.callback = function() { };
  93. //some state information
  94. this.isShowing = false;
  95. this.leftCalendar = {};
  96. this.rightCalendar = {};
  97. //custom options from user
  98. if (typeof options !== 'object' || options === null)
  99. options = {};
  100. //allow setting options with data attributes
  101. //data-api options will be overwritten with custom javascript options
  102. options = $.extend(this.element.data(), options);
  103. //html template for the picker UI
  104. if (typeof options.template !== 'string' && !(options.template instanceof $))
  105. options.template =
  106. '<div class="daterangepicker">' +
  107. '<div class="ranges"></div>' +
  108. '<div class="drp-calendar left">' +
  109. '<div class="calendar-table"></div>' +
  110. '<div class="calendar-time"></div>' +
  111. '</div>' +
  112. '<div class="drp-calendar right">' +
  113. '<div class="calendar-table"></div>' +
  114. '<div class="calendar-time"></div>' +
  115. '</div>' +
  116. '<div class="drp-buttons">' +
  117. '<span class="drp-selected"></span>' +
  118. '<button class="cancelBtn" type="button"></button>' +
  119. '<button class="applyBtn" disabled="disabled" type="button"></button> ' +
  120. '</div>' +
  121. '</div>';
  122. this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl);
  123. this.container = $(options.template).appendTo(this.parentEl);
  124. //
  125. // handle all the possible options overriding defaults
  126. //
  127. if (typeof options.locale === 'object') {
  128. if (typeof options.locale.direction === 'string')
  129. this.locale.direction = options.locale.direction;
  130. if (typeof options.locale.format === 'string')
  131. this.locale.format = options.locale.format;
  132. if (typeof options.locale.separator === 'string')
  133. this.locale.separator = options.locale.separator;
  134. if (typeof options.locale.daysOfWeek === 'object')
  135. this.locale.daysOfWeek = options.locale.daysOfWeek.slice();
  136. if (typeof options.locale.monthNames === 'object')
  137. this.locale.monthNames = options.locale.monthNames.slice();
  138. if (typeof options.locale.firstDay === 'number')
  139. this.locale.firstDay = options.locale.firstDay;
  140. if (typeof options.locale.applyLabel === 'string')
  141. this.locale.applyLabel = options.locale.applyLabel;
  142. if (typeof options.locale.cancelLabel === 'string')
  143. this.locale.cancelLabel = options.locale.cancelLabel;
  144. if (typeof options.locale.weekLabel === 'string')
  145. this.locale.weekLabel = options.locale.weekLabel;
  146. if (typeof options.locale.customRangeLabel === 'string'){
  147. //Support unicode chars in the custom range name.
  148. var elem = document.createElement('textarea');
  149. elem.innerHTML = options.locale.customRangeLabel;
  150. var rangeHtml = elem.value;
  151. this.locale.customRangeLabel = rangeHtml;
  152. }
  153. }
  154. this.container.addClass(this.locale.direction);
  155. if (typeof options.startDate === 'string')
  156. this.startDate = moment(options.startDate, this.locale.format);
  157. if (typeof options.endDate === 'string')
  158. this.endDate = moment(options.endDate, this.locale.format);
  159. if (typeof options.minDate === 'string')
  160. this.minDate = moment(options.minDate, this.locale.format);
  161. if (typeof options.maxDate === 'string')
  162. this.maxDate = moment(options.maxDate, this.locale.format);
  163. if (typeof options.startDate === 'object')
  164. this.startDate = moment(options.startDate);
  165. if (typeof options.endDate === 'object')
  166. this.endDate = moment(options.endDate);
  167. if (typeof options.minDate === 'object')
  168. this.minDate = moment(options.minDate);
  169. if (typeof options.maxDate === 'object')
  170. this.maxDate = moment(options.maxDate);
  171. // sanity check for bad options
  172. if (this.minDate && this.startDate.isBefore(this.minDate))
  173. this.startDate = this.minDate.clone();
  174. // sanity check for bad options
  175. if (this.maxDate && this.endDate.isAfter(this.maxDate))
  176. this.endDate = this.maxDate.clone();
  177. if (typeof options.applyButtonClasses === 'string')
  178. this.applyButtonClasses = options.applyButtonClasses;
  179. if (typeof options.applyClass === 'string') //backwards compat
  180. this.applyButtonClasses = options.applyClass;
  181. if (typeof options.cancelButtonClasses === 'string')
  182. this.cancelButtonClasses = options.cancelButtonClasses;
  183. if (typeof options.cancelClass === 'string') //backwards compat
  184. this.cancelButtonClasses = options.cancelClass;
  185. if (typeof options.maxSpan === 'object')
  186. this.maxSpan = options.maxSpan;
  187. if (typeof options.dateLimit === 'object') //backwards compat
  188. this.maxSpan = options.dateLimit;
  189. if (typeof options.opens === 'string')
  190. this.opens = options.opens;
  191. if (typeof options.drops === 'string')
  192. this.drops = options.drops;
  193. if (typeof options.showWeekNumbers === 'boolean')
  194. this.showWeekNumbers = options.showWeekNumbers;
  195. if (typeof options.showISOWeekNumbers === 'boolean')
  196. this.showISOWeekNumbers = options.showISOWeekNumbers;
  197. if (typeof options.buttonClasses === 'string')
  198. this.buttonClasses = options.buttonClasses;
  199. if (typeof options.buttonClasses === 'object')
  200. this.buttonClasses = options.buttonClasses.join(' ');
  201. if (typeof options.showDropdowns === 'boolean')
  202. this.showDropdowns = options.showDropdowns;
  203. if (typeof options.minYear === 'number')
  204. this.minYear = options.minYear;
  205. if (typeof options.maxYear === 'number')
  206. this.maxYear = options.maxYear;
  207. if (typeof options.showCustomRangeLabel === 'boolean')
  208. this.showCustomRangeLabel = options.showCustomRangeLabel;
  209. if (typeof options.singleDatePicker === 'boolean') {
  210. this.singleDatePicker = options.singleDatePicker;
  211. if (this.singleDatePicker)
  212. this.endDate = this.startDate.clone();
  213. }
  214. if (typeof options.timePicker === 'boolean')
  215. this.timePicker = options.timePicker;
  216. if (typeof options.timePickerSeconds === 'boolean')
  217. this.timePickerSeconds = options.timePickerSeconds;
  218. if (typeof options.timePickerIncrement === 'number')
  219. this.timePickerIncrement = options.timePickerIncrement;
  220. if (typeof options.timePicker24Hour === 'boolean')
  221. this.timePicker24Hour = options.timePicker24Hour;
  222. if (typeof options.autoApply === 'boolean')
  223. this.autoApply = options.autoApply;
  224. if (typeof options.autoUpdateInput === 'boolean')
  225. this.autoUpdateInput = options.autoUpdateInput;
  226. if (typeof options.linkedCalendars === 'boolean')
  227. this.linkedCalendars = options.linkedCalendars;
  228. if (typeof options.isInvalidDate === 'function')
  229. this.isInvalidDate = options.isInvalidDate;
  230. if (typeof options.isCustomDate === 'function')
  231. this.isCustomDate = options.isCustomDate;
  232. if (typeof options.alwaysShowCalendars === 'boolean')
  233. this.alwaysShowCalendars = options.alwaysShowCalendars;
  234. // update day names order to firstDay
  235. if (this.locale.firstDay != 0) {
  236. var iterator = this.locale.firstDay;
  237. while (iterator > 0) {
  238. this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());
  239. iterator--;
  240. }
  241. }
  242. var start, end, range;
  243. //if no start/end dates set, check if an input element contains initial values
  244. if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') {
  245. if ($(this.element).is(':text')) {
  246. var val = $(this.element).val(),
  247. split = val.split(this.locale.separator);
  248. start = end = null;
  249. if (split.length == 2) {
  250. start = moment(split[0], this.locale.format);
  251. end = moment(split[1], this.locale.format);
  252. } else if (this.singleDatePicker && val !== "") {
  253. start = moment(val, this.locale.format);
  254. end = moment(val, this.locale.format);
  255. }
  256. if (start !== null && end !== null) {
  257. this.setStartDate(start);
  258. this.setEndDate(end);
  259. }
  260. }
  261. }
  262. if (typeof options.ranges === 'object') {
  263. for (range in options.ranges) {
  264. if (typeof options.ranges[range][0] === 'string')
  265. start = moment(options.ranges[range][0], this.locale.format);
  266. else
  267. start = moment(options.ranges[range][0]);
  268. if (typeof options.ranges[range][1] === 'string')
  269. end = moment(options.ranges[range][1], this.locale.format);
  270. else
  271. end = moment(options.ranges[range][1]);
  272. // If the start or end date exceed those allowed by the minDate or maxSpan
  273. // options, shorten the range to the allowable period.
  274. if (this.minDate && start.isBefore(this.minDate))
  275. start = this.minDate.clone();
  276. var maxDate = this.maxDate;
  277. if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate))
  278. maxDate = start.clone().add(this.maxSpan);
  279. if (maxDate && end.isAfter(maxDate))
  280. end = maxDate.clone();
  281. // If the end of the range is before the minimum or the start of the range is
  282. // after the maximum, don't display this range option at all.
  283. if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day'))
  284. || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day')))
  285. continue;
  286. //Support unicode chars in the range names.
  287. var elem = document.createElement('textarea');
  288. elem.innerHTML = range;
  289. var rangeHtml = elem.value;
  290. this.ranges[rangeHtml] = [start, end];
  291. }
  292. var list = '<ul>';
  293. for (range in this.ranges) {
  294. list += '<li data-range-key="' + range + '">' + range + '</li>';
  295. }
  296. if (this.showCustomRangeLabel) {
  297. list += '<li data-range-key="' + this.locale.customRangeLabel + '">' + this.locale.customRangeLabel + '</li>';
  298. }
  299. list += '</ul>';
  300. this.container.find('.ranges').prepend(list);
  301. }
  302. if (typeof cb === 'function') {
  303. this.callback = cb;
  304. }
  305. if (!this.timePicker) {
  306. this.startDate = this.startDate.startOf('day');
  307. this.endDate = this.endDate.endOf('day');
  308. this.container.find('.calendar-time').hide();
  309. }
  310. //can't be used together for now
  311. if (this.timePicker && this.autoApply)
  312. this.autoApply = false;
  313. if (this.autoApply) {
  314. this.container.addClass('auto-apply');
  315. }
  316. if (typeof options.ranges === 'object')
  317. this.container.addClass('show-ranges');
  318. if (this.singleDatePicker) {
  319. this.container.addClass('single');
  320. this.container.find('.drp-calendar.left').addClass('single');
  321. this.container.find('.drp-calendar.left').show();
  322. this.container.find('.drp-calendar.right').hide();
  323. if (!this.timePicker && this.autoApply) {
  324. this.container.addClass('auto-apply');
  325. }
  326. }
  327. if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) {
  328. this.container.addClass('show-calendar');
  329. }
  330. this.container.addClass('opens' + this.opens);
  331. //apply CSS classes and labels to buttons
  332. this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses);
  333. if (this.applyButtonClasses.length)
  334. this.container.find('.applyBtn').addClass(this.applyButtonClasses);
  335. if (this.cancelButtonClasses.length)
  336. this.container.find('.cancelBtn').addClass(this.cancelButtonClasses);
  337. this.container.find('.applyBtn').html(this.locale.applyLabel);
  338. this.container.find('.cancelBtn').html(this.locale.cancelLabel);
  339. //
  340. // event listeners
  341. //
  342. this.container.find('.drp-calendar')
  343. .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this))
  344. .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this))
  345. .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this))
  346. .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this))
  347. .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this))
  348. .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this))
  349. .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this));
  350. this.container.find('.ranges')
  351. .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this));
  352. this.container.find('.drp-buttons')
  353. .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this))
  354. .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this));
  355. if (this.element.is('input') || this.element.is('button')) {
  356. this.element.on({
  357. 'click.daterangepicker': $.proxy(this.show, this),
  358. 'focus.daterangepicker': $.proxy(this.show, this),
  359. 'keyup.daterangepicker': $.proxy(this.elementChanged, this),
  360. 'keydown.daterangepicker': $.proxy(this.keydown, this) //IE 11 compatibility
  361. });
  362. } else {
  363. this.element.on('click.daterangepicker', $.proxy(this.toggle, this));
  364. this.element.on('keydown.daterangepicker', $.proxy(this.toggle, this));
  365. }
  366. //
  367. // if attached to a text input, set the initial value
  368. //
  369. this.updateElement();
  370. };
  371. DateRangePicker.prototype = {
  372. constructor: DateRangePicker,
  373. setStartDate: function(startDate) {
  374. if (typeof startDate === 'string')
  375. this.startDate = moment(startDate, this.locale.format);
  376. if (typeof startDate === 'object')
  377. this.startDate = moment(startDate);
  378. if (!this.timePicker)
  379. this.startDate = this.startDate.startOf('day');
  380. if (this.timePicker && this.timePickerIncrement)
  381. this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
  382. if (this.minDate && this.startDate.isBefore(this.minDate)) {
  383. this.startDate = this.minDate.clone();
  384. if (this.timePicker && this.timePickerIncrement)
  385. this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
  386. }
  387. if (this.maxDate && this.startDate.isAfter(this.maxDate)) {
  388. this.startDate = this.maxDate.clone();
  389. if (this.timePicker && this.timePickerIncrement)
  390. this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
  391. }
  392. if (!this.isShowing)
  393. this.updateElement();
  394. this.updateMonthsInView();
  395. },
  396. setEndDate: function(endDate) {
  397. if (typeof endDate === 'string')
  398. this.endDate = moment(endDate, this.locale.format);
  399. if (typeof endDate === 'object')
  400. this.endDate = moment(endDate);
  401. if (!this.timePicker)
  402. this.endDate = this.endDate.endOf('day');
  403. if (this.timePicker && this.timePickerIncrement)
  404. this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
  405. if (this.endDate.isBefore(this.startDate))
  406. this.endDate = this.startDate.clone();
  407. if (this.maxDate && this.endDate.isAfter(this.maxDate))
  408. this.endDate = this.maxDate.clone();
  409. if (this.maxSpan && this.startDate.clone().add(this.maxSpan).isBefore(this.endDate))
  410. this.endDate = this.startDate.clone().add(this.maxSpan);
  411. this.previousRightTime = this.endDate.clone();
  412. this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));
  413. if (!this.isShowing)
  414. this.updateElement();
  415. this.updateMonthsInView();
  416. },
  417. isInvalidDate: function() {
  418. return false;
  419. },
  420. isCustomDate: function() {
  421. return false;
  422. },
  423. updateView: function() {
  424. if (this.timePicker) {
  425. this.renderTimePicker('left');
  426. this.renderTimePicker('right');
  427. if (!this.endDate) {
  428. this.container.find('.right .calendar-time select').prop('disabled', true).addClass('disabled');
  429. } else {
  430. this.container.find('.right .calendar-time select').prop('disabled', false).removeClass('disabled');
  431. }
  432. }
  433. if (this.endDate)
  434. this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));
  435. this.updateMonthsInView();
  436. this.updateCalendars();
  437. this.updateFormInputs();
  438. },
  439. updateMonthsInView: function() {
  440. if (this.endDate) {
  441. //if both dates are visible already, do nothing
  442. if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month &&
  443. (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))
  444. &&
  445. (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))
  446. ) {
  447. return;
  448. }
  449. this.leftCalendar.month = this.startDate.clone().date(2);
  450. if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) {
  451. this.rightCalendar.month = this.endDate.clone().date(2);
  452. } else {
  453. this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');
  454. }
  455. } else {
  456. if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) {
  457. this.leftCalendar.month = this.startDate.clone().date(2);
  458. this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');
  459. }
  460. }
  461. if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {
  462. this.rightCalendar.month = this.maxDate.clone().date(2);
  463. this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');
  464. }
  465. },
  466. updateCalendars: function() {
  467. if (this.timePicker) {
  468. var hour, minute, second;
  469. if (this.endDate) {
  470. hour = parseInt(this.container.find('.left .hourselect').val(), 10);
  471. minute = parseInt(this.container.find('.left .minuteselect').val(), 10);
  472. if (isNaN(minute)) {
  473. minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10);
  474. }
  475. second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;
  476. if (!this.timePicker24Hour) {
  477. var ampm = this.container.find('.left .ampmselect').val();
  478. if (ampm === 'PM' && hour < 12)
  479. hour += 12;
  480. if (ampm === 'AM' && hour === 12)
  481. hour = 0;
  482. }
  483. } else {
  484. hour = parseInt(this.container.find('.right .hourselect').val(), 10);
  485. minute = parseInt(this.container.find('.right .minuteselect').val(), 10);
  486. if (isNaN(minute)) {
  487. minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10);
  488. }
  489. second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;
  490. if (!this.timePicker24Hour) {
  491. var ampm = this.container.find('.right .ampmselect').val();
  492. if (ampm === 'PM' && hour < 12)
  493. hour += 12;
  494. if (ampm === 'AM' && hour === 12)
  495. hour = 0;
  496. }
  497. }
  498. this.leftCalendar.month.hour(hour).minute(minute).second(second);
  499. this.rightCalendar.month.hour(hour).minute(minute).second(second);
  500. }
  501. this.renderCalendar('left');
  502. this.renderCalendar('right');
  503. //highlight any predefined range matching the current start and end dates
  504. this.container.find('.ranges li').removeClass('active');
  505. if (this.endDate == null) return;
  506. this.calculateChosenLabel();
  507. },
  508. renderCalendar: function(side) {
  509. //
  510. // Build the matrix of dates that will populate the calendar
  511. //
  512. var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar;
  513. var month = calendar.month.month();
  514. var year = calendar.month.year();
  515. var hour = calendar.month.hour();
  516. var minute = calendar.month.minute();
  517. var second = calendar.month.second();
  518. var daysInMonth = moment([year, month]).daysInMonth();
  519. var firstDay = moment([year, month, 1]);
  520. var lastDay = moment([year, month, daysInMonth]);
  521. var lastMonth = moment(firstDay).subtract(1, 'month').month();
  522. var lastYear = moment(firstDay).subtract(1, 'month').year();
  523. var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();
  524. var dayOfWeek = firstDay.day();
  525. //initialize a 6 rows x 7 columns array for the calendar
  526. var calendar = [];
  527. calendar.firstDay = firstDay;
  528. calendar.lastDay = lastDay;
  529. for (var i = 0; i < 6; i++) {
  530. calendar[i] = [];
  531. }
  532. //populate the calendar with date objects
  533. var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;
  534. if (startDay > daysInLastMonth)
  535. startDay -= 7;
  536. if (dayOfWeek == this.locale.firstDay)
  537. startDay = daysInLastMonth - 6;
  538. var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);
  539. var col, row;
  540. for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) {
  541. if (i > 0 && col % 7 === 0) {
  542. col = 0;
  543. row++;
  544. }
  545. calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);
  546. curDate.hour(12);
  547. if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') {
  548. calendar[row][col] = this.minDate.clone();
  549. }
  550. if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') {
  551. calendar[row][col] = this.maxDate.clone();
  552. }
  553. }
  554. //make the calendar object available to hoverDate/clickDate
  555. if (side == 'left') {
  556. this.leftCalendar.calendar = calendar;
  557. } else {
  558. this.rightCalendar.calendar = calendar;
  559. }
  560. //
  561. // Display the calendar
  562. //
  563. var minDate = side == 'left' ? this.minDate : this.startDate;
  564. var maxDate = this.maxDate;
  565. var selected = side == 'left' ? this.startDate : this.endDate;
  566. var arrow = this.locale.direction == 'ltr' ? {left: 'chevron-left', right: 'chevron-right'} : {left: 'chevron-right', right: 'chevron-left'};
  567. var html = '<table class="table-condensed">';
  568. html += '<thead>';
  569. html += '<tr>';
  570. // add empty cell for week number
  571. if (this.showWeekNumbers || this.showISOWeekNumbers)
  572. html += '<th></th>';
  573. if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) {
  574. html += '<th class="prev available"><span></span></th>';
  575. } else {
  576. html += '<th></th>';
  577. }
  578. var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(" YYYY");
  579. if (this.showDropdowns) {
  580. var currentMonth = calendar[1][1].month();
  581. var currentYear = calendar[1][1].year();
  582. var maxYear = (maxDate && maxDate.year()) || (this.maxYear);
  583. var minYear = (minDate && minDate.year()) || (this.minYear);
  584. var inMinYear = currentYear == minYear;
  585. var inMaxYear = currentYear == maxYear;
  586. var monthHtml = '<select class="monthselect">';
  587. for (var m = 0; m < 12; m++) {
  588. if ((!inMinYear || (minDate && m >= minDate.month())) && (!inMaxYear || (maxDate && m <= maxDate.month()))) {
  589. monthHtml += "<option value='" + m + "'" +
  590. (m === currentMonth ? " selected='selected'" : "") +
  591. ">" + this.locale.monthNames[m] + "</option>";
  592. } else {
  593. monthHtml += "<option value='" + m + "'" +
  594. (m === currentMonth ? " selected='selected'" : "") +
  595. " disabled='disabled'>" + this.locale.monthNames[m] + "</option>";
  596. }
  597. }
  598. monthHtml += "</select>";
  599. var yearHtml = '<select class="yearselect">';
  600. for (var y = minYear; y <= maxYear; y++) {
  601. yearHtml += '<option value="' + y + '"' +
  602. (y === currentYear ? ' selected="selected"' : '') +
  603. '>' + y + '</option>';
  604. }
  605. yearHtml += '</select>';
  606. dateHtml = monthHtml + yearHtml;
  607. }
  608. html += '<th colspan="5" class="month">' + dateHtml + '</th>';
  609. if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) {
  610. html += '<th class="next available"><span></span></th>';
  611. } else {
  612. html += '<th></th>';
  613. }
  614. html += '</tr>';
  615. html += '<tr>';
  616. // add week number label
  617. if (this.showWeekNumbers || this.showISOWeekNumbers)
  618. html += '<th class="week">' + this.locale.weekLabel + '</th>';
  619. $.each(this.locale.daysOfWeek, function(index, dayOfWeek) {
  620. html += '<th>' + dayOfWeek + '</th>';
  621. });
  622. html += '</tr>';
  623. html += '</thead>';
  624. html += '<tbody>';
  625. //adjust maxDate to reflect the maxSpan setting in order to
  626. //grey out end dates beyond the maxSpan
  627. if (this.endDate == null && this.maxSpan) {
  628. var maxLimit = this.startDate.clone().add(this.maxSpan).endOf('day');
  629. if (!maxDate || maxLimit.isBefore(maxDate)) {
  630. maxDate = maxLimit;
  631. }
  632. }
  633. for (var row = 0; row < 6; row++) {
  634. html += '<tr>';
  635. // add week number
  636. if (this.showWeekNumbers)
  637. html += '<td class="week">' + calendar[row][0].week() + '</td>';
  638. else if (this.showISOWeekNumbers)
  639. html += '<td class="week">' + calendar[row][0].isoWeek() + '</td>';
  640. for (var col = 0; col < 7; col++) {
  641. var classes = [];
  642. //highlight today's date
  643. if (calendar[row][col].isSame(new Date(), "day"))
  644. classes.push('today');
  645. //highlight weekends
  646. if (calendar[row][col].isoWeekday() > 5)
  647. classes.push('weekend');
  648. //grey out the dates in other months displayed at beginning and end of this calendar
  649. if (calendar[row][col].month() != calendar[1][1].month())
  650. classes.push('off', 'ends');
  651. //don't allow selection of dates before the minimum date
  652. if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day'))
  653. classes.push('off', 'disabled');
  654. //don't allow selection of dates after the maximum date
  655. if (maxDate && calendar[row][col].isAfter(maxDate, 'day'))
  656. classes.push('off', 'disabled');
  657. //don't allow selection of date if a custom function decides it's invalid
  658. if (this.isInvalidDate(calendar[row][col]))
  659. classes.push('off', 'disabled');
  660. //highlight the currently selected start date
  661. if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD'))
  662. classes.push('active', 'start-date');
  663. //highlight the currently selected end date
  664. if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD'))
  665. classes.push('active', 'end-date');
  666. //highlight dates in-between the selected dates
  667. if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate)
  668. classes.push('in-range');
  669. //apply custom classes for this date
  670. var isCustom = this.isCustomDate(calendar[row][col]);
  671. if (isCustom !== false) {
  672. if (typeof isCustom === 'string')
  673. classes.push(isCustom);
  674. else
  675. Array.prototype.push.apply(classes, isCustom);
  676. }
  677. var cname = '', disabled = false;
  678. for (var i = 0; i < classes.length; i++) {
  679. cname += classes[i] + ' ';
  680. if (classes[i] == 'disabled')
  681. disabled = true;
  682. }
  683. if (!disabled)
  684. cname += 'available';
  685. html += '<td class="' + cname.replace(/^\s+|\s+$/g, '') + '" data-title="' + 'r' + row + 'c' + col + '">' + calendar[row][col].date() + '</td>';
  686. }
  687. html += '</tr>';
  688. }
  689. html += '</tbody>';
  690. html += '</table>';
  691. this.container.find('.drp-calendar.' + side + ' .calendar-table').html(html);
  692. },
  693. renderTimePicker: function(side) {
  694. // Don't bother updating the time picker if it's currently disabled
  695. // because an end date hasn't been clicked yet
  696. if (side == 'right' && !this.endDate) return;
  697. var html, selected, minDate, maxDate = this.maxDate;
  698. if (this.maxSpan && (!this.maxDate || this.startDate.clone().add(this.maxSpan).isBefore(this.maxDate)))
  699. maxDate = this.startDate.clone().add(this.maxSpan);
  700. if (side == 'left') {
  701. selected = this.startDate.clone();
  702. minDate = this.minDate;
  703. } else if (side == 'right') {
  704. selected = this.endDate.clone();
  705. minDate = this.startDate;
  706. //Preserve the time already selected
  707. var timeSelector = this.container.find('.drp-calendar.right .calendar-time');
  708. if (timeSelector.html() != '') {
  709. selected.hour(!isNaN(selected.hour()) ? selected.hour() : timeSelector.find('.hourselect option:selected').val());
  710. selected.minute(!isNaN(selected.minute()) ? selected.minute() : timeSelector.find('.minuteselect option:selected').val());
  711. selected.second(!isNaN(selected.second()) ? selected.second() : timeSelector.find('.secondselect option:selected').val());
  712. if (!this.timePicker24Hour) {
  713. var ampm = timeSelector.find('.ampmselect option:selected').val();
  714. if (ampm === 'PM' && selected.hour() < 12)
  715. selected.hour(selected.hour() + 12);
  716. if (ampm === 'AM' && selected.hour() === 12)
  717. selected.hour(0);
  718. }
  719. }
  720. if (selected.isBefore(this.startDate))
  721. selected = this.startDate.clone();
  722. if (maxDate && selected.isAfter(maxDate))
  723. selected = maxDate.clone();
  724. }
  725. //
  726. // hours
  727. //
  728. html = '<select class="hourselect">';
  729. var start = this.timePicker24Hour ? 0 : 1;
  730. var end = this.timePicker24Hour ? 23 : 12;
  731. for (var i = start; i <= end; i++) {
  732. var i_in_24 = i;
  733. if (!this.timePicker24Hour)
  734. i_in_24 = selected.hour() >= 12 ? (i == 12 ? 12 : i + 12) : (i == 12 ? 0 : i);
  735. var time = selected.clone().hour(i_in_24);
  736. var disabled = false;
  737. if (minDate && time.minute(59).isBefore(minDate))
  738. disabled = true;
  739. if (maxDate && time.minute(0).isAfter(maxDate))
  740. disabled = true;
  741. if (i_in_24 == selected.hour() && !disabled) {
  742. html += '<option value="' + i + '" selected="selected">' + i + '</option>';
  743. } else if (disabled) {
  744. html += '<option value="' + i + '" disabled="disabled" class="disabled">' + i + '</option>';
  745. } else {
  746. html += '<option value="' + i + '">' + i + '</option>';
  747. }
  748. }
  749. html += '</select> ';
  750. //
  751. // minutes
  752. //
  753. html += ': <select class="minuteselect">';
  754. for (var i = 0; i < 60; i += this.timePickerIncrement) {
  755. var padded = i < 10 ? '0' + i : i;
  756. var time = selected.clone().minute(i);
  757. var disabled = false;
  758. if (minDate && time.second(59).isBefore(minDate))
  759. disabled = true;
  760. if (maxDate && time.second(0).isAfter(maxDate))
  761. disabled = true;
  762. if (selected.minute() == i && !disabled) {
  763. html += '<option value="' + i + '" selected="selected">' + padded + '</option>';
  764. } else if (disabled) {
  765. html += '<option value="' + i + '" disabled="disabled" class="disabled">' + padded + '</option>';
  766. } else {
  767. html += '<option value="' + i + '">' + padded + '</option>';
  768. }
  769. }
  770. html += '</select> ';
  771. //
  772. // seconds
  773. //
  774. if (this.timePickerSeconds) {
  775. html += ': <select class="secondselect">';
  776. for (var i = 0; i < 60; i++) {
  777. var padded = i < 10 ? '0' + i : i;
  778. var time = selected.clone().second(i);
  779. var disabled = false;
  780. if (minDate && time.isBefore(minDate))
  781. disabled = true;
  782. if (maxDate && time.isAfter(maxDate))
  783. disabled = true;
  784. if (selected.second() == i && !disabled) {
  785. html += '<option value="' + i + '" selected="selected">' + padded + '</option>';
  786. } else if (disabled) {
  787. html += '<option value="' + i + '" disabled="disabled" class="disabled">' + padded + '</option>';
  788. } else {
  789. html += '<option value="' + i + '">' + padded + '</option>';
  790. }
  791. }
  792. html += '</select> ';
  793. }
  794. //
  795. // AM/PM
  796. //
  797. if (!this.timePicker24Hour) {
  798. html += '<select class="ampmselect">';
  799. var am_html = '';
  800. var pm_html = '';
  801. if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate))
  802. am_html = ' disabled="disabled" class="disabled"';
  803. if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate))
  804. pm_html = ' disabled="disabled" class="disabled"';
  805. if (selected.hour() >= 12) {
  806. html += '<option value="AM"' + am_html + '>AM</option><option value="PM" selected="selected"' + pm_html + '>PM</option>';
  807. } else {
  808. html += '<option value="AM" selected="selected"' + am_html + '>AM</option><option value="PM"' + pm_html + '>PM</option>';
  809. }
  810. html += '</select>';
  811. }
  812. this.container.find('.drp-calendar.' + side + ' .calendar-time').html(html);
  813. },
  814. updateFormInputs: function() {
  815. if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) {
  816. this.container.find('button.applyBtn').prop('disabled', false);
  817. } else {
  818. this.container.find('button.applyBtn').prop('disabled', true);
  819. }
  820. },
  821. move: function() {
  822. var parentOffset = { top: 0, left: 0 },
  823. containerTop,
  824. drops = this.drops;
  825. var parentRightEdge = $(window).width();
  826. if (!this.parentEl.is('body')) {
  827. parentOffset = {
  828. top: this.parentEl.offset().top - this.parentEl.scrollTop(),
  829. left: this.parentEl.offset().left - this.parentEl.scrollLeft()
  830. };
  831. parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left;
  832. }
  833. switch (drops) {
  834. case 'auto':
  835. containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;
  836. if (containerTop + this.container.outerHeight() >= this.parentEl[0].scrollHeight) {
  837. containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;
  838. drops = 'up';
  839. }
  840. break;
  841. case 'up':
  842. containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;
  843. break;
  844. default:
  845. containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;
  846. break;
  847. }
  848. // Force the container to it's actual width
  849. this.container.css({
  850. top: 0,
  851. left: 0,
  852. right: 'auto'
  853. });
  854. var containerWidth = this.container.outerWidth();
  855. this.container.toggleClass('drop-up', drops == 'up');
  856. if (this.opens == 'left') {
  857. var containerRight = parentRightEdge - this.element.offset().left - this.element.outerWidth();
  858. if (containerWidth + containerRight > $(window).width()) {
  859. this.container.css({
  860. top: containerTop,
  861. right: 'auto',
  862. left: 9
  863. });
  864. } else {
  865. this.container.css({
  866. top: containerTop,
  867. right: containerRight,
  868. left: 'auto'
  869. });
  870. }
  871. } else if (this.opens == 'center') {
  872. var containerLeft = this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2
  873. - containerWidth / 2;
  874. if (containerLeft < 0) {
  875. this.container.css({
  876. top: containerTop,
  877. right: 'auto',
  878. left: 9
  879. });
  880. } else if (containerLeft + containerWidth > $(window).width()) {
  881. this.container.css({
  882. top: containerTop,
  883. left: 'auto',
  884. right: 0
  885. });
  886. } else {
  887. this.container.css({
  888. top: containerTop,
  889. left: containerLeft,
  890. right: 'auto'
  891. });
  892. }
  893. } else {
  894. var containerLeft = this.element.offset().left - parentOffset.left;
  895. if (containerLeft + containerWidth > $(window).width()) {
  896. this.container.css({
  897. top: containerTop,
  898. left: 'auto',
  899. right: 0
  900. });
  901. } else {
  902. this.container.css({
  903. top: containerTop,
  904. left: containerLeft,
  905. right: 'auto'
  906. });
  907. }
  908. }
  909. },
  910. show: function(e) {
  911. if (this.isShowing) return;
  912. // Create a click proxy that is private to this instance of datepicker, for unbinding
  913. this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this);
  914. // Bind global datepicker mousedown for hiding and
  915. $(document)
  916. .on('mousedown.daterangepicker', this._outsideClickProxy)
  917. // also support mobile devices
  918. .on('touchend.daterangepicker', this._outsideClickProxy)
  919. // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them
  920. .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy)
  921. // and also close when focus changes to outside the picker (eg. tabbing between controls)
  922. .on('focusin.daterangepicker', this._outsideClickProxy);
  923. // Reposition the picker if the window is resized while it's open
  924. $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this));
  925. this.oldStartDate = this.startDate.clone();
  926. this.oldEndDate = this.endDate.clone();
  927. this.previousRightTime = this.endDate.clone();
  928. this.updateView();
  929. this.container.show();
  930. this.move();
  931. this.element.trigger('show.daterangepicker', this);
  932. this.isShowing = true;
  933. },
  934. hide: function(e) {
  935. if (!this.isShowing) return;
  936. //incomplete date selection, revert to last values
  937. if (!this.endDate) {
  938. this.startDate = this.oldStartDate.clone();
  939. this.endDate = this.oldEndDate.clone();
  940. }
  941. //if a new date range was selected, invoke the user callback function
  942. if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))
  943. this.callback(this.startDate.clone(), this.endDate.clone(), this.chosenLabel);
  944. //if picker is attached to a text input, update it
  945. this.updateElement();
  946. $(document).off('.daterangepicker');
  947. $(window).off('.daterangepicker');
  948. this.container.hide();
  949. this.element.trigger('hide.daterangepicker', this);
  950. this.isShowing = false;
  951. },
  952. toggle: function(e) {
  953. if (this.isShowing) {
  954. this.hide();
  955. } else {
  956. this.show();
  957. }
  958. },
  959. outsideClick: function(e) {
  960. var target = $(e.target);
  961. // if the page is clicked anywhere except within the daterangerpicker/button
  962. // itself then call this.hide()
  963. if (
  964. // ie modal dialog fix
  965. e.type == "focusin" ||
  966. target.closest(this.element).length ||
  967. target.closest(this.container).length ||
  968. target.closest('.calendar-table').length
  969. ) return;
  970. this.hide();
  971. this.element.trigger('outsideClick.daterangepicker', this);
  972. },
  973. showCalendars: function() {
  974. this.container.addClass('show-calendar');
  975. this.move();
  976. this.element.trigger('showCalendar.daterangepicker', this);
  977. },
  978. hideCalendars: function() {
  979. this.container.removeClass('show-calendar');
  980. this.element.trigger('hideCalendar.daterangepicker', this);
  981. },
  982. clickRange: function(e) {
  983. var label = e.target.getAttribute('data-range-key');
  984. this.chosenLabel = label;
  985. if (label == this.locale.customRangeLabel) {
  986. this.showCalendars();
  987. } else {
  988. var dates = this.ranges[label];
  989. this.startDate = dates[0];
  990. this.endDate = dates[1];
  991. if (!this.timePicker) {
  992. this.startDate.startOf('day');
  993. this.endDate.endOf('day');
  994. }
  995. if (!this.alwaysShowCalendars)
  996. this.hideCalendars();
  997. this.clickApply();
  998. }
  999. },
  1000. clickPrev: function(e) {
  1001. var cal = $(e.target).parents('.drp-calendar');
  1002. if (cal.hasClass('left')) {
  1003. this.leftCalendar.month.subtract(1, 'month');
  1004. if (this.linkedCalendars)
  1005. this.rightCalendar.month.subtract(1, 'month');
  1006. } else {
  1007. this.rightCalendar.month.subtract(1, 'month');
  1008. }
  1009. this.updateCalendars();
  1010. },
  1011. clickNext: function(e) {
  1012. var cal = $(e.target).parents('.drp-calendar');
  1013. if (cal.hasClass('left')) {
  1014. this.leftCalendar.month.add(1, 'month');
  1015. } else {
  1016. this.rightCalendar.month.add(1, 'month');
  1017. if (this.linkedCalendars)
  1018. this.leftCalendar.month.add(1, 'month');
  1019. }
  1020. this.updateCalendars();
  1021. },
  1022. hoverDate: function(e) {
  1023. //ignore dates that can't be selected
  1024. if (!$(e.target).hasClass('available')) return;
  1025. var title = $(e.target).attr('data-title');
  1026. var row = title.substr(1, 1);
  1027. var col = title.substr(3, 1);
  1028. var cal = $(e.target).parents('.drp-calendar');
  1029. var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];
  1030. //highlight the dates between the start date and the date being hovered as a potential end date
  1031. var leftCalendar = this.leftCalendar;
  1032. var rightCalendar = this.rightCalendar;
  1033. var startDate = this.startDate;
  1034. if (!this.endDate) {
  1035. this.container.find('.drp-calendar tbody td').each(function(index, el) {
  1036. //skip week numbers, only look at dates
  1037. if ($(el).hasClass('week')) return;
  1038. var title = $(el).attr('data-title');
  1039. var row = title.substr(1, 1);
  1040. var col = title.substr(3, 1);
  1041. var cal = $(el).parents('.drp-calendar');
  1042. var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col];
  1043. if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) {
  1044. $(el).addClass('in-range');
  1045. } else {
  1046. $(el).removeClass('in-range');
  1047. }
  1048. });
  1049. }
  1050. },
  1051. clickDate: function(e) {
  1052. if (!$(e.target).hasClass('available')) return;
  1053. var title = $(e.target).attr('data-title');
  1054. var row = title.substr(1, 1);
  1055. var col = title.substr(3, 1);
  1056. var cal = $(e.target).parents('.drp-calendar');
  1057. var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];
  1058. //
  1059. // this function needs to do a few things:
  1060. // * alternate between selecting a start and end date for the range,
  1061. // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date
  1062. // * if autoapply is enabled, and an end date was chosen, apply the selection
  1063. // * if single date picker mode, and time picker isn't enabled, apply the selection immediately
  1064. // * if one of the inputs above the calendars was focused, cancel that manual input
  1065. //
  1066. if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start
  1067. if (this.timePicker) {
  1068. var hour = parseInt(this.container.find('.left .hourselect').val(), 10);
  1069. if (!this.timePicker24Hour) {
  1070. var ampm = this.container.find('.left .ampmselect').val();
  1071. if (ampm === 'PM' && hour < 12)
  1072. hour += 12;
  1073. if (ampm === 'AM' && hour === 12)
  1074. hour = 0;
  1075. }
  1076. var minute = parseInt(this.container.find('.left .minuteselect').val(), 10);
  1077. if (isNaN(minute)) {
  1078. minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10);
  1079. }
  1080. var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;
  1081. date = date.clone().hour(hour).minute(minute).second(second);
  1082. }
  1083. this.endDate = null;
  1084. this.setStartDate(date.clone());
  1085. } else if (!this.endDate && date.isBefore(this.startDate)) {
  1086. //special case: clicking the same date for start/end,
  1087. //but the time of the end date is before the start date
  1088. this.setEndDate(this.startDate.clone());
  1089. } else { // picking end
  1090. if (this.timePicker) {
  1091. var hour = parseInt(this.container.find('.right .hourselect').val(), 10);
  1092. if (!this.timePicker24Hour) {
  1093. var ampm = this.container.find('.right .ampmselect').val();
  1094. if (ampm === 'PM' && hour < 12)
  1095. hour += 12;
  1096. if (ampm === 'AM' && hour === 12)
  1097. hour = 0;
  1098. }
  1099. var minute = parseInt(this.container.find('.right .minuteselect').val(), 10);
  1100. if (isNaN(minute)) {
  1101. minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10);
  1102. }
  1103. var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;
  1104. date = date.clone().hour(hour).minute(minute).second(second);
  1105. }
  1106. this.setEndDate(date.clone());
  1107. if (this.autoApply) {
  1108. this.calculateChosenLabel();
  1109. this.clickApply();
  1110. }
  1111. }
  1112. if (this.singleDatePicker) {
  1113. this.setEndDate(this.startDate);
  1114. if (!this.timePicker && this.autoApply)
  1115. this.clickApply();
  1116. }
  1117. this.updateView();
  1118. //This is to cancel the blur event handler if the mouse was in one of the inputs
  1119. e.stopPropagation();
  1120. },
  1121. calculateChosenLabel: function () {
  1122. var customRange = true;
  1123. var i = 0;
  1124. for (var range in this.ranges) {
  1125. if (this.timePicker) {
  1126. var format = this.timePickerSeconds ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD HH:mm";
  1127. //ignore times when comparing dates if time picker seconds is not enabled
  1128. if (this.startDate.format(format) == this.ranges[range][0].format(format) && this.endDate.format(format) == this.ranges[range][1].format(format)) {
  1129. customRange = false;
  1130. this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');
  1131. break;
  1132. }
  1133. } else {
  1134. //ignore times when comparing dates if time picker is not enabled
  1135. if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {
  1136. customRange = false;
  1137. this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key');
  1138. break;
  1139. }
  1140. }
  1141. i++;
  1142. }
  1143. if (customRange) {
  1144. if (this.showCustomRangeLabel) {
  1145. this.chosenLabel = this.container.find('.ranges li:last').addClass('active').attr('data-range-key');
  1146. } else {
  1147. this.chosenLabel = null;
  1148. }
  1149. this.showCalendars();
  1150. }
  1151. },
  1152. clickApply: function(e) {
  1153. this.hide();
  1154. this.element.trigger('apply.daterangepicker', this);
  1155. },
  1156. clickCancel: function(e) {
  1157. this.startDate = this.oldStartDate;
  1158. this.endDate = this.oldEndDate;
  1159. this.hide();
  1160. this.element.trigger('cancel.daterangepicker', this);
  1161. },
  1162. monthOrYearChanged: function(e) {
  1163. var isLeft = $(e.target).closest('.drp-calendar').hasClass('left'),
  1164. leftOrRight = isLeft ? 'left' : 'right',
  1165. cal = this.container.find('.drp-calendar.'+leftOrRight);
  1166. // Month must be Number for new moment versions
  1167. var month = parseInt(cal.find('.monthselect').val(), 10);
  1168. var year = cal.find('.yearselect').val();
  1169. if (!isLeft) {
  1170. if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) {
  1171. month = this.startDate.month();
  1172. year = this.startDate.year();
  1173. }
  1174. }
  1175. if (this.minDate) {
  1176. if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) {
  1177. month = this.minDate.month();
  1178. year = this.minDate.year();
  1179. }
  1180. }
  1181. if (this.maxDate) {
  1182. if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) {
  1183. month = this.maxDate.month();
  1184. year = this.maxDate.year();
  1185. }
  1186. }
  1187. if (isLeft) {
  1188. this.leftCalendar.month.month(month).year(year);
  1189. if (this.linkedCalendars)
  1190. this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');
  1191. } else {
  1192. this.rightCalendar.month.month(month).year(year);
  1193. if (this.linkedCalendars)
  1194. this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');
  1195. }
  1196. this.updateCalendars();
  1197. },
  1198. timeChanged: function(e) {
  1199. var cal = $(e.target).closest('.drp-calendar'),
  1200. isLeft = cal.hasClass('left');
  1201. var hour = parseInt(cal.find('.hourselect').val(), 10);
  1202. var minute = parseInt(cal.find('.minuteselect').val(), 10);
  1203. if (isNaN(minute)) {
  1204. minute = parseInt(cal.find('.minuteselect option:last').val(), 10);
  1205. }
  1206. var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0;
  1207. if (!this.timePicker24Hour) {
  1208. var ampm = cal.find('.ampmselect').val();
  1209. if (ampm === 'PM' && hour < 12)
  1210. hour += 12;
  1211. if (ampm === 'AM' && hour === 12)
  1212. hour = 0;
  1213. }
  1214. if (isLeft) {
  1215. var start = this.startDate.clone();
  1216. start.hour(hour);
  1217. start.minute(minute);
  1218. start.second(second);
  1219. this.setStartDate(start);
  1220. if (this.singleDatePicker) {
  1221. this.endDate = this.startDate.clone();
  1222. } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {
  1223. this.setEndDate(start.clone());
  1224. }
  1225. } else if (this.endDate) {
  1226. var end = this.endDate.clone();
  1227. end.hour(hour);
  1228. end.minute(minute);
  1229. end.second(second);
  1230. this.setEndDate(end);
  1231. }
  1232. //update the calendars so all clickable dates reflect the new time component
  1233. this.updateCalendars();
  1234. //update the form inputs above the calendars with the new time
  1235. this.updateFormInputs();
  1236. //re-render the time pickers because changing one selection can affect what's enabled in another
  1237. this.renderTimePicker('left');
  1238. this.renderTimePicker('right');
  1239. },
  1240. elementChanged: function() {
  1241. if (!this.element.is('input')) return;
  1242. if (!this.element.val().length) return;
  1243. var dateString = this.element.val().split(this.locale.separator),
  1244. start = null,
  1245. end = null;
  1246. if (dateString.length === 2) {
  1247. start = moment(dateString[0], this.locale.format);
  1248. end = moment(dateString[1], this.locale.format);
  1249. }
  1250. if (this.singleDatePicker || start === null || end === null) {
  1251. start = moment(this.element.val(), this.locale.format);
  1252. end = start;
  1253. }
  1254. if (!start.isValid() || !end.isValid()) return;
  1255. this.setStartDate(start);
  1256. this.setEndDate(end);
  1257. this.updateView();
  1258. },
  1259. keydown: function(e) {
  1260. //hide on tab or enter
  1261. if ((e.keyCode === 9) || (e.keyCode === 13)) {
  1262. this.hide();
  1263. }
  1264. //hide on esc and prevent propagation
  1265. if (e.keyCode === 27) {
  1266. e.preventDefault();
  1267. e.stopPropagation();
  1268. this.hide();
  1269. }
  1270. },
  1271. updateElement: function() {
  1272. if (this.element.is('input') && this.autoUpdateInput) {
  1273. var newValue = this.startDate.format(this.locale.format);
  1274. if (!this.singleDatePicker) {
  1275. newValue += this.locale.separator + this.endDate.format(this.locale.format);
  1276. }
  1277. if (newValue !== this.element.val()) {
  1278. this.element.val(newValue).trigger('change');
  1279. }
  1280. }
  1281. },
  1282. remove: function() {
  1283. this.container.remove();
  1284. this.element.off('.daterangepicker');
  1285. this.element.removeData();
  1286. }
  1287. };
  1288. $.fn.daterangepicker = function(options, callback) {
  1289. var implementOptions = $.extend(true, {}, $.fn.daterangepicker.defaultOptions, options);
  1290. this.each(function() {
  1291. var el = $(this);
  1292. if (el.data('daterangepicker'))
  1293. el.data('daterangepicker').remove();
  1294. el.data('daterangepicker', new DateRangePicker(el, implementOptions, callback));
  1295. });
  1296. return this;
  1297. };
  1298. return DateRangePicker;
  1299. }));
  1300. /***/ }),
  1301. /***/ "./node_modules/bootstrap/dist/js/bootstrap.min.js":
  1302. /*!*********************************************************!*\
  1303. !*** ./node_modules/bootstrap/dist/js/bootstrap.min.js ***!
  1304. \*********************************************************/
  1305. /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
  1306. /*!
  1307. * Bootstrap v4.6.0 (https://getbootstrap.com/)
  1308. * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
  1309. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  1310. */
  1311. !function(t,e){ true?e(exports,__webpack_require__(/*! jquery */ "./node_modules/jquery/src/jquery.js"),__webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js")):0}(this,(function(t,e,n){"use strict";function i(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var o=i(e),a=i(n);function s(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function l(t,e,n){return e&&s(t.prototype,e),n&&s(t,n),t}function r(){return(r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t}).apply(this,arguments)}function u(t){var e=this,n=!1;return o.default(this).one(d.TRANSITION_END,(function(){n=!0})),setTimeout((function(){n||d.triggerTransitionEnd(e)}),t),this}var d={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=o.default(t).css("transition-duration"),n=o.default(t).css("transition-delay"),i=parseFloat(e),a=parseFloat(n);return i||a?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){o.default(t).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],a=e[i],s=a&&d.isElement(a)?"element":null===(l=a)||"undefined"==typeof l?""+l:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var l},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?d.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof o.default)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=o.default.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};d.jQueryDetection(),o.default.fn.emulateTransitionEnd=u,o.default.event.special[d.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(t){if(o.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var f="alert",c=o.default.fn[f],h=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){o.default.removeData(this._element,"bs.alert"),this._element=null},e._getRootElement=function(t){var e=d.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=o.default(t).closest(".alert")[0]),n},e._triggerCloseEvent=function(t){var e=o.default.Event("close.bs.alert");return o.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(o.default(t).removeClass("show"),o.default(t).hasClass("fade")){var n=d.getTransitionDurationFromElement(t);o.default(t).one(d.TRANSITION_END,(function(n){return e._destroyElement(t,n)})).emulateTransitionEnd(n)}else this._destroyElement(t)},e._destroyElement=function(t){o.default(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.alert");i||(i=new t(this),n.data("bs.alert",i)),"close"===e&&i[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();o.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',h._handleDismiss(new h)),o.default.fn[f]=h._jQueryInterface,o.default.fn[f].Constructor=h,o.default.fn[f].noConflict=function(){return o.default.fn[f]=c,h._jQueryInterface};var g=o.default.fn.button,m=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=o.default(this._element).closest('[data-toggle="buttons"]')[0];if(n){var i=this._element.querySelector('input:not([type="hidden"])');if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains("active"))t=!1;else{var a=n.querySelector(".active");a&&o.default(a).removeClass("active")}t&&("checkbox"!==i.type&&"radio"!==i.type||(i.checked=!this._element.classList.contains("active")),this.shouldAvoidTriggerChange||o.default(i).trigger("change")),i.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),t&&o.default(this._element).toggleClass("active"))},e.dispose=function(){o.default.removeData(this._element,"bs.button"),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var i=o.default(this),a=i.data("bs.button");a||(a=new t(this),i.data("bs.button",a)),a.shouldAvoidTriggerChange=n,"toggle"===e&&a[e]()}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();o.default(document).on("click.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=t.target,n=e;if(o.default(e).hasClass("btn")||(e=o.default(e).closest(".btn")[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var i=e.querySelector('input:not([type="hidden"])');if(i&&(i.hasAttribute("disabled")||i.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||m._jQueryInterface.call(o.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',(function(t){var e=o.default(t.target).closest(".btn")[0];o.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),o.default(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector('input:not([type="hidden"])');o.checked||o.hasAttribute("checked")?i.classList.add("active"):i.classList.remove("active")}for(var a=0,s=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;a<s;a++){var l=t[a];"true"===l.getAttribute("aria-pressed")?l.classList.add("active"):l.classList.remove("active")}})),o.default.fn.button=m._jQueryInterface,o.default.fn.button.Constructor=m,o.default.fn.button.noConflict=function(){return o.default.fn.button=g,m._jQueryInterface};var p="carousel",_=".bs.carousel",v=o.default.fn[p],b={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},E={TOUCH:"touch",PEN:"pen"},w=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=t.prototype;return e.next=function(){this._isSliding||this._slide("next")},e.nextWhenVisible=function(){var t=o.default(this._element);!document.hidden&&t.is(":visible")&&"hidden"!==t.css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide("prev")},e.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(d.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(t){var e=this;this._activeElement=this._element.querySelector(".active.carousel-item");var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)o.default(this._element).one("slid.bs.carousel",(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var i=t>n?"next":"prev";this._slide(i,this._items[t])}},e.dispose=function(){o.default(this._element).off(_),o.default.removeData(this._element,"bs.carousel"),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=r({},b,t),d.typeCheckConfig(p,t,y),t},e._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&o.default(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&o.default(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var e=function(e){t._pointerEvent&&E[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&E[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};o.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(o.default(this._element).on("pointerdown.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("pointerup.bs.carousel",(function(t){return n(t)})),this._element.classList.add("pointer-event")):(o.default(this._element).on("touchstart.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("touchmove.bs.carousel",(function(e){return function(e){e.originalEvent.touches&&e.originalEvent.touches.length>1?t.touchDeltaX=0:t.touchDeltaX=e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),o.default(this._element).on("touchend.bs.carousel",(function(t){return n(t)})))}},e._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},e._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},e._getItemByDirection=function(t,e){var n="next"===t,i="prev"===t,o=this._getItemIndex(e),a=this._items.length-1;if((i&&0===o||n&&o===a)&&!this._config.wrap)return e;var s=(o+("prev"===t?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(".active.carousel-item")),a=o.default.Event("slide.bs.carousel",{relatedTarget:t,direction:e,from:i,to:n});return o.default(this._element).trigger(a),a},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));o.default(e).removeClass("active");var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&o.default(n).addClass("active")}},e._updateInterval=function(){var t=this._activeElement||this._element.querySelector(".active.carousel-item");if(t){var e=parseInt(t.getAttribute("data-interval"),10);e?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=e):this._config.interval=this._config.defaultInterval||this._config.interval}},e._slide=function(t,e){var n,i,a,s=this,l=this._element.querySelector(".active.carousel-item"),r=this._getItemIndex(l),u=e||l&&this._getItemByDirection(t,l),f=this._getItemIndex(u),c=Boolean(this._interval);if("next"===t?(n="carousel-item-left",i="carousel-item-next",a="left"):(n="carousel-item-right",i="carousel-item-prev",a="right"),u&&o.default(u).hasClass("active"))this._isSliding=!1;else if(!this._triggerSlideEvent(u,a).isDefaultPrevented()&&l&&u){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(u),this._activeElement=u;var h=o.default.Event("slid.bs.carousel",{relatedTarget:u,direction:a,from:r,to:f});if(o.default(this._element).hasClass("slide")){o.default(u).addClass(i),d.reflow(u),o.default(l).addClass(n),o.default(u).addClass(n);var g=d.getTransitionDurationFromElement(l);o.default(l).one(d.TRANSITION_END,(function(){o.default(u).removeClass(n+" "+i).addClass("active"),o.default(l).removeClass("active "+i+" "+n),s._isSliding=!1,setTimeout((function(){return o.default(s._element).trigger(h)}),0)})).emulateTransitionEnd(g)}else o.default(l).removeClass("active"),o.default(u).addClass("active"),this._isSliding=!1,o.default(this._element).trigger(h);c&&this.cycle()}},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.carousel"),i=r({},b,o.default(this).data());"object"==typeof e&&(i=r({},i,e));var a="string"==typeof e?e:i.slide;if(n||(n=new t(this,i),o.default(this).data("bs.carousel",n)),"number"==typeof e)n.to(e);else if("string"==typeof a){if("undefined"==typeof n[a])throw new TypeError('No method named "'+a+'"');n[a]()}else i.interval&&i.ride&&(n.pause(),n.cycle())}))},t._dataApiClickHandler=function(e){var n=d.getSelectorFromElement(this);if(n){var i=o.default(n)[0];if(i&&o.default(i).hasClass("carousel")){var a=r({},o.default(i).data(),o.default(this).data()),s=this.getAttribute("data-slide-to");s&&(a.interval=!1),t._jQueryInterface.call(o.default(i),a),s&&o.default(i).data("bs.carousel").to(s),e.preventDefault()}}},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return b}}]),t}();o.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",w._dataApiClickHandler),o.default(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),e=0,n=t.length;e<n;e++){var i=o.default(t[e]);w._jQueryInterface.call(i,i.data())}})),o.default.fn[p]=w._jQueryInterface,o.default.fn[p].Constructor=w,o.default.fn[p].noConflict=function(){return o.default.fn[p]=v,w._jQueryInterface};var T="collapse",C=o.default.fn[T],S={toggle:!0,parent:""},N={toggle:"boolean",parent:"(string|element)"},D=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=n.length;i<o;i++){var a=n[i],s=d.getSelectorFromElement(a),l=[].slice.call(document.querySelectorAll(s)).filter((function(e){return e===t}));null!==s&&l.length>0&&(this._selector=s,this._triggerArray.push(a))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=t.prototype;return e.toggle=function(){o.default(this._element).hasClass("show")?this.hide():this.show()},e.show=function(){var e,n,i=this;if(!this._isTransitioning&&!o.default(this._element).hasClass("show")&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof i._config.parent?t.getAttribute("data-parent")===i._config.parent:t.classList.contains("collapse")}))).length&&(e=null),!(e&&(n=o.default(e).not(this._selector).data("bs.collapse"))&&n._isTransitioning))){var a=o.default.Event("show.bs.collapse");if(o.default(this._element).trigger(a),!a.isDefaultPrevented()){e&&(t._jQueryInterface.call(o.default(e).not(this._selector),"hide"),n||o.default(e).data("bs.collapse",null));var s=this._getDimension();o.default(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[s]=0,this._triggerArray.length&&o.default(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var l="scroll"+(s[0].toUpperCase()+s.slice(1)),r=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,(function(){o.default(i._element).removeClass("collapsing").addClass("collapse show"),i._element.style[s]="",i.setTransitioning(!1),o.default(i._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(r),this._element.style[s]=this._element[l]+"px"}}},e.hide=function(){var t=this;if(!this._isTransitioning&&o.default(this._element).hasClass("show")){var e=o.default.Event("hide.bs.collapse");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",d.reflow(this._element),o.default(this._element).addClass("collapsing").removeClass("collapse show");var i=this._triggerArray.length;if(i>0)for(var a=0;a<i;a++){var s=this._triggerArray[a],l=d.getSelectorFromElement(s);if(null!==l)o.default([].slice.call(document.querySelectorAll(l))).hasClass("show")||o.default(s).addClass("collapsed").attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var r=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,(function(){t.setTransitioning(!1),o.default(t._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(r)}}},e.setTransitioning=function(t){this._isTransitioning=t},e.dispose=function(){o.default.removeData(this._element,"bs.collapse"),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(t){return(t=r({},S,t)).toggle=Boolean(t.toggle),d.typeCheckConfig(T,t,N),t},e._getDimension=function(){return o.default(this._element).hasClass("width")?"width":"height"},e._getParent=function(){var e,n=this;d.isElement(this._config.parent)?(e=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(e=this._config.parent[0])):e=document.querySelector(this._config.parent);var i='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',a=[].slice.call(e.querySelectorAll(i));return o.default(a).each((function(e,i){n._addAriaAndCollapsedClass(t._getTargetFromElement(i),[i])})),e},e._addAriaAndCollapsedClass=function(t,e){var n=o.default(t).hasClass("show");e.length&&o.default(e).toggleClass("collapsed",!n).attr("aria-expanded",n)},t._getTargetFromElement=function(t){var e=d.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.collapse"),a=r({},S,n.data(),"object"==typeof e&&e?e:{});if(!i&&a.toggle&&"string"==typeof e&&/show|hide/.test(e)&&(a.toggle=!1),i||(i=new t(this,a),n.data("bs.collapse",i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return S}}]),t}();o.default(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var e=o.default(this),n=d.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(n));o.default(i).each((function(){var t=o.default(this),n=t.data("bs.collapse")?"toggle":e.data();D._jQueryInterface.call(t,n)}))})),o.default.fn[T]=D._jQueryInterface,o.default.fn[T].Constructor=D,o.default.fn[T].noConflict=function(){return o.default.fn[T]=C,D._jQueryInterface};var k="dropdown",A=o.default.fn[k],I=new RegExp("38|40|27"),j={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},O={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},x=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var e=t.prototype;return e.toggle=function(){if(!this._element.disabled&&!o.default(this._element).hasClass("disabled")){var e=o.default(this._menu).hasClass("show");t._clearMenus(),e||this.show(!0)}},e.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||o.default(this._element).hasClass("disabled")||o.default(this._menu).hasClass("show"))){var n={relatedTarget:this._element},i=o.default.Event("show.bs.dropdown",n),s=t._getParentFromElement(this._element);if(o.default(s).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar&&e){if("undefined"==typeof a.default)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");var l=this._element;"parent"===this._config.reference?l=s:d.isElement(this._config.reference)&&(l=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(l=this._config.reference[0])),"scrollParent"!==this._config.boundary&&o.default(s).addClass("position-static"),this._popper=new a.default(l,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===o.default(s).closest(".navbar-nav").length&&o.default(document.body).children().on("mouseover",null,o.default.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),o.default(this._menu).toggleClass("show"),o.default(s).toggleClass("show").trigger(o.default.Event("shown.bs.dropdown",n))}}},e.hide=function(){if(!this._element.disabled&&!o.default(this._element).hasClass("disabled")&&o.default(this._menu).hasClass("show")){var e={relatedTarget:this._element},n=o.default.Event("hide.bs.dropdown",e),i=t._getParentFromElement(this._element);o.default(i).trigger(n),n.isDefaultPrevented()||(this._popper&&this._popper.destroy(),o.default(this._menu).toggleClass("show"),o.default(i).toggleClass("show").trigger(o.default.Event("hidden.bs.dropdown",e)))}},e.dispose=function(){o.default.removeData(this._element,"bs.dropdown"),o.default(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},e.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},e._addEventListeners=function(){var t=this;o.default(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},e._getConfig=function(t){return t=r({},this.constructor.Default,o.default(this._element).data(),t),d.typeCheckConfig(k,t,this.constructor.DefaultType),t},e._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(".dropdown-menu"))}return this._menu},e._getPlacement=function(){var t=o.default(this._element.parentNode),e="bottom-start";return t.hasClass("dropup")?e=o.default(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":t.hasClass("dropright")?e="right-start":t.hasClass("dropleft")?e="left-start":o.default(this._menu).hasClass("dropdown-menu-right")&&(e="bottom-end"),e},e._detectNavbar=function(){return o.default(this._element).closest(".navbar").length>0},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=r({},e.offsets,t._config.offset(e.offsets,t._element)||{}),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),r({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.dropdown");if(n||(n=new t(this,"object"==typeof e?e:null),o.default(this).data("bs.dropdown",n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},t._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var n=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]')),i=0,a=n.length;i<a;i++){var s=t._getParentFromElement(n[i]),l=o.default(n[i]).data("bs.dropdown"),r={relatedTarget:n[i]};if(e&&"click"===e.type&&(r.clickEvent=e),l){var u=l._menu;if(o.default(s).hasClass("show")&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&o.default.contains(s,e.target))){var d=o.default.Event("hide.bs.dropdown",r);o.default(s).trigger(d),d.isDefaultPrevented()||("ontouchstart"in document.documentElement&&o.default(document.body).children().off("mouseover",null,o.default.noop),n[i].setAttribute("aria-expanded","false"),l._popper&&l._popper.destroy(),o.default(u).removeClass("show"),o.default(s).removeClass("show").trigger(o.default.Event("hidden.bs.dropdown",r)))}}}},t._getParentFromElement=function(t){var e,n=d.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(e){if(!(/input|textarea/i.test(e.target.tagName)?32===e.which||27!==e.which&&(40!==e.which&&38!==e.which||o.default(e.target).closest(".dropdown-menu").length):!I.test(e.which))&&!this.disabled&&!o.default(this).hasClass("disabled")){var n=t._getParentFromElement(this),i=o.default(n).hasClass("show");if(i||27!==e.which){if(e.preventDefault(),e.stopPropagation(),!i||27===e.which||32===e.which)return 27===e.which&&o.default(n.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void o.default(this).trigger("click");var a=[].slice.call(n.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return o.default(t).is(":visible")}));if(0!==a.length){var s=a.indexOf(e.target);38===e.which&&s>0&&s--,40===e.which&&s<a.length-1&&s++,s<0&&(s=0),a[s].focus()}}}},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return j}},{key:"DefaultType",get:function(){return O}}]),t}();o.default(document).on("keydown.bs.dropdown.data-api",'[data-toggle="dropdown"]',x._dataApiKeydownHandler).on("keydown.bs.dropdown.data-api",".dropdown-menu",x._dataApiKeydownHandler).on("click.bs.dropdown.data-api keyup.bs.dropdown.data-api",x._clearMenus).on("click.bs.dropdown.data-api",'[data-toggle="dropdown"]',(function(t){t.preventDefault(),t.stopPropagation(),x._jQueryInterface.call(o.default(this),"toggle")})).on("click.bs.dropdown.data-api",".dropdown form",(function(t){t.stopPropagation()})),o.default.fn[k]=x._jQueryInterface,o.default.fn[k].Constructor=x,o.default.fn[k].noConflict=function(){return o.default.fn[k]=A,x._jQueryInterface};var P=o.default.fn.modal,R={backdrop:!0,keyboard:!0,focus:!0,show:!0},L={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},q=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var e=t.prototype;return e.toggle=function(t){return this._isShown?this.hide():this.show(t)},e.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){o.default(this._element).hasClass("fade")&&(this._isTransitioning=!0);var n=o.default.Event("show.bs.modal",{relatedTarget:t});o.default(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),o.default(this._element).on("click.dismiss.bs.modal",'[data-dismiss="modal"]',(function(t){return e.hide(t)})),o.default(this._dialog).on("mousedown.dismiss.bs.modal",(function(){o.default(e._element).one("mouseup.dismiss.bs.modal",(function(t){o.default(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return e._showElement(t)})))}},e.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var n=o.default.Event("hide.bs.modal");if(o.default(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=o.default(this._element).hasClass("fade");if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),o.default(document).off("focusin.bs.modal"),o.default(this._element).removeClass("show"),o.default(this._element).off("click.dismiss.bs.modal"),o.default(this._dialog).off("mousedown.dismiss.bs.modal"),i){var a=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,(function(t){return e._hideModal(t)})).emulateTransitionEnd(a)}else this._hideModal()}}},e.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return o.default(t).off(".bs.modal")})),o.default(document).off("focusin.bs.modal"),o.default.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},e.handleUpdate=function(){this._adjustDialog()},e._getConfig=function(t){return t=r({},R,t),d.typeCheckConfig("modal",t,L),t},e._triggerBackdropTransition=function(){var t=this,e=o.default.Event("hidePrevented.bs.modal");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._element.scrollHeight>document.documentElement.clientHeight;n||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");var i=d.getTransitionDurationFromElement(this._dialog);o.default(this._element).off(d.TRANSITION_END),o.default(this._element).one(d.TRANSITION_END,(function(){t._element.classList.remove("modal-static"),n||o.default(t._element).one(d.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,i)})).emulateTransitionEnd(i),this._element.focus()}},e._showElement=function(t){var e=this,n=o.default(this._element).hasClass("fade"),i=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),o.default(this._dialog).hasClass("modal-dialog-scrollable")&&i?i.scrollTop=0:this._element.scrollTop=0,n&&d.reflow(this._element),o.default(this._element).addClass("show"),this._config.focus&&this._enforceFocus();var a=o.default.Event("shown.bs.modal",{relatedTarget:t}),s=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,o.default(e._element).trigger(a)};if(n){var l=d.getTransitionDurationFromElement(this._dialog);o.default(this._dialog).one(d.TRANSITION_END,s).emulateTransitionEnd(l)}else s()},e._enforceFocus=function(){var t=this;o.default(document).off("focusin.bs.modal").on("focusin.bs.modal",(function(e){document!==e.target&&t._element!==e.target&&0===o.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?o.default(this._element).on("keydown.dismiss.bs.modal",(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||o.default(this._element).off("keydown.dismiss.bs.modal")},e._setResizeEvent=function(){var t=this;this._isShown?o.default(window).on("resize.bs.modal",(function(e){return t.handleUpdate(e)})):o.default(window).off("resize.bs.modal")},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){o.default(document.body).removeClass("modal-open"),t._resetAdjustments(),t._resetScrollbar(),o.default(t._element).trigger("hidden.bs.modal")}))},e._removeBackdrop=function(){this._backdrop&&(o.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=o.default(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",n&&this._backdrop.classList.add(n),o.default(this._backdrop).appendTo(document.body),o.default(this._element).on("click.dismiss.bs.modal",(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._triggerBackdropTransition():e.hide())})),n&&d.reflow(this._backdrop),o.default(this._backdrop).addClass("show"),!t)return;if(!n)return void t();var i=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){o.default(this._backdrop).removeClass("show");var a=function(){e._removeBackdrop(),t&&t()};if(o.default(this._element).hasClass("fade")){var s=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,a).emulateTransitionEnd(s)}else a()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},e._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var e=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),n=[].slice.call(document.querySelectorAll(".sticky-top"));o.default(e).each((function(e,n){var i=n.style.paddingRight,a=o.default(n).css("padding-right");o.default(n).data("padding-right",i).css("padding-right",parseFloat(a)+t._scrollbarWidth+"px")})),o.default(n).each((function(e,n){var i=n.style.marginRight,a=o.default(n).css("margin-right");o.default(n).data("margin-right",i).css("margin-right",parseFloat(a)-t._scrollbarWidth+"px")}));var i=document.body.style.paddingRight,a=o.default(document.body).css("padding-right");o.default(document.body).data("padding-right",i).css("padding-right",parseFloat(a)+this._scrollbarWidth+"px")}o.default(document.body).addClass("modal-open")},e._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));o.default(t).each((function(t,e){var n=o.default(e).data("padding-right");o.default(e).removeData("padding-right"),e.style.paddingRight=n||""}));var e=[].slice.call(document.querySelectorAll(".sticky-top"));o.default(e).each((function(t,e){var n=o.default(e).data("margin-right");"undefined"!=typeof n&&o.default(e).css("margin-right",n).removeData("margin-right")}));var n=o.default(document.body).data("padding-right");o.default(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},e._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(e,n){return this.each((function(){var i=o.default(this).data("bs.modal"),a=r({},R,o.default(this).data(),"object"==typeof e&&e?e:{});if(i||(i=new t(this,a),o.default(this).data("bs.modal",i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e](n)}else a.show&&i.show(n)}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return R}}]),t}();o.default(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var e,n=this,i=d.getSelectorFromElement(this);i&&(e=document.querySelector(i));var a=o.default(e).data("bs.modal")?"toggle":r({},o.default(e).data(),o.default(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var s=o.default(e).one("show.bs.modal",(function(t){t.isDefaultPrevented()||s.one("hidden.bs.modal",(function(){o.default(n).is(":visible")&&n.focus()}))}));q._jQueryInterface.call(o.default(e),a,this)})),o.default.fn.modal=q._jQueryInterface,o.default.fn.modal.Constructor=q,o.default.fn.modal.noConflict=function(){return o.default.fn.modal=P,q._jQueryInterface};var F=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Q={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},B=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,H=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function U(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),a=[].slice.call(i.body.querySelectorAll("*")),s=function(t,n){var i=a[t],s=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var l=[].slice.call(i.attributes),r=[].concat(e["*"]||[],e[s]||[]);l.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===F.indexOf(n)||Boolean(t.nodeValue.match(B)||t.nodeValue.match(H));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,a=i.length;o<a;o++)if(n.match(i[o]))return!0;return!1})(t,r)||i.removeAttribute(t.nodeName)}))},l=0,r=a.length;l<r;l++)s(l);return i.body.innerHTML}var M="tooltip",W=o.default.fn[M],V=new RegExp("(^|\\s)bs-tooltip\\S+","g"),z=["sanitize","whiteList","sanitizeFn"],K={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},X={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Y={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:Q,popperConfig:null},$={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},J=function(){function t(t,e){if("undefined"==typeof a.default)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=o.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(o.default(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),o.default.removeData(this.element,this.constructor.DATA_KEY),o.default(this.element).off(this.constructor.EVENT_KEY),o.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&o.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===o.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=o.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){o.default(this.element).trigger(e);var n=d.findShadowRoot(this.element),i=o.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!i)return;var s=this.getTipElement(),l=d.getUID(this.constructor.NAME);s.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&o.default(s).addClass("fade");var r="function"==typeof this.config.placement?this.config.placement.call(this,s,this.element):this.config.placement,u=this._getAttachment(r);this.addAttachmentClass(u);var f=this._getContainer();o.default(s).data(this.constructor.DATA_KEY,this),o.default.contains(this.element.ownerDocument.documentElement,this.tip)||o.default(s).appendTo(f),o.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new a.default(this.element,s,this._getPopperConfig(u)),o.default(s).addClass("show"),o.default(s).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&o.default(document.body).children().on("mouseover",null,o.default.noop);var c=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,o.default(t.element).trigger(t.constructor.Event.SHOWN),"out"===e&&t._leave(null,t)};if(o.default(this.tip).hasClass("fade")){var h=d.getTransitionDurationFromElement(this.tip);o.default(this.tip).one(d.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},e.hide=function(t){var e=this,n=this.getTipElement(),i=o.default.Event(this.constructor.Event.HIDE),a=function(){"show"!==e._hoverState&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),o.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(o.default(this.element).trigger(i),!i.isDefaultPrevented()){if(o.default(n).removeClass("show"),"ontouchstart"in document.documentElement&&o.default(document.body).children().off("mouseover",null,o.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,o.default(this.tip).hasClass("fade")){var s=d.getTransitionDurationFromElement(n);o.default(n).one(d.TRANSITION_END,a).emulateTransitionEnd(s)}else a();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(o.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),o.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=U(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?o.default(e).parent().is(t)||t.empty().append(e):t.text(o.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return r({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=r({},e.offsets,t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:d.isElement(this.config.container)?o.default(this.config.container):o.default(document).find(this.config.container)},e._getAttachment=function(t){return X[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)o.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n="hover"===e?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,i="hover"===e?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;o.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(i,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},o.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=r({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),o.default(e.getTipElement()).hasClass("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){"show"===e._hoverState&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){"out"===e._hoverState&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=o.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==z.indexOf(t)&&delete e[t]})),"number"==typeof(t=r({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),d.typeCheckConfig(M,t,this.constructor.DefaultType),t.sanitize&&(t.template=U(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(V);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(o.default(t).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tooltip"),a="object"==typeof e&&e;if((i||!/dispose|hide/.test(e))&&(i||(i=new t(this,a),n.data("bs.tooltip",i)),"string"==typeof e)){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return Y}},{key:"NAME",get:function(){return M}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return $}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return K}}]),t}();o.default.fn[M]=J._jQueryInterface,o.default.fn[M].Constructor=J,o.default.fn[M].noConflict=function(){return o.default.fn[M]=W,J._jQueryInterface};var G="popover",Z=o.default.fn[G],tt=new RegExp("(^|\\s)bs-popover\\S+","g"),et=r({},J.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),nt=r({},J.DefaultType,{content:"(string|element|function)"}),it={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},ot=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,e.__proto__=n;var a=i.prototype;return a.isWithContent=function(){return this.getTitle()||this._getContent()},a.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-popover-"+t)},a.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},a.setContent=function(){var t=o.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},a._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},a._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(tt);null!==e&&e.length>0&&t.removeClass(e.join(""))},i._jQueryInterface=function(t){return this.each((function(){var e=o.default(this).data("bs.popover"),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new i(this,n),o.default(this).data("bs.popover",e)),"string"==typeof t)){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},l(i,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return et}},{key:"NAME",get:function(){return G}},{key:"DATA_KEY",get:function(){return"bs.popover"}},{key:"Event",get:function(){return it}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return nt}}]),i}(J);o.default.fn[G]=ot._jQueryInterface,o.default.fn[G].Constructor=ot,o.default.fn[G].noConflict=function(){return o.default.fn[G]=Z,ot._jQueryInterface};var at="scrollspy",st=o.default.fn[at],lt={offset:10,method:"auto",target:""},rt={offset:"number",method:"string",target:"(string|element)"},ut=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,o.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":"position",n="auto"===this._config.method?e:this._config.method,i="position"===n?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,a=d.getSelectorFromElement(t);if(a&&(e=document.querySelector(a)),e){var s=e.getBoundingClientRect();if(s.width||s.height)return[o.default(e)[n]().top+i,a]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){o.default.removeData(this._element,"bs.scrollspy"),o.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=r({},lt,"object"==typeof t&&t?t:{})).target&&d.isElement(t.target)){var e=o.default(t.target).attr("id");e||(e=d.getUID(at),o.default(t.target).attr("id",e)),t.target="#"+e}return d.typeCheckConfig(at,t,rt),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;){this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}}},e._activate=function(t){this._activeTarget=t,this._clear();var e=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),n=o.default([].slice.call(document.querySelectorAll(e.join(","))));n.hasClass("dropdown-item")?(n.closest(".dropdown").find(".dropdown-toggle").addClass("active"),n.addClass("active")):(n.addClass("active"),n.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),n.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),o.default(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},e._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data("bs.scrollspy");if(n||(n=new t(this,"object"==typeof e&&e),o.default(this).data("bs.scrollspy",n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"Default",get:function(){return lt}}]),t}();o.default(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),e=t.length;e--;){var n=o.default(t[e]);ut._jQueryInterface.call(n,n.data())}})),o.default.fn[at]=ut._jQueryInterface,o.default.fn[at].Constructor=ut,o.default.fn[at].noConflict=function(){return o.default.fn[at]=st,ut._jQueryInterface};var dt=o.default.fn.tab,ft=function(){function t(t){this._element=t}var e=t.prototype;return e.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&o.default(this._element).hasClass("active")||o.default(this._element).hasClass("disabled"))){var e,n,i=o.default(this._element).closest(".nav, .list-group")[0],a=d.getSelectorFromElement(this._element);if(i){var s="UL"===i.nodeName||"OL"===i.nodeName?"> li > .active":".active";n=(n=o.default.makeArray(o.default(i).find(s)))[n.length-1]}var l=o.default.Event("hide.bs.tab",{relatedTarget:this._element}),r=o.default.Event("show.bs.tab",{relatedTarget:n});if(n&&o.default(n).trigger(l),o.default(this._element).trigger(r),!r.isDefaultPrevented()&&!l.isDefaultPrevented()){a&&(e=document.querySelector(a)),this._activate(this._element,i);var u=function(){var e=o.default.Event("hidden.bs.tab",{relatedTarget:t._element}),i=o.default.Event("shown.bs.tab",{relatedTarget:n});o.default(n).trigger(e),o.default(t._element).trigger(i)};e?this._activate(e,e.parentNode,u):u()}}},e.dispose=function(){o.default.removeData(this._element,"bs.tab"),this._element=null},e._activate=function(t,e,n){var i=this,a=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?o.default(e).children(".active"):o.default(e).find("> li > .active"))[0],s=n&&a&&o.default(a).hasClass("fade"),l=function(){return i._transitionComplete(t,a,n)};if(a&&s){var r=d.getTransitionDurationFromElement(a);o.default(a).removeClass("show").one(d.TRANSITION_END,l).emulateTransitionEnd(r)}else l()},e._transitionComplete=function(t,e,n){if(e){o.default(e).removeClass("active");var i=o.default(e.parentNode).find("> .dropdown-menu .active")[0];i&&o.default(i).removeClass("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(o.default(t).addClass("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),d.reflow(t),t.classList.contains("fade")&&t.classList.add("show"),t.parentNode&&o.default(t.parentNode).hasClass("dropdown-menu")){var a=o.default(t).closest(".dropdown")[0];if(a){var s=[].slice.call(a.querySelectorAll(".dropdown-toggle"));o.default(s).addClass("active")}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.tab");if(i||(i=new t(this),n.data("bs.tab",i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}}]),t}();o.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),ft._jQueryInterface.call(o.default(this),"show")})),o.default.fn.tab=ft._jQueryInterface,o.default.fn.tab.Constructor=ft,o.default.fn.tab.noConflict=function(){return o.default.fn.tab=dt,ft._jQueryInterface};var ct=o.default.fn.toast,ht={animation:"boolean",autohide:"boolean",delay:"number"},gt={animation:!0,autohide:!0,delay:500},mt=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=o.default.Event("show.bs.toast");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove("showing"),t._element.classList.add("show"),o.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove("hide"),d.reflow(this._element),this._element.classList.add("showing"),this._config.animation){var i=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},e.hide=function(){if(this._element.classList.contains("show")){var t=o.default.Event("hide.bs.toast");o.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),o.default(this._element).off("click.dismiss.bs.toast"),o.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null},e._getConfig=function(t){return t=r({},gt,o.default(this._element).data(),"object"==typeof t&&t?t:{}),d.typeCheckConfig("toast",t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;o.default(this._element).on("click.dismiss.bs.toast",'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add("hide"),o.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove("show"),this._config.animation){var n=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data("bs.toast");if(i||(i=new t(this,"object"==typeof e&&e),n.data("bs.toast",i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e](this)}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.0"}},{key:"DefaultType",get:function(){return ht}},{key:"Default",get:function(){return gt}}]),t}();o.default.fn.toast=mt._jQueryInterface,o.default.fn.toast.Constructor=mt,o.default.fn.toast.noConflict=function(){return o.default.fn.toast=ct,mt._jQueryInterface},t.Alert=h,t.Button=m,t.Carousel=w,t.Collapse=D,t.Dropdown=x,t.Modal=q,t.Popover=ot,t.Scrollspy=ut,t.Tab=ft,t.Toast=mt,t.Tooltip=J,t.Util=d,Object.defineProperty(t,"__esModule",{value:!0})}));
  1312. //# sourceMappingURL=bootstrap.min.js.map
  1313. /***/ }),
  1314. /***/ "./node_modules/core-js/internals/a-possible-prototype.js":
  1315. /*!****************************************************************!*\
  1316. !*** ./node_modules/core-js/internals/a-possible-prototype.js ***!
  1317. \****************************************************************/
  1318. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1319. var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");
  1320. module.exports = function (it) {
  1321. if (!isObject(it) && it !== null) {
  1322. throw TypeError("Can't set " + String(it) + ' as a prototype');
  1323. } return it;
  1324. };
  1325. /***/ }),
  1326. /***/ "./node_modules/core-js/internals/array-method-has-species-support.js":
  1327. /*!****************************************************************************!*\
  1328. !*** ./node_modules/core-js/internals/array-method-has-species-support.js ***!
  1329. \****************************************************************************/
  1330. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1331. var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
  1332. var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
  1333. var V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ "./node_modules/core-js/internals/engine-v8-version.js");
  1334. var SPECIES = wellKnownSymbol('species');
  1335. module.exports = function (METHOD_NAME) {
  1336. // We can't use this feature detection in V8 since it causes
  1337. // deoptimization and serious performance degradation
  1338. // https://github.com/zloirock/core-js/issues/677
  1339. return V8_VERSION >= 51 || !fails(function () {
  1340. var array = [];
  1341. var constructor = array.constructor = {};
  1342. constructor[SPECIES] = function () {
  1343. return { foo: 1 };
  1344. };
  1345. return array[METHOD_NAME](Boolean).foo !== 1;
  1346. });
  1347. };
  1348. /***/ }),
  1349. /***/ "./node_modules/core-js/internals/correct-is-regexp-logic.js":
  1350. /*!*******************************************************************!*\
  1351. !*** ./node_modules/core-js/internals/correct-is-regexp-logic.js ***!
  1352. \*******************************************************************/
  1353. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1354. var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js");
  1355. var MATCH = wellKnownSymbol('match');
  1356. module.exports = function (METHOD_NAME) {
  1357. var regexp = /./;
  1358. try {
  1359. '/./'[METHOD_NAME](regexp);
  1360. } catch (error1) {
  1361. try {
  1362. regexp[MATCH] = false;
  1363. return '/./'[METHOD_NAME](regexp);
  1364. } catch (error2) { /* empty */ }
  1365. } return false;
  1366. };
  1367. /***/ }),
  1368. /***/ "./node_modules/core-js/internals/inherit-if-required.js":
  1369. /*!***************************************************************!*\
  1370. !*** ./node_modules/core-js/internals/inherit-if-required.js ***!
  1371. \***************************************************************/
  1372. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1373. var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js");
  1374. var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "./node_modules/core-js/internals/object-set-prototype-of.js");
  1375. // makes subclassing work correct for wrapped built-ins
  1376. module.exports = function ($this, dummy, Wrapper) {
  1377. var NewTarget, NewTargetPrototype;
  1378. if (
  1379. // it can work only with native `setPrototypeOf`
  1380. setPrototypeOf &&
  1381. // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
  1382. typeof (NewTarget = dummy.constructor) == 'function' &&
  1383. NewTarget !== Wrapper &&
  1384. isObject(NewTargetPrototype = NewTarget.prototype) &&
  1385. NewTargetPrototype !== Wrapper.prototype
  1386. ) setPrototypeOf($this, NewTargetPrototype);
  1387. return $this;
  1388. };
  1389. /***/ }),
  1390. /***/ "./node_modules/core-js/internals/not-a-regexp.js":
  1391. /*!********************************************************!*\
  1392. !*** ./node_modules/core-js/internals/not-a-regexp.js ***!
  1393. \********************************************************/
  1394. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1395. var isRegExp = __webpack_require__(/*! ../internals/is-regexp */ "./node_modules/core-js/internals/is-regexp.js");
  1396. module.exports = function (it) {
  1397. if (isRegExp(it)) {
  1398. throw TypeError("The method doesn't accept regular expressions");
  1399. } return it;
  1400. };
  1401. /***/ }),
  1402. /***/ "./node_modules/core-js/internals/number-parse-float.js":
  1403. /*!**************************************************************!*\
  1404. !*** ./node_modules/core-js/internals/number-parse-float.js ***!
  1405. \**************************************************************/
  1406. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1407. var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
  1408. var trim = __webpack_require__(/*! ../internals/string-trim */ "./node_modules/core-js/internals/string-trim.js").trim;
  1409. var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ "./node_modules/core-js/internals/whitespaces.js");
  1410. var $parseFloat = global.parseFloat;
  1411. var FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity;
  1412. // `parseFloat` method
  1413. // https://tc39.es/ecma262/#sec-parsefloat-string
  1414. module.exports = FORCED ? function parseFloat(string) {
  1415. var trimmedString = trim(String(string));
  1416. var result = $parseFloat(trimmedString);
  1417. return result === 0 && trimmedString.charAt(0) == '-' ? -0 : result;
  1418. } : $parseFloat;
  1419. /***/ }),
  1420. /***/ "./node_modules/core-js/internals/object-assign.js":
  1421. /*!*********************************************************!*\
  1422. !*** ./node_modules/core-js/internals/object-assign.js ***!
  1423. \*********************************************************/
  1424. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1425. "use strict";
  1426. var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");
  1427. var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
  1428. var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js/internals/object-keys.js");
  1429. var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js/internals/object-get-own-property-symbols.js");
  1430. var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js/internals/object-property-is-enumerable.js");
  1431. var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js/internals/to-object.js");
  1432. var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js/internals/indexed-object.js");
  1433. // eslint-disable-next-line es/no-object-assign -- safe
  1434. var $assign = Object.assign;
  1435. // eslint-disable-next-line es/no-object-defineproperty -- required for testing
  1436. var defineProperty = Object.defineProperty;
  1437. // `Object.assign` method
  1438. // https://tc39.es/ecma262/#sec-object.assign
  1439. module.exports = !$assign || fails(function () {
  1440. // should have correct order of operations (Edge bug)
  1441. if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {
  1442. enumerable: true,
  1443. get: function () {
  1444. defineProperty(this, 'b', {
  1445. value: 3,
  1446. enumerable: false
  1447. });
  1448. }
  1449. }), { b: 2 })).b !== 1) return true;
  1450. // should work with symbols and should have deterministic property order (V8 bug)
  1451. var A = {};
  1452. var B = {};
  1453. // eslint-disable-next-line es/no-symbol -- safe
  1454. var symbol = Symbol();
  1455. var alphabet = 'abcdefghijklmnopqrst';
  1456. A[symbol] = 7;
  1457. alphabet.split('').forEach(function (chr) { B[chr] = chr; });
  1458. return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;
  1459. }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`
  1460. var T = toObject(target);
  1461. var argumentsLength = arguments.length;
  1462. var index = 1;
  1463. var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;
  1464. var propertyIsEnumerable = propertyIsEnumerableModule.f;
  1465. while (argumentsLength > index) {
  1466. var S = IndexedObject(arguments[index++]);
  1467. var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);
  1468. var length = keys.length;
  1469. var j = 0;
  1470. var key;
  1471. while (length > j) {
  1472. key = keys[j++];
  1473. if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];
  1474. }
  1475. } return T;
  1476. } : $assign;
  1477. /***/ }),
  1478. /***/ "./node_modules/core-js/internals/object-set-prototype-of.js":
  1479. /*!*******************************************************************!*\
  1480. !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***!
  1481. \*******************************************************************/
  1482. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1483. /* eslint-disable no-proto -- safe */
  1484. var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");
  1485. var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ "./node_modules/core-js/internals/a-possible-prototype.js");
  1486. // `Object.setPrototypeOf` method
  1487. // https://tc39.es/ecma262/#sec-object.setprototypeof
  1488. // Works with __proto__ only. Old v8 can't work with null proto objects.
  1489. // eslint-disable-next-line es/no-object-setprototypeof -- safe
  1490. module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {
  1491. var CORRECT_SETTER = false;
  1492. var test = {};
  1493. var setter;
  1494. try {
  1495. // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe
  1496. setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
  1497. setter.call(test, []);
  1498. CORRECT_SETTER = test instanceof Array;
  1499. } catch (error) { /* empty */ }
  1500. return function setPrototypeOf(O, proto) {
  1501. anObject(O);
  1502. aPossiblePrototype(proto);
  1503. if (CORRECT_SETTER) setter.call(O, proto);
  1504. else O.__proto__ = proto;
  1505. return O;
  1506. };
  1507. }() : undefined);
  1508. /***/ }),
  1509. /***/ "./node_modules/core-js/internals/same-value.js":
  1510. /*!******************************************************!*\
  1511. !*** ./node_modules/core-js/internals/same-value.js ***!
  1512. \******************************************************/
  1513. /***/ ((module) => {
  1514. // `SameValue` abstract operation
  1515. // https://tc39.es/ecma262/#sec-samevalue
  1516. // eslint-disable-next-line es/no-object-is -- safe
  1517. module.exports = Object.is || function is(x, y) {
  1518. // eslint-disable-next-line no-self-compare -- NaN check
  1519. return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
  1520. };
  1521. /***/ }),
  1522. /***/ "./node_modules/core-js/internals/string-repeat.js":
  1523. /*!*********************************************************!*\
  1524. !*** ./node_modules/core-js/internals/string-repeat.js ***!
  1525. \*********************************************************/
  1526. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1527. "use strict";
  1528. var toInteger = __webpack_require__(/*! ../internals/to-integer */ "./node_modules/core-js/internals/to-integer.js");
  1529. var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js");
  1530. // `String.prototype.repeat` method implementation
  1531. // https://tc39.es/ecma262/#sec-string.prototype.repeat
  1532. module.exports = function repeat(count) {
  1533. var str = String(requireObjectCoercible(this));
  1534. var result = '';
  1535. var n = toInteger(count);
  1536. if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');
  1537. for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;
  1538. return result;
  1539. };
  1540. /***/ }),
  1541. /***/ "./node_modules/core-js/internals/string-trim.js":
  1542. /*!*******************************************************!*\
  1543. !*** ./node_modules/core-js/internals/string-trim.js ***!
  1544. \*******************************************************/
  1545. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1546. var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js");
  1547. var whitespaces = __webpack_require__(/*! ../internals/whitespaces */ "./node_modules/core-js/internals/whitespaces.js");
  1548. var whitespace = '[' + whitespaces + ']';
  1549. var ltrim = RegExp('^' + whitespace + whitespace + '*');
  1550. var rtrim = RegExp(whitespace + whitespace + '*$');
  1551. // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation
  1552. var createMethod = function (TYPE) {
  1553. return function ($this) {
  1554. var string = String(requireObjectCoercible($this));
  1555. if (TYPE & 1) string = string.replace(ltrim, '');
  1556. if (TYPE & 2) string = string.replace(rtrim, '');
  1557. return string;
  1558. };
  1559. };
  1560. module.exports = {
  1561. // `String.prototype.{ trimLeft, trimStart }` methods
  1562. // https://tc39.es/ecma262/#sec-string.prototype.trimstart
  1563. start: createMethod(1),
  1564. // `String.prototype.{ trimRight, trimEnd }` methods
  1565. // https://tc39.es/ecma262/#sec-string.prototype.trimend
  1566. end: createMethod(2),
  1567. // `String.prototype.trim` method
  1568. // https://tc39.es/ecma262/#sec-string.prototype.trim
  1569. trim: createMethod(3)
  1570. };
  1571. /***/ }),
  1572. /***/ "./node_modules/core-js/internals/this-number-value.js":
  1573. /*!*************************************************************!*\
  1574. !*** ./node_modules/core-js/internals/this-number-value.js ***!
  1575. \*************************************************************/
  1576. /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
  1577. var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js");
  1578. // `thisNumberValue` abstract operation
  1579. // https://tc39.es/ecma262/#sec-thisnumbervalue
  1580. module.exports = function (value) {
  1581. if (typeof value != 'number' && classof(value) != 'Number') {
  1582. throw TypeError('Incorrect invocation');
  1583. }
  1584. return +value;
  1585. };
  1586. /***/ }),
  1587. /***/ "./node_modules/core-js/internals/whitespaces.js":
  1588. /*!*******************************************************!*\
  1589. !*** ./node_modules/core-js/internals/whitespaces.js ***!
  1590. \*******************************************************/
  1591. /***/ ((module) => {
  1592. // a string of all valid unicode whitespaces
  1593. module.exports = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' +
  1594. '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
  1595. /***/ }),
  1596. /***/ "./node_modules/core-js/modules/es.array.filter.js":
  1597. /*!*********************************************************!*\
  1598. !*** ./node_modules/core-js/modules/es.array.filter.js ***!
  1599. \*********************************************************/
  1600. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  1601. "use strict";
  1602. var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
  1603. var $filter = __webpack_require__(/*! ../internals/array-iteration */ "./node_modules/core-js/internals/array-iteration.js").filter;
  1604. var arrayMethodHasSpeciesSupport = __webpack_require__(/*! ../internals/array-method-has-species-support */ "./node_modules/core-js/internals/array-method-has-species-support.js");
  1605. var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');
  1606. // `Array.prototype.filter` method
  1607. // https://tc39.es/ecma262/#sec-array.prototype.filter
  1608. // with adding support of @@species
  1609. $({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
  1610. filter: function filter(callbackfn /* , thisArg */) {
  1611. return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
  1612. }
  1613. });
  1614. /***/ }),
  1615. /***/ "./node_modules/core-js/modules/es.array.includes.js":
  1616. /*!***********************************************************!*\
  1617. !*** ./node_modules/core-js/modules/es.array.includes.js ***!
  1618. \***********************************************************/
  1619. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  1620. "use strict";
  1621. var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
  1622. var $includes = __webpack_require__(/*! ../internals/array-includes */ "./node_modules/core-js/internals/array-includes.js").includes;
  1623. var addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ "./node_modules/core-js/internals/add-to-unscopables.js");
  1624. // `Array.prototype.includes` method
  1625. // https://tc39.es/ecma262/#sec-array.prototype.includes
  1626. $({ target: 'Array', proto: true }, {
  1627. includes: function includes(el /* , fromIndex = 0 */) {
  1628. return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);
  1629. }
  1630. });
  1631. // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
  1632. addToUnscopables('includes');
  1633. /***/ }),
  1634. /***/ "./node_modules/core-js/modules/es.date.to-string.js":
  1635. /*!***********************************************************!*\
  1636. !*** ./node_modules/core-js/modules/es.date.to-string.js ***!
  1637. \***********************************************************/
  1638. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  1639. var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js");
  1640. var DatePrototype = Date.prototype;
  1641. var INVALID_DATE = 'Invalid Date';
  1642. var TO_STRING = 'toString';
  1643. var nativeDateToString = DatePrototype[TO_STRING];
  1644. var getTime = DatePrototype.getTime;
  1645. // `Date.prototype.toString` method
  1646. // https://tc39.es/ecma262/#sec-date.prototype.tostring
  1647. if (new Date(NaN) + '' != INVALID_DATE) {
  1648. redefine(DatePrototype, TO_STRING, function toString() {
  1649. var value = getTime.call(this);
  1650. // eslint-disable-next-line no-self-compare -- NaN check
  1651. return value === value ? nativeDateToString.call(this) : INVALID_DATE;
  1652. });
  1653. }
  1654. /***/ }),
  1655. /***/ "./node_modules/core-js/modules/es.number.constructor.js":
  1656. /*!***************************************************************!*\
  1657. !*** ./node_modules/core-js/modules/es.number.constructor.js ***!
  1658. \***************************************************************/
  1659. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  1660. "use strict";
  1661. var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");
  1662. var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js");
  1663. var isForced = __webpack_require__(/*! ../internals/is-forced */ "./node_modules/core-js/internals/is-forced.js");
  1664. var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js");
  1665. var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js");
  1666. var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js");
  1667. var inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ "./node_modules/core-js/internals/inherit-if-required.js");
  1668. var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js/internals/to-primitive.js");
  1669. var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
  1670. var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js/internals/object-create.js");
  1671. var getOwnPropertyNames = __webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js/internals/object-get-own-property-names.js").f;
  1672. var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js").f;
  1673. var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js").f;
  1674. var trim = __webpack_require__(/*! ../internals/string-trim */ "./node_modules/core-js/internals/string-trim.js").trim;
  1675. var NUMBER = 'Number';
  1676. var NativeNumber = global[NUMBER];
  1677. var NumberPrototype = NativeNumber.prototype;
  1678. // Opera ~12 has broken Object#toString
  1679. var BROKEN_CLASSOF = classof(create(NumberPrototype)) == NUMBER;
  1680. // `ToNumber` abstract operation
  1681. // https://tc39.es/ecma262/#sec-tonumber
  1682. var toNumber = function (argument) {
  1683. var it = toPrimitive(argument, false);
  1684. var first, third, radix, maxCode, digits, length, index, code;
  1685. if (typeof it == 'string' && it.length > 2) {
  1686. it = trim(it);
  1687. first = it.charCodeAt(0);
  1688. if (first === 43 || first === 45) {
  1689. third = it.charCodeAt(2);
  1690. if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix
  1691. } else if (first === 48) {
  1692. switch (it.charCodeAt(1)) {
  1693. case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i
  1694. case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i
  1695. default: return +it;
  1696. }
  1697. digits = it.slice(2);
  1698. length = digits.length;
  1699. for (index = 0; index < length; index++) {
  1700. code = digits.charCodeAt(index);
  1701. // parseInt parses a string to a first unavailable symbol
  1702. // but ToNumber should return NaN if a string contains unavailable symbols
  1703. if (code < 48 || code > maxCode) return NaN;
  1704. } return parseInt(digits, radix);
  1705. }
  1706. } return +it;
  1707. };
  1708. // `Number` constructor
  1709. // https://tc39.es/ecma262/#sec-number-constructor
  1710. if (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {
  1711. var NumberWrapper = function Number(value) {
  1712. var it = arguments.length < 1 ? 0 : value;
  1713. var dummy = this;
  1714. return dummy instanceof NumberWrapper
  1715. // check on 1..constructor(foo) case
  1716. && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classof(dummy) != NUMBER)
  1717. ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it);
  1718. };
  1719. for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (
  1720. // ES3:
  1721. 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
  1722. // ES2015 (in case, if modules with ES2015 Number statics required before):
  1723. 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +
  1724. 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +
  1725. // ESNext
  1726. 'fromString,range'
  1727. ).split(','), j = 0, key; keys.length > j; j++) {
  1728. if (has(NativeNumber, key = keys[j]) && !has(NumberWrapper, key)) {
  1729. defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));
  1730. }
  1731. }
  1732. NumberWrapper.prototype = NumberPrototype;
  1733. NumberPrototype.constructor = NumberWrapper;
  1734. redefine(global, NUMBER, NumberWrapper);
  1735. }
  1736. /***/ }),
  1737. /***/ "./node_modules/core-js/modules/es.number.to-fixed.js":
  1738. /*!************************************************************!*\
  1739. !*** ./node_modules/core-js/modules/es.number.to-fixed.js ***!
  1740. \************************************************************/
  1741. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  1742. "use strict";
  1743. var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
  1744. var toInteger = __webpack_require__(/*! ../internals/to-integer */ "./node_modules/core-js/internals/to-integer.js");
  1745. var thisNumberValue = __webpack_require__(/*! ../internals/this-number-value */ "./node_modules/core-js/internals/this-number-value.js");
  1746. var repeat = __webpack_require__(/*! ../internals/string-repeat */ "./node_modules/core-js/internals/string-repeat.js");
  1747. var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js");
  1748. var nativeToFixed = 1.0.toFixed;
  1749. var floor = Math.floor;
  1750. var pow = function (x, n, acc) {
  1751. return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);
  1752. };
  1753. var log = function (x) {
  1754. var n = 0;
  1755. var x2 = x;
  1756. while (x2 >= 4096) {
  1757. n += 12;
  1758. x2 /= 4096;
  1759. }
  1760. while (x2 >= 2) {
  1761. n += 1;
  1762. x2 /= 2;
  1763. } return n;
  1764. };
  1765. var multiply = function (data, n, c) {
  1766. var index = -1;
  1767. var c2 = c;
  1768. while (++index < 6) {
  1769. c2 += n * data[index];
  1770. data[index] = c2 % 1e7;
  1771. c2 = floor(c2 / 1e7);
  1772. }
  1773. };
  1774. var divide = function (data, n) {
  1775. var index = 6;
  1776. var c = 0;
  1777. while (--index >= 0) {
  1778. c += data[index];
  1779. data[index] = floor(c / n);
  1780. c = (c % n) * 1e7;
  1781. }
  1782. };
  1783. var dataToString = function (data) {
  1784. var index = 6;
  1785. var s = '';
  1786. while (--index >= 0) {
  1787. if (s !== '' || index === 0 || data[index] !== 0) {
  1788. var t = String(data[index]);
  1789. s = s === '' ? t : s + repeat.call('0', 7 - t.length) + t;
  1790. }
  1791. } return s;
  1792. };
  1793. var FORCED = nativeToFixed && (
  1794. 0.00008.toFixed(3) !== '0.000' ||
  1795. 0.9.toFixed(0) !== '1' ||
  1796. 1.255.toFixed(2) !== '1.25' ||
  1797. 1000000000000000128.0.toFixed(0) !== '1000000000000000128'
  1798. ) || !fails(function () {
  1799. // V8 ~ Android 4.3-
  1800. nativeToFixed.call({});
  1801. });
  1802. // `Number.prototype.toFixed` method
  1803. // https://tc39.es/ecma262/#sec-number.prototype.tofixed
  1804. $({ target: 'Number', proto: true, forced: FORCED }, {
  1805. toFixed: function toFixed(fractionDigits) {
  1806. var number = thisNumberValue(this);
  1807. var fractDigits = toInteger(fractionDigits);
  1808. var data = [0, 0, 0, 0, 0, 0];
  1809. var sign = '';
  1810. var result = '0';
  1811. var e, z, j, k;
  1812. if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');
  1813. // eslint-disable-next-line no-self-compare -- NaN check
  1814. if (number != number) return 'NaN';
  1815. if (number <= -1e21 || number >= 1e21) return String(number);
  1816. if (number < 0) {
  1817. sign = '-';
  1818. number = -number;
  1819. }
  1820. if (number > 1e-21) {
  1821. e = log(number * pow(2, 69, 1)) - 69;
  1822. z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);
  1823. z *= 0x10000000000000;
  1824. e = 52 - e;
  1825. if (e > 0) {
  1826. multiply(data, 0, z);
  1827. j = fractDigits;
  1828. while (j >= 7) {
  1829. multiply(data, 1e7, 0);
  1830. j -= 7;
  1831. }
  1832. multiply(data, pow(10, j, 1), 0);
  1833. j = e - 1;
  1834. while (j >= 23) {
  1835. divide(data, 1 << 23);
  1836. j -= 23;
  1837. }
  1838. divide(data, 1 << j);
  1839. multiply(data, 1, 1);
  1840. divide(data, 2);
  1841. result = dataToString(data);
  1842. } else {
  1843. multiply(data, 0, z);
  1844. multiply(data, 1 << -e, 0);
  1845. result = dataToString(data) + repeat.call('0', fractDigits);
  1846. }
  1847. }
  1848. if (fractDigits > 0) {
  1849. k = result.length;
  1850. result = sign + (k <= fractDigits
  1851. ? '0.' + repeat.call('0', fractDigits - k) + result
  1852. : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits));
  1853. } else {
  1854. result = sign + result;
  1855. } return result;
  1856. }
  1857. });
  1858. /***/ }),
  1859. /***/ "./node_modules/core-js/modules/es.object.assign.js":
  1860. /*!**********************************************************!*\
  1861. !*** ./node_modules/core-js/modules/es.object.assign.js ***!
  1862. \**********************************************************/
  1863. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  1864. var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
  1865. var assign = __webpack_require__(/*! ../internals/object-assign */ "./node_modules/core-js/internals/object-assign.js");
  1866. // `Object.assign` method
  1867. // https://tc39.es/ecma262/#sec-object.assign
  1868. // eslint-disable-next-line es/no-object-assign -- required for testing
  1869. $({ target: 'Object', stat: true, forced: Object.assign !== assign }, {
  1870. assign: assign
  1871. });
  1872. /***/ }),
  1873. /***/ "./node_modules/core-js/modules/es.object.define-property.js":
  1874. /*!*******************************************************************!*\
  1875. !*** ./node_modules/core-js/modules/es.object.define-property.js ***!
  1876. \*******************************************************************/
  1877. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  1878. var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
  1879. var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js");
  1880. var objectDefinePropertyModile = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js");
  1881. // `Object.defineProperty` method
  1882. // https://tc39.es/ecma262/#sec-object.defineproperty
  1883. $({ target: 'Object', stat: true, forced: !DESCRIPTORS, sham: !DESCRIPTORS }, {
  1884. defineProperty: objectDefinePropertyModile.f
  1885. });
  1886. /***/ }),
  1887. /***/ "./node_modules/core-js/modules/es.parse-float.js":
  1888. /*!********************************************************!*\
  1889. !*** ./node_modules/core-js/modules/es.parse-float.js ***!
  1890. \********************************************************/
  1891. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  1892. var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
  1893. var parseFloatImplementation = __webpack_require__(/*! ../internals/number-parse-float */ "./node_modules/core-js/internals/number-parse-float.js");
  1894. // `parseFloat` method
  1895. // https://tc39.es/ecma262/#sec-parsefloat-string
  1896. $({ global: true, forced: parseFloat != parseFloatImplementation }, {
  1897. parseFloat: parseFloatImplementation
  1898. });
  1899. /***/ }),
  1900. /***/ "./node_modules/core-js/modules/es.string.includes.js":
  1901. /*!************************************************************!*\
  1902. !*** ./node_modules/core-js/modules/es.string.includes.js ***!
  1903. \************************************************************/
  1904. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  1905. "use strict";
  1906. var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js");
  1907. var notARegExp = __webpack_require__(/*! ../internals/not-a-regexp */ "./node_modules/core-js/internals/not-a-regexp.js");
  1908. var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js");
  1909. var correctIsRegExpLogic = __webpack_require__(/*! ../internals/correct-is-regexp-logic */ "./node_modules/core-js/internals/correct-is-regexp-logic.js");
  1910. // `String.prototype.includes` method
  1911. // https://tc39.es/ecma262/#sec-string.prototype.includes
  1912. $({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {
  1913. includes: function includes(searchString /* , position = 0 */) {
  1914. return !!~String(requireObjectCoercible(this))
  1915. .indexOf(notARegExp(searchString), arguments.length > 1 ? arguments[1] : undefined);
  1916. }
  1917. });
  1918. /***/ }),
  1919. /***/ "./node_modules/core-js/modules/es.string.search.js":
  1920. /*!**********************************************************!*\
  1921. !*** ./node_modules/core-js/modules/es.string.search.js ***!
  1922. \**********************************************************/
  1923. /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
  1924. "use strict";
  1925. var fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ "./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js");
  1926. var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js");
  1927. var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js");
  1928. var sameValue = __webpack_require__(/*! ../internals/same-value */ "./node_modules/core-js/internals/same-value.js");
  1929. var regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ "./node_modules/core-js/internals/regexp-exec-abstract.js");
  1930. // @@search logic
  1931. fixRegExpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) {
  1932. return [
  1933. // `String.prototype.search` method
  1934. // https://tc39.es/ecma262/#sec-string.prototype.search
  1935. function search(regexp) {
  1936. var O = requireObjectCoercible(this);
  1937. var searcher = regexp == undefined ? undefined : regexp[SEARCH];
  1938. return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
  1939. },
  1940. // `RegExp.prototype[@@search]` method
  1941. // https://tc39.es/ecma262/#sec-regexp.prototype-@@search
  1942. function (regexp) {
  1943. var res = maybeCallNative(nativeSearch, regexp, this);
  1944. if (res.done) return res.value;
  1945. var rx = anObject(regexp);
  1946. var S = String(this);
  1947. var previousLastIndex = rx.lastIndex;
  1948. if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;
  1949. var result = regExpExec(rx, S);
  1950. if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;
  1951. return result === null ? -1 : result.index;
  1952. }
  1953. ];
  1954. });
  1955. /***/ }),
  1956. /***/ "./node_modules/bootstrap-daterangepicker/daterangepicker.css":
  1957. /*!********************************************************************!*\
  1958. !*** ./node_modules/bootstrap-daterangepicker/daterangepicker.css ***!
  1959. \********************************************************************/
  1960. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1961. "use strict";
  1962. __webpack_require__.r(__webpack_exports__);
  1963. // extracted by mini-css-extract-plugin
  1964. /***/ }),
  1965. /***/ "./node_modules/select2-bootstrap4-theme/dist/select2-bootstrap4.min.css":
  1966. /*!*******************************************************************************!*\
  1967. !*** ./node_modules/select2-bootstrap4-theme/dist/select2-bootstrap4.min.css ***!
  1968. \*******************************************************************************/
  1969. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1970. "use strict";
  1971. __webpack_require__.r(__webpack_exports__);
  1972. // extracted by mini-css-extract-plugin
  1973. /***/ }),
  1974. /***/ "./node_modules/select2/dist/css/select2.min.css":
  1975. /*!*******************************************************!*\
  1976. !*** ./node_modules/select2/dist/css/select2.min.css ***!
  1977. \*******************************************************/
  1978. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1979. "use strict";
  1980. __webpack_require__.r(__webpack_exports__);
  1981. // extracted by mini-css-extract-plugin
  1982. /***/ }),
  1983. /***/ "./node_modules/toastr/toastr.scss":
  1984. /*!*****************************************!*\
  1985. !*** ./node_modules/toastr/toastr.scss ***!
  1986. \*****************************************/
  1987. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1988. "use strict";
  1989. __webpack_require__.r(__webpack_exports__);
  1990. // extracted by mini-css-extract-plugin
  1991. /***/ }),
  1992. /***/ "./node_modules/moment/dist/locale/af.js":
  1993. /*!***********************************************!*\
  1994. !*** ./node_modules/moment/dist/locale/af.js ***!
  1995. \***********************************************/
  1996. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  1997. "use strict";
  1998. __webpack_require__.r(__webpack_exports__);
  1999. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  2000. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  2001. /* harmony export */ });
  2002. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  2003. //! moment.js locale configuration
  2004. //! locale : Afrikaans [af]
  2005. //! author : Werner Mollentze : https://github.com/wernerm
  2006. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('af', {
  2007. months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(
  2008. '_'
  2009. ),
  2010. monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),
  2011. weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(
  2012. '_'
  2013. ),
  2014. weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),
  2015. weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),
  2016. meridiemParse: /vm|nm/i,
  2017. isPM: function (input) {
  2018. return /^nm$/i.test(input);
  2019. },
  2020. meridiem: function (hours, minutes, isLower) {
  2021. if (hours < 12) {
  2022. return isLower ? 'vm' : 'VM';
  2023. } else {
  2024. return isLower ? 'nm' : 'NM';
  2025. }
  2026. },
  2027. longDateFormat: {
  2028. LT: 'HH:mm',
  2029. LTS: 'HH:mm:ss',
  2030. L: 'DD/MM/YYYY',
  2031. LL: 'D MMMM YYYY',
  2032. LLL: 'D MMMM YYYY HH:mm',
  2033. LLLL: 'dddd, D MMMM YYYY HH:mm',
  2034. },
  2035. calendar: {
  2036. sameDay: '[Vandag om] LT',
  2037. nextDay: '[Môre om] LT',
  2038. nextWeek: 'dddd [om] LT',
  2039. lastDay: '[Gister om] LT',
  2040. lastWeek: '[Laas] dddd [om] LT',
  2041. sameElse: 'L',
  2042. },
  2043. relativeTime: {
  2044. future: 'oor %s',
  2045. past: '%s gelede',
  2046. s: "'n paar sekondes",
  2047. ss: '%d sekondes',
  2048. m: "'n minuut",
  2049. mm: '%d minute',
  2050. h: "'n uur",
  2051. hh: '%d ure',
  2052. d: "'n dag",
  2053. dd: '%d dae',
  2054. M: "'n maand",
  2055. MM: '%d maande',
  2056. y: "'n jaar",
  2057. yy: '%d jaar',
  2058. },
  2059. dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
  2060. ordinal: function (number) {
  2061. return (
  2062. number +
  2063. (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
  2064. ); // Thanks to Joris Röling : https://github.com/jjupiter
  2065. },
  2066. week: {
  2067. dow: 1, // Maandag is die eerste dag van die week.
  2068. doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
  2069. },
  2070. }));
  2071. /***/ }),
  2072. /***/ "./node_modules/moment/dist/locale/ar-dz.js":
  2073. /*!**************************************************!*\
  2074. !*** ./node_modules/moment/dist/locale/ar-dz.js ***!
  2075. \**************************************************/
  2076. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  2077. "use strict";
  2078. __webpack_require__.r(__webpack_exports__);
  2079. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  2080. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  2081. /* harmony export */ });
  2082. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  2083. //! moment.js locale configuration
  2084. //! locale : Arabic (Algeria) [ar-dz]
  2085. //! author : Amine Roukh: https://github.com/Amine27
  2086. //! author : Abdel Said: https://github.com/abdelsaid
  2087. //! author : Ahmed Elkhatib
  2088. //! author : forabi https://github.com/forabi
  2089. //! author : Noureddine LOUAHEDJ : https://github.com/noureddinem
  2090. var pluralForm = function (n) {
  2091. return n === 0
  2092. ? 0
  2093. : n === 1
  2094. ? 1
  2095. : n === 2
  2096. ? 2
  2097. : n % 100 >= 3 && n % 100 <= 10
  2098. ? 3
  2099. : n % 100 >= 11
  2100. ? 4
  2101. : 5;
  2102. },
  2103. plurals = {
  2104. s: [
  2105. 'أقل من ثانية',
  2106. 'ثانية واحدة',
  2107. ['ثانيتان', 'ثانيتين'],
  2108. '%d ثوان',
  2109. '%d ثانية',
  2110. '%d ثانية',
  2111. ],
  2112. m: [
  2113. 'أقل من دقيقة',
  2114. 'دقيقة واحدة',
  2115. ['دقيقتان', 'دقيقتين'],
  2116. '%d دقائق',
  2117. '%d دقيقة',
  2118. '%d دقيقة',
  2119. ],
  2120. h: [
  2121. 'أقل من ساعة',
  2122. 'ساعة واحدة',
  2123. ['ساعتان', 'ساعتين'],
  2124. '%d ساعات',
  2125. '%d ساعة',
  2126. '%d ساعة',
  2127. ],
  2128. d: [
  2129. 'أقل من يوم',
  2130. 'يوم واحد',
  2131. ['يومان', 'يومين'],
  2132. '%d أيام',
  2133. '%d يومًا',
  2134. '%d يوم',
  2135. ],
  2136. M: [
  2137. 'أقل من شهر',
  2138. 'شهر واحد',
  2139. ['شهران', 'شهرين'],
  2140. '%d أشهر',
  2141. '%d شهرا',
  2142. '%d شهر',
  2143. ],
  2144. y: [
  2145. 'أقل من عام',
  2146. 'عام واحد',
  2147. ['عامان', 'عامين'],
  2148. '%d أعوام',
  2149. '%d عامًا',
  2150. '%d عام',
  2151. ],
  2152. },
  2153. pluralize = function (u) {
  2154. return function (number, withoutSuffix, string, isFuture) {
  2155. var f = pluralForm(number),
  2156. str = plurals[u][pluralForm(number)];
  2157. if (f === 2) {
  2158. str = str[withoutSuffix ? 0 : 1];
  2159. }
  2160. return str.replace(/%d/i, number);
  2161. };
  2162. },
  2163. months = [
  2164. 'جانفي',
  2165. 'فيفري',
  2166. 'مارس',
  2167. 'أفريل',
  2168. 'ماي',
  2169. 'جوان',
  2170. 'جويلية',
  2171. 'أوت',
  2172. 'سبتمبر',
  2173. 'أكتوبر',
  2174. 'نوفمبر',
  2175. 'ديسمبر',
  2176. ];
  2177. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ar-dz', {
  2178. months: months,
  2179. monthsShort: months,
  2180. weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
  2181. weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
  2182. weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
  2183. weekdaysParseExact: true,
  2184. longDateFormat: {
  2185. LT: 'HH:mm',
  2186. LTS: 'HH:mm:ss',
  2187. L: 'D/\u200FM/\u200FYYYY',
  2188. LL: 'D MMMM YYYY',
  2189. LLL: 'D MMMM YYYY HH:mm',
  2190. LLLL: 'dddd D MMMM YYYY HH:mm',
  2191. },
  2192. meridiemParse: /ص|م/,
  2193. isPM: function (input) {
  2194. return 'م' === input;
  2195. },
  2196. meridiem: function (hour, minute, isLower) {
  2197. if (hour < 12) {
  2198. return 'ص';
  2199. } else {
  2200. return 'م';
  2201. }
  2202. },
  2203. calendar: {
  2204. sameDay: '[اليوم عند الساعة] LT',
  2205. nextDay: '[غدًا عند الساعة] LT',
  2206. nextWeek: 'dddd [عند الساعة] LT',
  2207. lastDay: '[أمس عند الساعة] LT',
  2208. lastWeek: 'dddd [عند الساعة] LT',
  2209. sameElse: 'L',
  2210. },
  2211. relativeTime: {
  2212. future: 'بعد %s',
  2213. past: 'منذ %s',
  2214. s: pluralize('s'),
  2215. ss: pluralize('s'),
  2216. m: pluralize('m'),
  2217. mm: pluralize('m'),
  2218. h: pluralize('h'),
  2219. hh: pluralize('h'),
  2220. d: pluralize('d'),
  2221. dd: pluralize('d'),
  2222. M: pluralize('M'),
  2223. MM: pluralize('M'),
  2224. y: pluralize('y'),
  2225. yy: pluralize('y'),
  2226. },
  2227. postformat: function (string) {
  2228. return string.replace(/,/g, '،');
  2229. },
  2230. week: {
  2231. dow: 0, // Sunday is the first day of the week.
  2232. doy: 4, // The week that contains Jan 4th is the first week of the year.
  2233. },
  2234. }));
  2235. /***/ }),
  2236. /***/ "./node_modules/moment/dist/locale/ar-kw.js":
  2237. /*!**************************************************!*\
  2238. !*** ./node_modules/moment/dist/locale/ar-kw.js ***!
  2239. \**************************************************/
  2240. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  2241. "use strict";
  2242. __webpack_require__.r(__webpack_exports__);
  2243. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  2244. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  2245. /* harmony export */ });
  2246. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  2247. //! moment.js locale configuration
  2248. //! locale : Arabic (Kuwait) [ar-kw]
  2249. //! author : Nusret Parlak: https://github.com/nusretparlak
  2250. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ar-kw', {
  2251. months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
  2252. '_'
  2253. ),
  2254. monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
  2255. '_'
  2256. ),
  2257. weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
  2258. weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
  2259. weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
  2260. weekdaysParseExact: true,
  2261. longDateFormat: {
  2262. LT: 'HH:mm',
  2263. LTS: 'HH:mm:ss',
  2264. L: 'DD/MM/YYYY',
  2265. LL: 'D MMMM YYYY',
  2266. LLL: 'D MMMM YYYY HH:mm',
  2267. LLLL: 'dddd D MMMM YYYY HH:mm',
  2268. },
  2269. calendar: {
  2270. sameDay: '[اليوم على الساعة] LT',
  2271. nextDay: '[غدا على الساعة] LT',
  2272. nextWeek: 'dddd [على الساعة] LT',
  2273. lastDay: '[أمس على الساعة] LT',
  2274. lastWeek: 'dddd [على الساعة] LT',
  2275. sameElse: 'L',
  2276. },
  2277. relativeTime: {
  2278. future: 'في %s',
  2279. past: 'منذ %s',
  2280. s: 'ثوان',
  2281. ss: '%d ثانية',
  2282. m: 'دقيقة',
  2283. mm: '%d دقائق',
  2284. h: 'ساعة',
  2285. hh: '%d ساعات',
  2286. d: 'يوم',
  2287. dd: '%d أيام',
  2288. M: 'شهر',
  2289. MM: '%d أشهر',
  2290. y: 'سنة',
  2291. yy: '%d سنوات',
  2292. },
  2293. week: {
  2294. dow: 0, // Sunday is the first day of the week.
  2295. doy: 12, // The week that contains Jan 12th is the first week of the year.
  2296. },
  2297. }));
  2298. /***/ }),
  2299. /***/ "./node_modules/moment/dist/locale/ar-ly.js":
  2300. /*!**************************************************!*\
  2301. !*** ./node_modules/moment/dist/locale/ar-ly.js ***!
  2302. \**************************************************/
  2303. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  2304. "use strict";
  2305. __webpack_require__.r(__webpack_exports__);
  2306. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  2307. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  2308. /* harmony export */ });
  2309. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  2310. //! moment.js locale configuration
  2311. //! locale : Arabic (Lybia) [ar-ly]
  2312. //! author : Ali Hmer: https://github.com/kikoanis
  2313. var symbolMap = {
  2314. 1: '1',
  2315. 2: '2',
  2316. 3: '3',
  2317. 4: '4',
  2318. 5: '5',
  2319. 6: '6',
  2320. 7: '7',
  2321. 8: '8',
  2322. 9: '9',
  2323. 0: '0',
  2324. },
  2325. pluralForm = function (n) {
  2326. return n === 0
  2327. ? 0
  2328. : n === 1
  2329. ? 1
  2330. : n === 2
  2331. ? 2
  2332. : n % 100 >= 3 && n % 100 <= 10
  2333. ? 3
  2334. : n % 100 >= 11
  2335. ? 4
  2336. : 5;
  2337. },
  2338. plurals = {
  2339. s: [
  2340. 'أقل من ثانية',
  2341. 'ثانية واحدة',
  2342. ['ثانيتان', 'ثانيتين'],
  2343. '%d ثوان',
  2344. '%d ثانية',
  2345. '%d ثانية',
  2346. ],
  2347. m: [
  2348. 'أقل من دقيقة',
  2349. 'دقيقة واحدة',
  2350. ['دقيقتان', 'دقيقتين'],
  2351. '%d دقائق',
  2352. '%d دقيقة',
  2353. '%d دقيقة',
  2354. ],
  2355. h: [
  2356. 'أقل من ساعة',
  2357. 'ساعة واحدة',
  2358. ['ساعتان', 'ساعتين'],
  2359. '%d ساعات',
  2360. '%d ساعة',
  2361. '%d ساعة',
  2362. ],
  2363. d: [
  2364. 'أقل من يوم',
  2365. 'يوم واحد',
  2366. ['يومان', 'يومين'],
  2367. '%d أيام',
  2368. '%d يومًا',
  2369. '%d يوم',
  2370. ],
  2371. M: [
  2372. 'أقل من شهر',
  2373. 'شهر واحد',
  2374. ['شهران', 'شهرين'],
  2375. '%d أشهر',
  2376. '%d شهرا',
  2377. '%d شهر',
  2378. ],
  2379. y: [
  2380. 'أقل من عام',
  2381. 'عام واحد',
  2382. ['عامان', 'عامين'],
  2383. '%d أعوام',
  2384. '%d عامًا',
  2385. '%d عام',
  2386. ],
  2387. },
  2388. pluralize = function (u) {
  2389. return function (number, withoutSuffix, string, isFuture) {
  2390. var f = pluralForm(number),
  2391. str = plurals[u][pluralForm(number)];
  2392. if (f === 2) {
  2393. str = str[withoutSuffix ? 0 : 1];
  2394. }
  2395. return str.replace(/%d/i, number);
  2396. };
  2397. },
  2398. months = [
  2399. 'يناير',
  2400. 'فبراير',
  2401. 'مارس',
  2402. 'أبريل',
  2403. 'مايو',
  2404. 'يونيو',
  2405. 'يوليو',
  2406. 'أغسطس',
  2407. 'سبتمبر',
  2408. 'أكتوبر',
  2409. 'نوفمبر',
  2410. 'ديسمبر',
  2411. ];
  2412. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ar-ly', {
  2413. months: months,
  2414. monthsShort: months,
  2415. weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
  2416. weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
  2417. weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
  2418. weekdaysParseExact: true,
  2419. longDateFormat: {
  2420. LT: 'HH:mm',
  2421. LTS: 'HH:mm:ss',
  2422. L: 'D/\u200FM/\u200FYYYY',
  2423. LL: 'D MMMM YYYY',
  2424. LLL: 'D MMMM YYYY HH:mm',
  2425. LLLL: 'dddd D MMMM YYYY HH:mm',
  2426. },
  2427. meridiemParse: /ص|م/,
  2428. isPM: function (input) {
  2429. return 'م' === input;
  2430. },
  2431. meridiem: function (hour, minute, isLower) {
  2432. if (hour < 12) {
  2433. return 'ص';
  2434. } else {
  2435. return 'م';
  2436. }
  2437. },
  2438. calendar: {
  2439. sameDay: '[اليوم عند الساعة] LT',
  2440. nextDay: '[غدًا عند الساعة] LT',
  2441. nextWeek: 'dddd [عند الساعة] LT',
  2442. lastDay: '[أمس عند الساعة] LT',
  2443. lastWeek: 'dddd [عند الساعة] LT',
  2444. sameElse: 'L',
  2445. },
  2446. relativeTime: {
  2447. future: 'بعد %s',
  2448. past: 'منذ %s',
  2449. s: pluralize('s'),
  2450. ss: pluralize('s'),
  2451. m: pluralize('m'),
  2452. mm: pluralize('m'),
  2453. h: pluralize('h'),
  2454. hh: pluralize('h'),
  2455. d: pluralize('d'),
  2456. dd: pluralize('d'),
  2457. M: pluralize('M'),
  2458. MM: pluralize('M'),
  2459. y: pluralize('y'),
  2460. yy: pluralize('y'),
  2461. },
  2462. preparse: function (string) {
  2463. return string.replace(/،/g, ',');
  2464. },
  2465. postformat: function (string) {
  2466. return string
  2467. .replace(/\d/g, function (match) {
  2468. return symbolMap[match];
  2469. })
  2470. .replace(/,/g, '،');
  2471. },
  2472. week: {
  2473. dow: 6, // Saturday is the first day of the week.
  2474. doy: 12, // The week that contains Jan 12th is the first week of the year.
  2475. },
  2476. }));
  2477. /***/ }),
  2478. /***/ "./node_modules/moment/dist/locale/ar-ma.js":
  2479. /*!**************************************************!*\
  2480. !*** ./node_modules/moment/dist/locale/ar-ma.js ***!
  2481. \**************************************************/
  2482. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  2483. "use strict";
  2484. __webpack_require__.r(__webpack_exports__);
  2485. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  2486. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  2487. /* harmony export */ });
  2488. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  2489. //! moment.js locale configuration
  2490. //! locale : Arabic (Morocco) [ar-ma]
  2491. //! author : ElFadili Yassine : https://github.com/ElFadiliY
  2492. //! author : Abdel Said : https://github.com/abdelsaid
  2493. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ar-ma', {
  2494. months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
  2495. '_'
  2496. ),
  2497. monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(
  2498. '_'
  2499. ),
  2500. weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
  2501. weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),
  2502. weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
  2503. weekdaysParseExact: true,
  2504. longDateFormat: {
  2505. LT: 'HH:mm',
  2506. LTS: 'HH:mm:ss',
  2507. L: 'DD/MM/YYYY',
  2508. LL: 'D MMMM YYYY',
  2509. LLL: 'D MMMM YYYY HH:mm',
  2510. LLLL: 'dddd D MMMM YYYY HH:mm',
  2511. },
  2512. calendar: {
  2513. sameDay: '[اليوم على الساعة] LT',
  2514. nextDay: '[غدا على الساعة] LT',
  2515. nextWeek: 'dddd [على الساعة] LT',
  2516. lastDay: '[أمس على الساعة] LT',
  2517. lastWeek: 'dddd [على الساعة] LT',
  2518. sameElse: 'L',
  2519. },
  2520. relativeTime: {
  2521. future: 'في %s',
  2522. past: 'منذ %s',
  2523. s: 'ثوان',
  2524. ss: '%d ثانية',
  2525. m: 'دقيقة',
  2526. mm: '%d دقائق',
  2527. h: 'ساعة',
  2528. hh: '%d ساعات',
  2529. d: 'يوم',
  2530. dd: '%d أيام',
  2531. M: 'شهر',
  2532. MM: '%d أشهر',
  2533. y: 'سنة',
  2534. yy: '%d سنوات',
  2535. },
  2536. week: {
  2537. dow: 1, // Monday is the first day of the week.
  2538. doy: 4, // The week that contains Jan 4th is the first week of the year.
  2539. },
  2540. }));
  2541. /***/ }),
  2542. /***/ "./node_modules/moment/dist/locale/ar-sa.js":
  2543. /*!**************************************************!*\
  2544. !*** ./node_modules/moment/dist/locale/ar-sa.js ***!
  2545. \**************************************************/
  2546. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  2547. "use strict";
  2548. __webpack_require__.r(__webpack_exports__);
  2549. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  2550. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  2551. /* harmony export */ });
  2552. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  2553. //! moment.js locale configuration
  2554. //! locale : Arabic (Saudi Arabia) [ar-sa]
  2555. //! author : Suhail Alkowaileet : https://github.com/xsoh
  2556. var symbolMap = {
  2557. 1: '١',
  2558. 2: '٢',
  2559. 3: '٣',
  2560. 4: '٤',
  2561. 5: '٥',
  2562. 6: '٦',
  2563. 7: '٧',
  2564. 8: '٨',
  2565. 9: '٩',
  2566. 0: '٠',
  2567. },
  2568. numberMap = {
  2569. '١': '1',
  2570. '٢': '2',
  2571. '٣': '3',
  2572. '٤': '4',
  2573. '٥': '5',
  2574. '٦': '6',
  2575. '٧': '7',
  2576. '٨': '8',
  2577. '٩': '9',
  2578. '٠': '0',
  2579. };
  2580. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ar-sa', {
  2581. months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
  2582. '_'
  2583. ),
  2584. monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
  2585. '_'
  2586. ),
  2587. weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
  2588. weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
  2589. weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
  2590. weekdaysParseExact: true,
  2591. longDateFormat: {
  2592. LT: 'HH:mm',
  2593. LTS: 'HH:mm:ss',
  2594. L: 'DD/MM/YYYY',
  2595. LL: 'D MMMM YYYY',
  2596. LLL: 'D MMMM YYYY HH:mm',
  2597. LLLL: 'dddd D MMMM YYYY HH:mm',
  2598. },
  2599. meridiemParse: /ص|م/,
  2600. isPM: function (input) {
  2601. return 'م' === input;
  2602. },
  2603. meridiem: function (hour, minute, isLower) {
  2604. if (hour < 12) {
  2605. return 'ص';
  2606. } else {
  2607. return 'م';
  2608. }
  2609. },
  2610. calendar: {
  2611. sameDay: '[اليوم على الساعة] LT',
  2612. nextDay: '[غدا على الساعة] LT',
  2613. nextWeek: 'dddd [على الساعة] LT',
  2614. lastDay: '[أمس على الساعة] LT',
  2615. lastWeek: 'dddd [على الساعة] LT',
  2616. sameElse: 'L',
  2617. },
  2618. relativeTime: {
  2619. future: 'في %s',
  2620. past: 'منذ %s',
  2621. s: 'ثوان',
  2622. ss: '%d ثانية',
  2623. m: 'دقيقة',
  2624. mm: '%d دقائق',
  2625. h: 'ساعة',
  2626. hh: '%d ساعات',
  2627. d: 'يوم',
  2628. dd: '%d أيام',
  2629. M: 'شهر',
  2630. MM: '%d أشهر',
  2631. y: 'سنة',
  2632. yy: '%d سنوات',
  2633. },
  2634. preparse: function (string) {
  2635. return string
  2636. .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
  2637. return numberMap[match];
  2638. })
  2639. .replace(/،/g, ',');
  2640. },
  2641. postformat: function (string) {
  2642. return string
  2643. .replace(/\d/g, function (match) {
  2644. return symbolMap[match];
  2645. })
  2646. .replace(/,/g, '،');
  2647. },
  2648. week: {
  2649. dow: 0, // Sunday is the first day of the week.
  2650. doy: 6, // The week that contains Jan 6th is the first week of the year.
  2651. },
  2652. }));
  2653. /***/ }),
  2654. /***/ "./node_modules/moment/dist/locale/ar-tn.js":
  2655. /*!**************************************************!*\
  2656. !*** ./node_modules/moment/dist/locale/ar-tn.js ***!
  2657. \**************************************************/
  2658. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  2659. "use strict";
  2660. __webpack_require__.r(__webpack_exports__);
  2661. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  2662. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  2663. /* harmony export */ });
  2664. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  2665. //! moment.js locale configuration
  2666. //! locale : Arabic (Tunisia) [ar-tn]
  2667. //! author : Nader Toukabri : https://github.com/naderio
  2668. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ar-tn', {
  2669. months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
  2670. '_'
  2671. ),
  2672. monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(
  2673. '_'
  2674. ),
  2675. weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
  2676. weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
  2677. weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
  2678. weekdaysParseExact: true,
  2679. longDateFormat: {
  2680. LT: 'HH:mm',
  2681. LTS: 'HH:mm:ss',
  2682. L: 'DD/MM/YYYY',
  2683. LL: 'D MMMM YYYY',
  2684. LLL: 'D MMMM YYYY HH:mm',
  2685. LLLL: 'dddd D MMMM YYYY HH:mm',
  2686. },
  2687. calendar: {
  2688. sameDay: '[اليوم على الساعة] LT',
  2689. nextDay: '[غدا على الساعة] LT',
  2690. nextWeek: 'dddd [على الساعة] LT',
  2691. lastDay: '[أمس على الساعة] LT',
  2692. lastWeek: 'dddd [على الساعة] LT',
  2693. sameElse: 'L',
  2694. },
  2695. relativeTime: {
  2696. future: 'في %s',
  2697. past: 'منذ %s',
  2698. s: 'ثوان',
  2699. ss: '%d ثانية',
  2700. m: 'دقيقة',
  2701. mm: '%d دقائق',
  2702. h: 'ساعة',
  2703. hh: '%d ساعات',
  2704. d: 'يوم',
  2705. dd: '%d أيام',
  2706. M: 'شهر',
  2707. MM: '%d أشهر',
  2708. y: 'سنة',
  2709. yy: '%d سنوات',
  2710. },
  2711. week: {
  2712. dow: 1, // Monday is the first day of the week.
  2713. doy: 4, // The week that contains Jan 4th is the first week of the year.
  2714. },
  2715. }));
  2716. /***/ }),
  2717. /***/ "./node_modules/moment/dist/locale/ar.js":
  2718. /*!***********************************************!*\
  2719. !*** ./node_modules/moment/dist/locale/ar.js ***!
  2720. \***********************************************/
  2721. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  2722. "use strict";
  2723. __webpack_require__.r(__webpack_exports__);
  2724. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  2725. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  2726. /* harmony export */ });
  2727. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  2728. //! moment.js locale configuration
  2729. //! locale : Arabic [ar]
  2730. //! author : Abdel Said: https://github.com/abdelsaid
  2731. //! author : Ahmed Elkhatib
  2732. //! author : forabi https://github.com/forabi
  2733. var symbolMap = {
  2734. 1: '١',
  2735. 2: '٢',
  2736. 3: '٣',
  2737. 4: '٤',
  2738. 5: '٥',
  2739. 6: '٦',
  2740. 7: '٧',
  2741. 8: '٨',
  2742. 9: '٩',
  2743. 0: '٠',
  2744. },
  2745. numberMap = {
  2746. '١': '1',
  2747. '٢': '2',
  2748. '٣': '3',
  2749. '٤': '4',
  2750. '٥': '5',
  2751. '٦': '6',
  2752. '٧': '7',
  2753. '٨': '8',
  2754. '٩': '9',
  2755. '٠': '0',
  2756. },
  2757. pluralForm = function (n) {
  2758. return n === 0
  2759. ? 0
  2760. : n === 1
  2761. ? 1
  2762. : n === 2
  2763. ? 2
  2764. : n % 100 >= 3 && n % 100 <= 10
  2765. ? 3
  2766. : n % 100 >= 11
  2767. ? 4
  2768. : 5;
  2769. },
  2770. plurals = {
  2771. s: [
  2772. 'أقل من ثانية',
  2773. 'ثانية واحدة',
  2774. ['ثانيتان', 'ثانيتين'],
  2775. '%d ثوان',
  2776. '%d ثانية',
  2777. '%d ثانية',
  2778. ],
  2779. m: [
  2780. 'أقل من دقيقة',
  2781. 'دقيقة واحدة',
  2782. ['دقيقتان', 'دقيقتين'],
  2783. '%d دقائق',
  2784. '%d دقيقة',
  2785. '%d دقيقة',
  2786. ],
  2787. h: [
  2788. 'أقل من ساعة',
  2789. 'ساعة واحدة',
  2790. ['ساعتان', 'ساعتين'],
  2791. '%d ساعات',
  2792. '%d ساعة',
  2793. '%d ساعة',
  2794. ],
  2795. d: [
  2796. 'أقل من يوم',
  2797. 'يوم واحد',
  2798. ['يومان', 'يومين'],
  2799. '%d أيام',
  2800. '%d يومًا',
  2801. '%d يوم',
  2802. ],
  2803. M: [
  2804. 'أقل من شهر',
  2805. 'شهر واحد',
  2806. ['شهران', 'شهرين'],
  2807. '%d أشهر',
  2808. '%d شهرا',
  2809. '%d شهر',
  2810. ],
  2811. y: [
  2812. 'أقل من عام',
  2813. 'عام واحد',
  2814. ['عامان', 'عامين'],
  2815. '%d أعوام',
  2816. '%d عامًا',
  2817. '%d عام',
  2818. ],
  2819. },
  2820. pluralize = function (u) {
  2821. return function (number, withoutSuffix, string, isFuture) {
  2822. var f = pluralForm(number),
  2823. str = plurals[u][pluralForm(number)];
  2824. if (f === 2) {
  2825. str = str[withoutSuffix ? 0 : 1];
  2826. }
  2827. return str.replace(/%d/i, number);
  2828. };
  2829. },
  2830. months = [
  2831. 'يناير',
  2832. 'فبراير',
  2833. 'مارس',
  2834. 'أبريل',
  2835. 'مايو',
  2836. 'يونيو',
  2837. 'يوليو',
  2838. 'أغسطس',
  2839. 'سبتمبر',
  2840. 'أكتوبر',
  2841. 'نوفمبر',
  2842. 'ديسمبر',
  2843. ];
  2844. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ar', {
  2845. months: months,
  2846. monthsShort: months,
  2847. weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),
  2848. weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),
  2849. weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),
  2850. weekdaysParseExact: true,
  2851. longDateFormat: {
  2852. LT: 'HH:mm',
  2853. LTS: 'HH:mm:ss',
  2854. L: 'D/\u200FM/\u200FYYYY',
  2855. LL: 'D MMMM YYYY',
  2856. LLL: 'D MMMM YYYY HH:mm',
  2857. LLLL: 'dddd D MMMM YYYY HH:mm',
  2858. },
  2859. meridiemParse: /ص|م/,
  2860. isPM: function (input) {
  2861. return 'م' === input;
  2862. },
  2863. meridiem: function (hour, minute, isLower) {
  2864. if (hour < 12) {
  2865. return 'ص';
  2866. } else {
  2867. return 'م';
  2868. }
  2869. },
  2870. calendar: {
  2871. sameDay: '[اليوم عند الساعة] LT',
  2872. nextDay: '[غدًا عند الساعة] LT',
  2873. nextWeek: 'dddd [عند الساعة] LT',
  2874. lastDay: '[أمس عند الساعة] LT',
  2875. lastWeek: 'dddd [عند الساعة] LT',
  2876. sameElse: 'L',
  2877. },
  2878. relativeTime: {
  2879. future: 'بعد %s',
  2880. past: 'منذ %s',
  2881. s: pluralize('s'),
  2882. ss: pluralize('s'),
  2883. m: pluralize('m'),
  2884. mm: pluralize('m'),
  2885. h: pluralize('h'),
  2886. hh: pluralize('h'),
  2887. d: pluralize('d'),
  2888. dd: pluralize('d'),
  2889. M: pluralize('M'),
  2890. MM: pluralize('M'),
  2891. y: pluralize('y'),
  2892. yy: pluralize('y'),
  2893. },
  2894. preparse: function (string) {
  2895. return string
  2896. .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
  2897. return numberMap[match];
  2898. })
  2899. .replace(/،/g, ',');
  2900. },
  2901. postformat: function (string) {
  2902. return string
  2903. .replace(/\d/g, function (match) {
  2904. return symbolMap[match];
  2905. })
  2906. .replace(/,/g, '،');
  2907. },
  2908. week: {
  2909. dow: 6, // Saturday is the first day of the week.
  2910. doy: 12, // The week that contains Jan 12th is the first week of the year.
  2911. },
  2912. }));
  2913. /***/ }),
  2914. /***/ "./node_modules/moment/dist/locale/az.js":
  2915. /*!***********************************************!*\
  2916. !*** ./node_modules/moment/dist/locale/az.js ***!
  2917. \***********************************************/
  2918. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  2919. "use strict";
  2920. __webpack_require__.r(__webpack_exports__);
  2921. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  2922. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  2923. /* harmony export */ });
  2924. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  2925. //! moment.js locale configuration
  2926. //! locale : Azerbaijani [az]
  2927. //! author : topchiyev : https://github.com/topchiyev
  2928. var suffixes = {
  2929. 1: '-inci',
  2930. 5: '-inci',
  2931. 8: '-inci',
  2932. 70: '-inci',
  2933. 80: '-inci',
  2934. 2: '-nci',
  2935. 7: '-nci',
  2936. 20: '-nci',
  2937. 50: '-nci',
  2938. 3: '-üncü',
  2939. 4: '-üncü',
  2940. 100: '-üncü',
  2941. 6: '-ncı',
  2942. 9: '-uncu',
  2943. 10: '-uncu',
  2944. 30: '-uncu',
  2945. 60: '-ıncı',
  2946. 90: '-ıncı',
  2947. };
  2948. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('az', {
  2949. months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(
  2950. '_'
  2951. ),
  2952. monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),
  2953. weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(
  2954. '_'
  2955. ),
  2956. weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),
  2957. weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),
  2958. weekdaysParseExact: true,
  2959. longDateFormat: {
  2960. LT: 'HH:mm',
  2961. LTS: 'HH:mm:ss',
  2962. L: 'DD.MM.YYYY',
  2963. LL: 'D MMMM YYYY',
  2964. LLL: 'D MMMM YYYY HH:mm',
  2965. LLLL: 'dddd, D MMMM YYYY HH:mm',
  2966. },
  2967. calendar: {
  2968. sameDay: '[bugün saat] LT',
  2969. nextDay: '[sabah saat] LT',
  2970. nextWeek: '[gələn həftə] dddd [saat] LT',
  2971. lastDay: '[dünən] LT',
  2972. lastWeek: '[keçən həftə] dddd [saat] LT',
  2973. sameElse: 'L',
  2974. },
  2975. relativeTime: {
  2976. future: '%s sonra',
  2977. past: '%s əvvəl',
  2978. s: 'bir neçə saniyə',
  2979. ss: '%d saniyə',
  2980. m: 'bir dəqiqə',
  2981. mm: '%d dəqiqə',
  2982. h: 'bir saat',
  2983. hh: '%d saat',
  2984. d: 'bir gün',
  2985. dd: '%d gün',
  2986. M: 'bir ay',
  2987. MM: '%d ay',
  2988. y: 'bir il',
  2989. yy: '%d il',
  2990. },
  2991. meridiemParse: /gecə|səhər|gündüz|axşam/,
  2992. isPM: function (input) {
  2993. return /^(gündüz|axşam)$/.test(input);
  2994. },
  2995. meridiem: function (hour, minute, isLower) {
  2996. if (hour < 4) {
  2997. return 'gecə';
  2998. } else if (hour < 12) {
  2999. return 'səhər';
  3000. } else if (hour < 17) {
  3001. return 'gündüz';
  3002. } else {
  3003. return 'axşam';
  3004. }
  3005. },
  3006. dayOfMonthOrdinalParse: /\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,
  3007. ordinal: function (number) {
  3008. if (number === 0) {
  3009. // special case for zero
  3010. return number + '-ıncı';
  3011. }
  3012. var a = number % 10,
  3013. b = (number % 100) - a,
  3014. c = number >= 100 ? 100 : null;
  3015. return number + (suffixes[a] || suffixes[b] || suffixes[c]);
  3016. },
  3017. week: {
  3018. dow: 1, // Monday is the first day of the week.
  3019. doy: 7, // The week that contains Jan 7th is the first week of the year.
  3020. },
  3021. }));
  3022. /***/ }),
  3023. /***/ "./node_modules/moment/dist/locale/be.js":
  3024. /*!***********************************************!*\
  3025. !*** ./node_modules/moment/dist/locale/be.js ***!
  3026. \***********************************************/
  3027. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  3028. "use strict";
  3029. __webpack_require__.r(__webpack_exports__);
  3030. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  3031. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  3032. /* harmony export */ });
  3033. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  3034. //! moment.js locale configuration
  3035. //! locale : Belarusian [be]
  3036. //! author : Dmitry Demidov : https://github.com/demidov91
  3037. //! author: Praleska: http://praleska.pro/
  3038. //! Author : Menelion Elensúle : https://github.com/Oire
  3039. function plural(word, num) {
  3040. var forms = word.split('_');
  3041. return num % 10 === 1 && num % 100 !== 11
  3042. ? forms[0]
  3043. : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
  3044. ? forms[1]
  3045. : forms[2];
  3046. }
  3047. function relativeTimeWithPlural(number, withoutSuffix, key) {
  3048. var format = {
  3049. ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
  3050. mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',
  3051. hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',
  3052. dd: 'дзень_дні_дзён',
  3053. MM: 'месяц_месяцы_месяцаў',
  3054. yy: 'год_гады_гадоў',
  3055. };
  3056. if (key === 'm') {
  3057. return withoutSuffix ? 'хвіліна' : 'хвіліну';
  3058. } else if (key === 'h') {
  3059. return withoutSuffix ? 'гадзіна' : 'гадзіну';
  3060. } else {
  3061. return number + ' ' + plural(format[key], +number);
  3062. }
  3063. }
  3064. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('be', {
  3065. months: {
  3066. format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(
  3067. '_'
  3068. ),
  3069. standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(
  3070. '_'
  3071. ),
  3072. },
  3073. monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split(
  3074. '_'
  3075. ),
  3076. weekdays: {
  3077. format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(
  3078. '_'
  3079. ),
  3080. standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(
  3081. '_'
  3082. ),
  3083. isFormat: /\[ ?[Ууў] ?(?:мінулую|наступную)? ?\] ?dddd/,
  3084. },
  3085. weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
  3086. weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),
  3087. longDateFormat: {
  3088. LT: 'HH:mm',
  3089. LTS: 'HH:mm:ss',
  3090. L: 'DD.MM.YYYY',
  3091. LL: 'D MMMM YYYY г.',
  3092. LLL: 'D MMMM YYYY г., HH:mm',
  3093. LLLL: 'dddd, D MMMM YYYY г., HH:mm',
  3094. },
  3095. calendar: {
  3096. sameDay: '[Сёння ў] LT',
  3097. nextDay: '[Заўтра ў] LT',
  3098. lastDay: '[Учора ў] LT',
  3099. nextWeek: function () {
  3100. return '[У] dddd [ў] LT';
  3101. },
  3102. lastWeek: function () {
  3103. switch (this.day()) {
  3104. case 0:
  3105. case 3:
  3106. case 5:
  3107. case 6:
  3108. return '[У мінулую] dddd [ў] LT';
  3109. case 1:
  3110. case 2:
  3111. case 4:
  3112. return '[У мінулы] dddd [ў] LT';
  3113. }
  3114. },
  3115. sameElse: 'L',
  3116. },
  3117. relativeTime: {
  3118. future: 'праз %s',
  3119. past: '%s таму',
  3120. s: 'некалькі секунд',
  3121. m: relativeTimeWithPlural,
  3122. mm: relativeTimeWithPlural,
  3123. h: relativeTimeWithPlural,
  3124. hh: relativeTimeWithPlural,
  3125. d: 'дзень',
  3126. dd: relativeTimeWithPlural,
  3127. M: 'месяц',
  3128. MM: relativeTimeWithPlural,
  3129. y: 'год',
  3130. yy: relativeTimeWithPlural,
  3131. },
  3132. meridiemParse: /ночы|раніцы|дня|вечара/,
  3133. isPM: function (input) {
  3134. return /^(дня|вечара)$/.test(input);
  3135. },
  3136. meridiem: function (hour, minute, isLower) {
  3137. if (hour < 4) {
  3138. return 'ночы';
  3139. } else if (hour < 12) {
  3140. return 'раніцы';
  3141. } else if (hour < 17) {
  3142. return 'дня';
  3143. } else {
  3144. return 'вечара';
  3145. }
  3146. },
  3147. dayOfMonthOrdinalParse: /\d{1,2}-(і|ы|га)/,
  3148. ordinal: function (number, period) {
  3149. switch (period) {
  3150. case 'M':
  3151. case 'd':
  3152. case 'DDD':
  3153. case 'w':
  3154. case 'W':
  3155. return (number % 10 === 2 || number % 10 === 3) &&
  3156. number % 100 !== 12 &&
  3157. number % 100 !== 13
  3158. ? number + '-і'
  3159. : number + '-ы';
  3160. case 'D':
  3161. return number + '-га';
  3162. default:
  3163. return number;
  3164. }
  3165. },
  3166. week: {
  3167. dow: 1, // Monday is the first day of the week.
  3168. doy: 7, // The week that contains Jan 7th is the first week of the year.
  3169. },
  3170. }));
  3171. /***/ }),
  3172. /***/ "./node_modules/moment/dist/locale/bg.js":
  3173. /*!***********************************************!*\
  3174. !*** ./node_modules/moment/dist/locale/bg.js ***!
  3175. \***********************************************/
  3176. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  3177. "use strict";
  3178. __webpack_require__.r(__webpack_exports__);
  3179. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  3180. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  3181. /* harmony export */ });
  3182. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  3183. //! moment.js locale configuration
  3184. //! locale : Bulgarian [bg]
  3185. //! author : Krasen Borisov : https://github.com/kraz
  3186. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('bg', {
  3187. months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(
  3188. '_'
  3189. ),
  3190. monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),
  3191. weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(
  3192. '_'
  3193. ),
  3194. weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),
  3195. weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
  3196. longDateFormat: {
  3197. LT: 'H:mm',
  3198. LTS: 'H:mm:ss',
  3199. L: 'D.MM.YYYY',
  3200. LL: 'D MMMM YYYY',
  3201. LLL: 'D MMMM YYYY H:mm',
  3202. LLLL: 'dddd, D MMMM YYYY H:mm',
  3203. },
  3204. calendar: {
  3205. sameDay: '[Днес в] LT',
  3206. nextDay: '[Утре в] LT',
  3207. nextWeek: 'dddd [в] LT',
  3208. lastDay: '[Вчера в] LT',
  3209. lastWeek: function () {
  3210. switch (this.day()) {
  3211. case 0:
  3212. case 3:
  3213. case 6:
  3214. return '[Миналата] dddd [в] LT';
  3215. case 1:
  3216. case 2:
  3217. case 4:
  3218. case 5:
  3219. return '[Миналия] dddd [в] LT';
  3220. }
  3221. },
  3222. sameElse: 'L',
  3223. },
  3224. relativeTime: {
  3225. future: 'след %s',
  3226. past: 'преди %s',
  3227. s: 'няколко секунди',
  3228. ss: '%d секунди',
  3229. m: 'минута',
  3230. mm: '%d минути',
  3231. h: 'час',
  3232. hh: '%d часа',
  3233. d: 'ден',
  3234. dd: '%d дена',
  3235. w: 'седмица',
  3236. ww: '%d седмици',
  3237. M: 'месец',
  3238. MM: '%d месеца',
  3239. y: 'година',
  3240. yy: '%d години',
  3241. },
  3242. dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
  3243. ordinal: function (number) {
  3244. var lastDigit = number % 10,
  3245. last2Digits = number % 100;
  3246. if (number === 0) {
  3247. return number + '-ев';
  3248. } else if (last2Digits === 0) {
  3249. return number + '-ен';
  3250. } else if (last2Digits > 10 && last2Digits < 20) {
  3251. return number + '-ти';
  3252. } else if (lastDigit === 1) {
  3253. return number + '-ви';
  3254. } else if (lastDigit === 2) {
  3255. return number + '-ри';
  3256. } else if (lastDigit === 7 || lastDigit === 8) {
  3257. return number + '-ми';
  3258. } else {
  3259. return number + '-ти';
  3260. }
  3261. },
  3262. week: {
  3263. dow: 1, // Monday is the first day of the week.
  3264. doy: 7, // The week that contains Jan 7th is the first week of the year.
  3265. },
  3266. }));
  3267. /***/ }),
  3268. /***/ "./node_modules/moment/dist/locale/bm.js":
  3269. /*!***********************************************!*\
  3270. !*** ./node_modules/moment/dist/locale/bm.js ***!
  3271. \***********************************************/
  3272. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  3273. "use strict";
  3274. __webpack_require__.r(__webpack_exports__);
  3275. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  3276. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  3277. /* harmony export */ });
  3278. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  3279. //! moment.js locale configuration
  3280. //! locale : Bambara [bm]
  3281. //! author : Estelle Comment : https://github.com/estellecomment
  3282. // Language contact person : Abdoufata Kane : https://github.com/abdoufata
  3283. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('bm', {
  3284. months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(
  3285. '_'
  3286. ),
  3287. monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),
  3288. weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),
  3289. weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),
  3290. weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),
  3291. longDateFormat: {
  3292. LT: 'HH:mm',
  3293. LTS: 'HH:mm:ss',
  3294. L: 'DD/MM/YYYY',
  3295. LL: 'MMMM [tile] D [san] YYYY',
  3296. LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
  3297. LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',
  3298. },
  3299. calendar: {
  3300. sameDay: '[Bi lɛrɛ] LT',
  3301. nextDay: '[Sini lɛrɛ] LT',
  3302. nextWeek: 'dddd [don lɛrɛ] LT',
  3303. lastDay: '[Kunu lɛrɛ] LT',
  3304. lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',
  3305. sameElse: 'L',
  3306. },
  3307. relativeTime: {
  3308. future: '%s kɔnɔ',
  3309. past: 'a bɛ %s bɔ',
  3310. s: 'sanga dama dama',
  3311. ss: 'sekondi %d',
  3312. m: 'miniti kelen',
  3313. mm: 'miniti %d',
  3314. h: 'lɛrɛ kelen',
  3315. hh: 'lɛrɛ %d',
  3316. d: 'tile kelen',
  3317. dd: 'tile %d',
  3318. M: 'kalo kelen',
  3319. MM: 'kalo %d',
  3320. y: 'san kelen',
  3321. yy: 'san %d',
  3322. },
  3323. week: {
  3324. dow: 1, // Monday is the first day of the week.
  3325. doy: 4, // The week that contains Jan 4th is the first week of the year.
  3326. },
  3327. }));
  3328. /***/ }),
  3329. /***/ "./node_modules/moment/dist/locale/bn-bd.js":
  3330. /*!**************************************************!*\
  3331. !*** ./node_modules/moment/dist/locale/bn-bd.js ***!
  3332. \**************************************************/
  3333. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  3334. "use strict";
  3335. __webpack_require__.r(__webpack_exports__);
  3336. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  3337. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  3338. /* harmony export */ });
  3339. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  3340. //! moment.js locale configuration
  3341. //! locale : Bengali (Bangladesh) [bn-bd]
  3342. //! author : Asraf Hossain Patoary : https://github.com/ashwoolford
  3343. var symbolMap = {
  3344. 1: '১',
  3345. 2: '২',
  3346. 3: '৩',
  3347. 4: '৪',
  3348. 5: '৫',
  3349. 6: '৬',
  3350. 7: '৭',
  3351. 8: '৮',
  3352. 9: '৯',
  3353. 0: '০',
  3354. },
  3355. numberMap = {
  3356. '১': '1',
  3357. '২': '2',
  3358. '৩': '3',
  3359. '৪': '4',
  3360. '৫': '5',
  3361. '৬': '6',
  3362. '৭': '7',
  3363. '৮': '8',
  3364. '৯': '9',
  3365. '০': '0',
  3366. };
  3367. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('bn-bd', {
  3368. months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(
  3369. '_'
  3370. ),
  3371. monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(
  3372. '_'
  3373. ),
  3374. weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(
  3375. '_'
  3376. ),
  3377. weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
  3378. weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
  3379. longDateFormat: {
  3380. LT: 'A h:mm সময়',
  3381. LTS: 'A h:mm:ss সময়',
  3382. L: 'DD/MM/YYYY',
  3383. LL: 'D MMMM YYYY',
  3384. LLL: 'D MMMM YYYY, A h:mm সময়',
  3385. LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',
  3386. },
  3387. calendar: {
  3388. sameDay: '[আজ] LT',
  3389. nextDay: '[আগামীকাল] LT',
  3390. nextWeek: 'dddd, LT',
  3391. lastDay: '[গতকাল] LT',
  3392. lastWeek: '[গত] dddd, LT',
  3393. sameElse: 'L',
  3394. },
  3395. relativeTime: {
  3396. future: '%s পরে',
  3397. past: '%s আগে',
  3398. s: 'কয়েক সেকেন্ড',
  3399. ss: '%d সেকেন্ড',
  3400. m: 'এক মিনিট',
  3401. mm: '%d মিনিট',
  3402. h: 'এক ঘন্টা',
  3403. hh: '%d ঘন্টা',
  3404. d: 'এক দিন',
  3405. dd: '%d দিন',
  3406. M: 'এক মাস',
  3407. MM: '%d মাস',
  3408. y: 'এক বছর',
  3409. yy: '%d বছর',
  3410. },
  3411. preparse: function (string) {
  3412. return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
  3413. return numberMap[match];
  3414. });
  3415. },
  3416. postformat: function (string) {
  3417. return string.replace(/\d/g, function (match) {
  3418. return symbolMap[match];
  3419. });
  3420. },
  3421. meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,
  3422. meridiemHour: function (hour, meridiem) {
  3423. if (hour === 12) {
  3424. hour = 0;
  3425. }
  3426. if (meridiem === 'রাত') {
  3427. return hour < 4 ? hour : hour + 12;
  3428. } else if (meridiem === 'ভোর') {
  3429. return hour;
  3430. } else if (meridiem === 'সকাল') {
  3431. return hour;
  3432. } else if (meridiem === 'দুপুর') {
  3433. return hour >= 3 ? hour : hour + 12;
  3434. } else if (meridiem === 'বিকাল') {
  3435. return hour + 12;
  3436. } else if (meridiem === 'সন্ধ্যা') {
  3437. return hour + 12;
  3438. }
  3439. },
  3440. meridiem: function (hour, minute, isLower) {
  3441. if (hour < 4) {
  3442. return 'রাত';
  3443. } else if (hour < 6) {
  3444. return 'ভোর';
  3445. } else if (hour < 12) {
  3446. return 'সকাল';
  3447. } else if (hour < 15) {
  3448. return 'দুপুর';
  3449. } else if (hour < 18) {
  3450. return 'বিকাল';
  3451. } else if (hour < 20) {
  3452. return 'সন্ধ্যা';
  3453. } else {
  3454. return 'রাত';
  3455. }
  3456. },
  3457. week: {
  3458. dow: 0, // Sunday is the first day of the week.
  3459. doy: 6, // The week that contains Jan 6th is the first week of the year.
  3460. },
  3461. }));
  3462. /***/ }),
  3463. /***/ "./node_modules/moment/dist/locale/bn.js":
  3464. /*!***********************************************!*\
  3465. !*** ./node_modules/moment/dist/locale/bn.js ***!
  3466. \***********************************************/
  3467. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  3468. "use strict";
  3469. __webpack_require__.r(__webpack_exports__);
  3470. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  3471. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  3472. /* harmony export */ });
  3473. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  3474. //! moment.js locale configuration
  3475. //! locale : Bengali [bn]
  3476. //! author : Kaushik Gandhi : https://github.com/kaushikgandhi
  3477. var symbolMap = {
  3478. 1: '১',
  3479. 2: '২',
  3480. 3: '৩',
  3481. 4: '৪',
  3482. 5: '৫',
  3483. 6: '৬',
  3484. 7: '৭',
  3485. 8: '৮',
  3486. 9: '৯',
  3487. 0: '০',
  3488. },
  3489. numberMap = {
  3490. '১': '1',
  3491. '২': '2',
  3492. '৩': '3',
  3493. '৪': '4',
  3494. '৫': '5',
  3495. '৬': '6',
  3496. '৭': '7',
  3497. '৮': '8',
  3498. '৯': '9',
  3499. '০': '0',
  3500. };
  3501. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('bn', {
  3502. months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(
  3503. '_'
  3504. ),
  3505. monthsShort: 'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(
  3506. '_'
  3507. ),
  3508. weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(
  3509. '_'
  3510. ),
  3511. weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),
  3512. weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),
  3513. longDateFormat: {
  3514. LT: 'A h:mm সময়',
  3515. LTS: 'A h:mm:ss সময়',
  3516. L: 'DD/MM/YYYY',
  3517. LL: 'D MMMM YYYY',
  3518. LLL: 'D MMMM YYYY, A h:mm সময়',
  3519. LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',
  3520. },
  3521. calendar: {
  3522. sameDay: '[আজ] LT',
  3523. nextDay: '[আগামীকাল] LT',
  3524. nextWeek: 'dddd, LT',
  3525. lastDay: '[গতকাল] LT',
  3526. lastWeek: '[গত] dddd, LT',
  3527. sameElse: 'L',
  3528. },
  3529. relativeTime: {
  3530. future: '%s পরে',
  3531. past: '%s আগে',
  3532. s: 'কয়েক সেকেন্ড',
  3533. ss: '%d সেকেন্ড',
  3534. m: 'এক মিনিট',
  3535. mm: '%d মিনিট',
  3536. h: 'এক ঘন্টা',
  3537. hh: '%d ঘন্টা',
  3538. d: 'এক দিন',
  3539. dd: '%d দিন',
  3540. M: 'এক মাস',
  3541. MM: '%d মাস',
  3542. y: 'এক বছর',
  3543. yy: '%d বছর',
  3544. },
  3545. preparse: function (string) {
  3546. return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {
  3547. return numberMap[match];
  3548. });
  3549. },
  3550. postformat: function (string) {
  3551. return string.replace(/\d/g, function (match) {
  3552. return symbolMap[match];
  3553. });
  3554. },
  3555. meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,
  3556. meridiemHour: function (hour, meridiem) {
  3557. if (hour === 12) {
  3558. hour = 0;
  3559. }
  3560. if (
  3561. (meridiem === 'রাত' && hour >= 4) ||
  3562. (meridiem === 'দুপুর' && hour < 5) ||
  3563. meridiem === 'বিকাল'
  3564. ) {
  3565. return hour + 12;
  3566. } else {
  3567. return hour;
  3568. }
  3569. },
  3570. meridiem: function (hour, minute, isLower) {
  3571. if (hour < 4) {
  3572. return 'রাত';
  3573. } else if (hour < 10) {
  3574. return 'সকাল';
  3575. } else if (hour < 17) {
  3576. return 'দুপুর';
  3577. } else if (hour < 20) {
  3578. return 'বিকাল';
  3579. } else {
  3580. return 'রাত';
  3581. }
  3582. },
  3583. week: {
  3584. dow: 0, // Sunday is the first day of the week.
  3585. doy: 6, // The week that contains Jan 6th is the first week of the year.
  3586. },
  3587. }));
  3588. /***/ }),
  3589. /***/ "./node_modules/moment/dist/locale/bo.js":
  3590. /*!***********************************************!*\
  3591. !*** ./node_modules/moment/dist/locale/bo.js ***!
  3592. \***********************************************/
  3593. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  3594. "use strict";
  3595. __webpack_require__.r(__webpack_exports__);
  3596. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  3597. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  3598. /* harmony export */ });
  3599. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  3600. //! moment.js locale configuration
  3601. //! locale : Tibetan [bo]
  3602. //! author : Thupten N. Chakrishar : https://github.com/vajradog
  3603. var symbolMap = {
  3604. 1: '༡',
  3605. 2: '༢',
  3606. 3: '༣',
  3607. 4: '༤',
  3608. 5: '༥',
  3609. 6: '༦',
  3610. 7: '༧',
  3611. 8: '༨',
  3612. 9: '༩',
  3613. 0: '༠',
  3614. },
  3615. numberMap = {
  3616. '༡': '1',
  3617. '༢': '2',
  3618. '༣': '3',
  3619. '༤': '4',
  3620. '༥': '5',
  3621. '༦': '6',
  3622. '༧': '7',
  3623. '༨': '8',
  3624. '༩': '9',
  3625. '༠': '0',
  3626. };
  3627. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('bo', {
  3628. months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(
  3629. '_'
  3630. ),
  3631. monthsShort: 'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(
  3632. '_'
  3633. ),
  3634. monthsShortRegex: /^(ཟླ་\d{1,2})/,
  3635. monthsParseExact: true,
  3636. weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(
  3637. '_'
  3638. ),
  3639. weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(
  3640. '_'
  3641. ),
  3642. weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),
  3643. longDateFormat: {
  3644. LT: 'A h:mm',
  3645. LTS: 'A h:mm:ss',
  3646. L: 'DD/MM/YYYY',
  3647. LL: 'D MMMM YYYY',
  3648. LLL: 'D MMMM YYYY, A h:mm',
  3649. LLLL: 'dddd, D MMMM YYYY, A h:mm',
  3650. },
  3651. calendar: {
  3652. sameDay: '[དི་རིང] LT',
  3653. nextDay: '[སང་ཉིན] LT',
  3654. nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',
  3655. lastDay: '[ཁ་སང] LT',
  3656. lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',
  3657. sameElse: 'L',
  3658. },
  3659. relativeTime: {
  3660. future: '%s ལ་',
  3661. past: '%s སྔན་ལ',
  3662. s: 'ལམ་སང',
  3663. ss: '%d སྐར་ཆ།',
  3664. m: 'སྐར་མ་གཅིག',
  3665. mm: '%d སྐར་མ',
  3666. h: 'ཆུ་ཚོད་གཅིག',
  3667. hh: '%d ཆུ་ཚོད',
  3668. d: 'ཉིན་གཅིག',
  3669. dd: '%d ཉིན་',
  3670. M: 'ཟླ་བ་གཅིག',
  3671. MM: '%d ཟླ་བ',
  3672. y: 'ལོ་གཅིག',
  3673. yy: '%d ལོ',
  3674. },
  3675. preparse: function (string) {
  3676. return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {
  3677. return numberMap[match];
  3678. });
  3679. },
  3680. postformat: function (string) {
  3681. return string.replace(/\d/g, function (match) {
  3682. return symbolMap[match];
  3683. });
  3684. },
  3685. meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,
  3686. meridiemHour: function (hour, meridiem) {
  3687. if (hour === 12) {
  3688. hour = 0;
  3689. }
  3690. if (
  3691. (meridiem === 'མཚན་མོ' && hour >= 4) ||
  3692. (meridiem === 'ཉིན་གུང' && hour < 5) ||
  3693. meridiem === 'དགོང་དག'
  3694. ) {
  3695. return hour + 12;
  3696. } else {
  3697. return hour;
  3698. }
  3699. },
  3700. meridiem: function (hour, minute, isLower) {
  3701. if (hour < 4) {
  3702. return 'མཚན་མོ';
  3703. } else if (hour < 10) {
  3704. return 'ཞོགས་ཀས';
  3705. } else if (hour < 17) {
  3706. return 'ཉིན་གུང';
  3707. } else if (hour < 20) {
  3708. return 'དགོང་དག';
  3709. } else {
  3710. return 'མཚན་མོ';
  3711. }
  3712. },
  3713. week: {
  3714. dow: 0, // Sunday is the first day of the week.
  3715. doy: 6, // The week that contains Jan 6th is the first week of the year.
  3716. },
  3717. }));
  3718. /***/ }),
  3719. /***/ "./node_modules/moment/dist/locale/br.js":
  3720. /*!***********************************************!*\
  3721. !*** ./node_modules/moment/dist/locale/br.js ***!
  3722. \***********************************************/
  3723. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  3724. "use strict";
  3725. __webpack_require__.r(__webpack_exports__);
  3726. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  3727. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  3728. /* harmony export */ });
  3729. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  3730. //! moment.js locale configuration
  3731. //! locale : Breton [br]
  3732. //! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou
  3733. function relativeTimeWithMutation(number, withoutSuffix, key) {
  3734. var format = {
  3735. mm: 'munutenn',
  3736. MM: 'miz',
  3737. dd: 'devezh',
  3738. };
  3739. return number + ' ' + mutation(format[key], number);
  3740. }
  3741. function specialMutationForYears(number) {
  3742. switch (lastNumber(number)) {
  3743. case 1:
  3744. case 3:
  3745. case 4:
  3746. case 5:
  3747. case 9:
  3748. return number + ' bloaz';
  3749. default:
  3750. return number + ' vloaz';
  3751. }
  3752. }
  3753. function lastNumber(number) {
  3754. if (number > 9) {
  3755. return lastNumber(number % 10);
  3756. }
  3757. return number;
  3758. }
  3759. function mutation(text, number) {
  3760. if (number === 2) {
  3761. return softMutation(text);
  3762. }
  3763. return text;
  3764. }
  3765. function softMutation(text) {
  3766. var mutationTable = {
  3767. m: 'v',
  3768. b: 'v',
  3769. d: 'z',
  3770. };
  3771. if (mutationTable[text.charAt(0)] === undefined) {
  3772. return text;
  3773. }
  3774. return mutationTable[text.charAt(0)] + text.substring(1);
  3775. }
  3776. var monthsParse = [
  3777. /^gen/i,
  3778. /^c[ʼ\']hwe/i,
  3779. /^meu/i,
  3780. /^ebr/i,
  3781. /^mae/i,
  3782. /^(mez|eve)/i,
  3783. /^gou/i,
  3784. /^eos/i,
  3785. /^gwe/i,
  3786. /^her/i,
  3787. /^du/i,
  3788. /^ker/i,
  3789. ],
  3790. monthsRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
  3791. monthsStrictRegex = /^(genver|c[ʼ\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,
  3792. monthsShortStrictRegex = /^(gen|c[ʼ\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,
  3793. fullWeekdaysParse = [
  3794. /^sul/i,
  3795. /^lun/i,
  3796. /^meurzh/i,
  3797. /^merc[ʼ\']her/i,
  3798. /^yaou/i,
  3799. /^gwener/i,
  3800. /^sadorn/i,
  3801. ],
  3802. shortWeekdaysParse = [
  3803. /^Sul/i,
  3804. /^Lun/i,
  3805. /^Meu/i,
  3806. /^Mer/i,
  3807. /^Yao/i,
  3808. /^Gwe/i,
  3809. /^Sad/i,
  3810. ],
  3811. minWeekdaysParse = [
  3812. /^Su/i,
  3813. /^Lu/i,
  3814. /^Me([^r]|$)/i,
  3815. /^Mer/i,
  3816. /^Ya/i,
  3817. /^Gw/i,
  3818. /^Sa/i,
  3819. ];
  3820. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('br', {
  3821. months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(
  3822. '_'
  3823. ),
  3824. monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),
  3825. weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),
  3826. weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),
  3827. weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),
  3828. weekdaysParse: minWeekdaysParse,
  3829. fullWeekdaysParse: fullWeekdaysParse,
  3830. shortWeekdaysParse: shortWeekdaysParse,
  3831. minWeekdaysParse: minWeekdaysParse,
  3832. monthsRegex: monthsRegex,
  3833. monthsShortRegex: monthsRegex,
  3834. monthsStrictRegex: monthsStrictRegex,
  3835. monthsShortStrictRegex: monthsShortStrictRegex,
  3836. monthsParse: monthsParse,
  3837. longMonthsParse: monthsParse,
  3838. shortMonthsParse: monthsParse,
  3839. longDateFormat: {
  3840. LT: 'HH:mm',
  3841. LTS: 'HH:mm:ss',
  3842. L: 'DD/MM/YYYY',
  3843. LL: 'D [a viz] MMMM YYYY',
  3844. LLL: 'D [a viz] MMMM YYYY HH:mm',
  3845. LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',
  3846. },
  3847. calendar: {
  3848. sameDay: '[Hiziv da] LT',
  3849. nextDay: '[Warcʼhoazh da] LT',
  3850. nextWeek: 'dddd [da] LT',
  3851. lastDay: '[Decʼh da] LT',
  3852. lastWeek: 'dddd [paset da] LT',
  3853. sameElse: 'L',
  3854. },
  3855. relativeTime: {
  3856. future: 'a-benn %s',
  3857. past: '%s ʼzo',
  3858. s: 'un nebeud segondennoù',
  3859. ss: '%d eilenn',
  3860. m: 'ur vunutenn',
  3861. mm: relativeTimeWithMutation,
  3862. h: 'un eur',
  3863. hh: '%d eur',
  3864. d: 'un devezh',
  3865. dd: relativeTimeWithMutation,
  3866. M: 'ur miz',
  3867. MM: relativeTimeWithMutation,
  3868. y: 'ur bloaz',
  3869. yy: specialMutationForYears,
  3870. },
  3871. dayOfMonthOrdinalParse: /\d{1,2}(añ|vet)/,
  3872. ordinal: function (number) {
  3873. var output = number === 1 ? 'añ' : 'vet';
  3874. return number + output;
  3875. },
  3876. week: {
  3877. dow: 1, // Monday is the first day of the week.
  3878. doy: 4, // The week that contains Jan 4th is the first week of the year.
  3879. },
  3880. meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn
  3881. isPM: function (token) {
  3882. return token === 'g.m.';
  3883. },
  3884. meridiem: function (hour, minute, isLower) {
  3885. return hour < 12 ? 'a.m.' : 'g.m.';
  3886. },
  3887. }));
  3888. /***/ }),
  3889. /***/ "./node_modules/moment/dist/locale/bs.js":
  3890. /*!***********************************************!*\
  3891. !*** ./node_modules/moment/dist/locale/bs.js ***!
  3892. \***********************************************/
  3893. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  3894. "use strict";
  3895. __webpack_require__.r(__webpack_exports__);
  3896. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  3897. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  3898. /* harmony export */ });
  3899. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  3900. //! moment.js locale configuration
  3901. //! locale : Bosnian [bs]
  3902. //! author : Nedim Cholich : https://github.com/frontyard
  3903. //! based on (hr) translation by Bojan Marković
  3904. function translate(number, withoutSuffix, key) {
  3905. var result = number + ' ';
  3906. switch (key) {
  3907. case 'ss':
  3908. if (number === 1) {
  3909. result += 'sekunda';
  3910. } else if (number === 2 || number === 3 || number === 4) {
  3911. result += 'sekunde';
  3912. } else {
  3913. result += 'sekundi';
  3914. }
  3915. return result;
  3916. case 'm':
  3917. return withoutSuffix ? 'jedna minuta' : 'jedne minute';
  3918. case 'mm':
  3919. if (number === 1) {
  3920. result += 'minuta';
  3921. } else if (number === 2 || number === 3 || number === 4) {
  3922. result += 'minute';
  3923. } else {
  3924. result += 'minuta';
  3925. }
  3926. return result;
  3927. case 'h':
  3928. return withoutSuffix ? 'jedan sat' : 'jednog sata';
  3929. case 'hh':
  3930. if (number === 1) {
  3931. result += 'sat';
  3932. } else if (number === 2 || number === 3 || number === 4) {
  3933. result += 'sata';
  3934. } else {
  3935. result += 'sati';
  3936. }
  3937. return result;
  3938. case 'dd':
  3939. if (number === 1) {
  3940. result += 'dan';
  3941. } else {
  3942. result += 'dana';
  3943. }
  3944. return result;
  3945. case 'MM':
  3946. if (number === 1) {
  3947. result += 'mjesec';
  3948. } else if (number === 2 || number === 3 || number === 4) {
  3949. result += 'mjeseca';
  3950. } else {
  3951. result += 'mjeseci';
  3952. }
  3953. return result;
  3954. case 'yy':
  3955. if (number === 1) {
  3956. result += 'godina';
  3957. } else if (number === 2 || number === 3 || number === 4) {
  3958. result += 'godine';
  3959. } else {
  3960. result += 'godina';
  3961. }
  3962. return result;
  3963. }
  3964. }
  3965. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('bs', {
  3966. months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(
  3967. '_'
  3968. ),
  3969. monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(
  3970. '_'
  3971. ),
  3972. monthsParseExact: true,
  3973. weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
  3974. '_'
  3975. ),
  3976. weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
  3977. weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
  3978. weekdaysParseExact: true,
  3979. longDateFormat: {
  3980. LT: 'H:mm',
  3981. LTS: 'H:mm:ss',
  3982. L: 'DD.MM.YYYY',
  3983. LL: 'D. MMMM YYYY',
  3984. LLL: 'D. MMMM YYYY H:mm',
  3985. LLLL: 'dddd, D. MMMM YYYY H:mm',
  3986. },
  3987. calendar: {
  3988. sameDay: '[danas u] LT',
  3989. nextDay: '[sutra u] LT',
  3990. nextWeek: function () {
  3991. switch (this.day()) {
  3992. case 0:
  3993. return '[u] [nedjelju] [u] LT';
  3994. case 3:
  3995. return '[u] [srijedu] [u] LT';
  3996. case 6:
  3997. return '[u] [subotu] [u] LT';
  3998. case 1:
  3999. case 2:
  4000. case 4:
  4001. case 5:
  4002. return '[u] dddd [u] LT';
  4003. }
  4004. },
  4005. lastDay: '[jučer u] LT',
  4006. lastWeek: function () {
  4007. switch (this.day()) {
  4008. case 0:
  4009. case 3:
  4010. return '[prošlu] dddd [u] LT';
  4011. case 6:
  4012. return '[prošle] [subote] [u] LT';
  4013. case 1:
  4014. case 2:
  4015. case 4:
  4016. case 5:
  4017. return '[prošli] dddd [u] LT';
  4018. }
  4019. },
  4020. sameElse: 'L',
  4021. },
  4022. relativeTime: {
  4023. future: 'za %s',
  4024. past: 'prije %s',
  4025. s: 'par sekundi',
  4026. ss: translate,
  4027. m: translate,
  4028. mm: translate,
  4029. h: translate,
  4030. hh: translate,
  4031. d: 'dan',
  4032. dd: translate,
  4033. M: 'mjesec',
  4034. MM: translate,
  4035. y: 'godinu',
  4036. yy: translate,
  4037. },
  4038. dayOfMonthOrdinalParse: /\d{1,2}\./,
  4039. ordinal: '%d.',
  4040. week: {
  4041. dow: 1, // Monday is the first day of the week.
  4042. doy: 7, // The week that contains Jan 7th is the first week of the year.
  4043. },
  4044. }));
  4045. /***/ }),
  4046. /***/ "./node_modules/moment/dist/locale/ca.js":
  4047. /*!***********************************************!*\
  4048. !*** ./node_modules/moment/dist/locale/ca.js ***!
  4049. \***********************************************/
  4050. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  4051. "use strict";
  4052. __webpack_require__.r(__webpack_exports__);
  4053. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4054. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  4055. /* harmony export */ });
  4056. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  4057. //! moment.js locale configuration
  4058. //! locale : Catalan [ca]
  4059. //! author : Juan G. Hurtado : https://github.com/juanghurtado
  4060. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ca', {
  4061. months: {
  4062. standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(
  4063. '_'
  4064. ),
  4065. format: "de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre".split(
  4066. '_'
  4067. ),
  4068. isFormat: /D[oD]?(\s)+MMMM/,
  4069. },
  4070. monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(
  4071. '_'
  4072. ),
  4073. monthsParseExact: true,
  4074. weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(
  4075. '_'
  4076. ),
  4077. weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),
  4078. weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),
  4079. weekdaysParseExact: true,
  4080. longDateFormat: {
  4081. LT: 'H:mm',
  4082. LTS: 'H:mm:ss',
  4083. L: 'DD/MM/YYYY',
  4084. LL: 'D MMMM [de] YYYY',
  4085. ll: 'D MMM YYYY',
  4086. LLL: 'D MMMM [de] YYYY [a les] H:mm',
  4087. lll: 'D MMM YYYY, H:mm',
  4088. LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',
  4089. llll: 'ddd D MMM YYYY, H:mm',
  4090. },
  4091. calendar: {
  4092. sameDay: function () {
  4093. return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
  4094. },
  4095. nextDay: function () {
  4096. return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
  4097. },
  4098. nextWeek: function () {
  4099. return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
  4100. },
  4101. lastDay: function () {
  4102. return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';
  4103. },
  4104. lastWeek: function () {
  4105. return (
  4106. '[el] dddd [passat a ' +
  4107. (this.hours() !== 1 ? 'les' : 'la') +
  4108. '] LT'
  4109. );
  4110. },
  4111. sameElse: 'L',
  4112. },
  4113. relativeTime: {
  4114. future: "d'aquí %s",
  4115. past: 'fa %s',
  4116. s: 'uns segons',
  4117. ss: '%d segons',
  4118. m: 'un minut',
  4119. mm: '%d minuts',
  4120. h: 'una hora',
  4121. hh: '%d hores',
  4122. d: 'un dia',
  4123. dd: '%d dies',
  4124. M: 'un mes',
  4125. MM: '%d mesos',
  4126. y: 'un any',
  4127. yy: '%d anys',
  4128. },
  4129. dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
  4130. ordinal: function (number, period) {
  4131. var output =
  4132. number === 1
  4133. ? 'r'
  4134. : number === 2
  4135. ? 'n'
  4136. : number === 3
  4137. ? 'r'
  4138. : number === 4
  4139. ? 't'
  4140. : 'è';
  4141. if (period === 'w' || period === 'W') {
  4142. output = 'a';
  4143. }
  4144. return number + output;
  4145. },
  4146. week: {
  4147. dow: 1, // Monday is the first day of the week.
  4148. doy: 4, // The week that contains Jan 4th is the first week of the year.
  4149. },
  4150. }));
  4151. /***/ }),
  4152. /***/ "./node_modules/moment/dist/locale/cs.js":
  4153. /*!***********************************************!*\
  4154. !*** ./node_modules/moment/dist/locale/cs.js ***!
  4155. \***********************************************/
  4156. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  4157. "use strict";
  4158. __webpack_require__.r(__webpack_exports__);
  4159. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4160. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  4161. /* harmony export */ });
  4162. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  4163. //! moment.js locale configuration
  4164. //! locale : Czech [cs]
  4165. //! author : petrbela : https://github.com/petrbela
  4166. var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(
  4167. '_'
  4168. ),
  4169. monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),
  4170. monthsParse = [
  4171. /^led/i,
  4172. /^úno/i,
  4173. /^bře/i,
  4174. /^dub/i,
  4175. /^kvě/i,
  4176. /^(čvn|červen$|června)/i,
  4177. /^(čvc|červenec|července)/i,
  4178. /^srp/i,
  4179. /^zář/i,
  4180. /^říj/i,
  4181. /^lis/i,
  4182. /^pro/i,
  4183. ],
  4184. // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
  4185. // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
  4186. monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;
  4187. function plural(n) {
  4188. return n > 1 && n < 5 && ~~(n / 10) !== 1;
  4189. }
  4190. function translate(number, withoutSuffix, key, isFuture) {
  4191. var result = number + ' ';
  4192. switch (key) {
  4193. case 's': // a few seconds / in a few seconds / a few seconds ago
  4194. return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';
  4195. case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
  4196. if (withoutSuffix || isFuture) {
  4197. return result + (plural(number) ? 'sekundy' : 'sekund');
  4198. } else {
  4199. return result + 'sekundami';
  4200. }
  4201. case 'm': // a minute / in a minute / a minute ago
  4202. return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';
  4203. case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
  4204. if (withoutSuffix || isFuture) {
  4205. return result + (plural(number) ? 'minuty' : 'minut');
  4206. } else {
  4207. return result + 'minutami';
  4208. }
  4209. case 'h': // an hour / in an hour / an hour ago
  4210. return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
  4211. case 'hh': // 9 hours / in 9 hours / 9 hours ago
  4212. if (withoutSuffix || isFuture) {
  4213. return result + (plural(number) ? 'hodiny' : 'hodin');
  4214. } else {
  4215. return result + 'hodinami';
  4216. }
  4217. case 'd': // a day / in a day / a day ago
  4218. return withoutSuffix || isFuture ? 'den' : 'dnem';
  4219. case 'dd': // 9 days / in 9 days / 9 days ago
  4220. if (withoutSuffix || isFuture) {
  4221. return result + (plural(number) ? 'dny' : 'dní');
  4222. } else {
  4223. return result + 'dny';
  4224. }
  4225. case 'M': // a month / in a month / a month ago
  4226. return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';
  4227. case 'MM': // 9 months / in 9 months / 9 months ago
  4228. if (withoutSuffix || isFuture) {
  4229. return result + (plural(number) ? 'měsíce' : 'měsíců');
  4230. } else {
  4231. return result + 'měsíci';
  4232. }
  4233. case 'y': // a year / in a year / a year ago
  4234. return withoutSuffix || isFuture ? 'rok' : 'rokem';
  4235. case 'yy': // 9 years / in 9 years / 9 years ago
  4236. if (withoutSuffix || isFuture) {
  4237. return result + (plural(number) ? 'roky' : 'let');
  4238. } else {
  4239. return result + 'lety';
  4240. }
  4241. }
  4242. }
  4243. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('cs', {
  4244. months: months,
  4245. monthsShort: monthsShort,
  4246. monthsRegex: monthsRegex,
  4247. monthsShortRegex: monthsRegex,
  4248. // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.
  4249. // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.
  4250. monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,
  4251. monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,
  4252. monthsParse: monthsParse,
  4253. longMonthsParse: monthsParse,
  4254. shortMonthsParse: monthsParse,
  4255. weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),
  4256. weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),
  4257. weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),
  4258. longDateFormat: {
  4259. LT: 'H:mm',
  4260. LTS: 'H:mm:ss',
  4261. L: 'DD.MM.YYYY',
  4262. LL: 'D. MMMM YYYY',
  4263. LLL: 'D. MMMM YYYY H:mm',
  4264. LLLL: 'dddd D. MMMM YYYY H:mm',
  4265. l: 'D. M. YYYY',
  4266. },
  4267. calendar: {
  4268. sameDay: '[dnes v] LT',
  4269. nextDay: '[zítra v] LT',
  4270. nextWeek: function () {
  4271. switch (this.day()) {
  4272. case 0:
  4273. return '[v neděli v] LT';
  4274. case 1:
  4275. case 2:
  4276. return '[v] dddd [v] LT';
  4277. case 3:
  4278. return '[ve středu v] LT';
  4279. case 4:
  4280. return '[ve čtvrtek v] LT';
  4281. case 5:
  4282. return '[v pátek v] LT';
  4283. case 6:
  4284. return '[v sobotu v] LT';
  4285. }
  4286. },
  4287. lastDay: '[včera v] LT',
  4288. lastWeek: function () {
  4289. switch (this.day()) {
  4290. case 0:
  4291. return '[minulou neděli v] LT';
  4292. case 1:
  4293. case 2:
  4294. return '[minulé] dddd [v] LT';
  4295. case 3:
  4296. return '[minulou středu v] LT';
  4297. case 4:
  4298. case 5:
  4299. return '[minulý] dddd [v] LT';
  4300. case 6:
  4301. return '[minulou sobotu v] LT';
  4302. }
  4303. },
  4304. sameElse: 'L',
  4305. },
  4306. relativeTime: {
  4307. future: 'za %s',
  4308. past: 'před %s',
  4309. s: translate,
  4310. ss: translate,
  4311. m: translate,
  4312. mm: translate,
  4313. h: translate,
  4314. hh: translate,
  4315. d: translate,
  4316. dd: translate,
  4317. M: translate,
  4318. MM: translate,
  4319. y: translate,
  4320. yy: translate,
  4321. },
  4322. dayOfMonthOrdinalParse: /\d{1,2}\./,
  4323. ordinal: '%d.',
  4324. week: {
  4325. dow: 1, // Monday is the first day of the week.
  4326. doy: 4, // The week that contains Jan 4th is the first week of the year.
  4327. },
  4328. }));
  4329. /***/ }),
  4330. /***/ "./node_modules/moment/dist/locale/cv.js":
  4331. /*!***********************************************!*\
  4332. !*** ./node_modules/moment/dist/locale/cv.js ***!
  4333. \***********************************************/
  4334. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  4335. "use strict";
  4336. __webpack_require__.r(__webpack_exports__);
  4337. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4338. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  4339. /* harmony export */ });
  4340. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  4341. //! moment.js locale configuration
  4342. //! locale : Chuvash [cv]
  4343. //! author : Anatoly Mironov : https://github.com/mirontoli
  4344. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('cv', {
  4345. months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(
  4346. '_'
  4347. ),
  4348. monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),
  4349. weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(
  4350. '_'
  4351. ),
  4352. weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),
  4353. weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),
  4354. longDateFormat: {
  4355. LT: 'HH:mm',
  4356. LTS: 'HH:mm:ss',
  4357. L: 'DD-MM-YYYY',
  4358. LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',
  4359. LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
  4360. LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',
  4361. },
  4362. calendar: {
  4363. sameDay: '[Паян] LT [сехетре]',
  4364. nextDay: '[Ыран] LT [сехетре]',
  4365. lastDay: '[Ӗнер] LT [сехетре]',
  4366. nextWeek: '[Ҫитес] dddd LT [сехетре]',
  4367. lastWeek: '[Иртнӗ] dddd LT [сехетре]',
  4368. sameElse: 'L',
  4369. },
  4370. relativeTime: {
  4371. future: function (output) {
  4372. var affix = /сехет$/i.exec(output)
  4373. ? 'рен'
  4374. : /ҫул$/i.exec(output)
  4375. ? 'тан'
  4376. : 'ран';
  4377. return output + affix;
  4378. },
  4379. past: '%s каялла',
  4380. s: 'пӗр-ик ҫеккунт',
  4381. ss: '%d ҫеккунт',
  4382. m: 'пӗр минут',
  4383. mm: '%d минут',
  4384. h: 'пӗр сехет',
  4385. hh: '%d сехет',
  4386. d: 'пӗр кун',
  4387. dd: '%d кун',
  4388. M: 'пӗр уйӑх',
  4389. MM: '%d уйӑх',
  4390. y: 'пӗр ҫул',
  4391. yy: '%d ҫул',
  4392. },
  4393. dayOfMonthOrdinalParse: /\d{1,2}-мӗш/,
  4394. ordinal: '%d-мӗш',
  4395. week: {
  4396. dow: 1, // Monday is the first day of the week.
  4397. doy: 7, // The week that contains Jan 7th is the first week of the year.
  4398. },
  4399. }));
  4400. /***/ }),
  4401. /***/ "./node_modules/moment/dist/locale/cy.js":
  4402. /*!***********************************************!*\
  4403. !*** ./node_modules/moment/dist/locale/cy.js ***!
  4404. \***********************************************/
  4405. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  4406. "use strict";
  4407. __webpack_require__.r(__webpack_exports__);
  4408. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4409. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  4410. /* harmony export */ });
  4411. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  4412. //! moment.js locale configuration
  4413. //! locale : Welsh [cy]
  4414. //! author : Robert Allen : https://github.com/robgallen
  4415. //! author : https://github.com/ryangreaves
  4416. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('cy', {
  4417. months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(
  4418. '_'
  4419. ),
  4420. monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(
  4421. '_'
  4422. ),
  4423. weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(
  4424. '_'
  4425. ),
  4426. weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),
  4427. weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),
  4428. weekdaysParseExact: true,
  4429. // time formats are the same as en-gb
  4430. longDateFormat: {
  4431. LT: 'HH:mm',
  4432. LTS: 'HH:mm:ss',
  4433. L: 'DD/MM/YYYY',
  4434. LL: 'D MMMM YYYY',
  4435. LLL: 'D MMMM YYYY HH:mm',
  4436. LLLL: 'dddd, D MMMM YYYY HH:mm',
  4437. },
  4438. calendar: {
  4439. sameDay: '[Heddiw am] LT',
  4440. nextDay: '[Yfory am] LT',
  4441. nextWeek: 'dddd [am] LT',
  4442. lastDay: '[Ddoe am] LT',
  4443. lastWeek: 'dddd [diwethaf am] LT',
  4444. sameElse: 'L',
  4445. },
  4446. relativeTime: {
  4447. future: 'mewn %s',
  4448. past: '%s yn ôl',
  4449. s: 'ychydig eiliadau',
  4450. ss: '%d eiliad',
  4451. m: 'munud',
  4452. mm: '%d munud',
  4453. h: 'awr',
  4454. hh: '%d awr',
  4455. d: 'diwrnod',
  4456. dd: '%d diwrnod',
  4457. M: 'mis',
  4458. MM: '%d mis',
  4459. y: 'blwyddyn',
  4460. yy: '%d flynedd',
  4461. },
  4462. dayOfMonthOrdinalParse: /\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,
  4463. // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh
  4464. ordinal: function (number) {
  4465. var b = number,
  4466. output = '',
  4467. lookup = [
  4468. '',
  4469. 'af',
  4470. 'il',
  4471. 'ydd',
  4472. 'ydd',
  4473. 'ed',
  4474. 'ed',
  4475. 'ed',
  4476. 'fed',
  4477. 'fed',
  4478. 'fed', // 1af to 10fed
  4479. 'eg',
  4480. 'fed',
  4481. 'eg',
  4482. 'eg',
  4483. 'fed',
  4484. 'eg',
  4485. 'eg',
  4486. 'fed',
  4487. 'eg',
  4488. 'fed', // 11eg to 20fed
  4489. ];
  4490. if (b > 20) {
  4491. if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {
  4492. output = 'fed'; // not 30ain, 70ain or 90ain
  4493. } else {
  4494. output = 'ain';
  4495. }
  4496. } else if (b > 0) {
  4497. output = lookup[b];
  4498. }
  4499. return number + output;
  4500. },
  4501. week: {
  4502. dow: 1, // Monday is the first day of the week.
  4503. doy: 4, // The week that contains Jan 4th is the first week of the year.
  4504. },
  4505. }));
  4506. /***/ }),
  4507. /***/ "./node_modules/moment/dist/locale/da.js":
  4508. /*!***********************************************!*\
  4509. !*** ./node_modules/moment/dist/locale/da.js ***!
  4510. \***********************************************/
  4511. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  4512. "use strict";
  4513. __webpack_require__.r(__webpack_exports__);
  4514. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4515. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  4516. /* harmony export */ });
  4517. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  4518. //! moment.js locale configuration
  4519. //! locale : Danish [da]
  4520. //! author : Ulrik Nielsen : https://github.com/mrbase
  4521. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('da', {
  4522. months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(
  4523. '_'
  4524. ),
  4525. monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
  4526. weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
  4527. weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),
  4528. weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
  4529. longDateFormat: {
  4530. LT: 'HH:mm',
  4531. LTS: 'HH:mm:ss',
  4532. L: 'DD.MM.YYYY',
  4533. LL: 'D. MMMM YYYY',
  4534. LLL: 'D. MMMM YYYY HH:mm',
  4535. LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',
  4536. },
  4537. calendar: {
  4538. sameDay: '[i dag kl.] LT',
  4539. nextDay: '[i morgen kl.] LT',
  4540. nextWeek: 'på dddd [kl.] LT',
  4541. lastDay: '[i går kl.] LT',
  4542. lastWeek: '[i] dddd[s kl.] LT',
  4543. sameElse: 'L',
  4544. },
  4545. relativeTime: {
  4546. future: 'om %s',
  4547. past: '%s siden',
  4548. s: 'få sekunder',
  4549. ss: '%d sekunder',
  4550. m: 'et minut',
  4551. mm: '%d minutter',
  4552. h: 'en time',
  4553. hh: '%d timer',
  4554. d: 'en dag',
  4555. dd: '%d dage',
  4556. M: 'en måned',
  4557. MM: '%d måneder',
  4558. y: 'et år',
  4559. yy: '%d år',
  4560. },
  4561. dayOfMonthOrdinalParse: /\d{1,2}\./,
  4562. ordinal: '%d.',
  4563. week: {
  4564. dow: 1, // Monday is the first day of the week.
  4565. doy: 4, // The week that contains Jan 4th is the first week of the year.
  4566. },
  4567. }));
  4568. /***/ }),
  4569. /***/ "./node_modules/moment/dist/locale/de-at.js":
  4570. /*!**************************************************!*\
  4571. !*** ./node_modules/moment/dist/locale/de-at.js ***!
  4572. \**************************************************/
  4573. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  4574. "use strict";
  4575. __webpack_require__.r(__webpack_exports__);
  4576. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4577. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  4578. /* harmony export */ });
  4579. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  4580. //! moment.js locale configuration
  4581. //! locale : German (Austria) [de-at]
  4582. //! author : lluchs : https://github.com/lluchs
  4583. //! author: Menelion Elensúle: https://github.com/Oire
  4584. //! author : Martin Groller : https://github.com/MadMG
  4585. //! author : Mikolaj Dadela : https://github.com/mik01aj
  4586. function processRelativeTime(number, withoutSuffix, key, isFuture) {
  4587. var format = {
  4588. m: ['eine Minute', 'einer Minute'],
  4589. h: ['eine Stunde', 'einer Stunde'],
  4590. d: ['ein Tag', 'einem Tag'],
  4591. dd: [number + ' Tage', number + ' Tagen'],
  4592. w: ['eine Woche', 'einer Woche'],
  4593. M: ['ein Monat', 'einem Monat'],
  4594. MM: [number + ' Monate', number + ' Monaten'],
  4595. y: ['ein Jahr', 'einem Jahr'],
  4596. yy: [number + ' Jahre', number + ' Jahren'],
  4597. };
  4598. return withoutSuffix ? format[key][0] : format[key][1];
  4599. }
  4600. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('de-at', {
  4601. months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
  4602. '_'
  4603. ),
  4604. monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
  4605. '_'
  4606. ),
  4607. monthsParseExact: true,
  4608. weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
  4609. '_'
  4610. ),
  4611. weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
  4612. weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
  4613. weekdaysParseExact: true,
  4614. longDateFormat: {
  4615. LT: 'HH:mm',
  4616. LTS: 'HH:mm:ss',
  4617. L: 'DD.MM.YYYY',
  4618. LL: 'D. MMMM YYYY',
  4619. LLL: 'D. MMMM YYYY HH:mm',
  4620. LLLL: 'dddd, D. MMMM YYYY HH:mm',
  4621. },
  4622. calendar: {
  4623. sameDay: '[heute um] LT [Uhr]',
  4624. sameElse: 'L',
  4625. nextDay: '[morgen um] LT [Uhr]',
  4626. nextWeek: 'dddd [um] LT [Uhr]',
  4627. lastDay: '[gestern um] LT [Uhr]',
  4628. lastWeek: '[letzten] dddd [um] LT [Uhr]',
  4629. },
  4630. relativeTime: {
  4631. future: 'in %s',
  4632. past: 'vor %s',
  4633. s: 'ein paar Sekunden',
  4634. ss: '%d Sekunden',
  4635. m: processRelativeTime,
  4636. mm: '%d Minuten',
  4637. h: processRelativeTime,
  4638. hh: '%d Stunden',
  4639. d: processRelativeTime,
  4640. dd: processRelativeTime,
  4641. w: processRelativeTime,
  4642. ww: '%d Wochen',
  4643. M: processRelativeTime,
  4644. MM: processRelativeTime,
  4645. y: processRelativeTime,
  4646. yy: processRelativeTime,
  4647. },
  4648. dayOfMonthOrdinalParse: /\d{1,2}\./,
  4649. ordinal: '%d.',
  4650. week: {
  4651. dow: 1, // Monday is the first day of the week.
  4652. doy: 4, // The week that contains Jan 4th is the first week of the year.
  4653. },
  4654. }));
  4655. /***/ }),
  4656. /***/ "./node_modules/moment/dist/locale/de-ch.js":
  4657. /*!**************************************************!*\
  4658. !*** ./node_modules/moment/dist/locale/de-ch.js ***!
  4659. \**************************************************/
  4660. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  4661. "use strict";
  4662. __webpack_require__.r(__webpack_exports__);
  4663. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4664. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  4665. /* harmony export */ });
  4666. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  4667. //! moment.js locale configuration
  4668. //! locale : German (Switzerland) [de-ch]
  4669. //! author : sschueller : https://github.com/sschueller
  4670. // based on: https://www.bk.admin.ch/dokumentation/sprachen/04915/05016/index.html?lang=de#
  4671. function processRelativeTime(number, withoutSuffix, key, isFuture) {
  4672. var format = {
  4673. m: ['eine Minute', 'einer Minute'],
  4674. h: ['eine Stunde', 'einer Stunde'],
  4675. d: ['ein Tag', 'einem Tag'],
  4676. dd: [number + ' Tage', number + ' Tagen'],
  4677. w: ['eine Woche', 'einer Woche'],
  4678. M: ['ein Monat', 'einem Monat'],
  4679. MM: [number + ' Monate', number + ' Monaten'],
  4680. y: ['ein Jahr', 'einem Jahr'],
  4681. yy: [number + ' Jahre', number + ' Jahren'],
  4682. };
  4683. return withoutSuffix ? format[key][0] : format[key][1];
  4684. }
  4685. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('de-ch', {
  4686. months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
  4687. '_'
  4688. ),
  4689. monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
  4690. '_'
  4691. ),
  4692. monthsParseExact: true,
  4693. weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
  4694. '_'
  4695. ),
  4696. weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
  4697. weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
  4698. weekdaysParseExact: true,
  4699. longDateFormat: {
  4700. LT: 'HH:mm',
  4701. LTS: 'HH:mm:ss',
  4702. L: 'DD.MM.YYYY',
  4703. LL: 'D. MMMM YYYY',
  4704. LLL: 'D. MMMM YYYY HH:mm',
  4705. LLLL: 'dddd, D. MMMM YYYY HH:mm',
  4706. },
  4707. calendar: {
  4708. sameDay: '[heute um] LT [Uhr]',
  4709. sameElse: 'L',
  4710. nextDay: '[morgen um] LT [Uhr]',
  4711. nextWeek: 'dddd [um] LT [Uhr]',
  4712. lastDay: '[gestern um] LT [Uhr]',
  4713. lastWeek: '[letzten] dddd [um] LT [Uhr]',
  4714. },
  4715. relativeTime: {
  4716. future: 'in %s',
  4717. past: 'vor %s',
  4718. s: 'ein paar Sekunden',
  4719. ss: '%d Sekunden',
  4720. m: processRelativeTime,
  4721. mm: '%d Minuten',
  4722. h: processRelativeTime,
  4723. hh: '%d Stunden',
  4724. d: processRelativeTime,
  4725. dd: processRelativeTime,
  4726. w: processRelativeTime,
  4727. ww: '%d Wochen',
  4728. M: processRelativeTime,
  4729. MM: processRelativeTime,
  4730. y: processRelativeTime,
  4731. yy: processRelativeTime,
  4732. },
  4733. dayOfMonthOrdinalParse: /\d{1,2}\./,
  4734. ordinal: '%d.',
  4735. week: {
  4736. dow: 1, // Monday is the first day of the week.
  4737. doy: 4, // The week that contains Jan 4th is the first week of the year.
  4738. },
  4739. }));
  4740. /***/ }),
  4741. /***/ "./node_modules/moment/dist/locale/de.js":
  4742. /*!***********************************************!*\
  4743. !*** ./node_modules/moment/dist/locale/de.js ***!
  4744. \***********************************************/
  4745. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  4746. "use strict";
  4747. __webpack_require__.r(__webpack_exports__);
  4748. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4749. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  4750. /* harmony export */ });
  4751. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  4752. //! moment.js locale configuration
  4753. //! locale : German [de]
  4754. //! author : lluchs : https://github.com/lluchs
  4755. //! author: Menelion Elensúle: https://github.com/Oire
  4756. //! author : Mikolaj Dadela : https://github.com/mik01aj
  4757. function processRelativeTime(number, withoutSuffix, key, isFuture) {
  4758. var format = {
  4759. m: ['eine Minute', 'einer Minute'],
  4760. h: ['eine Stunde', 'einer Stunde'],
  4761. d: ['ein Tag', 'einem Tag'],
  4762. dd: [number + ' Tage', number + ' Tagen'],
  4763. w: ['eine Woche', 'einer Woche'],
  4764. M: ['ein Monat', 'einem Monat'],
  4765. MM: [number + ' Monate', number + ' Monaten'],
  4766. y: ['ein Jahr', 'einem Jahr'],
  4767. yy: [number + ' Jahre', number + ' Jahren'],
  4768. };
  4769. return withoutSuffix ? format[key][0] : format[key][1];
  4770. }
  4771. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('de', {
  4772. months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(
  4773. '_'
  4774. ),
  4775. monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split(
  4776. '_'
  4777. ),
  4778. monthsParseExact: true,
  4779. weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(
  4780. '_'
  4781. ),
  4782. weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
  4783. weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
  4784. weekdaysParseExact: true,
  4785. longDateFormat: {
  4786. LT: 'HH:mm',
  4787. LTS: 'HH:mm:ss',
  4788. L: 'DD.MM.YYYY',
  4789. LL: 'D. MMMM YYYY',
  4790. LLL: 'D. MMMM YYYY HH:mm',
  4791. LLLL: 'dddd, D. MMMM YYYY HH:mm',
  4792. },
  4793. calendar: {
  4794. sameDay: '[heute um] LT [Uhr]',
  4795. sameElse: 'L',
  4796. nextDay: '[morgen um] LT [Uhr]',
  4797. nextWeek: 'dddd [um] LT [Uhr]',
  4798. lastDay: '[gestern um] LT [Uhr]',
  4799. lastWeek: '[letzten] dddd [um] LT [Uhr]',
  4800. },
  4801. relativeTime: {
  4802. future: 'in %s',
  4803. past: 'vor %s',
  4804. s: 'ein paar Sekunden',
  4805. ss: '%d Sekunden',
  4806. m: processRelativeTime,
  4807. mm: '%d Minuten',
  4808. h: processRelativeTime,
  4809. hh: '%d Stunden',
  4810. d: processRelativeTime,
  4811. dd: processRelativeTime,
  4812. w: processRelativeTime,
  4813. ww: '%d Wochen',
  4814. M: processRelativeTime,
  4815. MM: processRelativeTime,
  4816. y: processRelativeTime,
  4817. yy: processRelativeTime,
  4818. },
  4819. dayOfMonthOrdinalParse: /\d{1,2}\./,
  4820. ordinal: '%d.',
  4821. week: {
  4822. dow: 1, // Monday is the first day of the week.
  4823. doy: 4, // The week that contains Jan 4th is the first week of the year.
  4824. },
  4825. }));
  4826. /***/ }),
  4827. /***/ "./node_modules/moment/dist/locale/dv.js":
  4828. /*!***********************************************!*\
  4829. !*** ./node_modules/moment/dist/locale/dv.js ***!
  4830. \***********************************************/
  4831. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  4832. "use strict";
  4833. __webpack_require__.r(__webpack_exports__);
  4834. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4835. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  4836. /* harmony export */ });
  4837. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  4838. //! moment.js locale configuration
  4839. //! locale : Maldivian [dv]
  4840. //! author : Jawish Hameed : https://github.com/jawish
  4841. var months = [
  4842. 'ޖެނުއަރީ',
  4843. 'ފެބްރުއަރީ',
  4844. 'މާރިޗު',
  4845. 'އޭޕްރީލު',
  4846. 'މޭ',
  4847. 'ޖޫން',
  4848. 'ޖުލައި',
  4849. 'އޯގަސްޓު',
  4850. 'ސެޕްޓެމްބަރު',
  4851. 'އޮކްޓޯބަރު',
  4852. 'ނޮވެމްބަރު',
  4853. 'ޑިސެމްބަރު',
  4854. ],
  4855. weekdays = [
  4856. 'އާދިއްތަ',
  4857. 'ހޯމަ',
  4858. 'އަންގާރަ',
  4859. 'ބުދަ',
  4860. 'ބުރާސްފަތި',
  4861. 'ހުކުރު',
  4862. 'ހޮނިހިރު',
  4863. ];
  4864. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('dv', {
  4865. months: months,
  4866. monthsShort: months,
  4867. weekdays: weekdays,
  4868. weekdaysShort: weekdays,
  4869. weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),
  4870. longDateFormat: {
  4871. LT: 'HH:mm',
  4872. LTS: 'HH:mm:ss',
  4873. L: 'D/M/YYYY',
  4874. LL: 'D MMMM YYYY',
  4875. LLL: 'D MMMM YYYY HH:mm',
  4876. LLLL: 'dddd D MMMM YYYY HH:mm',
  4877. },
  4878. meridiemParse: /މކ|މފ/,
  4879. isPM: function (input) {
  4880. return 'މފ' === input;
  4881. },
  4882. meridiem: function (hour, minute, isLower) {
  4883. if (hour < 12) {
  4884. return 'މކ';
  4885. } else {
  4886. return 'މފ';
  4887. }
  4888. },
  4889. calendar: {
  4890. sameDay: '[މިއަދު] LT',
  4891. nextDay: '[މާދަމާ] LT',
  4892. nextWeek: 'dddd LT',
  4893. lastDay: '[އިއްޔެ] LT',
  4894. lastWeek: '[ފާއިތުވި] dddd LT',
  4895. sameElse: 'L',
  4896. },
  4897. relativeTime: {
  4898. future: 'ތެރޭގައި %s',
  4899. past: 'ކުރިން %s',
  4900. s: 'ސިކުންތުކޮޅެއް',
  4901. ss: 'd% ސިކުންތު',
  4902. m: 'މިނިޓެއް',
  4903. mm: 'މިނިޓު %d',
  4904. h: 'ގަޑިއިރެއް',
  4905. hh: 'ގަޑިއިރު %d',
  4906. d: 'ދުވަހެއް',
  4907. dd: 'ދުވަސް %d',
  4908. M: 'މަހެއް',
  4909. MM: 'މަސް %d',
  4910. y: 'އަހަރެއް',
  4911. yy: 'އަހަރު %d',
  4912. },
  4913. preparse: function (string) {
  4914. return string.replace(/،/g, ',');
  4915. },
  4916. postformat: function (string) {
  4917. return string.replace(/,/g, '،');
  4918. },
  4919. week: {
  4920. dow: 7, // Sunday is the first day of the week.
  4921. doy: 12, // The week that contains Jan 12th is the first week of the year.
  4922. },
  4923. }));
  4924. /***/ }),
  4925. /***/ "./node_modules/moment/dist/locale/el.js":
  4926. /*!***********************************************!*\
  4927. !*** ./node_modules/moment/dist/locale/el.js ***!
  4928. \***********************************************/
  4929. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  4930. "use strict";
  4931. __webpack_require__.r(__webpack_exports__);
  4932. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  4933. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  4934. /* harmony export */ });
  4935. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  4936. //! moment.js locale configuration
  4937. //! locale : Greek [el]
  4938. //! author : Aggelos Karalias : https://github.com/mehiel
  4939. function isFunction(input) {
  4940. return (
  4941. (typeof Function !== 'undefined' && input instanceof Function) ||
  4942. Object.prototype.toString.call(input) === '[object Function]'
  4943. );
  4944. }
  4945. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('el', {
  4946. monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(
  4947. '_'
  4948. ),
  4949. monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(
  4950. '_'
  4951. ),
  4952. months: function (momentToFormat, format) {
  4953. if (!momentToFormat) {
  4954. return this._monthsNominativeEl;
  4955. } else if (
  4956. typeof format === 'string' &&
  4957. /D/.test(format.substring(0, format.indexOf('MMMM')))
  4958. ) {
  4959. // if there is a day number before 'MMMM'
  4960. return this._monthsGenitiveEl[momentToFormat.month()];
  4961. } else {
  4962. return this._monthsNominativeEl[momentToFormat.month()];
  4963. }
  4964. },
  4965. monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),
  4966. weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(
  4967. '_'
  4968. ),
  4969. weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),
  4970. weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),
  4971. meridiem: function (hours, minutes, isLower) {
  4972. if (hours > 11) {
  4973. return isLower ? 'μμ' : 'ΜΜ';
  4974. } else {
  4975. return isLower ? 'πμ' : 'ΠΜ';
  4976. }
  4977. },
  4978. isPM: function (input) {
  4979. return (input + '').toLowerCase()[0] === 'μ';
  4980. },
  4981. meridiemParse: /[ΠΜ]\.?Μ?\.?/i,
  4982. longDateFormat: {
  4983. LT: 'h:mm A',
  4984. LTS: 'h:mm:ss A',
  4985. L: 'DD/MM/YYYY',
  4986. LL: 'D MMMM YYYY',
  4987. LLL: 'D MMMM YYYY h:mm A',
  4988. LLLL: 'dddd, D MMMM YYYY h:mm A',
  4989. },
  4990. calendarEl: {
  4991. sameDay: '[Σήμερα {}] LT',
  4992. nextDay: '[Αύριο {}] LT',
  4993. nextWeek: 'dddd [{}] LT',
  4994. lastDay: '[Χθες {}] LT',
  4995. lastWeek: function () {
  4996. switch (this.day()) {
  4997. case 6:
  4998. return '[το προηγούμενο] dddd [{}] LT';
  4999. default:
  5000. return '[την προηγούμενη] dddd [{}] LT';
  5001. }
  5002. },
  5003. sameElse: 'L',
  5004. },
  5005. calendar: function (key, mom) {
  5006. var output = this._calendarEl[key],
  5007. hours = mom && mom.hours();
  5008. if (isFunction(output)) {
  5009. output = output.apply(mom);
  5010. }
  5011. return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');
  5012. },
  5013. relativeTime: {
  5014. future: 'σε %s',
  5015. past: '%s πριν',
  5016. s: 'λίγα δευτερόλεπτα',
  5017. ss: '%d δευτερόλεπτα',
  5018. m: 'ένα λεπτό',
  5019. mm: '%d λεπτά',
  5020. h: 'μία ώρα',
  5021. hh: '%d ώρες',
  5022. d: 'μία μέρα',
  5023. dd: '%d μέρες',
  5024. M: 'ένας μήνας',
  5025. MM: '%d μήνες',
  5026. y: 'ένας χρόνος',
  5027. yy: '%d χρόνια',
  5028. },
  5029. dayOfMonthOrdinalParse: /\d{1,2}η/,
  5030. ordinal: '%dη',
  5031. week: {
  5032. dow: 1, // Monday is the first day of the week.
  5033. doy: 4, // The week that contains Jan 4st is the first week of the year.
  5034. },
  5035. }));
  5036. /***/ }),
  5037. /***/ "./node_modules/moment/dist/locale/en-au.js":
  5038. /*!**************************************************!*\
  5039. !*** ./node_modules/moment/dist/locale/en-au.js ***!
  5040. \**************************************************/
  5041. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5042. "use strict";
  5043. __webpack_require__.r(__webpack_exports__);
  5044. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5045. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5046. /* harmony export */ });
  5047. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5048. //! moment.js locale configuration
  5049. //! locale : English (Australia) [en-au]
  5050. //! author : Jared Morse : https://github.com/jarcoal
  5051. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('en-au', {
  5052. months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
  5053. '_'
  5054. ),
  5055. monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
  5056. weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
  5057. '_'
  5058. ),
  5059. weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
  5060. weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
  5061. longDateFormat: {
  5062. LT: 'h:mm A',
  5063. LTS: 'h:mm:ss A',
  5064. L: 'DD/MM/YYYY',
  5065. LL: 'D MMMM YYYY',
  5066. LLL: 'D MMMM YYYY h:mm A',
  5067. LLLL: 'dddd, D MMMM YYYY h:mm A',
  5068. },
  5069. calendar: {
  5070. sameDay: '[Today at] LT',
  5071. nextDay: '[Tomorrow at] LT',
  5072. nextWeek: 'dddd [at] LT',
  5073. lastDay: '[Yesterday at] LT',
  5074. lastWeek: '[Last] dddd [at] LT',
  5075. sameElse: 'L',
  5076. },
  5077. relativeTime: {
  5078. future: 'in %s',
  5079. past: '%s ago',
  5080. s: 'a few seconds',
  5081. ss: '%d seconds',
  5082. m: 'a minute',
  5083. mm: '%d minutes',
  5084. h: 'an hour',
  5085. hh: '%d hours',
  5086. d: 'a day',
  5087. dd: '%d days',
  5088. M: 'a month',
  5089. MM: '%d months',
  5090. y: 'a year',
  5091. yy: '%d years',
  5092. },
  5093. dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
  5094. ordinal: function (number) {
  5095. var b = number % 10,
  5096. output =
  5097. ~~((number % 100) / 10) === 1
  5098. ? 'th'
  5099. : b === 1
  5100. ? 'st'
  5101. : b === 2
  5102. ? 'nd'
  5103. : b === 3
  5104. ? 'rd'
  5105. : 'th';
  5106. return number + output;
  5107. },
  5108. week: {
  5109. dow: 0, // Sunday is the first day of the week.
  5110. doy: 4, // The week that contains Jan 4th is the first week of the year.
  5111. },
  5112. }));
  5113. /***/ }),
  5114. /***/ "./node_modules/moment/dist/locale/en-ca.js":
  5115. /*!**************************************************!*\
  5116. !*** ./node_modules/moment/dist/locale/en-ca.js ***!
  5117. \**************************************************/
  5118. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5119. "use strict";
  5120. __webpack_require__.r(__webpack_exports__);
  5121. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5122. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5123. /* harmony export */ });
  5124. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5125. //! moment.js locale configuration
  5126. //! locale : English (Canada) [en-ca]
  5127. //! author : Jonathan Abourbih : https://github.com/jonbca
  5128. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('en-ca', {
  5129. months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
  5130. '_'
  5131. ),
  5132. monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
  5133. weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
  5134. '_'
  5135. ),
  5136. weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
  5137. weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
  5138. longDateFormat: {
  5139. LT: 'h:mm A',
  5140. LTS: 'h:mm:ss A',
  5141. L: 'YYYY-MM-DD',
  5142. LL: 'MMMM D, YYYY',
  5143. LLL: 'MMMM D, YYYY h:mm A',
  5144. LLLL: 'dddd, MMMM D, YYYY h:mm A',
  5145. },
  5146. calendar: {
  5147. sameDay: '[Today at] LT',
  5148. nextDay: '[Tomorrow at] LT',
  5149. nextWeek: 'dddd [at] LT',
  5150. lastDay: '[Yesterday at] LT',
  5151. lastWeek: '[Last] dddd [at] LT',
  5152. sameElse: 'L',
  5153. },
  5154. relativeTime: {
  5155. future: 'in %s',
  5156. past: '%s ago',
  5157. s: 'a few seconds',
  5158. ss: '%d seconds',
  5159. m: 'a minute',
  5160. mm: '%d minutes',
  5161. h: 'an hour',
  5162. hh: '%d hours',
  5163. d: 'a day',
  5164. dd: '%d days',
  5165. M: 'a month',
  5166. MM: '%d months',
  5167. y: 'a year',
  5168. yy: '%d years',
  5169. },
  5170. dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
  5171. ordinal: function (number) {
  5172. var b = number % 10,
  5173. output =
  5174. ~~((number % 100) / 10) === 1
  5175. ? 'th'
  5176. : b === 1
  5177. ? 'st'
  5178. : b === 2
  5179. ? 'nd'
  5180. : b === 3
  5181. ? 'rd'
  5182. : 'th';
  5183. return number + output;
  5184. },
  5185. }));
  5186. /***/ }),
  5187. /***/ "./node_modules/moment/dist/locale/en-gb.js":
  5188. /*!**************************************************!*\
  5189. !*** ./node_modules/moment/dist/locale/en-gb.js ***!
  5190. \**************************************************/
  5191. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5192. "use strict";
  5193. __webpack_require__.r(__webpack_exports__);
  5194. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5195. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5196. /* harmony export */ });
  5197. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5198. //! moment.js locale configuration
  5199. //! locale : English (United Kingdom) [en-gb]
  5200. //! author : Chris Gedrim : https://github.com/chrisgedrim
  5201. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('en-gb', {
  5202. months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
  5203. '_'
  5204. ),
  5205. monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
  5206. weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
  5207. '_'
  5208. ),
  5209. weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
  5210. weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
  5211. longDateFormat: {
  5212. LT: 'HH:mm',
  5213. LTS: 'HH:mm:ss',
  5214. L: 'DD/MM/YYYY',
  5215. LL: 'D MMMM YYYY',
  5216. LLL: 'D MMMM YYYY HH:mm',
  5217. LLLL: 'dddd, D MMMM YYYY HH:mm',
  5218. },
  5219. calendar: {
  5220. sameDay: '[Today at] LT',
  5221. nextDay: '[Tomorrow at] LT',
  5222. nextWeek: 'dddd [at] LT',
  5223. lastDay: '[Yesterday at] LT',
  5224. lastWeek: '[Last] dddd [at] LT',
  5225. sameElse: 'L',
  5226. },
  5227. relativeTime: {
  5228. future: 'in %s',
  5229. past: '%s ago',
  5230. s: 'a few seconds',
  5231. ss: '%d seconds',
  5232. m: 'a minute',
  5233. mm: '%d minutes',
  5234. h: 'an hour',
  5235. hh: '%d hours',
  5236. d: 'a day',
  5237. dd: '%d days',
  5238. M: 'a month',
  5239. MM: '%d months',
  5240. y: 'a year',
  5241. yy: '%d years',
  5242. },
  5243. dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
  5244. ordinal: function (number) {
  5245. var b = number % 10,
  5246. output =
  5247. ~~((number % 100) / 10) === 1
  5248. ? 'th'
  5249. : b === 1
  5250. ? 'st'
  5251. : b === 2
  5252. ? 'nd'
  5253. : b === 3
  5254. ? 'rd'
  5255. : 'th';
  5256. return number + output;
  5257. },
  5258. week: {
  5259. dow: 1, // Monday is the first day of the week.
  5260. doy: 4, // The week that contains Jan 4th is the first week of the year.
  5261. },
  5262. }));
  5263. /***/ }),
  5264. /***/ "./node_modules/moment/dist/locale/en-ie.js":
  5265. /*!**************************************************!*\
  5266. !*** ./node_modules/moment/dist/locale/en-ie.js ***!
  5267. \**************************************************/
  5268. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5269. "use strict";
  5270. __webpack_require__.r(__webpack_exports__);
  5271. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5272. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5273. /* harmony export */ });
  5274. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5275. //! moment.js locale configuration
  5276. //! locale : English (Ireland) [en-ie]
  5277. //! author : Chris Cartlidge : https://github.com/chriscartlidge
  5278. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('en-ie', {
  5279. months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
  5280. '_'
  5281. ),
  5282. monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
  5283. weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
  5284. '_'
  5285. ),
  5286. weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
  5287. weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
  5288. longDateFormat: {
  5289. LT: 'HH:mm',
  5290. LTS: 'HH:mm:ss',
  5291. L: 'DD/MM/YYYY',
  5292. LL: 'D MMMM YYYY',
  5293. LLL: 'D MMMM YYYY HH:mm',
  5294. LLLL: 'dddd D MMMM YYYY HH:mm',
  5295. },
  5296. calendar: {
  5297. sameDay: '[Today at] LT',
  5298. nextDay: '[Tomorrow at] LT',
  5299. nextWeek: 'dddd [at] LT',
  5300. lastDay: '[Yesterday at] LT',
  5301. lastWeek: '[Last] dddd [at] LT',
  5302. sameElse: 'L',
  5303. },
  5304. relativeTime: {
  5305. future: 'in %s',
  5306. past: '%s ago',
  5307. s: 'a few seconds',
  5308. ss: '%d seconds',
  5309. m: 'a minute',
  5310. mm: '%d minutes',
  5311. h: 'an hour',
  5312. hh: '%d hours',
  5313. d: 'a day',
  5314. dd: '%d days',
  5315. M: 'a month',
  5316. MM: '%d months',
  5317. y: 'a year',
  5318. yy: '%d years',
  5319. },
  5320. dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
  5321. ordinal: function (number) {
  5322. var b = number % 10,
  5323. output =
  5324. ~~((number % 100) / 10) === 1
  5325. ? 'th'
  5326. : b === 1
  5327. ? 'st'
  5328. : b === 2
  5329. ? 'nd'
  5330. : b === 3
  5331. ? 'rd'
  5332. : 'th';
  5333. return number + output;
  5334. },
  5335. week: {
  5336. dow: 1, // Monday is the first day of the week.
  5337. doy: 4, // The week that contains Jan 4th is the first week of the year.
  5338. },
  5339. }));
  5340. /***/ }),
  5341. /***/ "./node_modules/moment/dist/locale/en-il.js":
  5342. /*!**************************************************!*\
  5343. !*** ./node_modules/moment/dist/locale/en-il.js ***!
  5344. \**************************************************/
  5345. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5346. "use strict";
  5347. __webpack_require__.r(__webpack_exports__);
  5348. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5349. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5350. /* harmony export */ });
  5351. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5352. //! moment.js locale configuration
  5353. //! locale : English (Israel) [en-il]
  5354. //! author : Chris Gedrim : https://github.com/chrisgedrim
  5355. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('en-il', {
  5356. months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
  5357. '_'
  5358. ),
  5359. monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
  5360. weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
  5361. '_'
  5362. ),
  5363. weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
  5364. weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
  5365. longDateFormat: {
  5366. LT: 'HH:mm',
  5367. LTS: 'HH:mm:ss',
  5368. L: 'DD/MM/YYYY',
  5369. LL: 'D MMMM YYYY',
  5370. LLL: 'D MMMM YYYY HH:mm',
  5371. LLLL: 'dddd, D MMMM YYYY HH:mm',
  5372. },
  5373. calendar: {
  5374. sameDay: '[Today at] LT',
  5375. nextDay: '[Tomorrow at] LT',
  5376. nextWeek: 'dddd [at] LT',
  5377. lastDay: '[Yesterday at] LT',
  5378. lastWeek: '[Last] dddd [at] LT',
  5379. sameElse: 'L',
  5380. },
  5381. relativeTime: {
  5382. future: 'in %s',
  5383. past: '%s ago',
  5384. s: 'a few seconds',
  5385. ss: '%d seconds',
  5386. m: 'a minute',
  5387. mm: '%d minutes',
  5388. h: 'an hour',
  5389. hh: '%d hours',
  5390. d: 'a day',
  5391. dd: '%d days',
  5392. M: 'a month',
  5393. MM: '%d months',
  5394. y: 'a year',
  5395. yy: '%d years',
  5396. },
  5397. dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
  5398. ordinal: function (number) {
  5399. var b = number % 10,
  5400. output =
  5401. ~~((number % 100) / 10) === 1
  5402. ? 'th'
  5403. : b === 1
  5404. ? 'st'
  5405. : b === 2
  5406. ? 'nd'
  5407. : b === 3
  5408. ? 'rd'
  5409. : 'th';
  5410. return number + output;
  5411. },
  5412. }));
  5413. /***/ }),
  5414. /***/ "./node_modules/moment/dist/locale/en-in.js":
  5415. /*!**************************************************!*\
  5416. !*** ./node_modules/moment/dist/locale/en-in.js ***!
  5417. \**************************************************/
  5418. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5419. "use strict";
  5420. __webpack_require__.r(__webpack_exports__);
  5421. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5422. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5423. /* harmony export */ });
  5424. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5425. //! moment.js locale configuration
  5426. //! locale : English (India) [en-in]
  5427. //! author : Jatin Agrawal : https://github.com/jatinag22
  5428. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('en-in', {
  5429. months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
  5430. '_'
  5431. ),
  5432. monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
  5433. weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
  5434. '_'
  5435. ),
  5436. weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
  5437. weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
  5438. longDateFormat: {
  5439. LT: 'h:mm A',
  5440. LTS: 'h:mm:ss A',
  5441. L: 'DD/MM/YYYY',
  5442. LL: 'D MMMM YYYY',
  5443. LLL: 'D MMMM YYYY h:mm A',
  5444. LLLL: 'dddd, D MMMM YYYY h:mm A',
  5445. },
  5446. calendar: {
  5447. sameDay: '[Today at] LT',
  5448. nextDay: '[Tomorrow at] LT',
  5449. nextWeek: 'dddd [at] LT',
  5450. lastDay: '[Yesterday at] LT',
  5451. lastWeek: '[Last] dddd [at] LT',
  5452. sameElse: 'L',
  5453. },
  5454. relativeTime: {
  5455. future: 'in %s',
  5456. past: '%s ago',
  5457. s: 'a few seconds',
  5458. ss: '%d seconds',
  5459. m: 'a minute',
  5460. mm: '%d minutes',
  5461. h: 'an hour',
  5462. hh: '%d hours',
  5463. d: 'a day',
  5464. dd: '%d days',
  5465. M: 'a month',
  5466. MM: '%d months',
  5467. y: 'a year',
  5468. yy: '%d years',
  5469. },
  5470. dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
  5471. ordinal: function (number) {
  5472. var b = number % 10,
  5473. output =
  5474. ~~((number % 100) / 10) === 1
  5475. ? 'th'
  5476. : b === 1
  5477. ? 'st'
  5478. : b === 2
  5479. ? 'nd'
  5480. : b === 3
  5481. ? 'rd'
  5482. : 'th';
  5483. return number + output;
  5484. },
  5485. week: {
  5486. dow: 0, // Sunday is the first day of the week.
  5487. doy: 6, // The week that contains Jan 1st is the first week of the year.
  5488. },
  5489. }));
  5490. /***/ }),
  5491. /***/ "./node_modules/moment/dist/locale/en-nz.js":
  5492. /*!**************************************************!*\
  5493. !*** ./node_modules/moment/dist/locale/en-nz.js ***!
  5494. \**************************************************/
  5495. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5496. "use strict";
  5497. __webpack_require__.r(__webpack_exports__);
  5498. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5499. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5500. /* harmony export */ });
  5501. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5502. //! moment.js locale configuration
  5503. //! locale : English (New Zealand) [en-nz]
  5504. //! author : Luke McGregor : https://github.com/lukemcgregor
  5505. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('en-nz', {
  5506. months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
  5507. '_'
  5508. ),
  5509. monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
  5510. weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
  5511. '_'
  5512. ),
  5513. weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
  5514. weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
  5515. longDateFormat: {
  5516. LT: 'h:mm A',
  5517. LTS: 'h:mm:ss A',
  5518. L: 'DD/MM/YYYY',
  5519. LL: 'D MMMM YYYY',
  5520. LLL: 'D MMMM YYYY h:mm A',
  5521. LLLL: 'dddd, D MMMM YYYY h:mm A',
  5522. },
  5523. calendar: {
  5524. sameDay: '[Today at] LT',
  5525. nextDay: '[Tomorrow at] LT',
  5526. nextWeek: 'dddd [at] LT',
  5527. lastDay: '[Yesterday at] LT',
  5528. lastWeek: '[Last] dddd [at] LT',
  5529. sameElse: 'L',
  5530. },
  5531. relativeTime: {
  5532. future: 'in %s',
  5533. past: '%s ago',
  5534. s: 'a few seconds',
  5535. ss: '%d seconds',
  5536. m: 'a minute',
  5537. mm: '%d minutes',
  5538. h: 'an hour',
  5539. hh: '%d hours',
  5540. d: 'a day',
  5541. dd: '%d days',
  5542. M: 'a month',
  5543. MM: '%d months',
  5544. y: 'a year',
  5545. yy: '%d years',
  5546. },
  5547. dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
  5548. ordinal: function (number) {
  5549. var b = number % 10,
  5550. output =
  5551. ~~((number % 100) / 10) === 1
  5552. ? 'th'
  5553. : b === 1
  5554. ? 'st'
  5555. : b === 2
  5556. ? 'nd'
  5557. : b === 3
  5558. ? 'rd'
  5559. : 'th';
  5560. return number + output;
  5561. },
  5562. week: {
  5563. dow: 1, // Monday is the first day of the week.
  5564. doy: 4, // The week that contains Jan 4th is the first week of the year.
  5565. },
  5566. }));
  5567. /***/ }),
  5568. /***/ "./node_modules/moment/dist/locale/en-sg.js":
  5569. /*!**************************************************!*\
  5570. !*** ./node_modules/moment/dist/locale/en-sg.js ***!
  5571. \**************************************************/
  5572. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5573. "use strict";
  5574. __webpack_require__.r(__webpack_exports__);
  5575. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5576. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5577. /* harmony export */ });
  5578. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5579. //! moment.js locale configuration
  5580. //! locale : English (Singapore) [en-sg]
  5581. //! author : Matthew Castrillon-Madrigal : https://github.com/techdimension
  5582. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('en-sg', {
  5583. months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
  5584. '_'
  5585. ),
  5586. monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),
  5587. weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
  5588. '_'
  5589. ),
  5590. weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
  5591. weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
  5592. longDateFormat: {
  5593. LT: 'HH:mm',
  5594. LTS: 'HH:mm:ss',
  5595. L: 'DD/MM/YYYY',
  5596. LL: 'D MMMM YYYY',
  5597. LLL: 'D MMMM YYYY HH:mm',
  5598. LLLL: 'dddd, D MMMM YYYY HH:mm',
  5599. },
  5600. calendar: {
  5601. sameDay: '[Today at] LT',
  5602. nextDay: '[Tomorrow at] LT',
  5603. nextWeek: 'dddd [at] LT',
  5604. lastDay: '[Yesterday at] LT',
  5605. lastWeek: '[Last] dddd [at] LT',
  5606. sameElse: 'L',
  5607. },
  5608. relativeTime: {
  5609. future: 'in %s',
  5610. past: '%s ago',
  5611. s: 'a few seconds',
  5612. ss: '%d seconds',
  5613. m: 'a minute',
  5614. mm: '%d minutes',
  5615. h: 'an hour',
  5616. hh: '%d hours',
  5617. d: 'a day',
  5618. dd: '%d days',
  5619. M: 'a month',
  5620. MM: '%d months',
  5621. y: 'a year',
  5622. yy: '%d years',
  5623. },
  5624. dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
  5625. ordinal: function (number) {
  5626. var b = number % 10,
  5627. output =
  5628. ~~((number % 100) / 10) === 1
  5629. ? 'th'
  5630. : b === 1
  5631. ? 'st'
  5632. : b === 2
  5633. ? 'nd'
  5634. : b === 3
  5635. ? 'rd'
  5636. : 'th';
  5637. return number + output;
  5638. },
  5639. week: {
  5640. dow: 1, // Monday is the first day of the week.
  5641. doy: 4, // The week that contains Jan 4th is the first week of the year.
  5642. },
  5643. }));
  5644. /***/ }),
  5645. /***/ "./node_modules/moment/dist/locale/eo.js":
  5646. /*!***********************************************!*\
  5647. !*** ./node_modules/moment/dist/locale/eo.js ***!
  5648. \***********************************************/
  5649. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5650. "use strict";
  5651. __webpack_require__.r(__webpack_exports__);
  5652. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5653. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5654. /* harmony export */ });
  5655. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5656. //! moment.js locale configuration
  5657. //! locale : Esperanto [eo]
  5658. //! author : Colin Dean : https://github.com/colindean
  5659. //! author : Mia Nordentoft Imperatori : https://github.com/miestasmia
  5660. //! comment : miestasmia corrected the translation by colindean
  5661. //! comment : Vivakvo corrected the translation by colindean and miestasmia
  5662. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('eo', {
  5663. months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(
  5664. '_'
  5665. ),
  5666. monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),
  5667. weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),
  5668. weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),
  5669. weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),
  5670. longDateFormat: {
  5671. LT: 'HH:mm',
  5672. LTS: 'HH:mm:ss',
  5673. L: 'YYYY-MM-DD',
  5674. LL: '[la] D[-an de] MMMM, YYYY',
  5675. LLL: '[la] D[-an de] MMMM, YYYY HH:mm',
  5676. LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',
  5677. llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',
  5678. },
  5679. meridiemParse: /[ap]\.t\.m/i,
  5680. isPM: function (input) {
  5681. return input.charAt(0).toLowerCase() === 'p';
  5682. },
  5683. meridiem: function (hours, minutes, isLower) {
  5684. if (hours > 11) {
  5685. return isLower ? 'p.t.m.' : 'P.T.M.';
  5686. } else {
  5687. return isLower ? 'a.t.m.' : 'A.T.M.';
  5688. }
  5689. },
  5690. calendar: {
  5691. sameDay: '[Hodiaŭ je] LT',
  5692. nextDay: '[Morgaŭ je] LT',
  5693. nextWeek: 'dddd[n je] LT',
  5694. lastDay: '[Hieraŭ je] LT',
  5695. lastWeek: '[pasintan] dddd[n je] LT',
  5696. sameElse: 'L',
  5697. },
  5698. relativeTime: {
  5699. future: 'post %s',
  5700. past: 'antaŭ %s',
  5701. s: 'kelkaj sekundoj',
  5702. ss: '%d sekundoj',
  5703. m: 'unu minuto',
  5704. mm: '%d minutoj',
  5705. h: 'unu horo',
  5706. hh: '%d horoj',
  5707. d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo
  5708. dd: '%d tagoj',
  5709. M: 'unu monato',
  5710. MM: '%d monatoj',
  5711. y: 'unu jaro',
  5712. yy: '%d jaroj',
  5713. },
  5714. dayOfMonthOrdinalParse: /\d{1,2}a/,
  5715. ordinal: '%da',
  5716. week: {
  5717. dow: 1, // Monday is the first day of the week.
  5718. doy: 7, // The week that contains Jan 7th is the first week of the year.
  5719. },
  5720. }));
  5721. /***/ }),
  5722. /***/ "./node_modules/moment/dist/locale/es-do.js":
  5723. /*!**************************************************!*\
  5724. !*** ./node_modules/moment/dist/locale/es-do.js ***!
  5725. \**************************************************/
  5726. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5727. "use strict";
  5728. __webpack_require__.r(__webpack_exports__);
  5729. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5730. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5731. /* harmony export */ });
  5732. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5733. //! moment.js locale configuration
  5734. //! locale : Spanish (Dominican Republic) [es-do]
  5735. var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
  5736. '_'
  5737. ),
  5738. monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
  5739. monthsParse = [
  5740. /^ene/i,
  5741. /^feb/i,
  5742. /^mar/i,
  5743. /^abr/i,
  5744. /^may/i,
  5745. /^jun/i,
  5746. /^jul/i,
  5747. /^ago/i,
  5748. /^sep/i,
  5749. /^oct/i,
  5750. /^nov/i,
  5751. /^dic/i,
  5752. ],
  5753. monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
  5754. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('es-do', {
  5755. months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
  5756. '_'
  5757. ),
  5758. monthsShort: function (m, format) {
  5759. if (!m) {
  5760. return monthsShortDot;
  5761. } else if (/-MMM-/.test(format)) {
  5762. return monthsShort[m.month()];
  5763. } else {
  5764. return monthsShortDot[m.month()];
  5765. }
  5766. },
  5767. monthsRegex: monthsRegex,
  5768. monthsShortRegex: monthsRegex,
  5769. monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
  5770. monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
  5771. monthsParse: monthsParse,
  5772. longMonthsParse: monthsParse,
  5773. shortMonthsParse: monthsParse,
  5774. weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
  5775. weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
  5776. weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
  5777. weekdaysParseExact: true,
  5778. longDateFormat: {
  5779. LT: 'h:mm A',
  5780. LTS: 'h:mm:ss A',
  5781. L: 'DD/MM/YYYY',
  5782. LL: 'D [de] MMMM [de] YYYY',
  5783. LLL: 'D [de] MMMM [de] YYYY h:mm A',
  5784. LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
  5785. },
  5786. calendar: {
  5787. sameDay: function () {
  5788. return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  5789. },
  5790. nextDay: function () {
  5791. return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  5792. },
  5793. nextWeek: function () {
  5794. return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  5795. },
  5796. lastDay: function () {
  5797. return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  5798. },
  5799. lastWeek: function () {
  5800. return (
  5801. '[el] dddd [pasado a la' +
  5802. (this.hours() !== 1 ? 's' : '') +
  5803. '] LT'
  5804. );
  5805. },
  5806. sameElse: 'L',
  5807. },
  5808. relativeTime: {
  5809. future: 'en %s',
  5810. past: 'hace %s',
  5811. s: 'unos segundos',
  5812. ss: '%d segundos',
  5813. m: 'un minuto',
  5814. mm: '%d minutos',
  5815. h: 'una hora',
  5816. hh: '%d horas',
  5817. d: 'un día',
  5818. dd: '%d días',
  5819. w: 'una semana',
  5820. ww: '%d semanas',
  5821. M: 'un mes',
  5822. MM: '%d meses',
  5823. y: 'un año',
  5824. yy: '%d años',
  5825. },
  5826. dayOfMonthOrdinalParse: /\d{1,2}º/,
  5827. ordinal: '%dº',
  5828. week: {
  5829. dow: 1, // Monday is the first day of the week.
  5830. doy: 4, // The week that contains Jan 4th is the first week of the year.
  5831. },
  5832. }));
  5833. /***/ }),
  5834. /***/ "./node_modules/moment/dist/locale/es-mx.js":
  5835. /*!**************************************************!*\
  5836. !*** ./node_modules/moment/dist/locale/es-mx.js ***!
  5837. \**************************************************/
  5838. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5839. "use strict";
  5840. __webpack_require__.r(__webpack_exports__);
  5841. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5842. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5843. /* harmony export */ });
  5844. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5845. //! moment.js locale configuration
  5846. //! locale : Spanish (Mexico) [es-mx]
  5847. //! author : JC Franco : https://github.com/jcfranco
  5848. var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
  5849. '_'
  5850. ),
  5851. monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
  5852. monthsParse = [
  5853. /^ene/i,
  5854. /^feb/i,
  5855. /^mar/i,
  5856. /^abr/i,
  5857. /^may/i,
  5858. /^jun/i,
  5859. /^jul/i,
  5860. /^ago/i,
  5861. /^sep/i,
  5862. /^oct/i,
  5863. /^nov/i,
  5864. /^dic/i,
  5865. ],
  5866. monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
  5867. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('es-mx', {
  5868. months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
  5869. '_'
  5870. ),
  5871. monthsShort: function (m, format) {
  5872. if (!m) {
  5873. return monthsShortDot;
  5874. } else if (/-MMM-/.test(format)) {
  5875. return monthsShort[m.month()];
  5876. } else {
  5877. return monthsShortDot[m.month()];
  5878. }
  5879. },
  5880. monthsRegex: monthsRegex,
  5881. monthsShortRegex: monthsRegex,
  5882. monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
  5883. monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
  5884. monthsParse: monthsParse,
  5885. longMonthsParse: monthsParse,
  5886. shortMonthsParse: monthsParse,
  5887. weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
  5888. weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
  5889. weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
  5890. weekdaysParseExact: true,
  5891. longDateFormat: {
  5892. LT: 'H:mm',
  5893. LTS: 'H:mm:ss',
  5894. L: 'DD/MM/YYYY',
  5895. LL: 'D [de] MMMM [de] YYYY',
  5896. LLL: 'D [de] MMMM [de] YYYY H:mm',
  5897. LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
  5898. },
  5899. calendar: {
  5900. sameDay: function () {
  5901. return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  5902. },
  5903. nextDay: function () {
  5904. return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  5905. },
  5906. nextWeek: function () {
  5907. return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  5908. },
  5909. lastDay: function () {
  5910. return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  5911. },
  5912. lastWeek: function () {
  5913. return (
  5914. '[el] dddd [pasado a la' +
  5915. (this.hours() !== 1 ? 's' : '') +
  5916. '] LT'
  5917. );
  5918. },
  5919. sameElse: 'L',
  5920. },
  5921. relativeTime: {
  5922. future: 'en %s',
  5923. past: 'hace %s',
  5924. s: 'unos segundos',
  5925. ss: '%d segundos',
  5926. m: 'un minuto',
  5927. mm: '%d minutos',
  5928. h: 'una hora',
  5929. hh: '%d horas',
  5930. d: 'un día',
  5931. dd: '%d días',
  5932. w: 'una semana',
  5933. ww: '%d semanas',
  5934. M: 'un mes',
  5935. MM: '%d meses',
  5936. y: 'un año',
  5937. yy: '%d años',
  5938. },
  5939. dayOfMonthOrdinalParse: /\d{1,2}º/,
  5940. ordinal: '%dº',
  5941. week: {
  5942. dow: 0, // Sunday is the first day of the week.
  5943. doy: 4, // The week that contains Jan 4th is the first week of the year.
  5944. },
  5945. invalidDate: 'Fecha inválida',
  5946. }));
  5947. /***/ }),
  5948. /***/ "./node_modules/moment/dist/locale/es-us.js":
  5949. /*!**************************************************!*\
  5950. !*** ./node_modules/moment/dist/locale/es-us.js ***!
  5951. \**************************************************/
  5952. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  5953. "use strict";
  5954. __webpack_require__.r(__webpack_exports__);
  5955. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  5956. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  5957. /* harmony export */ });
  5958. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  5959. //! moment.js locale configuration
  5960. //! locale : Spanish (United States) [es-us]
  5961. //! author : bustta : https://github.com/bustta
  5962. //! author : chrisrodz : https://github.com/chrisrodz
  5963. var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
  5964. '_'
  5965. ),
  5966. monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
  5967. monthsParse = [
  5968. /^ene/i,
  5969. /^feb/i,
  5970. /^mar/i,
  5971. /^abr/i,
  5972. /^may/i,
  5973. /^jun/i,
  5974. /^jul/i,
  5975. /^ago/i,
  5976. /^sep/i,
  5977. /^oct/i,
  5978. /^nov/i,
  5979. /^dic/i,
  5980. ],
  5981. monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
  5982. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('es-us', {
  5983. months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
  5984. '_'
  5985. ),
  5986. monthsShort: function (m, format) {
  5987. if (!m) {
  5988. return monthsShortDot;
  5989. } else if (/-MMM-/.test(format)) {
  5990. return monthsShort[m.month()];
  5991. } else {
  5992. return monthsShortDot[m.month()];
  5993. }
  5994. },
  5995. monthsRegex: monthsRegex,
  5996. monthsShortRegex: monthsRegex,
  5997. monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
  5998. monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
  5999. monthsParse: monthsParse,
  6000. longMonthsParse: monthsParse,
  6001. shortMonthsParse: monthsParse,
  6002. weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
  6003. weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
  6004. weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
  6005. weekdaysParseExact: true,
  6006. longDateFormat: {
  6007. LT: 'h:mm A',
  6008. LTS: 'h:mm:ss A',
  6009. L: 'MM/DD/YYYY',
  6010. LL: 'D [de] MMMM [de] YYYY',
  6011. LLL: 'D [de] MMMM [de] YYYY h:mm A',
  6012. LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',
  6013. },
  6014. calendar: {
  6015. sameDay: function () {
  6016. return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  6017. },
  6018. nextDay: function () {
  6019. return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  6020. },
  6021. nextWeek: function () {
  6022. return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  6023. },
  6024. lastDay: function () {
  6025. return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  6026. },
  6027. lastWeek: function () {
  6028. return (
  6029. '[el] dddd [pasado a la' +
  6030. (this.hours() !== 1 ? 's' : '') +
  6031. '] LT'
  6032. );
  6033. },
  6034. sameElse: 'L',
  6035. },
  6036. relativeTime: {
  6037. future: 'en %s',
  6038. past: 'hace %s',
  6039. s: 'unos segundos',
  6040. ss: '%d segundos',
  6041. m: 'un minuto',
  6042. mm: '%d minutos',
  6043. h: 'una hora',
  6044. hh: '%d horas',
  6045. d: 'un día',
  6046. dd: '%d días',
  6047. w: 'una semana',
  6048. ww: '%d semanas',
  6049. M: 'un mes',
  6050. MM: '%d meses',
  6051. y: 'un año',
  6052. yy: '%d años',
  6053. },
  6054. dayOfMonthOrdinalParse: /\d{1,2}º/,
  6055. ordinal: '%dº',
  6056. week: {
  6057. dow: 0, // Sunday is the first day of the week.
  6058. doy: 6, // The week that contains Jan 6th is the first week of the year.
  6059. },
  6060. }));
  6061. /***/ }),
  6062. /***/ "./node_modules/moment/dist/locale/es.js":
  6063. /*!***********************************************!*\
  6064. !*** ./node_modules/moment/dist/locale/es.js ***!
  6065. \***********************************************/
  6066. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6067. "use strict";
  6068. __webpack_require__.r(__webpack_exports__);
  6069. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  6070. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  6071. /* harmony export */ });
  6072. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  6073. //! moment.js locale configuration
  6074. //! locale : Spanish [es]
  6075. //! author : Julio Napurí : https://github.com/julionc
  6076. var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(
  6077. '_'
  6078. ),
  6079. monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),
  6080. monthsParse = [
  6081. /^ene/i,
  6082. /^feb/i,
  6083. /^mar/i,
  6084. /^abr/i,
  6085. /^may/i,
  6086. /^jun/i,
  6087. /^jul/i,
  6088. /^ago/i,
  6089. /^sep/i,
  6090. /^oct/i,
  6091. /^nov/i,
  6092. /^dic/i,
  6093. ],
  6094. monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i;
  6095. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('es', {
  6096. months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(
  6097. '_'
  6098. ),
  6099. monthsShort: function (m, format) {
  6100. if (!m) {
  6101. return monthsShortDot;
  6102. } else if (/-MMM-/.test(format)) {
  6103. return monthsShort[m.month()];
  6104. } else {
  6105. return monthsShortDot[m.month()];
  6106. }
  6107. },
  6108. monthsRegex: monthsRegex,
  6109. monthsShortRegex: monthsRegex,
  6110. monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,
  6111. monthsShortStrictRegex: /^(ene\.?|feb\.?|mar\.?|abr\.?|may\.?|jun\.?|jul\.?|ago\.?|sep\.?|oct\.?|nov\.?|dic\.?)/i,
  6112. monthsParse: monthsParse,
  6113. longMonthsParse: monthsParse,
  6114. shortMonthsParse: monthsParse,
  6115. weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),
  6116. weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),
  6117. weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),
  6118. weekdaysParseExact: true,
  6119. longDateFormat: {
  6120. LT: 'H:mm',
  6121. LTS: 'H:mm:ss',
  6122. L: 'DD/MM/YYYY',
  6123. LL: 'D [de] MMMM [de] YYYY',
  6124. LLL: 'D [de] MMMM [de] YYYY H:mm',
  6125. LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
  6126. },
  6127. calendar: {
  6128. sameDay: function () {
  6129. return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  6130. },
  6131. nextDay: function () {
  6132. return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  6133. },
  6134. nextWeek: function () {
  6135. return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  6136. },
  6137. lastDay: function () {
  6138. return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';
  6139. },
  6140. lastWeek: function () {
  6141. return (
  6142. '[el] dddd [pasado a la' +
  6143. (this.hours() !== 1 ? 's' : '') +
  6144. '] LT'
  6145. );
  6146. },
  6147. sameElse: 'L',
  6148. },
  6149. relativeTime: {
  6150. future: 'en %s',
  6151. past: 'hace %s',
  6152. s: 'unos segundos',
  6153. ss: '%d segundos',
  6154. m: 'un minuto',
  6155. mm: '%d minutos',
  6156. h: 'una hora',
  6157. hh: '%d horas',
  6158. d: 'un día',
  6159. dd: '%d días',
  6160. w: 'una semana',
  6161. ww: '%d semanas',
  6162. M: 'un mes',
  6163. MM: '%d meses',
  6164. y: 'un año',
  6165. yy: '%d años',
  6166. },
  6167. dayOfMonthOrdinalParse: /\d{1,2}º/,
  6168. ordinal: '%dº',
  6169. week: {
  6170. dow: 1, // Monday is the first day of the week.
  6171. doy: 4, // The week that contains Jan 4th is the first week of the year.
  6172. },
  6173. invalidDate: 'Fecha inválida',
  6174. }));
  6175. /***/ }),
  6176. /***/ "./node_modules/moment/dist/locale/et.js":
  6177. /*!***********************************************!*\
  6178. !*** ./node_modules/moment/dist/locale/et.js ***!
  6179. \***********************************************/
  6180. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6181. "use strict";
  6182. __webpack_require__.r(__webpack_exports__);
  6183. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  6184. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  6185. /* harmony export */ });
  6186. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  6187. //! moment.js locale configuration
  6188. //! locale : Estonian [et]
  6189. //! author : Henry Kehlmann : https://github.com/madhenry
  6190. //! improvements : Illimar Tambek : https://github.com/ragulka
  6191. function processRelativeTime(number, withoutSuffix, key, isFuture) {
  6192. var format = {
  6193. s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],
  6194. ss: [number + 'sekundi', number + 'sekundit'],
  6195. m: ['ühe minuti', 'üks minut'],
  6196. mm: [number + ' minuti', number + ' minutit'],
  6197. h: ['ühe tunni', 'tund aega', 'üks tund'],
  6198. hh: [number + ' tunni', number + ' tundi'],
  6199. d: ['ühe päeva', 'üks päev'],
  6200. M: ['kuu aja', 'kuu aega', 'üks kuu'],
  6201. MM: [number + ' kuu', number + ' kuud'],
  6202. y: ['ühe aasta', 'aasta', 'üks aasta'],
  6203. yy: [number + ' aasta', number + ' aastat'],
  6204. };
  6205. if (withoutSuffix) {
  6206. return format[key][2] ? format[key][2] : format[key][1];
  6207. }
  6208. return isFuture ? format[key][0] : format[key][1];
  6209. }
  6210. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('et', {
  6211. months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(
  6212. '_'
  6213. ),
  6214. monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split(
  6215. '_'
  6216. ),
  6217. weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(
  6218. '_'
  6219. ),
  6220. weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),
  6221. weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),
  6222. longDateFormat: {
  6223. LT: 'H:mm',
  6224. LTS: 'H:mm:ss',
  6225. L: 'DD.MM.YYYY',
  6226. LL: 'D. MMMM YYYY',
  6227. LLL: 'D. MMMM YYYY H:mm',
  6228. LLLL: 'dddd, D. MMMM YYYY H:mm',
  6229. },
  6230. calendar: {
  6231. sameDay: '[Täna,] LT',
  6232. nextDay: '[Homme,] LT',
  6233. nextWeek: '[Järgmine] dddd LT',
  6234. lastDay: '[Eile,] LT',
  6235. lastWeek: '[Eelmine] dddd LT',
  6236. sameElse: 'L',
  6237. },
  6238. relativeTime: {
  6239. future: '%s pärast',
  6240. past: '%s tagasi',
  6241. s: processRelativeTime,
  6242. ss: processRelativeTime,
  6243. m: processRelativeTime,
  6244. mm: processRelativeTime,
  6245. h: processRelativeTime,
  6246. hh: processRelativeTime,
  6247. d: processRelativeTime,
  6248. dd: '%d päeva',
  6249. M: processRelativeTime,
  6250. MM: processRelativeTime,
  6251. y: processRelativeTime,
  6252. yy: processRelativeTime,
  6253. },
  6254. dayOfMonthOrdinalParse: /\d{1,2}\./,
  6255. ordinal: '%d.',
  6256. week: {
  6257. dow: 1, // Monday is the first day of the week.
  6258. doy: 4, // The week that contains Jan 4th is the first week of the year.
  6259. },
  6260. }));
  6261. /***/ }),
  6262. /***/ "./node_modules/moment/dist/locale/eu.js":
  6263. /*!***********************************************!*\
  6264. !*** ./node_modules/moment/dist/locale/eu.js ***!
  6265. \***********************************************/
  6266. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6267. "use strict";
  6268. __webpack_require__.r(__webpack_exports__);
  6269. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  6270. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  6271. /* harmony export */ });
  6272. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  6273. //! moment.js locale configuration
  6274. //! locale : Basque [eu]
  6275. //! author : Eneko Illarramendi : https://github.com/eillarra
  6276. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('eu', {
  6277. months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(
  6278. '_'
  6279. ),
  6280. monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(
  6281. '_'
  6282. ),
  6283. monthsParseExact: true,
  6284. weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(
  6285. '_'
  6286. ),
  6287. weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),
  6288. weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),
  6289. weekdaysParseExact: true,
  6290. longDateFormat: {
  6291. LT: 'HH:mm',
  6292. LTS: 'HH:mm:ss',
  6293. L: 'YYYY-MM-DD',
  6294. LL: 'YYYY[ko] MMMM[ren] D[a]',
  6295. LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',
  6296. LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',
  6297. l: 'YYYY-M-D',
  6298. ll: 'YYYY[ko] MMM D[a]',
  6299. lll: 'YYYY[ko] MMM D[a] HH:mm',
  6300. llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',
  6301. },
  6302. calendar: {
  6303. sameDay: '[gaur] LT[etan]',
  6304. nextDay: '[bihar] LT[etan]',
  6305. nextWeek: 'dddd LT[etan]',
  6306. lastDay: '[atzo] LT[etan]',
  6307. lastWeek: '[aurreko] dddd LT[etan]',
  6308. sameElse: 'L',
  6309. },
  6310. relativeTime: {
  6311. future: '%s barru',
  6312. past: 'duela %s',
  6313. s: 'segundo batzuk',
  6314. ss: '%d segundo',
  6315. m: 'minutu bat',
  6316. mm: '%d minutu',
  6317. h: 'ordu bat',
  6318. hh: '%d ordu',
  6319. d: 'egun bat',
  6320. dd: '%d egun',
  6321. M: 'hilabete bat',
  6322. MM: '%d hilabete',
  6323. y: 'urte bat',
  6324. yy: '%d urte',
  6325. },
  6326. dayOfMonthOrdinalParse: /\d{1,2}\./,
  6327. ordinal: '%d.',
  6328. week: {
  6329. dow: 1, // Monday is the first day of the week.
  6330. doy: 7, // The week that contains Jan 7th is the first week of the year.
  6331. },
  6332. }));
  6333. /***/ }),
  6334. /***/ "./node_modules/moment/dist/locale/fa.js":
  6335. /*!***********************************************!*\
  6336. !*** ./node_modules/moment/dist/locale/fa.js ***!
  6337. \***********************************************/
  6338. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6339. "use strict";
  6340. __webpack_require__.r(__webpack_exports__);
  6341. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  6342. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  6343. /* harmony export */ });
  6344. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  6345. //! moment.js locale configuration
  6346. //! locale : Persian [fa]
  6347. //! author : Ebrahim Byagowi : https://github.com/ebraminio
  6348. var symbolMap = {
  6349. 1: '۱',
  6350. 2: '۲',
  6351. 3: '۳',
  6352. 4: '۴',
  6353. 5: '۵',
  6354. 6: '۶',
  6355. 7: '۷',
  6356. 8: '۸',
  6357. 9: '۹',
  6358. 0: '۰',
  6359. },
  6360. numberMap = {
  6361. '۱': '1',
  6362. '۲': '2',
  6363. '۳': '3',
  6364. '۴': '4',
  6365. '۵': '5',
  6366. '۶': '6',
  6367. '۷': '7',
  6368. '۸': '8',
  6369. '۹': '9',
  6370. '۰': '0',
  6371. };
  6372. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('fa', {
  6373. months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
  6374. '_'
  6375. ),
  6376. monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(
  6377. '_'
  6378. ),
  6379. weekdays: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
  6380. '_'
  6381. ),
  6382. weekdaysShort: 'یک\u200cشنبه_دوشنبه_سه\u200cشنبه_چهارشنبه_پنج\u200cشنبه_جمعه_شنبه'.split(
  6383. '_'
  6384. ),
  6385. weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),
  6386. weekdaysParseExact: true,
  6387. longDateFormat: {
  6388. LT: 'HH:mm',
  6389. LTS: 'HH:mm:ss',
  6390. L: 'DD/MM/YYYY',
  6391. LL: 'D MMMM YYYY',
  6392. LLL: 'D MMMM YYYY HH:mm',
  6393. LLLL: 'dddd, D MMMM YYYY HH:mm',
  6394. },
  6395. meridiemParse: /قبل از ظهر|بعد از ظهر/,
  6396. isPM: function (input) {
  6397. return /بعد از ظهر/.test(input);
  6398. },
  6399. meridiem: function (hour, minute, isLower) {
  6400. if (hour < 12) {
  6401. return 'قبل از ظهر';
  6402. } else {
  6403. return 'بعد از ظهر';
  6404. }
  6405. },
  6406. calendar: {
  6407. sameDay: '[امروز ساعت] LT',
  6408. nextDay: '[فردا ساعت] LT',
  6409. nextWeek: 'dddd [ساعت] LT',
  6410. lastDay: '[دیروز ساعت] LT',
  6411. lastWeek: 'dddd [پیش] [ساعت] LT',
  6412. sameElse: 'L',
  6413. },
  6414. relativeTime: {
  6415. future: 'در %s',
  6416. past: '%s پیش',
  6417. s: 'چند ثانیه',
  6418. ss: '%d ثانیه',
  6419. m: 'یک دقیقه',
  6420. mm: '%d دقیقه',
  6421. h: 'یک ساعت',
  6422. hh: '%d ساعت',
  6423. d: 'یک روز',
  6424. dd: '%d روز',
  6425. M: 'یک ماه',
  6426. MM: '%d ماه',
  6427. y: 'یک سال',
  6428. yy: '%d سال',
  6429. },
  6430. preparse: function (string) {
  6431. return string
  6432. .replace(/[۰-۹]/g, function (match) {
  6433. return numberMap[match];
  6434. })
  6435. .replace(/،/g, ',');
  6436. },
  6437. postformat: function (string) {
  6438. return string
  6439. .replace(/\d/g, function (match) {
  6440. return symbolMap[match];
  6441. })
  6442. .replace(/,/g, '،');
  6443. },
  6444. dayOfMonthOrdinalParse: /\d{1,2}م/,
  6445. ordinal: '%dم',
  6446. week: {
  6447. dow: 6, // Saturday is the first day of the week.
  6448. doy: 12, // The week that contains Jan 12th is the first week of the year.
  6449. },
  6450. }));
  6451. /***/ }),
  6452. /***/ "./node_modules/moment/dist/locale/fi.js":
  6453. /*!***********************************************!*\
  6454. !*** ./node_modules/moment/dist/locale/fi.js ***!
  6455. \***********************************************/
  6456. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6457. "use strict";
  6458. __webpack_require__.r(__webpack_exports__);
  6459. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  6460. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  6461. /* harmony export */ });
  6462. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  6463. //! moment.js locale configuration
  6464. //! locale : Finnish [fi]
  6465. //! author : Tarmo Aidantausta : https://github.com/bleadof
  6466. var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(
  6467. ' '
  6468. ),
  6469. numbersFuture = [
  6470. 'nolla',
  6471. 'yhden',
  6472. 'kahden',
  6473. 'kolmen',
  6474. 'neljän',
  6475. 'viiden',
  6476. 'kuuden',
  6477. numbersPast[7],
  6478. numbersPast[8],
  6479. numbersPast[9],
  6480. ];
  6481. function translate(number, withoutSuffix, key, isFuture) {
  6482. var result = '';
  6483. switch (key) {
  6484. case 's':
  6485. return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
  6486. case 'ss':
  6487. result = isFuture ? 'sekunnin' : 'sekuntia';
  6488. break;
  6489. case 'm':
  6490. return isFuture ? 'minuutin' : 'minuutti';
  6491. case 'mm':
  6492. result = isFuture ? 'minuutin' : 'minuuttia';
  6493. break;
  6494. case 'h':
  6495. return isFuture ? 'tunnin' : 'tunti';
  6496. case 'hh':
  6497. result = isFuture ? 'tunnin' : 'tuntia';
  6498. break;
  6499. case 'd':
  6500. return isFuture ? 'päivän' : 'päivä';
  6501. case 'dd':
  6502. result = isFuture ? 'päivän' : 'päivää';
  6503. break;
  6504. case 'M':
  6505. return isFuture ? 'kuukauden' : 'kuukausi';
  6506. case 'MM':
  6507. result = isFuture ? 'kuukauden' : 'kuukautta';
  6508. break;
  6509. case 'y':
  6510. return isFuture ? 'vuoden' : 'vuosi';
  6511. case 'yy':
  6512. result = isFuture ? 'vuoden' : 'vuotta';
  6513. break;
  6514. }
  6515. result = verbalNumber(number, isFuture) + ' ' + result;
  6516. return result;
  6517. }
  6518. function verbalNumber(number, isFuture) {
  6519. return number < 10
  6520. ? isFuture
  6521. ? numbersFuture[number]
  6522. : numbersPast[number]
  6523. : number;
  6524. }
  6525. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('fi', {
  6526. months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(
  6527. '_'
  6528. ),
  6529. monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(
  6530. '_'
  6531. ),
  6532. weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(
  6533. '_'
  6534. ),
  6535. weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),
  6536. weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),
  6537. longDateFormat: {
  6538. LT: 'HH.mm',
  6539. LTS: 'HH.mm.ss',
  6540. L: 'DD.MM.YYYY',
  6541. LL: 'Do MMMM[ta] YYYY',
  6542. LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',
  6543. LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
  6544. l: 'D.M.YYYY',
  6545. ll: 'Do MMM YYYY',
  6546. lll: 'Do MMM YYYY, [klo] HH.mm',
  6547. llll: 'ddd, Do MMM YYYY, [klo] HH.mm',
  6548. },
  6549. calendar: {
  6550. sameDay: '[tänään] [klo] LT',
  6551. nextDay: '[huomenna] [klo] LT',
  6552. nextWeek: 'dddd [klo] LT',
  6553. lastDay: '[eilen] [klo] LT',
  6554. lastWeek: '[viime] dddd[na] [klo] LT',
  6555. sameElse: 'L',
  6556. },
  6557. relativeTime: {
  6558. future: '%s päästä',
  6559. past: '%s sitten',
  6560. s: translate,
  6561. ss: translate,
  6562. m: translate,
  6563. mm: translate,
  6564. h: translate,
  6565. hh: translate,
  6566. d: translate,
  6567. dd: translate,
  6568. M: translate,
  6569. MM: translate,
  6570. y: translate,
  6571. yy: translate,
  6572. },
  6573. dayOfMonthOrdinalParse: /\d{1,2}\./,
  6574. ordinal: '%d.',
  6575. week: {
  6576. dow: 1, // Monday is the first day of the week.
  6577. doy: 4, // The week that contains Jan 4th is the first week of the year.
  6578. },
  6579. }));
  6580. /***/ }),
  6581. /***/ "./node_modules/moment/dist/locale/fil.js":
  6582. /*!************************************************!*\
  6583. !*** ./node_modules/moment/dist/locale/fil.js ***!
  6584. \************************************************/
  6585. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6586. "use strict";
  6587. __webpack_require__.r(__webpack_exports__);
  6588. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  6589. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  6590. /* harmony export */ });
  6591. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  6592. //! moment.js locale configuration
  6593. //! locale : Filipino [fil]
  6594. //! author : Dan Hagman : https://github.com/hagmandan
  6595. //! author : Matthew Co : https://github.com/matthewdeeco
  6596. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('fil', {
  6597. months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
  6598. '_'
  6599. ),
  6600. monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
  6601. weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
  6602. '_'
  6603. ),
  6604. weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
  6605. weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
  6606. longDateFormat: {
  6607. LT: 'HH:mm',
  6608. LTS: 'HH:mm:ss',
  6609. L: 'MM/D/YYYY',
  6610. LL: 'MMMM D, YYYY',
  6611. LLL: 'MMMM D, YYYY HH:mm',
  6612. LLLL: 'dddd, MMMM DD, YYYY HH:mm',
  6613. },
  6614. calendar: {
  6615. sameDay: 'LT [ngayong araw]',
  6616. nextDay: '[Bukas ng] LT',
  6617. nextWeek: 'LT [sa susunod na] dddd',
  6618. lastDay: 'LT [kahapon]',
  6619. lastWeek: 'LT [noong nakaraang] dddd',
  6620. sameElse: 'L',
  6621. },
  6622. relativeTime: {
  6623. future: 'sa loob ng %s',
  6624. past: '%s ang nakalipas',
  6625. s: 'ilang segundo',
  6626. ss: '%d segundo',
  6627. m: 'isang minuto',
  6628. mm: '%d minuto',
  6629. h: 'isang oras',
  6630. hh: '%d oras',
  6631. d: 'isang araw',
  6632. dd: '%d araw',
  6633. M: 'isang buwan',
  6634. MM: '%d buwan',
  6635. y: 'isang taon',
  6636. yy: '%d taon',
  6637. },
  6638. dayOfMonthOrdinalParse: /\d{1,2}/,
  6639. ordinal: function (number) {
  6640. return number;
  6641. },
  6642. week: {
  6643. dow: 1, // Monday is the first day of the week.
  6644. doy: 4, // The week that contains Jan 4th is the first week of the year.
  6645. },
  6646. }));
  6647. /***/ }),
  6648. /***/ "./node_modules/moment/dist/locale/fo.js":
  6649. /*!***********************************************!*\
  6650. !*** ./node_modules/moment/dist/locale/fo.js ***!
  6651. \***********************************************/
  6652. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6653. "use strict";
  6654. __webpack_require__.r(__webpack_exports__);
  6655. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  6656. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  6657. /* harmony export */ });
  6658. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  6659. //! moment.js locale configuration
  6660. //! locale : Faroese [fo]
  6661. //! author : Ragnar Johannesen : https://github.com/ragnar123
  6662. //! author : Kristian Sakarisson : https://github.com/sakarisson
  6663. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('fo', {
  6664. months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(
  6665. '_'
  6666. ),
  6667. monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
  6668. weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(
  6669. '_'
  6670. ),
  6671. weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),
  6672. weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),
  6673. longDateFormat: {
  6674. LT: 'HH:mm',
  6675. LTS: 'HH:mm:ss',
  6676. L: 'DD/MM/YYYY',
  6677. LL: 'D MMMM YYYY',
  6678. LLL: 'D MMMM YYYY HH:mm',
  6679. LLLL: 'dddd D. MMMM, YYYY HH:mm',
  6680. },
  6681. calendar: {
  6682. sameDay: '[Í dag kl.] LT',
  6683. nextDay: '[Í morgin kl.] LT',
  6684. nextWeek: 'dddd [kl.] LT',
  6685. lastDay: '[Í gjár kl.] LT',
  6686. lastWeek: '[síðstu] dddd [kl] LT',
  6687. sameElse: 'L',
  6688. },
  6689. relativeTime: {
  6690. future: 'um %s',
  6691. past: '%s síðani',
  6692. s: 'fá sekund',
  6693. ss: '%d sekundir',
  6694. m: 'ein minuttur',
  6695. mm: '%d minuttir',
  6696. h: 'ein tími',
  6697. hh: '%d tímar',
  6698. d: 'ein dagur',
  6699. dd: '%d dagar',
  6700. M: 'ein mánaður',
  6701. MM: '%d mánaðir',
  6702. y: 'eitt ár',
  6703. yy: '%d ár',
  6704. },
  6705. dayOfMonthOrdinalParse: /\d{1,2}\./,
  6706. ordinal: '%d.',
  6707. week: {
  6708. dow: 1, // Monday is the first day of the week.
  6709. doy: 4, // The week that contains Jan 4th is the first week of the year.
  6710. },
  6711. }));
  6712. /***/ }),
  6713. /***/ "./node_modules/moment/dist/locale/fr-ca.js":
  6714. /*!**************************************************!*\
  6715. !*** ./node_modules/moment/dist/locale/fr-ca.js ***!
  6716. \**************************************************/
  6717. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6718. "use strict";
  6719. __webpack_require__.r(__webpack_exports__);
  6720. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  6721. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  6722. /* harmony export */ });
  6723. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  6724. //! moment.js locale configuration
  6725. //! locale : French (Canada) [fr-ca]
  6726. //! author : Jonathan Abourbih : https://github.com/jonbca
  6727. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('fr-ca', {
  6728. months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
  6729. '_'
  6730. ),
  6731. monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
  6732. '_'
  6733. ),
  6734. monthsParseExact: true,
  6735. weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
  6736. weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
  6737. weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
  6738. weekdaysParseExact: true,
  6739. longDateFormat: {
  6740. LT: 'HH:mm',
  6741. LTS: 'HH:mm:ss',
  6742. L: 'YYYY-MM-DD',
  6743. LL: 'D MMMM YYYY',
  6744. LLL: 'D MMMM YYYY HH:mm',
  6745. LLLL: 'dddd D MMMM YYYY HH:mm',
  6746. },
  6747. calendar: {
  6748. sameDay: '[Aujourd’hui à] LT',
  6749. nextDay: '[Demain à] LT',
  6750. nextWeek: 'dddd [à] LT',
  6751. lastDay: '[Hier à] LT',
  6752. lastWeek: 'dddd [dernier à] LT',
  6753. sameElse: 'L',
  6754. },
  6755. relativeTime: {
  6756. future: 'dans %s',
  6757. past: 'il y a %s',
  6758. s: 'quelques secondes',
  6759. ss: '%d secondes',
  6760. m: 'une minute',
  6761. mm: '%d minutes',
  6762. h: 'une heure',
  6763. hh: '%d heures',
  6764. d: 'un jour',
  6765. dd: '%d jours',
  6766. M: 'un mois',
  6767. MM: '%d mois',
  6768. y: 'un an',
  6769. yy: '%d ans',
  6770. },
  6771. dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
  6772. ordinal: function (number, period) {
  6773. switch (period) {
  6774. // Words with masculine grammatical gender: mois, trimestre, jour
  6775. default:
  6776. case 'M':
  6777. case 'Q':
  6778. case 'D':
  6779. case 'DDD':
  6780. case 'd':
  6781. return number + (number === 1 ? 'er' : 'e');
  6782. // Words with feminine grammatical gender: semaine
  6783. case 'w':
  6784. case 'W':
  6785. return number + (number === 1 ? 're' : 'e');
  6786. }
  6787. },
  6788. }));
  6789. /***/ }),
  6790. /***/ "./node_modules/moment/dist/locale/fr-ch.js":
  6791. /*!**************************************************!*\
  6792. !*** ./node_modules/moment/dist/locale/fr-ch.js ***!
  6793. \**************************************************/
  6794. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6795. "use strict";
  6796. __webpack_require__.r(__webpack_exports__);
  6797. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  6798. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  6799. /* harmony export */ });
  6800. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  6801. //! moment.js locale configuration
  6802. //! locale : French (Switzerland) [fr-ch]
  6803. //! author : Gaspard Bucher : https://github.com/gaspard
  6804. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('fr-ch', {
  6805. months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
  6806. '_'
  6807. ),
  6808. monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
  6809. '_'
  6810. ),
  6811. monthsParseExact: true,
  6812. weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
  6813. weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
  6814. weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
  6815. weekdaysParseExact: true,
  6816. longDateFormat: {
  6817. LT: 'HH:mm',
  6818. LTS: 'HH:mm:ss',
  6819. L: 'DD.MM.YYYY',
  6820. LL: 'D MMMM YYYY',
  6821. LLL: 'D MMMM YYYY HH:mm',
  6822. LLLL: 'dddd D MMMM YYYY HH:mm',
  6823. },
  6824. calendar: {
  6825. sameDay: '[Aujourd’hui à] LT',
  6826. nextDay: '[Demain à] LT',
  6827. nextWeek: 'dddd [à] LT',
  6828. lastDay: '[Hier à] LT',
  6829. lastWeek: 'dddd [dernier à] LT',
  6830. sameElse: 'L',
  6831. },
  6832. relativeTime: {
  6833. future: 'dans %s',
  6834. past: 'il y a %s',
  6835. s: 'quelques secondes',
  6836. ss: '%d secondes',
  6837. m: 'une minute',
  6838. mm: '%d minutes',
  6839. h: 'une heure',
  6840. hh: '%d heures',
  6841. d: 'un jour',
  6842. dd: '%d jours',
  6843. M: 'un mois',
  6844. MM: '%d mois',
  6845. y: 'un an',
  6846. yy: '%d ans',
  6847. },
  6848. dayOfMonthOrdinalParse: /\d{1,2}(er|e)/,
  6849. ordinal: function (number, period) {
  6850. switch (period) {
  6851. // Words with masculine grammatical gender: mois, trimestre, jour
  6852. default:
  6853. case 'M':
  6854. case 'Q':
  6855. case 'D':
  6856. case 'DDD':
  6857. case 'd':
  6858. return number + (number === 1 ? 'er' : 'e');
  6859. // Words with feminine grammatical gender: semaine
  6860. case 'w':
  6861. case 'W':
  6862. return number + (number === 1 ? 're' : 'e');
  6863. }
  6864. },
  6865. week: {
  6866. dow: 1, // Monday is the first day of the week.
  6867. doy: 4, // The week that contains Jan 4th is the first week of the year.
  6868. },
  6869. }));
  6870. /***/ }),
  6871. /***/ "./node_modules/moment/dist/locale/fr.js":
  6872. /*!***********************************************!*\
  6873. !*** ./node_modules/moment/dist/locale/fr.js ***!
  6874. \***********************************************/
  6875. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6876. "use strict";
  6877. __webpack_require__.r(__webpack_exports__);
  6878. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  6879. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  6880. /* harmony export */ });
  6881. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  6882. //! moment.js locale configuration
  6883. //! locale : French [fr]
  6884. //! author : John Fischer : https://github.com/jfroffice
  6885. var monthsStrictRegex = /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
  6886. monthsShortStrictRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?)/i,
  6887. monthsRegex = /(janv\.?|févr\.?|mars|avr\.?|mai|juin|juil\.?|août|sept\.?|oct\.?|nov\.?|déc\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,
  6888. monthsParse = [
  6889. /^janv/i,
  6890. /^févr/i,
  6891. /^mars/i,
  6892. /^avr/i,
  6893. /^mai/i,
  6894. /^juin/i,
  6895. /^juil/i,
  6896. /^août/i,
  6897. /^sept/i,
  6898. /^oct/i,
  6899. /^nov/i,
  6900. /^déc/i,
  6901. ];
  6902. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('fr', {
  6903. months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(
  6904. '_'
  6905. ),
  6906. monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(
  6907. '_'
  6908. ),
  6909. monthsRegex: monthsRegex,
  6910. monthsShortRegex: monthsRegex,
  6911. monthsStrictRegex: monthsStrictRegex,
  6912. monthsShortStrictRegex: monthsShortStrictRegex,
  6913. monthsParse: monthsParse,
  6914. longMonthsParse: monthsParse,
  6915. shortMonthsParse: monthsParse,
  6916. weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
  6917. weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
  6918. weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),
  6919. weekdaysParseExact: true,
  6920. longDateFormat: {
  6921. LT: 'HH:mm',
  6922. LTS: 'HH:mm:ss',
  6923. L: 'DD/MM/YYYY',
  6924. LL: 'D MMMM YYYY',
  6925. LLL: 'D MMMM YYYY HH:mm',
  6926. LLLL: 'dddd D MMMM YYYY HH:mm',
  6927. },
  6928. calendar: {
  6929. sameDay: '[Aujourd’hui à] LT',
  6930. nextDay: '[Demain à] LT',
  6931. nextWeek: 'dddd [à] LT',
  6932. lastDay: '[Hier à] LT',
  6933. lastWeek: 'dddd [dernier à] LT',
  6934. sameElse: 'L',
  6935. },
  6936. relativeTime: {
  6937. future: 'dans %s',
  6938. past: 'il y a %s',
  6939. s: 'quelques secondes',
  6940. ss: '%d secondes',
  6941. m: 'une minute',
  6942. mm: '%d minutes',
  6943. h: 'une heure',
  6944. hh: '%d heures',
  6945. d: 'un jour',
  6946. dd: '%d jours',
  6947. w: 'une semaine',
  6948. ww: '%d semaines',
  6949. M: 'un mois',
  6950. MM: '%d mois',
  6951. y: 'un an',
  6952. yy: '%d ans',
  6953. },
  6954. dayOfMonthOrdinalParse: /\d{1,2}(er|)/,
  6955. ordinal: function (number, period) {
  6956. switch (period) {
  6957. // TODO: Return 'e' when day of month > 1. Move this case inside
  6958. // block for masculine words below.
  6959. // See https://github.com/moment/moment/issues/3375
  6960. case 'D':
  6961. return number + (number === 1 ? 'er' : '');
  6962. // Words with masculine grammatical gender: mois, trimestre, jour
  6963. default:
  6964. case 'M':
  6965. case 'Q':
  6966. case 'DDD':
  6967. case 'd':
  6968. return number + (number === 1 ? 'er' : 'e');
  6969. // Words with feminine grammatical gender: semaine
  6970. case 'w':
  6971. case 'W':
  6972. return number + (number === 1 ? 're' : 'e');
  6973. }
  6974. },
  6975. week: {
  6976. dow: 1, // Monday is the first day of the week.
  6977. doy: 4, // The week that contains Jan 4th is the first week of the year.
  6978. },
  6979. }));
  6980. /***/ }),
  6981. /***/ "./node_modules/moment/dist/locale/fy.js":
  6982. /*!***********************************************!*\
  6983. !*** ./node_modules/moment/dist/locale/fy.js ***!
  6984. \***********************************************/
  6985. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  6986. "use strict";
  6987. __webpack_require__.r(__webpack_exports__);
  6988. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  6989. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  6990. /* harmony export */ });
  6991. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  6992. //! moment.js locale configuration
  6993. //! locale : Frisian [fy]
  6994. //! author : Robin van der Vliet : https://github.com/robin0van0der0v
  6995. var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split(
  6996. '_'
  6997. ),
  6998. monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split(
  6999. '_'
  7000. );
  7001. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('fy', {
  7002. months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(
  7003. '_'
  7004. ),
  7005. monthsShort: function (m, format) {
  7006. if (!m) {
  7007. return monthsShortWithDots;
  7008. } else if (/-MMM-/.test(format)) {
  7009. return monthsShortWithoutDots[m.month()];
  7010. } else {
  7011. return monthsShortWithDots[m.month()];
  7012. }
  7013. },
  7014. monthsParseExact: true,
  7015. weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(
  7016. '_'
  7017. ),
  7018. weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),
  7019. weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),
  7020. weekdaysParseExact: true,
  7021. longDateFormat: {
  7022. LT: 'HH:mm',
  7023. LTS: 'HH:mm:ss',
  7024. L: 'DD-MM-YYYY',
  7025. LL: 'D MMMM YYYY',
  7026. LLL: 'D MMMM YYYY HH:mm',
  7027. LLLL: 'dddd D MMMM YYYY HH:mm',
  7028. },
  7029. calendar: {
  7030. sameDay: '[hjoed om] LT',
  7031. nextDay: '[moarn om] LT',
  7032. nextWeek: 'dddd [om] LT',
  7033. lastDay: '[juster om] LT',
  7034. lastWeek: '[ôfrûne] dddd [om] LT',
  7035. sameElse: 'L',
  7036. },
  7037. relativeTime: {
  7038. future: 'oer %s',
  7039. past: '%s lyn',
  7040. s: 'in pear sekonden',
  7041. ss: '%d sekonden',
  7042. m: 'ien minút',
  7043. mm: '%d minuten',
  7044. h: 'ien oere',
  7045. hh: '%d oeren',
  7046. d: 'ien dei',
  7047. dd: '%d dagen',
  7048. M: 'ien moanne',
  7049. MM: '%d moannen',
  7050. y: 'ien jier',
  7051. yy: '%d jierren',
  7052. },
  7053. dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
  7054. ordinal: function (number) {
  7055. return (
  7056. number +
  7057. (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
  7058. );
  7059. },
  7060. week: {
  7061. dow: 1, // Monday is the first day of the week.
  7062. doy: 4, // The week that contains Jan 4th is the first week of the year.
  7063. },
  7064. }));
  7065. /***/ }),
  7066. /***/ "./node_modules/moment/dist/locale/ga.js":
  7067. /*!***********************************************!*\
  7068. !*** ./node_modules/moment/dist/locale/ga.js ***!
  7069. \***********************************************/
  7070. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7071. "use strict";
  7072. __webpack_require__.r(__webpack_exports__);
  7073. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  7074. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  7075. /* harmony export */ });
  7076. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  7077. //! moment.js locale configuration
  7078. //! locale : Irish or Irish Gaelic [ga]
  7079. //! author : André Silva : https://github.com/askpt
  7080. var months = [
  7081. 'Eanáir',
  7082. 'Feabhra',
  7083. 'Márta',
  7084. 'Aibreán',
  7085. 'Bealtaine',
  7086. 'Meitheamh',
  7087. 'Iúil',
  7088. 'Lúnasa',
  7089. 'Meán Fómhair',
  7090. 'Deireadh Fómhair',
  7091. 'Samhain',
  7092. 'Nollaig',
  7093. ],
  7094. monthsShort = [
  7095. 'Ean',
  7096. 'Feabh',
  7097. 'Márt',
  7098. 'Aib',
  7099. 'Beal',
  7100. 'Meith',
  7101. 'Iúil',
  7102. 'Lún',
  7103. 'M.F.',
  7104. 'D.F.',
  7105. 'Samh',
  7106. 'Noll',
  7107. ],
  7108. weekdays = [
  7109. 'Dé Domhnaigh',
  7110. 'Dé Luain',
  7111. 'Dé Máirt',
  7112. 'Dé Céadaoin',
  7113. 'Déardaoin',
  7114. 'Dé hAoine',
  7115. 'Dé Sathairn',
  7116. ],
  7117. weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],
  7118. weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];
  7119. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ga', {
  7120. months: months,
  7121. monthsShort: monthsShort,
  7122. monthsParseExact: true,
  7123. weekdays: weekdays,
  7124. weekdaysShort: weekdaysShort,
  7125. weekdaysMin: weekdaysMin,
  7126. longDateFormat: {
  7127. LT: 'HH:mm',
  7128. LTS: 'HH:mm:ss',
  7129. L: 'DD/MM/YYYY',
  7130. LL: 'D MMMM YYYY',
  7131. LLL: 'D MMMM YYYY HH:mm',
  7132. LLLL: 'dddd, D MMMM YYYY HH:mm',
  7133. },
  7134. calendar: {
  7135. sameDay: '[Inniu ag] LT',
  7136. nextDay: '[Amárach ag] LT',
  7137. nextWeek: 'dddd [ag] LT',
  7138. lastDay: '[Inné ag] LT',
  7139. lastWeek: 'dddd [seo caite] [ag] LT',
  7140. sameElse: 'L',
  7141. },
  7142. relativeTime: {
  7143. future: 'i %s',
  7144. past: '%s ó shin',
  7145. s: 'cúpla soicind',
  7146. ss: '%d soicind',
  7147. m: 'nóiméad',
  7148. mm: '%d nóiméad',
  7149. h: 'uair an chloig',
  7150. hh: '%d uair an chloig',
  7151. d: 'lá',
  7152. dd: '%d lá',
  7153. M: 'mí',
  7154. MM: '%d míonna',
  7155. y: 'bliain',
  7156. yy: '%d bliain',
  7157. },
  7158. dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
  7159. ordinal: function (number) {
  7160. var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
  7161. return number + output;
  7162. },
  7163. week: {
  7164. dow: 1, // Monday is the first day of the week.
  7165. doy: 4, // The week that contains Jan 4th is the first week of the year.
  7166. },
  7167. }));
  7168. /***/ }),
  7169. /***/ "./node_modules/moment/dist/locale/gd.js":
  7170. /*!***********************************************!*\
  7171. !*** ./node_modules/moment/dist/locale/gd.js ***!
  7172. \***********************************************/
  7173. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7174. "use strict";
  7175. __webpack_require__.r(__webpack_exports__);
  7176. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  7177. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  7178. /* harmony export */ });
  7179. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  7180. //! moment.js locale configuration
  7181. //! locale : Scottish Gaelic [gd]
  7182. //! author : Jon Ashdown : https://github.com/jonashdown
  7183. var months = [
  7184. 'Am Faoilleach',
  7185. 'An Gearran',
  7186. 'Am Màrt',
  7187. 'An Giblean',
  7188. 'An Cèitean',
  7189. 'An t-Ògmhios',
  7190. 'An t-Iuchar',
  7191. 'An Lùnastal',
  7192. 'An t-Sultain',
  7193. 'An Dàmhair',
  7194. 'An t-Samhain',
  7195. 'An Dùbhlachd',
  7196. ],
  7197. monthsShort = [
  7198. 'Faoi',
  7199. 'Gear',
  7200. 'Màrt',
  7201. 'Gibl',
  7202. 'Cèit',
  7203. 'Ògmh',
  7204. 'Iuch',
  7205. 'Lùn',
  7206. 'Sult',
  7207. 'Dàmh',
  7208. 'Samh',
  7209. 'Dùbh',
  7210. ],
  7211. weekdays = [
  7212. 'Didòmhnaich',
  7213. 'Diluain',
  7214. 'Dimàirt',
  7215. 'Diciadain',
  7216. 'Diardaoin',
  7217. 'Dihaoine',
  7218. 'Disathairne',
  7219. ],
  7220. weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],
  7221. weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];
  7222. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('gd', {
  7223. months: months,
  7224. monthsShort: monthsShort,
  7225. monthsParseExact: true,
  7226. weekdays: weekdays,
  7227. weekdaysShort: weekdaysShort,
  7228. weekdaysMin: weekdaysMin,
  7229. longDateFormat: {
  7230. LT: 'HH:mm',
  7231. LTS: 'HH:mm:ss',
  7232. L: 'DD/MM/YYYY',
  7233. LL: 'D MMMM YYYY',
  7234. LLL: 'D MMMM YYYY HH:mm',
  7235. LLLL: 'dddd, D MMMM YYYY HH:mm',
  7236. },
  7237. calendar: {
  7238. sameDay: '[An-diugh aig] LT',
  7239. nextDay: '[A-màireach aig] LT',
  7240. nextWeek: 'dddd [aig] LT',
  7241. lastDay: '[An-dè aig] LT',
  7242. lastWeek: 'dddd [seo chaidh] [aig] LT',
  7243. sameElse: 'L',
  7244. },
  7245. relativeTime: {
  7246. future: 'ann an %s',
  7247. past: 'bho chionn %s',
  7248. s: 'beagan diogan',
  7249. ss: '%d diogan',
  7250. m: 'mionaid',
  7251. mm: '%d mionaidean',
  7252. h: 'uair',
  7253. hh: '%d uairean',
  7254. d: 'latha',
  7255. dd: '%d latha',
  7256. M: 'mìos',
  7257. MM: '%d mìosan',
  7258. y: 'bliadhna',
  7259. yy: '%d bliadhna',
  7260. },
  7261. dayOfMonthOrdinalParse: /\d{1,2}(d|na|mh)/,
  7262. ordinal: function (number) {
  7263. var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';
  7264. return number + output;
  7265. },
  7266. week: {
  7267. dow: 1, // Monday is the first day of the week.
  7268. doy: 4, // The week that contains Jan 4th is the first week of the year.
  7269. },
  7270. }));
  7271. /***/ }),
  7272. /***/ "./node_modules/moment/dist/locale/gl.js":
  7273. /*!***********************************************!*\
  7274. !*** ./node_modules/moment/dist/locale/gl.js ***!
  7275. \***********************************************/
  7276. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7277. "use strict";
  7278. __webpack_require__.r(__webpack_exports__);
  7279. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  7280. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  7281. /* harmony export */ });
  7282. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  7283. //! moment.js locale configuration
  7284. //! locale : Galician [gl]
  7285. //! author : Juan G. Hurtado : https://github.com/juanghurtado
  7286. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('gl', {
  7287. months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(
  7288. '_'
  7289. ),
  7290. monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(
  7291. '_'
  7292. ),
  7293. monthsParseExact: true,
  7294. weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),
  7295. weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),
  7296. weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),
  7297. weekdaysParseExact: true,
  7298. longDateFormat: {
  7299. LT: 'H:mm',
  7300. LTS: 'H:mm:ss',
  7301. L: 'DD/MM/YYYY',
  7302. LL: 'D [de] MMMM [de] YYYY',
  7303. LLL: 'D [de] MMMM [de] YYYY H:mm',
  7304. LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',
  7305. },
  7306. calendar: {
  7307. sameDay: function () {
  7308. return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
  7309. },
  7310. nextDay: function () {
  7311. return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';
  7312. },
  7313. nextWeek: function () {
  7314. return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';
  7315. },
  7316. lastDay: function () {
  7317. return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';
  7318. },
  7319. lastWeek: function () {
  7320. return (
  7321. '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'
  7322. );
  7323. },
  7324. sameElse: 'L',
  7325. },
  7326. relativeTime: {
  7327. future: function (str) {
  7328. if (str.indexOf('un') === 0) {
  7329. return 'n' + str;
  7330. }
  7331. return 'en ' + str;
  7332. },
  7333. past: 'hai %s',
  7334. s: 'uns segundos',
  7335. ss: '%d segundos',
  7336. m: 'un minuto',
  7337. mm: '%d minutos',
  7338. h: 'unha hora',
  7339. hh: '%d horas',
  7340. d: 'un día',
  7341. dd: '%d días',
  7342. M: 'un mes',
  7343. MM: '%d meses',
  7344. y: 'un ano',
  7345. yy: '%d anos',
  7346. },
  7347. dayOfMonthOrdinalParse: /\d{1,2}º/,
  7348. ordinal: '%dº',
  7349. week: {
  7350. dow: 1, // Monday is the first day of the week.
  7351. doy: 4, // The week that contains Jan 4th is the first week of the year.
  7352. },
  7353. }));
  7354. /***/ }),
  7355. /***/ "./node_modules/moment/dist/locale/gom-deva.js":
  7356. /*!*****************************************************!*\
  7357. !*** ./node_modules/moment/dist/locale/gom-deva.js ***!
  7358. \*****************************************************/
  7359. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7360. "use strict";
  7361. __webpack_require__.r(__webpack_exports__);
  7362. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  7363. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  7364. /* harmony export */ });
  7365. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  7366. //! moment.js locale configuration
  7367. //! locale : Konkani Devanagari script [gom-deva]
  7368. //! author : The Discoverer : https://github.com/WikiDiscoverer
  7369. function processRelativeTime(number, withoutSuffix, key, isFuture) {
  7370. var format = {
  7371. s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],
  7372. ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],
  7373. m: ['एका मिणटान', 'एक मिनूट'],
  7374. mm: [number + ' मिणटांनी', number + ' मिणटां'],
  7375. h: ['एका वरान', 'एक वर'],
  7376. hh: [number + ' वरांनी', number + ' वरां'],
  7377. d: ['एका दिसान', 'एक दीस'],
  7378. dd: [number + ' दिसांनी', number + ' दीस'],
  7379. M: ['एका म्हयन्यान', 'एक म्हयनो'],
  7380. MM: [number + ' म्हयन्यानी', number + ' म्हयने'],
  7381. y: ['एका वर्सान', 'एक वर्स'],
  7382. yy: [number + ' वर्सांनी', number + ' वर्सां'],
  7383. };
  7384. return isFuture ? format[key][0] : format[key][1];
  7385. }
  7386. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('gom-deva', {
  7387. months: {
  7388. standalone: 'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(
  7389. '_'
  7390. ),
  7391. format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(
  7392. '_'
  7393. ),
  7394. isFormat: /MMMM(\s)+D[oD]?/,
  7395. },
  7396. monthsShort: 'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(
  7397. '_'
  7398. ),
  7399. monthsParseExact: true,
  7400. weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),
  7401. weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),
  7402. weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),
  7403. weekdaysParseExact: true,
  7404. longDateFormat: {
  7405. LT: 'A h:mm [वाजतां]',
  7406. LTS: 'A h:mm:ss [वाजतां]',
  7407. L: 'DD-MM-YYYY',
  7408. LL: 'D MMMM YYYY',
  7409. LLL: 'D MMMM YYYY A h:mm [वाजतां]',
  7410. LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',
  7411. llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',
  7412. },
  7413. calendar: {
  7414. sameDay: '[आयज] LT',
  7415. nextDay: '[फाल्यां] LT',
  7416. nextWeek: '[फुडलो] dddd[,] LT',
  7417. lastDay: '[काल] LT',
  7418. lastWeek: '[फाटलो] dddd[,] LT',
  7419. sameElse: 'L',
  7420. },
  7421. relativeTime: {
  7422. future: '%s',
  7423. past: '%s आदीं',
  7424. s: processRelativeTime,
  7425. ss: processRelativeTime,
  7426. m: processRelativeTime,
  7427. mm: processRelativeTime,
  7428. h: processRelativeTime,
  7429. hh: processRelativeTime,
  7430. d: processRelativeTime,
  7431. dd: processRelativeTime,
  7432. M: processRelativeTime,
  7433. MM: processRelativeTime,
  7434. y: processRelativeTime,
  7435. yy: processRelativeTime,
  7436. },
  7437. dayOfMonthOrdinalParse: /\d{1,2}(वेर)/,
  7438. ordinal: function (number, period) {
  7439. switch (period) {
  7440. // the ordinal 'वेर' only applies to day of the month
  7441. case 'D':
  7442. return number + 'वेर';
  7443. default:
  7444. case 'M':
  7445. case 'Q':
  7446. case 'DDD':
  7447. case 'd':
  7448. case 'w':
  7449. case 'W':
  7450. return number;
  7451. }
  7452. },
  7453. week: {
  7454. dow: 0, // Sunday is the first day of the week
  7455. doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
  7456. },
  7457. meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,
  7458. meridiemHour: function (hour, meridiem) {
  7459. if (hour === 12) {
  7460. hour = 0;
  7461. }
  7462. if (meridiem === 'राती') {
  7463. return hour < 4 ? hour : hour + 12;
  7464. } else if (meridiem === 'सकाळीं') {
  7465. return hour;
  7466. } else if (meridiem === 'दनपारां') {
  7467. return hour > 12 ? hour : hour + 12;
  7468. } else if (meridiem === 'सांजे') {
  7469. return hour + 12;
  7470. }
  7471. },
  7472. meridiem: function (hour, minute, isLower) {
  7473. if (hour < 4) {
  7474. return 'राती';
  7475. } else if (hour < 12) {
  7476. return 'सकाळीं';
  7477. } else if (hour < 16) {
  7478. return 'दनपारां';
  7479. } else if (hour < 20) {
  7480. return 'सांजे';
  7481. } else {
  7482. return 'राती';
  7483. }
  7484. },
  7485. }));
  7486. /***/ }),
  7487. /***/ "./node_modules/moment/dist/locale/gom-latn.js":
  7488. /*!*****************************************************!*\
  7489. !*** ./node_modules/moment/dist/locale/gom-latn.js ***!
  7490. \*****************************************************/
  7491. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7492. "use strict";
  7493. __webpack_require__.r(__webpack_exports__);
  7494. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  7495. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  7496. /* harmony export */ });
  7497. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  7498. //! moment.js locale configuration
  7499. //! locale : Konkani Latin script [gom-latn]
  7500. //! author : The Discoverer : https://github.com/WikiDiscoverer
  7501. function processRelativeTime(number, withoutSuffix, key, isFuture) {
  7502. var format = {
  7503. s: ['thoddea sekondamni', 'thodde sekond'],
  7504. ss: [number + ' sekondamni', number + ' sekond'],
  7505. m: ['eka mintan', 'ek minut'],
  7506. mm: [number + ' mintamni', number + ' mintam'],
  7507. h: ['eka voran', 'ek vor'],
  7508. hh: [number + ' voramni', number + ' voram'],
  7509. d: ['eka disan', 'ek dis'],
  7510. dd: [number + ' disamni', number + ' dis'],
  7511. M: ['eka mhoinean', 'ek mhoino'],
  7512. MM: [number + ' mhoineamni', number + ' mhoine'],
  7513. y: ['eka vorsan', 'ek voros'],
  7514. yy: [number + ' vorsamni', number + ' vorsam'],
  7515. };
  7516. return isFuture ? format[key][0] : format[key][1];
  7517. }
  7518. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('gom-latn', {
  7519. months: {
  7520. standalone: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(
  7521. '_'
  7522. ),
  7523. format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(
  7524. '_'
  7525. ),
  7526. isFormat: /MMMM(\s)+D[oD]?/,
  7527. },
  7528. monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split(
  7529. '_'
  7530. ),
  7531. monthsParseExact: true,
  7532. weekdays: "Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var".split('_'),
  7533. weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),
  7534. weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),
  7535. weekdaysParseExact: true,
  7536. longDateFormat: {
  7537. LT: 'A h:mm [vazta]',
  7538. LTS: 'A h:mm:ss [vazta]',
  7539. L: 'DD-MM-YYYY',
  7540. LL: 'D MMMM YYYY',
  7541. LLL: 'D MMMM YYYY A h:mm [vazta]',
  7542. LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',
  7543. llll: 'ddd, D MMM YYYY, A h:mm [vazta]',
  7544. },
  7545. calendar: {
  7546. sameDay: '[Aiz] LT',
  7547. nextDay: '[Faleam] LT',
  7548. nextWeek: '[Fuddlo] dddd[,] LT',
  7549. lastDay: '[Kal] LT',
  7550. lastWeek: '[Fattlo] dddd[,] LT',
  7551. sameElse: 'L',
  7552. },
  7553. relativeTime: {
  7554. future: '%s',
  7555. past: '%s adim',
  7556. s: processRelativeTime,
  7557. ss: processRelativeTime,
  7558. m: processRelativeTime,
  7559. mm: processRelativeTime,
  7560. h: processRelativeTime,
  7561. hh: processRelativeTime,
  7562. d: processRelativeTime,
  7563. dd: processRelativeTime,
  7564. M: processRelativeTime,
  7565. MM: processRelativeTime,
  7566. y: processRelativeTime,
  7567. yy: processRelativeTime,
  7568. },
  7569. dayOfMonthOrdinalParse: /\d{1,2}(er)/,
  7570. ordinal: function (number, period) {
  7571. switch (period) {
  7572. // the ordinal 'er' only applies to day of the month
  7573. case 'D':
  7574. return number + 'er';
  7575. default:
  7576. case 'M':
  7577. case 'Q':
  7578. case 'DDD':
  7579. case 'd':
  7580. case 'w':
  7581. case 'W':
  7582. return number;
  7583. }
  7584. },
  7585. week: {
  7586. dow: 0, // Sunday is the first day of the week
  7587. doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)
  7588. },
  7589. meridiemParse: /rati|sokallim|donparam|sanje/,
  7590. meridiemHour: function (hour, meridiem) {
  7591. if (hour === 12) {
  7592. hour = 0;
  7593. }
  7594. if (meridiem === 'rati') {
  7595. return hour < 4 ? hour : hour + 12;
  7596. } else if (meridiem === 'sokallim') {
  7597. return hour;
  7598. } else if (meridiem === 'donparam') {
  7599. return hour > 12 ? hour : hour + 12;
  7600. } else if (meridiem === 'sanje') {
  7601. return hour + 12;
  7602. }
  7603. },
  7604. meridiem: function (hour, minute, isLower) {
  7605. if (hour < 4) {
  7606. return 'rati';
  7607. } else if (hour < 12) {
  7608. return 'sokallim';
  7609. } else if (hour < 16) {
  7610. return 'donparam';
  7611. } else if (hour < 20) {
  7612. return 'sanje';
  7613. } else {
  7614. return 'rati';
  7615. }
  7616. },
  7617. }));
  7618. /***/ }),
  7619. /***/ "./node_modules/moment/dist/locale/gu.js":
  7620. /*!***********************************************!*\
  7621. !*** ./node_modules/moment/dist/locale/gu.js ***!
  7622. \***********************************************/
  7623. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7624. "use strict";
  7625. __webpack_require__.r(__webpack_exports__);
  7626. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  7627. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  7628. /* harmony export */ });
  7629. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  7630. //! moment.js locale configuration
  7631. //! locale : Gujarati [gu]
  7632. //! author : Kaushik Thanki : https://github.com/Kaushik1987
  7633. var symbolMap = {
  7634. 1: '૧',
  7635. 2: '૨',
  7636. 3: '૩',
  7637. 4: '૪',
  7638. 5: '૫',
  7639. 6: '૬',
  7640. 7: '૭',
  7641. 8: '૮',
  7642. 9: '૯',
  7643. 0: '૦',
  7644. },
  7645. numberMap = {
  7646. '૧': '1',
  7647. '૨': '2',
  7648. '૩': '3',
  7649. '૪': '4',
  7650. '૫': '5',
  7651. '૬': '6',
  7652. '૭': '7',
  7653. '૮': '8',
  7654. '૯': '9',
  7655. '૦': '0',
  7656. };
  7657. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('gu', {
  7658. months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(
  7659. '_'
  7660. ),
  7661. monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(
  7662. '_'
  7663. ),
  7664. monthsParseExact: true,
  7665. weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(
  7666. '_'
  7667. ),
  7668. weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),
  7669. weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),
  7670. longDateFormat: {
  7671. LT: 'A h:mm વાગ્યે',
  7672. LTS: 'A h:mm:ss વાગ્યે',
  7673. L: 'DD/MM/YYYY',
  7674. LL: 'D MMMM YYYY',
  7675. LLL: 'D MMMM YYYY, A h:mm વાગ્યે',
  7676. LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',
  7677. },
  7678. calendar: {
  7679. sameDay: '[આજ] LT',
  7680. nextDay: '[કાલે] LT',
  7681. nextWeek: 'dddd, LT',
  7682. lastDay: '[ગઇકાલે] LT',
  7683. lastWeek: '[પાછલા] dddd, LT',
  7684. sameElse: 'L',
  7685. },
  7686. relativeTime: {
  7687. future: '%s મા',
  7688. past: '%s પહેલા',
  7689. s: 'અમુક પળો',
  7690. ss: '%d સેકંડ',
  7691. m: 'એક મિનિટ',
  7692. mm: '%d મિનિટ',
  7693. h: 'એક કલાક',
  7694. hh: '%d કલાક',
  7695. d: 'એક દિવસ',
  7696. dd: '%d દિવસ',
  7697. M: 'એક મહિનો',
  7698. MM: '%d મહિનો',
  7699. y: 'એક વર્ષ',
  7700. yy: '%d વર્ષ',
  7701. },
  7702. preparse: function (string) {
  7703. return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {
  7704. return numberMap[match];
  7705. });
  7706. },
  7707. postformat: function (string) {
  7708. return string.replace(/\d/g, function (match) {
  7709. return symbolMap[match];
  7710. });
  7711. },
  7712. // Gujarati notation for meridiems are quite fuzzy in practice. While there exists
  7713. // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.
  7714. meridiemParse: /રાત|બપોર|સવાર|સાંજ/,
  7715. meridiemHour: function (hour, meridiem) {
  7716. if (hour === 12) {
  7717. hour = 0;
  7718. }
  7719. if (meridiem === 'રાત') {
  7720. return hour < 4 ? hour : hour + 12;
  7721. } else if (meridiem === 'સવાર') {
  7722. return hour;
  7723. } else if (meridiem === 'બપોર') {
  7724. return hour >= 10 ? hour : hour + 12;
  7725. } else if (meridiem === 'સાંજ') {
  7726. return hour + 12;
  7727. }
  7728. },
  7729. meridiem: function (hour, minute, isLower) {
  7730. if (hour < 4) {
  7731. return 'રાત';
  7732. } else if (hour < 10) {
  7733. return 'સવાર';
  7734. } else if (hour < 17) {
  7735. return 'બપોર';
  7736. } else if (hour < 20) {
  7737. return 'સાંજ';
  7738. } else {
  7739. return 'રાત';
  7740. }
  7741. },
  7742. week: {
  7743. dow: 0, // Sunday is the first day of the week.
  7744. doy: 6, // The week that contains Jan 6th is the first week of the year.
  7745. },
  7746. }));
  7747. /***/ }),
  7748. /***/ "./node_modules/moment/dist/locale/he.js":
  7749. /*!***********************************************!*\
  7750. !*** ./node_modules/moment/dist/locale/he.js ***!
  7751. \***********************************************/
  7752. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7753. "use strict";
  7754. __webpack_require__.r(__webpack_exports__);
  7755. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  7756. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  7757. /* harmony export */ });
  7758. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  7759. //! moment.js locale configuration
  7760. //! locale : Hebrew [he]
  7761. //! author : Tomer Cohen : https://github.com/tomer
  7762. //! author : Moshe Simantov : https://github.com/DevelopmentIL
  7763. //! author : Tal Ater : https://github.com/TalAter
  7764. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('he', {
  7765. months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(
  7766. '_'
  7767. ),
  7768. monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split(
  7769. '_'
  7770. ),
  7771. weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),
  7772. weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),
  7773. weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),
  7774. longDateFormat: {
  7775. LT: 'HH:mm',
  7776. LTS: 'HH:mm:ss',
  7777. L: 'DD/MM/YYYY',
  7778. LL: 'D [ב]MMMM YYYY',
  7779. LLL: 'D [ב]MMMM YYYY HH:mm',
  7780. LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',
  7781. l: 'D/M/YYYY',
  7782. ll: 'D MMM YYYY',
  7783. lll: 'D MMM YYYY HH:mm',
  7784. llll: 'ddd, D MMM YYYY HH:mm',
  7785. },
  7786. calendar: {
  7787. sameDay: '[היום ב־]LT',
  7788. nextDay: '[מחר ב־]LT',
  7789. nextWeek: 'dddd [בשעה] LT',
  7790. lastDay: '[אתמול ב־]LT',
  7791. lastWeek: '[ביום] dddd [האחרון בשעה] LT',
  7792. sameElse: 'L',
  7793. },
  7794. relativeTime: {
  7795. future: 'בעוד %s',
  7796. past: 'לפני %s',
  7797. s: 'מספר שניות',
  7798. ss: '%d שניות',
  7799. m: 'דקה',
  7800. mm: '%d דקות',
  7801. h: 'שעה',
  7802. hh: function (number) {
  7803. if (number === 2) {
  7804. return 'שעתיים';
  7805. }
  7806. return number + ' שעות';
  7807. },
  7808. d: 'יום',
  7809. dd: function (number) {
  7810. if (number === 2) {
  7811. return 'יומיים';
  7812. }
  7813. return number + ' ימים';
  7814. },
  7815. M: 'חודש',
  7816. MM: function (number) {
  7817. if (number === 2) {
  7818. return 'חודשיים';
  7819. }
  7820. return number + ' חודשים';
  7821. },
  7822. y: 'שנה',
  7823. yy: function (number) {
  7824. if (number === 2) {
  7825. return 'שנתיים';
  7826. } else if (number % 10 === 0 && number !== 10) {
  7827. return number + ' שנה';
  7828. }
  7829. return number + ' שנים';
  7830. },
  7831. },
  7832. meridiemParse: /אחה"צ|לפנה"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,
  7833. isPM: function (input) {
  7834. return /^(אחה"צ|אחרי הצהריים|בערב)$/.test(input);
  7835. },
  7836. meridiem: function (hour, minute, isLower) {
  7837. if (hour < 5) {
  7838. return 'לפנות בוקר';
  7839. } else if (hour < 10) {
  7840. return 'בבוקר';
  7841. } else if (hour < 12) {
  7842. return isLower ? 'לפנה"צ' : 'לפני הצהריים';
  7843. } else if (hour < 18) {
  7844. return isLower ? 'אחה"צ' : 'אחרי הצהריים';
  7845. } else {
  7846. return 'בערב';
  7847. }
  7848. },
  7849. }));
  7850. /***/ }),
  7851. /***/ "./node_modules/moment/dist/locale/hi.js":
  7852. /*!***********************************************!*\
  7853. !*** ./node_modules/moment/dist/locale/hi.js ***!
  7854. \***********************************************/
  7855. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  7856. "use strict";
  7857. __webpack_require__.r(__webpack_exports__);
  7858. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  7859. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  7860. /* harmony export */ });
  7861. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  7862. //! moment.js locale configuration
  7863. //! locale : Hindi [hi]
  7864. //! author : Mayank Singhal : https://github.com/mayanksinghal
  7865. var symbolMap = {
  7866. 1: '१',
  7867. 2: '२',
  7868. 3: '३',
  7869. 4: '४',
  7870. 5: '५',
  7871. 6: '६',
  7872. 7: '७',
  7873. 8: '८',
  7874. 9: '९',
  7875. 0: '०',
  7876. },
  7877. numberMap = {
  7878. '१': '1',
  7879. '२': '2',
  7880. '३': '3',
  7881. '४': '4',
  7882. '५': '5',
  7883. '६': '6',
  7884. '७': '7',
  7885. '८': '8',
  7886. '९': '9',
  7887. '०': '0',
  7888. },
  7889. monthsParse = [
  7890. /^जन/i,
  7891. /^फ़र|फर/i,
  7892. /^मार्च/i,
  7893. /^अप्रै/i,
  7894. /^मई/i,
  7895. /^जून/i,
  7896. /^जुल/i,
  7897. /^अग/i,
  7898. /^सितं|सित/i,
  7899. /^अक्टू/i,
  7900. /^नव|नवं/i,
  7901. /^दिसं|दिस/i,
  7902. ],
  7903. shortMonthsParse = [
  7904. /^जन/i,
  7905. /^फ़र/i,
  7906. /^मार्च/i,
  7907. /^अप्रै/i,
  7908. /^मई/i,
  7909. /^जून/i,
  7910. /^जुल/i,
  7911. /^अग/i,
  7912. /^सित/i,
  7913. /^अक्टू/i,
  7914. /^नव/i,
  7915. /^दिस/i,
  7916. ];
  7917. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('hi', {
  7918. months: {
  7919. format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(
  7920. '_'
  7921. ),
  7922. standalone: 'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(
  7923. '_'
  7924. ),
  7925. },
  7926. monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split(
  7927. '_'
  7928. ),
  7929. weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
  7930. weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),
  7931. weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
  7932. longDateFormat: {
  7933. LT: 'A h:mm बजे',
  7934. LTS: 'A h:mm:ss बजे',
  7935. L: 'DD/MM/YYYY',
  7936. LL: 'D MMMM YYYY',
  7937. LLL: 'D MMMM YYYY, A h:mm बजे',
  7938. LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',
  7939. },
  7940. monthsParse: monthsParse,
  7941. longMonthsParse: monthsParse,
  7942. shortMonthsParse: shortMonthsParse,
  7943. monthsRegex: /^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,
  7944. monthsShortRegex: /^(जनवरी|जन\.?|फ़रवरी|फरवरी|फ़र\.?|मार्च?|अप्रैल|अप्रै\.?|मई?|जून?|जुलाई|जुल\.?|अगस्त|अग\.?|सितम्बर|सितंबर|सित\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर|नव\.?|दिसम्बर|दिसंबर|दिस\.?)/i,
  7945. monthsStrictRegex: /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\.?|अक्टूबर|अक्टू\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,
  7946. monthsShortStrictRegex: /^(जन\.?|फ़र\.?|मार्च?|अप्रै\.?|मई?|जून?|जुल\.?|अग\.?|सित\.?|अक्टू\.?|नव\.?|दिस\.?)/i,
  7947. calendar: {
  7948. sameDay: '[आज] LT',
  7949. nextDay: '[कल] LT',
  7950. nextWeek: 'dddd, LT',
  7951. lastDay: '[कल] LT',
  7952. lastWeek: '[पिछले] dddd, LT',
  7953. sameElse: 'L',
  7954. },
  7955. relativeTime: {
  7956. future: '%s में',
  7957. past: '%s पहले',
  7958. s: 'कुछ ही क्षण',
  7959. ss: '%d सेकंड',
  7960. m: 'एक मिनट',
  7961. mm: '%d मिनट',
  7962. h: 'एक घंटा',
  7963. hh: '%d घंटे',
  7964. d: 'एक दिन',
  7965. dd: '%d दिन',
  7966. M: 'एक महीने',
  7967. MM: '%d महीने',
  7968. y: 'एक वर्ष',
  7969. yy: '%d वर्ष',
  7970. },
  7971. preparse: function (string) {
  7972. return string.replace(/[१२३४५६७८९०]/g, function (match) {
  7973. return numberMap[match];
  7974. });
  7975. },
  7976. postformat: function (string) {
  7977. return string.replace(/\d/g, function (match) {
  7978. return symbolMap[match];
  7979. });
  7980. },
  7981. // Hindi notation for meridiems are quite fuzzy in practice. While there exists
  7982. // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.
  7983. meridiemParse: /रात|सुबह|दोपहर|शाम/,
  7984. meridiemHour: function (hour, meridiem) {
  7985. if (hour === 12) {
  7986. hour = 0;
  7987. }
  7988. if (meridiem === 'रात') {
  7989. return hour < 4 ? hour : hour + 12;
  7990. } else if (meridiem === 'सुबह') {
  7991. return hour;
  7992. } else if (meridiem === 'दोपहर') {
  7993. return hour >= 10 ? hour : hour + 12;
  7994. } else if (meridiem === 'शाम') {
  7995. return hour + 12;
  7996. }
  7997. },
  7998. meridiem: function (hour, minute, isLower) {
  7999. if (hour < 4) {
  8000. return 'रात';
  8001. } else if (hour < 10) {
  8002. return 'सुबह';
  8003. } else if (hour < 17) {
  8004. return 'दोपहर';
  8005. } else if (hour < 20) {
  8006. return 'शाम';
  8007. } else {
  8008. return 'रात';
  8009. }
  8010. },
  8011. week: {
  8012. dow: 0, // Sunday is the first day of the week.
  8013. doy: 6, // The week that contains Jan 6th is the first week of the year.
  8014. },
  8015. }));
  8016. /***/ }),
  8017. /***/ "./node_modules/moment/dist/locale/hr.js":
  8018. /*!***********************************************!*\
  8019. !*** ./node_modules/moment/dist/locale/hr.js ***!
  8020. \***********************************************/
  8021. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  8022. "use strict";
  8023. __webpack_require__.r(__webpack_exports__);
  8024. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8025. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  8026. /* harmony export */ });
  8027. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  8028. //! moment.js locale configuration
  8029. //! locale : Croatian [hr]
  8030. //! author : Bojan Marković : https://github.com/bmarkovic
  8031. function translate(number, withoutSuffix, key) {
  8032. var result = number + ' ';
  8033. switch (key) {
  8034. case 'ss':
  8035. if (number === 1) {
  8036. result += 'sekunda';
  8037. } else if (number === 2 || number === 3 || number === 4) {
  8038. result += 'sekunde';
  8039. } else {
  8040. result += 'sekundi';
  8041. }
  8042. return result;
  8043. case 'm':
  8044. return withoutSuffix ? 'jedna minuta' : 'jedne minute';
  8045. case 'mm':
  8046. if (number === 1) {
  8047. result += 'minuta';
  8048. } else if (number === 2 || number === 3 || number === 4) {
  8049. result += 'minute';
  8050. } else {
  8051. result += 'minuta';
  8052. }
  8053. return result;
  8054. case 'h':
  8055. return withoutSuffix ? 'jedan sat' : 'jednog sata';
  8056. case 'hh':
  8057. if (number === 1) {
  8058. result += 'sat';
  8059. } else if (number === 2 || number === 3 || number === 4) {
  8060. result += 'sata';
  8061. } else {
  8062. result += 'sati';
  8063. }
  8064. return result;
  8065. case 'dd':
  8066. if (number === 1) {
  8067. result += 'dan';
  8068. } else {
  8069. result += 'dana';
  8070. }
  8071. return result;
  8072. case 'MM':
  8073. if (number === 1) {
  8074. result += 'mjesec';
  8075. } else if (number === 2 || number === 3 || number === 4) {
  8076. result += 'mjeseca';
  8077. } else {
  8078. result += 'mjeseci';
  8079. }
  8080. return result;
  8081. case 'yy':
  8082. if (number === 1) {
  8083. result += 'godina';
  8084. } else if (number === 2 || number === 3 || number === 4) {
  8085. result += 'godine';
  8086. } else {
  8087. result += 'godina';
  8088. }
  8089. return result;
  8090. }
  8091. }
  8092. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('hr', {
  8093. months: {
  8094. format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(
  8095. '_'
  8096. ),
  8097. standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(
  8098. '_'
  8099. ),
  8100. },
  8101. monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(
  8102. '_'
  8103. ),
  8104. monthsParseExact: true,
  8105. weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
  8106. '_'
  8107. ),
  8108. weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
  8109. weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
  8110. weekdaysParseExact: true,
  8111. longDateFormat: {
  8112. LT: 'H:mm',
  8113. LTS: 'H:mm:ss',
  8114. L: 'DD.MM.YYYY',
  8115. LL: 'Do MMMM YYYY',
  8116. LLL: 'Do MMMM YYYY H:mm',
  8117. LLLL: 'dddd, Do MMMM YYYY H:mm',
  8118. },
  8119. calendar: {
  8120. sameDay: '[danas u] LT',
  8121. nextDay: '[sutra u] LT',
  8122. nextWeek: function () {
  8123. switch (this.day()) {
  8124. case 0:
  8125. return '[u] [nedjelju] [u] LT';
  8126. case 3:
  8127. return '[u] [srijedu] [u] LT';
  8128. case 6:
  8129. return '[u] [subotu] [u] LT';
  8130. case 1:
  8131. case 2:
  8132. case 4:
  8133. case 5:
  8134. return '[u] dddd [u] LT';
  8135. }
  8136. },
  8137. lastDay: '[jučer u] LT',
  8138. lastWeek: function () {
  8139. switch (this.day()) {
  8140. case 0:
  8141. return '[prošlu] [nedjelju] [u] LT';
  8142. case 3:
  8143. return '[prošlu] [srijedu] [u] LT';
  8144. case 6:
  8145. return '[prošle] [subote] [u] LT';
  8146. case 1:
  8147. case 2:
  8148. case 4:
  8149. case 5:
  8150. return '[prošli] dddd [u] LT';
  8151. }
  8152. },
  8153. sameElse: 'L',
  8154. },
  8155. relativeTime: {
  8156. future: 'za %s',
  8157. past: 'prije %s',
  8158. s: 'par sekundi',
  8159. ss: translate,
  8160. m: translate,
  8161. mm: translate,
  8162. h: translate,
  8163. hh: translate,
  8164. d: 'dan',
  8165. dd: translate,
  8166. M: 'mjesec',
  8167. MM: translate,
  8168. y: 'godinu',
  8169. yy: translate,
  8170. },
  8171. dayOfMonthOrdinalParse: /\d{1,2}\./,
  8172. ordinal: '%d.',
  8173. week: {
  8174. dow: 1, // Monday is the first day of the week.
  8175. doy: 7, // The week that contains Jan 7th is the first week of the year.
  8176. },
  8177. }));
  8178. /***/ }),
  8179. /***/ "./node_modules/moment/dist/locale/hu.js":
  8180. /*!***********************************************!*\
  8181. !*** ./node_modules/moment/dist/locale/hu.js ***!
  8182. \***********************************************/
  8183. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  8184. "use strict";
  8185. __webpack_require__.r(__webpack_exports__);
  8186. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8187. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  8188. /* harmony export */ });
  8189. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  8190. //! moment.js locale configuration
  8191. //! locale : Hungarian [hu]
  8192. //! author : Adam Brunner : https://github.com/adambrunner
  8193. //! author : Peter Viszt : https://github.com/passatgt
  8194. var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(
  8195. ' '
  8196. );
  8197. function translate(number, withoutSuffix, key, isFuture) {
  8198. var num = number;
  8199. switch (key) {
  8200. case 's':
  8201. return isFuture || withoutSuffix
  8202. ? 'néhány másodperc'
  8203. : 'néhány másodperce';
  8204. case 'ss':
  8205. return num + (isFuture || withoutSuffix)
  8206. ? ' másodperc'
  8207. : ' másodperce';
  8208. case 'm':
  8209. return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');
  8210. case 'mm':
  8211. return num + (isFuture || withoutSuffix ? ' perc' : ' perce');
  8212. case 'h':
  8213. return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');
  8214. case 'hh':
  8215. return num + (isFuture || withoutSuffix ? ' óra' : ' órája');
  8216. case 'd':
  8217. return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');
  8218. case 'dd':
  8219. return num + (isFuture || withoutSuffix ? ' nap' : ' napja');
  8220. case 'M':
  8221. return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
  8222. case 'MM':
  8223. return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');
  8224. case 'y':
  8225. return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');
  8226. case 'yy':
  8227. return num + (isFuture || withoutSuffix ? ' év' : ' éve');
  8228. }
  8229. return '';
  8230. }
  8231. function week(isFuture) {
  8232. return (
  8233. (isFuture ? '' : '[múlt] ') +
  8234. '[' +
  8235. weekEndings[this.day()] +
  8236. '] LT[-kor]'
  8237. );
  8238. }
  8239. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('hu', {
  8240. months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(
  8241. '_'
  8242. ),
  8243. monthsShort: 'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(
  8244. '_'
  8245. ),
  8246. monthsParseExact: true,
  8247. weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),
  8248. weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),
  8249. weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),
  8250. longDateFormat: {
  8251. LT: 'H:mm',
  8252. LTS: 'H:mm:ss',
  8253. L: 'YYYY.MM.DD.',
  8254. LL: 'YYYY. MMMM D.',
  8255. LLL: 'YYYY. MMMM D. H:mm',
  8256. LLLL: 'YYYY. MMMM D., dddd H:mm',
  8257. },
  8258. meridiemParse: /de|du/i,
  8259. isPM: function (input) {
  8260. return input.charAt(1).toLowerCase() === 'u';
  8261. },
  8262. meridiem: function (hours, minutes, isLower) {
  8263. if (hours < 12) {
  8264. return isLower === true ? 'de' : 'DE';
  8265. } else {
  8266. return isLower === true ? 'du' : 'DU';
  8267. }
  8268. },
  8269. calendar: {
  8270. sameDay: '[ma] LT[-kor]',
  8271. nextDay: '[holnap] LT[-kor]',
  8272. nextWeek: function () {
  8273. return week.call(this, true);
  8274. },
  8275. lastDay: '[tegnap] LT[-kor]',
  8276. lastWeek: function () {
  8277. return week.call(this, false);
  8278. },
  8279. sameElse: 'L',
  8280. },
  8281. relativeTime: {
  8282. future: '%s múlva',
  8283. past: '%s',
  8284. s: translate,
  8285. ss: translate,
  8286. m: translate,
  8287. mm: translate,
  8288. h: translate,
  8289. hh: translate,
  8290. d: translate,
  8291. dd: translate,
  8292. M: translate,
  8293. MM: translate,
  8294. y: translate,
  8295. yy: translate,
  8296. },
  8297. dayOfMonthOrdinalParse: /\d{1,2}\./,
  8298. ordinal: '%d.',
  8299. week: {
  8300. dow: 1, // Monday is the first day of the week.
  8301. doy: 4, // The week that contains Jan 4th is the first week of the year.
  8302. },
  8303. }));
  8304. /***/ }),
  8305. /***/ "./node_modules/moment/dist/locale/hy-am.js":
  8306. /*!**************************************************!*\
  8307. !*** ./node_modules/moment/dist/locale/hy-am.js ***!
  8308. \**************************************************/
  8309. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  8310. "use strict";
  8311. __webpack_require__.r(__webpack_exports__);
  8312. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8313. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  8314. /* harmony export */ });
  8315. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  8316. //! moment.js locale configuration
  8317. //! locale : Armenian [hy-am]
  8318. //! author : Armendarabyan : https://github.com/armendarabyan
  8319. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('hy-am', {
  8320. months: {
  8321. format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(
  8322. '_'
  8323. ),
  8324. standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(
  8325. '_'
  8326. ),
  8327. },
  8328. monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),
  8329. weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(
  8330. '_'
  8331. ),
  8332. weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
  8333. weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),
  8334. longDateFormat: {
  8335. LT: 'HH:mm',
  8336. LTS: 'HH:mm:ss',
  8337. L: 'DD.MM.YYYY',
  8338. LL: 'D MMMM YYYY թ.',
  8339. LLL: 'D MMMM YYYY թ., HH:mm',
  8340. LLLL: 'dddd, D MMMM YYYY թ., HH:mm',
  8341. },
  8342. calendar: {
  8343. sameDay: '[այսօր] LT',
  8344. nextDay: '[վաղը] LT',
  8345. lastDay: '[երեկ] LT',
  8346. nextWeek: function () {
  8347. return 'dddd [օրը ժամը] LT';
  8348. },
  8349. lastWeek: function () {
  8350. return '[անցած] dddd [օրը ժամը] LT';
  8351. },
  8352. sameElse: 'L',
  8353. },
  8354. relativeTime: {
  8355. future: '%s հետո',
  8356. past: '%s առաջ',
  8357. s: 'մի քանի վայրկյան',
  8358. ss: '%d վայրկյան',
  8359. m: 'րոպե',
  8360. mm: '%d րոպե',
  8361. h: 'ժամ',
  8362. hh: '%d ժամ',
  8363. d: 'օր',
  8364. dd: '%d օր',
  8365. M: 'ամիս',
  8366. MM: '%d ամիս',
  8367. y: 'տարի',
  8368. yy: '%d տարի',
  8369. },
  8370. meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,
  8371. isPM: function (input) {
  8372. return /^(ցերեկվա|երեկոյան)$/.test(input);
  8373. },
  8374. meridiem: function (hour) {
  8375. if (hour < 4) {
  8376. return 'գիշերվա';
  8377. } else if (hour < 12) {
  8378. return 'առավոտվա';
  8379. } else if (hour < 17) {
  8380. return 'ցերեկվա';
  8381. } else {
  8382. return 'երեկոյան';
  8383. }
  8384. },
  8385. dayOfMonthOrdinalParse: /\d{1,2}|\d{1,2}-(ին|րդ)/,
  8386. ordinal: function (number, period) {
  8387. switch (period) {
  8388. case 'DDD':
  8389. case 'w':
  8390. case 'W':
  8391. case 'DDDo':
  8392. if (number === 1) {
  8393. return number + '-ին';
  8394. }
  8395. return number + '-րդ';
  8396. default:
  8397. return number;
  8398. }
  8399. },
  8400. week: {
  8401. dow: 1, // Monday is the first day of the week.
  8402. doy: 7, // The week that contains Jan 7th is the first week of the year.
  8403. },
  8404. }));
  8405. /***/ }),
  8406. /***/ "./node_modules/moment/dist/locale/id.js":
  8407. /*!***********************************************!*\
  8408. !*** ./node_modules/moment/dist/locale/id.js ***!
  8409. \***********************************************/
  8410. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  8411. "use strict";
  8412. __webpack_require__.r(__webpack_exports__);
  8413. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8414. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  8415. /* harmony export */ });
  8416. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  8417. //! moment.js locale configuration
  8418. //! locale : Indonesian [id]
  8419. //! author : Mohammad Satrio Utomo : https://github.com/tyok
  8420. //! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan
  8421. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('id', {
  8422. months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(
  8423. '_'
  8424. ),
  8425. monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),
  8426. weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),
  8427. weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),
  8428. weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),
  8429. longDateFormat: {
  8430. LT: 'HH.mm',
  8431. LTS: 'HH.mm.ss',
  8432. L: 'DD/MM/YYYY',
  8433. LL: 'D MMMM YYYY',
  8434. LLL: 'D MMMM YYYY [pukul] HH.mm',
  8435. LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
  8436. },
  8437. meridiemParse: /pagi|siang|sore|malam/,
  8438. meridiemHour: function (hour, meridiem) {
  8439. if (hour === 12) {
  8440. hour = 0;
  8441. }
  8442. if (meridiem === 'pagi') {
  8443. return hour;
  8444. } else if (meridiem === 'siang') {
  8445. return hour >= 11 ? hour : hour + 12;
  8446. } else if (meridiem === 'sore' || meridiem === 'malam') {
  8447. return hour + 12;
  8448. }
  8449. },
  8450. meridiem: function (hours, minutes, isLower) {
  8451. if (hours < 11) {
  8452. return 'pagi';
  8453. } else if (hours < 15) {
  8454. return 'siang';
  8455. } else if (hours < 19) {
  8456. return 'sore';
  8457. } else {
  8458. return 'malam';
  8459. }
  8460. },
  8461. calendar: {
  8462. sameDay: '[Hari ini pukul] LT',
  8463. nextDay: '[Besok pukul] LT',
  8464. nextWeek: 'dddd [pukul] LT',
  8465. lastDay: '[Kemarin pukul] LT',
  8466. lastWeek: 'dddd [lalu pukul] LT',
  8467. sameElse: 'L',
  8468. },
  8469. relativeTime: {
  8470. future: 'dalam %s',
  8471. past: '%s yang lalu',
  8472. s: 'beberapa detik',
  8473. ss: '%d detik',
  8474. m: 'semenit',
  8475. mm: '%d menit',
  8476. h: 'sejam',
  8477. hh: '%d jam',
  8478. d: 'sehari',
  8479. dd: '%d hari',
  8480. M: 'sebulan',
  8481. MM: '%d bulan',
  8482. y: 'setahun',
  8483. yy: '%d tahun',
  8484. },
  8485. week: {
  8486. dow: 0, // Sunday is the first day of the week.
  8487. doy: 6, // The week that contains Jan 6th is the first week of the year.
  8488. },
  8489. }));
  8490. /***/ }),
  8491. /***/ "./node_modules/moment/dist/locale/is.js":
  8492. /*!***********************************************!*\
  8493. !*** ./node_modules/moment/dist/locale/is.js ***!
  8494. \***********************************************/
  8495. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  8496. "use strict";
  8497. __webpack_require__.r(__webpack_exports__);
  8498. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8499. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  8500. /* harmony export */ });
  8501. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  8502. //! moment.js locale configuration
  8503. //! locale : Icelandic [is]
  8504. //! author : Hinrik Örn Sigurðsson : https://github.com/hinrik
  8505. function plural(n) {
  8506. if (n % 100 === 11) {
  8507. return true;
  8508. } else if (n % 10 === 1) {
  8509. return false;
  8510. }
  8511. return true;
  8512. }
  8513. function translate(number, withoutSuffix, key, isFuture) {
  8514. var result = number + ' ';
  8515. switch (key) {
  8516. case 's':
  8517. return withoutSuffix || isFuture
  8518. ? 'nokkrar sekúndur'
  8519. : 'nokkrum sekúndum';
  8520. case 'ss':
  8521. if (plural(number)) {
  8522. return (
  8523. result +
  8524. (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')
  8525. );
  8526. }
  8527. return result + 'sekúnda';
  8528. case 'm':
  8529. return withoutSuffix ? 'mínúta' : 'mínútu';
  8530. case 'mm':
  8531. if (plural(number)) {
  8532. return (
  8533. result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')
  8534. );
  8535. } else if (withoutSuffix) {
  8536. return result + 'mínúta';
  8537. }
  8538. return result + 'mínútu';
  8539. case 'hh':
  8540. if (plural(number)) {
  8541. return (
  8542. result +
  8543. (withoutSuffix || isFuture
  8544. ? 'klukkustundir'
  8545. : 'klukkustundum')
  8546. );
  8547. }
  8548. return result + 'klukkustund';
  8549. case 'd':
  8550. if (withoutSuffix) {
  8551. return 'dagur';
  8552. }
  8553. return isFuture ? 'dag' : 'degi';
  8554. case 'dd':
  8555. if (plural(number)) {
  8556. if (withoutSuffix) {
  8557. return result + 'dagar';
  8558. }
  8559. return result + (isFuture ? 'daga' : 'dögum');
  8560. } else if (withoutSuffix) {
  8561. return result + 'dagur';
  8562. }
  8563. return result + (isFuture ? 'dag' : 'degi');
  8564. case 'M':
  8565. if (withoutSuffix) {
  8566. return 'mánuður';
  8567. }
  8568. return isFuture ? 'mánuð' : 'mánuði';
  8569. case 'MM':
  8570. if (plural(number)) {
  8571. if (withoutSuffix) {
  8572. return result + 'mánuðir';
  8573. }
  8574. return result + (isFuture ? 'mánuði' : 'mánuðum');
  8575. } else if (withoutSuffix) {
  8576. return result + 'mánuður';
  8577. }
  8578. return result + (isFuture ? 'mánuð' : 'mánuði');
  8579. case 'y':
  8580. return withoutSuffix || isFuture ? 'ár' : 'ári';
  8581. case 'yy':
  8582. if (plural(number)) {
  8583. return result + (withoutSuffix || isFuture ? 'ár' : 'árum');
  8584. }
  8585. return result + (withoutSuffix || isFuture ? 'ár' : 'ári');
  8586. }
  8587. }
  8588. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('is', {
  8589. months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(
  8590. '_'
  8591. ),
  8592. monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),
  8593. weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(
  8594. '_'
  8595. ),
  8596. weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),
  8597. weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),
  8598. longDateFormat: {
  8599. LT: 'H:mm',
  8600. LTS: 'H:mm:ss',
  8601. L: 'DD.MM.YYYY',
  8602. LL: 'D. MMMM YYYY',
  8603. LLL: 'D. MMMM YYYY [kl.] H:mm',
  8604. LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',
  8605. },
  8606. calendar: {
  8607. sameDay: '[í dag kl.] LT',
  8608. nextDay: '[á morgun kl.] LT',
  8609. nextWeek: 'dddd [kl.] LT',
  8610. lastDay: '[í gær kl.] LT',
  8611. lastWeek: '[síðasta] dddd [kl.] LT',
  8612. sameElse: 'L',
  8613. },
  8614. relativeTime: {
  8615. future: 'eftir %s',
  8616. past: 'fyrir %s síðan',
  8617. s: translate,
  8618. ss: translate,
  8619. m: translate,
  8620. mm: translate,
  8621. h: 'klukkustund',
  8622. hh: translate,
  8623. d: translate,
  8624. dd: translate,
  8625. M: translate,
  8626. MM: translate,
  8627. y: translate,
  8628. yy: translate,
  8629. },
  8630. dayOfMonthOrdinalParse: /\d{1,2}\./,
  8631. ordinal: '%d.',
  8632. week: {
  8633. dow: 1, // Monday is the first day of the week.
  8634. doy: 4, // The week that contains Jan 4th is the first week of the year.
  8635. },
  8636. }));
  8637. /***/ }),
  8638. /***/ "./node_modules/moment/dist/locale/it-ch.js":
  8639. /*!**************************************************!*\
  8640. !*** ./node_modules/moment/dist/locale/it-ch.js ***!
  8641. \**************************************************/
  8642. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  8643. "use strict";
  8644. __webpack_require__.r(__webpack_exports__);
  8645. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8646. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  8647. /* harmony export */ });
  8648. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  8649. //! moment.js locale configuration
  8650. //! locale : Italian (Switzerland) [it-ch]
  8651. //! author : xfh : https://github.com/xfh
  8652. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('it-ch', {
  8653. months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
  8654. '_'
  8655. ),
  8656. monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
  8657. weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(
  8658. '_'
  8659. ),
  8660. weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
  8661. weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
  8662. longDateFormat: {
  8663. LT: 'HH:mm',
  8664. LTS: 'HH:mm:ss',
  8665. L: 'DD.MM.YYYY',
  8666. LL: 'D MMMM YYYY',
  8667. LLL: 'D MMMM YYYY HH:mm',
  8668. LLLL: 'dddd D MMMM YYYY HH:mm',
  8669. },
  8670. calendar: {
  8671. sameDay: '[Oggi alle] LT',
  8672. nextDay: '[Domani alle] LT',
  8673. nextWeek: 'dddd [alle] LT',
  8674. lastDay: '[Ieri alle] LT',
  8675. lastWeek: function () {
  8676. switch (this.day()) {
  8677. case 0:
  8678. return '[la scorsa] dddd [alle] LT';
  8679. default:
  8680. return '[lo scorso] dddd [alle] LT';
  8681. }
  8682. },
  8683. sameElse: 'L',
  8684. },
  8685. relativeTime: {
  8686. future: function (s) {
  8687. return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;
  8688. },
  8689. past: '%s fa',
  8690. s: 'alcuni secondi',
  8691. ss: '%d secondi',
  8692. m: 'un minuto',
  8693. mm: '%d minuti',
  8694. h: "un'ora",
  8695. hh: '%d ore',
  8696. d: 'un giorno',
  8697. dd: '%d giorni',
  8698. M: 'un mese',
  8699. MM: '%d mesi',
  8700. y: 'un anno',
  8701. yy: '%d anni',
  8702. },
  8703. dayOfMonthOrdinalParse: /\d{1,2}º/,
  8704. ordinal: '%dº',
  8705. week: {
  8706. dow: 1, // Monday is the first day of the week.
  8707. doy: 4, // The week that contains Jan 4th is the first week of the year.
  8708. },
  8709. }));
  8710. /***/ }),
  8711. /***/ "./node_modules/moment/dist/locale/it.js":
  8712. /*!***********************************************!*\
  8713. !*** ./node_modules/moment/dist/locale/it.js ***!
  8714. \***********************************************/
  8715. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  8716. "use strict";
  8717. __webpack_require__.r(__webpack_exports__);
  8718. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8719. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  8720. /* harmony export */ });
  8721. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  8722. //! moment.js locale configuration
  8723. //! locale : Italian [it]
  8724. //! author : Lorenzo : https://github.com/aliem
  8725. //! author: Mattia Larentis: https://github.com/nostalgiaz
  8726. //! author: Marco : https://github.com/Manfre98
  8727. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('it', {
  8728. months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(
  8729. '_'
  8730. ),
  8731. monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),
  8732. weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(
  8733. '_'
  8734. ),
  8735. weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),
  8736. weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),
  8737. longDateFormat: {
  8738. LT: 'HH:mm',
  8739. LTS: 'HH:mm:ss',
  8740. L: 'DD/MM/YYYY',
  8741. LL: 'D MMMM YYYY',
  8742. LLL: 'D MMMM YYYY HH:mm',
  8743. LLLL: 'dddd D MMMM YYYY HH:mm',
  8744. },
  8745. calendar: {
  8746. sameDay: function () {
  8747. return (
  8748. '[Oggi a' +
  8749. (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
  8750. ']LT'
  8751. );
  8752. },
  8753. nextDay: function () {
  8754. return (
  8755. '[Domani a' +
  8756. (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
  8757. ']LT'
  8758. );
  8759. },
  8760. nextWeek: function () {
  8761. return (
  8762. 'dddd [a' +
  8763. (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
  8764. ']LT'
  8765. );
  8766. },
  8767. lastDay: function () {
  8768. return (
  8769. '[Ieri a' +
  8770. (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : "ll'") +
  8771. ']LT'
  8772. );
  8773. },
  8774. lastWeek: function () {
  8775. switch (this.day()) {
  8776. case 0:
  8777. return (
  8778. '[La scorsa] dddd [a' +
  8779. (this.hours() > 1
  8780. ? 'lle '
  8781. : this.hours() === 0
  8782. ? ' '
  8783. : "ll'") +
  8784. ']LT'
  8785. );
  8786. default:
  8787. return (
  8788. '[Lo scorso] dddd [a' +
  8789. (this.hours() > 1
  8790. ? 'lle '
  8791. : this.hours() === 0
  8792. ? ' '
  8793. : "ll'") +
  8794. ']LT'
  8795. );
  8796. }
  8797. },
  8798. sameElse: 'L',
  8799. },
  8800. relativeTime: {
  8801. future: 'tra %s',
  8802. past: '%s fa',
  8803. s: 'alcuni secondi',
  8804. ss: '%d secondi',
  8805. m: 'un minuto',
  8806. mm: '%d minuti',
  8807. h: "un'ora",
  8808. hh: '%d ore',
  8809. d: 'un giorno',
  8810. dd: '%d giorni',
  8811. w: 'una settimana',
  8812. ww: '%d settimane',
  8813. M: 'un mese',
  8814. MM: '%d mesi',
  8815. y: 'un anno',
  8816. yy: '%d anni',
  8817. },
  8818. dayOfMonthOrdinalParse: /\d{1,2}º/,
  8819. ordinal: '%dº',
  8820. week: {
  8821. dow: 1, // Monday is the first day of the week.
  8822. doy: 4, // The week that contains Jan 4th is the first week of the year.
  8823. },
  8824. }));
  8825. /***/ }),
  8826. /***/ "./node_modules/moment/dist/locale/ja.js":
  8827. /*!***********************************************!*\
  8828. !*** ./node_modules/moment/dist/locale/ja.js ***!
  8829. \***********************************************/
  8830. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  8831. "use strict";
  8832. __webpack_require__.r(__webpack_exports__);
  8833. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8834. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  8835. /* harmony export */ });
  8836. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  8837. //! moment.js locale configuration
  8838. //! locale : Japanese [ja]
  8839. //! author : LI Long : https://github.com/baryon
  8840. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ja', {
  8841. eras: [
  8842. {
  8843. since: '2019-05-01',
  8844. offset: 1,
  8845. name: '令和',
  8846. narrow: '㋿',
  8847. abbr: 'R',
  8848. },
  8849. {
  8850. since: '1989-01-08',
  8851. until: '2019-04-30',
  8852. offset: 1,
  8853. name: '平成',
  8854. narrow: '㍻',
  8855. abbr: 'H',
  8856. },
  8857. {
  8858. since: '1926-12-25',
  8859. until: '1989-01-07',
  8860. offset: 1,
  8861. name: '昭和',
  8862. narrow: '㍼',
  8863. abbr: 'S',
  8864. },
  8865. {
  8866. since: '1912-07-30',
  8867. until: '1926-12-24',
  8868. offset: 1,
  8869. name: '大正',
  8870. narrow: '㍽',
  8871. abbr: 'T',
  8872. },
  8873. {
  8874. since: '1873-01-01',
  8875. until: '1912-07-29',
  8876. offset: 6,
  8877. name: '明治',
  8878. narrow: '㍾',
  8879. abbr: 'M',
  8880. },
  8881. {
  8882. since: '0001-01-01',
  8883. until: '1873-12-31',
  8884. offset: 1,
  8885. name: '西暦',
  8886. narrow: 'AD',
  8887. abbr: 'AD',
  8888. },
  8889. {
  8890. since: '0000-12-31',
  8891. until: -Infinity,
  8892. offset: 1,
  8893. name: '紀元前',
  8894. narrow: 'BC',
  8895. abbr: 'BC',
  8896. },
  8897. ],
  8898. eraYearOrdinalRegex: /(元|\d+)年/,
  8899. eraYearOrdinalParse: function (input, match) {
  8900. return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);
  8901. },
  8902. months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
  8903. monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
  8904. '_'
  8905. ),
  8906. weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),
  8907. weekdaysShort: '日_月_火_水_木_金_土'.split('_'),
  8908. weekdaysMin: '日_月_火_水_木_金_土'.split('_'),
  8909. longDateFormat: {
  8910. LT: 'HH:mm',
  8911. LTS: 'HH:mm:ss',
  8912. L: 'YYYY/MM/DD',
  8913. LL: 'YYYY年M月D日',
  8914. LLL: 'YYYY年M月D日 HH:mm',
  8915. LLLL: 'YYYY年M月D日 dddd HH:mm',
  8916. l: 'YYYY/MM/DD',
  8917. ll: 'YYYY年M月D日',
  8918. lll: 'YYYY年M月D日 HH:mm',
  8919. llll: 'YYYY年M月D日(ddd) HH:mm',
  8920. },
  8921. meridiemParse: /午前|午後/i,
  8922. isPM: function (input) {
  8923. return input === '午後';
  8924. },
  8925. meridiem: function (hour, minute, isLower) {
  8926. if (hour < 12) {
  8927. return '午前';
  8928. } else {
  8929. return '午後';
  8930. }
  8931. },
  8932. calendar: {
  8933. sameDay: '[今日] LT',
  8934. nextDay: '[明日] LT',
  8935. nextWeek: function (now) {
  8936. if (now.week() !== this.week()) {
  8937. return '[来週]dddd LT';
  8938. } else {
  8939. return 'dddd LT';
  8940. }
  8941. },
  8942. lastDay: '[昨日] LT',
  8943. lastWeek: function (now) {
  8944. if (this.week() !== now.week()) {
  8945. return '[先週]dddd LT';
  8946. } else {
  8947. return 'dddd LT';
  8948. }
  8949. },
  8950. sameElse: 'L',
  8951. },
  8952. dayOfMonthOrdinalParse: /\d{1,2}日/,
  8953. ordinal: function (number, period) {
  8954. switch (period) {
  8955. case 'y':
  8956. return number === 1 ? '元年' : number + '年';
  8957. case 'd':
  8958. case 'D':
  8959. case 'DDD':
  8960. return number + '日';
  8961. default:
  8962. return number;
  8963. }
  8964. },
  8965. relativeTime: {
  8966. future: '%s後',
  8967. past: '%s前',
  8968. s: '数秒',
  8969. ss: '%d秒',
  8970. m: '1分',
  8971. mm: '%d分',
  8972. h: '1時間',
  8973. hh: '%d時間',
  8974. d: '1日',
  8975. dd: '%d日',
  8976. M: '1ヶ月',
  8977. MM: '%dヶ月',
  8978. y: '1年',
  8979. yy: '%d年',
  8980. },
  8981. }));
  8982. /***/ }),
  8983. /***/ "./node_modules/moment/dist/locale/jv.js":
  8984. /*!***********************************************!*\
  8985. !*** ./node_modules/moment/dist/locale/jv.js ***!
  8986. \***********************************************/
  8987. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  8988. "use strict";
  8989. __webpack_require__.r(__webpack_exports__);
  8990. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  8991. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  8992. /* harmony export */ });
  8993. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  8994. //! moment.js locale configuration
  8995. //! locale : Javanese [jv]
  8996. //! author : Rony Lantip : https://github.com/lantip
  8997. //! reference: http://jv.wikipedia.org/wiki/Basa_Jawa
  8998. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('jv', {
  8999. months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(
  9000. '_'
  9001. ),
  9002. monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),
  9003. weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),
  9004. weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),
  9005. weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),
  9006. longDateFormat: {
  9007. LT: 'HH.mm',
  9008. LTS: 'HH.mm.ss',
  9009. L: 'DD/MM/YYYY',
  9010. LL: 'D MMMM YYYY',
  9011. LLL: 'D MMMM YYYY [pukul] HH.mm',
  9012. LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
  9013. },
  9014. meridiemParse: /enjing|siyang|sonten|ndalu/,
  9015. meridiemHour: function (hour, meridiem) {
  9016. if (hour === 12) {
  9017. hour = 0;
  9018. }
  9019. if (meridiem === 'enjing') {
  9020. return hour;
  9021. } else if (meridiem === 'siyang') {
  9022. return hour >= 11 ? hour : hour + 12;
  9023. } else if (meridiem === 'sonten' || meridiem === 'ndalu') {
  9024. return hour + 12;
  9025. }
  9026. },
  9027. meridiem: function (hours, minutes, isLower) {
  9028. if (hours < 11) {
  9029. return 'enjing';
  9030. } else if (hours < 15) {
  9031. return 'siyang';
  9032. } else if (hours < 19) {
  9033. return 'sonten';
  9034. } else {
  9035. return 'ndalu';
  9036. }
  9037. },
  9038. calendar: {
  9039. sameDay: '[Dinten puniko pukul] LT',
  9040. nextDay: '[Mbenjang pukul] LT',
  9041. nextWeek: 'dddd [pukul] LT',
  9042. lastDay: '[Kala wingi pukul] LT',
  9043. lastWeek: 'dddd [kepengker pukul] LT',
  9044. sameElse: 'L',
  9045. },
  9046. relativeTime: {
  9047. future: 'wonten ing %s',
  9048. past: '%s ingkang kepengker',
  9049. s: 'sawetawis detik',
  9050. ss: '%d detik',
  9051. m: 'setunggal menit',
  9052. mm: '%d menit',
  9053. h: 'setunggal jam',
  9054. hh: '%d jam',
  9055. d: 'sedinten',
  9056. dd: '%d dinten',
  9057. M: 'sewulan',
  9058. MM: '%d wulan',
  9059. y: 'setaun',
  9060. yy: '%d taun',
  9061. },
  9062. week: {
  9063. dow: 1, // Monday is the first day of the week.
  9064. doy: 7, // The week that contains Jan 7th is the first week of the year.
  9065. },
  9066. }));
  9067. /***/ }),
  9068. /***/ "./node_modules/moment/dist/locale/ka.js":
  9069. /*!***********************************************!*\
  9070. !*** ./node_modules/moment/dist/locale/ka.js ***!
  9071. \***********************************************/
  9072. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  9073. "use strict";
  9074. __webpack_require__.r(__webpack_exports__);
  9075. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  9076. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  9077. /* harmony export */ });
  9078. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  9079. //! moment.js locale configuration
  9080. //! locale : Georgian [ka]
  9081. //! author : Irakli Janiashvili : https://github.com/IrakliJani
  9082. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ka', {
  9083. months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(
  9084. '_'
  9085. ),
  9086. monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),
  9087. weekdays: {
  9088. standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(
  9089. '_'
  9090. ),
  9091. format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(
  9092. '_'
  9093. ),
  9094. isFormat: /(წინა|შემდეგ)/,
  9095. },
  9096. weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),
  9097. weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),
  9098. longDateFormat: {
  9099. LT: 'HH:mm',
  9100. LTS: 'HH:mm:ss',
  9101. L: 'DD/MM/YYYY',
  9102. LL: 'D MMMM YYYY',
  9103. LLL: 'D MMMM YYYY HH:mm',
  9104. LLLL: 'dddd, D MMMM YYYY HH:mm',
  9105. },
  9106. calendar: {
  9107. sameDay: '[დღეს] LT[-ზე]',
  9108. nextDay: '[ხვალ] LT[-ზე]',
  9109. lastDay: '[გუშინ] LT[-ზე]',
  9110. nextWeek: '[შემდეგ] dddd LT[-ზე]',
  9111. lastWeek: '[წინა] dddd LT-ზე',
  9112. sameElse: 'L',
  9113. },
  9114. relativeTime: {
  9115. future: function (s) {
  9116. return s.replace(/(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/, function (
  9117. $0,
  9118. $1,
  9119. $2
  9120. ) {
  9121. return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';
  9122. });
  9123. },
  9124. past: function (s) {
  9125. if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {
  9126. return s.replace(/(ი|ე)$/, 'ის წინ');
  9127. }
  9128. if (/წელი/.test(s)) {
  9129. return s.replace(/წელი$/, 'წლის წინ');
  9130. }
  9131. return s;
  9132. },
  9133. s: 'რამდენიმე წამი',
  9134. ss: '%d წამი',
  9135. m: 'წუთი',
  9136. mm: '%d წუთი',
  9137. h: 'საათი',
  9138. hh: '%d საათი',
  9139. d: 'დღე',
  9140. dd: '%d დღე',
  9141. M: 'თვე',
  9142. MM: '%d თვე',
  9143. y: 'წელი',
  9144. yy: '%d წელი',
  9145. },
  9146. dayOfMonthOrdinalParse: /0|1-ლი|მე-\d{1,2}|\d{1,2}-ე/,
  9147. ordinal: function (number) {
  9148. if (number === 0) {
  9149. return number;
  9150. }
  9151. if (number === 1) {
  9152. return number + '-ლი';
  9153. }
  9154. if (
  9155. number < 20 ||
  9156. (number <= 100 && number % 20 === 0) ||
  9157. number % 100 === 0
  9158. ) {
  9159. return 'მე-' + number;
  9160. }
  9161. return number + '-ე';
  9162. },
  9163. week: {
  9164. dow: 1,
  9165. doy: 7,
  9166. },
  9167. }));
  9168. /***/ }),
  9169. /***/ "./node_modules/moment/dist/locale/kk.js":
  9170. /*!***********************************************!*\
  9171. !*** ./node_modules/moment/dist/locale/kk.js ***!
  9172. \***********************************************/
  9173. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  9174. "use strict";
  9175. __webpack_require__.r(__webpack_exports__);
  9176. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  9177. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  9178. /* harmony export */ });
  9179. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  9180. //! moment.js locale configuration
  9181. //! locale : Kazakh [kk]
  9182. //! authors : Nurlan Rakhimzhanov : https://github.com/nurlan
  9183. var suffixes = {
  9184. 0: '-ші',
  9185. 1: '-ші',
  9186. 2: '-ші',
  9187. 3: '-ші',
  9188. 4: '-ші',
  9189. 5: '-ші',
  9190. 6: '-шы',
  9191. 7: '-ші',
  9192. 8: '-ші',
  9193. 9: '-шы',
  9194. 10: '-шы',
  9195. 20: '-шы',
  9196. 30: '-шы',
  9197. 40: '-шы',
  9198. 50: '-ші',
  9199. 60: '-шы',
  9200. 70: '-ші',
  9201. 80: '-ші',
  9202. 90: '-шы',
  9203. 100: '-ші',
  9204. };
  9205. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('kk', {
  9206. months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(
  9207. '_'
  9208. ),
  9209. monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),
  9210. weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(
  9211. '_'
  9212. ),
  9213. weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),
  9214. weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),
  9215. longDateFormat: {
  9216. LT: 'HH:mm',
  9217. LTS: 'HH:mm:ss',
  9218. L: 'DD.MM.YYYY',
  9219. LL: 'D MMMM YYYY',
  9220. LLL: 'D MMMM YYYY HH:mm',
  9221. LLLL: 'dddd, D MMMM YYYY HH:mm',
  9222. },
  9223. calendar: {
  9224. sameDay: '[Бүгін сағат] LT',
  9225. nextDay: '[Ертең сағат] LT',
  9226. nextWeek: 'dddd [сағат] LT',
  9227. lastDay: '[Кеше сағат] LT',
  9228. lastWeek: '[Өткен аптаның] dddd [сағат] LT',
  9229. sameElse: 'L',
  9230. },
  9231. relativeTime: {
  9232. future: '%s ішінде',
  9233. past: '%s бұрын',
  9234. s: 'бірнеше секунд',
  9235. ss: '%d секунд',
  9236. m: 'бір минут',
  9237. mm: '%d минут',
  9238. h: 'бір сағат',
  9239. hh: '%d сағат',
  9240. d: 'бір күн',
  9241. dd: '%d күн',
  9242. M: 'бір ай',
  9243. MM: '%d ай',
  9244. y: 'бір жыл',
  9245. yy: '%d жыл',
  9246. },
  9247. dayOfMonthOrdinalParse: /\d{1,2}-(ші|шы)/,
  9248. ordinal: function (number) {
  9249. var a = number % 10,
  9250. b = number >= 100 ? 100 : null;
  9251. return number + (suffixes[number] || suffixes[a] || suffixes[b]);
  9252. },
  9253. week: {
  9254. dow: 1, // Monday is the first day of the week.
  9255. doy: 7, // The week that contains Jan 7th is the first week of the year.
  9256. },
  9257. }));
  9258. /***/ }),
  9259. /***/ "./node_modules/moment/dist/locale/km.js":
  9260. /*!***********************************************!*\
  9261. !*** ./node_modules/moment/dist/locale/km.js ***!
  9262. \***********************************************/
  9263. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  9264. "use strict";
  9265. __webpack_require__.r(__webpack_exports__);
  9266. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  9267. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  9268. /* harmony export */ });
  9269. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  9270. //! moment.js locale configuration
  9271. //! locale : Cambodian [km]
  9272. //! author : Kruy Vanna : https://github.com/kruyvanna
  9273. var symbolMap = {
  9274. 1: '១',
  9275. 2: '២',
  9276. 3: '៣',
  9277. 4: '៤',
  9278. 5: '៥',
  9279. 6: '៦',
  9280. 7: '៧',
  9281. 8: '៨',
  9282. 9: '៩',
  9283. 0: '០',
  9284. },
  9285. numberMap = {
  9286. '១': '1',
  9287. '២': '2',
  9288. '៣': '3',
  9289. '៤': '4',
  9290. '៥': '5',
  9291. '៦': '6',
  9292. '៧': '7',
  9293. '៨': '8',
  9294. '៩': '9',
  9295. '០': '0',
  9296. };
  9297. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('km', {
  9298. months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
  9299. '_'
  9300. ),
  9301. monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(
  9302. '_'
  9303. ),
  9304. weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),
  9305. weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
  9306. weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),
  9307. weekdaysParseExact: true,
  9308. longDateFormat: {
  9309. LT: 'HH:mm',
  9310. LTS: 'HH:mm:ss',
  9311. L: 'DD/MM/YYYY',
  9312. LL: 'D MMMM YYYY',
  9313. LLL: 'D MMMM YYYY HH:mm',
  9314. LLLL: 'dddd, D MMMM YYYY HH:mm',
  9315. },
  9316. meridiemParse: /ព្រឹក|ល្ងាច/,
  9317. isPM: function (input) {
  9318. return input === 'ល្ងាច';
  9319. },
  9320. meridiem: function (hour, minute, isLower) {
  9321. if (hour < 12) {
  9322. return 'ព្រឹក';
  9323. } else {
  9324. return 'ល្ងាច';
  9325. }
  9326. },
  9327. calendar: {
  9328. sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',
  9329. nextDay: '[ស្អែក ម៉ោង] LT',
  9330. nextWeek: 'dddd [ម៉ោង] LT',
  9331. lastDay: '[ម្សិលមិញ ម៉ោង] LT',
  9332. lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',
  9333. sameElse: 'L',
  9334. },
  9335. relativeTime: {
  9336. future: '%sទៀត',
  9337. past: '%sមុន',
  9338. s: 'ប៉ុន្មានវិនាទី',
  9339. ss: '%d វិនាទី',
  9340. m: 'មួយនាទី',
  9341. mm: '%d នាទី',
  9342. h: 'មួយម៉ោង',
  9343. hh: '%d ម៉ោង',
  9344. d: 'មួយថ្ងៃ',
  9345. dd: '%d ថ្ងៃ',
  9346. M: 'មួយខែ',
  9347. MM: '%d ខែ',
  9348. y: 'មួយឆ្នាំ',
  9349. yy: '%d ឆ្នាំ',
  9350. },
  9351. dayOfMonthOrdinalParse: /ទី\d{1,2}/,
  9352. ordinal: 'ទី%d',
  9353. preparse: function (string) {
  9354. return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {
  9355. return numberMap[match];
  9356. });
  9357. },
  9358. postformat: function (string) {
  9359. return string.replace(/\d/g, function (match) {
  9360. return symbolMap[match];
  9361. });
  9362. },
  9363. week: {
  9364. dow: 1, // Monday is the first day of the week.
  9365. doy: 4, // The week that contains Jan 4th is the first week of the year.
  9366. },
  9367. }));
  9368. /***/ }),
  9369. /***/ "./node_modules/moment/dist/locale/kn.js":
  9370. /*!***********************************************!*\
  9371. !*** ./node_modules/moment/dist/locale/kn.js ***!
  9372. \***********************************************/
  9373. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  9374. "use strict";
  9375. __webpack_require__.r(__webpack_exports__);
  9376. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  9377. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  9378. /* harmony export */ });
  9379. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  9380. //! moment.js locale configuration
  9381. //! locale : Kannada [kn]
  9382. //! author : Rajeev Naik : https://github.com/rajeevnaikte
  9383. var symbolMap = {
  9384. 1: '೧',
  9385. 2: '೨',
  9386. 3: '೩',
  9387. 4: '೪',
  9388. 5: '೫',
  9389. 6: '೬',
  9390. 7: '೭',
  9391. 8: '೮',
  9392. 9: '೯',
  9393. 0: '೦',
  9394. },
  9395. numberMap = {
  9396. '೧': '1',
  9397. '೨': '2',
  9398. '೩': '3',
  9399. '೪': '4',
  9400. '೫': '5',
  9401. '೬': '6',
  9402. '೭': '7',
  9403. '೮': '8',
  9404. '೯': '9',
  9405. '೦': '0',
  9406. };
  9407. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('kn', {
  9408. months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(
  9409. '_'
  9410. ),
  9411. monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(
  9412. '_'
  9413. ),
  9414. monthsParseExact: true,
  9415. weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(
  9416. '_'
  9417. ),
  9418. weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),
  9419. weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),
  9420. longDateFormat: {
  9421. LT: 'A h:mm',
  9422. LTS: 'A h:mm:ss',
  9423. L: 'DD/MM/YYYY',
  9424. LL: 'D MMMM YYYY',
  9425. LLL: 'D MMMM YYYY, A h:mm',
  9426. LLLL: 'dddd, D MMMM YYYY, A h:mm',
  9427. },
  9428. calendar: {
  9429. sameDay: '[ಇಂದು] LT',
  9430. nextDay: '[ನಾಳೆ] LT',
  9431. nextWeek: 'dddd, LT',
  9432. lastDay: '[ನಿನ್ನೆ] LT',
  9433. lastWeek: '[ಕೊನೆಯ] dddd, LT',
  9434. sameElse: 'L',
  9435. },
  9436. relativeTime: {
  9437. future: '%s ನಂತರ',
  9438. past: '%s ಹಿಂದೆ',
  9439. s: 'ಕೆಲವು ಕ್ಷಣಗಳು',
  9440. ss: '%d ಸೆಕೆಂಡುಗಳು',
  9441. m: 'ಒಂದು ನಿಮಿಷ',
  9442. mm: '%d ನಿಮಿಷ',
  9443. h: 'ಒಂದು ಗಂಟೆ',
  9444. hh: '%d ಗಂಟೆ',
  9445. d: 'ಒಂದು ದಿನ',
  9446. dd: '%d ದಿನ',
  9447. M: 'ಒಂದು ತಿಂಗಳು',
  9448. MM: '%d ತಿಂಗಳು',
  9449. y: 'ಒಂದು ವರ್ಷ',
  9450. yy: '%d ವರ್ಷ',
  9451. },
  9452. preparse: function (string) {
  9453. return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {
  9454. return numberMap[match];
  9455. });
  9456. },
  9457. postformat: function (string) {
  9458. return string.replace(/\d/g, function (match) {
  9459. return symbolMap[match];
  9460. });
  9461. },
  9462. meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,
  9463. meridiemHour: function (hour, meridiem) {
  9464. if (hour === 12) {
  9465. hour = 0;
  9466. }
  9467. if (meridiem === 'ರಾತ್ರಿ') {
  9468. return hour < 4 ? hour : hour + 12;
  9469. } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {
  9470. return hour;
  9471. } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {
  9472. return hour >= 10 ? hour : hour + 12;
  9473. } else if (meridiem === 'ಸಂಜೆ') {
  9474. return hour + 12;
  9475. }
  9476. },
  9477. meridiem: function (hour, minute, isLower) {
  9478. if (hour < 4) {
  9479. return 'ರಾತ್ರಿ';
  9480. } else if (hour < 10) {
  9481. return 'ಬೆಳಿಗ್ಗೆ';
  9482. } else if (hour < 17) {
  9483. return 'ಮಧ್ಯಾಹ್ನ';
  9484. } else if (hour < 20) {
  9485. return 'ಸಂಜೆ';
  9486. } else {
  9487. return 'ರಾತ್ರಿ';
  9488. }
  9489. },
  9490. dayOfMonthOrdinalParse: /\d{1,2}(ನೇ)/,
  9491. ordinal: function (number) {
  9492. return number + 'ನೇ';
  9493. },
  9494. week: {
  9495. dow: 0, // Sunday is the first day of the week.
  9496. doy: 6, // The week that contains Jan 6th is the first week of the year.
  9497. },
  9498. }));
  9499. /***/ }),
  9500. /***/ "./node_modules/moment/dist/locale/ko.js":
  9501. /*!***********************************************!*\
  9502. !*** ./node_modules/moment/dist/locale/ko.js ***!
  9503. \***********************************************/
  9504. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  9505. "use strict";
  9506. __webpack_require__.r(__webpack_exports__);
  9507. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  9508. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  9509. /* harmony export */ });
  9510. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  9511. //! moment.js locale configuration
  9512. //! locale : Korean [ko]
  9513. //! author : Kyungwook, Park : https://github.com/kyungw00k
  9514. //! author : Jeeeyul Lee <jeeeyul@gmail.com>
  9515. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ko', {
  9516. months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),
  9517. monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(
  9518. '_'
  9519. ),
  9520. weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),
  9521. weekdaysShort: '일_월_화_수_목_금_토'.split('_'),
  9522. weekdaysMin: '일_월_화_수_목_금_토'.split('_'),
  9523. longDateFormat: {
  9524. LT: 'A h:mm',
  9525. LTS: 'A h:mm:ss',
  9526. L: 'YYYY.MM.DD.',
  9527. LL: 'YYYY년 MMMM D일',
  9528. LLL: 'YYYY년 MMMM D일 A h:mm',
  9529. LLLL: 'YYYY년 MMMM D일 dddd A h:mm',
  9530. l: 'YYYY.MM.DD.',
  9531. ll: 'YYYY년 MMMM D일',
  9532. lll: 'YYYY년 MMMM D일 A h:mm',
  9533. llll: 'YYYY년 MMMM D일 dddd A h:mm',
  9534. },
  9535. calendar: {
  9536. sameDay: '오늘 LT',
  9537. nextDay: '내일 LT',
  9538. nextWeek: 'dddd LT',
  9539. lastDay: '어제 LT',
  9540. lastWeek: '지난주 dddd LT',
  9541. sameElse: 'L',
  9542. },
  9543. relativeTime: {
  9544. future: '%s 후',
  9545. past: '%s 전',
  9546. s: '몇 초',
  9547. ss: '%d초',
  9548. m: '1분',
  9549. mm: '%d분',
  9550. h: '한 시간',
  9551. hh: '%d시간',
  9552. d: '하루',
  9553. dd: '%d일',
  9554. M: '한 달',
  9555. MM: '%d달',
  9556. y: '일 년',
  9557. yy: '%d년',
  9558. },
  9559. dayOfMonthOrdinalParse: /\d{1,2}(일|월|주)/,
  9560. ordinal: function (number, period) {
  9561. switch (period) {
  9562. case 'd':
  9563. case 'D':
  9564. case 'DDD':
  9565. return number + '일';
  9566. case 'M':
  9567. return number + '월';
  9568. case 'w':
  9569. case 'W':
  9570. return number + '주';
  9571. default:
  9572. return number;
  9573. }
  9574. },
  9575. meridiemParse: /오전|오후/,
  9576. isPM: function (token) {
  9577. return token === '오후';
  9578. },
  9579. meridiem: function (hour, minute, isUpper) {
  9580. return hour < 12 ? '오전' : '오후';
  9581. },
  9582. }));
  9583. /***/ }),
  9584. /***/ "./node_modules/moment/dist/locale/ku.js":
  9585. /*!***********************************************!*\
  9586. !*** ./node_modules/moment/dist/locale/ku.js ***!
  9587. \***********************************************/
  9588. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  9589. "use strict";
  9590. __webpack_require__.r(__webpack_exports__);
  9591. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  9592. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  9593. /* harmony export */ });
  9594. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  9595. //! moment.js locale configuration
  9596. //! locale : Kurdish [ku]
  9597. //! author : Shahram Mebashar : https://github.com/ShahramMebashar
  9598. var symbolMap = {
  9599. 1: '١',
  9600. 2: '٢',
  9601. 3: '٣',
  9602. 4: '٤',
  9603. 5: '٥',
  9604. 6: '٦',
  9605. 7: '٧',
  9606. 8: '٨',
  9607. 9: '٩',
  9608. 0: '٠',
  9609. },
  9610. numberMap = {
  9611. '١': '1',
  9612. '٢': '2',
  9613. '٣': '3',
  9614. '٤': '4',
  9615. '٥': '5',
  9616. '٦': '6',
  9617. '٧': '7',
  9618. '٨': '8',
  9619. '٩': '9',
  9620. '٠': '0',
  9621. },
  9622. months = [
  9623. 'کانونی دووەم',
  9624. 'شوبات',
  9625. 'ئازار',
  9626. 'نیسان',
  9627. 'ئایار',
  9628. 'حوزەیران',
  9629. 'تەمموز',
  9630. 'ئاب',
  9631. 'ئەیلوول',
  9632. 'تشرینی یەكەم',
  9633. 'تشرینی دووەم',
  9634. 'كانونی یەکەم',
  9635. ];
  9636. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ku', {
  9637. months: months,
  9638. monthsShort: months,
  9639. weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(
  9640. '_'
  9641. ),
  9642. weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split(
  9643. '_'
  9644. ),
  9645. weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),
  9646. weekdaysParseExact: true,
  9647. longDateFormat: {
  9648. LT: 'HH:mm',
  9649. LTS: 'HH:mm:ss',
  9650. L: 'DD/MM/YYYY',
  9651. LL: 'D MMMM YYYY',
  9652. LLL: 'D MMMM YYYY HH:mm',
  9653. LLLL: 'dddd, D MMMM YYYY HH:mm',
  9654. },
  9655. meridiemParse: /ئێواره‌|به‌یانی/,
  9656. isPM: function (input) {
  9657. return /ئێواره‌/.test(input);
  9658. },
  9659. meridiem: function (hour, minute, isLower) {
  9660. if (hour < 12) {
  9661. return 'به‌یانی';
  9662. } else {
  9663. return 'ئێواره‌';
  9664. }
  9665. },
  9666. calendar: {
  9667. sameDay: '[ئه‌مرۆ كاتژمێر] LT',
  9668. nextDay: '[به‌یانی كاتژمێر] LT',
  9669. nextWeek: 'dddd [كاتژمێر] LT',
  9670. lastDay: '[دوێنێ كاتژمێر] LT',
  9671. lastWeek: 'dddd [كاتژمێر] LT',
  9672. sameElse: 'L',
  9673. },
  9674. relativeTime: {
  9675. future: 'له‌ %s',
  9676. past: '%s',
  9677. s: 'چه‌ند چركه‌یه‌ك',
  9678. ss: 'چركه‌ %d',
  9679. m: 'یه‌ك خوله‌ك',
  9680. mm: '%d خوله‌ك',
  9681. h: 'یه‌ك كاتژمێر',
  9682. hh: '%d كاتژمێر',
  9683. d: 'یه‌ك ڕۆژ',
  9684. dd: '%d ڕۆژ',
  9685. M: 'یه‌ك مانگ',
  9686. MM: '%d مانگ',
  9687. y: 'یه‌ك ساڵ',
  9688. yy: '%d ساڵ',
  9689. },
  9690. preparse: function (string) {
  9691. return string
  9692. .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {
  9693. return numberMap[match];
  9694. })
  9695. .replace(/،/g, ',');
  9696. },
  9697. postformat: function (string) {
  9698. return string
  9699. .replace(/\d/g, function (match) {
  9700. return symbolMap[match];
  9701. })
  9702. .replace(/,/g, '،');
  9703. },
  9704. week: {
  9705. dow: 6, // Saturday is the first day of the week.
  9706. doy: 12, // The week that contains Jan 12th is the first week of the year.
  9707. },
  9708. }));
  9709. /***/ }),
  9710. /***/ "./node_modules/moment/dist/locale/ky.js":
  9711. /*!***********************************************!*\
  9712. !*** ./node_modules/moment/dist/locale/ky.js ***!
  9713. \***********************************************/
  9714. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  9715. "use strict";
  9716. __webpack_require__.r(__webpack_exports__);
  9717. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  9718. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  9719. /* harmony export */ });
  9720. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  9721. //! moment.js locale configuration
  9722. //! locale : Kyrgyz [ky]
  9723. //! author : Chyngyz Arystan uulu : https://github.com/chyngyz
  9724. var suffixes = {
  9725. 0: '-чү',
  9726. 1: '-чи',
  9727. 2: '-чи',
  9728. 3: '-чү',
  9729. 4: '-чү',
  9730. 5: '-чи',
  9731. 6: '-чы',
  9732. 7: '-чи',
  9733. 8: '-чи',
  9734. 9: '-чу',
  9735. 10: '-чу',
  9736. 20: '-чы',
  9737. 30: '-чу',
  9738. 40: '-чы',
  9739. 50: '-чү',
  9740. 60: '-чы',
  9741. 70: '-чи',
  9742. 80: '-чи',
  9743. 90: '-чу',
  9744. 100: '-чү',
  9745. };
  9746. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ky', {
  9747. months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(
  9748. '_'
  9749. ),
  9750. monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(
  9751. '_'
  9752. ),
  9753. weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(
  9754. '_'
  9755. ),
  9756. weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),
  9757. weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),
  9758. longDateFormat: {
  9759. LT: 'HH:mm',
  9760. LTS: 'HH:mm:ss',
  9761. L: 'DD.MM.YYYY',
  9762. LL: 'D MMMM YYYY',
  9763. LLL: 'D MMMM YYYY HH:mm',
  9764. LLLL: 'dddd, D MMMM YYYY HH:mm',
  9765. },
  9766. calendar: {
  9767. sameDay: '[Бүгүн саат] LT',
  9768. nextDay: '[Эртең саат] LT',
  9769. nextWeek: 'dddd [саат] LT',
  9770. lastDay: '[Кечээ саат] LT',
  9771. lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',
  9772. sameElse: 'L',
  9773. },
  9774. relativeTime: {
  9775. future: '%s ичинде',
  9776. past: '%s мурун',
  9777. s: 'бирнече секунд',
  9778. ss: '%d секунд',
  9779. m: 'бир мүнөт',
  9780. mm: '%d мүнөт',
  9781. h: 'бир саат',
  9782. hh: '%d саат',
  9783. d: 'бир күн',
  9784. dd: '%d күн',
  9785. M: 'бир ай',
  9786. MM: '%d ай',
  9787. y: 'бир жыл',
  9788. yy: '%d жыл',
  9789. },
  9790. dayOfMonthOrdinalParse: /\d{1,2}-(чи|чы|чү|чу)/,
  9791. ordinal: function (number) {
  9792. var a = number % 10,
  9793. b = number >= 100 ? 100 : null;
  9794. return number + (suffixes[number] || suffixes[a] || suffixes[b]);
  9795. },
  9796. week: {
  9797. dow: 1, // Monday is the first day of the week.
  9798. doy: 7, // The week that contains Jan 7th is the first week of the year.
  9799. },
  9800. }));
  9801. /***/ }),
  9802. /***/ "./node_modules/moment/dist/locale/lb.js":
  9803. /*!***********************************************!*\
  9804. !*** ./node_modules/moment/dist/locale/lb.js ***!
  9805. \***********************************************/
  9806. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  9807. "use strict";
  9808. __webpack_require__.r(__webpack_exports__);
  9809. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  9810. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  9811. /* harmony export */ });
  9812. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  9813. //! moment.js locale configuration
  9814. //! locale : Luxembourgish [lb]
  9815. //! author : mweimerskirch : https://github.com/mweimerskirch
  9816. //! author : David Raison : https://github.com/kwisatz
  9817. function processRelativeTime(number, withoutSuffix, key, isFuture) {
  9818. var format = {
  9819. m: ['eng Minutt', 'enger Minutt'],
  9820. h: ['eng Stonn', 'enger Stonn'],
  9821. d: ['een Dag', 'engem Dag'],
  9822. M: ['ee Mount', 'engem Mount'],
  9823. y: ['ee Joer', 'engem Joer'],
  9824. };
  9825. return withoutSuffix ? format[key][0] : format[key][1];
  9826. }
  9827. function processFutureTime(string) {
  9828. var number = string.substr(0, string.indexOf(' '));
  9829. if (eifelerRegelAppliesToNumber(number)) {
  9830. return 'a ' + string;
  9831. }
  9832. return 'an ' + string;
  9833. }
  9834. function processPastTime(string) {
  9835. var number = string.substr(0, string.indexOf(' '));
  9836. if (eifelerRegelAppliesToNumber(number)) {
  9837. return 'viru ' + string;
  9838. }
  9839. return 'virun ' + string;
  9840. }
  9841. /**
  9842. * Returns true if the word before the given number loses the '-n' ending.
  9843. * e.g. 'an 10 Deeg' but 'a 5 Deeg'
  9844. *
  9845. * @param number {integer}
  9846. * @returns {boolean}
  9847. */
  9848. function eifelerRegelAppliesToNumber(number) {
  9849. number = parseInt(number, 10);
  9850. if (isNaN(number)) {
  9851. return false;
  9852. }
  9853. if (number < 0) {
  9854. // Negative Number --> always true
  9855. return true;
  9856. } else if (number < 10) {
  9857. // Only 1 digit
  9858. if (4 <= number && number <= 7) {
  9859. return true;
  9860. }
  9861. return false;
  9862. } else if (number < 100) {
  9863. // 2 digits
  9864. var lastDigit = number % 10,
  9865. firstDigit = number / 10;
  9866. if (lastDigit === 0) {
  9867. return eifelerRegelAppliesToNumber(firstDigit);
  9868. }
  9869. return eifelerRegelAppliesToNumber(lastDigit);
  9870. } else if (number < 10000) {
  9871. // 3 or 4 digits --> recursively check first digit
  9872. while (number >= 10) {
  9873. number = number / 10;
  9874. }
  9875. return eifelerRegelAppliesToNumber(number);
  9876. } else {
  9877. // Anything larger than 4 digits: recursively check first n-3 digits
  9878. number = number / 1000;
  9879. return eifelerRegelAppliesToNumber(number);
  9880. }
  9881. }
  9882. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('lb', {
  9883. months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(
  9884. '_'
  9885. ),
  9886. monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(
  9887. '_'
  9888. ),
  9889. monthsParseExact: true,
  9890. weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(
  9891. '_'
  9892. ),
  9893. weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),
  9894. weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),
  9895. weekdaysParseExact: true,
  9896. longDateFormat: {
  9897. LT: 'H:mm [Auer]',
  9898. LTS: 'H:mm:ss [Auer]',
  9899. L: 'DD.MM.YYYY',
  9900. LL: 'D. MMMM YYYY',
  9901. LLL: 'D. MMMM YYYY H:mm [Auer]',
  9902. LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',
  9903. },
  9904. calendar: {
  9905. sameDay: '[Haut um] LT',
  9906. sameElse: 'L',
  9907. nextDay: '[Muer um] LT',
  9908. nextWeek: 'dddd [um] LT',
  9909. lastDay: '[Gëschter um] LT',
  9910. lastWeek: function () {
  9911. // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule
  9912. switch (this.day()) {
  9913. case 2:
  9914. case 4:
  9915. return '[Leschten] dddd [um] LT';
  9916. default:
  9917. return '[Leschte] dddd [um] LT';
  9918. }
  9919. },
  9920. },
  9921. relativeTime: {
  9922. future: processFutureTime,
  9923. past: processPastTime,
  9924. s: 'e puer Sekonnen',
  9925. ss: '%d Sekonnen',
  9926. m: processRelativeTime,
  9927. mm: '%d Minutten',
  9928. h: processRelativeTime,
  9929. hh: '%d Stonnen',
  9930. d: processRelativeTime,
  9931. dd: '%d Deeg',
  9932. M: processRelativeTime,
  9933. MM: '%d Méint',
  9934. y: processRelativeTime,
  9935. yy: '%d Joer',
  9936. },
  9937. dayOfMonthOrdinalParse: /\d{1,2}\./,
  9938. ordinal: '%d.',
  9939. week: {
  9940. dow: 1, // Monday is the first day of the week.
  9941. doy: 4, // The week that contains Jan 4th is the first week of the year.
  9942. },
  9943. }));
  9944. /***/ }),
  9945. /***/ "./node_modules/moment/dist/locale/lo.js":
  9946. /*!***********************************************!*\
  9947. !*** ./node_modules/moment/dist/locale/lo.js ***!
  9948. \***********************************************/
  9949. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  9950. "use strict";
  9951. __webpack_require__.r(__webpack_exports__);
  9952. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  9953. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  9954. /* harmony export */ });
  9955. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  9956. //! moment.js locale configuration
  9957. //! locale : Lao [lo]
  9958. //! author : Ryan Hart : https://github.com/ryanhart2
  9959. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('lo', {
  9960. months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(
  9961. '_'
  9962. ),
  9963. monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(
  9964. '_'
  9965. ),
  9966. weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
  9967. weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),
  9968. weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),
  9969. weekdaysParseExact: true,
  9970. longDateFormat: {
  9971. LT: 'HH:mm',
  9972. LTS: 'HH:mm:ss',
  9973. L: 'DD/MM/YYYY',
  9974. LL: 'D MMMM YYYY',
  9975. LLL: 'D MMMM YYYY HH:mm',
  9976. LLLL: 'ວັນdddd D MMMM YYYY HH:mm',
  9977. },
  9978. meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,
  9979. isPM: function (input) {
  9980. return input === 'ຕອນແລງ';
  9981. },
  9982. meridiem: function (hour, minute, isLower) {
  9983. if (hour < 12) {
  9984. return 'ຕອນເຊົ້າ';
  9985. } else {
  9986. return 'ຕອນແລງ';
  9987. }
  9988. },
  9989. calendar: {
  9990. sameDay: '[ມື້ນີ້ເວລາ] LT',
  9991. nextDay: '[ມື້ອື່ນເວລາ] LT',
  9992. nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',
  9993. lastDay: '[ມື້ວານນີ້ເວລາ] LT',
  9994. lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',
  9995. sameElse: 'L',
  9996. },
  9997. relativeTime: {
  9998. future: 'ອີກ %s',
  9999. past: '%sຜ່ານມາ',
  10000. s: 'ບໍ່ເທົ່າໃດວິນາທີ',
  10001. ss: '%d ວິນາທີ',
  10002. m: '1 ນາທີ',
  10003. mm: '%d ນາທີ',
  10004. h: '1 ຊົ່ວໂມງ',
  10005. hh: '%d ຊົ່ວໂມງ',
  10006. d: '1 ມື້',
  10007. dd: '%d ມື້',
  10008. M: '1 ເດືອນ',
  10009. MM: '%d ເດືອນ',
  10010. y: '1 ປີ',
  10011. yy: '%d ປີ',
  10012. },
  10013. dayOfMonthOrdinalParse: /(ທີ່)\d{1,2}/,
  10014. ordinal: function (number) {
  10015. return 'ທີ່' + number;
  10016. },
  10017. }));
  10018. /***/ }),
  10019. /***/ "./node_modules/moment/dist/locale/lt.js":
  10020. /*!***********************************************!*\
  10021. !*** ./node_modules/moment/dist/locale/lt.js ***!
  10022. \***********************************************/
  10023. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  10024. "use strict";
  10025. __webpack_require__.r(__webpack_exports__);
  10026. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  10027. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  10028. /* harmony export */ });
  10029. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  10030. //! moment.js locale configuration
  10031. //! locale : Lithuanian [lt]
  10032. //! author : Mindaugas Mozūras : https://github.com/mmozuras
  10033. var units = {
  10034. ss: 'sekundė_sekundžių_sekundes',
  10035. m: 'minutė_minutės_minutę',
  10036. mm: 'minutės_minučių_minutes',
  10037. h: 'valanda_valandos_valandą',
  10038. hh: 'valandos_valandų_valandas',
  10039. d: 'diena_dienos_dieną',
  10040. dd: 'dienos_dienų_dienas',
  10041. M: 'mėnuo_mėnesio_mėnesį',
  10042. MM: 'mėnesiai_mėnesių_mėnesius',
  10043. y: 'metai_metų_metus',
  10044. yy: 'metai_metų_metus',
  10045. };
  10046. function translateSeconds(number, withoutSuffix, key, isFuture) {
  10047. if (withoutSuffix) {
  10048. return 'kelios sekundės';
  10049. } else {
  10050. return isFuture ? 'kelių sekundžių' : 'kelias sekundes';
  10051. }
  10052. }
  10053. function translateSingular(number, withoutSuffix, key, isFuture) {
  10054. return withoutSuffix
  10055. ? forms(key)[0]
  10056. : isFuture
  10057. ? forms(key)[1]
  10058. : forms(key)[2];
  10059. }
  10060. function special(number) {
  10061. return number % 10 === 0 || (number > 10 && number < 20);
  10062. }
  10063. function forms(key) {
  10064. return units[key].split('_');
  10065. }
  10066. function translate(number, withoutSuffix, key, isFuture) {
  10067. var result = number + ' ';
  10068. if (number === 1) {
  10069. return (
  10070. result + translateSingular(number, withoutSuffix, key[0], isFuture)
  10071. );
  10072. } else if (withoutSuffix) {
  10073. return result + (special(number) ? forms(key)[1] : forms(key)[0]);
  10074. } else {
  10075. if (isFuture) {
  10076. return result + forms(key)[1];
  10077. } else {
  10078. return result + (special(number) ? forms(key)[1] : forms(key)[2]);
  10079. }
  10080. }
  10081. }
  10082. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('lt', {
  10083. months: {
  10084. format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(
  10085. '_'
  10086. ),
  10087. standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(
  10088. '_'
  10089. ),
  10090. isFormat: /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?|MMMM?(\[[^\[\]]*\]|\s)+D[oD]?/,
  10091. },
  10092. monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),
  10093. weekdays: {
  10094. format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(
  10095. '_'
  10096. ),
  10097. standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(
  10098. '_'
  10099. ),
  10100. isFormat: /dddd HH:mm/,
  10101. },
  10102. weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),
  10103. weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),
  10104. weekdaysParseExact: true,
  10105. longDateFormat: {
  10106. LT: 'HH:mm',
  10107. LTS: 'HH:mm:ss',
  10108. L: 'YYYY-MM-DD',
  10109. LL: 'YYYY [m.] MMMM D [d.]',
  10110. LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
  10111. LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',
  10112. l: 'YYYY-MM-DD',
  10113. ll: 'YYYY [m.] MMMM D [d.]',
  10114. lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',
  10115. llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',
  10116. },
  10117. calendar: {
  10118. sameDay: '[Šiandien] LT',
  10119. nextDay: '[Rytoj] LT',
  10120. nextWeek: 'dddd LT',
  10121. lastDay: '[Vakar] LT',
  10122. lastWeek: '[Praėjusį] dddd LT',
  10123. sameElse: 'L',
  10124. },
  10125. relativeTime: {
  10126. future: 'po %s',
  10127. past: 'prieš %s',
  10128. s: translateSeconds,
  10129. ss: translate,
  10130. m: translateSingular,
  10131. mm: translate,
  10132. h: translateSingular,
  10133. hh: translate,
  10134. d: translateSingular,
  10135. dd: translate,
  10136. M: translateSingular,
  10137. MM: translate,
  10138. y: translateSingular,
  10139. yy: translate,
  10140. },
  10141. dayOfMonthOrdinalParse: /\d{1,2}-oji/,
  10142. ordinal: function (number) {
  10143. return number + '-oji';
  10144. },
  10145. week: {
  10146. dow: 1, // Monday is the first day of the week.
  10147. doy: 4, // The week that contains Jan 4th is the first week of the year.
  10148. },
  10149. }));
  10150. /***/ }),
  10151. /***/ "./node_modules/moment/dist/locale/lv.js":
  10152. /*!***********************************************!*\
  10153. !*** ./node_modules/moment/dist/locale/lv.js ***!
  10154. \***********************************************/
  10155. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  10156. "use strict";
  10157. __webpack_require__.r(__webpack_exports__);
  10158. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  10159. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  10160. /* harmony export */ });
  10161. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  10162. //! moment.js locale configuration
  10163. //! locale : Latvian [lv]
  10164. //! author : Kristaps Karlsons : https://github.com/skakri
  10165. //! author : Jānis Elmeris : https://github.com/JanisE
  10166. var units = {
  10167. ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),
  10168. m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
  10169. mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),
  10170. h: 'stundas_stundām_stunda_stundas'.split('_'),
  10171. hh: 'stundas_stundām_stunda_stundas'.split('_'),
  10172. d: 'dienas_dienām_diena_dienas'.split('_'),
  10173. dd: 'dienas_dienām_diena_dienas'.split('_'),
  10174. M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
  10175. MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),
  10176. y: 'gada_gadiem_gads_gadi'.split('_'),
  10177. yy: 'gada_gadiem_gads_gadi'.split('_'),
  10178. };
  10179. /**
  10180. * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.
  10181. */
  10182. function format(forms, number, withoutSuffix) {
  10183. if (withoutSuffix) {
  10184. // E.g. "21 minūte", "3 minūtes".
  10185. return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];
  10186. } else {
  10187. // E.g. "21 minūtes" as in "pēc 21 minūtes".
  10188. // E.g. "3 minūtēm" as in "pēc 3 minūtēm".
  10189. return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];
  10190. }
  10191. }
  10192. function relativeTimeWithPlural(number, withoutSuffix, key) {
  10193. return number + ' ' + format(units[key], number, withoutSuffix);
  10194. }
  10195. function relativeTimeWithSingular(number, withoutSuffix, key) {
  10196. return format(units[key], number, withoutSuffix);
  10197. }
  10198. function relativeSeconds(number, withoutSuffix) {
  10199. return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';
  10200. }
  10201. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('lv', {
  10202. months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(
  10203. '_'
  10204. ),
  10205. monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),
  10206. weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(
  10207. '_'
  10208. ),
  10209. weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),
  10210. weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),
  10211. weekdaysParseExact: true,
  10212. longDateFormat: {
  10213. LT: 'HH:mm',
  10214. LTS: 'HH:mm:ss',
  10215. L: 'DD.MM.YYYY.',
  10216. LL: 'YYYY. [gada] D. MMMM',
  10217. LLL: 'YYYY. [gada] D. MMMM, HH:mm',
  10218. LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',
  10219. },
  10220. calendar: {
  10221. sameDay: '[Šodien pulksten] LT',
  10222. nextDay: '[Rīt pulksten] LT',
  10223. nextWeek: 'dddd [pulksten] LT',
  10224. lastDay: '[Vakar pulksten] LT',
  10225. lastWeek: '[Pagājušā] dddd [pulksten] LT',
  10226. sameElse: 'L',
  10227. },
  10228. relativeTime: {
  10229. future: 'pēc %s',
  10230. past: 'pirms %s',
  10231. s: relativeSeconds,
  10232. ss: relativeTimeWithPlural,
  10233. m: relativeTimeWithSingular,
  10234. mm: relativeTimeWithPlural,
  10235. h: relativeTimeWithSingular,
  10236. hh: relativeTimeWithPlural,
  10237. d: relativeTimeWithSingular,
  10238. dd: relativeTimeWithPlural,
  10239. M: relativeTimeWithSingular,
  10240. MM: relativeTimeWithPlural,
  10241. y: relativeTimeWithSingular,
  10242. yy: relativeTimeWithPlural,
  10243. },
  10244. dayOfMonthOrdinalParse: /\d{1,2}\./,
  10245. ordinal: '%d.',
  10246. week: {
  10247. dow: 1, // Monday is the first day of the week.
  10248. doy: 4, // The week that contains Jan 4th is the first week of the year.
  10249. },
  10250. }));
  10251. /***/ }),
  10252. /***/ "./node_modules/moment/dist/locale/me.js":
  10253. /*!***********************************************!*\
  10254. !*** ./node_modules/moment/dist/locale/me.js ***!
  10255. \***********************************************/
  10256. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  10257. "use strict";
  10258. __webpack_require__.r(__webpack_exports__);
  10259. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  10260. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  10261. /* harmony export */ });
  10262. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  10263. //! moment.js locale configuration
  10264. //! locale : Montenegrin [me]
  10265. //! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac
  10266. var translator = {
  10267. words: {
  10268. //Different grammatical cases
  10269. ss: ['sekund', 'sekunda', 'sekundi'],
  10270. m: ['jedan minut', 'jednog minuta'],
  10271. mm: ['minut', 'minuta', 'minuta'],
  10272. h: ['jedan sat', 'jednog sata'],
  10273. hh: ['sat', 'sata', 'sati'],
  10274. dd: ['dan', 'dana', 'dana'],
  10275. MM: ['mjesec', 'mjeseca', 'mjeseci'],
  10276. yy: ['godina', 'godine', 'godina'],
  10277. },
  10278. correctGrammaticalCase: function (number, wordKey) {
  10279. return number === 1
  10280. ? wordKey[0]
  10281. : number >= 2 && number <= 4
  10282. ? wordKey[1]
  10283. : wordKey[2];
  10284. },
  10285. translate: function (number, withoutSuffix, key) {
  10286. var wordKey = translator.words[key];
  10287. if (key.length === 1) {
  10288. return withoutSuffix ? wordKey[0] : wordKey[1];
  10289. } else {
  10290. return (
  10291. number +
  10292. ' ' +
  10293. translator.correctGrammaticalCase(number, wordKey)
  10294. );
  10295. }
  10296. },
  10297. };
  10298. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('me', {
  10299. months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
  10300. '_'
  10301. ),
  10302. monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
  10303. '_'
  10304. ),
  10305. monthsParseExact: true,
  10306. weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(
  10307. '_'
  10308. ),
  10309. weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),
  10310. weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
  10311. weekdaysParseExact: true,
  10312. longDateFormat: {
  10313. LT: 'H:mm',
  10314. LTS: 'H:mm:ss',
  10315. L: 'DD.MM.YYYY',
  10316. LL: 'D. MMMM YYYY',
  10317. LLL: 'D. MMMM YYYY H:mm',
  10318. LLLL: 'dddd, D. MMMM YYYY H:mm',
  10319. },
  10320. calendar: {
  10321. sameDay: '[danas u] LT',
  10322. nextDay: '[sjutra u] LT',
  10323. nextWeek: function () {
  10324. switch (this.day()) {
  10325. case 0:
  10326. return '[u] [nedjelju] [u] LT';
  10327. case 3:
  10328. return '[u] [srijedu] [u] LT';
  10329. case 6:
  10330. return '[u] [subotu] [u] LT';
  10331. case 1:
  10332. case 2:
  10333. case 4:
  10334. case 5:
  10335. return '[u] dddd [u] LT';
  10336. }
  10337. },
  10338. lastDay: '[juče u] LT',
  10339. lastWeek: function () {
  10340. var lastWeekDays = [
  10341. '[prošle] [nedjelje] [u] LT',
  10342. '[prošlog] [ponedjeljka] [u] LT',
  10343. '[prošlog] [utorka] [u] LT',
  10344. '[prošle] [srijede] [u] LT',
  10345. '[prošlog] [četvrtka] [u] LT',
  10346. '[prošlog] [petka] [u] LT',
  10347. '[prošle] [subote] [u] LT',
  10348. ];
  10349. return lastWeekDays[this.day()];
  10350. },
  10351. sameElse: 'L',
  10352. },
  10353. relativeTime: {
  10354. future: 'za %s',
  10355. past: 'prije %s',
  10356. s: 'nekoliko sekundi',
  10357. ss: translator.translate,
  10358. m: translator.translate,
  10359. mm: translator.translate,
  10360. h: translator.translate,
  10361. hh: translator.translate,
  10362. d: 'dan',
  10363. dd: translator.translate,
  10364. M: 'mjesec',
  10365. MM: translator.translate,
  10366. y: 'godinu',
  10367. yy: translator.translate,
  10368. },
  10369. dayOfMonthOrdinalParse: /\d{1,2}\./,
  10370. ordinal: '%d.',
  10371. week: {
  10372. dow: 1, // Monday is the first day of the week.
  10373. doy: 7, // The week that contains Jan 7th is the first week of the year.
  10374. },
  10375. }));
  10376. /***/ }),
  10377. /***/ "./node_modules/moment/dist/locale/mi.js":
  10378. /*!***********************************************!*\
  10379. !*** ./node_modules/moment/dist/locale/mi.js ***!
  10380. \***********************************************/
  10381. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  10382. "use strict";
  10383. __webpack_require__.r(__webpack_exports__);
  10384. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  10385. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  10386. /* harmony export */ });
  10387. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  10388. //! moment.js locale configuration
  10389. //! locale : Maori [mi]
  10390. //! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal
  10391. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('mi', {
  10392. months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(
  10393. '_'
  10394. ),
  10395. monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(
  10396. '_'
  10397. ),
  10398. monthsRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
  10399. monthsStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
  10400. monthsShortRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,3}/i,
  10401. monthsShortStrictRegex: /(?:['a-z\u0101\u014D\u016B]+\-?){1,2}/i,
  10402. weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),
  10403. weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
  10404. weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),
  10405. longDateFormat: {
  10406. LT: 'HH:mm',
  10407. LTS: 'HH:mm:ss',
  10408. L: 'DD/MM/YYYY',
  10409. LL: 'D MMMM YYYY',
  10410. LLL: 'D MMMM YYYY [i] HH:mm',
  10411. LLLL: 'dddd, D MMMM YYYY [i] HH:mm',
  10412. },
  10413. calendar: {
  10414. sameDay: '[i teie mahana, i] LT',
  10415. nextDay: '[apopo i] LT',
  10416. nextWeek: 'dddd [i] LT',
  10417. lastDay: '[inanahi i] LT',
  10418. lastWeek: 'dddd [whakamutunga i] LT',
  10419. sameElse: 'L',
  10420. },
  10421. relativeTime: {
  10422. future: 'i roto i %s',
  10423. past: '%s i mua',
  10424. s: 'te hēkona ruarua',
  10425. ss: '%d hēkona',
  10426. m: 'he meneti',
  10427. mm: '%d meneti',
  10428. h: 'te haora',
  10429. hh: '%d haora',
  10430. d: 'he ra',
  10431. dd: '%d ra',
  10432. M: 'he marama',
  10433. MM: '%d marama',
  10434. y: 'he tau',
  10435. yy: '%d tau',
  10436. },
  10437. dayOfMonthOrdinalParse: /\d{1,2}º/,
  10438. ordinal: '%dº',
  10439. week: {
  10440. dow: 1, // Monday is the first day of the week.
  10441. doy: 4, // The week that contains Jan 4th is the first week of the year.
  10442. },
  10443. }));
  10444. /***/ }),
  10445. /***/ "./node_modules/moment/dist/locale/mk.js":
  10446. /*!***********************************************!*\
  10447. !*** ./node_modules/moment/dist/locale/mk.js ***!
  10448. \***********************************************/
  10449. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  10450. "use strict";
  10451. __webpack_require__.r(__webpack_exports__);
  10452. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  10453. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  10454. /* harmony export */ });
  10455. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  10456. //! moment.js locale configuration
  10457. //! locale : Macedonian [mk]
  10458. //! author : Borislav Mickov : https://github.com/B0k0
  10459. //! author : Sashko Todorov : https://github.com/bkyceh
  10460. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('mk', {
  10461. months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(
  10462. '_'
  10463. ),
  10464. monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),
  10465. weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(
  10466. '_'
  10467. ),
  10468. weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),
  10469. weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),
  10470. longDateFormat: {
  10471. LT: 'H:mm',
  10472. LTS: 'H:mm:ss',
  10473. L: 'D.MM.YYYY',
  10474. LL: 'D MMMM YYYY',
  10475. LLL: 'D MMMM YYYY H:mm',
  10476. LLLL: 'dddd, D MMMM YYYY H:mm',
  10477. },
  10478. calendar: {
  10479. sameDay: '[Денес во] LT',
  10480. nextDay: '[Утре во] LT',
  10481. nextWeek: '[Во] dddd [во] LT',
  10482. lastDay: '[Вчера во] LT',
  10483. lastWeek: function () {
  10484. switch (this.day()) {
  10485. case 0:
  10486. case 3:
  10487. case 6:
  10488. return '[Изминатата] dddd [во] LT';
  10489. case 1:
  10490. case 2:
  10491. case 4:
  10492. case 5:
  10493. return '[Изминатиот] dddd [во] LT';
  10494. }
  10495. },
  10496. sameElse: 'L',
  10497. },
  10498. relativeTime: {
  10499. future: 'за %s',
  10500. past: 'пред %s',
  10501. s: 'неколку секунди',
  10502. ss: '%d секунди',
  10503. m: 'една минута',
  10504. mm: '%d минути',
  10505. h: 'еден час',
  10506. hh: '%d часа',
  10507. d: 'еден ден',
  10508. dd: '%d дена',
  10509. M: 'еден месец',
  10510. MM: '%d месеци',
  10511. y: 'една година',
  10512. yy: '%d години',
  10513. },
  10514. dayOfMonthOrdinalParse: /\d{1,2}-(ев|ен|ти|ви|ри|ми)/,
  10515. ordinal: function (number) {
  10516. var lastDigit = number % 10,
  10517. last2Digits = number % 100;
  10518. if (number === 0) {
  10519. return number + '-ев';
  10520. } else if (last2Digits === 0) {
  10521. return number + '-ен';
  10522. } else if (last2Digits > 10 && last2Digits < 20) {
  10523. return number + '-ти';
  10524. } else if (lastDigit === 1) {
  10525. return number + '-ви';
  10526. } else if (lastDigit === 2) {
  10527. return number + '-ри';
  10528. } else if (lastDigit === 7 || lastDigit === 8) {
  10529. return number + '-ми';
  10530. } else {
  10531. return number + '-ти';
  10532. }
  10533. },
  10534. week: {
  10535. dow: 1, // Monday is the first day of the week.
  10536. doy: 7, // The week that contains Jan 7th is the first week of the year.
  10537. },
  10538. }));
  10539. /***/ }),
  10540. /***/ "./node_modules/moment/dist/locale/ml.js":
  10541. /*!***********************************************!*\
  10542. !*** ./node_modules/moment/dist/locale/ml.js ***!
  10543. \***********************************************/
  10544. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  10545. "use strict";
  10546. __webpack_require__.r(__webpack_exports__);
  10547. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  10548. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  10549. /* harmony export */ });
  10550. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  10551. //! moment.js locale configuration
  10552. //! locale : Malayalam [ml]
  10553. //! author : Floyd Pink : https://github.com/floydpink
  10554. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ml', {
  10555. months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(
  10556. '_'
  10557. ),
  10558. monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(
  10559. '_'
  10560. ),
  10561. monthsParseExact: true,
  10562. weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(
  10563. '_'
  10564. ),
  10565. weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),
  10566. weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),
  10567. longDateFormat: {
  10568. LT: 'A h:mm -നു',
  10569. LTS: 'A h:mm:ss -നു',
  10570. L: 'DD/MM/YYYY',
  10571. LL: 'D MMMM YYYY',
  10572. LLL: 'D MMMM YYYY, A h:mm -നു',
  10573. LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',
  10574. },
  10575. calendar: {
  10576. sameDay: '[ഇന്ന്] LT',
  10577. nextDay: '[നാളെ] LT',
  10578. nextWeek: 'dddd, LT',
  10579. lastDay: '[ഇന്നലെ] LT',
  10580. lastWeek: '[കഴിഞ്ഞ] dddd, LT',
  10581. sameElse: 'L',
  10582. },
  10583. relativeTime: {
  10584. future: '%s കഴിഞ്ഞ്',
  10585. past: '%s മുൻപ്',
  10586. s: 'അൽപ നിമിഷങ്ങൾ',
  10587. ss: '%d സെക്കൻഡ്',
  10588. m: 'ഒരു മിനിറ്റ്',
  10589. mm: '%d മിനിറ്റ്',
  10590. h: 'ഒരു മണിക്കൂർ',
  10591. hh: '%d മണിക്കൂർ',
  10592. d: 'ഒരു ദിവസം',
  10593. dd: '%d ദിവസം',
  10594. M: 'ഒരു മാസം',
  10595. MM: '%d മാസം',
  10596. y: 'ഒരു വർഷം',
  10597. yy: '%d വർഷം',
  10598. },
  10599. meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,
  10600. meridiemHour: function (hour, meridiem) {
  10601. if (hour === 12) {
  10602. hour = 0;
  10603. }
  10604. if (
  10605. (meridiem === 'രാത്രി' && hour >= 4) ||
  10606. meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||
  10607. meridiem === 'വൈകുന്നേരം'
  10608. ) {
  10609. return hour + 12;
  10610. } else {
  10611. return hour;
  10612. }
  10613. },
  10614. meridiem: function (hour, minute, isLower) {
  10615. if (hour < 4) {
  10616. return 'രാത്രി';
  10617. } else if (hour < 12) {
  10618. return 'രാവിലെ';
  10619. } else if (hour < 17) {
  10620. return 'ഉച്ച കഴിഞ്ഞ്';
  10621. } else if (hour < 20) {
  10622. return 'വൈകുന്നേരം';
  10623. } else {
  10624. return 'രാത്രി';
  10625. }
  10626. },
  10627. }));
  10628. /***/ }),
  10629. /***/ "./node_modules/moment/dist/locale/mn.js":
  10630. /*!***********************************************!*\
  10631. !*** ./node_modules/moment/dist/locale/mn.js ***!
  10632. \***********************************************/
  10633. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  10634. "use strict";
  10635. __webpack_require__.r(__webpack_exports__);
  10636. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  10637. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  10638. /* harmony export */ });
  10639. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  10640. //! moment.js locale configuration
  10641. //! locale : Mongolian [mn]
  10642. //! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7
  10643. function translate(number, withoutSuffix, key, isFuture) {
  10644. switch (key) {
  10645. case 's':
  10646. return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';
  10647. case 'ss':
  10648. return number + (withoutSuffix ? ' секунд' : ' секундын');
  10649. case 'm':
  10650. case 'mm':
  10651. return number + (withoutSuffix ? ' минут' : ' минутын');
  10652. case 'h':
  10653. case 'hh':
  10654. return number + (withoutSuffix ? ' цаг' : ' цагийн');
  10655. case 'd':
  10656. case 'dd':
  10657. return number + (withoutSuffix ? ' өдөр' : ' өдрийн');
  10658. case 'M':
  10659. case 'MM':
  10660. return number + (withoutSuffix ? ' сар' : ' сарын');
  10661. case 'y':
  10662. case 'yy':
  10663. return number + (withoutSuffix ? ' жил' : ' жилийн');
  10664. default:
  10665. return number;
  10666. }
  10667. }
  10668. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('mn', {
  10669. months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(
  10670. '_'
  10671. ),
  10672. monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(
  10673. '_'
  10674. ),
  10675. monthsParseExact: true,
  10676. weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),
  10677. weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),
  10678. weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),
  10679. weekdaysParseExact: true,
  10680. longDateFormat: {
  10681. LT: 'HH:mm',
  10682. LTS: 'HH:mm:ss',
  10683. L: 'YYYY-MM-DD',
  10684. LL: 'YYYY оны MMMMын D',
  10685. LLL: 'YYYY оны MMMMын D HH:mm',
  10686. LLLL: 'dddd, YYYY оны MMMMын D HH:mm',
  10687. },
  10688. meridiemParse: /ҮӨ|ҮХ/i,
  10689. isPM: function (input) {
  10690. return input === 'ҮХ';
  10691. },
  10692. meridiem: function (hour, minute, isLower) {
  10693. if (hour < 12) {
  10694. return 'ҮӨ';
  10695. } else {
  10696. return 'ҮХ';
  10697. }
  10698. },
  10699. calendar: {
  10700. sameDay: '[Өнөөдөр] LT',
  10701. nextDay: '[Маргааш] LT',
  10702. nextWeek: '[Ирэх] dddd LT',
  10703. lastDay: '[Өчигдөр] LT',
  10704. lastWeek: '[Өнгөрсөн] dddd LT',
  10705. sameElse: 'L',
  10706. },
  10707. relativeTime: {
  10708. future: '%s дараа',
  10709. past: '%s өмнө',
  10710. s: translate,
  10711. ss: translate,
  10712. m: translate,
  10713. mm: translate,
  10714. h: translate,
  10715. hh: translate,
  10716. d: translate,
  10717. dd: translate,
  10718. M: translate,
  10719. MM: translate,
  10720. y: translate,
  10721. yy: translate,
  10722. },
  10723. dayOfMonthOrdinalParse: /\d{1,2} өдөр/,
  10724. ordinal: function (number, period) {
  10725. switch (period) {
  10726. case 'd':
  10727. case 'D':
  10728. case 'DDD':
  10729. return number + ' өдөр';
  10730. default:
  10731. return number;
  10732. }
  10733. },
  10734. }));
  10735. /***/ }),
  10736. /***/ "./node_modules/moment/dist/locale/mr.js":
  10737. /*!***********************************************!*\
  10738. !*** ./node_modules/moment/dist/locale/mr.js ***!
  10739. \***********************************************/
  10740. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  10741. "use strict";
  10742. __webpack_require__.r(__webpack_exports__);
  10743. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  10744. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  10745. /* harmony export */ });
  10746. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  10747. //! moment.js locale configuration
  10748. //! locale : Marathi [mr]
  10749. //! author : Harshad Kale : https://github.com/kalehv
  10750. //! author : Vivek Athalye : https://github.com/vnathalye
  10751. var symbolMap = {
  10752. 1: '१',
  10753. 2: '२',
  10754. 3: '३',
  10755. 4: '४',
  10756. 5: '५',
  10757. 6: '६',
  10758. 7: '७',
  10759. 8: '८',
  10760. 9: '९',
  10761. 0: '०',
  10762. },
  10763. numberMap = {
  10764. '१': '1',
  10765. '२': '2',
  10766. '३': '3',
  10767. '४': '4',
  10768. '५': '5',
  10769. '६': '6',
  10770. '७': '7',
  10771. '८': '8',
  10772. '९': '9',
  10773. '०': '0',
  10774. };
  10775. function relativeTimeMr(number, withoutSuffix, string, isFuture) {
  10776. var output = '';
  10777. if (withoutSuffix) {
  10778. switch (string) {
  10779. case 's':
  10780. output = 'काही सेकंद';
  10781. break;
  10782. case 'ss':
  10783. output = '%d सेकंद';
  10784. break;
  10785. case 'm':
  10786. output = 'एक मिनिट';
  10787. break;
  10788. case 'mm':
  10789. output = '%d मिनिटे';
  10790. break;
  10791. case 'h':
  10792. output = 'एक तास';
  10793. break;
  10794. case 'hh':
  10795. output = '%d तास';
  10796. break;
  10797. case 'd':
  10798. output = 'एक दिवस';
  10799. break;
  10800. case 'dd':
  10801. output = '%d दिवस';
  10802. break;
  10803. case 'M':
  10804. output = 'एक महिना';
  10805. break;
  10806. case 'MM':
  10807. output = '%d महिने';
  10808. break;
  10809. case 'y':
  10810. output = 'एक वर्ष';
  10811. break;
  10812. case 'yy':
  10813. output = '%d वर्षे';
  10814. break;
  10815. }
  10816. } else {
  10817. switch (string) {
  10818. case 's':
  10819. output = 'काही सेकंदां';
  10820. break;
  10821. case 'ss':
  10822. output = '%d सेकंदां';
  10823. break;
  10824. case 'm':
  10825. output = 'एका मिनिटा';
  10826. break;
  10827. case 'mm':
  10828. output = '%d मिनिटां';
  10829. break;
  10830. case 'h':
  10831. output = 'एका तासा';
  10832. break;
  10833. case 'hh':
  10834. output = '%d तासां';
  10835. break;
  10836. case 'd':
  10837. output = 'एका दिवसा';
  10838. break;
  10839. case 'dd':
  10840. output = '%d दिवसां';
  10841. break;
  10842. case 'M':
  10843. output = 'एका महिन्या';
  10844. break;
  10845. case 'MM':
  10846. output = '%d महिन्यां';
  10847. break;
  10848. case 'y':
  10849. output = 'एका वर्षा';
  10850. break;
  10851. case 'yy':
  10852. output = '%d वर्षां';
  10853. break;
  10854. }
  10855. }
  10856. return output.replace(/%d/i, number);
  10857. }
  10858. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('mr', {
  10859. months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(
  10860. '_'
  10861. ),
  10862. monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(
  10863. '_'
  10864. ),
  10865. monthsParseExact: true,
  10866. weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),
  10867. weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),
  10868. weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),
  10869. longDateFormat: {
  10870. LT: 'A h:mm वाजता',
  10871. LTS: 'A h:mm:ss वाजता',
  10872. L: 'DD/MM/YYYY',
  10873. LL: 'D MMMM YYYY',
  10874. LLL: 'D MMMM YYYY, A h:mm वाजता',
  10875. LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',
  10876. },
  10877. calendar: {
  10878. sameDay: '[आज] LT',
  10879. nextDay: '[उद्या] LT',
  10880. nextWeek: 'dddd, LT',
  10881. lastDay: '[काल] LT',
  10882. lastWeek: '[मागील] dddd, LT',
  10883. sameElse: 'L',
  10884. },
  10885. relativeTime: {
  10886. future: '%sमध्ये',
  10887. past: '%sपूर्वी',
  10888. s: relativeTimeMr,
  10889. ss: relativeTimeMr,
  10890. m: relativeTimeMr,
  10891. mm: relativeTimeMr,
  10892. h: relativeTimeMr,
  10893. hh: relativeTimeMr,
  10894. d: relativeTimeMr,
  10895. dd: relativeTimeMr,
  10896. M: relativeTimeMr,
  10897. MM: relativeTimeMr,
  10898. y: relativeTimeMr,
  10899. yy: relativeTimeMr,
  10900. },
  10901. preparse: function (string) {
  10902. return string.replace(/[१२३४५६७८९०]/g, function (match) {
  10903. return numberMap[match];
  10904. });
  10905. },
  10906. postformat: function (string) {
  10907. return string.replace(/\d/g, function (match) {
  10908. return symbolMap[match];
  10909. });
  10910. },
  10911. meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,
  10912. meridiemHour: function (hour, meridiem) {
  10913. if (hour === 12) {
  10914. hour = 0;
  10915. }
  10916. if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {
  10917. return hour;
  10918. } else if (
  10919. meridiem === 'दुपारी' ||
  10920. meridiem === 'सायंकाळी' ||
  10921. meridiem === 'रात्री'
  10922. ) {
  10923. return hour >= 12 ? hour : hour + 12;
  10924. }
  10925. },
  10926. meridiem: function (hour, minute, isLower) {
  10927. if (hour >= 0 && hour < 6) {
  10928. return 'पहाटे';
  10929. } else if (hour < 12) {
  10930. return 'सकाळी';
  10931. } else if (hour < 17) {
  10932. return 'दुपारी';
  10933. } else if (hour < 20) {
  10934. return 'सायंकाळी';
  10935. } else {
  10936. return 'रात्री';
  10937. }
  10938. },
  10939. week: {
  10940. dow: 0, // Sunday is the first day of the week.
  10941. doy: 6, // The week that contains Jan 6th is the first week of the year.
  10942. },
  10943. }));
  10944. /***/ }),
  10945. /***/ "./node_modules/moment/dist/locale/ms-my.js":
  10946. /*!**************************************************!*\
  10947. !*** ./node_modules/moment/dist/locale/ms-my.js ***!
  10948. \**************************************************/
  10949. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  10950. "use strict";
  10951. __webpack_require__.r(__webpack_exports__);
  10952. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  10953. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  10954. /* harmony export */ });
  10955. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  10956. //! moment.js locale configuration
  10957. //! locale : Malay [ms-my]
  10958. //! note : DEPRECATED, the correct one is [ms]
  10959. //! author : Weldan Jamili : https://github.com/weldan
  10960. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ms-my', {
  10961. months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
  10962. '_'
  10963. ),
  10964. monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
  10965. weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
  10966. weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
  10967. weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
  10968. longDateFormat: {
  10969. LT: 'HH.mm',
  10970. LTS: 'HH.mm.ss',
  10971. L: 'DD/MM/YYYY',
  10972. LL: 'D MMMM YYYY',
  10973. LLL: 'D MMMM YYYY [pukul] HH.mm',
  10974. LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
  10975. },
  10976. meridiemParse: /pagi|tengahari|petang|malam/,
  10977. meridiemHour: function (hour, meridiem) {
  10978. if (hour === 12) {
  10979. hour = 0;
  10980. }
  10981. if (meridiem === 'pagi') {
  10982. return hour;
  10983. } else if (meridiem === 'tengahari') {
  10984. return hour >= 11 ? hour : hour + 12;
  10985. } else if (meridiem === 'petang' || meridiem === 'malam') {
  10986. return hour + 12;
  10987. }
  10988. },
  10989. meridiem: function (hours, minutes, isLower) {
  10990. if (hours < 11) {
  10991. return 'pagi';
  10992. } else if (hours < 15) {
  10993. return 'tengahari';
  10994. } else if (hours < 19) {
  10995. return 'petang';
  10996. } else {
  10997. return 'malam';
  10998. }
  10999. },
  11000. calendar: {
  11001. sameDay: '[Hari ini pukul] LT',
  11002. nextDay: '[Esok pukul] LT',
  11003. nextWeek: 'dddd [pukul] LT',
  11004. lastDay: '[Kelmarin pukul] LT',
  11005. lastWeek: 'dddd [lepas pukul] LT',
  11006. sameElse: 'L',
  11007. },
  11008. relativeTime: {
  11009. future: 'dalam %s',
  11010. past: '%s yang lepas',
  11011. s: 'beberapa saat',
  11012. ss: '%d saat',
  11013. m: 'seminit',
  11014. mm: '%d minit',
  11015. h: 'sejam',
  11016. hh: '%d jam',
  11017. d: 'sehari',
  11018. dd: '%d hari',
  11019. M: 'sebulan',
  11020. MM: '%d bulan',
  11021. y: 'setahun',
  11022. yy: '%d tahun',
  11023. },
  11024. week: {
  11025. dow: 1, // Monday is the first day of the week.
  11026. doy: 7, // The week that contains Jan 7th is the first week of the year.
  11027. },
  11028. }));
  11029. /***/ }),
  11030. /***/ "./node_modules/moment/dist/locale/ms.js":
  11031. /*!***********************************************!*\
  11032. !*** ./node_modules/moment/dist/locale/ms.js ***!
  11033. \***********************************************/
  11034. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  11035. "use strict";
  11036. __webpack_require__.r(__webpack_exports__);
  11037. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  11038. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11039. /* harmony export */ });
  11040. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  11041. //! moment.js locale configuration
  11042. //! locale : Malay [ms]
  11043. //! author : Weldan Jamili : https://github.com/weldan
  11044. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ms', {
  11045. months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(
  11046. '_'
  11047. ),
  11048. monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),
  11049. weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),
  11050. weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),
  11051. weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),
  11052. longDateFormat: {
  11053. LT: 'HH.mm',
  11054. LTS: 'HH.mm.ss',
  11055. L: 'DD/MM/YYYY',
  11056. LL: 'D MMMM YYYY',
  11057. LLL: 'D MMMM YYYY [pukul] HH.mm',
  11058. LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',
  11059. },
  11060. meridiemParse: /pagi|tengahari|petang|malam/,
  11061. meridiemHour: function (hour, meridiem) {
  11062. if (hour === 12) {
  11063. hour = 0;
  11064. }
  11065. if (meridiem === 'pagi') {
  11066. return hour;
  11067. } else if (meridiem === 'tengahari') {
  11068. return hour >= 11 ? hour : hour + 12;
  11069. } else if (meridiem === 'petang' || meridiem === 'malam') {
  11070. return hour + 12;
  11071. }
  11072. },
  11073. meridiem: function (hours, minutes, isLower) {
  11074. if (hours < 11) {
  11075. return 'pagi';
  11076. } else if (hours < 15) {
  11077. return 'tengahari';
  11078. } else if (hours < 19) {
  11079. return 'petang';
  11080. } else {
  11081. return 'malam';
  11082. }
  11083. },
  11084. calendar: {
  11085. sameDay: '[Hari ini pukul] LT',
  11086. nextDay: '[Esok pukul] LT',
  11087. nextWeek: 'dddd [pukul] LT',
  11088. lastDay: '[Kelmarin pukul] LT',
  11089. lastWeek: 'dddd [lepas pukul] LT',
  11090. sameElse: 'L',
  11091. },
  11092. relativeTime: {
  11093. future: 'dalam %s',
  11094. past: '%s yang lepas',
  11095. s: 'beberapa saat',
  11096. ss: '%d saat',
  11097. m: 'seminit',
  11098. mm: '%d minit',
  11099. h: 'sejam',
  11100. hh: '%d jam',
  11101. d: 'sehari',
  11102. dd: '%d hari',
  11103. M: 'sebulan',
  11104. MM: '%d bulan',
  11105. y: 'setahun',
  11106. yy: '%d tahun',
  11107. },
  11108. week: {
  11109. dow: 1, // Monday is the first day of the week.
  11110. doy: 7, // The week that contains Jan 7th is the first week of the year.
  11111. },
  11112. }));
  11113. /***/ }),
  11114. /***/ "./node_modules/moment/dist/locale/mt.js":
  11115. /*!***********************************************!*\
  11116. !*** ./node_modules/moment/dist/locale/mt.js ***!
  11117. \***********************************************/
  11118. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  11119. "use strict";
  11120. __webpack_require__.r(__webpack_exports__);
  11121. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  11122. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11123. /* harmony export */ });
  11124. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  11125. //! moment.js locale configuration
  11126. //! locale : Maltese (Malta) [mt]
  11127. //! author : Alessandro Maruccia : https://github.com/alesma
  11128. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('mt', {
  11129. months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(
  11130. '_'
  11131. ),
  11132. monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),
  11133. weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(
  11134. '_'
  11135. ),
  11136. weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),
  11137. weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),
  11138. longDateFormat: {
  11139. LT: 'HH:mm',
  11140. LTS: 'HH:mm:ss',
  11141. L: 'DD/MM/YYYY',
  11142. LL: 'D MMMM YYYY',
  11143. LLL: 'D MMMM YYYY HH:mm',
  11144. LLLL: 'dddd, D MMMM YYYY HH:mm',
  11145. },
  11146. calendar: {
  11147. sameDay: '[Illum fil-]LT',
  11148. nextDay: '[Għada fil-]LT',
  11149. nextWeek: 'dddd [fil-]LT',
  11150. lastDay: '[Il-bieraħ fil-]LT',
  11151. lastWeek: 'dddd [li għadda] [fil-]LT',
  11152. sameElse: 'L',
  11153. },
  11154. relativeTime: {
  11155. future: 'f’ %s',
  11156. past: '%s ilu',
  11157. s: 'ftit sekondi',
  11158. ss: '%d sekondi',
  11159. m: 'minuta',
  11160. mm: '%d minuti',
  11161. h: 'siegħa',
  11162. hh: '%d siegħat',
  11163. d: 'ġurnata',
  11164. dd: '%d ġranet',
  11165. M: 'xahar',
  11166. MM: '%d xhur',
  11167. y: 'sena',
  11168. yy: '%d sni',
  11169. },
  11170. dayOfMonthOrdinalParse: /\d{1,2}º/,
  11171. ordinal: '%dº',
  11172. week: {
  11173. dow: 1, // Monday is the first day of the week.
  11174. doy: 4, // The week that contains Jan 4th is the first week of the year.
  11175. },
  11176. }));
  11177. /***/ }),
  11178. /***/ "./node_modules/moment/dist/locale/my.js":
  11179. /*!***********************************************!*\
  11180. !*** ./node_modules/moment/dist/locale/my.js ***!
  11181. \***********************************************/
  11182. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  11183. "use strict";
  11184. __webpack_require__.r(__webpack_exports__);
  11185. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  11186. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11187. /* harmony export */ });
  11188. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  11189. //! moment.js locale configuration
  11190. //! locale : Burmese [my]
  11191. //! author : Squar team, mysquar.com
  11192. //! author : David Rossellat : https://github.com/gholadr
  11193. //! author : Tin Aung Lin : https://github.com/thanyawzinmin
  11194. var symbolMap = {
  11195. 1: '၁',
  11196. 2: '၂',
  11197. 3: '၃',
  11198. 4: '၄',
  11199. 5: '၅',
  11200. 6: '၆',
  11201. 7: '၇',
  11202. 8: '၈',
  11203. 9: '၉',
  11204. 0: '၀',
  11205. },
  11206. numberMap = {
  11207. '၁': '1',
  11208. '၂': '2',
  11209. '၃': '3',
  11210. '၄': '4',
  11211. '၅': '5',
  11212. '၆': '6',
  11213. '၇': '7',
  11214. '၈': '8',
  11215. '၉': '9',
  11216. '၀': '0',
  11217. };
  11218. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('my', {
  11219. months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(
  11220. '_'
  11221. ),
  11222. monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),
  11223. weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(
  11224. '_'
  11225. ),
  11226. weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
  11227. weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),
  11228. longDateFormat: {
  11229. LT: 'HH:mm',
  11230. LTS: 'HH:mm:ss',
  11231. L: 'DD/MM/YYYY',
  11232. LL: 'D MMMM YYYY',
  11233. LLL: 'D MMMM YYYY HH:mm',
  11234. LLLL: 'dddd D MMMM YYYY HH:mm',
  11235. },
  11236. calendar: {
  11237. sameDay: '[ယနေ.] LT [မှာ]',
  11238. nextDay: '[မနက်ဖြန်] LT [မှာ]',
  11239. nextWeek: 'dddd LT [မှာ]',
  11240. lastDay: '[မနေ.က] LT [မှာ]',
  11241. lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',
  11242. sameElse: 'L',
  11243. },
  11244. relativeTime: {
  11245. future: 'လာမည့် %s မှာ',
  11246. past: 'လွန်ခဲ့သော %s က',
  11247. s: 'စက္ကန်.အနည်းငယ်',
  11248. ss: '%d စက္ကန့်',
  11249. m: 'တစ်မိနစ်',
  11250. mm: '%d မိနစ်',
  11251. h: 'တစ်နာရီ',
  11252. hh: '%d နာရီ',
  11253. d: 'တစ်ရက်',
  11254. dd: '%d ရက်',
  11255. M: 'တစ်လ',
  11256. MM: '%d လ',
  11257. y: 'တစ်နှစ်',
  11258. yy: '%d နှစ်',
  11259. },
  11260. preparse: function (string) {
  11261. return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {
  11262. return numberMap[match];
  11263. });
  11264. },
  11265. postformat: function (string) {
  11266. return string.replace(/\d/g, function (match) {
  11267. return symbolMap[match];
  11268. });
  11269. },
  11270. week: {
  11271. dow: 1, // Monday is the first day of the week.
  11272. doy: 4, // The week that contains Jan 4th is the first week of the year.
  11273. },
  11274. }));
  11275. /***/ }),
  11276. /***/ "./node_modules/moment/dist/locale/nb.js":
  11277. /*!***********************************************!*\
  11278. !*** ./node_modules/moment/dist/locale/nb.js ***!
  11279. \***********************************************/
  11280. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  11281. "use strict";
  11282. __webpack_require__.r(__webpack_exports__);
  11283. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  11284. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11285. /* harmony export */ });
  11286. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  11287. //! moment.js locale configuration
  11288. //! locale : Norwegian Bokmål [nb]
  11289. //! authors : Espen Hovlandsdal : https://github.com/rexxars
  11290. //! Sigurd Gartmann : https://github.com/sigurdga
  11291. //! Stephen Ramthun : https://github.com/stephenramthun
  11292. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('nb', {
  11293. months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
  11294. '_'
  11295. ),
  11296. monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
  11297. '_'
  11298. ),
  11299. monthsParseExact: true,
  11300. weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
  11301. weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),
  11302. weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),
  11303. weekdaysParseExact: true,
  11304. longDateFormat: {
  11305. LT: 'HH:mm',
  11306. LTS: 'HH:mm:ss',
  11307. L: 'DD.MM.YYYY',
  11308. LL: 'D. MMMM YYYY',
  11309. LLL: 'D. MMMM YYYY [kl.] HH:mm',
  11310. LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
  11311. },
  11312. calendar: {
  11313. sameDay: '[i dag kl.] LT',
  11314. nextDay: '[i morgen kl.] LT',
  11315. nextWeek: 'dddd [kl.] LT',
  11316. lastDay: '[i går kl.] LT',
  11317. lastWeek: '[forrige] dddd [kl.] LT',
  11318. sameElse: 'L',
  11319. },
  11320. relativeTime: {
  11321. future: 'om %s',
  11322. past: '%s siden',
  11323. s: 'noen sekunder',
  11324. ss: '%d sekunder',
  11325. m: 'ett minutt',
  11326. mm: '%d minutter',
  11327. h: 'en time',
  11328. hh: '%d timer',
  11329. d: 'en dag',
  11330. dd: '%d dager',
  11331. w: 'en uke',
  11332. ww: '%d uker',
  11333. M: 'en måned',
  11334. MM: '%d måneder',
  11335. y: 'ett år',
  11336. yy: '%d år',
  11337. },
  11338. dayOfMonthOrdinalParse: /\d{1,2}\./,
  11339. ordinal: '%d.',
  11340. week: {
  11341. dow: 1, // Monday is the first day of the week.
  11342. doy: 4, // The week that contains Jan 4th is the first week of the year.
  11343. },
  11344. }));
  11345. /***/ }),
  11346. /***/ "./node_modules/moment/dist/locale/ne.js":
  11347. /*!***********************************************!*\
  11348. !*** ./node_modules/moment/dist/locale/ne.js ***!
  11349. \***********************************************/
  11350. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  11351. "use strict";
  11352. __webpack_require__.r(__webpack_exports__);
  11353. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  11354. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11355. /* harmony export */ });
  11356. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  11357. //! moment.js locale configuration
  11358. //! locale : Nepalese [ne]
  11359. //! author : suvash : https://github.com/suvash
  11360. var symbolMap = {
  11361. 1: '१',
  11362. 2: '२',
  11363. 3: '३',
  11364. 4: '४',
  11365. 5: '५',
  11366. 6: '६',
  11367. 7: '७',
  11368. 8: '८',
  11369. 9: '९',
  11370. 0: '०',
  11371. },
  11372. numberMap = {
  11373. '१': '1',
  11374. '२': '2',
  11375. '३': '3',
  11376. '४': '4',
  11377. '५': '5',
  11378. '६': '6',
  11379. '७': '7',
  11380. '८': '8',
  11381. '९': '9',
  11382. '०': '0',
  11383. };
  11384. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ne', {
  11385. months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(
  11386. '_'
  11387. ),
  11388. monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(
  11389. '_'
  11390. ),
  11391. monthsParseExact: true,
  11392. weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(
  11393. '_'
  11394. ),
  11395. weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),
  11396. weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),
  11397. weekdaysParseExact: true,
  11398. longDateFormat: {
  11399. LT: 'Aको h:mm बजे',
  11400. LTS: 'Aको h:mm:ss बजे',
  11401. L: 'DD/MM/YYYY',
  11402. LL: 'D MMMM YYYY',
  11403. LLL: 'D MMMM YYYY, Aको h:mm बजे',
  11404. LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',
  11405. },
  11406. preparse: function (string) {
  11407. return string.replace(/[१२३४५६७८९०]/g, function (match) {
  11408. return numberMap[match];
  11409. });
  11410. },
  11411. postformat: function (string) {
  11412. return string.replace(/\d/g, function (match) {
  11413. return symbolMap[match];
  11414. });
  11415. },
  11416. meridiemParse: /राति|बिहान|दिउँसो|साँझ/,
  11417. meridiemHour: function (hour, meridiem) {
  11418. if (hour === 12) {
  11419. hour = 0;
  11420. }
  11421. if (meridiem === 'राति') {
  11422. return hour < 4 ? hour : hour + 12;
  11423. } else if (meridiem === 'बिहान') {
  11424. return hour;
  11425. } else if (meridiem === 'दिउँसो') {
  11426. return hour >= 10 ? hour : hour + 12;
  11427. } else if (meridiem === 'साँझ') {
  11428. return hour + 12;
  11429. }
  11430. },
  11431. meridiem: function (hour, minute, isLower) {
  11432. if (hour < 3) {
  11433. return 'राति';
  11434. } else if (hour < 12) {
  11435. return 'बिहान';
  11436. } else if (hour < 16) {
  11437. return 'दिउँसो';
  11438. } else if (hour < 20) {
  11439. return 'साँझ';
  11440. } else {
  11441. return 'राति';
  11442. }
  11443. },
  11444. calendar: {
  11445. sameDay: '[आज] LT',
  11446. nextDay: '[भोलि] LT',
  11447. nextWeek: '[आउँदो] dddd[,] LT',
  11448. lastDay: '[हिजो] LT',
  11449. lastWeek: '[गएको] dddd[,] LT',
  11450. sameElse: 'L',
  11451. },
  11452. relativeTime: {
  11453. future: '%sमा',
  11454. past: '%s अगाडि',
  11455. s: 'केही क्षण',
  11456. ss: '%d सेकेण्ड',
  11457. m: 'एक मिनेट',
  11458. mm: '%d मिनेट',
  11459. h: 'एक घण्टा',
  11460. hh: '%d घण्टा',
  11461. d: 'एक दिन',
  11462. dd: '%d दिन',
  11463. M: 'एक महिना',
  11464. MM: '%d महिना',
  11465. y: 'एक बर्ष',
  11466. yy: '%d बर्ष',
  11467. },
  11468. week: {
  11469. dow: 0, // Sunday is the first day of the week.
  11470. doy: 6, // The week that contains Jan 6th is the first week of the year.
  11471. },
  11472. }));
  11473. /***/ }),
  11474. /***/ "./node_modules/moment/dist/locale/nl-be.js":
  11475. /*!**************************************************!*\
  11476. !*** ./node_modules/moment/dist/locale/nl-be.js ***!
  11477. \**************************************************/
  11478. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  11479. "use strict";
  11480. __webpack_require__.r(__webpack_exports__);
  11481. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  11482. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11483. /* harmony export */ });
  11484. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  11485. //! moment.js locale configuration
  11486. //! locale : Dutch (Belgium) [nl-be]
  11487. //! author : Joris Röling : https://github.com/jorisroling
  11488. //! author : Jacob Middag : https://github.com/middagj
  11489. var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
  11490. '_'
  11491. ),
  11492. monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
  11493. '_'
  11494. ),
  11495. monthsParse = [
  11496. /^jan/i,
  11497. /^feb/i,
  11498. /^maart|mrt.?$/i,
  11499. /^apr/i,
  11500. /^mei$/i,
  11501. /^jun[i.]?$/i,
  11502. /^jul[i.]?$/i,
  11503. /^aug/i,
  11504. /^sep/i,
  11505. /^okt/i,
  11506. /^nov/i,
  11507. /^dec/i,
  11508. ],
  11509. monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
  11510. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('nl-be', {
  11511. months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
  11512. '_'
  11513. ),
  11514. monthsShort: function (m, format) {
  11515. if (!m) {
  11516. return monthsShortWithDots;
  11517. } else if (/-MMM-/.test(format)) {
  11518. return monthsShortWithoutDots[m.month()];
  11519. } else {
  11520. return monthsShortWithDots[m.month()];
  11521. }
  11522. },
  11523. monthsRegex: monthsRegex,
  11524. monthsShortRegex: monthsRegex,
  11525. monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
  11526. monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
  11527. monthsParse: monthsParse,
  11528. longMonthsParse: monthsParse,
  11529. shortMonthsParse: monthsParse,
  11530. weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
  11531. '_'
  11532. ),
  11533. weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
  11534. weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
  11535. weekdaysParseExact: true,
  11536. longDateFormat: {
  11537. LT: 'HH:mm',
  11538. LTS: 'HH:mm:ss',
  11539. L: 'DD/MM/YYYY',
  11540. LL: 'D MMMM YYYY',
  11541. LLL: 'D MMMM YYYY HH:mm',
  11542. LLLL: 'dddd D MMMM YYYY HH:mm',
  11543. },
  11544. calendar: {
  11545. sameDay: '[vandaag om] LT',
  11546. nextDay: '[morgen om] LT',
  11547. nextWeek: 'dddd [om] LT',
  11548. lastDay: '[gisteren om] LT',
  11549. lastWeek: '[afgelopen] dddd [om] LT',
  11550. sameElse: 'L',
  11551. },
  11552. relativeTime: {
  11553. future: 'over %s',
  11554. past: '%s geleden',
  11555. s: 'een paar seconden',
  11556. ss: '%d seconden',
  11557. m: 'één minuut',
  11558. mm: '%d minuten',
  11559. h: 'één uur',
  11560. hh: '%d uur',
  11561. d: 'één dag',
  11562. dd: '%d dagen',
  11563. M: 'één maand',
  11564. MM: '%d maanden',
  11565. y: 'één jaar',
  11566. yy: '%d jaar',
  11567. },
  11568. dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
  11569. ordinal: function (number) {
  11570. return (
  11571. number +
  11572. (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
  11573. );
  11574. },
  11575. week: {
  11576. dow: 1, // Monday is the first day of the week.
  11577. doy: 4, // The week that contains Jan 4th is the first week of the year.
  11578. },
  11579. }));
  11580. /***/ }),
  11581. /***/ "./node_modules/moment/dist/locale/nl.js":
  11582. /*!***********************************************!*\
  11583. !*** ./node_modules/moment/dist/locale/nl.js ***!
  11584. \***********************************************/
  11585. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  11586. "use strict";
  11587. __webpack_require__.r(__webpack_exports__);
  11588. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  11589. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11590. /* harmony export */ });
  11591. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  11592. //! moment.js locale configuration
  11593. //! locale : Dutch [nl]
  11594. //! author : Joris Röling : https://github.com/jorisroling
  11595. //! author : Jacob Middag : https://github.com/middagj
  11596. var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split(
  11597. '_'
  11598. ),
  11599. monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split(
  11600. '_'
  11601. ),
  11602. monthsParse = [
  11603. /^jan/i,
  11604. /^feb/i,
  11605. /^maart|mrt.?$/i,
  11606. /^apr/i,
  11607. /^mei$/i,
  11608. /^jun[i.]?$/i,
  11609. /^jul[i.]?$/i,
  11610. /^aug/i,
  11611. /^sep/i,
  11612. /^okt/i,
  11613. /^nov/i,
  11614. /^dec/i,
  11615. ],
  11616. monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\.?|feb\.?|mrt\.?|apr\.?|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i;
  11617. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('nl', {
  11618. months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(
  11619. '_'
  11620. ),
  11621. monthsShort: function (m, format) {
  11622. if (!m) {
  11623. return monthsShortWithDots;
  11624. } else if (/-MMM-/.test(format)) {
  11625. return monthsShortWithoutDots[m.month()];
  11626. } else {
  11627. return monthsShortWithDots[m.month()];
  11628. }
  11629. },
  11630. monthsRegex: monthsRegex,
  11631. monthsShortRegex: monthsRegex,
  11632. monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,
  11633. monthsShortStrictRegex: /^(jan\.?|feb\.?|mrt\.?|apr\.?|mei|ju[nl]\.?|aug\.?|sep\.?|okt\.?|nov\.?|dec\.?)/i,
  11634. monthsParse: monthsParse,
  11635. longMonthsParse: monthsParse,
  11636. shortMonthsParse: monthsParse,
  11637. weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split(
  11638. '_'
  11639. ),
  11640. weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),
  11641. weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),
  11642. weekdaysParseExact: true,
  11643. longDateFormat: {
  11644. LT: 'HH:mm',
  11645. LTS: 'HH:mm:ss',
  11646. L: 'DD-MM-YYYY',
  11647. LL: 'D MMMM YYYY',
  11648. LLL: 'D MMMM YYYY HH:mm',
  11649. LLLL: 'dddd D MMMM YYYY HH:mm',
  11650. },
  11651. calendar: {
  11652. sameDay: '[vandaag om] LT',
  11653. nextDay: '[morgen om] LT',
  11654. nextWeek: 'dddd [om] LT',
  11655. lastDay: '[gisteren om] LT',
  11656. lastWeek: '[afgelopen] dddd [om] LT',
  11657. sameElse: 'L',
  11658. },
  11659. relativeTime: {
  11660. future: 'over %s',
  11661. past: '%s geleden',
  11662. s: 'een paar seconden',
  11663. ss: '%d seconden',
  11664. m: 'één minuut',
  11665. mm: '%d minuten',
  11666. h: 'één uur',
  11667. hh: '%d uur',
  11668. d: 'één dag',
  11669. dd: '%d dagen',
  11670. w: 'één week',
  11671. ww: '%d weken',
  11672. M: 'één maand',
  11673. MM: '%d maanden',
  11674. y: 'één jaar',
  11675. yy: '%d jaar',
  11676. },
  11677. dayOfMonthOrdinalParse: /\d{1,2}(ste|de)/,
  11678. ordinal: function (number) {
  11679. return (
  11680. number +
  11681. (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')
  11682. );
  11683. },
  11684. week: {
  11685. dow: 1, // Monday is the first day of the week.
  11686. doy: 4, // The week that contains Jan 4th is the first week of the year.
  11687. },
  11688. }));
  11689. /***/ }),
  11690. /***/ "./node_modules/moment/dist/locale/nn.js":
  11691. /*!***********************************************!*\
  11692. !*** ./node_modules/moment/dist/locale/nn.js ***!
  11693. \***********************************************/
  11694. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  11695. "use strict";
  11696. __webpack_require__.r(__webpack_exports__);
  11697. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  11698. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11699. /* harmony export */ });
  11700. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  11701. //! moment.js locale configuration
  11702. //! locale : Nynorsk [nn]
  11703. //! authors : https://github.com/mechuwind
  11704. //! Stephen Ramthun : https://github.com/stephenramthun
  11705. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('nn', {
  11706. months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(
  11707. '_'
  11708. ),
  11709. monthsShort: 'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split(
  11710. '_'
  11711. ),
  11712. monthsParseExact: true,
  11713. weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),
  11714. weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),
  11715. weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),
  11716. weekdaysParseExact: true,
  11717. longDateFormat: {
  11718. LT: 'HH:mm',
  11719. LTS: 'HH:mm:ss',
  11720. L: 'DD.MM.YYYY',
  11721. LL: 'D. MMMM YYYY',
  11722. LLL: 'D. MMMM YYYY [kl.] H:mm',
  11723. LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',
  11724. },
  11725. calendar: {
  11726. sameDay: '[I dag klokka] LT',
  11727. nextDay: '[I morgon klokka] LT',
  11728. nextWeek: 'dddd [klokka] LT',
  11729. lastDay: '[I går klokka] LT',
  11730. lastWeek: '[Føregåande] dddd [klokka] LT',
  11731. sameElse: 'L',
  11732. },
  11733. relativeTime: {
  11734. future: 'om %s',
  11735. past: '%s sidan',
  11736. s: 'nokre sekund',
  11737. ss: '%d sekund',
  11738. m: 'eit minutt',
  11739. mm: '%d minutt',
  11740. h: 'ein time',
  11741. hh: '%d timar',
  11742. d: 'ein dag',
  11743. dd: '%d dagar',
  11744. w: 'ei veke',
  11745. ww: '%d veker',
  11746. M: 'ein månad',
  11747. MM: '%d månader',
  11748. y: 'eit år',
  11749. yy: '%d år',
  11750. },
  11751. dayOfMonthOrdinalParse: /\d{1,2}\./,
  11752. ordinal: '%d.',
  11753. week: {
  11754. dow: 1, // Monday is the first day of the week.
  11755. doy: 4, // The week that contains Jan 4th is the first week of the year.
  11756. },
  11757. }));
  11758. /***/ }),
  11759. /***/ "./node_modules/moment/dist/locale/oc-lnc.js":
  11760. /*!***************************************************!*\
  11761. !*** ./node_modules/moment/dist/locale/oc-lnc.js ***!
  11762. \***************************************************/
  11763. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  11764. "use strict";
  11765. __webpack_require__.r(__webpack_exports__);
  11766. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  11767. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11768. /* harmony export */ });
  11769. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  11770. //! moment.js locale configuration
  11771. //! locale : Occitan, lengadocian dialecte [oc-lnc]
  11772. //! author : Quentin PAGÈS : https://github.com/Quenty31
  11773. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('oc-lnc', {
  11774. months: {
  11775. standalone: 'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(
  11776. '_'
  11777. ),
  11778. format: "de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre".split(
  11779. '_'
  11780. ),
  11781. isFormat: /D[oD]?(\s)+MMMM/,
  11782. },
  11783. monthsShort: 'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(
  11784. '_'
  11785. ),
  11786. monthsParseExact: true,
  11787. weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(
  11788. '_'
  11789. ),
  11790. weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),
  11791. weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),
  11792. weekdaysParseExact: true,
  11793. longDateFormat: {
  11794. LT: 'H:mm',
  11795. LTS: 'H:mm:ss',
  11796. L: 'DD/MM/YYYY',
  11797. LL: 'D MMMM [de] YYYY',
  11798. ll: 'D MMM YYYY',
  11799. LLL: 'D MMMM [de] YYYY [a] H:mm',
  11800. lll: 'D MMM YYYY, H:mm',
  11801. LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',
  11802. llll: 'ddd D MMM YYYY, H:mm',
  11803. },
  11804. calendar: {
  11805. sameDay: '[uèi a] LT',
  11806. nextDay: '[deman a] LT',
  11807. nextWeek: 'dddd [a] LT',
  11808. lastDay: '[ièr a] LT',
  11809. lastWeek: 'dddd [passat a] LT',
  11810. sameElse: 'L',
  11811. },
  11812. relativeTime: {
  11813. future: "d'aquí %s",
  11814. past: 'fa %s',
  11815. s: 'unas segondas',
  11816. ss: '%d segondas',
  11817. m: 'una minuta',
  11818. mm: '%d minutas',
  11819. h: 'una ora',
  11820. hh: '%d oras',
  11821. d: 'un jorn',
  11822. dd: '%d jorns',
  11823. M: 'un mes',
  11824. MM: '%d meses',
  11825. y: 'un an',
  11826. yy: '%d ans',
  11827. },
  11828. dayOfMonthOrdinalParse: /\d{1,2}(r|n|t|è|a)/,
  11829. ordinal: function (number, period) {
  11830. var output =
  11831. number === 1
  11832. ? 'r'
  11833. : number === 2
  11834. ? 'n'
  11835. : number === 3
  11836. ? 'r'
  11837. : number === 4
  11838. ? 't'
  11839. : 'è';
  11840. if (period === 'w' || period === 'W') {
  11841. output = 'a';
  11842. }
  11843. return number + output;
  11844. },
  11845. week: {
  11846. dow: 1, // Monday is the first day of the week.
  11847. doy: 4,
  11848. },
  11849. }));
  11850. /***/ }),
  11851. /***/ "./node_modules/moment/dist/locale/pa-in.js":
  11852. /*!**************************************************!*\
  11853. !*** ./node_modules/moment/dist/locale/pa-in.js ***!
  11854. \**************************************************/
  11855. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  11856. "use strict";
  11857. __webpack_require__.r(__webpack_exports__);
  11858. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  11859. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11860. /* harmony export */ });
  11861. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  11862. //! moment.js locale configuration
  11863. //! locale : Punjabi (India) [pa-in]
  11864. //! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit
  11865. var symbolMap = {
  11866. 1: '੧',
  11867. 2: '੨',
  11868. 3: '੩',
  11869. 4: '੪',
  11870. 5: '੫',
  11871. 6: '੬',
  11872. 7: '੭',
  11873. 8: '੮',
  11874. 9: '੯',
  11875. 0: '੦',
  11876. },
  11877. numberMap = {
  11878. '੧': '1',
  11879. '੨': '2',
  11880. '੩': '3',
  11881. '੪': '4',
  11882. '੫': '5',
  11883. '੬': '6',
  11884. '੭': '7',
  11885. '੮': '8',
  11886. '੯': '9',
  11887. '੦': '0',
  11888. };
  11889. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('pa-in', {
  11890. // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.
  11891. months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(
  11892. '_'
  11893. ),
  11894. monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(
  11895. '_'
  11896. ),
  11897. weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(
  11898. '_'
  11899. ),
  11900. weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
  11901. weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),
  11902. longDateFormat: {
  11903. LT: 'A h:mm ਵਜੇ',
  11904. LTS: 'A h:mm:ss ਵਜੇ',
  11905. L: 'DD/MM/YYYY',
  11906. LL: 'D MMMM YYYY',
  11907. LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',
  11908. LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',
  11909. },
  11910. calendar: {
  11911. sameDay: '[ਅਜ] LT',
  11912. nextDay: '[ਕਲ] LT',
  11913. nextWeek: '[ਅਗਲਾ] dddd, LT',
  11914. lastDay: '[ਕਲ] LT',
  11915. lastWeek: '[ਪਿਛਲੇ] dddd, LT',
  11916. sameElse: 'L',
  11917. },
  11918. relativeTime: {
  11919. future: '%s ਵਿੱਚ',
  11920. past: '%s ਪਿਛਲੇ',
  11921. s: 'ਕੁਝ ਸਕਿੰਟ',
  11922. ss: '%d ਸਕਿੰਟ',
  11923. m: 'ਇਕ ਮਿੰਟ',
  11924. mm: '%d ਮਿੰਟ',
  11925. h: 'ਇੱਕ ਘੰਟਾ',
  11926. hh: '%d ਘੰਟੇ',
  11927. d: 'ਇੱਕ ਦਿਨ',
  11928. dd: '%d ਦਿਨ',
  11929. M: 'ਇੱਕ ਮਹੀਨਾ',
  11930. MM: '%d ਮਹੀਨੇ',
  11931. y: 'ਇੱਕ ਸਾਲ',
  11932. yy: '%d ਸਾਲ',
  11933. },
  11934. preparse: function (string) {
  11935. return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {
  11936. return numberMap[match];
  11937. });
  11938. },
  11939. postformat: function (string) {
  11940. return string.replace(/\d/g, function (match) {
  11941. return symbolMap[match];
  11942. });
  11943. },
  11944. // Punjabi notation for meridiems are quite fuzzy in practice. While there exists
  11945. // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.
  11946. meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,
  11947. meridiemHour: function (hour, meridiem) {
  11948. if (hour === 12) {
  11949. hour = 0;
  11950. }
  11951. if (meridiem === 'ਰਾਤ') {
  11952. return hour < 4 ? hour : hour + 12;
  11953. } else if (meridiem === 'ਸਵੇਰ') {
  11954. return hour;
  11955. } else if (meridiem === 'ਦੁਪਹਿਰ') {
  11956. return hour >= 10 ? hour : hour + 12;
  11957. } else if (meridiem === 'ਸ਼ਾਮ') {
  11958. return hour + 12;
  11959. }
  11960. },
  11961. meridiem: function (hour, minute, isLower) {
  11962. if (hour < 4) {
  11963. return 'ਰਾਤ';
  11964. } else if (hour < 10) {
  11965. return 'ਸਵੇਰ';
  11966. } else if (hour < 17) {
  11967. return 'ਦੁਪਹਿਰ';
  11968. } else if (hour < 20) {
  11969. return 'ਸ਼ਾਮ';
  11970. } else {
  11971. return 'ਰਾਤ';
  11972. }
  11973. },
  11974. week: {
  11975. dow: 0, // Sunday is the first day of the week.
  11976. doy: 6, // The week that contains Jan 6th is the first week of the year.
  11977. },
  11978. }));
  11979. /***/ }),
  11980. /***/ "./node_modules/moment/dist/locale/pl.js":
  11981. /*!***********************************************!*\
  11982. !*** ./node_modules/moment/dist/locale/pl.js ***!
  11983. \***********************************************/
  11984. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  11985. "use strict";
  11986. __webpack_require__.r(__webpack_exports__);
  11987. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  11988. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  11989. /* harmony export */ });
  11990. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  11991. //! moment.js locale configuration
  11992. //! locale : Polish [pl]
  11993. //! author : Rafal Hirsz : https://github.com/evoL
  11994. var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(
  11995. '_'
  11996. ),
  11997. monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(
  11998. '_'
  11999. ),
  12000. monthsParse = [
  12001. /^sty/i,
  12002. /^lut/i,
  12003. /^mar/i,
  12004. /^kwi/i,
  12005. /^maj/i,
  12006. /^cze/i,
  12007. /^lip/i,
  12008. /^sie/i,
  12009. /^wrz/i,
  12010. /^paź/i,
  12011. /^lis/i,
  12012. /^gru/i,
  12013. ];
  12014. function plural(n) {
  12015. return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;
  12016. }
  12017. function translate(number, withoutSuffix, key) {
  12018. var result = number + ' ';
  12019. switch (key) {
  12020. case 'ss':
  12021. return result + (plural(number) ? 'sekundy' : 'sekund');
  12022. case 'm':
  12023. return withoutSuffix ? 'minuta' : 'minutę';
  12024. case 'mm':
  12025. return result + (plural(number) ? 'minuty' : 'minut');
  12026. case 'h':
  12027. return withoutSuffix ? 'godzina' : 'godzinę';
  12028. case 'hh':
  12029. return result + (plural(number) ? 'godziny' : 'godzin');
  12030. case 'ww':
  12031. return result + (plural(number) ? 'tygodnie' : 'tygodni');
  12032. case 'MM':
  12033. return result + (plural(number) ? 'miesiące' : 'miesięcy');
  12034. case 'yy':
  12035. return result + (plural(number) ? 'lata' : 'lat');
  12036. }
  12037. }
  12038. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('pl', {
  12039. months: function (momentToFormat, format) {
  12040. if (!momentToFormat) {
  12041. return monthsNominative;
  12042. } else if (/D MMMM/.test(format)) {
  12043. return monthsSubjective[momentToFormat.month()];
  12044. } else {
  12045. return monthsNominative[momentToFormat.month()];
  12046. }
  12047. },
  12048. monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
  12049. monthsParse: monthsParse,
  12050. longMonthsParse: monthsParse,
  12051. shortMonthsParse: monthsParse,
  12052. weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split(
  12053. '_'
  12054. ),
  12055. weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),
  12056. weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
  12057. longDateFormat: {
  12058. LT: 'HH:mm',
  12059. LTS: 'HH:mm:ss',
  12060. L: 'DD.MM.YYYY',
  12061. LL: 'D MMMM YYYY',
  12062. LLL: 'D MMMM YYYY HH:mm',
  12063. LLLL: 'dddd, D MMMM YYYY HH:mm',
  12064. },
  12065. calendar: {
  12066. sameDay: '[Dziś o] LT',
  12067. nextDay: '[Jutro o] LT',
  12068. nextWeek: function () {
  12069. switch (this.day()) {
  12070. case 0:
  12071. return '[W niedzielę o] LT';
  12072. case 2:
  12073. return '[We wtorek o] LT';
  12074. case 3:
  12075. return '[W środę o] LT';
  12076. case 6:
  12077. return '[W sobotę o] LT';
  12078. default:
  12079. return '[W] dddd [o] LT';
  12080. }
  12081. },
  12082. lastDay: '[Wczoraj o] LT',
  12083. lastWeek: function () {
  12084. switch (this.day()) {
  12085. case 0:
  12086. return '[W zeszłą niedzielę o] LT';
  12087. case 3:
  12088. return '[W zeszłą środę o] LT';
  12089. case 6:
  12090. return '[W zeszłą sobotę o] LT';
  12091. default:
  12092. return '[W zeszły] dddd [o] LT';
  12093. }
  12094. },
  12095. sameElse: 'L',
  12096. },
  12097. relativeTime: {
  12098. future: 'za %s',
  12099. past: '%s temu',
  12100. s: 'kilka sekund',
  12101. ss: translate,
  12102. m: translate,
  12103. mm: translate,
  12104. h: translate,
  12105. hh: translate,
  12106. d: '1 dzień',
  12107. dd: '%d dni',
  12108. w: 'tydzień',
  12109. ww: translate,
  12110. M: 'miesiąc',
  12111. MM: translate,
  12112. y: 'rok',
  12113. yy: translate,
  12114. },
  12115. dayOfMonthOrdinalParse: /\d{1,2}\./,
  12116. ordinal: '%d.',
  12117. week: {
  12118. dow: 1, // Monday is the first day of the week.
  12119. doy: 4, // The week that contains Jan 4th is the first week of the year.
  12120. },
  12121. }));
  12122. /***/ }),
  12123. /***/ "./node_modules/moment/dist/locale/pt-br.js":
  12124. /*!**************************************************!*\
  12125. !*** ./node_modules/moment/dist/locale/pt-br.js ***!
  12126. \**************************************************/
  12127. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  12128. "use strict";
  12129. __webpack_require__.r(__webpack_exports__);
  12130. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  12131. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  12132. /* harmony export */ });
  12133. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  12134. //! moment.js locale configuration
  12135. //! locale : Portuguese (Brazil) [pt-br]
  12136. //! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
  12137. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('pt-br', {
  12138. months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
  12139. '_'
  12140. ),
  12141. monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
  12142. weekdays: 'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(
  12143. '_'
  12144. ),
  12145. weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),
  12146. weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),
  12147. weekdaysParseExact: true,
  12148. longDateFormat: {
  12149. LT: 'HH:mm',
  12150. LTS: 'HH:mm:ss',
  12151. L: 'DD/MM/YYYY',
  12152. LL: 'D [de] MMMM [de] YYYY',
  12153. LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',
  12154. LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',
  12155. },
  12156. calendar: {
  12157. sameDay: '[Hoje às] LT',
  12158. nextDay: '[Amanhã às] LT',
  12159. nextWeek: 'dddd [às] LT',
  12160. lastDay: '[Ontem às] LT',
  12161. lastWeek: function () {
  12162. return this.day() === 0 || this.day() === 6
  12163. ? '[Último] dddd [às] LT' // Saturday + Sunday
  12164. : '[Última] dddd [às] LT'; // Monday - Friday
  12165. },
  12166. sameElse: 'L',
  12167. },
  12168. relativeTime: {
  12169. future: 'em %s',
  12170. past: 'há %s',
  12171. s: 'poucos segundos',
  12172. ss: '%d segundos',
  12173. m: 'um minuto',
  12174. mm: '%d minutos',
  12175. h: 'uma hora',
  12176. hh: '%d horas',
  12177. d: 'um dia',
  12178. dd: '%d dias',
  12179. M: 'um mês',
  12180. MM: '%d meses',
  12181. y: 'um ano',
  12182. yy: '%d anos',
  12183. },
  12184. dayOfMonthOrdinalParse: /\d{1,2}º/,
  12185. ordinal: '%dº',
  12186. invalidDate: 'Data inválida',
  12187. }));
  12188. /***/ }),
  12189. /***/ "./node_modules/moment/dist/locale/pt.js":
  12190. /*!***********************************************!*\
  12191. !*** ./node_modules/moment/dist/locale/pt.js ***!
  12192. \***********************************************/
  12193. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  12194. "use strict";
  12195. __webpack_require__.r(__webpack_exports__);
  12196. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  12197. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  12198. /* harmony export */ });
  12199. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  12200. //! moment.js locale configuration
  12201. //! locale : Portuguese [pt]
  12202. //! author : Jefferson : https://github.com/jalex79
  12203. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('pt', {
  12204. months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(
  12205. '_'
  12206. ),
  12207. monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),
  12208. weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(
  12209. '_'
  12210. ),
  12211. weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
  12212. weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),
  12213. weekdaysParseExact: true,
  12214. longDateFormat: {
  12215. LT: 'HH:mm',
  12216. LTS: 'HH:mm:ss',
  12217. L: 'DD/MM/YYYY',
  12218. LL: 'D [de] MMMM [de] YYYY',
  12219. LLL: 'D [de] MMMM [de] YYYY HH:mm',
  12220. LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',
  12221. },
  12222. calendar: {
  12223. sameDay: '[Hoje às] LT',
  12224. nextDay: '[Amanhã às] LT',
  12225. nextWeek: 'dddd [às] LT',
  12226. lastDay: '[Ontem às] LT',
  12227. lastWeek: function () {
  12228. return this.day() === 0 || this.day() === 6
  12229. ? '[Último] dddd [às] LT' // Saturday + Sunday
  12230. : '[Última] dddd [às] LT'; // Monday - Friday
  12231. },
  12232. sameElse: 'L',
  12233. },
  12234. relativeTime: {
  12235. future: 'em %s',
  12236. past: 'há %s',
  12237. s: 'segundos',
  12238. ss: '%d segundos',
  12239. m: 'um minuto',
  12240. mm: '%d minutos',
  12241. h: 'uma hora',
  12242. hh: '%d horas',
  12243. d: 'um dia',
  12244. dd: '%d dias',
  12245. w: 'uma semana',
  12246. ww: '%d semanas',
  12247. M: 'um mês',
  12248. MM: '%d meses',
  12249. y: 'um ano',
  12250. yy: '%d anos',
  12251. },
  12252. dayOfMonthOrdinalParse: /\d{1,2}º/,
  12253. ordinal: '%dº',
  12254. week: {
  12255. dow: 1, // Monday is the first day of the week.
  12256. doy: 4, // The week that contains Jan 4th is the first week of the year.
  12257. },
  12258. }));
  12259. /***/ }),
  12260. /***/ "./node_modules/moment/dist/locale/ro.js":
  12261. /*!***********************************************!*\
  12262. !*** ./node_modules/moment/dist/locale/ro.js ***!
  12263. \***********************************************/
  12264. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  12265. "use strict";
  12266. __webpack_require__.r(__webpack_exports__);
  12267. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  12268. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  12269. /* harmony export */ });
  12270. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  12271. //! moment.js locale configuration
  12272. //! locale : Romanian [ro]
  12273. //! author : Vlad Gurdiga : https://github.com/gurdiga
  12274. //! author : Valentin Agachi : https://github.com/avaly
  12275. //! author : Emanuel Cepoi : https://github.com/cepem
  12276. function relativeTimeWithPlural(number, withoutSuffix, key) {
  12277. var format = {
  12278. ss: 'secunde',
  12279. mm: 'minute',
  12280. hh: 'ore',
  12281. dd: 'zile',
  12282. ww: 'săptămâni',
  12283. MM: 'luni',
  12284. yy: 'ani',
  12285. },
  12286. separator = ' ';
  12287. if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
  12288. separator = ' de ';
  12289. }
  12290. return number + separator + format[key];
  12291. }
  12292. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ro', {
  12293. months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(
  12294. '_'
  12295. ),
  12296. monthsShort: 'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(
  12297. '_'
  12298. ),
  12299. monthsParseExact: true,
  12300. weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
  12301. weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
  12302. weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
  12303. longDateFormat: {
  12304. LT: 'H:mm',
  12305. LTS: 'H:mm:ss',
  12306. L: 'DD.MM.YYYY',
  12307. LL: 'D MMMM YYYY',
  12308. LLL: 'D MMMM YYYY H:mm',
  12309. LLLL: 'dddd, D MMMM YYYY H:mm',
  12310. },
  12311. calendar: {
  12312. sameDay: '[azi la] LT',
  12313. nextDay: '[mâine la] LT',
  12314. nextWeek: 'dddd [la] LT',
  12315. lastDay: '[ieri la] LT',
  12316. lastWeek: '[fosta] dddd [la] LT',
  12317. sameElse: 'L',
  12318. },
  12319. relativeTime: {
  12320. future: 'peste %s',
  12321. past: '%s în urmă',
  12322. s: 'câteva secunde',
  12323. ss: relativeTimeWithPlural,
  12324. m: 'un minut',
  12325. mm: relativeTimeWithPlural,
  12326. h: 'o oră',
  12327. hh: relativeTimeWithPlural,
  12328. d: 'o zi',
  12329. dd: relativeTimeWithPlural,
  12330. w: 'o săptămână',
  12331. ww: relativeTimeWithPlural,
  12332. M: 'o lună',
  12333. MM: relativeTimeWithPlural,
  12334. y: 'un an',
  12335. yy: relativeTimeWithPlural,
  12336. },
  12337. week: {
  12338. dow: 1, // Monday is the first day of the week.
  12339. doy: 7, // The week that contains Jan 7th is the first week of the year.
  12340. },
  12341. }));
  12342. /***/ }),
  12343. /***/ "./node_modules/moment/dist/locale/ru.js":
  12344. /*!***********************************************!*\
  12345. !*** ./node_modules/moment/dist/locale/ru.js ***!
  12346. \***********************************************/
  12347. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  12348. "use strict";
  12349. __webpack_require__.r(__webpack_exports__);
  12350. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  12351. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  12352. /* harmony export */ });
  12353. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  12354. //! moment.js locale configuration
  12355. //! locale : Russian [ru]
  12356. //! author : Viktorminator : https://github.com/Viktorminator
  12357. //! author : Menelion Elensúle : https://github.com/Oire
  12358. //! author : Коренберг Марк : https://github.com/socketpair
  12359. function plural(word, num) {
  12360. var forms = word.split('_');
  12361. return num % 10 === 1 && num % 100 !== 11
  12362. ? forms[0]
  12363. : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
  12364. ? forms[1]
  12365. : forms[2];
  12366. }
  12367. function relativeTimeWithPlural(number, withoutSuffix, key) {
  12368. var format = {
  12369. ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',
  12370. mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
  12371. hh: 'час_часа_часов',
  12372. dd: 'день_дня_дней',
  12373. ww: 'неделя_недели_недель',
  12374. MM: 'месяц_месяца_месяцев',
  12375. yy: 'год_года_лет',
  12376. };
  12377. if (key === 'm') {
  12378. return withoutSuffix ? 'минута' : 'минуту';
  12379. } else {
  12380. return number + ' ' + plural(format[key], +number);
  12381. }
  12382. }
  12383. var monthsParse = [
  12384. /^янв/i,
  12385. /^фев/i,
  12386. /^мар/i,
  12387. /^апр/i,
  12388. /^ма[йя]/i,
  12389. /^июн/i,
  12390. /^июл/i,
  12391. /^авг/i,
  12392. /^сен/i,
  12393. /^окт/i,
  12394. /^ноя/i,
  12395. /^дек/i,
  12396. ];
  12397. // http://new.gramota.ru/spravka/rules/139-prop : § 103
  12398. // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637
  12399. // CLDR data: http://www.unicode.org/cldr/charts/28/summary/ru.html#1753
  12400. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ru', {
  12401. months: {
  12402. format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(
  12403. '_'
  12404. ),
  12405. standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(
  12406. '_'
  12407. ),
  12408. },
  12409. monthsShort: {
  12410. // по CLDR именно "июл." и "июн.", но какой смысл менять букву на точку?
  12411. format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(
  12412. '_'
  12413. ),
  12414. standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(
  12415. '_'
  12416. ),
  12417. },
  12418. weekdays: {
  12419. standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(
  12420. '_'
  12421. ),
  12422. format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(
  12423. '_'
  12424. ),
  12425. isFormat: /\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,
  12426. },
  12427. weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
  12428. weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
  12429. monthsParse: monthsParse,
  12430. longMonthsParse: monthsParse,
  12431. shortMonthsParse: monthsParse,
  12432. // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки
  12433. monthsRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
  12434. // копия предыдущего
  12435. monthsShortRegex: /^(январ[ья]|янв\.?|феврал[ья]|февр?\.?|марта?|мар\.?|апрел[ья]|апр\.?|ма[йя]|июн[ья]|июн\.?|июл[ья]|июл\.?|августа?|авг\.?|сентябр[ья]|сент?\.?|октябр[ья]|окт\.?|ноябр[ья]|нояб?\.?|декабр[ья]|дек\.?)/i,
  12436. // полные названия с падежами
  12437. monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,
  12438. // Выражение, которое соответствует только сокращённым формам
  12439. monthsShortStrictRegex: /^(янв\.|февр?\.|мар[т.]|апр\.|ма[яй]|июн[ья.]|июл[ья.]|авг\.|сент?\.|окт\.|нояб?\.|дек\.)/i,
  12440. longDateFormat: {
  12441. LT: 'H:mm',
  12442. LTS: 'H:mm:ss',
  12443. L: 'DD.MM.YYYY',
  12444. LL: 'D MMMM YYYY г.',
  12445. LLL: 'D MMMM YYYY г., H:mm',
  12446. LLLL: 'dddd, D MMMM YYYY г., H:mm',
  12447. },
  12448. calendar: {
  12449. sameDay: '[Сегодня, в] LT',
  12450. nextDay: '[Завтра, в] LT',
  12451. lastDay: '[Вчера, в] LT',
  12452. nextWeek: function (now) {
  12453. if (now.week() !== this.week()) {
  12454. switch (this.day()) {
  12455. case 0:
  12456. return '[В следующее] dddd, [в] LT';
  12457. case 1:
  12458. case 2:
  12459. case 4:
  12460. return '[В следующий] dddd, [в] LT';
  12461. case 3:
  12462. case 5:
  12463. case 6:
  12464. return '[В следующую] dddd, [в] LT';
  12465. }
  12466. } else {
  12467. if (this.day() === 2) {
  12468. return '[Во] dddd, [в] LT';
  12469. } else {
  12470. return '[В] dddd, [в] LT';
  12471. }
  12472. }
  12473. },
  12474. lastWeek: function (now) {
  12475. if (now.week() !== this.week()) {
  12476. switch (this.day()) {
  12477. case 0:
  12478. return '[В прошлое] dddd, [в] LT';
  12479. case 1:
  12480. case 2:
  12481. case 4:
  12482. return '[В прошлый] dddd, [в] LT';
  12483. case 3:
  12484. case 5:
  12485. case 6:
  12486. return '[В прошлую] dddd, [в] LT';
  12487. }
  12488. } else {
  12489. if (this.day() === 2) {
  12490. return '[Во] dddd, [в] LT';
  12491. } else {
  12492. return '[В] dddd, [в] LT';
  12493. }
  12494. }
  12495. },
  12496. sameElse: 'L',
  12497. },
  12498. relativeTime: {
  12499. future: 'через %s',
  12500. past: '%s назад',
  12501. s: 'несколько секунд',
  12502. ss: relativeTimeWithPlural,
  12503. m: relativeTimeWithPlural,
  12504. mm: relativeTimeWithPlural,
  12505. h: 'час',
  12506. hh: relativeTimeWithPlural,
  12507. d: 'день',
  12508. dd: relativeTimeWithPlural,
  12509. w: 'неделя',
  12510. ww: relativeTimeWithPlural,
  12511. M: 'месяц',
  12512. MM: relativeTimeWithPlural,
  12513. y: 'год',
  12514. yy: relativeTimeWithPlural,
  12515. },
  12516. meridiemParse: /ночи|утра|дня|вечера/i,
  12517. isPM: function (input) {
  12518. return /^(дня|вечера)$/.test(input);
  12519. },
  12520. meridiem: function (hour, minute, isLower) {
  12521. if (hour < 4) {
  12522. return 'ночи';
  12523. } else if (hour < 12) {
  12524. return 'утра';
  12525. } else if (hour < 17) {
  12526. return 'дня';
  12527. } else {
  12528. return 'вечера';
  12529. }
  12530. },
  12531. dayOfMonthOrdinalParse: /\d{1,2}-(й|го|я)/,
  12532. ordinal: function (number, period) {
  12533. switch (period) {
  12534. case 'M':
  12535. case 'd':
  12536. case 'DDD':
  12537. return number + '-й';
  12538. case 'D':
  12539. return number + '-го';
  12540. case 'w':
  12541. case 'W':
  12542. return number + '-я';
  12543. default:
  12544. return number;
  12545. }
  12546. },
  12547. week: {
  12548. dow: 1, // Monday is the first day of the week.
  12549. doy: 4, // The week that contains Jan 4th is the first week of the year.
  12550. },
  12551. }));
  12552. /***/ }),
  12553. /***/ "./node_modules/moment/dist/locale/sd.js":
  12554. /*!***********************************************!*\
  12555. !*** ./node_modules/moment/dist/locale/sd.js ***!
  12556. \***********************************************/
  12557. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  12558. "use strict";
  12559. __webpack_require__.r(__webpack_exports__);
  12560. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  12561. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  12562. /* harmony export */ });
  12563. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  12564. //! moment.js locale configuration
  12565. //! locale : Sindhi [sd]
  12566. //! author : Narain Sagar : https://github.com/narainsagar
  12567. var months = [
  12568. 'جنوري',
  12569. 'فيبروري',
  12570. 'مارچ',
  12571. 'اپريل',
  12572. 'مئي',
  12573. 'جون',
  12574. 'جولاءِ',
  12575. 'آگسٽ',
  12576. 'سيپٽمبر',
  12577. 'آڪٽوبر',
  12578. 'نومبر',
  12579. 'ڊسمبر',
  12580. ],
  12581. days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];
  12582. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('sd', {
  12583. months: months,
  12584. monthsShort: months,
  12585. weekdays: days,
  12586. weekdaysShort: days,
  12587. weekdaysMin: days,
  12588. longDateFormat: {
  12589. LT: 'HH:mm',
  12590. LTS: 'HH:mm:ss',
  12591. L: 'DD/MM/YYYY',
  12592. LL: 'D MMMM YYYY',
  12593. LLL: 'D MMMM YYYY HH:mm',
  12594. LLLL: 'dddd، D MMMM YYYY HH:mm',
  12595. },
  12596. meridiemParse: /صبح|شام/,
  12597. isPM: function (input) {
  12598. return 'شام' === input;
  12599. },
  12600. meridiem: function (hour, minute, isLower) {
  12601. if (hour < 12) {
  12602. return 'صبح';
  12603. }
  12604. return 'شام';
  12605. },
  12606. calendar: {
  12607. sameDay: '[اڄ] LT',
  12608. nextDay: '[سڀاڻي] LT',
  12609. nextWeek: 'dddd [اڳين هفتي تي] LT',
  12610. lastDay: '[ڪالهه] LT',
  12611. lastWeek: '[گزريل هفتي] dddd [تي] LT',
  12612. sameElse: 'L',
  12613. },
  12614. relativeTime: {
  12615. future: '%s پوء',
  12616. past: '%s اڳ',
  12617. s: 'چند سيڪنڊ',
  12618. ss: '%d سيڪنڊ',
  12619. m: 'هڪ منٽ',
  12620. mm: '%d منٽ',
  12621. h: 'هڪ ڪلاڪ',
  12622. hh: '%d ڪلاڪ',
  12623. d: 'هڪ ڏينهن',
  12624. dd: '%d ڏينهن',
  12625. M: 'هڪ مهينو',
  12626. MM: '%d مهينا',
  12627. y: 'هڪ سال',
  12628. yy: '%d سال',
  12629. },
  12630. preparse: function (string) {
  12631. return string.replace(/،/g, ',');
  12632. },
  12633. postformat: function (string) {
  12634. return string.replace(/,/g, '،');
  12635. },
  12636. week: {
  12637. dow: 1, // Monday is the first day of the week.
  12638. doy: 4, // The week that contains Jan 4th is the first week of the year.
  12639. },
  12640. }));
  12641. /***/ }),
  12642. /***/ "./node_modules/moment/dist/locale/se.js":
  12643. /*!***********************************************!*\
  12644. !*** ./node_modules/moment/dist/locale/se.js ***!
  12645. \***********************************************/
  12646. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  12647. "use strict";
  12648. __webpack_require__.r(__webpack_exports__);
  12649. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  12650. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  12651. /* harmony export */ });
  12652. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  12653. //! moment.js locale configuration
  12654. //! locale : Northern Sami [se]
  12655. //! authors : Bård Rolstad Henriksen : https://github.com/karamell
  12656. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('se', {
  12657. months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(
  12658. '_'
  12659. ),
  12660. monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split(
  12661. '_'
  12662. ),
  12663. weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(
  12664. '_'
  12665. ),
  12666. weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),
  12667. weekdaysMin: 's_v_m_g_d_b_L'.split('_'),
  12668. longDateFormat: {
  12669. LT: 'HH:mm',
  12670. LTS: 'HH:mm:ss',
  12671. L: 'DD.MM.YYYY',
  12672. LL: 'MMMM D. [b.] YYYY',
  12673. LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',
  12674. LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',
  12675. },
  12676. calendar: {
  12677. sameDay: '[otne ti] LT',
  12678. nextDay: '[ihttin ti] LT',
  12679. nextWeek: 'dddd [ti] LT',
  12680. lastDay: '[ikte ti] LT',
  12681. lastWeek: '[ovddit] dddd [ti] LT',
  12682. sameElse: 'L',
  12683. },
  12684. relativeTime: {
  12685. future: '%s geažes',
  12686. past: 'maŋit %s',
  12687. s: 'moadde sekunddat',
  12688. ss: '%d sekunddat',
  12689. m: 'okta minuhta',
  12690. mm: '%d minuhtat',
  12691. h: 'okta diimmu',
  12692. hh: '%d diimmut',
  12693. d: 'okta beaivi',
  12694. dd: '%d beaivvit',
  12695. M: 'okta mánnu',
  12696. MM: '%d mánut',
  12697. y: 'okta jahki',
  12698. yy: '%d jagit',
  12699. },
  12700. dayOfMonthOrdinalParse: /\d{1,2}\./,
  12701. ordinal: '%d.',
  12702. week: {
  12703. dow: 1, // Monday is the first day of the week.
  12704. doy: 4, // The week that contains Jan 4th is the first week of the year.
  12705. },
  12706. }));
  12707. /***/ }),
  12708. /***/ "./node_modules/moment/dist/locale/si.js":
  12709. /*!***********************************************!*\
  12710. !*** ./node_modules/moment/dist/locale/si.js ***!
  12711. \***********************************************/
  12712. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  12713. "use strict";
  12714. __webpack_require__.r(__webpack_exports__);
  12715. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  12716. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  12717. /* harmony export */ });
  12718. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  12719. //! moment.js locale configuration
  12720. //! locale : Sinhalese [si]
  12721. //! author : Sampath Sitinamaluwa : https://github.com/sampathsris
  12722. /*jshint -W100*/
  12723. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('si', {
  12724. months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(
  12725. '_'
  12726. ),
  12727. monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(
  12728. '_'
  12729. ),
  12730. weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(
  12731. '_'
  12732. ),
  12733. weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),
  12734. weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),
  12735. weekdaysParseExact: true,
  12736. longDateFormat: {
  12737. LT: 'a h:mm',
  12738. LTS: 'a h:mm:ss',
  12739. L: 'YYYY/MM/DD',
  12740. LL: 'YYYY MMMM D',
  12741. LLL: 'YYYY MMMM D, a h:mm',
  12742. LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',
  12743. },
  12744. calendar: {
  12745. sameDay: '[අද] LT[ට]',
  12746. nextDay: '[හෙට] LT[ට]',
  12747. nextWeek: 'dddd LT[ට]',
  12748. lastDay: '[ඊයේ] LT[ට]',
  12749. lastWeek: '[පසුගිය] dddd LT[ට]',
  12750. sameElse: 'L',
  12751. },
  12752. relativeTime: {
  12753. future: '%sකින්',
  12754. past: '%sකට පෙර',
  12755. s: 'තත්පර කිහිපය',
  12756. ss: 'තත්පර %d',
  12757. m: 'මිනිත්තුව',
  12758. mm: 'මිනිත්තු %d',
  12759. h: 'පැය',
  12760. hh: 'පැය %d',
  12761. d: 'දිනය',
  12762. dd: 'දින %d',
  12763. M: 'මාසය',
  12764. MM: 'මාස %d',
  12765. y: 'වසර',
  12766. yy: 'වසර %d',
  12767. },
  12768. dayOfMonthOrdinalParse: /\d{1,2} වැනි/,
  12769. ordinal: function (number) {
  12770. return number + ' වැනි';
  12771. },
  12772. meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,
  12773. isPM: function (input) {
  12774. return input === 'ප.ව.' || input === 'පස් වරු';
  12775. },
  12776. meridiem: function (hours, minutes, isLower) {
  12777. if (hours > 11) {
  12778. return isLower ? 'ප.ව.' : 'පස් වරු';
  12779. } else {
  12780. return isLower ? 'පෙ.ව.' : 'පෙර වරු';
  12781. }
  12782. },
  12783. }));
  12784. /***/ }),
  12785. /***/ "./node_modules/moment/dist/locale/sk.js":
  12786. /*!***********************************************!*\
  12787. !*** ./node_modules/moment/dist/locale/sk.js ***!
  12788. \***********************************************/
  12789. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  12790. "use strict";
  12791. __webpack_require__.r(__webpack_exports__);
  12792. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  12793. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  12794. /* harmony export */ });
  12795. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  12796. //! moment.js locale configuration
  12797. //! locale : Slovak [sk]
  12798. //! author : Martin Minka : https://github.com/k2s
  12799. //! based on work of petrbela : https://github.com/petrbela
  12800. var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(
  12801. '_'
  12802. ),
  12803. monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');
  12804. function plural(n) {
  12805. return n > 1 && n < 5;
  12806. }
  12807. function translate(number, withoutSuffix, key, isFuture) {
  12808. var result = number + ' ';
  12809. switch (key) {
  12810. case 's': // a few seconds / in a few seconds / a few seconds ago
  12811. return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';
  12812. case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago
  12813. if (withoutSuffix || isFuture) {
  12814. return result + (plural(number) ? 'sekundy' : 'sekúnd');
  12815. } else {
  12816. return result + 'sekundami';
  12817. }
  12818. case 'm': // a minute / in a minute / a minute ago
  12819. return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';
  12820. case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago
  12821. if (withoutSuffix || isFuture) {
  12822. return result + (plural(number) ? 'minúty' : 'minút');
  12823. } else {
  12824. return result + 'minútami';
  12825. }
  12826. case 'h': // an hour / in an hour / an hour ago
  12827. return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';
  12828. case 'hh': // 9 hours / in 9 hours / 9 hours ago
  12829. if (withoutSuffix || isFuture) {
  12830. return result + (plural(number) ? 'hodiny' : 'hodín');
  12831. } else {
  12832. return result + 'hodinami';
  12833. }
  12834. case 'd': // a day / in a day / a day ago
  12835. return withoutSuffix || isFuture ? 'deň' : 'dňom';
  12836. case 'dd': // 9 days / in 9 days / 9 days ago
  12837. if (withoutSuffix || isFuture) {
  12838. return result + (plural(number) ? 'dni' : 'dní');
  12839. } else {
  12840. return result + 'dňami';
  12841. }
  12842. case 'M': // a month / in a month / a month ago
  12843. return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';
  12844. case 'MM': // 9 months / in 9 months / 9 months ago
  12845. if (withoutSuffix || isFuture) {
  12846. return result + (plural(number) ? 'mesiace' : 'mesiacov');
  12847. } else {
  12848. return result + 'mesiacmi';
  12849. }
  12850. case 'y': // a year / in a year / a year ago
  12851. return withoutSuffix || isFuture ? 'rok' : 'rokom';
  12852. case 'yy': // 9 years / in 9 years / 9 years ago
  12853. if (withoutSuffix || isFuture) {
  12854. return result + (plural(number) ? 'roky' : 'rokov');
  12855. } else {
  12856. return result + 'rokmi';
  12857. }
  12858. }
  12859. }
  12860. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('sk', {
  12861. months: months,
  12862. monthsShort: monthsShort,
  12863. weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),
  12864. weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),
  12865. weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),
  12866. longDateFormat: {
  12867. LT: 'H:mm',
  12868. LTS: 'H:mm:ss',
  12869. L: 'DD.MM.YYYY',
  12870. LL: 'D. MMMM YYYY',
  12871. LLL: 'D. MMMM YYYY H:mm',
  12872. LLLL: 'dddd D. MMMM YYYY H:mm',
  12873. },
  12874. calendar: {
  12875. sameDay: '[dnes o] LT',
  12876. nextDay: '[zajtra o] LT',
  12877. nextWeek: function () {
  12878. switch (this.day()) {
  12879. case 0:
  12880. return '[v nedeľu o] LT';
  12881. case 1:
  12882. case 2:
  12883. return '[v] dddd [o] LT';
  12884. case 3:
  12885. return '[v stredu o] LT';
  12886. case 4:
  12887. return '[vo štvrtok o] LT';
  12888. case 5:
  12889. return '[v piatok o] LT';
  12890. case 6:
  12891. return '[v sobotu o] LT';
  12892. }
  12893. },
  12894. lastDay: '[včera o] LT',
  12895. lastWeek: function () {
  12896. switch (this.day()) {
  12897. case 0:
  12898. return '[minulú nedeľu o] LT';
  12899. case 1:
  12900. case 2:
  12901. return '[minulý] dddd [o] LT';
  12902. case 3:
  12903. return '[minulú stredu o] LT';
  12904. case 4:
  12905. case 5:
  12906. return '[minulý] dddd [o] LT';
  12907. case 6:
  12908. return '[minulú sobotu o] LT';
  12909. }
  12910. },
  12911. sameElse: 'L',
  12912. },
  12913. relativeTime: {
  12914. future: 'za %s',
  12915. past: 'pred %s',
  12916. s: translate,
  12917. ss: translate,
  12918. m: translate,
  12919. mm: translate,
  12920. h: translate,
  12921. hh: translate,
  12922. d: translate,
  12923. dd: translate,
  12924. M: translate,
  12925. MM: translate,
  12926. y: translate,
  12927. yy: translate,
  12928. },
  12929. dayOfMonthOrdinalParse: /\d{1,2}\./,
  12930. ordinal: '%d.',
  12931. week: {
  12932. dow: 1, // Monday is the first day of the week.
  12933. doy: 4, // The week that contains Jan 4th is the first week of the year.
  12934. },
  12935. }));
  12936. /***/ }),
  12937. /***/ "./node_modules/moment/dist/locale/sl.js":
  12938. /*!***********************************************!*\
  12939. !*** ./node_modules/moment/dist/locale/sl.js ***!
  12940. \***********************************************/
  12941. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  12942. "use strict";
  12943. __webpack_require__.r(__webpack_exports__);
  12944. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  12945. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  12946. /* harmony export */ });
  12947. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  12948. //! moment.js locale configuration
  12949. //! locale : Slovenian [sl]
  12950. //! author : Robert Sedovšek : https://github.com/sedovsek
  12951. function processRelativeTime(number, withoutSuffix, key, isFuture) {
  12952. var result = number + ' ';
  12953. switch (key) {
  12954. case 's':
  12955. return withoutSuffix || isFuture
  12956. ? 'nekaj sekund'
  12957. : 'nekaj sekundami';
  12958. case 'ss':
  12959. if (number === 1) {
  12960. result += withoutSuffix ? 'sekundo' : 'sekundi';
  12961. } else if (number === 2) {
  12962. result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';
  12963. } else if (number < 5) {
  12964. result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';
  12965. } else {
  12966. result += 'sekund';
  12967. }
  12968. return result;
  12969. case 'm':
  12970. return withoutSuffix ? 'ena minuta' : 'eno minuto';
  12971. case 'mm':
  12972. if (number === 1) {
  12973. result += withoutSuffix ? 'minuta' : 'minuto';
  12974. } else if (number === 2) {
  12975. result += withoutSuffix || isFuture ? 'minuti' : 'minutama';
  12976. } else if (number < 5) {
  12977. result += withoutSuffix || isFuture ? 'minute' : 'minutami';
  12978. } else {
  12979. result += withoutSuffix || isFuture ? 'minut' : 'minutami';
  12980. }
  12981. return result;
  12982. case 'h':
  12983. return withoutSuffix ? 'ena ura' : 'eno uro';
  12984. case 'hh':
  12985. if (number === 1) {
  12986. result += withoutSuffix ? 'ura' : 'uro';
  12987. } else if (number === 2) {
  12988. result += withoutSuffix || isFuture ? 'uri' : 'urama';
  12989. } else if (number < 5) {
  12990. result += withoutSuffix || isFuture ? 'ure' : 'urami';
  12991. } else {
  12992. result += withoutSuffix || isFuture ? 'ur' : 'urami';
  12993. }
  12994. return result;
  12995. case 'd':
  12996. return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';
  12997. case 'dd':
  12998. if (number === 1) {
  12999. result += withoutSuffix || isFuture ? 'dan' : 'dnem';
  13000. } else if (number === 2) {
  13001. result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';
  13002. } else {
  13003. result += withoutSuffix || isFuture ? 'dni' : 'dnevi';
  13004. }
  13005. return result;
  13006. case 'M':
  13007. return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';
  13008. case 'MM':
  13009. if (number === 1) {
  13010. result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';
  13011. } else if (number === 2) {
  13012. result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';
  13013. } else if (number < 5) {
  13014. result += withoutSuffix || isFuture ? 'mesece' : 'meseci';
  13015. } else {
  13016. result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';
  13017. }
  13018. return result;
  13019. case 'y':
  13020. return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';
  13021. case 'yy':
  13022. if (number === 1) {
  13023. result += withoutSuffix || isFuture ? 'leto' : 'letom';
  13024. } else if (number === 2) {
  13025. result += withoutSuffix || isFuture ? 'leti' : 'letoma';
  13026. } else if (number < 5) {
  13027. result += withoutSuffix || isFuture ? 'leta' : 'leti';
  13028. } else {
  13029. result += withoutSuffix || isFuture ? 'let' : 'leti';
  13030. }
  13031. return result;
  13032. }
  13033. }
  13034. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('sl', {
  13035. months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(
  13036. '_'
  13037. ),
  13038. monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(
  13039. '_'
  13040. ),
  13041. monthsParseExact: true,
  13042. weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),
  13043. weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),
  13044. weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),
  13045. weekdaysParseExact: true,
  13046. longDateFormat: {
  13047. LT: 'H:mm',
  13048. LTS: 'H:mm:ss',
  13049. L: 'DD. MM. YYYY',
  13050. LL: 'D. MMMM YYYY',
  13051. LLL: 'D. MMMM YYYY H:mm',
  13052. LLLL: 'dddd, D. MMMM YYYY H:mm',
  13053. },
  13054. calendar: {
  13055. sameDay: '[danes ob] LT',
  13056. nextDay: '[jutri ob] LT',
  13057. nextWeek: function () {
  13058. switch (this.day()) {
  13059. case 0:
  13060. return '[v] [nedeljo] [ob] LT';
  13061. case 3:
  13062. return '[v] [sredo] [ob] LT';
  13063. case 6:
  13064. return '[v] [soboto] [ob] LT';
  13065. case 1:
  13066. case 2:
  13067. case 4:
  13068. case 5:
  13069. return '[v] dddd [ob] LT';
  13070. }
  13071. },
  13072. lastDay: '[včeraj ob] LT',
  13073. lastWeek: function () {
  13074. switch (this.day()) {
  13075. case 0:
  13076. return '[prejšnjo] [nedeljo] [ob] LT';
  13077. case 3:
  13078. return '[prejšnjo] [sredo] [ob] LT';
  13079. case 6:
  13080. return '[prejšnjo] [soboto] [ob] LT';
  13081. case 1:
  13082. case 2:
  13083. case 4:
  13084. case 5:
  13085. return '[prejšnji] dddd [ob] LT';
  13086. }
  13087. },
  13088. sameElse: 'L',
  13089. },
  13090. relativeTime: {
  13091. future: 'čez %s',
  13092. past: 'pred %s',
  13093. s: processRelativeTime,
  13094. ss: processRelativeTime,
  13095. m: processRelativeTime,
  13096. mm: processRelativeTime,
  13097. h: processRelativeTime,
  13098. hh: processRelativeTime,
  13099. d: processRelativeTime,
  13100. dd: processRelativeTime,
  13101. M: processRelativeTime,
  13102. MM: processRelativeTime,
  13103. y: processRelativeTime,
  13104. yy: processRelativeTime,
  13105. },
  13106. dayOfMonthOrdinalParse: /\d{1,2}\./,
  13107. ordinal: '%d.',
  13108. week: {
  13109. dow: 1, // Monday is the first day of the week.
  13110. doy: 7, // The week that contains Jan 7th is the first week of the year.
  13111. },
  13112. }));
  13113. /***/ }),
  13114. /***/ "./node_modules/moment/dist/locale/sq.js":
  13115. /*!***********************************************!*\
  13116. !*** ./node_modules/moment/dist/locale/sq.js ***!
  13117. \***********************************************/
  13118. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  13119. "use strict";
  13120. __webpack_require__.r(__webpack_exports__);
  13121. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  13122. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  13123. /* harmony export */ });
  13124. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  13125. //! moment.js locale configuration
  13126. //! locale : Albanian [sq]
  13127. //! author : Flakërim Ismani : https://github.com/flakerimi
  13128. //! author : Menelion Elensúle : https://github.com/Oire
  13129. //! author : Oerd Cukalla : https://github.com/oerd
  13130. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('sq', {
  13131. months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(
  13132. '_'
  13133. ),
  13134. monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),
  13135. weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(
  13136. '_'
  13137. ),
  13138. weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),
  13139. weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),
  13140. weekdaysParseExact: true,
  13141. meridiemParse: /PD|MD/,
  13142. isPM: function (input) {
  13143. return input.charAt(0) === 'M';
  13144. },
  13145. meridiem: function (hours, minutes, isLower) {
  13146. return hours < 12 ? 'PD' : 'MD';
  13147. },
  13148. longDateFormat: {
  13149. LT: 'HH:mm',
  13150. LTS: 'HH:mm:ss',
  13151. L: 'DD/MM/YYYY',
  13152. LL: 'D MMMM YYYY',
  13153. LLL: 'D MMMM YYYY HH:mm',
  13154. LLLL: 'dddd, D MMMM YYYY HH:mm',
  13155. },
  13156. calendar: {
  13157. sameDay: '[Sot në] LT',
  13158. nextDay: '[Nesër në] LT',
  13159. nextWeek: 'dddd [në] LT',
  13160. lastDay: '[Dje në] LT',
  13161. lastWeek: 'dddd [e kaluar në] LT',
  13162. sameElse: 'L',
  13163. },
  13164. relativeTime: {
  13165. future: 'në %s',
  13166. past: '%s më parë',
  13167. s: 'disa sekonda',
  13168. ss: '%d sekonda',
  13169. m: 'një minutë',
  13170. mm: '%d minuta',
  13171. h: 'një orë',
  13172. hh: '%d orë',
  13173. d: 'një ditë',
  13174. dd: '%d ditë',
  13175. M: 'një muaj',
  13176. MM: '%d muaj',
  13177. y: 'një vit',
  13178. yy: '%d vite',
  13179. },
  13180. dayOfMonthOrdinalParse: /\d{1,2}\./,
  13181. ordinal: '%d.',
  13182. week: {
  13183. dow: 1, // Monday is the first day of the week.
  13184. doy: 4, // The week that contains Jan 4th is the first week of the year.
  13185. },
  13186. }));
  13187. /***/ }),
  13188. /***/ "./node_modules/moment/dist/locale/sr-cyrl.js":
  13189. /*!****************************************************!*\
  13190. !*** ./node_modules/moment/dist/locale/sr-cyrl.js ***!
  13191. \****************************************************/
  13192. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  13193. "use strict";
  13194. __webpack_require__.r(__webpack_exports__);
  13195. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  13196. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  13197. /* harmony export */ });
  13198. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  13199. //! moment.js locale configuration
  13200. //! locale : Serbian Cyrillic [sr-cyrl]
  13201. //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
  13202. //! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic
  13203. var translator = {
  13204. words: {
  13205. //Different grammatical cases
  13206. ss: ['секунда', 'секунде', 'секунди'],
  13207. m: ['један минут', 'једне минуте'],
  13208. mm: ['минут', 'минуте', 'минута'],
  13209. h: ['један сат', 'једног сата'],
  13210. hh: ['сат', 'сата', 'сати'],
  13211. dd: ['дан', 'дана', 'дана'],
  13212. MM: ['месец', 'месеца', 'месеци'],
  13213. yy: ['година', 'године', 'година'],
  13214. },
  13215. correctGrammaticalCase: function (number, wordKey) {
  13216. return number === 1
  13217. ? wordKey[0]
  13218. : number >= 2 && number <= 4
  13219. ? wordKey[1]
  13220. : wordKey[2];
  13221. },
  13222. translate: function (number, withoutSuffix, key) {
  13223. var wordKey = translator.words[key];
  13224. if (key.length === 1) {
  13225. return withoutSuffix ? wordKey[0] : wordKey[1];
  13226. } else {
  13227. return (
  13228. number +
  13229. ' ' +
  13230. translator.correctGrammaticalCase(number, wordKey)
  13231. );
  13232. }
  13233. },
  13234. };
  13235. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('sr-cyrl', {
  13236. months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(
  13237. '_'
  13238. ),
  13239. monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split(
  13240. '_'
  13241. ),
  13242. monthsParseExact: true,
  13243. weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),
  13244. weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),
  13245. weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),
  13246. weekdaysParseExact: true,
  13247. longDateFormat: {
  13248. LT: 'H:mm',
  13249. LTS: 'H:mm:ss',
  13250. L: 'D. M. YYYY.',
  13251. LL: 'D. MMMM YYYY.',
  13252. LLL: 'D. MMMM YYYY. H:mm',
  13253. LLLL: 'dddd, D. MMMM YYYY. H:mm',
  13254. },
  13255. calendar: {
  13256. sameDay: '[данас у] LT',
  13257. nextDay: '[сутра у] LT',
  13258. nextWeek: function () {
  13259. switch (this.day()) {
  13260. case 0:
  13261. return '[у] [недељу] [у] LT';
  13262. case 3:
  13263. return '[у] [среду] [у] LT';
  13264. case 6:
  13265. return '[у] [суботу] [у] LT';
  13266. case 1:
  13267. case 2:
  13268. case 4:
  13269. case 5:
  13270. return '[у] dddd [у] LT';
  13271. }
  13272. },
  13273. lastDay: '[јуче у] LT',
  13274. lastWeek: function () {
  13275. var lastWeekDays = [
  13276. '[прошле] [недеље] [у] LT',
  13277. '[прошлог] [понедељка] [у] LT',
  13278. '[прошлог] [уторка] [у] LT',
  13279. '[прошле] [среде] [у] LT',
  13280. '[прошлог] [четвртка] [у] LT',
  13281. '[прошлог] [петка] [у] LT',
  13282. '[прошле] [суботе] [у] LT',
  13283. ];
  13284. return lastWeekDays[this.day()];
  13285. },
  13286. sameElse: 'L',
  13287. },
  13288. relativeTime: {
  13289. future: 'за %s',
  13290. past: 'пре %s',
  13291. s: 'неколико секунди',
  13292. ss: translator.translate,
  13293. m: translator.translate,
  13294. mm: translator.translate,
  13295. h: translator.translate,
  13296. hh: translator.translate,
  13297. d: 'дан',
  13298. dd: translator.translate,
  13299. M: 'месец',
  13300. MM: translator.translate,
  13301. y: 'годину',
  13302. yy: translator.translate,
  13303. },
  13304. dayOfMonthOrdinalParse: /\d{1,2}\./,
  13305. ordinal: '%d.',
  13306. week: {
  13307. dow: 1, // Monday is the first day of the week.
  13308. doy: 7, // The week that contains Jan 1st is the first week of the year.
  13309. },
  13310. }));
  13311. /***/ }),
  13312. /***/ "./node_modules/moment/dist/locale/sr.js":
  13313. /*!***********************************************!*\
  13314. !*** ./node_modules/moment/dist/locale/sr.js ***!
  13315. \***********************************************/
  13316. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  13317. "use strict";
  13318. __webpack_require__.r(__webpack_exports__);
  13319. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  13320. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  13321. /* harmony export */ });
  13322. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  13323. //! moment.js locale configuration
  13324. //! locale : Serbian [sr]
  13325. //! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
  13326. //! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic
  13327. var translator = {
  13328. words: {
  13329. //Different grammatical cases
  13330. ss: ['sekunda', 'sekunde', 'sekundi'],
  13331. m: ['jedan minut', 'jedne minute'],
  13332. mm: ['minut', 'minute', 'minuta'],
  13333. h: ['jedan sat', 'jednog sata'],
  13334. hh: ['sat', 'sata', 'sati'],
  13335. dd: ['dan', 'dana', 'dana'],
  13336. MM: ['mesec', 'meseca', 'meseci'],
  13337. yy: ['godina', 'godine', 'godina'],
  13338. },
  13339. correctGrammaticalCase: function (number, wordKey) {
  13340. return number === 1
  13341. ? wordKey[0]
  13342. : number >= 2 && number <= 4
  13343. ? wordKey[1]
  13344. : wordKey[2];
  13345. },
  13346. translate: function (number, withoutSuffix, key) {
  13347. var wordKey = translator.words[key];
  13348. if (key.length === 1) {
  13349. return withoutSuffix ? wordKey[0] : wordKey[1];
  13350. } else {
  13351. return (
  13352. number +
  13353. ' ' +
  13354. translator.correctGrammaticalCase(number, wordKey)
  13355. );
  13356. }
  13357. },
  13358. };
  13359. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('sr', {
  13360. months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(
  13361. '_'
  13362. ),
  13363. monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split(
  13364. '_'
  13365. ),
  13366. monthsParseExact: true,
  13367. weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(
  13368. '_'
  13369. ),
  13370. weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),
  13371. weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),
  13372. weekdaysParseExact: true,
  13373. longDateFormat: {
  13374. LT: 'H:mm',
  13375. LTS: 'H:mm:ss',
  13376. L: 'D. M. YYYY.',
  13377. LL: 'D. MMMM YYYY.',
  13378. LLL: 'D. MMMM YYYY. H:mm',
  13379. LLLL: 'dddd, D. MMMM YYYY. H:mm',
  13380. },
  13381. calendar: {
  13382. sameDay: '[danas u] LT',
  13383. nextDay: '[sutra u] LT',
  13384. nextWeek: function () {
  13385. switch (this.day()) {
  13386. case 0:
  13387. return '[u] [nedelju] [u] LT';
  13388. case 3:
  13389. return '[u] [sredu] [u] LT';
  13390. case 6:
  13391. return '[u] [subotu] [u] LT';
  13392. case 1:
  13393. case 2:
  13394. case 4:
  13395. case 5:
  13396. return '[u] dddd [u] LT';
  13397. }
  13398. },
  13399. lastDay: '[juče u] LT',
  13400. lastWeek: function () {
  13401. var lastWeekDays = [
  13402. '[prošle] [nedelje] [u] LT',
  13403. '[prošlog] [ponedeljka] [u] LT',
  13404. '[prošlog] [utorka] [u] LT',
  13405. '[prošle] [srede] [u] LT',
  13406. '[prošlog] [četvrtka] [u] LT',
  13407. '[prošlog] [petka] [u] LT',
  13408. '[prošle] [subote] [u] LT',
  13409. ];
  13410. return lastWeekDays[this.day()];
  13411. },
  13412. sameElse: 'L',
  13413. },
  13414. relativeTime: {
  13415. future: 'za %s',
  13416. past: 'pre %s',
  13417. s: 'nekoliko sekundi',
  13418. ss: translator.translate,
  13419. m: translator.translate,
  13420. mm: translator.translate,
  13421. h: translator.translate,
  13422. hh: translator.translate,
  13423. d: 'dan',
  13424. dd: translator.translate,
  13425. M: 'mesec',
  13426. MM: translator.translate,
  13427. y: 'godinu',
  13428. yy: translator.translate,
  13429. },
  13430. dayOfMonthOrdinalParse: /\d{1,2}\./,
  13431. ordinal: '%d.',
  13432. week: {
  13433. dow: 1, // Monday is the first day of the week.
  13434. doy: 7, // The week that contains Jan 7th is the first week of the year.
  13435. },
  13436. }));
  13437. /***/ }),
  13438. /***/ "./node_modules/moment/dist/locale/ss.js":
  13439. /*!***********************************************!*\
  13440. !*** ./node_modules/moment/dist/locale/ss.js ***!
  13441. \***********************************************/
  13442. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  13443. "use strict";
  13444. __webpack_require__.r(__webpack_exports__);
  13445. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  13446. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  13447. /* harmony export */ });
  13448. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  13449. //! moment.js locale configuration
  13450. //! locale : siSwati [ss]
  13451. //! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies
  13452. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ss', {
  13453. months: "Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni".split(
  13454. '_'
  13455. ),
  13456. monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),
  13457. weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(
  13458. '_'
  13459. ),
  13460. weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),
  13461. weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),
  13462. weekdaysParseExact: true,
  13463. longDateFormat: {
  13464. LT: 'h:mm A',
  13465. LTS: 'h:mm:ss A',
  13466. L: 'DD/MM/YYYY',
  13467. LL: 'D MMMM YYYY',
  13468. LLL: 'D MMMM YYYY h:mm A',
  13469. LLLL: 'dddd, D MMMM YYYY h:mm A',
  13470. },
  13471. calendar: {
  13472. sameDay: '[Namuhla nga] LT',
  13473. nextDay: '[Kusasa nga] LT',
  13474. nextWeek: 'dddd [nga] LT',
  13475. lastDay: '[Itolo nga] LT',
  13476. lastWeek: 'dddd [leliphelile] [nga] LT',
  13477. sameElse: 'L',
  13478. },
  13479. relativeTime: {
  13480. future: 'nga %s',
  13481. past: 'wenteka nga %s',
  13482. s: 'emizuzwana lomcane',
  13483. ss: '%d mzuzwana',
  13484. m: 'umzuzu',
  13485. mm: '%d emizuzu',
  13486. h: 'lihora',
  13487. hh: '%d emahora',
  13488. d: 'lilanga',
  13489. dd: '%d emalanga',
  13490. M: 'inyanga',
  13491. MM: '%d tinyanga',
  13492. y: 'umnyaka',
  13493. yy: '%d iminyaka',
  13494. },
  13495. meridiemParse: /ekuseni|emini|entsambama|ebusuku/,
  13496. meridiem: function (hours, minutes, isLower) {
  13497. if (hours < 11) {
  13498. return 'ekuseni';
  13499. } else if (hours < 15) {
  13500. return 'emini';
  13501. } else if (hours < 19) {
  13502. return 'entsambama';
  13503. } else {
  13504. return 'ebusuku';
  13505. }
  13506. },
  13507. meridiemHour: function (hour, meridiem) {
  13508. if (hour === 12) {
  13509. hour = 0;
  13510. }
  13511. if (meridiem === 'ekuseni') {
  13512. return hour;
  13513. } else if (meridiem === 'emini') {
  13514. return hour >= 11 ? hour : hour + 12;
  13515. } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {
  13516. if (hour === 0) {
  13517. return 0;
  13518. }
  13519. return hour + 12;
  13520. }
  13521. },
  13522. dayOfMonthOrdinalParse: /\d{1,2}/,
  13523. ordinal: '%d',
  13524. week: {
  13525. dow: 1, // Monday is the first day of the week.
  13526. doy: 4, // The week that contains Jan 4th is the first week of the year.
  13527. },
  13528. }));
  13529. /***/ }),
  13530. /***/ "./node_modules/moment/dist/locale/sv.js":
  13531. /*!***********************************************!*\
  13532. !*** ./node_modules/moment/dist/locale/sv.js ***!
  13533. \***********************************************/
  13534. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  13535. "use strict";
  13536. __webpack_require__.r(__webpack_exports__);
  13537. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  13538. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  13539. /* harmony export */ });
  13540. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  13541. //! moment.js locale configuration
  13542. //! locale : Swedish [sv]
  13543. //! author : Jens Alm : https://github.com/ulmus
  13544. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('sv', {
  13545. months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(
  13546. '_'
  13547. ),
  13548. monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
  13549. weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
  13550. weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
  13551. weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),
  13552. longDateFormat: {
  13553. LT: 'HH:mm',
  13554. LTS: 'HH:mm:ss',
  13555. L: 'YYYY-MM-DD',
  13556. LL: 'D MMMM YYYY',
  13557. LLL: 'D MMMM YYYY [kl.] HH:mm',
  13558. LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',
  13559. lll: 'D MMM YYYY HH:mm',
  13560. llll: 'ddd D MMM YYYY HH:mm',
  13561. },
  13562. calendar: {
  13563. sameDay: '[Idag] LT',
  13564. nextDay: '[Imorgon] LT',
  13565. lastDay: '[Igår] LT',
  13566. nextWeek: '[På] dddd LT',
  13567. lastWeek: '[I] dddd[s] LT',
  13568. sameElse: 'L',
  13569. },
  13570. relativeTime: {
  13571. future: 'om %s',
  13572. past: 'för %s sedan',
  13573. s: 'några sekunder',
  13574. ss: '%d sekunder',
  13575. m: 'en minut',
  13576. mm: '%d minuter',
  13577. h: 'en timme',
  13578. hh: '%d timmar',
  13579. d: 'en dag',
  13580. dd: '%d dagar',
  13581. M: 'en månad',
  13582. MM: '%d månader',
  13583. y: 'ett år',
  13584. yy: '%d år',
  13585. },
  13586. dayOfMonthOrdinalParse: /\d{1,2}(\:e|\:a)/,
  13587. ordinal: function (number) {
  13588. var b = number % 10,
  13589. output =
  13590. ~~((number % 100) / 10) === 1
  13591. ? ':e'
  13592. : b === 1
  13593. ? ':a'
  13594. : b === 2
  13595. ? ':a'
  13596. : b === 3
  13597. ? ':e'
  13598. : ':e';
  13599. return number + output;
  13600. },
  13601. week: {
  13602. dow: 1, // Monday is the first day of the week.
  13603. doy: 4, // The week that contains Jan 4th is the first week of the year.
  13604. },
  13605. }));
  13606. /***/ }),
  13607. /***/ "./node_modules/moment/dist/locale/sw.js":
  13608. /*!***********************************************!*\
  13609. !*** ./node_modules/moment/dist/locale/sw.js ***!
  13610. \***********************************************/
  13611. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  13612. "use strict";
  13613. __webpack_require__.r(__webpack_exports__);
  13614. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  13615. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  13616. /* harmony export */ });
  13617. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  13618. //! moment.js locale configuration
  13619. //! locale : Swahili [sw]
  13620. //! author : Fahad Kassim : https://github.com/fadsel
  13621. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('sw', {
  13622. months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(
  13623. '_'
  13624. ),
  13625. monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),
  13626. weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(
  13627. '_'
  13628. ),
  13629. weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),
  13630. weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),
  13631. weekdaysParseExact: true,
  13632. longDateFormat: {
  13633. LT: 'hh:mm A',
  13634. LTS: 'HH:mm:ss',
  13635. L: 'DD.MM.YYYY',
  13636. LL: 'D MMMM YYYY',
  13637. LLL: 'D MMMM YYYY HH:mm',
  13638. LLLL: 'dddd, D MMMM YYYY HH:mm',
  13639. },
  13640. calendar: {
  13641. sameDay: '[leo saa] LT',
  13642. nextDay: '[kesho saa] LT',
  13643. nextWeek: '[wiki ijayo] dddd [saat] LT',
  13644. lastDay: '[jana] LT',
  13645. lastWeek: '[wiki iliyopita] dddd [saat] LT',
  13646. sameElse: 'L',
  13647. },
  13648. relativeTime: {
  13649. future: '%s baadaye',
  13650. past: 'tokea %s',
  13651. s: 'hivi punde',
  13652. ss: 'sekunde %d',
  13653. m: 'dakika moja',
  13654. mm: 'dakika %d',
  13655. h: 'saa limoja',
  13656. hh: 'masaa %d',
  13657. d: 'siku moja',
  13658. dd: 'siku %d',
  13659. M: 'mwezi mmoja',
  13660. MM: 'miezi %d',
  13661. y: 'mwaka mmoja',
  13662. yy: 'miaka %d',
  13663. },
  13664. week: {
  13665. dow: 1, // Monday is the first day of the week.
  13666. doy: 7, // The week that contains Jan 7th is the first week of the year.
  13667. },
  13668. }));
  13669. /***/ }),
  13670. /***/ "./node_modules/moment/dist/locale/ta.js":
  13671. /*!***********************************************!*\
  13672. !*** ./node_modules/moment/dist/locale/ta.js ***!
  13673. \***********************************************/
  13674. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  13675. "use strict";
  13676. __webpack_require__.r(__webpack_exports__);
  13677. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  13678. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  13679. /* harmony export */ });
  13680. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  13681. //! moment.js locale configuration
  13682. //! locale : Tamil [ta]
  13683. //! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404
  13684. var symbolMap = {
  13685. 1: '௧',
  13686. 2: '௨',
  13687. 3: '௩',
  13688. 4: '௪',
  13689. 5: '௫',
  13690. 6: '௬',
  13691. 7: '௭',
  13692. 8: '௮',
  13693. 9: '௯',
  13694. 0: '௦',
  13695. },
  13696. numberMap = {
  13697. '௧': '1',
  13698. '௨': '2',
  13699. '௩': '3',
  13700. '௪': '4',
  13701. '௫': '5',
  13702. '௬': '6',
  13703. '௭': '7',
  13704. '௮': '8',
  13705. '௯': '9',
  13706. '௦': '0',
  13707. };
  13708. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ta', {
  13709. months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(
  13710. '_'
  13711. ),
  13712. monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(
  13713. '_'
  13714. ),
  13715. weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(
  13716. '_'
  13717. ),
  13718. weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(
  13719. '_'
  13720. ),
  13721. weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),
  13722. longDateFormat: {
  13723. LT: 'HH:mm',
  13724. LTS: 'HH:mm:ss',
  13725. L: 'DD/MM/YYYY',
  13726. LL: 'D MMMM YYYY',
  13727. LLL: 'D MMMM YYYY, HH:mm',
  13728. LLLL: 'dddd, D MMMM YYYY, HH:mm',
  13729. },
  13730. calendar: {
  13731. sameDay: '[இன்று] LT',
  13732. nextDay: '[நாளை] LT',
  13733. nextWeek: 'dddd, LT',
  13734. lastDay: '[நேற்று] LT',
  13735. lastWeek: '[கடந்த வாரம்] dddd, LT',
  13736. sameElse: 'L',
  13737. },
  13738. relativeTime: {
  13739. future: '%s இல்',
  13740. past: '%s முன்',
  13741. s: 'ஒரு சில விநாடிகள்',
  13742. ss: '%d விநாடிகள்',
  13743. m: 'ஒரு நிமிடம்',
  13744. mm: '%d நிமிடங்கள்',
  13745. h: 'ஒரு மணி நேரம்',
  13746. hh: '%d மணி நேரம்',
  13747. d: 'ஒரு நாள்',
  13748. dd: '%d நாட்கள்',
  13749. M: 'ஒரு மாதம்',
  13750. MM: '%d மாதங்கள்',
  13751. y: 'ஒரு வருடம்',
  13752. yy: '%d ஆண்டுகள்',
  13753. },
  13754. dayOfMonthOrdinalParse: /\d{1,2}வது/,
  13755. ordinal: function (number) {
  13756. return number + 'வது';
  13757. },
  13758. preparse: function (string) {
  13759. return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {
  13760. return numberMap[match];
  13761. });
  13762. },
  13763. postformat: function (string) {
  13764. return string.replace(/\d/g, function (match) {
  13765. return symbolMap[match];
  13766. });
  13767. },
  13768. // refer http://ta.wikipedia.org/s/1er1
  13769. meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,
  13770. meridiem: function (hour, minute, isLower) {
  13771. if (hour < 2) {
  13772. return ' யாமம்';
  13773. } else if (hour < 6) {
  13774. return ' வைகறை'; // வைகறை
  13775. } else if (hour < 10) {
  13776. return ' காலை'; // காலை
  13777. } else if (hour < 14) {
  13778. return ' நண்பகல்'; // நண்பகல்
  13779. } else if (hour < 18) {
  13780. return ' எற்பாடு'; // எற்பாடு
  13781. } else if (hour < 22) {
  13782. return ' மாலை'; // மாலை
  13783. } else {
  13784. return ' யாமம்';
  13785. }
  13786. },
  13787. meridiemHour: function (hour, meridiem) {
  13788. if (hour === 12) {
  13789. hour = 0;
  13790. }
  13791. if (meridiem === 'யாமம்') {
  13792. return hour < 2 ? hour : hour + 12;
  13793. } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {
  13794. return hour;
  13795. } else if (meridiem === 'நண்பகல்') {
  13796. return hour >= 10 ? hour : hour + 12;
  13797. } else {
  13798. return hour + 12;
  13799. }
  13800. },
  13801. week: {
  13802. dow: 0, // Sunday is the first day of the week.
  13803. doy: 6, // The week that contains Jan 6th is the first week of the year.
  13804. },
  13805. }));
  13806. /***/ }),
  13807. /***/ "./node_modules/moment/dist/locale/te.js":
  13808. /*!***********************************************!*\
  13809. !*** ./node_modules/moment/dist/locale/te.js ***!
  13810. \***********************************************/
  13811. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  13812. "use strict";
  13813. __webpack_require__.r(__webpack_exports__);
  13814. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  13815. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  13816. /* harmony export */ });
  13817. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  13818. //! moment.js locale configuration
  13819. //! locale : Telugu [te]
  13820. //! author : Krishna Chaitanya Thota : https://github.com/kcthota
  13821. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('te', {
  13822. months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(
  13823. '_'
  13824. ),
  13825. monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(
  13826. '_'
  13827. ),
  13828. monthsParseExact: true,
  13829. weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(
  13830. '_'
  13831. ),
  13832. weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),
  13833. weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),
  13834. longDateFormat: {
  13835. LT: 'A h:mm',
  13836. LTS: 'A h:mm:ss',
  13837. L: 'DD/MM/YYYY',
  13838. LL: 'D MMMM YYYY',
  13839. LLL: 'D MMMM YYYY, A h:mm',
  13840. LLLL: 'dddd, D MMMM YYYY, A h:mm',
  13841. },
  13842. calendar: {
  13843. sameDay: '[నేడు] LT',
  13844. nextDay: '[రేపు] LT',
  13845. nextWeek: 'dddd, LT',
  13846. lastDay: '[నిన్న] LT',
  13847. lastWeek: '[గత] dddd, LT',
  13848. sameElse: 'L',
  13849. },
  13850. relativeTime: {
  13851. future: '%s లో',
  13852. past: '%s క్రితం',
  13853. s: 'కొన్ని క్షణాలు',
  13854. ss: '%d సెకన్లు',
  13855. m: 'ఒక నిమిషం',
  13856. mm: '%d నిమిషాలు',
  13857. h: 'ఒక గంట',
  13858. hh: '%d గంటలు',
  13859. d: 'ఒక రోజు',
  13860. dd: '%d రోజులు',
  13861. M: 'ఒక నెల',
  13862. MM: '%d నెలలు',
  13863. y: 'ఒక సంవత్సరం',
  13864. yy: '%d సంవత్సరాలు',
  13865. },
  13866. dayOfMonthOrdinalParse: /\d{1,2}వ/,
  13867. ordinal: '%dవ',
  13868. meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,
  13869. meridiemHour: function (hour, meridiem) {
  13870. if (hour === 12) {
  13871. hour = 0;
  13872. }
  13873. if (meridiem === 'రాత్రి') {
  13874. return hour < 4 ? hour : hour + 12;
  13875. } else if (meridiem === 'ఉదయం') {
  13876. return hour;
  13877. } else if (meridiem === 'మధ్యాహ్నం') {
  13878. return hour >= 10 ? hour : hour + 12;
  13879. } else if (meridiem === 'సాయంత్రం') {
  13880. return hour + 12;
  13881. }
  13882. },
  13883. meridiem: function (hour, minute, isLower) {
  13884. if (hour < 4) {
  13885. return 'రాత్రి';
  13886. } else if (hour < 10) {
  13887. return 'ఉదయం';
  13888. } else if (hour < 17) {
  13889. return 'మధ్యాహ్నం';
  13890. } else if (hour < 20) {
  13891. return 'సాయంత్రం';
  13892. } else {
  13893. return 'రాత్రి';
  13894. }
  13895. },
  13896. week: {
  13897. dow: 0, // Sunday is the first day of the week.
  13898. doy: 6, // The week that contains Jan 6th is the first week of the year.
  13899. },
  13900. }));
  13901. /***/ }),
  13902. /***/ "./node_modules/moment/dist/locale/tet.js":
  13903. /*!************************************************!*\
  13904. !*** ./node_modules/moment/dist/locale/tet.js ***!
  13905. \************************************************/
  13906. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  13907. "use strict";
  13908. __webpack_require__.r(__webpack_exports__);
  13909. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  13910. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  13911. /* harmony export */ });
  13912. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  13913. //! moment.js locale configuration
  13914. //! locale : Tetun Dili (East Timor) [tet]
  13915. //! author : Joshua Brooks : https://github.com/joshbrooks
  13916. //! author : Onorio De J. Afonso : https://github.com/marobo
  13917. //! author : Sonia Simoes : https://github.com/soniasimoes
  13918. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('tet', {
  13919. months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(
  13920. '_'
  13921. ),
  13922. monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
  13923. weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),
  13924. weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),
  13925. weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),
  13926. longDateFormat: {
  13927. LT: 'HH:mm',
  13928. LTS: 'HH:mm:ss',
  13929. L: 'DD/MM/YYYY',
  13930. LL: 'D MMMM YYYY',
  13931. LLL: 'D MMMM YYYY HH:mm',
  13932. LLLL: 'dddd, D MMMM YYYY HH:mm',
  13933. },
  13934. calendar: {
  13935. sameDay: '[Ohin iha] LT',
  13936. nextDay: '[Aban iha] LT',
  13937. nextWeek: 'dddd [iha] LT',
  13938. lastDay: '[Horiseik iha] LT',
  13939. lastWeek: 'dddd [semana kotuk] [iha] LT',
  13940. sameElse: 'L',
  13941. },
  13942. relativeTime: {
  13943. future: 'iha %s',
  13944. past: '%s liuba',
  13945. s: 'segundu balun',
  13946. ss: 'segundu %d',
  13947. m: 'minutu ida',
  13948. mm: 'minutu %d',
  13949. h: 'oras ida',
  13950. hh: 'oras %d',
  13951. d: 'loron ida',
  13952. dd: 'loron %d',
  13953. M: 'fulan ida',
  13954. MM: 'fulan %d',
  13955. y: 'tinan ida',
  13956. yy: 'tinan %d',
  13957. },
  13958. dayOfMonthOrdinalParse: /\d{1,2}(st|nd|rd|th)/,
  13959. ordinal: function (number) {
  13960. var b = number % 10,
  13961. output =
  13962. ~~((number % 100) / 10) === 1
  13963. ? 'th'
  13964. : b === 1
  13965. ? 'st'
  13966. : b === 2
  13967. ? 'nd'
  13968. : b === 3
  13969. ? 'rd'
  13970. : 'th';
  13971. return number + output;
  13972. },
  13973. week: {
  13974. dow: 1, // Monday is the first day of the week.
  13975. doy: 4, // The week that contains Jan 4th is the first week of the year.
  13976. },
  13977. }));
  13978. /***/ }),
  13979. /***/ "./node_modules/moment/dist/locale/tg.js":
  13980. /*!***********************************************!*\
  13981. !*** ./node_modules/moment/dist/locale/tg.js ***!
  13982. \***********************************************/
  13983. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  13984. "use strict";
  13985. __webpack_require__.r(__webpack_exports__);
  13986. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  13987. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  13988. /* harmony export */ });
  13989. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  13990. //! moment.js locale configuration
  13991. //! locale : Tajik [tg]
  13992. //! author : Orif N. Jr. : https://github.com/orif-jr
  13993. var suffixes = {
  13994. 0: '-ум',
  13995. 1: '-ум',
  13996. 2: '-юм',
  13997. 3: '-юм',
  13998. 4: '-ум',
  13999. 5: '-ум',
  14000. 6: '-ум',
  14001. 7: '-ум',
  14002. 8: '-ум',
  14003. 9: '-ум',
  14004. 10: '-ум',
  14005. 12: '-ум',
  14006. 13: '-ум',
  14007. 20: '-ум',
  14008. 30: '-юм',
  14009. 40: '-ум',
  14010. 50: '-ум',
  14011. 60: '-ум',
  14012. 70: '-ум',
  14013. 80: '-ум',
  14014. 90: '-ум',
  14015. 100: '-ум',
  14016. };
  14017. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('tg', {
  14018. months: {
  14019. format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(
  14020. '_'
  14021. ),
  14022. standalone: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(
  14023. '_'
  14024. ),
  14025. },
  14026. monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
  14027. weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(
  14028. '_'
  14029. ),
  14030. weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),
  14031. weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),
  14032. longDateFormat: {
  14033. LT: 'HH:mm',
  14034. LTS: 'HH:mm:ss',
  14035. L: 'DD.MM.YYYY',
  14036. LL: 'D MMMM YYYY',
  14037. LLL: 'D MMMM YYYY HH:mm',
  14038. LLLL: 'dddd, D MMMM YYYY HH:mm',
  14039. },
  14040. calendar: {
  14041. sameDay: '[Имрӯз соати] LT',
  14042. nextDay: '[Фардо соати] LT',
  14043. lastDay: '[Дирӯз соати] LT',
  14044. nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',
  14045. lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',
  14046. sameElse: 'L',
  14047. },
  14048. relativeTime: {
  14049. future: 'баъди %s',
  14050. past: '%s пеш',
  14051. s: 'якчанд сония',
  14052. m: 'як дақиқа',
  14053. mm: '%d дақиқа',
  14054. h: 'як соат',
  14055. hh: '%d соат',
  14056. d: 'як рӯз',
  14057. dd: '%d рӯз',
  14058. M: 'як моҳ',
  14059. MM: '%d моҳ',
  14060. y: 'як сол',
  14061. yy: '%d сол',
  14062. },
  14063. meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,
  14064. meridiemHour: function (hour, meridiem) {
  14065. if (hour === 12) {
  14066. hour = 0;
  14067. }
  14068. if (meridiem === 'шаб') {
  14069. return hour < 4 ? hour : hour + 12;
  14070. } else if (meridiem === 'субҳ') {
  14071. return hour;
  14072. } else if (meridiem === 'рӯз') {
  14073. return hour >= 11 ? hour : hour + 12;
  14074. } else if (meridiem === 'бегоҳ') {
  14075. return hour + 12;
  14076. }
  14077. },
  14078. meridiem: function (hour, minute, isLower) {
  14079. if (hour < 4) {
  14080. return 'шаб';
  14081. } else if (hour < 11) {
  14082. return 'субҳ';
  14083. } else if (hour < 16) {
  14084. return 'рӯз';
  14085. } else if (hour < 19) {
  14086. return 'бегоҳ';
  14087. } else {
  14088. return 'шаб';
  14089. }
  14090. },
  14091. dayOfMonthOrdinalParse: /\d{1,2}-(ум|юм)/,
  14092. ordinal: function (number) {
  14093. var a = number % 10,
  14094. b = number >= 100 ? 100 : null;
  14095. return number + (suffixes[number] || suffixes[a] || suffixes[b]);
  14096. },
  14097. week: {
  14098. dow: 1, // Monday is the first day of the week.
  14099. doy: 7, // The week that contains Jan 1th is the first week of the year.
  14100. },
  14101. }));
  14102. /***/ }),
  14103. /***/ "./node_modules/moment/dist/locale/th.js":
  14104. /*!***********************************************!*\
  14105. !*** ./node_modules/moment/dist/locale/th.js ***!
  14106. \***********************************************/
  14107. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  14108. "use strict";
  14109. __webpack_require__.r(__webpack_exports__);
  14110. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  14111. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  14112. /* harmony export */ });
  14113. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  14114. //! moment.js locale configuration
  14115. //! locale : Thai [th]
  14116. //! author : Kridsada Thanabulpong : https://github.com/sirn
  14117. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('th', {
  14118. months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(
  14119. '_'
  14120. ),
  14121. monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(
  14122. '_'
  14123. ),
  14124. monthsParseExact: true,
  14125. weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),
  14126. weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference
  14127. weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),
  14128. weekdaysParseExact: true,
  14129. longDateFormat: {
  14130. LT: 'H:mm',
  14131. LTS: 'H:mm:ss',
  14132. L: 'DD/MM/YYYY',
  14133. LL: 'D MMMM YYYY',
  14134. LLL: 'D MMMM YYYY เวลา H:mm',
  14135. LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',
  14136. },
  14137. meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,
  14138. isPM: function (input) {
  14139. return input === 'หลังเที่ยง';
  14140. },
  14141. meridiem: function (hour, minute, isLower) {
  14142. if (hour < 12) {
  14143. return 'ก่อนเที่ยง';
  14144. } else {
  14145. return 'หลังเที่ยง';
  14146. }
  14147. },
  14148. calendar: {
  14149. sameDay: '[วันนี้ เวลา] LT',
  14150. nextDay: '[พรุ่งนี้ เวลา] LT',
  14151. nextWeek: 'dddd[หน้า เวลา] LT',
  14152. lastDay: '[เมื่อวานนี้ เวลา] LT',
  14153. lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',
  14154. sameElse: 'L',
  14155. },
  14156. relativeTime: {
  14157. future: 'อีก %s',
  14158. past: '%sที่แล้ว',
  14159. s: 'ไม่กี่วินาที',
  14160. ss: '%d วินาที',
  14161. m: '1 นาที',
  14162. mm: '%d นาที',
  14163. h: '1 ชั่วโมง',
  14164. hh: '%d ชั่วโมง',
  14165. d: '1 วัน',
  14166. dd: '%d วัน',
  14167. w: '1 สัปดาห์',
  14168. ww: '%d สัปดาห์',
  14169. M: '1 เดือน',
  14170. MM: '%d เดือน',
  14171. y: '1 ปี',
  14172. yy: '%d ปี',
  14173. },
  14174. }));
  14175. /***/ }),
  14176. /***/ "./node_modules/moment/dist/locale/tk.js":
  14177. /*!***********************************************!*\
  14178. !*** ./node_modules/moment/dist/locale/tk.js ***!
  14179. \***********************************************/
  14180. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  14181. "use strict";
  14182. __webpack_require__.r(__webpack_exports__);
  14183. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  14184. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  14185. /* harmony export */ });
  14186. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  14187. //! moment.js locale configuration
  14188. //! locale : Turkmen [tk]
  14189. //! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy
  14190. var suffixes = {
  14191. 1: "'inji",
  14192. 5: "'inji",
  14193. 8: "'inji",
  14194. 70: "'inji",
  14195. 80: "'inji",
  14196. 2: "'nji",
  14197. 7: "'nji",
  14198. 20: "'nji",
  14199. 50: "'nji",
  14200. 3: "'ünji",
  14201. 4: "'ünji",
  14202. 100: "'ünji",
  14203. 6: "'njy",
  14204. 9: "'unjy",
  14205. 10: "'unjy",
  14206. 30: "'unjy",
  14207. 60: "'ynjy",
  14208. 90: "'ynjy",
  14209. };
  14210. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('tk', {
  14211. months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(
  14212. '_'
  14213. ),
  14214. monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),
  14215. weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(
  14216. '_'
  14217. ),
  14218. weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),
  14219. weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),
  14220. longDateFormat: {
  14221. LT: 'HH:mm',
  14222. LTS: 'HH:mm:ss',
  14223. L: 'DD.MM.YYYY',
  14224. LL: 'D MMMM YYYY',
  14225. LLL: 'D MMMM YYYY HH:mm',
  14226. LLLL: 'dddd, D MMMM YYYY HH:mm',
  14227. },
  14228. calendar: {
  14229. sameDay: '[bugün sagat] LT',
  14230. nextDay: '[ertir sagat] LT',
  14231. nextWeek: '[indiki] dddd [sagat] LT',
  14232. lastDay: '[düýn] LT',
  14233. lastWeek: '[geçen] dddd [sagat] LT',
  14234. sameElse: 'L',
  14235. },
  14236. relativeTime: {
  14237. future: '%s soň',
  14238. past: '%s öň',
  14239. s: 'birnäçe sekunt',
  14240. m: 'bir minut',
  14241. mm: '%d minut',
  14242. h: 'bir sagat',
  14243. hh: '%d sagat',
  14244. d: 'bir gün',
  14245. dd: '%d gün',
  14246. M: 'bir aý',
  14247. MM: '%d aý',
  14248. y: 'bir ýyl',
  14249. yy: '%d ýyl',
  14250. },
  14251. ordinal: function (number, period) {
  14252. switch (period) {
  14253. case 'd':
  14254. case 'D':
  14255. case 'Do':
  14256. case 'DD':
  14257. return number;
  14258. default:
  14259. if (number === 0) {
  14260. // special case for zero
  14261. return number + "'unjy";
  14262. }
  14263. var a = number % 10,
  14264. b = (number % 100) - a,
  14265. c = number >= 100 ? 100 : null;
  14266. return number + (suffixes[a] || suffixes[b] || suffixes[c]);
  14267. }
  14268. },
  14269. week: {
  14270. dow: 1, // Monday is the first day of the week.
  14271. doy: 7, // The week that contains Jan 7th is the first week of the year.
  14272. },
  14273. }));
  14274. /***/ }),
  14275. /***/ "./node_modules/moment/dist/locale/tl-ph.js":
  14276. /*!**************************************************!*\
  14277. !*** ./node_modules/moment/dist/locale/tl-ph.js ***!
  14278. \**************************************************/
  14279. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  14280. "use strict";
  14281. __webpack_require__.r(__webpack_exports__);
  14282. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  14283. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  14284. /* harmony export */ });
  14285. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  14286. //! moment.js locale configuration
  14287. //! locale : Tagalog (Philippines) [tl-ph]
  14288. //! author : Dan Hagman : https://github.com/hagmandan
  14289. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('tl-ph', {
  14290. months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(
  14291. '_'
  14292. ),
  14293. monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),
  14294. weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(
  14295. '_'
  14296. ),
  14297. weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),
  14298. weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),
  14299. longDateFormat: {
  14300. LT: 'HH:mm',
  14301. LTS: 'HH:mm:ss',
  14302. L: 'MM/D/YYYY',
  14303. LL: 'MMMM D, YYYY',
  14304. LLL: 'MMMM D, YYYY HH:mm',
  14305. LLLL: 'dddd, MMMM DD, YYYY HH:mm',
  14306. },
  14307. calendar: {
  14308. sameDay: 'LT [ngayong araw]',
  14309. nextDay: '[Bukas ng] LT',
  14310. nextWeek: 'LT [sa susunod na] dddd',
  14311. lastDay: 'LT [kahapon]',
  14312. lastWeek: 'LT [noong nakaraang] dddd',
  14313. sameElse: 'L',
  14314. },
  14315. relativeTime: {
  14316. future: 'sa loob ng %s',
  14317. past: '%s ang nakalipas',
  14318. s: 'ilang segundo',
  14319. ss: '%d segundo',
  14320. m: 'isang minuto',
  14321. mm: '%d minuto',
  14322. h: 'isang oras',
  14323. hh: '%d oras',
  14324. d: 'isang araw',
  14325. dd: '%d araw',
  14326. M: 'isang buwan',
  14327. MM: '%d buwan',
  14328. y: 'isang taon',
  14329. yy: '%d taon',
  14330. },
  14331. dayOfMonthOrdinalParse: /\d{1,2}/,
  14332. ordinal: function (number) {
  14333. return number;
  14334. },
  14335. week: {
  14336. dow: 1, // Monday is the first day of the week.
  14337. doy: 4, // The week that contains Jan 4th is the first week of the year.
  14338. },
  14339. }));
  14340. /***/ }),
  14341. /***/ "./node_modules/moment/dist/locale/tlh.js":
  14342. /*!************************************************!*\
  14343. !*** ./node_modules/moment/dist/locale/tlh.js ***!
  14344. \************************************************/
  14345. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  14346. "use strict";
  14347. __webpack_require__.r(__webpack_exports__);
  14348. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  14349. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  14350. /* harmony export */ });
  14351. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  14352. //! moment.js locale configuration
  14353. //! locale : Klingon [tlh]
  14354. //! author : Dominika Kruk : https://github.com/amaranthrose
  14355. var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');
  14356. function translateFuture(output) {
  14357. var time = output;
  14358. time =
  14359. output.indexOf('jaj') !== -1
  14360. ? time.slice(0, -3) + 'leS'
  14361. : output.indexOf('jar') !== -1
  14362. ? time.slice(0, -3) + 'waQ'
  14363. : output.indexOf('DIS') !== -1
  14364. ? time.slice(0, -3) + 'nem'
  14365. : time + ' pIq';
  14366. return time;
  14367. }
  14368. function translatePast(output) {
  14369. var time = output;
  14370. time =
  14371. output.indexOf('jaj') !== -1
  14372. ? time.slice(0, -3) + 'Hu’'
  14373. : output.indexOf('jar') !== -1
  14374. ? time.slice(0, -3) + 'wen'
  14375. : output.indexOf('DIS') !== -1
  14376. ? time.slice(0, -3) + 'ben'
  14377. : time + ' ret';
  14378. return time;
  14379. }
  14380. function translate(number, withoutSuffix, string, isFuture) {
  14381. var numberNoun = numberAsNoun(number);
  14382. switch (string) {
  14383. case 'ss':
  14384. return numberNoun + ' lup';
  14385. case 'mm':
  14386. return numberNoun + ' tup';
  14387. case 'hh':
  14388. return numberNoun + ' rep';
  14389. case 'dd':
  14390. return numberNoun + ' jaj';
  14391. case 'MM':
  14392. return numberNoun + ' jar';
  14393. case 'yy':
  14394. return numberNoun + ' DIS';
  14395. }
  14396. }
  14397. function numberAsNoun(number) {
  14398. var hundred = Math.floor((number % 1000) / 100),
  14399. ten = Math.floor((number % 100) / 10),
  14400. one = number % 10,
  14401. word = '';
  14402. if (hundred > 0) {
  14403. word += numbersNouns[hundred] + 'vatlh';
  14404. }
  14405. if (ten > 0) {
  14406. word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';
  14407. }
  14408. if (one > 0) {
  14409. word += (word !== '' ? ' ' : '') + numbersNouns[one];
  14410. }
  14411. return word === '' ? 'pagh' : word;
  14412. }
  14413. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('tlh', {
  14414. months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(
  14415. '_'
  14416. ),
  14417. monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(
  14418. '_'
  14419. ),
  14420. monthsParseExact: true,
  14421. weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
  14422. '_'
  14423. ),
  14424. weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
  14425. '_'
  14426. ),
  14427. weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(
  14428. '_'
  14429. ),
  14430. longDateFormat: {
  14431. LT: 'HH:mm',
  14432. LTS: 'HH:mm:ss',
  14433. L: 'DD.MM.YYYY',
  14434. LL: 'D MMMM YYYY',
  14435. LLL: 'D MMMM YYYY HH:mm',
  14436. LLLL: 'dddd, D MMMM YYYY HH:mm',
  14437. },
  14438. calendar: {
  14439. sameDay: '[DaHjaj] LT',
  14440. nextDay: '[wa’leS] LT',
  14441. nextWeek: 'LLL',
  14442. lastDay: '[wa’Hu’] LT',
  14443. lastWeek: 'LLL',
  14444. sameElse: 'L',
  14445. },
  14446. relativeTime: {
  14447. future: translateFuture,
  14448. past: translatePast,
  14449. s: 'puS lup',
  14450. ss: translate,
  14451. m: 'wa’ tup',
  14452. mm: translate,
  14453. h: 'wa’ rep',
  14454. hh: translate,
  14455. d: 'wa’ jaj',
  14456. dd: translate,
  14457. M: 'wa’ jar',
  14458. MM: translate,
  14459. y: 'wa’ DIS',
  14460. yy: translate,
  14461. },
  14462. dayOfMonthOrdinalParse: /\d{1,2}\./,
  14463. ordinal: '%d.',
  14464. week: {
  14465. dow: 1, // Monday is the first day of the week.
  14466. doy: 4, // The week that contains Jan 4th is the first week of the year.
  14467. },
  14468. }));
  14469. /***/ }),
  14470. /***/ "./node_modules/moment/dist/locale/tr.js":
  14471. /*!***********************************************!*\
  14472. !*** ./node_modules/moment/dist/locale/tr.js ***!
  14473. \***********************************************/
  14474. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  14475. "use strict";
  14476. __webpack_require__.r(__webpack_exports__);
  14477. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  14478. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  14479. /* harmony export */ });
  14480. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  14481. //! moment.js locale configuration
  14482. //! locale : Turkish [tr]
  14483. //! authors : Erhan Gundogan : https://github.com/erhangundogan,
  14484. //! Burak Yiğit Kaya: https://github.com/BYK
  14485. var suffixes = {
  14486. 1: "'inci",
  14487. 5: "'inci",
  14488. 8: "'inci",
  14489. 70: "'inci",
  14490. 80: "'inci",
  14491. 2: "'nci",
  14492. 7: "'nci",
  14493. 20: "'nci",
  14494. 50: "'nci",
  14495. 3: "'üncü",
  14496. 4: "'üncü",
  14497. 100: "'üncü",
  14498. 6: "'ncı",
  14499. 9: "'uncu",
  14500. 10: "'uncu",
  14501. 30: "'uncu",
  14502. 60: "'ıncı",
  14503. 90: "'ıncı",
  14504. };
  14505. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('tr', {
  14506. months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(
  14507. '_'
  14508. ),
  14509. monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),
  14510. weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(
  14511. '_'
  14512. ),
  14513. weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),
  14514. weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),
  14515. meridiem: function (hours, minutes, isLower) {
  14516. if (hours < 12) {
  14517. return isLower ? 'öö' : 'ÖÖ';
  14518. } else {
  14519. return isLower ? 'ös' : 'ÖS';
  14520. }
  14521. },
  14522. meridiemParse: /öö|ÖÖ|ös|ÖS/,
  14523. isPM: function (input) {
  14524. return input === 'ös' || input === 'ÖS';
  14525. },
  14526. longDateFormat: {
  14527. LT: 'HH:mm',
  14528. LTS: 'HH:mm:ss',
  14529. L: 'DD.MM.YYYY',
  14530. LL: 'D MMMM YYYY',
  14531. LLL: 'D MMMM YYYY HH:mm',
  14532. LLLL: 'dddd, D MMMM YYYY HH:mm',
  14533. },
  14534. calendar: {
  14535. sameDay: '[bugün saat] LT',
  14536. nextDay: '[yarın saat] LT',
  14537. nextWeek: '[gelecek] dddd [saat] LT',
  14538. lastDay: '[dün] LT',
  14539. lastWeek: '[geçen] dddd [saat] LT',
  14540. sameElse: 'L',
  14541. },
  14542. relativeTime: {
  14543. future: '%s sonra',
  14544. past: '%s önce',
  14545. s: 'birkaç saniye',
  14546. ss: '%d saniye',
  14547. m: 'bir dakika',
  14548. mm: '%d dakika',
  14549. h: 'bir saat',
  14550. hh: '%d saat',
  14551. d: 'bir gün',
  14552. dd: '%d gün',
  14553. w: 'bir hafta',
  14554. ww: '%d hafta',
  14555. M: 'bir ay',
  14556. MM: '%d ay',
  14557. y: 'bir yıl',
  14558. yy: '%d yıl',
  14559. },
  14560. ordinal: function (number, period) {
  14561. switch (period) {
  14562. case 'd':
  14563. case 'D':
  14564. case 'Do':
  14565. case 'DD':
  14566. return number;
  14567. default:
  14568. if (number === 0) {
  14569. // special case for zero
  14570. return number + "'ıncı";
  14571. }
  14572. var a = number % 10,
  14573. b = (number % 100) - a,
  14574. c = number >= 100 ? 100 : null;
  14575. return number + (suffixes[a] || suffixes[b] || suffixes[c]);
  14576. }
  14577. },
  14578. week: {
  14579. dow: 1, // Monday is the first day of the week.
  14580. doy: 7, // The week that contains Jan 7th is the first week of the year.
  14581. },
  14582. }));
  14583. /***/ }),
  14584. /***/ "./node_modules/moment/dist/locale/tzl.js":
  14585. /*!************************************************!*\
  14586. !*** ./node_modules/moment/dist/locale/tzl.js ***!
  14587. \************************************************/
  14588. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  14589. "use strict";
  14590. __webpack_require__.r(__webpack_exports__);
  14591. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  14592. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  14593. /* harmony export */ });
  14594. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  14595. //! moment.js locale configuration
  14596. //! locale : Talossan [tzl]
  14597. //! author : Robin van der Vliet : https://github.com/robin0van0der0v
  14598. //! author : Iustì Canun
  14599. // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.
  14600. // This is currently too difficult (maybe even impossible) to add.
  14601. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('tzl', {
  14602. months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(
  14603. '_'
  14604. ),
  14605. monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),
  14606. weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),
  14607. weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),
  14608. weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),
  14609. longDateFormat: {
  14610. LT: 'HH.mm',
  14611. LTS: 'HH.mm.ss',
  14612. L: 'DD.MM.YYYY',
  14613. LL: 'D. MMMM [dallas] YYYY',
  14614. LLL: 'D. MMMM [dallas] YYYY HH.mm',
  14615. LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',
  14616. },
  14617. meridiemParse: /d\'o|d\'a/i,
  14618. isPM: function (input) {
  14619. return "d'o" === input.toLowerCase();
  14620. },
  14621. meridiem: function (hours, minutes, isLower) {
  14622. if (hours > 11) {
  14623. return isLower ? "d'o" : "D'O";
  14624. } else {
  14625. return isLower ? "d'a" : "D'A";
  14626. }
  14627. },
  14628. calendar: {
  14629. sameDay: '[oxhi à] LT',
  14630. nextDay: '[demà à] LT',
  14631. nextWeek: 'dddd [à] LT',
  14632. lastDay: '[ieiri à] LT',
  14633. lastWeek: '[sür el] dddd [lasteu à] LT',
  14634. sameElse: 'L',
  14635. },
  14636. relativeTime: {
  14637. future: 'osprei %s',
  14638. past: 'ja%s',
  14639. s: processRelativeTime,
  14640. ss: processRelativeTime,
  14641. m: processRelativeTime,
  14642. mm: processRelativeTime,
  14643. h: processRelativeTime,
  14644. hh: processRelativeTime,
  14645. d: processRelativeTime,
  14646. dd: processRelativeTime,
  14647. M: processRelativeTime,
  14648. MM: processRelativeTime,
  14649. y: processRelativeTime,
  14650. yy: processRelativeTime,
  14651. },
  14652. dayOfMonthOrdinalParse: /\d{1,2}\./,
  14653. ordinal: '%d.',
  14654. week: {
  14655. dow: 1, // Monday is the first day of the week.
  14656. doy: 4, // The week that contains Jan 4th is the first week of the year.
  14657. },
  14658. }));
  14659. function processRelativeTime(number, withoutSuffix, key, isFuture) {
  14660. var format = {
  14661. s: ['viensas secunds', "'iensas secunds"],
  14662. ss: [number + ' secunds', '' + number + ' secunds'],
  14663. m: ["'n míut", "'iens míut"],
  14664. mm: [number + ' míuts', '' + number + ' míuts'],
  14665. h: ["'n þora", "'iensa þora"],
  14666. hh: [number + ' þoras', '' + number + ' þoras'],
  14667. d: ["'n ziua", "'iensa ziua"],
  14668. dd: [number + ' ziuas', '' + number + ' ziuas'],
  14669. M: ["'n mes", "'iens mes"],
  14670. MM: [number + ' mesen', '' + number + ' mesen'],
  14671. y: ["'n ar", "'iens ar"],
  14672. yy: [number + ' ars', '' + number + ' ars'],
  14673. };
  14674. return isFuture
  14675. ? format[key][0]
  14676. : withoutSuffix
  14677. ? format[key][0]
  14678. : format[key][1];
  14679. }
  14680. /***/ }),
  14681. /***/ "./node_modules/moment/dist/locale/tzm-latn.js":
  14682. /*!*****************************************************!*\
  14683. !*** ./node_modules/moment/dist/locale/tzm-latn.js ***!
  14684. \*****************************************************/
  14685. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  14686. "use strict";
  14687. __webpack_require__.r(__webpack_exports__);
  14688. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  14689. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  14690. /* harmony export */ });
  14691. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  14692. //! moment.js locale configuration
  14693. //! locale : Central Atlas Tamazight Latin [tzm-latn]
  14694. //! author : Abdel Said : https://github.com/abdelsaid
  14695. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('tzm-latn', {
  14696. months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(
  14697. '_'
  14698. ),
  14699. monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(
  14700. '_'
  14701. ),
  14702. weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
  14703. weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
  14704. weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),
  14705. longDateFormat: {
  14706. LT: 'HH:mm',
  14707. LTS: 'HH:mm:ss',
  14708. L: 'DD/MM/YYYY',
  14709. LL: 'D MMMM YYYY',
  14710. LLL: 'D MMMM YYYY HH:mm',
  14711. LLLL: 'dddd D MMMM YYYY HH:mm',
  14712. },
  14713. calendar: {
  14714. sameDay: '[asdkh g] LT',
  14715. nextDay: '[aska g] LT',
  14716. nextWeek: 'dddd [g] LT',
  14717. lastDay: '[assant g] LT',
  14718. lastWeek: 'dddd [g] LT',
  14719. sameElse: 'L',
  14720. },
  14721. relativeTime: {
  14722. future: 'dadkh s yan %s',
  14723. past: 'yan %s',
  14724. s: 'imik',
  14725. ss: '%d imik',
  14726. m: 'minuḍ',
  14727. mm: '%d minuḍ',
  14728. h: 'saɛa',
  14729. hh: '%d tassaɛin',
  14730. d: 'ass',
  14731. dd: '%d ossan',
  14732. M: 'ayowr',
  14733. MM: '%d iyyirn',
  14734. y: 'asgas',
  14735. yy: '%d isgasn',
  14736. },
  14737. week: {
  14738. dow: 6, // Saturday is the first day of the week.
  14739. doy: 12, // The week that contains Jan 12th is the first week of the year.
  14740. },
  14741. }));
  14742. /***/ }),
  14743. /***/ "./node_modules/moment/dist/locale/tzm.js":
  14744. /*!************************************************!*\
  14745. !*** ./node_modules/moment/dist/locale/tzm.js ***!
  14746. \************************************************/
  14747. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  14748. "use strict";
  14749. __webpack_require__.r(__webpack_exports__);
  14750. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  14751. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  14752. /* harmony export */ });
  14753. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  14754. //! moment.js locale configuration
  14755. //! locale : Central Atlas Tamazight [tzm]
  14756. //! author : Abdel Said : https://github.com/abdelsaid
  14757. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('tzm', {
  14758. months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(
  14759. '_'
  14760. ),
  14761. monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(
  14762. '_'
  14763. ),
  14764. weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
  14765. weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
  14766. weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),
  14767. longDateFormat: {
  14768. LT: 'HH:mm',
  14769. LTS: 'HH:mm:ss',
  14770. L: 'DD/MM/YYYY',
  14771. LL: 'D MMMM YYYY',
  14772. LLL: 'D MMMM YYYY HH:mm',
  14773. LLLL: 'dddd D MMMM YYYY HH:mm',
  14774. },
  14775. calendar: {
  14776. sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',
  14777. nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',
  14778. nextWeek: 'dddd [ⴴ] LT',
  14779. lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',
  14780. lastWeek: 'dddd [ⴴ] LT',
  14781. sameElse: 'L',
  14782. },
  14783. relativeTime: {
  14784. future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',
  14785. past: 'ⵢⴰⵏ %s',
  14786. s: 'ⵉⵎⵉⴽ',
  14787. ss: '%d ⵉⵎⵉⴽ',
  14788. m: 'ⵎⵉⵏⵓⴺ',
  14789. mm: '%d ⵎⵉⵏⵓⴺ',
  14790. h: 'ⵙⴰⵄⴰ',
  14791. hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',
  14792. d: 'ⴰⵙⵙ',
  14793. dd: '%d oⵙⵙⴰⵏ',
  14794. M: 'ⴰⵢoⵓⵔ',
  14795. MM: '%d ⵉⵢⵢⵉⵔⵏ',
  14796. y: 'ⴰⵙⴳⴰⵙ',
  14797. yy: '%d ⵉⵙⴳⴰⵙⵏ',
  14798. },
  14799. week: {
  14800. dow: 6, // Saturday is the first day of the week.
  14801. doy: 12, // The week that contains Jan 12th is the first week of the year.
  14802. },
  14803. }));
  14804. /***/ }),
  14805. /***/ "./node_modules/moment/dist/locale/ug-cn.js":
  14806. /*!**************************************************!*\
  14807. !*** ./node_modules/moment/dist/locale/ug-cn.js ***!
  14808. \**************************************************/
  14809. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  14810. "use strict";
  14811. __webpack_require__.r(__webpack_exports__);
  14812. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  14813. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  14814. /* harmony export */ });
  14815. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  14816. //! moment.js locale configuration
  14817. //! locale : Uyghur (China) [ug-cn]
  14818. //! author: boyaq : https://github.com/boyaq
  14819. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ug-cn', {
  14820. months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
  14821. '_'
  14822. ),
  14823. monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(
  14824. '_'
  14825. ),
  14826. weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(
  14827. '_'
  14828. ),
  14829. weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
  14830. weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),
  14831. longDateFormat: {
  14832. LT: 'HH:mm',
  14833. LTS: 'HH:mm:ss',
  14834. L: 'YYYY-MM-DD',
  14835. LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',
  14836. LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
  14837. LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',
  14838. },
  14839. meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,
  14840. meridiemHour: function (hour, meridiem) {
  14841. if (hour === 12) {
  14842. hour = 0;
  14843. }
  14844. if (
  14845. meridiem === 'يېرىم كېچە' ||
  14846. meridiem === 'سەھەر' ||
  14847. meridiem === 'چۈشتىن بۇرۇن'
  14848. ) {
  14849. return hour;
  14850. } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {
  14851. return hour + 12;
  14852. } else {
  14853. return hour >= 11 ? hour : hour + 12;
  14854. }
  14855. },
  14856. meridiem: function (hour, minute, isLower) {
  14857. var hm = hour * 100 + minute;
  14858. if (hm < 600) {
  14859. return 'يېرىم كېچە';
  14860. } else if (hm < 900) {
  14861. return 'سەھەر';
  14862. } else if (hm < 1130) {
  14863. return 'چۈشتىن بۇرۇن';
  14864. } else if (hm < 1230) {
  14865. return 'چۈش';
  14866. } else if (hm < 1800) {
  14867. return 'چۈشتىن كېيىن';
  14868. } else {
  14869. return 'كەچ';
  14870. }
  14871. },
  14872. calendar: {
  14873. sameDay: '[بۈگۈن سائەت] LT',
  14874. nextDay: '[ئەتە سائەت] LT',
  14875. nextWeek: '[كېلەركى] dddd [سائەت] LT',
  14876. lastDay: '[تۆنۈگۈن] LT',
  14877. lastWeek: '[ئالدىنقى] dddd [سائەت] LT',
  14878. sameElse: 'L',
  14879. },
  14880. relativeTime: {
  14881. future: '%s كېيىن',
  14882. past: '%s بۇرۇن',
  14883. s: 'نەچچە سېكونت',
  14884. ss: '%d سېكونت',
  14885. m: 'بىر مىنۇت',
  14886. mm: '%d مىنۇت',
  14887. h: 'بىر سائەت',
  14888. hh: '%d سائەت',
  14889. d: 'بىر كۈن',
  14890. dd: '%d كۈن',
  14891. M: 'بىر ئاي',
  14892. MM: '%d ئاي',
  14893. y: 'بىر يىل',
  14894. yy: '%d يىل',
  14895. },
  14896. dayOfMonthOrdinalParse: /\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,
  14897. ordinal: function (number, period) {
  14898. switch (period) {
  14899. case 'd':
  14900. case 'D':
  14901. case 'DDD':
  14902. return number + '-كۈنى';
  14903. case 'w':
  14904. case 'W':
  14905. return number + '-ھەپتە';
  14906. default:
  14907. return number;
  14908. }
  14909. },
  14910. preparse: function (string) {
  14911. return string.replace(/،/g, ',');
  14912. },
  14913. postformat: function (string) {
  14914. return string.replace(/,/g, '،');
  14915. },
  14916. week: {
  14917. // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
  14918. dow: 1, // Monday is the first day of the week.
  14919. doy: 7, // The week that contains Jan 1st is the first week of the year.
  14920. },
  14921. }));
  14922. /***/ }),
  14923. /***/ "./node_modules/moment/dist/locale/uk.js":
  14924. /*!***********************************************!*\
  14925. !*** ./node_modules/moment/dist/locale/uk.js ***!
  14926. \***********************************************/
  14927. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  14928. "use strict";
  14929. __webpack_require__.r(__webpack_exports__);
  14930. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  14931. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  14932. /* harmony export */ });
  14933. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  14934. //! moment.js locale configuration
  14935. //! locale : Ukrainian [uk]
  14936. //! author : zemlanin : https://github.com/zemlanin
  14937. //! Author : Menelion Elensúle : https://github.com/Oire
  14938. function plural(word, num) {
  14939. var forms = word.split('_');
  14940. return num % 10 === 1 && num % 100 !== 11
  14941. ? forms[0]
  14942. : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)
  14943. ? forms[1]
  14944. : forms[2];
  14945. }
  14946. function relativeTimeWithPlural(number, withoutSuffix, key) {
  14947. var format = {
  14948. ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',
  14949. mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',
  14950. hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',
  14951. dd: 'день_дні_днів',
  14952. MM: 'місяць_місяці_місяців',
  14953. yy: 'рік_роки_років',
  14954. };
  14955. if (key === 'm') {
  14956. return withoutSuffix ? 'хвилина' : 'хвилину';
  14957. } else if (key === 'h') {
  14958. return withoutSuffix ? 'година' : 'годину';
  14959. } else {
  14960. return number + ' ' + plural(format[key], +number);
  14961. }
  14962. }
  14963. function weekdaysCaseReplace(m, format) {
  14964. var weekdays = {
  14965. nominative: 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(
  14966. '_'
  14967. ),
  14968. accusative: 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(
  14969. '_'
  14970. ),
  14971. genitive: 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(
  14972. '_'
  14973. ),
  14974. },
  14975. nounCase;
  14976. if (m === true) {
  14977. return weekdays['nominative']
  14978. .slice(1, 7)
  14979. .concat(weekdays['nominative'].slice(0, 1));
  14980. }
  14981. if (!m) {
  14982. return weekdays['nominative'];
  14983. }
  14984. nounCase = /(\[[ВвУу]\]) ?dddd/.test(format)
  14985. ? 'accusative'
  14986. : /\[?(?:минулої|наступної)? ?\] ?dddd/.test(format)
  14987. ? 'genitive'
  14988. : 'nominative';
  14989. return weekdays[nounCase][m.day()];
  14990. }
  14991. function processHoursFunction(str) {
  14992. return function () {
  14993. return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';
  14994. };
  14995. }
  14996. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('uk', {
  14997. months: {
  14998. format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(
  14999. '_'
  15000. ),
  15001. standalone: 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(
  15002. '_'
  15003. ),
  15004. },
  15005. monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(
  15006. '_'
  15007. ),
  15008. weekdays: weekdaysCaseReplace,
  15009. weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
  15010. weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),
  15011. longDateFormat: {
  15012. LT: 'HH:mm',
  15013. LTS: 'HH:mm:ss',
  15014. L: 'DD.MM.YYYY',
  15015. LL: 'D MMMM YYYY р.',
  15016. LLL: 'D MMMM YYYY р., HH:mm',
  15017. LLLL: 'dddd, D MMMM YYYY р., HH:mm',
  15018. },
  15019. calendar: {
  15020. sameDay: processHoursFunction('[Сьогодні '),
  15021. nextDay: processHoursFunction('[Завтра '),
  15022. lastDay: processHoursFunction('[Вчора '),
  15023. nextWeek: processHoursFunction('[У] dddd ['),
  15024. lastWeek: function () {
  15025. switch (this.day()) {
  15026. case 0:
  15027. case 3:
  15028. case 5:
  15029. case 6:
  15030. return processHoursFunction('[Минулої] dddd [').call(this);
  15031. case 1:
  15032. case 2:
  15033. case 4:
  15034. return processHoursFunction('[Минулого] dddd [').call(this);
  15035. }
  15036. },
  15037. sameElse: 'L',
  15038. },
  15039. relativeTime: {
  15040. future: 'за %s',
  15041. past: '%s тому',
  15042. s: 'декілька секунд',
  15043. ss: relativeTimeWithPlural,
  15044. m: relativeTimeWithPlural,
  15045. mm: relativeTimeWithPlural,
  15046. h: 'годину',
  15047. hh: relativeTimeWithPlural,
  15048. d: 'день',
  15049. dd: relativeTimeWithPlural,
  15050. M: 'місяць',
  15051. MM: relativeTimeWithPlural,
  15052. y: 'рік',
  15053. yy: relativeTimeWithPlural,
  15054. },
  15055. // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason
  15056. meridiemParse: /ночі|ранку|дня|вечора/,
  15057. isPM: function (input) {
  15058. return /^(дня|вечора)$/.test(input);
  15059. },
  15060. meridiem: function (hour, minute, isLower) {
  15061. if (hour < 4) {
  15062. return 'ночі';
  15063. } else if (hour < 12) {
  15064. return 'ранку';
  15065. } else if (hour < 17) {
  15066. return 'дня';
  15067. } else {
  15068. return 'вечора';
  15069. }
  15070. },
  15071. dayOfMonthOrdinalParse: /\d{1,2}-(й|го)/,
  15072. ordinal: function (number, period) {
  15073. switch (period) {
  15074. case 'M':
  15075. case 'd':
  15076. case 'DDD':
  15077. case 'w':
  15078. case 'W':
  15079. return number + '-й';
  15080. case 'D':
  15081. return number + '-го';
  15082. default:
  15083. return number;
  15084. }
  15085. },
  15086. week: {
  15087. dow: 1, // Monday is the first day of the week.
  15088. doy: 7, // The week that contains Jan 7th is the first week of the year.
  15089. },
  15090. }));
  15091. /***/ }),
  15092. /***/ "./node_modules/moment/dist/locale/ur.js":
  15093. /*!***********************************************!*\
  15094. !*** ./node_modules/moment/dist/locale/ur.js ***!
  15095. \***********************************************/
  15096. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  15097. "use strict";
  15098. __webpack_require__.r(__webpack_exports__);
  15099. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  15100. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  15101. /* harmony export */ });
  15102. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  15103. //! moment.js locale configuration
  15104. //! locale : Urdu [ur]
  15105. //! author : Sawood Alam : https://github.com/ibnesayeed
  15106. //! author : Zack : https://github.com/ZackVision
  15107. var months = [
  15108. 'جنوری',
  15109. 'فروری',
  15110. 'مارچ',
  15111. 'اپریل',
  15112. 'مئی',
  15113. 'جون',
  15114. 'جولائی',
  15115. 'اگست',
  15116. 'ستمبر',
  15117. 'اکتوبر',
  15118. 'نومبر',
  15119. 'دسمبر',
  15120. ],
  15121. days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];
  15122. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('ur', {
  15123. months: months,
  15124. monthsShort: months,
  15125. weekdays: days,
  15126. weekdaysShort: days,
  15127. weekdaysMin: days,
  15128. longDateFormat: {
  15129. LT: 'HH:mm',
  15130. LTS: 'HH:mm:ss',
  15131. L: 'DD/MM/YYYY',
  15132. LL: 'D MMMM YYYY',
  15133. LLL: 'D MMMM YYYY HH:mm',
  15134. LLLL: 'dddd، D MMMM YYYY HH:mm',
  15135. },
  15136. meridiemParse: /صبح|شام/,
  15137. isPM: function (input) {
  15138. return 'شام' === input;
  15139. },
  15140. meridiem: function (hour, minute, isLower) {
  15141. if (hour < 12) {
  15142. return 'صبح';
  15143. }
  15144. return 'شام';
  15145. },
  15146. calendar: {
  15147. sameDay: '[آج بوقت] LT',
  15148. nextDay: '[کل بوقت] LT',
  15149. nextWeek: 'dddd [بوقت] LT',
  15150. lastDay: '[گذشتہ روز بوقت] LT',
  15151. lastWeek: '[گذشتہ] dddd [بوقت] LT',
  15152. sameElse: 'L',
  15153. },
  15154. relativeTime: {
  15155. future: '%s بعد',
  15156. past: '%s قبل',
  15157. s: 'چند سیکنڈ',
  15158. ss: '%d سیکنڈ',
  15159. m: 'ایک منٹ',
  15160. mm: '%d منٹ',
  15161. h: 'ایک گھنٹہ',
  15162. hh: '%d گھنٹے',
  15163. d: 'ایک دن',
  15164. dd: '%d دن',
  15165. M: 'ایک ماہ',
  15166. MM: '%d ماہ',
  15167. y: 'ایک سال',
  15168. yy: '%d سال',
  15169. },
  15170. preparse: function (string) {
  15171. return string.replace(/،/g, ',');
  15172. },
  15173. postformat: function (string) {
  15174. return string.replace(/,/g, '،');
  15175. },
  15176. week: {
  15177. dow: 1, // Monday is the first day of the week.
  15178. doy: 4, // The week that contains Jan 4th is the first week of the year.
  15179. },
  15180. }));
  15181. /***/ }),
  15182. /***/ "./node_modules/moment/dist/locale/uz-latn.js":
  15183. /*!****************************************************!*\
  15184. !*** ./node_modules/moment/dist/locale/uz-latn.js ***!
  15185. \****************************************************/
  15186. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  15187. "use strict";
  15188. __webpack_require__.r(__webpack_exports__);
  15189. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  15190. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  15191. /* harmony export */ });
  15192. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  15193. //! moment.js locale configuration
  15194. //! locale : Uzbek Latin [uz-latn]
  15195. //! author : Rasulbek Mirzayev : github.com/Rasulbeeek
  15196. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('uz-latn', {
  15197. months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(
  15198. '_'
  15199. ),
  15200. monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),
  15201. weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(
  15202. '_'
  15203. ),
  15204. weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),
  15205. weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),
  15206. longDateFormat: {
  15207. LT: 'HH:mm',
  15208. LTS: 'HH:mm:ss',
  15209. L: 'DD/MM/YYYY',
  15210. LL: 'D MMMM YYYY',
  15211. LLL: 'D MMMM YYYY HH:mm',
  15212. LLLL: 'D MMMM YYYY, dddd HH:mm',
  15213. },
  15214. calendar: {
  15215. sameDay: '[Bugun soat] LT [da]',
  15216. nextDay: '[Ertaga] LT [da]',
  15217. nextWeek: 'dddd [kuni soat] LT [da]',
  15218. lastDay: '[Kecha soat] LT [da]',
  15219. lastWeek: "[O'tgan] dddd [kuni soat] LT [da]",
  15220. sameElse: 'L',
  15221. },
  15222. relativeTime: {
  15223. future: 'Yaqin %s ichida',
  15224. past: 'Bir necha %s oldin',
  15225. s: 'soniya',
  15226. ss: '%d soniya',
  15227. m: 'bir daqiqa',
  15228. mm: '%d daqiqa',
  15229. h: 'bir soat',
  15230. hh: '%d soat',
  15231. d: 'bir kun',
  15232. dd: '%d kun',
  15233. M: 'bir oy',
  15234. MM: '%d oy',
  15235. y: 'bir yil',
  15236. yy: '%d yil',
  15237. },
  15238. week: {
  15239. dow: 1, // Monday is the first day of the week.
  15240. doy: 7, // The week that contains Jan 7th is the first week of the year.
  15241. },
  15242. }));
  15243. /***/ }),
  15244. /***/ "./node_modules/moment/dist/locale/uz.js":
  15245. /*!***********************************************!*\
  15246. !*** ./node_modules/moment/dist/locale/uz.js ***!
  15247. \***********************************************/
  15248. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  15249. "use strict";
  15250. __webpack_require__.r(__webpack_exports__);
  15251. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  15252. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  15253. /* harmony export */ });
  15254. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  15255. //! moment.js locale configuration
  15256. //! locale : Uzbek [uz]
  15257. //! author : Sardor Muminov : https://github.com/muminoff
  15258. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('uz', {
  15259. months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(
  15260. '_'
  15261. ),
  15262. monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),
  15263. weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),
  15264. weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),
  15265. weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),
  15266. longDateFormat: {
  15267. LT: 'HH:mm',
  15268. LTS: 'HH:mm:ss',
  15269. L: 'DD/MM/YYYY',
  15270. LL: 'D MMMM YYYY',
  15271. LLL: 'D MMMM YYYY HH:mm',
  15272. LLLL: 'D MMMM YYYY, dddd HH:mm',
  15273. },
  15274. calendar: {
  15275. sameDay: '[Бугун соат] LT [да]',
  15276. nextDay: '[Эртага] LT [да]',
  15277. nextWeek: 'dddd [куни соат] LT [да]',
  15278. lastDay: '[Кеча соат] LT [да]',
  15279. lastWeek: '[Утган] dddd [куни соат] LT [да]',
  15280. sameElse: 'L',
  15281. },
  15282. relativeTime: {
  15283. future: 'Якин %s ичида',
  15284. past: 'Бир неча %s олдин',
  15285. s: 'фурсат',
  15286. ss: '%d фурсат',
  15287. m: 'бир дакика',
  15288. mm: '%d дакика',
  15289. h: 'бир соат',
  15290. hh: '%d соат',
  15291. d: 'бир кун',
  15292. dd: '%d кун',
  15293. M: 'бир ой',
  15294. MM: '%d ой',
  15295. y: 'бир йил',
  15296. yy: '%d йил',
  15297. },
  15298. week: {
  15299. dow: 1, // Monday is the first day of the week.
  15300. doy: 7, // The week that contains Jan 4th is the first week of the year.
  15301. },
  15302. }));
  15303. /***/ }),
  15304. /***/ "./node_modules/moment/dist/locale/vi.js":
  15305. /*!***********************************************!*\
  15306. !*** ./node_modules/moment/dist/locale/vi.js ***!
  15307. \***********************************************/
  15308. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  15309. "use strict";
  15310. __webpack_require__.r(__webpack_exports__);
  15311. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  15312. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  15313. /* harmony export */ });
  15314. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  15315. //! moment.js locale configuration
  15316. //! locale : Vietnamese [vi]
  15317. //! author : Bang Nguyen : https://github.com/bangnk
  15318. //! author : Chien Kira : https://github.com/chienkira
  15319. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('vi', {
  15320. months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(
  15321. '_'
  15322. ),
  15323. monthsShort: 'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(
  15324. '_'
  15325. ),
  15326. monthsParseExact: true,
  15327. weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(
  15328. '_'
  15329. ),
  15330. weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
  15331. weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),
  15332. weekdaysParseExact: true,
  15333. meridiemParse: /sa|ch/i,
  15334. isPM: function (input) {
  15335. return /^ch$/i.test(input);
  15336. },
  15337. meridiem: function (hours, minutes, isLower) {
  15338. if (hours < 12) {
  15339. return isLower ? 'sa' : 'SA';
  15340. } else {
  15341. return isLower ? 'ch' : 'CH';
  15342. }
  15343. },
  15344. longDateFormat: {
  15345. LT: 'HH:mm',
  15346. LTS: 'HH:mm:ss',
  15347. L: 'DD/MM/YYYY',
  15348. LL: 'D MMMM [năm] YYYY',
  15349. LLL: 'D MMMM [năm] YYYY HH:mm',
  15350. LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',
  15351. l: 'DD/M/YYYY',
  15352. ll: 'D MMM YYYY',
  15353. lll: 'D MMM YYYY HH:mm',
  15354. llll: 'ddd, D MMM YYYY HH:mm',
  15355. },
  15356. calendar: {
  15357. sameDay: '[Hôm nay lúc] LT',
  15358. nextDay: '[Ngày mai lúc] LT',
  15359. nextWeek: 'dddd [tuần tới lúc] LT',
  15360. lastDay: '[Hôm qua lúc] LT',
  15361. lastWeek: 'dddd [tuần trước lúc] LT',
  15362. sameElse: 'L',
  15363. },
  15364. relativeTime: {
  15365. future: '%s tới',
  15366. past: '%s trước',
  15367. s: 'vài giây',
  15368. ss: '%d giây',
  15369. m: 'một phút',
  15370. mm: '%d phút',
  15371. h: 'một giờ',
  15372. hh: '%d giờ',
  15373. d: 'một ngày',
  15374. dd: '%d ngày',
  15375. w: 'một tuần',
  15376. ww: '%d tuần',
  15377. M: 'một tháng',
  15378. MM: '%d tháng',
  15379. y: 'một năm',
  15380. yy: '%d năm',
  15381. },
  15382. dayOfMonthOrdinalParse: /\d{1,2}/,
  15383. ordinal: function (number) {
  15384. return number;
  15385. },
  15386. week: {
  15387. dow: 1, // Monday is the first day of the week.
  15388. doy: 4, // The week that contains Jan 4th is the first week of the year.
  15389. },
  15390. }));
  15391. /***/ }),
  15392. /***/ "./node_modules/moment/dist/locale/x-pseudo.js":
  15393. /*!*****************************************************!*\
  15394. !*** ./node_modules/moment/dist/locale/x-pseudo.js ***!
  15395. \*****************************************************/
  15396. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  15397. "use strict";
  15398. __webpack_require__.r(__webpack_exports__);
  15399. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  15400. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  15401. /* harmony export */ });
  15402. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  15403. //! moment.js locale configuration
  15404. //! locale : Pseudo [x-pseudo]
  15405. //! author : Andrew Hood : https://github.com/andrewhood125
  15406. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('x-pseudo', {
  15407. months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(
  15408. '_'
  15409. ),
  15410. monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(
  15411. '_'
  15412. ),
  15413. monthsParseExact: true,
  15414. weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(
  15415. '_'
  15416. ),
  15417. weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),
  15418. weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),
  15419. weekdaysParseExact: true,
  15420. longDateFormat: {
  15421. LT: 'HH:mm',
  15422. L: 'DD/MM/YYYY',
  15423. LL: 'D MMMM YYYY',
  15424. LLL: 'D MMMM YYYY HH:mm',
  15425. LLLL: 'dddd, D MMMM YYYY HH:mm',
  15426. },
  15427. calendar: {
  15428. sameDay: '[T~ódá~ý át] LT',
  15429. nextDay: '[T~ómó~rró~w át] LT',
  15430. nextWeek: 'dddd [át] LT',
  15431. lastDay: '[Ý~ést~érdá~ý át] LT',
  15432. lastWeek: '[L~ást] dddd [át] LT',
  15433. sameElse: 'L',
  15434. },
  15435. relativeTime: {
  15436. future: 'í~ñ %s',
  15437. past: '%s á~gó',
  15438. s: 'á ~féw ~sécó~ñds',
  15439. ss: '%d s~écóñ~ds',
  15440. m: 'á ~míñ~úté',
  15441. mm: '%d m~íñú~tés',
  15442. h: 'á~ñ hó~úr',
  15443. hh: '%d h~óúrs',
  15444. d: 'á ~dáý',
  15445. dd: '%d d~áýs',
  15446. M: 'á ~móñ~th',
  15447. MM: '%d m~óñt~hs',
  15448. y: 'á ~ýéár',
  15449. yy: '%d ý~éárs',
  15450. },
  15451. dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
  15452. ordinal: function (number) {
  15453. var b = number % 10,
  15454. output =
  15455. ~~((number % 100) / 10) === 1
  15456. ? 'th'
  15457. : b === 1
  15458. ? 'st'
  15459. : b === 2
  15460. ? 'nd'
  15461. : b === 3
  15462. ? 'rd'
  15463. : 'th';
  15464. return number + output;
  15465. },
  15466. week: {
  15467. dow: 1, // Monday is the first day of the week.
  15468. doy: 4, // The week that contains Jan 4th is the first week of the year.
  15469. },
  15470. }));
  15471. /***/ }),
  15472. /***/ "./node_modules/moment/dist/locale/yo.js":
  15473. /*!***********************************************!*\
  15474. !*** ./node_modules/moment/dist/locale/yo.js ***!
  15475. \***********************************************/
  15476. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  15477. "use strict";
  15478. __webpack_require__.r(__webpack_exports__);
  15479. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  15480. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  15481. /* harmony export */ });
  15482. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  15483. //! moment.js locale configuration
  15484. //! locale : Yoruba Nigeria [yo]
  15485. //! author : Atolagbe Abisoye : https://github.com/andela-batolagbe
  15486. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('yo', {
  15487. months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(
  15488. '_'
  15489. ),
  15490. monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),
  15491. weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),
  15492. weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),
  15493. weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),
  15494. longDateFormat: {
  15495. LT: 'h:mm A',
  15496. LTS: 'h:mm:ss A',
  15497. L: 'DD/MM/YYYY',
  15498. LL: 'D MMMM YYYY',
  15499. LLL: 'D MMMM YYYY h:mm A',
  15500. LLLL: 'dddd, D MMMM YYYY h:mm A',
  15501. },
  15502. calendar: {
  15503. sameDay: '[Ònì ni] LT',
  15504. nextDay: '[Ọ̀la ni] LT',
  15505. nextWeek: "dddd [Ọsẹ̀ tón'bọ] [ni] LT",
  15506. lastDay: '[Àna ni] LT',
  15507. lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',
  15508. sameElse: 'L',
  15509. },
  15510. relativeTime: {
  15511. future: 'ní %s',
  15512. past: '%s kọjá',
  15513. s: 'ìsẹjú aayá die',
  15514. ss: 'aayá %d',
  15515. m: 'ìsẹjú kan',
  15516. mm: 'ìsẹjú %d',
  15517. h: 'wákati kan',
  15518. hh: 'wákati %d',
  15519. d: 'ọjọ́ kan',
  15520. dd: 'ọjọ́ %d',
  15521. M: 'osù kan',
  15522. MM: 'osù %d',
  15523. y: 'ọdún kan',
  15524. yy: 'ọdún %d',
  15525. },
  15526. dayOfMonthOrdinalParse: /ọjọ́\s\d{1,2}/,
  15527. ordinal: 'ọjọ́ %d',
  15528. week: {
  15529. dow: 1, // Monday is the first day of the week.
  15530. doy: 4, // The week that contains Jan 4th is the first week of the year.
  15531. },
  15532. }));
  15533. /***/ }),
  15534. /***/ "./node_modules/moment/dist/locale/zh-cn.js":
  15535. /*!**************************************************!*\
  15536. !*** ./node_modules/moment/dist/locale/zh-cn.js ***!
  15537. \**************************************************/
  15538. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  15539. "use strict";
  15540. __webpack_require__.r(__webpack_exports__);
  15541. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  15542. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  15543. /* harmony export */ });
  15544. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  15545. //! moment.js locale configuration
  15546. //! locale : Chinese (China) [zh-cn]
  15547. //! author : suupic : https://github.com/suupic
  15548. //! author : Zeno Zeng : https://github.com/zenozeng
  15549. //! author : uu109 : https://github.com/uu109
  15550. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('zh-cn', {
  15551. months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
  15552. '_'
  15553. ),
  15554. monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
  15555. '_'
  15556. ),
  15557. weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
  15558. weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),
  15559. weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
  15560. longDateFormat: {
  15561. LT: 'HH:mm',
  15562. LTS: 'HH:mm:ss',
  15563. L: 'YYYY/MM/DD',
  15564. LL: 'YYYY年M月D日',
  15565. LLL: 'YYYY年M月D日Ah点mm分',
  15566. LLLL: 'YYYY年M月D日ddddAh点mm分',
  15567. l: 'YYYY/M/D',
  15568. ll: 'YYYY年M月D日',
  15569. lll: 'YYYY年M月D日 HH:mm',
  15570. llll: 'YYYY年M月D日dddd HH:mm',
  15571. },
  15572. meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
  15573. meridiemHour: function (hour, meridiem) {
  15574. if (hour === 12) {
  15575. hour = 0;
  15576. }
  15577. if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
  15578. return hour;
  15579. } else if (meridiem === '下午' || meridiem === '晚上') {
  15580. return hour + 12;
  15581. } else {
  15582. // '中午'
  15583. return hour >= 11 ? hour : hour + 12;
  15584. }
  15585. },
  15586. meridiem: function (hour, minute, isLower) {
  15587. var hm = hour * 100 + minute;
  15588. if (hm < 600) {
  15589. return '凌晨';
  15590. } else if (hm < 900) {
  15591. return '早上';
  15592. } else if (hm < 1130) {
  15593. return '上午';
  15594. } else if (hm < 1230) {
  15595. return '中午';
  15596. } else if (hm < 1800) {
  15597. return '下午';
  15598. } else {
  15599. return '晚上';
  15600. }
  15601. },
  15602. calendar: {
  15603. sameDay: '[今天]LT',
  15604. nextDay: '[明天]LT',
  15605. nextWeek: function (now) {
  15606. if (now.week() !== this.week()) {
  15607. return '[下]dddLT';
  15608. } else {
  15609. return '[本]dddLT';
  15610. }
  15611. },
  15612. lastDay: '[昨天]LT',
  15613. lastWeek: function (now) {
  15614. if (this.week() !== now.week()) {
  15615. return '[上]dddLT';
  15616. } else {
  15617. return '[本]dddLT';
  15618. }
  15619. },
  15620. sameElse: 'L',
  15621. },
  15622. dayOfMonthOrdinalParse: /\d{1,2}(日|月|周)/,
  15623. ordinal: function (number, period) {
  15624. switch (period) {
  15625. case 'd':
  15626. case 'D':
  15627. case 'DDD':
  15628. return number + '日';
  15629. case 'M':
  15630. return number + '月';
  15631. case 'w':
  15632. case 'W':
  15633. return number + '周';
  15634. default:
  15635. return number;
  15636. }
  15637. },
  15638. relativeTime: {
  15639. future: '%s后',
  15640. past: '%s前',
  15641. s: '几秒',
  15642. ss: '%d 秒',
  15643. m: '1 分钟',
  15644. mm: '%d 分钟',
  15645. h: '1 小时',
  15646. hh: '%d 小时',
  15647. d: '1 天',
  15648. dd: '%d 天',
  15649. w: '1 周',
  15650. ww: '%d 周',
  15651. M: '1 个月',
  15652. MM: '%d 个月',
  15653. y: '1 年',
  15654. yy: '%d 年',
  15655. },
  15656. week: {
  15657. // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
  15658. dow: 1, // Monday is the first day of the week.
  15659. doy: 4, // The week that contains Jan 4th is the first week of the year.
  15660. },
  15661. }));
  15662. /***/ }),
  15663. /***/ "./node_modules/moment/dist/locale/zh-hk.js":
  15664. /*!**************************************************!*\
  15665. !*** ./node_modules/moment/dist/locale/zh-hk.js ***!
  15666. \**************************************************/
  15667. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  15668. "use strict";
  15669. __webpack_require__.r(__webpack_exports__);
  15670. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  15671. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  15672. /* harmony export */ });
  15673. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  15674. //! moment.js locale configuration
  15675. //! locale : Chinese (Hong Kong) [zh-hk]
  15676. //! author : Ben : https://github.com/ben-lin
  15677. //! author : Chris Lam : https://github.com/hehachris
  15678. //! author : Konstantin : https://github.com/skfd
  15679. //! author : Anthony : https://github.com/anthonylau
  15680. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('zh-hk', {
  15681. months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
  15682. '_'
  15683. ),
  15684. monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
  15685. '_'
  15686. ),
  15687. weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
  15688. weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
  15689. weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
  15690. longDateFormat: {
  15691. LT: 'HH:mm',
  15692. LTS: 'HH:mm:ss',
  15693. L: 'YYYY/MM/DD',
  15694. LL: 'YYYY年M月D日',
  15695. LLL: 'YYYY年M月D日 HH:mm',
  15696. LLLL: 'YYYY年M月D日dddd HH:mm',
  15697. l: 'YYYY/M/D',
  15698. ll: 'YYYY年M月D日',
  15699. lll: 'YYYY年M月D日 HH:mm',
  15700. llll: 'YYYY年M月D日dddd HH:mm',
  15701. },
  15702. meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
  15703. meridiemHour: function (hour, meridiem) {
  15704. if (hour === 12) {
  15705. hour = 0;
  15706. }
  15707. if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
  15708. return hour;
  15709. } else if (meridiem === '中午') {
  15710. return hour >= 11 ? hour : hour + 12;
  15711. } else if (meridiem === '下午' || meridiem === '晚上') {
  15712. return hour + 12;
  15713. }
  15714. },
  15715. meridiem: function (hour, minute, isLower) {
  15716. var hm = hour * 100 + minute;
  15717. if (hm < 600) {
  15718. return '凌晨';
  15719. } else if (hm < 900) {
  15720. return '早上';
  15721. } else if (hm < 1200) {
  15722. return '上午';
  15723. } else if (hm === 1200) {
  15724. return '中午';
  15725. } else if (hm < 1800) {
  15726. return '下午';
  15727. } else {
  15728. return '晚上';
  15729. }
  15730. },
  15731. calendar: {
  15732. sameDay: '[今天]LT',
  15733. nextDay: '[明天]LT',
  15734. nextWeek: '[下]ddddLT',
  15735. lastDay: '[昨天]LT',
  15736. lastWeek: '[上]ddddLT',
  15737. sameElse: 'L',
  15738. },
  15739. dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
  15740. ordinal: function (number, period) {
  15741. switch (period) {
  15742. case 'd':
  15743. case 'D':
  15744. case 'DDD':
  15745. return number + '日';
  15746. case 'M':
  15747. return number + '月';
  15748. case 'w':
  15749. case 'W':
  15750. return number + '週';
  15751. default:
  15752. return number;
  15753. }
  15754. },
  15755. relativeTime: {
  15756. future: '%s後',
  15757. past: '%s前',
  15758. s: '幾秒',
  15759. ss: '%d 秒',
  15760. m: '1 分鐘',
  15761. mm: '%d 分鐘',
  15762. h: '1 小時',
  15763. hh: '%d 小時',
  15764. d: '1 天',
  15765. dd: '%d 天',
  15766. M: '1 個月',
  15767. MM: '%d 個月',
  15768. y: '1 年',
  15769. yy: '%d 年',
  15770. },
  15771. }));
  15772. /***/ }),
  15773. /***/ "./node_modules/moment/dist/locale/zh-mo.js":
  15774. /*!**************************************************!*\
  15775. !*** ./node_modules/moment/dist/locale/zh-mo.js ***!
  15776. \**************************************************/
  15777. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  15778. "use strict";
  15779. __webpack_require__.r(__webpack_exports__);
  15780. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  15781. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  15782. /* harmony export */ });
  15783. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  15784. //! moment.js locale configuration
  15785. //! locale : Chinese (Macau) [zh-mo]
  15786. //! author : Ben : https://github.com/ben-lin
  15787. //! author : Chris Lam : https://github.com/hehachris
  15788. //! author : Tan Yuanhong : https://github.com/le0tan
  15789. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('zh-mo', {
  15790. months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
  15791. '_'
  15792. ),
  15793. monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
  15794. '_'
  15795. ),
  15796. weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
  15797. weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
  15798. weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
  15799. longDateFormat: {
  15800. LT: 'HH:mm',
  15801. LTS: 'HH:mm:ss',
  15802. L: 'DD/MM/YYYY',
  15803. LL: 'YYYY年M月D日',
  15804. LLL: 'YYYY年M月D日 HH:mm',
  15805. LLLL: 'YYYY年M月D日dddd HH:mm',
  15806. l: 'D/M/YYYY',
  15807. ll: 'YYYY年M月D日',
  15808. lll: 'YYYY年M月D日 HH:mm',
  15809. llll: 'YYYY年M月D日dddd HH:mm',
  15810. },
  15811. meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
  15812. meridiemHour: function (hour, meridiem) {
  15813. if (hour === 12) {
  15814. hour = 0;
  15815. }
  15816. if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
  15817. return hour;
  15818. } else if (meridiem === '中午') {
  15819. return hour >= 11 ? hour : hour + 12;
  15820. } else if (meridiem === '下午' || meridiem === '晚上') {
  15821. return hour + 12;
  15822. }
  15823. },
  15824. meridiem: function (hour, minute, isLower) {
  15825. var hm = hour * 100 + minute;
  15826. if (hm < 600) {
  15827. return '凌晨';
  15828. } else if (hm < 900) {
  15829. return '早上';
  15830. } else if (hm < 1130) {
  15831. return '上午';
  15832. } else if (hm < 1230) {
  15833. return '中午';
  15834. } else if (hm < 1800) {
  15835. return '下午';
  15836. } else {
  15837. return '晚上';
  15838. }
  15839. },
  15840. calendar: {
  15841. sameDay: '[今天] LT',
  15842. nextDay: '[明天] LT',
  15843. nextWeek: '[下]dddd LT',
  15844. lastDay: '[昨天] LT',
  15845. lastWeek: '[上]dddd LT',
  15846. sameElse: 'L',
  15847. },
  15848. dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
  15849. ordinal: function (number, period) {
  15850. switch (period) {
  15851. case 'd':
  15852. case 'D':
  15853. case 'DDD':
  15854. return number + '日';
  15855. case 'M':
  15856. return number + '月';
  15857. case 'w':
  15858. case 'W':
  15859. return number + '週';
  15860. default:
  15861. return number;
  15862. }
  15863. },
  15864. relativeTime: {
  15865. future: '%s內',
  15866. past: '%s前',
  15867. s: '幾秒',
  15868. ss: '%d 秒',
  15869. m: '1 分鐘',
  15870. mm: '%d 分鐘',
  15871. h: '1 小時',
  15872. hh: '%d 小時',
  15873. d: '1 天',
  15874. dd: '%d 天',
  15875. M: '1 個月',
  15876. MM: '%d 個月',
  15877. y: '1 年',
  15878. yy: '%d 年',
  15879. },
  15880. }));
  15881. /***/ }),
  15882. /***/ "./node_modules/moment/dist/locale/zh-tw.js":
  15883. /*!**************************************************!*\
  15884. !*** ./node_modules/moment/dist/locale/zh-tw.js ***!
  15885. \**************************************************/
  15886. /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
  15887. "use strict";
  15888. __webpack_require__.r(__webpack_exports__);
  15889. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  15890. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  15891. /* harmony export */ });
  15892. /* harmony import */ var _moment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../moment */ "./node_modules/moment/dist/moment.js");
  15893. //! moment.js locale configuration
  15894. //! locale : Chinese (Taiwan) [zh-tw]
  15895. //! author : Ben : https://github.com/ben-lin
  15896. //! author : Chris Lam : https://github.com/hehachris
  15897. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_moment__WEBPACK_IMPORTED_MODULE_0__.default.defineLocale('zh-tw', {
  15898. months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(
  15899. '_'
  15900. ),
  15901. monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(
  15902. '_'
  15903. ),
  15904. weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
  15905. weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),
  15906. weekdaysMin: '日_一_二_三_四_五_六'.split('_'),
  15907. longDateFormat: {
  15908. LT: 'HH:mm',
  15909. LTS: 'HH:mm:ss',
  15910. L: 'YYYY/MM/DD',
  15911. LL: 'YYYY年M月D日',
  15912. LLL: 'YYYY年M月D日 HH:mm',
  15913. LLLL: 'YYYY年M月D日dddd HH:mm',
  15914. l: 'YYYY/M/D',
  15915. ll: 'YYYY年M月D日',
  15916. lll: 'YYYY年M月D日 HH:mm',
  15917. llll: 'YYYY年M月D日dddd HH:mm',
  15918. },
  15919. meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
  15920. meridiemHour: function (hour, meridiem) {
  15921. if (hour === 12) {
  15922. hour = 0;
  15923. }
  15924. if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {
  15925. return hour;
  15926. } else if (meridiem === '中午') {
  15927. return hour >= 11 ? hour : hour + 12;
  15928. } else if (meridiem === '下午' || meridiem === '晚上') {
  15929. return hour + 12;
  15930. }
  15931. },
  15932. meridiem: function (hour, minute, isLower) {
  15933. var hm = hour * 100 + minute;
  15934. if (hm < 600) {
  15935. return '凌晨';
  15936. } else if (hm < 900) {
  15937. return '早上';
  15938. } else if (hm < 1130) {
  15939. return '上午';
  15940. } else if (hm < 1230) {
  15941. return '中午';
  15942. } else if (hm < 1800) {
  15943. return '下午';
  15944. } else {
  15945. return '晚上';
  15946. }
  15947. },
  15948. calendar: {
  15949. sameDay: '[今天] LT',
  15950. nextDay: '[明天] LT',
  15951. nextWeek: '[下]dddd LT',
  15952. lastDay: '[昨天] LT',
  15953. lastWeek: '[上]dddd LT',
  15954. sameElse: 'L',
  15955. },
  15956. dayOfMonthOrdinalParse: /\d{1,2}(日|月|週)/,
  15957. ordinal: function (number, period) {
  15958. switch (period) {
  15959. case 'd':
  15960. case 'D':
  15961. case 'DDD':
  15962. return number + '日';
  15963. case 'M':
  15964. return number + '月';
  15965. case 'w':
  15966. case 'W':
  15967. return number + '週';
  15968. default:
  15969. return number;
  15970. }
  15971. },
  15972. relativeTime: {
  15973. future: '%s後',
  15974. past: '%s前',
  15975. s: '幾秒',
  15976. ss: '%d 秒',
  15977. m: '1 分鐘',
  15978. mm: '%d 分鐘',
  15979. h: '1 小時',
  15980. hh: '%d 小時',
  15981. d: '1 天',
  15982. dd: '%d 天',
  15983. M: '1 個月',
  15984. MM: '%d 個月',
  15985. y: '1 年',
  15986. yy: '%d 年',
  15987. },
  15988. }));
  15989. /***/ }),
  15990. /***/ "./node_modules/moment/dist/moment.js":
  15991. /*!********************************************!*\
  15992. !*** ./node_modules/moment/dist/moment.js ***!
  15993. \********************************************/
  15994. /***/ ((module, __webpack_exports__, __webpack_require__) => {
  15995. "use strict";
  15996. __webpack_require__.r(__webpack_exports__);
  15997. /* harmony export */ __webpack_require__.d(__webpack_exports__, {
  15998. /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
  15999. /* harmony export */ });
  16000. /* module decorator */ module = __webpack_require__.hmd(module);
  16001. //! moment.js
  16002. //! version : 2.29.1
  16003. //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
  16004. //! license : MIT
  16005. //! momentjs.com
  16006. var hookCallback;
  16007. function hooks() {
  16008. return hookCallback.apply(null, arguments);
  16009. }
  16010. // This is done to register the method called with moment()
  16011. // without creating circular dependencies.
  16012. function setHookCallback(callback) {
  16013. hookCallback = callback;
  16014. }
  16015. function isArray(input) {
  16016. return (
  16017. input instanceof Array ||
  16018. Object.prototype.toString.call(input) === '[object Array]'
  16019. );
  16020. }
  16021. function isObject(input) {
  16022. // IE8 will treat undefined and null as object if it wasn't for
  16023. // input != null
  16024. return (
  16025. input != null &&
  16026. Object.prototype.toString.call(input) === '[object Object]'
  16027. );
  16028. }
  16029. function hasOwnProp(a, b) {
  16030. return Object.prototype.hasOwnProperty.call(a, b);
  16031. }
  16032. function isObjectEmpty(obj) {
  16033. if (Object.getOwnPropertyNames) {
  16034. return Object.getOwnPropertyNames(obj).length === 0;
  16035. } else {
  16036. var k;
  16037. for (k in obj) {
  16038. if (hasOwnProp(obj, k)) {
  16039. return false;
  16040. }
  16041. }
  16042. return true;
  16043. }
  16044. }
  16045. function isUndefined(input) {
  16046. return input === void 0;
  16047. }
  16048. function isNumber(input) {
  16049. return (
  16050. typeof input === 'number' ||
  16051. Object.prototype.toString.call(input) === '[object Number]'
  16052. );
  16053. }
  16054. function isDate(input) {
  16055. return (
  16056. input instanceof Date ||
  16057. Object.prototype.toString.call(input) === '[object Date]'
  16058. );
  16059. }
  16060. function map(arr, fn) {
  16061. var res = [],
  16062. i;
  16063. for (i = 0; i < arr.length; ++i) {
  16064. res.push(fn(arr[i], i));
  16065. }
  16066. return res;
  16067. }
  16068. function extend(a, b) {
  16069. for (var i in b) {
  16070. if (hasOwnProp(b, i)) {
  16071. a[i] = b[i];
  16072. }
  16073. }
  16074. if (hasOwnProp(b, 'toString')) {
  16075. a.toString = b.toString;
  16076. }
  16077. if (hasOwnProp(b, 'valueOf')) {
  16078. a.valueOf = b.valueOf;
  16079. }
  16080. return a;
  16081. }
  16082. function createUTC(input, format, locale, strict) {
  16083. return createLocalOrUTC(input, format, locale, strict, true).utc();
  16084. }
  16085. function defaultParsingFlags() {
  16086. // We need to deep clone this object.
  16087. return {
  16088. empty: false,
  16089. unusedTokens: [],
  16090. unusedInput: [],
  16091. overflow: -2,
  16092. charsLeftOver: 0,
  16093. nullInput: false,
  16094. invalidEra: null,
  16095. invalidMonth: null,
  16096. invalidFormat: false,
  16097. userInvalidated: false,
  16098. iso: false,
  16099. parsedDateParts: [],
  16100. era: null,
  16101. meridiem: null,
  16102. rfc2822: false,
  16103. weekdayMismatch: false,
  16104. };
  16105. }
  16106. function getParsingFlags(m) {
  16107. if (m._pf == null) {
  16108. m._pf = defaultParsingFlags();
  16109. }
  16110. return m._pf;
  16111. }
  16112. var some;
  16113. if (Array.prototype.some) {
  16114. some = Array.prototype.some;
  16115. } else {
  16116. some = function (fun) {
  16117. var t = Object(this),
  16118. len = t.length >>> 0,
  16119. i;
  16120. for (i = 0; i < len; i++) {
  16121. if (i in t && fun.call(this, t[i], i, t)) {
  16122. return true;
  16123. }
  16124. }
  16125. return false;
  16126. };
  16127. }
  16128. function isValid(m) {
  16129. if (m._isValid == null) {
  16130. var flags = getParsingFlags(m),
  16131. parsedParts = some.call(flags.parsedDateParts, function (i) {
  16132. return i != null;
  16133. }),
  16134. isNowValid =
  16135. !isNaN(m._d.getTime()) &&
  16136. flags.overflow < 0 &&
  16137. !flags.empty &&
  16138. !flags.invalidEra &&
  16139. !flags.invalidMonth &&
  16140. !flags.invalidWeekday &&
  16141. !flags.weekdayMismatch &&
  16142. !flags.nullInput &&
  16143. !flags.invalidFormat &&
  16144. !flags.userInvalidated &&
  16145. (!flags.meridiem || (flags.meridiem && parsedParts));
  16146. if (m._strict) {
  16147. isNowValid =
  16148. isNowValid &&
  16149. flags.charsLeftOver === 0 &&
  16150. flags.unusedTokens.length === 0 &&
  16151. flags.bigHour === undefined;
  16152. }
  16153. if (Object.isFrozen == null || !Object.isFrozen(m)) {
  16154. m._isValid = isNowValid;
  16155. } else {
  16156. return isNowValid;
  16157. }
  16158. }
  16159. return m._isValid;
  16160. }
  16161. function createInvalid(flags) {
  16162. var m = createUTC(NaN);
  16163. if (flags != null) {
  16164. extend(getParsingFlags(m), flags);
  16165. } else {
  16166. getParsingFlags(m).userInvalidated = true;
  16167. }
  16168. return m;
  16169. }
  16170. // Plugins that add properties should also add the key here (null value),
  16171. // so we can properly clone ourselves.
  16172. var momentProperties = (hooks.momentProperties = []),
  16173. updateInProgress = false;
  16174. function copyConfig(to, from) {
  16175. var i, prop, val;
  16176. if (!isUndefined(from._isAMomentObject)) {
  16177. to._isAMomentObject = from._isAMomentObject;
  16178. }
  16179. if (!isUndefined(from._i)) {
  16180. to._i = from._i;
  16181. }
  16182. if (!isUndefined(from._f)) {
  16183. to._f = from._f;
  16184. }
  16185. if (!isUndefined(from._l)) {
  16186. to._l = from._l;
  16187. }
  16188. if (!isUndefined(from._strict)) {
  16189. to._strict = from._strict;
  16190. }
  16191. if (!isUndefined(from._tzm)) {
  16192. to._tzm = from._tzm;
  16193. }
  16194. if (!isUndefined(from._isUTC)) {
  16195. to._isUTC = from._isUTC;
  16196. }
  16197. if (!isUndefined(from._offset)) {
  16198. to._offset = from._offset;
  16199. }
  16200. if (!isUndefined(from._pf)) {
  16201. to._pf = getParsingFlags(from);
  16202. }
  16203. if (!isUndefined(from._locale)) {
  16204. to._locale = from._locale;
  16205. }
  16206. if (momentProperties.length > 0) {
  16207. for (i = 0; i < momentProperties.length; i++) {
  16208. prop = momentProperties[i];
  16209. val = from[prop];
  16210. if (!isUndefined(val)) {
  16211. to[prop] = val;
  16212. }
  16213. }
  16214. }
  16215. return to;
  16216. }
  16217. // Moment prototype object
  16218. function Moment(config) {
  16219. copyConfig(this, config);
  16220. this._d = new Date(config._d != null ? config._d.getTime() : NaN);
  16221. if (!this.isValid()) {
  16222. this._d = new Date(NaN);
  16223. }
  16224. // Prevent infinite loop in case updateOffset creates new moment
  16225. // objects.
  16226. if (updateInProgress === false) {
  16227. updateInProgress = true;
  16228. hooks.updateOffset(this);
  16229. updateInProgress = false;
  16230. }
  16231. }
  16232. function isMoment(obj) {
  16233. return (
  16234. obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
  16235. );
  16236. }
  16237. function warn(msg) {
  16238. if (
  16239. hooks.suppressDeprecationWarnings === false &&
  16240. typeof console !== 'undefined' &&
  16241. console.warn
  16242. ) {
  16243. console.warn('Deprecation warning: ' + msg);
  16244. }
  16245. }
  16246. function deprecate(msg, fn) {
  16247. var firstTime = true;
  16248. return extend(function () {
  16249. if (hooks.deprecationHandler != null) {
  16250. hooks.deprecationHandler(null, msg);
  16251. }
  16252. if (firstTime) {
  16253. var args = [],
  16254. arg,
  16255. i,
  16256. key;
  16257. for (i = 0; i < arguments.length; i++) {
  16258. arg = '';
  16259. if (typeof arguments[i] === 'object') {
  16260. arg += '\n[' + i + '] ';
  16261. for (key in arguments[0]) {
  16262. if (hasOwnProp(arguments[0], key)) {
  16263. arg += key + ': ' + arguments[0][key] + ', ';
  16264. }
  16265. }
  16266. arg = arg.slice(0, -2); // Remove trailing comma and space
  16267. } else {
  16268. arg = arguments[i];
  16269. }
  16270. args.push(arg);
  16271. }
  16272. warn(
  16273. msg +
  16274. '\nArguments: ' +
  16275. Array.prototype.slice.call(args).join('') +
  16276. '\n' +
  16277. new Error().stack
  16278. );
  16279. firstTime = false;
  16280. }
  16281. return fn.apply(this, arguments);
  16282. }, fn);
  16283. }
  16284. var deprecations = {};
  16285. function deprecateSimple(name, msg) {
  16286. if (hooks.deprecationHandler != null) {
  16287. hooks.deprecationHandler(name, msg);
  16288. }
  16289. if (!deprecations[name]) {
  16290. warn(msg);
  16291. deprecations[name] = true;
  16292. }
  16293. }
  16294. hooks.suppressDeprecationWarnings = false;
  16295. hooks.deprecationHandler = null;
  16296. function isFunction(input) {
  16297. return (
  16298. (typeof Function !== 'undefined' && input instanceof Function) ||
  16299. Object.prototype.toString.call(input) === '[object Function]'
  16300. );
  16301. }
  16302. function set(config) {
  16303. var prop, i;
  16304. for (i in config) {
  16305. if (hasOwnProp(config, i)) {
  16306. prop = config[i];
  16307. if (isFunction(prop)) {
  16308. this[i] = prop;
  16309. } else {
  16310. this['_' + i] = prop;
  16311. }
  16312. }
  16313. }
  16314. this._config = config;
  16315. // Lenient ordinal parsing accepts just a number in addition to
  16316. // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
  16317. // TODO: Remove "ordinalParse" fallback in next major release.
  16318. this._dayOfMonthOrdinalParseLenient = new RegExp(
  16319. (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
  16320. '|' +
  16321. /\d{1,2}/.source
  16322. );
  16323. }
  16324. function mergeConfigs(parentConfig, childConfig) {
  16325. var res = extend({}, parentConfig),
  16326. prop;
  16327. for (prop in childConfig) {
  16328. if (hasOwnProp(childConfig, prop)) {
  16329. if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
  16330. res[prop] = {};
  16331. extend(res[prop], parentConfig[prop]);
  16332. extend(res[prop], childConfig[prop]);
  16333. } else if (childConfig[prop] != null) {
  16334. res[prop] = childConfig[prop];
  16335. } else {
  16336. delete res[prop];
  16337. }
  16338. }
  16339. }
  16340. for (prop in parentConfig) {
  16341. if (
  16342. hasOwnProp(parentConfig, prop) &&
  16343. !hasOwnProp(childConfig, prop) &&
  16344. isObject(parentConfig[prop])
  16345. ) {
  16346. // make sure changes to properties don't modify parent config
  16347. res[prop] = extend({}, res[prop]);
  16348. }
  16349. }
  16350. return res;
  16351. }
  16352. function Locale(config) {
  16353. if (config != null) {
  16354. this.set(config);
  16355. }
  16356. }
  16357. var keys;
  16358. if (Object.keys) {
  16359. keys = Object.keys;
  16360. } else {
  16361. keys = function (obj) {
  16362. var i,
  16363. res = [];
  16364. for (i in obj) {
  16365. if (hasOwnProp(obj, i)) {
  16366. res.push(i);
  16367. }
  16368. }
  16369. return res;
  16370. };
  16371. }
  16372. var defaultCalendar = {
  16373. sameDay: '[Today at] LT',
  16374. nextDay: '[Tomorrow at] LT',
  16375. nextWeek: 'dddd [at] LT',
  16376. lastDay: '[Yesterday at] LT',
  16377. lastWeek: '[Last] dddd [at] LT',
  16378. sameElse: 'L',
  16379. };
  16380. function calendar(key, mom, now) {
  16381. var output = this._calendar[key] || this._calendar['sameElse'];
  16382. return isFunction(output) ? output.call(mom, now) : output;
  16383. }
  16384. function zeroFill(number, targetLength, forceSign) {
  16385. var absNumber = '' + Math.abs(number),
  16386. zerosToFill = targetLength - absNumber.length,
  16387. sign = number >= 0;
  16388. return (
  16389. (sign ? (forceSign ? '+' : '') : '-') +
  16390. Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
  16391. absNumber
  16392. );
  16393. }
  16394. var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
  16395. localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
  16396. formatFunctions = {},
  16397. formatTokenFunctions = {};
  16398. // token: 'M'
  16399. // padded: ['MM', 2]
  16400. // ordinal: 'Mo'
  16401. // callback: function () { this.month() + 1 }
  16402. function addFormatToken(token, padded, ordinal, callback) {
  16403. var func = callback;
  16404. if (typeof callback === 'string') {
  16405. func = function () {
  16406. return this[callback]();
  16407. };
  16408. }
  16409. if (token) {
  16410. formatTokenFunctions[token] = func;
  16411. }
  16412. if (padded) {
  16413. formatTokenFunctions[padded[0]] = function () {
  16414. return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
  16415. };
  16416. }
  16417. if (ordinal) {
  16418. formatTokenFunctions[ordinal] = function () {
  16419. return this.localeData().ordinal(
  16420. func.apply(this, arguments),
  16421. token
  16422. );
  16423. };
  16424. }
  16425. }
  16426. function removeFormattingTokens(input) {
  16427. if (input.match(/\[[\s\S]/)) {
  16428. return input.replace(/^\[|\]$/g, '');
  16429. }
  16430. return input.replace(/\\/g, '');
  16431. }
  16432. function makeFormatFunction(format) {
  16433. var array = format.match(formattingTokens),
  16434. i,
  16435. length;
  16436. for (i = 0, length = array.length; i < length; i++) {
  16437. if (formatTokenFunctions[array[i]]) {
  16438. array[i] = formatTokenFunctions[array[i]];
  16439. } else {
  16440. array[i] = removeFormattingTokens(array[i]);
  16441. }
  16442. }
  16443. return function (mom) {
  16444. var output = '',
  16445. i;
  16446. for (i = 0; i < length; i++) {
  16447. output += isFunction(array[i])
  16448. ? array[i].call(mom, format)
  16449. : array[i];
  16450. }
  16451. return output;
  16452. };
  16453. }
  16454. // format date using native date object
  16455. function formatMoment(m, format) {
  16456. if (!m.isValid()) {
  16457. return m.localeData().invalidDate();
  16458. }
  16459. format = expandFormat(format, m.localeData());
  16460. formatFunctions[format] =
  16461. formatFunctions[format] || makeFormatFunction(format);
  16462. return formatFunctions[format](m);
  16463. }
  16464. function expandFormat(format, locale) {
  16465. var i = 5;
  16466. function replaceLongDateFormatTokens(input) {
  16467. return locale.longDateFormat(input) || input;
  16468. }
  16469. localFormattingTokens.lastIndex = 0;
  16470. while (i >= 0 && localFormattingTokens.test(format)) {
  16471. format = format.replace(
  16472. localFormattingTokens,
  16473. replaceLongDateFormatTokens
  16474. );
  16475. localFormattingTokens.lastIndex = 0;
  16476. i -= 1;
  16477. }
  16478. return format;
  16479. }
  16480. var defaultLongDateFormat = {
  16481. LTS: 'h:mm:ss A',
  16482. LT: 'h:mm A',
  16483. L: 'MM/DD/YYYY',
  16484. LL: 'MMMM D, YYYY',
  16485. LLL: 'MMMM D, YYYY h:mm A',
  16486. LLLL: 'dddd, MMMM D, YYYY h:mm A',
  16487. };
  16488. function longDateFormat(key) {
  16489. var format = this._longDateFormat[key],
  16490. formatUpper = this._longDateFormat[key.toUpperCase()];
  16491. if (format || !formatUpper) {
  16492. return format;
  16493. }
  16494. this._longDateFormat[key] = formatUpper
  16495. .match(formattingTokens)
  16496. .map(function (tok) {
  16497. if (
  16498. tok === 'MMMM' ||
  16499. tok === 'MM' ||
  16500. tok === 'DD' ||
  16501. tok === 'dddd'
  16502. ) {
  16503. return tok.slice(1);
  16504. }
  16505. return tok;
  16506. })
  16507. .join('');
  16508. return this._longDateFormat[key];
  16509. }
  16510. var defaultInvalidDate = 'Invalid date';
  16511. function invalidDate() {
  16512. return this._invalidDate;
  16513. }
  16514. var defaultOrdinal = '%d',
  16515. defaultDayOfMonthOrdinalParse = /\d{1,2}/;
  16516. function ordinal(number) {
  16517. return this._ordinal.replace('%d', number);
  16518. }
  16519. var defaultRelativeTime = {
  16520. future: 'in %s',
  16521. past: '%s ago',
  16522. s: 'a few seconds',
  16523. ss: '%d seconds',
  16524. m: 'a minute',
  16525. mm: '%d minutes',
  16526. h: 'an hour',
  16527. hh: '%d hours',
  16528. d: 'a day',
  16529. dd: '%d days',
  16530. w: 'a week',
  16531. ww: '%d weeks',
  16532. M: 'a month',
  16533. MM: '%d months',
  16534. y: 'a year',
  16535. yy: '%d years',
  16536. };
  16537. function relativeTime(number, withoutSuffix, string, isFuture) {
  16538. var output = this._relativeTime[string];
  16539. return isFunction(output)
  16540. ? output(number, withoutSuffix, string, isFuture)
  16541. : output.replace(/%d/i, number);
  16542. }
  16543. function pastFuture(diff, output) {
  16544. var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
  16545. return isFunction(format) ? format(output) : format.replace(/%s/i, output);
  16546. }
  16547. var aliases = {};
  16548. function addUnitAlias(unit, shorthand) {
  16549. var lowerCase = unit.toLowerCase();
  16550. aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
  16551. }
  16552. function normalizeUnits(units) {
  16553. return typeof units === 'string'
  16554. ? aliases[units] || aliases[units.toLowerCase()]
  16555. : undefined;
  16556. }
  16557. function normalizeObjectUnits(inputObject) {
  16558. var normalizedInput = {},
  16559. normalizedProp,
  16560. prop;
  16561. for (prop in inputObject) {
  16562. if (hasOwnProp(inputObject, prop)) {
  16563. normalizedProp = normalizeUnits(prop);
  16564. if (normalizedProp) {
  16565. normalizedInput[normalizedProp] = inputObject[prop];
  16566. }
  16567. }
  16568. }
  16569. return normalizedInput;
  16570. }
  16571. var priorities = {};
  16572. function addUnitPriority(unit, priority) {
  16573. priorities[unit] = priority;
  16574. }
  16575. function getPrioritizedUnits(unitsObj) {
  16576. var units = [],
  16577. u;
  16578. for (u in unitsObj) {
  16579. if (hasOwnProp(unitsObj, u)) {
  16580. units.push({ unit: u, priority: priorities[u] });
  16581. }
  16582. }
  16583. units.sort(function (a, b) {
  16584. return a.priority - b.priority;
  16585. });
  16586. return units;
  16587. }
  16588. function isLeapYear(year) {
  16589. return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
  16590. }
  16591. function absFloor(number) {
  16592. if (number < 0) {
  16593. // -0 -> 0
  16594. return Math.ceil(number) || 0;
  16595. } else {
  16596. return Math.floor(number);
  16597. }
  16598. }
  16599. function toInt(argumentForCoercion) {
  16600. var coercedNumber = +argumentForCoercion,
  16601. value = 0;
  16602. if (coercedNumber !== 0 && isFinite(coercedNumber)) {
  16603. value = absFloor(coercedNumber);
  16604. }
  16605. return value;
  16606. }
  16607. function makeGetSet(unit, keepTime) {
  16608. return function (value) {
  16609. if (value != null) {
  16610. set$1(this, unit, value);
  16611. hooks.updateOffset(this, keepTime);
  16612. return this;
  16613. } else {
  16614. return get(this, unit);
  16615. }
  16616. };
  16617. }
  16618. function get(mom, unit) {
  16619. return mom.isValid()
  16620. ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
  16621. : NaN;
  16622. }
  16623. function set$1(mom, unit, value) {
  16624. if (mom.isValid() && !isNaN(value)) {
  16625. if (
  16626. unit === 'FullYear' &&
  16627. isLeapYear(mom.year()) &&
  16628. mom.month() === 1 &&
  16629. mom.date() === 29
  16630. ) {
  16631. value = toInt(value);
  16632. mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
  16633. value,
  16634. mom.month(),
  16635. daysInMonth(value, mom.month())
  16636. );
  16637. } else {
  16638. mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
  16639. }
  16640. }
  16641. }
  16642. // MOMENTS
  16643. function stringGet(units) {
  16644. units = normalizeUnits(units);
  16645. if (isFunction(this[units])) {
  16646. return this[units]();
  16647. }
  16648. return this;
  16649. }
  16650. function stringSet(units, value) {
  16651. if (typeof units === 'object') {
  16652. units = normalizeObjectUnits(units);
  16653. var prioritized = getPrioritizedUnits(units),
  16654. i;
  16655. for (i = 0; i < prioritized.length; i++) {
  16656. this[prioritized[i].unit](units[prioritized[i].unit]);
  16657. }
  16658. } else {
  16659. units = normalizeUnits(units);
  16660. if (isFunction(this[units])) {
  16661. return this[units](value);
  16662. }
  16663. }
  16664. return this;
  16665. }
  16666. var match1 = /\d/, // 0 - 9
  16667. match2 = /\d\d/, // 00 - 99
  16668. match3 = /\d{3}/, // 000 - 999
  16669. match4 = /\d{4}/, // 0000 - 9999
  16670. match6 = /[+-]?\d{6}/, // -999999 - 999999
  16671. match1to2 = /\d\d?/, // 0 - 99
  16672. match3to4 = /\d\d\d\d?/, // 999 - 9999
  16673. match5to6 = /\d\d\d\d\d\d?/, // 99999 - 999999
  16674. match1to3 = /\d{1,3}/, // 0 - 999
  16675. match1to4 = /\d{1,4}/, // 0 - 9999
  16676. match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
  16677. matchUnsigned = /\d+/, // 0 - inf
  16678. matchSigned = /[+-]?\d+/, // -inf - inf
  16679. matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
  16680. matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
  16681. matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
  16682. // any word (or two) characters or numbers including two/three word month in arabic.
  16683. // includes scottish gaelic two word and hyphenated months
  16684. matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
  16685. regexes;
  16686. regexes = {};
  16687. function addRegexToken(token, regex, strictRegex) {
  16688. regexes[token] = isFunction(regex)
  16689. ? regex
  16690. : function (isStrict, localeData) {
  16691. return isStrict && strictRegex ? strictRegex : regex;
  16692. };
  16693. }
  16694. function getParseRegexForToken(token, config) {
  16695. if (!hasOwnProp(regexes, token)) {
  16696. return new RegExp(unescapeFormat(token));
  16697. }
  16698. return regexes[token](config._strict, config._locale);
  16699. }
  16700. // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
  16701. function unescapeFormat(s) {
  16702. return regexEscape(
  16703. s
  16704. .replace('\\', '')
  16705. .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (
  16706. matched,
  16707. p1,
  16708. p2,
  16709. p3,
  16710. p4
  16711. ) {
  16712. return p1 || p2 || p3 || p4;
  16713. })
  16714. );
  16715. }
  16716. function regexEscape(s) {
  16717. return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
  16718. }
  16719. var tokens = {};
  16720. function addParseToken(token, callback) {
  16721. var i,
  16722. func = callback;
  16723. if (typeof token === 'string') {
  16724. token = [token];
  16725. }
  16726. if (isNumber(callback)) {
  16727. func = function (input, array) {
  16728. array[callback] = toInt(input);
  16729. };
  16730. }
  16731. for (i = 0; i < token.length; i++) {
  16732. tokens[token[i]] = func;
  16733. }
  16734. }
  16735. function addWeekParseToken(token, callback) {
  16736. addParseToken(token, function (input, array, config, token) {
  16737. config._w = config._w || {};
  16738. callback(input, config._w, config, token);
  16739. });
  16740. }
  16741. function addTimeToArrayFromToken(token, input, config) {
  16742. if (input != null && hasOwnProp(tokens, token)) {
  16743. tokens[token](input, config._a, config, token);
  16744. }
  16745. }
  16746. var YEAR = 0,
  16747. MONTH = 1,
  16748. DATE = 2,
  16749. HOUR = 3,
  16750. MINUTE = 4,
  16751. SECOND = 5,
  16752. MILLISECOND = 6,
  16753. WEEK = 7,
  16754. WEEKDAY = 8;
  16755. function mod(n, x) {
  16756. return ((n % x) + x) % x;
  16757. }
  16758. var indexOf;
  16759. if (Array.prototype.indexOf) {
  16760. indexOf = Array.prototype.indexOf;
  16761. } else {
  16762. indexOf = function (o) {
  16763. // I know
  16764. var i;
  16765. for (i = 0; i < this.length; ++i) {
  16766. if (this[i] === o) {
  16767. return i;
  16768. }
  16769. }
  16770. return -1;
  16771. };
  16772. }
  16773. function daysInMonth(year, month) {
  16774. if (isNaN(year) || isNaN(month)) {
  16775. return NaN;
  16776. }
  16777. var modMonth = mod(month, 12);
  16778. year += (month - modMonth) / 12;
  16779. return modMonth === 1
  16780. ? isLeapYear(year)
  16781. ? 29
  16782. : 28
  16783. : 31 - ((modMonth % 7) % 2);
  16784. }
  16785. // FORMATTING
  16786. addFormatToken('M', ['MM', 2], 'Mo', function () {
  16787. return this.month() + 1;
  16788. });
  16789. addFormatToken('MMM', 0, 0, function (format) {
  16790. return this.localeData().monthsShort(this, format);
  16791. });
  16792. addFormatToken('MMMM', 0, 0, function (format) {
  16793. return this.localeData().months(this, format);
  16794. });
  16795. // ALIASES
  16796. addUnitAlias('month', 'M');
  16797. // PRIORITY
  16798. addUnitPriority('month', 8);
  16799. // PARSING
  16800. addRegexToken('M', match1to2);
  16801. addRegexToken('MM', match1to2, match2);
  16802. addRegexToken('MMM', function (isStrict, locale) {
  16803. return locale.monthsShortRegex(isStrict);
  16804. });
  16805. addRegexToken('MMMM', function (isStrict, locale) {
  16806. return locale.monthsRegex(isStrict);
  16807. });
  16808. addParseToken(['M', 'MM'], function (input, array) {
  16809. array[MONTH] = toInt(input) - 1;
  16810. });
  16811. addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
  16812. var month = config._locale.monthsParse(input, token, config._strict);
  16813. // if we didn't find a month name, mark the date as invalid.
  16814. if (month != null) {
  16815. array[MONTH] = month;
  16816. } else {
  16817. getParsingFlags(config).invalidMonth = input;
  16818. }
  16819. });
  16820. // LOCALES
  16821. var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
  16822. '_'
  16823. ),
  16824. defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(
  16825. '_'
  16826. ),
  16827. MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
  16828. defaultMonthsShortRegex = matchWord,
  16829. defaultMonthsRegex = matchWord;
  16830. function localeMonths(m, format) {
  16831. if (!m) {
  16832. return isArray(this._months)
  16833. ? this._months
  16834. : this._months['standalone'];
  16835. }
  16836. return isArray(this._months)
  16837. ? this._months[m.month()]
  16838. : this._months[
  16839. (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
  16840. ? 'format'
  16841. : 'standalone'
  16842. ][m.month()];
  16843. }
  16844. function localeMonthsShort(m, format) {
  16845. if (!m) {
  16846. return isArray(this._monthsShort)
  16847. ? this._monthsShort
  16848. : this._monthsShort['standalone'];
  16849. }
  16850. return isArray(this._monthsShort)
  16851. ? this._monthsShort[m.month()]
  16852. : this._monthsShort[
  16853. MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
  16854. ][m.month()];
  16855. }
  16856. function handleStrictParse(monthName, format, strict) {
  16857. var i,
  16858. ii,
  16859. mom,
  16860. llc = monthName.toLocaleLowerCase();
  16861. if (!this._monthsParse) {
  16862. // this is not used
  16863. this._monthsParse = [];
  16864. this._longMonthsParse = [];
  16865. this._shortMonthsParse = [];
  16866. for (i = 0; i < 12; ++i) {
  16867. mom = createUTC([2000, i]);
  16868. this._shortMonthsParse[i] = this.monthsShort(
  16869. mom,
  16870. ''
  16871. ).toLocaleLowerCase();
  16872. this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
  16873. }
  16874. }
  16875. if (strict) {
  16876. if (format === 'MMM') {
  16877. ii = indexOf.call(this._shortMonthsParse, llc);
  16878. return ii !== -1 ? ii : null;
  16879. } else {
  16880. ii = indexOf.call(this._longMonthsParse, llc);
  16881. return ii !== -1 ? ii : null;
  16882. }
  16883. } else {
  16884. if (format === 'MMM') {
  16885. ii = indexOf.call(this._shortMonthsParse, llc);
  16886. if (ii !== -1) {
  16887. return ii;
  16888. }
  16889. ii = indexOf.call(this._longMonthsParse, llc);
  16890. return ii !== -1 ? ii : null;
  16891. } else {
  16892. ii = indexOf.call(this._longMonthsParse, llc);
  16893. if (ii !== -1) {
  16894. return ii;
  16895. }
  16896. ii = indexOf.call(this._shortMonthsParse, llc);
  16897. return ii !== -1 ? ii : null;
  16898. }
  16899. }
  16900. }
  16901. function localeMonthsParse(monthName, format, strict) {
  16902. var i, mom, regex;
  16903. if (this._monthsParseExact) {
  16904. return handleStrictParse.call(this, monthName, format, strict);
  16905. }
  16906. if (!this._monthsParse) {
  16907. this._monthsParse = [];
  16908. this._longMonthsParse = [];
  16909. this._shortMonthsParse = [];
  16910. }
  16911. // TODO: add sorting
  16912. // Sorting makes sure if one month (or abbr) is a prefix of another
  16913. // see sorting in computeMonthsParse
  16914. for (i = 0; i < 12; i++) {
  16915. // make the regex if we don't have it already
  16916. mom = createUTC([2000, i]);
  16917. if (strict && !this._longMonthsParse[i]) {
  16918. this._longMonthsParse[i] = new RegExp(
  16919. '^' + this.months(mom, '').replace('.', '') + '$',
  16920. 'i'
  16921. );
  16922. this._shortMonthsParse[i] = new RegExp(
  16923. '^' + this.monthsShort(mom, '').replace('.', '') + '$',
  16924. 'i'
  16925. );
  16926. }
  16927. if (!strict && !this._monthsParse[i]) {
  16928. regex =
  16929. '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
  16930. this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
  16931. }
  16932. // test the regex
  16933. if (
  16934. strict &&
  16935. format === 'MMMM' &&
  16936. this._longMonthsParse[i].test(monthName)
  16937. ) {
  16938. return i;
  16939. } else if (
  16940. strict &&
  16941. format === 'MMM' &&
  16942. this._shortMonthsParse[i].test(monthName)
  16943. ) {
  16944. return i;
  16945. } else if (!strict && this._monthsParse[i].test(monthName)) {
  16946. return i;
  16947. }
  16948. }
  16949. }
  16950. // MOMENTS
  16951. function setMonth(mom, value) {
  16952. var dayOfMonth;
  16953. if (!mom.isValid()) {
  16954. // No op
  16955. return mom;
  16956. }
  16957. if (typeof value === 'string') {
  16958. if (/^\d+$/.test(value)) {
  16959. value = toInt(value);
  16960. } else {
  16961. value = mom.localeData().monthsParse(value);
  16962. // TODO: Another silent failure?
  16963. if (!isNumber(value)) {
  16964. return mom;
  16965. }
  16966. }
  16967. }
  16968. dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
  16969. mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
  16970. return mom;
  16971. }
  16972. function getSetMonth(value) {
  16973. if (value != null) {
  16974. setMonth(this, value);
  16975. hooks.updateOffset(this, true);
  16976. return this;
  16977. } else {
  16978. return get(this, 'Month');
  16979. }
  16980. }
  16981. function getDaysInMonth() {
  16982. return daysInMonth(this.year(), this.month());
  16983. }
  16984. function monthsShortRegex(isStrict) {
  16985. if (this._monthsParseExact) {
  16986. if (!hasOwnProp(this, '_monthsRegex')) {
  16987. computeMonthsParse.call(this);
  16988. }
  16989. if (isStrict) {
  16990. return this._monthsShortStrictRegex;
  16991. } else {
  16992. return this._monthsShortRegex;
  16993. }
  16994. } else {
  16995. if (!hasOwnProp(this, '_monthsShortRegex')) {
  16996. this._monthsShortRegex = defaultMonthsShortRegex;
  16997. }
  16998. return this._monthsShortStrictRegex && isStrict
  16999. ? this._monthsShortStrictRegex
  17000. : this._monthsShortRegex;
  17001. }
  17002. }
  17003. function monthsRegex(isStrict) {
  17004. if (this._monthsParseExact) {
  17005. if (!hasOwnProp(this, '_monthsRegex')) {
  17006. computeMonthsParse.call(this);
  17007. }
  17008. if (isStrict) {
  17009. return this._monthsStrictRegex;
  17010. } else {
  17011. return this._monthsRegex;
  17012. }
  17013. } else {
  17014. if (!hasOwnProp(this, '_monthsRegex')) {
  17015. this._monthsRegex = defaultMonthsRegex;
  17016. }
  17017. return this._monthsStrictRegex && isStrict
  17018. ? this._monthsStrictRegex
  17019. : this._monthsRegex;
  17020. }
  17021. }
  17022. function computeMonthsParse() {
  17023. function cmpLenRev(a, b) {
  17024. return b.length - a.length;
  17025. }
  17026. var shortPieces = [],
  17027. longPieces = [],
  17028. mixedPieces = [],
  17029. i,
  17030. mom;
  17031. for (i = 0; i < 12; i++) {
  17032. // make the regex if we don't have it already
  17033. mom = createUTC([2000, i]);
  17034. shortPieces.push(this.monthsShort(mom, ''));
  17035. longPieces.push(this.months(mom, ''));
  17036. mixedPieces.push(this.months(mom, ''));
  17037. mixedPieces.push(this.monthsShort(mom, ''));
  17038. }
  17039. // Sorting makes sure if one month (or abbr) is a prefix of another it
  17040. // will match the longer piece.
  17041. shortPieces.sort(cmpLenRev);
  17042. longPieces.sort(cmpLenRev);
  17043. mixedPieces.sort(cmpLenRev);
  17044. for (i = 0; i < 12; i++) {
  17045. shortPieces[i] = regexEscape(shortPieces[i]);
  17046. longPieces[i] = regexEscape(longPieces[i]);
  17047. }
  17048. for (i = 0; i < 24; i++) {
  17049. mixedPieces[i] = regexEscape(mixedPieces[i]);
  17050. }
  17051. this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
  17052. this._monthsShortRegex = this._monthsRegex;
  17053. this._monthsStrictRegex = new RegExp(
  17054. '^(' + longPieces.join('|') + ')',
  17055. 'i'
  17056. );
  17057. this._monthsShortStrictRegex = new RegExp(
  17058. '^(' + shortPieces.join('|') + ')',
  17059. 'i'
  17060. );
  17061. }
  17062. // FORMATTING
  17063. addFormatToken('Y', 0, 0, function () {
  17064. var y = this.year();
  17065. return y <= 9999 ? zeroFill(y, 4) : '+' + y;
  17066. });
  17067. addFormatToken(0, ['YY', 2], 0, function () {
  17068. return this.year() % 100;
  17069. });
  17070. addFormatToken(0, ['YYYY', 4], 0, 'year');
  17071. addFormatToken(0, ['YYYYY', 5], 0, 'year');
  17072. addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
  17073. // ALIASES
  17074. addUnitAlias('year', 'y');
  17075. // PRIORITIES
  17076. addUnitPriority('year', 1);
  17077. // PARSING
  17078. addRegexToken('Y', matchSigned);
  17079. addRegexToken('YY', match1to2, match2);
  17080. addRegexToken('YYYY', match1to4, match4);
  17081. addRegexToken('YYYYY', match1to6, match6);
  17082. addRegexToken('YYYYYY', match1to6, match6);
  17083. addParseToken(['YYYYY', 'YYYYYY'], YEAR);
  17084. addParseToken('YYYY', function (input, array) {
  17085. array[YEAR] =
  17086. input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
  17087. });
  17088. addParseToken('YY', function (input, array) {
  17089. array[YEAR] = hooks.parseTwoDigitYear(input);
  17090. });
  17091. addParseToken('Y', function (input, array) {
  17092. array[YEAR] = parseInt(input, 10);
  17093. });
  17094. // HELPERS
  17095. function daysInYear(year) {
  17096. return isLeapYear(year) ? 366 : 365;
  17097. }
  17098. // HOOKS
  17099. hooks.parseTwoDigitYear = function (input) {
  17100. return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
  17101. };
  17102. // MOMENTS
  17103. var getSetYear = makeGetSet('FullYear', true);
  17104. function getIsLeapYear() {
  17105. return isLeapYear(this.year());
  17106. }
  17107. function createDate(y, m, d, h, M, s, ms) {
  17108. // can't just apply() to create a date:
  17109. // https://stackoverflow.com/q/181348
  17110. var date;
  17111. // the date constructor remaps years 0-99 to 1900-1999
  17112. if (y < 100 && y >= 0) {
  17113. // preserve leap years using a full 400 year cycle, then reset
  17114. date = new Date(y + 400, m, d, h, M, s, ms);
  17115. if (isFinite(date.getFullYear())) {
  17116. date.setFullYear(y);
  17117. }
  17118. } else {
  17119. date = new Date(y, m, d, h, M, s, ms);
  17120. }
  17121. return date;
  17122. }
  17123. function createUTCDate(y) {
  17124. var date, args;
  17125. // the Date.UTC function remaps years 0-99 to 1900-1999
  17126. if (y < 100 && y >= 0) {
  17127. args = Array.prototype.slice.call(arguments);
  17128. // preserve leap years using a full 400 year cycle, then reset
  17129. args[0] = y + 400;
  17130. date = new Date(Date.UTC.apply(null, args));
  17131. if (isFinite(date.getUTCFullYear())) {
  17132. date.setUTCFullYear(y);
  17133. }
  17134. } else {
  17135. date = new Date(Date.UTC.apply(null, arguments));
  17136. }
  17137. return date;
  17138. }
  17139. // start-of-first-week - start-of-year
  17140. function firstWeekOffset(year, dow, doy) {
  17141. var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
  17142. fwd = 7 + dow - doy,
  17143. // first-week day local weekday -- which local weekday is fwd
  17144. fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
  17145. return -fwdlw + fwd - 1;
  17146. }
  17147. // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
  17148. function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
  17149. var localWeekday = (7 + weekday - dow) % 7,
  17150. weekOffset = firstWeekOffset(year, dow, doy),
  17151. dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
  17152. resYear,
  17153. resDayOfYear;
  17154. if (dayOfYear <= 0) {
  17155. resYear = year - 1;
  17156. resDayOfYear = daysInYear(resYear) + dayOfYear;
  17157. } else if (dayOfYear > daysInYear(year)) {
  17158. resYear = year + 1;
  17159. resDayOfYear = dayOfYear - daysInYear(year);
  17160. } else {
  17161. resYear = year;
  17162. resDayOfYear = dayOfYear;
  17163. }
  17164. return {
  17165. year: resYear,
  17166. dayOfYear: resDayOfYear,
  17167. };
  17168. }
  17169. function weekOfYear(mom, dow, doy) {
  17170. var weekOffset = firstWeekOffset(mom.year(), dow, doy),
  17171. week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
  17172. resWeek,
  17173. resYear;
  17174. if (week < 1) {
  17175. resYear = mom.year() - 1;
  17176. resWeek = week + weeksInYear(resYear, dow, doy);
  17177. } else if (week > weeksInYear(mom.year(), dow, doy)) {
  17178. resWeek = week - weeksInYear(mom.year(), dow, doy);
  17179. resYear = mom.year() + 1;
  17180. } else {
  17181. resYear = mom.year();
  17182. resWeek = week;
  17183. }
  17184. return {
  17185. week: resWeek,
  17186. year: resYear,
  17187. };
  17188. }
  17189. function weeksInYear(year, dow, doy) {
  17190. var weekOffset = firstWeekOffset(year, dow, doy),
  17191. weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
  17192. return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
  17193. }
  17194. // FORMATTING
  17195. addFormatToken('w', ['ww', 2], 'wo', 'week');
  17196. addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
  17197. // ALIASES
  17198. addUnitAlias('week', 'w');
  17199. addUnitAlias('isoWeek', 'W');
  17200. // PRIORITIES
  17201. addUnitPriority('week', 5);
  17202. addUnitPriority('isoWeek', 5);
  17203. // PARSING
  17204. addRegexToken('w', match1to2);
  17205. addRegexToken('ww', match1to2, match2);
  17206. addRegexToken('W', match1to2);
  17207. addRegexToken('WW', match1to2, match2);
  17208. addWeekParseToken(['w', 'ww', 'W', 'WW'], function (
  17209. input,
  17210. week,
  17211. config,
  17212. token
  17213. ) {
  17214. week[token.substr(0, 1)] = toInt(input);
  17215. });
  17216. // HELPERS
  17217. // LOCALES
  17218. function localeWeek(mom) {
  17219. return weekOfYear(mom, this._week.dow, this._week.doy).week;
  17220. }
  17221. var defaultLocaleWeek = {
  17222. dow: 0, // Sunday is the first day of the week.
  17223. doy: 6, // The week that contains Jan 6th is the first week of the year.
  17224. };
  17225. function localeFirstDayOfWeek() {
  17226. return this._week.dow;
  17227. }
  17228. function localeFirstDayOfYear() {
  17229. return this._week.doy;
  17230. }
  17231. // MOMENTS
  17232. function getSetWeek(input) {
  17233. var week = this.localeData().week(this);
  17234. return input == null ? week : this.add((input - week) * 7, 'd');
  17235. }
  17236. function getSetISOWeek(input) {
  17237. var week = weekOfYear(this, 1, 4).week;
  17238. return input == null ? week : this.add((input - week) * 7, 'd');
  17239. }
  17240. // FORMATTING
  17241. addFormatToken('d', 0, 'do', 'day');
  17242. addFormatToken('dd', 0, 0, function (format) {
  17243. return this.localeData().weekdaysMin(this, format);
  17244. });
  17245. addFormatToken('ddd', 0, 0, function (format) {
  17246. return this.localeData().weekdaysShort(this, format);
  17247. });
  17248. addFormatToken('dddd', 0, 0, function (format) {
  17249. return this.localeData().weekdays(this, format);
  17250. });
  17251. addFormatToken('e', 0, 0, 'weekday');
  17252. addFormatToken('E', 0, 0, 'isoWeekday');
  17253. // ALIASES
  17254. addUnitAlias('day', 'd');
  17255. addUnitAlias('weekday', 'e');
  17256. addUnitAlias('isoWeekday', 'E');
  17257. // PRIORITY
  17258. addUnitPriority('day', 11);
  17259. addUnitPriority('weekday', 11);
  17260. addUnitPriority('isoWeekday', 11);
  17261. // PARSING
  17262. addRegexToken('d', match1to2);
  17263. addRegexToken('e', match1to2);
  17264. addRegexToken('E', match1to2);
  17265. addRegexToken('dd', function (isStrict, locale) {
  17266. return locale.weekdaysMinRegex(isStrict);
  17267. });
  17268. addRegexToken('ddd', function (isStrict, locale) {
  17269. return locale.weekdaysShortRegex(isStrict);
  17270. });
  17271. addRegexToken('dddd', function (isStrict, locale) {
  17272. return locale.weekdaysRegex(isStrict);
  17273. });
  17274. addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
  17275. var weekday = config._locale.weekdaysParse(input, token, config._strict);
  17276. // if we didn't get a weekday name, mark the date as invalid
  17277. if (weekday != null) {
  17278. week.d = weekday;
  17279. } else {
  17280. getParsingFlags(config).invalidWeekday = input;
  17281. }
  17282. });
  17283. addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
  17284. week[token] = toInt(input);
  17285. });
  17286. // HELPERS
  17287. function parseWeekday(input, locale) {
  17288. if (typeof input !== 'string') {
  17289. return input;
  17290. }
  17291. if (!isNaN(input)) {
  17292. return parseInt(input, 10);
  17293. }
  17294. input = locale.weekdaysParse(input);
  17295. if (typeof input === 'number') {
  17296. return input;
  17297. }
  17298. return null;
  17299. }
  17300. function parseIsoWeekday(input, locale) {
  17301. if (typeof input === 'string') {
  17302. return locale.weekdaysParse(input) % 7 || 7;
  17303. }
  17304. return isNaN(input) ? null : input;
  17305. }
  17306. // LOCALES
  17307. function shiftWeekdays(ws, n) {
  17308. return ws.slice(n, 7).concat(ws.slice(0, n));
  17309. }
  17310. var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
  17311. '_'
  17312. ),
  17313. defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
  17314. defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
  17315. defaultWeekdaysRegex = matchWord,
  17316. defaultWeekdaysShortRegex = matchWord,
  17317. defaultWeekdaysMinRegex = matchWord;
  17318. function localeWeekdays(m, format) {
  17319. var weekdays = isArray(this._weekdays)
  17320. ? this._weekdays
  17321. : this._weekdays[
  17322. m && m !== true && this._weekdays.isFormat.test(format)
  17323. ? 'format'
  17324. : 'standalone'
  17325. ];
  17326. return m === true
  17327. ? shiftWeekdays(weekdays, this._week.dow)
  17328. : m
  17329. ? weekdays[m.day()]
  17330. : weekdays;
  17331. }
  17332. function localeWeekdaysShort(m) {
  17333. return m === true
  17334. ? shiftWeekdays(this._weekdaysShort, this._week.dow)
  17335. : m
  17336. ? this._weekdaysShort[m.day()]
  17337. : this._weekdaysShort;
  17338. }
  17339. function localeWeekdaysMin(m) {
  17340. return m === true
  17341. ? shiftWeekdays(this._weekdaysMin, this._week.dow)
  17342. : m
  17343. ? this._weekdaysMin[m.day()]
  17344. : this._weekdaysMin;
  17345. }
  17346. function handleStrictParse$1(weekdayName, format, strict) {
  17347. var i,
  17348. ii,
  17349. mom,
  17350. llc = weekdayName.toLocaleLowerCase();
  17351. if (!this._weekdaysParse) {
  17352. this._weekdaysParse = [];
  17353. this._shortWeekdaysParse = [];
  17354. this._minWeekdaysParse = [];
  17355. for (i = 0; i < 7; ++i) {
  17356. mom = createUTC([2000, 1]).day(i);
  17357. this._minWeekdaysParse[i] = this.weekdaysMin(
  17358. mom,
  17359. ''
  17360. ).toLocaleLowerCase();
  17361. this._shortWeekdaysParse[i] = this.weekdaysShort(
  17362. mom,
  17363. ''
  17364. ).toLocaleLowerCase();
  17365. this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
  17366. }
  17367. }
  17368. if (strict) {
  17369. if (format === 'dddd') {
  17370. ii = indexOf.call(this._weekdaysParse, llc);
  17371. return ii !== -1 ? ii : null;
  17372. } else if (format === 'ddd') {
  17373. ii = indexOf.call(this._shortWeekdaysParse, llc);
  17374. return ii !== -1 ? ii : null;
  17375. } else {
  17376. ii = indexOf.call(this._minWeekdaysParse, llc);
  17377. return ii !== -1 ? ii : null;
  17378. }
  17379. } else {
  17380. if (format === 'dddd') {
  17381. ii = indexOf.call(this._weekdaysParse, llc);
  17382. if (ii !== -1) {
  17383. return ii;
  17384. }
  17385. ii = indexOf.call(this._shortWeekdaysParse, llc);
  17386. if (ii !== -1) {
  17387. return ii;
  17388. }
  17389. ii = indexOf.call(this._minWeekdaysParse, llc);
  17390. return ii !== -1 ? ii : null;
  17391. } else if (format === 'ddd') {
  17392. ii = indexOf.call(this._shortWeekdaysParse, llc);
  17393. if (ii !== -1) {
  17394. return ii;
  17395. }
  17396. ii = indexOf.call(this._weekdaysParse, llc);
  17397. if (ii !== -1) {
  17398. return ii;
  17399. }
  17400. ii = indexOf.call(this._minWeekdaysParse, llc);
  17401. return ii !== -1 ? ii : null;
  17402. } else {
  17403. ii = indexOf.call(this._minWeekdaysParse, llc);
  17404. if (ii !== -1) {
  17405. return ii;
  17406. }
  17407. ii = indexOf.call(this._weekdaysParse, llc);
  17408. if (ii !== -1) {
  17409. return ii;
  17410. }
  17411. ii = indexOf.call(this._shortWeekdaysParse, llc);
  17412. return ii !== -1 ? ii : null;
  17413. }
  17414. }
  17415. }
  17416. function localeWeekdaysParse(weekdayName, format, strict) {
  17417. var i, mom, regex;
  17418. if (this._weekdaysParseExact) {
  17419. return handleStrictParse$1.call(this, weekdayName, format, strict);
  17420. }
  17421. if (!this._weekdaysParse) {
  17422. this._weekdaysParse = [];
  17423. this._minWeekdaysParse = [];
  17424. this._shortWeekdaysParse = [];
  17425. this._fullWeekdaysParse = [];
  17426. }
  17427. for (i = 0; i < 7; i++) {
  17428. // make the regex if we don't have it already
  17429. mom = createUTC([2000, 1]).day(i);
  17430. if (strict && !this._fullWeekdaysParse[i]) {
  17431. this._fullWeekdaysParse[i] = new RegExp(
  17432. '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
  17433. 'i'
  17434. );
  17435. this._shortWeekdaysParse[i] = new RegExp(
  17436. '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
  17437. 'i'
  17438. );
  17439. this._minWeekdaysParse[i] = new RegExp(
  17440. '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
  17441. 'i'
  17442. );
  17443. }
  17444. if (!this._weekdaysParse[i]) {
  17445. regex =
  17446. '^' +
  17447. this.weekdays(mom, '') +
  17448. '|^' +
  17449. this.weekdaysShort(mom, '') +
  17450. '|^' +
  17451. this.weekdaysMin(mom, '');
  17452. this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
  17453. }
  17454. // test the regex
  17455. if (
  17456. strict &&
  17457. format === 'dddd' &&
  17458. this._fullWeekdaysParse[i].test(weekdayName)
  17459. ) {
  17460. return i;
  17461. } else if (
  17462. strict &&
  17463. format === 'ddd' &&
  17464. this._shortWeekdaysParse[i].test(weekdayName)
  17465. ) {
  17466. return i;
  17467. } else if (
  17468. strict &&
  17469. format === 'dd' &&
  17470. this._minWeekdaysParse[i].test(weekdayName)
  17471. ) {
  17472. return i;
  17473. } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
  17474. return i;
  17475. }
  17476. }
  17477. }
  17478. // MOMENTS
  17479. function getSetDayOfWeek(input) {
  17480. if (!this.isValid()) {
  17481. return input != null ? this : NaN;
  17482. }
  17483. var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
  17484. if (input != null) {
  17485. input = parseWeekday(input, this.localeData());
  17486. return this.add(input - day, 'd');
  17487. } else {
  17488. return day;
  17489. }
  17490. }
  17491. function getSetLocaleDayOfWeek(input) {
  17492. if (!this.isValid()) {
  17493. return input != null ? this : NaN;
  17494. }
  17495. var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
  17496. return input == null ? weekday : this.add(input - weekday, 'd');
  17497. }
  17498. function getSetISODayOfWeek(input) {
  17499. if (!this.isValid()) {
  17500. return input != null ? this : NaN;
  17501. }
  17502. // behaves the same as moment#day except
  17503. // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
  17504. // as a setter, sunday should belong to the previous week.
  17505. if (input != null) {
  17506. var weekday = parseIsoWeekday(input, this.localeData());
  17507. return this.day(this.day() % 7 ? weekday : weekday - 7);
  17508. } else {
  17509. return this.day() || 7;
  17510. }
  17511. }
  17512. function weekdaysRegex(isStrict) {
  17513. if (this._weekdaysParseExact) {
  17514. if (!hasOwnProp(this, '_weekdaysRegex')) {
  17515. computeWeekdaysParse.call(this);
  17516. }
  17517. if (isStrict) {
  17518. return this._weekdaysStrictRegex;
  17519. } else {
  17520. return this._weekdaysRegex;
  17521. }
  17522. } else {
  17523. if (!hasOwnProp(this, '_weekdaysRegex')) {
  17524. this._weekdaysRegex = defaultWeekdaysRegex;
  17525. }
  17526. return this._weekdaysStrictRegex && isStrict
  17527. ? this._weekdaysStrictRegex
  17528. : this._weekdaysRegex;
  17529. }
  17530. }
  17531. function weekdaysShortRegex(isStrict) {
  17532. if (this._weekdaysParseExact) {
  17533. if (!hasOwnProp(this, '_weekdaysRegex')) {
  17534. computeWeekdaysParse.call(this);
  17535. }
  17536. if (isStrict) {
  17537. return this._weekdaysShortStrictRegex;
  17538. } else {
  17539. return this._weekdaysShortRegex;
  17540. }
  17541. } else {
  17542. if (!hasOwnProp(this, '_weekdaysShortRegex')) {
  17543. this._weekdaysShortRegex = defaultWeekdaysShortRegex;
  17544. }
  17545. return this._weekdaysShortStrictRegex && isStrict
  17546. ? this._weekdaysShortStrictRegex
  17547. : this._weekdaysShortRegex;
  17548. }
  17549. }
  17550. function weekdaysMinRegex(isStrict) {
  17551. if (this._weekdaysParseExact) {
  17552. if (!hasOwnProp(this, '_weekdaysRegex')) {
  17553. computeWeekdaysParse.call(this);
  17554. }
  17555. if (isStrict) {
  17556. return this._weekdaysMinStrictRegex;
  17557. } else {
  17558. return this._weekdaysMinRegex;
  17559. }
  17560. } else {
  17561. if (!hasOwnProp(this, '_weekdaysMinRegex')) {
  17562. this._weekdaysMinRegex = defaultWeekdaysMinRegex;
  17563. }
  17564. return this._weekdaysMinStrictRegex && isStrict
  17565. ? this._weekdaysMinStrictRegex
  17566. : this._weekdaysMinRegex;
  17567. }
  17568. }
  17569. function computeWeekdaysParse() {
  17570. function cmpLenRev(a, b) {
  17571. return b.length - a.length;
  17572. }
  17573. var minPieces = [],
  17574. shortPieces = [],
  17575. longPieces = [],
  17576. mixedPieces = [],
  17577. i,
  17578. mom,
  17579. minp,
  17580. shortp,
  17581. longp;
  17582. for (i = 0; i < 7; i++) {
  17583. // make the regex if we don't have it already
  17584. mom = createUTC([2000, 1]).day(i);
  17585. minp = regexEscape(this.weekdaysMin(mom, ''));
  17586. shortp = regexEscape(this.weekdaysShort(mom, ''));
  17587. longp = regexEscape(this.weekdays(mom, ''));
  17588. minPieces.push(minp);
  17589. shortPieces.push(shortp);
  17590. longPieces.push(longp);
  17591. mixedPieces.push(minp);
  17592. mixedPieces.push(shortp);
  17593. mixedPieces.push(longp);
  17594. }
  17595. // Sorting makes sure if one weekday (or abbr) is a prefix of another it
  17596. // will match the longer piece.
  17597. minPieces.sort(cmpLenRev);
  17598. shortPieces.sort(cmpLenRev);
  17599. longPieces.sort(cmpLenRev);
  17600. mixedPieces.sort(cmpLenRev);
  17601. this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
  17602. this._weekdaysShortRegex = this._weekdaysRegex;
  17603. this._weekdaysMinRegex = this._weekdaysRegex;
  17604. this._weekdaysStrictRegex = new RegExp(
  17605. '^(' + longPieces.join('|') + ')',
  17606. 'i'
  17607. );
  17608. this._weekdaysShortStrictRegex = new RegExp(
  17609. '^(' + shortPieces.join('|') + ')',
  17610. 'i'
  17611. );
  17612. this._weekdaysMinStrictRegex = new RegExp(
  17613. '^(' + minPieces.join('|') + ')',
  17614. 'i'
  17615. );
  17616. }
  17617. // FORMATTING
  17618. function hFormat() {
  17619. return this.hours() % 12 || 12;
  17620. }
  17621. function kFormat() {
  17622. return this.hours() || 24;
  17623. }
  17624. addFormatToken('H', ['HH', 2], 0, 'hour');
  17625. addFormatToken('h', ['hh', 2], 0, hFormat);
  17626. addFormatToken('k', ['kk', 2], 0, kFormat);
  17627. addFormatToken('hmm', 0, 0, function () {
  17628. return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
  17629. });
  17630. addFormatToken('hmmss', 0, 0, function () {
  17631. return (
  17632. '' +
  17633. hFormat.apply(this) +
  17634. zeroFill(this.minutes(), 2) +
  17635. zeroFill(this.seconds(), 2)
  17636. );
  17637. });
  17638. addFormatToken('Hmm', 0, 0, function () {
  17639. return '' + this.hours() + zeroFill(this.minutes(), 2);
  17640. });
  17641. addFormatToken('Hmmss', 0, 0, function () {
  17642. return (
  17643. '' +
  17644. this.hours() +
  17645. zeroFill(this.minutes(), 2) +
  17646. zeroFill(this.seconds(), 2)
  17647. );
  17648. });
  17649. function meridiem(token, lowercase) {
  17650. addFormatToken(token, 0, 0, function () {
  17651. return this.localeData().meridiem(
  17652. this.hours(),
  17653. this.minutes(),
  17654. lowercase
  17655. );
  17656. });
  17657. }
  17658. meridiem('a', true);
  17659. meridiem('A', false);
  17660. // ALIASES
  17661. addUnitAlias('hour', 'h');
  17662. // PRIORITY
  17663. addUnitPriority('hour', 13);
  17664. // PARSING
  17665. function matchMeridiem(isStrict, locale) {
  17666. return locale._meridiemParse;
  17667. }
  17668. addRegexToken('a', matchMeridiem);
  17669. addRegexToken('A', matchMeridiem);
  17670. addRegexToken('H', match1to2);
  17671. addRegexToken('h', match1to2);
  17672. addRegexToken('k', match1to2);
  17673. addRegexToken('HH', match1to2, match2);
  17674. addRegexToken('hh', match1to2, match2);
  17675. addRegexToken('kk', match1to2, match2);
  17676. addRegexToken('hmm', match3to4);
  17677. addRegexToken('hmmss', match5to6);
  17678. addRegexToken('Hmm', match3to4);
  17679. addRegexToken('Hmmss', match5to6);
  17680. addParseToken(['H', 'HH'], HOUR);
  17681. addParseToken(['k', 'kk'], function (input, array, config) {
  17682. var kInput = toInt(input);
  17683. array[HOUR] = kInput === 24 ? 0 : kInput;
  17684. });
  17685. addParseToken(['a', 'A'], function (input, array, config) {
  17686. config._isPm = config._locale.isPM(input);
  17687. config._meridiem = input;
  17688. });
  17689. addParseToken(['h', 'hh'], function (input, array, config) {
  17690. array[HOUR] = toInt(input);
  17691. getParsingFlags(config).bigHour = true;
  17692. });
  17693. addParseToken('hmm', function (input, array, config) {
  17694. var pos = input.length - 2;
  17695. array[HOUR] = toInt(input.substr(0, pos));
  17696. array[MINUTE] = toInt(input.substr(pos));
  17697. getParsingFlags(config).bigHour = true;
  17698. });
  17699. addParseToken('hmmss', function (input, array, config) {
  17700. var pos1 = input.length - 4,
  17701. pos2 = input.length - 2;
  17702. array[HOUR] = toInt(input.substr(0, pos1));
  17703. array[MINUTE] = toInt(input.substr(pos1, 2));
  17704. array[SECOND] = toInt(input.substr(pos2));
  17705. getParsingFlags(config).bigHour = true;
  17706. });
  17707. addParseToken('Hmm', function (input, array, config) {
  17708. var pos = input.length - 2;
  17709. array[HOUR] = toInt(input.substr(0, pos));
  17710. array[MINUTE] = toInt(input.substr(pos));
  17711. });
  17712. addParseToken('Hmmss', function (input, array, config) {
  17713. var pos1 = input.length - 4,
  17714. pos2 = input.length - 2;
  17715. array[HOUR] = toInt(input.substr(0, pos1));
  17716. array[MINUTE] = toInt(input.substr(pos1, 2));
  17717. array[SECOND] = toInt(input.substr(pos2));
  17718. });
  17719. // LOCALES
  17720. function localeIsPM(input) {
  17721. // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
  17722. // Using charAt should be more compatible.
  17723. return (input + '').toLowerCase().charAt(0) === 'p';
  17724. }
  17725. var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
  17726. // Setting the hour should keep the time, because the user explicitly
  17727. // specified which hour they want. So trying to maintain the same hour (in
  17728. // a new timezone) makes sense. Adding/subtracting hours does not follow
  17729. // this rule.
  17730. getSetHour = makeGetSet('Hours', true);
  17731. function localeMeridiem(hours, minutes, isLower) {
  17732. if (hours > 11) {
  17733. return isLower ? 'pm' : 'PM';
  17734. } else {
  17735. return isLower ? 'am' : 'AM';
  17736. }
  17737. }
  17738. var baseConfig = {
  17739. calendar: defaultCalendar,
  17740. longDateFormat: defaultLongDateFormat,
  17741. invalidDate: defaultInvalidDate,
  17742. ordinal: defaultOrdinal,
  17743. dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
  17744. relativeTime: defaultRelativeTime,
  17745. months: defaultLocaleMonths,
  17746. monthsShort: defaultLocaleMonthsShort,
  17747. week: defaultLocaleWeek,
  17748. weekdays: defaultLocaleWeekdays,
  17749. weekdaysMin: defaultLocaleWeekdaysMin,
  17750. weekdaysShort: defaultLocaleWeekdaysShort,
  17751. meridiemParse: defaultLocaleMeridiemParse,
  17752. };
  17753. // internal storage for locale config files
  17754. var locales = {},
  17755. localeFamilies = {},
  17756. globalLocale;
  17757. function commonPrefix(arr1, arr2) {
  17758. var i,
  17759. minl = Math.min(arr1.length, arr2.length);
  17760. for (i = 0; i < minl; i += 1) {
  17761. if (arr1[i] !== arr2[i]) {
  17762. return i;
  17763. }
  17764. }
  17765. return minl;
  17766. }
  17767. function normalizeLocale(key) {
  17768. return key ? key.toLowerCase().replace('_', '-') : key;
  17769. }
  17770. // pick the locale from the array
  17771. // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
  17772. // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
  17773. function chooseLocale(names) {
  17774. var i = 0,
  17775. j,
  17776. next,
  17777. locale,
  17778. split;
  17779. while (i < names.length) {
  17780. split = normalizeLocale(names[i]).split('-');
  17781. j = split.length;
  17782. next = normalizeLocale(names[i + 1]);
  17783. next = next ? next.split('-') : null;
  17784. while (j > 0) {
  17785. locale = loadLocale(split.slice(0, j).join('-'));
  17786. if (locale) {
  17787. return locale;
  17788. }
  17789. if (
  17790. next &&
  17791. next.length >= j &&
  17792. commonPrefix(split, next) >= j - 1
  17793. ) {
  17794. //the next array item is better than a shallower substring of this one
  17795. break;
  17796. }
  17797. j--;
  17798. }
  17799. i++;
  17800. }
  17801. return globalLocale;
  17802. }
  17803. function loadLocale(name) {
  17804. var oldLocale = null,
  17805. aliasedRequire;
  17806. // TODO: Find a better way to register and load all the locales in Node
  17807. if (
  17808. locales[name] === undefined &&
  17809. "object" !== 'undefined' &&
  17810. module &&
  17811. module.exports
  17812. ) {
  17813. try {
  17814. oldLocale = globalLocale._abbr;
  17815. aliasedRequire = undefined;
  17816. __webpack_require__("./node_modules/moment/dist/locale sync recursive ^\\.\\/.*$")("./" + name);
  17817. getSetGlobalLocale(oldLocale);
  17818. } catch (e) {
  17819. // mark as not found to avoid repeating expensive file require call causing high CPU
  17820. // when trying to find en-US, en_US, en-us for every format call
  17821. locales[name] = null; // null means not found
  17822. }
  17823. }
  17824. return locales[name];
  17825. }
  17826. // This function will load locale and then set the global locale. If
  17827. // no arguments are passed in, it will simply return the current global
  17828. // locale key.
  17829. function getSetGlobalLocale(key, values) {
  17830. var data;
  17831. if (key) {
  17832. if (isUndefined(values)) {
  17833. data = getLocale(key);
  17834. } else {
  17835. data = defineLocale(key, values);
  17836. }
  17837. if (data) {
  17838. // moment.duration._locale = moment._locale = data;
  17839. globalLocale = data;
  17840. } else {
  17841. if (typeof console !== 'undefined' && console.warn) {
  17842. //warn user if arguments are passed but the locale could not be set
  17843. console.warn(
  17844. 'Locale ' + key + ' not found. Did you forget to load it?'
  17845. );
  17846. }
  17847. }
  17848. }
  17849. return globalLocale._abbr;
  17850. }
  17851. function defineLocale(name, config) {
  17852. if (config !== null) {
  17853. var locale,
  17854. parentConfig = baseConfig;
  17855. config.abbr = name;
  17856. if (locales[name] != null) {
  17857. deprecateSimple(
  17858. 'defineLocaleOverride',
  17859. 'use moment.updateLocale(localeName, config) to change ' +
  17860. 'an existing locale. moment.defineLocale(localeName, ' +
  17861. 'config) should only be used for creating a new locale ' +
  17862. 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
  17863. );
  17864. parentConfig = locales[name]._config;
  17865. } else if (config.parentLocale != null) {
  17866. if (locales[config.parentLocale] != null) {
  17867. parentConfig = locales[config.parentLocale]._config;
  17868. } else {
  17869. locale = loadLocale(config.parentLocale);
  17870. if (locale != null) {
  17871. parentConfig = locale._config;
  17872. } else {
  17873. if (!localeFamilies[config.parentLocale]) {
  17874. localeFamilies[config.parentLocale] = [];
  17875. }
  17876. localeFamilies[config.parentLocale].push({
  17877. name: name,
  17878. config: config,
  17879. });
  17880. return null;
  17881. }
  17882. }
  17883. }
  17884. locales[name] = new Locale(mergeConfigs(parentConfig, config));
  17885. if (localeFamilies[name]) {
  17886. localeFamilies[name].forEach(function (x) {
  17887. defineLocale(x.name, x.config);
  17888. });
  17889. }
  17890. // backwards compat for now: also set the locale
  17891. // make sure we set the locale AFTER all child locales have been
  17892. // created, so we won't end up with the child locale set.
  17893. getSetGlobalLocale(name);
  17894. return locales[name];
  17895. } else {
  17896. // useful for testing
  17897. delete locales[name];
  17898. return null;
  17899. }
  17900. }
  17901. function updateLocale(name, config) {
  17902. if (config != null) {
  17903. var locale,
  17904. tmpLocale,
  17905. parentConfig = baseConfig;
  17906. if (locales[name] != null && locales[name].parentLocale != null) {
  17907. // Update existing child locale in-place to avoid memory-leaks
  17908. locales[name].set(mergeConfigs(locales[name]._config, config));
  17909. } else {
  17910. // MERGE
  17911. tmpLocale = loadLocale(name);
  17912. if (tmpLocale != null) {
  17913. parentConfig = tmpLocale._config;
  17914. }
  17915. config = mergeConfigs(parentConfig, config);
  17916. if (tmpLocale == null) {
  17917. // updateLocale is called for creating a new locale
  17918. // Set abbr so it will have a name (getters return
  17919. // undefined otherwise).
  17920. config.abbr = name;
  17921. }
  17922. locale = new Locale(config);
  17923. locale.parentLocale = locales[name];
  17924. locales[name] = locale;
  17925. }
  17926. // backwards compat for now: also set the locale
  17927. getSetGlobalLocale(name);
  17928. } else {
  17929. // pass null for config to unupdate, useful for tests
  17930. if (locales[name] != null) {
  17931. if (locales[name].parentLocale != null) {
  17932. locales[name] = locales[name].parentLocale;
  17933. if (name === getSetGlobalLocale()) {
  17934. getSetGlobalLocale(name);
  17935. }
  17936. } else if (locales[name] != null) {
  17937. delete locales[name];
  17938. }
  17939. }
  17940. }
  17941. return locales[name];
  17942. }
  17943. // returns locale data
  17944. function getLocale(key) {
  17945. var locale;
  17946. if (key && key._locale && key._locale._abbr) {
  17947. key = key._locale._abbr;
  17948. }
  17949. if (!key) {
  17950. return globalLocale;
  17951. }
  17952. if (!isArray(key)) {
  17953. //short-circuit everything else
  17954. locale = loadLocale(key);
  17955. if (locale) {
  17956. return locale;
  17957. }
  17958. key = [key];
  17959. }
  17960. return chooseLocale(key);
  17961. }
  17962. function listLocales() {
  17963. return keys(locales);
  17964. }
  17965. function checkOverflow(m) {
  17966. var overflow,
  17967. a = m._a;
  17968. if (a && getParsingFlags(m).overflow === -2) {
  17969. overflow =
  17970. a[MONTH] < 0 || a[MONTH] > 11
  17971. ? MONTH
  17972. : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
  17973. ? DATE
  17974. : a[HOUR] < 0 ||
  17975. a[HOUR] > 24 ||
  17976. (a[HOUR] === 24 &&
  17977. (a[MINUTE] !== 0 ||
  17978. a[SECOND] !== 0 ||
  17979. a[MILLISECOND] !== 0))
  17980. ? HOUR
  17981. : a[MINUTE] < 0 || a[MINUTE] > 59
  17982. ? MINUTE
  17983. : a[SECOND] < 0 || a[SECOND] > 59
  17984. ? SECOND
  17985. : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
  17986. ? MILLISECOND
  17987. : -1;
  17988. if (
  17989. getParsingFlags(m)._overflowDayOfYear &&
  17990. (overflow < YEAR || overflow > DATE)
  17991. ) {
  17992. overflow = DATE;
  17993. }
  17994. if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
  17995. overflow = WEEK;
  17996. }
  17997. if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
  17998. overflow = WEEKDAY;
  17999. }
  18000. getParsingFlags(m).overflow = overflow;
  18001. }
  18002. return m;
  18003. }
  18004. // iso 8601 regex
  18005. // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
  18006. var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
  18007. basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
  18008. tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
  18009. isoDates = [
  18010. ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
  18011. ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
  18012. ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
  18013. ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
  18014. ['YYYY-DDD', /\d{4}-\d{3}/],
  18015. ['YYYY-MM', /\d{4}-\d\d/, false],
  18016. ['YYYYYYMMDD', /[+-]\d{10}/],
  18017. ['YYYYMMDD', /\d{8}/],
  18018. ['GGGG[W]WWE', /\d{4}W\d{3}/],
  18019. ['GGGG[W]WW', /\d{4}W\d{2}/, false],
  18020. ['YYYYDDD', /\d{7}/],
  18021. ['YYYYMM', /\d{6}/, false],
  18022. ['YYYY', /\d{4}/, false],
  18023. ],
  18024. // iso time formats and regexes
  18025. isoTimes = [
  18026. ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
  18027. ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
  18028. ['HH:mm:ss', /\d\d:\d\d:\d\d/],
  18029. ['HH:mm', /\d\d:\d\d/],
  18030. ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
  18031. ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
  18032. ['HHmmss', /\d\d\d\d\d\d/],
  18033. ['HHmm', /\d\d\d\d/],
  18034. ['HH', /\d\d/],
  18035. ],
  18036. aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
  18037. // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
  18038. rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
  18039. obsOffsets = {
  18040. UT: 0,
  18041. GMT: 0,
  18042. EDT: -4 * 60,
  18043. EST: -5 * 60,
  18044. CDT: -5 * 60,
  18045. CST: -6 * 60,
  18046. MDT: -6 * 60,
  18047. MST: -7 * 60,
  18048. PDT: -7 * 60,
  18049. PST: -8 * 60,
  18050. };
  18051. // date from iso format
  18052. function configFromISO(config) {
  18053. var i,
  18054. l,
  18055. string = config._i,
  18056. match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
  18057. allowTime,
  18058. dateFormat,
  18059. timeFormat,
  18060. tzFormat;
  18061. if (match) {
  18062. getParsingFlags(config).iso = true;
  18063. for (i = 0, l = isoDates.length; i < l; i++) {
  18064. if (isoDates[i][1].exec(match[1])) {
  18065. dateFormat = isoDates[i][0];
  18066. allowTime = isoDates[i][2] !== false;
  18067. break;
  18068. }
  18069. }
  18070. if (dateFormat == null) {
  18071. config._isValid = false;
  18072. return;
  18073. }
  18074. if (match[3]) {
  18075. for (i = 0, l = isoTimes.length; i < l; i++) {
  18076. if (isoTimes[i][1].exec(match[3])) {
  18077. // match[2] should be 'T' or space
  18078. timeFormat = (match[2] || ' ') + isoTimes[i][0];
  18079. break;
  18080. }
  18081. }
  18082. if (timeFormat == null) {
  18083. config._isValid = false;
  18084. return;
  18085. }
  18086. }
  18087. if (!allowTime && timeFormat != null) {
  18088. config._isValid = false;
  18089. return;
  18090. }
  18091. if (match[4]) {
  18092. if (tzRegex.exec(match[4])) {
  18093. tzFormat = 'Z';
  18094. } else {
  18095. config._isValid = false;
  18096. return;
  18097. }
  18098. }
  18099. config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
  18100. configFromStringAndFormat(config);
  18101. } else {
  18102. config._isValid = false;
  18103. }
  18104. }
  18105. function extractFromRFC2822Strings(
  18106. yearStr,
  18107. monthStr,
  18108. dayStr,
  18109. hourStr,
  18110. minuteStr,
  18111. secondStr
  18112. ) {
  18113. var result = [
  18114. untruncateYear(yearStr),
  18115. defaultLocaleMonthsShort.indexOf(monthStr),
  18116. parseInt(dayStr, 10),
  18117. parseInt(hourStr, 10),
  18118. parseInt(minuteStr, 10),
  18119. ];
  18120. if (secondStr) {
  18121. result.push(parseInt(secondStr, 10));
  18122. }
  18123. return result;
  18124. }
  18125. function untruncateYear(yearStr) {
  18126. var year = parseInt(yearStr, 10);
  18127. if (year <= 49) {
  18128. return 2000 + year;
  18129. } else if (year <= 999) {
  18130. return 1900 + year;
  18131. }
  18132. return year;
  18133. }
  18134. function preprocessRFC2822(s) {
  18135. // Remove comments and folding whitespace and replace multiple-spaces with a single space
  18136. return s
  18137. .replace(/\([^)]*\)|[\n\t]/g, ' ')
  18138. .replace(/(\s\s+)/g, ' ')
  18139. .replace(/^\s\s*/, '')
  18140. .replace(/\s\s*$/, '');
  18141. }
  18142. function checkWeekday(weekdayStr, parsedInput, config) {
  18143. if (weekdayStr) {
  18144. // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
  18145. var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
  18146. weekdayActual = new Date(
  18147. parsedInput[0],
  18148. parsedInput[1],
  18149. parsedInput[2]
  18150. ).getDay();
  18151. if (weekdayProvided !== weekdayActual) {
  18152. getParsingFlags(config).weekdayMismatch = true;
  18153. config._isValid = false;
  18154. return false;
  18155. }
  18156. }
  18157. return true;
  18158. }
  18159. function calculateOffset(obsOffset, militaryOffset, numOffset) {
  18160. if (obsOffset) {
  18161. return obsOffsets[obsOffset];
  18162. } else if (militaryOffset) {
  18163. // the only allowed military tz is Z
  18164. return 0;
  18165. } else {
  18166. var hm = parseInt(numOffset, 10),
  18167. m = hm % 100,
  18168. h = (hm - m) / 100;
  18169. return h * 60 + m;
  18170. }
  18171. }
  18172. // date and time from ref 2822 format
  18173. function configFromRFC2822(config) {
  18174. var match = rfc2822.exec(preprocessRFC2822(config._i)),
  18175. parsedArray;
  18176. if (match) {
  18177. parsedArray = extractFromRFC2822Strings(
  18178. match[4],
  18179. match[3],
  18180. match[2],
  18181. match[5],
  18182. match[6],
  18183. match[7]
  18184. );
  18185. if (!checkWeekday(match[1], parsedArray, config)) {
  18186. return;
  18187. }
  18188. config._a = parsedArray;
  18189. config._tzm = calculateOffset(match[8], match[9], match[10]);
  18190. config._d = createUTCDate.apply(null, config._a);
  18191. config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
  18192. getParsingFlags(config).rfc2822 = true;
  18193. } else {
  18194. config._isValid = false;
  18195. }
  18196. }
  18197. // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
  18198. function configFromString(config) {
  18199. var matched = aspNetJsonRegex.exec(config._i);
  18200. if (matched !== null) {
  18201. config._d = new Date(+matched[1]);
  18202. return;
  18203. }
  18204. configFromISO(config);
  18205. if (config._isValid === false) {
  18206. delete config._isValid;
  18207. } else {
  18208. return;
  18209. }
  18210. configFromRFC2822(config);
  18211. if (config._isValid === false) {
  18212. delete config._isValid;
  18213. } else {
  18214. return;
  18215. }
  18216. if (config._strict) {
  18217. config._isValid = false;
  18218. } else {
  18219. // Final attempt, use Input Fallback
  18220. hooks.createFromInputFallback(config);
  18221. }
  18222. }
  18223. hooks.createFromInputFallback = deprecate(
  18224. 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
  18225. 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
  18226. 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
  18227. function (config) {
  18228. config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
  18229. }
  18230. );
  18231. // Pick the first defined of two or three arguments.
  18232. function defaults(a, b, c) {
  18233. if (a != null) {
  18234. return a;
  18235. }
  18236. if (b != null) {
  18237. return b;
  18238. }
  18239. return c;
  18240. }
  18241. function currentDateArray(config) {
  18242. // hooks is actually the exported moment object
  18243. var nowValue = new Date(hooks.now());
  18244. if (config._useUTC) {
  18245. return [
  18246. nowValue.getUTCFullYear(),
  18247. nowValue.getUTCMonth(),
  18248. nowValue.getUTCDate(),
  18249. ];
  18250. }
  18251. return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
  18252. }
  18253. // convert an array to a date.
  18254. // the array should mirror the parameters below
  18255. // note: all values past the year are optional and will default to the lowest possible value.
  18256. // [year, month, day , hour, minute, second, millisecond]
  18257. function configFromArray(config) {
  18258. var i,
  18259. date,
  18260. input = [],
  18261. currentDate,
  18262. expectedWeekday,
  18263. yearToUse;
  18264. if (config._d) {
  18265. return;
  18266. }
  18267. currentDate = currentDateArray(config);
  18268. //compute day of the year from weeks and weekdays
  18269. if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
  18270. dayOfYearFromWeekInfo(config);
  18271. }
  18272. //if the day of the year is set, figure out what it is
  18273. if (config._dayOfYear != null) {
  18274. yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
  18275. if (
  18276. config._dayOfYear > daysInYear(yearToUse) ||
  18277. config._dayOfYear === 0
  18278. ) {
  18279. getParsingFlags(config)._overflowDayOfYear = true;
  18280. }
  18281. date = createUTCDate(yearToUse, 0, config._dayOfYear);
  18282. config._a[MONTH] = date.getUTCMonth();
  18283. config._a[DATE] = date.getUTCDate();
  18284. }
  18285. // Default to current date.
  18286. // * if no year, month, day of month are given, default to today
  18287. // * if day of month is given, default month and year
  18288. // * if month is given, default only year
  18289. // * if year is given, don't default anything
  18290. for (i = 0; i < 3 && config._a[i] == null; ++i) {
  18291. config._a[i] = input[i] = currentDate[i];
  18292. }
  18293. // Zero out whatever was not defaulted, including time
  18294. for (; i < 7; i++) {
  18295. config._a[i] = input[i] =
  18296. config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
  18297. }
  18298. // Check for 24:00:00.000
  18299. if (
  18300. config._a[HOUR] === 24 &&
  18301. config._a[MINUTE] === 0 &&
  18302. config._a[SECOND] === 0 &&
  18303. config._a[MILLISECOND] === 0
  18304. ) {
  18305. config._nextDay = true;
  18306. config._a[HOUR] = 0;
  18307. }
  18308. config._d = (config._useUTC ? createUTCDate : createDate).apply(
  18309. null,
  18310. input
  18311. );
  18312. expectedWeekday = config._useUTC
  18313. ? config._d.getUTCDay()
  18314. : config._d.getDay();
  18315. // Apply timezone offset from input. The actual utcOffset can be changed
  18316. // with parseZone.
  18317. if (config._tzm != null) {
  18318. config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
  18319. }
  18320. if (config._nextDay) {
  18321. config._a[HOUR] = 24;
  18322. }
  18323. // check for mismatching day of week
  18324. if (
  18325. config._w &&
  18326. typeof config._w.d !== 'undefined' &&
  18327. config._w.d !== expectedWeekday
  18328. ) {
  18329. getParsingFlags(config).weekdayMismatch = true;
  18330. }
  18331. }
  18332. function dayOfYearFromWeekInfo(config) {
  18333. var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
  18334. w = config._w;
  18335. if (w.GG != null || w.W != null || w.E != null) {
  18336. dow = 1;
  18337. doy = 4;
  18338. // TODO: We need to take the current isoWeekYear, but that depends on
  18339. // how we interpret now (local, utc, fixed offset). So create
  18340. // a now version of current config (take local/utc/offset flags, and
  18341. // create now).
  18342. weekYear = defaults(
  18343. w.GG,
  18344. config._a[YEAR],
  18345. weekOfYear(createLocal(), 1, 4).year
  18346. );
  18347. week = defaults(w.W, 1);
  18348. weekday = defaults(w.E, 1);
  18349. if (weekday < 1 || weekday > 7) {
  18350. weekdayOverflow = true;
  18351. }
  18352. } else {
  18353. dow = config._locale._week.dow;
  18354. doy = config._locale._week.doy;
  18355. curWeek = weekOfYear(createLocal(), dow, doy);
  18356. weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
  18357. // Default to current week.
  18358. week = defaults(w.w, curWeek.week);
  18359. if (w.d != null) {
  18360. // weekday -- low day numbers are considered next week
  18361. weekday = w.d;
  18362. if (weekday < 0 || weekday > 6) {
  18363. weekdayOverflow = true;
  18364. }
  18365. } else if (w.e != null) {
  18366. // local weekday -- counting starts from beginning of week
  18367. weekday = w.e + dow;
  18368. if (w.e < 0 || w.e > 6) {
  18369. weekdayOverflow = true;
  18370. }
  18371. } else {
  18372. // default to beginning of week
  18373. weekday = dow;
  18374. }
  18375. }
  18376. if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
  18377. getParsingFlags(config)._overflowWeeks = true;
  18378. } else if (weekdayOverflow != null) {
  18379. getParsingFlags(config)._overflowWeekday = true;
  18380. } else {
  18381. temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
  18382. config._a[YEAR] = temp.year;
  18383. config._dayOfYear = temp.dayOfYear;
  18384. }
  18385. }
  18386. // constant that refers to the ISO standard
  18387. hooks.ISO_8601 = function () {};
  18388. // constant that refers to the RFC 2822 form
  18389. hooks.RFC_2822 = function () {};
  18390. // date from string and format string
  18391. function configFromStringAndFormat(config) {
  18392. // TODO: Move this to another part of the creation flow to prevent circular deps
  18393. if (config._f === hooks.ISO_8601) {
  18394. configFromISO(config);
  18395. return;
  18396. }
  18397. if (config._f === hooks.RFC_2822) {
  18398. configFromRFC2822(config);
  18399. return;
  18400. }
  18401. config._a = [];
  18402. getParsingFlags(config).empty = true;
  18403. // This array is used to make a Date, either with `new Date` or `Date.UTC`
  18404. var string = '' + config._i,
  18405. i,
  18406. parsedInput,
  18407. tokens,
  18408. token,
  18409. skipped,
  18410. stringLength = string.length,
  18411. totalParsedInputLength = 0,
  18412. era;
  18413. tokens =
  18414. expandFormat(config._f, config._locale).match(formattingTokens) || [];
  18415. for (i = 0; i < tokens.length; i++) {
  18416. token = tokens[i];
  18417. parsedInput = (string.match(getParseRegexForToken(token, config)) ||
  18418. [])[0];
  18419. if (parsedInput) {
  18420. skipped = string.substr(0, string.indexOf(parsedInput));
  18421. if (skipped.length > 0) {
  18422. getParsingFlags(config).unusedInput.push(skipped);
  18423. }
  18424. string = string.slice(
  18425. string.indexOf(parsedInput) + parsedInput.length
  18426. );
  18427. totalParsedInputLength += parsedInput.length;
  18428. }
  18429. // don't parse if it's not a known token
  18430. if (formatTokenFunctions[token]) {
  18431. if (parsedInput) {
  18432. getParsingFlags(config).empty = false;
  18433. } else {
  18434. getParsingFlags(config).unusedTokens.push(token);
  18435. }
  18436. addTimeToArrayFromToken(token, parsedInput, config);
  18437. } else if (config._strict && !parsedInput) {
  18438. getParsingFlags(config).unusedTokens.push(token);
  18439. }
  18440. }
  18441. // add remaining unparsed input length to the string
  18442. getParsingFlags(config).charsLeftOver =
  18443. stringLength - totalParsedInputLength;
  18444. if (string.length > 0) {
  18445. getParsingFlags(config).unusedInput.push(string);
  18446. }
  18447. // clear _12h flag if hour is <= 12
  18448. if (
  18449. config._a[HOUR] <= 12 &&
  18450. getParsingFlags(config).bigHour === true &&
  18451. config._a[HOUR] > 0
  18452. ) {
  18453. getParsingFlags(config).bigHour = undefined;
  18454. }
  18455. getParsingFlags(config).parsedDateParts = config._a.slice(0);
  18456. getParsingFlags(config).meridiem = config._meridiem;
  18457. // handle meridiem
  18458. config._a[HOUR] = meridiemFixWrap(
  18459. config._locale,
  18460. config._a[HOUR],
  18461. config._meridiem
  18462. );
  18463. // handle era
  18464. era = getParsingFlags(config).era;
  18465. if (era !== null) {
  18466. config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
  18467. }
  18468. configFromArray(config);
  18469. checkOverflow(config);
  18470. }
  18471. function meridiemFixWrap(locale, hour, meridiem) {
  18472. var isPm;
  18473. if (meridiem == null) {
  18474. // nothing to do
  18475. return hour;
  18476. }
  18477. if (locale.meridiemHour != null) {
  18478. return locale.meridiemHour(hour, meridiem);
  18479. } else if (locale.isPM != null) {
  18480. // Fallback
  18481. isPm = locale.isPM(meridiem);
  18482. if (isPm && hour < 12) {
  18483. hour += 12;
  18484. }
  18485. if (!isPm && hour === 12) {
  18486. hour = 0;
  18487. }
  18488. return hour;
  18489. } else {
  18490. // this is not supposed to happen
  18491. return hour;
  18492. }
  18493. }
  18494. // date from string and array of format strings
  18495. function configFromStringAndArray(config) {
  18496. var tempConfig,
  18497. bestMoment,
  18498. scoreToBeat,
  18499. i,
  18500. currentScore,
  18501. validFormatFound,
  18502. bestFormatIsValid = false;
  18503. if (config._f.length === 0) {
  18504. getParsingFlags(config).invalidFormat = true;
  18505. config._d = new Date(NaN);
  18506. return;
  18507. }
  18508. for (i = 0; i < config._f.length; i++) {
  18509. currentScore = 0;
  18510. validFormatFound = false;
  18511. tempConfig = copyConfig({}, config);
  18512. if (config._useUTC != null) {
  18513. tempConfig._useUTC = config._useUTC;
  18514. }
  18515. tempConfig._f = config._f[i];
  18516. configFromStringAndFormat(tempConfig);
  18517. if (isValid(tempConfig)) {
  18518. validFormatFound = true;
  18519. }
  18520. // if there is any input that was not parsed add a penalty for that format
  18521. currentScore += getParsingFlags(tempConfig).charsLeftOver;
  18522. //or tokens
  18523. currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
  18524. getParsingFlags(tempConfig).score = currentScore;
  18525. if (!bestFormatIsValid) {
  18526. if (
  18527. scoreToBeat == null ||
  18528. currentScore < scoreToBeat ||
  18529. validFormatFound
  18530. ) {
  18531. scoreToBeat = currentScore;
  18532. bestMoment = tempConfig;
  18533. if (validFormatFound) {
  18534. bestFormatIsValid = true;
  18535. }
  18536. }
  18537. } else {
  18538. if (currentScore < scoreToBeat) {
  18539. scoreToBeat = currentScore;
  18540. bestMoment = tempConfig;
  18541. }
  18542. }
  18543. }
  18544. extend(config, bestMoment || tempConfig);
  18545. }
  18546. function configFromObject(config) {
  18547. if (config._d) {
  18548. return;
  18549. }
  18550. var i = normalizeObjectUnits(config._i),
  18551. dayOrDate = i.day === undefined ? i.date : i.day;
  18552. config._a = map(
  18553. [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
  18554. function (obj) {
  18555. return obj && parseInt(obj, 10);
  18556. }
  18557. );
  18558. configFromArray(config);
  18559. }
  18560. function createFromConfig(config) {
  18561. var res = new Moment(checkOverflow(prepareConfig(config)));
  18562. if (res._nextDay) {
  18563. // Adding is smart enough around DST
  18564. res.add(1, 'd');
  18565. res._nextDay = undefined;
  18566. }
  18567. return res;
  18568. }
  18569. function prepareConfig(config) {
  18570. var input = config._i,
  18571. format = config._f;
  18572. config._locale = config._locale || getLocale(config._l);
  18573. if (input === null || (format === undefined && input === '')) {
  18574. return createInvalid({ nullInput: true });
  18575. }
  18576. if (typeof input === 'string') {
  18577. config._i = input = config._locale.preparse(input);
  18578. }
  18579. if (isMoment(input)) {
  18580. return new Moment(checkOverflow(input));
  18581. } else if (isDate(input)) {
  18582. config._d = input;
  18583. } else if (isArray(format)) {
  18584. configFromStringAndArray(config);
  18585. } else if (format) {
  18586. configFromStringAndFormat(config);
  18587. } else {
  18588. configFromInput(config);
  18589. }
  18590. if (!isValid(config)) {
  18591. config._d = null;
  18592. }
  18593. return config;
  18594. }
  18595. function configFromInput(config) {
  18596. var input = config._i;
  18597. if (isUndefined(input)) {
  18598. config._d = new Date(hooks.now());
  18599. } else if (isDate(input)) {
  18600. config._d = new Date(input.valueOf());
  18601. } else if (typeof input === 'string') {
  18602. configFromString(config);
  18603. } else if (isArray(input)) {
  18604. config._a = map(input.slice(0), function (obj) {
  18605. return parseInt(obj, 10);
  18606. });
  18607. configFromArray(config);
  18608. } else if (isObject(input)) {
  18609. configFromObject(config);
  18610. } else if (isNumber(input)) {
  18611. // from milliseconds
  18612. config._d = new Date(input);
  18613. } else {
  18614. hooks.createFromInputFallback(config);
  18615. }
  18616. }
  18617. function createLocalOrUTC(input, format, locale, strict, isUTC) {
  18618. var c = {};
  18619. if (format === true || format === false) {
  18620. strict = format;
  18621. format = undefined;
  18622. }
  18623. if (locale === true || locale === false) {
  18624. strict = locale;
  18625. locale = undefined;
  18626. }
  18627. if (
  18628. (isObject(input) && isObjectEmpty(input)) ||
  18629. (isArray(input) && input.length === 0)
  18630. ) {
  18631. input = undefined;
  18632. }
  18633. // object construction must be done this way.
  18634. // https://github.com/moment/moment/issues/1423
  18635. c._isAMomentObject = true;
  18636. c._useUTC = c._isUTC = isUTC;
  18637. c._l = locale;
  18638. c._i = input;
  18639. c._f = format;
  18640. c._strict = strict;
  18641. return createFromConfig(c);
  18642. }
  18643. function createLocal(input, format, locale, strict) {
  18644. return createLocalOrUTC(input, format, locale, strict, false);
  18645. }
  18646. var prototypeMin = deprecate(
  18647. 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
  18648. function () {
  18649. var other = createLocal.apply(null, arguments);
  18650. if (this.isValid() && other.isValid()) {
  18651. return other < this ? this : other;
  18652. } else {
  18653. return createInvalid();
  18654. }
  18655. }
  18656. ),
  18657. prototypeMax = deprecate(
  18658. 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
  18659. function () {
  18660. var other = createLocal.apply(null, arguments);
  18661. if (this.isValid() && other.isValid()) {
  18662. return other > this ? this : other;
  18663. } else {
  18664. return createInvalid();
  18665. }
  18666. }
  18667. );
  18668. // Pick a moment m from moments so that m[fn](other) is true for all
  18669. // other. This relies on the function fn to be transitive.
  18670. //
  18671. // moments should either be an array of moment objects or an array, whose
  18672. // first element is an array of moment objects.
  18673. function pickBy(fn, moments) {
  18674. var res, i;
  18675. if (moments.length === 1 && isArray(moments[0])) {
  18676. moments = moments[0];
  18677. }
  18678. if (!moments.length) {
  18679. return createLocal();
  18680. }
  18681. res = moments[0];
  18682. for (i = 1; i < moments.length; ++i) {
  18683. if (!moments[i].isValid() || moments[i][fn](res)) {
  18684. res = moments[i];
  18685. }
  18686. }
  18687. return res;
  18688. }
  18689. // TODO: Use [].sort instead?
  18690. function min() {
  18691. var args = [].slice.call(arguments, 0);
  18692. return pickBy('isBefore', args);
  18693. }
  18694. function max() {
  18695. var args = [].slice.call(arguments, 0);
  18696. return pickBy('isAfter', args);
  18697. }
  18698. var now = function () {
  18699. return Date.now ? Date.now() : +new Date();
  18700. };
  18701. var ordering = [
  18702. 'year',
  18703. 'quarter',
  18704. 'month',
  18705. 'week',
  18706. 'day',
  18707. 'hour',
  18708. 'minute',
  18709. 'second',
  18710. 'millisecond',
  18711. ];
  18712. function isDurationValid(m) {
  18713. var key,
  18714. unitHasDecimal = false,
  18715. i;
  18716. for (key in m) {
  18717. if (
  18718. hasOwnProp(m, key) &&
  18719. !(
  18720. indexOf.call(ordering, key) !== -1 &&
  18721. (m[key] == null || !isNaN(m[key]))
  18722. )
  18723. ) {
  18724. return false;
  18725. }
  18726. }
  18727. for (i = 0; i < ordering.length; ++i) {
  18728. if (m[ordering[i]]) {
  18729. if (unitHasDecimal) {
  18730. return false; // only allow non-integers for smallest unit
  18731. }
  18732. if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
  18733. unitHasDecimal = true;
  18734. }
  18735. }
  18736. }
  18737. return true;
  18738. }
  18739. function isValid$1() {
  18740. return this._isValid;
  18741. }
  18742. function createInvalid$1() {
  18743. return createDuration(NaN);
  18744. }
  18745. function Duration(duration) {
  18746. var normalizedInput = normalizeObjectUnits(duration),
  18747. years = normalizedInput.year || 0,
  18748. quarters = normalizedInput.quarter || 0,
  18749. months = normalizedInput.month || 0,
  18750. weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
  18751. days = normalizedInput.day || 0,
  18752. hours = normalizedInput.hour || 0,
  18753. minutes = normalizedInput.minute || 0,
  18754. seconds = normalizedInput.second || 0,
  18755. milliseconds = normalizedInput.millisecond || 0;
  18756. this._isValid = isDurationValid(normalizedInput);
  18757. // representation for dateAddRemove
  18758. this._milliseconds =
  18759. +milliseconds +
  18760. seconds * 1e3 + // 1000
  18761. minutes * 6e4 + // 1000 * 60
  18762. hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
  18763. // Because of dateAddRemove treats 24 hours as different from a
  18764. // day when working around DST, we need to store them separately
  18765. this._days = +days + weeks * 7;
  18766. // It is impossible to translate months into days without knowing
  18767. // which months you are are talking about, so we have to store
  18768. // it separately.
  18769. this._months = +months + quarters * 3 + years * 12;
  18770. this._data = {};
  18771. this._locale = getLocale();
  18772. this._bubble();
  18773. }
  18774. function isDuration(obj) {
  18775. return obj instanceof Duration;
  18776. }
  18777. function absRound(number) {
  18778. if (number < 0) {
  18779. return Math.round(-1 * number) * -1;
  18780. } else {
  18781. return Math.round(number);
  18782. }
  18783. }
  18784. // compare two arrays, return the number of differences
  18785. function compareArrays(array1, array2, dontConvert) {
  18786. var len = Math.min(array1.length, array2.length),
  18787. lengthDiff = Math.abs(array1.length - array2.length),
  18788. diffs = 0,
  18789. i;
  18790. for (i = 0; i < len; i++) {
  18791. if (
  18792. (dontConvert && array1[i] !== array2[i]) ||
  18793. (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
  18794. ) {
  18795. diffs++;
  18796. }
  18797. }
  18798. return diffs + lengthDiff;
  18799. }
  18800. // FORMATTING
  18801. function offset(token, separator) {
  18802. addFormatToken(token, 0, 0, function () {
  18803. var offset = this.utcOffset(),
  18804. sign = '+';
  18805. if (offset < 0) {
  18806. offset = -offset;
  18807. sign = '-';
  18808. }
  18809. return (
  18810. sign +
  18811. zeroFill(~~(offset / 60), 2) +
  18812. separator +
  18813. zeroFill(~~offset % 60, 2)
  18814. );
  18815. });
  18816. }
  18817. offset('Z', ':');
  18818. offset('ZZ', '');
  18819. // PARSING
  18820. addRegexToken('Z', matchShortOffset);
  18821. addRegexToken('ZZ', matchShortOffset);
  18822. addParseToken(['Z', 'ZZ'], function (input, array, config) {
  18823. config._useUTC = true;
  18824. config._tzm = offsetFromString(matchShortOffset, input);
  18825. });
  18826. // HELPERS
  18827. // timezone chunker
  18828. // '+10:00' > ['10', '00']
  18829. // '-1530' > ['-15', '30']
  18830. var chunkOffset = /([\+\-]|\d\d)/gi;
  18831. function offsetFromString(matcher, string) {
  18832. var matches = (string || '').match(matcher),
  18833. chunk,
  18834. parts,
  18835. minutes;
  18836. if (matches === null) {
  18837. return null;
  18838. }
  18839. chunk = matches[matches.length - 1] || [];
  18840. parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
  18841. minutes = +(parts[1] * 60) + toInt(parts[2]);
  18842. return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
  18843. }
  18844. // Return a moment from input, that is local/utc/zone equivalent to model.
  18845. function cloneWithOffset(input, model) {
  18846. var res, diff;
  18847. if (model._isUTC) {
  18848. res = model.clone();
  18849. diff =
  18850. (isMoment(input) || isDate(input)
  18851. ? input.valueOf()
  18852. : createLocal(input).valueOf()) - res.valueOf();
  18853. // Use low-level api, because this fn is low-level api.
  18854. res._d.setTime(res._d.valueOf() + diff);
  18855. hooks.updateOffset(res, false);
  18856. return res;
  18857. } else {
  18858. return createLocal(input).local();
  18859. }
  18860. }
  18861. function getDateOffset(m) {
  18862. // On Firefox.24 Date#getTimezoneOffset returns a floating point.
  18863. // https://github.com/moment/moment/pull/1871
  18864. return -Math.round(m._d.getTimezoneOffset());
  18865. }
  18866. // HOOKS
  18867. // This function will be called whenever a moment is mutated.
  18868. // It is intended to keep the offset in sync with the timezone.
  18869. hooks.updateOffset = function () {};
  18870. // MOMENTS
  18871. // keepLocalTime = true means only change the timezone, without
  18872. // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
  18873. // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
  18874. // +0200, so we adjust the time as needed, to be valid.
  18875. //
  18876. // Keeping the time actually adds/subtracts (one hour)
  18877. // from the actual represented time. That is why we call updateOffset
  18878. // a second time. In case it wants us to change the offset again
  18879. // _changeInProgress == true case, then we have to adjust, because
  18880. // there is no such time in the given timezone.
  18881. function getSetOffset(input, keepLocalTime, keepMinutes) {
  18882. var offset = this._offset || 0,
  18883. localAdjust;
  18884. if (!this.isValid()) {
  18885. return input != null ? this : NaN;
  18886. }
  18887. if (input != null) {
  18888. if (typeof input === 'string') {
  18889. input = offsetFromString(matchShortOffset, input);
  18890. if (input === null) {
  18891. return this;
  18892. }
  18893. } else if (Math.abs(input) < 16 && !keepMinutes) {
  18894. input = input * 60;
  18895. }
  18896. if (!this._isUTC && keepLocalTime) {
  18897. localAdjust = getDateOffset(this);
  18898. }
  18899. this._offset = input;
  18900. this._isUTC = true;
  18901. if (localAdjust != null) {
  18902. this.add(localAdjust, 'm');
  18903. }
  18904. if (offset !== input) {
  18905. if (!keepLocalTime || this._changeInProgress) {
  18906. addSubtract(
  18907. this,
  18908. createDuration(input - offset, 'm'),
  18909. 1,
  18910. false
  18911. );
  18912. } else if (!this._changeInProgress) {
  18913. this._changeInProgress = true;
  18914. hooks.updateOffset(this, true);
  18915. this._changeInProgress = null;
  18916. }
  18917. }
  18918. return this;
  18919. } else {
  18920. return this._isUTC ? offset : getDateOffset(this);
  18921. }
  18922. }
  18923. function getSetZone(input, keepLocalTime) {
  18924. if (input != null) {
  18925. if (typeof input !== 'string') {
  18926. input = -input;
  18927. }
  18928. this.utcOffset(input, keepLocalTime);
  18929. return this;
  18930. } else {
  18931. return -this.utcOffset();
  18932. }
  18933. }
  18934. function setOffsetToUTC(keepLocalTime) {
  18935. return this.utcOffset(0, keepLocalTime);
  18936. }
  18937. function setOffsetToLocal(keepLocalTime) {
  18938. if (this._isUTC) {
  18939. this.utcOffset(0, keepLocalTime);
  18940. this._isUTC = false;
  18941. if (keepLocalTime) {
  18942. this.subtract(getDateOffset(this), 'm');
  18943. }
  18944. }
  18945. return this;
  18946. }
  18947. function setOffsetToParsedOffset() {
  18948. if (this._tzm != null) {
  18949. this.utcOffset(this._tzm, false, true);
  18950. } else if (typeof this._i === 'string') {
  18951. var tZone = offsetFromString(matchOffset, this._i);
  18952. if (tZone != null) {
  18953. this.utcOffset(tZone);
  18954. } else {
  18955. this.utcOffset(0, true);
  18956. }
  18957. }
  18958. return this;
  18959. }
  18960. function hasAlignedHourOffset(input) {
  18961. if (!this.isValid()) {
  18962. return false;
  18963. }
  18964. input = input ? createLocal(input).utcOffset() : 0;
  18965. return (this.utcOffset() - input) % 60 === 0;
  18966. }
  18967. function isDaylightSavingTime() {
  18968. return (
  18969. this.utcOffset() > this.clone().month(0).utcOffset() ||
  18970. this.utcOffset() > this.clone().month(5).utcOffset()
  18971. );
  18972. }
  18973. function isDaylightSavingTimeShifted() {
  18974. if (!isUndefined(this._isDSTShifted)) {
  18975. return this._isDSTShifted;
  18976. }
  18977. var c = {},
  18978. other;
  18979. copyConfig(c, this);
  18980. c = prepareConfig(c);
  18981. if (c._a) {
  18982. other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
  18983. this._isDSTShifted =
  18984. this.isValid() && compareArrays(c._a, other.toArray()) > 0;
  18985. } else {
  18986. this._isDSTShifted = false;
  18987. }
  18988. return this._isDSTShifted;
  18989. }
  18990. function isLocal() {
  18991. return this.isValid() ? !this._isUTC : false;
  18992. }
  18993. function isUtcOffset() {
  18994. return this.isValid() ? this._isUTC : false;
  18995. }
  18996. function isUtc() {
  18997. return this.isValid() ? this._isUTC && this._offset === 0 : false;
  18998. }
  18999. // ASP.NET json date format regex
  19000. var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
  19001. // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
  19002. // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
  19003. // and further modified to allow for strings containing both week and day
  19004. isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
  19005. function createDuration(input, key) {
  19006. var duration = input,
  19007. // matching against regexp is expensive, do it on demand
  19008. match = null,
  19009. sign,
  19010. ret,
  19011. diffRes;
  19012. if (isDuration(input)) {
  19013. duration = {
  19014. ms: input._milliseconds,
  19015. d: input._days,
  19016. M: input._months,
  19017. };
  19018. } else if (isNumber(input) || !isNaN(+input)) {
  19019. duration = {};
  19020. if (key) {
  19021. duration[key] = +input;
  19022. } else {
  19023. duration.milliseconds = +input;
  19024. }
  19025. } else if ((match = aspNetRegex.exec(input))) {
  19026. sign = match[1] === '-' ? -1 : 1;
  19027. duration = {
  19028. y: 0,
  19029. d: toInt(match[DATE]) * sign,
  19030. h: toInt(match[HOUR]) * sign,
  19031. m: toInt(match[MINUTE]) * sign,
  19032. s: toInt(match[SECOND]) * sign,
  19033. ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
  19034. };
  19035. } else if ((match = isoRegex.exec(input))) {
  19036. sign = match[1] === '-' ? -1 : 1;
  19037. duration = {
  19038. y: parseIso(match[2], sign),
  19039. M: parseIso(match[3], sign),
  19040. w: parseIso(match[4], sign),
  19041. d: parseIso(match[5], sign),
  19042. h: parseIso(match[6], sign),
  19043. m: parseIso(match[7], sign),
  19044. s: parseIso(match[8], sign),
  19045. };
  19046. } else if (duration == null) {
  19047. // checks for null or undefined
  19048. duration = {};
  19049. } else if (
  19050. typeof duration === 'object' &&
  19051. ('from' in duration || 'to' in duration)
  19052. ) {
  19053. diffRes = momentsDifference(
  19054. createLocal(duration.from),
  19055. createLocal(duration.to)
  19056. );
  19057. duration = {};
  19058. duration.ms = diffRes.milliseconds;
  19059. duration.M = diffRes.months;
  19060. }
  19061. ret = new Duration(duration);
  19062. if (isDuration(input) && hasOwnProp(input, '_locale')) {
  19063. ret._locale = input._locale;
  19064. }
  19065. if (isDuration(input) && hasOwnProp(input, '_isValid')) {
  19066. ret._isValid = input._isValid;
  19067. }
  19068. return ret;
  19069. }
  19070. createDuration.fn = Duration.prototype;
  19071. createDuration.invalid = createInvalid$1;
  19072. function parseIso(inp, sign) {
  19073. // We'd normally use ~~inp for this, but unfortunately it also
  19074. // converts floats to ints.
  19075. // inp may be undefined, so careful calling replace on it.
  19076. var res = inp && parseFloat(inp.replace(',', '.'));
  19077. // apply sign while we're at it
  19078. return (isNaN(res) ? 0 : res) * sign;
  19079. }
  19080. function positiveMomentsDifference(base, other) {
  19081. var res = {};
  19082. res.months =
  19083. other.month() - base.month() + (other.year() - base.year()) * 12;
  19084. if (base.clone().add(res.months, 'M').isAfter(other)) {
  19085. --res.months;
  19086. }
  19087. res.milliseconds = +other - +base.clone().add(res.months, 'M');
  19088. return res;
  19089. }
  19090. function momentsDifference(base, other) {
  19091. var res;
  19092. if (!(base.isValid() && other.isValid())) {
  19093. return { milliseconds: 0, months: 0 };
  19094. }
  19095. other = cloneWithOffset(other, base);
  19096. if (base.isBefore(other)) {
  19097. res = positiveMomentsDifference(base, other);
  19098. } else {
  19099. res = positiveMomentsDifference(other, base);
  19100. res.milliseconds = -res.milliseconds;
  19101. res.months = -res.months;
  19102. }
  19103. return res;
  19104. }
  19105. // TODO: remove 'name' arg after deprecation is removed
  19106. function createAdder(direction, name) {
  19107. return function (val, period) {
  19108. var dur, tmp;
  19109. //invert the arguments, but complain about it
  19110. if (period !== null && !isNaN(+period)) {
  19111. deprecateSimple(
  19112. name,
  19113. 'moment().' +
  19114. name +
  19115. '(period, number) is deprecated. Please use moment().' +
  19116. name +
  19117. '(number, period). ' +
  19118. 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
  19119. );
  19120. tmp = val;
  19121. val = period;
  19122. period = tmp;
  19123. }
  19124. dur = createDuration(val, period);
  19125. addSubtract(this, dur, direction);
  19126. return this;
  19127. };
  19128. }
  19129. function addSubtract(mom, duration, isAdding, updateOffset) {
  19130. var milliseconds = duration._milliseconds,
  19131. days = absRound(duration._days),
  19132. months = absRound(duration._months);
  19133. if (!mom.isValid()) {
  19134. // No op
  19135. return;
  19136. }
  19137. updateOffset = updateOffset == null ? true : updateOffset;
  19138. if (months) {
  19139. setMonth(mom, get(mom, 'Month') + months * isAdding);
  19140. }
  19141. if (days) {
  19142. set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
  19143. }
  19144. if (milliseconds) {
  19145. mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
  19146. }
  19147. if (updateOffset) {
  19148. hooks.updateOffset(mom, days || months);
  19149. }
  19150. }
  19151. var add = createAdder(1, 'add'),
  19152. subtract = createAdder(-1, 'subtract');
  19153. function isString(input) {
  19154. return typeof input === 'string' || input instanceof String;
  19155. }
  19156. // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
  19157. function isMomentInput(input) {
  19158. return (
  19159. isMoment(input) ||
  19160. isDate(input) ||
  19161. isString(input) ||
  19162. isNumber(input) ||
  19163. isNumberOrStringArray(input) ||
  19164. isMomentInputObject(input) ||
  19165. input === null ||
  19166. input === undefined
  19167. );
  19168. }
  19169. function isMomentInputObject(input) {
  19170. var objectTest = isObject(input) && !isObjectEmpty(input),
  19171. propertyTest = false,
  19172. properties = [
  19173. 'years',
  19174. 'year',
  19175. 'y',
  19176. 'months',
  19177. 'month',
  19178. 'M',
  19179. 'days',
  19180. 'day',
  19181. 'd',
  19182. 'dates',
  19183. 'date',
  19184. 'D',
  19185. 'hours',
  19186. 'hour',
  19187. 'h',
  19188. 'minutes',
  19189. 'minute',
  19190. 'm',
  19191. 'seconds',
  19192. 'second',
  19193. 's',
  19194. 'milliseconds',
  19195. 'millisecond',
  19196. 'ms',
  19197. ],
  19198. i,
  19199. property;
  19200. for (i = 0; i < properties.length; i += 1) {
  19201. property = properties[i];
  19202. propertyTest = propertyTest || hasOwnProp(input, property);
  19203. }
  19204. return objectTest && propertyTest;
  19205. }
  19206. function isNumberOrStringArray(input) {
  19207. var arrayTest = isArray(input),
  19208. dataTypeTest = false;
  19209. if (arrayTest) {
  19210. dataTypeTest =
  19211. input.filter(function (item) {
  19212. return !isNumber(item) && isString(input);
  19213. }).length === 0;
  19214. }
  19215. return arrayTest && dataTypeTest;
  19216. }
  19217. function isCalendarSpec(input) {
  19218. var objectTest = isObject(input) && !isObjectEmpty(input),
  19219. propertyTest = false,
  19220. properties = [
  19221. 'sameDay',
  19222. 'nextDay',
  19223. 'lastDay',
  19224. 'nextWeek',
  19225. 'lastWeek',
  19226. 'sameElse',
  19227. ],
  19228. i,
  19229. property;
  19230. for (i = 0; i < properties.length; i += 1) {
  19231. property = properties[i];
  19232. propertyTest = propertyTest || hasOwnProp(input, property);
  19233. }
  19234. return objectTest && propertyTest;
  19235. }
  19236. function getCalendarFormat(myMoment, now) {
  19237. var diff = myMoment.diff(now, 'days', true);
  19238. return diff < -6
  19239. ? 'sameElse'
  19240. : diff < -1
  19241. ? 'lastWeek'
  19242. : diff < 0
  19243. ? 'lastDay'
  19244. : diff < 1
  19245. ? 'sameDay'
  19246. : diff < 2
  19247. ? 'nextDay'
  19248. : diff < 7
  19249. ? 'nextWeek'
  19250. : 'sameElse';
  19251. }
  19252. function calendar$1(time, formats) {
  19253. // Support for single parameter, formats only overload to the calendar function
  19254. if (arguments.length === 1) {
  19255. if (!arguments[0]) {
  19256. time = undefined;
  19257. formats = undefined;
  19258. } else if (isMomentInput(arguments[0])) {
  19259. time = arguments[0];
  19260. formats = undefined;
  19261. } else if (isCalendarSpec(arguments[0])) {
  19262. formats = arguments[0];
  19263. time = undefined;
  19264. }
  19265. }
  19266. // We want to compare the start of today, vs this.
  19267. // Getting start-of-today depends on whether we're local/utc/offset or not.
  19268. var now = time || createLocal(),
  19269. sod = cloneWithOffset(now, this).startOf('day'),
  19270. format = hooks.calendarFormat(this, sod) || 'sameElse',
  19271. output =
  19272. formats &&
  19273. (isFunction(formats[format])
  19274. ? formats[format].call(this, now)
  19275. : formats[format]);
  19276. return this.format(
  19277. output || this.localeData().calendar(format, this, createLocal(now))
  19278. );
  19279. }
  19280. function clone() {
  19281. return new Moment(this);
  19282. }
  19283. function isAfter(input, units) {
  19284. var localInput = isMoment(input) ? input : createLocal(input);
  19285. if (!(this.isValid() && localInput.isValid())) {
  19286. return false;
  19287. }
  19288. units = normalizeUnits(units) || 'millisecond';
  19289. if (units === 'millisecond') {
  19290. return this.valueOf() > localInput.valueOf();
  19291. } else {
  19292. return localInput.valueOf() < this.clone().startOf(units).valueOf();
  19293. }
  19294. }
  19295. function isBefore(input, units) {
  19296. var localInput = isMoment(input) ? input : createLocal(input);
  19297. if (!(this.isValid() && localInput.isValid())) {
  19298. return false;
  19299. }
  19300. units = normalizeUnits(units) || 'millisecond';
  19301. if (units === 'millisecond') {
  19302. return this.valueOf() < localInput.valueOf();
  19303. } else {
  19304. return this.clone().endOf(units).valueOf() < localInput.valueOf();
  19305. }
  19306. }
  19307. function isBetween(from, to, units, inclusivity) {
  19308. var localFrom = isMoment(from) ? from : createLocal(from),
  19309. localTo = isMoment(to) ? to : createLocal(to);
  19310. if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
  19311. return false;
  19312. }
  19313. inclusivity = inclusivity || '()';
  19314. return (
  19315. (inclusivity[0] === '('
  19316. ? this.isAfter(localFrom, units)
  19317. : !this.isBefore(localFrom, units)) &&
  19318. (inclusivity[1] === ')'
  19319. ? this.isBefore(localTo, units)
  19320. : !this.isAfter(localTo, units))
  19321. );
  19322. }
  19323. function isSame(input, units) {
  19324. var localInput = isMoment(input) ? input : createLocal(input),
  19325. inputMs;
  19326. if (!(this.isValid() && localInput.isValid())) {
  19327. return false;
  19328. }
  19329. units = normalizeUnits(units) || 'millisecond';
  19330. if (units === 'millisecond') {
  19331. return this.valueOf() === localInput.valueOf();
  19332. } else {
  19333. inputMs = localInput.valueOf();
  19334. return (
  19335. this.clone().startOf(units).valueOf() <= inputMs &&
  19336. inputMs <= this.clone().endOf(units).valueOf()
  19337. );
  19338. }
  19339. }
  19340. function isSameOrAfter(input, units) {
  19341. return this.isSame(input, units) || this.isAfter(input, units);
  19342. }
  19343. function isSameOrBefore(input, units) {
  19344. return this.isSame(input, units) || this.isBefore(input, units);
  19345. }
  19346. function diff(input, units, asFloat) {
  19347. var that, zoneDelta, output;
  19348. if (!this.isValid()) {
  19349. return NaN;
  19350. }
  19351. that = cloneWithOffset(input, this);
  19352. if (!that.isValid()) {
  19353. return NaN;
  19354. }
  19355. zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
  19356. units = normalizeUnits(units);
  19357. switch (units) {
  19358. case 'year':
  19359. output = monthDiff(this, that) / 12;
  19360. break;
  19361. case 'month':
  19362. output = monthDiff(this, that);
  19363. break;
  19364. case 'quarter':
  19365. output = monthDiff(this, that) / 3;
  19366. break;
  19367. case 'second':
  19368. output = (this - that) / 1e3;
  19369. break; // 1000
  19370. case 'minute':
  19371. output = (this - that) / 6e4;
  19372. break; // 1000 * 60
  19373. case 'hour':
  19374. output = (this - that) / 36e5;
  19375. break; // 1000 * 60 * 60
  19376. case 'day':
  19377. output = (this - that - zoneDelta) / 864e5;
  19378. break; // 1000 * 60 * 60 * 24, negate dst
  19379. case 'week':
  19380. output = (this - that - zoneDelta) / 6048e5;
  19381. break; // 1000 * 60 * 60 * 24 * 7, negate dst
  19382. default:
  19383. output = this - that;
  19384. }
  19385. return asFloat ? output : absFloor(output);
  19386. }
  19387. function monthDiff(a, b) {
  19388. if (a.date() < b.date()) {
  19389. // end-of-month calculations work correct when the start month has more
  19390. // days than the end month.
  19391. return -monthDiff(b, a);
  19392. }
  19393. // difference in months
  19394. var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
  19395. // b is in (anchor - 1 month, anchor + 1 month)
  19396. anchor = a.clone().add(wholeMonthDiff, 'months'),
  19397. anchor2,
  19398. adjust;
  19399. if (b - anchor < 0) {
  19400. anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
  19401. // linear across the month
  19402. adjust = (b - anchor) / (anchor - anchor2);
  19403. } else {
  19404. anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
  19405. // linear across the month
  19406. adjust = (b - anchor) / (anchor2 - anchor);
  19407. }
  19408. //check for negative zero, return zero if negative zero
  19409. return -(wholeMonthDiff + adjust) || 0;
  19410. }
  19411. hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
  19412. hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
  19413. function toString() {
  19414. return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
  19415. }
  19416. function toISOString(keepOffset) {
  19417. if (!this.isValid()) {
  19418. return null;
  19419. }
  19420. var utc = keepOffset !== true,
  19421. m = utc ? this.clone().utc() : this;
  19422. if (m.year() < 0 || m.year() > 9999) {
  19423. return formatMoment(
  19424. m,
  19425. utc
  19426. ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
  19427. : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
  19428. );
  19429. }
  19430. if (isFunction(Date.prototype.toISOString)) {
  19431. // native implementation is ~50x faster, use it when we can
  19432. if (utc) {
  19433. return this.toDate().toISOString();
  19434. } else {
  19435. return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
  19436. .toISOString()
  19437. .replace('Z', formatMoment(m, 'Z'));
  19438. }
  19439. }
  19440. return formatMoment(
  19441. m,
  19442. utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
  19443. );
  19444. }
  19445. /**
  19446. * Return a human readable representation of a moment that can
  19447. * also be evaluated to get a new moment which is the same
  19448. *
  19449. * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
  19450. */
  19451. function inspect() {
  19452. if (!this.isValid()) {
  19453. return 'moment.invalid(/* ' + this._i + ' */)';
  19454. }
  19455. var func = 'moment',
  19456. zone = '',
  19457. prefix,
  19458. year,
  19459. datetime,
  19460. suffix;
  19461. if (!this.isLocal()) {
  19462. func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
  19463. zone = 'Z';
  19464. }
  19465. prefix = '[' + func + '("]';
  19466. year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
  19467. datetime = '-MM-DD[T]HH:mm:ss.SSS';
  19468. suffix = zone + '[")]';
  19469. return this.format(prefix + year + datetime + suffix);
  19470. }
  19471. function format(inputString) {
  19472. if (!inputString) {
  19473. inputString = this.isUtc()
  19474. ? hooks.defaultFormatUtc
  19475. : hooks.defaultFormat;
  19476. }
  19477. var output = formatMoment(this, inputString);
  19478. return this.localeData().postformat(output);
  19479. }
  19480. function from(time, withoutSuffix) {
  19481. if (
  19482. this.isValid() &&
  19483. ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
  19484. ) {
  19485. return createDuration({ to: this, from: time })
  19486. .locale(this.locale())
  19487. .humanize(!withoutSuffix);
  19488. } else {
  19489. return this.localeData().invalidDate();
  19490. }
  19491. }
  19492. function fromNow(withoutSuffix) {
  19493. return this.from(createLocal(), withoutSuffix);
  19494. }
  19495. function to(time, withoutSuffix) {
  19496. if (
  19497. this.isValid() &&
  19498. ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
  19499. ) {
  19500. return createDuration({ from: this, to: time })
  19501. .locale(this.locale())
  19502. .humanize(!withoutSuffix);
  19503. } else {
  19504. return this.localeData().invalidDate();
  19505. }
  19506. }
  19507. function toNow(withoutSuffix) {
  19508. return this.to(createLocal(), withoutSuffix);
  19509. }
  19510. // If passed a locale key, it will set the locale for this
  19511. // instance. Otherwise, it will return the locale configuration
  19512. // variables for this instance.
  19513. function locale(key) {
  19514. var newLocaleData;
  19515. if (key === undefined) {
  19516. return this._locale._abbr;
  19517. } else {
  19518. newLocaleData = getLocale(key);
  19519. if (newLocaleData != null) {
  19520. this._locale = newLocaleData;
  19521. }
  19522. return this;
  19523. }
  19524. }
  19525. var lang = deprecate(
  19526. 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
  19527. function (key) {
  19528. if (key === undefined) {
  19529. return this.localeData();
  19530. } else {
  19531. return this.locale(key);
  19532. }
  19533. }
  19534. );
  19535. function localeData() {
  19536. return this._locale;
  19537. }
  19538. var MS_PER_SECOND = 1000,
  19539. MS_PER_MINUTE = 60 * MS_PER_SECOND,
  19540. MS_PER_HOUR = 60 * MS_PER_MINUTE,
  19541. MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
  19542. // actual modulo - handles negative numbers (for dates before 1970):
  19543. function mod$1(dividend, divisor) {
  19544. return ((dividend % divisor) + divisor) % divisor;
  19545. }
  19546. function localStartOfDate(y, m, d) {
  19547. // the date constructor remaps years 0-99 to 1900-1999
  19548. if (y < 100 && y >= 0) {
  19549. // preserve leap years using a full 400 year cycle, then reset
  19550. return new Date(y + 400, m, d) - MS_PER_400_YEARS;
  19551. } else {
  19552. return new Date(y, m, d).valueOf();
  19553. }
  19554. }
  19555. function utcStartOfDate(y, m, d) {
  19556. // Date.UTC remaps years 0-99 to 1900-1999
  19557. if (y < 100 && y >= 0) {
  19558. // preserve leap years using a full 400 year cycle, then reset
  19559. return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
  19560. } else {
  19561. return Date.UTC(y, m, d);
  19562. }
  19563. }
  19564. function startOf(units) {
  19565. var time, startOfDate;
  19566. units = normalizeUnits(units);
  19567. if (units === undefined || units === 'millisecond' || !this.isValid()) {
  19568. return this;
  19569. }
  19570. startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
  19571. switch (units) {
  19572. case 'year':
  19573. time = startOfDate(this.year(), 0, 1);
  19574. break;
  19575. case 'quarter':
  19576. time = startOfDate(
  19577. this.year(),
  19578. this.month() - (this.month() % 3),
  19579. 1
  19580. );
  19581. break;
  19582. case 'month':
  19583. time = startOfDate(this.year(), this.month(), 1);
  19584. break;
  19585. case 'week':
  19586. time = startOfDate(
  19587. this.year(),
  19588. this.month(),
  19589. this.date() - this.weekday()
  19590. );
  19591. break;
  19592. case 'isoWeek':
  19593. time = startOfDate(
  19594. this.year(),
  19595. this.month(),
  19596. this.date() - (this.isoWeekday() - 1)
  19597. );
  19598. break;
  19599. case 'day':
  19600. case 'date':
  19601. time = startOfDate(this.year(), this.month(), this.date());
  19602. break;
  19603. case 'hour':
  19604. time = this._d.valueOf();
  19605. time -= mod$1(
  19606. time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
  19607. MS_PER_HOUR
  19608. );
  19609. break;
  19610. case 'minute':
  19611. time = this._d.valueOf();
  19612. time -= mod$1(time, MS_PER_MINUTE);
  19613. break;
  19614. case 'second':
  19615. time = this._d.valueOf();
  19616. time -= mod$1(time, MS_PER_SECOND);
  19617. break;
  19618. }
  19619. this._d.setTime(time);
  19620. hooks.updateOffset(this, true);
  19621. return this;
  19622. }
  19623. function endOf(units) {
  19624. var time, startOfDate;
  19625. units = normalizeUnits(units);
  19626. if (units === undefined || units === 'millisecond' || !this.isValid()) {
  19627. return this;
  19628. }
  19629. startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
  19630. switch (units) {
  19631. case 'year':
  19632. time = startOfDate(this.year() + 1, 0, 1) - 1;
  19633. break;
  19634. case 'quarter':
  19635. time =
  19636. startOfDate(
  19637. this.year(),
  19638. this.month() - (this.month() % 3) + 3,
  19639. 1
  19640. ) - 1;
  19641. break;
  19642. case 'month':
  19643. time = startOfDate(this.year(), this.month() + 1, 1) - 1;
  19644. break;
  19645. case 'week':
  19646. time =
  19647. startOfDate(
  19648. this.year(),
  19649. this.month(),
  19650. this.date() - this.weekday() + 7
  19651. ) - 1;
  19652. break;
  19653. case 'isoWeek':
  19654. time =
  19655. startOfDate(
  19656. this.year(),
  19657. this.month(),
  19658. this.date() - (this.isoWeekday() - 1) + 7
  19659. ) - 1;
  19660. break;
  19661. case 'day':
  19662. case 'date':
  19663. time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
  19664. break;
  19665. case 'hour':
  19666. time = this._d.valueOf();
  19667. time +=
  19668. MS_PER_HOUR -
  19669. mod$1(
  19670. time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
  19671. MS_PER_HOUR
  19672. ) -
  19673. 1;
  19674. break;
  19675. case 'minute':
  19676. time = this._d.valueOf();
  19677. time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
  19678. break;
  19679. case 'second':
  19680. time = this._d.valueOf();
  19681. time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
  19682. break;
  19683. }
  19684. this._d.setTime(time);
  19685. hooks.updateOffset(this, true);
  19686. return this;
  19687. }
  19688. function valueOf() {
  19689. return this._d.valueOf() - (this._offset || 0) * 60000;
  19690. }
  19691. function unix() {
  19692. return Math.floor(this.valueOf() / 1000);
  19693. }
  19694. function toDate() {
  19695. return new Date(this.valueOf());
  19696. }
  19697. function toArray() {
  19698. var m = this;
  19699. return [
  19700. m.year(),
  19701. m.month(),
  19702. m.date(),
  19703. m.hour(),
  19704. m.minute(),
  19705. m.second(),
  19706. m.millisecond(),
  19707. ];
  19708. }
  19709. function toObject() {
  19710. var m = this;
  19711. return {
  19712. years: m.year(),
  19713. months: m.month(),
  19714. date: m.date(),
  19715. hours: m.hours(),
  19716. minutes: m.minutes(),
  19717. seconds: m.seconds(),
  19718. milliseconds: m.milliseconds(),
  19719. };
  19720. }
  19721. function toJSON() {
  19722. // new Date(NaN).toJSON() === null
  19723. return this.isValid() ? this.toISOString() : null;
  19724. }
  19725. function isValid$2() {
  19726. return isValid(this);
  19727. }
  19728. function parsingFlags() {
  19729. return extend({}, getParsingFlags(this));
  19730. }
  19731. function invalidAt() {
  19732. return getParsingFlags(this).overflow;
  19733. }
  19734. function creationData() {
  19735. return {
  19736. input: this._i,
  19737. format: this._f,
  19738. locale: this._locale,
  19739. isUTC: this._isUTC,
  19740. strict: this._strict,
  19741. };
  19742. }
  19743. addFormatToken('N', 0, 0, 'eraAbbr');
  19744. addFormatToken('NN', 0, 0, 'eraAbbr');
  19745. addFormatToken('NNN', 0, 0, 'eraAbbr');
  19746. addFormatToken('NNNN', 0, 0, 'eraName');
  19747. addFormatToken('NNNNN', 0, 0, 'eraNarrow');
  19748. addFormatToken('y', ['y', 1], 'yo', 'eraYear');
  19749. addFormatToken('y', ['yy', 2], 0, 'eraYear');
  19750. addFormatToken('y', ['yyy', 3], 0, 'eraYear');
  19751. addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
  19752. addRegexToken('N', matchEraAbbr);
  19753. addRegexToken('NN', matchEraAbbr);
  19754. addRegexToken('NNN', matchEraAbbr);
  19755. addRegexToken('NNNN', matchEraName);
  19756. addRegexToken('NNNNN', matchEraNarrow);
  19757. addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (
  19758. input,
  19759. array,
  19760. config,
  19761. token
  19762. ) {
  19763. var era = config._locale.erasParse(input, token, config._strict);
  19764. if (era) {
  19765. getParsingFlags(config).era = era;
  19766. } else {
  19767. getParsingFlags(config).invalidEra = input;
  19768. }
  19769. });
  19770. addRegexToken('y', matchUnsigned);
  19771. addRegexToken('yy', matchUnsigned);
  19772. addRegexToken('yyy', matchUnsigned);
  19773. addRegexToken('yyyy', matchUnsigned);
  19774. addRegexToken('yo', matchEraYearOrdinal);
  19775. addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
  19776. addParseToken(['yo'], function (input, array, config, token) {
  19777. var match;
  19778. if (config._locale._eraYearOrdinalRegex) {
  19779. match = input.match(config._locale._eraYearOrdinalRegex);
  19780. }
  19781. if (config._locale.eraYearOrdinalParse) {
  19782. array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
  19783. } else {
  19784. array[YEAR] = parseInt(input, 10);
  19785. }
  19786. });
  19787. function localeEras(m, format) {
  19788. var i,
  19789. l,
  19790. date,
  19791. eras = this._eras || getLocale('en')._eras;
  19792. for (i = 0, l = eras.length; i < l; ++i) {
  19793. switch (typeof eras[i].since) {
  19794. case 'string':
  19795. // truncate time
  19796. date = hooks(eras[i].since).startOf('day');
  19797. eras[i].since = date.valueOf();
  19798. break;
  19799. }
  19800. switch (typeof eras[i].until) {
  19801. case 'undefined':
  19802. eras[i].until = +Infinity;
  19803. break;
  19804. case 'string':
  19805. // truncate time
  19806. date = hooks(eras[i].until).startOf('day').valueOf();
  19807. eras[i].until = date.valueOf();
  19808. break;
  19809. }
  19810. }
  19811. return eras;
  19812. }
  19813. function localeErasParse(eraName, format, strict) {
  19814. var i,
  19815. l,
  19816. eras = this.eras(),
  19817. name,
  19818. abbr,
  19819. narrow;
  19820. eraName = eraName.toUpperCase();
  19821. for (i = 0, l = eras.length; i < l; ++i) {
  19822. name = eras[i].name.toUpperCase();
  19823. abbr = eras[i].abbr.toUpperCase();
  19824. narrow = eras[i].narrow.toUpperCase();
  19825. if (strict) {
  19826. switch (format) {
  19827. case 'N':
  19828. case 'NN':
  19829. case 'NNN':
  19830. if (abbr === eraName) {
  19831. return eras[i];
  19832. }
  19833. break;
  19834. case 'NNNN':
  19835. if (name === eraName) {
  19836. return eras[i];
  19837. }
  19838. break;
  19839. case 'NNNNN':
  19840. if (narrow === eraName) {
  19841. return eras[i];
  19842. }
  19843. break;
  19844. }
  19845. } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
  19846. return eras[i];
  19847. }
  19848. }
  19849. }
  19850. function localeErasConvertYear(era, year) {
  19851. var dir = era.since <= era.until ? +1 : -1;
  19852. if (year === undefined) {
  19853. return hooks(era.since).year();
  19854. } else {
  19855. return hooks(era.since).year() + (year - era.offset) * dir;
  19856. }
  19857. }
  19858. function getEraName() {
  19859. var i,
  19860. l,
  19861. val,
  19862. eras = this.localeData().eras();
  19863. for (i = 0, l = eras.length; i < l; ++i) {
  19864. // truncate time
  19865. val = this.clone().startOf('day').valueOf();
  19866. if (eras[i].since <= val && val <= eras[i].until) {
  19867. return eras[i].name;
  19868. }
  19869. if (eras[i].until <= val && val <= eras[i].since) {
  19870. return eras[i].name;
  19871. }
  19872. }
  19873. return '';
  19874. }
  19875. function getEraNarrow() {
  19876. var i,
  19877. l,
  19878. val,
  19879. eras = this.localeData().eras();
  19880. for (i = 0, l = eras.length; i < l; ++i) {
  19881. // truncate time
  19882. val = this.clone().startOf('day').valueOf();
  19883. if (eras[i].since <= val && val <= eras[i].until) {
  19884. return eras[i].narrow;
  19885. }
  19886. if (eras[i].until <= val && val <= eras[i].since) {
  19887. return eras[i].narrow;
  19888. }
  19889. }
  19890. return '';
  19891. }
  19892. function getEraAbbr() {
  19893. var i,
  19894. l,
  19895. val,
  19896. eras = this.localeData().eras();
  19897. for (i = 0, l = eras.length; i < l; ++i) {
  19898. // truncate time
  19899. val = this.clone().startOf('day').valueOf();
  19900. if (eras[i].since <= val && val <= eras[i].until) {
  19901. return eras[i].abbr;
  19902. }
  19903. if (eras[i].until <= val && val <= eras[i].since) {
  19904. return eras[i].abbr;
  19905. }
  19906. }
  19907. return '';
  19908. }
  19909. function getEraYear() {
  19910. var i,
  19911. l,
  19912. dir,
  19913. val,
  19914. eras = this.localeData().eras();
  19915. for (i = 0, l = eras.length; i < l; ++i) {
  19916. dir = eras[i].since <= eras[i].until ? +1 : -1;
  19917. // truncate time
  19918. val = this.clone().startOf('day').valueOf();
  19919. if (
  19920. (eras[i].since <= val && val <= eras[i].until) ||
  19921. (eras[i].until <= val && val <= eras[i].since)
  19922. ) {
  19923. return (
  19924. (this.year() - hooks(eras[i].since).year()) * dir +
  19925. eras[i].offset
  19926. );
  19927. }
  19928. }
  19929. return this.year();
  19930. }
  19931. function erasNameRegex(isStrict) {
  19932. if (!hasOwnProp(this, '_erasNameRegex')) {
  19933. computeErasParse.call(this);
  19934. }
  19935. return isStrict ? this._erasNameRegex : this._erasRegex;
  19936. }
  19937. function erasAbbrRegex(isStrict) {
  19938. if (!hasOwnProp(this, '_erasAbbrRegex')) {
  19939. computeErasParse.call(this);
  19940. }
  19941. return isStrict ? this._erasAbbrRegex : this._erasRegex;
  19942. }
  19943. function erasNarrowRegex(isStrict) {
  19944. if (!hasOwnProp(this, '_erasNarrowRegex')) {
  19945. computeErasParse.call(this);
  19946. }
  19947. return isStrict ? this._erasNarrowRegex : this._erasRegex;
  19948. }
  19949. function matchEraAbbr(isStrict, locale) {
  19950. return locale.erasAbbrRegex(isStrict);
  19951. }
  19952. function matchEraName(isStrict, locale) {
  19953. return locale.erasNameRegex(isStrict);
  19954. }
  19955. function matchEraNarrow(isStrict, locale) {
  19956. return locale.erasNarrowRegex(isStrict);
  19957. }
  19958. function matchEraYearOrdinal(isStrict, locale) {
  19959. return locale._eraYearOrdinalRegex || matchUnsigned;
  19960. }
  19961. function computeErasParse() {
  19962. var abbrPieces = [],
  19963. namePieces = [],
  19964. narrowPieces = [],
  19965. mixedPieces = [],
  19966. i,
  19967. l,
  19968. eras = this.eras();
  19969. for (i = 0, l = eras.length; i < l; ++i) {
  19970. namePieces.push(regexEscape(eras[i].name));
  19971. abbrPieces.push(regexEscape(eras[i].abbr));
  19972. narrowPieces.push(regexEscape(eras[i].narrow));
  19973. mixedPieces.push(regexEscape(eras[i].name));
  19974. mixedPieces.push(regexEscape(eras[i].abbr));
  19975. mixedPieces.push(regexEscape(eras[i].narrow));
  19976. }
  19977. this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
  19978. this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
  19979. this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
  19980. this._erasNarrowRegex = new RegExp(
  19981. '^(' + narrowPieces.join('|') + ')',
  19982. 'i'
  19983. );
  19984. }
  19985. // FORMATTING
  19986. addFormatToken(0, ['gg', 2], 0, function () {
  19987. return this.weekYear() % 100;
  19988. });
  19989. addFormatToken(0, ['GG', 2], 0, function () {
  19990. return this.isoWeekYear() % 100;
  19991. });
  19992. function addWeekYearFormatToken(token, getter) {
  19993. addFormatToken(0, [token, token.length], 0, getter);
  19994. }
  19995. addWeekYearFormatToken('gggg', 'weekYear');
  19996. addWeekYearFormatToken('ggggg', 'weekYear');
  19997. addWeekYearFormatToken('GGGG', 'isoWeekYear');
  19998. addWeekYearFormatToken('GGGGG', 'isoWeekYear');
  19999. // ALIASES
  20000. addUnitAlias('weekYear', 'gg');
  20001. addUnitAlias('isoWeekYear', 'GG');
  20002. // PRIORITY
  20003. addUnitPriority('weekYear', 1);
  20004. addUnitPriority('isoWeekYear', 1);
  20005. // PARSING
  20006. addRegexToken('G', matchSigned);
  20007. addRegexToken('g', matchSigned);
  20008. addRegexToken('GG', match1to2, match2);
  20009. addRegexToken('gg', match1to2, match2);
  20010. addRegexToken('GGGG', match1to4, match4);
  20011. addRegexToken('gggg', match1to4, match4);
  20012. addRegexToken('GGGGG', match1to6, match6);
  20013. addRegexToken('ggggg', match1to6, match6);
  20014. addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (
  20015. input,
  20016. week,
  20017. config,
  20018. token
  20019. ) {
  20020. week[token.substr(0, 2)] = toInt(input);
  20021. });
  20022. addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
  20023. week[token] = hooks.parseTwoDigitYear(input);
  20024. });
  20025. // MOMENTS
  20026. function getSetWeekYear(input) {
  20027. return getSetWeekYearHelper.call(
  20028. this,
  20029. input,
  20030. this.week(),
  20031. this.weekday(),
  20032. this.localeData()._week.dow,
  20033. this.localeData()._week.doy
  20034. );
  20035. }
  20036. function getSetISOWeekYear(input) {
  20037. return getSetWeekYearHelper.call(
  20038. this,
  20039. input,
  20040. this.isoWeek(),
  20041. this.isoWeekday(),
  20042. 1,
  20043. 4
  20044. );
  20045. }
  20046. function getISOWeeksInYear() {
  20047. return weeksInYear(this.year(), 1, 4);
  20048. }
  20049. function getISOWeeksInISOWeekYear() {
  20050. return weeksInYear(this.isoWeekYear(), 1, 4);
  20051. }
  20052. function getWeeksInYear() {
  20053. var weekInfo = this.localeData()._week;
  20054. return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
  20055. }
  20056. function getWeeksInWeekYear() {
  20057. var weekInfo = this.localeData()._week;
  20058. return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
  20059. }
  20060. function getSetWeekYearHelper(input, week, weekday, dow, doy) {
  20061. var weeksTarget;
  20062. if (input == null) {
  20063. return weekOfYear(this, dow, doy).year;
  20064. } else {
  20065. weeksTarget = weeksInYear(input, dow, doy);
  20066. if (week > weeksTarget) {
  20067. week = weeksTarget;
  20068. }
  20069. return setWeekAll.call(this, input, week, weekday, dow, doy);
  20070. }
  20071. }
  20072. function setWeekAll(weekYear, week, weekday, dow, doy) {
  20073. var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
  20074. date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
  20075. this.year(date.getUTCFullYear());
  20076. this.month(date.getUTCMonth());
  20077. this.date(date.getUTCDate());
  20078. return this;
  20079. }
  20080. // FORMATTING
  20081. addFormatToken('Q', 0, 'Qo', 'quarter');
  20082. // ALIASES
  20083. addUnitAlias('quarter', 'Q');
  20084. // PRIORITY
  20085. addUnitPriority('quarter', 7);
  20086. // PARSING
  20087. addRegexToken('Q', match1);
  20088. addParseToken('Q', function (input, array) {
  20089. array[MONTH] = (toInt(input) - 1) * 3;
  20090. });
  20091. // MOMENTS
  20092. function getSetQuarter(input) {
  20093. return input == null
  20094. ? Math.ceil((this.month() + 1) / 3)
  20095. : this.month((input - 1) * 3 + (this.month() % 3));
  20096. }
  20097. // FORMATTING
  20098. addFormatToken('D', ['DD', 2], 'Do', 'date');
  20099. // ALIASES
  20100. addUnitAlias('date', 'D');
  20101. // PRIORITY
  20102. addUnitPriority('date', 9);
  20103. // PARSING
  20104. addRegexToken('D', match1to2);
  20105. addRegexToken('DD', match1to2, match2);
  20106. addRegexToken('Do', function (isStrict, locale) {
  20107. // TODO: Remove "ordinalParse" fallback in next major release.
  20108. return isStrict
  20109. ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
  20110. : locale._dayOfMonthOrdinalParseLenient;
  20111. });
  20112. addParseToken(['D', 'DD'], DATE);
  20113. addParseToken('Do', function (input, array) {
  20114. array[DATE] = toInt(input.match(match1to2)[0]);
  20115. });
  20116. // MOMENTS
  20117. var getSetDayOfMonth = makeGetSet('Date', true);
  20118. // FORMATTING
  20119. addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
  20120. // ALIASES
  20121. addUnitAlias('dayOfYear', 'DDD');
  20122. // PRIORITY
  20123. addUnitPriority('dayOfYear', 4);
  20124. // PARSING
  20125. addRegexToken('DDD', match1to3);
  20126. addRegexToken('DDDD', match3);
  20127. addParseToken(['DDD', 'DDDD'], function (input, array, config) {
  20128. config._dayOfYear = toInt(input);
  20129. });
  20130. // HELPERS
  20131. // MOMENTS
  20132. function getSetDayOfYear(input) {
  20133. var dayOfYear =
  20134. Math.round(
  20135. (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
  20136. ) + 1;
  20137. return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
  20138. }
  20139. // FORMATTING
  20140. addFormatToken('m', ['mm', 2], 0, 'minute');
  20141. // ALIASES
  20142. addUnitAlias('minute', 'm');
  20143. // PRIORITY
  20144. addUnitPriority('minute', 14);
  20145. // PARSING
  20146. addRegexToken('m', match1to2);
  20147. addRegexToken('mm', match1to2, match2);
  20148. addParseToken(['m', 'mm'], MINUTE);
  20149. // MOMENTS
  20150. var getSetMinute = makeGetSet('Minutes', false);
  20151. // FORMATTING
  20152. addFormatToken('s', ['ss', 2], 0, 'second');
  20153. // ALIASES
  20154. addUnitAlias('second', 's');
  20155. // PRIORITY
  20156. addUnitPriority('second', 15);
  20157. // PARSING
  20158. addRegexToken('s', match1to2);
  20159. addRegexToken('ss', match1to2, match2);
  20160. addParseToken(['s', 'ss'], SECOND);
  20161. // MOMENTS
  20162. var getSetSecond = makeGetSet('Seconds', false);
  20163. // FORMATTING
  20164. addFormatToken('S', 0, 0, function () {
  20165. return ~~(this.millisecond() / 100);
  20166. });
  20167. addFormatToken(0, ['SS', 2], 0, function () {
  20168. return ~~(this.millisecond() / 10);
  20169. });
  20170. addFormatToken(0, ['SSS', 3], 0, 'millisecond');
  20171. addFormatToken(0, ['SSSS', 4], 0, function () {
  20172. return this.millisecond() * 10;
  20173. });
  20174. addFormatToken(0, ['SSSSS', 5], 0, function () {
  20175. return this.millisecond() * 100;
  20176. });
  20177. addFormatToken(0, ['SSSSSS', 6], 0, function () {
  20178. return this.millisecond() * 1000;
  20179. });
  20180. addFormatToken(0, ['SSSSSSS', 7], 0, function () {
  20181. return this.millisecond() * 10000;
  20182. });
  20183. addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
  20184. return this.millisecond() * 100000;
  20185. });
  20186. addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
  20187. return this.millisecond() * 1000000;
  20188. });
  20189. // ALIASES
  20190. addUnitAlias('millisecond', 'ms');
  20191. // PRIORITY
  20192. addUnitPriority('millisecond', 16);
  20193. // PARSING
  20194. addRegexToken('S', match1to3, match1);
  20195. addRegexToken('SS', match1to3, match2);
  20196. addRegexToken('SSS', match1to3, match3);
  20197. var token, getSetMillisecond;
  20198. for (token = 'SSSS'; token.length <= 9; token += 'S') {
  20199. addRegexToken(token, matchUnsigned);
  20200. }
  20201. function parseMs(input, array) {
  20202. array[MILLISECOND] = toInt(('0.' + input) * 1000);
  20203. }
  20204. for (token = 'S'; token.length <= 9; token += 'S') {
  20205. addParseToken(token, parseMs);
  20206. }
  20207. getSetMillisecond = makeGetSet('Milliseconds', false);
  20208. // FORMATTING
  20209. addFormatToken('z', 0, 0, 'zoneAbbr');
  20210. addFormatToken('zz', 0, 0, 'zoneName');
  20211. // MOMENTS
  20212. function getZoneAbbr() {
  20213. return this._isUTC ? 'UTC' : '';
  20214. }
  20215. function getZoneName() {
  20216. return this._isUTC ? 'Coordinated Universal Time' : '';
  20217. }
  20218. var proto = Moment.prototype;
  20219. proto.add = add;
  20220. proto.calendar = calendar$1;
  20221. proto.clone = clone;
  20222. proto.diff = diff;
  20223. proto.endOf = endOf;
  20224. proto.format = format;
  20225. proto.from = from;
  20226. proto.fromNow = fromNow;
  20227. proto.to = to;
  20228. proto.toNow = toNow;
  20229. proto.get = stringGet;
  20230. proto.invalidAt = invalidAt;
  20231. proto.isAfter = isAfter;
  20232. proto.isBefore = isBefore;
  20233. proto.isBetween = isBetween;
  20234. proto.isSame = isSame;
  20235. proto.isSameOrAfter = isSameOrAfter;
  20236. proto.isSameOrBefore = isSameOrBefore;
  20237. proto.isValid = isValid$2;
  20238. proto.lang = lang;
  20239. proto.locale = locale;
  20240. proto.localeData = localeData;
  20241. proto.max = prototypeMax;
  20242. proto.min = prototypeMin;
  20243. proto.parsingFlags = parsingFlags;
  20244. proto.set = stringSet;
  20245. proto.startOf = startOf;
  20246. proto.subtract = subtract;
  20247. proto.toArray = toArray;
  20248. proto.toObject = toObject;
  20249. proto.toDate = toDate;
  20250. proto.toISOString = toISOString;
  20251. proto.inspect = inspect;
  20252. if (typeof Symbol !== 'undefined' && Symbol.for != null) {
  20253. proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
  20254. return 'Moment<' + this.format() + '>';
  20255. };
  20256. }
  20257. proto.toJSON = toJSON;
  20258. proto.toString = toString;
  20259. proto.unix = unix;
  20260. proto.valueOf = valueOf;
  20261. proto.creationData = creationData;
  20262. proto.eraName = getEraName;
  20263. proto.eraNarrow = getEraNarrow;
  20264. proto.eraAbbr = getEraAbbr;
  20265. proto.eraYear = getEraYear;
  20266. proto.year = getSetYear;
  20267. proto.isLeapYear = getIsLeapYear;
  20268. proto.weekYear = getSetWeekYear;
  20269. proto.isoWeekYear = getSetISOWeekYear;
  20270. proto.quarter = proto.quarters = getSetQuarter;
  20271. proto.month = getSetMonth;
  20272. proto.daysInMonth = getDaysInMonth;
  20273. proto.week = proto.weeks = getSetWeek;
  20274. proto.isoWeek = proto.isoWeeks = getSetISOWeek;
  20275. proto.weeksInYear = getWeeksInYear;
  20276. proto.weeksInWeekYear = getWeeksInWeekYear;
  20277. proto.isoWeeksInYear = getISOWeeksInYear;
  20278. proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
  20279. proto.date = getSetDayOfMonth;
  20280. proto.day = proto.days = getSetDayOfWeek;
  20281. proto.weekday = getSetLocaleDayOfWeek;
  20282. proto.isoWeekday = getSetISODayOfWeek;
  20283. proto.dayOfYear = getSetDayOfYear;
  20284. proto.hour = proto.hours = getSetHour;
  20285. proto.minute = proto.minutes = getSetMinute;
  20286. proto.second = proto.seconds = getSetSecond;
  20287. proto.millisecond = proto.milliseconds = getSetMillisecond;
  20288. proto.utcOffset = getSetOffset;
  20289. proto.utc = setOffsetToUTC;
  20290. proto.local = setOffsetToLocal;
  20291. proto.parseZone = setOffsetToParsedOffset;
  20292. proto.hasAlignedHourOffset = hasAlignedHourOffset;
  20293. proto.isDST = isDaylightSavingTime;
  20294. proto.isLocal = isLocal;
  20295. proto.isUtcOffset = isUtcOffset;
  20296. proto.isUtc = isUtc;
  20297. proto.isUTC = isUtc;
  20298. proto.zoneAbbr = getZoneAbbr;
  20299. proto.zoneName = getZoneName;
  20300. proto.dates = deprecate(
  20301. 'dates accessor is deprecated. Use date instead.',
  20302. getSetDayOfMonth
  20303. );
  20304. proto.months = deprecate(
  20305. 'months accessor is deprecated. Use month instead',
  20306. getSetMonth
  20307. );
  20308. proto.years = deprecate(
  20309. 'years accessor is deprecated. Use year instead',
  20310. getSetYear
  20311. );
  20312. proto.zone = deprecate(
  20313. 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
  20314. getSetZone
  20315. );
  20316. proto.isDSTShifted = deprecate(
  20317. 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
  20318. isDaylightSavingTimeShifted
  20319. );
  20320. function createUnix(input) {
  20321. return createLocal(input * 1000);
  20322. }
  20323. function createInZone() {
  20324. return createLocal.apply(null, arguments).parseZone();
  20325. }
  20326. function preParsePostFormat(string) {
  20327. return string;
  20328. }
  20329. var proto$1 = Locale.prototype;
  20330. proto$1.calendar = calendar;
  20331. proto$1.longDateFormat = longDateFormat;
  20332. proto$1.invalidDate = invalidDate;
  20333. proto$1.ordinal = ordinal;
  20334. proto$1.preparse = preParsePostFormat;
  20335. proto$1.postformat = preParsePostFormat;
  20336. proto$1.relativeTime = relativeTime;
  20337. proto$1.pastFuture = pastFuture;
  20338. proto$1.set = set;
  20339. proto$1.eras = localeEras;
  20340. proto$1.erasParse = localeErasParse;
  20341. proto$1.erasConvertYear = localeErasConvertYear;
  20342. proto$1.erasAbbrRegex = erasAbbrRegex;
  20343. proto$1.erasNameRegex = erasNameRegex;
  20344. proto$1.erasNarrowRegex = erasNarrowRegex;
  20345. proto$1.months = localeMonths;
  20346. proto$1.monthsShort = localeMonthsShort;
  20347. proto$1.monthsParse = localeMonthsParse;
  20348. proto$1.monthsRegex = monthsRegex;
  20349. proto$1.monthsShortRegex = monthsShortRegex;
  20350. proto$1.week = localeWeek;
  20351. proto$1.firstDayOfYear = localeFirstDayOfYear;
  20352. proto$1.firstDayOfWeek = localeFirstDayOfWeek;
  20353. proto$1.weekdays = localeWeekdays;
  20354. proto$1.weekdaysMin = localeWeekdaysMin;
  20355. proto$1.weekdaysShort = localeWeekdaysShort;
  20356. proto$1.weekdaysParse = localeWeekdaysParse;
  20357. proto$1.weekdaysRegex = weekdaysRegex;
  20358. proto$1.weekdaysShortRegex = weekdaysShortRegex;
  20359. proto$1.weekdaysMinRegex = weekdaysMinRegex;
  20360. proto$1.isPM = localeIsPM;
  20361. proto$1.meridiem = localeMeridiem;
  20362. function get$1(format, index, field, setter) {
  20363. var locale = getLocale(),
  20364. utc = createUTC().set(setter, index);
  20365. return locale[field](utc, format);
  20366. }
  20367. function listMonthsImpl(format, index, field) {
  20368. if (isNumber(format)) {
  20369. index = format;
  20370. format = undefined;
  20371. }
  20372. format = format || '';
  20373. if (index != null) {
  20374. return get$1(format, index, field, 'month');
  20375. }
  20376. var i,
  20377. out = [];
  20378. for (i = 0; i < 12; i++) {
  20379. out[i] = get$1(format, i, field, 'month');
  20380. }
  20381. return out;
  20382. }
  20383. // ()
  20384. // (5)
  20385. // (fmt, 5)
  20386. // (fmt)
  20387. // (true)
  20388. // (true, 5)
  20389. // (true, fmt, 5)
  20390. // (true, fmt)
  20391. function listWeekdaysImpl(localeSorted, format, index, field) {
  20392. if (typeof localeSorted === 'boolean') {
  20393. if (isNumber(format)) {
  20394. index = format;
  20395. format = undefined;
  20396. }
  20397. format = format || '';
  20398. } else {
  20399. format = localeSorted;
  20400. index = format;
  20401. localeSorted = false;
  20402. if (isNumber(format)) {
  20403. index = format;
  20404. format = undefined;
  20405. }
  20406. format = format || '';
  20407. }
  20408. var locale = getLocale(),
  20409. shift = localeSorted ? locale._week.dow : 0,
  20410. i,
  20411. out = [];
  20412. if (index != null) {
  20413. return get$1(format, (index + shift) % 7, field, 'day');
  20414. }
  20415. for (i = 0; i < 7; i++) {
  20416. out[i] = get$1(format, (i + shift) % 7, field, 'day');
  20417. }
  20418. return out;
  20419. }
  20420. function listMonths(format, index) {
  20421. return listMonthsImpl(format, index, 'months');
  20422. }
  20423. function listMonthsShort(format, index) {
  20424. return listMonthsImpl(format, index, 'monthsShort');
  20425. }
  20426. function listWeekdays(localeSorted, format, index) {
  20427. return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
  20428. }
  20429. function listWeekdaysShort(localeSorted, format, index) {
  20430. return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
  20431. }
  20432. function listWeekdaysMin(localeSorted, format, index) {
  20433. return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
  20434. }
  20435. getSetGlobalLocale('en', {
  20436. eras: [
  20437. {
  20438. since: '0001-01-01',
  20439. until: +Infinity,
  20440. offset: 1,
  20441. name: 'Anno Domini',
  20442. narrow: 'AD',
  20443. abbr: 'AD',
  20444. },
  20445. {
  20446. since: '0000-12-31',
  20447. until: -Infinity,
  20448. offset: 1,
  20449. name: 'Before Christ',
  20450. narrow: 'BC',
  20451. abbr: 'BC',
  20452. },
  20453. ],
  20454. dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
  20455. ordinal: function (number) {
  20456. var b = number % 10,
  20457. output =
  20458. toInt((number % 100) / 10) === 1
  20459. ? 'th'
  20460. : b === 1
  20461. ? 'st'
  20462. : b === 2
  20463. ? 'nd'
  20464. : b === 3
  20465. ? 'rd'
  20466. : 'th';
  20467. return number + output;
  20468. },
  20469. });
  20470. // Side effect imports
  20471. hooks.lang = deprecate(
  20472. 'moment.lang is deprecated. Use moment.locale instead.',
  20473. getSetGlobalLocale
  20474. );
  20475. hooks.langData = deprecate(
  20476. 'moment.langData is deprecated. Use moment.localeData instead.',
  20477. getLocale
  20478. );
  20479. var mathAbs = Math.abs;
  20480. function abs() {
  20481. var data = this._data;
  20482. this._milliseconds = mathAbs(this._milliseconds);
  20483. this._days = mathAbs(this._days);
  20484. this._months = mathAbs(this._months);
  20485. data.milliseconds = mathAbs(data.milliseconds);
  20486. data.seconds = mathAbs(data.seconds);
  20487. data.minutes = mathAbs(data.minutes);
  20488. data.hours = mathAbs(data.hours);
  20489. data.months = mathAbs(data.months);
  20490. data.years = mathAbs(data.years);
  20491. return this;
  20492. }
  20493. function addSubtract$1(duration, input, value, direction) {
  20494. var other = createDuration(input, value);
  20495. duration._milliseconds += direction * other._milliseconds;
  20496. duration._days += direction * other._days;
  20497. duration._months += direction * other._months;
  20498. return duration._bubble();
  20499. }
  20500. // supports only 2.0-style add(1, 's') or add(duration)
  20501. function add$1(input, value) {
  20502. return addSubtract$1(this, input, value, 1);
  20503. }
  20504. // supports only 2.0-style subtract(1, 's') or subtract(duration)
  20505. function subtract$1(input, value) {
  20506. return addSubtract$1(this, input, value, -1);
  20507. }
  20508. function absCeil(number) {
  20509. if (number < 0) {
  20510. return Math.floor(number);
  20511. } else {
  20512. return Math.ceil(number);
  20513. }
  20514. }
  20515. function bubble() {
  20516. var milliseconds = this._milliseconds,
  20517. days = this._days,
  20518. months = this._months,
  20519. data = this._data,
  20520. seconds,
  20521. minutes,
  20522. hours,
  20523. years,
  20524. monthsFromDays;
  20525. // if we have a mix of positive and negative values, bubble down first
  20526. // check: https://github.com/moment/moment/issues/2166
  20527. if (
  20528. !(
  20529. (milliseconds >= 0 && days >= 0 && months >= 0) ||
  20530. (milliseconds <= 0 && days <= 0 && months <= 0)
  20531. )
  20532. ) {
  20533. milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
  20534. days = 0;
  20535. months = 0;
  20536. }
  20537. // The following code bubbles up values, see the tests for
  20538. // examples of what that means.
  20539. data.milliseconds = milliseconds % 1000;
  20540. seconds = absFloor(milliseconds / 1000);
  20541. data.seconds = seconds % 60;
  20542. minutes = absFloor(seconds / 60);
  20543. data.minutes = minutes % 60;
  20544. hours = absFloor(minutes / 60);
  20545. data.hours = hours % 24;
  20546. days += absFloor(hours / 24);
  20547. // convert days to months
  20548. monthsFromDays = absFloor(daysToMonths(days));
  20549. months += monthsFromDays;
  20550. days -= absCeil(monthsToDays(monthsFromDays));
  20551. // 12 months -> 1 year
  20552. years = absFloor(months / 12);
  20553. months %= 12;
  20554. data.days = days;
  20555. data.months = months;
  20556. data.years = years;
  20557. return this;
  20558. }
  20559. function daysToMonths(days) {
  20560. // 400 years have 146097 days (taking into account leap year rules)
  20561. // 400 years have 12 months === 4800
  20562. return (days * 4800) / 146097;
  20563. }
  20564. function monthsToDays(months) {
  20565. // the reverse of daysToMonths
  20566. return (months * 146097) / 4800;
  20567. }
  20568. function as(units) {
  20569. if (!this.isValid()) {
  20570. return NaN;
  20571. }
  20572. var days,
  20573. months,
  20574. milliseconds = this._milliseconds;
  20575. units = normalizeUnits(units);
  20576. if (units === 'month' || units === 'quarter' || units === 'year') {
  20577. days = this._days + milliseconds / 864e5;
  20578. months = this._months + daysToMonths(days);
  20579. switch (units) {
  20580. case 'month':
  20581. return months;
  20582. case 'quarter':
  20583. return months / 3;
  20584. case 'year':
  20585. return months / 12;
  20586. }
  20587. } else {
  20588. // handle milliseconds separately because of floating point math errors (issue #1867)
  20589. days = this._days + Math.round(monthsToDays(this._months));
  20590. switch (units) {
  20591. case 'week':
  20592. return days / 7 + milliseconds / 6048e5;
  20593. case 'day':
  20594. return days + milliseconds / 864e5;
  20595. case 'hour':
  20596. return days * 24 + milliseconds / 36e5;
  20597. case 'minute':
  20598. return days * 1440 + milliseconds / 6e4;
  20599. case 'second':
  20600. return days * 86400 + milliseconds / 1000;
  20601. // Math.floor prevents floating point math errors here
  20602. case 'millisecond':
  20603. return Math.floor(days * 864e5) + milliseconds;
  20604. default:
  20605. throw new Error('Unknown unit ' + units);
  20606. }
  20607. }
  20608. }
  20609. // TODO: Use this.as('ms')?
  20610. function valueOf$1() {
  20611. if (!this.isValid()) {
  20612. return NaN;
  20613. }
  20614. return (
  20615. this._milliseconds +
  20616. this._days * 864e5 +
  20617. (this._months % 12) * 2592e6 +
  20618. toInt(this._months / 12) * 31536e6
  20619. );
  20620. }
  20621. function makeAs(alias) {
  20622. return function () {
  20623. return this.as(alias);
  20624. };
  20625. }
  20626. var asMilliseconds = makeAs('ms'),
  20627. asSeconds = makeAs('s'),
  20628. asMinutes = makeAs('m'),
  20629. asHours = makeAs('h'),
  20630. asDays = makeAs('d'),
  20631. asWeeks = makeAs('w'),
  20632. asMonths = makeAs('M'),
  20633. asQuarters = makeAs('Q'),
  20634. asYears = makeAs('y');
  20635. function clone$1() {
  20636. return createDuration(this);
  20637. }
  20638. function get$2(units) {
  20639. units = normalizeUnits(units);
  20640. return this.isValid() ? this[units + 's']() : NaN;
  20641. }
  20642. function makeGetter(name) {
  20643. return function () {
  20644. return this.isValid() ? this._data[name] : NaN;
  20645. };
  20646. }
  20647. var milliseconds = makeGetter('milliseconds'),
  20648. seconds = makeGetter('seconds'),
  20649. minutes = makeGetter('minutes'),
  20650. hours = makeGetter('hours'),
  20651. days = makeGetter('days'),
  20652. months = makeGetter('months'),
  20653. years = makeGetter('years');
  20654. function weeks() {
  20655. return absFloor(this.days() / 7);
  20656. }
  20657. var round = Math.round,
  20658. thresholds = {
  20659. ss: 44, // a few seconds to seconds
  20660. s: 45, // seconds to minute
  20661. m: 45, // minutes to hour
  20662. h: 22, // hours to day
  20663. d: 26, // days to month/week
  20664. w: null, // weeks to month
  20665. M: 11, // months to year
  20666. };
  20667. // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
  20668. function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
  20669. return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
  20670. }
  20671. function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
  20672. var duration = createDuration(posNegDuration).abs(),
  20673. seconds = round(duration.as('s')),
  20674. minutes = round(duration.as('m')),
  20675. hours = round(duration.as('h')),
  20676. days = round(duration.as('d')),
  20677. months = round(duration.as('M')),
  20678. weeks = round(duration.as('w')),
  20679. years = round(duration.as('y')),
  20680. a =
  20681. (seconds <= thresholds.ss && ['s', seconds]) ||
  20682. (seconds < thresholds.s && ['ss', seconds]) ||
  20683. (minutes <= 1 && ['m']) ||
  20684. (minutes < thresholds.m && ['mm', minutes]) ||
  20685. (hours <= 1 && ['h']) ||
  20686. (hours < thresholds.h && ['hh', hours]) ||
  20687. (days <= 1 && ['d']) ||
  20688. (days < thresholds.d && ['dd', days]);
  20689. if (thresholds.w != null) {
  20690. a =
  20691. a ||
  20692. (weeks <= 1 && ['w']) ||
  20693. (weeks < thresholds.w && ['ww', weeks]);
  20694. }
  20695. a = a ||
  20696. (months <= 1 && ['M']) ||
  20697. (months < thresholds.M && ['MM', months]) ||
  20698. (years <= 1 && ['y']) || ['yy', years];
  20699. a[2] = withoutSuffix;
  20700. a[3] = +posNegDuration > 0;
  20701. a[4] = locale;
  20702. return substituteTimeAgo.apply(null, a);
  20703. }
  20704. // This function allows you to set the rounding function for relative time strings
  20705. function getSetRelativeTimeRounding(roundingFunction) {
  20706. if (roundingFunction === undefined) {
  20707. return round;
  20708. }
  20709. if (typeof roundingFunction === 'function') {
  20710. round = roundingFunction;
  20711. return true;
  20712. }
  20713. return false;
  20714. }
  20715. // This function allows you to set a threshold for relative time strings
  20716. function getSetRelativeTimeThreshold(threshold, limit) {
  20717. if (thresholds[threshold] === undefined) {
  20718. return false;
  20719. }
  20720. if (limit === undefined) {
  20721. return thresholds[threshold];
  20722. }
  20723. thresholds[threshold] = limit;
  20724. if (threshold === 's') {
  20725. thresholds.ss = limit - 1;
  20726. }
  20727. return true;
  20728. }
  20729. function humanize(argWithSuffix, argThresholds) {
  20730. if (!this.isValid()) {
  20731. return this.localeData().invalidDate();
  20732. }
  20733. var withSuffix = false,
  20734. th = thresholds,
  20735. locale,
  20736. output;
  20737. if (typeof argWithSuffix === 'object') {
  20738. argThresholds = argWithSuffix;
  20739. argWithSuffix = false;
  20740. }
  20741. if (typeof argWithSuffix === 'boolean') {
  20742. withSuffix = argWithSuffix;
  20743. }
  20744. if (typeof argThresholds === 'object') {
  20745. th = Object.assign({}, thresholds, argThresholds);
  20746. if (argThresholds.s != null && argThresholds.ss == null) {
  20747. th.ss = argThresholds.s - 1;
  20748. }
  20749. }
  20750. locale = this.localeData();
  20751. output = relativeTime$1(this, !withSuffix, th, locale);
  20752. if (withSuffix) {
  20753. output = locale.pastFuture(+this, output);
  20754. }
  20755. return locale.postformat(output);
  20756. }
  20757. var abs$1 = Math.abs;
  20758. function sign(x) {
  20759. return (x > 0) - (x < 0) || +x;
  20760. }
  20761. function toISOString$1() {
  20762. // for ISO strings we do not use the normal bubbling rules:
  20763. // * milliseconds bubble up until they become hours
  20764. // * days do not bubble at all
  20765. // * months bubble up until they become years
  20766. // This is because there is no context-free conversion between hours and days
  20767. // (think of clock changes)
  20768. // and also not between days and months (28-31 days per month)
  20769. if (!this.isValid()) {
  20770. return this.localeData().invalidDate();
  20771. }
  20772. var seconds = abs$1(this._milliseconds) / 1000,
  20773. days = abs$1(this._days),
  20774. months = abs$1(this._months),
  20775. minutes,
  20776. hours,
  20777. years,
  20778. s,
  20779. total = this.asSeconds(),
  20780. totalSign,
  20781. ymSign,
  20782. daysSign,
  20783. hmsSign;
  20784. if (!total) {
  20785. // this is the same as C#'s (Noda) and python (isodate)...
  20786. // but not other JS (goog.date)
  20787. return 'P0D';
  20788. }
  20789. // 3600 seconds -> 60 minutes -> 1 hour
  20790. minutes = absFloor(seconds / 60);
  20791. hours = absFloor(minutes / 60);
  20792. seconds %= 60;
  20793. minutes %= 60;
  20794. // 12 months -> 1 year
  20795. years = absFloor(months / 12);
  20796. months %= 12;
  20797. // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
  20798. s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
  20799. totalSign = total < 0 ? '-' : '';
  20800. ymSign = sign(this._months) !== sign(total) ? '-' : '';
  20801. daysSign = sign(this._days) !== sign(total) ? '-' : '';
  20802. hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
  20803. return (
  20804. totalSign +
  20805. 'P' +
  20806. (years ? ymSign + years + 'Y' : '') +
  20807. (months ? ymSign + months + 'M' : '') +
  20808. (days ? daysSign + days + 'D' : '') +
  20809. (hours || minutes || seconds ? 'T' : '') +
  20810. (hours ? hmsSign + hours + 'H' : '') +
  20811. (minutes ? hmsSign + minutes + 'M' : '') +
  20812. (seconds ? hmsSign + s + 'S' : '')
  20813. );
  20814. }
  20815. var proto$2 = Duration.prototype;
  20816. proto$2.isValid = isValid$1;
  20817. proto$2.abs = abs;
  20818. proto$2.add = add$1;
  20819. proto$2.subtract = subtract$1;
  20820. proto$2.as = as;
  20821. proto$2.asMilliseconds = asMilliseconds;
  20822. proto$2.asSeconds = asSeconds;
  20823. proto$2.asMinutes = asMinutes;
  20824. proto$2.asHours = asHours;
  20825. proto$2.asDays = asDays;
  20826. proto$2.asWeeks = asWeeks;
  20827. proto$2.asMonths = asMonths;
  20828. proto$2.asQuarters = asQuarters;
  20829. proto$2.asYears = asYears;
  20830. proto$2.valueOf = valueOf$1;
  20831. proto$2._bubble = bubble;
  20832. proto$2.clone = clone$1;
  20833. proto$2.get = get$2;
  20834. proto$2.milliseconds = milliseconds;
  20835. proto$2.seconds = seconds;
  20836. proto$2.minutes = minutes;
  20837. proto$2.hours = hours;
  20838. proto$2.days = days;
  20839. proto$2.weeks = weeks;
  20840. proto$2.months = months;
  20841. proto$2.years = years;
  20842. proto$2.humanize = humanize;
  20843. proto$2.toISOString = toISOString$1;
  20844. proto$2.toString = toISOString$1;
  20845. proto$2.toJSON = toISOString$1;
  20846. proto$2.locale = locale;
  20847. proto$2.localeData = localeData;
  20848. proto$2.toIsoString = deprecate(
  20849. 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
  20850. toISOString$1
  20851. );
  20852. proto$2.lang = lang;
  20853. // FORMATTING
  20854. addFormatToken('X', 0, 0, 'unix');
  20855. addFormatToken('x', 0, 0, 'valueOf');
  20856. // PARSING
  20857. addRegexToken('x', matchSigned);
  20858. addRegexToken('X', matchTimestamp);
  20859. addParseToken('X', function (input, array, config) {
  20860. config._d = new Date(parseFloat(input) * 1000);
  20861. });
  20862. addParseToken('x', function (input, array, config) {
  20863. config._d = new Date(toInt(input));
  20864. });
  20865. //! moment.js
  20866. hooks.version = '2.29.1';
  20867. setHookCallback(createLocal);
  20868. hooks.fn = proto;
  20869. hooks.min = min;
  20870. hooks.max = max;
  20871. hooks.now = now;
  20872. hooks.utc = createUTC;
  20873. hooks.unix = createUnix;
  20874. hooks.months = listMonths;
  20875. hooks.isDate = isDate;
  20876. hooks.locale = getSetGlobalLocale;
  20877. hooks.invalid = createInvalid;
  20878. hooks.duration = createDuration;
  20879. hooks.isMoment = isMoment;
  20880. hooks.weekdays = listWeekdays;
  20881. hooks.parseZone = createInZone;
  20882. hooks.localeData = getLocale;
  20883. hooks.isDuration = isDuration;
  20884. hooks.monthsShort = listMonthsShort;
  20885. hooks.weekdaysMin = listWeekdaysMin;
  20886. hooks.defineLocale = defineLocale;
  20887. hooks.updateLocale = updateLocale;
  20888. hooks.locales = listLocales;
  20889. hooks.weekdaysShort = listWeekdaysShort;
  20890. hooks.normalizeUnits = normalizeUnits;
  20891. hooks.relativeTimeRounding = getSetRelativeTimeRounding;
  20892. hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
  20893. hooks.calendarFormat = getCalendarFormat;
  20894. hooks.prototype = proto;
  20895. // currently HTML5 input type only supports 24-hour formats
  20896. hooks.HTML5_FMT = {
  20897. DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
  20898. DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
  20899. DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
  20900. DATE: 'YYYY-MM-DD', // <input type="date" />
  20901. TIME: 'HH:mm', // <input type="time" />
  20902. TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
  20903. TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
  20904. WEEK: 'GGGG-[W]WW', // <input type="week" />
  20905. MONTH: 'YYYY-MM', // <input type="month" />
  20906. };
  20907. /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hooks);
  20908. /***/ }),
  20909. /***/ "./node_modules/select2/dist/js/i18n/fr.js":
  20910. /*!*************************************************!*\
  20911. !*** ./node_modules/select2/dist/js/i18n/fr.js ***!
  20912. \*************************************************/
  20913. /***/ (() => {
  20914. /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
  20915. !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/fr",[],function(){return{errorLoading:function(){return"Les résultats ne peuvent pas être chargés."},inputTooLong:function(e){var n=e.input.length-e.maximum;return"Supprimez "+n+" caractère"+(n>1?"s":"")},inputTooShort:function(e){var n=e.minimum-e.input.length;return"Saisissez au moins "+n+" caractère"+(n>1?"s":"")},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){return"Vous pouvez seulement sélectionner "+e.maximum+" élément"+(e.maximum>1?"s":"")},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"},removeAllItems:function(){return"Supprimer tous les éléments"}}}),e.define,e.require}();
  20916. /***/ }),
  20917. /***/ "./node_modules/select2/dist/js/select2.min.js":
  20918. /*!*****************************************************!*\
  20919. !*** ./node_modules/select2/dist/js/select2.min.js ***!
  20920. \*****************************************************/
  20921. /***/ ((module, exports, __webpack_require__) => {
  20922. var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */
  20923. !function(n){ true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "./node_modules/jquery/src/jquery.js")], __WEBPACK_AMD_DEFINE_FACTORY__ = (n),
  20924. __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
  20925. (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
  20926. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):0}(function(u){var e=function(){if(u&&u.fn&&u.fn.select2&&u.fn.select2.amd)var e=u.fn.select2.amd;var t,n,r,h,o,s,f,g,m,v,y,_,i,a,b;function w(e,t){return i.call(e,t)}function l(e,t){var n,r,i,o,s,a,l,c,u,d,p,h=t&&t.split("/"),f=y.map,g=f&&f["*"]||{};if(e){for(s=(e=e.split("/")).length-1,y.nodeIdCompat&&b.test(e[s])&&(e[s]=e[s].replace(b,"")),"."===e[0].charAt(0)&&h&&(e=h.slice(0,h.length-1).concat(e)),u=0;u<e.length;u++)if("."===(p=e[u]))e.splice(u,1),--u;else if(".."===p){if(0===u||1===u&&".."===e[2]||".."===e[u-1])continue;0<u&&(e.splice(u-1,2),u-=2)}e=e.join("/")}if((h||g)&&f){for(u=(n=e.split("/")).length;0<u;--u){if(r=n.slice(0,u).join("/"),h)for(d=h.length;0<d;--d)if(i=(i=f[h.slice(0,d).join("/")])&&i[r]){o=i,a=u;break}if(o)break;!l&&g&&g[r]&&(l=g[r],c=u)}!o&&l&&(o=l,a=c),o&&(n.splice(0,a,o),e=n.join("/"))}return e}function A(t,n){return function(){var e=a.call(arguments,0);return"string"!=typeof e[0]&&1===e.length&&e.push(null),s.apply(h,e.concat([t,n]))}}function x(t){return function(e){m[t]=e}}function D(e){if(w(v,e)){var t=v[e];delete v[e],_[e]=!0,o.apply(h,t)}if(!w(m,e)&&!w(_,e))throw new Error("No "+e);return m[e]}function c(e){var t,n=e?e.indexOf("!"):-1;return-1<n&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function S(e){return e?c(e):[]}return e&&e.requirejs||(e?n=e:e={},m={},v={},y={},_={},i=Object.prototype.hasOwnProperty,a=[].slice,b=/\.js$/,f=function(e,t){var n,r,i=c(e),o=i[0],s=t[1];return e=i[1],o&&(n=D(o=l(o,s))),o?e=n&&n.normalize?n.normalize(e,(r=s,function(e){return l(e,r)})):l(e,s):(o=(i=c(e=l(e,s)))[0],e=i[1],o&&(n=D(o))),{f:o?o+"!"+e:e,n:e,pr:o,p:n}},g={require:function(e){return A(e)},exports:function(e){var t=m[e];return void 0!==t?t:m[e]={}},module:function(e){return{id:e,uri:"",exports:m[e],config:(t=e,function(){return y&&y.config&&y.config[t]||{}})};var t}},o=function(e,t,n,r){var i,o,s,a,l,c,u,d=[],p=typeof n;if(c=S(r=r||e),"undefined"==p||"function"==p){for(t=!t.length&&n.length?["require","exports","module"]:t,l=0;l<t.length;l+=1)if("require"===(o=(a=f(t[l],c)).f))d[l]=g.require(e);else if("exports"===o)d[l]=g.exports(e),u=!0;else if("module"===o)i=d[l]=g.module(e);else if(w(m,o)||w(v,o)||w(_,o))d[l]=D(o);else{if(!a.p)throw new Error(e+" missing "+o);a.p.load(a.n,A(r,!0),x(o),{}),d[l]=m[o]}s=n?n.apply(m[e],d):void 0,e&&(i&&i.exports!==h&&i.exports!==m[e]?m[e]=i.exports:s===h&&u||(m[e]=s))}else e&&(m[e]=n)},t=n=s=function(e,t,n,r,i){if("string"==typeof e)return g[e]?g[e](t):D(f(e,S(t)).f);if(!e.splice){if((y=e).deps&&s(y.deps,y.callback),!t)return;t.splice?(e=t,t=n,n=null):e=h}return t=t||function(){},"function"==typeof n&&(n=r,r=i),r?o(h,e,t,n):setTimeout(function(){o(h,e,t,n)},4),s},s.config=function(e){return s(e)},t._defined=m,(r=function(e,t,n){if("string"!=typeof e)throw new Error("See almond README: incorrect module build, no module name");t.splice||(n=t,t=[]),w(m,e)||w(v,e)||(v[e]=[e,t,n])}).amd={jQuery:!0},e.requirejs=t,e.require=n,e.define=r),e.define("almond",function(){}),e.define("jquery",[],function(){var e=u||$;return null==e&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),e}),e.define("select2/utils",["jquery"],function(o){var i={};function u(e){var t=e.prototype,n=[];for(var r in t){"function"==typeof t[r]&&"constructor"!==r&&n.push(r)}return n}i.Extend=function(e,t){var n={}.hasOwnProperty;function r(){this.constructor=e}for(var i in t)n.call(t,i)&&(e[i]=t[i]);return r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype,e},i.Decorate=function(r,i){var e=u(i),t=u(r);function o(){var e=Array.prototype.unshift,t=i.prototype.constructor.length,n=r.prototype.constructor;0<t&&(e.call(arguments,r.prototype.constructor),n=i.prototype.constructor),n.apply(this,arguments)}i.displayName=r.displayName,o.prototype=new function(){this.constructor=o};for(var n=0;n<t.length;n++){var s=t[n];o.prototype[s]=r.prototype[s]}function a(e){var t=function(){};e in o.prototype&&(t=o.prototype[e]);var n=i.prototype[e];return function(){return Array.prototype.unshift.call(arguments,t),n.apply(this,arguments)}}for(var l=0;l<e.length;l++){var c=e[l];o.prototype[c]=a(c)}return o};function e(){this.listeners={}}e.prototype.on=function(e,t){this.listeners=this.listeners||{},e in this.listeners?this.listeners[e].push(t):this.listeners[e]=[t]},e.prototype.trigger=function(e){var t=Array.prototype.slice,n=t.call(arguments,1);this.listeners=this.listeners||{},null==n&&(n=[]),0===n.length&&n.push({}),(n[0]._type=e)in this.listeners&&this.invoke(this.listeners[e],t.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},e.prototype.invoke=function(e,t){for(var n=0,r=e.length;n<r;n++)e[n].apply(this,t)},i.Observable=e,i.generateChars=function(e){for(var t="",n=0;n<e;n++){t+=Math.floor(36*Math.random()).toString(36)}return t},i.bind=function(e,t){return function(){e.apply(t,arguments)}},i._convertData=function(e){for(var t in e){var n=t.split("-"),r=e;if(1!==n.length){for(var i=0;i<n.length;i++){var o=n[i];(o=o.substring(0,1).toLowerCase()+o.substring(1))in r||(r[o]={}),i==n.length-1&&(r[o]=e[t]),r=r[o]}delete e[t]}}return e},i.hasScroll=function(e,t){var n=o(t),r=t.style.overflowX,i=t.style.overflowY;return(r!==i||"hidden"!==i&&"visible"!==i)&&("scroll"===r||"scroll"===i||(n.innerHeight()<t.scrollHeight||n.innerWidth()<t.scrollWidth))},i.escapeMarkup=function(e){var t={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof e?e:String(e).replace(/[&<>"'\/\\]/g,function(e){return t[e]})},i.appendMany=function(e,t){if("1.7"===o.fn.jquery.substr(0,3)){var n=o();o.map(t,function(e){n=n.add(e)}),t=n}e.append(t)},i.__cache={};var n=0;return i.GetUniqueElementId=function(e){var t=e.getAttribute("data-select2-id");return null==t&&(e.id?(t=e.id,e.setAttribute("data-select2-id",t)):(e.setAttribute("data-select2-id",++n),t=n.toString())),t},i.StoreData=function(e,t,n){var r=i.GetUniqueElementId(e);i.__cache[r]||(i.__cache[r]={}),i.__cache[r][t]=n},i.GetData=function(e,t){var n=i.GetUniqueElementId(e);return t?i.__cache[n]&&null!=i.__cache[n][t]?i.__cache[n][t]:o(e).data(t):i.__cache[n]},i.RemoveData=function(e){var t=i.GetUniqueElementId(e);null!=i.__cache[t]&&delete i.__cache[t],e.removeAttribute("data-select2-id")},i}),e.define("select2/results",["jquery","./utils"],function(h,f){function r(e,t,n){this.$element=e,this.data=n,this.options=t,r.__super__.constructor.call(this)}return f.Extend(r,f.Observable),r.prototype.render=function(){var e=h('<ul class="select2-results__options" role="listbox"></ul>');return this.options.get("multiple")&&e.attr("aria-multiselectable","true"),this.$results=e},r.prototype.clear=function(){this.$results.empty()},r.prototype.displayMessage=function(e){var t=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var n=h('<li role="alert" aria-live="assertive" class="select2-results__option"></li>'),r=this.options.get("translations").get(e.message);n.append(t(r(e.args))),n[0].className+=" select2-results__message",this.$results.append(n)},r.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},r.prototype.append=function(e){this.hideLoading();var t=[];if(null!=e.results&&0!==e.results.length){e.results=this.sort(e.results);for(var n=0;n<e.results.length;n++){var r=e.results[n],i=this.option(r);t.push(i)}this.$results.append(t)}else 0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"})},r.prototype.position=function(e,t){t.find(".select2-results").append(e)},r.prototype.sort=function(e){return this.options.get("sorter")(e)},r.prototype.highlightFirstItem=function(){var e=this.$results.find(".select2-results__option[aria-selected]"),t=e.filter("[aria-selected=true]");0<t.length?t.first().trigger("mouseenter"):e.first().trigger("mouseenter"),this.ensureHighlightVisible()},r.prototype.setClasses=function(){var t=this;this.data.current(function(e){var r=h.map(e,function(e){return e.id.toString()});t.$results.find(".select2-results__option[aria-selected]").each(function(){var e=h(this),t=f.GetData(this,"data"),n=""+t.id;null!=t.element&&t.element.selected||null==t.element&&-1<h.inArray(n,r)?e.attr("aria-selected","true"):e.attr("aria-selected","false")})})},r.prototype.showLoading=function(e){this.hideLoading();var t={disabled:!0,loading:!0,text:this.options.get("translations").get("searching")(e)},n=this.option(t);n.className+=" loading-results",this.$results.prepend(n)},r.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},r.prototype.option=function(e){var t=document.createElement("li");t.className="select2-results__option";var n={role:"option","aria-selected":"false"},r=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var i in(null!=e.element&&r.call(e.element,":disabled")||null==e.element&&e.disabled)&&(delete n["aria-selected"],n["aria-disabled"]="true"),null==e.id&&delete n["aria-selected"],null!=e._resultId&&(t.id=e._resultId),e.title&&(t.title=e.title),e.children&&(n.role="group",n["aria-label"]=e.text,delete n["aria-selected"]),n){var o=n[i];t.setAttribute(i,o)}if(e.children){var s=h(t),a=document.createElement("strong");a.className="select2-results__group";h(a);this.template(e,a);for(var l=[],c=0;c<e.children.length;c++){var u=e.children[c],d=this.option(u);l.push(d)}var p=h("<ul></ul>",{class:"select2-results__options select2-results__options--nested"});p.append(l),s.append(a),s.append(p)}else this.template(e,t);return f.StoreData(t,"data",e),t},r.prototype.bind=function(t,e){var l=this,n=t.id+"-results";this.$results.attr("id",n),t.on("results:all",function(e){l.clear(),l.append(e.data),t.isOpen()&&(l.setClasses(),l.highlightFirstItem())}),t.on("results:append",function(e){l.append(e.data),t.isOpen()&&l.setClasses()}),t.on("query",function(e){l.hideMessages(),l.showLoading(e)}),t.on("select",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("unselect",function(){t.isOpen()&&(l.setClasses(),l.options.get("scrollAfterSelect")&&l.highlightFirstItem())}),t.on("open",function(){l.$results.attr("aria-expanded","true"),l.$results.attr("aria-hidden","false"),l.setClasses(),l.ensureHighlightVisible()}),t.on("close",function(){l.$results.attr("aria-expanded","false"),l.$results.attr("aria-hidden","true"),l.$results.removeAttr("aria-activedescendant")}),t.on("results:toggle",function(){var e=l.getHighlightedResults();0!==e.length&&e.trigger("mouseup")}),t.on("results:select",function(){var e=l.getHighlightedResults();if(0!==e.length){var t=f.GetData(e[0],"data");"true"==e.attr("aria-selected")?l.trigger("close",{}):l.trigger("select",{data:t})}}),t.on("results:previous",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e);if(!(n<=0)){var r=n-1;0===e.length&&(r=0);var i=t.eq(r);i.trigger("mouseenter");var o=l.$results.offset().top,s=i.offset().top,a=l.$results.scrollTop()+(s-o);0===r?l.$results.scrollTop(0):s-o<0&&l.$results.scrollTop(a)}}),t.on("results:next",function(){var e=l.getHighlightedResults(),t=l.$results.find("[aria-selected]"),n=t.index(e)+1;if(!(n>=t.length)){var r=t.eq(n);r.trigger("mouseenter");var i=l.$results.offset().top+l.$results.outerHeight(!1),o=r.offset().top+r.outerHeight(!1),s=l.$results.scrollTop()+o-i;0===n?l.$results.scrollTop(0):i<o&&l.$results.scrollTop(s)}}),t.on("results:focus",function(e){e.element.addClass("select2-results__option--highlighted")}),t.on("results:message",function(e){l.displayMessage(e)}),h.fn.mousewheel&&this.$results.on("mousewheel",function(e){var t=l.$results.scrollTop(),n=l.$results.get(0).scrollHeight-t+e.deltaY,r=0<e.deltaY&&t-e.deltaY<=0,i=e.deltaY<0&&n<=l.$results.height();r?(l.$results.scrollTop(0),e.preventDefault(),e.stopPropagation()):i&&(l.$results.scrollTop(l.$results.get(0).scrollHeight-l.$results.height()),e.preventDefault(),e.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(e){var t=h(this),n=f.GetData(this,"data");"true"!==t.attr("aria-selected")?l.trigger("select",{originalEvent:e,data:n}):l.options.get("multiple")?l.trigger("unselect",{originalEvent:e,data:n}):l.trigger("close",{})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(e){var t=f.GetData(this,"data");l.getHighlightedResults().removeClass("select2-results__option--highlighted"),l.trigger("results:focus",{data:t,element:h(this)})})},r.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},r.prototype.destroy=function(){this.$results.remove()},r.prototype.ensureHighlightVisible=function(){var e=this.getHighlightedResults();if(0!==e.length){var t=this.$results.find("[aria-selected]").index(e),n=this.$results.offset().top,r=e.offset().top,i=this.$results.scrollTop()+(r-n),o=r-n;i-=2*e.outerHeight(!1),t<=2?this.$results.scrollTop(0):(o>this.$results.outerHeight()||o<0)&&this.$results.scrollTop(i)}},r.prototype.template=function(e,t){var n=this.options.get("templateResult"),r=this.options.get("escapeMarkup"),i=n(e,t);null==i?t.style.display="none":"string"==typeof i?t.innerHTML=r(i):h(t).append(i)},r}),e.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),e.define("select2/selection/base",["jquery","../utils","../keys"],function(n,r,i){function o(e,t){this.$element=e,this.options=t,o.__super__.constructor.call(this)}return r.Extend(o,r.Observable),o.prototype.render=function(){var e=n('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=r.GetData(this.$element[0],"old-tabindex")?this._tabindex=r.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),e.attr("title",this.$element.attr("title")),e.attr("tabindex",this._tabindex),e.attr("aria-disabled","false"),this.$selection=e},o.prototype.bind=function(e,t){var n=this,r=e.id+"-results";this.container=e,this.$selection.on("focus",function(e){n.trigger("focus",e)}),this.$selection.on("blur",function(e){n._handleBlur(e)}),this.$selection.on("keydown",function(e){n.trigger("keypress",e),e.which===i.SPACE&&e.preventDefault()}),e.on("results:focus",function(e){n.$selection.attr("aria-activedescendant",e.data._resultId)}),e.on("selection:update",function(e){n.update(e.data)}),e.on("open",function(){n.$selection.attr("aria-expanded","true"),n.$selection.attr("aria-owns",r),n._attachCloseHandler(e)}),e.on("close",function(){n.$selection.attr("aria-expanded","false"),n.$selection.removeAttr("aria-activedescendant"),n.$selection.removeAttr("aria-owns"),n.$selection.trigger("focus"),n._detachCloseHandler(e)}),e.on("enable",function(){n.$selection.attr("tabindex",n._tabindex),n.$selection.attr("aria-disabled","false")}),e.on("disable",function(){n.$selection.attr("tabindex","-1"),n.$selection.attr("aria-disabled","true")})},o.prototype._handleBlur=function(e){var t=this;window.setTimeout(function(){document.activeElement==t.$selection[0]||n.contains(t.$selection[0],document.activeElement)||t.trigger("blur",e)},1)},o.prototype._attachCloseHandler=function(e){n(document.body).on("mousedown.select2."+e.id,function(e){var t=n(e.target).closest(".select2");n(".select2.select2-container--open").each(function(){this!=t[0]&&r.GetData(this,"element").select2("close")})})},o.prototype._detachCloseHandler=function(e){n(document.body).off("mousedown.select2."+e.id)},o.prototype.position=function(e,t){t.find(".selection").append(e)},o.prototype.destroy=function(){this._detachCloseHandler(this.container)},o.prototype.update=function(e){throw new Error("The `update` method must be defined in child classes.")},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get("disabled")},o}),e.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(e,t,n,r){function i(){i.__super__.constructor.apply(this,arguments)}return n.Extend(i,t),i.prototype.render=function(){var e=i.__super__.render.call(this);return e.addClass("select2-selection--single"),e.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),e},i.prototype.bind=function(t,e){var n=this;i.__super__.bind.apply(this,arguments);var r=t.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",r).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",r),this.$selection.on("mousedown",function(e){1===e.which&&n.trigger("toggle",{originalEvent:e})}),this.$selection.on("focus",function(e){}),this.$selection.on("blur",function(e){}),t.on("focus",function(e){t.isOpen()||n.$selection.trigger("focus")})},i.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},i.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},i.prototype.selectionContainer=function(){return e("<span></span>")},i.prototype.update=function(e){if(0!==e.length){var t=e[0],n=this.$selection.find(".select2-selection__rendered"),r=this.display(t,n);n.empty().append(r);var i=t.title||t.text;i?n.attr("title",i):n.removeAttr("title")}else this.clear()},i}),e.define("select2/selection/multiple",["jquery","./base","../utils"],function(i,e,l){function n(e,t){n.__super__.constructor.apply(this,arguments)}return l.Extend(n,e),n.prototype.render=function(){var e=n.__super__.render.call(this);return e.addClass("select2-selection--multiple"),e.html('<ul class="select2-selection__rendered"></ul>'),e},n.prototype.bind=function(e,t){var r=this;n.__super__.bind.apply(this,arguments),this.$selection.on("click",function(e){r.trigger("toggle",{originalEvent:e})}),this.$selection.on("click",".select2-selection__choice__remove",function(e){if(!r.isDisabled()){var t=i(this).parent(),n=l.GetData(t[0],"data");r.trigger("unselect",{originalEvent:e,data:n})}})},n.prototype.clear=function(){var e=this.$selection.find(".select2-selection__rendered");e.empty(),e.removeAttr("title")},n.prototype.display=function(e,t){var n=this.options.get("templateSelection");return this.options.get("escapeMarkup")(n(e,t))},n.prototype.selectionContainer=function(){return i('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>')},n.prototype.update=function(e){if(this.clear(),0!==e.length){for(var t=[],n=0;n<e.length;n++){var r=e[n],i=this.selectionContainer(),o=this.display(r,i);i.append(o);var s=r.title||r.text;s&&i.attr("title",s),l.StoreData(i[0],"data",r),t.push(i)}var a=this.$selection.find(".select2-selection__rendered");l.appendMany(a,t)}},n}),e.define("select2/selection/placeholder",["../utils"],function(e){function t(e,t,n){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n)}return t.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},t.prototype.createPlaceholder=function(e,t){var n=this.selectionContainer();return n.html(this.display(t)),n.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),n},t.prototype.update=function(e,t){var n=1==t.length&&t[0].id!=this.placeholder.id;if(1<t.length||n)return e.call(this,t);this.clear();var r=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(r)},t}),e.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(i,r,a){function e(){}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(e){r._handleClear(e)}),t.on("keypress",function(e){r._handleKeyboardClear(e,t)})},e.prototype._handleClear=function(e,t){if(!this.isDisabled()){var n=this.$selection.find(".select2-selection__clear");if(0!==n.length){t.stopPropagation();var r=a.GetData(n[0],"data"),i=this.$element.val();this.$element.val(this.placeholder.id);var o={data:r};if(this.trigger("clear",o),o.prevented)this.$element.val(i);else{for(var s=0;s<r.length;s++)if(o={data:r[s]},this.trigger("unselect",o),o.prevented)return void this.$element.val(i);this.$element.trigger("input").trigger("change"),this.trigger("toggle",{})}}}},e.prototype._handleKeyboardClear=function(e,t,n){n.isOpen()||t.which!=r.DELETE&&t.which!=r.BACKSPACE||this._handleClear(t)},e.prototype.update=function(e,t){if(e.call(this,t),!(0<this.$selection.find(".select2-selection__placeholder").length||0===t.length)){var n=this.options.get("translations").get("removeAllItems"),r=i('<span class="select2-selection__clear" title="'+n()+'">&times;</span>');a.StoreData(r[0],"data",t),this.$selection.find(".select2-selection__rendered").prepend(r)}},e}),e.define("select2/selection/search",["jquery","../utils","../keys"],function(r,a,l){function e(e,t,n){e.call(this,t,n)}return e.prototype.render=function(e){var t=r('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" /></li>');this.$searchContainer=t,this.$search=t.find("input");var n=e.call(this);return this._transferTabIndex(),n},e.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),t.on("open",function(){r.$search.attr("aria-controls",i),r.$search.trigger("focus")}),t.on("close",function(){r.$search.val(""),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.trigger("focus")}),t.on("enable",function(){r.$search.prop("disabled",!1),r._transferTabIndex()}),t.on("disable",function(){r.$search.prop("disabled",!0)}),t.on("focus",function(e){r.$search.trigger("focus")}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(e){r.trigger("focus",e)}),this.$selection.on("focusout",".select2-search--inline",function(e){r._handleBlur(e)}),this.$selection.on("keydown",".select2-search--inline",function(e){if(e.stopPropagation(),r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented(),e.which===l.BACKSPACE&&""===r.$search.val()){var t=r.$searchContainer.prev(".select2-selection__choice");if(0<t.length){var n=a.GetData(t[0],"data");r.searchRemoveChoice(n),e.preventDefault()}}}),this.$selection.on("click",".select2-search--inline",function(e){r.$search.val()&&e.stopPropagation()});var o=document.documentMode,s=o&&o<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(e){s?r.$selection.off("input.search input.searchcheck"):r.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(e){if(s&&"input"===e.type)r.$selection.off("input.search input.searchcheck");else{var t=e.which;t!=l.SHIFT&&t!=l.CTRL&&t!=l.ALT&&t!=l.TAB&&r.handleSearch(e)}})},e.prototype._transferTabIndex=function(e){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},e.prototype.createPlaceholder=function(e,t){this.$search.attr("placeholder",t.text)},e.prototype.update=function(e,t){var n=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),e.call(this,t),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),n&&this.$search.trigger("focus")},e.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var e=this.$search.val();this.trigger("query",{term:e})}this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(e,t){this.trigger("unselect",{data:t}),this.$search.val(t.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css("width","25px");var e="";""!==this.$search.attr("placeholder")?e=this.$selection.find(".select2-selection__rendered").width():e=.75*(this.$search.val().length+1)+"em";this.$search.css("width",e)},e}),e.define("select2/selection/eventRelay",["jquery"],function(s){function e(){}return e.prototype.bind=function(e,t,n){var r=this,i=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],o=["opening","closing","selecting","unselecting","clearing"];e.call(this,t,n),t.on("*",function(e,t){if(-1!==s.inArray(e,i)){t=t||{};var n=s.Event("select2:"+e,{params:t});r.$element.trigger(n),-1!==s.inArray(e,o)&&(t.prevented=n.isDefaultPrevented())}})},e}),e.define("select2/translation",["jquery","require"],function(t,n){function r(e){this.dict=e||{}}return r.prototype.all=function(){return this.dict},r.prototype.get=function(e){return this.dict[e]},r.prototype.extend=function(e){this.dict=t.extend({},e.all(),this.dict)},r._cache={},r.loadPath=function(e){if(!(e in r._cache)){var t=n(e);r._cache[e]=t}return new r(r._cache[e])},r}),e.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Œ":"OE","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","œ":"oe","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ώ":"ω","ς":"σ","’":"'"}}),e.define("select2/data/base",["../utils"],function(r){function n(e,t){n.__super__.constructor.call(this)}return r.Extend(n,r.Observable),n.prototype.current=function(e){throw new Error("The `current` method must be defined in child classes.")},n.prototype.query=function(e,t){throw new Error("The `query` method must be defined in child classes.")},n.prototype.bind=function(e,t){},n.prototype.destroy=function(){},n.prototype.generateResultId=function(e,t){var n=e.id+"-result-";return n+=r.generateChars(4),null!=t.id?n+="-"+t.id.toString():n+="-"+r.generateChars(4),n},n}),e.define("select2/data/select",["./base","../utils","jquery"],function(e,a,l){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return a.Extend(n,e),n.prototype.current=function(e){var n=[],r=this;this.$element.find(":selected").each(function(){var e=l(this),t=r.item(e);n.push(t)}),e(n)},n.prototype.select=function(i){var o=this;if(i.selected=!0,l(i.element).is("option"))return i.element.selected=!0,void this.$element.trigger("input").trigger("change");if(this.$element.prop("multiple"))this.current(function(e){var t=[];(i=[i]).push.apply(i,e);for(var n=0;n<i.length;n++){var r=i[n].id;-1===l.inArray(r,t)&&t.push(r)}o.$element.val(t),o.$element.trigger("input").trigger("change")});else{var e=i.id;this.$element.val(e),this.$element.trigger("input").trigger("change")}},n.prototype.unselect=function(i){var o=this;if(this.$element.prop("multiple")){if(i.selected=!1,l(i.element).is("option"))return i.element.selected=!1,void this.$element.trigger("input").trigger("change");this.current(function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n].id;r!==i.id&&-1===l.inArray(r,t)&&t.push(r)}o.$element.val(t),o.$element.trigger("input").trigger("change")})}},n.prototype.bind=function(e,t){var n=this;(this.container=e).on("select",function(e){n.select(e.data)}),e.on("unselect",function(e){n.unselect(e.data)})},n.prototype.destroy=function(){this.$element.find("*").each(function(){a.RemoveData(this)})},n.prototype.query=function(r,e){var i=[],o=this;this.$element.children().each(function(){var e=l(this);if(e.is("option")||e.is("optgroup")){var t=o.item(e),n=o.matches(r,t);null!==n&&i.push(n)}}),e({results:i})},n.prototype.addOptions=function(e){a.appendMany(this.$element,e)},n.prototype.option=function(e){var t;e.children?(t=document.createElement("optgroup")).label=e.text:void 0!==(t=document.createElement("option")).textContent?t.textContent=e.text:t.innerText=e.text,void 0!==e.id&&(t.value=e.id),e.disabled&&(t.disabled=!0),e.selected&&(t.selected=!0),e.title&&(t.title=e.title);var n=l(t),r=this._normalizeItem(e);return r.element=t,a.StoreData(t,"data",r),n},n.prototype.item=function(e){var t={};if(null!=(t=a.GetData(e[0],"data")))return t;if(e.is("option"))t={id:e.val(),text:e.text(),disabled:e.prop("disabled"),selected:e.prop("selected"),title:e.prop("title")};else if(e.is("optgroup")){t={text:e.prop("label"),children:[],title:e.prop("title")};for(var n=e.children("option"),r=[],i=0;i<n.length;i++){var o=l(n[i]),s=this.item(o);r.push(s)}t.children=r}return(t=this._normalizeItem(t)).element=e[0],a.StoreData(e[0],"data",t),t},n.prototype._normalizeItem=function(e){e!==Object(e)&&(e={id:e,text:e});return null!=(e=l.extend({},{text:""},e)).id&&(e.id=e.id.toString()),null!=e.text&&(e.text=e.text.toString()),null==e._resultId&&e.id&&null!=this.container&&(e._resultId=this.generateResultId(this.container,e)),l.extend({},{selected:!1,disabled:!1},e)},n.prototype.matches=function(e,t){return this.options.get("matcher")(e,t)},n}),e.define("select2/data/array",["./select","../utils","jquery"],function(e,f,g){function r(e,t){this._dataToConvert=t.get("data")||[],r.__super__.constructor.call(this,e,t)}return f.Extend(r,e),r.prototype.bind=function(e,t){r.__super__.bind.call(this,e,t),this.addOptions(this.convertToOptions(this._dataToConvert))},r.prototype.select=function(n){var e=this.$element.find("option").filter(function(e,t){return t.value==n.id.toString()});0===e.length&&(e=this.option(n),this.addOptions(e)),r.__super__.select.call(this,n)},r.prototype.convertToOptions=function(e){var t=this,n=this.$element.find("option"),r=n.map(function(){return t.item(g(this)).id}).get(),i=[];function o(e){return function(){return g(this).val()==e.id}}for(var s=0;s<e.length;s++){var a=this._normalizeItem(e[s]);if(0<=g.inArray(a.id,r)){var l=n.filter(o(a)),c=this.item(l),u=g.extend(!0,{},a,c),d=this.option(u);l.replaceWith(d)}else{var p=this.option(a);if(a.children){var h=this.convertToOptions(a.children);f.appendMany(p,h)}i.push(p)}}return i},r}),e.define("select2/data/ajax",["./array","../utils","jquery"],function(e,t,o){function n(e,t){this.ajaxOptions=this._applyDefaults(t.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),n.__super__.constructor.call(this,e,t)}return t.Extend(n,e),n.prototype._applyDefaults=function(e){var t={data:function(e){return o.extend({},e,{q:e.term})},transport:function(e,t,n){var r=o.ajax(e);return r.then(t),r.fail(n),r}};return o.extend({},t,e,!0)},n.prototype.processResults=function(e){return e},n.prototype.query=function(n,r){var i=this;null!=this._request&&(o.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var t=o.extend({type:"GET"},this.ajaxOptions);function e(){var e=t.transport(t,function(e){var t=i.processResults(e,n);i.options.get("debug")&&window.console&&console.error&&(t&&t.results&&o.isArray(t.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),r(t)},function(){"status"in e&&(0===e.status||"0"===e.status)||i.trigger("results:message",{message:"errorLoading"})});i._request=e}"function"==typeof t.url&&(t.url=t.url.call(this.$element,n)),"function"==typeof t.data&&(t.data=t.data.call(this.$element,n)),this.ajaxOptions.delay&&null!=n.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(e,this.ajaxOptions.delay)):e()},n}),e.define("select2/data/tags",["jquery"],function(u){function e(e,t,n){var r=n.get("tags"),i=n.get("createTag");void 0!==i&&(this.createTag=i);var o=n.get("insertTag");if(void 0!==o&&(this.insertTag=o),e.call(this,t,n),u.isArray(r))for(var s=0;s<r.length;s++){var a=r[s],l=this._normalizeItem(a),c=this.option(l);this.$element.append(c)}}return e.prototype.query=function(e,c,u){var d=this;this._removeOldTags(),null!=c.term&&null==c.page?e.call(this,c,function e(t,n){for(var r=t.results,i=0;i<r.length;i++){var o=r[i],s=null!=o.children&&!e({results:o.children},!0);if((o.text||"").toUpperCase()===(c.term||"").toUpperCase()||s)return!n&&(t.data=r,void u(t))}if(n)return!0;var a=d.createTag(c);if(null!=a){var l=d.option(a);l.attr("data-select2-tag",!0),d.addOptions([l]),d.insertTag(r,a)}t.results=r,u(t)}):e.call(this,c,u)},e.prototype.createTag=function(e,t){var n=u.trim(t.term);return""===n?null:{id:n,text:n}},e.prototype.insertTag=function(e,t,n){t.unshift(n)},e.prototype._removeOldTags=function(e){this.$element.find("option[data-select2-tag]").each(function(){this.selected||u(this).remove()})},e}),e.define("select2/data/tokenizer",["jquery"],function(d){function e(e,t,n){var r=n.get("tokenizer");void 0!==r&&(this.tokenizer=r),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){e.call(this,t,n),this.$search=t.dropdown.$search||t.selection.$search||n.find(".select2-search__field")},e.prototype.query=function(e,t,n){var i=this;t.term=t.term||"";var r=this.tokenizer(t,this.options,function(e){var t,n=i._normalizeItem(e);if(!i.$element.find("option").filter(function(){return d(this).val()===n.id}).length){var r=i.option(n);r.attr("data-select2-tag",!0),i._removeOldTags(),i.addOptions([r])}t=n,i.trigger("select",{data:t})});r.term!==t.term&&(this.$search.length&&(this.$search.val(r.term),this.$search.trigger("focus")),t.term=r.term),e.call(this,t,n)},e.prototype.tokenizer=function(e,t,n,r){for(var i=n.get("tokenSeparators")||[],o=t.term,s=0,a=this.createTag||function(e){return{id:e.term,text:e.term}};s<o.length;){var l=o[s];if(-1!==d.inArray(l,i)){var c=o.substr(0,s),u=a(d.extend({},t,{term:c}));null!=u?(r(u),o=o.substr(s+1)||"",s=0):s++}else s++}return{term:o}},e}),e.define("select2/data/minimumInputLength",[],function(){function e(e,t,n){this.minimumInputLength=n.get("minimumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",t.term.length<this.minimumInputLength?this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumInputLength",[],function(){function e(e,t,n){this.maximumInputLength=n.get("maximumInputLength"),e.call(this,t,n)}return e.prototype.query=function(e,t,n){t.term=t.term||"",0<this.maximumInputLength&&t.term.length>this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:t.term,params:t}}):e.call(this,t,n)},e}),e.define("select2/data/maximumSelectionLength",[],function(){function e(e,t,n){this.maximumSelectionLength=n.get("maximumSelectionLength"),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("select",function(){r._checkIfMaximumSelected()})},e.prototype.query=function(e,t,n){var r=this;this._checkIfMaximumSelected(function(){e.call(r,t,n)})},e.prototype._checkIfMaximumSelected=function(e,n){var r=this;this.current(function(e){var t=null!=e?e.length:0;0<r.maximumSelectionLength&&t>=r.maximumSelectionLength?r.trigger("results:message",{message:"maximumSelected",args:{maximum:r.maximumSelectionLength}}):n&&n()})},e}),e.define("select2/dropdown",["jquery","./utils"],function(t,e){function n(e,t){this.$element=e,this.options=t,n.__super__.constructor.call(this)}return e.Extend(n,e.Observable),n.prototype.render=function(){var e=t('<span class="select2-dropdown"><span class="select2-results"></span></span>');return e.attr("dir",this.options.get("dir")),this.$dropdown=e},n.prototype.bind=function(){},n.prototype.position=function(e,t){},n.prototype.destroy=function(){this.$dropdown.remove()},n}),e.define("select2/dropdown/search",["jquery","../utils"],function(o,e){function t(){}return t.prototype.render=function(e){var t=e.call(this),n=o('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" /></span>');return this.$searchContainer=n,this.$search=n.find("input"),t.prepend(n),t},t.prototype.bind=function(e,t,n){var r=this,i=t.id+"-results";e.call(this,t,n),this.$search.on("keydown",function(e){r.trigger("keypress",e),r._keyUpPrevented=e.isDefaultPrevented()}),this.$search.on("input",function(e){o(this).off("keyup")}),this.$search.on("keyup input",function(e){r.handleSearch(e)}),t.on("open",function(){r.$search.attr("tabindex",0),r.$search.attr("aria-controls",i),r.$search.trigger("focus"),window.setTimeout(function(){r.$search.trigger("focus")},0)}),t.on("close",function(){r.$search.attr("tabindex",-1),r.$search.removeAttr("aria-controls"),r.$search.removeAttr("aria-activedescendant"),r.$search.val(""),r.$search.trigger("blur")}),t.on("focus",function(){t.isOpen()||r.$search.trigger("focus")}),t.on("results:all",function(e){null!=e.query.term&&""!==e.query.term||(r.showSearch(e)?r.$searchContainer.removeClass("select2-search--hide"):r.$searchContainer.addClass("select2-search--hide"))}),t.on("results:focus",function(e){e.data._resultId?r.$search.attr("aria-activedescendant",e.data._resultId):r.$search.removeAttr("aria-activedescendant")})},t.prototype.handleSearch=function(e){if(!this._keyUpPrevented){var t=this.$search.val();this.trigger("query",{term:t})}this._keyUpPrevented=!1},t.prototype.showSearch=function(e,t){return!0},t}),e.define("select2/dropdown/hidePlaceholder",[],function(){function e(e,t,n,r){this.placeholder=this.normalizePlaceholder(n.get("placeholder")),e.call(this,t,n,r)}return e.prototype.append=function(e,t){t.results=this.removePlaceholder(t.results),e.call(this,t)},e.prototype.normalizePlaceholder=function(e,t){return"string"==typeof t&&(t={id:"",text:t}),t},e.prototype.removePlaceholder=function(e,t){for(var n=t.slice(0),r=t.length-1;0<=r;r--){var i=t[r];this.placeholder.id===i.id&&n.splice(r,1)}return n},e}),e.define("select2/dropdown/infiniteScroll",["jquery"],function(n){function e(e,t,n,r){this.lastParams={},e.call(this,t,n,r),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return e.prototype.append=function(e,t){this.$loadingMore.remove(),this.loading=!1,e.call(this,t),this.showLoadingMore(t)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("query",function(e){r.lastParams=e,r.loading=!0}),t.on("query:append",function(e){r.lastParams=e,r.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},e.prototype.loadMoreIfNeeded=function(){var e=n.contains(document.documentElement,this.$loadingMore[0]);if(!this.loading&&e){var t=this.$results.offset().top+this.$results.outerHeight(!1);this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)<=t+50&&this.loadMore()}},e.prototype.loadMore=function(){this.loading=!0;var e=n.extend({},{page:1},this.lastParams);e.page++,this.trigger("query:append",e)},e.prototype.showLoadingMore=function(e,t){return t.pagination&&t.pagination.more},e.prototype.createLoadingMore=function(){var e=n('<li class="select2-results__option select2-results__option--load-more"role="option" aria-disabled="true"></li>'),t=this.options.get("translations").get("loadingMore");return e.html(t(this.lastParams)),e},e}),e.define("select2/dropdown/attachBody",["jquery","../utils"],function(f,a){function e(e,t,n){this.$dropdownParent=f(n.get("dropdownParent")||document.body),e.call(this,t,n)}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("open",function(){r._showDropdown(),r._attachPositioningHandler(t),r._bindContainerResultHandlers(t)}),t.on("close",function(){r._hideDropdown(),r._detachPositioningHandler(t)}),this.$dropdownContainer.on("mousedown",function(e){e.stopPropagation()})},e.prototype.destroy=function(e){e.call(this),this.$dropdownContainer.remove()},e.prototype.position=function(e,t,n){t.attr("class",n.attr("class")),t.removeClass("select2"),t.addClass("select2-container--open"),t.css({position:"absolute",top:-999999}),this.$container=n},e.prototype.render=function(e){var t=f("<span></span>"),n=e.call(this);return t.append(n),this.$dropdownContainer=t},e.prototype._hideDropdown=function(e){this.$dropdownContainer.detach()},e.prototype._bindContainerResultHandlers=function(e,t){if(!this._containerResultsHandlersBound){var n=this;t.on("results:all",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:append",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("results:message",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("select",function(){n._positionDropdown(),n._resizeDropdown()}),t.on("unselect",function(){n._positionDropdown(),n._resizeDropdown()}),this._containerResultsHandlersBound=!0}},e.prototype._attachPositioningHandler=function(e,t){var n=this,r="scroll.select2."+t.id,i="resize.select2."+t.id,o="orientationchange.select2."+t.id,s=this.$container.parents().filter(a.hasScroll);s.each(function(){a.StoreData(this,"select2-scroll-position",{x:f(this).scrollLeft(),y:f(this).scrollTop()})}),s.on(r,function(e){var t=a.GetData(this,"select2-scroll-position");f(this).scrollTop(t.y)}),f(window).on(r+" "+i+" "+o,function(e){n._positionDropdown(),n._resizeDropdown()})},e.prototype._detachPositioningHandler=function(e,t){var n="scroll.select2."+t.id,r="resize.select2."+t.id,i="orientationchange.select2."+t.id;this.$container.parents().filter(a.hasScroll).off(n),f(window).off(n+" "+r+" "+i)},e.prototype._positionDropdown=function(){var e=f(window),t=this.$dropdown.hasClass("select2-dropdown--above"),n=this.$dropdown.hasClass("select2-dropdown--below"),r=null,i=this.$container.offset();i.bottom=i.top+this.$container.outerHeight(!1);var o={height:this.$container.outerHeight(!1)};o.top=i.top,o.bottom=i.top+o.height;var s=this.$dropdown.outerHeight(!1),a=e.scrollTop(),l=e.scrollTop()+e.height(),c=a<i.top-s,u=l>i.bottom+s,d={left:i.left,top:o.bottom},p=this.$dropdownParent;"static"===p.css("position")&&(p=p.offsetParent());var h={top:0,left:0};(f.contains(document.body,p[0])||p[0].isConnected)&&(h=p.offset()),d.top-=h.top,d.left-=h.left,t||n||(r="below"),u||!c||t?!c&&u&&t&&(r="below"):r="above",("above"==r||t&&"below"!==r)&&(d.top=o.top-h.top-s),null!=r&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+r),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+r)),this.$dropdownContainer.css(d)},e.prototype._resizeDropdown=function(){var e={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(e.minWidth=e.width,e.position="relative",e.width="auto"),this.$dropdown.css(e)},e.prototype._showDropdown=function(e){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},e}),e.define("select2/dropdown/minimumResultsForSearch",[],function(){function e(e,t,n,r){this.minimumResultsForSearch=n.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),e.call(this,t,n,r)}return e.prototype.showSearch=function(e,t){return!(function e(t){for(var n=0,r=0;r<t.length;r++){var i=t[r];i.children?n+=e(i.children):n++}return n}(t.data.results)<this.minimumResultsForSearch)&&e.call(this,t)},e}),e.define("select2/dropdown/selectOnClose",["../utils"],function(o){function e(){}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("close",function(e){r._handleSelectOnClose(e)})},e.prototype._handleSelectOnClose=function(e,t){if(t&&null!=t.originalSelect2Event){var n=t.originalSelect2Event;if("select"===n._type||"unselect"===n._type)return}var r=this.getHighlightedResults();if(!(r.length<1)){var i=o.GetData(r[0],"data");null!=i.element&&i.element.selected||null==i.element&&i.selected||this.trigger("select",{data:i})}},e}),e.define("select2/dropdown/closeOnSelect",[],function(){function e(){}return e.prototype.bind=function(e,t,n){var r=this;e.call(this,t,n),t.on("select",function(e){r._selectTriggered(e)}),t.on("unselect",function(e){r._selectTriggered(e)})},e.prototype._selectTriggered=function(e,t){var n=t.originalEvent;n&&(n.ctrlKey||n.metaKey)||this.trigger("close",{originalEvent:n,originalSelect2Event:t})},e}),e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Please delete "+t+" character";return 1!=t&&(n+="s"),n},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var t="You can only select "+e.maximum+" item";return 1!=e.maximum&&(t+="s"),t},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"}}}),e.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(c,u,d,p,h,f,g,m,v,y,s,t,_,$,b,w,A,x,D,S,E,C,O,T,q,L,I,j,e){function n(){this.reset()}return n.prototype.apply=function(e){if(null==(e=c.extend(!0,{},this.defaults,e)).dataAdapter){if(null!=e.ajax?e.dataAdapter=b:null!=e.data?e.dataAdapter=$:e.dataAdapter=_,0<e.minimumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,x)),0<e.maximumInputLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,D)),0<e.maximumSelectionLength&&(e.dataAdapter=y.Decorate(e.dataAdapter,S)),e.tags&&(e.dataAdapter=y.Decorate(e.dataAdapter,w)),null==e.tokenSeparators&&null==e.tokenizer||(e.dataAdapter=y.Decorate(e.dataAdapter,A)),null!=e.query){var t=u(e.amdBase+"compat/query");e.dataAdapter=y.Decorate(e.dataAdapter,t)}if(null!=e.initSelection){var n=u(e.amdBase+"compat/initSelection");e.dataAdapter=y.Decorate(e.dataAdapter,n)}}if(null==e.resultsAdapter&&(e.resultsAdapter=d,null!=e.ajax&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,T)),null!=e.placeholder&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,O)),e.selectOnClose&&(e.resultsAdapter=y.Decorate(e.resultsAdapter,I))),null==e.dropdownAdapter){if(e.multiple)e.dropdownAdapter=E;else{var r=y.Decorate(E,C);e.dropdownAdapter=r}if(0!==e.minimumResultsForSearch&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,L)),e.closeOnSelect&&(e.dropdownAdapter=y.Decorate(e.dropdownAdapter,j)),null!=e.dropdownCssClass||null!=e.dropdownCss||null!=e.adaptDropdownCssClass){var i=u(e.amdBase+"compat/dropdownCss");e.dropdownAdapter=y.Decorate(e.dropdownAdapter,i)}e.dropdownAdapter=y.Decorate(e.dropdownAdapter,q)}if(null==e.selectionAdapter){if(e.multiple?e.selectionAdapter=h:e.selectionAdapter=p,null!=e.placeholder&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,f)),e.allowClear&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,g)),e.multiple&&(e.selectionAdapter=y.Decorate(e.selectionAdapter,m)),null!=e.containerCssClass||null!=e.containerCss||null!=e.adaptContainerCssClass){var o=u(e.amdBase+"compat/containerCss");e.selectionAdapter=y.Decorate(e.selectionAdapter,o)}e.selectionAdapter=y.Decorate(e.selectionAdapter,v)}e.language=this._resolveLanguage(e.language),e.language.push("en");for(var s=[],a=0;a<e.language.length;a++){var l=e.language[a];-1===s.indexOf(l)&&s.push(l)}return e.language=s,e.translations=this._processTranslations(e.language,e.debug),e},n.prototype.reset=function(){function a(e){return e.replace(/[^\u0000-\u007E]/g,function(e){return t[e]||e})}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:y.escapeMarkup,language:{},matcher:function e(t,n){if(""===c.trim(t.term))return n;if(n.children&&0<n.children.length){for(var r=c.extend(!0,{},n),i=n.children.length-1;0<=i;i--)null==e(t,n.children[i])&&r.children.splice(i,1);return 0<r.children.length?r:e(t,r)}var o=a(n.text).toUpperCase(),s=a(t.term).toUpperCase();return-1<o.indexOf(s)?n:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(e){return e},templateResult:function(e){return e.text},templateSelection:function(e){return e.text},theme:"default",width:"resolve"}},n.prototype.applyFromElement=function(e,t){var n=e.language,r=this.defaults.language,i=t.prop("lang"),o=t.closest("[lang]").prop("lang"),s=Array.prototype.concat.call(this._resolveLanguage(i),this._resolveLanguage(n),this._resolveLanguage(r),this._resolveLanguage(o));return e.language=s,e},n.prototype._resolveLanguage=function(e){if(!e)return[];if(c.isEmptyObject(e))return[];if(c.isPlainObject(e))return[e];var t;t=c.isArray(e)?e:[e];for(var n=[],r=0;r<t.length;r++)if(n.push(t[r]),"string"==typeof t[r]&&0<t[r].indexOf("-")){var i=t[r].split("-")[0];n.push(i)}return n},n.prototype._processTranslations=function(e,t){for(var n=new s,r=0;r<e.length;r++){var i=new s,o=e[r];if("string"==typeof o)try{i=s.loadPath(o)}catch(e){try{o=this.defaults.amdLanguageBase+o,i=s.loadPath(o)}catch(e){t&&window.console&&console.warn&&console.warn('Select2: The language file for "'+o+'" could not be automatically loaded. A fallback will be used instead.')}}else i=c.isPlainObject(o)?new s(o):o;n.extend(i)}return n},n.prototype.set=function(e,t){var n={};n[c.camelCase(e)]=t;var r=y._convertData(n);c.extend(!0,this.defaults,r)},new n}),e.define("select2/options",["require","jquery","./defaults","./utils"],function(r,d,i,p){function e(e,t){if(this.options=e,null!=t&&this.fromElement(t),null!=t&&(this.options=i.applyFromElement(this.options,t)),this.options=i.apply(this.options),t&&t.is("input")){var n=r(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=p.Decorate(this.options.dataAdapter,n)}}return e.prototype.fromElement=function(e){var t=["select2"];null==this.options.multiple&&(this.options.multiple=e.prop("multiple")),null==this.options.disabled&&(this.options.disabled=e.prop("disabled")),null==this.options.dir&&(e.prop("dir")?this.options.dir=e.prop("dir"):e.closest("[dir]").prop("dir")?this.options.dir=e.closest("[dir]").prop("dir"):this.options.dir="ltr"),e.prop("disabled",this.options.disabled),e.prop("multiple",this.options.multiple),p.GetData(e[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),p.StoreData(e[0],"data",p.GetData(e[0],"select2Tags")),p.StoreData(e[0],"tags",!0)),p.GetData(e[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),e.attr("ajax--url",p.GetData(e[0],"ajaxUrl")),p.StoreData(e[0],"ajax-Url",p.GetData(e[0],"ajaxUrl")));var n={};function r(e,t){return t.toUpperCase()}for(var i=0;i<e[0].attributes.length;i++){var o=e[0].attributes[i].name,s="data-";if(o.substr(0,s.length)==s){var a=o.substring(s.length),l=p.GetData(e[0],a);n[a.replace(/-([a-z])/g,r)]=l}}d.fn.jquery&&"1."==d.fn.jquery.substr(0,2)&&e[0].dataset&&(n=d.extend(!0,{},e[0].dataset,n));var c=d.extend(!0,{},p.GetData(e[0]),n);for(var u in c=p._convertData(c))-1<d.inArray(u,t)||(d.isPlainObject(this.options[u])?d.extend(this.options[u],c[u]):this.options[u]=c[u]);return this},e.prototype.get=function(e){return this.options[e]},e.prototype.set=function(e,t){this.options[e]=t},e}),e.define("select2/core",["jquery","./options","./utils","./keys"],function(o,c,u,r){var d=function(e,t){null!=u.GetData(e[0],"select2")&&u.GetData(e[0],"select2").destroy(),this.$element=e,this.id=this._generateId(e),t=t||{},this.options=new c(t,e),d.__super__.constructor.call(this);var n=e.attr("tabindex")||0;u.StoreData(e[0],"old-tabindex",n),e.attr("tabindex","-1");var r=this.options.get("dataAdapter");this.dataAdapter=new r(e,this.options);var i=this.render();this._placeContainer(i);var o=this.options.get("selectionAdapter");this.selection=new o(e,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,i);var s=this.options.get("dropdownAdapter");this.dropdown=new s(e,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,i);var a=this.options.get("resultsAdapter");this.results=new a(e,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var l=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(e){l.trigger("selection:update",{data:e})}),e.addClass("select2-hidden-accessible"),e.attr("aria-hidden","true"),this._syncAttributes(),u.StoreData(e[0],"select2",this),e.data("select2",this)};return u.Extend(d,u.Observable),d.prototype._generateId=function(e){return"select2-"+(null!=e.attr("id")?e.attr("id"):null!=e.attr("name")?e.attr("name")+"-"+u.generateChars(2):u.generateChars(4)).replace(/(:|\.|\[|\]|,)/g,"")},d.prototype._placeContainer=function(e){e.insertAfter(this.$element);var t=this._resolveWidth(this.$element,this.options.get("width"));null!=t&&e.css("width",t)},d.prototype._resolveWidth=function(e,t){var n=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==t){var r=this._resolveWidth(e,"style");return null!=r?r:this._resolveWidth(e,"element")}if("element"==t){var i=e.outerWidth(!1);return i<=0?"auto":i+"px"}if("style"!=t)return"computedstyle"!=t?t:window.getComputedStyle(e[0]).width;var o=e.attr("style");if("string"!=typeof o)return null;for(var s=o.split(";"),a=0,l=s.length;a<l;a+=1){var c=s[a].replace(/\s/g,"").match(n);if(null!==c&&1<=c.length)return c[1]}return null},d.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},d.prototype._registerDomEvents=function(){var t=this;this.$element.on("change.select2",function(){t.dataAdapter.current(function(e){t.trigger("selection:update",{data:e})})}),this.$element.on("focus.select2",function(e){t.trigger("focus",e)}),this._syncA=u.bind(this._syncAttributes,this),this._syncS=u.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var e=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=e?(this._observer=new e(function(e){t._syncA(),t._syncS(null,e)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",t._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",t._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",t._syncS,!1))},d.prototype._registerDataEvents=function(){var n=this;this.dataAdapter.on("*",function(e,t){n.trigger(e,t)})},d.prototype._registerSelectionEvents=function(){var n=this,r=["toggle","focus"];this.selection.on("toggle",function(){n.toggleDropdown()}),this.selection.on("focus",function(e){n.focus(e)}),this.selection.on("*",function(e,t){-1===o.inArray(e,r)&&n.trigger(e,t)})},d.prototype._registerDropdownEvents=function(){var n=this;this.dropdown.on("*",function(e,t){n.trigger(e,t)})},d.prototype._registerResultsEvents=function(){var n=this;this.results.on("*",function(e,t){n.trigger(e,t)})},d.prototype._registerEvents=function(){var n=this;this.on("open",function(){n.$container.addClass("select2-container--open")}),this.on("close",function(){n.$container.removeClass("select2-container--open")}),this.on("enable",function(){n.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){n.$container.addClass("select2-container--disabled")}),this.on("blur",function(){n.$container.removeClass("select2-container--focus")}),this.on("query",function(t){n.isOpen()||n.trigger("open",{}),this.dataAdapter.query(t,function(e){n.trigger("results:all",{data:e,query:t})})}),this.on("query:append",function(t){this.dataAdapter.query(t,function(e){n.trigger("results:append",{data:e,query:t})})}),this.on("keypress",function(e){var t=e.which;n.isOpen()?t===r.ESC||t===r.TAB||t===r.UP&&e.altKey?(n.close(e),e.preventDefault()):t===r.ENTER?(n.trigger("results:select",{}),e.preventDefault()):t===r.SPACE&&e.ctrlKey?(n.trigger("results:toggle",{}),e.preventDefault()):t===r.UP?(n.trigger("results:previous",{}),e.preventDefault()):t===r.DOWN&&(n.trigger("results:next",{}),e.preventDefault()):(t===r.ENTER||t===r.SPACE||t===r.DOWN&&e.altKey)&&(n.open(),e.preventDefault())})},d.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},d.prototype._isChangeMutation=function(e,t){var n=!1,r=this;if(!e||!e.target||"OPTION"===e.target.nodeName||"OPTGROUP"===e.target.nodeName){if(t)if(t.addedNodes&&0<t.addedNodes.length)for(var i=0;i<t.addedNodes.length;i++){t.addedNodes[i].selected&&(n=!0)}else t.removedNodes&&0<t.removedNodes.length?n=!0:o.isArray(t)&&o.each(t,function(e,t){if(r._isChangeMutation(e,t))return!(n=!0)});else n=!0;return n}},d.prototype._syncSubtree=function(e,t){var n=this._isChangeMutation(e,t),r=this;n&&this.dataAdapter.current(function(e){r.trigger("selection:update",{data:e})})},d.prototype.trigger=function(e,t){var n=d.__super__.trigger,r={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===t&&(t={}),e in r){var i=r[e],o={prevented:!1,name:e,args:t};if(n.call(this,i,o),o.prevented)return void(t.prevented=!0)}n.call(this,e,t)},d.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},d.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger("query",{})},d.prototype.close=function(e){this.isOpen()&&this.trigger("close",{originalEvent:e})},d.prototype.isEnabled=function(){return!this.isDisabled()},d.prototype.isDisabled=function(){return this.options.get("disabled")},d.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},d.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},d.prototype.focus=function(e){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},d.prototype.enable=function(e){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=e&&0!==e.length||(e=[!0]);var t=!e[0];this.$element.prop("disabled",t)},d.prototype.data=function(){this.options.get("debug")&&0<arguments.length&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var t=[];return this.dataAdapter.current(function(e){t=e}),t},d.prototype.val=function(e){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==e||0===e.length)return this.$element.val();var t=e[0];o.isArray(t)&&(t=o.map(t,function(e){return e.toString()})),this.$element.val(t).trigger("input").trigger("change")},d.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",u.GetData(this.$element[0],"old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),u.RemoveData(this.$element[0]),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},d.prototype.render=function(){var e=o('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return e.attr("dir",this.options.get("dir")),this.$container=e,this.$container.addClass("select2-container--"+this.options.get("theme")),u.StoreData(e[0],"element",this.$element),e},d}),e.define("jquery-mousewheel",["jquery"],function(e){return e}),e.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(i,e,o,t,s){if(null==i.fn.select2){var a=["open","close","destroy"];i.fn.select2=function(t){if("object"==typeof(t=t||{}))return this.each(function(){var e=i.extend(!0,{},t);new o(i(this),e)}),this;if("string"!=typeof t)throw new Error("Invalid arguments for Select2: "+t);var n,r=Array.prototype.slice.call(arguments,1);return this.each(function(){var e=s.GetData(this,"select2");null==e&&window.console&&console.error&&console.error("The select2('"+t+"') method was called on an element that is not using Select2."),n=e[t].apply(e,r)}),-1<i.inArray(t,a)?this:n}}return null==i.fn.select2.defaults&&(i.fn.select2.defaults=t),o}),{define:e.define,require:e.require}}(),t=e.require("jquery.select2");return u.fn.select2.amd=e,t});
  20927. /***/ }),
  20928. /***/ "./node_modules/toastr/toastr.js":
  20929. /*!***************************************!*\
  20930. !*** ./node_modules/toastr/toastr.js ***!
  20931. \***************************************/
  20932. /***/ ((module, exports, __webpack_require__) => {
  20933. var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*
  20934. * Toastr
  20935. * Copyright 2012-2015
  20936. * Authors: John Papa, Hans Fjällemark, and Tim Ferrell.
  20937. * All Rights Reserved.
  20938. * Use, reproduction, distribution, and modification of this code is subject to the terms and
  20939. * conditions of the MIT license, available at http://www.opensource.org/licenses/mit-license.php
  20940. *
  20941. * ARIA Support: Greta Krafsig
  20942. *
  20943. * Project: https://github.com/CodeSeven/toastr
  20944. */
  20945. /* global define */
  20946. (function (define) {
  20947. !(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(/*! jquery */ "./node_modules/jquery/src/jquery.js")], __WEBPACK_AMD_DEFINE_RESULT__ = (function ($) {
  20948. return (function () {
  20949. var $container;
  20950. var listener;
  20951. var toastId = 0;
  20952. var toastType = {
  20953. error: 'error',
  20954. info: 'info',
  20955. success: 'success',
  20956. warning: 'warning'
  20957. };
  20958. var toastr = {
  20959. clear: clear,
  20960. remove: remove,
  20961. error: error,
  20962. getContainer: getContainer,
  20963. info: info,
  20964. options: {},
  20965. subscribe: subscribe,
  20966. success: success,
  20967. version: '2.1.4',
  20968. warning: warning
  20969. };
  20970. var previousToast;
  20971. return toastr;
  20972. ////////////////
  20973. function error(message, title, optionsOverride) {
  20974. return notify({
  20975. type: toastType.error,
  20976. iconClass: getOptions().iconClasses.error,
  20977. message: message,
  20978. optionsOverride: optionsOverride,
  20979. title: title
  20980. });
  20981. }
  20982. function getContainer(options, create) {
  20983. if (!options) { options = getOptions(); }
  20984. $container = $('#' + options.containerId);
  20985. if ($container.length) {
  20986. return $container;
  20987. }
  20988. if (create) {
  20989. $container = createContainer(options);
  20990. }
  20991. return $container;
  20992. }
  20993. function info(message, title, optionsOverride) {
  20994. return notify({
  20995. type: toastType.info,
  20996. iconClass: getOptions().iconClasses.info,
  20997. message: message,
  20998. optionsOverride: optionsOverride,
  20999. title: title
  21000. });
  21001. }
  21002. function subscribe(callback) {
  21003. listener = callback;
  21004. }
  21005. function success(message, title, optionsOverride) {
  21006. return notify({
  21007. type: toastType.success,
  21008. iconClass: getOptions().iconClasses.success,
  21009. message: message,
  21010. optionsOverride: optionsOverride,
  21011. title: title
  21012. });
  21013. }
  21014. function warning(message, title, optionsOverride) {
  21015. return notify({
  21016. type: toastType.warning,
  21017. iconClass: getOptions().iconClasses.warning,
  21018. message: message,
  21019. optionsOverride: optionsOverride,
  21020. title: title
  21021. });
  21022. }
  21023. function clear($toastElement, clearOptions) {
  21024. var options = getOptions();
  21025. if (!$container) { getContainer(options); }
  21026. if (!clearToast($toastElement, options, clearOptions)) {
  21027. clearContainer(options);
  21028. }
  21029. }
  21030. function remove($toastElement) {
  21031. var options = getOptions();
  21032. if (!$container) { getContainer(options); }
  21033. if ($toastElement && $(':focus', $toastElement).length === 0) {
  21034. removeToast($toastElement);
  21035. return;
  21036. }
  21037. if ($container.children().length) {
  21038. $container.remove();
  21039. }
  21040. }
  21041. // internal functions
  21042. function clearContainer (options) {
  21043. var toastsToClear = $container.children();
  21044. for (var i = toastsToClear.length - 1; i >= 0; i--) {
  21045. clearToast($(toastsToClear[i]), options);
  21046. }
  21047. }
  21048. function clearToast ($toastElement, options, clearOptions) {
  21049. var force = clearOptions && clearOptions.force ? clearOptions.force : false;
  21050. if ($toastElement && (force || $(':focus', $toastElement).length === 0)) {
  21051. $toastElement[options.hideMethod]({
  21052. duration: options.hideDuration,
  21053. easing: options.hideEasing,
  21054. complete: function () { removeToast($toastElement); }
  21055. });
  21056. return true;
  21057. }
  21058. return false;
  21059. }
  21060. function createContainer(options) {
  21061. $container = $('<div/>')
  21062. .attr('id', options.containerId)
  21063. .addClass(options.positionClass);
  21064. $container.appendTo($(options.target));
  21065. return $container;
  21066. }
  21067. function getDefaults() {
  21068. return {
  21069. tapToDismiss: true,
  21070. toastClass: 'toast',
  21071. containerId: 'toast-container',
  21072. debug: false,
  21073. showMethod: 'fadeIn', //fadeIn, slideDown, and show are built into jQuery
  21074. showDuration: 300,
  21075. showEasing: 'swing', //swing and linear are built into jQuery
  21076. onShown: undefined,
  21077. hideMethod: 'fadeOut',
  21078. hideDuration: 1000,
  21079. hideEasing: 'swing',
  21080. onHidden: undefined,
  21081. closeMethod: false,
  21082. closeDuration: false,
  21083. closeEasing: false,
  21084. closeOnHover: true,
  21085. extendedTimeOut: 1000,
  21086. iconClasses: {
  21087. error: 'toast-error',
  21088. info: 'toast-info',
  21089. success: 'toast-success',
  21090. warning: 'toast-warning'
  21091. },
  21092. iconClass: 'toast-info',
  21093. positionClass: 'toast-top-right',
  21094. timeOut: 5000, // Set timeOut and extendedTimeOut to 0 to make it sticky
  21095. titleClass: 'toast-title',
  21096. messageClass: 'toast-message',
  21097. escapeHtml: false,
  21098. target: 'body',
  21099. closeHtml: '<button type="button">&times;</button>',
  21100. closeClass: 'toast-close-button',
  21101. newestOnTop: true,
  21102. preventDuplicates: false,
  21103. progressBar: false,
  21104. progressClass: 'toast-progress',
  21105. rtl: false
  21106. };
  21107. }
  21108. function publish(args) {
  21109. if (!listener) { return; }
  21110. listener(args);
  21111. }
  21112. function notify(map) {
  21113. var options = getOptions();
  21114. var iconClass = map.iconClass || options.iconClass;
  21115. if (typeof (map.optionsOverride) !== 'undefined') {
  21116. options = $.extend(options, map.optionsOverride);
  21117. iconClass = map.optionsOverride.iconClass || iconClass;
  21118. }
  21119. if (shouldExit(options, map)) { return; }
  21120. toastId++;
  21121. $container = getContainer(options, true);
  21122. var intervalId = null;
  21123. var $toastElement = $('<div/>');
  21124. var $titleElement = $('<div/>');
  21125. var $messageElement = $('<div/>');
  21126. var $progressElement = $('<div/>');
  21127. var $closeElement = $(options.closeHtml);
  21128. var progressBar = {
  21129. intervalId: null,
  21130. hideEta: null,
  21131. maxHideTime: null
  21132. };
  21133. var response = {
  21134. toastId: toastId,
  21135. state: 'visible',
  21136. startTime: new Date(),
  21137. options: options,
  21138. map: map
  21139. };
  21140. personalizeToast();
  21141. displayToast();
  21142. handleEvents();
  21143. publish(response);
  21144. if (options.debug && console) {
  21145. console.log(response);
  21146. }
  21147. return $toastElement;
  21148. function escapeHtml(source) {
  21149. if (source == null) {
  21150. source = '';
  21151. }
  21152. return source
  21153. .replace(/&/g, '&amp;')
  21154. .replace(/"/g, '&quot;')
  21155. .replace(/'/g, '&#39;')
  21156. .replace(/</g, '&lt;')
  21157. .replace(/>/g, '&gt;');
  21158. }
  21159. function personalizeToast() {
  21160. setIcon();
  21161. setTitle();
  21162. setMessage();
  21163. setCloseButton();
  21164. setProgressBar();
  21165. setRTL();
  21166. setSequence();
  21167. setAria();
  21168. }
  21169. function setAria() {
  21170. var ariaValue = '';
  21171. switch (map.iconClass) {
  21172. case 'toast-success':
  21173. case 'toast-info':
  21174. ariaValue = 'polite';
  21175. break;
  21176. default:
  21177. ariaValue = 'assertive';
  21178. }
  21179. $toastElement.attr('aria-live', ariaValue);
  21180. }
  21181. function handleEvents() {
  21182. if (options.closeOnHover) {
  21183. $toastElement.hover(stickAround, delayedHideToast);
  21184. }
  21185. if (!options.onclick && options.tapToDismiss) {
  21186. $toastElement.click(hideToast);
  21187. }
  21188. if (options.closeButton && $closeElement) {
  21189. $closeElement.click(function (event) {
  21190. if (event.stopPropagation) {
  21191. event.stopPropagation();
  21192. } else if (event.cancelBubble !== undefined && event.cancelBubble !== true) {
  21193. event.cancelBubble = true;
  21194. }
  21195. if (options.onCloseClick) {
  21196. options.onCloseClick(event);
  21197. }
  21198. hideToast(true);
  21199. });
  21200. }
  21201. if (options.onclick) {
  21202. $toastElement.click(function (event) {
  21203. options.onclick(event);
  21204. hideToast();
  21205. });
  21206. }
  21207. }
  21208. function displayToast() {
  21209. $toastElement.hide();
  21210. $toastElement[options.showMethod](
  21211. {duration: options.showDuration, easing: options.showEasing, complete: options.onShown}
  21212. );
  21213. if (options.timeOut > 0) {
  21214. intervalId = setTimeout(hideToast, options.timeOut);
  21215. progressBar.maxHideTime = parseFloat(options.timeOut);
  21216. progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;
  21217. if (options.progressBar) {
  21218. progressBar.intervalId = setInterval(updateProgress, 10);
  21219. }
  21220. }
  21221. }
  21222. function setIcon() {
  21223. if (map.iconClass) {
  21224. $toastElement.addClass(options.toastClass).addClass(iconClass);
  21225. }
  21226. }
  21227. function setSequence() {
  21228. if (options.newestOnTop) {
  21229. $container.prepend($toastElement);
  21230. } else {
  21231. $container.append($toastElement);
  21232. }
  21233. }
  21234. function setTitle() {
  21235. if (map.title) {
  21236. var suffix = map.title;
  21237. if (options.escapeHtml) {
  21238. suffix = escapeHtml(map.title);
  21239. }
  21240. $titleElement.append(suffix).addClass(options.titleClass);
  21241. $toastElement.append($titleElement);
  21242. }
  21243. }
  21244. function setMessage() {
  21245. if (map.message) {
  21246. var suffix = map.message;
  21247. if (options.escapeHtml) {
  21248. suffix = escapeHtml(map.message);
  21249. }
  21250. $messageElement.append(suffix).addClass(options.messageClass);
  21251. $toastElement.append($messageElement);
  21252. }
  21253. }
  21254. function setCloseButton() {
  21255. if (options.closeButton) {
  21256. $closeElement.addClass(options.closeClass).attr('role', 'button');
  21257. $toastElement.prepend($closeElement);
  21258. }
  21259. }
  21260. function setProgressBar() {
  21261. if (options.progressBar) {
  21262. $progressElement.addClass(options.progressClass);
  21263. $toastElement.prepend($progressElement);
  21264. }
  21265. }
  21266. function setRTL() {
  21267. if (options.rtl) {
  21268. $toastElement.addClass('rtl');
  21269. }
  21270. }
  21271. function shouldExit(options, map) {
  21272. if (options.preventDuplicates) {
  21273. if (map.message === previousToast) {
  21274. return true;
  21275. } else {
  21276. previousToast = map.message;
  21277. }
  21278. }
  21279. return false;
  21280. }
  21281. function hideToast(override) {
  21282. var method = override && options.closeMethod !== false ? options.closeMethod : options.hideMethod;
  21283. var duration = override && options.closeDuration !== false ?
  21284. options.closeDuration : options.hideDuration;
  21285. var easing = override && options.closeEasing !== false ? options.closeEasing : options.hideEasing;
  21286. if ($(':focus', $toastElement).length && !override) {
  21287. return;
  21288. }
  21289. clearTimeout(progressBar.intervalId);
  21290. return $toastElement[method]({
  21291. duration: duration,
  21292. easing: easing,
  21293. complete: function () {
  21294. removeToast($toastElement);
  21295. clearTimeout(intervalId);
  21296. if (options.onHidden && response.state !== 'hidden') {
  21297. options.onHidden();
  21298. }
  21299. response.state = 'hidden';
  21300. response.endTime = new Date();
  21301. publish(response);
  21302. }
  21303. });
  21304. }
  21305. function delayedHideToast() {
  21306. if (options.timeOut > 0 || options.extendedTimeOut > 0) {
  21307. intervalId = setTimeout(hideToast, options.extendedTimeOut);
  21308. progressBar.maxHideTime = parseFloat(options.extendedTimeOut);
  21309. progressBar.hideEta = new Date().getTime() + progressBar.maxHideTime;
  21310. }
  21311. }
  21312. function stickAround() {
  21313. clearTimeout(intervalId);
  21314. progressBar.hideEta = 0;
  21315. $toastElement.stop(true, true)[options.showMethod](
  21316. {duration: options.showDuration, easing: options.showEasing}
  21317. );
  21318. }
  21319. function updateProgress() {
  21320. var percentage = ((progressBar.hideEta - (new Date().getTime())) / progressBar.maxHideTime) * 100;
  21321. $progressElement.width(percentage + '%');
  21322. }
  21323. }
  21324. function getOptions() {
  21325. return $.extend({}, getDefaults(), toastr.options);
  21326. }
  21327. function removeToast($toastElement) {
  21328. if (!$container) { $container = getContainer(); }
  21329. if ($toastElement.is(':visible')) {
  21330. return;
  21331. }
  21332. $toastElement.remove();
  21333. $toastElement = null;
  21334. if ($container.children().length === 0) {
  21335. $container.remove();
  21336. previousToast = undefined;
  21337. }
  21338. }
  21339. })();
  21340. }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
  21341. __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  21342. }(__webpack_require__.amdD));
  21343. /***/ })
  21344. }]);
  21345. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWRtaW4tbHRlL2Rpc3QvanMvYWRtaW5sdGUubWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAtYXV0b2NvbXBsZXRlL2Rpc3QvbGF0ZXN0L2Jvb3RzdHJhcC1hdXRvY29tcGxldGUubWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAtZGF0ZXJhbmdlcGlja2VyL2RhdGVyYW5nZXBpY2tlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLm1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm90LWEtcmVnZXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zYW1lLXZhbHVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctcmVwZWF0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGhpcy1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci50by1maXhlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc2VhcmNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9ib290c3RyYXAtZGF0ZXJhbmdlcGlja2VyL2RhdGVyYW5nZXBpY2tlci5jc3M/OTY4YyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2VsZWN0Mi1ib290c3RyYXA0LXRoZW1lL2Rpc3Qvc2VsZWN0Mi1ib290c3RyYXA0Lm1pbi5jc3M/ZTkxNCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2VsZWN0Mi9kaXN0L2Nzcy9zZWxlY3QyLm1pbi5jc3M/M2VkOCIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdG9hc3RyL3RvYXN0ci5zY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvYWYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9hci1kei5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2FyLWt3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvYXItbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9hci1tYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2FyLXNhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvYXItdG4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9hci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2F6LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvYmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9iZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2JtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvYm4tYmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9ibi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2JvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvYnIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9icy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2NhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvY3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9jdi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2N5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9kZS1hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2RlLWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9kdi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2VsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZW4tYXUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9lbi1jYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2VuLWdiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZW4taWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9lbi1pbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2VuLWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZW4tbnouanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9lbi1zZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2VvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZXMtZG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9lcy1teC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2VzLXVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9ldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2V1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZmEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9maS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2ZpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2ZvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZnItY2EuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9mci1jaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2ZyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9nYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2dkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZ2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9nb20tZGV2YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2dvbS1sYXRuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvZ3UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9oZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2hpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvaHIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9odS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2h5LWFtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvaWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9pcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2l0LWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvaXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9qYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2p2LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUva2EuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9ray5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2ttLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUva24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9rby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2t1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUva3kuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9sYi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL2xvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvbHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9sdi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL21lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvbWkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9tay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL21sLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvbW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9tci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL21zLW15LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvbXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9tdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL215LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvbmIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL25sLWJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvbmwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9ubi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL29jLWxuYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3BhLWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvcGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9wdC1ici5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3B0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvcm8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9ydS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3NkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9zaS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3NrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvc2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9zcS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3NyLWN5cmwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9zci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3NzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvc3YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS9zdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3RhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS90ZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS90Zy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3RoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvdGsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS90bC1waC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3RsaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3RyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvdHpsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvdHptLWxhdG4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS90em0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS91Zy1jbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3VrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvdXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS91ei1sYXRuLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvdXouanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS92aS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3gtcHNldWRvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUveW8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS96aC1jbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbG9jYWxlL3poLWhrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9tb21lbnQvZGlzdC9sb2NhbGUvemgtbW8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL21vbWVudC9kaXN0L2xvY2FsZS96aC10dy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbW9tZW50L2Rpc3QvbW9tZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zZWxlY3QyL2Rpc3QvanMvaTE4bi9mci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2VsZWN0Mi9kaXN0L2pzL3NlbGVjdDIubWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy90b2FzdHIvdG9hc3RyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBb0QsV0FBVyxtQkFBTyxDQUFDLG1EQUFRLEdBQUcsQ0FBa0osQ0FBQyxxQkFBcUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLG1IQUFtSCxxQ0FBcUMsa01BQWtNLHdCQUF3QixVQUFVLGNBQWMsZ0JBQWdCLDZGQUE2RixnT0FBZ08sa0JBQWtCLHlCQUF5QixXQUFXLDJJQUEySSxrT0FBa08sNklBQTZJLDBCQUEwQixzSEFBc0gsNkJBQTZCLCtIQUErSCxvQkFBb0IsV0FBVyxvRUFBb0UsU0FBUywwQ0FBMEMsZ0NBQWdDLG1EQUFtRCwyQkFBMkIsa0pBQWtKLEdBQUcsR0FBRyw4Q0FBOEMsc0VBQXNFLHlCQUF5Qiw4QkFBOEIseUNBQXlDLEdBQUcsMEdBQTBHLDZDQUE2Qyx1UUFBdVEsNktBQTZLLGNBQWMsZ0JBQWdCLDBIQUEwSCxNQUFNLGtCQUFrQiw2QkFBNkIsV0FBVyxnSEFBZ0gscUNBQXFDLHFRQUFxUSxxQkFBcUIsV0FBVyxrSEFBa0gsd0NBQXdDLGtRQUFrUSxxQkFBcUIscUdBQXFHLHFCQUFxQix1REFBdUQsdUJBQXVCLG9MQUFvTCw4RUFBOEUsK0JBQStCLHNCQUFzQixxRkFBcUYsbUZBQW1GLHVCQUF1QixrUEFBa1AsbURBQW1ELHNCQUFzQiwrQkFBK0Isc0JBQXNCLHlEQUF5RCxpQ0FBaUMsOENBQThDLG1GQUFtRiw2QkFBNkIseURBQXlELHFCQUFxQixXQUFXLHNGQUFzRixXQUFXLDBFQUEwRSxtQkFBbUIsd0VBQXdFLFdBQVcsR0FBRyxnQ0FBZ0MsbURBQW1ELDJCQUEyQixnT0FBZ08sR0FBRyxHQUFHLDhDQUE4Qyx3RUFBd0UsaURBQWlELHdFQUF3RSxpREFBaUQsZ0ZBQWdGLDBHQUEwRyw2Q0FBNkMsZ1NBQWdTLHNGQUFzRixjQUFjLGdCQUFnQiwrQkFBK0Isa0JBQWtCLDZCQUE2QixrRUFBa0UsOEZBQThGLCtEQUErRCx1R0FBdUcsbUJBQW1CLDRDQUE0QyxrSEFBa0gsMkNBQTJDLDJDQUEyQyw2QkFBNkIsNklBQTZJLHFCQUFxQix3QkFBd0IseURBQXlELG9CQUFvQiwrQkFBK0IscU9BQXFPLG9DQUFvQyx3Q0FBd0Msd0JBQXdCLHFEQUFxRCxHQUFHLDZCQUE2Qix3QkFBd0IsaU1BQWlNLDZCQUE2Qix3QkFBd0IsaU1BQWlNLCtCQUErQix5REFBeUQsa0JBQWtCLE9BQU8sMElBQTBJLDZSQUE2Uix1QkFBdUIsNkJBQTZCLCtDQUErQywrQkFBK0IsaUJBQWlCLHFGQUFxRiw4QkFBOEIscUxBQXFMLHNHQUFzRyx5QkFBeUIsK0RBQStELGtCQUFrQixpR0FBaUcsb0tBQW9LLHFFQUFxRSwyREFBMkQsRUFBRSx3QkFBd0IsZ0NBQWdDLDZCQUE2QixtREFBbUQsMkJBQTJCLDZHQUE2RyxPQUFPLEdBQUcsR0FBRyxHQUFHLDhDQUE4QyxxRUFBcUUseUNBQXlDLDhDQUE4QywwR0FBMEcsNkNBQTZDLHFFQUFxRSxjQUFjLGdCQUFnQixxQ0FBcUMsOEtBQThLLGdDQUFnQyw2QkFBNkIsOEJBQThCLCtEQUErRCxHQUFHLEdBQUcsR0FBRywrRUFBK0Usd0VBQXdFLDBHQUEwRyw2Q0FBNkMsMkVBQTJFLGNBQWMsZ0JBQWdCLCtCQUErQixrQkFBa0Isa0NBQWtDLDRQQUE0UCxnRUFBZ0UsR0FBRywwQkFBMEIsdUNBQXVDLGlCQUFpQix5Q0FBeUMsdUJBQXVCLFNBQVMsdUJBQXVCLEVBQUUsZ0VBQWdFLGdCQUFnQiw4QkFBOEIsY0FBYyx1QkFBdUIsR0FBRyxnQ0FBZ0MsNkJBQTZCLG1EQUFtRCwyQkFBMkIseUdBQXlHLEdBQUcsR0FBRyxHQUFHLDZFQUE2RSxnR0FBZ0cseUVBQXlFLHFHQUFxRyx1REFBdUQsS0FBSywwR0FBMEcsNkNBQTZDLDZKQUE2SixnQkFBZ0IsZ0NBQWdDLGtCQUFrQix5QkFBeUIsaUNBQWlDLGlGQUFpRixtRkFBbUYsR0FBRyx3QkFBd0IsMkVBQTJFLCtDQUErQyw2QkFBNkIsZ09BQWdPLGdDQUFnQyw2QkFBNkIsOEJBQThCLDZHQUE2RyxHQUFHLEdBQUcsR0FBRyxpREFBaUQsaURBQWlELGdEQUFnRCxzREFBc0QsNEdBQTRHLDhDQUE4QywyR0FBMkcsMEVBQTBFLGVBQWUsZ0JBQWdCLCtDQUErQyxPQUFPLGtCQUFrQiwyQkFBMkIsNEpBQTRKLHlCQUF5QixrWEFBa1gsdUJBQXVCLGdRQUFnUSxnQ0FBZ0MsK0JBQStCLDhCQUE4Qix5QkFBeUIsdURBQXVELHlIQUF5SCxHQUFHLEdBQUcsOENBQThDLG1EQUFtRCwrR0FBK0csZ0RBQWdELDhqQkFBOGpCLHVCQUF1QixTQUFTLDBCQUEwQixTQUFTLDBCQUEwQixTQUFTLHVNQUF1TSxlQUFlLGdCQUFnQiw0Q0FBNEMsa0JBQWtCLGdDQUFnQywyQkFBMkIsNEJBQTRCLDZCQUE2Qiw0QkFBNEIsNkJBQTZCLCtCQUErQixtQ0FBbUMsMEdBQTBHLDRTQUE0UywwQ0FBMEMsMEhBQTBILDhFQUE4RSxvQkFBb0Isb0RBQW9ELG9GQUFvRixZQUFZLDZEQUE2RCxHQUFHLDJCQUEyQixvQ0FBb0MsZ0NBQWdDLDRDQUE0QywyQkFBMkIsc0dBQXNHLHlCQUF5QixxQkFBcUIscUJBQXFCLGdDQUFnQyx3RkFBd0YseUZBQXlGLHFIQUFxSCx5QkFBeUIsb0NBQW9DLGdRQUFnUSxpQ0FBaUMsK0VBQStFLHFHQUFxRyx3QkFBd0Isb0hBQW9ILDJIQUEySCxLQUFLLFVBQVUsdURBQXVELEtBQUssdURBQXVELGtJQUFrSSxLQUFLLFVBQVUsd0RBQXdELCtCQUErQix1YkFBdWIsb0JBQW9CLG1GQUFtRixvQ0FBb0Msc0NBQXNDLG1DQUFtQywyREFBMkQsNENBQTRDLDBCQUEwQixpQ0FBaUMsdUJBQXVCLGVBQWUsZUFBZSw4QkFBOEIsV0FBVywwQ0FBMEMsdUJBQXVCLGVBQWUsS0FBSywrRkFBK0YsOENBQThDLHVGQUF1Riw4Q0FBOEMsa0RBQWtELGdFQUFnRSxrREFBa0QsZ0VBQWdFLDhFQUE4RSxtQkFBbUIsZUFBZSxtSUFBbUksa0RBQWtELHdDQUF3QyxHQUFHLGdCQUFnQixvRkFBb0Ysb0NBQW9DLDZCQUE2QixvRkFBb0YsZ0JBQWdCLE9BQU8sd0ZBQXdGLG9DQUFvQyw2QkFBNkIsb0ZBQW9GLGdCQUFnQixPQUFPLGdEQUFnRCxrQ0FBa0MsR0FBRyw4QkFBOEIseUZBQXlGLG1JQUFtSSxzQkFBc0IseUNBQXlDLHlCQUF5QixnQ0FBZ0MseUJBQXlCLDhHQUE4RyxHQUFHLDBCQUEwQixzREFBc0QsK0RBQStELGtFQUFrRSxLQUFLLDRFQUE0RSw0QkFBNEIsa0NBQWtDLGlDQUFpQyxnQ0FBZ0Msb0RBQW9ELDRCQUE0QixxSUFBcUksd0RBQXdELElBQUksd0JBQXdCLHFCQUFxQixHQUFHLEdBQUcsd0NBQXdDLHdDQUF3Qyx3SEFBd0gsbURBQW1ELHVKQUF1Six5SkFBeUosZUFBZSxnQkFBZ0IsK0JBQStCLGtCQUFrQixxQ0FBcUMscUJBQXFCLDRCQUE0QiwrSkFBK0osT0FBTyxtT0FBbU8sK0NBQStDLGNBQWMsb0NBQW9DLHdiQUF3YixxRUFBcUUsMkRBQTJELDBDQUEwQyxxQ0FBcUMsaUVBQWlFLDhFQUE4RSxLQUFLLGlCQUFpQix3RkFBd0Ysb0JBQW9CLFdBQVcsbVZBQW1WLG9CQUFvQix3REFBd0Qsb0VBQW9FLG9HQUFvRyx1QkFBdUIsb0JBQW9CLE9BQU8sOEZBQThGLG9CQUFvQixnREFBZ0QscUNBQXFDLHdDQUF3QyxvQkFBb0IsMEJBQTBCLGlFQUFpRSw2QkFBNkIsOEJBQThCLDZDQUE2QyxvQkFBb0IsUUFBUSxnQ0FBZ0Msb0JBQW9CLFFBQVEsMkNBQTJDLGlCQUFpQixLQUFLLDZCQUE2Qiw4Q0FBOEMsZ0NBQWdDLGdEQUFnRCxvREFBb0QsNEJBQTRCLG9KQUFvSixHQUFHLEdBQUcsR0FBRyx3Q0FBd0MsNENBQTRDLCtDQUErQywyQkFBMkIsNkJBQTZCLDhCQUE4Qix3SEFBd0gsbURBQW1ELGtNQUFrTSxrRUFBa0UsZUFBZSxnQkFBZ0IsaURBQWlELGlGQUFpRixrQkFBa0IsMkJBQTJCLG9CQUFvQixvTUFBb00sNENBQTRDLGdKQUFnSix1QkFBdUIsb0JBQW9CLDBSQUEwUixxQkFBcUIseURBQXlELDRCQUE0QixzREFBc0Qsb0JBQW9CLG9LQUFvSyx1QkFBdUIsaUNBQWlDLHdCQUF3QixzSkFBc0oseUVBQXlFLGtJQUFrSSx5RUFBeUUsc0JBQXNCLG9CQUFvQixXQUFXLHlFQUF5RSxtQkFBbUIsR0FBRywwQkFBMEIsa0NBQWtDLHFCQUFxQixFQUFFLHlCQUF5QixhQUFhLG1DQUFtQyxnQ0FBZ0MsNkJBQTZCLG9EQUFvRCw0QkFBNEIsNkdBQTZHLEdBQUcsR0FBRyxHQUFHLCtDQUErQyxtQkFBbUIsc0JBQXNCLHVIQUF1SCwyQ0FBMkMsd0NBQXdDLCtHQUErRyxnREFBZ0QsbVVBQW1VLHVJQUF1SSxxQkFBcUIsZ0JBQWdCLCtDQUErQyxxQkFBcUIsa0JBQWtCLHlCQUF5QixXQUFXLHVHQUF1RyxTQUFTLCtGQUErRixTQUFTLDhGQUE4RixnQkFBZ0IsSUFBSSxxQkFBcUIsK0NBQStDLHNHQUFzRyw2QkFBNkIsd0NBQXdDLG1EQUFtRCw2RUFBNkUsMEVBQTBFLGVBQWUsbUJBQW1CLCtFQUErRSxvQkFBb0Isa0ZBQWtGLHFCQUFxQiw2REFBNkQsNEJBQTRCLFdBQVcsNERBQTRELFFBQVEsMkpBQTJKLHNFQUFzRSxLQUFLLDhCQUE4QixpQ0FBaUMsa0JBQWtCLEtBQUsseUJBQXlCLCtDQUErQywrQkFBK0IsV0FBVyxrSEFBa0gsNkRBQTZELHdEQUF3RCxvRUFBb0UsNERBQTRELG9FQUFvRSxJQUFJLHdCQUF3QiwrQkFBK0Isd0JBQXdCLHFCQUFxQixnQ0FBZ0Msb0JBQW9CLFVBQVUsK0JBQStCLDJCQUEyQix5RUFBeUUsZ0NBQWdDLCtCQUErQiw4QkFBOEIseUJBQXlCLHVEQUF1RCw0SEFBNEgsR0FBRyxHQUFHLCtDQUErQyxvRUFBb0Usa0RBQWtELG9NQUFvTSxpREFBaUQsT0FBTyxvREFBb0QsMEJBQTBCLDRNQUE0TSwyQ0FBMkMsK0NBQStDLCtHQUErRyxnREFBZ0QsbUpBQW1KLDhDQUE4QyxlQUFlLGdCQUFnQixnREFBZ0QsT0FBTyxrQkFBa0IseUJBQXlCLGdJQUFnSSxvQkFBb0Isa0lBQWtJLHFCQUFxQixxRUFBcUUsZ0NBQWdDLDZCQUE2QixvREFBb0QsNEJBQTRCLHVIQUF1SCxPQUFPLEdBQUcsR0FBRyxHQUFHLCtDQUErQyxtQkFBbUIsaUNBQWlDLDJGQUEyRiwrR0FBK0csZ0RBQWdELDJGQUEyRiw4S0FBOEssZUFBZSxnQkFBZ0Isc0dBQXNHLGtCQUFrQiwyQkFBMkIsOEZBQThGLGtOQUFrTiw4Q0FBOEMsNkJBQTZCLHFIQUFxSCw2RkFBNkYsZ1VBQWdVLHdLQUF3SyxVQUFVLG9FQUFvRSw0SkFBNEosd0JBQXdCLDZIQUE2SCxxRkFBcUYsR0FBRyw4QkFBOEIsc09BQXNPLGdDQUFnQyxpREFBaUQsNkVBQTZFLHFRQUFxUSw4SEFBOEgsa0NBQWtDLDZCQUE2Qix5QkFBeUIsa0NBQWtDLHFCQUFxQixHQUFHLEdBQUcsR0FBRyxxSEFBcUgsbURBQW1ELHNFQUFzRSxvQkFBb0IsU0FBUyx1QkFBdUIsVUFBVSxlQUFlLGdCQUFnQiw0Q0FBNEMsa0JBQWtCLDRCQUE0QixzR0FBc0cscUJBQXFCLDZCQUE2Qix1QkFBdUIsK0JBQStCLG9CQUFvQiwyQkFBMkIsMkdBQTJHLDhCQUE4QixHQUFHLGdDQUFnQyw2QkFBNkIsK0JBQStCLDhCQUE4Qix5QkFBeUIsdURBQXVELG1FQUFtRSxHQUFHLEdBQUcsR0FBRyx3Q0FBd0MsaUVBQWlFLCtHQUErRyxnREFBZ0QsZ0xBQWdMLDBIQUEwSCxlQUFlLGdCQUFnQiwrQkFBK0Isa0JBQWtCLHlCQUF5Qix1R0FBdUcsd0JBQXdCLHNEQUFzRCwyQkFBMkIsa0RBQWtELG1CQUFtQiwwRUFBMEUsZ0RBQWdELHFEQUFxRCwwQkFBMEIsdURBQXVELG9HQUFvRywyR0FBMkcsR0FBRyxzQkFBc0IsMEVBQTBFLDBFQUEwRSxtQkFBbUIsNEJBQTRCLDBFQUEwRSw4QkFBOEIsK0VBQStFLHNFQUFzRSxZQUFZLEdBQUcsNkJBQTZCLGlIQUFpSCxnQ0FBZ0MsNkJBQTZCLG9EQUFvRCw0QkFBNEIsOEVBQThFLEdBQUcsR0FBRyxHQUFHLHFEQUFxRCwrQkFBK0IsaURBQWlELEdBQUcsK0dBQStHLCtDQUErQyw2UUFBNlEsU0FBUyxFQUFFO0FBQzcrMUMsd0M7Ozs7Ozs7Ozs7QUNOQSxhQUFhLFNBQVMsY0FBYyw0QkFBNEIsWUFBWSxxQkFBcUIsMkRBQTJELGdDQUFnQyxxQ0FBcUMsb0JBQW9CLEVBQUUsaUJBQWlCLDRGQUE0RixlQUFlLHdDQUF3QyxTQUFTLEVBQUUsbUJBQW1CLDhCQUE4QixxREFBcUQsMEJBQTBCLDZDQUE2QyxzQkFBc0IsNkRBQTZELFlBQVksZUFBZSxTQUFTLGlCQUFpQixpQ0FBaUMsaUJBQWlCLFlBQVksVUFBVSxzQkFBc0IsbUJBQW1CLGlEQUFpRCxpQkFBaUIsa0JBQWtCLGFBQWEsdUNBQXVDLFNBQVMsRUFBRSw2QkFBNkIsaUNBQWlDLGFBQWEsZ0NBQWdDLGNBQWMsZ0JBQWdCLGdEQUFnRCxPQUFPLGVBQWUsYUFBYSxtQkFBbUIsNkVBQTZFLHdDQUF3QyxTQUFTLHdDQUF3QyxvQkFBb0Isa0NBQWtDLHFCQUFxQiw2Q0FBNkMsT0FBTyw2Q0FBNkMsdUNBQXVDLGtDQUFrQyxXQUFXLHFDQUFxQyxTQUFTLHFLQUFxSyxnQ0FBZ0MsNkRBQTZELDJCQUEyQixLQUFLLDJCQUEyQixNQUFNLDhDQUE4Qyw0QkFBNEIsYUFBYSxFQUFFLG1DQUFtQyxtQ0FBbUMsd0JBQXdCLHVCQUF1QixpQ0FBaUMsRUFBRSw2SEFBNkgsMkVBQTJFLHVDQUF1QyxzQ0FBc0MsNkJBQTZCLGtDQUFrQyxZQUFZLGdCQUFnQixnQ0FBZ0MsVUFBVSx1Q0FBdUMsaUJBQWlCLHVDQUF1QyxpQkFBaUIsNENBQTRDLCtJQUErSSw0Q0FBNEMsZUFBZSxzQkFBc0IseUNBQXlDLDhCQUE4QixrREFBa0QsZUFBZSxzQkFBc0IsK0JBQStCLHFEQUFxRCxlQUFlLHdCQUF3QiwrQkFBK0IsbURBQW1ELGVBQWUsMkJBQTJCLCtCQUErQix3Q0FBd0MsUUFBUSwrTEFBK0wsMENBQTBDLHVCQUF1Qix3Q0FBd0MsNENBQTRDLG9EQUFvRCxlQUFlLDhEQUE4RCwrQkFBK0IsOEJBQThCLHVEQUF1RCxnQ0FBZ0Msa0JBQWtCLDZCQUE2Qix1REFBdUQsdUNBQXVDLHNEQUFzRCwyQ0FBMkMsK0NBQStDLFNBQVMsaUJBQWlCLHlEQUF5RCxTQUFTLHdDQUF3QyxXQUFXLHlDQUF5QyxXQUFXLG1EQUFtRCwwQkFBMEIsd0JBQXdCLE9BQU8sc0VBQXNFLDhCQUE4QixnR0FBZ0csaUlBQWlJLGlEQUFpRCwyQ0FBMkMsdUNBQXVDLGtCQUFrQix1QkFBdUIsaUNBQWlDLEVBQUUsNkJBQTZCLDZCQUE2Qiw4SEFBOEgsMkVBQTJFLG1EQUFtRCxzQ0FBc0MsZ0RBQWdELGtDQUFrQyxZQUFZLGdCQUFnQixnQ0FBZ0MsVUFBVSx1Q0FBdUMsaUJBQWlCLHVDQUF1QyxpQkFBaUIsd0RBQXdELDRKQUE0Six3REFBd0QsZUFBZSxzQkFBc0IseUNBQXlDLDhCQUE4QixrREFBa0QsZUFBZSxzQkFBc0IsK0JBQStCLHFEQUFxRCxlQUFlLHdCQUF3QiwrQkFBK0IsbURBQW1ELGVBQWUsMkJBQTJCLCtCQUErQix3Q0FBd0MsUUFBUSxtT0FBbU8sMENBQTBDLHVCQUF1Qix3Q0FBd0Msd0RBQXdELG9EQUFvRCxlQUFlLG9GQUFvRiwrQkFBK0IsOEJBQThCLGlIQUFpSCxnQ0FBZ0Msa0JBQWtCLDZCQUE2QixxR0FBcUcsdUNBQXVDLHNEQUFzRCwyQ0FBMkMsK0NBQStDLFNBQVMsaUJBQWlCLHlEQUF5RCxTQUFTLHdDQUF3QyxXQUFXLHlDQUF5QyxXQUFXLG9EQUFvRCwwQkFBMEIsd0JBQXdCLE9BQU8sc0VBQXNFLDZCQUE2QixpQ0FBaUMsNkNBQTZDLDZEQUE2RCwyTEFBMkwsaURBQWlELDJDQUEyQyx5REFBeUQseUJBQXlCLDZVQUE2VSxvQ0FBb0Msc0JBQXNCLDRDQUE0QywrVEFBK1QsU0FBUyw0Q0FBNEMsbUJBQW1CLCtKQUErSixtQkFBbUIsdVRBQXVULGlDQUFpQyxtR0FBbUcsNkJBQTZCLHNYQUFzWCxrREFBa0QsV0FBVyxtQ0FBbUMsZ0JBQWdCLDBKQUEwSixNQUFNLHdNQUF3TSxNQUFNLDhCQUE4QixNQUFNLG1DQUFtQyxtQ0FBbUMsZ0JBQWdCLDhEQUE4RCw2QkFBNkIsTUFBTSxzQkFBc0IsNkJBQTZCLG1CQUFtQixtQkFBbUIsa0NBQWtDLGdGQUFnRixlQUFlLDBkQUEwZCxtREFBbUQsa0RBQWtELG1DQUFtQyxzQkFBc0IsMEJBQTBCLElBQUksRUFBRSxzQ0FBc0MscUxBQXFMLHlDQUF5QywyQ0FBMkMsa0VBQWtFLGFBQWEsbUJBQW1CLHVCQUF1Qix3Q0FBd0MsV0FBVyw4RkFBOEYsd0JBQXdCLDZFQUE2RSx3QkFBd0IsRUFBRSw0Q0FBNEMsbUlBQW1JLDBDQUEwQyx5Q0FBeUMsb0RBQW9ELE1BQU0saUVBQWlFLE9BQU8scU1BQXFNLDZDQUE2QywwQkFBMEIsT0FBTyxXQUFXLG1CQUFtQixxQ0FBcUMsb0xBQW9MLDBCQUEwQixnQkFBZ0IsZ0hBQWdILG1DQUFtQyw2SkFBNkosOEVBQThFLHlLQUF5SyxzRkFBc0Ysb0JBQW9CLHlJQUF5SSxvQkFBb0IseUlBQXlJLGNBQWMsNEJBQTRCLGNBQWMsNkJBQTZCLHVCQUF1QixvREFBb0QsNEJBQTRCLE1BQU0sb0ZBQW9GLEdBQUcsRzs7Ozs7Ozs7OztBQ0FsbmQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUEwQztBQUNsRDtBQUNBLFFBQVEsaUNBQU8sQ0FBQyx5RUFBUSxFQUFFLHdFQUFRLENBQUMsbUNBQUU7QUFDckMsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQSxTQUFTO0FBQUEsa0dBQUM7QUFDVixLQUFLLE1BQU0sdUJBYU47QUFDTCxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCLE9BQU87QUFDbEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsNkNBQTZDLFFBQVE7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRCw2Q0FBNkMsSUFBSTs7QUFFM0c7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0IsUUFBUTtBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQ0FBcUMsY0FBYztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7O0FBRWI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsNkJBQTZCLFNBQVM7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsU0FBUzs7QUFFMUM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQyxvQkFBb0I7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsK0JBQStCLFVBQVU7QUFDekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsMkJBQTJCLFFBQVE7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLCtCQUErQixRQUFRO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFNBQVM7O0FBRVQ7QUFDQSxnQ0FBZ0Msa0JBQWtCO0FBQ2xEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7O0FBRUE7QUFDQSwyREFBMkQsc0JBQXNCLEVBQUU7O0FBRW5GO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdFQUF3RSxjQUFjLEVBQUU7O0FBRXhGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBLGlCQUFpQjtBQUNqQjs7QUFFQSxTQUFTOztBQUVUOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1RUFBdUU7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOztBQUVUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7QUFFVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7O0FBRVQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQzs7Ozs7Ozs7Ozs7QUN6aUREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLEtBQW9ELFdBQVcsbUJBQU8sQ0FBQyxtREFBUSxFQUFFLG1CQUFPLENBQUMsOERBQVcsR0FBRyxDQUF3SyxDQUFDLHVCQUF1QixhQUFhLGNBQWMsK0NBQStDLFdBQVcsa0JBQWtCLGdCQUFnQixZQUFZLFdBQVcsS0FBSyxXQUFXLCtHQUErRyxrQkFBa0IsdUNBQXVDLGFBQWEsb0NBQW9DLFlBQVksbUJBQW1CLEtBQUssbUJBQW1CLHNFQUFzRSxTQUFTLHdCQUF3QixjQUFjLGdCQUFnQix3REFBd0QsS0FBSywwQkFBMEIsNkJBQTZCLFVBQVUsT0FBTyxvREFBb0QsR0FBRyx5QkFBeUIsa0NBQWtDLFNBQVMsb0NBQW9DLG9DQUFvQyxnQkFBZ0IsNkJBQTZCLHlCQUF5QixJQUFJLHdDQUF3QyxTQUFTLGFBQWEsOENBQThDLGVBQWUscUhBQXFILHNGQUFzRixvQkFBb0Isc0JBQXNCLGtDQUFrQyxzQ0FBc0Msa0NBQWtDLGdDQUFnQyx1QkFBdUIseUJBQXlCLGlDQUFpQyw2REFBNkQsMkZBQTJGLHdEQUF3RCwrSEFBK0gsTUFBTSw0QkFBNEIsc0RBQXNELHFDQUFxQyxzQkFBc0Isc0NBQXNDLGtGQUFrRiw0QkFBNEIsdUpBQXVKLG1EQUFtRCx3SkFBd0osbUdBQW1HLHlFQUF5RSxtRkFBbUYsNkNBQTZDLGNBQWMsZ0JBQWdCLGtCQUFrQiwyQkFBMkIsb0JBQW9CLHVHQUF1RyxzQkFBc0Isa0VBQWtFLCtCQUErQix1Q0FBdUMsbUZBQW1GLGtDQUFrQyx3Q0FBd0MsaUNBQWlDLDhCQUE4QixXQUFXLG1FQUFtRSw0Q0FBNEMsK0NBQStDLDhCQUE4QiwyQkFBMkIsNkJBQTZCLCtCQUErQiwwREFBMEQsZ0NBQWdDLDZCQUE2QiwyQ0FBMkMsZ0VBQWdFLEdBQUcsOEJBQThCLG1CQUFtQixxQ0FBcUMsWUFBWSw2QkFBNkIsZUFBZSxLQUFLLEdBQUcsME1BQTBNLDZDQUE2Qyx1Q0FBdUMsY0FBYyxpREFBaUQsa0JBQWtCLDJCQUEyQiwrRUFBK0UsTUFBTSxnRUFBZ0UsTUFBTSxrRkFBa0YsS0FBSyxpQ0FBaUMsc0NBQXNDLGtMQUFrTCxvT0FBb08sc0JBQXNCLG1FQUFtRSxrQ0FBa0MsNkJBQTZCLDRDQUE0QywyRkFBMkYsR0FBRyxZQUFZLDZCQUE2QixlQUFlLEtBQUssR0FBRyx5RkFBeUYsbUJBQW1CLHlKQUF5SixLQUFLLG9EQUFvRCxvR0FBb0csOEdBQThHLGdHQUFnRyw2Q0FBNkMsOERBQThELDhEQUE4RCxrR0FBa0csSUFBSSxLQUFLLDJEQUEyRCw0RkFBNEYsNEZBQTRGLElBQUksS0FBSyxXQUFXLGdHQUFnRyxzSEFBc0gsaURBQWlELHVEQUF1RCxpRUFBaUUsSUFBSSxnSUFBZ0ksSUFBSSx3QkFBd0IsY0FBYyxnQkFBZ0Isd2RBQXdkLGtCQUFrQix5QkFBeUIscUNBQXFDLDhCQUE4QiwrQkFBK0IsZ0ZBQWdGLG1CQUFtQixxQ0FBcUMscUJBQXFCLHlNQUF5TSxxQkFBcUIsbVJBQW1SLGtCQUFrQixXQUFXLHlFQUF5RSw4Q0FBOEMsaUhBQWlILGVBQWUsR0FBRyxLQUFLLCtDQUErQyx3QkFBd0IsK0JBQStCLHNCQUFzQiwyUEFBMlAsMEJBQTBCLGFBQWEsaUNBQWlDLDJCQUEyQixpQ0FBaUMsYUFBYSx5QkFBeUIsc0RBQXNELGlDQUFpQyxXQUFXLHNGQUFzRixxQkFBcUIsbUdBQW1HLGtCQUFrQiw0Q0FBNEMsa0JBQWtCLHNEQUFzRCxzQ0FBc0MsV0FBVyx5QkFBeUIsa0JBQWtCLHdLQUF3SyxlQUFlLGdRQUFnUSxrQkFBa0IsNEJBQTRCLHdHQUF3RywwQkFBMEIsMEZBQTBGLFlBQVksb0VBQW9FLFlBQVksb0hBQW9ILFlBQVksb0VBQW9FLG1CQUFtQix5SUFBeUksSUFBSSxtRUFBbUUsWUFBWSxLQUFLLHdCQUF3Qiw2REFBNkQsdUNBQXVDLE1BQU0sd0NBQXdDLDZCQUE2Qiw0SEFBNEgscUNBQXFDLDZFQUE2RSxxREFBcUQsK0NBQStDLDhEQUE4RCxvQ0FBb0MsOElBQThJLHdDQUF3QyxFQUFFLDZDQUE2QywwQ0FBMEMsNEJBQTRCLHlFQUF5RSxtQ0FBbUMsOERBQThELG9DQUFvQyw4QkFBOEIsZ0ZBQWdGLE1BQU0sbURBQW1ELHdMQUF3TCx3QkFBd0Isd0xBQXdMLHdMQUF3TCxrRUFBa0UsNEZBQTRGLDBDQUEwQyx3Q0FBd0MsRUFBRSwrQ0FBK0MsdUZBQXVGLDRDQUE0Qyw4Q0FBOEMsd0lBQXdJLHdDQUF3QyxLQUFLLDJCQUEyQiwrSEFBK0gsaUJBQWlCLGdDQUFnQyw2QkFBNkIsZ0RBQWdELDJCQUEyQiwyQkFBMkIsT0FBTyxtQ0FBbUMseUZBQXlGLDRCQUE0QiwyRUFBMkUsT0FBTywrQ0FBK0MsR0FBRyxvQ0FBb0MscUNBQXFDLE1BQU0sc0JBQXNCLHlDQUF5QyxVQUFVLGtGQUFrRiwwSEFBMEgsWUFBWSw2QkFBNkIsZUFBZSxFQUFFLDZCQUE2QixVQUFVLEtBQUssR0FBRyx5S0FBeUssNEZBQTRGLElBQUksS0FBSyxzQkFBc0IscUNBQXFDLDBHQUEwRyw2Q0FBNkMsc0NBQXNDLG9CQUFvQixJQUFJLDJDQUEyQyxjQUFjLGdCQUFnQixxT0FBcU8sOEZBQThGLElBQUksS0FBSywyR0FBMkcsYUFBYSxHQUFHLG9FQUFvRSxpTEFBaUwsa0JBQWtCLDJCQUEyQixrRUFBa0UsbUJBQW1CLGVBQWUsb0xBQW9MLDBIQUEwSCwwR0FBMEcsMENBQTBDLGdFQUFnRSwrR0FBK0csMkJBQTJCLHNPQUFzTyxtR0FBbUcsMERBQTBELDJLQUEySywwRUFBMEUsbUJBQW1CLFdBQVcsc0VBQXNFLDBDQUEwQyxnRUFBZ0UsMkJBQTJCLDBLQUEwSyxnQ0FBZ0MsbUJBQW1CLElBQUksS0FBSywwREFBMEQsaUpBQWlKLDBCQUEwQiwwQkFBMEIsd0RBQXdELDBEQUEwRCwwSEFBMEgsNkJBQTZCLGdDQUFnQyx3QkFBd0Isc0JBQXNCLDRKQUE0SiwwQkFBMEIsYUFBYSwyREFBMkQsNEJBQTRCLG1FQUFtRSx5QkFBeUIsYUFBYSxrTEFBa0wsK0dBQStHLHdDQUF3Qyw0REFBNEQsS0FBSywyQ0FBMkMsb0NBQW9DLDJFQUEyRSxxQ0FBcUMsa0NBQWtDLHdDQUF3QyxnQ0FBZ0MsNkJBQTZCLG9EQUFvRCxzQ0FBc0MsRUFBRSx5SUFBeUksMkVBQTJFLFFBQVEsR0FBRyxZQUFZLDZCQUE2QixlQUFlLEVBQUUsNkJBQTZCLFVBQVUsS0FBSyxHQUFHLDRGQUE0RixrREFBa0QscUdBQXFHLDhCQUE4QixnRUFBZ0UsNkJBQTZCLEdBQUcsMEdBQTBHLDZDQUE2QywrREFBK0QsZ0dBQWdHLElBQUksd0pBQXdKLGNBQWMsZ0JBQWdCLGtLQUFrSyxrQkFBa0IsMkJBQTJCLDRFQUE0RSw2Q0FBNkMsa0NBQWtDLG9CQUFvQix3SUFBd0ksT0FBTyw0QkFBNEIsa0ZBQWtGLG9EQUFvRCx1QkFBdUIscUhBQXFILG9CQUFvQix5VUFBeVUscVdBQXFXLG1CQUFtQixvSEFBb0gsT0FBTyw0QkFBNEIsa0ZBQWtGLG9OQUFvTixzQkFBc0Isa01BQWtNLHFCQUFxQix1RkFBdUYsaUNBQWlDLFdBQVcsNkRBQTZELGtEQUFrRCxHQUFHLDBCQUEwQixhQUFhLG1IQUFtSCw4QkFBOEIsZ0JBQWdCLDZDQUE2QyxrREFBa0Qsa0JBQWtCLDRCQUE0QiwyREFBMkQsa1FBQWtRLDRCQUE0Qiw0REFBNEQseUJBQXlCLGdCQUFnQiw4REFBOEQscUJBQXFCLHFEQUFxRCxJQUFJLGdDQUFnQywrQkFBK0IsT0FBTywwQ0FBMEMsK0JBQStCLDBCQUEwQixrQkFBa0IsMkNBQTJDLGdFQUFnRSxXQUFXLE1BQU0sOEJBQThCLGdDQUFnQyw2QkFBNkIsMENBQTBDLDBHQUEwRywyRUFBMkUsUUFBUSxHQUFHLDJCQUEyQixrSkFBa0osSUFBSSxLQUFLLDZFQUE2RSxvQkFBb0IsNENBQTRDLGNBQWMscUtBQXFLLDRDQUE0QyxzV0FBc1cscUNBQXFDLG9DQUFvQyx3REFBd0Qsc0NBQXNDLHVPQUF1TyxvRUFBb0Usb0JBQW9CLDRNQUE0TSwySEFBMkgsbUNBQW1DLEdBQUcsaUJBQWlCLDBCQUEwQixrRkFBa0YsWUFBWSw2QkFBNkIsZUFBZSxFQUFFLDZCQUE2QixVQUFVLEVBQUUsaUNBQWlDLFVBQVUsS0FBSyxHQUFHLDBVQUEwVSx5RkFBeUYsaUVBQWlFLG9CQUFvQiwwR0FBMEcsNkNBQTZDLDRCQUE0Qix5Q0FBeUMsSUFBSSw4RUFBOEUsY0FBYyxnQkFBZ0IsMk9BQTJPLGtCQUFrQiw0QkFBNEIsOENBQThDLG9CQUFvQixXQUFXLDJDQUEyQyxzRUFBc0UsdUNBQXVDLGdCQUFnQixFQUFFLHVTQUF1UyxpQkFBaUIsdUVBQXVFLGtFQUFrRSxnRUFBZ0UsR0FBRyxrQ0FBa0MseUJBQXlCLEtBQUssb0JBQW9CLFdBQVcsZ0VBQWdFLHVDQUF1QywrRUFBK0UsaUJBQWlCLGdEQUFnRCw0UkFBNFIsd0RBQXdELDJEQUEyRCx1QkFBdUIsMkJBQTJCLHlCQUF5QixzQkFBc0IseURBQXlELHFDQUFxQyw2U0FBNlMsMkJBQTJCLHFCQUFxQiwwQkFBMEIsYUFBYSx1Q0FBdUMseUNBQXlDLHVEQUF1RCxnRUFBZ0UsdUVBQXVFLHdGQUF3Rix1REFBdUQseUdBQXlHLHNHQUFzRyw4QkFBOEIsc0NBQXNDLGtEQUFrRCw0QkFBNEIscUhBQXFILHdmQUF3Zix3Q0FBd0MsZ0JBQWdCLGVBQWUsNEZBQTRGLE1BQU0sdURBQXVELHdFQUF3RSxTQUFTLDRCQUE0QixXQUFXLCtFQUErRSwrR0FBK0csR0FBRyw4QkFBOEIsV0FBVyxrRkFBa0YsZ0lBQWdJLDJFQUEyRSw4QkFBOEIsV0FBVyxrRUFBa0UseUJBQXlCLDRDQUE0Qyx5QkFBeUIsV0FBVywwTkFBME4sOElBQThJLEdBQUcsOEJBQThCLHlFQUF5RSw2QkFBNkIsaUVBQWlFLHlDQUF5QyxpUEFBaVAscUpBQXFKLG9GQUFvRixzQkFBc0IseURBQXlELDBFQUEwRSx3Q0FBd0MsOENBQThDLGlCQUFpQiw0QkFBNEIsOENBQThDLHlEQUF5RCwwRUFBMEUsU0FBUyxZQUFZLDRCQUE0Qix1RUFBdUUsbUxBQW1MLGdDQUFnQyx1RUFBdUUsOEJBQThCLDRDQUE0QyxvSEFBb0gsNEJBQTRCLFdBQVcsNEJBQTRCLDhKQUE4SixpQ0FBaUMsK0RBQStELCtGQUErRixvQ0FBb0MsNkRBQTZELDZGQUE2RixHQUFHLHVGQUF1Riw4R0FBOEcsZ0RBQWdELDhCQUE4QixvR0FBb0csaUNBQWlDLHlDQUF5QyxvRUFBb0UsR0FBRyw4REFBOEQsaUNBQWlDLHdDQUF3QyxxRkFBcUYsR0FBRyxxREFBcUQsNEZBQTRGLGlDQUFpQyxvQ0FBb0MsbUVBQW1FLG9EQUFvRCxzQ0FBc0Msa0NBQWtDLDZCQUE2Qiw2Q0FBNkMsb0RBQW9ELEVBQUUsK0VBQStFLDJFQUEyRSxRQUFRLHVCQUF1QixHQUFHLFlBQVksNkJBQTZCLGVBQWUsRUFBRSw2QkFBNkIsVUFBVSxLQUFLLEdBQUcsc0ZBQXNGLDhDQUE4QyxpQ0FBaUMsaURBQWlELDZDQUE2Qyw4REFBOEQsb0RBQW9ELDREQUE0RCx1Q0FBdUMsR0FBRyxHQUFHLDZDQUE2QyxtSEFBbUgsZ0RBQWdELHdGQUF3Riw2VEFBNlQsaUxBQWlMLHVCQUF1QixrQkFBa0IseUJBQXlCLHVDQUF1QywrSUFBK0ksc0NBQXNDLDBGQUEwRixtRUFBbUUsdUJBQXVCLGVBQWUsK0JBQStCLGtHQUFrRyxnQ0FBZ0MsMkJBQTJCLGtCQUFrQixJQUFJLDhCQUE4QixTQUFTLHNDQUFzQyxHQUFHLGdCQUFnQixJQUFJLFNBQVMsd0JBQXdCLHVIQUF1SCxnY0FBZ2MsSUFBSSxnRUFBZ0UsSUFBSSx3VkFBd1YsSUFBSSw0UkFBNFIsY0FBYyxnQkFBZ0Isb0hBQW9ILDZFQUE2RSxvR0FBb0csa0JBQWtCLDJCQUEyQixtQkFBbUIsc0JBQXNCLG1CQUFtQiw0QkFBNEIsaUNBQWlDLHNCQUFzQix5QkFBeUIscUVBQXFFLHNOQUFzTixLQUFLLHVGQUF1Rix3QkFBd0Isc0JBQXNCLDZjQUE2YyxtQkFBbUIsV0FBVywwR0FBMEcsbURBQW1ELDBDQUEwQyxtQ0FBbUMsOEhBQThILHFDQUFxQyw2REFBNkQsOElBQThJLDhJQUE4SSwyQkFBMkIsMkJBQTJCLHlkQUF5ZCxpQkFBaUIsdUNBQXVDLG9CQUFvQix3R0FBd0cseUNBQXlDLG1EQUFtRCxvRUFBb0UsVUFBVSxvQkFBb0IsOEZBQThGLDBPQUEwTywrREFBK0QscVJBQXFSLDRDQUE0Qyw2REFBNkQsU0FBUyxxQkFBcUIscUJBQXFCLG1EQUFtRCw0QkFBNEIsZ0NBQWdDLGtDQUFrQywwREFBMEQsNEJBQTRCLHNFQUFzRSx5QkFBeUIsMkJBQTJCLDhIQUE4SCxtQ0FBbUMsNFBBQTRQLHVCQUF1Qix1REFBdUQsNEdBQTRHLGdDQUFnQyxXQUFXLFdBQVcsRUFBRSx1QkFBdUIsK0JBQStCLHVDQUF1QyxRQUFRLGlCQUFpQixrQkFBa0Isd0NBQXdDLHNCQUFzQixxRUFBcUUsc0JBQXNCLDBDQUEwQywyQkFBMkIseUJBQXlCLGdCQUFnQiw2REFBNkQscUJBQXFCLG1EQUFtRCxJQUFJLCtCQUErQiw0QkFBNEIsbUtBQW1LLDhCQUE4QiwwQkFBMEIsNEJBQTRCLFdBQVcsb0RBQW9ELGdHQUFnRyxtQkFBbUIsR0FBRyxzQkFBc0IsdUpBQXVKLHlEQUF5RCxtQkFBbUIsdUNBQXVDLG1CQUFtQixJQUFJLHFDQUFxQyxvQkFBb0IsMkhBQTJILGNBQWMsNkJBQTZCLG1CQUFtQix3QkFBd0IsOERBQThELG9MQUFvTCx3QkFBd0IsZ0NBQWdDLGlhQUFpYSxpQ0FBaUMsaUNBQWlDLHdCQUF3QixnQ0FBZ0MsZ1dBQWdXLGdDQUFnQyxpQ0FBaUMsbUNBQW1DLG9FQUFvRSxTQUFTLDBCQUEwQixxQ0FBcUMsMkNBQTJDLCtCQUErQiwwQkFBMEIsc0RBQXNELG9CQUFvQiwwQkFBMEIsNE9BQTRPLGlDQUFpQyxTQUFTLDRHQUE0RyxTQUFTLDZCQUE2QixpRUFBaUUsOENBQThDLDRDQUE0QywyR0FBMkcsNkJBQTZCLG1EQUFtRCxrSkFBa0osZ0NBQWdDLDZCQUE2QixxRUFBcUUsbUdBQW1HLDJFQUEyRSxRQUFRLEdBQUcsWUFBWSw2QkFBNkIsZUFBZSxFQUFFLDZCQUE2QixVQUFVLEVBQUUsMEJBQTBCLFVBQVUsRUFBRSw4QkFBOEIsb0JBQW9CLEVBQUUsMkJBQTJCLFVBQVUsRUFBRSwrQkFBK0IscUJBQXFCLEVBQUUsaUNBQWlDLFVBQVUsS0FBSyxHQUFHLHVHQUF1Ryw2Q0FBNkMsb0ZBQW9GLFlBQVksNExBQTRMLFNBQVMsZ0JBQWdCLG9DQUFvQyxNQUFNLDRSQUE0UixnQkFBZ0IsUUFBUSxhQUFhLHFDQUFxQyx1RkFBdUYsa0JBQWtCLGtDQUFrQywyQ0FBMkMsa0NBQWtDLDBEQUEwRCw0QkFBNEIsc0VBQXNFLHlCQUF5QixzQ0FBc0Msa0VBQWtFLHlCQUF5Qiw0SEFBNEgsMEJBQTBCLHNFQUFzRSw2QkFBNkIsa0VBQWtFLGdEQUFnRCxnQ0FBZ0MsNkJBQTZCLHFFQUFxRSxpSEFBaUgsMkVBQTJFLFFBQVEsR0FBRyxZQUFZLDZCQUE2QixlQUFlLEVBQUUsNkJBQTZCLFdBQVcsRUFBRSwwQkFBMEIsVUFBVSxFQUFFLDhCQUE4QixvQkFBb0IsRUFBRSwyQkFBMkIsV0FBVyxFQUFFLCtCQUErQixxQkFBcUIsRUFBRSxpQ0FBaUMsV0FBVyxLQUFLLElBQUkseUdBQXlHLDhDQUE4QywyQ0FBMkMsa0NBQWtDLEtBQUssMERBQTBELGVBQWUsZ0JBQWdCLFdBQVcsb1hBQW9YLHFCQUFxQixrQ0FBa0Msa0JBQWtCLDRCQUE0QiwrS0FBK0ssdUpBQXVKLG9DQUFvQyx1Q0FBdUMsZ0NBQWdDLHVEQUF1RCxZQUFZLHVCQUF1QixTQUFTLHVCQUF1QixpQkFBaUIsd0JBQXdCLDRDQUE0QyxHQUFHLHNCQUFzQiwrUUFBK1EsMEJBQTBCLDBCQUEwQiw4QkFBOEIsa0NBQWtDLHFDQUFxQyxvRUFBb0Usb0NBQW9DLDRCQUE0QixrR0FBa0csK0JBQStCLG9IQUFvSCwrQkFBK0IsMEdBQTBHLHVCQUF1Qix5SEFBeUgsZ0RBQWdELDRDQUE0QywwQ0FBMEMsS0FBSyxnSEFBZ0gsK0JBQStCLElBQUksRUFBRSwrSkFBK0oseUJBQXlCLG1DQUFtQyxpREFBaUQscURBQXFELHNFQUFzRSw2WEFBNlgsZ0JBQWdCLEVBQUUscUJBQXFCLDZFQUE2RSxzQ0FBc0Msd0JBQXdCLG9DQUFvQyxHQUFHLGdDQUFnQyw2QkFBNkIsMkNBQTJDLHVHQUF1RywyRUFBMkUsUUFBUSxHQUFHLFlBQVksNkJBQTZCLGVBQWUsRUFBRSw2QkFBNkIsV0FBVyxLQUFLLEdBQUcsOERBQThELHFGQUFxRixJQUFJLEVBQUUsc0JBQXNCLHNDQUFzQywrR0FBK0csZ0RBQWdELHNDQUFzQyxjQUFjLGdCQUFnQixrQkFBa0IseUJBQXlCLFdBQVcsbUxBQW1MLDZHQUE2RyxNQUFNLHNFQUFzRSw0REFBNEQscUNBQXFDLDRCQUE0QixtQ0FBbUMsZ0JBQWdCLEVBQUUsb0hBQW9ILGlFQUFpRSxpQkFBaUIsdUNBQXVDLHlCQUF5QixvQ0FBb0MsZ0JBQWdCLEVBQUUsMERBQTBELHlDQUF5QyxzQkFBc0IsZ0VBQWdFLDZCQUE2QixtTEFBbUwscUNBQXFDLFNBQVMsNENBQTRDLGlGQUFpRixTQUFTLHVDQUF1QyxNQUFNLG1DQUFtQyxrRUFBa0UseUdBQXlHLHlPQUF5TywyQ0FBMkMsTUFBTSw0REFBNEQsZ0NBQWdDLG1DQUFtQyxPQUFPLGdDQUFnQyw2QkFBNkIseUNBQXlDLDZEQUE2RCwyRUFBMkUsUUFBUSxHQUFHLFlBQVksNkJBQTZCLGVBQWUsS0FBSyxHQUFHLDhIQUE4SCxvRUFBb0UsK0dBQStHLGdEQUFnRCw4QkFBOEIsc0RBQXNELEtBQUssbUNBQW1DLGVBQWUsZ0JBQWdCLHdGQUF3RixrQkFBa0IseUJBQXlCLDhDQUE4QyxnRUFBZ0UsaUZBQWlGLGlCQUFpQiwrS0FBK0ssU0FBUyxxQkFBcUIsaUlBQWlJLHdEQUF3RCx5RUFBeUUsVUFBVSxtQkFBbUIsNkNBQTZDLHVDQUF1QywyRUFBMkUsc0JBQXNCLGlQQUFpUCwwQkFBMEIsYUFBYSw4REFBOEQsOERBQThELDRCQUE0QixXQUFXLDBGQUEwRixnQkFBZ0IsR0FBRyxxQkFBcUIsd0JBQXdCLG1GQUFtRixrRUFBa0Usd0RBQXdELHlFQUF5RSxTQUFTLDRCQUE0QiwrQ0FBK0MsZ0NBQWdDLDZCQUE2QiwyQ0FBMkMscUZBQXFGLDJFQUEyRSxZQUFZLEdBQUcsWUFBWSw2QkFBNkIsZUFBZSxFQUFFLGlDQUFpQyxXQUFXLEVBQUUsNkJBQTZCLFdBQVcsS0FBSyxHQUFHLGtIQUFrSCxpREFBaUQsa0xBQWtMLFNBQVMsRUFBRTtBQUNqdDdELHlDOzs7Ozs7Ozs7O0FDTkEsZUFBZSxtQkFBTyxDQUFDLDZFQUF3Qjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7Ozs7Ozs7OztBQ05BLFlBQVksbUJBQU8sQ0FBQyxxRUFBb0I7QUFDeEMsc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDO0FBQzlELGlCQUFpQixtQkFBTyxDQUFDLDZGQUFnQzs7QUFFekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7Ozs7Ozs7OztBQ2xCQSxzQkFBc0IsbUJBQU8sQ0FBQyw2RkFBZ0M7O0FBRTlEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUssaUJBQWlCO0FBQ3RCLEdBQUc7QUFDSDs7Ozs7Ozs7Ozs7QUNkQSxlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLHFCQUFxQixtQkFBTyxDQUFDLHlHQUFzQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7QUNoQkEsZUFBZSxtQkFBTyxDQUFDLDZFQUF3Qjs7QUFFL0M7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7Ozs7Ozs7OztBQ05BLGFBQWEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDMUMsV0FBVywyR0FBd0M7QUFDbkQsa0JBQWtCLG1CQUFPLENBQUMsaUZBQTBCOztBQUVwRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7Ozs7Ozs7Ozs7OztBQ2JZO0FBQ2Isa0JBQWtCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ3BELFlBQVksbUJBQU8sQ0FBQyxxRUFBb0I7QUFDeEMsaUJBQWlCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ25ELGtDQUFrQyxtQkFBTyxDQUFDLHlIQUE4QztBQUN4RixpQ0FBaUMsbUJBQU8sQ0FBQyxxSEFBNEM7QUFDckYsZUFBZSxtQkFBTyxDQUFDLDZFQUF3QjtBQUMvQyxvQkFBb0IsbUJBQU8sQ0FBQyx1RkFBNkI7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU8sMkJBQTJCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHLElBQUksT0FBTztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLGNBQWMsRUFBRTtBQUM3RCxtQkFBbUIsMENBQTBDO0FBQzdELENBQUMscUNBQXFDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOzs7Ozs7Ozs7OztBQ3JERDtBQUNBLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0MseUJBQXlCLG1CQUFPLENBQUMsbUdBQW1DOztBQUVwRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxnQkFBZ0I7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7OztBQ3pCRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDTmE7QUFDYixnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7QUFDakQsNkJBQTZCLG1CQUFPLENBQUMsMkdBQXVDOztBQUU1RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsTUFBTTtBQUNkO0FBQ0E7Ozs7Ozs7Ozs7O0FDYkEsNkJBQTZCLG1CQUFPLENBQUMsMkdBQXVDO0FBQzVFLGtCQUFrQixtQkFBTyxDQUFDLGlGQUEwQjs7QUFFcEQ7QUFDQTtBQUNBOztBQUVBLHNCQUFzQixnREFBZ0Q7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdCQUF3QixzQkFBc0I7QUFDOUM7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQzNCQSxjQUFjLG1CQUFPLENBQUMsaUZBQTBCOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OztBQ1RBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDRmE7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLGNBQWMscUhBQThDO0FBQzVELG1DQUFtQyxtQkFBTyxDQUFDLDJIQUErQzs7QUFFMUY7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRyw2REFBNkQ7QUFDaEU7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7O0FDZFk7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLGdCQUFnQixxSEFBK0M7QUFDL0QsdUJBQXVCLG1CQUFPLENBQUMsK0ZBQWlDOztBQUVoRTtBQUNBO0FBQ0EsR0FBRywrQkFBK0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOzs7Ozs7Ozs7OztBQ2RBLGVBQWUsbUJBQU8sQ0FBQywyRUFBdUI7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7Ozs7Ozs7Ozs7OztBQ2hCYTtBQUNiLGtCQUFrQixtQkFBTyxDQUFDLGlGQUEwQjtBQUNwRCxhQUFhLG1CQUFPLENBQUMsdUVBQXFCO0FBQzFDLGVBQWUsbUJBQU8sQ0FBQyw2RUFBd0I7QUFDL0MsZUFBZSxtQkFBTyxDQUFDLDJFQUF1QjtBQUM5QyxVQUFVLG1CQUFPLENBQUMsaUVBQWtCO0FBQ3BDLGNBQWMsbUJBQU8sQ0FBQyxpRkFBMEI7QUFDaEQsd0JBQXdCLG1CQUFPLENBQUMsaUdBQWtDO0FBQ2xFLGtCQUFrQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNyRCxZQUFZLG1CQUFPLENBQUMscUVBQW9CO0FBQ3hDLGFBQWEsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDakQsMEJBQTBCLDRJQUF1RDtBQUNqRiwrQkFBK0Isc0pBQTREO0FBQzNGLHFCQUFxQiw4SEFBZ0Q7QUFDckUsV0FBVywyR0FBd0M7O0FBRW5EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BELEtBQUs7QUFDTDtBQUNBLG9DQUFvQyxjQUFjLE9BQU87QUFDekQscUNBQXFDLGNBQWMsT0FBTztBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixnQkFBZ0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxxQ0FBcUMsRUFBRTtBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixpQkFBaUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O0FDL0VhO0FBQ2IsUUFBUSxtQkFBTyxDQUFDLHVFQUFxQjtBQUNyQyxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7QUFDakQsc0JBQXNCLG1CQUFPLENBQUMsNkZBQWdDO0FBQzlELGFBQWEsbUJBQU8sQ0FBQyxxRkFBNEI7QUFDakQsWUFBWSxtQkFBTyxDQUFDLHFFQUFvQjs7QUFFeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCLENBQUM7O0FBRUQ7QUFDQTtBQUNBLEdBQUcsZ0RBQWdEO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7Ozs7Ozs7Ozs7O0FDNUhELFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsYUFBYSxtQkFBTyxDQUFDLHFGQUE0Qjs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsR0FBRyxpRUFBaUU7QUFDcEU7QUFDQSxDQUFDOzs7Ozs7Ozs7OztBQ1JELFFBQVEsbUJBQU8sQ0FBQyx1RUFBcUI7QUFDckMsa0JBQWtCLG1CQUFPLENBQUMsaUZBQTBCO0FBQ3BELGlDQUFpQyxtQkFBTyxDQUFDLHVHQUFxQzs7QUFFOUU7QUFDQTtBQUNBLEdBQUcseUVBQXlFO0FBQzVFO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7QUNSRCxRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLCtCQUErQixtQkFBTyxDQUFDLCtGQUFpQzs7QUFFeEU7QUFDQTtBQUNBLEdBQUcsK0RBQStEO0FBQ2xFO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7O0FDUFk7QUFDYixRQUFRLG1CQUFPLENBQUMsdUVBQXFCO0FBQ3JDLGlCQUFpQixtQkFBTyxDQUFDLG1GQUEyQjtBQUNwRCw2QkFBNkIsbUJBQU8sQ0FBQywyR0FBdUM7QUFDNUUsMkJBQTJCLG1CQUFPLENBQUMseUdBQXNDOztBQUV6RTtBQUNBO0FBQ0EsR0FBRywyRUFBMkU7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7Ozs7Ozs7Ozs7QUNiWTtBQUNiLG9DQUFvQyxtQkFBTyxDQUFDLCtIQUFpRDtBQUM3RixlQUFlLG1CQUFPLENBQUMsNkVBQXdCO0FBQy9DLDZCQUE2QixtQkFBTyxDQUFDLDJHQUF1QztBQUM1RSxnQkFBZ0IsbUJBQU8sQ0FBQywrRUFBeUI7QUFDakQsaUJBQWlCLG1CQUFPLENBQUMsbUdBQW1DOztBQUU1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ2pDRDs7Ozs7Ozs7Ozs7OztBQ0FBOzs7Ozs7Ozs7Ozs7O0FDQUE7Ozs7Ozs7Ozs7Ozs7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3RFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzSkg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUtIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0REg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkdIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckRIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1TEg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUlIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0Rkg7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ25ESDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvSEg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckhIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsSUFBSTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3pISDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3BLSDtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3BKSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEdIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzFLSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3REg7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQixhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2hHSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcERIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5RUg7QUFDQTtBQUNBOztBQUVBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzdFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzdFSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3pGSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsNEJBQTRCO0FBQzVCLDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRDtBQUNBLHNEQUFzRDtBQUN0RDtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2R0g7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkVIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0RIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ25FSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuRUg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvREg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkVIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ25FSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ25FSDtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkdIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekdIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekdIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekdIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN0VIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzlESDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDN0dIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4SEg7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3pESDtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkRIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEVIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3hFSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2R0g7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM1RUg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5Rkg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5Rkg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3pFSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzNISDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzNISDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeEhIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzdGSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbktIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekpIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckhIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJLElBQUksSUFBSTtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0ZIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzNFSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxSUg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0RIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3pHSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ25KSDtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzRUg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsMENBQTBDLElBQUksSUFBSSxJQUFJO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0ZIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2pGSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGtDQUFrQyxJQUFJO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyR0g7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxSEg7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzFFSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNySEg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ25GSDtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdElIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wscUNBQXFDLElBQUk7QUFDekM7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoRUg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxSEg7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUZIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3JISDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1ELElBQUk7QUFDdkQseURBQXlELElBQUk7QUFDN0Qsd0RBQXdELElBQUk7QUFDNUQsOERBQThELElBQUk7QUFDbEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzFESDtBQUNBO0FBQ0E7QUFDQTtBQUMrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEZIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQy9FSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2xHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDek1IO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzNFSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUVIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdERIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzFGSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzVESDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZISDtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckdIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkdIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzNESDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeEhIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxSUg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQSxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4REg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQyxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3REg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3TUg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEZIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3hESDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkVIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQy9JSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDektIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaEVIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ25ISDtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckhIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuRUg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyREg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsNEJBQTRCO0FBQzVCLFNBQVM7QUFDVCwyQkFBMkI7QUFDM0IsU0FBUztBQUNULDhCQUE4QjtBQUM5QixTQUFTO0FBQ1QsOEJBQThCO0FBQzlCLFNBQVM7QUFDVCwyQkFBMkI7QUFDM0IsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2hJSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDckZIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ25FSDtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkhIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDL0RIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUZIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeERIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDNUhIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekdIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0I7QUFDQTtBQUNBLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3hGQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwREg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcERIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQzdHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsS0g7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqRkg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcERIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbERIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5RUg7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdEVIO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxzQ0FBc0MsSUFBSTtBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDLENBQUMsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwREg7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFK0I7O0FBRS9CLGlFQUFlLHlEQUFtQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZISDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDcEdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRStCOztBQUUvQixpRUFBZSx5REFBbUI7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsZ0NBQWdDLElBQUk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsQ0FBQyxDQUFDLEVBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkdIO0FBQ0E7QUFDQTtBQUNBOztBQUUrQjs7QUFFL0IsaUVBQWUseURBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLGdDQUFnQyxJQUFJO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLENBQUMsQ0FBQyxFQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ2xHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsZ0JBQWdCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixTQUFTO0FBQzVCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLDZCQUE2QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixzQkFBc0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQyxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixJQUFJO0FBQ3BCO0FBQ0E7O0FBRUE7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1IQUFtSCxJQUFJLHdCQUF3QixJQUFJLHVEQUF1RCxJQUFJO0FBQzlNLGlFQUFpRSxJQUFJO0FBQ3JFLHdCQUF3QjtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0MsWUFBWTtBQUNsRDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsWUFBWTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3Q0FBd0MsSUFBSTs7QUFFNUM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRCQUE0QjtBQUM1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixtQ0FBbUM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsd0JBQXdCO0FBQzNDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixFQUFFO0FBQ25CLGlCQUFpQixFQUFFO0FBQ25CLHNCQUFzQixFQUFFO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixJQUFJO0FBQ3hCLG9CQUFvQixJQUFJO0FBQ3hCLHlCQUF5QixJQUFJO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLElBQUk7QUFDeEM7QUFDQTtBQUNBLHVCQUF1QixNQUFNLHdFQUF3RSxNQUFNLG1CQUFtQixNQUFNLHFCQUFxQixNQUFNLEVBQUUsSUFBSTtBQUNySzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEM7QUFDMUM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsa0JBQWtCO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixRQUFRO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1CQUFtQixPQUFPO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLE9BQU87QUFDdEI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsZ0JBQWdCO0FBQ2hCLHVCQUF1QjtBQUN2Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFVBQVU7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsUUFBYTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLFNBQU87QUFDcEMsWUFBWSxtRkFBZSxJQUFXLE9BQU8sQ0FBQztBQUM5QztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1Q0FBdUMsRUFBRSxJQUFJLEVBQUU7QUFDL0Msb0NBQW9DLEVBQUUsSUFBSSxFQUFFO0FBQzVDO0FBQ0E7QUFDQSxpQ0FBaUMsRUFBRTtBQUNuQywyQkFBMkIsRUFBRTtBQUM3Qiw2QkFBNkIsRUFBRTtBQUMvQiwyQkFBMkIsRUFBRTtBQUM3Qix5QkFBeUIsRUFBRSxJQUFJLEVBQUU7QUFDakMsd0JBQXdCLEVBQUU7QUFDMUIsK0JBQStCLEdBQUc7QUFDbEMseUJBQXlCLEVBQUU7QUFDM0IsMkJBQTJCLEVBQUUsSUFBSSxFQUFFO0FBQ25DLDBCQUEwQixFQUFFLElBQUksRUFBRTtBQUNsQyx3QkFBd0IsRUFBRTtBQUMxQix1QkFBdUIsRUFBRTtBQUN6QixxQkFBcUIsRUFBRTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQsSUFBSSwwREFBMEQsSUFBSSxxRUFBcUUsRUFBRTtBQUNuTTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0MsT0FBTztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLE9BQU87QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsK0JBQStCO0FBQzlDO0FBQ0E7O0FBRUE7QUFDQSxVQUFVLE9BQU87QUFDakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGVBQWUsbUJBQW1CO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLHNCQUFzQjtBQUNyQztBQUNBO0FBQ0Esa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsOEJBQThCLGtCQUFrQjtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxvQkFBb0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSxxQkFBcUI7QUFDcEM7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsU0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGNBQWM7QUFDZDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUdBQXVHO0FBQ3ZHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLHVCQUF1QjtBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZUFBZSx1QkFBdUI7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLHVCQUF1QjtBQUN0RDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix1QkFBdUI7QUFDdEQ7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQkFBb0I7QUFDcEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxPQUFPO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDLE9BQU87QUFDdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxPQUFPO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLE9BQU87QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsT0FBTztBQUN2QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDLE9BQU87QUFDdkM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdDQUFnQyxPQUFPO0FBQ3ZDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9CQUFvQixtQkFBbUI7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFtQjtBQUNwQztBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxnQ0FBZ0MsSUFBSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUVBQWUsS0FBSyxFQUFDOzs7Ozs7Ozs7OztBQzdoTHJCOztBQUVBLFlBQVksMkZBQTJGLHlDQUF5QyxPQUFPLHdCQUF3QixtREFBbUQsMEJBQTBCLCtCQUErQiwrQ0FBK0MsMkJBQTJCLCtCQUErQix3REFBd0Qsd0JBQXdCLGlEQUFpRCw2QkFBNkIsc0ZBQXNGLHNCQUFzQiw4QkFBOEIsc0JBQXNCLDRCQUE0QiwyQkFBMkIsc0NBQXNDLHFCQUFxQixHOzs7Ozs7Ozs7O0FDRnB6QjtBQUNBLGFBQWEsS0FBcUMsQ0FBQyxpQ0FBTyxDQUFDLHdFQUFRLENBQUMsb0NBQUMsQ0FBQztBQUFBO0FBQUE7QUFBQSxrR0FBQyxDQUFDLENBQStLLENBQUMsYUFBYSxpQkFBaUIsa0VBQWtFLGtDQUFrQyxnQkFBZ0IsbUJBQW1CLGdCQUFnQixvRUFBb0UsTUFBTSx5SkFBeUosV0FBVyx3Q0FBd0Msa0JBQWtCLHFEQUFxRCw0QkFBNEIsY0FBYyxjQUFjLDhCQUE4QixJQUFJLEtBQUssNkNBQTZDLElBQUksOENBQThDLFFBQVEsTUFBTSxXQUFXLDBCQUEwQixvREFBb0QsU0FBUyxnQkFBZ0Isa0JBQWtCLDBCQUEwQixvRkFBb0YsY0FBYyxtQkFBbUIsUUFBUSxjQUFjLFdBQVcsV0FBVyxpQ0FBaUMsNkNBQTZDLFlBQVksY0FBYyw0QkFBNEIsbUVBQW1FLGNBQWMsaUJBQWlCLGtDQUFrQyxLQUFLLEtBQUssS0FBSyxLQUFLLHdFQUF3RSw2QkFBNkIsbUZBQW1GLGNBQWMscURBQXFELDRCQUE0QixJQUFJLG9CQUFvQixZQUFZLHFCQUFxQixXQUFXLDRCQUE0QixvQkFBb0IsT0FBTyxnREFBZ0Qsb0NBQW9DLEdBQUcsT0FBTyxxQkFBcUIsa0NBQWtDLDhDQUE4QywrREFBK0QsV0FBVywwREFBMEQsNkNBQTZDLHdDQUF3Qyx5Q0FBeUMsS0FBSyx5Q0FBeUMsNEJBQTRCLFlBQVkscUdBQXFHLGlCQUFpQiwyQkFBMkIseURBQXlELGNBQWMsOENBQThDLDhCQUE4Qix3QkFBd0Isb0VBQW9FLFdBQVcsTUFBTSxzQkFBc0IsWUFBWSxpQ0FBaUMsbUdBQW1HLG9EQUFvRCxPQUFPLFVBQVUscUVBQXFFLGtDQUFrQyxXQUFXLGlOQUFpTixrREFBa0QsU0FBUyxjQUFjLHVCQUF1QixnQkFBZ0Isc0RBQXNELFNBQVMsdUJBQXVCLFFBQVEsZ0JBQWdCLGFBQWEsbUJBQW1CLHdDQUF3QywyRUFBMkUsMEJBQTBCLGtCQUFrQixhQUFhLHlGQUF5RixtR0FBbUcsdURBQXVELG9CQUFvQixZQUFZLFdBQVcsS0FBSyxXQUFXLDhCQUE4QixjQUFjLG1CQUFtQixxQ0FBcUMscUJBQXFCLGtCQUFrQiwwRUFBMEUsWUFBWSxXQUFXLEtBQUssV0FBVyxvQkFBb0IsVUFBVSxhQUFhLGtCQUFrQiw2QkFBNkIsaUNBQWlDLHFFQUFxRSxpQ0FBaUMsa0RBQWtELGlDQUFpQyx3Q0FBd0MsdUpBQXVKLGtDQUFrQyx1QkFBdUIsSUFBSSx1QkFBdUIsNENBQTRDLGlCQUFpQixJQUFJLEtBQUssNkNBQTZDLFNBQVMsc0JBQXNCLGtCQUFrQixzQkFBc0IsNEJBQTRCLGdCQUFnQix1QkFBdUIsaUJBQWlCLFlBQVksV0FBVyxLQUFLLFdBQVcsK0RBQStELG9DQUFvQyxhQUFhLFNBQVMsMkJBQTJCLG1EQUFtRCx5SUFBeUksNEJBQTRCLE9BQU8sV0FBVyxZQUFZLFdBQVcsV0FBVyxhQUFhLFlBQVksWUFBWSxHQUFHLHdFQUF3RSxZQUFZLEVBQUUsNEJBQTRCLG9DQUFvQyxVQUFVLG9CQUFvQixXQUFXLE1BQU0sWUFBWSxjQUFjLFFBQVEsd0NBQXdDLHdDQUF3Qyw2SEFBNkgsNkJBQTZCLDhCQUE4Qiw4QkFBOEIsb0JBQW9CLHlCQUF5Qiw4QkFBOEIsdUZBQXVGLDBCQUEwQiw4QkFBOEIsNkVBQTZFLEdBQUcsZ0VBQWdFLGtCQUFrQiw4RUFBOEUsOERBQThELHFFQUFxRSwyRkFBMkYsOEJBQThCLHNCQUFzQix3Q0FBd0MsdUNBQXVDLGdDQUFnQywwSUFBMEksMkZBQTJGLHFDQUFxQyx5REFBeUQsZ0NBQWdDLG1CQUFtQixTQUFTLDBDQUEwQywrQkFBK0IsWUFBWSxtQkFBbUIsS0FBSyxvQ0FBb0MsVUFBVSx3QkFBd0IsMEVBQTBFLG9CQUFvQixFQUFFLG9DQUFvQyxxQ0FBcUMsOEJBQThCLHFDQUFxQywyQ0FBMkMsdUdBQXVHLHlHQUF5RyxtQ0FBbUMsV0FBVyw4QkFBOEIsMEJBQTBCLHVCQUF1QixFQUFFLDJFQUEyRSxpREFBaUQsdUlBQXVJLEVBQUUsRUFBRSxxQ0FBcUMsbUJBQW1CLE9BQU8saUZBQWlGLGtCQUFrQix5REFBeUQsb0NBQW9DLGdEQUFnRCxnQ0FBZ0MsbUNBQW1DLHNDQUFzQyxPQUFPLHNDQUFzQyxnSUFBZ0kseVVBQXlVLFdBQVcsb0JBQW9CLGVBQWUsOENBQThDLHFDQUFxQyxLQUFLLG1CQUFtQixpQkFBaUIsb0JBQW9CLEtBQUsscUNBQXFDLFVBQVUscUJBQXFCLGtFQUFrRSxFQUFFLG9DQUFvQyx3QkFBd0IsaUNBQWlDLGdDQUFnQyw2QkFBNkIsMERBQTBELCtFQUErRSxvQ0FBb0MsNENBQTRDLDJCQUEyQixrQ0FBa0MsMkJBQTJCLHdGQUF3Riw2QkFBNkIsd0ZBQXdGLHlCQUF5Qix5SEFBeUgsMEJBQTBCLDhIQUE4SCxtQ0FBbUMsZ0NBQWdDLG1DQUFtQyxtQ0FBbUMsZ0NBQWdDLGlCQUFpQiw2QkFBNkIsb0RBQW9ELHNCQUFzQixPQUFPLEdBQUcscUNBQXFDLGtGQUFrRixZQUFZLFVBQVUsb0JBQW9CLGNBQWMsd0JBQXdCLDhFQUE4RSw4REFBOEQsaUNBQWlDLG9GQUFvRixtQkFBbUIsY0FBYyx3QkFBd0IseUhBQXlILDREQUE0RCxtQ0FBbUMsMkRBQTJELHFDQUFxQyxvQkFBb0IsNkRBQTZELDBJQUEwSSx3TEFBd0wsbUZBQW1GLHVDQUF1QyxxREFBcUQsdUJBQXVCLGtEQUFrRCx1QkFBdUIsc0JBQXNCLEVBQUUsc0ZBQXNGLDZCQUE2Qix5R0FBeUcsdUJBQXVCLEVBQUUsRUFBRSw4Q0FBOEMsbUVBQW1FLGdDQUFnQyx1QkFBdUIsK0NBQStDLG1DQUFtQyxpQkFBaUIsMklBQTJJLHlIQUF5SCxvQ0FBb0MscUZBQXFGLGtGQUFrRixHQUFHLHdDQUF3QyxPQUFPLG9KQUFvSixvRkFBb0YsZ0JBQWdCLGtFQUFrRSw4REFBOEQsK0dBQStHLHlWQUF5VixnQ0FBZ0MsNkJBQTZCLHdEQUF3RCxxQkFBcUIsd0NBQXdDLGlCQUFpQiwyQ0FBMkMsOERBQThELG1DQUFtQyw0REFBNEQsc0NBQXNDLGlCQUFpQix5QkFBeUIsb0dBQW9HLDBCQUEwQix3TEFBd0wsMkJBQTJCLHFGQUFxRiw0QkFBNEIsNkVBQTZFLEVBQUUscUNBQXFDLFdBQVcsNkJBQTZCLGlIQUFpSCxJQUFJLDZDQUE2QywwREFBMEQsc0NBQXNDLHNEQUFzRCx1REFBdUQsRUFBRSxFQUFFLDZDQUE2QyxnREFBZ0Qsb0NBQW9DLCtCQUErQixnQ0FBZ0MseUNBQXlDLGdDQUFnQyx5RUFBeUUsa0NBQWtDLHlCQUF5QixtQ0FBbUMsb0NBQW9DLEdBQUcsaUdBQWlHLGFBQWEsOENBQThDLG1EQUFtRCxvQ0FBb0MsME1BQTBNLGdDQUFnQyxXQUFXLHVDQUF1Qyx3QkFBd0IsMk1BQTJNLGlDQUFpQyxnQkFBZ0IsRUFBRSwwQ0FBMEMseUNBQXlDLDJCQUEyQiwwQ0FBMEMsRUFBRSw4QkFBOEIsMkRBQTJELGdDQUFnQyxtQ0FBbUMsNENBQTRDLGdEQUFnRCwyQ0FBMkMsMEJBQTBCLGdDQUFnQyxpQkFBaUIsc0ZBQXNGLG9CQUFvQixzQkFBc0IsMENBQTBDLGtCQUFrQixHQUFHLHVGQUF1RixnQkFBZ0IsOENBQThDLG1EQUFtRCxvQ0FBb0MsMkdBQTJHLGdDQUFnQyxXQUFXLDhFQUE4RSxvQkFBb0IsZ0JBQWdCLEVBQUUsOEVBQThFLG9CQUFvQixnREFBZ0Qsc0JBQXNCLHVCQUF1QixHQUFHLEVBQUUsOEJBQThCLDJEQUEyRCxnQ0FBZ0MsbUNBQW1DLDRDQUE0QyxnREFBZ0QsMkNBQTJDLDJIQUEySCxlQUFlLGdDQUFnQyw4QkFBOEIsaUJBQWlCLFdBQVcsS0FBSywyREFBMkQsWUFBWSxzQkFBc0IsMERBQTBELDJEQUEyRCxtQkFBbUIsR0FBRyxvRUFBb0Usa0JBQWtCLGtGQUFrRixzREFBc0QsOEJBQThCLGFBQWEsSUFBSSw2Q0FBNkMsZ0NBQWdDLHVIQUF1SCxrQ0FBa0MsZ0RBQWdELHVDQUF1QyxhQUFhLCtDQUErQywrREFBK0QsR0FBRywwRkFBMEYsY0FBYyx3Q0FBd0MsV0FBVyx5UkFBeVIsa0JBQWtCLDhCQUE4Qiw0QkFBNEIsRUFBRSx3Q0FBd0MsdUJBQXVCLHdEQUF3RCxpQkFBaUIsb0JBQW9CLG1EQUFtRCx1Q0FBdUMsT0FBTyxRQUFRLDREQUE0RCxLQUFLLFlBQVksV0FBVyxVQUFVLFVBQVUseUVBQXlFLHlFQUF5RSxLQUFLLGtEQUFrRCwwRUFBMEUsa0NBQWtDLHFHQUFxRyxnSUFBZ0ksVUFBVSw0RkFBNEYsR0FBRyxzRkFBc0Ysa0JBQWtCLGlCQUFpQixzQ0FBc0MsOFBBQThQLHFEQUFxRCxtQkFBbUIsa0NBQWtDLGtDQUFrQyw2QkFBNkIsd0NBQXdDLDZEQUE2RCwwQkFBMEIsaUlBQWlJLDJCQUEyQixvREFBb0QsNEJBQTRCLDhCQUE4QiwyQkFBMkIsMkJBQTJCLG1DQUFtQyx3SEFBd0gscUVBQXFFLHFCQUFxQixzRUFBc0UsaUJBQWlCLHFFQUFxRSxxSUFBcUksNERBQTRELGVBQWUsNkJBQTZCLDZDQUE2QyxtRUFBbUUscUNBQXFDLEVBQUUsdUNBQXVDLDZFQUE2RSxzRkFBc0YsdUZBQXVGLDBFQUEwRSxLQUFLLGNBQWMsOERBQThELEVBQUUsMkNBQTJDLHFHQUFxRyw2Q0FBNkMsd0NBQXdDLGtDQUFrQyw4Q0FBOEMsMkxBQTJMLHFDQUFxQyw4Q0FBOEMseUJBQXlCLHNCQUFzQixPQUFPLEVBQUUsd0JBQXdCLDhDQUE4Qyx5QkFBeUIsT0FBTywrQ0FBK0MscUNBQXFDLGlDQUFpQyxTQUFTLDhJQUE4SSw0QkFBNEIsR0FBRyxpRUFBaUUsY0FBYyx3Q0FBd0MsZ0xBQWdMLHdDQUF3Qyx3QkFBd0IsUUFBUSw0QkFBNEIsU0FBUyxFQUFFLGlGQUFpRixFQUFFLEdBQUcsb0VBQW9FLGNBQWMsZ0JBQWdCLGtDQUFrQyxpQkFBaUIsNkJBQTZCLG9CQUFvQixnQ0FBZ0MscUJBQXFCLG9CQUFvQixZQUFZLHdCQUF3QixxQkFBcUIsV0FBVyxjQUFjLDBCQUEwQixHQUFHLDhDQUE4QyxPQUFPLDRuTkFBNG5OLHdEQUF3RCxnQkFBZ0IsbUNBQW1DLGdFQUFnRSwwRUFBMEUsaUNBQWlDLHdFQUF3RSxpQ0FBaUMsaUNBQWlDLDRDQUE0QyxzQkFBc0IsMkZBQTJGLEdBQUcsZ0ZBQWdGLGdCQUFnQixrRUFBa0UscURBQXFELGdCQUFnQixnREFBZ0QsMEJBQTBCLFVBQVUsT0FBTyxnQ0FBZ0MsV0FBVyw4SEFBOEgsMkRBQTJELFNBQVMsd0JBQXdCLFlBQVksV0FBVyxLQUFLLGNBQWMsK0JBQStCLGdFQUFnRSxFQUFFLEtBQUssV0FBVyx1RUFBdUUsa0NBQWtDLFdBQVcsbUNBQW1DLDhIQUE4SCx5QkFBeUIsaUJBQWlCLFdBQVcsS0FBSyxjQUFjLHlDQUF5QyxnRUFBZ0UsR0FBRyxnQ0FBZ0MsV0FBVywyQ0FBMkMsaUJBQWlCLDhCQUE4QixtQkFBbUIsRUFBRSxnQ0FBZ0Msd0NBQXdDLG1CQUFtQixFQUFFLGlDQUFpQyxnQkFBZ0IseUNBQXlDLGNBQWMscUNBQXFDLGlDQUFpQyxxQkFBcUIsS0FBSyxVQUFVLEVBQUUsb0NBQW9DLDhCQUE4QixnQ0FBZ0MsTUFBTSxrUkFBa1Isb0NBQW9DLDZDQUE2Qyw4QkFBOEIsU0FBUyw2Q0FBNkMscUJBQXFCLHdHQUF3RywwQkFBMEIsR0FBRyx3REFBd0Qsd0NBQXdDLFdBQVcsS0FBSyw2QkFBNkIsVUFBVSxhQUFhLDJFQUEyRSx3Q0FBd0MsbUJBQW1CLFlBQVksRUFBRSwyQkFBMkIsRUFBRSxRQUFRLHlMQUF5TCxFQUFFLHdCQUF3QixJQUFJLG1DQUFtQyx3Q0FBd0MsR0FBRyxpRkFBaUYsZ0JBQWdCLDZFQUE2RSxvREFBb0QsNEZBQTRGLGdDQUFnQyx3REFBd0QsZ0NBQWdDLEVBQUUsb0ZBQW9GLDBDQUEwQyw2REFBNkQsMEJBQTBCLGFBQWEsY0FBYyxrQkFBa0IsNEJBQTRCLFlBQVksV0FBVyxLQUFLLGdDQUFnQyx5QkFBeUIsb0RBQW9ELHVCQUF1QixpQkFBaUIsS0FBSyxxQkFBcUIsZUFBZSx3Q0FBd0Msa0JBQWtCLFdBQVcsU0FBUyxHQUFHLCtFQUErRSxnQkFBZ0Isd0xBQXdMLDREQUE0RCxPQUFPLGlCQUFpQixrQkFBa0IsSUFBSSxTQUFTLEVBQUUsMkJBQTJCLGdCQUFnQiwrQkFBK0Isa0JBQWtCLFNBQVMsd0NBQXdDLFNBQVMsaUNBQWlDLFdBQVcsbUdBQW1HLGdCQUFnQixXQUFXLG1CQUFtQixhQUFhLGdDQUFnQyw0QkFBNEIsMk1BQTJNLFlBQVksMkVBQTJFLHVCQUF1QixFQUFFLEVBQUUsYUFBYSxxU0FBcVMsR0FBRyxzREFBc0Qsa0JBQWtCLHlDQUF5QywrQkFBK0IseUJBQXlCLDRFQUE0RSxXQUFXLEtBQUsscURBQXFELHlCQUF5Qix5Q0FBeUMsV0FBVywrRUFBK0Usd0JBQXdCLFdBQVcsS0FBSyxtQ0FBbUMsbUJBQW1CLEtBQUssNkZBQTZGLGNBQWMscUJBQXFCLFlBQVksa0JBQWtCLGlFQUFpRSxpQkFBaUIsbUJBQW1CLHFDQUFxQyxxQkFBcUIsbUJBQW1CLGFBQWEsdUNBQXVDLGFBQWEsd0NBQXdDLCtEQUErRCxnQ0FBZ0MsRUFBRSxHQUFHLDJEQUEyRCxrQkFBa0IseUJBQXlCLGdEQUFnRCx3Q0FBd0Msd0dBQXdHLG1DQUFtQyxXQUFXLGtCQUFrQixnREFBZ0QsNEJBQTRCLGdEQUFnRCw0QkFBNEIsVUFBVSxrQkFBa0IsbUVBQW1FLHdCQUF3QixPQUFPLEVBQUUsRUFBRSxnSUFBZ0kseUNBQXlDLGtGQUFrRixPQUFPLHdCQUF3QixXQUFXLEVBQUUsV0FBVyx3QkFBd0IsbUNBQW1DLElBQUksT0FBTyxHQUFHLDJDQUEyQyxTQUFTLE9BQU8sUUFBUSxHQUFHLDJEQUEyRCxrQkFBa0IscUVBQXFFLHlDQUF5Qyx3RkFBd0YsOEJBQThCLHVEQUF1RCxtQkFBbUIsR0FBRywyREFBMkQsa0JBQWtCLHFFQUFxRSx5Q0FBeUMsbUhBQW1ILDZCQUE2Qix1REFBdUQsbUJBQW1CLEdBQUcsK0RBQStELGtCQUFrQiw2RUFBNkUsd0NBQXdDLFdBQVcsMENBQTBDLDRCQUE0QixFQUFFLG1DQUFtQyxXQUFXLHdDQUF3QyxjQUFjLEVBQUUsbURBQW1ELFdBQVcseUJBQXlCLHlCQUF5QixxRkFBcUYsZ0NBQWdDLGtDQUFrQyxTQUFTLEVBQUUsR0FBRyxpRUFBaUUsZ0JBQWdCLGtFQUFrRSw4REFBOEQsdUZBQXVGLDhEQUE4RCw4QkFBOEIscUNBQXFDLGdDQUFnQyx3QkFBd0IsR0FBRyx5RUFBeUUsY0FBYyxzQ0FBc0MsbVJBQW1SLDJFQUEyRSxrQ0FBa0MsNkJBQTZCLHVEQUF1RCxpRUFBaUUsc0NBQXNDLHFCQUFxQiw0Q0FBNEMsa0JBQWtCLHlCQUF5Qix1SEFBdUgsMkJBQTJCLElBQUksMEJBQTBCLDhKQUE4SiwwQkFBMEIsdUNBQXVDLGlDQUFpQyxvS0FBb0ssbUNBQW1DLHdIQUF3SCxFQUFFLHNDQUFzQywwQkFBMEIseUJBQXlCLHNCQUFzQixPQUFPLEVBQUUsd0JBQXdCLHNDQUFzQyxTQUFTLEdBQUcsNERBQTRELG9CQUFvQixvRkFBb0Ysd0NBQXdDLDJEQUEyRCxnREFBZ0QsOEJBQThCLGFBQWEsSUFBSSw2Q0FBNkMsa0NBQWtDLEtBQUssS0FBSyxXQUFXLDBDQUEwQyxTQUFTLEdBQUcsb0VBQW9FLG9CQUFvQixrQkFBa0IsK0VBQStFLHdDQUF3QyxxSkFBcUosa0NBQWtDLFdBQVcsMENBQTBDLDRCQUE0QixrQ0FBa0MsNEJBQTRCLDhEQUE4RCx5Q0FBeUMsZ0VBQWdFLHFCQUFxQiwrREFBK0QseUZBQXlGLGlDQUFpQyxnQkFBZ0IsaUJBQWlCLEVBQUUsT0FBTyxrQkFBa0Isd0NBQXdDLDJDQUEyQyx1Q0FBdUMsMENBQTBDLGdMQUFnTCxvQ0FBb0MsR0FBRyw2RUFBNkUsa0JBQWtCLGdGQUFnRix3Q0FBd0MsV0FBVyx3Q0FBd0MsbUZBQW1GLDBCQUEwQixpREFBaUQscURBQXFELG9CQUFvQixFQUFFLGlDQUFpQyw4Q0FBOEMsc0NBQXNDLHNHQUFzRyxnQ0FBZ0Msb0JBQW9CLGdDQUFnQyx3Q0FBd0MsNkNBQTZDLHVDQUF1QyxpQ0FBaUMsd0RBQXdELHlDQUF5QyxXQUFXLDhCQUE4QiwwQ0FBMEMsbUNBQW1DLDBDQUEwQyxvQ0FBb0MsMENBQTBDLDJCQUEyQiwwQ0FBMEMsNkJBQTZCLDBDQUEwQywwQ0FBMEMscURBQXFELGlKQUFpSixrQkFBa0IsNENBQTRDLDZDQUE2QyxFQUFFLHFCQUFxQixnREFBZ0QsdUJBQXVCLHlDQUF5QywwQ0FBMEMsRUFBRSxxREFBcUQsMEZBQTBGLGtGQUFrRiwwQ0FBMEMsNEpBQTRKLCtDQUErQyxPQUFPLHdDQUF3QyxvQ0FBb0MsOEdBQThHLHlCQUF5Qix3QkFBd0IsbURBQW1ELE9BQU8sY0FBYywwZEFBMGQsd0NBQXdDLE9BQU8sMkNBQTJDLHVIQUF1SCx1Q0FBdUMsdUdBQXVHLEdBQUcsb0VBQW9FLG9CQUFvQixvSkFBb0osNENBQTRDLHNCQUFzQixnQkFBZ0IsV0FBVyxLQUFLLFdBQVcsZ0NBQWdDLFNBQVMsK0RBQStELEdBQUcscUVBQXFFLGNBQWMsd0NBQXdDLFdBQVcsMENBQTBDLDBCQUEwQixFQUFFLGdEQUFnRCxvQ0FBb0MsNkJBQTZCLG1EQUFtRCxtQ0FBbUMsa0JBQWtCLDZCQUE2Qix5RkFBeUYsT0FBTyxHQUFHLEdBQUcsMERBQTBELGNBQWMsd0NBQXdDLFdBQVcsMkNBQTJDLHNCQUFzQiw4QkFBOEIsc0JBQXNCLEVBQUUsNENBQTRDLHNCQUFzQixpREFBaUQsdUNBQXVDLEVBQUUsR0FBRywyQ0FBMkMsT0FBTyx3QkFBd0IseUNBQXlDLDBCQUEwQixpRUFBaUUsd0JBQXdCLDJCQUEyQix1RUFBdUUsd0JBQXdCLDhCQUE4Qiw2QkFBNkIsK0NBQStDLGdDQUFnQyxzQkFBc0IseUJBQXlCLHNCQUFzQixtQkFBbUIsMkJBQTJCLDJCQUEyQix3ckJBQXdyQixhQUFhLGFBQWEscUNBQXFDLDBCQUEwQixnQ0FBZ0Msd2JBQXdiLGtDQUFrQywwQ0FBMEMsMEJBQTBCLDBDQUEwQywyQ0FBMkMsbVJBQW1SLGtDQUFrQyxLQUFLLHNCQUFzQixvQkFBb0IseU9BQXlPLHdDQUF3QyxrREFBa0Qsa0RBQWtELDZCQUE2QiwwVkFBMFYseUNBQXlDLG9EQUFvRCxvREFBb0QsbUVBQW1FLGlCQUFpQixvQkFBb0IsS0FBSyxvQkFBb0IsNkJBQTZCLG1GQUFtRiw4QkFBOEIsY0FBYyxpREFBaUQsZUFBZSxFQUFFLGVBQWUsNkhBQTZILHlCQUF5QixnQ0FBZ0Msb0NBQW9DLHdCQUF3QiwwQkFBMEIsS0FBSyxxREFBcUQsb0NBQW9DLHdEQUF3RCw2QkFBNkIsdUpBQXVKLFNBQVMsNEJBQTRCLGNBQWMsK0JBQStCLGNBQWMsa0NBQWtDLDRDQUE0QyxpT0FBaU8sc0JBQXNCLDBDQUEwQyxlQUFlLCtCQUErQixnQ0FBZ0MsTUFBTSxxQkFBcUIsaUJBQWlCLFdBQVcsZ0VBQWdFLHlCQUF5QixVQUFVLFNBQVMsZ0RBQWdELG9CQUFvQixXQUFXLEtBQUssbUJBQW1CLDBCQUEwQixnQkFBZ0IsU0FBUyxJQUFJLGtEQUFrRCxTQUFTLDZKQUE2SixxQ0FBcUMsWUFBWSxTQUFTLCtCQUErQixTQUFTLG9CQUFvQix3QkFBd0IsNkJBQTZCLE9BQU8sMkZBQTJGLGdCQUFnQiwrSkFBK0osZ0RBQWdELGlFQUFpRSwyQ0FBMkMsa0JBQWtCLDhrQ0FBOGtDLFNBQVMsZ0JBQWdCLHVCQUF1QixZQUFZLHlCQUF5QixLQUFLLHdDQUF3Qyw0QkFBNEIsZ0RBQWdELCtCQUErQiwyRUFBMkUsa0JBQWtCLG9CQUFvQixvQkFBb0IsMklBQTJJLFlBQVksNkJBQTZCLHVCQUF1QiwrQkFBK0Isa0JBQWtCLEdBQUcsc0ZBQXNGLG9CQUFvQix3SEFBd0gsNERBQTRELDRCQUE0QiwyREFBMkQsc0NBQXNDLHVDQUF1QyxvQkFBb0Isd0JBQXdCLDJDQUEyQyx3SEFBd0gsMENBQTBDLG1IQUFtSCx5Q0FBeUMsNElBQTRJLFdBQVcsbU9BQW1PLDhCQUE4QixPQUFPLEVBQUUsdUpBQXVKLG9FQUFvRSwrSkFBK0oseUNBQXlDLDZCQUE2QixrRUFBa0UsMEJBQTBCLHlDQUF5QyxzRUFBc0UsaUJBQWlCLG9DQUFvQyxpREFBaUQsaUJBQWlCLHVCQUF1QiwwQkFBMEIsNkVBQTZFLHNCQUFzQixrQ0FBa0Msb0JBQW9CLGtCQUFrQixJQUFJLE1BQU0sc0NBQXNDLHFDQUFxQyxZQUFZLHNDQUFzQyx1S0FBdUssMkNBQTJDLFdBQVcsNkNBQTZDLGtDQUFrQyw4QkFBOEIsT0FBTyxFQUFFLEVBQUUsK0NBQStDLHFCQUFxQixzTEFBc0wseUZBQXlGLDBDQUEwQyw0QkFBNEIsMkNBQTJDLHNDQUFzQywwT0FBME8sNENBQTRDLFdBQVcsc0NBQXNDLGVBQWUsRUFBRSxpREFBaUQsZ0NBQWdDLHNDQUFzQyxtQkFBbUIsd0NBQXdDLFdBQVcsc0NBQXNDLG9DQUFvQyxFQUFFLGdEQUFnRCxXQUFXLG1DQUFtQyxlQUFlLEVBQUUsK0NBQStDLFdBQVcsa0NBQWtDLGVBQWUsRUFBRSx3Q0FBd0MsV0FBVywwQkFBMEIsaURBQWlELDZCQUE2QixvREFBb0QsOEJBQThCLHdEQUF3RCwrQkFBK0IscURBQXFELDRCQUE0QixxREFBcUQsOEJBQThCLCtCQUErQix1Q0FBdUMseUJBQXlCLGVBQWUsRUFBRSxFQUFFLHFDQUFxQyxxQ0FBcUMsNEJBQTRCLGVBQWUsRUFBRSxFQUFFLGlDQUFpQyxjQUFjLDhIQUE4SCwyRUFBMkUsK0RBQStELDhEQUE4RCxzR0FBc0csRUFBRSx3Q0FBd0Msb0lBQW9JLDJCQUEyQixFQUFFLDZDQUE2QyxnQkFBZ0IsZ0ZBQWdGLHdEQUF3RCxzQkFBc0IsS0FBSyxpQ0FBaUMsdUZBQXVGLDBDQUEwQyxFQUFFLFVBQVUsVUFBVSx3Q0FBd0MseUNBQXlDLHdDQUF3Qyw4QkFBOEIsT0FBTyxFQUFFLEVBQUUsbUNBQW1DLDZCQUE2QiwyRkFBMkYsb0JBQW9CLFVBQVUsY0FBYyw0QkFBNEIsNERBQTRELGlCQUFpQix1Q0FBdUMsNERBQTRELDZCQUE2Qix5REFBeUQsRUFBRSwrQkFBK0IscUNBQXFDLGdCQUFnQixFQUFFLGtDQUFrQyx5QkFBeUIsbUNBQW1DLG9DQUFvQywrQkFBK0IsMkRBQTJELGlDQUFpQyw0REFBNEQsK0JBQStCLDhGQUE4RixHQUFHLGdDQUFnQywyUEFBMlAsWUFBWSxpQ0FBaUMsNkJBQTZCLCtOQUErTixTQUFTLDRDQUE0QyxJQUFJLElBQUksNkJBQTZCLGlRQUFpUSxXQUFXLHFDQUFxQyxvQkFBb0IsMkRBQTJELGdDQUFnQyx1NUJBQXU1QiwrQkFBK0IsbUpBQW1KLHFMQUFxTCxHQUFHLHNEQUFzRCxTQUFTLHVJQUF1SSx1QkFBdUIsaUNBQWlDLHlCQUF5QiwyQkFBMkIsOEJBQThCLG9CQUFvQixJQUFJLGlCQUFpQixPQUFPLDJFQUEyRSxnREFBZ0QsNEJBQTRCLGdDQUFnQywySkFBMkosNEJBQTRCLGdFQUFnRSxHQUFHLG1DQUFtQyxpQ0FBaUMsNEJBQTRCLEU7Ozs7Ozs7Ozs7QUNEcDBuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxpQ0FBTyxDQUFDLHdFQUFRLENBQUMsbUNBQUU7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7O0FBRUE7QUFDQSwrQkFBK0Isd0JBQXdCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyx1QkFBdUI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQyx1QkFBdUI7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esc0RBQXNELFFBQVE7QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyw0QkFBNEI7QUFDM0UscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDLFFBQVE7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDLFFBQVE7O0FBRXZEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw2Q0FBNkM7QUFDN0MsOENBQThDO0FBQzlDLDZDQUE2QztBQUM3Qyw0Q0FBNEM7QUFDNUMsNENBQTRDO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0NBQWtDO0FBQ2xDOztBQUVBO0FBQ0Esa0NBQWtDLDZCQUE2QjtBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1QsS0FBSztBQUFBLGtHQUFDO0FBQ04sQ0FBQyxDQUFDLHdCQU1EIiwiZmlsZSI6InZlbmRvcnMtbm9kZV9tb2R1bGVzX2FkbWluLWx0ZV9kaXN0X2pzX2FkbWlubHRlX21pbl9qcy1ub2RlX21vZHVsZXNfYm9vdHN0cmFwLWF1dG9jb21wbGV0ZV9kaS01N2E2YmUuMzU3NjdmYWMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEFkbWluTFRFIHYzLjEuMCAoaHR0cHM6Ly9hZG1pbmx0ZS5pbylcbiAqIENvcHlyaWdodCAyMDE0LTIwMjEgQ29sb3JsaWIgPGh0dHBzOi8vY29sb3JsaWIuY29tPlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vQ29sb3JsaWJIUS9BZG1pbkxURS9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICovXG4hZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT90KGV4cG9ydHMscmVxdWlyZShcImpxdWVyeVwiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJleHBvcnRzXCIsXCJqcXVlcnlcIl0sdCk6dCgoZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmFkbWlubHRlPXt9LGUualF1ZXJ5KX0odGhpcywoZnVuY3Rpb24oZSx0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIG49YSh0KSxpPVwiQ2FyZFJlZnJlc2hcIixvPVwibHRlLmNhcmRyZWZyZXNoXCIscz1uLmRlZmF1bHQuZm5baV0sbD1cImNhcmRcIixyPSdbZGF0YS1jYXJkLXdpZGdldD1cImNhcmQtcmVmcmVzaFwiXScsZD17c291cmNlOlwiXCIsc291cmNlU2VsZWN0b3I6XCJcIixwYXJhbXM6e30sdHJpZ2dlcjpyLGNvbnRlbnQ6XCIuY2FyZC1ib2R5XCIsbG9hZEluQ29udGVudDohMCxsb2FkT25Jbml0OiEwLHJlc3BvbnNlVHlwZTpcIlwiLG92ZXJsYXlUZW1wbGF0ZTonPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj48aSBjbGFzcz1cImZhcyBmYS0yeCBmYS1zeW5jLWFsdCBmYS1zcGluXCI+PC9pPjwvZGl2Picsb25Mb2FkU3RhcnQ6ZnVuY3Rpb24oKXt9LG9uTG9hZERvbmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9fSxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2lmKHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9wYXJlbnQ9ZS5wYXJlbnRzKFwiLmNhcmRcIikuZmlyc3QoKSx0aGlzLl9zZXR0aW5ncz1uLmRlZmF1bHQuZXh0ZW5kKHt9LGQsdCksdGhpcy5fb3ZlcmxheT1uLmRlZmF1bHQodGhpcy5fc2V0dGluZ3Mub3ZlcmxheVRlbXBsYXRlKSxlLmhhc0NsYXNzKGwpJiYodGhpcy5fcGFyZW50PWUpLFwiXCI9PT10aGlzLl9zZXR0aW5ncy5zb3VyY2UpdGhyb3cgbmV3IEVycm9yKFwiU291cmNlIHVybCB3YXMgbm90IGRlZmluZWQuIFBsZWFzZSBzcGVjaWZ5IGEgdXJsIGluIHlvdXIgQ2FyZFJlZnJlc2ggc291cmNlIG9wdGlvbi5cIil9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fYWRkT3ZlcmxheSgpLHRoaXMuX3NldHRpbmdzLm9uTG9hZFN0YXJ0LmNhbGwobi5kZWZhdWx0KHRoaXMpKSxuLmRlZmF1bHQuZ2V0KHRoaXMuX3NldHRpbmdzLnNvdXJjZSx0aGlzLl9zZXR0aW5ncy5wYXJhbXMsKGZ1bmN0aW9uKHQpe2UuX3NldHRpbmdzLmxvYWRJbkNvbnRlbnQmJihcIlwiIT09ZS5fc2V0dGluZ3Muc291cmNlU2VsZWN0b3ImJih0PW4uZGVmYXVsdCh0KS5maW5kKGUuX3NldHRpbmdzLnNvdXJjZVNlbGVjdG9yKS5odG1sKCkpLGUuX3BhcmVudC5maW5kKGUuX3NldHRpbmdzLmNvbnRlbnQpLmh0bWwodCkpLGUuX3NldHRpbmdzLm9uTG9hZERvbmUuY2FsbChuLmRlZmF1bHQoZSksdCksZS5fcmVtb3ZlT3ZlcmxheSgpfSksXCJcIiE9PXRoaXMuX3NldHRpbmdzLnJlc3BvbnNlVHlwZSYmdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VUeXBlKSxuLmRlZmF1bHQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJsb2FkZWQubHRlLmNhcmRyZWZyZXNoXCIpKX0sdC5fYWRkT3ZlcmxheT1mdW5jdGlvbigpe3RoaXMuX3BhcmVudC5hcHBlbmQodGhpcy5fb3ZlcmxheSksbi5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobi5kZWZhdWx0LkV2ZW50KFwib3ZlcmxheS5hZGRlZC5sdGUuY2FyZHJlZnJlc2hcIikpfSx0Ll9yZW1vdmVPdmVybGF5PWZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50LmZpbmQodGhpcy5fb3ZlcmxheSkucmVtb3ZlKCksbi5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobi5kZWZhdWx0LkV2ZW50KFwib3ZlcmxheS5yZW1vdmVkLmx0ZS5jYXJkcmVmcmVzaFwiKSl9LHQuX2luaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO24uZGVmYXVsdCh0aGlzKS5maW5kKHRoaXMuX3NldHRpbmdzLnRyaWdnZXIpLm9uKFwiY2xpY2tcIiwoZnVuY3Rpb24oKXtlLmxvYWQoKX0pKSx0aGlzLl9zZXR0aW5ncy5sb2FkT25Jbml0JiZ0aGlzLmxvYWQoKX0sZS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKHQpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKG8pLGk9bi5kZWZhdWx0LmV4dGVuZCh7fSxkLG4uZGVmYXVsdCh0aGlzKS5kYXRhKCkpO2F8fChhPW5ldyBlKG4uZGVmYXVsdCh0aGlzKSxpKSxuLmRlZmF1bHQodGhpcykuZGF0YShvLFwic3RyaW5nXCI9PXR5cGVvZiB0P2E6dCkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYvbG9hZC8udGVzdCh0KT9hW3RdKCk6YS5faW5pdChuLmRlZmF1bHQodGhpcykpfSxlfSgpO24uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLHIsKGZ1bmN0aW9uKGUpe2UmJmUucHJldmVudERlZmF1bHQoKSxmLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcyksXCJsb2FkXCIpfSkpLG4uZGVmYXVsdCgoZnVuY3Rpb24oKXtuLmRlZmF1bHQocikuZWFjaCgoZnVuY3Rpb24oKXtmLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcykpfSkpfSkpLG4uZGVmYXVsdC5mbltpXT1mLl9qUXVlcnlJbnRlcmZhY2Usbi5kZWZhdWx0LmZuW2ldLkNvbnN0cnVjdG9yPWYsbi5kZWZhdWx0LmZuW2ldLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0LmZuW2ldPXMsZi5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgdT1cIkNhcmRXaWRnZXRcIixjPVwibHRlLmNhcmR3aWRnZXRcIixoPW4uZGVmYXVsdC5mblt1XSxnPVwiY2FyZFwiLHA9XCJjb2xsYXBzZWQtY2FyZFwiLG09XCJjb2xsYXBzaW5nLWNhcmRcIix2PVwiZXhwYW5kaW5nLWNhcmRcIixfPVwid2FzLWNvbGxhcHNlZFwiLGI9XCJtYXhpbWl6ZWQtY2FyZFwiLHk9J1tkYXRhLWNhcmQtd2lkZ2V0PVwicmVtb3ZlXCJdJyxDPSdbZGF0YS1jYXJkLXdpZGdldD1cImNvbGxhcHNlXCJdJyx3PSdbZGF0YS1jYXJkLXdpZGdldD1cIm1heGltaXplXCJdJyx4PXthbmltYXRpb25TcGVlZDpcIm5vcm1hbFwiLGNvbGxhcHNlVHJpZ2dlcjpDLHJlbW92ZVRyaWdnZXI6eSxtYXhpbWl6ZVRyaWdnZXI6dyxjb2xsYXBzZUljb246XCJmYS1taW51c1wiLGV4cGFuZEljb246XCJmYS1wbHVzXCIsbWF4aW1pemVJY29uOlwiZmEtZXhwYW5kXCIsbWluaW1pemVJY29uOlwiZmEtY29tcHJlc3NcIn0sST1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fcGFyZW50PWUucGFyZW50cyhcIi5jYXJkXCIpLmZpcnN0KCksZS5oYXNDbGFzcyhnKSYmKHRoaXMuX3BhcmVudD1lKSx0aGlzLl9zZXR0aW5ncz1uLmRlZmF1bHQuZXh0ZW5kKHt9LHgsdCl9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY29sbGFwc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3BhcmVudC5hZGRDbGFzcyhtKS5jaGlsZHJlbihcIi5jYXJkLWJvZHksIC5jYXJkLWZvb3RlclwiKS5zbGlkZVVwKHRoaXMuX3NldHRpbmdzLmFuaW1hdGlvblNwZWVkLChmdW5jdGlvbigpe2UuX3BhcmVudC5hZGRDbGFzcyhwKS5yZW1vdmVDbGFzcyhtKX0pKSx0aGlzLl9wYXJlbnQuZmluZChcIj4gLmNhcmQtaGVhZGVyIFwiK3RoaXMuX3NldHRpbmdzLmNvbGxhcHNlVHJpZ2dlcitcIiAuXCIrdGhpcy5fc2V0dGluZ3MuY29sbGFwc2VJY29uKS5hZGRDbGFzcyh0aGlzLl9zZXR0aW5ncy5leHBhbmRJY29uKS5yZW1vdmVDbGFzcyh0aGlzLl9zZXR0aW5ncy5jb2xsYXBzZUljb24pLHRoaXMuX2VsZW1lbnQudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJjb2xsYXBzZWQubHRlLmNhcmR3aWRnZXRcIiksdGhpcy5fcGFyZW50KX0sdC5leHBhbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3BhcmVudC5hZGRDbGFzcyh2KS5jaGlsZHJlbihcIi5jYXJkLWJvZHksIC5jYXJkLWZvb3RlclwiKS5zbGlkZURvd24odGhpcy5fc2V0dGluZ3MuYW5pbWF0aW9uU3BlZWQsKGZ1bmN0aW9uKCl7ZS5fcGFyZW50LnJlbW92ZUNsYXNzKHApLnJlbW92ZUNsYXNzKHYpfSkpLHRoaXMuX3BhcmVudC5maW5kKFwiPiAuY2FyZC1oZWFkZXIgXCIrdGhpcy5fc2V0dGluZ3MuY29sbGFwc2VUcmlnZ2VyK1wiIC5cIit0aGlzLl9zZXR0aW5ncy5leHBhbmRJY29uKS5hZGRDbGFzcyh0aGlzLl9zZXR0aW5ncy5jb2xsYXBzZUljb24pLnJlbW92ZUNsYXNzKHRoaXMuX3NldHRpbmdzLmV4cGFuZEljb24pLHRoaXMuX2VsZW1lbnQudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJleHBhbmRlZC5sdGUuY2FyZHdpZGdldFwiKSx0aGlzLl9wYXJlbnQpfSx0LnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3BhcmVudC5zbGlkZVVwKCksdGhpcy5fZWxlbWVudC50cmlnZ2VyKG4uZGVmYXVsdC5FdmVudChcInJlbW92ZWQubHRlLmNhcmR3aWRnZXRcIiksdGhpcy5fcGFyZW50KX0sdC50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnQuaGFzQ2xhc3MocCk/dGhpcy5leHBhbmQoKTp0aGlzLmNvbGxhcHNlKCl9LHQubWF4aW1pemU9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnQuZmluZCh0aGlzLl9zZXR0aW5ncy5tYXhpbWl6ZVRyaWdnZXIrXCIgLlwiK3RoaXMuX3NldHRpbmdzLm1heGltaXplSWNvbikuYWRkQ2xhc3ModGhpcy5fc2V0dGluZ3MubWluaW1pemVJY29uKS5yZW1vdmVDbGFzcyh0aGlzLl9zZXR0aW5ncy5tYXhpbWl6ZUljb24pLHRoaXMuX3BhcmVudC5jc3Moe2hlaWdodDp0aGlzLl9wYXJlbnQuaGVpZ2h0KCksd2lkdGg6dGhpcy5fcGFyZW50LndpZHRoKCksdHJhbnNpdGlvbjpcImFsbCAuMTVzXCJ9KS5kZWxheSgxNTApLnF1ZXVlKChmdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdCh0aGlzKTtlLmFkZENsYXNzKGIpLG4uZGVmYXVsdChcImh0bWxcIikuYWRkQ2xhc3MoYiksZS5oYXNDbGFzcyhwKSYmZS5hZGRDbGFzcyhfKSxlLmRlcXVldWUoKX0pKSx0aGlzLl9lbGVtZW50LnRyaWdnZXIobi5kZWZhdWx0LkV2ZW50KFwibWF4aW1pemVkLmx0ZS5jYXJkd2lkZ2V0XCIpLHRoaXMuX3BhcmVudCl9LHQubWluaW1pemU9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnQuZmluZCh0aGlzLl9zZXR0aW5ncy5tYXhpbWl6ZVRyaWdnZXIrXCIgLlwiK3RoaXMuX3NldHRpbmdzLm1pbmltaXplSWNvbikuYWRkQ2xhc3ModGhpcy5fc2V0dGluZ3MubWF4aW1pemVJY29uKS5yZW1vdmVDbGFzcyh0aGlzLl9zZXR0aW5ncy5taW5pbWl6ZUljb24pLHRoaXMuX3BhcmVudC5jc3MoXCJjc3NUZXh0XCIsXCJoZWlnaHQ6IFwiK3RoaXMuX3BhcmVudFswXS5zdHlsZS5oZWlnaHQrXCIgIWltcG9ydGFudDsgd2lkdGg6IFwiK3RoaXMuX3BhcmVudFswXS5zdHlsZS53aWR0aCtcIiAhaW1wb3J0YW50OyB0cmFuc2l0aW9uOiBhbGwgLjE1cztcIikuZGVsYXkoMTApLnF1ZXVlKChmdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdCh0aGlzKTtlLnJlbW92ZUNsYXNzKGIpLG4uZGVmYXVsdChcImh0bWxcIikucmVtb3ZlQ2xhc3MoYiksZS5jc3Moe2hlaWdodDpcImluaGVyaXRcIix3aWR0aDpcImluaGVyaXRcIn0pLGUuaGFzQ2xhc3MoXykmJmUucmVtb3ZlQ2xhc3MoXyksZS5kZXF1ZXVlKCl9KSksdGhpcy5fZWxlbWVudC50cmlnZ2VyKG4uZGVmYXVsdC5FdmVudChcIm1pbmltaXplZC5sdGUuY2FyZHdpZGdldFwiKSx0aGlzLl9wYXJlbnQpfSx0LnRvZ2dsZU1heGltaXplPWZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50Lmhhc0NsYXNzKGIpP3RoaXMubWluaW1pemUoKTp0aGlzLm1heGltaXplKCl9LHQuX2luaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLl9wYXJlbnQ9ZSxuLmRlZmF1bHQodGhpcykuZmluZCh0aGlzLl9zZXR0aW5ncy5jb2xsYXBzZVRyaWdnZXIpLmNsaWNrKChmdW5jdGlvbigpe3QudG9nZ2xlKCl9KSksbi5kZWZhdWx0KHRoaXMpLmZpbmQodGhpcy5fc2V0dGluZ3MubWF4aW1pemVUcmlnZ2VyKS5jbGljaygoZnVuY3Rpb24oKXt0LnRvZ2dsZU1heGltaXplKCl9KSksbi5kZWZhdWx0KHRoaXMpLmZpbmQodGhpcy5fc2V0dGluZ3MucmVtb3ZlVHJpZ2dlcikuY2xpY2soKGZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0pKX0sZS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKHQpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKGMpLGk9bi5kZWZhdWx0LmV4dGVuZCh7fSx4LG4uZGVmYXVsdCh0aGlzKS5kYXRhKCkpO2F8fChhPW5ldyBlKG4uZGVmYXVsdCh0aGlzKSxpKSxuLmRlZmF1bHQodGhpcykuZGF0YShjLFwic3RyaW5nXCI9PXR5cGVvZiB0P2E6dCkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYvY29sbGFwc2V8ZXhwYW5kfHJlbW92ZXx0b2dnbGV8bWF4aW1pemV8bWluaW1pemV8dG9nZ2xlTWF4aW1pemUvLnRlc3QodCk/YVt0XSgpOlwib2JqZWN0XCI9PXR5cGVvZiB0JiZhLl9pbml0KG4uZGVmYXVsdCh0aGlzKSl9LGV9KCk7bi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsQywoZnVuY3Rpb24oZSl7ZSYmZS5wcmV2ZW50RGVmYXVsdCgpLEkuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdCh0aGlzKSxcInRvZ2dsZVwiKX0pKSxuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIix5LChmdW5jdGlvbihlKXtlJiZlLnByZXZlbnREZWZhdWx0KCksSS5falF1ZXJ5SW50ZXJmYWNlLmNhbGwobi5kZWZhdWx0KHRoaXMpLFwicmVtb3ZlXCIpfSkpLG4uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLHcsKGZ1bmN0aW9uKGUpe2UmJmUucHJldmVudERlZmF1bHQoKSxJLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcyksXCJ0b2dnbGVNYXhpbWl6ZVwiKX0pKSxuLmRlZmF1bHQuZm5bdV09SS5falF1ZXJ5SW50ZXJmYWNlLG4uZGVmYXVsdC5mblt1XS5Db25zdHJ1Y3Rvcj1JLG4uZGVmYXVsdC5mblt1XS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdC5mblt1XT1oLEkuX2pRdWVyeUludGVyZmFjZX07dmFyIFQ9XCJDb250cm9sU2lkZWJhclwiLGo9XCJsdGUuY29udHJvbHNpZGViYXJcIixTPW4uZGVmYXVsdC5mbltUXSxrPVwiLmNvbnRyb2wtc2lkZWJhclwiLFE9XCIuY29udHJvbC1zaWRlYmFyLWNvbnRlbnRcIixIPSdbZGF0YS13aWRnZXQ9XCJjb250cm9sLXNpZGViYXJcIl0nLHo9XCIubWFpbi1oZWFkZXJcIixGPVwiLm1haW4tZm9vdGVyXCIsRT1cImNvbnRyb2wtc2lkZWJhci1hbmltYXRlXCIsRD1cImNvbnRyb2wtc2lkZWJhci1vcGVuXCIsTD1cImNvbnRyb2wtc2lkZWJhci1zbGlkZS1vcGVuXCIsQT1cImxheW91dC1maXhlZFwiLFI9e2NvbnRyb2xzaWRlYmFyU2xpZGU6ITAsc2Nyb2xsYmFyVGhlbWU6XCJvcy10aGVtZS1saWdodFwiLHNjcm9sbGJhckF1dG9IaWRlOlwibFwiLHRhcmdldDprfSxNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9jb25maWc9dH12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5jb2xsYXBzZT1mdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdChcImJvZHlcIiksdD1uLmRlZmF1bHQoXCJodG1sXCIpLGE9dGhpcy5fY29uZmlnLnRhcmdldDt0aGlzLl9jb25maWcuY29udHJvbHNpZGViYXJTbGlkZT8odC5hZGRDbGFzcyhFKSxlLnJlbW92ZUNsYXNzKEwpLmRlbGF5KDMwMCkucXVldWUoKGZ1bmN0aW9uKCl7bi5kZWZhdWx0KGEpLmhpZGUoKSx0LnJlbW92ZUNsYXNzKEUpLG4uZGVmYXVsdCh0aGlzKS5kZXF1ZXVlKCl9KSkpOmUucmVtb3ZlQ2xhc3MoRCksbi5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobi5kZWZhdWx0LkV2ZW50KFwiY29sbGFwc2VkLmx0ZS5jb250cm9sc2lkZWJhclwiKSl9LHQuc2hvdz1mdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdChcImJvZHlcIiksdD1uLmRlZmF1bHQoXCJodG1sXCIpO3RoaXMuX2NvbmZpZy5jb250cm9sc2lkZWJhclNsaWRlPyh0LmFkZENsYXNzKEUpLG4uZGVmYXVsdCh0aGlzLl9jb25maWcudGFyZ2V0KS5zaG93KCkuZGVsYXkoMTApLnF1ZXVlKChmdW5jdGlvbigpe2UuYWRkQ2xhc3MoTCkuZGVsYXkoMzAwKS5xdWV1ZSgoZnVuY3Rpb24oKXt0LnJlbW92ZUNsYXNzKEUpLG4uZGVmYXVsdCh0aGlzKS5kZXF1ZXVlKCl9KSksbi5kZWZhdWx0KHRoaXMpLmRlcXVldWUoKX0pKSk6ZS5hZGRDbGFzcyhEKSx0aGlzLl9maXhIZWlnaHQoKSx0aGlzLl9maXhTY3JvbGxIZWlnaHQoKSxuLmRlZmF1bHQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJleHBhbmRlZC5sdGUuY29udHJvbHNpZGViYXJcIikpfSx0LnRvZ2dsZT1mdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdChcImJvZHlcIik7ZS5oYXNDbGFzcyhEKXx8ZS5oYXNDbGFzcyhMKT90aGlzLmNvbGxhcHNlKCk6dGhpcy5zaG93KCl9LHQuX2luaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9bi5kZWZhdWx0KFwiYm9keVwiKTt0Lmhhc0NsYXNzKEQpfHx0Lmhhc0NsYXNzKEwpPyhuLmRlZmF1bHQoaykubm90KHRoaXMuX2NvbmZpZy50YXJnZXQpLmhpZGUoKSxuLmRlZmF1bHQodGhpcy5fY29uZmlnLnRhcmdldCkuY3NzKFwiZGlzcGxheVwiLFwiYmxvY2tcIikpOm4uZGVmYXVsdChrKS5oaWRlKCksdGhpcy5fZml4SGVpZ2h0KCksdGhpcy5fZml4U2Nyb2xsSGVpZ2h0KCksbi5kZWZhdWx0KHdpbmRvdykucmVzaXplKChmdW5jdGlvbigpe2UuX2ZpeEhlaWdodCgpLGUuX2ZpeFNjcm9sbEhlaWdodCgpfSkpLG4uZGVmYXVsdCh3aW5kb3cpLnNjcm9sbCgoZnVuY3Rpb24oKXt2YXIgdD1uLmRlZmF1bHQoXCJib2R5XCIpOyh0Lmhhc0NsYXNzKEQpfHx0Lmhhc0NsYXNzKEwpKSYmZS5fZml4U2Nyb2xsSGVpZ2h0KCl9KSl9LHQuX2lzTmF2YmFyRml4ZWQ9ZnVuY3Rpb24oKXt2YXIgZT1uLmRlZmF1bHQoXCJib2R5XCIpO3JldHVybiBlLmhhc0NsYXNzKFwibGF5b3V0LW5hdmJhci1maXhlZFwiKXx8ZS5oYXNDbGFzcyhcImxheW91dC1zbS1uYXZiYXItZml4ZWRcIil8fGUuaGFzQ2xhc3MoXCJsYXlvdXQtbWQtbmF2YmFyLWZpeGVkXCIpfHxlLmhhc0NsYXNzKFwibGF5b3V0LWxnLW5hdmJhci1maXhlZFwiKXx8ZS5oYXNDbGFzcyhcImxheW91dC14bC1uYXZiYXItZml4ZWRcIil9LHQuX2lzRm9vdGVyRml4ZWQ9ZnVuY3Rpb24oKXt2YXIgZT1uLmRlZmF1bHQoXCJib2R5XCIpO3JldHVybiBlLmhhc0NsYXNzKFwibGF5b3V0LWZvb3Rlci1maXhlZFwiKXx8ZS5oYXNDbGFzcyhcImxheW91dC1zbS1mb290ZXItZml4ZWRcIil8fGUuaGFzQ2xhc3MoXCJsYXlvdXQtbWQtZm9vdGVyLWZpeGVkXCIpfHxlLmhhc0NsYXNzKFwibGF5b3V0LWxnLWZvb3Rlci1maXhlZFwiKXx8ZS5oYXNDbGFzcyhcImxheW91dC14bC1mb290ZXItZml4ZWRcIil9LHQuX2ZpeFNjcm9sbEhlaWdodD1mdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdChcImJvZHlcIiksdD1uLmRlZmF1bHQodGhpcy5fY29uZmlnLnRhcmdldCk7aWYoZS5oYXNDbGFzcyhBKSl7dmFyIGE9e3Njcm9sbDpuLmRlZmF1bHQoZG9jdW1lbnQpLmhlaWdodCgpLHdpbmRvdzpuLmRlZmF1bHQod2luZG93KS5oZWlnaHQoKSxoZWFkZXI6bi5kZWZhdWx0KHopLm91dGVySGVpZ2h0KCksZm9vdGVyOm4uZGVmYXVsdChGKS5vdXRlckhlaWdodCgpfSxpPU1hdGguYWJzKGEud2luZG93K24uZGVmYXVsdCh3aW5kb3cpLnNjcm9sbFRvcCgpLWEuc2Nyb2xsKSxvPW4uZGVmYXVsdCh3aW5kb3cpLnNjcm9sbFRvcCgpLHM9dGhpcy5faXNOYXZiYXJGaXhlZCgpJiZcImZpeGVkXCI9PT1uLmRlZmF1bHQoeikuY3NzKFwicG9zaXRpb25cIiksbD10aGlzLl9pc0Zvb3RlckZpeGVkKCkmJlwiZml4ZWRcIj09PW4uZGVmYXVsdChGKS5jc3MoXCJwb3NpdGlvblwiKSxyPW4uZGVmYXVsdCh0aGlzLl9jb25maWcudGFyZ2V0K1wiLCBcIit0aGlzLl9jb25maWcudGFyZ2V0K1wiIFwiK1EpO2lmKDA9PT1vJiYwPT09aSl0LmNzcyh7Ym90dG9tOmEuZm9vdGVyLHRvcDphLmhlYWRlcn0pLHIuY3NzKFwiaGVpZ2h0XCIsYS53aW5kb3ctKGEuaGVhZGVyK2EuZm9vdGVyKSk7ZWxzZSBpZihpPD1hLmZvb3RlcilpZighMT09PWwpe3ZhciBkPWEuaGVhZGVyLW87dC5jc3MoXCJib3R0b21cIixhLmZvb3Rlci1pKS5jc3MoXCJ0b3BcIixkPj0wP2Q6MCksci5jc3MoXCJoZWlnaHRcIixhLndpbmRvdy0oYS5mb290ZXItaSkpfWVsc2UgdC5jc3MoXCJib3R0b21cIixhLmZvb3Rlcik7ZWxzZSBvPD1hLmhlYWRlcj8hMT09PXM/KHQuY3NzKFwidG9wXCIsYS5oZWFkZXItbyksci5jc3MoXCJoZWlnaHRcIixhLndpbmRvdy0oYS5oZWFkZXItbykpKTp0LmNzcyhcInRvcFwiLGEuaGVhZGVyKTohMT09PXM/KHQuY3NzKFwidG9wXCIsMCksci5jc3MoXCJoZWlnaHRcIixhLndpbmRvdykpOnQuY3NzKFwidG9wXCIsYS5oZWFkZXIpO2wmJnM/KHIuY3NzKFwiaGVpZ2h0XCIsXCIxMDAlXCIpLHQuY3NzKFwiaGVpZ2h0XCIsXCJcIikpOihsfHxzKSYmKHIuY3NzKFwiaGVpZ2h0XCIsXCIxMDAlXCIpLHIuY3NzKFwiaGVpZ2h0XCIsXCJcIikpfX0sdC5fZml4SGVpZ2h0PWZ1bmN0aW9uKCl7dmFyIGU9bi5kZWZhdWx0KFwiYm9keVwiKSx0PW4uZGVmYXVsdCh0aGlzLl9jb25maWcudGFyZ2V0K1wiIFwiK1EpO2lmKGUuaGFzQ2xhc3MoQSkpe3ZhciBhPW4uZGVmYXVsdCh3aW5kb3cpLmhlaWdodCgpLGk9bi5kZWZhdWx0KHopLm91dGVySGVpZ2h0KCksbz1uLmRlZmF1bHQoRikub3V0ZXJIZWlnaHQoKSxzPWEtaTt0aGlzLl9pc0Zvb3RlckZpeGVkKCkmJlwiZml4ZWRcIj09PW4uZGVmYXVsdChGKS5jc3MoXCJwb3NpdGlvblwiKSYmKHM9YS1pLW8pLHQuY3NzKFwiaGVpZ2h0XCIscyksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG4uZGVmYXVsdC5mbi5vdmVybGF5U2Nyb2xsYmFycyYmdC5vdmVybGF5U2Nyb2xsYmFycyh7Y2xhc3NOYW1lOnRoaXMuX2NvbmZpZy5zY3JvbGxiYXJUaGVtZSxzaXplQXV0b0NhcGFibGU6ITAsc2Nyb2xsYmFyczp7YXV0b0hpZGU6dGhpcy5fY29uZmlnLnNjcm9sbGJhckF1dG9IaWRlLGNsaWNrU2Nyb2xsaW5nOiEwfX0pfWVsc2UgdC5hdHRyKFwic3R5bGVcIixcIlwiKX0sZS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGE9bi5kZWZhdWx0KHRoaXMpLmRhdGEoaiksaT1uLmRlZmF1bHQuZXh0ZW5kKHt9LFIsbi5kZWZhdWx0KHRoaXMpLmRhdGEoKSk7aWYoYXx8KGE9bmV3IGUodGhpcyxpKSxuLmRlZmF1bHQodGhpcykuZGF0YShqLGEpKSxcInVuZGVmaW5lZFwiPT09YVt0XSl0aHJvdyBuZXcgRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvblwiKTthW3RdKCl9KSl9LGV9KCk7bi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsSCwoZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLE0uX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdCh0aGlzKSxcInRvZ2dsZVwiKX0pKSxuLmRlZmF1bHQoZG9jdW1lbnQpLnJlYWR5KChmdW5jdGlvbigpe00uX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdChIKSxcIl9pbml0XCIpfSkpLG4uZGVmYXVsdC5mbltUXT1NLl9qUXVlcnlJbnRlcmZhY2Usbi5kZWZhdWx0LmZuW1RdLkNvbnN0cnVjdG9yPU0sbi5kZWZhdWx0LmZuW1RdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0LmZuW1RdPVMsTS5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgcT1cIkRpcmVjdENoYXRcIixOPVwibHRlLmRpcmVjdGNoYXRcIixPPW4uZGVmYXVsdC5mbltxXSxQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLl9lbGVtZW50PWV9cmV0dXJuIGUucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe24uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5wYXJlbnRzKFwiLmRpcmVjdC1jaGF0XCIpLmZpcnN0KCkudG9nZ2xlQ2xhc3MoXCJkaXJlY3QtY2hhdC1jb250YWN0cy1vcGVuXCIpLG4uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKG4uZGVmYXVsdC5FdmVudChcInRvZ2dsZWQubHRlLmRpcmVjdGNoYXRcIikpfSxlLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgYT1uLmRlZmF1bHQodGhpcykuZGF0YShOKTthfHwoYT1uZXcgZShuLmRlZmF1bHQodGhpcykpLG4uZGVmYXVsdCh0aGlzKS5kYXRhKE4sYSkpLGFbdF0oKX0pKX0sZX0oKTtuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIiwnW2RhdGEtd2lkZ2V0PVwiY2hhdC1wYW5lLXRvZ2dsZVwiXScsKGZ1bmN0aW9uKGUpe2UmJmUucHJldmVudERlZmF1bHQoKSxQLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcyksXCJ0b2dnbGVcIil9KSksbi5kZWZhdWx0LmZuW3FdPVAuX2pRdWVyeUludGVyZmFjZSxuLmRlZmF1bHQuZm5bcV0uQ29uc3RydWN0b3I9UCxuLmRlZmF1bHQuZm5bcV0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHQuZm5bcV09TyxQLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBVPVwiRHJvcGRvd25cIixCPVwibHRlLmRyb3Bkb3duXCIsJD1uLmRlZmF1bHQuZm5bVV0sVz1cIi5kcm9wZG93bi1tZW51XCIsVj17fSxHPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2NvbmZpZz10LHRoaXMuX2VsZW1lbnQ9ZX12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC50b2dnbGVTdWJtZW51PWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5zaWJsaW5ncygpLnNob3coKS50b2dnbGVDbGFzcyhcInNob3dcIiksdGhpcy5fZWxlbWVudC5uZXh0KCkuaGFzQ2xhc3MoXCJzaG93XCIpfHx0aGlzLl9lbGVtZW50LnBhcmVudHMoVykuZmlyc3QoKS5maW5kKFwiLnNob3dcIikucmVtb3ZlQ2xhc3MoXCJzaG93XCIpLmhpZGUoKSx0aGlzLl9lbGVtZW50LnBhcmVudHMoXCJsaS5uYXYtaXRlbS5kcm9wZG93bi5zaG93XCIpLm9uKFwiaGlkZGVuLmJzLmRyb3Bkb3duXCIsKGZ1bmN0aW9uKCl7bi5kZWZhdWx0KFwiLmRyb3Bkb3duLXN1Ym1lbnUgLnNob3dcIikucmVtb3ZlQ2xhc3MoXCJzaG93XCIpLmhpZGUoKX0pKX0sdC5maXhQb3NpdGlvbj1mdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdChcIi5kcm9wZG93bi1tZW51LnNob3dcIik7aWYoMCE9PWUubGVuZ3RoKXtlLmhhc0NsYXNzKFwiZHJvcGRvd24tbWVudS1yaWdodFwiKT9lLmNzcyh7bGVmdDpcImluaGVyaXRcIixyaWdodDowfSk6ZS5jc3Moe2xlZnQ6MCxyaWdodDpcImluaGVyaXRcIn0pO3ZhciB0PWUub2Zmc2V0KCksYT1lLndpZHRoKCksaT1uLmRlZmF1bHQod2luZG93KS53aWR0aCgpLXQubGVmdDt0LmxlZnQ8MD9lLmNzcyh7bGVmdDpcImluaGVyaXRcIixyaWdodDp0LmxlZnQtNX0pOmk8YSYmZS5jc3Moe2xlZnQ6XCJpbmhlcml0XCIscmlnaHQ6MH0pfX0sZS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGE9bi5kZWZhdWx0KHRoaXMpLmRhdGEoQiksaT1uLmRlZmF1bHQuZXh0ZW5kKHt9LFYsbi5kZWZhdWx0KHRoaXMpLmRhdGEoKSk7YXx8KGE9bmV3IGUobi5kZWZhdWx0KHRoaXMpLGkpLG4uZGVmYXVsdCh0aGlzKS5kYXRhKEIsYSkpLFwidG9nZ2xlU3VibWVudVwiIT09dCYmXCJmaXhQb3NpdGlvblwiIT09dHx8YVt0XSgpfSkpfSxlfSgpO24uZGVmYXVsdCgnLmRyb3Bkb3duLW1lbnUgW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nKS5vbihcImNsaWNrXCIsKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLEcuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdCh0aGlzKSxcInRvZ2dsZVN1Ym1lbnVcIil9KSksbi5kZWZhdWx0KCcubmF2YmFyIFtkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJdJykub24oXCJjbGlja1wiLChmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksbi5kZWZhdWx0KGUudGFyZ2V0KS5wYXJlbnQoKS5oYXNDbGFzcyhcImRyb3Bkb3duLXN1Ym1lbnVcIil8fHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7Ry5falF1ZXJ5SW50ZXJmYWNlLmNhbGwobi5kZWZhdWx0KHRoaXMpLFwiZml4UG9zaXRpb25cIil9KSwxKX0pKSxuLmRlZmF1bHQuZm5bVV09Ry5falF1ZXJ5SW50ZXJmYWNlLG4uZGVmYXVsdC5mbltVXS5Db25zdHJ1Y3Rvcj1HLG4uZGVmYXVsdC5mbltVXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdC5mbltVXT0kLEcuX2pRdWVyeUludGVyZmFjZX07dmFyIEo9XCJFeHBhbmRhYmxlVGFibGVcIixLPVwibHRlLmV4cGFuZGFibGVUYWJsZVwiLFg9bi5kZWZhdWx0LmZuW0pdLFk9XCIuZXhwYW5kYWJsZS1ib2R5XCIsWj0nW2RhdGEtd2lkZ2V0PVwiZXhwYW5kYWJsZS10YWJsZVwiXScsZWU9XCJhcmlhLWV4cGFuZGVkXCIsdGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5fb3B0aW9ucz10LHRoaXMuX2VsZW1lbnQ9ZX12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5pbml0PWZ1bmN0aW9uKCl7bi5kZWZhdWx0KFopLmVhY2goKGZ1bmN0aW9uKGUsdCl7dmFyIGE9bi5kZWZhdWx0KHQpLmF0dHIoZWUpLGk9bi5kZWZhdWx0KHQpLm5leHQoWSkuY2hpbGRyZW4oKS5maXJzdCgpLmNoaWxkcmVuKCk7XCJ0cnVlXCI9PT1hP2kuc2hvdygpOlwiZmFsc2VcIj09PWEmJihpLmhpZGUoKSxpLnBhcmVudCgpLnBhcmVudCgpLmFkZENsYXNzKFwiZC1ub25lXCIpKX0pKX0sdC50b2dnbGVSb3c9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9lbGVtZW50LHQ9ZS5hdHRyKGVlKSxhPWUubmV4dChZKS5jaGlsZHJlbigpLmZpcnN0KCkuY2hpbGRyZW4oKTthLnN0b3AoKSxcInRydWVcIj09PXQ/KGEuc2xpZGVVcCg1MDAsKGZ1bmN0aW9uKCl7ZS5uZXh0KFkpLmFkZENsYXNzKFwiZC1ub25lXCIpfSkpLGUuYXR0cihlZSxcImZhbHNlXCIpLGUudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJjb2xsYXBzZWQubHRlLmV4cGFuZGFibGVUYWJsZVwiKSkpOlwiZmFsc2VcIj09PXQmJihlLm5leHQoWSkucmVtb3ZlQ2xhc3MoXCJkLW5vbmVcIiksYS5zbGlkZURvd24oNTAwKSxlLmF0dHIoZWUsXCJ0cnVlXCIpLGUudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJleHBhbmRlZC5sdGUuZXhwYW5kYWJsZVRhYmxlXCIpKSl9LGUuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKEspO2F8fChhPW5ldyBlKG4uZGVmYXVsdCh0aGlzKSksbi5kZWZhdWx0KHRoaXMpLmRhdGEoSyxhKSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJi9pbml0fHRvZ2dsZVJvdy8udGVzdCh0KSYmYVt0XSgpfSkpfSxlfSgpO24uZGVmYXVsdChcIi5leHBhbmRhYmxlLXRhYmxlXCIpLnJlYWR5KChmdW5jdGlvbigpe3RlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcyksXCJpbml0XCIpfSkpLG4uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLFosKGZ1bmN0aW9uKCl7dGUuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdCh0aGlzKSxcInRvZ2dsZVJvd1wiKX0pKSxuLmRlZmF1bHQuZm5bSl09dGUuX2pRdWVyeUludGVyZmFjZSxuLmRlZmF1bHQuZm5bSl0uQ29uc3RydWN0b3I9dGUsbi5kZWZhdWx0LmZuW0pdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0LmZuW0pdPVgsdGUuX2pRdWVyeUludGVyZmFjZX07dmFyIGFlPVwiRnVsbHNjcmVlblwiLG5lPVwibHRlLmZ1bGxzY3JlZW5cIixpZT1uLmRlZmF1bHQuZm5bYWVdLG9lPSdbZGF0YS13aWRnZXQ9XCJmdWxsc2NyZWVuXCJdJyxzZT1vZStcIiBpXCIsbGU9e21pbmltaXplSWNvbjpcImZhLWNvbXByZXNzLWFycm93cy1hbHRcIixtYXhpbWl6ZUljb246XCJmYS1leHBhbmQtYXJyb3dzLWFsdFwifSxyZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm9wdGlvbnM9bi5kZWZhdWx0LmV4dGVuZCh7fSxsZSx0KX12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC50b2dnbGU9ZnVuY3Rpb24oKXtkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50P3RoaXMud2luZG93ZWQoKTp0aGlzLmZ1bGxzY3JlZW4oKX0sdC5mdWxsc2NyZWVuPWZ1bmN0aW9uKCl7ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnJlcXVlc3RGdWxsc2NyZWVuP2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbigpOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC53ZWJraXRSZXF1ZXN0RnVsbHNjcmVlbj9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4oKTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubXNSZXF1ZXN0RnVsbHNjcmVlbiYmZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm1zUmVxdWVzdEZ1bGxzY3JlZW4oKSxuLmRlZmF1bHQoc2UpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5tYXhpbWl6ZUljb24pLmFkZENsYXNzKHRoaXMub3B0aW9ucy5taW5pbWl6ZUljb24pfSx0LndpbmRvd2VkPWZ1bmN0aW9uKCl7ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4/ZG9jdW1lbnQuZXhpdEZ1bGxzY3JlZW4oKTpkb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbj9kb2N1bWVudC53ZWJraXRFeGl0RnVsbHNjcmVlbigpOmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4mJmRvY3VtZW50Lm1zRXhpdEZ1bGxzY3JlZW4oKSxuLmRlZmF1bHQoc2UpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5taW5pbWl6ZUljb24pLmFkZENsYXNzKHRoaXMub3B0aW9ucy5tYXhpbWl6ZUljb24pfSxlLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24odCl7dmFyIGE9bi5kZWZhdWx0KHRoaXMpLmRhdGEobmUpO2F8fChhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKCkpO3ZhciBpPW4uZGVmYXVsdC5leHRlbmQoe30sbGUsXCJvYmplY3RcIj09dHlwZW9mIHQ/dDphKSxvPW5ldyBlKG4uZGVmYXVsdCh0aGlzKSxpKTtuLmRlZmF1bHQodGhpcykuZGF0YShuZSxcIm9iamVjdFwiPT10eXBlb2YgdD90OmEpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYvdG9nZ2xlfGZ1bGxzY3JlZW58d2luZG93ZWQvLnRlc3QodCk/b1t0XSgpOm8uaW5pdCgpfSxlfSgpO24uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLG9lLChmdW5jdGlvbigpe3JlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcyksXCJ0b2dnbGVcIil9KSksbi5kZWZhdWx0LmZuW2FlXT1yZS5falF1ZXJ5SW50ZXJmYWNlLG4uZGVmYXVsdC5mblthZV0uQ29uc3RydWN0b3I9cmUsbi5kZWZhdWx0LmZuW2FlXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdC5mblthZV09aWUscmUuX2pRdWVyeUludGVyZmFjZX07dmFyIGRlPVwibHRlLmlmcmFtZVwiLGZlPW4uZGVmYXVsdC5mbi5JRnJhbWUsdWU9J1tkYXRhLXdpZGdldD1cImlmcmFtZVwiXScsY2U9J1tkYXRhLXdpZGdldD1cImlmcmFtZS1mdWxsc2NyZWVuXCJdJyxoZT1cIi5jb250ZW50LXdyYXBwZXJcIixnZT1cIi5jb250ZW50LXdyYXBwZXIgaWZyYW1lXCIscGU9J1tkYXRhLXdpZGdldD1cImlmcmFtZVwiXS5pZnJhbWUtbW9kZSAubmF2JyxtZT0nW2RhdGEtd2lkZ2V0PVwiaWZyYW1lXCJdLmlmcmFtZS1tb2RlIC5uYXZiYXItbmF2Jyx2ZT1tZStcIiAubmF2LWl0ZW1cIixfZT1tZStcIiAubmF2LWxpbmtcIixiZT0nW2RhdGEtd2lkZ2V0PVwiaWZyYW1lXCJdLmlmcmFtZS1tb2RlIC50YWItY29udGVudCcseWU9YmUrXCIgLnRhYi1lbXB0eVwiLENlPWJlK1wiIC50YWItbG9hZGluZ1wiLHdlPWJlK1wiIC50YWItcGFuZVwiLHhlPVwiLm1haW4tc2lkZWJhciAubmF2LWl0ZW0gPiBhLm5hdi1saW5rXCIsSWU9XCIubWFpbi1oZWFkZXIgLm5hdi1pdGVtIGEubmF2LWxpbmtcIixUZT1cIi5tYWluLWhlYWRlciBhLmRyb3Bkb3duLWl0ZW1cIixqZT1cImlmcmFtZS1tb2RlXCIsU2U9XCJpZnJhbWUtbW9kZS1mdWxsc2NyZWVuXCIsa2U9e29uVGFiQ2xpY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG9uVGFiQ2hhbmdlZDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sb25UYWJDcmVhdGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxhdXRvSWZyYW1lTW9kZTohMCxhdXRvSXRlbUFjdGl2ZTohMCxhdXRvU2hvd05ld1RhYjohMCxhbGxvd0R1cGxpY2F0ZXM6ITEsbG9hZGluZ1NjcmVlbjohMCx1c2VOYXZiYXJJdGVtczohMCxzY3JvbGxPZmZzZXQ6NDAsc2Nyb2xsQmVoYXZpb3JTd2FwOiExLGljb25NYXhpbWl6ZTpcImZhLWV4cGFuZFwiLGljb25NaW5pbWl6ZTpcImZhLWNvbXByZXNzXCJ9LFFlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2NvbmZpZz10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9pbml0KCl9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQub25UYWJDbGljaz1mdW5jdGlvbihlKXt0aGlzLl9jb25maWcub25UYWJDbGljayhlKX0sdC5vblRhYkNoYW5nZWQ9ZnVuY3Rpb24oZSl7dGhpcy5fY29uZmlnLm9uVGFiQ2hhbmdlZChlKX0sdC5vblRhYkNyZWF0ZWQ9ZnVuY3Rpb24oZSl7dGhpcy5fY29uZmlnLm9uVGFiQ3JlYXRlZChlKX0sdC5jcmVhdGVUYWI9ZnVuY3Rpb24oZSx0LGEsaSl7dmFyIG89dGhpcyxzPVwicGFuZWwtXCIrYSxsPVwidGFiLVwiK2E7dGhpcy5fY29uZmlnLmFsbG93RHVwbGljYXRlcyYmKHMrPVwiLVwiK01hdGguZmxvb3IoMWUzKk1hdGgucmFuZG9tKCkpLGwrPVwiLVwiK01hdGguZmxvb3IoMWUzKk1hdGgucmFuZG9tKCkpKTt2YXIgcj0nPGxpIGNsYXNzPVwibmF2LWl0ZW1cIiByb2xlPVwicHJlc2VudGF0aW9uXCI+PGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0bi1pZnJhbWUtY2xvc2VcIiBkYXRhLXdpZGdldD1cImlmcmFtZS1jbG9zZVwiIGRhdGEtdHlwZT1cIm9ubHktdGhpc1wiPjxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCI+PC9pPjwvYT48YSBjbGFzcz1cIm5hdi1saW5rXCIgZGF0YS10b2dnbGU9XCJyb3dcIiBpZD1cIicrbCsnXCIgaHJlZj1cIiMnK3MrJ1wiIHJvbGU9XCJ0YWJcIiBhcmlhLWNvbnRyb2xzPVwiJytzKydcIiBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIj4nK2UrXCI8L2E+PC9saT5cIjtuLmRlZmF1bHQobWUpLmFwcGVuZCh1bmVzY2FwZShlc2NhcGUocikpKTt2YXIgZD0nPGRpdiBjbGFzcz1cInRhYi1wYW5lIGZhZGVcIiBpZD1cIicrcysnXCIgcm9sZT1cInRhYnBhbmVsXCIgYXJpYS1sYWJlbGxlZGJ5PVwiJytsKydcIj48aWZyYW1lIHNyYz1cIicrdCsnXCI+PC9pZnJhbWU+PC9kaXY+JztpZihuLmRlZmF1bHQoYmUpLmFwcGVuZCh1bmVzY2FwZShlc2NhcGUoZCkpKSxpKWlmKHRoaXMuX2NvbmZpZy5sb2FkaW5nU2NyZWVuKXt2YXIgZj1uLmRlZmF1bHQoQ2UpO2YuZmFkZUluKCksbi5kZWZhdWx0KHMrXCIgaWZyYW1lXCIpLnJlYWR5KChmdW5jdGlvbigpe1wibnVtYmVyXCI9PXR5cGVvZiBvLl9jb25maWcubG9hZGluZ1NjcmVlbj8oby5zd2l0Y2hUYWIoXCIjXCIrbCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtmLmZhZGVPdXQoKX0pLG8uX2NvbmZpZy5sb2FkaW5nU2NyZWVuKSk6KG8uc3dpdGNoVGFiKFwiI1wiK2wpLGYuZmFkZU91dCgpKX0pKX1lbHNlIHRoaXMuc3dpdGNoVGFiKFwiI1wiK2wpO3RoaXMub25UYWJDcmVhdGVkKG4uZGVmYXVsdChcIiNcIitsKSl9LHQub3BlblRhYlNpZGViYXI9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD10aGlzLl9jb25maWcuYXV0b1Nob3dOZXdUYWIpO3ZhciBhPW4uZGVmYXVsdChlKS5jbG9uZSgpO3ZvaWQgMD09PWEuYXR0cihcImhyZWZcIikmJihhPW4uZGVmYXVsdChlKS5wYXJlbnQoXCJhXCIpLmNsb25lKCkpLGEuZmluZChcIi5yaWdodCwgLnNlYXJjaC1wYXRoXCIpLnJlbW92ZSgpO3ZhciBpPWEuZmluZChcInBcIikudGV4dCgpO1wiXCI9PT1pJiYoaT1hLnRleHQoKSk7dmFyIG89YS5hdHRyKFwiaHJlZlwiKTtpZihcIiNcIiE9PW8mJlwiXCIhPT1vJiZ2b2lkIDAhPT1vKXt2YXIgcz1vLnJlcGxhY2UoXCIuL1wiLFwiXCIpLnJlcGxhY2UoL1tcIiYnLi86PT9bXFxdXS9naSxcIi1cIikucmVwbGFjZSgvKC0tKS9naSxcIlwiKSxsPVwidGFiLVwiK3M7aWYoIXRoaXMuX2NvbmZpZy5hbGxvd0R1cGxpY2F0ZXMmJm4uZGVmYXVsdChcIiNcIitsKS5sZW5ndGg+MClyZXR1cm4gdGhpcy5zd2l0Y2hUYWIoXCIjXCIrbCk7KCF0aGlzLl9jb25maWcuYWxsb3dEdXBsaWNhdGVzJiYwPT09bi5kZWZhdWx0KFwiI1wiK2wpLmxlbmd0aHx8dGhpcy5fY29uZmlnLmFsbG93RHVwbGljYXRlcykmJnRoaXMuY3JlYXRlVGFiKGksbyxzLHQpfX0sdC5zd2l0Y2hUYWI9ZnVuY3Rpb24oZSl7dmFyIHQ9bi5kZWZhdWx0KGUpLGE9dC5hdHRyKFwiaHJlZlwiKTtuLmRlZmF1bHQoeWUpLmhpZGUoKSxuLmRlZmF1bHQobWUrXCIgLmFjdGl2ZVwiKS50YWIoXCJkaXNwb3NlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHRoaXMuX2ZpeEhlaWdodCgpLHQudGFiKFwic2hvd1wiKSx0LnBhcmVudHMoXCJsaVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSx0aGlzLm9uVGFiQ2hhbmdlZCh0KSx0aGlzLl9jb25maWcuYXV0b0l0ZW1BY3RpdmUmJnRoaXMuX3NldEl0ZW1BY3RpdmUobi5kZWZhdWx0KGErXCIgaWZyYW1lXCIpLmF0dHIoXCJzcmNcIikpfSx0LnJlbW92ZUFjdGl2ZVRhYj1mdW5jdGlvbihlLHQpe2lmKFwiYWxsXCI9PWUpbi5kZWZhdWx0KHZlKS5yZW1vdmUoKSxuLmRlZmF1bHQod2UpLnJlbW92ZSgpLG4uZGVmYXVsdCh5ZSkuc2hvdygpO2Vsc2UgaWYoXCJhbGwtb3RoZXJcIj09ZSluLmRlZmF1bHQodmUrXCI6bm90KC5hY3RpdmUpXCIpLnJlbW92ZSgpLG4uZGVmYXVsdCh3ZStcIjpub3QoLmFjdGl2ZSlcIikucmVtb3ZlKCk7ZWxzZSBpZihcIm9ubHktdGhpc1wiPT1lKXt2YXIgYT1uLmRlZmF1bHQodCksaT1hLnBhcmVudChcIi5uYXYtaXRlbVwiKSxvPWkucGFyZW50KCkscz1pLmluZGV4KCksbD1hLnNpYmxpbmdzKFwiLm5hdi1saW5rXCIpLmF0dHIoXCJhcmlhLWNvbnRyb2xzXCIpO2lmKGkucmVtb3ZlKCksbi5kZWZhdWx0KFwiI1wiK2wpLnJlbW92ZSgpLG4uZGVmYXVsdChiZSkuY2hpbGRyZW4oKS5sZW5ndGg9PW4uZGVmYXVsdCh5ZStcIiwgXCIrQ2UpLmxlbmd0aCluLmRlZmF1bHQoeWUpLnNob3coKTtlbHNle3ZhciByPXMtMTt0aGlzLnN3aXRjaFRhYihvLmNoaWxkcmVuKCkuZXEocikuZmluZChcImEubmF2LWxpbmtcIikpfX1lbHNle3ZhciBkPW4uZGVmYXVsdCh2ZStcIi5hY3RpdmVcIiksZj1kLnBhcmVudCgpLHU9ZC5pbmRleCgpO2lmKGQucmVtb3ZlKCksbi5kZWZhdWx0KHdlK1wiLmFjdGl2ZVwiKS5yZW1vdmUoKSxuLmRlZmF1bHQoYmUpLmNoaWxkcmVuKCkubGVuZ3RoPT1uLmRlZmF1bHQoeWUrXCIsIFwiK0NlKS5sZW5ndGgpbi5kZWZhdWx0KHllKS5zaG93KCk7ZWxzZXt2YXIgYz11LTE7dGhpcy5zd2l0Y2hUYWIoZi5jaGlsZHJlbigpLmVxKGMpLmZpbmQoXCJhLm5hdi1saW5rXCIpKX19fSx0LnRvZ2dsZUZ1bGxzY3JlZW49ZnVuY3Rpb24oKXtuLmRlZmF1bHQoXCJib2R5XCIpLmhhc0NsYXNzKFNlKT8obi5kZWZhdWx0KGNlK1wiIGlcIikucmVtb3ZlQ2xhc3ModGhpcy5fY29uZmlnLmljb25NaW5pbWl6ZSkuYWRkQ2xhc3ModGhpcy5fY29uZmlnLmljb25NYXhpbWl6ZSksbi5kZWZhdWx0KFwiYm9keVwiKS5yZW1vdmVDbGFzcyhTZSksbi5kZWZhdWx0KHllK1wiLCBcIitDZSkuaGVpZ2h0KFwiYXV0b1wiKSxuLmRlZmF1bHQoaGUpLmhlaWdodChcImF1dG9cIiksbi5kZWZhdWx0KGdlKS5oZWlnaHQoXCJhdXRvXCIpKToobi5kZWZhdWx0KGNlK1wiIGlcIikucmVtb3ZlQ2xhc3ModGhpcy5fY29uZmlnLmljb25NYXhpbWl6ZSkuYWRkQ2xhc3ModGhpcy5fY29uZmlnLmljb25NaW5pbWl6ZSksbi5kZWZhdWx0KFwiYm9keVwiKS5hZGRDbGFzcyhTZSkpLG4uZGVmYXVsdCh3aW5kb3cpLnRyaWdnZXIoXCJyZXNpemVcIiksdGhpcy5fZml4SGVpZ2h0KCEwKX0sdC5faW5pdD1mdW5jdGlvbigpe2lmKHdpbmRvdy5mcmFtZUVsZW1lbnQmJnRoaXMuX2NvbmZpZy5hdXRvSWZyYW1lTW9kZSluLmRlZmF1bHQoXCJib2R5XCIpLmFkZENsYXNzKGplKTtlbHNlIGlmKG4uZGVmYXVsdChoZSkuaGFzQ2xhc3MoamUpKXtpZihuLmRlZmF1bHQoYmUpLmNoaWxkcmVuKCkubGVuZ3RoPjIpe3ZhciBlPW4uZGVmYXVsdCh3ZStcIjpmaXJzdC1jaGlsZFwiKTtlLnNob3coKSx0aGlzLl9zZXRJdGVtQWN0aXZlKGUuZmluZChcImlmcmFtZVwiKS5hdHRyKFwic3JjXCIpKX10aGlzLl9zZXR1cExpc3RlbmVycygpLHRoaXMuX2ZpeEhlaWdodCghMCl9fSx0Ll9uYXZTY3JvbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9bi5kZWZhdWx0KG1lKS5zY3JvbGxMZWZ0KCk7bi5kZWZhdWx0KG1lKS5hbmltYXRlKHtzY3JvbGxMZWZ0OnQrZX0sMjUwLFwibGluZWFyXCIpfSx0Ll9zZXR1cExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7bi5kZWZhdWx0KHdpbmRvdykub24oXCJyZXNpemVcIiwoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe2UuX2ZpeEhlaWdodCgpfSksMSl9KSksbi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIseGUrXCIsIC5zaWRlYmFyLXNlYXJjaC1yZXN1bHRzIC5saXN0LWdyb3VwLWl0ZW1cIiwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLGUub3BlblRhYlNpZGViYXIodC50YXJnZXQpfSkpLHRoaXMuX2NvbmZpZy51c2VOYXZiYXJJdGVtcyYmbi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsSWUrXCIsIFwiK1RlLChmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksZS5vcGVuVGFiU2lkZWJhcih0LnRhcmdldCl9KSksbi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsX2UsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSxlLm9uVGFiQ2xpY2sodC50YXJnZXQpLGUuc3dpdGNoVGFiKHQudGFyZ2V0KX0pKSxuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIixfZSwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLGUub25UYWJDbGljayh0LnRhcmdldCksZS5zd2l0Y2hUYWIodC50YXJnZXQpfSkpLG4uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLCdbZGF0YS13aWRnZXQ9XCJpZnJhbWUtY2xvc2VcIl0nLChmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCk7dmFyIGE9dC50YXJnZXQ7XCJJXCI9PWEubm9kZU5hbWUmJihhPXQudGFyZ2V0Lm9mZnNldFBhcmVudCksZS5yZW1vdmVBY3RpdmVUYWIoYS5hdHRyaWJ1dGVzW1wiZGF0YS10eXBlXCJdP2EuYXR0cmlidXRlc1tcImRhdGEtdHlwZVwiXS5ub2RlVmFsdWU6bnVsbCxhKX0pKSxuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIixjZSwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLGUudG9nZ2xlRnVsbHNjcmVlbigpfSkpO3ZhciB0PSExLGE9bnVsbDtuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwibW91c2Vkb3duXCIsJ1tkYXRhLXdpZGdldD1cImlmcmFtZS1zY3JvbGxsZWZ0XCJdJywoZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpLGNsZWFySW50ZXJ2YWwoYSk7dmFyIGk9ZS5fY29uZmlnLnNjcm9sbE9mZnNldDtlLl9jb25maWcuc2Nyb2xsQmVoYXZpb3JTd2FwfHwoaT0taSksdD0hMCxlLl9uYXZTY3JvbGwoaSksYT1zZXRJbnRlcnZhbCgoZnVuY3Rpb24oKXtlLl9uYXZTY3JvbGwoaSl9KSwyNTApfSkpLG4uZGVmYXVsdChkb2N1bWVudCkub24oXCJtb3VzZWRvd25cIiwnW2RhdGEtd2lkZ2V0PVwiaWZyYW1lLXNjcm9sbHJpZ2h0XCJdJywoZnVuY3Rpb24obil7bi5wcmV2ZW50RGVmYXVsdCgpLGNsZWFySW50ZXJ2YWwoYSk7dmFyIGk9ZS5fY29uZmlnLnNjcm9sbE9mZnNldDtlLl9jb25maWcuc2Nyb2xsQmVoYXZpb3JTd2FwJiYoaT0taSksdD0hMCxlLl9uYXZTY3JvbGwoaSksYT1zZXRJbnRlcnZhbCgoZnVuY3Rpb24oKXtlLl9uYXZTY3JvbGwoaSl9KSwyNTApfSkpLG4uZGVmYXVsdChkb2N1bWVudCkub24oXCJtb3VzZXVwXCIsKGZ1bmN0aW9uKCl7dCYmKHQ9ITEsY2xlYXJJbnRlcnZhbChhKSxhPW51bGwpfSkpfSx0Ll9zZXRJdGVtQWN0aXZlPWZ1bmN0aW9uKGUpe24uZGVmYXVsdCh4ZStcIiwgXCIrVGUpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLG4uZGVmYXVsdChJZSkucGFyZW50KCkucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7dmFyIHQ9bi5kZWZhdWx0KEllKydbaHJlZiQ9XCInK2UrJ1wiXScpLGE9bi5kZWZhdWx0KCcubWFpbi1oZWFkZXIgYS5kcm9wZG93bi1pdGVtW2hyZWYkPVwiJytlKydcIl0nKSxpPW4uZGVmYXVsdCh4ZSsnW2hyZWYkPVwiJytlKydcIl0nKTt0LmVhY2goKGZ1bmN0aW9uKGUsdCl7bi5kZWZhdWx0KHQpLnBhcmVudCgpLmFkZENsYXNzKFwiYWN0aXZlXCIpfSkpLGEuZWFjaCgoZnVuY3Rpb24oZSx0KXtuLmRlZmF1bHQodCkuYWRkQ2xhc3MoXCJhY3RpdmVcIil9KSksaS5lYWNoKChmdW5jdGlvbihlLHQpe24uZGVmYXVsdCh0KS5hZGRDbGFzcyhcImFjdGl2ZVwiKSxuLmRlZmF1bHQodCkucGFyZW50cyhcIi5uYXYtdHJlZXZpZXdcIikucHJldkFsbChcIi5uYXYtbGlua1wiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKX0pKX0sdC5fZml4SGVpZ2h0PWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPSExKSxuLmRlZmF1bHQoXCJib2R5XCIpLmhhc0NsYXNzKFNlKSl7dmFyIHQ9bi5kZWZhdWx0KHdpbmRvdykuaGVpZ2h0KCksYT1uLmRlZmF1bHQocGUpLm91dGVySGVpZ2h0KCk7bi5kZWZhdWx0KHllK1wiLCBcIitDZStcIiwgXCIrZ2UpLmhlaWdodCh0LWEpLG4uZGVmYXVsdChoZSkuaGVpZ2h0KHQpfWVsc2V7dmFyIGk9cGFyc2VGbG9hdChuLmRlZmF1bHQoaGUpLmNzcyhcImhlaWdodFwiKSksbz1uLmRlZmF1bHQocGUpLm91dGVySGVpZ2h0KCk7MT09ZT9zZXRUaW1lb3V0KChmdW5jdGlvbigpe24uZGVmYXVsdCh5ZStcIiwgXCIrQ2UpLmhlaWdodChpLW8pfSksNTApOm4uZGVmYXVsdChnZSkuaGVpZ2h0KGktbyl9fSxlLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24odCl7dmFyIGE9bi5kZWZhdWx0KHRoaXMpLmRhdGEoZGUpLGk9bi5kZWZhdWx0LmV4dGVuZCh7fSxrZSxuLmRlZmF1bHQodGhpcykuZGF0YSgpKTtpZihhfHwoYT1uZXcgZSh0aGlzLGkpLG4uZGVmYXVsdCh0aGlzKS5kYXRhKGRlLGEpKSxcInN0cmluZ1wiPT10eXBlb2YgdCYmL2NyZWF0ZVRhYnxvcGVuVGFiU2lkZWJhcnxzd2l0Y2hUYWJ8cmVtb3ZlQWN0aXZlVGFiLy50ZXN0KHQpKXtmb3IodmFyIG8scz1hcmd1bWVudHMubGVuZ3RoLGw9bmV3IEFycmF5KHM+MT9zLTE6MCkscj0xO3I8cztyKyspbFtyLTFdPWFyZ3VtZW50c1tyXTsobz1hKVt0XS5hcHBseShvLGwpfX0sZX0oKTtuLmRlZmF1bHQod2luZG93KS5vbihcImxvYWRcIiwoZnVuY3Rpb24oKXtRZS5falF1ZXJ5SW50ZXJmYWNlLmNhbGwobi5kZWZhdWx0KHVlKSl9KSksbi5kZWZhdWx0LmZuLklGcmFtZT1RZS5falF1ZXJ5SW50ZXJmYWNlLG4uZGVmYXVsdC5mbi5JRnJhbWUuQ29uc3RydWN0b3I9UWUsbi5kZWZhdWx0LmZuLklGcmFtZS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdC5mbi5JRnJhbWU9ZmUsUWUuX2pRdWVyeUludGVyZmFjZX07dmFyIEhlPVwibHRlLmxheW91dFwiLHplPW4uZGVmYXVsdC5mbi5MYXlvdXQsRmU9XCIubWFpbi1oZWFkZXJcIixFZT1cIi5tYWluLXNpZGViYXJcIixEZT1cIi5tYWluLXNpZGViYXIgLnNpZGViYXJcIixMZT1cIi5tYWluLWZvb3RlclwiLEFlPVwic2lkZWJhci1mb2N1c2VkXCIsUmU9e3Njcm9sbGJhclRoZW1lOlwib3MtdGhlbWUtbGlnaHRcIixzY3JvbGxiYXJBdXRvSGlkZTpcImxcIixwYW5lbEF1dG9IZWlnaHQ6ITAscGFuZWxBdXRvSGVpZ2h0TW9kZTpcIm1pbi1oZWlnaHRcIixwcmVsb2FkRHVyYXRpb246MjAwLGxvZ2luUmVnaXN0ZXJBdXRvSGVpZ2h0OiEwfSxNZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLl9jb25maWc9dCx0aGlzLl9lbGVtZW50PWV9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuZml4TGF5b3V0SGVpZ2h0PWZ1bmN0aW9uKGUpe3ZvaWQgMD09PWUmJihlPW51bGwpO3ZhciB0PW4uZGVmYXVsdChcImJvZHlcIiksYT0wOyh0Lmhhc0NsYXNzKFwiY29udHJvbC1zaWRlYmFyLXNsaWRlLW9wZW5cIil8fHQuaGFzQ2xhc3MoXCJjb250cm9sLXNpZGViYXItb3BlblwiKXx8XCJjb250cm9sX3NpZGViYXJcIj09PWUpJiYoYT1uLmRlZmF1bHQoXCIuY29udHJvbC1zaWRlYmFyLWNvbnRlbnRcIikub3V0ZXJIZWlnaHQoKSk7dmFyIGk9e3dpbmRvdzpuLmRlZmF1bHQod2luZG93KS5oZWlnaHQoKSxoZWFkZXI6bi5kZWZhdWx0KEZlKS5sZW5ndGg+MD9uLmRlZmF1bHQoRmUpLm91dGVySGVpZ2h0KCk6MCxmb290ZXI6bi5kZWZhdWx0KExlKS5sZW5ndGg+MD9uLmRlZmF1bHQoTGUpLm91dGVySGVpZ2h0KCk6MCxzaWRlYmFyOm4uZGVmYXVsdChEZSkubGVuZ3RoPjA/bi5kZWZhdWx0KERlKS5oZWlnaHQoKTowLGNvbnRyb2xTaWRlYmFyOmF9LG89dGhpcy5fbWF4KGkpLHM9dGhpcy5fY29uZmlnLnBhbmVsQXV0b0hlaWdodDshMD09PXMmJihzPTApO3ZhciBsPW4uZGVmYXVsdChcIi5jb250ZW50LXdyYXBwZXJcIik7ITEhPT1zJiYobz09PWkuY29udHJvbFNpZGViYXI/bC5jc3ModGhpcy5fY29uZmlnLnBhbmVsQXV0b0hlaWdodE1vZGUsbytzKTpvPT09aS53aW5kb3c/bC5jc3ModGhpcy5fY29uZmlnLnBhbmVsQXV0b0hlaWdodE1vZGUsbytzLWkuaGVhZGVyLWkuZm9vdGVyKTpsLmNzcyh0aGlzLl9jb25maWcucGFuZWxBdXRvSGVpZ2h0TW9kZSxvK3MtaS5oZWFkZXIpLHRoaXMuX2lzRm9vdGVyRml4ZWQoKSYmbC5jc3ModGhpcy5fY29uZmlnLnBhbmVsQXV0b0hlaWdodE1vZGUscGFyc2VGbG9hdChsLmNzcyh0aGlzLl9jb25maWcucGFuZWxBdXRvSGVpZ2h0TW9kZSkpK2kuZm9vdGVyKSksdC5oYXNDbGFzcyhcImxheW91dC1maXhlZFwiKSYmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBuLmRlZmF1bHQuZm4ub3ZlcmxheVNjcm9sbGJhcnM/bi5kZWZhdWx0KERlKS5vdmVybGF5U2Nyb2xsYmFycyh7Y2xhc3NOYW1lOnRoaXMuX2NvbmZpZy5zY3JvbGxiYXJUaGVtZSxzaXplQXV0b0NhcGFibGU6ITAsc2Nyb2xsYmFyczp7YXV0b0hpZGU6dGhpcy5fY29uZmlnLnNjcm9sbGJhckF1dG9IaWRlLGNsaWNrU2Nyb2xsaW5nOiEwfX0pOm4uZGVmYXVsdChEZSkuY3NzKFwib3ZlcmZsb3cteVwiLFwiYXV0b1wiKSl9LHQuZml4TG9naW5SZWdpc3RlckhlaWdodD1mdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdChcImJvZHlcIiksdD1uLmRlZmF1bHQoXCIubG9naW4tYm94LCAucmVnaXN0ZXItYm94XCIpO2lmKDA9PT10Lmxlbmd0aCllLmNzcyhcImhlaWdodFwiLFwiYXV0b1wiKSxuLmRlZmF1bHQoXCJodG1sXCIpLmNzcyhcImhlaWdodFwiLFwiYXV0b1wiKTtlbHNle3ZhciBhPXQuaGVpZ2h0KCk7ZS5jc3ModGhpcy5fY29uZmlnLnBhbmVsQXV0b0hlaWdodE1vZGUpIT09YSYmZS5jc3ModGhpcy5fY29uZmlnLnBhbmVsQXV0b0hlaWdodE1vZGUsYSl9fSx0Ll9pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmZpeExheW91dEhlaWdodCgpLCEwPT09dGhpcy5fY29uZmlnLmxvZ2luUmVnaXN0ZXJBdXRvSGVpZ2h0P3RoaXMuZml4TG9naW5SZWdpc3RlckhlaWdodCgpOnRoaXMuX2NvbmZpZy5sb2dpblJlZ2lzdGVyQXV0b0hlaWdodD09PXBhcnNlSW50KHRoaXMuX2NvbmZpZy5sb2dpblJlZ2lzdGVyQXV0b0hlaWdodCwxMCkmJnNldEludGVydmFsKHRoaXMuZml4TG9naW5SZWdpc3RlckhlaWdodCx0aGlzLl9jb25maWcubG9naW5SZWdpc3RlckF1dG9IZWlnaHQpLG4uZGVmYXVsdChEZSkub24oXCJjb2xsYXBzZWQubHRlLnRyZWV2aWV3IGV4cGFuZGVkLmx0ZS50cmVldmlld1wiLChmdW5jdGlvbigpe2UuZml4TGF5b3V0SGVpZ2h0KCl9KSksbi5kZWZhdWx0KEVlKS5vbihcIm1vdXNlZW50ZXIgbW91c2VsZWF2ZVwiLChmdW5jdGlvbigpe24uZGVmYXVsdChcImJvZHlcIikuaGFzQ2xhc3MoXCJzaWRlYmFyLWNvbGxhcHNlXCIpJiZlLmZpeExheW91dEhlaWdodCgpfSkpLG4uZGVmYXVsdCgnW2RhdGEtd2lkZ2V0PVwicHVzaG1lbnVcIl0nKS5vbihcImNvbGxhcHNlZC5sdGUucHVzaG1lbnUgc2hvd24ubHRlLnB1c2htZW51XCIsKGZ1bmN0aW9uKCl7c2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLmZpeExheW91dEhlaWdodCgpfSksMzAwKX0pKSxuLmRlZmF1bHQoJ1tkYXRhLXdpZGdldD1cImNvbnRyb2wtc2lkZWJhclwiXScpLm9uKFwiY29sbGFwc2VkLmx0ZS5jb250cm9sc2lkZWJhclwiLChmdW5jdGlvbigpe2UuZml4TGF5b3V0SGVpZ2h0KCl9KSkub24oXCJleHBhbmRlZC5sdGUuY29udHJvbHNpZGViYXJcIiwoZnVuY3Rpb24oKXtlLmZpeExheW91dEhlaWdodChcImNvbnRyb2xfc2lkZWJhclwiKX0pKSxuLmRlZmF1bHQod2luZG93KS5yZXNpemUoKGZ1bmN0aW9uKCl7ZS5maXhMYXlvdXRIZWlnaHQoKX0pKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe24uZGVmYXVsdChcImJvZHkuaG9sZC10cmFuc2l0aW9uXCIpLnJlbW92ZUNsYXNzKFwiaG9sZC10cmFuc2l0aW9uXCIpfSksNTApLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGU9bi5kZWZhdWx0KFwiLnByZWxvYWRlclwiKTtlJiYoZS5jc3MoXCJoZWlnaHRcIiwwKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2UuY2hpbGRyZW4oKS5oaWRlKCl9KSwyMDApKX0pLHRoaXMuX2NvbmZpZy5wcmVsb2FkRHVyYXRpb24pfSx0Ll9tYXg9ZnVuY3Rpb24oZSl7dmFyIHQ9MDtyZXR1cm4gT2JqZWN0LmtleXMoZSkuZm9yRWFjaCgoZnVuY3Rpb24oYSl7ZVthXT50JiYodD1lW2FdKX0pKSx0fSx0Ll9pc0Zvb3RlckZpeGVkPWZ1bmN0aW9uKCl7cmV0dXJuXCJmaXhlZFwiPT09bi5kZWZhdWx0KExlKS5jc3MoXCJwb3NpdGlvblwiKX0sZS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1cIlwiKSx0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGE9bi5kZWZhdWx0KHRoaXMpLmRhdGEoSGUpLGk9bi5kZWZhdWx0LmV4dGVuZCh7fSxSZSxuLmRlZmF1bHQodGhpcykuZGF0YSgpKTthfHwoYT1uZXcgZShuLmRlZmF1bHQodGhpcyksaSksbi5kZWZhdWx0KHRoaXMpLmRhdGEoSGUsYSkpLFwiaW5pdFwiPT09dHx8XCJcIj09PXQ/YS5faW5pdCgpOlwiZml4TGF5b3V0SGVpZ2h0XCIhPT10JiZcImZpeExvZ2luUmVnaXN0ZXJIZWlnaHRcIiE9PXR8fGFbdF0oKX0pKX0sZX0oKTtuLmRlZmF1bHQod2luZG93KS5vbihcImxvYWRcIiwoZnVuY3Rpb24oKXtNZS5falF1ZXJ5SW50ZXJmYWNlLmNhbGwobi5kZWZhdWx0KFwiYm9keVwiKSl9KSksbi5kZWZhdWx0KERlK1wiIGFcIikub24oXCJmb2N1c2luXCIsKGZ1bmN0aW9uKCl7bi5kZWZhdWx0KEVlKS5hZGRDbGFzcyhBZSl9KSkub24oXCJmb2N1c291dFwiLChmdW5jdGlvbigpe24uZGVmYXVsdChFZSkucmVtb3ZlQ2xhc3MoQWUpfSkpLG4uZGVmYXVsdC5mbi5MYXlvdXQ9TWUuX2pRdWVyeUludGVyZmFjZSxuLmRlZmF1bHQuZm4uTGF5b3V0LkNvbnN0cnVjdG9yPU1lLG4uZGVmYXVsdC5mbi5MYXlvdXQubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHQuZm4uTGF5b3V0PXplLE1lLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBxZT1cIlB1c2hNZW51XCIsTmU9XCJsdGUucHVzaG1lbnVcIixPZT1cIi5cIitOZSxQZT1uLmRlZmF1bHQuZm5bcWVdLFVlPSdbZGF0YS13aWRnZXQ9XCJwdXNobWVudVwiXScsQmU9XCJib2R5XCIsJGU9XCJzaWRlYmFyLWNvbGxhcHNlXCIsV2U9XCJzaWRlYmFyLW9wZW5cIixWZT1cInNpZGViYXItaXMtb3BlbmluZ1wiLEdlPVwic2lkZWJhci1jbG9zZWRcIixKZT17YXV0b0NvbGxhcHNlU2l6ZTo5OTIsZW5hYmxlUmVtZW1iZXI6ITEsbm9UcmFuc2l0aW9uQWZ0ZXJSZWxvYWQ6ITB9LEtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9vcHRpb25zPW4uZGVmYXVsdC5leHRlbmQoe30sSmUsdCksMD09PW4uZGVmYXVsdChcIiNzaWRlYmFyLW92ZXJsYXlcIikubGVuZ3RoJiZ0aGlzLl9hZGRPdmVybGF5KCksdGhpcy5faW5pdCgpfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmV4cGFuZD1mdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdChCZSk7dGhpcy5fb3B0aW9ucy5hdXRvQ29sbGFwc2VTaXplJiZuLmRlZmF1bHQod2luZG93KS53aWR0aCgpPD10aGlzLl9vcHRpb25zLmF1dG9Db2xsYXBzZVNpemUmJmUuYWRkQ2xhc3MoV2UpLGUuYWRkQ2xhc3MoVmUpLnJlbW92ZUNsYXNzKFwic2lkZWJhci1jb2xsYXBzZSBzaWRlYmFyLWNsb3NlZFwiKS5kZWxheSg1MCkucXVldWUoKGZ1bmN0aW9uKCl7ZS5yZW1vdmVDbGFzcyhWZSksbi5kZWZhdWx0KHRoaXMpLmRlcXVldWUoKX0pKSx0aGlzLl9vcHRpb25zLmVuYWJsZVJlbWVtYmVyJiZsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInJlbWVtYmVyXCIrT2UsV2UpLG4uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKG4uZGVmYXVsdC5FdmVudChcInNob3duLmx0ZS5wdXNobWVudVwiKSl9LHQuY29sbGFwc2U9ZnVuY3Rpb24oKXt2YXIgZT1uLmRlZmF1bHQoQmUpO3RoaXMuX29wdGlvbnMuYXV0b0NvbGxhcHNlU2l6ZSYmbi5kZWZhdWx0KHdpbmRvdykud2lkdGgoKTw9dGhpcy5fb3B0aW9ucy5hdXRvQ29sbGFwc2VTaXplJiZlLnJlbW92ZUNsYXNzKFdlKS5hZGRDbGFzcyhHZSksZS5hZGRDbGFzcygkZSksdGhpcy5fb3B0aW9ucy5lbmFibGVSZW1lbWJlciYmbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJyZW1lbWJlclwiK09lLCRlKSxuLmRlZmF1bHQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJjb2xsYXBzZWQubHRlLnB1c2htZW51XCIpKX0sdC50b2dnbGU9ZnVuY3Rpb24oKXtuLmRlZmF1bHQoQmUpLmhhc0NsYXNzKCRlKT90aGlzLmV4cGFuZCgpOnRoaXMuY29sbGFwc2UoKX0sdC5hdXRvQ29sbGFwc2U9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSYmKGU9ITEpLHRoaXMuX29wdGlvbnMuYXV0b0NvbGxhcHNlU2l6ZSl7dmFyIHQ9bi5kZWZhdWx0KEJlKTtuLmRlZmF1bHQod2luZG93KS53aWR0aCgpPD10aGlzLl9vcHRpb25zLmF1dG9Db2xsYXBzZVNpemU/dC5oYXNDbGFzcyhXZSl8fHRoaXMuY29sbGFwc2UoKTohMD09PWUmJih0Lmhhc0NsYXNzKFdlKT90LnJlbW92ZUNsYXNzKFdlKTp0Lmhhc0NsYXNzKEdlKSYmdGhpcy5leHBhbmQoKSl9fSx0LnJlbWVtYmVyPWZ1bmN0aW9uKCl7aWYodGhpcy5fb3B0aW9ucy5lbmFibGVSZW1lbWJlcil7dmFyIGU9bi5kZWZhdWx0KFwiYm9keVwiKTtsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInJlbWVtYmVyXCIrT2UpPT09JGU/dGhpcy5fb3B0aW9ucy5ub1RyYW5zaXRpb25BZnRlclJlbG9hZD9lLmFkZENsYXNzKFwiaG9sZC10cmFuc2l0aW9uXCIpLmFkZENsYXNzKCRlKS5kZWxheSg1MCkucXVldWUoKGZ1bmN0aW9uKCl7bi5kZWZhdWx0KHRoaXMpLnJlbW92ZUNsYXNzKFwiaG9sZC10cmFuc2l0aW9uXCIpLG4uZGVmYXVsdCh0aGlzKS5kZXF1ZXVlKCl9KSk6ZS5hZGRDbGFzcygkZSk6dGhpcy5fb3B0aW9ucy5ub1RyYW5zaXRpb25BZnRlclJlbG9hZD9lLmFkZENsYXNzKFwiaG9sZC10cmFuc2l0aW9uXCIpLnJlbW92ZUNsYXNzKCRlKS5kZWxheSg1MCkucXVldWUoKGZ1bmN0aW9uKCl7bi5kZWZhdWx0KHRoaXMpLnJlbW92ZUNsYXNzKFwiaG9sZC10cmFuc2l0aW9uXCIpLG4uZGVmYXVsdCh0aGlzKS5kZXF1ZXVlKCl9KSk6ZS5yZW1vdmVDbGFzcygkZSl9fSx0Ll9pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLnJlbWVtYmVyKCksdGhpcy5hdXRvQ29sbGFwc2UoKSxuLmRlZmF1bHQod2luZG93KS5yZXNpemUoKGZ1bmN0aW9uKCl7ZS5hdXRvQ29sbGFwc2UoITApfSkpfSx0Ll9hZGRPdmVybGF5PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PW4uZGVmYXVsdChcIjxkaXYgLz5cIix7aWQ6XCJzaWRlYmFyLW92ZXJsYXlcIn0pO3Qub24oXCJjbGlja1wiLChmdW5jdGlvbigpe2UuY29sbGFwc2UoKX0pKSxuLmRlZmF1bHQoXCIud3JhcHBlclwiKS5hcHBlbmQodCl9LGUuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKE5lKSxpPW4uZGVmYXVsdC5leHRlbmQoe30sSmUsbi5kZWZhdWx0KHRoaXMpLmRhdGEoKSk7YXx8KGE9bmV3IGUodGhpcyxpKSxuLmRlZmF1bHQodGhpcykuZGF0YShOZSxhKSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJi9jb2xsYXBzZXxleHBhbmR8dG9nZ2xlLy50ZXN0KHQpJiZhW3RdKCl9KSl9LGV9KCk7bi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsVWUsKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKTt2YXIgdD1lLmN1cnJlbnRUYXJnZXQ7XCJwdXNobWVudVwiIT09bi5kZWZhdWx0KHQpLmRhdGEoXCJ3aWRnZXRcIikmJih0PW4uZGVmYXVsdCh0KS5jbG9zZXN0KFVlKSksS2UuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdCh0KSxcInRvZ2dsZVwiKX0pKSxuLmRlZmF1bHQod2luZG93KS5vbihcImxvYWRcIiwoZnVuY3Rpb24oKXtLZS5falF1ZXJ5SW50ZXJmYWNlLmNhbGwobi5kZWZhdWx0KFVlKSl9KSksbi5kZWZhdWx0LmZuW3FlXT1LZS5falF1ZXJ5SW50ZXJmYWNlLG4uZGVmYXVsdC5mbltxZV0uQ29uc3RydWN0b3I9S2Usbi5kZWZhdWx0LmZuW3FlXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdC5mbltxZV09UGUsS2UuX2pRdWVyeUludGVyZmFjZX07dmFyIFhlPVwiU2lkZWJhclNlYXJjaFwiLFllPVwibHRlLnNpZGViYXItc2VhcmNoXCIsWmU9bi5kZWZhdWx0LmZuW1hlXSxldD1cInNpZGViYXItc2VhcmNoLW9wZW5cIix0dD1cImZhLXNlYXJjaFwiLGF0PVwiZmEtdGltZXNcIixudD1cInNpZGViYXItc2VhcmNoLXJlc3VsdHNcIixpdD1cImxpc3QtZ3JvdXBcIixvdD0nW2RhdGEtd2lkZ2V0PVwic2lkZWJhci1zZWFyY2hcIl0nLHN0PW90K1wiIC5mb3JtLWNvbnRyb2xcIixsdD1vdCtcIiAuYnRuXCIscnQ9bHQrXCIgaVwiLGR0PVwiLnNpZGViYXItc2VhcmNoLXJlc3VsdHNcIixmdD1cIi5zaWRlYmFyLXNlYXJjaC1yZXN1bHRzIC5saXN0LWdyb3VwXCIsdXQ9e2Fycm93U2lnbjpcIi0+XCIsbWluTGVuZ3RoOjMsbWF4UmVzdWx0czo3LGhpZ2hsaWdodE5hbWU6ITAsaGlnaGxpZ2h0UGF0aDohMSxoaWdobGlnaHRDbGFzczpcInRleHQtbGlnaHRcIixub3RGb3VuZFRleHQ6XCJObyBlbGVtZW50IGZvdW5kIVwifSxjdD1bXSxodD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm9wdGlvbnM9bi5kZWZhdWx0LmV4dGVuZCh7fSx1dCx0KSx0aGlzLml0ZW1zPVtdfXZhciBhPWUucHJvdG90eXBlO3JldHVybiBhLmluaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzOzAhPT1uLmRlZmF1bHQob3QpLmxlbmd0aCYmKDA9PT1uLmRlZmF1bHQob3QpLm5leHQoZHQpLmxlbmd0aCYmbi5kZWZhdWx0KG90KS5hZnRlcihuLmRlZmF1bHQoXCI8ZGl2IC8+XCIse2NsYXNzOm50fSkpLDA9PT1uLmRlZmF1bHQoZHQpLmNoaWxkcmVuKFwiLmxpc3QtZ3JvdXBcIikubGVuZ3RoJiZuLmRlZmF1bHQoZHQpLmFwcGVuZChuLmRlZmF1bHQoXCI8ZGl2IC8+XCIse2NsYXNzOml0fSkpLHRoaXMuX2FkZE5vdEZvdW5kKCksbi5kZWZhdWx0KFwiLm1haW4tc2lkZWJhciAubmF2LXNpZGViYXJcIikuY2hpbGRyZW4oKS5lYWNoKChmdW5jdGlvbih0LGEpe2UuX3BhcnNlSXRlbShhKX0pKSl9LGEuc2VhcmNoPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PW4uZGVmYXVsdChzdCkudmFsKCkudG9Mb3dlckNhc2UoKTtpZih0Lmxlbmd0aDx0aGlzLm9wdGlvbnMubWluTGVuZ3RoKXJldHVybiBuLmRlZmF1bHQoZnQpLmVtcHR5KCksdGhpcy5fYWRkTm90Rm91bmQoKSx2b2lkIHRoaXMuY2xvc2UoKTt2YXIgYT1jdC5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0KX0pKSxpPW4uZGVmYXVsdChhLnNsaWNlKDAsdGhpcy5vcHRpb25zLm1heFJlc3VsdHMpKTtuLmRlZmF1bHQoZnQpLmVtcHR5KCksMD09PWkubGVuZ3RoP3RoaXMuX2FkZE5vdEZvdW5kKCk6aS5lYWNoKChmdW5jdGlvbih0LGEpe24uZGVmYXVsdChmdCkuYXBwZW5kKGUuX3JlbmRlckl0ZW0oZXNjYXBlKGEubmFtZSksZXNjYXBlKGEubGluayksYS5wYXRoKSl9KSksdGhpcy5vcGVuKCl9LGEub3Blbj1mdW5jdGlvbigpe24uZGVmYXVsdChvdCkucGFyZW50KCkuYWRkQ2xhc3MoZXQpLG4uZGVmYXVsdChydCkucmVtb3ZlQ2xhc3ModHQpLmFkZENsYXNzKGF0KX0sYS5jbG9zZT1mdW5jdGlvbigpe24uZGVmYXVsdChvdCkucGFyZW50KCkucmVtb3ZlQ2xhc3MoZXQpLG4uZGVmYXVsdChydCkucmVtb3ZlQ2xhc3MoYXQpLmFkZENsYXNzKHR0KX0sYS50b2dnbGU9ZnVuY3Rpb24oKXtuLmRlZmF1bHQob3QpLnBhcmVudCgpLmhhc0NsYXNzKGV0KT90aGlzLmNsb3NlKCk6dGhpcy5vcGVuKCl9LGEuX3BhcnNlSXRlbT1mdW5jdGlvbihlLHQpe3ZhciBhPXRoaXM7aWYodm9pZCAwPT09dCYmKHQ9W10pLCFuLmRlZmF1bHQoZSkuaGFzQ2xhc3MoXCJuYXYtaGVhZGVyXCIpKXt2YXIgaT17fSxvPW4uZGVmYXVsdChlKS5jbG9uZSgpLmZpbmQoXCI+IC5uYXYtbGlua1wiKSxzPW4uZGVmYXVsdChlKS5jbG9uZSgpLmZpbmQoXCI+IC5uYXYtdHJlZXZpZXdcIiksbD1vLmF0dHIoXCJocmVmXCIpLHI9by5maW5kKFwicFwiKS5jaGlsZHJlbigpLnJlbW92ZSgpLmVuZCgpLnRleHQoKTtpZihpLm5hbWU9dGhpcy5fdHJpbVRleHQociksaS5saW5rPWwsaS5wYXRoPXQsMD09PXMubGVuZ3RoKWN0LnB1c2goaSk7ZWxzZXt2YXIgZD1pLnBhdGguY29uY2F0KFtpLm5hbWVdKTtzLmNoaWxkcmVuKCkuZWFjaCgoZnVuY3Rpb24oZSx0KXthLl9wYXJzZUl0ZW0odCxkKX0pKX19fSxhLl90cmltVGV4dD1mdW5jdGlvbihlKXtyZXR1cm4gdC50cmltKGUucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSxcIiBcIikpfSxhLl9yZW5kZXJJdGVtPWZ1bmN0aW9uKGUsdCxhKXt2YXIgaT10aGlzO2lmKGE9YS5qb2luKFwiIFwiK3RoaXMub3B0aW9ucy5hcnJvd1NpZ24rXCIgXCIpLGU9dW5lc2NhcGUoZSksdGhpcy5vcHRpb25zLmhpZ2hsaWdodE5hbWV8fHRoaXMub3B0aW9ucy5oaWdobGlnaHRQYXRoKXt2YXIgbz1uLmRlZmF1bHQoc3QpLnZhbCgpLnRvTG93ZXJDYXNlKCkscz1uZXcgUmVnRXhwKG8sXCJnaVwiKTt0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0TmFtZSYmKGU9ZS5yZXBsYWNlKHMsKGZ1bmN0aW9uKGUpe3JldHVybic8c3Ryb25nIGNsYXNzPVwiJytpLm9wdGlvbnMuaGlnaGxpZ2h0Q2xhc3MrJ1wiPicrZStcIjwvc3Ryb25nPlwifSkpKSx0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0UGF0aCYmKGE9YS5yZXBsYWNlKHMsKGZ1bmN0aW9uKGUpe3JldHVybic8c3Ryb25nIGNsYXNzPVwiJytpLm9wdGlvbnMuaGlnaGxpZ2h0Q2xhc3MrJ1wiPicrZStcIjwvc3Ryb25nPlwifSkpKX12YXIgbD1uLmRlZmF1bHQoXCI8YS8+XCIse2hyZWY6dCxjbGFzczpcImxpc3QtZ3JvdXAtaXRlbVwifSkscj1uLmRlZmF1bHQoXCI8ZGl2Lz5cIix7Y2xhc3M6XCJzZWFyY2gtdGl0bGVcIn0pLmh0bWwoZSksZD1uLmRlZmF1bHQoXCI8ZGl2Lz5cIix7Y2xhc3M6XCJzZWFyY2gtcGF0aFwifSkuaHRtbChhKTtyZXR1cm4gbC5hcHBlbmQocikuYXBwZW5kKGQpLGx9LGEuX2FkZE5vdEZvdW5kPWZ1bmN0aW9uKCl7bi5kZWZhdWx0KGZ0KS5hcHBlbmQodGhpcy5fcmVuZGVySXRlbSh0aGlzLm9wdGlvbnMubm90Rm91bmRUZXh0LFwiI1wiLFtdKSl9LGUuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbih0KXt2YXIgYT1uLmRlZmF1bHQodGhpcykuZGF0YShZZSk7YXx8KGE9bi5kZWZhdWx0KHRoaXMpLmRhdGEoKSk7dmFyIGk9bi5kZWZhdWx0LmV4dGVuZCh7fSx1dCxcIm9iamVjdFwiPT10eXBlb2YgdD90OmEpLG89bmV3IGUobi5kZWZhdWx0KHRoaXMpLGkpO24uZGVmYXVsdCh0aGlzKS5kYXRhKFllLFwib2JqZWN0XCI9PXR5cGVvZiB0P3Q6YSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJi9pbml0fHRvZ2dsZXxjbG9zZXxvcGVufHNlYXJjaC8udGVzdCh0KT9vW3RdKCk6by5pbml0KCl9LGV9KCk7bi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsbHQsKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxodC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwobi5kZWZhdWx0KG90KSxcInRvZ2dsZVwiKX0pKSxuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwia2V5dXBcIixzdCwoZnVuY3Rpb24oZSl7cmV0dXJuIDM4PT1lLmtleUNvZGU/KGUucHJldmVudERlZmF1bHQoKSx2b2lkIG4uZGVmYXVsdChmdCkuY2hpbGRyZW4oKS5sYXN0KCkuZm9jdXMoKSk6NDA9PWUua2V5Q29kZT8oZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgbi5kZWZhdWx0KGZ0KS5jaGlsZHJlbigpLmZpcnN0KCkuZm9jdXMoKSk6dm9pZCBzZXRUaW1lb3V0KChmdW5jdGlvbigpe2h0Ll9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQob3QpLFwic2VhcmNoXCIpfSksMTAwKX0pKSxuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwia2V5ZG93blwiLGZ0LChmdW5jdGlvbihlKXt2YXIgdD1uLmRlZmF1bHQoXCI6Zm9jdXNcIik7Mzg9PWUua2V5Q29kZSYmKGUucHJldmVudERlZmF1bHQoKSx0LmlzKFwiOmZpcnN0LWNoaWxkXCIpP3Quc2libGluZ3MoKS5sYXN0KCkuZm9jdXMoKTp0LnByZXYoKS5mb2N1cygpKSw0MD09ZS5rZXlDb2RlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHQuaXMoXCI6bGFzdC1jaGlsZFwiKT90LnNpYmxpbmdzKCkuZmlyc3QoKS5mb2N1cygpOnQubmV4dCgpLmZvY3VzKCkpfSkpLG4uZGVmYXVsdCh3aW5kb3cpLm9uKFwibG9hZFwiLChmdW5jdGlvbigpe2h0Ll9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQob3QpLFwiaW5pdFwiKX0pKSxuLmRlZmF1bHQuZm5bWGVdPWh0Ll9qUXVlcnlJbnRlcmZhY2Usbi5kZWZhdWx0LmZuW1hlXS5Db25zdHJ1Y3Rvcj1odCxuLmRlZmF1bHQuZm5bWGVdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0LmZuW1hlXT1aZSxodC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgZ3Q9XCJOYXZiYXJTZWFyY2hcIixwdD1cImx0ZS5uYXZiYXItc2VhcmNoXCIsbXQ9bi5kZWZhdWx0LmZuW2d0XSx2dD0nW2RhdGEtd2lkZ2V0PVwibmF2YmFyLXNlYXJjaFwiXScsX3Q9XCIuZm9ybS1jb250cm9sXCIsYnQ9XCJuYXZiYXItc2VhcmNoLW9wZW5cIix5dD17cmVzZXRPbkNsb3NlOiEwLHRhcmdldDpcIi5uYXZiYXItc2VhcmNoLWJsb2NrXCJ9LEN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9jb25maWc9bi5kZWZhdWx0LmV4dGVuZCh7fSx5dCx0KX12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5vcGVuPWZ1bmN0aW9uKCl7bi5kZWZhdWx0KHRoaXMuX2NvbmZpZy50YXJnZXQpLmNzcyhcImRpc3BsYXlcIixcImZsZXhcIikuaGlkZSgpLmZhZGVJbigpLmFkZENsYXNzKGJ0KSxuLmRlZmF1bHQodGhpcy5fY29uZmlnLnRhcmdldCtcIiBcIitfdCkuZm9jdXMoKX0sdC5jbG9zZT1mdW5jdGlvbigpe24uZGVmYXVsdCh0aGlzLl9jb25maWcudGFyZ2V0KS5mYWRlT3V0KCkucmVtb3ZlQ2xhc3MoYnQpLHRoaXMuX2NvbmZpZy5yZXNldE9uQ2xvc2UmJm4uZGVmYXVsdCh0aGlzLl9jb25maWcudGFyZ2V0K1wiIFwiK190KS52YWwoXCJcIil9LHQudG9nZ2xlPWZ1bmN0aW9uKCl7bi5kZWZhdWx0KHRoaXMuX2NvbmZpZy50YXJnZXQpLmhhc0NsYXNzKGJ0KT90aGlzLmNsb3NlKCk6dGhpcy5vcGVuKCl9LGUuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKHB0KSxpPW4uZGVmYXVsdC5leHRlbmQoe30seXQsbi5kZWZhdWx0KHRoaXMpLmRhdGEoKSk7aWYoYXx8KGE9bmV3IGUodGhpcyxpKSxuLmRlZmF1bHQodGhpcykuZGF0YShwdCxhKSksIS90b2dnbGV8Y2xvc2V8b3Blbi8udGVzdCh0KSl0aHJvdyBuZXcgRXJyb3IoXCJVbmRlZmluZWQgbWV0aG9kIFwiK3QpO2FbdF0oKX0pKX0sZX0oKTtuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIix2dCwoZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO3ZhciB0PW4uZGVmYXVsdChlLmN1cnJlbnRUYXJnZXQpO1wibmF2YmFyLXNlYXJjaFwiIT09dC5kYXRhKFwid2lkZ2V0XCIpJiYodD10LmNsb3Nlc3QodnQpKSxDdC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwodCxcInRvZ2dsZVwiKX0pKSxuLmRlZmF1bHQuZm5bZ3RdPUN0Ll9qUXVlcnlJbnRlcmZhY2Usbi5kZWZhdWx0LmZuW2d0XS5Db25zdHJ1Y3Rvcj1DdCxuLmRlZmF1bHQuZm5bZ3RdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0LmZuW2d0XT1tdCxDdC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgd3Q9bi5kZWZhdWx0LmZuLlRvYXN0cyx4dD1cInRvcFJpZ2h0XCIsSXQ9XCJ0b3BMZWZ0XCIsVHQ9XCJib3R0b21SaWdodFwiLGp0PVwiYm90dG9tTGVmdFwiLFN0PXtwb3NpdGlvbjp4dCxmaXhlZDohMCxhdXRvaGlkZTohMSxhdXRvcmVtb3ZlOiEwLGRlbGF5OjFlMyxmYWRlOiEwLGljb246bnVsbCxpbWFnZTpudWxsLGltYWdlQWx0Om51bGwsaW1hZ2VIZWlnaHQ6XCIyNXB4XCIsdGl0bGU6bnVsbCxzdWJ0aXRsZTpudWxsLGNsb3NlOiEwLGJvZHk6bnVsbCxjbGFzczpudWxsfSxrdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLl9jb25maWc9dCx0aGlzLl9wcmVwYXJlQ29udGFpbmVyKCksbi5kZWZhdWx0KFwiYm9keVwiKS50cmlnZ2VyKG4uZGVmYXVsdC5FdmVudChcImluaXQubHRlLnRvYXN0c1wiKSl9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIGU9bi5kZWZhdWx0KCc8ZGl2IGNsYXNzPVwidG9hc3RcIiByb2xlPVwiYWxlcnRcIiBhcmlhLWxpdmU9XCJhc3NlcnRpdmVcIiBhcmlhLWF0b21pYz1cInRydWVcIi8+Jyk7ZS5kYXRhKFwiYXV0b2hpZGVcIix0aGlzLl9jb25maWcuYXV0b2hpZGUpLGUuZGF0YShcImFuaW1hdGlvblwiLHRoaXMuX2NvbmZpZy5mYWRlKSx0aGlzLl9jb25maWcuY2xhc3MmJmUuYWRkQ2xhc3ModGhpcy5fY29uZmlnLmNsYXNzKSx0aGlzLl9jb25maWcuZGVsYXkmJjUwMCE9dGhpcy5fY29uZmlnLmRlbGF5JiZlLmRhdGEoXCJkZWxheVwiLHRoaXMuX2NvbmZpZy5kZWxheSk7dmFyIHQ9bi5kZWZhdWx0KCc8ZGl2IGNsYXNzPVwidG9hc3QtaGVhZGVyXCI+Jyk7aWYobnVsbCE9dGhpcy5fY29uZmlnLmltYWdlKXt2YXIgYT1uLmRlZmF1bHQoXCI8aW1nIC8+XCIpLmFkZENsYXNzKFwicm91bmRlZCBtci0yXCIpLmF0dHIoXCJzcmNcIix0aGlzLl9jb25maWcuaW1hZ2UpLmF0dHIoXCJhbHRcIix0aGlzLl9jb25maWcuaW1hZ2VBbHQpO251bGwhPXRoaXMuX2NvbmZpZy5pbWFnZUhlaWdodCYmYS5oZWlnaHQodGhpcy5fY29uZmlnLmltYWdlSGVpZ2h0KS53aWR0aChcImF1dG9cIiksdC5hcHBlbmQoYSl9aWYobnVsbCE9dGhpcy5fY29uZmlnLmljb24mJnQuYXBwZW5kKG4uZGVmYXVsdChcIjxpIC8+XCIpLmFkZENsYXNzKFwibXItMlwiKS5hZGRDbGFzcyh0aGlzLl9jb25maWcuaWNvbikpLG51bGwhPXRoaXMuX2NvbmZpZy50aXRsZSYmdC5hcHBlbmQobi5kZWZhdWx0KFwiPHN0cm9uZyAvPlwiKS5hZGRDbGFzcyhcIm1yLWF1dG9cIikuaHRtbCh0aGlzLl9jb25maWcudGl0bGUpKSxudWxsIT10aGlzLl9jb25maWcuc3VidGl0bGUmJnQuYXBwZW5kKG4uZGVmYXVsdChcIjxzbWFsbCAvPlwiKS5odG1sKHRoaXMuX2NvbmZpZy5zdWJ0aXRsZSkpLDE9PXRoaXMuX2NvbmZpZy5jbG9zZSl7dmFyIGk9bi5kZWZhdWx0KCc8YnV0dG9uIGRhdGEtZGlzbWlzcz1cInRvYXN0XCIgLz4nKS5hdHRyKFwidHlwZVwiLFwiYnV0dG9uXCIpLmFkZENsYXNzKFwibWwtMiBtYi0xIGNsb3NlXCIpLmF0dHIoXCJhcmlhLWxhYmVsXCIsXCJDbG9zZVwiKS5hcHBlbmQoJzxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+Jyk7bnVsbD09dGhpcy5fY29uZmlnLnRpdGxlJiZpLnRvZ2dsZUNsYXNzKFwibWwtMiBtbC1hdXRvXCIpLHQuYXBwZW5kKGkpfWUuYXBwZW5kKHQpLG51bGwhPXRoaXMuX2NvbmZpZy5ib2R5JiZlLmFwcGVuZChuLmRlZmF1bHQoJzxkaXYgY2xhc3M9XCJ0b2FzdC1ib2R5XCIgLz4nKS5odG1sKHRoaXMuX2NvbmZpZy5ib2R5KSksbi5kZWZhdWx0KHRoaXMuX2dldENvbnRhaW5lcklkKCkpLnByZXBlbmQoZSk7dmFyIG89bi5kZWZhdWx0KFwiYm9keVwiKTtvLnRyaWdnZXIobi5kZWZhdWx0LkV2ZW50KFwiY3JlYXRlZC5sdGUudG9hc3RzXCIpKSxlLnRvYXN0KFwic2hvd1wiKSx0aGlzLl9jb25maWcuYXV0b3JlbW92ZSYmZS5vbihcImhpZGRlbi5icy50b2FzdFwiLChmdW5jdGlvbigpe24uZGVmYXVsdCh0aGlzKS5kZWxheSgyMDApLnJlbW92ZSgpLG8udHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJyZW1vdmVkLmx0ZS50b2FzdHNcIikpfSkpfSx0Ll9nZXRDb250YWluZXJJZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb25maWcucG9zaXRpb249PXh0P1wiI3RvYXN0c0NvbnRhaW5lclRvcFJpZ2h0XCI6dGhpcy5fY29uZmlnLnBvc2l0aW9uPT1JdD9cIiN0b2FzdHNDb250YWluZXJUb3BMZWZ0XCI6dGhpcy5fY29uZmlnLnBvc2l0aW9uPT1UdD9cIiN0b2FzdHNDb250YWluZXJCb3R0b21SaWdodFwiOnRoaXMuX2NvbmZpZy5wb3NpdGlvbj09anQ/XCIjdG9hc3RzQ29udGFpbmVyQm90dG9tTGVmdFwiOnZvaWQgMH0sdC5fcHJlcGFyZUNvbnRhaW5lcj1mdW5jdGlvbigpe2lmKDA9PT1uLmRlZmF1bHQodGhpcy5fZ2V0Q29udGFpbmVySWQoKSkubGVuZ3RoKXt2YXIgZT1uLmRlZmF1bHQoXCI8ZGl2IC8+XCIpLmF0dHIoXCJpZFwiLHRoaXMuX2dldENvbnRhaW5lcklkKCkucmVwbGFjZShcIiNcIixcIlwiKSk7dGhpcy5fY29uZmlnLnBvc2l0aW9uPT14dD9lLmFkZENsYXNzKFwidG9hc3RzLXRvcC1yaWdodFwiKTp0aGlzLl9jb25maWcucG9zaXRpb249PUl0P2UuYWRkQ2xhc3MoXCJ0b2FzdHMtdG9wLWxlZnRcIik6dGhpcy5fY29uZmlnLnBvc2l0aW9uPT1UdD9lLmFkZENsYXNzKFwidG9hc3RzLWJvdHRvbS1yaWdodFwiKTp0aGlzLl9jb25maWcucG9zaXRpb249PWp0JiZlLmFkZENsYXNzKFwidG9hc3RzLWJvdHRvbS1sZWZ0XCIpLG4uZGVmYXVsdChcImJvZHlcIikuYXBwZW5kKGUpfXRoaXMuX2NvbmZpZy5maXhlZD9uLmRlZmF1bHQodGhpcy5fZ2V0Q29udGFpbmVySWQoKSkuYWRkQ2xhc3MoXCJmaXhlZFwiKTpuLmRlZmF1bHQodGhpcy5fZ2V0Q29udGFpbmVySWQoKSkucmVtb3ZlQ2xhc3MoXCJmaXhlZFwiKX0sZS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKHQsYSl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgaT1uLmRlZmF1bHQuZXh0ZW5kKHt9LFN0LGEpLG89bmV3IGUobi5kZWZhdWx0KHRoaXMpLGkpO1wiY3JlYXRlXCI9PT10JiZvW3RdKCl9KSl9LGV9KCk7bi5kZWZhdWx0LmZuLlRvYXN0cz1rdC5falF1ZXJ5SW50ZXJmYWNlLG4uZGVmYXVsdC5mbi5Ub2FzdHMuQ29uc3RydWN0b3I9a3Qsbi5kZWZhdWx0LmZuLlRvYXN0cy5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdC5mbi5Ub2FzdHM9d3Qsa3QuX2pRdWVyeUludGVyZmFjZX07dmFyIFF0PVwiVG9kb0xpc3RcIixIdD1cImx0ZS50b2RvbGlzdFwiLHp0PW4uZGVmYXVsdC5mbltRdF0sRnQ9XCJkb25lXCIsRXQ9e29uQ2hlY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG9uVW5DaGVjazpmdW5jdGlvbihlKXtyZXR1cm4gZX19LER0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2NvbmZpZz10LHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9pbml0KCl9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQudG9nZ2xlPWZ1bmN0aW9uKGUpe2UucGFyZW50cyhcImxpXCIpLnRvZ2dsZUNsYXNzKEZ0KSxuLmRlZmF1bHQoZSkucHJvcChcImNoZWNrZWRcIik/dGhpcy5jaGVjayhlKTp0aGlzLnVuQ2hlY2sobi5kZWZhdWx0KGUpKX0sdC5jaGVjaz1mdW5jdGlvbihlKXt0aGlzLl9jb25maWcub25DaGVjay5jYWxsKGUpfSx0LnVuQ2hlY2s9ZnVuY3Rpb24oZSl7dGhpcy5fY29uZmlnLm9uVW5DaGVjay5jYWxsKGUpfSx0Ll9pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMuX2VsZW1lbnQ7dC5maW5kKFwiaW5wdXQ6Y2hlY2tib3g6Y2hlY2tlZFwiKS5wYXJlbnRzKFwibGlcIikudG9nZ2xlQ2xhc3MoRnQpLHQub24oXCJjaGFuZ2VcIixcImlucHV0OmNoZWNrYm94XCIsKGZ1bmN0aW9uKHQpe2UudG9nZ2xlKG4uZGVmYXVsdCh0LnRhcmdldCkpfSkpfSxlLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgYT1uLmRlZmF1bHQodGhpcykuZGF0YShIdCk7YXx8KGE9bi5kZWZhdWx0KHRoaXMpLmRhdGEoKSk7dmFyIGk9bi5kZWZhdWx0LmV4dGVuZCh7fSxFdCxcIm9iamVjdFwiPT10eXBlb2YgdD90OmEpLG89bmV3IGUobi5kZWZhdWx0KHRoaXMpLGkpO24uZGVmYXVsdCh0aGlzKS5kYXRhKEh0LFwib2JqZWN0XCI9PXR5cGVvZiB0P3Q6YSksXCJpbml0XCI9PT10JiZvW3RdKCl9KSl9LGV9KCk7bi5kZWZhdWx0KHdpbmRvdykub24oXCJsb2FkXCIsKGZ1bmN0aW9uKCl7RHQuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdCgnW2RhdGEtd2lkZ2V0PVwidG9kby1saXN0XCJdJykpfSkpLG4uZGVmYXVsdC5mbltRdF09RHQuX2pRdWVyeUludGVyZmFjZSxuLmRlZmF1bHQuZm5bUXRdLkNvbnN0cnVjdG9yPUR0LG4uZGVmYXVsdC5mbltRdF0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHQuZm5bUXRdPXp0LER0Ll9qUXVlcnlJbnRlcmZhY2V9O3ZhciBMdD1cIlRyZWV2aWV3XCIsQXQ9XCJsdGUudHJlZXZpZXdcIixSdD1uLmRlZmF1bHQuZm5bTHRdLE10PVwiLm5hdi1pdGVtXCIscXQ9XCIubmF2LXRyZWV2aWV3XCIsTnQ9XCIubWVudS1vcGVuXCIsT3Q9J1tkYXRhLXdpZGdldD1cInRyZWV2aWV3XCJdJyxQdD1cIm1lbnUtb3BlblwiLFV0PVwibWVudS1pcy1vcGVuaW5nXCIsQnQ9e3RyaWdnZXI6T3QrXCIgLm5hdi1saW5rXCIsYW5pbWF0aW9uU3BlZWQ6MzAwLGFjY29yZGlvbjohMCxleHBhbmRTaWRlYmFyOiExLHNpZGViYXJCdXR0b25TZWxlY3RvcjonW2RhdGEtd2lkZ2V0PVwicHVzaG1lbnVcIl0nfSwkdD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLl9jb25maWc9dCx0aGlzLl9lbGVtZW50PWV9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuaW5pdD1mdW5jdGlvbigpe24uZGVmYXVsdChcIi5uYXYtaXRlbS5tZW51LW9wZW4gLm5hdi10cmVldmlldy5tZW51LW9wZW5cIikuY3NzKFwiZGlzcGxheVwiLFwiYmxvY2tcIiksdGhpcy5fc2V0dXBMaXN0ZW5lcnMoKX0sdC5leHBhbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgYT10aGlzLGk9bi5kZWZhdWx0LkV2ZW50KFwiZXhwYW5kZWQubHRlLnRyZWV2aWV3XCIpO2lmKHRoaXMuX2NvbmZpZy5hY2NvcmRpb24pe3ZhciBvPXQuc2libGluZ3MoTnQpLmZpcnN0KCkscz1vLmZpbmQocXQpLmZpcnN0KCk7dGhpcy5jb2xsYXBzZShzLG8pfXQuYWRkQ2xhc3MoVXQpLGUuc3RvcCgpLnNsaWRlRG93bih0aGlzLl9jb25maWcuYW5pbWF0aW9uU3BlZWQsKGZ1bmN0aW9uKCl7dC5hZGRDbGFzcyhQdCksbi5kZWZhdWx0KGEuX2VsZW1lbnQpLnRyaWdnZXIoaSl9KSksdGhpcy5fY29uZmlnLmV4cGFuZFNpZGViYXImJnRoaXMuX2V4cGFuZFNpZGViYXIoKX0sdC5jb2xsYXBzZT1mdW5jdGlvbihlLHQpe3ZhciBhPXRoaXMsaT1uLmRlZmF1bHQuRXZlbnQoXCJjb2xsYXBzZWQubHRlLnRyZWV2aWV3XCIpO3QucmVtb3ZlQ2xhc3MoXCJtZW51LWlzLW9wZW5pbmcgbWVudS1vcGVuXCIpLGUuc3RvcCgpLnNsaWRlVXAodGhpcy5fY29uZmlnLmFuaW1hdGlvblNwZWVkLChmdW5jdGlvbigpe24uZGVmYXVsdChhLl9lbGVtZW50KS50cmlnZ2VyKGkpLGUuZmluZChcIi5tZW51LW9wZW4gPiAubmF2LXRyZWV2aWV3XCIpLnNsaWRlVXAoKSxlLmZpbmQoTnQpLnJlbW92ZUNsYXNzKFB0KX0pKX0sdC50b2dnbGU9ZnVuY3Rpb24oZSl7dmFyIHQ9bi5kZWZhdWx0KGUuY3VycmVudFRhcmdldCksYT10LnBhcmVudCgpLGk9YS5maW5kKFwiPiAubmF2LXRyZWV2aWV3XCIpO2lmKGkuaXMocXQpfHwoYS5pcyhNdCl8fChpPWEucGFyZW50KCkuZmluZChcIj4gLm5hdi10cmVldmlld1wiKSksaS5pcyhxdCkpKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIG89dC5wYXJlbnRzKE10KS5maXJzdCgpO28uaGFzQ2xhc3MoUHQpP3RoaXMuY29sbGFwc2Uobi5kZWZhdWx0KGkpLG8pOnRoaXMuZXhwYW5kKG4uZGVmYXVsdChpKSxvKX19LHQuX3NldHVwTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXZvaWQgMCE9PXRoaXMuX2VsZW1lbnQuYXR0cihcImlkXCIpP1wiI1wiK3RoaXMuX2VsZW1lbnQuYXR0cihcImlkXCIpOlwiXCI7bi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsXCJcIit0K3RoaXMuX2NvbmZpZy50cmlnZ2VyLChmdW5jdGlvbih0KXtlLnRvZ2dsZSh0KX0pKX0sdC5fZXhwYW5kU2lkZWJhcj1mdW5jdGlvbigpe24uZGVmYXVsdChcImJvZHlcIikuaGFzQ2xhc3MoXCJzaWRlYmFyLWNvbGxhcHNlXCIpJiZuLmRlZmF1bHQodGhpcy5fY29uZmlnLnNpZGViYXJCdXR0b25TZWxlY3RvcikuUHVzaE1lbnUoXCJleHBhbmRcIil9LGUuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKEF0KSxpPW4uZGVmYXVsdC5leHRlbmQoe30sQnQsbi5kZWZhdWx0KHRoaXMpLmRhdGEoKSk7YXx8KGE9bmV3IGUobi5kZWZhdWx0KHRoaXMpLGkpLG4uZGVmYXVsdCh0aGlzKS5kYXRhKEF0LGEpKSxcImluaXRcIj09PXQmJmFbdF0oKX0pKX0sZX0oKTtuLmRlZmF1bHQod2luZG93KS5vbihcImxvYWQubHRlLnRyZWV2aWV3XCIsKGZ1bmN0aW9uKCl7bi5kZWZhdWx0KE90KS5lYWNoKChmdW5jdGlvbigpeyR0Ll9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcyksXCJpbml0XCIpfSkpfSkpLG4uZGVmYXVsdC5mbltMdF09JHQuX2pRdWVyeUludGVyZmFjZSxuLmRlZmF1bHQuZm5bTHRdLkNvbnN0cnVjdG9yPSR0LG4uZGVmYXVsdC5mbltMdF0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHQuZm5bTHRdPVJ0LCR0Ll9qUXVlcnlJbnRlcmZhY2V9LGUuQ2FyZFJlZnJlc2g9ZixlLkNhcmRXaWRnZXQ9SSxlLkNvbnRyb2xTaWRlYmFyPU0sZS5EaXJlY3RDaGF0PVAsZS5Ecm9wZG93bj1HLGUuRXhwYW5kYWJsZVRhYmxlPXRlLGUuRnVsbHNjcmVlbj1yZSxlLklGcmFtZT1RZSxlLkxheW91dD1NZSxlLk5hdmJhclNlYXJjaD1DdCxlLlB1c2hNZW51PUtlLGUuU2lkZWJhclNlYXJjaD1odCxlLlRvYXN0cz1rdCxlLlRvZG9MaXN0PUR0LGUuVHJlZXZpZXc9JHQsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hZG1pbmx0ZS5taW4uanMubWFwIiwiIWZ1bmN0aW9uKHMpe3ZhciBpPXt9O2Z1bmN0aW9uIG8odCl7aWYoaVt0XSlyZXR1cm4gaVt0XS5leHBvcnRzO3ZhciBlPWlbdF09e2k6dCxsOiExLGV4cG9ydHM6e319O3JldHVybiBzW3RdLmNhbGwoZS5leHBvcnRzLGUsZS5leHBvcnRzLG8pLGUubD0hMCxlLmV4cG9ydHN9by5tPXMsby5jPWksby5kPWZ1bmN0aW9uKHQsZSxzKXtvLm8odCxlKXx8T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7ZW51bWVyYWJsZTohMCxnZXQ6c30pfSxvLnI9ZnVuY3Rpb24odCl7XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodCxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX0sby50PWZ1bmN0aW9uKGUsdCl7aWYoMSZ0JiYoZT1vKGUpKSw4JnQpcmV0dXJuIGU7aWYoNCZ0JiZcIm9iamVjdFwiPT10eXBlb2YgZSYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciBzPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoby5yKHMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLFwiZGVmYXVsdFwiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KSwyJnQmJlwic3RyaW5nXCIhPXR5cGVvZiBlKWZvcih2YXIgaSBpbiBlKW8uZChzLGksZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19LmJpbmQobnVsbCxpKSk7cmV0dXJuIHN9LG8ubj1mdW5jdGlvbih0KXt2YXIgZT10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gby5kKGUsXCJhXCIsZSksZX0sby5vPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfSxvLnA9XCJcIixvKG8ucz0wKX0oW2Z1bmN0aW9uKHQsZSxzKXtcInVzZSBzdHJpY3RcIjtzLnIoZSkscy5kKGUsXCJBdXRvQ29tcGxldGVcIixmdW5jdGlvbigpe3JldHVybiBkfSk7dmFyIGksbyxuLHI9KGk9ZnVuY3Rpb24odCxlKXtyZXR1cm4oaT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24odCxlKXt0Ll9fcHJvdG9fXz1lfXx8ZnVuY3Rpb24odCxlKXtmb3IodmFyIHMgaW4gZSllLmhhc093blByb3BlcnR5KHMpJiYodFtzXT1lW3NdKX0pKHQsZSl9LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcygpe3RoaXMuY29uc3RydWN0b3I9dH1pKHQsZSksdC5wcm90b3R5cGU9bnVsbD09PWU/T2JqZWN0LmNyZWF0ZShlKToocy5wcm90b3R5cGU9ZS5wcm90b3R5cGUsbmV3IHMpfSksbD0oXy5wcm90b3R5cGUuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24oKXtyZXR1cm57fX0sXy5wcm90b3R5cGUuZ2V0UmVzdWx0cz1mdW5jdGlvbih0LGUscyl7cmV0dXJuIHRoaXMucmVzdWx0c30sXy5wcm90b3R5cGUuc2VhcmNoPWZ1bmN0aW9uKHQsZSl7ZSh0aGlzLmdldFJlc3VsdHMoKSl9LHIocCxvPV8pLHAucHJvdG90eXBlLmdldERlZmF1bHRzPWZ1bmN0aW9uKCl7cmV0dXJue3VybDpcIlwiLG1ldGhvZDpcImdldFwiLHF1ZXJ5S2V5OlwicVwiLGV4dHJhRGF0YTp7fSx0aW1lb3V0OnZvaWQgMCxyZXF1ZXN0VGhyb3R0bGluZzo1MDB9fSxwLnByb3RvdHlwZS5zZWFyY2g9ZnVuY3Rpb24odCxlKXt2YXIgcz10aGlzO251bGwhPXRoaXMuanFYSFImJnRoaXMuanFYSFIuYWJvcnQoKTt2YXIgaT17fTtpW3RoaXMuX3NldHRpbmdzLnF1ZXJ5S2V5XT10LCQuZXh0ZW5kKGksdGhpcy5fc2V0dGluZ3MuZXh0cmFEYXRhKSx0aGlzLnJlcXVlc3RUSUQmJndpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5yZXF1ZXN0VElEKSx0aGlzLnJlcXVlc3RUSUQ9d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtzLmpxWEhSPSQuYWpheChzLl9zZXR0aW5ncy51cmwse21ldGhvZDpzLl9zZXR0aW5ncy5tZXRob2QsZGF0YTppLHRpbWVvdXQ6cy5fc2V0dGluZ3MudGltZW91dH0pLHMuanFYSFIuZG9uZShmdW5jdGlvbih0KXtlKHQpfSkscy5qcVhIUi5mYWlsKGZ1bmN0aW9uKHQpe3ZhciBlO251bGw9PT0oZT1zLl9zZXR0aW5ncyl8fHZvaWQgMD09PWV8fGUuZmFpbCh0KX0pLHMuanFYSFIuYWx3YXlzKGZ1bmN0aW9uKCl7cy5qcVhIUj1udWxsfSl9LHRoaXMuX3NldHRpbmdzLnJlcXVlc3RUaHJvdHRsaW5nKX0scCksYT0oZi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciBzPXRoaXMsdD0kLmV4dGVuZCh7fSx0aGlzLl8kZWwucG9zaXRpb24oKSx7aGVpZ2h0OnRoaXMuXyRlbFswXS5vZmZzZXRIZWlnaHR9KTt0aGlzLl9kZD0kKFwiPHVsIC8+XCIpLHRoaXMuX2RkLmFkZENsYXNzKFwiYm9vdHN0cmFwLWF1dG9jb21wbGV0ZSBkcm9wZG93bi1tZW51XCIpLHRoaXMuX2RkLmluc2VydEFmdGVyKHRoaXMuXyRlbCksdGhpcy5fZGQuY3NzKHt0b3A6dC50b3ArdGhpcy5fJGVsLm91dGVySGVpZ2h0KCksbGVmdDp0LmxlZnQsd2lkdGg6dGhpcy5fJGVsLm91dGVyV2lkdGgoKX0pLHRoaXMuX2RkLm9uKFwiY2xpY2tcIixcImxpXCIsZnVuY3Rpb24odCl7dmFyIGU9JCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJpdGVtXCIpO3MuaXRlbVNlbGVjdGVkTGF1bmNoRXZlbnQoZSl9KSx0aGlzLl9kZC5vbihcImtleXVwXCIsZnVuY3Rpb24odCl7aWYocy5zaG93bil7c3dpdGNoKHQud2hpY2gpe2Nhc2UgMjc6cy5oaWRlKCkscy5fJGVsLmZvY3VzKCl9cmV0dXJuITF9fSksdGhpcy5fZGQub24oXCJtb3VzZWVudGVyXCIsZnVuY3Rpb24odCl7cy5kZE1vdXNlb3Zlcj0hMH0pLHRoaXMuX2RkLm9uKFwibW91c2VsZWF2ZVwiLGZ1bmN0aW9uKHQpe3MuZGRNb3VzZW92ZXI9ITF9KSx0aGlzLl9kZC5vbihcIm1vdXNlZW50ZXJcIixcImxpXCIsZnVuY3Rpb24odCl7cy5oYXZlUmVzdWx0cyYmKCQodC5jdXJyZW50VGFyZ2V0KS5jbG9zZXN0KFwidWxcIikuZmluZChcImxpLmFjdGl2ZVwiKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSwkKHQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoXCJhY3RpdmVcIikscy5tb3VzZW92ZXI9ITApfSksdGhpcy5fZGQub24oXCJtb3VzZWxlYXZlXCIsXCJsaVwiLGZ1bmN0aW9uKHQpe3MubW91c2VvdmVyPSExfSksdGhpcy5pbml0aWFsaXplZD0hMH0sZi5wcm90b3R5cGUuY2hlY2tJbml0aWFsaXplZD1mdW5jdGlvbigpe3RoaXMuaW5pdGlhbGl6ZWR8fHRoaXMuaW5pdCgpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZi5wcm90b3R5cGUsXCJpc01vdXNlT3ZlclwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tb3VzZW92ZXJ9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYucHJvdG90eXBlLFwiaXNEZE1vdXNlT3ZlclwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZE1vdXNlb3Zlcn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZi5wcm90b3R5cGUsXCJoYXZlUmVzdWx0c1wiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMDx0aGlzLml0ZW1zLmxlbmd0aH0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxmLnByb3RvdHlwZS5mb2N1c05leHRJdGVtPWZ1bmN0aW9uKHQpe3ZhciBlLHM7dGhpcy5oYXZlUmVzdWx0cyYmKGU9dGhpcy5fZGQuZmluZChcImxpLmFjdGl2ZVwiKSwwPT09KHM9dD9lLnByZXYoKTplLm5leHQoKSkubGVuZ3RoJiYocz10P3RoaXMuX2RkLmZpbmQoXCJsaVwiKS5sYXN0KCk6dGhpcy5fZGQuZmluZChcImxpXCIpLmZpcnN0KCkpLGUucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIikscy5hZGRDbGFzcyhcImFjdGl2ZVwiKSl9LGYucHJvdG90eXBlLmZvY3VzUHJldmlvdXNJdGVtPWZ1bmN0aW9uKCl7dGhpcy5mb2N1c05leHRJdGVtKCEwKX0sZi5wcm90b3R5cGUuc2VsZWN0Rm9jdXNJdGVtPWZ1bmN0aW9uKCl7dGhpcy5fZGQuZmluZChcImxpLmFjdGl2ZVwiKS50cmlnZ2VyKFwiY2xpY2tcIil9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLnByb3RvdHlwZSxcImlzSXRlbUZvY3VzZWRcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuISEodGhpcy5pc1Nob3duKCkmJjA8dGhpcy5fZGQuZmluZChcImxpLmFjdGl2ZVwiKS5sZW5ndGgpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGYucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt0aGlzLnNob3dufHwodGhpcy5fZGQuZHJvcGRvd24oKS5zaG93KCksdGhpcy5zaG93bj0hMCl9LGYucHJvdG90eXBlLmlzU2hvd249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaG93bn0sZi5wcm90b3R5cGUuaGlkZT1mdW5jdGlvbigpe3RoaXMuc2hvd24mJih0aGlzLl9kZC5kcm9wZG93bigpLmhpZGUoKSx0aGlzLnNob3duPSExKX0sZi5wcm90b3R5cGUudXBkYXRlSXRlbXM9ZnVuY3Rpb24odCxlKXt0aGlzLml0ZW1zPXQsdGhpcy5zZWFyY2hUZXh0PWUsdGhpcy5yZWZyZXNoSXRlbUxpc3QoKX0sZi5wcm90b3R5cGUuc2hvd01hdGNoZWRUZXh0PWZ1bmN0aW9uKHQsZSl7dmFyIHM9dC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZS50b0xvd2VyQ2FzZSgpKTtpZigtMTxzKXt2YXIgaT1zK2UubGVuZ3RoO3JldHVybiB0LnNsaWNlKDAscykrXCI8Yj5cIit0LnNsaWNlKHMsaSkrXCI8L2I+XCIrdC5zbGljZShpKX1yZXR1cm4gdH0sZi5wcm90b3R5cGUucmVmcmVzaEl0ZW1MaXN0PWZ1bmN0aW9uKCl7dmFyIHI9dGhpczt0aGlzLmNoZWNrSW5pdGlhbGl6ZWQoKSx0aGlzLl9kZC5lbXB0eSgpO3ZhciB0LGw9W107MDx0aGlzLml0ZW1zLmxlbmd0aD90aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIGUscyxpPXIuZm9ybWF0SXRlbSh0KTtcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9e3RleHQ6aX0pLGU9ci5zaG93TWF0Y2hlZFRleHQoaS50ZXh0LHIuc2VhcmNoVGV4dCkscz12b2lkIDAhPT1pLmh0bWw/aS5odG1sOmU7dmFyIG89aS5kaXNhYmxlZCxuPSQoXCI8bGkgPlwiKTtuLmFwcGVuZCgkKFwiPGE+XCIpLmF0dHIoXCJocmVmXCIsXCIjIVwiKS5odG1sKHMpKS5kYXRhKFwiaXRlbVwiLHQpLG8mJm4uYWRkQ2xhc3MoXCJkaXNhYmxlZFwiKSxsLnB1c2gobil9KTooKHQ9JChcIjxsaSA+XCIpKS5hcHBlbmQoJChcIjxhPlwiKS5hdHRyKFwiaHJlZlwiLFwiIyFcIikuaHRtbCh0aGlzLm5vUmVzdWx0c1RleHQpKS5hZGRDbGFzcyhcImRpc2FibGVkXCIpLGwucHVzaCh0KSksdGhpcy5fZGQuYXBwZW5kKGwpfSxmLnByb3RvdHlwZS5pdGVtU2VsZWN0ZWRMYXVuY2hFdmVudD1mdW5jdGlvbih0KXt0aGlzLl8kZWwudHJpZ2dlcihcImF1dG9jb21wbGV0ZS5zZWxlY3RcIix0KX0sZiksaD0oYy5wcm90b3R5cGUuZ2V0RWxQb3M9ZnVuY3Rpb24oKXtyZXR1cm4gJC5leHRlbmQoe30sdGhpcy5fJGVsLnBvc2l0aW9uKCkse2hlaWdodDp0aGlzLl8kZWxbMF0ub2Zmc2V0SGVpZ2h0fSl9LGMucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgcz10aGlzLHQ9dGhpcy5nZXRFbFBvcygpO3RoaXMuX2RkPSQoXCI8ZGl2IC8+XCIpLHRoaXMuX2RkLmFkZENsYXNzKFwiYm9vdHN0cmFwLWF1dG9jb21wbGV0ZSBkcm9wZG93bi1tZW51XCIpLHRoaXMuX2RkLmluc2VydEFmdGVyKHRoaXMuXyRlbCksdGhpcy5fZGQuY3NzKHt0b3A6dC50b3ArdGhpcy5fJGVsLm91dGVySGVpZ2h0KCksbGVmdDp0LmxlZnQsd2lkdGg6dGhpcy5fJGVsLm91dGVyV2lkdGgoKX0pLHRoaXMuX2RkLm9uKFwiY2xpY2tcIixcIi5kcm9wZG93bi1pdGVtXCIsZnVuY3Rpb24odCl7dmFyIGU9JCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEoXCJpdGVtXCIpO3MuaXRlbVNlbGVjdGVkTGF1bmNoRXZlbnQoZSksdC5wcmV2ZW50RGVmYXVsdCgpfSksdGhpcy5fZGQub24oXCJrZXl1cFwiLGZ1bmN0aW9uKHQpe2lmKHMuc2hvd24pe3N3aXRjaCh0LndoaWNoKXtjYXNlIDI3OnMuaGlkZSgpLHMuXyRlbC5mb2N1cygpfXJldHVybiExfX0pLHRoaXMuX2RkLm9uKFwibW91c2VlbnRlclwiLGZ1bmN0aW9uKHQpe3MuZGRNb3VzZW92ZXI9ITB9KSx0aGlzLl9kZC5vbihcIm1vdXNlbGVhdmVcIixmdW5jdGlvbih0KXtzLmRkTW91c2VvdmVyPSExfSksdGhpcy5fZGQub24oXCJtb3VzZWVudGVyXCIsXCIuZHJvcGRvd24taXRlbVwiLGZ1bmN0aW9uKHQpe3MuaGF2ZVJlc3VsdHMmJigkKHQuY3VycmVudFRhcmdldCkuY2xvc2VzdChcImRpdlwiKS5maW5kKFwiLmRyb3Bkb3duLWl0ZW0uYWN0aXZlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLCQodC5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcyhcImFjdGl2ZVwiKSxzLm1vdXNlb3Zlcj0hMCl9KSx0aGlzLl9kZC5vbihcIm1vdXNlbGVhdmVcIixcIi5kcm9wZG93bi1pdGVtXCIsZnVuY3Rpb24odCl7cy5tb3VzZW92ZXI9ITF9KSx0aGlzLmluaXRpYWxpemVkPSEwfSxjLnByb3RvdHlwZS5jaGVja0luaXRpYWxpemVkPWZ1bmN0aW9uKCl7dGhpcy5pbml0aWFsaXplZHx8dGhpcy5pbml0KCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSxcImlzTW91c2VPdmVyXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vdXNlb3Zlcn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoYy5wcm90b3R5cGUsXCJpc0RkTW91c2VPdmVyXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRkTW91c2VvdmVyfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLnByb3RvdHlwZSxcImhhdmVSZXN1bHRzXCIse2dldDpmdW5jdGlvbigpe3JldHVybiAwPHRoaXMuaXRlbXMubGVuZ3RofSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGMucHJvdG90eXBlLmZvY3VzTmV4dEl0ZW09ZnVuY3Rpb24odCl7dmFyIGUsczt0aGlzLmhhdmVSZXN1bHRzJiYoZT10aGlzLl9kZC5maW5kKFwiLmRyb3Bkb3duLWl0ZW0uYWN0aXZlXCIpLDA9PT0ocz10P2UucHJldigpOmUubmV4dCgpKS5sZW5ndGgmJihzPXQ/dGhpcy5fZGQuZmluZChcIi5kcm9wZG93bi1pdGVtXCIpLmxhc3QoKTp0aGlzLl9kZC5maW5kKFwiLmRyb3Bkb3duLWl0ZW1cIikuZmlyc3QoKSksZS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSxzLmFkZENsYXNzKFwiYWN0aXZlXCIpKX0sYy5wcm90b3R5cGUuZm9jdXNQcmV2aW91c0l0ZW09ZnVuY3Rpb24oKXt0aGlzLmZvY3VzTmV4dEl0ZW0oITApfSxjLnByb3RvdHlwZS5zZWxlY3RGb2N1c0l0ZW09ZnVuY3Rpb24oKXt0aGlzLl9kZC5maW5kKFwiLmRyb3Bkb3duLWl0ZW0uYWN0aXZlXCIpLnRyaWdnZXIoXCJjbGlja1wiKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvdG90eXBlLFwiaXNJdGVtRm9jdXNlZFwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hISh0aGlzLl9kZCYmdGhpcy5pc1Nob3duKCkmJjA8dGhpcy5fZGQuZmluZChcIi5kcm9wZG93bi1pdGVtLmFjdGl2ZVwiKS5sZW5ndGgpfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGMucHJvdG90eXBlLnNob3c9ZnVuY3Rpb24oKXt0aGlzLnNob3dufHwodGhpcy5nZXRFbFBvcygpLHRoaXMuX2RkLmFkZENsYXNzKFwic2hvd1wiKSx0aGlzLnNob3duPSEwLHRoaXMuXyRlbC50cmlnZ2VyKFwiYXV0b2NvbXBsZXRlLmRkLnNob3duXCIpKX0sYy5wcm90b3R5cGUuaXNTaG93bj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNob3dufSxjLnByb3RvdHlwZS5oaWRlPWZ1bmN0aW9uKCl7dGhpcy5zaG93biYmKHRoaXMuX2RkLnJlbW92ZUNsYXNzKFwic2hvd1wiKSx0aGlzLnNob3duPSExLHRoaXMuXyRlbC50cmlnZ2VyKFwiYXV0b2NvbXBsZXRlLmRkLmhpZGRlblwiKSl9LGMucHJvdG90eXBlLnVwZGF0ZUl0ZW1zPWZ1bmN0aW9uKHQsZSl7dGhpcy5pdGVtcz10LHRoaXMuc2VhcmNoVGV4dD1lLHRoaXMucmVmcmVzaEl0ZW1MaXN0KCl9LGMucHJvdG90eXBlLnNob3dNYXRjaGVkVGV4dD1mdW5jdGlvbih0LGUpe3ZhciBzPXQudG9Mb3dlckNhc2UoKS5pbmRleE9mKGUudG9Mb3dlckNhc2UoKSk7aWYoLTE8cyl7dmFyIGk9cytlLmxlbmd0aDtyZXR1cm4gdC5zbGljZSgwLHMpK1wiPGI+XCIrdC5zbGljZShzLGkpK1wiPC9iPlwiK3Quc2xpY2UoaSl9cmV0dXJuIHR9LGMucHJvdG90eXBlLnJlZnJlc2hJdGVtTGlzdD1mdW5jdGlvbigpe3ZhciByPXRoaXM7dGhpcy5jaGVja0luaXRpYWxpemVkKCksdGhpcy5fZGQuZW1wdHkoKTt2YXIgdCxsPVtdOzA8dGhpcy5pdGVtcy5sZW5ndGg/KHRoaXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgZSxzLGk9ci5mb3JtYXRJdGVtKHQpO1wic3RyaW5nXCI9PXR5cGVvZiBpJiYoaT17dGV4dDppfSksZT1yLnNob3dNYXRjaGVkVGV4dChpLnRleHQsci5zZWFyY2hUZXh0KSxzPXZvaWQgMCE9PWkuaHRtbD9pLmh0bWw6ZTt2YXIgbz1pLmRpc2FibGVkLG49JChcIjxhID5cIik7bi5hZGRDbGFzcyhcImRyb3Bkb3duLWl0ZW1cIikuY3NzKHtvdmVyZmxvdzpcImhpZGRlblwiLFwidGV4dC1vdmVyZmxvd1wiOlwiZWxsaXBzaXNcIn0pLmh0bWwocykuZGF0YShcIml0ZW1cIix0KSxvJiZuLmFkZENsYXNzKFwiZGlzYWJsZWRcIiksbC5wdXNoKG4pfSksdGhpcy5fZGQuYXBwZW5kKGwpLHRoaXMuc2hvdygpKTpcIlwiPT09dGhpcy5ub1Jlc3VsdHNUZXh0P3RoaXMuaGlkZSgpOigodD0kKFwiPGEgPlwiKSkuYWRkQ2xhc3MoXCJkcm9wZG93bi1pdGVtIGRpc2FibGVkXCIpLmh0bWwodGhpcy5ub1Jlc3VsdHNUZXh0KSxsLnB1c2godCksdGhpcy5fZGQuYXBwZW5kKGwpLHRoaXMuc2hvdygpKX0sYy5wcm90b3R5cGUuaXRlbVNlbGVjdGVkTGF1bmNoRXZlbnQ9ZnVuY3Rpb24odCl7dGhpcy5fJGVsLnRyaWdnZXIoXCJhdXRvY29tcGxldGUuc2VsZWN0XCIsdCl9LGMpLGQ9KHUucHJvdG90eXBlLm1hbmFnZUlubGluZURhdGFBdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRTZXR0aW5ncygpO3RoaXMuXyRlbC5kYXRhKFwidXJsXCIpJiYodC5yZXNvbHZlclNldHRpbmdzLnVybD10aGlzLl8kZWwuZGF0YShcInVybFwiKSksdGhpcy5fJGVsLmRhdGEoXCJkZWZhdWx0LXZhbHVlXCIpJiYodGhpcy5fZGVmYXVsdFZhbHVlPXRoaXMuXyRlbC5kYXRhKFwiZGVmYXVsdC12YWx1ZVwiKSksdGhpcy5fJGVsLmRhdGEoXCJkZWZhdWx0LXRleHRcIikmJih0aGlzLl9kZWZhdWx0VGV4dD10aGlzLl8kZWwuZGF0YShcImRlZmF1bHQtdGV4dFwiKSksdm9pZCAwIT09dGhpcy5fJGVsLmRhdGEoXCJub3Jlc3VsdHMtdGV4dFwiKSYmKHQubm9SZXN1bHRzVGV4dD10aGlzLl8kZWwuZGF0YShcIm5vcmVzdWx0cy10ZXh0XCIpKX0sdS5wcm90b3R5cGUuZ2V0U2V0dGluZ3M9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0dGluZ3N9LHUucHJvdG90eXBlLmdldEJvb3RzdHJhcFZlcnNpb249ZnVuY3Rpb24oKXt2YXIgdD1cImF1dG9cIj09PXRoaXMuX3NldHRpbmdzLmJvb3RzdHJhcFZlcnNpb24/JC5mbi5idXR0b24uQ29uc3RydWN0b3IuVkVSU0lPTi5zcGxpdChcIi5cIikubWFwKHBhcnNlSW50KTpcIjRcIj09PXRoaXMuX3NldHRpbmdzLmJvb3RzdHJhcFZlcnNpb24/WzRdOlwiM1wiPT09dGhpcy5fc2V0dGluZ3MuYm9vdHN0cmFwVmVyc2lvbj9bM106KGNvbnNvbGUuZXJyb3IoXCJJTlZBTElEIHZhbHVlIGZvciAnYm9vdHN0cmFwVmVyc2lvbicgc2V0dGluZ3MgcHJvcGVydHk6IFwiK3RoaXMuX3NldHRpbmdzLmJvb3RzdHJhcFZlcnNpb24rXCIgZGVmYXVsdGluZyB0byA0XCIpLFs0XSk7cmV0dXJuIHR9LHUucHJvdG90eXBlLmNvbnZlcnRTZWxlY3RUb1RleHQ9ZnVuY3Rpb24oKXt2YXIgdD0kKFwiPGlucHV0PlwiKTt0LmF0dHIoXCJ0eXBlXCIsXCJoaWRkZW5cIiksdC5hdHRyKFwibmFtZVwiLHRoaXMuXyRlbC5hdHRyKFwibmFtZVwiKSksdGhpcy5fZGVmYXVsdFZhbHVlJiZ0LnZhbCh0aGlzLl9kZWZhdWx0VmFsdWUpLCh0aGlzLl9zZWxlY3RIaWRkZW5GaWVsZD10KS5pbnNlcnRBZnRlcih0aGlzLl8kZWwpO3ZhciBlPSQoXCI8aW5wdXQ+XCIpO2UuYXR0cihcInR5cGVcIixcInNlYXJjaFwiKSxlLmF0dHIoXCJuYW1lXCIsdGhpcy5fJGVsLmF0dHIoXCJuYW1lXCIpK1wiX3RleHRcIiksZS5hdHRyKFwiaWRcIix0aGlzLl8kZWwuYXR0cihcImlkXCIpKSxlLmF0dHIoXCJkaXNhYmxlZFwiLHRoaXMuXyRlbC5hdHRyKFwiZGlzYWJsZWRcIikpLGUuYXR0cihcInBsYWNlaG9sZGVyXCIsdGhpcy5fJGVsLmF0dHIoXCJwbGFjZWhvbGRlclwiKSksZS5hdHRyKFwiYXV0b2NvbXBsZXRlXCIsXCJvZmZcIiksZS5hZGRDbGFzcyh0aGlzLl8kZWwuYXR0cihcImNsYXNzXCIpKSx0aGlzLl9kZWZhdWx0VGV4dCYmZS52YWwodGhpcy5fZGVmYXVsdFRleHQpO3ZhciBzPXRoaXMuXyRlbC5hdHRyKFwicmVxdWlyZWRcIik7cyYmZS5hdHRyKFwicmVxdWlyZWRcIixzKSxlLmRhdGEodS5OQU1FLHRoaXMpLHRoaXMuXyRlbC5yZXBsYWNlV2l0aChlKSx0aGlzLl8kZWw9ZSx0aGlzLl9lbD1lLmdldCgwKX0sdS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3RoaXMuYmluZERlZmF1bHRFdmVudExpc3RlbmVycygpLFwiYWpheFwiPT09dGhpcy5fc2V0dGluZ3MucmVzb2x2ZXImJih0aGlzLnJlc29sdmVyPW5ldyBsKHRoaXMuX3NldHRpbmdzLnJlc29sdmVyU2V0dGluZ3MpKSw0PT09dGhpcy5nZXRCb290c3RyYXBWZXJzaW9uKClbMF0/dGhpcy5fZGQ9bmV3IGgodGhpcy5fJGVsLHRoaXMuX3NldHRpbmdzLmZvcm1hdFJlc3VsdCx0aGlzLl9zZXR0aW5ncy5hdXRvU2VsZWN0LHRoaXMuX3NldHRpbmdzLm5vUmVzdWx0c1RleHQpOnRoaXMuX2RkPW5ldyBhKHRoaXMuXyRlbCx0aGlzLl9zZXR0aW5ncy5mb3JtYXRSZXN1bHQsdGhpcy5fc2V0dGluZ3MuYXV0b1NlbGVjdCx0aGlzLl9zZXR0aW5ncy5ub1Jlc3VsdHNUZXh0KX0sdS5wcm90b3R5cGUuYmluZERlZmF1bHRFdmVudExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciBzPXRoaXM7dGhpcy5fJGVsLm9uKFwia2V5ZG93blwiLGZ1bmN0aW9uKHQpe3N3aXRjaCh0LndoaWNoKXtjYXNlIDk6cy5fZGQuaXNJdGVtRm9jdXNlZD9zLl9kZC5zZWxlY3RGb2N1c0l0ZW0oKTpzLl9zZWxlY3RlZEl0ZW18fFwiXCIhPT1zLl8kZWwudmFsKCkmJnMuXyRlbC50cmlnZ2VyKFwiYXV0b2NvbXBsZXRlLmZyZWV2YWx1ZVwiLHMuXyRlbC52YWwoKSkscy5fZGQuaGlkZSgpO2JyZWFrO2Nhc2UgMTM6cy5fZGQuaXNJdGVtRm9jdXNlZD9zLl9kZC5zZWxlY3RGb2N1c0l0ZW0oKTpzLl9zZWxlY3RlZEl0ZW18fFwiXCIhPT1zLl8kZWwudmFsKCkmJnMuXyRlbC50cmlnZ2VyKFwiYXV0b2NvbXBsZXRlLmZyZWV2YWx1ZVwiLHMuXyRlbC52YWwoKSkscy5fZGQuaGlkZSgpLHMuX3NldHRpbmdzLnByZXZlbnRFbnRlciYmdC5wcmV2ZW50RGVmYXVsdCgpO2JyZWFrO2Nhc2UgNDA6cy5fZGQuZm9jdXNOZXh0SXRlbSgpO2JyZWFrO2Nhc2UgMzg6cy5fZGQuZm9jdXNQcmV2aW91c0l0ZW0oKX19KSx0aGlzLl8kZWwub24oXCJrZXl1cFwiLGZ1bmN0aW9uKHQpe3N3aXRjaCh0LndoaWNoKXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpjYXNlIDM5OmNhc2UgMzc6Y2FzZSAzNjpjYXNlIDM1OmJyZWFrO2Nhc2UgMTM6Y2FzZSAyNzpzLl9kZC5oaWRlKCk7YnJlYWs7Y2FzZSA0MDpjYXNlIDM4OmJyZWFrO2RlZmF1bHQ6cy5fc2VsZWN0ZWRJdGVtPW51bGw7dmFyIGU9cy5fJGVsLnZhbCgpO3MuaGFuZGxlclR5cGVkKGUpfX0pLHRoaXMuXyRlbC5vbihcImJsdXJcIixmdW5jdGlvbih0KXshcy5fZGQuaXNNb3VzZU92ZXImJnMuX2RkLmlzRGRNb3VzZU92ZXImJnMuX2RkLmlzU2hvd24oKT8oc2V0VGltZW91dChmdW5jdGlvbigpe3MuXyRlbC5mb2N1cygpfSkscy5fJGVsLmZvY3VzKCkpOnMuX2RkLmlzTW91c2VPdmVyfHwocy5faXNTZWxlY3RFbGVtZW50P3MuX2RkLmlzSXRlbUZvY3VzZWQ/cy5fZGQuc2VsZWN0Rm9jdXNJdGVtKCk6KG51bGwhPT1zLl9zZWxlY3RlZEl0ZW0mJlwiXCIhPT1zLl8kZWwudmFsKCl8fChcIlwiIT09cy5fJGVsLnZhbCgpJiZudWxsIT09cy5fZGVmYXVsdFZhbHVlPyhzLl8kZWwudmFsKHMuX2RlZmF1bHRUZXh0KSxzLl9zZWxlY3RIaWRkZW5GaWVsZC52YWwocy5fZGVmYXVsdFZhbHVlKSk6KHMuXyRlbC52YWwoXCJcIikscy5fc2VsZWN0SGlkZGVuRmllbGQudmFsKFwiXCIpKSxzLl9zZWxlY3RlZEl0ZW09bnVsbCkscy5fJGVsLnRyaWdnZXIoXCJhdXRvY29tcGxldGUuc2VsZWN0XCIscy5fc2VsZWN0ZWRJdGVtKSk6bnVsbD09PXMuX3NlbGVjdGVkSXRlbSYmcy5fJGVsLnRyaWdnZXIoXCJhdXRvY29tcGxldGUuZnJlZXZhbHVlXCIscy5fJGVsLnZhbCgpKSxzLl9kZC5oaWRlKCkpfSksdGhpcy5fJGVsLm9uKFwiYXV0b2NvbXBsZXRlLnNlbGVjdFwiLGZ1bmN0aW9uKHQsZSl7cy5fc2VsZWN0ZWRJdGVtPWUscy5pdGVtU2VsZWN0ZWREZWZhdWx0SGFuZGxlcihlKX0pLHRoaXMuXyRlbC5vbihcInBhc3RlXCIsZnVuY3Rpb24odCl7c2V0VGltZW91dChmdW5jdGlvbigpe3MuXyRlbC50cmlnZ2VyKFwia2V5dXBcIix0KX0sMCl9KX0sdS5wcm90b3R5cGUuaGFuZGxlclR5cGVkPWZ1bmN0aW9uKHQpe251bGwhPT10aGlzLl9zZXR0aW5ncy5ldmVudHMudHlwZWQmJiEodD10aGlzLl9zZXR0aW5ncy5ldmVudHMudHlwZWQodCx0aGlzLl8kZWwpKXx8KHQubGVuZ3RoPj10aGlzLl9zZXR0aW5ncy5taW5MZW5ndGg/KHRoaXMuX3NlYXJjaFRleHQ9dCx0aGlzLmhhbmRsZXJQcmVTZWFyY2goKSk6dGhpcy5fZGQuaGlkZSgpKX0sdS5wcm90b3R5cGUuaGFuZGxlclByZVNlYXJjaD1mdW5jdGlvbigpe2lmKG51bGwhPT10aGlzLl9zZXR0aW5ncy5ldmVudHMuc2VhcmNoUHJlKXt2YXIgdD10aGlzLl9zZXR0aW5ncy5ldmVudHMuc2VhcmNoUHJlKHRoaXMuX3NlYXJjaFRleHQsdGhpcy5fJGVsKTtpZighdClyZXR1cm47dGhpcy5fc2VhcmNoVGV4dD10fXRoaXMuaGFuZGxlckRvU2VhcmNoKCl9LHUucHJvdG90eXBlLmhhbmRsZXJEb1NlYXJjaD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7bnVsbCE9PXRoaXMuX3NldHRpbmdzLmV2ZW50cy5zZWFyY2g/dGhpcy5fc2V0dGluZ3MuZXZlbnRzLnNlYXJjaCh0aGlzLl9zZWFyY2hUZXh0LGZ1bmN0aW9uKHQpe2UucG9zdFNlYXJjaENhbGxiYWNrKHQpfSx0aGlzLl8kZWwpOnRoaXMucmVzb2x2ZXImJnRoaXMucmVzb2x2ZXIuc2VhcmNoKHRoaXMuX3NlYXJjaFRleHQsZnVuY3Rpb24odCl7ZS5wb3N0U2VhcmNoQ2FsbGJhY2sodCl9KX0sdS5wcm90b3R5cGUucG9zdFNlYXJjaENhbGxiYWNrPWZ1bmN0aW9uKHQpe3RoaXMuX3NldHRpbmdzLmV2ZW50cy5zZWFyY2hQb3N0JiZcImJvb2xlYW5cIj09dHlwZW9mKHQ9dGhpcy5fc2V0dGluZ3MuZXZlbnRzLnNlYXJjaFBvc3QodCx0aGlzLl8kZWwpKSYmIXR8fHRoaXMuaGFuZGxlclN0YXJ0U2hvdyh0KX0sdS5wcm90b3R5cGUuaGFuZGxlclN0YXJ0U2hvdz1mdW5jdGlvbih0KXt0aGlzLl9kZC51cGRhdGVJdGVtcyh0LHRoaXMuX3NlYXJjaFRleHQpfSx1LnByb3RvdHlwZS5pdGVtU2VsZWN0ZWREZWZhdWx0SGFuZGxlcj1mdW5jdGlvbih0KXt2YXIgZTtudWxsIT10PyhcInN0cmluZ1wiPT10eXBlb2YoZT10aGlzLl9zZXR0aW5ncy5mb3JtYXRSZXN1bHQodCkpJiYoZT17dGV4dDplfSksdGhpcy5fJGVsLnZhbChlLnRleHQpLHRoaXMuX2lzU2VsZWN0RWxlbWVudCYmdGhpcy5fc2VsZWN0SGlkZGVuRmllbGQudmFsKGUudmFsdWUpKToodGhpcy5fJGVsLnZhbChcIlwiKSx0aGlzLl9pc1NlbGVjdEVsZW1lbnQmJnRoaXMuX3NlbGVjdEhpZGRlbkZpZWxkLnZhbChcIlwiKSksdGhpcy5fc2VsZWN0ZWRJdGVtPXQsdGhpcy5fZGQuaGlkZSgpfSx1LnByb3RvdHlwZS5kZWZhdWx0Rm9ybWF0UmVzdWx0PWZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3t0ZXh0OnR9OnQudGV4dD90Ont0ZXh0OnQudG9TdHJpbmcoKX19LHUucHJvdG90eXBlLm1hbmFnZUFQST1mdW5jdGlvbih0LGUpe1wic2V0XCI9PT10P3RoaXMuaXRlbVNlbGVjdGVkRGVmYXVsdEhhbmRsZXIoZSk6XCJjbGVhclwiPT09dD90aGlzLml0ZW1TZWxlY3RlZERlZmF1bHRIYW5kbGVyKG51bGwpOlwic2hvd1wiPT09dD90aGlzLl8kZWwudHJpZ2dlcihcImtleXVwXCIpOlwidXBkYXRlUmVzb2x2ZXJcIj09PXQmJih0aGlzLnJlc29sdmVyPW5ldyBsKGUpKX0sdS5OQU1FPVwiYXV0b0NvbXBsZXRlXCIsdSk7ZnVuY3Rpb24gdSh0LGUpe3RoaXMuX3NlbGVjdGVkSXRlbT1udWxsLHRoaXMuX2RlZmF1bHRWYWx1ZT1udWxsLHRoaXMuX2RlZmF1bHRUZXh0PW51bGwsdGhpcy5faXNTZWxlY3RFbGVtZW50PSExLHRoaXMuX3NldHRpbmdzPXtyZXNvbHZlcjpcImFqYXhcIixyZXNvbHZlclNldHRpbmdzOnt9LG1pbkxlbmd0aDozLHZhbHVlS2V5OlwidmFsdWVcIixmb3JtYXRSZXN1bHQ6dGhpcy5kZWZhdWx0Rm9ybWF0UmVzdWx0LGF1dG9TZWxlY3Q6ITAsbm9SZXN1bHRzVGV4dDpcIk5vIHJlc3VsdHNcIixib290c3RyYXBWZXJzaW9uOlwiYXV0b1wiLHByZXZlbnRFbnRlcjohMSxldmVudHM6e3R5cGVkOm51bGwsc2VhcmNoUHJlOm51bGwsc2VhcmNoOm51bGwsc2VhcmNoUG9zdDpudWxsLHNlbGVjdDpudWxsLGZvY3VzOm51bGx9fSx0aGlzLl9lbD10LHRoaXMuXyRlbD0kKHRoaXMuX2VsKSx0aGlzLl8kZWwuaXMoXCJzZWxlY3RcIikmJih0aGlzLl9pc1NlbGVjdEVsZW1lbnQ9ITApLHRoaXMubWFuYWdlSW5saW5lRGF0YUF0dHJpYnV0ZXMoKSxcIm9iamVjdFwiPT10eXBlb2YgZSYmKHRoaXMuX3NldHRpbmdzPSQuZXh0ZW5kKCEwLHt9LHRoaXMuZ2V0U2V0dGluZ3MoKSxlKSksdGhpcy5faXNTZWxlY3RFbGVtZW50JiZ0aGlzLmNvbnZlcnRTZWxlY3RUb1RleHQoKSx0aGlzLmluaXQoKX1mdW5jdGlvbiBjKHQsZSxzLGkpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5zaG93bj0hMSx0aGlzLml0ZW1zPVtdLHRoaXMuZGRNb3VzZW92ZXI9ITEsdGhpcy5fJGVsPXQsdGhpcy5mb3JtYXRJdGVtPWUsdGhpcy5hdXRvU2VsZWN0PXMsdGhpcy5ub1Jlc3VsdHNUZXh0PWl9ZnVuY3Rpb24gZih0LGUscyxpKXt0aGlzLmluaXRpYWxpemVkPSExLHRoaXMuc2hvd249ITEsdGhpcy5pdGVtcz1bXSx0aGlzLmRkTW91c2VvdmVyPSExLHRoaXMuXyRlbD10LHRoaXMuZm9ybWF0SXRlbT1lLHRoaXMuYXV0b1NlbGVjdD1zLHRoaXMubm9SZXN1bHRzVGV4dD1pfWZ1bmN0aW9uIHAodCl7cmV0dXJuIG8uY2FsbCh0aGlzLHQpfHx0aGlzfWZ1bmN0aW9uIF8odCl7dGhpcy5fc2V0dGluZ3M9JC5leHRlbmQoITAse30sdGhpcy5nZXREZWZhdWx0cygpLHQpfW49alF1ZXJ5LHdpbmRvdyxkb2N1bWVudCxuLmZuW2QuTkFNRV09ZnVuY3Rpb24oZSxzKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ7KHQ9bih0aGlzKS5kYXRhKGQuTkFNRSkpfHwodD1uZXcgZCh0aGlzLGUpLG4odGhpcykuZGF0YShkLk5BTUUsdCkpLHQubWFuYWdlQVBJKGUscyl9KX19XSk7IiwiLyoqXHJcbiogQHZlcnNpb246IDMuMVxyXG4qIEBhdXRob3I6IERhbiBHcm9zc21hbiBodHRwOi8vd3d3LmRhbmdyb3NzbWFuLmluZm8vXHJcbiogQGNvcHlyaWdodDogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTkgRGFuIEdyb3NzbWFuLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4qIEBsaWNlbnNlOiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuIFNlZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxyXG4qIEB3ZWJzaXRlOiBodHRwOi8vd3d3LmRhdGVyYW5nZXBpY2tlci5jb20vXHJcbiovXHJcbi8vIEZvbGxvd2luZyB0aGUgVU1EIHRlbXBsYXRlIGh0dHBzOi8vZ2l0aHViLmNvbS91bWRqcy91bWQvYmxvYi9tYXN0ZXIvdGVtcGxhdGVzL3JldHVybkV4cG9ydHNHbG9iYWwuanNcclxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XHJcbiAgICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XHJcbiAgICAgICAgLy8gQU1ELiBNYWtlIGdsb2JhbHkgYXZhaWxhYmxlIGFzIHdlbGxcclxuICAgICAgICBkZWZpbmUoWydtb21lbnQnLCAnanF1ZXJ5J10sIGZ1bmN0aW9uIChtb21lbnQsIGpxdWVyeSkge1xyXG4gICAgICAgICAgICBpZiAoIWpxdWVyeS5mbikganF1ZXJ5LmZuID0ge307IC8vIHdlYnBhY2sgc2VydmVyIHJlbmRlcmluZ1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG1vbWVudCAhPT0gJ2Z1bmN0aW9uJyAmJiBtb21lbnQuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHQnKSkgbW9tZW50ID0gbW9tZW50WydkZWZhdWx0J11cclxuICAgICAgICAgICAgcmV0dXJuIGZhY3RvcnkobW9tZW50LCBqcXVlcnkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xyXG4gICAgICAgIC8vIE5vZGUgLyBCcm93c2VyaWZ5XHJcbiAgICAgICAgLy9pc29tb3JwaGljIGlzc3VlXHJcbiAgICAgICAgdmFyIGpRdWVyeSA9ICh0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnKSA/IHdpbmRvdy5qUXVlcnkgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKCFqUXVlcnkpIHtcclxuICAgICAgICAgICAgalF1ZXJ5ID0gcmVxdWlyZSgnanF1ZXJ5Jyk7XHJcbiAgICAgICAgICAgIGlmICghalF1ZXJ5LmZuKSBqUXVlcnkuZm4gPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIG1vbWVudCA9ICh0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cubW9tZW50ICE9ICd1bmRlZmluZWQnKSA/IHdpbmRvdy5tb21lbnQgOiByZXF1aXJlKCdtb21lbnQnKTtcclxuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkobW9tZW50LCBqUXVlcnkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBCcm93c2VyIGdsb2JhbHNcclxuICAgICAgICByb290LmRhdGVyYW5nZXBpY2tlciA9IGZhY3Rvcnkocm9vdC5tb21lbnQsIHJvb3QualF1ZXJ5KTtcclxuICAgIH1cclxufSh0aGlzLCBmdW5jdGlvbihtb21lbnQsICQpIHtcclxuICAgIHZhciBEYXRlUmFuZ2VQaWNrZXIgPSBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zLCBjYikge1xyXG5cclxuICAgICAgICAvL2RlZmF1bHQgc2V0dGluZ3MgZm9yIG9wdGlvbnNcclxuICAgICAgICB0aGlzLnBhcmVudEVsID0gJ2JvZHknO1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9ICQoZWxlbWVudCk7XHJcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSBtb21lbnQoKS5zdGFydE9mKCdkYXknKTtcclxuICAgICAgICB0aGlzLmVuZERhdGUgPSBtb21lbnQoKS5lbmRPZignZGF5Jyk7XHJcbiAgICAgICAgdGhpcy5taW5EYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tYXhTcGFuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hdXRvQXBwbHkgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNpbmdsZURhdGVQaWNrZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dEcm9wZG93bnMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1pblllYXIgPSBtb21lbnQoKS5zdWJ0cmFjdCgxMDAsICd5ZWFyJykuZm9ybWF0KCdZWVlZJyk7XHJcbiAgICAgICAgdGhpcy5tYXhZZWFyID0gbW9tZW50KCkuYWRkKDEwMCwgJ3llYXInKS5mb3JtYXQoJ1lZWVknKTtcclxuICAgICAgICB0aGlzLnNob3dXZWVrTnVtYmVycyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0lTT1dlZWtOdW1iZXJzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93Q3VzdG9tUmFuZ2VMYWJlbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50aW1lUGlja2VyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50aW1lUGlja2VyMjRIb3VyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50aW1lUGlja2VySW5jcmVtZW50ID0gMTtcclxuICAgICAgICB0aGlzLnRpbWVQaWNrZXJTZWNvbmRzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5saW5rZWRDYWxlbmRhcnMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYXV0b1VwZGF0ZUlucHV0ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJhbmdlcyA9IHt9O1xyXG5cclxuICAgICAgICB0aGlzLm9wZW5zID0gJ3JpZ2h0JztcclxuICAgICAgICBpZiAodGhpcy5lbGVtZW50Lmhhc0NsYXNzKCdwdWxsLXJpZ2h0JykpXHJcbiAgICAgICAgICAgIHRoaXMub3BlbnMgPSAnbGVmdCc7XHJcblxyXG4gICAgICAgIHRoaXMuZHJvcHMgPSAnZG93bic7XHJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5oYXNDbGFzcygnZHJvcHVwJykpXHJcbiAgICAgICAgICAgIHRoaXMuZHJvcHMgPSAndXAnO1xyXG5cclxuICAgICAgICB0aGlzLmJ1dHRvbkNsYXNzZXMgPSAnYnRuIGJ0bi1zbSc7XHJcbiAgICAgICAgdGhpcy5hcHBseUJ1dHRvbkNsYXNzZXMgPSAnYnRuLXByaW1hcnknO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uQ2xhc3NlcyA9ICdidG4tZGVmYXVsdCc7XHJcblxyXG4gICAgICAgIHRoaXMubG9jYWxlID0ge1xyXG4gICAgICAgICAgICBkaXJlY3Rpb246ICdsdHInLFxyXG4gICAgICAgICAgICBmb3JtYXQ6IG1vbWVudC5sb2NhbGVEYXRhKCkubG9uZ0RhdGVGb3JtYXQoJ0wnKSxcclxuICAgICAgICAgICAgc2VwYXJhdG9yOiAnIC0gJyxcclxuICAgICAgICAgICAgYXBwbHlMYWJlbDogJ0FwcGx5JyxcclxuICAgICAgICAgICAgY2FuY2VsTGFiZWw6ICdDYW5jZWwnLFxyXG4gICAgICAgICAgICB3ZWVrTGFiZWw6ICdXJyxcclxuICAgICAgICAgICAgY3VzdG9tUmFuZ2VMYWJlbDogJ0N1c3RvbSBSYW5nZScsXHJcbiAgICAgICAgICAgIGRheXNPZldlZWs6IG1vbWVudC53ZWVrZGF5c01pbigpLFxyXG4gICAgICAgICAgICBtb250aE5hbWVzOiBtb21lbnQubW9udGhzU2hvcnQoKSxcclxuICAgICAgICAgICAgZmlyc3REYXk6IG1vbWVudC5sb2NhbGVEYXRhKCkuZmlyc3REYXlPZldlZWsoKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBmdW5jdGlvbigpIHsgfTtcclxuXHJcbiAgICAgICAgLy9zb21lIHN0YXRlIGluZm9ybWF0aW9uXHJcbiAgICAgICAgdGhpcy5pc1Nob3dpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxlZnRDYWxlbmRhciA9IHt9O1xyXG4gICAgICAgIHRoaXMucmlnaHRDYWxlbmRhciA9IHt9O1xyXG5cclxuICAgICAgICAvL2N1c3RvbSBvcHRpb25zIGZyb20gdXNlclxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcgfHwgb3B0aW9ucyA9PT0gbnVsbClcclxuICAgICAgICAgICAgb3B0aW9ucyA9IHt9O1xyXG5cclxuICAgICAgICAvL2FsbG93IHNldHRpbmcgb3B0aW9ucyB3aXRoIGRhdGEgYXR0cmlidXRlc1xyXG4gICAgICAgIC8vZGF0YS1hcGkgb3B0aW9ucyB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggY3VzdG9tIGphdmFzY3JpcHQgb3B0aW9uc1xyXG4gICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh0aGlzLmVsZW1lbnQuZGF0YSgpLCBvcHRpb25zKTtcclxuXHJcbiAgICAgICAgLy9odG1sIHRlbXBsYXRlIGZvciB0aGUgcGlja2VyIFVJXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRlbXBsYXRlICE9PSAnc3RyaW5nJyAmJiAhKG9wdGlvbnMudGVtcGxhdGUgaW5zdGFuY2VvZiAkKSlcclxuICAgICAgICAgICAgb3B0aW9ucy50ZW1wbGF0ZSA9XHJcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiZGF0ZXJhbmdlcGlja2VyXCI+JyArXHJcbiAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInJhbmdlc1wiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJkcnAtY2FsZW5kYXIgbGVmdFwiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXItdGFibGVcIj48L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cImNhbGVuZGFyLXRpbWVcIj48L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8L2Rpdj4nICtcclxuICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiZHJwLWNhbGVuZGFyIHJpZ2h0XCI+JyArXHJcbiAgICAgICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJjYWxlbmRhci10YWJsZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiY2FsZW5kYXItdGltZVwiPjwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzwvZGl2PicgK1xyXG4gICAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJkcnAtYnV0dG9uc1wiPicgK1xyXG4gICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImRycC1zZWxlY3RlZFwiPjwvc3Bhbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImNhbmNlbEJ0blwiIHR5cGU9XCJidXR0b25cIj48L2J1dHRvbj4nICtcclxuICAgICAgICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz1cImFwcGx5QnRuXCIgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiIHR5cGU9XCJidXR0b25cIj48L2J1dHRvbj4gJyArXHJcbiAgICAgICAgICAgICAgICAnPC9kaXY+JyArXHJcbiAgICAgICAgICAgICc8L2Rpdj4nO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudEVsID0gKG9wdGlvbnMucGFyZW50RWwgJiYgJChvcHRpb25zLnBhcmVudEVsKS5sZW5ndGgpID8gJChvcHRpb25zLnBhcmVudEVsKSA6ICQodGhpcy5wYXJlbnRFbCk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSAkKG9wdGlvbnMudGVtcGxhdGUpLmFwcGVuZFRvKHRoaXMucGFyZW50RWwpO1xyXG5cclxuICAgICAgICAvL1xyXG4gICAgICAgIC8vIGhhbmRsZSBhbGwgdGhlIHBvc3NpYmxlIG9wdGlvbnMgb3ZlcnJpZGluZyBkZWZhdWx0c1xyXG4gICAgICAgIC8vXHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUgPT09ICdvYmplY3QnKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmRpcmVjdGlvbiA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZS5kaXJlY3Rpb24gPSBvcHRpb25zLmxvY2FsZS5kaXJlY3Rpb247XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmZvcm1hdCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZS5mb3JtYXQgPSBvcHRpb25zLmxvY2FsZS5mb3JtYXQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLnNlcGFyYXRvciA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsZS5zZXBhcmF0b3IgPSBvcHRpb25zLmxvY2FsZS5zZXBhcmF0b3I7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmRheXNPZldlZWsgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuZGF5c09mV2VlayA9IG9wdGlvbnMubG9jYWxlLmRheXNPZldlZWsuc2xpY2UoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUubW9udGhOYW1lcyA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbGUubW9udGhOYW1lcyA9IG9wdGlvbnMubG9jYWxlLm1vbnRoTmFtZXMuc2xpY2UoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUuZmlyc3REYXkgPT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICAgIHRoaXMubG9jYWxlLmZpcnN0RGF5ID0gb3B0aW9ucy5sb2NhbGUuZmlyc3REYXk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmFwcGx5TGFiZWwgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICAgIHRoaXMubG9jYWxlLmFwcGx5TGFiZWwgPSBvcHRpb25zLmxvY2FsZS5hcHBseUxhYmVsO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxvY2FsZS5jYW5jZWxMYWJlbCA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuY2FuY2VsTGFiZWwgPSBvcHRpb25zLmxvY2FsZS5jYW5jZWxMYWJlbDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5sb2NhbGUud2Vla0xhYmVsID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgICB0aGlzLmxvY2FsZS53ZWVrTGFiZWwgPSBvcHRpb25zLmxvY2FsZS53ZWVrTGFiZWw7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubG9jYWxlLmN1c3RvbVJhbmdlTGFiZWwgPT09ICdzdHJpbmcnKXtcclxuICAgICAgICAgICAgICAgIC8vU3VwcG9ydCB1bmljb2RlIGNoYXJzIGluIHRoZSBjdXN0b20gcmFuZ2UgbmFtZS5cclxuICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1MID0gb3B0aW9ucy5sb2NhbGUuY3VzdG9tUmFuZ2VMYWJlbDtcclxuICAgICAgICAgICAgICAgIHZhciByYW5nZUh0bWwgPSBlbGVtLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuY3VzdG9tUmFuZ2VMYWJlbCA9IHJhbmdlSHRtbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDbGFzcyh0aGlzLmxvY2FsZS5kaXJlY3Rpb24pO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc3RhcnREYXRlID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSBtb21lbnQob3B0aW9ucy5zdGFydERhdGUsIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5lbmREYXRlID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gbW9tZW50KG9wdGlvbnMuZW5kRGF0ZSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm1pbkRhdGUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB0aGlzLm1pbkRhdGUgPSBtb21lbnQob3B0aW9ucy5taW5EYXRlLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMubWF4RGF0ZSA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHRoaXMubWF4RGF0ZSA9IG1vbWVudChvcHRpb25zLm1heERhdGUsIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zdGFydERhdGUgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IG1vbWVudChvcHRpb25zLnN0YXJ0RGF0ZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5lbmREYXRlID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gbW9tZW50KG9wdGlvbnMuZW5kRGF0ZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5taW5EYXRlID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgdGhpcy5taW5EYXRlID0gbW9tZW50KG9wdGlvbnMubWluRGF0ZSk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5tYXhEYXRlID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgdGhpcy5tYXhEYXRlID0gbW9tZW50KG9wdGlvbnMubWF4RGF0ZSk7XHJcblxyXG4gICAgICAgIC8vIHNhbml0eSBjaGVjayBmb3IgYmFkIG9wdGlvbnNcclxuICAgICAgICBpZiAodGhpcy5taW5EYXRlICYmIHRoaXMuc3RhcnREYXRlLmlzQmVmb3JlKHRoaXMubWluRGF0ZSkpXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5taW5EYXRlLmNsb25lKCk7XHJcblxyXG4gICAgICAgIC8vIHNhbml0eSBjaGVjayBmb3IgYmFkIG9wdGlvbnNcclxuICAgICAgICBpZiAodGhpcy5tYXhEYXRlICYmIHRoaXMuZW5kRGF0ZS5pc0FmdGVyKHRoaXMubWF4RGF0ZSkpXHJcbiAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMubWF4RGF0ZS5jbG9uZSgpO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXBwbHlCdXR0b25DbGFzc2VzID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgdGhpcy5hcHBseUJ1dHRvbkNsYXNzZXMgPSBvcHRpb25zLmFwcGx5QnV0dG9uQ2xhc3NlcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmFwcGx5Q2xhc3MgPT09ICdzdHJpbmcnKSAvL2JhY2t3YXJkcyBjb21wYXRcclxuICAgICAgICAgICAgdGhpcy5hcHBseUJ1dHRvbkNsYXNzZXMgPSBvcHRpb25zLmFwcGx5Q2xhc3M7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jYW5jZWxCdXR0b25DbGFzc2VzID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b25DbGFzc2VzID0gb3B0aW9ucy5jYW5jZWxCdXR0b25DbGFzc2VzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuY2FuY2VsQ2xhc3MgPT09ICdzdHJpbmcnKSAvL2JhY2t3YXJkcyBjb21wYXRcclxuICAgICAgICAgICAgdGhpcy5jYW5jZWxCdXR0b25DbGFzc2VzID0gb3B0aW9ucy5jYW5jZWxDbGFzcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm1heFNwYW4gPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICB0aGlzLm1heFNwYW4gPSBvcHRpb25zLm1heFNwYW47XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5kYXRlTGltaXQgPT09ICdvYmplY3QnKSAvL2JhY2t3YXJkcyBjb21wYXRcclxuICAgICAgICAgICAgdGhpcy5tYXhTcGFuID0gb3B0aW9ucy5kYXRlTGltaXQ7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5vcGVucyA9PT0gJ3N0cmluZycpXHJcbiAgICAgICAgICAgIHRoaXMub3BlbnMgPSBvcHRpb25zLm9wZW5zO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuZHJvcHMgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICB0aGlzLmRyb3BzID0gb3B0aW9ucy5kcm9wcztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnNob3dXZWVrTnVtYmVycyA9PT0gJ2Jvb2xlYW4nKVxyXG4gICAgICAgICAgICB0aGlzLnNob3dXZWVrTnVtYmVycyA9IG9wdGlvbnMuc2hvd1dlZWtOdW1iZXJzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2hvd0lTT1dlZWtOdW1iZXJzID09PSAnYm9vbGVhbicpXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0lTT1dlZWtOdW1iZXJzID0gb3B0aW9ucy5zaG93SVNPV2Vla051bWJlcnM7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5idXR0b25DbGFzc2VzID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgdGhpcy5idXR0b25DbGFzc2VzID0gb3B0aW9ucy5idXR0b25DbGFzc2VzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYnV0dG9uQ2xhc3NlcyA9PT0gJ29iamVjdCcpXHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uQ2xhc3NlcyA9IG9wdGlvbnMuYnV0dG9uQ2xhc3Nlcy5qb2luKCcgJyk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaG93RHJvcGRvd25zID09PSAnYm9vbGVhbicpXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3ducyA9IG9wdGlvbnMuc2hvd0Ryb3Bkb3ducztcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm1pblllYXIgPT09ICdudW1iZXInKVxyXG4gICAgICAgICAgICB0aGlzLm1pblllYXIgPSBvcHRpb25zLm1pblllYXI7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5tYXhZZWFyID09PSAnbnVtYmVyJylcclxuICAgICAgICAgICAgdGhpcy5tYXhZZWFyID0gb3B0aW9ucy5tYXhZZWFyO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuc2hvd0N1c3RvbVJhbmdlTGFiZWwgPT09ICdib29sZWFuJylcclxuICAgICAgICAgICAgdGhpcy5zaG93Q3VzdG9tUmFuZ2VMYWJlbCA9IG9wdGlvbnMuc2hvd0N1c3RvbVJhbmdlTGFiZWw7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zaW5nbGVEYXRlUGlja2VyID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgICAgICAgdGhpcy5zaW5nbGVEYXRlUGlja2VyID0gb3B0aW9ucy5zaW5nbGVEYXRlUGlja2VyO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaW5nbGVEYXRlUGlja2VyKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy50aW1lUGlja2VyID09PSAnYm9vbGVhbicpXHJcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlciA9IG9wdGlvbnMudGltZVBpY2tlcjtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRpbWVQaWNrZXJTZWNvbmRzID09PSAnYm9vbGVhbicpXHJcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlclNlY29uZHMgPSBvcHRpb25zLnRpbWVQaWNrZXJTZWNvbmRzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMudGltZVBpY2tlckluY3JlbWVudCA9PT0gJ251bWJlcicpXHJcbiAgICAgICAgICAgIHRoaXMudGltZVBpY2tlckluY3JlbWVudCA9IG9wdGlvbnMudGltZVBpY2tlckluY3JlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnRpbWVQaWNrZXIyNEhvdXIgPT09ICdib29sZWFuJylcclxuICAgICAgICAgICAgdGhpcy50aW1lUGlja2VyMjRIb3VyID0gb3B0aW9ucy50aW1lUGlja2VyMjRIb3VyO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b0FwcGx5ID09PSAnYm9vbGVhbicpXHJcbiAgICAgICAgICAgIHRoaXMuYXV0b0FwcGx5ID0gb3B0aW9ucy5hdXRvQXBwbHk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5hdXRvVXBkYXRlSW5wdXQgPT09ICdib29sZWFuJylcclxuICAgICAgICAgICAgdGhpcy5hdXRvVXBkYXRlSW5wdXQgPSBvcHRpb25zLmF1dG9VcGRhdGVJbnB1dDtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmxpbmtlZENhbGVuZGFycyA9PT0gJ2Jvb2xlYW4nKVxyXG4gICAgICAgICAgICB0aGlzLmxpbmtlZENhbGVuZGFycyA9IG9wdGlvbnMubGlua2VkQ2FsZW5kYXJzO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuaXNJbnZhbGlkRGF0ZSA9PT0gJ2Z1bmN0aW9uJylcclxuICAgICAgICAgICAgdGhpcy5pc0ludmFsaWREYXRlID0gb3B0aW9ucy5pc0ludmFsaWREYXRlO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuaXNDdXN0b21EYXRlID09PSAnZnVuY3Rpb24nKVxyXG4gICAgICAgICAgICB0aGlzLmlzQ3VzdG9tRGF0ZSA9IG9wdGlvbnMuaXNDdXN0b21EYXRlO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYWx3YXlzU2hvd0NhbGVuZGFycyA9PT0gJ2Jvb2xlYW4nKVxyXG4gICAgICAgICAgICB0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMgPSBvcHRpb25zLmFsd2F5c1Nob3dDYWxlbmRhcnM7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSBkYXkgbmFtZXMgb3JkZXIgdG8gZmlyc3REYXlcclxuICAgICAgICBpZiAodGhpcy5sb2NhbGUuZmlyc3REYXkgIT0gMCkge1xyXG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSB0aGlzLmxvY2FsZS5maXJzdERheTtcclxuICAgICAgICAgICAgd2hpbGUgKGl0ZXJhdG9yID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGUuZGF5c09mV2Vlay5wdXNoKHRoaXMubG9jYWxlLmRheXNPZldlZWsuc2hpZnQoKSk7XHJcbiAgICAgICAgICAgICAgICBpdGVyYXRvci0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgc3RhcnQsIGVuZCwgcmFuZ2U7XHJcblxyXG4gICAgICAgIC8vaWYgbm8gc3RhcnQvZW5kIGRhdGVzIHNldCwgY2hlY2sgaWYgYW4gaW5wdXQgZWxlbWVudCBjb250YWlucyBpbml0aWFsIHZhbHVlc1xyXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zdGFydERhdGUgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRpb25zLmVuZERhdGUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMuZWxlbWVudCkuaXMoJzp0ZXh0JykpIHtcclxuICAgICAgICAgICAgICAgIHZhciB2YWwgPSAkKHRoaXMuZWxlbWVudCkudmFsKCksXHJcbiAgICAgICAgICAgICAgICAgICAgc3BsaXQgPSB2YWwuc3BsaXQodGhpcy5sb2NhbGUuc2VwYXJhdG9yKTtcclxuXHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IGVuZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0Lmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQoc3BsaXRbMF0sIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gbW9tZW50KHNwbGl0WzFdLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNpbmdsZURhdGVQaWNrZXIgJiYgdmFsICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBtb21lbnQodmFsLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1vbWVudCh2YWwsIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnQgIT09IG51bGwgJiYgZW5kICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGFydERhdGUoc3RhcnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RW5kRGF0ZShlbmQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmFuZ2VzID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBmb3IgKHJhbmdlIGluIG9wdGlvbnMucmFuZ2VzKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLnJhbmdlc1tyYW5nZV1bMF0gPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gbW9tZW50KG9wdGlvbnMucmFuZ2VzW3JhbmdlXVswXSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IG1vbWVudChvcHRpb25zLnJhbmdlc1tyYW5nZV1bMF0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yYW5nZXNbcmFuZ2VdWzFdID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgICAgICAgICBlbmQgPSBtb21lbnQob3B0aW9ucy5yYW5nZXNbcmFuZ2VdWzFdLCB0aGlzLmxvY2FsZS5mb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1vbWVudChvcHRpb25zLnJhbmdlc1tyYW5nZV1bMV0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBzdGFydCBvciBlbmQgZGF0ZSBleGNlZWQgdGhvc2UgYWxsb3dlZCBieSB0aGUgbWluRGF0ZSBvciBtYXhTcGFuXHJcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25zLCBzaG9ydGVuIHRoZSByYW5nZSB0byB0aGUgYWxsb3dhYmxlIHBlcmlvZC5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUgJiYgc3RhcnQuaXNCZWZvcmUodGhpcy5taW5EYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMubWluRGF0ZS5jbG9uZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBtYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4U3BhbiAmJiBtYXhEYXRlICYmIHN0YXJ0LmNsb25lKCkuYWRkKHRoaXMubWF4U3BhbikuaXNBZnRlcihtYXhEYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBtYXhEYXRlID0gc3RhcnQuY2xvbmUoKS5hZGQodGhpcy5tYXhTcGFuKTtcclxuICAgICAgICAgICAgICAgIGlmIChtYXhEYXRlICYmIGVuZC5pc0FmdGVyKG1heERhdGUpKVxyXG4gICAgICAgICAgICAgICAgICAgIGVuZCA9IG1heERhdGUuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZW5kIG9mIHRoZSByYW5nZSBpcyBiZWZvcmUgdGhlIG1pbmltdW0gb3IgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSBpc1xyXG4gICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhlIG1heGltdW0sIGRvbid0IGRpc3BsYXkgdGhpcyByYW5nZSBvcHRpb24gYXQgYWxsLlxyXG4gICAgICAgICAgICAgICAgaWYgKCh0aGlzLm1pbkRhdGUgJiYgZW5kLmlzQmVmb3JlKHRoaXMubWluRGF0ZSwgdGhpcy50aW1lcGlja2VyID8gJ21pbnV0ZScgOiAnZGF5JykpXHJcbiAgICAgICAgICAgICAgICAgIHx8IChtYXhEYXRlICYmIHN0YXJ0LmlzQWZ0ZXIobWF4RGF0ZSwgdGhpcy50aW1lcGlja2VyID8gJ21pbnV0ZScgOiAnZGF5JykpKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vU3VwcG9ydCB1bmljb2RlIGNoYXJzIGluIHRoZSByYW5nZSBuYW1lcy5cclxuICAgICAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uaW5uZXJIVE1MID0gcmFuZ2U7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmFuZ2VIdG1sID0gZWxlbS52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlc1tyYW5nZUh0bWxdID0gW3N0YXJ0LCBlbmRdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgbGlzdCA9ICc8dWw+JztcclxuICAgICAgICAgICAgZm9yIChyYW5nZSBpbiB0aGlzLnJhbmdlcykge1xyXG4gICAgICAgICAgICAgICAgbGlzdCArPSAnPGxpIGRhdGEtcmFuZ2Uta2V5PVwiJyArIHJhbmdlICsgJ1wiPicgKyByYW5nZSArICc8L2xpPic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0N1c3RvbVJhbmdlTGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIGxpc3QgKz0gJzxsaSBkYXRhLXJhbmdlLWtleT1cIicgKyB0aGlzLmxvY2FsZS5jdXN0b21SYW5nZUxhYmVsICsgJ1wiPicgKyB0aGlzLmxvY2FsZS5jdXN0b21SYW5nZUxhYmVsICsgJzwvbGk+JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaXN0ICs9ICc8L3VsPic7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5yYW5nZXMnKS5wcmVwZW5kKGxpc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjYiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2I7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMudGltZVBpY2tlcikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpO1xyXG4gICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLmVuZERhdGUuZW5kT2YoJ2RheScpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuY2FsZW5kYXItdGltZScpLmhpZGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vY2FuJ3QgYmUgdXNlZCB0b2dldGhlciBmb3Igbm93XHJcbiAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlciAmJiB0aGlzLmF1dG9BcHBseSlcclxuICAgICAgICAgICAgdGhpcy5hdXRvQXBwbHkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b0FwcGx5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCdhdXRvLWFwcGx5Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmFuZ2VzID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoJ3Nob3ctcmFuZ2VzJyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNpbmdsZURhdGVQaWNrZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoJ3NpbmdsZScpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuZHJwLWNhbGVuZGFyLmxlZnQnKS5hZGRDbGFzcygnc2luZ2xlJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5kcnAtY2FsZW5kYXIubGVmdCcpLnNob3coKTtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhci5yaWdodCcpLmhpZGUoKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIgJiYgdGhpcy5hdXRvQXBwbHkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCdhdXRvLWFwcGx5Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgodHlwZW9mIG9wdGlvbnMucmFuZ2VzID09PSAndW5kZWZpbmVkJyAmJiAhdGhpcy5zaW5nbGVEYXRlUGlja2VyKSB8fCB0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoJ3Nob3ctY2FsZW5kYXInKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCdvcGVucycgKyB0aGlzLm9wZW5zKTtcclxuXHJcbiAgICAgICAgLy9hcHBseSBDU1MgY2xhc3NlcyBhbmQgbGFiZWxzIHRvIGJ1dHRvbnNcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuYXBwbHlCdG4sIC5jYW5jZWxCdG4nKS5hZGRDbGFzcyh0aGlzLmJ1dHRvbkNsYXNzZXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmFwcGx5QnV0dG9uQ2xhc3Nlcy5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5hcHBseUJ0bicpLmFkZENsYXNzKHRoaXMuYXBwbHlCdXR0b25DbGFzc2VzKTtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxCdXR0b25DbGFzc2VzLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmNhbmNlbEJ0bicpLmFkZENsYXNzKHRoaXMuY2FuY2VsQnV0dG9uQ2xhc3Nlcyk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmFwcGx5QnRuJykuaHRtbCh0aGlzLmxvY2FsZS5hcHBseUxhYmVsKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuY2FuY2VsQnRuJykuaHRtbCh0aGlzLmxvY2FsZS5jYW5jZWxMYWJlbCk7XHJcblxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gZXZlbnQgbGlzdGVuZXJzXHJcbiAgICAgICAgLy9cclxuXHJcbiAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhcicpXHJcbiAgICAgICAgICAgIC5vbignY2xpY2suZGF0ZXJhbmdlcGlja2VyJywgJy5wcmV2JywgJC5wcm94eSh0aGlzLmNsaWNrUHJldiwgdGhpcykpXHJcbiAgICAgICAgICAgIC5vbignY2xpY2suZGF0ZXJhbmdlcGlja2VyJywgJy5uZXh0JywgJC5wcm94eSh0aGlzLmNsaWNrTmV4dCwgdGhpcykpXHJcbiAgICAgICAgICAgIC5vbignbW91c2Vkb3duLmRhdGVyYW5nZXBpY2tlcicsICd0ZC5hdmFpbGFibGUnLCAkLnByb3h5KHRoaXMuY2xpY2tEYXRlLCB0aGlzKSlcclxuICAgICAgICAgICAgLm9uKCdtb3VzZWVudGVyLmRhdGVyYW5nZXBpY2tlcicsICd0ZC5hdmFpbGFibGUnLCAkLnByb3h5KHRoaXMuaG92ZXJEYXRlLCB0aGlzKSlcclxuICAgICAgICAgICAgLm9uKCdjaGFuZ2UuZGF0ZXJhbmdlcGlja2VyJywgJ3NlbGVjdC55ZWFyc2VsZWN0JywgJC5wcm94eSh0aGlzLm1vbnRoT3JZZWFyQ2hhbmdlZCwgdGhpcykpXHJcbiAgICAgICAgICAgIC5vbignY2hhbmdlLmRhdGVyYW5nZXBpY2tlcicsICdzZWxlY3QubW9udGhzZWxlY3QnLCAkLnByb3h5KHRoaXMubW9udGhPclllYXJDaGFuZ2VkLCB0aGlzKSlcclxuICAgICAgICAgICAgLm9uKCdjaGFuZ2UuZGF0ZXJhbmdlcGlja2VyJywgJ3NlbGVjdC5ob3Vyc2VsZWN0LHNlbGVjdC5taW51dGVzZWxlY3Qsc2VsZWN0LnNlY29uZHNlbGVjdCxzZWxlY3QuYW1wbXNlbGVjdCcsICQucHJveHkodGhpcy50aW1lQ2hhbmdlZCwgdGhpcykpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcucmFuZ2VzJylcclxuICAgICAgICAgICAgLm9uKCdjbGljay5kYXRlcmFuZ2VwaWNrZXInLCAnbGknLCAkLnByb3h5KHRoaXMuY2xpY2tSYW5nZSwgdGhpcykpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuZHJwLWJ1dHRvbnMnKVxyXG4gICAgICAgICAgICAub24oJ2NsaWNrLmRhdGVyYW5nZXBpY2tlcicsICdidXR0b24uYXBwbHlCdG4nLCAkLnByb3h5KHRoaXMuY2xpY2tBcHBseSwgdGhpcykpXHJcbiAgICAgICAgICAgIC5vbignY2xpY2suZGF0ZXJhbmdlcGlja2VyJywgJ2J1dHRvbi5jYW5jZWxCdG4nLCAkLnByb3h5KHRoaXMuY2xpY2tDYW5jZWwsIHRoaXMpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pcygnaW5wdXQnKSB8fCB0aGlzLmVsZW1lbnQuaXMoJ2J1dHRvbicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5vbih7XHJcbiAgICAgICAgICAgICAgICAnY2xpY2suZGF0ZXJhbmdlcGlja2VyJzogJC5wcm94eSh0aGlzLnNob3csIHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgJ2ZvY3VzLmRhdGVyYW5nZXBpY2tlcic6ICQucHJveHkodGhpcy5zaG93LCB0aGlzKSxcclxuICAgICAgICAgICAgICAgICdrZXl1cC5kYXRlcmFuZ2VwaWNrZXInOiAkLnByb3h5KHRoaXMuZWxlbWVudENoYW5nZWQsIHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgJ2tleWRvd24uZGF0ZXJhbmdlcGlja2VyJzogJC5wcm94eSh0aGlzLmtleWRvd24sIHRoaXMpIC8vSUUgMTEgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQub24oJ2NsaWNrLmRhdGVyYW5nZXBpY2tlcicsICQucHJveHkodGhpcy50b2dnbGUsIHRoaXMpKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm9uKCdrZXlkb3duLmRhdGVyYW5nZXBpY2tlcicsICQucHJveHkodGhpcy50b2dnbGUsIHRoaXMpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vXHJcbiAgICAgICAgLy8gaWYgYXR0YWNoZWQgdG8gYSB0ZXh0IGlucHV0LCBzZXQgdGhlIGluaXRpYWwgdmFsdWVcclxuICAgICAgICAvL1xyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcclxuXHJcbiAgICB9O1xyXG5cclxuICAgIERhdGVSYW5nZVBpY2tlci5wcm90b3R5cGUgPSB7XHJcblxyXG4gICAgICAgIGNvbnN0cnVjdG9yOiBEYXRlUmFuZ2VQaWNrZXIsXHJcblxyXG4gICAgICAgIHNldFN0YXJ0RGF0ZTogZnVuY3Rpb24oc3RhcnREYXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhcnREYXRlID09PSAnc3RyaW5nJylcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gbW9tZW50KHN0YXJ0RGF0ZSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RhcnREYXRlID09PSAnb2JqZWN0JylcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gbW9tZW50KHN0YXJ0RGF0ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudGltZVBpY2tlcilcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5zdGFydERhdGUuc3RhcnRPZignZGF5Jyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyICYmIHRoaXMudGltZVBpY2tlckluY3JlbWVudClcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLm1pbnV0ZShNYXRoLnJvdW5kKHRoaXMuc3RhcnREYXRlLm1pbnV0ZSgpIC8gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KSAqIHRoaXMudGltZVBpY2tlckluY3JlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5taW5EYXRlICYmIHRoaXMuc3RhcnREYXRlLmlzQmVmb3JlKHRoaXMubWluRGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gdGhpcy5taW5EYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyICYmIHRoaXMudGltZVBpY2tlckluY3JlbWVudClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZS5taW51dGUoTWF0aC5yb3VuZCh0aGlzLnN0YXJ0RGF0ZS5taW51dGUoKSAvIHRoaXMudGltZVBpY2tlckluY3JlbWVudCkgKiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlICYmIHRoaXMuc3RhcnREYXRlLmlzQWZ0ZXIodGhpcy5tYXhEYXRlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLm1heERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIgJiYgdGhpcy50aW1lUGlja2VySW5jcmVtZW50KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLm1pbnV0ZShNYXRoLmZsb29yKHRoaXMuc3RhcnREYXRlLm1pbnV0ZSgpIC8gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KSAqIHRoaXMudGltZVBpY2tlckluY3JlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2V0RW5kRGF0ZTogZnVuY3Rpb24oZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGVuZERhdGUgPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gbW9tZW50KGVuZERhdGUsIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodHlwZW9mIGVuZERhdGUgPT09ICdvYmplY3QnKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gbW9tZW50KGVuZERhdGUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLmVuZERhdGUuZW5kT2YoJ2RheScpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlciAmJiB0aGlzLnRpbWVQaWNrZXJJbmNyZW1lbnQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUubWludXRlKE1hdGgucm91bmQodGhpcy5lbmREYXRlLm1pbnV0ZSgpIC8gdGhpcy50aW1lUGlja2VySW5jcmVtZW50KSAqIHRoaXMudGltZVBpY2tlckluY3JlbWVudCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5lbmREYXRlLmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXhEYXRlICYmIHRoaXMuZW5kRGF0ZS5pc0FmdGVyKHRoaXMubWF4RGF0ZSkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLm1heERhdGUuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1heFNwYW4gJiYgdGhpcy5zdGFydERhdGUuY2xvbmUoKS5hZGQodGhpcy5tYXhTcGFuKS5pc0JlZm9yZSh0aGlzLmVuZERhdGUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKS5hZGQodGhpcy5tYXhTcGFuKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNSaWdodFRpbWUgPSB0aGlzLmVuZERhdGUuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5kcnAtc2VsZWN0ZWQnKS5odG1sKHRoaXMuc3RhcnREYXRlLmZvcm1hdCh0aGlzLmxvY2FsZS5mb3JtYXQpICsgdGhpcy5sb2NhbGUuc2VwYXJhdG9yICsgdGhpcy5lbmREYXRlLmZvcm1hdCh0aGlzLmxvY2FsZS5mb3JtYXQpKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaXNJbnZhbGlkRGF0ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBpc0N1c3RvbURhdGU6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdXBkYXRlVmlldzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyVGltZVBpY2tlcignbGVmdCcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKCdyaWdodCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuZERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLmNhbGVuZGFyLXRpbWUgc2VsZWN0JykucHJvcCgnZGlzYWJsZWQnLCB0cnVlKS5hZGRDbGFzcygnZGlzYWJsZWQnKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLnJpZ2h0IC5jYWxlbmRhci10aW1lIHNlbGVjdCcpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCcuZHJwLXNlbGVjdGVkJykuaHRtbCh0aGlzLnN0YXJ0RGF0ZS5mb3JtYXQodGhpcy5sb2NhbGUuZm9ybWF0KSArIHRoaXMubG9jYWxlLnNlcGFyYXRvciArIHRoaXMuZW5kRGF0ZS5mb3JtYXQodGhpcy5sb2NhbGUuZm9ybWF0KSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTW9udGhzSW5WaWV3KCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybUlucHV0cygpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHVwZGF0ZU1vbnRoc0luVmlldzogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAvL2lmIGJvdGggZGF0ZXMgYXJlIHZpc2libGUgYWxyZWFkeSwgZG8gbm90aGluZ1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNpbmdsZURhdGVQaWNrZXIgJiYgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggJiYgdGhpcy5yaWdodENhbGVuZGFyLm1vbnRoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTScpID09IHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLmZvcm1hdCgnWVlZWS1NTScpIHx8IHRoaXMuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTScpID09IHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5mb3JtYXQoJ1lZWVktTU0nKSlcclxuICAgICAgICAgICAgICAgICAgICAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmVuZERhdGUuZm9ybWF0KCdZWVlZLU1NJykgPT0gdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGguZm9ybWF0KCdZWVlZLU1NJykgfHwgdGhpcy5lbmREYXRlLmZvcm1hdCgnWVlZWS1NTScpID09IHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5mb3JtYXQoJ1lZWVktTU0nKSlcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpLmRhdGUoMik7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubGlua2VkQ2FsZW5kYXJzICYmICh0aGlzLmVuZERhdGUubW9udGgoKSAhPSB0aGlzLnN0YXJ0RGF0ZS5tb250aCgpIHx8IHRoaXMuZW5kRGF0ZS55ZWFyKCkgIT0gdGhpcy5zdGFydERhdGUueWVhcigpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMuZW5kRGF0ZS5jbG9uZSgpLmRhdGUoMik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCkuZGF0ZSgyKS5hZGQoMSwgJ21vbnRoJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLmZvcm1hdCgnWVlZWS1NTScpICE9IHRoaXMuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTScpICYmIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5mb3JtYXQoJ1lZWVktTU0nKSAhPSB0aGlzLnN0YXJ0RGF0ZS5mb3JtYXQoJ1lZWVktTU0nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKS5kYXRlKDIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCkuZGF0ZSgyKS5hZGQoMSwgJ21vbnRoJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSAmJiB0aGlzLmxpbmtlZENhbGVuZGFycyAmJiAhdGhpcy5zaW5nbGVEYXRlUGlja2VyICYmIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA+IHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aCA9IHRoaXMubWF4RGF0ZS5jbG9uZSgpLmRhdGUoMik7XHJcbiAgICAgICAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGggPSB0aGlzLm1heERhdGUuY2xvbmUoKS5kYXRlKDIpLnN1YnRyYWN0KDEsICdtb250aCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdXBkYXRlQ2FsZW5kYXJzOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVQaWNrZXIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBob3VyLCBtaW51dGUsIHNlY29uZDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBob3VyID0gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLmhvdXJzZWxlY3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5sZWZ0IC5taW51dGVzZWxlY3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihtaW51dGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5sZWZ0IC5taW51dGVzZWxlY3Qgb3B0aW9uOmxhc3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZWNvbmQgPSB0aGlzLnRpbWVQaWNrZXJTZWNvbmRzID8gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLnNlY29uZHNlbGVjdCcpLnZhbCgpLCAxMCkgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyMjRIb3VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbXBtID0gdGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLmFtcG1zZWxlY3QnKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFtcG0gPT09ICdQTScgJiYgaG91ciA8IDEyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91ciArPSAxMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFtcG0gPT09ICdBTScgJiYgaG91ciA9PT0gMTIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyID0gMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGhvdXIgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLmhvdXJzZWxlY3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5yaWdodCAubWludXRlc2VsZWN0JykudmFsKCksIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4obWludXRlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW51dGUgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLm1pbnV0ZXNlbGVjdCBvcHRpb246bGFzdCcpLnZhbCgpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZCA9IHRoaXMudGltZVBpY2tlclNlY29uZHMgPyBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLnNlY29uZHNlbGVjdCcpLnZhbCgpLCAxMCkgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyMjRIb3VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbXBtID0gdGhpcy5jb250YWluZXIuZmluZCgnLnJpZ2h0IC5hbXBtc2VsZWN0JykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIGhvdXIgPCAxMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIGhvdXIgPT09IDEyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGguaG91cihob3VyKS5taW51dGUobWludXRlKS5zZWNvbmQoc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpLnNlY29uZChzZWNvbmQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlckNhbGVuZGFyKCdsZWZ0Jyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ2FsZW5kYXIoJ3JpZ2h0Jyk7XHJcblxyXG4gICAgICAgICAgICAvL2hpZ2hsaWdodCBhbnkgcHJlZGVmaW5lZCByYW5nZSBtYXRjaGluZyB0aGUgY3VycmVudCBzdGFydCBhbmQgZW5kIGRhdGVzXHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJy5yYW5nZXMgbGknKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUgPT0gbnVsbCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDaG9zZW5MYWJlbCgpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHJlbmRlckNhbGVuZGFyOiBmdW5jdGlvbihzaWRlKSB7XHJcblxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAvLyBCdWlsZCB0aGUgbWF0cml4IG9mIGRhdGVzIHRoYXQgd2lsbCBwb3B1bGF0ZSB0aGUgY2FsZW5kYXJcclxuICAgICAgICAgICAgLy9cclxuXHJcbiAgICAgICAgICAgIHZhciBjYWxlbmRhciA9IHNpZGUgPT0gJ2xlZnQnID8gdGhpcy5sZWZ0Q2FsZW5kYXIgOiB0aGlzLnJpZ2h0Q2FsZW5kYXI7XHJcbiAgICAgICAgICAgIHZhciBtb250aCA9IGNhbGVuZGFyLm1vbnRoLm1vbnRoKCk7XHJcbiAgICAgICAgICAgIHZhciB5ZWFyID0gY2FsZW5kYXIubW9udGgueWVhcigpO1xyXG4gICAgICAgICAgICB2YXIgaG91ciA9IGNhbGVuZGFyLm1vbnRoLmhvdXIoKTtcclxuICAgICAgICAgICAgdmFyIG1pbnV0ZSA9IGNhbGVuZGFyLm1vbnRoLm1pbnV0ZSgpO1xyXG4gICAgICAgICAgICB2YXIgc2Vjb25kID0gY2FsZW5kYXIubW9udGguc2Vjb25kKCk7XHJcbiAgICAgICAgICAgIHZhciBkYXlzSW5Nb250aCA9IG1vbWVudChbeWVhciwgbW9udGhdKS5kYXlzSW5Nb250aCgpO1xyXG4gICAgICAgICAgICB2YXIgZmlyc3REYXkgPSBtb21lbnQoW3llYXIsIG1vbnRoLCAxXSk7XHJcbiAgICAgICAgICAgIHZhciBsYXN0RGF5ID0gbW9tZW50KFt5ZWFyLCBtb250aCwgZGF5c0luTW9udGhdKTtcclxuICAgICAgICAgICAgdmFyIGxhc3RNb250aCA9IG1vbWVudChmaXJzdERheSkuc3VidHJhY3QoMSwgJ21vbnRoJykubW9udGgoKTtcclxuICAgICAgICAgICAgdmFyIGxhc3RZZWFyID0gbW9tZW50KGZpcnN0RGF5KS5zdWJ0cmFjdCgxLCAnbW9udGgnKS55ZWFyKCk7XHJcbiAgICAgICAgICAgIHZhciBkYXlzSW5MYXN0TW9udGggPSBtb21lbnQoW2xhc3RZZWFyLCBsYXN0TW9udGhdKS5kYXlzSW5Nb250aCgpO1xyXG4gICAgICAgICAgICB2YXIgZGF5T2ZXZWVrID0gZmlyc3REYXkuZGF5KCk7XHJcblxyXG4gICAgICAgICAgICAvL2luaXRpYWxpemUgYSA2IHJvd3MgeCA3IGNvbHVtbnMgYXJyYXkgZm9yIHRoZSBjYWxlbmRhclxyXG4gICAgICAgICAgICB2YXIgY2FsZW5kYXIgPSBbXTtcclxuICAgICAgICAgICAgY2FsZW5kYXIuZmlyc3REYXkgPSBmaXJzdERheTtcclxuICAgICAgICAgICAgY2FsZW5kYXIubGFzdERheSA9IGxhc3REYXk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY2FsZW5kYXJbaV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9wb3B1bGF0ZSB0aGUgY2FsZW5kYXIgd2l0aCBkYXRlIG9iamVjdHNcclxuICAgICAgICAgICAgdmFyIHN0YXJ0RGF5ID0gZGF5c0luTGFzdE1vbnRoIC0gZGF5T2ZXZWVrICsgdGhpcy5sb2NhbGUuZmlyc3REYXkgKyAxO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnREYXkgPiBkYXlzSW5MYXN0TW9udGgpXHJcbiAgICAgICAgICAgICAgICBzdGFydERheSAtPSA3O1xyXG5cclxuICAgICAgICAgICAgaWYgKGRheU9mV2VlayA9PSB0aGlzLmxvY2FsZS5maXJzdERheSlcclxuICAgICAgICAgICAgICAgIHN0YXJ0RGF5ID0gZGF5c0luTGFzdE1vbnRoIC0gNjtcclxuXHJcbiAgICAgICAgICAgIHZhciBjdXJEYXRlID0gbW9tZW50KFtsYXN0WWVhciwgbGFzdE1vbnRoLCBzdGFydERheSwgMTIsIG1pbnV0ZSwgc2Vjb25kXSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgY29sLCByb3c7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBjb2wgPSAwLCByb3cgPSAwOyBpIDwgNDI7IGkrKywgY29sKyssIGN1ckRhdGUgPSBtb21lbnQoY3VyRGF0ZSkuYWRkKDI0LCAnaG91cicpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDAgJiYgY29sICUgNyA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93Kys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYWxlbmRhcltyb3ddW2NvbF0gPSBjdXJEYXRlLmNsb25lKCkuaG91cihob3VyKS5taW51dGUobWludXRlKS5zZWNvbmQoc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgIGN1ckRhdGUuaG91cigxMik7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWluRGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5taW5EYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmIGNhbGVuZGFyW3Jvd11bY29sXS5pc0JlZm9yZSh0aGlzLm1pbkRhdGUpICYmIHNpZGUgPT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gdGhpcy5taW5EYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5tYXhEYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmIGNhbGVuZGFyW3Jvd11bY29sXS5pc0FmdGVyKHRoaXMubWF4RGF0ZSkgJiYgc2lkZSA9PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJbcm93XVtjb2xdID0gdGhpcy5tYXhEYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL21ha2UgdGhlIGNhbGVuZGFyIG9iamVjdCBhdmFpbGFibGUgdG8gaG92ZXJEYXRlL2NsaWNrRGF0ZVxyXG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnbGVmdCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLmNhbGVuZGFyID0gY2FsZW5kYXI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIuY2FsZW5kYXIgPSBjYWxlbmRhcjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgLy8gRGlzcGxheSB0aGUgY2FsZW5kYXJcclxuICAgICAgICAgICAgLy9cclxuXHJcbiAgICAgICAgICAgIHZhciBtaW5EYXRlID0gc2lkZSA9PSAnbGVmdCcgPyB0aGlzLm1pbkRhdGUgOiB0aGlzLnN0YXJ0RGF0ZTtcclxuICAgICAgICAgICAgdmFyIG1heERhdGUgPSB0aGlzLm1heERhdGU7XHJcbiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IHNpZGUgPT0gJ2xlZnQnID8gdGhpcy5zdGFydERhdGUgOiB0aGlzLmVuZERhdGU7XHJcbiAgICAgICAgICAgIHZhciBhcnJvdyA9IHRoaXMubG9jYWxlLmRpcmVjdGlvbiA9PSAnbHRyJyA/IHtsZWZ0OiAnY2hldnJvbi1sZWZ0JywgcmlnaHQ6ICdjaGV2cm9uLXJpZ2h0J30gOiB7bGVmdDogJ2NoZXZyb24tcmlnaHQnLCByaWdodDogJ2NoZXZyb24tbGVmdCd9O1xyXG5cclxuICAgICAgICAgICAgdmFyIGh0bWwgPSAnPHRhYmxlIGNsYXNzPVwidGFibGUtY29uZGVuc2VkXCI+JztcclxuICAgICAgICAgICAgaHRtbCArPSAnPHRoZWFkPic7XHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzx0cj4nO1xyXG5cclxuICAgICAgICAgICAgLy8gYWRkIGVtcHR5IGNlbGwgZm9yIHdlZWsgbnVtYmVyXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dXZWVrTnVtYmVycyB8fCB0aGlzLnNob3dJU09XZWVrTnVtYmVycylcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0aD48L3RoPic7XHJcblxyXG4gICAgICAgICAgICBpZiAoKCFtaW5EYXRlIHx8IG1pbkRhdGUuaXNCZWZvcmUoY2FsZW5kYXIuZmlyc3REYXkpKSAmJiAoIXRoaXMubGlua2VkQ2FsZW5kYXJzIHx8IHNpZGUgPT0gJ2xlZnQnKSkge1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPHRoIGNsYXNzPVwicHJldiBhdmFpbGFibGVcIj48c3Bhbj48L3NwYW4+PC90aD4nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPHRoPjwvdGg+JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGRhdGVIdG1sID0gdGhpcy5sb2NhbGUubW9udGhOYW1lc1tjYWxlbmRhclsxXVsxXS5tb250aCgpXSArIGNhbGVuZGFyWzFdWzFdLmZvcm1hdChcIiBZWVlZXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0Ryb3Bkb3ducykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRNb250aCA9IGNhbGVuZGFyWzFdWzFdLm1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudFllYXIgPSBjYWxlbmRhclsxXVsxXS55ZWFyKCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgbWF4WWVhciA9IChtYXhEYXRlICYmIG1heERhdGUueWVhcigpKSB8fCAodGhpcy5tYXhZZWFyKTtcclxuICAgICAgICAgICAgICAgIHZhciBtaW5ZZWFyID0gKG1pbkRhdGUgJiYgbWluRGF0ZS55ZWFyKCkpIHx8ICh0aGlzLm1pblllYXIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGluTWluWWVhciA9IGN1cnJlbnRZZWFyID09IG1pblllYXI7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW5NYXhZZWFyID0gY3VycmVudFllYXIgPT0gbWF4WWVhcjtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgbW9udGhIdG1sID0gJzxzZWxlY3QgY2xhc3M9XCJtb250aHNlbGVjdFwiPic7XHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBtID0gMDsgbSA8IDEyOyBtKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKCFpbk1pblllYXIgfHwgKG1pbkRhdGUgJiYgbSA+PSBtaW5EYXRlLm1vbnRoKCkpKSAmJiAoIWluTWF4WWVhciB8fCAobWF4RGF0ZSAmJiBtIDw9IG1heERhdGUubW9udGgoKSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoSHRtbCArPSBcIjxvcHRpb24gdmFsdWU9J1wiICsgbSArIFwiJ1wiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtID09PSBjdXJyZW50TW9udGggPyBcIiBzZWxlY3RlZD0nc2VsZWN0ZWQnXCIgOiBcIlwiKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj5cIiArIHRoaXMubG9jYWxlLm1vbnRoTmFtZXNbbV0gKyBcIjwvb3B0aW9uPlwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoSHRtbCArPSBcIjxvcHRpb24gdmFsdWU9J1wiICsgbSArIFwiJ1wiICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtID09PSBjdXJyZW50TW9udGggPyBcIiBzZWxlY3RlZD0nc2VsZWN0ZWQnXCIgOiBcIlwiKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBkaXNhYmxlZD0nZGlzYWJsZWQnPlwiICsgdGhpcy5sb2NhbGUubW9udGhOYW1lc1ttXSArIFwiPC9vcHRpb24+XCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbW9udGhIdG1sICs9IFwiPC9zZWxlY3Q+XCI7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHllYXJIdG1sID0gJzxzZWxlY3QgY2xhc3M9XCJ5ZWFyc2VsZWN0XCI+JztcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHkgPSBtaW5ZZWFyOyB5IDw9IG1heFllYXI7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHllYXJIdG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIHkgKyAnXCInICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKHkgPT09IGN1cnJlbnRZZWFyID8gJyBzZWxlY3RlZD1cInNlbGVjdGVkXCInIDogJycpICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJz4nICsgeSArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgeWVhckh0bWwgKz0gJzwvc2VsZWN0Pic7XHJcblxyXG4gICAgICAgICAgICAgICAgZGF0ZUh0bWwgPSBtb250aEh0bWwgKyB5ZWFySHRtbDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaHRtbCArPSAnPHRoIGNvbHNwYW49XCI1XCIgY2xhc3M9XCJtb250aFwiPicgKyBkYXRlSHRtbCArICc8L3RoPic7XHJcbiAgICAgICAgICAgIGlmICgoIW1heERhdGUgfHwgbWF4RGF0ZS5pc0FmdGVyKGNhbGVuZGFyLmxhc3REYXkpKSAmJiAoIXRoaXMubGlua2VkQ2FsZW5kYXJzIHx8IHNpZGUgPT0gJ3JpZ2h0JyB8fCB0aGlzLnNpbmdsZURhdGVQaWNrZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8dGggY2xhc3M9XCJuZXh0IGF2YWlsYWJsZVwiPjxzcGFuPjwvc3Bhbj48L3RoPic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8dGg+PC90aD4nO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBodG1sICs9ICc8L3RyPic7XHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzx0cj4nO1xyXG5cclxuICAgICAgICAgICAgLy8gYWRkIHdlZWsgbnVtYmVyIGxhYmVsXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dXZWVrTnVtYmVycyB8fCB0aGlzLnNob3dJU09XZWVrTnVtYmVycylcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzx0aCBjbGFzcz1cIndlZWtcIj4nICsgdGhpcy5sb2NhbGUud2Vla0xhYmVsICsgJzwvdGg+JztcclxuXHJcbiAgICAgICAgICAgICQuZWFjaCh0aGlzLmxvY2FsZS5kYXlzT2ZXZWVrLCBmdW5jdGlvbihpbmRleCwgZGF5T2ZXZWVrKSB7XHJcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8dGg+JyArIGRheU9mV2VlayArICc8L3RoPic7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaHRtbCArPSAnPC90cj4nO1xyXG4gICAgICAgICAgICBodG1sICs9ICc8L3RoZWFkPic7XHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzx0Ym9keT4nO1xyXG5cclxuICAgICAgICAgICAgLy9hZGp1c3QgbWF4RGF0ZSB0byByZWZsZWN0IHRoZSBtYXhTcGFuIHNldHRpbmcgaW4gb3JkZXIgdG9cclxuICAgICAgICAgICAgLy9ncmV5IG91dCBlbmQgZGF0ZXMgYmV5b25kIHRoZSBtYXhTcGFuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUgPT0gbnVsbCAmJiB0aGlzLm1heFNwYW4pIHtcclxuICAgICAgICAgICAgICAgIHZhciBtYXhMaW1pdCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCkuYWRkKHRoaXMubWF4U3BhbikuZW5kT2YoJ2RheScpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXhEYXRlIHx8IG1heExpbWl0LmlzQmVmb3JlKG1heERhdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4RGF0ZSA9IG1heExpbWl0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCA2OyByb3crKykge1xyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPHRyPic7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gYWRkIHdlZWsgbnVtYmVyXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaG93V2Vla051bWJlcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPHRkIGNsYXNzPVwid2Vla1wiPicgKyBjYWxlbmRhcltyb3ddWzBdLndlZWsoKSArICc8L3RkPic7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNob3dJU09XZWVrTnVtYmVycylcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8dGQgY2xhc3M9XCJ3ZWVrXCI+JyArIGNhbGVuZGFyW3Jvd11bMF0uaXNvV2VlaygpICsgJzwvdGQ+JztcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPCA3OyBjb2wrKykge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgY2xhc3NlcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2hpZ2hsaWdodCB0b2RheSdzIGRhdGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsZW5kYXJbcm93XVtjb2xdLmlzU2FtZShuZXcgRGF0ZSgpLCBcImRheVwiKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCd0b2RheScpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2hpZ2hsaWdodCB3ZWVrZW5kc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0uaXNvV2Vla2RheSgpID4gNSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCd3ZWVrZW5kJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vZ3JleSBvdXQgdGhlIGRhdGVzIGluIG90aGVyIG1vbnRocyBkaXNwbGF5ZWQgYXQgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhpcyBjYWxlbmRhclxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0ubW9udGgoKSAhPSBjYWxlbmRhclsxXVsxXS5tb250aCgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ29mZicsICdlbmRzJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vZG9uJ3QgYWxsb3cgc2VsZWN0aW9uIG9mIGRhdGVzIGJlZm9yZSB0aGUgbWluaW11bSBkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWluRGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNCZWZvcmUodGhpcy5taW5EYXRlLCAnZGF5JykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJywgJ2Rpc2FibGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vZG9uJ3QgYWxsb3cgc2VsZWN0aW9uIG9mIGRhdGVzIGFmdGVyIHRoZSBtYXhpbXVtIGRhdGVcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF4RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0uaXNBZnRlcihtYXhEYXRlLCAnZGF5JykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJywgJ2Rpc2FibGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vZG9uJ3QgYWxsb3cgc2VsZWN0aW9uIG9mIGRhdGUgaWYgYSBjdXN0b20gZnVuY3Rpb24gZGVjaWRlcyBpdCdzIGludmFsaWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0ludmFsaWREYXRlKGNhbGVuZGFyW3Jvd11bY29sXSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnb2ZmJywgJ2Rpc2FibGVkJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vaGlnaGxpZ2h0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RhcnQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5zdGFydERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnYWN0aXZlJywgJ3N0YXJ0LWRhdGUnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9oaWdobGlnaHQgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBlbmQgZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUgIT0gbnVsbCAmJiBjYWxlbmRhcltyb3ddW2NvbF0uZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5lbmREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzLnB1c2goJ2FjdGl2ZScsICdlbmQtZGF0ZScpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvL2hpZ2hsaWdodCBkYXRlcyBpbi1iZXR3ZWVuIHRoZSBzZWxlY3RlZCBkYXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuZERhdGUgIT0gbnVsbCAmJiBjYWxlbmRhcltyb3ddW2NvbF0gPiB0aGlzLnN0YXJ0RGF0ZSAmJiBjYWxlbmRhcltyb3ddW2NvbF0gPCB0aGlzLmVuZERhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzZXMucHVzaCgnaW4tcmFuZ2UnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy9hcHBseSBjdXN0b20gY2xhc3NlcyBmb3IgdGhpcyBkYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzQ3VzdG9tID0gdGhpcy5pc0N1c3RvbURhdGUoY2FsZW5kYXJbcm93XVtjb2xdKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDdXN0b20gIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXNDdXN0b20gPT09ICdzdHJpbmcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKGlzQ3VzdG9tKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoY2xhc3NlcywgaXNDdXN0b20pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNuYW1lID0gJycsIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNuYW1lICs9IGNsYXNzZXNbaV0gKyAnICc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc2VzW2ldID09ICdkaXNhYmxlZCcpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGlzYWJsZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNuYW1lICs9ICdhdmFpbGFibGUnO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8dGQgY2xhc3M9XCInICsgY25hbWUucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpICsgJ1wiIGRhdGEtdGl0bGU9XCInICsgJ3InICsgcm93ICsgJ2MnICsgY29sICsgJ1wiPicgKyBjYWxlbmRhcltyb3ddW2NvbF0uZGF0ZSgpICsgJzwvdGQ+JztcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBodG1sICs9ICc8L3RyPic7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzwvdGJvZHk+JztcclxuICAgICAgICAgICAgaHRtbCArPSAnPC90YWJsZT4nO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhci4nICsgc2lkZSArICcgLmNhbGVuZGFyLXRhYmxlJykuaHRtbChodG1sKTtcclxuXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcmVuZGVyVGltZVBpY2tlcjogZnVuY3Rpb24oc2lkZSkge1xyXG5cclxuICAgICAgICAgICAgLy8gRG9uJ3QgYm90aGVyIHVwZGF0aW5nIHRoZSB0aW1lIHBpY2tlciBpZiBpdCdzIGN1cnJlbnRseSBkaXNhYmxlZFxyXG4gICAgICAgICAgICAvLyBiZWNhdXNlIGFuIGVuZCBkYXRlIGhhc24ndCBiZWVuIGNsaWNrZWQgeWV0XHJcbiAgICAgICAgICAgIGlmIChzaWRlID09ICdyaWdodCcgJiYgIXRoaXMuZW5kRGF0ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdmFyIGh0bWwsIHNlbGVjdGVkLCBtaW5EYXRlLCBtYXhEYXRlID0gdGhpcy5tYXhEYXRlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubWF4U3BhbiAmJiAoIXRoaXMubWF4RGF0ZSB8fCB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpLmFkZCh0aGlzLm1heFNwYW4pLmlzQmVmb3JlKHRoaXMubWF4RGF0ZSkpKVxyXG4gICAgICAgICAgICAgICAgbWF4RGF0ZSA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCkuYWRkKHRoaXMubWF4U3Bhbik7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2lkZSA9PSAnbGVmdCcpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkID0gdGhpcy5zdGFydERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIG1pbkRhdGUgPSB0aGlzLm1pbkRhdGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2lkZSA9PSAncmlnaHQnKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHRoaXMuZW5kRGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgbWluRGF0ZSA9IHRoaXMuc3RhcnREYXRlO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vUHJlc2VydmUgdGhlIHRpbWUgYWxyZWFkeSBzZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgdmFyIHRpbWVTZWxlY3RvciA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy5kcnAtY2FsZW5kYXIucmlnaHQgLmNhbGVuZGFyLXRpbWUnKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aW1lU2VsZWN0b3IuaHRtbCgpICE9ICcnKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLmhvdXIoIWlzTmFOKHNlbGVjdGVkLmhvdXIoKSkgPyBzZWxlY3RlZC5ob3VyKCkgOiB0aW1lU2VsZWN0b3IuZmluZCgnLmhvdXJzZWxlY3Qgb3B0aW9uOnNlbGVjdGVkJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkLm1pbnV0ZSghaXNOYU4oc2VsZWN0ZWQubWludXRlKCkpID8gc2VsZWN0ZWQubWludXRlKCkgOiB0aW1lU2VsZWN0b3IuZmluZCgnLm1pbnV0ZXNlbGVjdCBvcHRpb246c2VsZWN0ZWQnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQuc2Vjb25kKCFpc05hTihzZWxlY3RlZC5zZWNvbmQoKSkgPyBzZWxlY3RlZC5zZWNvbmQoKSA6IHRpbWVTZWxlY3Rvci5maW5kKCcuc2Vjb25kc2VsZWN0IG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIyNEhvdXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFtcG0gPSB0aW1lU2VsZWN0b3IuZmluZCgnLmFtcG1zZWxlY3Qgb3B0aW9uOnNlbGVjdGVkJykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIHNlbGVjdGVkLmhvdXIoKSA8IDEyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQuaG91cihzZWxlY3RlZC5ob3VyKCkgKyAxMik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIHNlbGVjdGVkLmhvdXIoKSA9PT0gMTIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZC5ob3VyKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1heERhdGUgJiYgc2VsZWN0ZWQuaXNBZnRlcihtYXhEYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IG1heERhdGUuY2xvbmUoKTtcclxuXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIC8vIGhvdXJzXHJcbiAgICAgICAgICAgIC8vXHJcblxyXG4gICAgICAgICAgICBodG1sID0gJzxzZWxlY3QgY2xhc3M9XCJob3Vyc2VsZWN0XCI+JztcclxuXHJcbiAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMudGltZVBpY2tlcjI0SG91ciA/IDAgOiAxO1xyXG4gICAgICAgICAgICB2YXIgZW5kID0gdGhpcy50aW1lUGlja2VyMjRIb3VyID8gMjMgOiAxMjtcclxuXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBlbmQ7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGlfaW5fMjQgPSBpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIyNEhvdXIpXHJcbiAgICAgICAgICAgICAgICAgICAgaV9pbl8yNCA9IHNlbGVjdGVkLmhvdXIoKSA+PSAxMiA/IChpID09IDEyID8gMTIgOiBpICsgMTIpIDogKGkgPT0gMTIgPyAwIDogaSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHRpbWUgPSBzZWxlY3RlZC5jbG9uZSgpLmhvdXIoaV9pbl8yNCk7XHJcbiAgICAgICAgICAgICAgICB2YXIgZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIHRpbWUubWludXRlKDU5KS5pc0JlZm9yZShtaW5EYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF4RGF0ZSAmJiB0aW1lLm1pbnV0ZSgwKS5pc0FmdGVyKG1heERhdGUpKVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaV9pbl8yNCA9PSBzZWxlY3RlZC5ob3VyKCkgJiYgIWRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpICsgJ1wiIHNlbGVjdGVkPVwic2VsZWN0ZWRcIj4nICsgaSArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIiBkaXNhYmxlZD1cImRpc2FibGVkXCIgY2xhc3M9XCJkaXNhYmxlZFwiPicgKyBpICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIj4nICsgaSArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBodG1sICs9ICc8L3NlbGVjdD4gJztcclxuXHJcbiAgICAgICAgICAgIC8vXHJcbiAgICAgICAgICAgIC8vIG1pbnV0ZXNcclxuICAgICAgICAgICAgLy9cclxuXHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzogPHNlbGVjdCBjbGFzcz1cIm1pbnV0ZXNlbGVjdFwiPic7XHJcblxyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDYwOyBpICs9IHRoaXMudGltZVBpY2tlckluY3JlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHBhZGRlZCA9IGkgPCAxMCA/ICcwJyArIGkgOiBpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHRpbWUgPSBzZWxlY3RlZC5jbG9uZSgpLm1pbnV0ZShpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIHRpbWUuc2Vjb25kKDU5KS5pc0JlZm9yZShtaW5EYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAobWF4RGF0ZSAmJiB0aW1lLnNlY29uZCgwKS5pc0FmdGVyKG1heERhdGUpKVxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQubWludXRlKCkgPT0gaSAmJiAhZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCIgc2VsZWN0ZWQ9XCJzZWxlY3RlZFwiPicgKyBwYWRkZWQgKyAnPC9vcHRpb24+JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiJyArIGkgKyAnXCIgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiIGNsYXNzPVwiZGlzYWJsZWRcIj4nICsgcGFkZGVkICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIj4nICsgcGFkZGVkICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGh0bWwgKz0gJzwvc2VsZWN0PiAnO1xyXG5cclxuICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgLy8gc2Vjb25kc1xyXG4gICAgICAgICAgICAvL1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZVBpY2tlclNlY29uZHMpIHtcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzogPHNlbGVjdCBjbGFzcz1cInNlY29uZHNlbGVjdFwiPic7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2MDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhZGRlZCA9IGkgPCAxMCA/ICcwJyArIGkgOiBpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aW1lID0gc2VsZWN0ZWQuY2xvbmUoKS5zZWNvbmQoaSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaW5EYXRlICYmIHRpbWUuaXNCZWZvcmUobWluRGF0ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF4RGF0ZSAmJiB0aW1lLmlzQWZ0ZXIobWF4RGF0ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkLnNlY29uZCgpID09IGkgJiYgIWRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIiBzZWxlY3RlZD1cInNlbGVjdGVkXCI+JyArIHBhZGRlZCArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIicgKyBpICsgJ1wiIGRpc2FibGVkPVwiZGlzYWJsZWRcIiBjbGFzcz1cImRpc2FibGVkXCI+JyArIHBhZGRlZCArICc8L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxvcHRpb24gdmFsdWU9XCInICsgaSArICdcIj4nICsgcGFkZGVkICsgJzwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzwvc2VsZWN0PiAnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAvLyBBTS9QTVxyXG4gICAgICAgICAgICAvL1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIyNEhvdXIpIHtcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxzZWxlY3QgY2xhc3M9XCJhbXBtc2VsZWN0XCI+JztcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgYW1faHRtbCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdmFyIHBtX2h0bWwgPSAnJztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobWluRGF0ZSAmJiBzZWxlY3RlZC5jbG9uZSgpLmhvdXIoMTIpLm1pbnV0ZSgwKS5zZWNvbmQoMCkuaXNCZWZvcmUobWluRGF0ZSkpXHJcbiAgICAgICAgICAgICAgICAgICAgYW1faHRtbCA9ICcgZGlzYWJsZWQ9XCJkaXNhYmxlZFwiIGNsYXNzPVwiZGlzYWJsZWRcIic7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG1heERhdGUgJiYgc2VsZWN0ZWQuY2xvbmUoKS5ob3VyKDApLm1pbnV0ZSgwKS5zZWNvbmQoMCkuaXNBZnRlcihtYXhEYXRlKSlcclxuICAgICAgICAgICAgICAgICAgICBwbV9odG1sID0gJyBkaXNhYmxlZD1cImRpc2FibGVkXCIgY2xhc3M9XCJkaXNhYmxlZFwiJztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQuaG91cigpID49IDEyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaHRtbCArPSAnPG9wdGlvbiB2YWx1ZT1cIkFNXCInICsgYW1faHRtbCArICc+QU08L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiUE1cIiBzZWxlY3RlZD1cInNlbGVjdGVkXCInICsgcG1faHRtbCArICc+UE08L29wdGlvbj4nO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBodG1sICs9ICc8b3B0aW9uIHZhbHVlPVwiQU1cIiBzZWxlY3RlZD1cInNlbGVjdGVkXCInICsgYW1faHRtbCArICc+QU08L29wdGlvbj48b3B0aW9uIHZhbHVlPVwiUE1cIicgKyBwbV9odG1sICsgJz5QTTwvb3B0aW9uPic7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPC9zZWxlY3Q+JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhci4nICsgc2lkZSArICcgLmNhbGVuZGFyLXRpbWUnKS5odG1sKGh0bWwpO1xyXG5cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICB1cGRhdGVGb3JtSW5wdXRzOiBmdW5jdGlvbigpIHtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNpbmdsZURhdGVQaWNrZXIgfHwgKHRoaXMuZW5kRGF0ZSAmJiAodGhpcy5zdGFydERhdGUuaXNCZWZvcmUodGhpcy5lbmREYXRlKSB8fCB0aGlzLnN0YXJ0RGF0ZS5pc1NhbWUodGhpcy5lbmREYXRlKSkpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5maW5kKCdidXR0b24uYXBwbHlCdG4nKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmZpbmQoJ2J1dHRvbi5hcHBseUJ0bicpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgbW92ZTogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9LFxyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyVG9wLFxyXG4gICAgICAgICAgICAgICAgZHJvcHMgPSB0aGlzLmRyb3BzO1xyXG5cclxuICAgICAgICAgICAgdmFyIHBhcmVudFJpZ2h0RWRnZSA9ICQod2luZG93KS53aWR0aCgpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMucGFyZW50RWwuaXMoJ2JvZHknKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50T2Zmc2V0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvcDogdGhpcy5wYXJlbnRFbC5vZmZzZXQoKS50b3AgLSB0aGlzLnBhcmVudEVsLnNjcm9sbFRvcCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IHRoaXMucGFyZW50RWwub2Zmc2V0KCkubGVmdCAtIHRoaXMucGFyZW50RWwuc2Nyb2xsTGVmdCgpXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcGFyZW50UmlnaHRFZGdlID0gdGhpcy5wYXJlbnRFbFswXS5jbGllbnRXaWR0aCArIHRoaXMucGFyZW50RWwub2Zmc2V0KCkubGVmdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgc3dpdGNoIChkcm9wcykge1xyXG4gICAgICAgICAgICBjYXNlICdhdXRvJzpcclxuICAgICAgICAgICAgICAgIGNvbnRhaW5lclRvcCA9IHRoaXMuZWxlbWVudC5vZmZzZXQoKS50b3AgKyB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSAtIHBhcmVudE9mZnNldC50b3A7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyVG9wICsgdGhpcy5jb250YWluZXIub3V0ZXJIZWlnaHQoKSA+PSB0aGlzLnBhcmVudEVsWzBdLnNjcm9sbEhlaWdodCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lclRvcCA9IHRoaXMuZWxlbWVudC5vZmZzZXQoKS50b3AgLSB0aGlzLmNvbnRhaW5lci5vdXRlckhlaWdodCgpIC0gcGFyZW50T2Zmc2V0LnRvcDtcclxuICAgICAgICAgICAgICAgICAgICBkcm9wcyA9ICd1cCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAndXAnOlxyXG4gICAgICAgICAgICAgICAgY29udGFpbmVyVG9wID0gdGhpcy5lbGVtZW50Lm9mZnNldCgpLnRvcCAtIHRoaXMuY29udGFpbmVyLm91dGVySGVpZ2h0KCkgLSBwYXJlbnRPZmZzZXQudG9wO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBjb250YWluZXJUb3AgPSB0aGlzLmVsZW1lbnQub2Zmc2V0KCkudG9wICsgdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCkgLSBwYXJlbnRPZmZzZXQudG9wO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEZvcmNlIHRoZSBjb250YWluZXIgdG8gaXQncyBhY3R1YWwgd2lkdGhcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICB0b3A6IDAsXHJcbiAgICAgICAgICAgICAgbGVmdDogMCxcclxuICAgICAgICAgICAgICByaWdodDogJ2F1dG8nXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB2YXIgY29udGFpbmVyV2lkdGggPSB0aGlzLmNvbnRhaW5lci5vdXRlcldpZHRoKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci50b2dnbGVDbGFzcygnZHJvcC11cCcsIGRyb3BzID09ICd1cCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbnMgPT0gJ2xlZnQnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyUmlnaHQgPSBwYXJlbnRSaWdodEVkZ2UgLSB0aGlzLmVsZW1lbnQub2Zmc2V0KCkubGVmdCAtIHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGFpbmVyV2lkdGggKyBjb250YWluZXJSaWdodCA+ICQod2luZG93KS53aWR0aCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjb250YWluZXJUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDlcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjb250YWluZXJUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBjb250YWluZXJSaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogJ2F1dG8nXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vcGVucyA9PSAnY2VudGVyJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lckxlZnQgPSB0aGlzLmVsZW1lbnQub2Zmc2V0KCkubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0ICsgdGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSAvIDJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gY29udGFpbmVyV2lkdGggLyAyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lckxlZnQgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjb250YWluZXJUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnYXV0bycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDlcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGFpbmVyTGVmdCArIGNvbnRhaW5lcldpZHRoID4gJCh3aW5kb3cpLndpZHRoKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGNvbnRhaW5lclRvcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogJ2F1dG8nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodDogMFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGNvbnRhaW5lclRvcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogY29udGFpbmVyTGVmdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6ICdhdXRvJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRhaW5lckxlZnQgPSB0aGlzLmVsZW1lbnQub2Zmc2V0KCkubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0O1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lckxlZnQgKyBjb250YWluZXJXaWR0aCA+ICQod2luZG93KS53aWR0aCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjb250YWluZXJUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6ICdhdXRvJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IDBcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBjb250YWluZXJUb3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGNvbnRhaW5lckxlZnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiAnYXV0bydcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIHNob3c6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTaG93aW5nKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBjbGljayBwcm94eSB0aGF0IGlzIHByaXZhdGUgdG8gdGhpcyBpbnN0YW5jZSBvZiBkYXRlcGlja2VyLCBmb3IgdW5iaW5kaW5nXHJcbiAgICAgICAgICAgIHRoaXMuX291dHNpZGVDbGlja1Byb3h5ID0gJC5wcm94eShmdW5jdGlvbihlKSB7IHRoaXMub3V0c2lkZUNsaWNrKGUpOyB9LCB0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEJpbmQgZ2xvYmFsIGRhdGVwaWNrZXIgbW91c2Vkb3duIGZvciBoaWRpbmcgYW5kXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpXHJcbiAgICAgICAgICAgICAgLm9uKCdtb3VzZWRvd24uZGF0ZXJhbmdlcGlja2VyJywgdGhpcy5fb3V0c2lkZUNsaWNrUHJveHkpXHJcbiAgICAgICAgICAgICAgLy8gYWxzbyBzdXBwb3J0IG1vYmlsZSBkZXZpY2VzXHJcbiAgICAgICAgICAgICAgLm9uKCd0b3VjaGVuZC5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzLl9vdXRzaWRlQ2xpY2tQcm94eSlcclxuICAgICAgICAgICAgICAvLyBhbHNvIGV4cGxpY2l0bHkgcGxheSBuaWNlIHdpdGggQm9vdHN0cmFwIGRyb3Bkb3ducywgd2hpY2ggc3RvcFByb3BhZ2F0aW9uIHdoZW4gY2xpY2tpbmcgdGhlbVxyXG4gICAgICAgICAgICAgIC5vbignY2xpY2suZGF0ZXJhbmdlcGlja2VyJywgJ1tkYXRhLXRvZ2dsZT1kcm9wZG93bl0nLCB0aGlzLl9vdXRzaWRlQ2xpY2tQcm94eSlcclxuICAgICAgICAgICAgICAvLyBhbmQgYWxzbyBjbG9zZSB3aGVuIGZvY3VzIGNoYW5nZXMgdG8gb3V0c2lkZSB0aGUgcGlja2VyIChlZy4gdGFiYmluZyBiZXR3ZWVuIGNvbnRyb2xzKVxyXG4gICAgICAgICAgICAgIC5vbignZm9jdXNpbi5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzLl9vdXRzaWRlQ2xpY2tQcm94eSk7XHJcblxyXG4gICAgICAgICAgICAvLyBSZXBvc2l0aW9uIHRoZSBwaWNrZXIgaWYgdGhlIHdpbmRvdyBpcyByZXNpemVkIHdoaWxlIGl0J3Mgb3BlblxyXG4gICAgICAgICAgICAkKHdpbmRvdykub24oJ3Jlc2l6ZS5kYXRlcmFuZ2VwaWNrZXInLCAkLnByb3h5KGZ1bmN0aW9uKGUpIHsgdGhpcy5tb3ZlKGUpOyB9LCB0aGlzKSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLm9sZFN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgIHRoaXMub2xkRW5kRGF0ZSA9IHRoaXMuZW5kRGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUmlnaHRUaW1lID0gdGhpcy5lbmREYXRlLmNsb25lKCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc2hvdygpO1xyXG4gICAgICAgICAgICB0aGlzLm1vdmUoKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRyaWdnZXIoJ3Nob3cuZGF0ZXJhbmdlcGlja2VyJywgdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTaG93aW5nID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBoaWRlOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1Nob3dpbmcpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIC8vaW5jb21wbGV0ZSBkYXRlIHNlbGVjdGlvbiwgcmV2ZXJ0IHRvIGxhc3QgdmFsdWVzXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lbmREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IHRoaXMub2xkU3RhcnREYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLm9sZEVuZERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy9pZiBhIG5ldyBkYXRlIHJhbmdlIHdhcyBzZWxlY3RlZCwgaW52b2tlIHRoZSB1c2VyIGNhbGxiYWNrIGZ1bmN0aW9uXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGFydERhdGUuaXNTYW1lKHRoaXMub2xkU3RhcnREYXRlKSB8fCAhdGhpcy5lbmREYXRlLmlzU2FtZSh0aGlzLm9sZEVuZERhdGUpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjayh0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpLCB0aGlzLmVuZERhdGUuY2xvbmUoKSwgdGhpcy5jaG9zZW5MYWJlbCk7XHJcblxyXG4gICAgICAgICAgICAvL2lmIHBpY2tlciBpcyBhdHRhY2hlZCB0byBhIHRleHQgaW5wdXQsIHVwZGF0ZSBpdFxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcclxuXHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZignLmRhdGVyYW5nZXBpY2tlcicpO1xyXG4gICAgICAgICAgICAkKHdpbmRvdykub2ZmKCcuZGF0ZXJhbmdlcGlja2VyJyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRyaWdnZXIoJ2hpZGUuZGF0ZXJhbmdlcGlja2VyJywgdGhpcyk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTaG93aW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdG9nZ2xlOiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2hvd2luZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3coKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIG91dHNpZGVDbGljazogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChlLnRhcmdldCk7XHJcbiAgICAgICAgICAgIC8vIGlmIHRoZSBwYWdlIGlzIGNsaWNrZWQgYW55d2hlcmUgZXhjZXB0IHdpdGhpbiB0aGUgZGF0ZXJhbmdlcnBpY2tlci9idXR0b25cclxuICAgICAgICAgICAgLy8gaXRzZWxmIHRoZW4gY2FsbCB0aGlzLmhpZGUoKVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAvLyBpZSBtb2RhbCBkaWFsb2cgZml4XHJcbiAgICAgICAgICAgICAgICBlLnR5cGUgPT0gXCJmb2N1c2luXCIgfHxcclxuICAgICAgICAgICAgICAgIHRhcmdldC5jbG9zZXN0KHRoaXMuZWxlbWVudCkubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuY2xvc2VzdCh0aGlzLmNvbnRhaW5lcikubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuY2xvc2VzdCgnLmNhbGVuZGFyLXRhYmxlJykubGVuZ3RoXHJcbiAgICAgICAgICAgICAgICApIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC50cmlnZ2VyKCdvdXRzaWRlQ2xpY2suZGF0ZXJhbmdlcGlja2VyJywgdGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgc2hvd0NhbGVuZGFyczogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCdzaG93LWNhbGVuZGFyJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcignc2hvd0NhbGVuZGFyLmRhdGVyYW5nZXBpY2tlcicsIHRoaXMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGhpZGVDYWxlbmRhcnM6IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDbGFzcygnc2hvdy1jYWxlbmRhcicpO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcignaGlkZUNhbGVuZGFyLmRhdGVyYW5nZXBpY2tlcicsIHRoaXMpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNsaWNrUmFuZ2U6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgdmFyIGxhYmVsID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLXJhbmdlLWtleScpO1xyXG4gICAgICAgICAgICB0aGlzLmNob3NlbkxhYmVsID0gbGFiZWw7XHJcbiAgICAgICAgICAgIGlmIChsYWJlbCA9PSB0aGlzLmxvY2FsZS5jdXN0b21SYW5nZUxhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dDYWxlbmRhcnMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRlcyA9IHRoaXMucmFuZ2VzW2xhYmVsXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlID0gZGF0ZXNbMF07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBkYXRlc1sxXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGltZVBpY2tlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnREYXRlLnN0YXJ0T2YoJ2RheScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kRGF0ZS5lbmRPZignZGF5Jyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFsd2F5c1Nob3dDYWxlbmRhcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlQ2FsZW5kYXJzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsaWNrQXBwbHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNsaWNrUHJldjogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICB2YXIgY2FsID0gJChlLnRhcmdldCkucGFyZW50cygnLmRycC1jYWxlbmRhcicpO1xyXG4gICAgICAgICAgICBpZiAoY2FsLmhhc0NsYXNzKCdsZWZ0JykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLnN1YnRyYWN0KDEsICdtb250aCcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGlua2VkQ2FsZW5kYXJzKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5zdWJ0cmFjdCgxLCAnbW9udGgnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5zdWJ0cmFjdCgxLCAnbW9udGgnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbGVuZGFycygpO1xyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNsaWNrTmV4dDogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICB2YXIgY2FsID0gJChlLnRhcmdldCkucGFyZW50cygnLmRycC1jYWxlbmRhcicpO1xyXG4gICAgICAgICAgICBpZiAoY2FsLmhhc0NsYXNzKCdsZWZ0JykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGVmdENhbGVuZGFyLm1vbnRoLmFkZCgxLCAnbW9udGgnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5hZGQoMSwgJ21vbnRoJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5saW5rZWRDYWxlbmRhcnMpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWZ0Q2FsZW5kYXIubW9udGguYWRkKDEsICdtb250aCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgaG92ZXJEYXRlOiBmdW5jdGlvbihlKSB7XHJcblxyXG4gICAgICAgICAgICAvL2lnbm9yZSBkYXRlcyB0aGF0IGNhbid0IGJlIHNlbGVjdGVkXHJcbiAgICAgICAgICAgIGlmICghJChlLnRhcmdldCkuaGFzQ2xhc3MoJ2F2YWlsYWJsZScpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICB2YXIgdGl0bGUgPSAkKGUudGFyZ2V0KS5hdHRyKCdkYXRhLXRpdGxlJyk7XHJcbiAgICAgICAgICAgIHZhciByb3cgPSB0aXRsZS5zdWJzdHIoMSwgMSk7XHJcbiAgICAgICAgICAgIHZhciBjb2wgPSB0aXRsZS5zdWJzdHIoMywgMSk7XHJcbiAgICAgICAgICAgIHZhciBjYWwgPSAkKGUudGFyZ2V0KS5wYXJlbnRzKCcuZHJwLWNhbGVuZGFyJyk7XHJcbiAgICAgICAgICAgIHZhciBkYXRlID0gY2FsLmhhc0NsYXNzKCdsZWZ0JykgPyB0aGlzLmxlZnRDYWxlbmRhci5jYWxlbmRhcltyb3ddW2NvbF0gOiB0aGlzLnJpZ2h0Q2FsZW5kYXIuY2FsZW5kYXJbcm93XVtjb2xdO1xyXG5cclxuICAgICAgICAgICAgLy9oaWdobGlnaHQgdGhlIGRhdGVzIGJldHdlZW4gdGhlIHN0YXJ0IGRhdGUgYW5kIHRoZSBkYXRlIGJlaW5nIGhvdmVyZWQgYXMgYSBwb3RlbnRpYWwgZW5kIGRhdGVcclxuICAgICAgICAgICAgdmFyIGxlZnRDYWxlbmRhciA9IHRoaXMubGVmdENhbGVuZGFyO1xyXG4gICAgICAgICAgICB2YXIgcmlnaHRDYWxlbmRhciA9IHRoaXMucmlnaHRDYWxlbmRhcjtcclxuICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZSA9IHRoaXMuc3RhcnREYXRlO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhciB0Ym9keSB0ZCcpLmVhY2goZnVuY3Rpb24oaW5kZXgsIGVsKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vc2tpcCB3ZWVrIG51bWJlcnMsIG9ubHkgbG9vayBhdCBkYXRlc1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgkKGVsKS5oYXNDbGFzcygnd2VlaycpKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciB0aXRsZSA9ICQoZWwpLmF0dHIoJ2RhdGEtdGl0bGUnKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gdGl0bGUuc3Vic3RyKDEsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb2wgPSB0aXRsZS5zdWJzdHIoMywgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbCA9ICQoZWwpLnBhcmVudHMoJy5kcnAtY2FsZW5kYXInKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgZHQgPSBjYWwuaGFzQ2xhc3MoJ2xlZnQnKSA/IGxlZnRDYWxlbmRhci5jYWxlbmRhcltyb3ddW2NvbF0gOiByaWdodENhbGVuZGFyLmNhbGVuZGFyW3Jvd11bY29sXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChkdC5pc0FmdGVyKHN0YXJ0RGF0ZSkgJiYgZHQuaXNCZWZvcmUoZGF0ZSkpIHx8IGR0LmlzU2FtZShkYXRlLCAnZGF5JykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChlbCkuYWRkQ2xhc3MoJ2luLXJhbmdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChlbCkucmVtb3ZlQ2xhc3MoJ2luLXJhbmdlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNsaWNrRGF0ZTogZnVuY3Rpb24oZSkge1xyXG5cclxuICAgICAgICAgICAgaWYgKCEkKGUudGFyZ2V0KS5oYXNDbGFzcygnYXZhaWxhYmxlJykpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIHZhciB0aXRsZSA9ICQoZS50YXJnZXQpLmF0dHIoJ2RhdGEtdGl0bGUnKTtcclxuICAgICAgICAgICAgdmFyIHJvdyA9IHRpdGxlLnN1YnN0cigxLCAxKTtcclxuICAgICAgICAgICAgdmFyIGNvbCA9IHRpdGxlLnN1YnN0cigzLCAxKTtcclxuICAgICAgICAgICAgdmFyIGNhbCA9ICQoZS50YXJnZXQpLnBhcmVudHMoJy5kcnAtY2FsZW5kYXInKTtcclxuICAgICAgICAgICAgdmFyIGRhdGUgPSBjYWwuaGFzQ2xhc3MoJ2xlZnQnKSA/IHRoaXMubGVmdENhbGVuZGFyLmNhbGVuZGFyW3Jvd11bY29sXSA6IHRoaXMucmlnaHRDYWxlbmRhci5jYWxlbmRhcltyb3ddW2NvbF07XHJcblxyXG4gICAgICAgICAgICAvL1xyXG4gICAgICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGRvIGEgZmV3IHRoaW5nczpcclxuICAgICAgICAgICAgLy8gKiBhbHRlcm5hdGUgYmV0d2VlbiBzZWxlY3RpbmcgYSBzdGFydCBhbmQgZW5kIGRhdGUgZm9yIHRoZSByYW5nZSxcclxuICAgICAgICAgICAgLy8gKiBpZiB0aGUgdGltZSBwaWNrZXIgaXMgZW5hYmxlZCwgYXBwbHkgdGhlIGhvdXIvbWludXRlL3NlY29uZCBmcm9tIHRoZSBzZWxlY3QgYm94ZXMgdG8gdGhlIGNsaWNrZWQgZGF0ZVxyXG4gICAgICAgICAgICAvLyAqIGlmIGF1dG9hcHBseSBpcyBlbmFibGVkLCBhbmQgYW4gZW5kIGRhdGUgd2FzIGNob3NlbiwgYXBwbHkgdGhlIHNlbGVjdGlvblxyXG4gICAgICAgICAgICAvLyAqIGlmIHNpbmdsZSBkYXRlIHBpY2tlciBtb2RlLCBhbmQgdGltZSBwaWNrZXIgaXNuJ3QgZW5hYmxlZCwgYXBwbHkgdGhlIHNlbGVjdGlvbiBpbW1lZGlhdGVseVxyXG4gICAgICAgICAgICAvLyAqIGlmIG9uZSBvZiB0aGUgaW5wdXRzIGFib3ZlIHRoZSBjYWxlbmRhcnMgd2FzIGZvY3VzZWQsIGNhbmNlbCB0aGF0IG1hbnVhbCBpbnB1dFxyXG4gICAgICAgICAgICAvL1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5kRGF0ZSB8fCBkYXRlLmlzQmVmb3JlKHRoaXMuc3RhcnREYXRlLCAnZGF5JykpIHsgLy9waWNraW5nIHN0YXJ0XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhvdXIgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcubGVmdCAuaG91cnNlbGVjdCcpLnZhbCgpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVQaWNrZXIyNEhvdXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFtcG0gPSB0aGlzLmNvbnRhaW5lci5maW5kKCcubGVmdCAuYW1wbXNlbGVjdCcpLnZhbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ1BNJyAmJiBob3VyIDwgMTIpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW1wbSA9PT0gJ0FNJyAmJiBob3VyID09PSAxMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWludXRlID0gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLm1pbnV0ZXNlbGVjdCcpLnZhbCgpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLm1pbnV0ZXNlbGVjdCBvcHRpb246bGFzdCcpLnZhbCgpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBzZWNvbmQgPSB0aGlzLnRpbWVQaWNrZXJTZWNvbmRzID8gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLmxlZnQgLnNlY29uZHNlbGVjdCcpLnZhbCgpLCAxMCkgOiAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBkYXRlLmNsb25lKCkuaG91cihob3VyKS5taW51dGUobWludXRlKS5zZWNvbmQoc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZW5kRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXJ0RGF0ZShkYXRlLmNsb25lKCkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmVuZERhdGUgJiYgZGF0ZS5pc0JlZm9yZSh0aGlzLnN0YXJ0RGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgIC8vc3BlY2lhbCBjYXNlOiBjbGlja2luZyB0aGUgc2FtZSBkYXRlIGZvciBzdGFydC9lbmQsXHJcbiAgICAgICAgICAgICAgICAvL2J1dCB0aGUgdGltZSBvZiB0aGUgZW5kIGRhdGUgaXMgYmVmb3JlIHRoZSBzdGFydCBkYXRlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEVuZERhdGUodGhpcy5zdGFydERhdGUuY2xvbmUoKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIHBpY2tpbmcgZW5kXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGhvdXIgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLmhvdXJzZWxlY3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyMjRIb3VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbXBtID0gdGhpcy5jb250YWluZXIuZmluZCgnLnJpZ2h0IC5hbXBtc2VsZWN0JykudmFsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIGhvdXIgPCAxMilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnQU0nICYmIGhvdXIgPT09IDEyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW51dGUgPSBwYXJzZUludCh0aGlzLmNvbnRhaW5lci5maW5kKCcucmlnaHQgLm1pbnV0ZXNlbGVjdCcpLnZhbCgpLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWludXRlID0gcGFyc2VJbnQodGhpcy5jb250YWluZXIuZmluZCgnLnJpZ2h0IC5taW51dGVzZWxlY3Qgb3B0aW9uOmxhc3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2Vjb25kID0gdGhpcy50aW1lUGlja2VyU2Vjb25kcyA/IHBhcnNlSW50KHRoaXMuY29udGFpbmVyLmZpbmQoJy5yaWdodCAuc2Vjb25kc2VsZWN0JykudmFsKCksIDEwKSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGRhdGUuY2xvbmUoKS5ob3VyKGhvdXIpLm1pbnV0ZShtaW51dGUpLnNlY29uZChzZWNvbmQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFbmREYXRlKGRhdGUuY2xvbmUoKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvQXBwbHkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVDaG9zZW5MYWJlbCgpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmNsaWNrQXBwbHkoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2luZ2xlRGF0ZVBpY2tlcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRFbmREYXRlKHRoaXMuc3RhcnREYXRlKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy50aW1lUGlja2VyICYmIHRoaXMuYXV0b0FwcGx5KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tBcHBseSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXcoKTtcclxuXHJcbiAgICAgICAgICAgIC8vVGhpcyBpcyB0byBjYW5jZWwgdGhlIGJsdXIgZXZlbnQgaGFuZGxlciBpZiB0aGUgbW91c2Ugd2FzIGluIG9uZSBvZiB0aGUgaW5wdXRzXHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNhbGN1bGF0ZUNob3NlbkxhYmVsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBjdXN0b21SYW5nZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICAgICAgZm9yICh2YXIgcmFuZ2UgaW4gdGhpcy5yYW5nZXMpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy50aW1lUGlja2VyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMudGltZVBpY2tlclNlY29uZHMgPyBcIllZWVktTU0tREQgSEg6bW06c3NcIiA6IFwiWVlZWS1NTS1ERCBISDptbVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vaWdub3JlIHRpbWVzIHdoZW4gY29tcGFyaW5nIGRhdGVzIGlmIHRpbWUgcGlja2VyIHNlY29uZHMgaXMgbm90IGVuYWJsZWRcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFydERhdGUuZm9ybWF0KGZvcm1hdCkgPT0gdGhpcy5yYW5nZXNbcmFuZ2VdWzBdLmZvcm1hdChmb3JtYXQpICYmIHRoaXMuZW5kRGF0ZS5mb3JtYXQoZm9ybWF0KSA9PSB0aGlzLnJhbmdlc1tyYW5nZV1bMV0uZm9ybWF0KGZvcm1hdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tUmFuZ2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaG9zZW5MYWJlbCA9IHRoaXMuY29udGFpbmVyLmZpbmQoJy5yYW5nZXMgbGk6ZXEoJyArIGkgKyAnKScpLmFkZENsYXNzKCdhY3RpdmUnKS5hdHRyKCdkYXRhLXJhbmdlLWtleScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vaWdub3JlIHRpbWVzIHdoZW4gY29tcGFyaW5nIGRhdGVzIGlmIHRpbWUgcGlja2VyIGlzIG5vdCBlbmFibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09IHRoaXMucmFuZ2VzW3JhbmdlXVswXS5mb3JtYXQoJ1lZWVktTU0tREQnKSAmJiB0aGlzLmVuZERhdGUuZm9ybWF0KCdZWVlZLU1NLUREJykgPT0gdGhpcy5yYW5nZXNbcmFuZ2VdWzFdLmZvcm1hdCgnWVlZWS1NTS1ERCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVJhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VuTGFiZWwgPSB0aGlzLmNvbnRhaW5lci5maW5kKCcucmFuZ2VzIGxpOmVxKCcgKyBpICsgJyknKS5hZGRDbGFzcygnYWN0aXZlJykuYXR0cignZGF0YS1yYW5nZS1rZXknKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjdXN0b21SYW5nZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hvd0N1c3RvbVJhbmdlTGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNob3NlbkxhYmVsID0gdGhpcy5jb250YWluZXIuZmluZCgnLnJhbmdlcyBsaTpsYXN0JykuYWRkQ2xhc3MoJ2FjdGl2ZScpLmF0dHIoJ2RhdGEtcmFuZ2Uta2V5Jyk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VuTGFiZWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93Q2FsZW5kYXJzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBjbGlja0FwcGx5OiBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcignYXBwbHkuZGF0ZXJhbmdlcGlja2VyJywgdGhpcyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgY2xpY2tDYW5jZWw6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSB0aGlzLm9sZFN0YXJ0RGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5lbmREYXRlID0gdGhpcy5vbGRFbmREYXRlO1xyXG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnRyaWdnZXIoJ2NhbmNlbC5kYXRlcmFuZ2VwaWNrZXInLCB0aGlzKTtcclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBtb250aE9yWWVhckNoYW5nZWQ6IGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgdmFyIGlzTGVmdCA9ICQoZS50YXJnZXQpLmNsb3Nlc3QoJy5kcnAtY2FsZW5kYXInKS5oYXNDbGFzcygnbGVmdCcpLFxyXG4gICAgICAgICAgICAgICAgbGVmdE9yUmlnaHQgPSBpc0xlZnQgPyAnbGVmdCcgOiAncmlnaHQnLFxyXG4gICAgICAgICAgICAgICAgY2FsID0gdGhpcy5jb250YWluZXIuZmluZCgnLmRycC1jYWxlbmRhci4nK2xlZnRPclJpZ2h0KTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1vbnRoIG11c3QgYmUgTnVtYmVyIGZvciBuZXcgbW9tZW50IHZlcnNpb25zXHJcbiAgICAgICAgICAgIHZhciBtb250aCA9IHBhcnNlSW50KGNhbC5maW5kKCcubW9udGhzZWxlY3QnKS52YWwoKSwgMTApO1xyXG4gICAgICAgICAgICB2YXIgeWVhciA9IGNhbC5maW5kKCcueWVhcnNlbGVjdCcpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFpc0xlZnQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh5ZWFyIDwgdGhpcy5zdGFydERhdGUueWVhcigpIHx8ICh5ZWFyID09IHRoaXMuc3RhcnREYXRlLnllYXIoKSAmJiBtb250aCA8IHRoaXMuc3RhcnREYXRlLm1vbnRoKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0aGlzLnN0YXJ0RGF0ZS5tb250aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHllYXIgPSB0aGlzLnN0YXJ0RGF0ZS55ZWFyKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1pbkRhdGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICh5ZWFyIDwgdGhpcy5taW5EYXRlLnllYXIoKSB8fCAoeWVhciA9PSB0aGlzLm1pbkRhdGUueWVhcigpICYmIG1vbnRoIDwgdGhpcy5taW5EYXRlLm1vbnRoKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9udGggPSB0aGlzLm1pbkRhdGUubW9udGgoKTtcclxuICAgICAgICAgICAgICAgICAgICB5ZWFyID0gdGhpcy5taW5EYXRlLnllYXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubWF4RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHllYXIgPiB0aGlzLm1heERhdGUueWVhcigpIHx8ICh5ZWFyID09IHRoaXMubWF4RGF0ZS55ZWFyKCkgJiYgbW9udGggPiB0aGlzLm1heERhdGUubW9udGgoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBtb250aCA9IHRoaXMubWF4RGF0ZS5tb250aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHllYXIgPSB0aGlzLm1heERhdGUueWVhcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNMZWZ0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxlZnRDYWxlbmRhci5tb250aC5tb250aChtb250aCkueWVhcih5ZWFyKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpbmtlZENhbGVuZGFycylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0Q2FsZW5kYXIubW9udGggPSB0aGlzLmxlZnRDYWxlbmRhci5tb250aC5jbG9uZSgpLmFkZCgxLCAnbW9udGgnKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5tb250aChtb250aCkueWVhcih5ZWFyKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxpbmtlZENhbGVuZGFycylcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxlZnRDYWxlbmRhci5tb250aCA9IHRoaXMucmlnaHRDYWxlbmRhci5tb250aC5jbG9uZSgpLnN1YnRyYWN0KDEsICdtb250aCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdGltZUNoYW5nZWQ6IGZ1bmN0aW9uKGUpIHtcclxuXHJcbiAgICAgICAgICAgIHZhciBjYWwgPSAkKGUudGFyZ2V0KS5jbG9zZXN0KCcuZHJwLWNhbGVuZGFyJyksXHJcbiAgICAgICAgICAgICAgICBpc0xlZnQgPSBjYWwuaGFzQ2xhc3MoJ2xlZnQnKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBob3VyID0gcGFyc2VJbnQoY2FsLmZpbmQoJy5ob3Vyc2VsZWN0JykudmFsKCksIDEwKTtcclxuICAgICAgICAgICAgdmFyIG1pbnV0ZSA9IHBhcnNlSW50KGNhbC5maW5kKCcubWludXRlc2VsZWN0JykudmFsKCksIDEwKTtcclxuICAgICAgICAgICAgaWYgKGlzTmFOKG1pbnV0ZSkpIHtcclxuICAgICAgICAgICAgICAgIG1pbnV0ZSA9IHBhcnNlSW50KGNhbC5maW5kKCcubWludXRlc2VsZWN0IG9wdGlvbjpsYXN0JykudmFsKCksIDEwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgc2Vjb25kID0gdGhpcy50aW1lUGlja2VyU2Vjb25kcyA/IHBhcnNlSW50KGNhbC5maW5kKCcuc2Vjb25kc2VsZWN0JykudmFsKCksIDEwKSA6IDA7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMudGltZVBpY2tlcjI0SG91cikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGFtcG0gPSBjYWwuZmluZCgnLmFtcG1zZWxlY3QnKS52YWwoKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbXBtID09PSAnUE0nICYmIGhvdXIgPCAxMilcclxuICAgICAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFtcG0gPT09ICdBTScgJiYgaG91ciA9PT0gMTIpXHJcbiAgICAgICAgICAgICAgICAgICAgaG91ciA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpc0xlZnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IHRoaXMuc3RhcnREYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBzdGFydC5ob3VyKGhvdXIpO1xyXG4gICAgICAgICAgICAgICAgc3RhcnQubWludXRlKG1pbnV0ZSk7XHJcbiAgICAgICAgICAgICAgICBzdGFydC5zZWNvbmQoc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhcnREYXRlKHN0YXJ0KTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNpbmdsZURhdGVQaWNrZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVuZERhdGUgJiYgdGhpcy5lbmREYXRlLmZvcm1hdCgnWVlZWS1NTS1ERCcpID09IHN0YXJ0LmZvcm1hdCgnWVlZWS1NTS1ERCcpICYmIHRoaXMuZW5kRGF0ZS5pc0JlZm9yZShzdGFydCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVuZERhdGUoc3RhcnQuY2xvbmUoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbmREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZW5kID0gdGhpcy5lbmREYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICBlbmQuaG91cihob3VyKTtcclxuICAgICAgICAgICAgICAgIGVuZC5taW51dGUobWludXRlKTtcclxuICAgICAgICAgICAgICAgIGVuZC5zZWNvbmQoc2Vjb25kKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RW5kRGF0ZShlbmQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgY2FsZW5kYXJzIHNvIGFsbCBjbGlja2FibGUgZGF0ZXMgcmVmbGVjdCB0aGUgbmV3IHRpbWUgY29tcG9uZW50XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FsZW5kYXJzKCk7XHJcblxyXG4gICAgICAgICAgICAvL3VwZGF0ZSB0aGUgZm9ybSBpbnB1dHMgYWJvdmUgdGhlIGNhbGVuZGFycyB3aXRoIHRoZSBuZXcgdGltZVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1JbnB1dHMoKTtcclxuXHJcbiAgICAgICAgICAgIC8vcmUtcmVuZGVyIHRoZSB0aW1lIHBpY2tlcnMgYmVjYXVzZSBjaGFuZ2luZyBvbmUgc2VsZWN0aW9uIGNhbiBhZmZlY3Qgd2hhdCdzIGVuYWJsZWQgaW4gYW5vdGhlclxyXG4gICAgICAgICAgICB0aGlzLnJlbmRlclRpbWVQaWNrZXIoJ2xlZnQnKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJUaW1lUGlja2VyKCdyaWdodCcpO1xyXG5cclxuICAgICAgICB9LFxyXG5cclxuICAgICAgICBlbGVtZW50Q2hhbmdlZDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lbGVtZW50LmlzKCdpbnB1dCcpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5lbGVtZW50LnZhbCgpLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdmFyIGRhdGVTdHJpbmcgPSB0aGlzLmVsZW1lbnQudmFsKCkuc3BsaXQodGhpcy5sb2NhbGUuc2VwYXJhdG9yKSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbnVsbCxcclxuICAgICAgICAgICAgICAgIGVuZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGF0ZVN0cmluZy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbW9tZW50KGRhdGVTdHJpbmdbMF0sIHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSBtb21lbnQoZGF0ZVN0cmluZ1sxXSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2luZ2xlRGF0ZVBpY2tlciB8fCBzdGFydCA9PT0gbnVsbCB8fCBlbmQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gbW9tZW50KHRoaXMuZWxlbWVudC52YWwoKSwgdGhpcy5sb2NhbGUuZm9ybWF0KTtcclxuICAgICAgICAgICAgICAgIGVuZCA9IHN0YXJ0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXN0YXJ0LmlzVmFsaWQoKSB8fCAhZW5kLmlzVmFsaWQoKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGFydERhdGUoc3RhcnQpO1xyXG4gICAgICAgICAgICB0aGlzLnNldEVuZERhdGUoZW5kKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAga2V5ZG93bjogZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICAvL2hpZGUgb24gdGFiIG9yIGVudGVyXHJcbiAgICAgICAgICAgIGlmICgoZS5rZXlDb2RlID09PSA5KSB8fCAoZS5rZXlDb2RlID09PSAxMykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL2hpZGUgb24gZXNjIGFuZCBwcmV2ZW50IHByb3BhZ2F0aW9uXHJcbiAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XHJcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgdXBkYXRlRWxlbWVudDogZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnQuaXMoJ2lucHV0JykgJiYgdGhpcy5hdXRvVXBkYXRlSW5wdXQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuc3RhcnREYXRlLmZvcm1hdCh0aGlzLmxvY2FsZS5mb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNpbmdsZURhdGVQaWNrZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZSArPSB0aGlzLmxvY2FsZS5zZXBhcmF0b3IgKyB0aGlzLmVuZERhdGUuZm9ybWF0KHRoaXMubG9jYWxlLmZvcm1hdCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3VmFsdWUgIT09IHRoaXMuZWxlbWVudC52YWwoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC52YWwobmV3VmFsdWUpLnRyaWdnZXIoJ2NoYW5nZScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5vZmYoJy5kYXRlcmFuZ2VwaWNrZXInKTtcclxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZURhdGEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfTtcclxuXHJcbiAgICAkLmZuLmRhdGVyYW5nZXBpY2tlciA9IGZ1bmN0aW9uKG9wdGlvbnMsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgdmFyIGltcGxlbWVudE9wdGlvbnMgPSAkLmV4dGVuZCh0cnVlLCB7fSwgJC5mbi5kYXRlcmFuZ2VwaWNrZXIuZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMpO1xyXG4gICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgdmFyIGVsID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgaWYgKGVsLmRhdGEoJ2RhdGVyYW5nZXBpY2tlcicpKVxyXG4gICAgICAgICAgICAgICAgZWwuZGF0YSgnZGF0ZXJhbmdlcGlja2VyJykucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIGVsLmRhdGEoJ2RhdGVyYW5nZXBpY2tlcicsIG5ldyBEYXRlUmFuZ2VQaWNrZXIoZWwsIGltcGxlbWVudE9wdGlvbnMsIGNhbGxiYWNrKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBEYXRlUmFuZ2VQaWNrZXI7XHJcblxyXG59KSk7XHJcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCB2NC42LjAgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyMSBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/ZShleHBvcnRzLHJlcXVpcmUoXCJqcXVlcnlcIikscmVxdWlyZShcInBvcHBlci5qc1wiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJleHBvcnRzXCIsXCJqcXVlcnlcIixcInBvcHBlci5qc1wiXSxlKTplKCh0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuYm9vdHN0cmFwPXt9LHQualF1ZXJ5LHQuUG9wcGVyKX0odGhpcywoZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImRlZmF1bHRcImluIHQ/dDp7ZGVmYXVsdDp0fX12YXIgbz1pKGUpLGE9aShuKTtmdW5jdGlvbiBzKHQsZSl7Zm9yKHZhciBuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBpPWVbbl07aS5lbnVtZXJhYmxlPWkuZW51bWVyYWJsZXx8ITEsaS5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gaSYmKGkud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGkua2V5LGkpfX1mdW5jdGlvbiBsKHQsZSxuKXtyZXR1cm4gZSYmcyh0LnByb3RvdHlwZSxlKSxuJiZzKHQsbiksdH1mdW5jdGlvbiByKCl7cmV0dXJuKHI9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTE7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl7dmFyIG49YXJndW1lbnRzW2VdO2Zvcih2YXIgaSBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpJiYodFtpXT1uW2ldKX1yZXR1cm4gdH0pLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB1KHQpe3ZhciBlPXRoaXMsbj0hMTtyZXR1cm4gby5kZWZhdWx0KHRoaXMpLm9uZShkLlRSQU5TSVRJT05fRU5ELChmdW5jdGlvbigpe249ITB9KSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtufHxkLnRyaWdnZXJUcmFuc2l0aW9uRW5kKGUpfSksdCksdGhpc312YXIgZD17VFJBTlNJVElPTl9FTkQ6XCJic1RyYW5zaXRpb25FbmRcIixnZXRVSUQ6ZnVuY3Rpb24odCl7ZG97dCs9fn4oMWU2Kk1hdGgucmFuZG9tKCkpfXdoaWxlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQpKTtyZXR1cm4gdH0sZ2V0U2VsZWN0b3JGcm9tRWxlbWVudDpmdW5jdGlvbih0KXt2YXIgZT10LmdldEF0dHJpYnV0ZShcImRhdGEtdGFyZ2V0XCIpO2lmKCFlfHxcIiNcIj09PWUpe3ZhciBuPXQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKTtlPW4mJlwiI1wiIT09bj9uLnRyaW0oKTpcIlwifXRyeXtyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlKT9lOm51bGx9Y2F0Y2godCl7cmV0dXJuIG51bGx9fSxnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudDpmdW5jdGlvbih0KXtpZighdClyZXR1cm4gMDt2YXIgZT1vLmRlZmF1bHQodCkuY3NzKFwidHJhbnNpdGlvbi1kdXJhdGlvblwiKSxuPW8uZGVmYXVsdCh0KS5jc3MoXCJ0cmFuc2l0aW9uLWRlbGF5XCIpLGk9cGFyc2VGbG9hdChlKSxhPXBhcnNlRmxvYXQobik7cmV0dXJuIGl8fGE/KGU9ZS5zcGxpdChcIixcIilbMF0sbj1uLnNwbGl0KFwiLFwiKVswXSwxZTMqKHBhcnNlRmxvYXQoZSkrcGFyc2VGbG9hdChuKSkpOjB9LHJlZmxvdzpmdW5jdGlvbih0KXtyZXR1cm4gdC5vZmZzZXRIZWlnaHR9LHRyaWdnZXJUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKHQpe28uZGVmYXVsdCh0KS50cmlnZ2VyKFwidHJhbnNpdGlvbmVuZFwiKX0sc3VwcG9ydHNUcmFuc2l0aW9uRW5kOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oXCJ0cmFuc2l0aW9uZW5kXCIpfSxpc0VsZW1lbnQ6ZnVuY3Rpb24odCl7cmV0dXJuKHRbMF18fHQpLm5vZGVUeXBlfSx0eXBlQ2hlY2tDb25maWc6ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgaSBpbiBuKWlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGkpKXt2YXIgbz1uW2ldLGE9ZVtpXSxzPWEmJmQuaXNFbGVtZW50KGEpP1wiZWxlbWVudFwiOm51bGw9PT0obD1hKXx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIGw/XCJcIitsOnt9LnRvU3RyaW5nLmNhbGwobCkubWF0Y2goL1xccyhbYS16XSspL2kpWzFdLnRvTG93ZXJDYXNlKCk7aWYoIW5ldyBSZWdFeHAobykudGVzdChzKSl0aHJvdyBuZXcgRXJyb3IodC50b1VwcGVyQ2FzZSgpKyc6IE9wdGlvbiBcIicraSsnXCIgcHJvdmlkZWQgdHlwZSBcIicrcysnXCIgYnV0IGV4cGVjdGVkIHR5cGUgXCInK28rJ1wiLicpfXZhciBsfSxmaW5kU2hhZG93Um9vdDpmdW5jdGlvbih0KXtpZighZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaFNoYWRvdylyZXR1cm4gbnVsbDtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmdldFJvb3ROb2RlKXt2YXIgZT10LmdldFJvb3ROb2RlKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBTaGFkb3dSb290P2U6bnVsbH1yZXR1cm4gdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q/dDp0LnBhcmVudE5vZGU/ZC5maW5kU2hhZG93Um9vdCh0LnBhcmVudE5vZGUpOm51bGx9LGpRdWVyeURldGVjdGlvbjpmdW5jdGlvbigpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBvLmRlZmF1bHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJvb3RzdHJhcCdzIEphdmFTY3JpcHQgcmVxdWlyZXMgalF1ZXJ5LiBqUXVlcnkgbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUgQm9vdHN0cmFwJ3MgSmF2YVNjcmlwdC5cIik7dmFyIHQ9by5kZWZhdWx0LmZuLmpxdWVyeS5zcGxpdChcIiBcIilbMF0uc3BsaXQoXCIuXCIpO2lmKHRbMF08MiYmdFsxXTw5fHwxPT09dFswXSYmOT09PXRbMV0mJnRbMl08MXx8dFswXT49NCl0aHJvdyBuZXcgRXJyb3IoXCJCb290c3RyYXAncyBKYXZhU2NyaXB0IHJlcXVpcmVzIGF0IGxlYXN0IGpRdWVyeSB2MS45LjEgYnV0IGxlc3MgdGhhbiB2NC4wLjBcIil9fTtkLmpRdWVyeURldGVjdGlvbigpLG8uZGVmYXVsdC5mbi5lbXVsYXRlVHJhbnNpdGlvbkVuZD11LG8uZGVmYXVsdC5ldmVudC5zcGVjaWFsW2QuVFJBTlNJVElPTl9FTkRdPXtiaW5kVHlwZTpcInRyYW5zaXRpb25lbmRcIixkZWxlZ2F0ZVR5cGU6XCJ0cmFuc2l0aW9uZW5kXCIsaGFuZGxlOmZ1bmN0aW9uKHQpe2lmKG8uZGVmYXVsdCh0LnRhcmdldCkuaXModGhpcykpcmV0dXJuIHQuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIGY9XCJhbGVydFwiLGM9by5kZWZhdWx0LmZuW2ZdLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQpe3RoaXMuX2VsZW1lbnQ9dH12YXIgZT10LnByb3RvdHlwZTtyZXR1cm4gZS5jbG9zZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9lbGVtZW50O3QmJihlPXRoaXMuX2dldFJvb3RFbGVtZW50KHQpKSx0aGlzLl90cmlnZ2VyQ2xvc2VFdmVudChlKS5pc0RlZmF1bHRQcmV2ZW50ZWQoKXx8dGhpcy5fcmVtb3ZlRWxlbWVudChlKX0sZS5kaXNwb3NlPWZ1bmN0aW9uKCl7by5kZWZhdWx0LnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCxcImJzLmFsZXJ0XCIpLHRoaXMuX2VsZW1lbnQ9bnVsbH0sZS5fZ2V0Um9vdEVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9ZC5nZXRTZWxlY3RvckZyb21FbGVtZW50KHQpLG49ITE7cmV0dXJuIGUmJihuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSkpLG58fChuPW8uZGVmYXVsdCh0KS5jbG9zZXN0KFwiLmFsZXJ0XCIpWzBdKSxufSxlLl90cmlnZ2VyQ2xvc2VFdmVudD1mdW5jdGlvbih0KXt2YXIgZT1vLmRlZmF1bHQuRXZlbnQoXCJjbG9zZS5icy5hbGVydFwiKTtyZXR1cm4gby5kZWZhdWx0KHQpLnRyaWdnZXIoZSksZX0sZS5fcmVtb3ZlRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2lmKG8uZGVmYXVsdCh0KS5yZW1vdmVDbGFzcyhcInNob3dcIiksby5kZWZhdWx0KHQpLmhhc0NsYXNzKFwiZmFkZVwiKSl7dmFyIG49ZC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0KTtvLmRlZmF1bHQodCkub25lKGQuVFJBTlNJVElPTl9FTkQsKGZ1bmN0aW9uKG4pe3JldHVybiBlLl9kZXN0cm95RWxlbWVudCh0LG4pfSkpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKG4pfWVsc2UgdGhpcy5fZGVzdHJveUVsZW1lbnQodCl9LGUuX2Rlc3Ryb3lFbGVtZW50PWZ1bmN0aW9uKHQpe28uZGVmYXVsdCh0KS5kZXRhY2goKS50cmlnZ2VyKFwiY2xvc2VkLmJzLmFsZXJ0XCIpLnJlbW92ZSgpfSx0Ll9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj1vLmRlZmF1bHQodGhpcyksaT1uLmRhdGEoXCJicy5hbGVydFwiKTtpfHwoaT1uZXcgdCh0aGlzKSxuLmRhdGEoXCJicy5hbGVydFwiLGkpKSxcImNsb3NlXCI9PT1lJiZpW2VdKHRoaXMpfSkpfSx0Ll9oYW5kbGVEaXNtaXNzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtlJiZlLnByZXZlbnREZWZhdWx0KCksdC5jbG9zZSh0aGlzKX19LGwodCxudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC42LjBcIn19XSksdH0oKTtvLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuYWxlcnQuZGF0YS1hcGlcIiwnW2RhdGEtZGlzbWlzcz1cImFsZXJ0XCJdJyxoLl9oYW5kbGVEaXNtaXNzKG5ldyBoKSksby5kZWZhdWx0LmZuW2ZdPWguX2pRdWVyeUludGVyZmFjZSxvLmRlZmF1bHQuZm5bZl0uQ29uc3RydWN0b3I9aCxvLmRlZmF1bHQuZm5bZl0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHQuZm5bZl09YyxoLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBnPW8uZGVmYXVsdC5mbi5idXR0b24sbT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZWxlbWVudD10LHRoaXMuc2hvdWxkQXZvaWRUcmlnZ2VyQ2hhbmdlPSExfXZhciBlPXQucHJvdG90eXBlO3JldHVybiBlLnRvZ2dsZT1mdW5jdGlvbigpe3ZhciB0PSEwLGU9ITAsbj1vLmRlZmF1bHQodGhpcy5fZWxlbWVudCkuY2xvc2VzdCgnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uc1wiXScpWzBdO2lmKG4pe3ZhciBpPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXQ6bm90KFt0eXBlPVwiaGlkZGVuXCJdKScpO2lmKGkpe2lmKFwicmFkaW9cIj09PWkudHlwZSlpZihpLmNoZWNrZWQmJnRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKXQ9ITE7ZWxzZXt2YXIgYT1uLnF1ZXJ5U2VsZWN0b3IoXCIuYWN0aXZlXCIpO2EmJm8uZGVmYXVsdChhKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKX10JiYoXCJjaGVja2JveFwiIT09aS50eXBlJiZcInJhZGlvXCIhPT1pLnR5cGV8fChpLmNoZWNrZWQ9IXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSx0aGlzLnNob3VsZEF2b2lkVHJpZ2dlckNoYW5nZXx8by5kZWZhdWx0KGkpLnRyaWdnZXIoXCJjaGFuZ2VcIikpLGkuZm9jdXMoKSxlPSExfX10aGlzLl9lbGVtZW50Lmhhc0F0dHJpYnV0ZShcImRpc2FibGVkXCIpfHx0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhcImRpc2FibGVkXCIpfHwoZSYmdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLXByZXNzZWRcIiwhdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJhY3RpdmVcIikpLHQmJm8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS50b2dnbGVDbGFzcyhcImFjdGl2ZVwiKSl9LGUuZGlzcG9zZT1mdW5jdGlvbigpe28uZGVmYXVsdC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsXCJicy5idXR0b25cIiksdGhpcy5fZWxlbWVudD1udWxsfSx0Ll9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBpPW8uZGVmYXVsdCh0aGlzKSxhPWkuZGF0YShcImJzLmJ1dHRvblwiKTthfHwoYT1uZXcgdCh0aGlzKSxpLmRhdGEoXCJicy5idXR0b25cIixhKSksYS5zaG91bGRBdm9pZFRyaWdnZXJDaGFuZ2U9bixcInRvZ2dsZVwiPT09ZSYmYVtlXSgpfSkpfSxsKHQsbnVsbCxbe2tleTpcIlZFUlNJT05cIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cIjQuNi4wXCJ9fV0pLHR9KCk7by5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmJ1dHRvbi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJywoZnVuY3Rpb24odCl7dmFyIGU9dC50YXJnZXQsbj1lO2lmKG8uZGVmYXVsdChlKS5oYXNDbGFzcyhcImJ0blwiKXx8KGU9by5kZWZhdWx0KGUpLmNsb3Nlc3QoXCIuYnRuXCIpWzBdKSwhZXx8ZS5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKXx8ZS5jbGFzc0xpc3QuY29udGFpbnMoXCJkaXNhYmxlZFwiKSl0LnByZXZlbnREZWZhdWx0KCk7ZWxzZXt2YXIgaT1lLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSknKTtpZihpJiYoaS5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKXx8aS5jbGFzc0xpc3QuY29udGFpbnMoXCJkaXNhYmxlZFwiKSkpcmV0dXJuIHZvaWQgdC5wcmV2ZW50RGVmYXVsdCgpO1wiSU5QVVRcIiE9PW4udGFnTmFtZSYmXCJMQUJFTFwiPT09ZS50YWdOYW1lfHxtLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChvLmRlZmF1bHQoZSksXCJ0b2dnbGVcIixcIklOUFVUXCI9PT1uLnRhZ05hbWUpfX0pKS5vbihcImZvY3VzLmJzLmJ1dHRvbi5kYXRhLWFwaSBibHVyLmJzLmJ1dHRvbi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGVePVwiYnV0dG9uXCJdJywoZnVuY3Rpb24odCl7dmFyIGU9by5kZWZhdWx0KHQudGFyZ2V0KS5jbG9zZXN0KFwiLmJ0blwiKVswXTtvLmRlZmF1bHQoZSkudG9nZ2xlQ2xhc3MoXCJmb2N1c1wiLC9eZm9jdXMoaW4pPyQvLnRlc3QodC50eXBlKSl9KSksby5kZWZhdWx0KHdpbmRvdykub24oXCJsb2FkLmJzLmJ1dHRvbi5kYXRhLWFwaVwiLChmdW5jdGlvbigpe2Zvcih2YXIgdD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXRvZ2dsZT1cImJ1dHRvbnNcIl0gLmJ0bicpKSxlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXt2YXIgaT10W2VdLG89aS5xdWVyeVNlbGVjdG9yKCdpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pJyk7by5jaGVja2VkfHxvLmhhc0F0dHJpYnV0ZShcImNoZWNrZWRcIik/aS5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpOmkuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKX1mb3IodmFyIGE9MCxzPSh0PVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdG9nZ2xlPVwiYnV0dG9uXCJdJykpKS5sZW5ndGg7YTxzO2ErKyl7dmFyIGw9dFthXTtcInRydWVcIj09PWwuZ2V0QXR0cmlidXRlKFwiYXJpYS1wcmVzc2VkXCIpP2wuY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKTpsLmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIil9fSkpLG8uZGVmYXVsdC5mbi5idXR0b249bS5falF1ZXJ5SW50ZXJmYWNlLG8uZGVmYXVsdC5mbi5idXR0b24uQ29uc3RydWN0b3I9bSxvLmRlZmF1bHQuZm4uYnV0dG9uLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gby5kZWZhdWx0LmZuLmJ1dHRvbj1nLG0uX2pRdWVyeUludGVyZmFjZX07dmFyIHA9XCJjYXJvdXNlbFwiLF89XCIuYnMuY2Fyb3VzZWxcIix2PW8uZGVmYXVsdC5mbltwXSxiPXtpbnRlcnZhbDo1ZTMsa2V5Ym9hcmQ6ITAsc2xpZGU6ITEscGF1c2U6XCJob3ZlclwiLHdyYXA6ITAsdG91Y2g6ITB9LHk9e2ludGVydmFsOlwiKG51bWJlcnxib29sZWFuKVwiLGtleWJvYXJkOlwiYm9vbGVhblwiLHNsaWRlOlwiKGJvb2xlYW58c3RyaW5nKVwiLHBhdXNlOlwiKHN0cmluZ3xib29sZWFuKVwiLHdyYXA6XCJib29sZWFuXCIsdG91Y2g6XCJib29sZWFuXCJ9LEU9e1RPVUNIOlwidG91Y2hcIixQRU46XCJwZW5cIn0sdz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9pdGVtcz1udWxsLHRoaXMuX2ludGVydmFsPW51bGwsdGhpcy5fYWN0aXZlRWxlbWVudD1udWxsLHRoaXMuX2lzUGF1c2VkPSExLHRoaXMuX2lzU2xpZGluZz0hMSx0aGlzLnRvdWNoVGltZW91dD1udWxsLHRoaXMudG91Y2hTdGFydFg9MCx0aGlzLnRvdWNoRGVsdGFYPTAsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl9lbGVtZW50PXQsdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQ9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLmNhcm91c2VsLWluZGljYXRvcnNcIiksdGhpcy5fdG91Y2hTdXBwb3J0ZWQ9XCJvbnRvdWNoc3RhcnRcImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudHx8bmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjAsdGhpcy5fcG9pbnRlckV2ZW50PUJvb2xlYW4od2luZG93LlBvaW50ZXJFdmVudHx8d2luZG93Lk1TUG9pbnRlckV2ZW50KSx0aGlzLl9hZGRFdmVudExpc3RlbmVycygpfXZhciBlPXQucHJvdG90eXBlO3JldHVybiBlLm5leHQ9ZnVuY3Rpb24oKXt0aGlzLl9pc1NsaWRpbmd8fHRoaXMuX3NsaWRlKFwibmV4dFwiKX0sZS5uZXh0V2hlblZpc2libGU9ZnVuY3Rpb24oKXt2YXIgdD1vLmRlZmF1bHQodGhpcy5fZWxlbWVudCk7IWRvY3VtZW50LmhpZGRlbiYmdC5pcyhcIjp2aXNpYmxlXCIpJiZcImhpZGRlblwiIT09dC5jc3MoXCJ2aXNpYmlsaXR5XCIpJiZ0aGlzLm5leHQoKX0sZS5wcmV2PWZ1bmN0aW9uKCl7dGhpcy5faXNTbGlkaW5nfHx0aGlzLl9zbGlkZShcInByZXZcIil9LGUucGF1c2U9ZnVuY3Rpb24odCl7dHx8KHRoaXMuX2lzUGF1c2VkPSEwKSx0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2Fyb3VzZWwtaXRlbS1uZXh0LCAuY2Fyb3VzZWwtaXRlbS1wcmV2XCIpJiYoZC50cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KSx0aGlzLmN5Y2xlKCEwKSksY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCksdGhpcy5faW50ZXJ2YWw9bnVsbH0sZS5jeWNsZT1mdW5jdGlvbih0KXt0fHwodGhpcy5faXNQYXVzZWQ9ITEpLHRoaXMuX2ludGVydmFsJiYoY2xlYXJJbnRlcnZhbCh0aGlzLl9pbnRlcnZhbCksdGhpcy5faW50ZXJ2YWw9bnVsbCksdGhpcy5fY29uZmlnLmludGVydmFsJiYhdGhpcy5faXNQYXVzZWQmJih0aGlzLl91cGRhdGVJbnRlcnZhbCgpLHRoaXMuX2ludGVydmFsPXNldEludGVydmFsKChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU/dGhpcy5uZXh0V2hlblZpc2libGU6dGhpcy5uZXh0KS5iaW5kKHRoaXMpLHRoaXMuX2NvbmZpZy5pbnRlcnZhbCkpfSxlLnRvPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7dGhpcy5fYWN0aXZlRWxlbWVudD10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYWN0aXZlLmNhcm91c2VsLWl0ZW1cIik7dmFyIG49dGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpO2lmKCEodD50aGlzLl9pdGVtcy5sZW5ndGgtMXx8dDwwKSlpZih0aGlzLl9pc1NsaWRpbmcpby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLm9uZShcInNsaWQuYnMuY2Fyb3VzZWxcIiwoZnVuY3Rpb24oKXtyZXR1cm4gZS50byh0KX0pKTtlbHNle2lmKG49PT10KXJldHVybiB0aGlzLnBhdXNlKCksdm9pZCB0aGlzLmN5Y2xlKCk7dmFyIGk9dD5uP1wibmV4dFwiOlwicHJldlwiO3RoaXMuX3NsaWRlKGksdGhpcy5faXRlbXNbdF0pfX0sZS5kaXNwb3NlPWZ1bmN0aW9uKCl7by5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLm9mZihfKSxvLmRlZmF1bHQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LFwiYnMuY2Fyb3VzZWxcIiksdGhpcy5faXRlbXM9bnVsbCx0aGlzLl9jb25maWc9bnVsbCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5faW50ZXJ2YWw9bnVsbCx0aGlzLl9pc1BhdXNlZD1udWxsLHRoaXMuX2lzU2xpZGluZz1udWxsLHRoaXMuX2FjdGl2ZUVsZW1lbnQ9bnVsbCx0aGlzLl9pbmRpY2F0b3JzRWxlbWVudD1udWxsfSxlLl9nZXRDb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9cih7fSxiLHQpLGQudHlwZUNoZWNrQ29uZmlnKHAsdCx5KSx0fSxlLl9oYW5kbGVTd2lwZT1mdW5jdGlvbigpe3ZhciB0PU1hdGguYWJzKHRoaXMudG91Y2hEZWx0YVgpO2lmKCEodDw9NDApKXt2YXIgZT10L3RoaXMudG91Y2hEZWx0YVg7dGhpcy50b3VjaERlbHRhWD0wLGU+MCYmdGhpcy5wcmV2KCksZTwwJiZ0aGlzLm5leHQoKX19LGUuX2FkZEV2ZW50TGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9jb25maWcua2V5Ym9hcmQmJm8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5vbihcImtleWRvd24uYnMuY2Fyb3VzZWxcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2tleWRvd24oZSl9KSksXCJob3ZlclwiPT09dGhpcy5fY29uZmlnLnBhdXNlJiZvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkub24oXCJtb3VzZWVudGVyLmJzLmNhcm91c2VsXCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0LnBhdXNlKGUpfSkpLm9uKFwibW91c2VsZWF2ZS5icy5jYXJvdXNlbFwiLChmdW5jdGlvbihlKXtyZXR1cm4gdC5jeWNsZShlKX0pKSx0aGlzLl9jb25maWcudG91Y2gmJnRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKX0sZS5fYWRkVG91Y2hFdmVudExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7aWYodGhpcy5fdG91Y2hTdXBwb3J0ZWQpe3ZhciBlPWZ1bmN0aW9uKGUpe3QuX3BvaW50ZXJFdmVudCYmRVtlLm9yaWdpbmFsRXZlbnQucG9pbnRlclR5cGUudG9VcHBlckNhc2UoKV0/dC50b3VjaFN0YXJ0WD1lLm9yaWdpbmFsRXZlbnQuY2xpZW50WDp0Ll9wb2ludGVyRXZlbnR8fCh0LnRvdWNoU3RhcnRYPWUub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFgpfSxuPWZ1bmN0aW9uKGUpe3QuX3BvaW50ZXJFdmVudCYmRVtlLm9yaWdpbmFsRXZlbnQucG9pbnRlclR5cGUudG9VcHBlckNhc2UoKV0mJih0LnRvdWNoRGVsdGFYPWUub3JpZ2luYWxFdmVudC5jbGllbnRYLXQudG91Y2hTdGFydFgpLHQuX2hhbmRsZVN3aXBlKCksXCJob3ZlclwiPT09dC5fY29uZmlnLnBhdXNlJiYodC5wYXVzZSgpLHQudG91Y2hUaW1lb3V0JiZjbGVhclRpbWVvdXQodC50b3VjaFRpbWVvdXQpLHQudG91Y2hUaW1lb3V0PXNldFRpbWVvdXQoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmN5Y2xlKGUpfSksNTAwK3QuX2NvbmZpZy5pbnRlcnZhbCkpfTtvLmRlZmF1bHQodGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmNhcm91c2VsLWl0ZW0gaW1nXCIpKS5vbihcImRyYWdzdGFydC5icy5jYXJvdXNlbFwiLChmdW5jdGlvbih0KXtyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpfSkpLHRoaXMuX3BvaW50ZXJFdmVudD8oby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLm9uKFwicG9pbnRlcmRvd24uYnMuY2Fyb3VzZWxcIiwoZnVuY3Rpb24odCl7cmV0dXJuIGUodCl9KSksby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLm9uKFwicG9pbnRlcnVwLmJzLmNhcm91c2VsXCIsKGZ1bmN0aW9uKHQpe3JldHVybiBuKHQpfSkpLHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChcInBvaW50ZXItZXZlbnRcIikpOihvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkub24oXCJ0b3VjaHN0YXJ0LmJzLmNhcm91c2VsXCIsKGZ1bmN0aW9uKHQpe3JldHVybiBlKHQpfSkpLG8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5vbihcInRvdWNobW92ZS5icy5jYXJvdXNlbFwiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7ZS5vcmlnaW5hbEV2ZW50LnRvdWNoZXMmJmUub3JpZ2luYWxFdmVudC50b3VjaGVzLmxlbmd0aD4xP3QudG91Y2hEZWx0YVg9MDp0LnRvdWNoRGVsdGFYPWUub3JpZ2luYWxFdmVudC50b3VjaGVzWzBdLmNsaWVudFgtdC50b3VjaFN0YXJ0WH0oZSl9KSksby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLm9uKFwidG91Y2hlbmQuYnMuY2Fyb3VzZWxcIiwoZnVuY3Rpb24odCl7cmV0dXJuIG4odCl9KSkpfX0sZS5fa2V5ZG93bj1mdW5jdGlvbih0KXtpZighL2lucHV0fHRleHRhcmVhL2kudGVzdCh0LnRhcmdldC50YWdOYW1lKSlzd2l0Y2godC53aGljaCl7Y2FzZSAzNzp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5wcmV2KCk7YnJlYWs7Y2FzZSAzOTp0LnByZXZlbnREZWZhdWx0KCksdGhpcy5uZXh0KCl9fSxlLl9nZXRJdGVtSW5kZXg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2l0ZW1zPXQmJnQucGFyZW50Tm9kZT9bXS5zbGljZS5jYWxsKHQucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKFwiLmNhcm91c2VsLWl0ZW1cIikpOltdLHRoaXMuX2l0ZW1zLmluZGV4T2YodCl9LGUuX2dldEl0ZW1CeURpcmVjdGlvbj1mdW5jdGlvbih0LGUpe3ZhciBuPVwibmV4dFwiPT09dCxpPVwicHJldlwiPT09dCxvPXRoaXMuX2dldEl0ZW1JbmRleChlKSxhPXRoaXMuX2l0ZW1zLmxlbmd0aC0xO2lmKChpJiYwPT09b3x8biYmbz09PWEpJiYhdGhpcy5fY29uZmlnLndyYXApcmV0dXJuIGU7dmFyIHM9KG8rKFwicHJldlwiPT09dD8tMToxKSkldGhpcy5faXRlbXMubGVuZ3RoO3JldHVybi0xPT09cz90aGlzLl9pdGVtc1t0aGlzLl9pdGVtcy5sZW5ndGgtMV06dGhpcy5faXRlbXNbc119LGUuX3RyaWdnZXJTbGlkZUV2ZW50PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5fZ2V0SXRlbUluZGV4KHQpLGk9dGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5hY3RpdmUuY2Fyb3VzZWwtaXRlbVwiKSksYT1vLmRlZmF1bHQuRXZlbnQoXCJzbGlkZS5icy5jYXJvdXNlbFwiLHtyZWxhdGVkVGFyZ2V0OnQsZGlyZWN0aW9uOmUsZnJvbTppLHRvOm59KTtyZXR1cm4gby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoYSksYX0sZS5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudD1mdW5jdGlvbih0KXtpZih0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCl7dmFyIGU9W10uc2xpY2UuY2FsbCh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmFjdGl2ZVwiKSk7by5kZWZhdWx0KGUpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO3ZhciBuPXRoaXMuX2luZGljYXRvcnNFbGVtZW50LmNoaWxkcmVuW3RoaXMuX2dldEl0ZW1JbmRleCh0KV07biYmby5kZWZhdWx0KG4pLmFkZENsYXNzKFwiYWN0aXZlXCIpfX0sZS5fdXBkYXRlSW50ZXJ2YWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9hY3RpdmVFbGVtZW50fHx0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuYWN0aXZlLmNhcm91c2VsLWl0ZW1cIik7aWYodCl7dmFyIGU9cGFyc2VJbnQodC5nZXRBdHRyaWJ1dGUoXCJkYXRhLWludGVydmFsXCIpLDEwKTtlPyh0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsPXRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWx8fHRoaXMuX2NvbmZpZy5pbnRlcnZhbCx0aGlzLl9jb25maWcuaW50ZXJ2YWw9ZSk6dGhpcy5fY29uZmlnLmludGVydmFsPXRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWx8fHRoaXMuX2NvbmZpZy5pbnRlcnZhbH19LGUuX3NsaWRlPWZ1bmN0aW9uKHQsZSl7dmFyIG4saSxhLHM9dGhpcyxsPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5hY3RpdmUuY2Fyb3VzZWwtaXRlbVwiKSxyPXRoaXMuX2dldEl0ZW1JbmRleChsKSx1PWV8fGwmJnRoaXMuX2dldEl0ZW1CeURpcmVjdGlvbih0LGwpLGY9dGhpcy5fZ2V0SXRlbUluZGV4KHUpLGM9Qm9vbGVhbih0aGlzLl9pbnRlcnZhbCk7aWYoXCJuZXh0XCI9PT10PyhuPVwiY2Fyb3VzZWwtaXRlbS1sZWZ0XCIsaT1cImNhcm91c2VsLWl0ZW0tbmV4dFwiLGE9XCJsZWZ0XCIpOihuPVwiY2Fyb3VzZWwtaXRlbS1yaWdodFwiLGk9XCJjYXJvdXNlbC1pdGVtLXByZXZcIixhPVwicmlnaHRcIiksdSYmby5kZWZhdWx0KHUpLmhhc0NsYXNzKFwiYWN0aXZlXCIpKXRoaXMuX2lzU2xpZGluZz0hMTtlbHNlIGlmKCF0aGlzLl90cmlnZ2VyU2xpZGVFdmVudCh1LGEpLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZsJiZ1KXt0aGlzLl9pc1NsaWRpbmc9ITAsYyYmdGhpcy5wYXVzZSgpLHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQodSksdGhpcy5fYWN0aXZlRWxlbWVudD11O3ZhciBoPW8uZGVmYXVsdC5FdmVudChcInNsaWQuYnMuY2Fyb3VzZWxcIix7cmVsYXRlZFRhcmdldDp1LGRpcmVjdGlvbjphLGZyb206cix0bzpmfSk7aWYoby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKFwic2xpZGVcIikpe28uZGVmYXVsdCh1KS5hZGRDbGFzcyhpKSxkLnJlZmxvdyh1KSxvLmRlZmF1bHQobCkuYWRkQ2xhc3Mobiksby5kZWZhdWx0KHUpLmFkZENsYXNzKG4pO3ZhciBnPWQuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQobCk7by5kZWZhdWx0KGwpLm9uZShkLlRSQU5TSVRJT05fRU5ELChmdW5jdGlvbigpe28uZGVmYXVsdCh1KS5yZW1vdmVDbGFzcyhuK1wiIFwiK2kpLmFkZENsYXNzKFwiYWN0aXZlXCIpLG8uZGVmYXVsdChsKS5yZW1vdmVDbGFzcyhcImFjdGl2ZSBcIitpK1wiIFwiK24pLHMuX2lzU2xpZGluZz0hMSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHQocy5fZWxlbWVudCkudHJpZ2dlcihoKX0pLDApfSkpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGcpfWVsc2Ugby5kZWZhdWx0KGwpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLG8uZGVmYXVsdCh1KS5hZGRDbGFzcyhcImFjdGl2ZVwiKSx0aGlzLl9pc1NsaWRpbmc9ITEsby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIoaCk7YyYmdGhpcy5jeWNsZSgpfX0sdC5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49by5kZWZhdWx0KHRoaXMpLmRhdGEoXCJicy5jYXJvdXNlbFwiKSxpPXIoe30sYixvLmRlZmF1bHQodGhpcykuZGF0YSgpKTtcIm9iamVjdFwiPT10eXBlb2YgZSYmKGk9cih7fSxpLGUpKTt2YXIgYT1cInN0cmluZ1wiPT10eXBlb2YgZT9lOmkuc2xpZGU7aWYobnx8KG49bmV3IHQodGhpcyxpKSxvLmRlZmF1bHQodGhpcykuZGF0YShcImJzLmNhcm91c2VsXCIsbikpLFwibnVtYmVyXCI9PXR5cGVvZiBlKW4udG8oZSk7ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgYSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIG5bYV0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkIFwiJythKydcIicpO25bYV0oKX1lbHNlIGkuaW50ZXJ2YWwmJmkucmlkZSYmKG4ucGF1c2UoKSxuLmN5Y2xlKCkpfSkpfSx0Ll9kYXRhQXBpQ2xpY2tIYW5kbGVyPWZ1bmN0aW9uKGUpe3ZhciBuPWQuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0aGlzKTtpZihuKXt2YXIgaT1vLmRlZmF1bHQobilbMF07aWYoaSYmby5kZWZhdWx0KGkpLmhhc0NsYXNzKFwiY2Fyb3VzZWxcIikpe3ZhciBhPXIoe30sby5kZWZhdWx0KGkpLmRhdGEoKSxvLmRlZmF1bHQodGhpcykuZGF0YSgpKSxzPXRoaXMuZ2V0QXR0cmlidXRlKFwiZGF0YS1zbGlkZS10b1wiKTtzJiYoYS5pbnRlcnZhbD0hMSksdC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoby5kZWZhdWx0KGkpLGEpLHMmJm8uZGVmYXVsdChpKS5kYXRhKFwiYnMuY2Fyb3VzZWxcIikudG8ocyksZS5wcmV2ZW50RGVmYXVsdCgpfX19LGwodCxudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC42LjBcIn19LHtrZXk6XCJEZWZhdWx0XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGJ9fV0pLHR9KCk7by5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLmNhcm91c2VsLmRhdGEtYXBpXCIsXCJbZGF0YS1zbGlkZV0sIFtkYXRhLXNsaWRlLXRvXVwiLHcuX2RhdGFBcGlDbGlja0hhbmRsZXIpLG8uZGVmYXVsdCh3aW5kb3cpLm9uKFwibG9hZC5icy5jYXJvdXNlbC5kYXRhLWFwaVwiLChmdW5jdGlvbigpe2Zvcih2YXIgdD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXJpZGU9XCJjYXJvdXNlbFwiXScpKSxlPTAsbj10Lmxlbmd0aDtlPG47ZSsrKXt2YXIgaT1vLmRlZmF1bHQodFtlXSk7dy5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoaSxpLmRhdGEoKSl9fSkpLG8uZGVmYXVsdC5mbltwXT13Ll9qUXVlcnlJbnRlcmZhY2Usby5kZWZhdWx0LmZuW3BdLkNvbnN0cnVjdG9yPXcsby5kZWZhdWx0LmZuW3BdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gby5kZWZhdWx0LmZuW3BdPXYsdy5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgVD1cImNvbGxhcHNlXCIsQz1vLmRlZmF1bHQuZm5bVF0sUz17dG9nZ2xlOiEwLHBhcmVudDpcIlwifSxOPXt0b2dnbGU6XCJib29sZWFuXCIscGFyZW50OlwiKHN0cmluZ3xlbGVtZW50KVwifSxEPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3RoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9lbGVtZW50PXQsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl90cmlnZ2VyQXJyYXk9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS10b2dnbGU9XCJjb2xsYXBzZVwiXVtocmVmPVwiIycrdC5pZCsnXCJdLFtkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtdGFyZ2V0PVwiIycrdC5pZCsnXCJdJykpO2Zvcih2YXIgbj1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdJykpLGk9MCxvPW4ubGVuZ3RoO2k8bztpKyspe3ZhciBhPW5baV0scz1kLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoYSksbD1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocykpLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSkpO251bGwhPT1zJiZsLmxlbmd0aD4wJiYodGhpcy5fc2VsZWN0b3I9cyx0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChhKSl9dGhpcy5fcGFyZW50PXRoaXMuX2NvbmZpZy5wYXJlbnQ/dGhpcy5fZ2V0UGFyZW50KCk6bnVsbCx0aGlzLl9jb25maWcucGFyZW50fHx0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fZWxlbWVudCx0aGlzLl90cmlnZ2VyQXJyYXkpLHRoaXMuX2NvbmZpZy50b2dnbGUmJnRoaXMudG9nZ2xlKCl9dmFyIGU9dC5wcm90b3R5cGU7cmV0dXJuIGUudG9nZ2xlPWZ1bmN0aW9uKCl7by5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKFwic2hvd1wiKT90aGlzLmhpZGUoKTp0aGlzLnNob3coKX0sZS5zaG93PWZ1bmN0aW9uKCl7dmFyIGUsbixpPXRoaXM7aWYoIXRoaXMuX2lzVHJhbnNpdGlvbmluZyYmIW8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhcInNob3dcIikmJih0aGlzLl9wYXJlbnQmJjA9PT0oZT1bXS5zbGljZS5jYWxsKHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLnNob3csIC5jb2xsYXBzaW5nXCIpKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBpLl9jb25maWcucGFyZW50P3QuZ2V0QXR0cmlidXRlKFwiZGF0YS1wYXJlbnRcIik9PT1pLl9jb25maWcucGFyZW50OnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiY29sbGFwc2VcIil9KSkpLmxlbmd0aCYmKGU9bnVsbCksIShlJiYobj1vLmRlZmF1bHQoZSkubm90KHRoaXMuX3NlbGVjdG9yKS5kYXRhKFwiYnMuY29sbGFwc2VcIikpJiZuLl9pc1RyYW5zaXRpb25pbmcpKSl7dmFyIGE9by5kZWZhdWx0LkV2ZW50KFwic2hvdy5icy5jb2xsYXBzZVwiKTtpZihvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihhKSwhYS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7ZSYmKHQuX2pRdWVyeUludGVyZmFjZS5jYWxsKG8uZGVmYXVsdChlKS5ub3QodGhpcy5fc2VsZWN0b3IpLFwiaGlkZVwiKSxufHxvLmRlZmF1bHQoZSkuZGF0YShcImJzLmNvbGxhcHNlXCIsbnVsbCkpO3ZhciBzPXRoaXMuX2dldERpbWVuc2lvbigpO28uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhcImNvbGxhcHNlXCIpLmFkZENsYXNzKFwiY29sbGFwc2luZ1wiKSx0aGlzLl9lbGVtZW50LnN0eWxlW3NdPTAsdGhpcy5fdHJpZ2dlckFycmF5Lmxlbmd0aCYmby5kZWZhdWx0KHRoaXMuX3RyaWdnZXJBcnJheSkucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZWRcIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMCksdGhpcy5zZXRUcmFuc2l0aW9uaW5nKCEwKTt2YXIgbD1cInNjcm9sbFwiKyhzWzBdLnRvVXBwZXJDYXNlKCkrcy5zbGljZSgxKSkscj1kLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO28uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5vbmUoZC5UUkFOU0lUSU9OX0VORCwoZnVuY3Rpb24oKXtvLmRlZmF1bHQoaS5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2Ugc2hvd1wiKSxpLl9lbGVtZW50LnN0eWxlW3NdPVwiXCIsaS5zZXRUcmFuc2l0aW9uaW5nKCExKSxvLmRlZmF1bHQoaS5fZWxlbWVudCkudHJpZ2dlcihcInNob3duLmJzLmNvbGxhcHNlXCIpfSkpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHIpLHRoaXMuX2VsZW1lbnQuc3R5bGVbc109dGhpcy5fZWxlbWVudFtsXStcInB4XCJ9fX0sZS5oaWRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZighdGhpcy5faXNUcmFuc2l0aW9uaW5nJiZvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoXCJzaG93XCIpKXt2YXIgZT1vLmRlZmF1bHQuRXZlbnQoXCJoaWRlLmJzLmNvbGxhcHNlXCIpO2lmKG8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKGUpLCFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt2YXIgbj10aGlzLl9nZXREaW1lbnNpb24oKTt0aGlzLl9lbGVtZW50LnN0eWxlW25dPXRoaXMuX2VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbbl0rXCJweFwiLGQucmVmbG93KHRoaXMuX2VsZW1lbnQpLG8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5hZGRDbGFzcyhcImNvbGxhcHNpbmdcIikucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzZSBzaG93XCIpO3ZhciBpPXRoaXMuX3RyaWdnZXJBcnJheS5sZW5ndGg7aWYoaT4wKWZvcih2YXIgYT0wO2E8aTthKyspe3ZhciBzPXRoaXMuX3RyaWdnZXJBcnJheVthXSxsPWQuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChzKTtpZihudWxsIT09bClvLmRlZmF1bHQoW10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGwpKSkuaGFzQ2xhc3MoXCJzaG93XCIpfHxvLmRlZmF1bHQocykuYWRkQ2xhc3MoXCJjb2xsYXBzZWRcIikuYXR0cihcImFyaWEtZXhwYW5kZWRcIiwhMSl9dGhpcy5zZXRUcmFuc2l0aW9uaW5nKCEwKTt0aGlzLl9lbGVtZW50LnN0eWxlW25dPVwiXCI7dmFyIHI9ZC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkub25lKGQuVFJBTlNJVElPTl9FTkQsKGZ1bmN0aW9uKCl7dC5zZXRUcmFuc2l0aW9uaW5nKCExKSxvLmRlZmF1bHQodC5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoXCJjb2xsYXBzaW5nXCIpLmFkZENsYXNzKFwiY29sbGFwc2VcIikudHJpZ2dlcihcImhpZGRlbi5icy5jb2xsYXBzZVwiKX0pKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChyKX19fSxlLnNldFRyYW5zaXRpb25pbmc9ZnVuY3Rpb24odCl7dGhpcy5faXNUcmFuc2l0aW9uaW5nPXR9LGUuZGlzcG9zZT1mdW5jdGlvbigpe28uZGVmYXVsdC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsXCJicy5jb2xsYXBzZVwiKSx0aGlzLl9jb25maWc9bnVsbCx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5fdHJpZ2dlckFycmF5PW51bGwsdGhpcy5faXNUcmFuc2l0aW9uaW5nPW51bGx9LGUuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4odD1yKHt9LFMsdCkpLnRvZ2dsZT1Cb29sZWFuKHQudG9nZ2xlKSxkLnR5cGVDaGVja0NvbmZpZyhULHQsTiksdH0sZS5fZ2V0RGltZW5zaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIG8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhcIndpZHRoXCIpP1wid2lkdGhcIjpcImhlaWdodFwifSxlLl9nZXRQYXJlbnQ9ZnVuY3Rpb24oKXt2YXIgZSxuPXRoaXM7ZC5pc0VsZW1lbnQodGhpcy5fY29uZmlnLnBhcmVudCk/KGU9dGhpcy5fY29uZmlnLnBhcmVudCxcInVuZGVmaW5lZFwiIT10eXBlb2YgdGhpcy5fY29uZmlnLnBhcmVudC5qcXVlcnkmJihlPXRoaXMuX2NvbmZpZy5wYXJlbnRbMF0pKTplPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5fY29uZmlnLnBhcmVudCk7dmFyIGk9J1tkYXRhLXRvZ2dsZT1cImNvbGxhcHNlXCJdW2RhdGEtcGFyZW50PVwiJyt0aGlzLl9jb25maWcucGFyZW50KydcIl0nLGE9W10uc2xpY2UuY2FsbChlLnF1ZXJ5U2VsZWN0b3JBbGwoaSkpO3JldHVybiBvLmRlZmF1bHQoYSkuZWFjaCgoZnVuY3Rpb24oZSxpKXtuLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModC5fZ2V0VGFyZ2V0RnJvbUVsZW1lbnQoaSksW2ldKX0pKSxlfSxlLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3M9ZnVuY3Rpb24odCxlKXt2YXIgbj1vLmRlZmF1bHQodCkuaGFzQ2xhc3MoXCJzaG93XCIpO2UubGVuZ3RoJiZvLmRlZmF1bHQoZSkudG9nZ2xlQ2xhc3MoXCJjb2xsYXBzZWRcIiwhbikuYXR0cihcImFyaWEtZXhwYW5kZWRcIixuKX0sdC5fZ2V0VGFyZ2V0RnJvbUVsZW1lbnQ9ZnVuY3Rpb24odCl7dmFyIGU9ZC5nZXRTZWxlY3RvckZyb21FbGVtZW50KHQpO3JldHVybiBlP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZSk6bnVsbH0sdC5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49by5kZWZhdWx0KHRoaXMpLGk9bi5kYXRhKFwiYnMuY29sbGFwc2VcIiksYT1yKHt9LFMsbi5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIGUmJmU/ZTp7fSk7aWYoIWkmJmEudG9nZ2xlJiZcInN0cmluZ1wiPT10eXBlb2YgZSYmL3Nob3d8aGlkZS8udGVzdChlKSYmKGEudG9nZ2xlPSExKSxpfHwoaT1uZXcgdCh0aGlzLGEpLG4uZGF0YShcImJzLmNvbGxhcHNlXCIsaSkpLFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgaVtlXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgXCInK2UrJ1wiJyk7aVtlXSgpfX0pKX0sbCh0LG51bGwsW3trZXk6XCJWRVJTSU9OXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCI0LjYuMFwifX0se2tleTpcIkRlZmF1bHRcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gU319XSksdH0oKTtvLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMuY29sbGFwc2UuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwiY29sbGFwc2VcIl0nLChmdW5jdGlvbih0KXtcIkFcIj09PXQuY3VycmVudFRhcmdldC50YWdOYW1lJiZ0LnByZXZlbnREZWZhdWx0KCk7dmFyIGU9by5kZWZhdWx0KHRoaXMpLG49ZC5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpLGk9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKG4pKTtvLmRlZmF1bHQoaSkuZWFjaCgoZnVuY3Rpb24oKXt2YXIgdD1vLmRlZmF1bHQodGhpcyksbj10LmRhdGEoXCJicy5jb2xsYXBzZVwiKT9cInRvZ2dsZVwiOmUuZGF0YSgpO0QuX2pRdWVyeUludGVyZmFjZS5jYWxsKHQsbil9KSl9KSksby5kZWZhdWx0LmZuW1RdPUQuX2pRdWVyeUludGVyZmFjZSxvLmRlZmF1bHQuZm5bVF0uQ29uc3RydWN0b3I9RCxvLmRlZmF1bHQuZm5bVF0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHQuZm5bVF09QyxELl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBrPVwiZHJvcGRvd25cIixBPW8uZGVmYXVsdC5mbltrXSxJPW5ldyBSZWdFeHAoXCIzOHw0MHwyN1wiKSxqPXtvZmZzZXQ6MCxmbGlwOiEwLGJvdW5kYXJ5Olwic2Nyb2xsUGFyZW50XCIscmVmZXJlbmNlOlwidG9nZ2xlXCIsZGlzcGxheTpcImR5bmFtaWNcIixwb3BwZXJDb25maWc6bnVsbH0sTz17b2Zmc2V0OlwiKG51bWJlcnxzdHJpbmd8ZnVuY3Rpb24pXCIsZmxpcDpcImJvb2xlYW5cIixib3VuZGFyeTpcIihzdHJpbmd8ZWxlbWVudClcIixyZWZlcmVuY2U6XCIoc3RyaW5nfGVsZW1lbnQpXCIsZGlzcGxheTpcInN0cmluZ1wiLHBvcHBlckNvbmZpZzpcIihudWxsfG9iamVjdClcIn0seD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fcG9wcGVyPW51bGwsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl9tZW51PXRoaXMuX2dldE1lbnVFbGVtZW50KCksdGhpcy5faW5OYXZiYXI9dGhpcy5fZGV0ZWN0TmF2YmFyKCksdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKX12YXIgZT10LnByb3RvdHlwZTtyZXR1cm4gZS50b2dnbGU9ZnVuY3Rpb24oKXtpZighdGhpcy5fZWxlbWVudC5kaXNhYmxlZCYmIW8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhcImRpc2FibGVkXCIpKXt2YXIgZT1vLmRlZmF1bHQodGhpcy5fbWVudSkuaGFzQ2xhc3MoXCJzaG93XCIpO3QuX2NsZWFyTWVudXMoKSxlfHx0aGlzLnNob3coITApfX0sZS5zaG93PWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPSExKSwhKHRoaXMuX2VsZW1lbnQuZGlzYWJsZWR8fG8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5oYXNDbGFzcyhcImRpc2FibGVkXCIpfHxvLmRlZmF1bHQodGhpcy5fbWVudSkuaGFzQ2xhc3MoXCJzaG93XCIpKSl7dmFyIG49e3JlbGF0ZWRUYXJnZXQ6dGhpcy5fZWxlbWVudH0saT1vLmRlZmF1bHQuRXZlbnQoXCJzaG93LmJzLmRyb3Bkb3duXCIsbikscz10Ll9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtpZihvLmRlZmF1bHQocykudHJpZ2dlcihpKSwhaS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7aWYoIXRoaXMuX2luTmF2YmFyJiZlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgYS5kZWZhdWx0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJCb290c3RyYXAncyBkcm9wZG93bnMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZylcIik7dmFyIGw9dGhpcy5fZWxlbWVudDtcInBhcmVudFwiPT09dGhpcy5fY29uZmlnLnJlZmVyZW5jZT9sPXM6ZC5pc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkmJihsPXRoaXMuX2NvbmZpZy5yZWZlcmVuY2UsXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UuanF1ZXJ5JiYobD10aGlzLl9jb25maWcucmVmZXJlbmNlWzBdKSksXCJzY3JvbGxQYXJlbnRcIiE9PXRoaXMuX2NvbmZpZy5ib3VuZGFyeSYmby5kZWZhdWx0KHMpLmFkZENsYXNzKFwicG9zaXRpb24tc3RhdGljXCIpLHRoaXMuX3BvcHBlcj1uZXcgYS5kZWZhdWx0KGwsdGhpcy5fbWVudSx0aGlzLl9nZXRQb3BwZXJDb25maWcoKSl9XCJvbnRvdWNoc3RhcnRcImluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmMD09PW8uZGVmYXVsdChzKS5jbG9zZXN0KFwiLm5hdmJhci1uYXZcIikubGVuZ3RoJiZvLmRlZmF1bHQoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vbihcIm1vdXNlb3ZlclwiLG51bGwsby5kZWZhdWx0Lm5vb3ApLHRoaXMuX2VsZW1lbnQuZm9jdXMoKSx0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIiwhMCksby5kZWZhdWx0KHRoaXMuX21lbnUpLnRvZ2dsZUNsYXNzKFwic2hvd1wiKSxvLmRlZmF1bHQocykudG9nZ2xlQ2xhc3MoXCJzaG93XCIpLnRyaWdnZXIoby5kZWZhdWx0LkV2ZW50KFwic2hvd24uYnMuZHJvcGRvd25cIixuKSl9fX0sZS5oaWRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2VsZW1lbnQuZGlzYWJsZWQmJiFvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoXCJkaXNhYmxlZFwiKSYmby5kZWZhdWx0KHRoaXMuX21lbnUpLmhhc0NsYXNzKFwic2hvd1wiKSl7dmFyIGU9e3JlbGF0ZWRUYXJnZXQ6dGhpcy5fZWxlbWVudH0sbj1vLmRlZmF1bHQuRXZlbnQoXCJoaWRlLmJzLmRyb3Bkb3duXCIsZSksaT10Ll9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtvLmRlZmF1bHQoaSkudHJpZ2dlcihuKSxuLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuZGVzdHJveSgpLG8uZGVmYXVsdCh0aGlzLl9tZW51KS50b2dnbGVDbGFzcyhcInNob3dcIiksby5kZWZhdWx0KGkpLnRvZ2dsZUNsYXNzKFwic2hvd1wiKS50cmlnZ2VyKG8uZGVmYXVsdC5FdmVudChcImhpZGRlbi5icy5kcm9wZG93blwiLGUpKSl9fSxlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtvLmRlZmF1bHQucmVtb3ZlRGF0YSh0aGlzLl9lbGVtZW50LFwiYnMuZHJvcGRvd25cIiksby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLm9mZihcIi5icy5kcm9wZG93blwiKSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5fbWVudT1udWxsLG51bGwhPT10aGlzLl9wb3BwZXImJih0aGlzLl9wb3BwZXIuZGVzdHJveSgpLHRoaXMuX3BvcHBlcj1udWxsKX0sZS51cGRhdGU9ZnVuY3Rpb24oKXt0aGlzLl9pbk5hdmJhcj10aGlzLl9kZXRlY3ROYXZiYXIoKSxudWxsIT09dGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuc2NoZWR1bGVVcGRhdGUoKX0sZS5fYWRkRXZlbnRMaXN0ZW5lcnM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO28uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5vbihcImNsaWNrLmJzLmRyb3Bkb3duXCIsKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLHQudG9nZ2xlKCl9KSl9LGUuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1yKHt9LHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCxvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkuZGF0YSgpLHQpLGQudHlwZUNoZWNrQ29uZmlnKGssdCx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSx0fSxlLl9nZXRNZW51RWxlbWVudD1mdW5jdGlvbigpe2lmKCF0aGlzLl9tZW51KXt2YXIgZT10Ll9nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtlJiYodGhpcy5fbWVudT1lLnF1ZXJ5U2VsZWN0b3IoXCIuZHJvcGRvd24tbWVudVwiKSl9cmV0dXJuIHRoaXMuX21lbnV9LGUuX2dldFBsYWNlbWVudD1mdW5jdGlvbigpe3ZhciB0PW8uZGVmYXVsdCh0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUpLGU9XCJib3R0b20tc3RhcnRcIjtyZXR1cm4gdC5oYXNDbGFzcyhcImRyb3B1cFwiKT9lPW8uZGVmYXVsdCh0aGlzLl9tZW51KS5oYXNDbGFzcyhcImRyb3Bkb3duLW1lbnUtcmlnaHRcIik/XCJ0b3AtZW5kXCI6XCJ0b3Atc3RhcnRcIjp0Lmhhc0NsYXNzKFwiZHJvcHJpZ2h0XCIpP2U9XCJyaWdodC1zdGFydFwiOnQuaGFzQ2xhc3MoXCJkcm9wbGVmdFwiKT9lPVwibGVmdC1zdGFydFwiOm8uZGVmYXVsdCh0aGlzLl9tZW51KS5oYXNDbGFzcyhcImRyb3Bkb3duLW1lbnUtcmlnaHRcIikmJihlPVwiYm90dG9tLWVuZFwiKSxlfSxlLl9kZXRlY3ROYXZiYXI9ZnVuY3Rpb24oKXtyZXR1cm4gby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLmNsb3Nlc3QoXCIubmF2YmFyXCIpLmxlbmd0aD4wfSxlLl9nZXRPZmZzZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9e307cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5fY29uZmlnLm9mZnNldD9lLmZuPWZ1bmN0aW9uKGUpe3JldHVybiBlLm9mZnNldHM9cih7fSxlLm9mZnNldHMsdC5fY29uZmlnLm9mZnNldChlLm9mZnNldHMsdC5fZWxlbWVudCl8fHt9KSxlfTplLm9mZnNldD10aGlzLl9jb25maWcub2Zmc2V0LGV9LGUuX2dldFBvcHBlckNvbmZpZz1mdW5jdGlvbigpe3ZhciB0PXtwbGFjZW1lbnQ6dGhpcy5fZ2V0UGxhY2VtZW50KCksbW9kaWZpZXJzOntvZmZzZXQ6dGhpcy5fZ2V0T2Zmc2V0KCksZmxpcDp7ZW5hYmxlZDp0aGlzLl9jb25maWcuZmxpcH0scHJldmVudE92ZXJmbG93Ontib3VuZGFyaWVzRWxlbWVudDp0aGlzLl9jb25maWcuYm91bmRhcnl9fX07cmV0dXJuXCJzdGF0aWNcIj09PXRoaXMuX2NvbmZpZy5kaXNwbGF5JiYodC5tb2RpZmllcnMuYXBwbHlTdHlsZT17ZW5hYmxlZDohMX0pLHIoe30sdCx0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnKX0sdC5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dmFyIG49by5kZWZhdWx0KHRoaXMpLmRhdGEoXCJicy5kcm9wZG93blwiKTtpZihufHwobj1uZXcgdCh0aGlzLFwib2JqZWN0XCI9PXR5cGVvZiBlP2U6bnVsbCksby5kZWZhdWx0KHRoaXMpLmRhdGEoXCJicy5kcm9wZG93blwiLG4pKSxcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIG5bZV0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkIFwiJytlKydcIicpO25bZV0oKX19KSl9LHQuX2NsZWFyTWVudXM9ZnVuY3Rpb24oZSl7aWYoIWV8fDMhPT1lLndoaWNoJiYoXCJrZXl1cFwiIT09ZS50eXBlfHw5PT09ZS53aGljaCkpZm9yKHZhciBuPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2RhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIl0nKSksaT0wLGE9bi5sZW5ndGg7aTxhO2krKyl7dmFyIHM9dC5fZ2V0UGFyZW50RnJvbUVsZW1lbnQobltpXSksbD1vLmRlZmF1bHQobltpXSkuZGF0YShcImJzLmRyb3Bkb3duXCIpLHI9e3JlbGF0ZWRUYXJnZXQ6bltpXX07aWYoZSYmXCJjbGlja1wiPT09ZS50eXBlJiYoci5jbGlja0V2ZW50PWUpLGwpe3ZhciB1PWwuX21lbnU7aWYoby5kZWZhdWx0KHMpLmhhc0NsYXNzKFwic2hvd1wiKSYmIShlJiYoXCJjbGlja1wiPT09ZS50eXBlJiYvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpfHxcImtleXVwXCI9PT1lLnR5cGUmJjk9PT1lLndoaWNoKSYmby5kZWZhdWx0LmNvbnRhaW5zKHMsZS50YXJnZXQpKSl7dmFyIGQ9by5kZWZhdWx0LkV2ZW50KFwiaGlkZS5icy5kcm9wZG93blwiLHIpO28uZGVmYXVsdChzKS50cmlnZ2VyKGQpLGQuaXNEZWZhdWx0UHJldmVudGVkKCl8fChcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZvLmRlZmF1bHQoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vZmYoXCJtb3VzZW92ZXJcIixudWxsLG8uZGVmYXVsdC5ub29wKSxuW2ldLnNldEF0dHJpYnV0ZShcImFyaWEtZXhwYW5kZWRcIixcImZhbHNlXCIpLGwuX3BvcHBlciYmbC5fcG9wcGVyLmRlc3Ryb3koKSxvLmRlZmF1bHQodSkucmVtb3ZlQ2xhc3MoXCJzaG93XCIpLG8uZGVmYXVsdChzKS5yZW1vdmVDbGFzcyhcInNob3dcIikudHJpZ2dlcihvLmRlZmF1bHQuRXZlbnQoXCJoaWRkZW4uYnMuZHJvcGRvd25cIixyKSkpfX19fSx0Ll9nZXRQYXJlbnRGcm9tRWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZSxuPWQuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCh0KTtyZXR1cm4gbiYmKGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKSksZXx8dC5wYXJlbnROb2RlfSx0Ll9kYXRhQXBpS2V5ZG93bkhhbmRsZXI9ZnVuY3Rpb24oZSl7aWYoISgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGUudGFyZ2V0LnRhZ05hbWUpPzMyPT09ZS53aGljaHx8MjchPT1lLndoaWNoJiYoNDAhPT1lLndoaWNoJiYzOCE9PWUud2hpY2h8fG8uZGVmYXVsdChlLnRhcmdldCkuY2xvc2VzdChcIi5kcm9wZG93bi1tZW51XCIpLmxlbmd0aCk6IUkudGVzdChlLndoaWNoKSkmJiF0aGlzLmRpc2FibGVkJiYhby5kZWZhdWx0KHRoaXMpLmhhc0NsYXNzKFwiZGlzYWJsZWRcIikpe3ZhciBuPXQuX2dldFBhcmVudEZyb21FbGVtZW50KHRoaXMpLGk9by5kZWZhdWx0KG4pLmhhc0NsYXNzKFwic2hvd1wiKTtpZihpfHwyNyE9PWUud2hpY2gpe2lmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpLCFpfHwyNz09PWUud2hpY2h8fDMyPT09ZS53aGljaClyZXR1cm4gMjc9PT1lLndoaWNoJiZvLmRlZmF1bHQobi5xdWVyeVNlbGVjdG9yKCdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScpKS50cmlnZ2VyKFwiZm9jdXNcIiksdm9pZCBvLmRlZmF1bHQodGhpcykudHJpZ2dlcihcImNsaWNrXCIpO3ZhciBhPVtdLnNsaWNlLmNhbGwobi5xdWVyeVNlbGVjdG9yQWxsKFwiLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZClcIikpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIG8uZGVmYXVsdCh0KS5pcyhcIjp2aXNpYmxlXCIpfSkpO2lmKDAhPT1hLmxlbmd0aCl7dmFyIHM9YS5pbmRleE9mKGUudGFyZ2V0KTszOD09PWUud2hpY2gmJnM+MCYmcy0tLDQwPT09ZS53aGljaCYmczxhLmxlbmd0aC0xJiZzKyssczwwJiYocz0wKSxhW3NdLmZvY3VzKCl9fX19LGwodCxudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC42LjBcIn19LHtrZXk6XCJEZWZhdWx0XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGp9fSx7a2V5OlwiRGVmYXVsdFR5cGVcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gT319XSksdH0oKTtvLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwia2V5ZG93bi5icy5kcm9wZG93bi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScseC5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihcImtleWRvd24uYnMuZHJvcGRvd24uZGF0YS1hcGlcIixcIi5kcm9wZG93bi1tZW51XCIseC5fZGF0YUFwaUtleWRvd25IYW5kbGVyKS5vbihcImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpIGtleXVwLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIseC5fY2xlYXJNZW51cykub24oXCJjbGljay5icy5kcm9wZG93bi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLHguX2pRdWVyeUludGVyZmFjZS5jYWxsKG8uZGVmYXVsdCh0aGlzKSxcInRvZ2dsZVwiKX0pKS5vbihcImNsaWNrLmJzLmRyb3Bkb3duLmRhdGEtYXBpXCIsXCIuZHJvcGRvd24gZm9ybVwiLChmdW5jdGlvbih0KXt0LnN0b3BQcm9wYWdhdGlvbigpfSkpLG8uZGVmYXVsdC5mbltrXT14Ll9qUXVlcnlJbnRlcmZhY2Usby5kZWZhdWx0LmZuW2tdLkNvbnN0cnVjdG9yPXgsby5kZWZhdWx0LmZuW2tdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gby5kZWZhdWx0LmZuW2tdPUEseC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgUD1vLmRlZmF1bHQuZm4ubW9kYWwsUj17YmFja2Ryb3A6ITAsa2V5Ym9hcmQ6ITAsZm9jdXM6ITAsc2hvdzohMH0sTD17YmFja2Ryb3A6XCIoYm9vbGVhbnxzdHJpbmcpXCIsa2V5Ym9hcmQ6XCJib29sZWFuXCIsZm9jdXM6XCJib29sZWFuXCIsc2hvdzpcImJvb2xlYW5cIn0scT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9jb25maWc9dGhpcy5fZ2V0Q29uZmlnKGUpLHRoaXMuX2VsZW1lbnQ9dCx0aGlzLl9kaWFsb2c9dC5xdWVyeVNlbGVjdG9yKFwiLm1vZGFsLWRpYWxvZ1wiKSx0aGlzLl9iYWNrZHJvcD1udWxsLHRoaXMuX2lzU2hvd249ITEsdGhpcy5faXNCb2R5T3ZlcmZsb3dpbmc9ITEsdGhpcy5faWdub3JlQmFja2Ryb3BDbGljaz0hMSx0aGlzLl9pc1RyYW5zaXRpb25pbmc9ITEsdGhpcy5fc2Nyb2xsYmFyV2lkdGg9MH12YXIgZT10LnByb3RvdHlwZTtyZXR1cm4gZS50b2dnbGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2lzU2hvd24/dGhpcy5oaWRlKCk6dGhpcy5zaG93KHQpfSxlLnNob3c9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztpZighdGhpcy5faXNTaG93biYmIXRoaXMuX2lzVHJhbnNpdGlvbmluZyl7by5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKFwiZmFkZVwiKSYmKHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMCk7dmFyIG49by5kZWZhdWx0LkV2ZW50KFwic2hvdy5icy5tb2RhbFwiLHtyZWxhdGVkVGFyZ2V0OnR9KTtvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihuKSx0aGlzLl9pc1Nob3dufHxuLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwodGhpcy5faXNTaG93bj0hMCx0aGlzLl9jaGVja1Njcm9sbGJhcigpLHRoaXMuX3NldFNjcm9sbGJhcigpLHRoaXMuX2FkanVzdERpYWxvZygpLHRoaXMuX3NldEVzY2FwZUV2ZW50KCksdGhpcy5fc2V0UmVzaXplRXZlbnQoKSxvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkub24oXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIsJ1tkYXRhLWRpc21pc3M9XCJtb2RhbFwiXScsKGZ1bmN0aW9uKHQpe3JldHVybiBlLmhpZGUodCl9KSksby5kZWZhdWx0KHRoaXMuX2RpYWxvZykub24oXCJtb3VzZWRvd24uZGlzbWlzcy5icy5tb2RhbFwiLChmdW5jdGlvbigpe28uZGVmYXVsdChlLl9lbGVtZW50KS5vbmUoXCJtb3VzZXVwLmRpc21pc3MuYnMubW9kYWxcIiwoZnVuY3Rpb24odCl7by5kZWZhdWx0KHQudGFyZ2V0KS5pcyhlLl9lbGVtZW50KSYmKGUuX2lnbm9yZUJhY2tkcm9wQ2xpY2s9ITApfSkpfSkpLHRoaXMuX3Nob3dCYWNrZHJvcCgoZnVuY3Rpb24oKXtyZXR1cm4gZS5fc2hvd0VsZW1lbnQodCl9KSkpfX0sZS5oaWRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7aWYodCYmdC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2lzU2hvd24mJiF0aGlzLl9pc1RyYW5zaXRpb25pbmcpe3ZhciBuPW8uZGVmYXVsdC5FdmVudChcImhpZGUuYnMubW9kYWxcIik7aWYoby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobiksdGhpcy5faXNTaG93biYmIW4uaXNEZWZhdWx0UHJldmVudGVkKCkpe3RoaXMuX2lzU2hvd249ITE7dmFyIGk9by5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKFwiZmFkZVwiKTtpZihpJiYodGhpcy5faXNUcmFuc2l0aW9uaW5nPSEwKSx0aGlzLl9zZXRFc2NhcGVFdmVudCgpLHRoaXMuX3NldFJlc2l6ZUV2ZW50KCksby5kZWZhdWx0KGRvY3VtZW50KS5vZmYoXCJmb2N1c2luLmJzLm1vZGFsXCIpLG8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5yZW1vdmVDbGFzcyhcInNob3dcIiksby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLm9mZihcImNsaWNrLmRpc21pc3MuYnMubW9kYWxcIiksby5kZWZhdWx0KHRoaXMuX2RpYWxvZykub2ZmKFwibW91c2Vkb3duLmRpc21pc3MuYnMubW9kYWxcIiksaSl7dmFyIGE9ZC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkub25lKGQuVFJBTlNJVElPTl9FTkQsKGZ1bmN0aW9uKHQpe3JldHVybiBlLl9oaWRlTW9kYWwodCl9KSkuZW11bGF0ZVRyYW5zaXRpb25FbmQoYSl9ZWxzZSB0aGlzLl9oaWRlTW9kYWwoKX19fSxlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtbd2luZG93LHRoaXMuX2VsZW1lbnQsdGhpcy5fZGlhbG9nXS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gby5kZWZhdWx0KHQpLm9mZihcIi5icy5tb2RhbFwiKX0pKSxvLmRlZmF1bHQoZG9jdW1lbnQpLm9mZihcImZvY3VzaW4uYnMubW9kYWxcIiksby5kZWZhdWx0LnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCxcImJzLm1vZGFsXCIpLHRoaXMuX2NvbmZpZz1udWxsLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLl9kaWFsb2c9bnVsbCx0aGlzLl9iYWNrZHJvcD1udWxsLHRoaXMuX2lzU2hvd249bnVsbCx0aGlzLl9pc0JvZHlPdmVyZmxvd2luZz1udWxsLHRoaXMuX2lnbm9yZUJhY2tkcm9wQ2xpY2s9bnVsbCx0aGlzLl9pc1RyYW5zaXRpb25pbmc9bnVsbCx0aGlzLl9zY3JvbGxiYXJXaWR0aD1udWxsfSxlLmhhbmRsZVVwZGF0ZT1mdW5jdGlvbigpe3RoaXMuX2FkanVzdERpYWxvZygpfSxlLl9nZXRDb25maWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9cih7fSxSLHQpLGQudHlwZUNoZWNrQ29uZmlnKFwibW9kYWxcIix0LEwpLHR9LGUuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb249ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9by5kZWZhdWx0LkV2ZW50KFwiaGlkZVByZXZlbnRlZC5icy5tb2RhbFwiKTtpZihvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihlKSwhZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl7dmFyIG49dGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQ+ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtufHwodGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1k9XCJoaWRkZW5cIiksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwibW9kYWwtc3RhdGljXCIpO3ZhciBpPWQuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy5fZGlhbG9nKTtvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkub2ZmKGQuVFJBTlNJVElPTl9FTkQpLG8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5vbmUoZC5UUkFOU0lUSU9OX0VORCwoZnVuY3Rpb24oKXt0Ll9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJtb2RhbC1zdGF0aWNcIiksbnx8by5kZWZhdWx0KHQuX2VsZW1lbnQpLm9uZShkLlRSQU5TSVRJT05fRU5ELChmdW5jdGlvbigpe3QuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZPVwiXCJ9KSkuZW11bGF0ZVRyYW5zaXRpb25FbmQodC5fZWxlbWVudCxpKX0pKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpKSx0aGlzLl9lbGVtZW50LmZvY3VzKCl9fSxlLl9zaG93RWxlbWVudD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49by5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKFwiZmFkZVwiKSxpPXRoaXMuX2RpYWxvZz90aGlzLl9kaWFsb2cucXVlcnlTZWxlY3RvcihcIi5tb2RhbC1ib2R5XCIpOm51bGw7dGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERXx8ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiLHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFwiYXJpYS1oaWRkZW5cIiksdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLW1vZGFsXCIsITApLHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKFwicm9sZVwiLFwiZGlhbG9nXCIpLG8uZGVmYXVsdCh0aGlzLl9kaWFsb2cpLmhhc0NsYXNzKFwibW9kYWwtZGlhbG9nLXNjcm9sbGFibGVcIikmJmk/aS5zY3JvbGxUb3A9MDp0aGlzLl9lbGVtZW50LnNjcm9sbFRvcD0wLG4mJmQucmVmbG93KHRoaXMuX2VsZW1lbnQpLG8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5hZGRDbGFzcyhcInNob3dcIiksdGhpcy5fY29uZmlnLmZvY3VzJiZ0aGlzLl9lbmZvcmNlRm9jdXMoKTt2YXIgYT1vLmRlZmF1bHQuRXZlbnQoXCJzaG93bi5icy5tb2RhbFwiLHtyZWxhdGVkVGFyZ2V0OnR9KSxzPWZ1bmN0aW9uKCl7ZS5fY29uZmlnLmZvY3VzJiZlLl9lbGVtZW50LmZvY3VzKCksZS5faXNUcmFuc2l0aW9uaW5nPSExLG8uZGVmYXVsdChlLl9lbGVtZW50KS50cmlnZ2VyKGEpfTtpZihuKXt2YXIgbD1kLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2RpYWxvZyk7by5kZWZhdWx0KHRoaXMuX2RpYWxvZykub25lKGQuVFJBTlNJVElPTl9FTkQscykuZW11bGF0ZVRyYW5zaXRpb25FbmQobCl9ZWxzZSBzKCl9LGUuX2VuZm9yY2VGb2N1cz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7by5kZWZhdWx0KGRvY3VtZW50KS5vZmYoXCJmb2N1c2luLmJzLm1vZGFsXCIpLm9uKFwiZm9jdXNpbi5icy5tb2RhbFwiLChmdW5jdGlvbihlKXtkb2N1bWVudCE9PWUudGFyZ2V0JiZ0Ll9lbGVtZW50IT09ZS50YXJnZXQmJjA9PT1vLmRlZmF1bHQodC5fZWxlbWVudCkuaGFzKGUudGFyZ2V0KS5sZW5ndGgmJnQuX2VsZW1lbnQuZm9jdXMoKX0pKX0sZS5fc2V0RXNjYXBlRXZlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2lzU2hvd24/by5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLm9uKFwia2V5ZG93bi5kaXNtaXNzLmJzLm1vZGFsXCIsKGZ1bmN0aW9uKGUpe3QuX2NvbmZpZy5rZXlib2FyZCYmMjc9PT1lLndoaWNoPyhlLnByZXZlbnREZWZhdWx0KCksdC5oaWRlKCkpOnQuX2NvbmZpZy5rZXlib2FyZHx8MjchPT1lLndoaWNofHx0Ll90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCl9KSk6dGhpcy5faXNTaG93bnx8by5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLm9mZihcImtleWRvd24uZGlzbWlzcy5icy5tb2RhbFwiKX0sZS5fc2V0UmVzaXplRXZlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuX2lzU2hvd24/by5kZWZhdWx0KHdpbmRvdykub24oXCJyZXNpemUuYnMubW9kYWxcIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuaGFuZGxlVXBkYXRlKGUpfSkpOm8uZGVmYXVsdCh3aW5kb3cpLm9mZihcInJlc2l6ZS5icy5tb2RhbFwiKX0sZS5faGlkZU1vZGFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpczt0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXk9XCJub25lXCIsdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhpZGRlblwiLCEwKSx0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtbW9kYWxcIiksdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJyb2xlXCIpLHRoaXMuX2lzVHJhbnNpdGlvbmluZz0hMSx0aGlzLl9zaG93QmFja2Ryb3AoKGZ1bmN0aW9uKCl7by5kZWZhdWx0KGRvY3VtZW50LmJvZHkpLnJlbW92ZUNsYXNzKFwibW9kYWwtb3BlblwiKSx0Ll9yZXNldEFkanVzdG1lbnRzKCksdC5fcmVzZXRTY3JvbGxiYXIoKSxvLmRlZmF1bHQodC5fZWxlbWVudCkudHJpZ2dlcihcImhpZGRlbi5icy5tb2RhbFwiKX0pKX0sZS5fcmVtb3ZlQmFja2Ryb3A9ZnVuY3Rpb24oKXt0aGlzLl9iYWNrZHJvcCYmKG8uZGVmYXVsdCh0aGlzLl9iYWNrZHJvcCkucmVtb3ZlKCksdGhpcy5fYmFja2Ryb3A9bnVsbCl9LGUuX3Nob3dCYWNrZHJvcD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLG49by5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKFwiZmFkZVwiKT9cImZhZGVcIjpcIlwiO2lmKHRoaXMuX2lzU2hvd24mJnRoaXMuX2NvbmZpZy5iYWNrZHJvcCl7aWYodGhpcy5fYmFja2Ryb3A9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSx0aGlzLl9iYWNrZHJvcC5jbGFzc05hbWU9XCJtb2RhbC1iYWNrZHJvcFwiLG4mJnRoaXMuX2JhY2tkcm9wLmNsYXNzTGlzdC5hZGQobiksby5kZWZhdWx0KHRoaXMuX2JhY2tkcm9wKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KSxvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkub24oXCJjbGljay5kaXNtaXNzLmJzLm1vZGFsXCIsKGZ1bmN0aW9uKHQpe2UuX2lnbm9yZUJhY2tkcm9wQ2xpY2s/ZS5faWdub3JlQmFja2Ryb3BDbGljaz0hMTp0LnRhcmdldD09PXQuY3VycmVudFRhcmdldCYmKFwic3RhdGljXCI9PT1lLl9jb25maWcuYmFja2Ryb3A/ZS5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpOmUuaGlkZSgpKX0pKSxuJiZkLnJlZmxvdyh0aGlzLl9iYWNrZHJvcCksby5kZWZhdWx0KHRoaXMuX2JhY2tkcm9wKS5hZGRDbGFzcyhcInNob3dcIiksIXQpcmV0dXJuO2lmKCFuKXJldHVybiB2b2lkIHQoKTt2YXIgaT1kLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2JhY2tkcm9wKTtvLmRlZmF1bHQodGhpcy5fYmFja2Ryb3ApLm9uZShkLlRSQU5TSVRJT05fRU5ELHQpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKGkpfWVsc2UgaWYoIXRoaXMuX2lzU2hvd24mJnRoaXMuX2JhY2tkcm9wKXtvLmRlZmF1bHQodGhpcy5fYmFja2Ryb3ApLnJlbW92ZUNsYXNzKFwic2hvd1wiKTt2YXIgYT1mdW5jdGlvbigpe2UuX3JlbW92ZUJhY2tkcm9wKCksdCYmdCgpfTtpZihvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoXCJmYWRlXCIpKXt2YXIgcz1kLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2JhY2tkcm9wKTtvLmRlZmF1bHQodGhpcy5fYmFja2Ryb3ApLm9uZShkLlRSQU5TSVRJT05fRU5ELGEpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHMpfWVsc2UgYSgpfWVsc2UgdCYmdCgpfSxlLl9hZGp1c3REaWFsb2c9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodD5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OyF0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyYmdCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQ9dGhpcy5fc2Nyb2xsYmFyV2lkdGgrXCJweFwiKSx0aGlzLl9pc0JvZHlPdmVyZmxvd2luZyYmIXQmJih0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodD10aGlzLl9zY3JvbGxiYXJXaWR0aCtcInB4XCIpfSxlLl9yZXNldEFkanVzdG1lbnRzPWZ1bmN0aW9uKCl7dGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdD1cIlwiLHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0PVwiXCJ9LGUuX2NoZWNrU2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuYm9keS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9pc0JvZHlPdmVyZmxvd2luZz1NYXRoLnJvdW5kKHQubGVmdCt0LnJpZ2h0KTx3aW5kb3cuaW5uZXJXaWR0aCx0aGlzLl9zY3JvbGxiYXJXaWR0aD10aGlzLl9nZXRTY3JvbGxiYXJXaWR0aCgpfSxlLl9zZXRTY3JvbGxiYXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKHRoaXMuX2lzQm9keU92ZXJmbG93aW5nKXt2YXIgZT1bXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wXCIpKSxuPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5zdGlja3ktdG9wXCIpKTtvLmRlZmF1bHQoZSkuZWFjaCgoZnVuY3Rpb24oZSxuKXt2YXIgaT1uLnN0eWxlLnBhZGRpbmdSaWdodCxhPW8uZGVmYXVsdChuKS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIpO28uZGVmYXVsdChuKS5kYXRhKFwicGFkZGluZy1yaWdodFwiLGkpLmNzcyhcInBhZGRpbmctcmlnaHRcIixwYXJzZUZsb2F0KGEpK3QuX3Njcm9sbGJhcldpZHRoK1wicHhcIil9KSksby5kZWZhdWx0KG4pLmVhY2goKGZ1bmN0aW9uKGUsbil7dmFyIGk9bi5zdHlsZS5tYXJnaW5SaWdodCxhPW8uZGVmYXVsdChuKS5jc3MoXCJtYXJnaW4tcmlnaHRcIik7by5kZWZhdWx0KG4pLmRhdGEoXCJtYXJnaW4tcmlnaHRcIixpKS5jc3MoXCJtYXJnaW4tcmlnaHRcIixwYXJzZUZsb2F0KGEpLXQuX3Njcm9sbGJhcldpZHRoK1wicHhcIil9KSk7dmFyIGk9ZG9jdW1lbnQuYm9keS5zdHlsZS5wYWRkaW5nUmlnaHQsYT1vLmRlZmF1bHQoZG9jdW1lbnQuYm9keSkuY3NzKFwicGFkZGluZy1yaWdodFwiKTtvLmRlZmF1bHQoZG9jdW1lbnQuYm9keSkuZGF0YShcInBhZGRpbmctcmlnaHRcIixpKS5jc3MoXCJwYWRkaW5nLXJpZ2h0XCIscGFyc2VGbG9hdChhKSt0aGlzLl9zY3JvbGxiYXJXaWR0aCtcInB4XCIpfW8uZGVmYXVsdChkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhcIm1vZGFsLW9wZW5cIil9LGUuX3Jlc2V0U2Nyb2xsYmFyPWZ1bmN0aW9uKCl7dmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwiLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcFwiKSk7by5kZWZhdWx0KHQpLmVhY2goKGZ1bmN0aW9uKHQsZSl7dmFyIG49by5kZWZhdWx0KGUpLmRhdGEoXCJwYWRkaW5nLXJpZ2h0XCIpO28uZGVmYXVsdChlKS5yZW1vdmVEYXRhKFwicGFkZGluZy1yaWdodFwiKSxlLnN0eWxlLnBhZGRpbmdSaWdodD1ufHxcIlwifSkpO3ZhciBlPVtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5zdGlja3ktdG9wXCIpKTtvLmRlZmF1bHQoZSkuZWFjaCgoZnVuY3Rpb24odCxlKXt2YXIgbj1vLmRlZmF1bHQoZSkuZGF0YShcIm1hcmdpbi1yaWdodFwiKTtcInVuZGVmaW5lZFwiIT10eXBlb2YgbiYmby5kZWZhdWx0KGUpLmNzcyhcIm1hcmdpbi1yaWdodFwiLG4pLnJlbW92ZURhdGEoXCJtYXJnaW4tcmlnaHRcIil9KSk7dmFyIG49by5kZWZhdWx0KGRvY3VtZW50LmJvZHkpLmRhdGEoXCJwYWRkaW5nLXJpZ2h0XCIpO28uZGVmYXVsdChkb2N1bWVudC5ib2R5KS5yZW1vdmVEYXRhKFwicGFkZGluZy1yaWdodFwiKSxkb2N1bWVudC5ib2R5LnN0eWxlLnBhZGRpbmdSaWdodD1ufHxcIlwifSxlLl9nZXRTY3JvbGxiYXJXaWR0aD1mdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7dC5jbGFzc05hbWU9XCJtb2RhbC1zY3JvbGxiYXItbWVhc3VyZVwiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodCk7dmFyIGU9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aC10LmNsaWVudFdpZHRoO3JldHVybiBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHQpLGV9LHQuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGk9by5kZWZhdWx0KHRoaXMpLmRhdGEoXCJicy5tb2RhbFwiKSxhPXIoe30sUixvLmRlZmF1bHQodGhpcykuZGF0YSgpLFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlP2U6e30pO2lmKGl8fChpPW5ldyB0KHRoaXMsYSksby5kZWZhdWx0KHRoaXMpLmRhdGEoXCJicy5tb2RhbFwiLGkpKSxcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGlbZV0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkIFwiJytlKydcIicpO2lbZV0obil9ZWxzZSBhLnNob3cmJmkuc2hvdyhuKX0pKX0sbCh0LG51bGwsW3trZXk6XCJWRVJTSU9OXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCI0LjYuMFwifX0se2tleTpcIkRlZmF1bHRcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUn19XSksdH0oKTtvLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYnMubW9kYWwuZGF0YS1hcGlcIiwnW2RhdGEtdG9nZ2xlPVwibW9kYWxcIl0nLChmdW5jdGlvbih0KXt2YXIgZSxuPXRoaXMsaT1kLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcyk7aSYmKGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpKSk7dmFyIGE9by5kZWZhdWx0KGUpLmRhdGEoXCJicy5tb2RhbFwiKT9cInRvZ2dsZVwiOnIoe30sby5kZWZhdWx0KGUpLmRhdGEoKSxvLmRlZmF1bHQodGhpcykuZGF0YSgpKTtcIkFcIiE9PXRoaXMudGFnTmFtZSYmXCJBUkVBXCIhPT10aGlzLnRhZ05hbWV8fHQucHJldmVudERlZmF1bHQoKTt2YXIgcz1vLmRlZmF1bHQoZSkub25lKFwic2hvdy5icy5tb2RhbFwiLChmdW5jdGlvbih0KXt0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHxzLm9uZShcImhpZGRlbi5icy5tb2RhbFwiLChmdW5jdGlvbigpe28uZGVmYXVsdChuKS5pcyhcIjp2aXNpYmxlXCIpJiZuLmZvY3VzKCl9KSl9KSk7cS5falF1ZXJ5SW50ZXJmYWNlLmNhbGwoby5kZWZhdWx0KGUpLGEsdGhpcyl9KSksby5kZWZhdWx0LmZuLm1vZGFsPXEuX2pRdWVyeUludGVyZmFjZSxvLmRlZmF1bHQuZm4ubW9kYWwuQ29uc3RydWN0b3I9cSxvLmRlZmF1bHQuZm4ubW9kYWwubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHQuZm4ubW9kYWw9UCxxLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBGPVtcImJhY2tncm91bmRcIixcImNpdGVcIixcImhyZWZcIixcIml0ZW10eXBlXCIsXCJsb25nZGVzY1wiLFwicG9zdGVyXCIsXCJzcmNcIixcInhsaW5rOmhyZWZcIl0sUT17XCIqXCI6W1wiY2xhc3NcIixcImRpclwiLFwiaWRcIixcImxhbmdcIixcInJvbGVcIiwvXmFyaWEtW1xcdy1dKiQvaV0sYTpbXCJ0YXJnZXRcIixcImhyZWZcIixcInRpdGxlXCIsXCJyZWxcIl0sYXJlYTpbXSxiOltdLGJyOltdLGNvbDpbXSxjb2RlOltdLGRpdjpbXSxlbTpbXSxocjpbXSxoMTpbXSxoMjpbXSxoMzpbXSxoNDpbXSxoNTpbXSxoNjpbXSxpOltdLGltZzpbXCJzcmNcIixcInNyY3NldFwiLFwiYWx0XCIsXCJ0aXRsZVwiLFwid2lkdGhcIixcImhlaWdodFwiXSxsaTpbXSxvbDpbXSxwOltdLHByZTpbXSxzOltdLHNtYWxsOltdLHNwYW46W10sc3ViOltdLHN1cDpbXSxzdHJvbmc6W10sdTpbXSx1bDpbXX0sQj0vXig/Oig/Omh0dHBzP3xtYWlsdG98ZnRwfHRlbHxmaWxlKTp8W14jJi86P10qKD86WyMvP118JCkpL2dpLEg9L15kYXRhOig/OmltYWdlXFwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwKXx2aWRlb1xcLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1xcLyg/Om1wM3xvZ2F8b2dnfG9wdXMpKTtiYXNlNjQsW1xcZCsvYS16XSs9KiQvaTtmdW5jdGlvbiBVKHQsZSxuKXtpZigwPT09dC5sZW5ndGgpcmV0dXJuIHQ7aWYobiYmXCJmdW5jdGlvblwiPT10eXBlb2YgbilyZXR1cm4gbih0KTtmb3IodmFyIGk9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcodCxcInRleHQvaHRtbFwiKSxvPU9iamVjdC5rZXlzKGUpLGE9W10uc2xpY2UuY2FsbChpLmJvZHkucXVlcnlTZWxlY3RvckFsbChcIipcIikpLHM9ZnVuY3Rpb24odCxuKXt2YXIgaT1hW3RdLHM9aS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKC0xPT09by5pbmRleE9mKGkubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIGkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpKSxcImNvbnRpbnVlXCI7dmFyIGw9W10uc2xpY2UuY2FsbChpLmF0dHJpYnV0ZXMpLHI9W10uY29uY2F0KGVbXCIqXCJdfHxbXSxlW3NdfHxbXSk7bC5mb3JFYWNoKChmdW5jdGlvbih0KXsoZnVuY3Rpb24odCxlKXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoLTEhPT1lLmluZGV4T2YobikpcmV0dXJuLTE9PT1GLmluZGV4T2Yobil8fEJvb2xlYW4odC5ub2RlVmFsdWUubWF0Y2goQil8fHQubm9kZVZhbHVlLm1hdGNoKEgpKTtmb3IodmFyIGk9ZS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUmVnRXhwfSkpLG89MCxhPWkubGVuZ3RoO288YTtvKyspaWYobi5tYXRjaChpW29dKSlyZXR1cm4hMDtyZXR1cm4hMX0pKHQscil8fGkucmVtb3ZlQXR0cmlidXRlKHQubm9kZU5hbWUpfSkpfSxsPTAscj1hLmxlbmd0aDtsPHI7bCsrKXMobCk7cmV0dXJuIGkuYm9keS5pbm5lckhUTUx9dmFyIE09XCJ0b29sdGlwXCIsVz1vLmRlZmF1bHQuZm5bTV0sVj1uZXcgUmVnRXhwKFwiKF58XFxcXHMpYnMtdG9vbHRpcFxcXFxTK1wiLFwiZ1wiKSx6PVtcInNhbml0aXplXCIsXCJ3aGl0ZUxpc3RcIixcInNhbml0aXplRm5cIl0sSz17YW5pbWF0aW9uOlwiYm9vbGVhblwiLHRlbXBsYXRlOlwic3RyaW5nXCIsdGl0bGU6XCIoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pXCIsdHJpZ2dlcjpcInN0cmluZ1wiLGRlbGF5OlwiKG51bWJlcnxvYmplY3QpXCIsaHRtbDpcImJvb2xlYW5cIixzZWxlY3RvcjpcIihzdHJpbmd8Ym9vbGVhbilcIixwbGFjZW1lbnQ6XCIoc3RyaW5nfGZ1bmN0aW9uKVwiLG9mZnNldDpcIihudW1iZXJ8c3RyaW5nfGZ1bmN0aW9uKVwiLGNvbnRhaW5lcjpcIihzdHJpbmd8ZWxlbWVudHxib29sZWFuKVwiLGZhbGxiYWNrUGxhY2VtZW50OlwiKHN0cmluZ3xhcnJheSlcIixib3VuZGFyeTpcIihzdHJpbmd8ZWxlbWVudClcIixjdXN0b21DbGFzczpcIihzdHJpbmd8ZnVuY3Rpb24pXCIsc2FuaXRpemU6XCJib29sZWFuXCIsc2FuaXRpemVGbjpcIihudWxsfGZ1bmN0aW9uKVwiLHdoaXRlTGlzdDpcIm9iamVjdFwiLHBvcHBlckNvbmZpZzpcIihudWxsfG9iamVjdClcIn0sWD17QVVUTzpcImF1dG9cIixUT1A6XCJ0b3BcIixSSUdIVDpcInJpZ2h0XCIsQk9UVE9NOlwiYm90dG9tXCIsTEVGVDpcImxlZnRcIn0sWT17YW5pbWF0aW9uOiEwLHRlbXBsYXRlOic8ZGl2IGNsYXNzPVwidG9vbHRpcFwiIHJvbGU9XCJ0b29sdGlwXCI+PGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+PGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj48L2Rpdj4nLHRyaWdnZXI6XCJob3ZlciBmb2N1c1wiLHRpdGxlOlwiXCIsZGVsYXk6MCxodG1sOiExLHNlbGVjdG9yOiExLHBsYWNlbWVudDpcInRvcFwiLG9mZnNldDowLGNvbnRhaW5lcjohMSxmYWxsYmFja1BsYWNlbWVudDpcImZsaXBcIixib3VuZGFyeTpcInNjcm9sbFBhcmVudFwiLGN1c3RvbUNsYXNzOlwiXCIsc2FuaXRpemU6ITAsc2FuaXRpemVGbjpudWxsLHdoaXRlTGlzdDpRLHBvcHBlckNvbmZpZzpudWxsfSwkPXtISURFOlwiaGlkZS5icy50b29sdGlwXCIsSElEREVOOlwiaGlkZGVuLmJzLnRvb2x0aXBcIixTSE9XOlwic2hvdy5icy50b29sdGlwXCIsU0hPV046XCJzaG93bi5icy50b29sdGlwXCIsSU5TRVJURUQ6XCJpbnNlcnRlZC5icy50b29sdGlwXCIsQ0xJQ0s6XCJjbGljay5icy50b29sdGlwXCIsRk9DVVNJTjpcImZvY3VzaW4uYnMudG9vbHRpcFwiLEZPQ1VTT1VUOlwiZm9jdXNvdXQuYnMudG9vbHRpcFwiLE1PVVNFRU5URVI6XCJtb3VzZWVudGVyLmJzLnRvb2x0aXBcIixNT1VTRUxFQVZFOlwibW91c2VsZWF2ZS5icy50b29sdGlwXCJ9LEo9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEuZGVmYXVsdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQm9vdHN0cmFwJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZylcIik7dGhpcy5faXNFbmFibGVkPSEwLHRoaXMuX3RpbWVvdXQ9MCx0aGlzLl9ob3ZlclN0YXRlPVwiXCIsdGhpcy5fYWN0aXZlVHJpZ2dlcj17fSx0aGlzLl9wb3BwZXI9bnVsbCx0aGlzLmVsZW1lbnQ9dCx0aGlzLmNvbmZpZz10aGlzLl9nZXRDb25maWcoZSksdGhpcy50aXA9bnVsbCx0aGlzLl9zZXRMaXN0ZW5lcnMoKX12YXIgZT10LnByb3RvdHlwZTtyZXR1cm4gZS5lbmFibGU9ZnVuY3Rpb24oKXt0aGlzLl9pc0VuYWJsZWQ9ITB9LGUuZGlzYWJsZT1mdW5jdGlvbigpe3RoaXMuX2lzRW5hYmxlZD0hMX0sZS50b2dnbGVFbmFibGVkPWZ1bmN0aW9uKCl7dGhpcy5faXNFbmFibGVkPSF0aGlzLl9pc0VuYWJsZWR9LGUudG9nZ2xlPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2lzRW5hYmxlZClpZih0KXt2YXIgZT10aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLG49by5kZWZhdWx0KHQuY3VycmVudFRhcmdldCkuZGF0YShlKTtufHwobj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0LmN1cnJlbnRUYXJnZXQsdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSksby5kZWZhdWx0KHQuY3VycmVudFRhcmdldCkuZGF0YShlLG4pKSxuLl9hY3RpdmVUcmlnZ2VyLmNsaWNrPSFuLl9hY3RpdmVUcmlnZ2VyLmNsaWNrLG4uX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKT9uLl9lbnRlcihudWxsLG4pOm4uX2xlYXZlKG51bGwsbil9ZWxzZXtpZihvLmRlZmF1bHQodGhpcy5nZXRUaXBFbGVtZW50KCkpLmhhc0NsYXNzKFwic2hvd1wiKSlyZXR1cm4gdm9pZCB0aGlzLl9sZWF2ZShudWxsLHRoaXMpO3RoaXMuX2VudGVyKG51bGwsdGhpcyl9fSxlLmRpc3Bvc2U9ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCksby5kZWZhdWx0LnJlbW92ZURhdGEodGhpcy5lbGVtZW50LHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkpLG8uZGVmYXVsdCh0aGlzLmVsZW1lbnQpLm9mZih0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSksby5kZWZhdWx0KHRoaXMuZWxlbWVudCkuY2xvc2VzdChcIi5tb2RhbFwiKS5vZmYoXCJoaWRlLmJzLm1vZGFsXCIsdGhpcy5faGlkZU1vZGFsSGFuZGxlciksdGhpcy50aXAmJm8uZGVmYXVsdCh0aGlzLnRpcCkucmVtb3ZlKCksdGhpcy5faXNFbmFibGVkPW51bGwsdGhpcy5fdGltZW91dD1udWxsLHRoaXMuX2hvdmVyU3RhdGU9bnVsbCx0aGlzLl9hY3RpdmVUcmlnZ2VyPW51bGwsdGhpcy5fcG9wcGVyJiZ0aGlzLl9wb3BwZXIuZGVzdHJveSgpLHRoaXMuX3BvcHBlcj1udWxsLHRoaXMuZWxlbWVudD1udWxsLHRoaXMuY29uZmlnPW51bGwsdGhpcy50aXA9bnVsbH0sZS5zaG93PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztpZihcIm5vbmVcIj09PW8uZGVmYXVsdCh0aGlzLmVsZW1lbnQpLmNzcyhcImRpc3BsYXlcIikpdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHNcIik7dmFyIGU9by5kZWZhdWx0LkV2ZW50KHRoaXMuY29uc3RydWN0b3IuRXZlbnQuU0hPVyk7aWYodGhpcy5pc1dpdGhDb250ZW50KCkmJnRoaXMuX2lzRW5hYmxlZCl7by5kZWZhdWx0KHRoaXMuZWxlbWVudCkudHJpZ2dlcihlKTt2YXIgbj1kLmZpbmRTaGFkb3dSb290KHRoaXMuZWxlbWVudCksaT1vLmRlZmF1bHQuY29udGFpbnMobnVsbCE9PW4/bjp0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy5lbGVtZW50KTtpZihlLmlzRGVmYXVsdFByZXZlbnRlZCgpfHwhaSlyZXR1cm47dmFyIHM9dGhpcy5nZXRUaXBFbGVtZW50KCksbD1kLmdldFVJRCh0aGlzLmNvbnN0cnVjdG9yLk5BTUUpO3Muc2V0QXR0cmlidXRlKFwiaWRcIixsKSx0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1kZXNjcmliZWRieVwiLGwpLHRoaXMuc2V0Q29udGVudCgpLHRoaXMuY29uZmlnLmFuaW1hdGlvbiYmby5kZWZhdWx0KHMpLmFkZENsYXNzKFwiZmFkZVwiKTt2YXIgcj1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLmNvbmZpZy5wbGFjZW1lbnQ/dGhpcy5jb25maWcucGxhY2VtZW50LmNhbGwodGhpcyxzLHRoaXMuZWxlbWVudCk6dGhpcy5jb25maWcucGxhY2VtZW50LHU9dGhpcy5fZ2V0QXR0YWNobWVudChyKTt0aGlzLmFkZEF0dGFjaG1lbnRDbGFzcyh1KTt2YXIgZj10aGlzLl9nZXRDb250YWluZXIoKTtvLmRlZmF1bHQocykuZGF0YSh0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLHRoaXMpLG8uZGVmYXVsdC5jb250YWlucyh0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsdGhpcy50aXApfHxvLmRlZmF1bHQocykuYXBwZW5kVG8oZiksby5kZWZhdWx0KHRoaXMuZWxlbWVudCkudHJpZ2dlcih0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKSx0aGlzLl9wb3BwZXI9bmV3IGEuZGVmYXVsdCh0aGlzLmVsZW1lbnQscyx0aGlzLl9nZXRQb3BwZXJDb25maWcodSkpLG8uZGVmYXVsdChzKS5hZGRDbGFzcyhcInNob3dcIiksby5kZWZhdWx0KHMpLmFkZENsYXNzKHRoaXMuY29uZmlnLmN1c3RvbUNsYXNzKSxcIm9udG91Y2hzdGFydFwiaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50JiZvLmRlZmF1bHQoZG9jdW1lbnQuYm9keSkuY2hpbGRyZW4oKS5vbihcIm1vdXNlb3ZlclwiLG51bGwsby5kZWZhdWx0Lm5vb3ApO3ZhciBjPWZ1bmN0aW9uKCl7dC5jb25maWcuYW5pbWF0aW9uJiZ0Ll9maXhUcmFuc2l0aW9uKCk7dmFyIGU9dC5faG92ZXJTdGF0ZTt0Ll9ob3ZlclN0YXRlPW51bGwsby5kZWZhdWx0KHQuZWxlbWVudCkudHJpZ2dlcih0LmNvbnN0cnVjdG9yLkV2ZW50LlNIT1dOKSxcIm91dFwiPT09ZSYmdC5fbGVhdmUobnVsbCx0KX07aWYoby5kZWZhdWx0KHRoaXMudGlwKS5oYXNDbGFzcyhcImZhZGVcIikpe3ZhciBoPWQuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodGhpcy50aXApO28uZGVmYXVsdCh0aGlzLnRpcCkub25lKGQuVFJBTlNJVElPTl9FTkQsYykuZW11bGF0ZVRyYW5zaXRpb25FbmQoaCl9ZWxzZSBjKCl9fSxlLmhpZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuZ2V0VGlwRWxlbWVudCgpLGk9by5kZWZhdWx0LkV2ZW50KHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSElERSksYT1mdW5jdGlvbigpe1wic2hvd1wiIT09ZS5faG92ZXJTdGF0ZSYmbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksZS5fY2xlYW5UaXBDbGFzcygpLGUuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWRlc2NyaWJlZGJ5XCIpLG8uZGVmYXVsdChlLmVsZW1lbnQpLnRyaWdnZXIoZS5jb25zdHJ1Y3Rvci5FdmVudC5ISURERU4pLG51bGwhPT1lLl9wb3BwZXImJmUuX3BvcHBlci5kZXN0cm95KCksdCYmdCgpfTtpZihvLmRlZmF1bHQodGhpcy5lbGVtZW50KS50cmlnZ2VyKGkpLCFpLmlzRGVmYXVsdFByZXZlbnRlZCgpKXtpZihvLmRlZmF1bHQobikucmVtb3ZlQ2xhc3MoXCJzaG93XCIpLFwib250b3VjaHN0YXJ0XCJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQmJm8uZGVmYXVsdChkb2N1bWVudC5ib2R5KS5jaGlsZHJlbigpLm9mZihcIm1vdXNlb3ZlclwiLG51bGwsby5kZWZhdWx0Lm5vb3ApLHRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2s9ITEsdGhpcy5fYWN0aXZlVHJpZ2dlci5mb2N1cz0hMSx0aGlzLl9hY3RpdmVUcmlnZ2VyLmhvdmVyPSExLG8uZGVmYXVsdCh0aGlzLnRpcCkuaGFzQ2xhc3MoXCJmYWRlXCIpKXt2YXIgcz1kLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KG4pO28uZGVmYXVsdChuKS5vbmUoZC5UUkFOU0lUSU9OX0VORCxhKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChzKX1lbHNlIGEoKTt0aGlzLl9ob3ZlclN0YXRlPVwiXCJ9fSxlLnVwZGF0ZT1mdW5jdGlvbigpe251bGwhPT10aGlzLl9wb3BwZXImJnRoaXMuX3BvcHBlci5zY2hlZHVsZVVwZGF0ZSgpfSxlLmlzV2l0aENvbnRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gQm9vbGVhbih0aGlzLmdldFRpdGxlKCkpfSxlLmFkZEF0dGFjaG1lbnRDbGFzcz1mdW5jdGlvbih0KXtvLmRlZmF1bHQodGhpcy5nZXRUaXBFbGVtZW50KCkpLmFkZENsYXNzKFwiYnMtdG9vbHRpcC1cIit0KX0sZS5nZXRUaXBFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlwPXRoaXMudGlwfHxvLmRlZmF1bHQodGhpcy5jb25maWcudGVtcGxhdGUpWzBdLHRoaXMudGlwfSxlLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFRpcEVsZW1lbnQoKTt0aGlzLnNldEVsZW1lbnRDb250ZW50KG8uZGVmYXVsdCh0LnF1ZXJ5U2VsZWN0b3JBbGwoXCIudG9vbHRpcC1pbm5lclwiKSksdGhpcy5nZXRUaXRsZSgpKSxvLmRlZmF1bHQodCkucmVtb3ZlQ2xhc3MoXCJmYWRlIHNob3dcIil9LGUuc2V0RWxlbWVudENvbnRlbnQ9ZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiIT10eXBlb2YgZXx8IWUubm9kZVR5cGUmJiFlLmpxdWVyeT90aGlzLmNvbmZpZy5odG1sPyh0aGlzLmNvbmZpZy5zYW5pdGl6ZSYmKGU9VShlLHRoaXMuY29uZmlnLndoaXRlTGlzdCx0aGlzLmNvbmZpZy5zYW5pdGl6ZUZuKSksdC5odG1sKGUpKTp0LnRleHQoZSk6dGhpcy5jb25maWcuaHRtbD9vLmRlZmF1bHQoZSkucGFyZW50KCkuaXModCl8fHQuZW1wdHkoKS5hcHBlbmQoZSk6dC50ZXh0KG8uZGVmYXVsdChlKS50ZXh0KCkpfSxlLmdldFRpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtb3JpZ2luYWwtdGl0bGVcIik7cmV0dXJuIHR8fCh0PVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuY29uZmlnLnRpdGxlP3RoaXMuY29uZmlnLnRpdGxlLmNhbGwodGhpcy5lbGVtZW50KTp0aGlzLmNvbmZpZy50aXRsZSksdH0sZS5fZ2V0UG9wcGVyQ29uZmlnPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHIoe30se3BsYWNlbWVudDp0LG1vZGlmaWVyczp7b2Zmc2V0OnRoaXMuX2dldE9mZnNldCgpLGZsaXA6e2JlaGF2aW9yOnRoaXMuY29uZmlnLmZhbGxiYWNrUGxhY2VtZW50fSxhcnJvdzp7ZWxlbWVudDpcIi5hcnJvd1wifSxwcmV2ZW50T3ZlcmZsb3c6e2JvdW5kYXJpZXNFbGVtZW50OnRoaXMuY29uZmlnLmJvdW5kYXJ5fX0sb25DcmVhdGU6ZnVuY3Rpb24odCl7dC5vcmlnaW5hbFBsYWNlbWVudCE9PXQucGxhY2VtZW50JiZlLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UodCl9LG9uVXBkYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBlLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UodCl9fSx0aGlzLmNvbmZpZy5wb3BwZXJDb25maWcpfSxlLl9nZXRPZmZzZXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9e307cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcy5jb25maWcub2Zmc2V0P2UuZm49ZnVuY3Rpb24oZSl7cmV0dXJuIGUub2Zmc2V0cz1yKHt9LGUub2Zmc2V0cyx0LmNvbmZpZy5vZmZzZXQoZS5vZmZzZXRzLHQuZWxlbWVudCl8fHt9KSxlfTplLm9mZnNldD10aGlzLmNvbmZpZy5vZmZzZXQsZX0sZS5fZ2V0Q29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuITE9PT10aGlzLmNvbmZpZy5jb250YWluZXI/ZG9jdW1lbnQuYm9keTpkLmlzRWxlbWVudCh0aGlzLmNvbmZpZy5jb250YWluZXIpP28uZGVmYXVsdCh0aGlzLmNvbmZpZy5jb250YWluZXIpOm8uZGVmYXVsdChkb2N1bWVudCkuZmluZCh0aGlzLmNvbmZpZy5jb250YWluZXIpfSxlLl9nZXRBdHRhY2htZW50PWZ1bmN0aW9uKHQpe3JldHVybiBYW3QudG9VcHBlckNhc2UoKV19LGUuX3NldExpc3RlbmVycz1mdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5jb25maWcudHJpZ2dlci5zcGxpdChcIiBcIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7aWYoXCJjbGlja1wiPT09ZSlvLmRlZmF1bHQodC5lbGVtZW50KS5vbih0LmNvbnN0cnVjdG9yLkV2ZW50LkNMSUNLLHQuY29uZmlnLnNlbGVjdG9yLChmdW5jdGlvbihlKXtyZXR1cm4gdC50b2dnbGUoZSl9KSk7ZWxzZSBpZihcIm1hbnVhbFwiIT09ZSl7dmFyIG49XCJob3ZlclwiPT09ZT90LmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFRU5URVI6dC5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU0lOLGk9XCJob3ZlclwiPT09ZT90LmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFTEVBVkU6dC5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU09VVDtvLmRlZmF1bHQodC5lbGVtZW50KS5vbihuLHQuY29uZmlnLnNlbGVjdG9yLChmdW5jdGlvbihlKXtyZXR1cm4gdC5fZW50ZXIoZSl9KSkub24oaSx0LmNvbmZpZy5zZWxlY3RvciwoZnVuY3Rpb24oZSl7cmV0dXJuIHQuX2xlYXZlKGUpfSkpfX0pKSx0aGlzLl9oaWRlTW9kYWxIYW5kbGVyPWZ1bmN0aW9uKCl7dC5lbGVtZW50JiZ0LmhpZGUoKX0sby5kZWZhdWx0KHRoaXMuZWxlbWVudCkuY2xvc2VzdChcIi5tb2RhbFwiKS5vbihcImhpZGUuYnMubW9kYWxcIix0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKSx0aGlzLmNvbmZpZy5zZWxlY3Rvcj90aGlzLmNvbmZpZz1yKHt9LHRoaXMuY29uZmlnLHt0cmlnZ2VyOlwibWFudWFsXCIsc2VsZWN0b3I6XCJcIn0pOnRoaXMuX2ZpeFRpdGxlKCl9LGUuX2ZpeFRpdGxlPWZ1bmN0aW9uKCl7dmFyIHQ9dHlwZW9mIHRoaXMuZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIpOyh0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwidGl0bGVcIil8fFwic3RyaW5nXCIhPT10KSYmKHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW9yaWdpbmFsLXRpdGxlXCIsdGhpcy5lbGVtZW50LmdldEF0dHJpYnV0ZShcInRpdGxlXCIpfHxcIlwiKSx0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKFwidGl0bGVcIixcIlwiKSl9LGUuX2VudGVyPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWTsoZT1lfHxvLmRlZmF1bHQodC5jdXJyZW50VGFyZ2V0KS5kYXRhKG4pKXx8KGU9bmV3IHRoaXMuY29uc3RydWN0b3IodC5jdXJyZW50VGFyZ2V0LHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpLG8uZGVmYXVsdCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobixlKSksdCYmKGUuX2FjdGl2ZVRyaWdnZXJbXCJmb2N1c2luXCI9PT10LnR5cGU/XCJmb2N1c1wiOlwiaG92ZXJcIl09ITApLG8uZGVmYXVsdChlLmdldFRpcEVsZW1lbnQoKSkuaGFzQ2xhc3MoXCJzaG93XCIpfHxcInNob3dcIj09PWUuX2hvdmVyU3RhdGU/ZS5faG92ZXJTdGF0ZT1cInNob3dcIjooY2xlYXJUaW1lb3V0KGUuX3RpbWVvdXQpLGUuX2hvdmVyU3RhdGU9XCJzaG93XCIsZS5jb25maWcuZGVsYXkmJmUuY29uZmlnLmRlbGF5LnNob3c/ZS5fdGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe1wic2hvd1wiPT09ZS5faG92ZXJTdGF0ZSYmZS5zaG93KCl9KSxlLmNvbmZpZy5kZWxheS5zaG93KTplLnNob3coKSl9LGUuX2xlYXZlPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWTsoZT1lfHxvLmRlZmF1bHQodC5jdXJyZW50VGFyZ2V0KS5kYXRhKG4pKXx8KGU9bmV3IHRoaXMuY29uc3RydWN0b3IodC5jdXJyZW50VGFyZ2V0LHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpLG8uZGVmYXVsdCh0LmN1cnJlbnRUYXJnZXQpLmRhdGEobixlKSksdCYmKGUuX2FjdGl2ZVRyaWdnZXJbXCJmb2N1c291dFwiPT09dC50eXBlP1wiZm9jdXNcIjpcImhvdmVyXCJdPSExKSxlLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCl8fChjbGVhclRpbWVvdXQoZS5fdGltZW91dCksZS5faG92ZXJTdGF0ZT1cIm91dFwiLGUuY29uZmlnLmRlbGF5JiZlLmNvbmZpZy5kZWxheS5oaWRlP2UuX3RpbWVvdXQ9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtcIm91dFwiPT09ZS5faG92ZXJTdGF0ZSYmZS5oaWRlKCl9KSxlLmNvbmZpZy5kZWxheS5oaWRlKTplLmhpZGUoKSl9LGUuX2lzV2l0aEFjdGl2ZVRyaWdnZXI9ZnVuY3Rpb24oKXtmb3IodmFyIHQgaW4gdGhpcy5fYWN0aXZlVHJpZ2dlcilpZih0aGlzLl9hY3RpdmVUcmlnZ2VyW3RdKXJldHVybiEwO3JldHVybiExfSxlLl9nZXRDb25maWc9ZnVuY3Rpb24odCl7dmFyIGU9by5kZWZhdWx0KHRoaXMuZWxlbWVudCkuZGF0YSgpO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbih0KXstMSE9PXouaW5kZXhPZih0KSYmZGVsZXRlIGVbdF19KSksXCJudW1iZXJcIj09dHlwZW9mKHQ9cih7fSx0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsZSxcIm9iamVjdFwiPT10eXBlb2YgdCYmdD90Ont9KSkuZGVsYXkmJih0LmRlbGF5PXtzaG93OnQuZGVsYXksaGlkZTp0LmRlbGF5fSksXCJudW1iZXJcIj09dHlwZW9mIHQudGl0bGUmJih0LnRpdGxlPXQudGl0bGUudG9TdHJpbmcoKSksXCJudW1iZXJcIj09dHlwZW9mIHQuY29udGVudCYmKHQuY29udGVudD10LmNvbnRlbnQudG9TdHJpbmcoKSksZC50eXBlQ2hlY2tDb25maWcoTSx0LHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpLHQuc2FuaXRpemUmJih0LnRlbXBsYXRlPVUodC50ZW1wbGF0ZSx0LndoaXRlTGlzdCx0LnNhbml0aXplRm4pKSx0fSxlLl9nZXREZWxlZ2F0ZUNvbmZpZz1mdW5jdGlvbigpe3ZhciB0PXt9O2lmKHRoaXMuY29uZmlnKWZvcih2YXIgZSBpbiB0aGlzLmNvbmZpZyl0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRbZV0hPT10aGlzLmNvbmZpZ1tlXSYmKHRbZV09dGhpcy5jb25maWdbZV0pO3JldHVybiB0fSxlLl9jbGVhblRpcENsYXNzPWZ1bmN0aW9uKCl7dmFyIHQ9by5kZWZhdWx0KHRoaXMuZ2V0VGlwRWxlbWVudCgpKSxlPXQuYXR0cihcImNsYXNzXCIpLm1hdGNoKFYpO251bGwhPT1lJiZlLmxlbmd0aCYmdC5yZW1vdmVDbGFzcyhlLmpvaW4oXCJcIikpfSxlLl9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2U9ZnVuY3Rpb24odCl7dGhpcy50aXA9dC5pbnN0YW5jZS5wb3BwZXIsdGhpcy5fY2xlYW5UaXBDbGFzcygpLHRoaXMuYWRkQXR0YWNobWVudENsYXNzKHRoaXMuX2dldEF0dGFjaG1lbnQodC5wbGFjZW1lbnQpKX0sZS5fZml4VHJhbnNpdGlvbj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0VGlwRWxlbWVudCgpLGU9dGhpcy5jb25maWcuYW5pbWF0aW9uO251bGw9PT10LmdldEF0dHJpYnV0ZShcIngtcGxhY2VtZW50XCIpJiYoby5kZWZhdWx0KHQpLnJlbW92ZUNsYXNzKFwiZmFkZVwiKSx0aGlzLmNvbmZpZy5hbmltYXRpb249ITEsdGhpcy5oaWRlKCksdGhpcy5zaG93KCksdGhpcy5jb25maWcuYW5pbWF0aW9uPWUpfSx0Ll9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj1vLmRlZmF1bHQodGhpcyksaT1uLmRhdGEoXCJicy50b29sdGlwXCIpLGE9XCJvYmplY3RcIj09dHlwZW9mIGUmJmU7aWYoKGl8fCEvZGlzcG9zZXxoaWRlLy50ZXN0KGUpKSYmKGl8fChpPW5ldyB0KHRoaXMsYSksbi5kYXRhKFwiYnMudG9vbHRpcFwiLGkpKSxcInN0cmluZ1wiPT10eXBlb2YgZSkpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBpW2VdKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCBcIicrZSsnXCInKTtpW2VdKCl9fSkpfSxsKHQsbnVsbCxbe2tleTpcIlZFUlNJT05cIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cIjQuNi4wXCJ9fSx7a2V5OlwiRGVmYXVsdFwiLGdldDpmdW5jdGlvbigpe3JldHVybiBZfX0se2tleTpcIk5BTUVcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTX19LHtrZXk6XCJEQVRBX0tFWVwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiYnMudG9vbHRpcFwifX0se2tleTpcIkV2ZW50XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuICR9fSx7a2V5OlwiRVZFTlRfS0VZXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCIuYnMudG9vbHRpcFwifX0se2tleTpcIkRlZmF1bHRUeXBlXCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEt9fV0pLHR9KCk7by5kZWZhdWx0LmZuW01dPUouX2pRdWVyeUludGVyZmFjZSxvLmRlZmF1bHQuZm5bTV0uQ29uc3RydWN0b3I9SixvLmRlZmF1bHQuZm5bTV0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHQuZm5bTV09VyxKLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBHPVwicG9wb3ZlclwiLFo9by5kZWZhdWx0LmZuW0ddLHR0PW5ldyBSZWdFeHAoXCIoXnxcXFxccylicy1wb3BvdmVyXFxcXFMrXCIsXCJnXCIpLGV0PXIoe30sSi5EZWZhdWx0LHtwbGFjZW1lbnQ6XCJyaWdodFwiLHRyaWdnZXI6XCJjbGlja1wiLGNvbnRlbnQ6XCJcIix0ZW1wbGF0ZTonPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPjxkaXYgY2xhc3M9XCJhcnJvd1wiPjwvZGl2PjxoMyBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCI+PC9oMz48ZGl2IGNsYXNzPVwicG9wb3Zlci1ib2R5XCI+PC9kaXY+PC9kaXY+J30pLG50PXIoe30sSi5EZWZhdWx0VHlwZSx7Y29udGVudDpcIihzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbilcIn0pLGl0PXtISURFOlwiaGlkZS5icy5wb3BvdmVyXCIsSElEREVOOlwiaGlkZGVuLmJzLnBvcG92ZXJcIixTSE9XOlwic2hvdy5icy5wb3BvdmVyXCIsU0hPV046XCJzaG93bi5icy5wb3BvdmVyXCIsSU5TRVJURUQ6XCJpbnNlcnRlZC5icy5wb3BvdmVyXCIsQ0xJQ0s6XCJjbGljay5icy5wb3BvdmVyXCIsRk9DVVNJTjpcImZvY3VzaW4uYnMucG9wb3ZlclwiLEZPQ1VTT1VUOlwiZm9jdXNvdXQuYnMucG9wb3ZlclwiLE1PVVNFRU5URVI6XCJtb3VzZWVudGVyLmJzLnBvcG92ZXJcIixNT1VTRUxFQVZFOlwibW91c2VsZWF2ZS5icy5wb3BvdmVyXCJ9LG90PWZ1bmN0aW9uKHQpe3ZhciBlLG47ZnVuY3Rpb24gaSgpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31uPXQsKGU9aSkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsZS5fX3Byb3RvX189bjt2YXIgYT1pLnByb3RvdHlwZTtyZXR1cm4gYS5pc1dpdGhDb250ZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VGl0bGUoKXx8dGhpcy5fZ2V0Q29udGVudCgpfSxhLmFkZEF0dGFjaG1lbnRDbGFzcz1mdW5jdGlvbih0KXtvLmRlZmF1bHQodGhpcy5nZXRUaXBFbGVtZW50KCkpLmFkZENsYXNzKFwiYnMtcG9wb3Zlci1cIit0KX0sYS5nZXRUaXBFbGVtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGlwPXRoaXMudGlwfHxvLmRlZmF1bHQodGhpcy5jb25maWcudGVtcGxhdGUpWzBdLHRoaXMudGlwfSxhLnNldENvbnRlbnQ9ZnVuY3Rpb24oKXt2YXIgdD1vLmRlZmF1bHQodGhpcy5nZXRUaXBFbGVtZW50KCkpO3RoaXMuc2V0RWxlbWVudENvbnRlbnQodC5maW5kKFwiLnBvcG92ZXItaGVhZGVyXCIpLHRoaXMuZ2V0VGl0bGUoKSk7dmFyIGU9dGhpcy5fZ2V0Q29udGVudCgpO1wiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihlPWUuY2FsbCh0aGlzLmVsZW1lbnQpKSx0aGlzLnNldEVsZW1lbnRDb250ZW50KHQuZmluZChcIi5wb3BvdmVyLWJvZHlcIiksZSksdC5yZW1vdmVDbGFzcyhcImZhZGUgc2hvd1wiKX0sYS5fZ2V0Q29udGVudD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1jb250ZW50XCIpfHx0aGlzLmNvbmZpZy5jb250ZW50fSxhLl9jbGVhblRpcENsYXNzPWZ1bmN0aW9uKCl7dmFyIHQ9by5kZWZhdWx0KHRoaXMuZ2V0VGlwRWxlbWVudCgpKSxlPXQuYXR0cihcImNsYXNzXCIpLm1hdGNoKHR0KTtudWxsIT09ZSYmZS5sZW5ndGg+MCYmdC5yZW1vdmVDbGFzcyhlLmpvaW4oXCJcIikpfSxpLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgZT1vLmRlZmF1bHQodGhpcykuZGF0YShcImJzLnBvcG92ZXJcIiksbj1cIm9iamVjdFwiPT10eXBlb2YgdD90Om51bGw7aWYoKGV8fCEvZGlzcG9zZXxoaWRlLy50ZXN0KHQpKSYmKGV8fChlPW5ldyBpKHRoaXMsbiksby5kZWZhdWx0KHRoaXMpLmRhdGEoXCJicy5wb3BvdmVyXCIsZSkpLFwic3RyaW5nXCI9PXR5cGVvZiB0KSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGVbdF0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkIFwiJyt0KydcIicpO2VbdF0oKX19KSl9LGwoaSxudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC42LjBcIn19LHtrZXk6XCJEZWZhdWx0XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGV0fX0se2tleTpcIk5BTUVcIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gR319LHtrZXk6XCJEQVRBX0tFWVwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiYnMucG9wb3ZlclwifX0se2tleTpcIkV2ZW50XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGl0fX0se2tleTpcIkVWRU5UX0tFWVwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiLmJzLnBvcG92ZXJcIn19LHtrZXk6XCJEZWZhdWx0VHlwZVwiLGdldDpmdW5jdGlvbigpe3JldHVybiBudH19XSksaX0oSik7by5kZWZhdWx0LmZuW0ddPW90Ll9qUXVlcnlJbnRlcmZhY2Usby5kZWZhdWx0LmZuW0ddLkNvbnN0cnVjdG9yPW90LG8uZGVmYXVsdC5mbltHXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIG8uZGVmYXVsdC5mbltHXT1aLG90Ll9qUXVlcnlJbnRlcmZhY2V9O3ZhciBhdD1cInNjcm9sbHNweVwiLHN0PW8uZGVmYXVsdC5mblthdF0sbHQ9e29mZnNldDoxMCxtZXRob2Q6XCJhdXRvXCIsdGFyZ2V0OlwiXCJ9LHJ0PXtvZmZzZXQ6XCJudW1iZXJcIixtZXRob2Q6XCJzdHJpbmdcIix0YXJnZXQ6XCIoc3RyaW5nfGVsZW1lbnQpXCJ9LHV0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe3ZhciBuPXRoaXM7dGhpcy5fZWxlbWVudD10LHRoaXMuX3Njcm9sbEVsZW1lbnQ9XCJCT0RZXCI9PT10LnRhZ05hbWU/d2luZG93OnQsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl9zZWxlY3Rvcj10aGlzLl9jb25maWcudGFyZ2V0K1wiIC5uYXYtbGluayxcIit0aGlzLl9jb25maWcudGFyZ2V0K1wiIC5saXN0LWdyb3VwLWl0ZW0sXCIrdGhpcy5fY29uZmlnLnRhcmdldCtcIiAuZHJvcGRvd24taXRlbVwiLHRoaXMuX29mZnNldHM9W10sdGhpcy5fdGFyZ2V0cz1bXSx0aGlzLl9hY3RpdmVUYXJnZXQ9bnVsbCx0aGlzLl9zY3JvbGxIZWlnaHQ9MCxvLmRlZmF1bHQodGhpcy5fc2Nyb2xsRWxlbWVudCkub24oXCJzY3JvbGwuYnMuc2Nyb2xsc3B5XCIsKGZ1bmN0aW9uKHQpe3JldHVybiBuLl9wcm9jZXNzKHQpfSkpLHRoaXMucmVmcmVzaCgpLHRoaXMuX3Byb2Nlc3MoKX12YXIgZT10LnByb3RvdHlwZTtyZXR1cm4gZS5yZWZyZXNoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxlPXRoaXMuX3Njcm9sbEVsZW1lbnQ9PT10aGlzLl9zY3JvbGxFbGVtZW50LndpbmRvdz9cIm9mZnNldFwiOlwicG9zaXRpb25cIixuPVwiYXV0b1wiPT09dGhpcy5fY29uZmlnLm1ldGhvZD9lOnRoaXMuX2NvbmZpZy5tZXRob2QsaT1cInBvc2l0aW9uXCI9PT1uP3RoaXMuX2dldFNjcm9sbFRvcCgpOjA7dGhpcy5fb2Zmc2V0cz1bXSx0aGlzLl90YXJnZXRzPVtdLHRoaXMuX3Njcm9sbEhlaWdodD10aGlzLl9nZXRTY3JvbGxIZWlnaHQoKSxbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fc2VsZWN0b3IpKS5tYXAoKGZ1bmN0aW9uKHQpe3ZhciBlLGE9ZC5nZXRTZWxlY3RvckZyb21FbGVtZW50KHQpO2lmKGEmJihlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYSkpLGUpe3ZhciBzPWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYocy53aWR0aHx8cy5oZWlnaHQpcmV0dXJuW28uZGVmYXVsdChlKVtuXSgpLnRvcCtpLGFdfXJldHVybiBudWxsfSkpLmZpbHRlcigoZnVuY3Rpb24odCl7cmV0dXJuIHR9KSkuc29ydCgoZnVuY3Rpb24odCxlKXtyZXR1cm4gdFswXS1lWzBdfSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QuX29mZnNldHMucHVzaChlWzBdKSx0Ll90YXJnZXRzLnB1c2goZVsxXSl9KSl9LGUuZGlzcG9zZT1mdW5jdGlvbigpe28uZGVmYXVsdC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsXCJicy5zY3JvbGxzcHlcIiksby5kZWZhdWx0KHRoaXMuX3Njcm9sbEVsZW1lbnQpLm9mZihcIi5icy5zY3JvbGxzcHlcIiksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuX3Njcm9sbEVsZW1lbnQ9bnVsbCx0aGlzLl9jb25maWc9bnVsbCx0aGlzLl9zZWxlY3Rvcj1udWxsLHRoaXMuX29mZnNldHM9bnVsbCx0aGlzLl90YXJnZXRzPW51bGwsdGhpcy5fYWN0aXZlVGFyZ2V0PW51bGwsdGhpcy5fc2Nyb2xsSGVpZ2h0PW51bGx9LGUuX2dldENvbmZpZz1mdW5jdGlvbih0KXtpZihcInN0cmluZ1wiIT10eXBlb2YodD1yKHt9LGx0LFwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0P3Q6e30pKS50YXJnZXQmJmQuaXNFbGVtZW50KHQudGFyZ2V0KSl7dmFyIGU9by5kZWZhdWx0KHQudGFyZ2V0KS5hdHRyKFwiaWRcIik7ZXx8KGU9ZC5nZXRVSUQoYXQpLG8uZGVmYXVsdCh0LnRhcmdldCkuYXR0cihcImlkXCIsZSkpLHQudGFyZ2V0PVwiI1wiK2V9cmV0dXJuIGQudHlwZUNoZWNrQ29uZmlnKGF0LHQscnQpLHR9LGUuX2dldFNjcm9sbFRvcD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50PT09d2luZG93P3RoaXMuX3Njcm9sbEVsZW1lbnQucGFnZVlPZmZzZXQ6dGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3B9LGUuX2dldFNjcm9sbEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50LnNjcm9sbEhlaWdodHx8TWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCl9LGUuX2dldE9mZnNldEhlaWdodD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50PT09d2luZG93P3dpbmRvdy5pbm5lckhlaWdodDp0aGlzLl9zY3JvbGxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodH0sZS5fcHJvY2Vzcz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2dldFNjcm9sbFRvcCgpK3RoaXMuX2NvbmZpZy5vZmZzZXQsZT10aGlzLl9nZXRTY3JvbGxIZWlnaHQoKSxuPXRoaXMuX2NvbmZpZy5vZmZzZXQrZS10aGlzLl9nZXRPZmZzZXRIZWlnaHQoKTtpZih0aGlzLl9zY3JvbGxIZWlnaHQhPT1lJiZ0aGlzLnJlZnJlc2goKSx0Pj1uKXt2YXIgaT10aGlzLl90YXJnZXRzW3RoaXMuX3RhcmdldHMubGVuZ3RoLTFdO3RoaXMuX2FjdGl2ZVRhcmdldCE9PWkmJnRoaXMuX2FjdGl2YXRlKGkpfWVsc2V7aWYodGhpcy5fYWN0aXZlVGFyZ2V0JiZ0PHRoaXMuX29mZnNldHNbMF0mJnRoaXMuX29mZnNldHNbMF0+MClyZXR1cm4gdGhpcy5fYWN0aXZlVGFyZ2V0PW51bGwsdm9pZCB0aGlzLl9jbGVhcigpO2Zvcih2YXIgbz10aGlzLl9vZmZzZXRzLmxlbmd0aDtvLS07KXt0aGlzLl9hY3RpdmVUYXJnZXQhPT10aGlzLl90YXJnZXRzW29dJiZ0Pj10aGlzLl9vZmZzZXRzW29dJiYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIHRoaXMuX29mZnNldHNbbysxXXx8dDx0aGlzLl9vZmZzZXRzW28rMV0pJiZ0aGlzLl9hY3RpdmF0ZSh0aGlzLl90YXJnZXRzW29dKX19fSxlLl9hY3RpdmF0ZT1mdW5jdGlvbih0KXt0aGlzLl9hY3RpdmVUYXJnZXQ9dCx0aGlzLl9jbGVhcigpO3ZhciBlPXRoaXMuX3NlbGVjdG9yLnNwbGl0KFwiLFwiKS5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlKydbZGF0YS10YXJnZXQ9XCInK3QrJ1wiXSwnK2UrJ1tocmVmPVwiJyt0KydcIl0nfSkpLG49by5kZWZhdWx0KFtdLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChlLmpvaW4oXCIsXCIpKSkpO24uaGFzQ2xhc3MoXCJkcm9wZG93bi1pdGVtXCIpPyhuLmNsb3Nlc3QoXCIuZHJvcGRvd25cIikuZmluZChcIi5kcm9wZG93bi10b2dnbGVcIikuYWRkQ2xhc3MoXCJhY3RpdmVcIiksbi5hZGRDbGFzcyhcImFjdGl2ZVwiKSk6KG4uYWRkQ2xhc3MoXCJhY3RpdmVcIiksbi5wYXJlbnRzKFwiLm5hdiwgLmxpc3QtZ3JvdXBcIikucHJldihcIi5uYXYtbGluaywgLmxpc3QtZ3JvdXAtaXRlbVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSxuLnBhcmVudHMoXCIubmF2LCAubGlzdC1ncm91cFwiKS5wcmV2KFwiLm5hdi1pdGVtXCIpLmNoaWxkcmVuKFwiLm5hdi1saW5rXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpKSxvLmRlZmF1bHQodGhpcy5fc2Nyb2xsRWxlbWVudCkudHJpZ2dlcihcImFjdGl2YXRlLmJzLnNjcm9sbHNweVwiLHtyZWxhdGVkVGFyZ2V0OnR9KX0sZS5fY2xlYXI9ZnVuY3Rpb24oKXtbXS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5fc2VsZWN0b3IpKS5maWx0ZXIoKGZ1bmN0aW9uKHQpe3JldHVybiB0LmNsYXNzTGlzdC5jb250YWlucyhcImFjdGl2ZVwiKX0pKS5mb3JFYWNoKChmdW5jdGlvbih0KXtyZXR1cm4gdC5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpfSkpfSx0Ll9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgbj1vLmRlZmF1bHQodGhpcykuZGF0YShcImJzLnNjcm9sbHNweVwiKTtpZihufHwobj1uZXcgdCh0aGlzLFwib2JqZWN0XCI9PXR5cGVvZiBlJiZlKSxvLmRlZmF1bHQodGhpcykuZGF0YShcImJzLnNjcm9sbHNweVwiLG4pKSxcInN0cmluZ1wiPT10eXBlb2YgZSl7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIG5bZV0pdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gbWV0aG9kIG5hbWVkIFwiJytlKydcIicpO25bZV0oKX19KSl9LGwodCxudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC42LjBcIn19LHtrZXk6XCJEZWZhdWx0XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGx0fX1dKSx0fSgpO28uZGVmYXVsdCh3aW5kb3cpLm9uKFwibG9hZC5icy5zY3JvbGxzcHkuZGF0YS1hcGlcIiwoZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10uc2xpY2UuY2FsbChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1zcHk9XCJzY3JvbGxcIl0nKSksZT10Lmxlbmd0aDtlLS07KXt2YXIgbj1vLmRlZmF1bHQodFtlXSk7dXQuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4sbi5kYXRhKCkpfX0pKSxvLmRlZmF1bHQuZm5bYXRdPXV0Ll9qUXVlcnlJbnRlcmZhY2Usby5kZWZhdWx0LmZuW2F0XS5Db25zdHJ1Y3Rvcj11dCxvLmRlZmF1bHQuZm5bYXRdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gby5kZWZhdWx0LmZuW2F0XT1zdCx1dC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgZHQ9by5kZWZhdWx0LmZuLnRhYixmdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCl7dGhpcy5fZWxlbWVudD10fXZhciBlPXQucHJvdG90eXBlO3JldHVybiBlLnNob3c9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2lmKCEodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLmhhc0NsYXNzKFwiYWN0aXZlXCIpfHxvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkuaGFzQ2xhc3MoXCJkaXNhYmxlZFwiKSkpe3ZhciBlLG4saT1vLmRlZmF1bHQodGhpcy5fZWxlbWVudCkuY2xvc2VzdChcIi5uYXYsIC5saXN0LWdyb3VwXCIpWzBdLGE9ZC5nZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO2lmKGkpe3ZhciBzPVwiVUxcIj09PWkubm9kZU5hbWV8fFwiT0xcIj09PWkubm9kZU5hbWU/XCI+IGxpID4gLmFjdGl2ZVwiOlwiLmFjdGl2ZVwiO249KG49by5kZWZhdWx0Lm1ha2VBcnJheShvLmRlZmF1bHQoaSkuZmluZChzKSkpW24ubGVuZ3RoLTFdfXZhciBsPW8uZGVmYXVsdC5FdmVudChcImhpZGUuYnMudGFiXCIse3JlbGF0ZWRUYXJnZXQ6dGhpcy5fZWxlbWVudH0pLHI9by5kZWZhdWx0LkV2ZW50KFwic2hvdy5icy50YWJcIix7cmVsYXRlZFRhcmdldDpufSk7aWYobiYmby5kZWZhdWx0KG4pLnRyaWdnZXIobCksby5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIociksIXIuaXNEZWZhdWx0UHJldmVudGVkKCkmJiFsLmlzRGVmYXVsdFByZXZlbnRlZCgpKXthJiYoZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGEpKSx0aGlzLl9hY3RpdmF0ZSh0aGlzLl9lbGVtZW50LGkpO3ZhciB1PWZ1bmN0aW9uKCl7dmFyIGU9by5kZWZhdWx0LkV2ZW50KFwiaGlkZGVuLmJzLnRhYlwiLHtyZWxhdGVkVGFyZ2V0OnQuX2VsZW1lbnR9KSxpPW8uZGVmYXVsdC5FdmVudChcInNob3duLmJzLnRhYlwiLHtyZWxhdGVkVGFyZ2V0Om59KTtvLmRlZmF1bHQobikudHJpZ2dlcihlKSxvLmRlZmF1bHQodC5fZWxlbWVudCkudHJpZ2dlcihpKX07ZT90aGlzLl9hY3RpdmF0ZShlLGUucGFyZW50Tm9kZSx1KTp1KCl9fX0sZS5kaXNwb3NlPWZ1bmN0aW9uKCl7by5kZWZhdWx0LnJlbW92ZURhdGEodGhpcy5fZWxlbWVudCxcImJzLnRhYlwiKSx0aGlzLl9lbGVtZW50PW51bGx9LGUuX2FjdGl2YXRlPWZ1bmN0aW9uKHQsZSxuKXt2YXIgaT10aGlzLGE9KCFlfHxcIlVMXCIhPT1lLm5vZGVOYW1lJiZcIk9MXCIhPT1lLm5vZGVOYW1lP28uZGVmYXVsdChlKS5jaGlsZHJlbihcIi5hY3RpdmVcIik6by5kZWZhdWx0KGUpLmZpbmQoXCI+IGxpID4gLmFjdGl2ZVwiKSlbMF0scz1uJiZhJiZvLmRlZmF1bHQoYSkuaGFzQ2xhc3MoXCJmYWRlXCIpLGw9ZnVuY3Rpb24oKXtyZXR1cm4gaS5fdHJhbnNpdGlvbkNvbXBsZXRlKHQsYSxuKX07aWYoYSYmcyl7dmFyIHI9ZC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudChhKTtvLmRlZmF1bHQoYSkucmVtb3ZlQ2xhc3MoXCJzaG93XCIpLm9uZShkLlRSQU5TSVRJT05fRU5ELGwpLmVtdWxhdGVUcmFuc2l0aW9uRW5kKHIpfWVsc2UgbCgpfSxlLl90cmFuc2l0aW9uQ29tcGxldGU9ZnVuY3Rpb24odCxlLG4pe2lmKGUpe28uZGVmYXVsdChlKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTt2YXIgaT1vLmRlZmF1bHQoZS5wYXJlbnROb2RlKS5maW5kKFwiPiAuZHJvcGRvd24tbWVudSAuYWN0aXZlXCIpWzBdO2kmJm8uZGVmYXVsdChpKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKSxcInRhYlwiPT09ZS5nZXRBdHRyaWJ1dGUoXCJyb2xlXCIpJiZlLnNldEF0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIiwhMSl9aWYoby5kZWZhdWx0KHQpLmFkZENsYXNzKFwiYWN0aXZlXCIpLFwidGFiXCI9PT10LmdldEF0dHJpYnV0ZShcInJvbGVcIikmJnQuc2V0QXR0cmlidXRlKFwiYXJpYS1zZWxlY3RlZFwiLCEwKSxkLnJlZmxvdyh0KSx0LmNsYXNzTGlzdC5jb250YWlucyhcImZhZGVcIikmJnQuY2xhc3NMaXN0LmFkZChcInNob3dcIiksdC5wYXJlbnROb2RlJiZvLmRlZmF1bHQodC5wYXJlbnROb2RlKS5oYXNDbGFzcyhcImRyb3Bkb3duLW1lbnVcIikpe3ZhciBhPW8uZGVmYXVsdCh0KS5jbG9zZXN0KFwiLmRyb3Bkb3duXCIpWzBdO2lmKGEpe3ZhciBzPVtdLnNsaWNlLmNhbGwoYS5xdWVyeVNlbGVjdG9yQWxsKFwiLmRyb3Bkb3duLXRvZ2dsZVwiKSk7by5kZWZhdWx0KHMpLmFkZENsYXNzKFwiYWN0aXZlXCIpfXQuc2V0QXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiLCEwKX1uJiZuKCl9LHQuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBuPW8uZGVmYXVsdCh0aGlzKSxpPW4uZGF0YShcImJzLnRhYlwiKTtpZihpfHwoaT1uZXcgdCh0aGlzKSxuLmRhdGEoXCJicy50YWJcIixpKSksXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBpW2VdKXRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG1ldGhvZCBuYW1lZCBcIicrZSsnXCInKTtpW2VdKCl9fSkpfSxsKHQsbnVsbCxbe2tleTpcIlZFUlNJT05cIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm5cIjQuNi4wXCJ9fV0pLHR9KCk7by5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrLmJzLnRhYi5kYXRhLWFwaVwiLCdbZGF0YS10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLXRvZ2dsZT1cInBpbGxcIl0sIFtkYXRhLXRvZ2dsZT1cImxpc3RcIl0nLChmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksZnQuX2pRdWVyeUludGVyZmFjZS5jYWxsKG8uZGVmYXVsdCh0aGlzKSxcInNob3dcIil9KSksby5kZWZhdWx0LmZuLnRhYj1mdC5falF1ZXJ5SW50ZXJmYWNlLG8uZGVmYXVsdC5mbi50YWIuQ29uc3RydWN0b3I9ZnQsby5kZWZhdWx0LmZuLnRhYi5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIG8uZGVmYXVsdC5mbi50YWI9ZHQsZnQuX2pRdWVyeUludGVyZmFjZX07dmFyIGN0PW8uZGVmYXVsdC5mbi50b2FzdCxodD17YW5pbWF0aW9uOlwiYm9vbGVhblwiLGF1dG9oaWRlOlwiYm9vbGVhblwiLGRlbGF5OlwibnVtYmVyXCJ9LGd0PXthbmltYXRpb246ITAsYXV0b2hpZGU6ITAsZGVsYXk6NTAwfSxtdD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXt0aGlzLl9lbGVtZW50PXQsdGhpcy5fY29uZmlnPXRoaXMuX2dldENvbmZpZyhlKSx0aGlzLl90aW1lb3V0PW51bGwsdGhpcy5fc2V0TGlzdGVuZXJzKCl9dmFyIGU9dC5wcm90b3R5cGU7cmV0dXJuIGUuc2hvdz1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1vLmRlZmF1bHQuRXZlbnQoXCJzaG93LmJzLnRvYXN0XCIpO2lmKG8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKGUpLCFlLmlzRGVmYXVsdFByZXZlbnRlZCgpKXt0aGlzLl9jbGVhclRpbWVvdXQoKSx0aGlzLl9jb25maWcuYW5pbWF0aW9uJiZ0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJmYWRlXCIpO3ZhciBuPWZ1bmN0aW9uKCl7dC5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKFwic2hvd2luZ1wiKSx0Ll9lbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzaG93XCIpLG8uZGVmYXVsdCh0Ll9lbGVtZW50KS50cmlnZ2VyKFwic2hvd24uYnMudG9hc3RcIiksdC5fY29uZmlnLmF1dG9oaWRlJiYodC5fdGltZW91dD1zZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuaGlkZSgpfSksdC5fY29uZmlnLmRlbGF5KSl9O2lmKHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcImhpZGVcIiksZC5yZWZsb3codGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKFwic2hvd2luZ1wiKSx0aGlzLl9jb25maWcuYW5pbWF0aW9uKXt2YXIgaT1kLmdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpO28uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5vbmUoZC5UUkFOU0lUSU9OX0VORCxuKS5lbXVsYXRlVHJhbnNpdGlvbkVuZChpKX1lbHNlIG4oKX19LGUuaGlkZT1mdW5jdGlvbigpe2lmKHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwic2hvd1wiKSl7dmFyIHQ9by5kZWZhdWx0LkV2ZW50KFwiaGlkZS5icy50b2FzdFwiKTtvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkudHJpZ2dlcih0KSx0LmlzRGVmYXVsdFByZXZlbnRlZCgpfHx0aGlzLl9jbG9zZSgpfX0sZS5kaXNwb3NlPWZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJUaW1lb3V0KCksdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoXCJzaG93XCIpJiZ0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoXCJzaG93XCIpLG8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5vZmYoXCJjbGljay5kaXNtaXNzLmJzLnRvYXN0XCIpLG8uZGVmYXVsdC5yZW1vdmVEYXRhKHRoaXMuX2VsZW1lbnQsXCJicy50b2FzdFwiKSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5fY29uZmlnPW51bGx9LGUuX2dldENvbmZpZz1mdW5jdGlvbih0KXtyZXR1cm4gdD1yKHt9LGd0LG8uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS5kYXRhKCksXCJvYmplY3RcIj09dHlwZW9mIHQmJnQ/dDp7fSksZC50eXBlQ2hlY2tDb25maWcoXCJ0b2FzdFwiLHQsdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSksdH0sZS5fc2V0TGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkub24oXCJjbGljay5kaXNtaXNzLmJzLnRvYXN0XCIsJ1tkYXRhLWRpc21pc3M9XCJ0b2FzdFwiXScsKGZ1bmN0aW9uKCl7cmV0dXJuIHQuaGlkZSgpfSkpfSxlLl9jbG9zZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMsZT1mdW5jdGlvbigpe3QuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChcImhpZGVcIiksby5kZWZhdWx0KHQuX2VsZW1lbnQpLnRyaWdnZXIoXCJoaWRkZW4uYnMudG9hc3RcIil9O2lmKHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShcInNob3dcIiksdGhpcy5fY29uZmlnLmFuaW1hdGlvbil7dmFyIG49ZC5nZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KTtvLmRlZmF1bHQodGhpcy5fZWxlbWVudCkub25lKGQuVFJBTlNJVElPTl9FTkQsZSkuZW11bGF0ZVRyYW5zaXRpb25FbmQobil9ZWxzZSBlKCl9LGUuX2NsZWFyVGltZW91dD1mdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KSx0aGlzLl90aW1lb3V0PW51bGx9LHQuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBuPW8uZGVmYXVsdCh0aGlzKSxpPW4uZGF0YShcImJzLnRvYXN0XCIpO2lmKGl8fChpPW5ldyB0KHRoaXMsXCJvYmplY3RcIj09dHlwZW9mIGUmJmUpLG4uZGF0YShcImJzLnRvYXN0XCIsaSkpLFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgaVtlXSl0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBtZXRob2QgbmFtZWQgXCInK2UrJ1wiJyk7aVtlXSh0aGlzKX19KSl9LGwodCxudWxsLFt7a2V5OlwiVkVSU0lPTlwiLGdldDpmdW5jdGlvbigpe3JldHVyblwiNC42LjBcIn19LHtrZXk6XCJEZWZhdWx0VHlwZVwiLGdldDpmdW5jdGlvbigpe3JldHVybiBodH19LHtrZXk6XCJEZWZhdWx0XCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGd0fX1dKSx0fSgpO28uZGVmYXVsdC5mbi50b2FzdD1tdC5falF1ZXJ5SW50ZXJmYWNlLG8uZGVmYXVsdC5mbi50b2FzdC5Db25zdHJ1Y3Rvcj1tdCxvLmRlZmF1bHQuZm4udG9hc3Qubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHQuZm4udG9hc3Q9Y3QsbXQuX2pRdWVyeUludGVyZmFjZX0sdC5BbGVydD1oLHQuQnV0dG9uPW0sdC5DYXJvdXNlbD13LHQuQ29sbGFwc2U9RCx0LkRyb3Bkb3duPXgsdC5Nb2RhbD1xLHQuUG9wb3Zlcj1vdCx0LlNjcm9sbHNweT11dCx0LlRhYj1mdCx0LlRvYXN0PW10LHQuVG9vbHRpcD1KLHQuVXRpbD1kLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pfSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vdHN0cmFwLm1pbi5qcy5tYXAiLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpICYmIGl0ICE9PSBudWxsKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3Qgc2V0IFwiICsgU3RyaW5nKGl0KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICAvLyBXZSBjYW4ndCB1c2UgdGhpcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3N1xuICByZXR1cm4gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGFycmF5LmNvbnN0cnVjdG9yID0ge307XG4gICAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4geyBmb286IDEgfTtcbiAgICB9O1xuICAgIHJldHVybiBhcnJheVtNRVRIT0RfTkFNRV0oQm9vbGVhbikuZm9vICE9PSAxO1xuICB9KTtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgdmFyIHJlZ2V4cCA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlZ2V4cFtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAnLy4vJ1tNRVRIT0RfTkFNRV0ocmVnZXhwKTtcbiAgICB9IGNhdGNoIChlcnJvcjIpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiBmYWxzZTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gbWFrZXMgc3ViY2xhc3Npbmcgd29yayBjb3JyZWN0IGZvciB3cmFwcGVkIGJ1aWx0LWluc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoJHRoaXMsIGR1bW15LCBXcmFwcGVyKSB7XG4gIHZhciBOZXdUYXJnZXQsIE5ld1RhcmdldFByb3RvdHlwZTtcbiAgaWYgKFxuICAgIC8vIGl0IGNhbiB3b3JrIG9ubHkgd2l0aCBuYXRpdmUgYHNldFByb3RvdHlwZU9mYFxuICAgIHNldFByb3RvdHlwZU9mICYmXG4gICAgLy8gd2UgaGF2ZW4ndCBjb21wbGV0ZWx5IGNvcnJlY3QgcHJlLUVTNiB3YXkgZm9yIGdldHRpbmcgYG5ldy50YXJnZXRgLCBzbyB1c2UgdGhpc1xuICAgIHR5cGVvZiAoTmV3VGFyZ2V0ID0gZHVtbXkuY29uc3RydWN0b3IpID09ICdmdW5jdGlvbicgJiZcbiAgICBOZXdUYXJnZXQgIT09IFdyYXBwZXIgJiZcbiAgICBpc09iamVjdChOZXdUYXJnZXRQcm90b3R5cGUgPSBOZXdUYXJnZXQucHJvdG90eXBlKSAmJlxuICAgIE5ld1RhcmdldFByb3RvdHlwZSAhPT0gV3JhcHBlci5wcm90b3R5cGVcbiAgKSBzZXRQcm90b3R5cGVPZigkdGhpcywgTmV3VGFyZ2V0UHJvdG90eXBlKTtcbiAgcmV0dXJuICR0aGlzO1xufTtcbiIsInZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzUmVnRXhwKGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciB3aGl0ZXNwYWNlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93aGl0ZXNwYWNlcycpO1xuXG52YXIgJHBhcnNlRmxvYXQgPSBnbG9iYWwucGFyc2VGbG9hdDtcbnZhciBGT1JDRUQgPSAxIC8gJHBhcnNlRmxvYXQod2hpdGVzcGFjZXMgKyAnLTAnKSAhPT0gLUluZmluaXR5O1xuXG4vLyBgcGFyc2VGbG9hdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlZmxvYXQtc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyaW5nKSB7XG4gIHZhciB0cmltbWVkU3RyaW5nID0gdHJpbShTdHJpbmcoc3RyaW5nKSk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdCh0cmltbWVkU3RyaW5nKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gMCAmJiB0cmltbWVkU3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3Qta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuLy8gYE9iamVjdC5hc3NpZ25gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gc2hvdWxkIGhhdmUgY29ycmVjdCBvcmRlciBvZiBvcGVyYXRpb25zIChFZGdlIGJ1ZylcbiAgaWYgKERFU0NSSVBUT1JTICYmICRhc3NpZ24oeyBiOiAxIH0sICRhc3NpZ24oZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBkZWZpbmVQcm9wZXJ0eSh0aGlzLCAnYicsIHtcbiAgICAgICAgdmFsdWU6IDMsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICB9KTtcbiAgICB9XG4gIH0pLCB7IGI6IDIgfSkpLmIgIT09IDEpIHJldHVybiB0cnVlO1xuICAvLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1ZylcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN5bWJvbCAtLSBzYWZlXG4gIHZhciBzeW1ib2wgPSBTeW1ib2woKTtcbiAgdmFyIGFscGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtzeW1ib2xdID0gNztcbiAgYWxwaGFiZXQuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGNocikgeyBCW2Nocl0gPSBjaHI7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbc3ltYm9sXSAhPSA3IHx8IG9iamVjdEtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IGFscGhhYmV0O1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgdmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZjtcbiAgd2hpbGUgKGFyZ3VtZW50c0xlbmd0aCA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJbmRleGVkT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyBvYmplY3RLZXlzKFMpLmNvbmNhdChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAtLSBzYWZlICovXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICBzZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQ7XG4gICAgc2V0dGVyLmNhbGwodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIuY2FsbChPLCBwcm90byk7XG4gICAgZWxzZSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgIHJldHVybiBPO1xuICB9O1xufSgpIDogdW5kZWZpbmVkKTtcbiIsIi8vIGBTYW1lVmFsdWVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zYW1ldmFsdWVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaXMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXInKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBlYXRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGVhdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlcihjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBudW1iZXIgb2YgcmVwZXRpdGlvbnMnKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlc3VsdCArPSBzdHI7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHdoaXRlc3BhY2UgPSAnWycgKyB3aGl0ZXNwYWNlcyArICddJztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyB3aGl0ZXNwYWNlICsgd2hpdGVzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAod2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKiQnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltLCB0cmltU3RhcnQsIHRyaW1FbmQsIHRyaW1MZWZ0LCB0cmltUmlnaHQgfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMpIHtcbiAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gICAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUueyB0cmltTGVmdCwgdHJpbVN0YXJ0IH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1zdGFydFxuICBzdGFydDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1SaWdodCwgdHJpbUVuZCB9YCBtZXRob2RzXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4gIGVuZDogY3JlYXRlTWV0aG9kKDIpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1cbiAgdHJpbTogY3JlYXRlTWV0aG9kKDMpXG59O1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcblxuLy8gYHRoaXNOdW1iZXJWYWx1ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRoaXNudW1iZXJ2YWx1ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnbnVtYmVyJyAmJiBjbGFzc29mKHZhbHVlKSAhPSAnTnVtYmVyJykge1xuICAgIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGludm9jYXRpb24nKTtcbiAgfVxuICByZXR1cm4gK3ZhbHVlO1xufTtcbiIsIi8vIGEgc3RyaW5nIG9mIGFsbCB2YWxpZCB1bmljb2RlIHdoaXRlc3BhY2VzXG5tb2R1bGUuZXhwb3J0cyA9ICdcXHUwMDA5XFx1MDAwQVxcdTAwMEJcXHUwMDBDXFx1MDAwRFxcdTAwMjBcXHUwMEEwXFx1MTY4MFxcdTIwMDBcXHUyMDAxXFx1MjAwMicgK1xuICAnXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluY2x1ZGVzO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVkZWZpbmUnKTtcblxudmFyIERhdGVQcm90b3R5cGUgPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIG5hdGl2ZURhdGVUb1N0cmluZyA9IERhdGVQcm90b3R5cGVbVE9fU1RSSU5HXTtcbnZhciBnZXRUaW1lID0gRGF0ZVByb3RvdHlwZS5nZXRUaW1lO1xuXG4vLyBgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1kYXRlLnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVkZWZpbmUoRGF0ZVByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgdmFsdWUgPSBnZXRUaW1lLmNhbGwodGhpcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gbmF0aXZlRGF0ZVRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZGVmaW5lJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcycpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciB0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcblxudmFyIE5VTUJFUiA9ICdOdW1iZXInO1xudmFyIE5hdGl2ZU51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIE51bWJlclByb3RvdHlwZSA9IE5hdGl2ZU51bWJlci5wcm90b3R5cGU7XG5cbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DTEFTU09GID0gY2xhc3NvZihjcmVhdGUoTnVtYmVyUHJvdG90eXBlKSkgPT0gTlVNQkVSO1xuXG4vLyBgVG9OdW1iZXJgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b251bWJlclxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIHZhciBmaXJzdCwgdGhpcmQsIHJhZGl4LCBtYXhDb2RlLCBkaWdpdHMsIGxlbmd0aCwgaW5kZXgsIGNvZGU7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gdHJpbShpdCk7XG4gICAgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGl0LmNoYXJDb2RlQXQoMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChpdC5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgIGNhc2UgNjY6IGNhc2UgOTg6IHJhZGl4ID0gMjsgbWF4Q29kZSA9IDQ5OyBicmVhazsgLy8gZmFzdCBlcXVhbCBvZiAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA3OTogY2FzZSAxMTE6IHJhZGl4ID0gODsgbWF4Q29kZSA9IDU1OyBicmVhazsgLy8gZmFzdCBlcXVhbCBvZiAvXjBvWzAtN10rJC9pXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBkaWdpdHMgPSBpdC5zbGljZSgyKTtcbiAgICAgIGxlbmd0aCA9IGRpZ2l0cy5sZW5ndGg7XG4gICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGluZGV4KTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbi8vIGBOdW1iZXJgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW51bWJlci1jb25zdHJ1Y3RvclxuaWYgKGlzRm9yY2VkKE5VTUJFUiwgIU5hdGl2ZU51bWJlcignIDBvMScpIHx8ICFOYXRpdmVOdW1iZXIoJzBiMScpIHx8IE5hdGl2ZU51bWJlcignKzB4MScpKSkge1xuICB2YXIgTnVtYmVyV3JhcHBlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBpdCA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IHZhbHVlO1xuICAgIHZhciBkdW1teSA9IHRoaXM7XG4gICAgcmV0dXJuIGR1bW15IGluc3RhbmNlb2YgTnVtYmVyV3JhcHBlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NMQVNTT0YgPyBmYWlscyhmdW5jdGlvbiAoKSB7IE51bWJlclByb3RvdHlwZS52YWx1ZU9mLmNhbGwoZHVtbXkpOyB9KSA6IGNsYXNzb2YoZHVtbXkpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgTmF0aXZlTnVtYmVyKHRvTnVtYmVyKGl0KSksIGR1bW15LCBOdW1iZXJXcmFwcGVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IERFU0NSSVBUT1JTID8gZ2V0T3duUHJvcGVydHlOYW1lcyhOYXRpdmVOdW1iZXIpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVMyMDE1IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVMyMDE1IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlciwnICtcbiAgICAvLyBFU05leHRcbiAgICAnZnJvbVN0cmluZyxyYW5nZSdcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoTmF0aXZlTnVtYmVyLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzKE51bWJlcldyYXBwZXIsIGtleSkpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KE51bWJlcldyYXBwZXIsIGtleSwgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE5hdGl2ZU51bWJlciwga2V5KSk7XG4gICAgfVxuICB9XG4gIE51bWJlcldyYXBwZXIucHJvdG90eXBlID0gTnVtYmVyUHJvdG90eXBlO1xuICBOdW1iZXJQcm90b3R5cGUuY29uc3RydWN0b3IgPSBOdW1iZXJXcmFwcGVyO1xuICByZWRlZmluZShnbG9iYWwsIE5VTUJFUiwgTnVtYmVyV3JhcHBlcik7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlcicpO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctcmVwZWF0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIG5hdGl2ZVRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG5cbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAoZGF0YSwgbiwgYykge1xuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraW5kZXggPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaW5kZXhdO1xuICAgIGRhdGFbaW5kZXhdID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG5cbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAoZGF0YSwgbikge1xuICB2YXIgaW5kZXggPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWluZGV4ID49IDApIHtcbiAgICBjICs9IGRhdGFbaW5kZXhdO1xuICAgIGRhdGFbaW5kZXhdID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xuXG52YXIgZGF0YVRvU3RyaW5nID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgdmFyIGluZGV4ID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taW5kZXggPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpbmRleCA9PT0gMCB8fCBkYXRhW2luZGV4XSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpbmRleF0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbCgnMCcsIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG5cbnZhciBGT1JDRUQgPSBuYXRpdmVUb0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgbmF0aXZlVG9GaXhlZC5jYWxsKHt9KTtcbn0pO1xuXG4vLyBgTnVtYmVyLnByb3RvdHlwZS50b0ZpeGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLnByb3RvdHlwZS50b2ZpeGVkXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciBudW1iZXIgPSB0aGlzTnVtYmVyVmFsdWUodGhpcyk7XG4gICAgdmFyIGZyYWN0RGlnaXRzID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbiAgICB2YXIgc2lnbiA9ICcnO1xuICAgIHZhciByZXN1bHQgPSAnMCc7XG4gICAgdmFyIGUsIHosIGosIGs7XG5cbiAgICBpZiAoZnJhY3REaWdpdHMgPCAwIHx8IGZyYWN0RGlnaXRzID4gMjApIHRocm93IFJhbmdlRXJyb3IoJ0luY29ycmVjdCBmcmFjdGlvbiBkaWdpdHMnKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChudW1iZXIgIT0gbnVtYmVyKSByZXR1cm4gJ05hTic7XG4gICAgaWYgKG51bWJlciA8PSAtMWUyMSB8fCBudW1iZXIgPj0gMWUyMSkgcmV0dXJuIFN0cmluZyhudW1iZXIpO1xuICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICBzaWduID0gJy0nO1xuICAgICAgbnVtYmVyID0gLW51bWJlcjtcbiAgICB9XG4gICAgaWYgKG51bWJlciA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKG51bWJlciAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyBudW1iZXIgKiBwb3coMiwgLWUsIDEpIDogbnVtYmVyIC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseShkYXRhLCAwLCB6KTtcbiAgICAgICAgaiA9IGZyYWN0RGlnaXRzO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoZGF0YSwgMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkoZGF0YSwgcG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoZGF0YSwgMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoZGF0YSwgMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoZGF0YSwgMSwgMSk7XG4gICAgICAgIGRpdmlkZShkYXRhLCAyKTtcbiAgICAgICAgcmVzdWx0ID0gZGF0YVRvU3RyaW5nKGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoZGF0YSwgMCwgeik7XG4gICAgICAgIG11bHRpcGx5KGRhdGEsIDEgPDwgLWUsIDApO1xuICAgICAgICByZXN1bHQgPSBkYXRhVG9TdHJpbmcoZGF0YSkgKyByZXBlYXQuY2FsbCgnMCcsIGZyYWN0RGlnaXRzKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZyYWN0RGlnaXRzID4gMCkge1xuICAgICAgayA9IHJlc3VsdC5sZW5ndGg7XG4gICAgICByZXN1bHQgPSBzaWduICsgKGsgPD0gZnJhY3REaWdpdHNcbiAgICAgICAgPyAnMC4nICsgcmVwZWF0LmNhbGwoJzAnLCBmcmFjdERpZ2l0cyAtIGspICsgcmVzdWx0XG4gICAgICAgIDogcmVzdWx0LnNsaWNlKDAsIGsgLSBmcmFjdERpZ2l0cykgKyAnLicgKyByZXN1bHQuc2xpY2UoayAtIGZyYWN0RGlnaXRzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IHNpZ24gKyByZXN1bHQ7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtYXNzaWduJyk7XG5cbi8vIGBPYmplY3QuYXNzaWduYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmFzc2lnblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1hc3NpZ24gLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IE9iamVjdC5hc3NpZ24gIT09IGFzc2lnbiB9LCB7XG4gIGFzc2lnbjogYXNzaWduXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb2JqZWN0RGVmaW5lUHJvcGVydHlNb2RpbGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhREVTQ1JJUFRPUlMsIHNoYW06ICFERVNDUklQVE9SUyB9LCB7XG4gIGRlZmluZVByb3BlcnR5OiBvYmplY3REZWZpbmVQcm9wZXJ0eU1vZGlsZS5mXG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHBhcnNlRmxvYXRJbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQnKTtcblxuLy8gYHBhcnNlRmxvYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wYXJzZWZsb2F0LXN0cmluZ1xuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBwYXJzZUZsb2F0ICE9IHBhcnNlRmxvYXRJbXBsZW1lbnRhdGlvbiB9LCB7XG4gIHBhcnNlRmxvYXQ6IHBhcnNlRmxvYXRJbXBsZW1lbnRhdGlvblxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSlcbiAgICAgIC5pbmRleE9mKG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoU0VBUkNILCBuYXRpdmVTZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBzZWFyY2hlciA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBzZWFyY2hlciAhPT0gdW5kZWZpbmVkID8gc2VhcmNoZXIuY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVTZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcblxuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQge307IiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFmcmlrYWFucyBbYWZdXG4vLyEgYXV0aG9yIDogV2VybmVyIE1vbGxlbnR6ZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS93ZXJuZXJtXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnYWYnLCB7XG4gICAgbW9udGhzOiAnSmFudWFyaWVfRmVicnVhcmllX01hYXJ0X0FwcmlsX01laV9KdW5pZV9KdWxpZV9BdWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01ydF9BcHJfTWVpX0p1bl9KdWxfQXVnX1NlcF9Pa3RfTm92X0Rlcycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ1NvbmRhZ19NYWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ1Nvbl9NYWFfRGluX1dvZV9Eb25fVnJ5X1NhdCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ1NvX01hX0RpX1dvX0RvX1ZyX1NhJy5zcGxpdCgnXycpLFxuICAgIG1lcmlkaWVtUGFyc2U6IC92bXxubS9pLFxuICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gL15ubSQvaS50ZXN0KGlucHV0KTtcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXJzIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3ZtJyA6ICdWTSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdubScgOiAnTk0nO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW1ZhbmRhZyBvbV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW03DtHJlIG9tXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbb21dIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tHaXN0ZXIgb21dIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFhc10gZGRkZCBbb21dIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdvb3IgJXMnLFxuICAgICAgICBwYXN0OiAnJXMgZ2VsZWRlJyxcbiAgICAgICAgczogXCInbiBwYWFyIHNla29uZGVzXCIsXG4gICAgICAgIHNzOiAnJWQgc2Vrb25kZXMnLFxuICAgICAgICBtOiBcIiduIG1pbnV1dFwiLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZScsXG4gICAgICAgIGg6IFwiJ24gdXVyXCIsXG4gICAgICAgIGhoOiAnJWQgdXJlJyxcbiAgICAgICAgZDogXCInbiBkYWdcIixcbiAgICAgICAgZGQ6ICclZCBkYWUnLFxuICAgICAgICBNOiBcIiduIG1hYW5kXCIsXG4gICAgICAgIE1NOiAnJWQgbWFhbmRlJyxcbiAgICAgICAgeTogXCInbiBqYWFyXCIsXG4gICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgKTsgLy8gVGhhbmtzIHRvIEpvcmlzIFLDtmxpbmcgOiBodHRwczovL2dpdGh1Yi5jb20vamp1cGl0ZXJcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNYWFuZGFnIGlzIGRpZSBlZXJzdGUgZGFnIHZhbiBkaWUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBEaWUgd2VlayB3YXQgZGllIDRkZSBKYW51YXJpZSBiZXZhdCBpcyBkaWUgZWVyc3RlIHdlZWsgdmFuIGRpZSBqYWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKEFsZ2VyaWEpIFthci1kel1cbi8vISBhdXRob3IgOiBBbWluZSBSb3VraDogaHR0cHM6Ly9naXRodWIuY29tL0FtaW5lMjdcbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkOiBodHRwczovL2dpdGh1Yi5jb20vYWJkZWxzYWlkXG4vLyEgYXV0aG9yIDogQWhtZWQgRWxraGF0aWJcbi8vISBhdXRob3IgOiBmb3JhYmkgaHR0cHM6Ly9naXRodWIuY29tL2ZvcmFiaVxuLy8hIGF1dGhvciA6IE5vdXJlZGRpbmUgTE9VQUhFREogOiBodHRwczovL2dpdGh1Yi5jb20vbm91cmVkZGluZW1cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgcGx1cmFsRm9ybSA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiBuID09PSAwXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogbiA9PT0gMVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IG4gPT09IDJcbiAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgOiBuICUgMTAwID49IDMgJiYgbiAlIDEwMCA8PSAxMFxuICAgICAgICAgICAgPyAzXG4gICAgICAgICAgICA6IG4gJSAxMDAgPj0gMTFcbiAgICAgICAgICAgID8gNFxuICAgICAgICAgICAgOiA1O1xuICAgIH0sXG4gICAgcGx1cmFscyA9IHtcbiAgICAgICAgczogW1xuICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLFxuICAgICAgICAgICAgJ9ir2KfZhtmK2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICBbJ9ir2KfZhtmK2KrYp9mGJywgJ9ir2KfZhtmK2KrZitmGJ10sXG4gICAgICAgICAgICAnJWQg2KvZiNin2YYnLFxuICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICBdLFxuICAgICAgICBtOiBbXG4gICAgICAgICAgICAn2KPZgtmEINmF2YYg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgIFsn2K/ZgtmK2YLYqtin2YYnLCAn2K/ZgtmK2YLYqtmK2YYnXSxcbiAgICAgICAgICAgICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgXSxcbiAgICAgICAgaDogW1xuICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINiz2KfYudipJyxcbiAgICAgICAgICAgICfYs9in2LnYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLFxuICAgICAgICAgICAgJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgIF0sXG4gICAgICAgIGQ6IFtcbiAgICAgICAgICAgICfYo9mC2YQg2YXZhiDZitmI2YUnLFxuICAgICAgICAgICAgJ9mK2YjZhSDZiNin2K3YrycsXG4gICAgICAgICAgICBbJ9mK2YjZhdin2YYnLCAn2YrZiNmF2YrZhiddLFxuICAgICAgICAgICAgJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgICclZCDZitmI2YXZi9inJyxcbiAgICAgICAgICAgICclZCDZitmI2YUnLFxuICAgICAgICBdLFxuICAgICAgICBNOiBbXG4gICAgICAgICAgICAn2KPZgtmEINmF2YYg2LTZh9ixJyxcbiAgICAgICAgICAgICfYtNmH2LEg2YjYp9it2K8nLFxuICAgICAgICAgICAgWyfYtNmH2LHYp9mGJywgJ9i02YfYsdmK2YYnXSxcbiAgICAgICAgICAgICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICAnJWQg2LTZh9ix2KcnLFxuICAgICAgICAgICAgJyVkINi02YfYsScsXG4gICAgICAgIF0sXG4gICAgICAgIHk6IFtcbiAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYudin2YUnLFxuICAgICAgICAgICAgJ9i52KfZhSDZiNin2K3YrycsXG4gICAgICAgICAgICBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLFxuICAgICAgICAgICAgJyVkINij2LnZiNin2YUnLFxuICAgICAgICAgICAgJyVkINi52KfZhdmL2KcnLFxuICAgICAgICAgICAgJyVkINi52KfZhScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICBwbHVyYWxpemUgPSBmdW5jdGlvbiAodSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgdmFyIGYgPSBwbHVyYWxGb3JtKG51bWJlciksXG4gICAgICAgICAgICAgICAgc3RyID0gcGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO1xuICAgICAgICAgICAgaWYgKGYgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHJbd2l0aG91dFN1ZmZpeCA/IDAgOiAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIG1vbnRocyA9IFtcbiAgICAgICAgJ9is2KfZhtmB2YonLFxuICAgICAgICAn2YHZitmB2LHZiicsXG4gICAgICAgICfZhdin2LHYsycsXG4gICAgICAgICfYo9mB2LHZitmEJyxcbiAgICAgICAgJ9mF2KfZiicsXG4gICAgICAgICfYrNmI2KfZhicsXG4gICAgICAgICfYrNmI2YrZhNmK2KknLFxuICAgICAgICAn2KPZiNiqJyxcbiAgICAgICAgJ9iz2KjYqtmF2KjYsScsXG4gICAgICAgICfYo9mD2KrZiNio2LEnLFxuICAgICAgICAn2YbZiNmB2YXYqNixJyxcbiAgICAgICAgJ9iv2YrYs9mF2KjYsScsXG4gICAgXTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnYXItZHonLCB7XG4gICAgbW9udGhzOiBtb250aHMsXG4gICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0QvXFx1MjAwRk0vXFx1MjAwRllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn2YUnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAn2KjYudivICVzJyxcbiAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgIHM6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICBzczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgIG06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICBtbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgIGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICBoaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgIGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICBkZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgIE06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICBNTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgIHk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICB5eTogcGx1cmFsaXplKCd5JyksXG4gICAgfSxcbiAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFyYWJpYyAoS3V3YWl0KSBbYXIta3ddXG4vLyEgYXV0aG9yIDogTnVzcmV0IFBhcmxhazogaHR0cHM6Ly9naXRodWIuY29tL251c3JldHBhcmxha1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLWt3Jywge1xuICAgIG1vbnRoczogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdiq2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ9in2K3Yr1/Yp9iq2YbZitmGX9ir2YTYp9ir2KfYoV/Yp9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfZgdmKICVzJyxcbiAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgIHNzOiAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgIG06ICfYr9mC2YrZgtipJyxcbiAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgaDogJ9iz2KfYudipJyxcbiAgICAgICAgaGg6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgIGRkOiAnJWQg2KPZitin2YUnLFxuICAgICAgICBNOiAn2LTZh9ixJyxcbiAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgIHk6ICfYs9mG2KknLFxuICAgICAgICB5eTogJyVkINiz2YbZiNin2KonLFxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgKEx5YmlhKSBbYXItbHldXG4vLyEgYXV0aG9yIDogQWxpIEhtZXI6IGh0dHBzOi8vZ2l0aHViLmNvbS9raWtvYW5pc1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgIDE6ICcxJyxcbiAgICAgICAgMjogJzInLFxuICAgICAgICAzOiAnMycsXG4gICAgICAgIDQ6ICc0JyxcbiAgICAgICAgNTogJzUnLFxuICAgICAgICA2OiAnNicsXG4gICAgICAgIDc6ICc3JyxcbiAgICAgICAgODogJzgnLFxuICAgICAgICA5OiAnOScsXG4gICAgICAgIDA6ICcwJyxcbiAgICB9LFxuICAgIHBsdXJhbEZvcm0gPSBmdW5jdGlvbiAobikge1xuICAgICAgICByZXR1cm4gbiA9PT0gMFxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IG4gPT09IDFcbiAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgOiBuID09PSAyXG4gICAgICAgICAgICA/IDJcbiAgICAgICAgICAgIDogbiAlIDEwMCA+PSAzICYmIG4gJSAxMDAgPD0gMTBcbiAgICAgICAgICAgID8gM1xuICAgICAgICAgICAgOiBuICUgMTAwID49IDExXG4gICAgICAgICAgICA/IDRcbiAgICAgICAgICAgIDogNTtcbiAgICB9LFxuICAgIHBsdXJhbHMgPSB7XG4gICAgICAgIHM6IFtcbiAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYq9in2YbZitipJyxcbiAgICAgICAgICAgICfYq9in2YbZitipINmI2KfYrdiv2KknLFxuICAgICAgICAgICAgWyfYq9in2YbZitiq2KfZhicsICfYq9in2YbZitiq2YrZhiddLFxuICAgICAgICAgICAgJyVkINir2YjYp9mGJyxcbiAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgICAgICclZCDYq9in2YbZitipJyxcbiAgICAgICAgXSxcbiAgICAgICAgbTogW1xuICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINiv2YLZitmC2KknLFxuICAgICAgICAgICAgJ9iv2YLZitmC2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICBbJ9iv2YLZitmC2KrYp9mGJywgJ9iv2YLZitmC2KrZitmGJ10sXG4gICAgICAgICAgICAnJWQg2K/Zgtin2KbZgicsXG4gICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAnJWQg2K/ZgtmK2YLYqScsXG4gICAgICAgIF0sXG4gICAgICAgIGg6IFtcbiAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYs9in2LnYqScsXG4gICAgICAgICAgICAn2LPYp9i52Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICBbJ9iz2KfYudiq2KfZhicsICfYs9in2LnYqtmK2YYnXSxcbiAgICAgICAgICAgICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgICAgICAnJWQg2LPYp9i52KknLFxuICAgICAgICBdLFxuICAgICAgICBkOiBbXG4gICAgICAgICAgICAn2KPZgtmEINmF2YYg2YrZiNmFJyxcbiAgICAgICAgICAgICfZitmI2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgWyfZitmI2YXYp9mGJywgJ9mK2YjZhdmK2YYnXSxcbiAgICAgICAgICAgICclZCDYo9mK2KfZhScsXG4gICAgICAgICAgICAnJWQg2YrZiNmF2YvYpycsXG4gICAgICAgICAgICAnJWQg2YrZiNmFJyxcbiAgICAgICAgXSxcbiAgICAgICAgTTogW1xuICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINi02YfYsScsXG4gICAgICAgICAgICAn2LTZh9ixINmI2KfYrdivJyxcbiAgICAgICAgICAgIFsn2LTZh9ix2KfZhicsICfYtNmH2LHZitmGJ10sXG4gICAgICAgICAgICAnJWQg2KPYtNmH2LEnLFxuICAgICAgICAgICAgJyVkINi02YfYsdinJyxcbiAgICAgICAgICAgICclZCDYtNmH2LEnLFxuICAgICAgICBdLFxuICAgICAgICB5OiBbXG4gICAgICAgICAgICAn2KPZgtmEINmF2YYg2LnYp9mFJyxcbiAgICAgICAgICAgICfYudin2YUg2YjYp9it2K8nLFxuICAgICAgICAgICAgWyfYudin2YXYp9mGJywgJ9i52KfZhdmK2YYnXSxcbiAgICAgICAgICAgICclZCDYo9i52YjYp9mFJyxcbiAgICAgICAgICAgICclZCDYudin2YXZi9inJyxcbiAgICAgICAgICAgICclZCDYudin2YUnLFxuICAgICAgICBdLFxuICAgIH0sXG4gICAgcGx1cmFsaXplID0gZnVuY3Rpb24gKHUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgIHZhciBmID0gcGx1cmFsRm9ybShudW1iZXIpLFxuICAgICAgICAgICAgICAgIHN0ciA9IHBsdXJhbHNbdV1bcGx1cmFsRm9ybShudW1iZXIpXTtcbiAgICAgICAgICAgIGlmIChmID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc3RyID0gc3RyW3dpdGhvdXRTdWZmaXggPyAwIDogMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgICAgIH07XG4gICAgfSxcbiAgICBtb250aHMgPSBbXG4gICAgICAgICfZitmG2KfZitixJyxcbiAgICAgICAgJ9mB2KjYsdin2YrYsScsXG4gICAgICAgICfZhdin2LHYsycsXG4gICAgICAgICfYo9io2LHZitmEJyxcbiAgICAgICAgJ9mF2KfZitmIJyxcbiAgICAgICAgJ9mK2YjZhtmK2YgnLFxuICAgICAgICAn2YrZiNmE2YrZiCcsXG4gICAgICAgICfYo9i62LPYt9izJyxcbiAgICAgICAgJ9iz2KjYqtmF2KjYsScsXG4gICAgICAgICfYo9mD2KrZiNio2LEnLFxuICAgICAgICAn2YbZiNmB2YXYqNixJyxcbiAgICAgICAgJ9iv2YrYs9mF2KjYsScsXG4gICAgXTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnYXItbHknLCB7XG4gICAgbW9udGhzOiBtb250aHMsXG4gICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0QvXFx1MjAwRk0vXFx1MjAwRllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv2LV82YUvLFxuICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gJ9mFJyA9PT0gaW5wdXQ7XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ9i1JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn2YUnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW9i62K/Zi9inINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb2KPZhdizINi52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAn2KjYudivICVzJyxcbiAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgIHM6IHBsdXJhbGl6ZSgncycpLFxuICAgICAgICBzczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgIG06IHBsdXJhbGl6ZSgnbScpLFxuICAgICAgICBtbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgIGg6IHBsdXJhbGl6ZSgnaCcpLFxuICAgICAgICBoaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgIGQ6IHBsdXJhbGl6ZSgnZCcpLFxuICAgICAgICBkZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgIE06IHBsdXJhbGl6ZSgnTScpLFxuICAgICAgICBNTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgIHk6IHBsdXJhbGl6ZSgneScpLFxuICAgICAgICB5eTogcGx1cmFsaXplKCd5JyksXG4gICAgfSxcbiAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgfSxcbiAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogNiwgLy8gU2F0dXJkYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiAxMiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMTJ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChNb3JvY2NvKSBbYXItbWFdXG4vLyEgYXV0aG9yIDogRWxGYWRpbGkgWWFzc2luZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9FbEZhZGlsaVlcbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkIDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2FyLW1hJywge1xuICAgIG1vbnRoczogJ9mK2YbYp9mK2LFf2YHYqNix2KfZitixX9mF2KfYsdizX9ij2KjYsdmK2YRf2YXYp9mKX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiNiyX9i62LTYql/YtNiq2YbYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YbYqNixX9iv2KzZhtio2LEnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAn2YrZhtin2YrYsV/Zgdio2LHYp9mK2LFf2YXYp9ix2LNf2KPYqNix2YrZhF/Zhdin2Ypf2YrZiNmG2YrZiF/ZitmI2YTZitmI2LJf2LrYtNiqX9i02KrZhtio2LFf2KPZg9iq2YjYqNixX9mG2YjZhtio2LFf2K/YrNmG2KjYsScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ9in2K3Yr1/Yp9ir2YbZitmGX9ir2YTYp9ir2KfYoV/Yp9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfZgdmKICVzJyxcbiAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgIHNzOiAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgIG06ICfYr9mC2YrZgtipJyxcbiAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgaDogJ9iz2KfYudipJyxcbiAgICAgICAgaGg6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgIGRkOiAnJWQg2KPZitin2YUnLFxuICAgICAgICBNOiAn2LTZh9ixJyxcbiAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgIHk6ICfYs9mG2KknLFxuICAgICAgICB5eTogJyVkINiz2YbZiNin2KonLFxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQXJhYmljIChTYXVkaSBBcmFiaWEpIFthci1zYV1cbi8vISBhdXRob3IgOiBTdWhhaWwgQWxrb3dhaWxlZXQgOiBodHRwczovL2dpdGh1Yi5jb20veHNvaFxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgIDE6ICfZoScsXG4gICAgICAgIDI6ICfZoicsXG4gICAgICAgIDM6ICfZoycsXG4gICAgICAgIDQ6ICfZpCcsXG4gICAgICAgIDU6ICfZpScsXG4gICAgICAgIDY6ICfZpicsXG4gICAgICAgIDc6ICfZpycsXG4gICAgICAgIDg6ICfZqCcsXG4gICAgICAgIDk6ICfZqScsXG4gICAgICAgIDA6ICfZoCcsXG4gICAgfSxcbiAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICfZoSc6ICcxJyxcbiAgICAgICAgJ9miJzogJzInLFxuICAgICAgICAn2aMnOiAnMycsXG4gICAgICAgICfZpCc6ICc0JyxcbiAgICAgICAgJ9mlJzogJzUnLFxuICAgICAgICAn2aYnOiAnNicsXG4gICAgICAgICfZpyc6ICc3JyxcbiAgICAgICAgJ9moJzogJzgnLFxuICAgICAgICAn2aknOiAnOScsXG4gICAgICAgICfZoCc6ICcwJyxcbiAgICB9O1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci1zYScsIHtcbiAgICBtb250aHM6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZitmIX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiF/Yo9i62LPYt9izX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICfZitmG2KfZitixX9mB2KjYsdin2YrYsV/Zhdin2LHYs1/Yo9io2LHZitmEX9mF2KfZitmIX9mK2YjZhtmK2Yhf2YrZiNmE2YrZiF/Yo9i62LPYt9izX9iz2KjYqtmF2KjYsV/Yo9mD2KrZiNio2LFf2YbZiNmB2YXYqNixX9iv2YrYs9mF2KjYsScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXM6ICfYp9mE2KPYrdivX9in2YTYpdir2YbZitmGX9in2YTYq9mE2KfYq9in2KFf2KfZhNij2LHYqNi52KfYoV/Yp9mE2K7ZhdmK2LNf2KfZhNis2YXYudipX9in2YTYs9io2KonLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ9ij2K3Yr1/Ypdir2YbZitmGX9ir2YTYp9ir2KfYoV/Yo9ix2KjYudin2KFf2K7ZhdmK2LNf2KzZhdi52Klf2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn2K1f2YZf2Ktf2LFf2K5f2Kxf2LMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL9i1fNmFLyxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuICfZhScgPT09IGlucHV0O1xuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuICfYtSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ9mFJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vYp9mE2YrZiNmFINi52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vYutiv2Kcg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YTZiSDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfZgdmKICVzJyxcbiAgICAgICAgcGFzdDogJ9mF2YbYsCAlcycsXG4gICAgICAgIHM6ICfYq9mI2KfZhicsXG4gICAgICAgIHNzOiAnJWQg2KvYp9mG2YrYqScsXG4gICAgICAgIG06ICfYr9mC2YrZgtipJyxcbiAgICAgICAgbW06ICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgaDogJ9iz2KfYudipJyxcbiAgICAgICAgaGg6ICclZCDYs9in2LnYp9iqJyxcbiAgICAgICAgZDogJ9mK2YjZhScsXG4gICAgICAgIGRkOiAnJWQg2KPZitin2YUnLFxuICAgICAgICBNOiAn2LTZh9ixJyxcbiAgICAgICAgTU06ICclZCDYo9i02YfYsScsXG4gICAgICAgIHk6ICfYs9mG2KknLFxuICAgICAgICB5eTogJyVkINiz2YbZiNin2KonLFxuICAgIH0sXG4gICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgLnJlcGxhY2UoL1vZodmi2aPZpNml2abZp9mo2anZoF0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoL9iML2csICcsJyk7XG4gICAgfSxcbiAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgIDogIEFyYWJpYyAoVHVuaXNpYSkgW2FyLXRuXVxuLy8hIGF1dGhvciA6IE5hZGVyIFRvdWthYnJpIDogaHR0cHM6Ly9naXRodWIuY29tL25hZGVyaW9cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdhci10bicsIHtcbiAgICBtb250aHM6ICfYrNin2YbZgdmKX9mB2YrZgdix2Ypf2YXYp9ix2LNf2KPZgdix2YrZhF/Zhdin2Ypf2KzZiNin2YZf2KzZiNmK2YTZitipX9ij2YjYql/Ys9io2KrZhdio2LFf2KPZg9iq2YjYqNixX9mG2YjZgdmF2KjYsV/Yr9mK2LPZhdio2LEnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAn2KzYp9mG2YHZil/ZgdmK2YHYsdmKX9mF2KfYsdizX9ij2YHYsdmK2YRf2YXYp9mKX9is2YjYp9mGX9is2YjZitmE2YrYqV/Yo9mI2Kpf2LPYqNiq2YXYqNixX9ij2YPYqtmI2KjYsV/ZhtmI2YHZhdio2LFf2K/Zitiz2YXYqNixJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5czogJ9in2YTYo9it2K9f2KfZhNil2KvZhtmK2YZf2KfZhNir2YTYp9ir2KfYoV/Yp9mE2KPYsdio2LnYp9ihX9in2YTYrtmF2YrYs1/Yp9mE2KzZhdi52Klf2KfZhNiz2KjYqicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn2KPYrdivX9il2KvZhtmK2YZf2KvZhNin2KvYp9ihX9ij2LHYqNi52KfYoV/YrtmF2YrYs1/YrNmF2LnYqV/Ys9io2KonLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfYrV/Zhl/Yq1/YsV/Yrl/YrF/Ysycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW9in2YTZitmI2YUg2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW9i62K/YpyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW9ij2YXYsyDYudmE2Ykg2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2LnZhNmJINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ9mB2YogJXMnLFxuICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgczogJ9ir2YjYp9mGJyxcbiAgICAgICAgc3M6ICclZCDYq9in2YbZitipJyxcbiAgICAgICAgbTogJ9iv2YLZitmC2KknLFxuICAgICAgICBtbTogJyVkINiv2YLYp9im2YInLFxuICAgICAgICBoOiAn2LPYp9i52KknLFxuICAgICAgICBoaDogJyVkINiz2KfYudin2KonLFxuICAgICAgICBkOiAn2YrZiNmFJyxcbiAgICAgICAgZGQ6ICclZCDYo9mK2KfZhScsXG4gICAgICAgIE06ICfYtNmH2LEnLFxuICAgICAgICBNTTogJyVkINij2LTZh9ixJyxcbiAgICAgICAgeTogJ9iz2YbYqScsXG4gICAgICAgIHl5OiAnJWQg2LPZhtmI2KfYqicsXG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBcmFiaWMgW2FyXVxuLy8hIGF1dGhvciA6IEFiZGVsIFNhaWQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hYmRlbHNhaWRcbi8vISBhdXRob3IgOiBBaG1lZCBFbGtoYXRpYlxuLy8hIGF1dGhvciA6IGZvcmFiaSBodHRwczovL2dpdGh1Yi5jb20vZm9yYWJpXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgMTogJ9mhJyxcbiAgICAgICAgMjogJ9miJyxcbiAgICAgICAgMzogJ9mjJyxcbiAgICAgICAgNDogJ9mkJyxcbiAgICAgICAgNTogJ9mlJyxcbiAgICAgICAgNjogJ9mmJyxcbiAgICAgICAgNzogJ9mnJyxcbiAgICAgICAgODogJ9moJyxcbiAgICAgICAgOTogJ9mpJyxcbiAgICAgICAgMDogJ9mgJyxcbiAgICB9LFxuICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ9mhJzogJzEnLFxuICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICfZoyc6ICczJyxcbiAgICAgICAgJ9mkJzogJzQnLFxuICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICfZpic6ICc2JyxcbiAgICAgICAgJ9mnJzogJzcnLFxuICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICfZqSc6ICc5JyxcbiAgICAgICAgJ9mgJzogJzAnLFxuICAgIH0sXG4gICAgcGx1cmFsRm9ybSA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiBuID09PSAwXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogbiA9PT0gMVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IG4gPT09IDJcbiAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgOiBuICUgMTAwID49IDMgJiYgbiAlIDEwMCA8PSAxMFxuICAgICAgICAgICAgPyAzXG4gICAgICAgICAgICA6IG4gJSAxMDAgPj0gMTFcbiAgICAgICAgICAgID8gNFxuICAgICAgICAgICAgOiA1O1xuICAgIH0sXG4gICAgcGx1cmFscyA9IHtcbiAgICAgICAgczogW1xuICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINir2KfZhtmK2KknLFxuICAgICAgICAgICAgJ9ir2KfZhtmK2Kkg2YjYp9it2K/YqScsXG4gICAgICAgICAgICBbJ9ir2KfZhtmK2KrYp9mGJywgJ9ir2KfZhtmK2KrZitmGJ10sXG4gICAgICAgICAgICAnJWQg2KvZiNin2YYnLFxuICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICAgICAgJyVkINir2KfZhtmK2KknLFxuICAgICAgICBdLFxuICAgICAgICBtOiBbXG4gICAgICAgICAgICAn2KPZgtmEINmF2YYg2K/ZgtmK2YLYqScsXG4gICAgICAgICAgICAn2K/ZgtmK2YLYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgIFsn2K/ZgtmK2YLYqtin2YYnLCAn2K/ZgtmK2YLYqtmK2YYnXSxcbiAgICAgICAgICAgICclZCDYr9mC2KfYptmCJyxcbiAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgICAgICclZCDYr9mC2YrZgtipJyxcbiAgICAgICAgXSxcbiAgICAgICAgaDogW1xuICAgICAgICAgICAgJ9ij2YLZhCDZhdmGINiz2KfYudipJyxcbiAgICAgICAgICAgICfYs9in2LnYqSDZiNin2K3Yr9ipJyxcbiAgICAgICAgICAgIFsn2LPYp9i52KrYp9mGJywgJ9iz2KfYudiq2YrZhiddLFxuICAgICAgICAgICAgJyVkINiz2KfYudin2KonLFxuICAgICAgICAgICAgJyVkINiz2KfYudipJyxcbiAgICAgICAgICAgICclZCDYs9in2LnYqScsXG4gICAgICAgIF0sXG4gICAgICAgIGQ6IFtcbiAgICAgICAgICAgICfYo9mC2YQg2YXZhiDZitmI2YUnLFxuICAgICAgICAgICAgJ9mK2YjZhSDZiNin2K3YrycsXG4gICAgICAgICAgICBbJ9mK2YjZhdin2YYnLCAn2YrZiNmF2YrZhiddLFxuICAgICAgICAgICAgJyVkINij2YrYp9mFJyxcbiAgICAgICAgICAgICclZCDZitmI2YXZi9inJyxcbiAgICAgICAgICAgICclZCDZitmI2YUnLFxuICAgICAgICBdLFxuICAgICAgICBNOiBbXG4gICAgICAgICAgICAn2KPZgtmEINmF2YYg2LTZh9ixJyxcbiAgICAgICAgICAgICfYtNmH2LEg2YjYp9it2K8nLFxuICAgICAgICAgICAgWyfYtNmH2LHYp9mGJywgJ9i02YfYsdmK2YYnXSxcbiAgICAgICAgICAgICclZCDYo9i02YfYsScsXG4gICAgICAgICAgICAnJWQg2LTZh9ix2KcnLFxuICAgICAgICAgICAgJyVkINi02YfYsScsXG4gICAgICAgIF0sXG4gICAgICAgIHk6IFtcbiAgICAgICAgICAgICfYo9mC2YQg2YXZhiDYudin2YUnLFxuICAgICAgICAgICAgJ9i52KfZhSDZiNin2K3YrycsXG4gICAgICAgICAgICBbJ9i52KfZhdin2YYnLCAn2LnYp9mF2YrZhiddLFxuICAgICAgICAgICAgJyVkINij2LnZiNin2YUnLFxuICAgICAgICAgICAgJyVkINi52KfZhdmL2KcnLFxuICAgICAgICAgICAgJyVkINi52KfZhScsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICBwbHVyYWxpemUgPSBmdW5jdGlvbiAodSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgdmFyIGYgPSBwbHVyYWxGb3JtKG51bWJlciksXG4gICAgICAgICAgICAgICAgc3RyID0gcGx1cmFsc1t1XVtwbHVyYWxGb3JtKG51bWJlcildO1xuICAgICAgICAgICAgaWYgKGYgPT09IDIpIHtcbiAgICAgICAgICAgICAgICBzdHIgPSBzdHJbd2l0aG91dFN1ZmZpeCA/IDAgOiAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIG1vbnRocyA9IFtcbiAgICAgICAgJ9mK2YbYp9mK2LEnLFxuICAgICAgICAn2YHYqNix2KfZitixJyxcbiAgICAgICAgJ9mF2KfYsdizJyxcbiAgICAgICAgJ9ij2KjYsdmK2YQnLFxuICAgICAgICAn2YXYp9mK2YgnLFxuICAgICAgICAn2YrZiNmG2YrZiCcsXG4gICAgICAgICfZitmI2YTZitmIJyxcbiAgICAgICAgJ9ij2LrYs9i32LMnLFxuICAgICAgICAn2LPYqNiq2YXYqNixJyxcbiAgICAgICAgJ9ij2YPYqtmI2KjYsScsXG4gICAgICAgICfZhtmI2YHZhdio2LEnLFxuICAgICAgICAn2K/Zitiz2YXYqNixJyxcbiAgICBdO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdhcicsIHtcbiAgICBtb250aHM6IG1vbnRocyxcbiAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgIHdlZWtkYXlzOiAn2KfZhNij2K3Yr1/Yp9mE2KXYq9mG2YrZhl/Yp9mE2KvZhNin2KvYp9ihX9in2YTYo9ix2KjYudin2KFf2KfZhNiu2YXZitizX9in2YTYrNmF2LnYqV/Yp9mE2LPYqNiqJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfYo9it2K9f2KXYq9mG2YrZhl/Yq9mE2KfYq9in2KFf2KPYsdio2LnYp9ihX9iu2YXZitizX9is2YXYudipX9iz2KjYqicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ9itX9mGX9irX9ixX9iuX9isX9izJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnRC9cXHUyMDBGTS9cXHUyMDBGWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIG1lcmlkaWVtUGFyc2U6IC/YtXzZhS8sXG4gICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAn2YUnID09PSBpbnB1dDtcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfZhSc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdb2KfZhNmK2YjZhSDYudmG2K8g2KfZhNiz2KfYudipXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb2LrYr9mL2Kcg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vYo9mF2LMg2LnZhtivINin2YTYs9in2LnYqV0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW9i52YbYryDYp9mE2LPYp9i52KldIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfYqNi52K8gJXMnLFxuICAgICAgICBwYXN0OiAn2YXZhtiwICVzJyxcbiAgICAgICAgczogcGx1cmFsaXplKCdzJyksXG4gICAgICAgIHNzOiBwbHVyYWxpemUoJ3MnKSxcbiAgICAgICAgbTogcGx1cmFsaXplKCdtJyksXG4gICAgICAgIG1tOiBwbHVyYWxpemUoJ20nKSxcbiAgICAgICAgaDogcGx1cmFsaXplKCdoJyksXG4gICAgICAgIGhoOiBwbHVyYWxpemUoJ2gnKSxcbiAgICAgICAgZDogcGx1cmFsaXplKCdkJyksXG4gICAgICAgIGRkOiBwbHVyYWxpemUoJ2QnKSxcbiAgICAgICAgTTogcGx1cmFsaXplKCdNJyksXG4gICAgICAgIE1NOiBwbHVyYWxpemUoJ00nKSxcbiAgICAgICAgeTogcGx1cmFsaXplKCd5JyksXG4gICAgICAgIHl5OiBwbHVyYWxpemUoJ3knKSxcbiAgICB9LFxuICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdcbiAgICAgICAgICAgIC5yZXBsYWNlKC9b2aHZotmj2aTZpdmm2afZqNmp2aBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgIH0sXG4gICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEF6ZXJiYWlqYW5pIFthel1cbi8vISBhdXRob3IgOiB0b3BjaGl5ZXYgOiBodHRwczovL2dpdGh1Yi5jb20vdG9wY2hpeWV2XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHN1ZmZpeGVzID0ge1xuICAgIDE6ICctaW5jaScsXG4gICAgNTogJy1pbmNpJyxcbiAgICA4OiAnLWluY2knLFxuICAgIDcwOiAnLWluY2knLFxuICAgIDgwOiAnLWluY2knLFxuICAgIDI6ICctbmNpJyxcbiAgICA3OiAnLW5jaScsXG4gICAgMjA6ICctbmNpJyxcbiAgICA1MDogJy1uY2knLFxuICAgIDM6ICctw7xuY8O8JyxcbiAgICA0OiAnLcO8bmPDvCcsXG4gICAgMTAwOiAnLcO8bmPDvCcsXG4gICAgNjogJy1uY8SxJyxcbiAgICA5OiAnLXVuY3UnLFxuICAgIDEwOiAnLXVuY3UnLFxuICAgIDMwOiAnLXVuY3UnLFxuICAgIDYwOiAnLcSxbmPEsScsXG4gICAgOTA6ICctxLFuY8SxJyxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2F6Jywge1xuICAgIG1vbnRoczogJ3lhbnZhcl9mZXZyYWxfbWFydF9hcHJlbF9tYXlfaXl1bl9peXVsX2F2cXVzdF9zZW50eWFicl9va3R5YWJyX25veWFicl9kZWthYnInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAneWFuX2Zldl9tYXJfYXByX21heV9peW5faXlsX2F2cV9zZW5fb2t0X25veV9kZWsnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICdCYXphcl9CYXphciBlcnTJmXNpX8OHyZlyxZ/JmW5iyZkgYXjFn2FtxLFfw4fJmXLFn8mZbmLJmV9Dw7xtyZkgYXjFn2FtxLFfQ8O8bcmZX8WeyZluYsmZJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnQmF6X0J6RV/Dh0F4X8OHyZlyX0NBeF9Dw7xtX8WeyZluJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnQnpfQkVfw4dBX8OHyZlfQ0FfQ8O8X8WeyZknLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbYnVnw7xuIHNhYXRdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tzYWJhaCBzYWF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnW2fJmWzJmW4gaMmZZnTJmV0gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW2TDvG7JmW5dIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdba2XDp8mZbiBoyZlmdMmZXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXMgc29ucmEnLFxuICAgICAgICBwYXN0OiAnJXMgyZl2dsmZbCcsXG4gICAgICAgIHM6ICdiaXIgbmXDp8mZIHNhbml5yZknLFxuICAgICAgICBzczogJyVkIHNhbml5yZknLFxuICAgICAgICBtOiAnYmlyIGTJmXFpccmZJyxcbiAgICAgICAgbW06ICclZCBkyZlxaXHJmScsXG4gICAgICAgIGg6ICdiaXIgc2FhdCcsXG4gICAgICAgIGhoOiAnJWQgc2FhdCcsXG4gICAgICAgIGQ6ICdiaXIgZ8O8bicsXG4gICAgICAgIGRkOiAnJWQgZ8O8bicsXG4gICAgICAgIE06ICdiaXIgYXknLFxuICAgICAgICBNTTogJyVkIGF5JyxcbiAgICAgICAgeTogJ2JpciBpbCcsXG4gICAgICAgIHl5OiAnJWQgaWwnLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL2dlY8mZfHPJmWjJmXJ8Z8O8bmTDvHp8YXjFn2FtLyxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIC9eKGfDvG5kw7x6fGF4xZ9hbSkkLy50ZXN0KGlucHV0KTtcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgcmV0dXJuICdnZWPJmSc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ3PJmWjJmXInO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgcmV0dXJuICdnw7xuZMO8eic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ2F4xZ9hbSc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0oxLFuY8SxfGluY2l8bmNpfMO8bmPDvHxuY8SxfHVuY3UpLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgemVyb1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICctxLFuY8SxJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgYiA9IChudW1iZXIgJSAxMDApIC0gYSxcbiAgICAgICAgICAgIGMgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSB8fCBzdWZmaXhlc1tjXSk7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCZWxhcnVzaWFuIFtiZV1cbi8vISBhdXRob3IgOiBEbWl0cnkgRGVtaWRvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9kZW1pZG92OTFcbi8vISBhdXRob3I6IFByYWxlc2thOiBodHRwOi8vcHJhbGVza2EucHJvL1xuLy8hIEF1dGhvciA6IE1lbmVsaW9uIEVsZW5zw7psZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZnVuY3Rpb24gcGx1cmFsKHdvcmQsIG51bSkge1xuICAgIHZhciBmb3JtcyA9IHdvcmQuc3BsaXQoJ18nKTtcbiAgICByZXR1cm4gbnVtICUgMTAgPT09IDEgJiYgbnVtICUgMTAwICE9PSAxMVxuICAgICAgICA/IGZvcm1zWzBdXG4gICAgICAgIDogbnVtICUgMTAgPj0gMiAmJiBudW0gJSAxMCA8PSA0ICYmIChudW0gJSAxMDAgPCAxMCB8fCBudW0gJSAxMDAgPj0gMjApXG4gICAgICAgID8gZm9ybXNbMV1cbiAgICAgICAgOiBmb3Jtc1syXTtcbn1cbmZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhQbHVyYWwobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICBzczogd2l0aG91dFN1ZmZpeCA/ICfRgdC10LrRg9C90LTQsF/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnIDogJ9GB0LXQutGD0L3QtNGDX9GB0LXQutGD0L3QtNGLX9GB0LXQutGD0L3QtCcsXG4gICAgICAgIG1tOiB3aXRob3V0U3VmZml4ID8gJ9GF0LLRltC70ZbQvdCwX9GF0LLRltC70ZbQvdGLX9GF0LLRltC70ZbQvScgOiAn0YXQstGW0LvRltC90YNf0YXQstGW0LvRltC90Ytf0YXQstGW0LvRltC9JyxcbiAgICAgICAgaGg6IHdpdGhvdXRTdWZmaXggPyAn0LPQsNC00LfRltC90LBf0LPQsNC00LfRltC90Ytf0LPQsNC00LfRltC9JyA6ICfQs9Cw0LTQt9GW0L3Rg1/Qs9Cw0LTQt9GW0L3Ri1/Qs9Cw0LTQt9GW0L0nLFxuICAgICAgICBkZDogJ9C00LfQtdC90Yxf0LTQvdGWX9C00LfRkdC9JyxcbiAgICAgICAgTU06ICfQvNC10YHRj9GGX9C80LXRgdGP0YbRi1/QvNC10YHRj9GG0LDRnicsXG4gICAgICAgIHl5OiAn0LPQvtC0X9Cz0LDQtNGLX9Cz0LDQtNC+0Z4nLFxuICAgIH07XG4gICAgaWYgKGtleSA9PT0gJ20nKSB7XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0LLRltC70ZbQvdCwJyA6ICfRhdCy0ZbQu9GW0L3Rgyc7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdoJykge1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfQs9Cw0LTQt9GW0L3QsCcgOiAn0LPQsNC00LfRltC90YMnO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBwbHVyYWwoZm9ybWF0W2tleV0sICtudW1iZXIpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnYmUnLCB7XG4gICAgbW9udGhzOiB7XG4gICAgICAgIGZvcm1hdDogJ9GB0YLRg9C00LfQtdC90Y9f0LvRjtGC0LDQs9CwX9GB0LDQutCw0LLRltC60LBf0LrRgNCw0YHQsNCy0ZbQutCwX9GC0YDQsNGe0L3Rj1/Rh9GN0YDQstC10L3Rj1/Qu9GW0L/QtdC90Y9f0LbQvdGW0Z7QvdGPX9Cy0LXRgNCw0YHQvdGPX9C60LDRgdGC0YDRi9GH0L3RltC60LBf0LvRltGB0YLQsNC/0LDQtNCwX9GB0L3QtdC20L3Rjycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgc3RhbmRhbG9uZTogJ9GB0YLRg9C00LfQtdC90Yxf0LvRjtGC0Ytf0YHQsNC60LDQstGW0Lpf0LrRgNCw0YHQsNCy0ZbQul/RgtGA0LDQstC10L3RjF/Rh9GN0YDQstC10L3RjF/Qu9GW0L/QtdC90Yxf0LbQvdGW0LLQtdC90Yxf0LLQtdGA0LDRgdC10L3RjF/QutCw0YHRgtGA0YvRh9C90ZbQul/Qu9GW0YHRgtCw0L/QsNC0X9GB0L3QtdC20LDQvdGMJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgIH0sXG4gICAgbW9udGhzU2hvcnQ6ICfRgdGC0YPQtF/Qu9GO0YJf0YHQsNC6X9C60YDQsNGBX9GC0YDQsNCyX9GH0Y3RgNCyX9C70ZbQv1/QttC90ZbQsl/QstC10YBf0LrQsNGB0YJf0LvRltGB0YJf0YHQvdC10LYnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzOiB7XG4gICAgICAgIGZvcm1hdDogJ9C90Y/QtNC30LXQu9GOX9C/0LDQvdGP0LTQt9C10LvQsNC6X9Cw0Z7RgtC+0YDQsNC6X9GB0LXRgNCw0LTRg1/Rh9Cw0YbQstC10YBf0L/Rj9GC0L3RltGG0YNf0YHRg9Cx0L7RgtGDJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBzdGFuZGFsb25lOiAn0L3Rj9C00LfQtdC70Y9f0L/QsNC90Y/QtNC30LXQu9Cw0Lpf0LDRntGC0L7RgNCw0Lpf0YHQtdGA0LDQtNCwX9GH0LDRhtCy0LXRgF/Qv9GP0YLQvdGW0YbQsF/RgdGD0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGlzRm9ybWF0OiAvXFxbID9b0KPRg9GeXSA/KD860LzRltC90YPQu9GD0Y580L3QsNGB0YLRg9C/0L3Rg9GOKT8gP1xcXSA/ZGRkZC8sXG4gICAgfSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtF/Qv9C9X9Cw0YJf0YHRgF/Rh9GGX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ9C90LRf0L/QvV/QsNGCX9GB0YBf0YfRhl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZINCzLicsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINCzLiwgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg0LMuLCBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW9Ch0ZHQvdC90Y8g0Z5dIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vQl9Cw0Z7RgtGA0LAg0Z5dIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vQo9GH0L7RgNCwINGeXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1vQo10gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgfSxcbiAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0KMg0LzRltC90YPQu9GD0Y5dIGRkZGQgW9GeXSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CjINC80ZbQvdGD0LvRi10gZGRkZCBb0Z5dIExUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfQv9GA0LDQtyAlcycsXG4gICAgICAgIHBhc3Q6ICclcyDRgtCw0LzRgycsXG4gICAgICAgIHM6ICfQvdC10LrQsNC70YzQutGWINGB0LXQutGD0L3QtCcsXG4gICAgICAgIG06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIG1tOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICBoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICBoaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgZDogJ9C00LfQtdC90YwnLFxuICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgTTogJ9C80LXRgdGP0YYnLFxuICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgeTogJ9Cz0L7QtCcsXG4gICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL9C90L7Rh9GLfNGA0LDQvdGW0YbRi3zQtNC90Y980LLQtdGH0LDRgNCwLyxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIC9eKNC00L3Rj3zQstC10YfQsNGA0LApJC8udGVzdChpbnB1dCk7XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiAn0L3QvtGH0YsnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuICfRgNCw0L3RltGG0YsnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgcmV0dXJuICfQtNC90Y8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfQstC10YfQsNGA0LAnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNGWfNGLfNCz0LApLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gKG51bWJlciAlIDEwID09PSAyIHx8IG51bWJlciAlIDEwID09PSAzKSAmJlxuICAgICAgICAgICAgICAgICAgICBudW1iZXIgJSAxMDAgIT09IDEyICYmXG4gICAgICAgICAgICAgICAgICAgIG51bWJlciAlIDEwMCAhPT0gMTNcbiAgICAgICAgICAgICAgICAgICAgPyBudW1iZXIgKyAnLdGWJ1xuICAgICAgICAgICAgICAgICAgICA6IG51bWJlciArICct0YsnO1xuICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LPQsCc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJ1bGdhcmlhbiBbYmddXG4vLyEgYXV0aG9yIDogS3Jhc2VuIEJvcmlzb3YgOiBodHRwczovL2dpdGh1Yi5jb20va3JhelxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JnJywge1xuICAgIG1vbnRoczogJ9GP0L3Rg9Cw0YDQuF/RhNC10LLRgNGD0LDRgNC4X9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNC5X9GO0L3QuF/RjtC70Lhf0LDQstCz0YPRgdGCX9GB0LXQv9GC0LXQvNCy0YDQuF/QvtC60YLQvtC80LLRgNC4X9C90L7QtdC80LLRgNC4X9C00LXQutC10LzQstGA0LgnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAn0Y/QvdGDX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/RjtC90Lhf0Y7Qu9C4X9Cw0LLQs1/RgdC10L9f0L7QutGCX9C90L7QtV/QtNC10LonLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICfQvdC10LTQtdC70Y9f0L/QvtC90LXQtNC10LvQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNGP0LTQsF/Rh9C10YLQstGK0YDRgtGK0Lpf0L/QtdGC0YrQul/RgdGK0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC10LRf0L/QvtC9X9Cy0YLQvl/RgdGA0Y9f0YfQtdGCX9C/0LXRgl/RgdGK0LEnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfQvdC0X9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSDptbScsXG4gICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICBMOiAnRC5NTS5ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW9CU0L3QtdGBINCyXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb0KPRgtGA0LUg0LJdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvQsl0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW9CS0YfQtdGA0LAg0LJdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQnNC40L3QsNC70LDRgtCwXSBkZGRkIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JzQuNC90LDQu9C40Y9dIGRkZGQgW9CyXSBMVCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAn0YHQu9C10LQgJXMnLFxuICAgICAgICBwYXN0OiAn0L/RgNC10LTQuCAlcycsXG4gICAgICAgIHM6ICfQvdGP0LrQvtC70LrQviDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICBtOiAn0LzQuNC90YPRgtCwJyxcbiAgICAgICAgbW06ICclZCDQvNC40L3Rg9GC0LgnLFxuICAgICAgICBoOiAn0YfQsNGBJyxcbiAgICAgICAgaGg6ICclZCDRh9Cw0YHQsCcsXG4gICAgICAgIGQ6ICfQtNC10L0nLFxuICAgICAgICBkZDogJyVkINC00LXQvdCwJyxcbiAgICAgICAgdzogJ9GB0LXQtNC80LjRhtCwJyxcbiAgICAgICAgd3c6ICclZCDRgdC10LTQvNC40YbQuCcsXG4gICAgICAgIE06ICfQvNC10YHQtdGGJyxcbiAgICAgICAgTU06ICclZCDQvNC10YHQtdGG0LAnLFxuICAgICAgICB5OiAn0LPQvtC00LjQvdCwJyxcbiAgICAgICAgeXk6ICclZCDQs9C+0LTQuNC90LgnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LSjQtdCyfNC10L180YLQuHzQstC4fNGA0Lh80LzQuCkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIGxhc3REaWdpdCA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgbGFzdDJEaWdpdHMgPSBudW1iZXIgJSAxMDA7XG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC10LInO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3QyRGlnaXRzID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QtdC9JztcbiAgICAgICAgfSBlbHNlIGlmIChsYXN0MkRpZ2l0cyA+IDEwICYmIGxhc3QyRGlnaXRzIDwgMjApIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGC0LgnO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LLQuCc7XG4gICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSAyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3RgNC4JztcbiAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDcgfHwgbGFzdERpZ2l0ID09PSA4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QvNC4JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGC0LgnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCYW1iYXJhIFtibV1cbi8vISBhdXRob3IgOiBFc3RlbGxlIENvbW1lbnQgOiBodHRwczovL2dpdGh1Yi5jb20vZXN0ZWxsZWNvbW1lbnRcbi8vIExhbmd1YWdlIGNvbnRhY3QgcGVyc29uIDogQWJkb3VmYXRhIEthbmUgOiBodHRwczovL2dpdGh1Yi5jb20vYWJkb3VmYXRhXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnYm0nLCB7XG4gICAgbW9udGhzOiAnWmFud3V5ZWthbG9fRmV3dXJ1eWVrYWxvX01hcmlzaWthbG9fQXdpcmlsaWthbG9fTcmba2Fsb19adXfJm25rYWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TyZt0YW5idXJ1a2Fsb1/JlGt1dMmUYnVydWthbG9fTm93YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ1phbl9GZXdfTWFyX0F3aV9NyZtfWnV3X1p1bF9VdGlfU8mbdF/JlGt1X05vd19EZXMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICdLYXJpX050yZtuyZtuX1RhcmF0YV9BcmFiYV9BbGFtaXNhX0p1bWFfU2liaXJpJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdLYXJfTnTJm19UYXJfQXJhX0FsYV9KdW1fU2liJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnS2FfTnRfVGFfQXJfQWxfSnVfU2knLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ01NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWScsXG4gICAgICAgIExMTDogJ01NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbMmbcsmbXSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkIE1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbMmbcsmbXSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW0JpIGzJm3LJm10gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1NpbmkgbMmbcsmbXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbZG9uIGzJm3LJm10gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW0t1bnUgbMmbcsmbXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbdMmbbcmbbmVuIGzJm3LJm10gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVzIGvJlG7JlCcsXG4gICAgICAgIHBhc3Q6ICdhIGLJmyAlcyBiyZQnLFxuICAgICAgICBzOiAnc2FuZ2EgZGFtYSBkYW1hJyxcbiAgICAgICAgc3M6ICdzZWtvbmRpICVkJyxcbiAgICAgICAgbTogJ21pbml0aSBrZWxlbicsXG4gICAgICAgIG1tOiAnbWluaXRpICVkJyxcbiAgICAgICAgaDogJ2zJm3LJmyBrZWxlbicsXG4gICAgICAgIGhoOiAnbMmbcsmbICVkJyxcbiAgICAgICAgZDogJ3RpbGUga2VsZW4nLFxuICAgICAgICBkZDogJ3RpbGUgJWQnLFxuICAgICAgICBNOiAna2FsbyBrZWxlbicsXG4gICAgICAgIE1NOiAna2FsbyAlZCcsXG4gICAgICAgIHk6ICdzYW4ga2VsZW4nLFxuICAgICAgICB5eTogJ3NhbiAlZCcsXG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCZW5nYWxpIChCYW5nbGFkZXNoKSBbYm4tYmRdXG4vLyEgYXV0aG9yIDogQXNyYWYgSG9zc2FpbiBQYXRvYXJ5IDogaHR0cHM6Ly9naXRodWIuY29tL2FzaHdvb2xmb3JkXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgMTogJ+CnpycsXG4gICAgICAgIDI6ICfgp6gnLFxuICAgICAgICAzOiAn4KepJyxcbiAgICAgICAgNDogJ+CnqicsXG4gICAgICAgIDU6ICfgp6snLFxuICAgICAgICA2OiAn4KesJyxcbiAgICAgICAgNzogJ+CnrScsXG4gICAgICAgIDg6ICfgp64nLFxuICAgICAgICA5OiAn4KevJyxcbiAgICAgICAgMDogJ+CnpicsXG4gICAgfSxcbiAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICfgp6cnOiAnMScsXG4gICAgICAgICfgp6gnOiAnMicsXG4gICAgICAgICfgp6knOiAnMycsXG4gICAgICAgICfgp6onOiAnNCcsXG4gICAgICAgICfgp6snOiAnNScsXG4gICAgICAgICfgp6wnOiAnNicsXG4gICAgICAgICfgp60nOiAnNycsXG4gICAgICAgICfgp64nOiAnOCcsXG4gICAgICAgICfgp68nOiAnOScsXG4gICAgICAgICfgp6YnOiAnMCcsXG4gICAgfTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnYm4tYmQnLCB7XG4gICAgbW9udGhzOiAn4Kac4Ka+4Kao4KeB4Kef4Ka+4Kaw4Ka/X+Cmq+Cnh+CmrOCnjeCmsOCngeCnn+CmvuCmsOCmv1/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp/gp4fgpq7gp43gpqzgprBf4KaF4KaV4KeN4Kaf4KeL4Kas4KawX+CmqOCmreCnh+CmruCnjeCmrOCmsF/gpqHgpr/gprjgp4fgpq7gp43gpqzgprAnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAn4Kac4Ka+4Kao4KeBX+Cmq+Cnh+CmrOCnjeCmsOCngV/gpq7gpr7gprDgp43gpppf4KaP4Kaq4KeN4Kaw4Ka/4KayX+CmruCnh1/gppzgp4Hgpqhf4Kac4KeB4Kay4Ka+4KaHX+CmhuCml+CmuOCnjeCmn1/gprjgp4fgpqrgp43gpp9f4KaF4KaV4KeN4Kaf4KeLX+CmqOCmreCnh1/gpqHgpr/gprjgp4cnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzOiAn4Kaw4Kas4Ka/4Kas4Ka+4KawX+CmuOCni+CmruCmrOCmvuCmsF/gpq7gppngp43gppfgprLgpqzgpr7gprBf4Kas4KeB4Kan4Kas4Ka+4KawX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv+CmrOCmvuCmsF/gprbgp4HgppXgp43gprDgpqzgpr7gprBf4Ka24Kao4Ka/4Kas4Ka+4KawJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmueCmuOCnjeCmquCmpOCmv1/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn4Kaw4Kas4Ka/X+CmuOCni+Cmrl/gpq7gppngp43gppfgprJf4Kas4KeB4KanX+CmrOCng+CmuV/gprbgp4HgppXgp43gprBf4Ka24Kao4Ka/Jy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgIExUUzogJ0EgaDptbTpzcyDgprjgpq7gp58nLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCmuOCmruCnnycsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCmuOCmruCnnycsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW+CmhuCmnF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW+CmhuCml+CmvuCmruCngOCmleCmvuCmsl0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vgppfgpqTgppXgpr7gprJdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdb4KaX4KakXSBkZGRkLCBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXMg4Kaq4Kaw4KeHJyxcbiAgICAgICAgcGFzdDogJyVzIOCmhuCml+CnhycsXG4gICAgICAgIHM6ICfgppXgp5/gp4fgppUg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgc3M6ICclZCDgprjgp4fgppXgp4fgpqjgp43gpqEnLFxuICAgICAgICBtOiAn4KaP4KaVIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgIG1tOiAnJWQg4Kau4Ka/4Kao4Ka/4KafJyxcbiAgICAgICAgaDogJ+Cmj+CmlSDgppjgpqjgp43gpp/gpr4nLFxuICAgICAgICBoaDogJyVkIOCmmOCmqOCnjeCmn+CmvicsXG4gICAgICAgIGQ6ICfgpo/gppUg4Kam4Ka/4KaoJyxcbiAgICAgICAgZGQ6ICclZCDgpqbgpr/gpqgnLFxuICAgICAgICBNOiAn4KaP4KaVIOCmruCmvuCmuCcsXG4gICAgICAgIE1NOiAnJWQg4Kau4Ka+4Ka4JyxcbiAgICAgICAgeTogJ+Cmj+CmlSDgpqzgppvgprAnLFxuICAgICAgICB5eTogJyVkIOCmrOCmm+CmsCcsXG4gICAgfSxcbiAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgp6fgp6jgp6ngp6rgp6vgp6zgp63gp67gp6/gp6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgbWVyaWRpZW1QYXJzZTogL+CmsOCmvuCmpHzgpq3gp4vgprB84Ka44KaV4Ka+4KayfOCmpuCngeCmquCngeCmsHzgpqzgpr/gppXgpr7gprJ84Ka44Kao4KeN4Kan4KeN4Kav4Ka+fOCmsOCmvuCmpC8sXG4gICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgprDgpr7gpqQnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kat4KeL4KawJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgprjgppXgpr7gprInKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmpuCngeCmquCngeCmsCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyID49IDMgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kas4Ka/4KaV4Ka+4KayJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CmuOCmqOCnjeCmp+CnjeCmr+CmvicpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ+CmsOCmvuCmpCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDYpIHtcbiAgICAgICAgICAgIHJldHVybiAn4Kat4KeL4KawJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAn4Ka44KaV4Ka+4KayJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTUpIHtcbiAgICAgICAgICAgIHJldHVybiAn4Kam4KeB4Kaq4KeB4KawJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTgpIHtcbiAgICAgICAgICAgIHJldHVybiAn4Kas4Ka/4KaV4Ka+4KayJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgIHJldHVybiAn4Ka44Kao4KeN4Kan4KeN4Kav4Ka+JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn4Kaw4Ka+4KakJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQmVuZ2FsaSBbYm5dXG4vLyEgYXV0aG9yIDogS2F1c2hpayBHYW5kaGkgOiBodHRwczovL2dpdGh1Yi5jb20va2F1c2hpa2dhbmRoaVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgIDE6ICfgp6cnLFxuICAgICAgICAyOiAn4KeoJyxcbiAgICAgICAgMzogJ+CnqScsXG4gICAgICAgIDQ6ICfgp6onLFxuICAgICAgICA1OiAn4KerJyxcbiAgICAgICAgNjogJ+CnrCcsXG4gICAgICAgIDc6ICfgp60nLFxuICAgICAgICA4OiAn4KeuJyxcbiAgICAgICAgOTogJ+CnrycsXG4gICAgICAgIDA6ICfgp6YnLFxuICAgIH0sXG4gICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAn4KenJzogJzEnLFxuICAgICAgICAn4KeoJzogJzInLFxuICAgICAgICAn4KepJzogJzMnLFxuICAgICAgICAn4KeqJzogJzQnLFxuICAgICAgICAn4KerJzogJzUnLFxuICAgICAgICAn4KesJzogJzYnLFxuICAgICAgICAn4KetJzogJzcnLFxuICAgICAgICAn4KeuJzogJzgnLFxuICAgICAgICAn4KevJzogJzknLFxuICAgICAgICAn4KemJzogJzAnLFxuICAgIH07XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JuJywge1xuICAgIG1vbnRoczogJ+CmnOCmvuCmqOCngeCnn+CmvuCmsOCmv1/gpqvgp4fgpqzgp43gprDgp4Hgp5/gpr7gprDgpr9f4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4Kaf4KeH4Kau4KeN4Kas4KawX+CmheCmleCnjeCmn+Cni+CmrOCmsF/gpqjgpq3gp4fgpq7gp43gpqzgprBf4Kah4Ka/4Ka44KeH4Kau4KeN4Kas4KawJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ+CmnOCmvuCmqOCngV/gpqvgp4fgpqzgp43gprDgp4Ff4Kau4Ka+4Kaw4KeN4KaaX+Cmj+CmquCnjeCmsOCmv+Cmsl/gpq7gp4df4Kac4KeB4KaoX+CmnOCngeCmsuCmvuCmh1/gpobgppfgprjgp43gpp9f4Ka44KeH4Kaq4KeN4KafX+CmheCmleCnjeCmn+Cni1/gpqjgpq3gp4df4Kah4Ka/4Ka44KeHJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5czogJ+CmsOCmrOCmv+CmrOCmvuCmsF/gprjgp4vgpq7gpqzgpr7gprBf4Kau4KaZ4KeN4KaX4Kay4Kas4Ka+4KawX+CmrOCngeCmp+CmrOCmvuCmsF/gpqzgp4Pgprngprjgp43gpqrgpqTgpr/gpqzgpr7gprBf4Ka24KeB4KaV4KeN4Kaw4Kas4Ka+4KawX+CmtuCmqOCmv+CmrOCmvuCmsCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ+CmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprngprjgp43gpqrgpqTgpr9f4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ+CmsOCmrOCmv1/gprjgp4vgpq5f4Kau4KaZ4KeN4KaX4KayX+CmrOCngeCmp1/gpqzgp4Pgprlf4Ka24KeB4KaV4KeN4KawX+CmtuCmqOCmvycuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0EgaDptbSDgprjgpq7gp58nLFxuICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4Ka44Kau4KefJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgprjgpq7gp58nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vgpobgppxdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vgpobgppfgpr7gpq7gp4DgppXgpr7gprJdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4KaX4Kak4KaV4Ka+4KayXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW+Cml+CmpF0gZGRkZCwgTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVzIOCmquCmsOCnhycsXG4gICAgICAgIHBhc3Q6ICclcyDgpobgppfgp4cnLFxuICAgICAgICBzOiAn4KaV4Kef4KeH4KaVIOCmuOCnh+CmleCnh+CmqOCnjeCmoScsXG4gICAgICAgIHNzOiAnJWQg4Ka44KeH4KaV4KeH4Kao4KeN4KahJyxcbiAgICAgICAgbTogJ+Cmj+CmlSDgpq7gpr/gpqjgpr/gpp8nLFxuICAgICAgICBtbTogJyVkIOCmruCmv+CmqOCmv+CmnycsXG4gICAgICAgIGg6ICfgpo/gppUg4KaY4Kao4KeN4Kaf4Ka+JyxcbiAgICAgICAgaGg6ICclZCDgppjgpqjgp43gpp/gpr4nLFxuICAgICAgICBkOiAn4KaP4KaVIOCmpuCmv+CmqCcsXG4gICAgICAgIGRkOiAnJWQg4Kam4Ka/4KaoJyxcbiAgICAgICAgTTogJ+Cmj+CmlSDgpq7gpr7gprgnLFxuICAgICAgICBNTTogJyVkIOCmruCmvuCmuCcsXG4gICAgICAgIHk6ICfgpo/gppUg4Kas4Kab4KawJyxcbiAgICAgICAgeXk6ICclZCDgpqzgppvgprAnLFxuICAgIH0sXG4gICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Ken4Keo4Kep4Keq4Ker4Kes4Ket4Keu4Kev4KemXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv4Kaw4Ka+4KakfOCmuOCmleCmvuCmsnzgpqbgp4Hgpqrgp4HgprB84Kas4Ka/4KaV4Ka+4KayfOCmsOCmvuCmpC8sXG4gICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgprDgpr7gpqQnICYmIGhvdXIgPj0gNCkgfHxcbiAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+CmpuCngeCmquCngeCmsCcgJiYgaG91ciA8IDUpIHx8XG4gICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CmrOCmv+CmleCmvuCmsidcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgcmV0dXJuICfgprDgpr7gpqQnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgcmV0dXJuICfgprjgppXgpr7gprInO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgcmV0dXJuICfgpqbgp4Hgpqrgp4HgprAnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgcmV0dXJuICfgpqzgpr/gppXgpr7gprInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfgprDgpr7gpqQnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUaWJldGFuIFtib11cbi8vISBhdXRob3IgOiBUaHVwdGVuIE4uIENoYWtyaXNoYXIgOiBodHRwczovL2dpdGh1Yi5jb20vdmFqcmFkb2dcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAxOiAn4LyhJyxcbiAgICAgICAgMjogJ+C8oicsXG4gICAgICAgIDM6ICfgvKMnLFxuICAgICAgICA0OiAn4LykJyxcbiAgICAgICAgNTogJ+C8pScsXG4gICAgICAgIDY6ICfgvKYnLFxuICAgICAgICA3OiAn4LynJyxcbiAgICAgICAgODogJ+C8qCcsXG4gICAgICAgIDk6ICfgvKknLFxuICAgICAgICAwOiAn4LygJyxcbiAgICB9LFxuICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ+C8oSc6ICcxJyxcbiAgICAgICAgJ+C8oic6ICcyJyxcbiAgICAgICAgJ+C8oyc6ICczJyxcbiAgICAgICAgJ+C8pCc6ICc0JyxcbiAgICAgICAgJ+C8pSc6ICc1JyxcbiAgICAgICAgJ+C8pic6ICc2JyxcbiAgICAgICAgJ+C8pyc6ICc3JyxcbiAgICAgICAgJ+C8qCc6ICc4JyxcbiAgICAgICAgJ+C8qSc6ICc5JyxcbiAgICAgICAgJ+C8oCc6ICcwJyxcbiAgICB9O1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdibycsIHtcbiAgICBtb250aHM6ICfgvZ/gvrPgvIvgvZbgvIvgvZHgvYTgvIvgvZTgvbxf4L2f4L6z4LyL4L2W4LyL4L2C4L2J4L2y4L2m4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9guC9puC9tOC9mOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZ7gvbLgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2j4L6U4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC+suC9tOC9guC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvZHgvbTgvZPgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2i4L6S4L6x4L2R4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9keC9guC9tOC8i+C9lF/gvZ/gvrPgvIvgvZbgvIvgvZbgvYXgvbTgvIvgvZRf4L2f4L6z4LyL4L2W4LyL4L2W4L2F4L204LyL4L2C4L2F4L2y4L2C4LyL4L2UX+C9n+C+s+C8i+C9luC8i+C9luC9heC9tOC8i+C9guC9ieC9suC9puC8i+C9lCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICfgvZ/gvrPgvIsxX+C9n+C+s+C8izJf4L2f4L6z4LyLM1/gvZ/gvrPgvIs0X+C9n+C+s+C8izVf4L2f4L6z4LyLNl/gvZ/gvrPgvIs3X+C9n+C+s+C8izhf4L2f4L6z4LyLOV/gvZ/gvrPgvIsxMF/gvZ/gvrPgvIsxMV/gvZ/gvrPgvIsxMicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnRSZWdleDogL14o4L2f4L6z4LyLXFxkezEsMn0pLyxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAn4L2C4L2f4L2g4LyL4L2J4L2y4LyL4L2Y4LyLX+C9guC9n+C9oOC8i+C9n+C+s+C8i+C9luC8i1/gvYLgvZ/gvaDgvIvgvZjgvbLgvYLgvIvgvZHgvZjgvaLgvItf4L2C4L2f4L2g4LyL4L2j4L634L2C4LyL4L2U4LyLX+C9guC9n+C9oOC8i+C9leC9tOC9ouC8i+C9luC9tF/gvYLgvZ/gvaDgvIvgvZTgvIvgvabgvYTgvabgvItf4L2C4L2f4L2g4LyL4L2m4L6k4L264L2T4LyL4L2U4LyLJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn4L2J4L2y4LyL4L2Y4LyLX+C9n+C+s+C8i+C9luC8i1/gvZjgvbLgvYLgvIvgvZHgvZjgvaLgvItf4L2j4L634L2C4LyL4L2U4LyLX+C9leC9tOC9ouC8i+C9luC9tF/gvZTgvIvgvabgvYTgvabgvItf4L2m4L6k4L264L2T4LyL4L2U4LyLJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c01pbjogJ+C9ieC9sl/gvZ/gvrNf4L2Y4L2y4L2CX+C9o+C+t+C9gl/gvZXgvbTgvaJf4L2m4L2E4L2mX+C9puC+pOC9uuC9kycuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0EgaDptbScsXG4gICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW+C9keC9suC8i+C9ouC9suC9hF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW+C9puC9hOC8i+C9ieC9suC9k10gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ1vgvZbgvZHgvbTgvZPgvIvgvZXgvrLgvYLgvIvgvaLgvpfgvbrgvabgvIvgvZhdLCBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4L2B4LyL4L2m4L2EXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW+C9luC9keC9tOC9k+C8i+C9leC+suC9guC8i+C9mOC9kOC9oOC8i+C9mF0gZGRkZCwgTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVzIOC9o+C8iycsXG4gICAgICAgIHBhc3Q6ICclcyDgvabgvpTgvZPgvIvgvaMnLFxuICAgICAgICBzOiAn4L2j4L2Y4LyL4L2m4L2EJyxcbiAgICAgICAgc3M6ICclZCDgvabgvpDgvaLgvIvgvYbgvI0nLFxuICAgICAgICBtOiAn4L2m4L6Q4L2i4LyL4L2Y4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgbW06ICclZCDgvabgvpDgvaLgvIvgvZgnLFxuICAgICAgICBoOiAn4L2G4L204LyL4L2a4L284L2R4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgaGg6ICclZCDgvYbgvbTgvIvgvZrgvbzgvZEnLFxuICAgICAgICBkOiAn4L2J4L2y4L2T4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgZGQ6ICclZCDgvYngvbLgvZPgvIsnLFxuICAgICAgICBNOiAn4L2f4L6z4LyL4L2W4LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgTU06ICclZCDgvZ/gvrPgvIvgvZYnLFxuICAgICAgICB5OiAn4L2j4L284LyL4L2C4L2F4L2y4L2CJyxcbiAgICAgICAgeXk6ICclZCDgvaPgvbwnLFxuICAgIH0sXG4gICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Lyh4Lyi4Lyj4Lyk4Lyl4Lym4Lyn4Lyo4Lyp4LygXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv4L2Y4L2a4L2T4LyL4L2Y4L28fOC9nuC9vOC9guC9puC8i+C9gOC9pnzgvYngvbLgvZPgvIvgvYLgvbTgvYR84L2R4L2C4L284L2E4LyL4L2R4L2CfOC9mOC9muC9k+C8i+C9mOC9vC8sXG4gICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAobWVyaWRpZW0gPT09ICfgvZjgvZrgvZPgvIvgvZjgvbwnICYmIGhvdXIgPj0gNCkgfHxcbiAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+C9ieC9suC9k+C8i+C9guC9tOC9hCcgJiYgaG91ciA8IDUpIHx8XG4gICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+C9keC9guC9vOC9hOC8i+C9keC9gidcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgcmV0dXJuICfgvZjgvZrgvZPgvIvgvZjgvbwnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgcmV0dXJuICfgvZ7gvbzgvYLgvabgvIvgvYDgvaYnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgcmV0dXJuICfgvYngvbLgvZPgvIvgvYLgvbTgvYQnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgcmV0dXJuICfgvZHgvYLgvbzgvYTgvIvgvZHgvYInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfgvZjgvZrgvZPgvIvgvZjgvbwnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCcmV0b24gW2JyXVxuLy8hIGF1dGhvciA6IEplYW4tQmFwdGlzdGUgTGUgRHVpZ291IDogaHR0cHM6Ly9naXRodWIuY29tL2pibGVkdWlnb3VcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5mdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24obnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICBtbTogJ211bnV0ZW5uJyxcbiAgICAgICAgTU06ICdtaXonLFxuICAgICAgICBkZDogJ2RldmV6aCcsXG4gICAgfTtcbiAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgbXV0YXRpb24oZm9ybWF0W2tleV0sIG51bWJlcik7XG59XG5mdW5jdGlvbiBzcGVjaWFsTXV0YXRpb25Gb3JZZWFycyhudW1iZXIpIHtcbiAgICBzd2l0Y2ggKGxhc3ROdW1iZXIobnVtYmVyKSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICBjYXNlIDU6XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIGJsb2F6JztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnIHZsb2F6JztcbiAgICB9XG59XG5mdW5jdGlvbiBsYXN0TnVtYmVyKG51bWJlcikge1xuICAgIGlmIChudW1iZXIgPiA5KSB7XG4gICAgICAgIHJldHVybiBsYXN0TnVtYmVyKG51bWJlciAlIDEwKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bWJlcjtcbn1cbmZ1bmN0aW9uIG11dGF0aW9uKHRleHQsIG51bWJlcikge1xuICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIHNvZnRNdXRhdGlvbih0ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHQ7XG59XG5mdW5jdGlvbiBzb2Z0TXV0YXRpb24odGV4dCkge1xuICAgIHZhciBtdXRhdGlvblRhYmxlID0ge1xuICAgICAgICBtOiAndicsXG4gICAgICAgIGI6ICd2JyxcbiAgICAgICAgZDogJ3onLFxuICAgIH07XG4gICAgaWYgKG11dGF0aW9uVGFibGVbdGV4dC5jaGFyQXQoMCldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHJldHVybiBtdXRhdGlvblRhYmxlW3RleHQuY2hhckF0KDApXSArIHRleHQuc3Vic3RyaW5nKDEpO1xufVxuXG52YXIgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgIC9eZ2VuL2ksXG4gICAgICAgIC9eY1vKvFxcJ11od2UvaSxcbiAgICAgICAgL15tZXUvaSxcbiAgICAgICAgL15lYnIvaSxcbiAgICAgICAgL15tYWUvaSxcbiAgICAgICAgL14obWV6fGV2ZSkvaSxcbiAgICAgICAgL15nb3UvaSxcbiAgICAgICAgL15lb3MvaSxcbiAgICAgICAgL15nd2UvaSxcbiAgICAgICAgL15oZXIvaSxcbiAgICAgICAgL15kdS9pLFxuICAgICAgICAvXmtlci9pLFxuICAgIF0sXG4gICAgbW9udGhzUmVnZXggPSAvXihnZW52ZXJ8Y1vKvFxcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dXxnZW58Y1vKvFxcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksXG4gICAgbW9udGhzU3RyaWN0UmVnZXggPSAvXihnZW52ZXJ8Y1vKvFxcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dSkvaSxcbiAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gL14oZ2VufGNbyrxcXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLFxuICAgIGZ1bGxXZWVrZGF5c1BhcnNlID0gW1xuICAgICAgICAvXnN1bC9pLFxuICAgICAgICAvXmx1bi9pLFxuICAgICAgICAvXm1ldXJ6aC9pLFxuICAgICAgICAvXm1lcmNbyrxcXCddaGVyL2ksXG4gICAgICAgIC9eeWFvdS9pLFxuICAgICAgICAvXmd3ZW5lci9pLFxuICAgICAgICAvXnNhZG9ybi9pLFxuICAgIF0sXG4gICAgc2hvcnRXZWVrZGF5c1BhcnNlID0gW1xuICAgICAgICAvXlN1bC9pLFxuICAgICAgICAvXkx1bi9pLFxuICAgICAgICAvXk1ldS9pLFxuICAgICAgICAvXk1lci9pLFxuICAgICAgICAvXllhby9pLFxuICAgICAgICAvXkd3ZS9pLFxuICAgICAgICAvXlNhZC9pLFxuICAgIF0sXG4gICAgbWluV2Vla2RheXNQYXJzZSA9IFtcbiAgICAgICAgL15TdS9pLFxuICAgICAgICAvXkx1L2ksXG4gICAgICAgIC9eTWUoW15yXXwkKS9pLFxuICAgICAgICAvXk1lci9pLFxuICAgICAgICAvXllhL2ksXG4gICAgICAgIC9eR3cvaSxcbiAgICAgICAgL15TYS9pLFxuICAgIF07XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2JyJywge1xuICAgIG1vbnRoczogJ0dlbnZlcl9Dyrxod2V2cmVyX01ldXJ6aF9FYnJlbF9NYWVfTWV6aGV2ZW5fR291ZXJlX0Vvc3RfR3dlbmdvbG9fSGVyZV9EdV9LZXJ6dScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdHZW5fQ8q8aHdlX01ldV9FYnJfTWFlX0V2ZV9Hb3VfRW9zX0d3ZV9IZXJfRHVfS2VyJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnU3VsX0x1bl9NZXVyemhfTWVyY8q8aGVyX1lhb3VfR3dlbmVyX1NhZG9ybicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnU3VsX0x1bl9NZXVfTWVyX1lhb19Hd2VfU2FkJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnU3VfTHVfTWVfTWVyX1lhX0d3X1NhJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2U6IG1pbldlZWtkYXlzUGFyc2UsXG4gICAgZnVsbFdlZWtkYXlzUGFyc2U6IGZ1bGxXZWVrZGF5c1BhcnNlLFxuICAgIHNob3J0V2Vla2RheXNQYXJzZTogc2hvcnRXZWVrZGF5c1BhcnNlLFxuICAgIG1pbldlZWtkYXlzUGFyc2U6IG1pbldlZWtkYXlzUGFyc2UsXG5cbiAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgbW9udGhzU3RyaWN0UmVnZXg6IG1vbnRoc1N0cmljdFJlZ2V4LFxuICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IG1vbnRoc1Nob3J0U3RyaWN0UmVnZXgsXG4gICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG5cbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBbYSB2aXpdIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBbYSB2aXpdIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW0hpeml2IGRhXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbV2FyY8q8aG9hemggZGFdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtkYV0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW0RlY8q8aCBkYV0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW3Bhc2V0IGRhXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnYS1iZW5uICVzJyxcbiAgICAgICAgcGFzdDogJyVzIMq8em8nLFxuICAgICAgICBzOiAndW4gbmViZXVkIHNlZ29uZGVubm/DuScsXG4gICAgICAgIHNzOiAnJWQgZWlsZW5uJyxcbiAgICAgICAgbTogJ3VyIHZ1bnV0ZW5uJyxcbiAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhNdXRhdGlvbixcbiAgICAgICAgaDogJ3VuIGV1cicsXG4gICAgICAgIGhoOiAnJWQgZXVyJyxcbiAgICAgICAgZDogJ3VuIGRldmV6aCcsXG4gICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoTXV0YXRpb24sXG4gICAgICAgIE06ICd1ciBtaXonLFxuICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aE11dGF0aW9uLFxuICAgICAgICB5OiAndXIgYmxvYXonLFxuICAgICAgICB5eTogc3BlY2lhbE11dGF0aW9uRm9yWWVhcnMsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oYcOxfHZldCkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IG51bWJlciA9PT0gMSA/ICdhw7EnIDogJ3ZldCc7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL2EubS58Zy5tLi8sIC8vIGdvdWRlIG1lcmVubiB8IGEtcmFvayBtZXJlbm5cbiAgICBpc1BNOiBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHRva2VuID09PSAnZy5tLic7XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICByZXR1cm4gaG91ciA8IDEyID8gJ2EubS4nIDogJ2cubS4nO1xuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCb3NuaWFuIFtic11cbi8vISBhdXRob3IgOiBOZWRpbSBDaG9saWNoIDogaHR0cHM6Ly9naXRodWIuY29tL2Zyb250eWFyZFxuLy8hIGJhc2VkIG9uIChocikgdHJhbnNsYXRpb24gYnkgQm9qYW4gTWFya292acSHXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRhJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZGknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdqZWRuYSBtaW51dGEnIDogJ2plZG5lIG1pbnV0ZSc7XG4gICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0YSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21pbnV0YSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2plZGFuIHNhdCcgOiAnamVkbm9nIHNhdGEnO1xuICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzYXQnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0YSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0aSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW4nO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2RhbmEnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWplc2VjJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2EnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlY2knO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5hJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluZSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZ29kaW5hJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdicycsIHtcbiAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2phbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAnbmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfxI1ldHZydGFrX3BldGFrX3N1Ym90YScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl91dG8uX3NyaS5fxI1ldC5fcGV0Ll9zdWIuJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fdXRfc3JfxI1lX3BlX3N1Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbZGFuYXMgdV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW3N1dHJhIHVdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gW3NyaWplZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3Vib3R1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsYXN0RGF5OiAnW2p1xI1lciB1XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWx1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsaV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgcGFzdDogJ3ByaWplICVzJyxcbiAgICAgICAgczogJ3BhciBzZWt1bmRpJyxcbiAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICBNOiAnbWplc2VjJyxcbiAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgeTogJ2dvZGludScsXG4gICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENhdGFsYW4gW2NhXVxuLy8hIGF1dGhvciA6IEp1YW4gRy4gSHVydGFkbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qdWFuZ2h1cnRhZG9cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdjYScsIHtcbiAgICBtb250aHM6IHtcbiAgICAgICAgc3RhbmRhbG9uZTogJ2dlbmVyX2ZlYnJlcl9tYXLDp19hYnJpbF9tYWlnX2p1bnlfanVsaW9sX2Fnb3N0X3NldGVtYnJlX29jdHVicmVfbm92ZW1icmVfZGVzZW1icmUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGZvcm1hdDogXCJkZSBnZW5lcl9kZSBmZWJyZXJfZGUgbWFyw6dfZCdhYnJpbF9kZSBtYWlnX2RlIGp1bnlfZGUganVsaW9sX2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3R1YnJlX2RlIG5vdmVtYnJlX2RlIGRlc2VtYnJlXCIuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxzKStNTU1NLyxcbiAgICB9LFxuICAgIG1vbnRoc1Nob3J0OiAnZ2VuLl9mZWJyLl9tYXLDp19hYnIuX21haWdfanVueV9qdWwuX2FnLl9zZXQuX29jdC5fbm92Ll9kZXMuJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAnZGl1bWVuZ2VfZGlsbHVuc19kaW1hcnRzX2RpbWVjcmVzX2Rpam91c19kaXZlbmRyZXNfZGlzc2FidGUnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdkZy5fZGwuX2R0Ll9kYy5fZGouX2R2Ll9kcy4nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdkZ19kbF9kdF9kY19kal9kdl9kcycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0nLFxuICAgICAgICBsbGw6ICdEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0nLFxuICAgICAgICBsbGxsOiAnZGRkIEQgTU1NIFlZWVksIEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdbYXZ1aSBhICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ2xlcycgOiAnbGEnKSArICddIExUJztcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdbZGVtw6AgYSAnICsgKHRoaXMuaG91cnMoKSAhPT0gMSA/ICdsZXMnIDogJ2xhJykgKyAnXSBMVCc7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2RkZGQgW2EgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICB9LFxuICAgICAgICBsYXN0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1thaGlyIGEgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnbGVzJyA6ICdsYScpICsgJ10gTFQnO1xuICAgICAgICB9LFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNzYXQgYSAnICtcbiAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpICE9PSAxID8gJ2xlcycgOiAnbGEnKSArXG4gICAgICAgICAgICAgICAgJ10gTFQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogXCJkJ2FxdcOtICVzXCIsXG4gICAgICAgIHBhc3Q6ICdmYSAlcycsXG4gICAgICAgIHM6ICd1bnMgc2Vnb25zJyxcbiAgICAgICAgc3M6ICclZCBzZWdvbnMnLFxuICAgICAgICBtOiAndW4gbWludXQnLFxuICAgICAgICBtbTogJyVkIG1pbnV0cycsXG4gICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgIGhoOiAnJWQgaG9yZXMnLFxuICAgICAgICBkOiAndW4gZGlhJyxcbiAgICAgICAgZGQ6ICclZCBkaWVzJyxcbiAgICAgICAgTTogJ3VuIG1lcycsXG4gICAgICAgIE1NOiAnJWQgbWVzb3MnLFxuICAgICAgICB5OiAndW4gYW55JyxcbiAgICAgICAgeXk6ICclZCBhbnlzJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShyfG58dHzDqHxhKS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPVxuICAgICAgICAgICAgbnVtYmVyID09PSAxXG4gICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gMlxuICAgICAgICAgICAgICAgID8gJ24nXG4gICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDNcbiAgICAgICAgICAgICAgICA/ICdyJ1xuICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSA0XG4gICAgICAgICAgICAgICAgPyAndCdcbiAgICAgICAgICAgICAgICA6ICfDqCc7XG4gICAgICAgIGlmIChwZXJpb2QgPT09ICd3JyB8fCBwZXJpb2QgPT09ICdXJykge1xuICAgICAgICAgICAgb3V0cHV0ID0gJ2EnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDemVjaCBbY3NdXG4vLyEgYXV0aG9yIDogcGV0cmJlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vcGV0cmJlbGFcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgbW9udGhzID0gJ2xlZGVuX8O6bm9yX2LFmWV6ZW5fZHViZW5fa3bEm3Rlbl/EjWVydmVuX8SNZXJ2ZW5lY19zcnBlbl96w6HFmcOtX8WZw61qZW5fbGlzdG9wYWRfcHJvc2luZWMnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0ID0gJ2xlZF/Dum5vX2LFmWVfZHViX2t2xJtfxI12bl/EjXZjX3NycF96w6HFmV/FmcOtal9saXNfcHJvJy5zcGxpdCgnXycpLFxuICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAvXmxlZC9pLFxuICAgICAgICAvXsO6bm8vaSxcbiAgICAgICAgL15ixZllL2ksXG4gICAgICAgIC9eZHViL2ksXG4gICAgICAgIC9ea3bEmy9pLFxuICAgICAgICAvXijEjXZufMSNZXJ2ZW4kfMSNZXJ2bmEpL2ksXG4gICAgICAgIC9eKMSNdmN8xI1lcnZlbmVjfMSNZXJ2ZW5jZSkvaSxcbiAgICAgICAgL15zcnAvaSxcbiAgICAgICAgL156w6HFmS9pLFxuICAgICAgICAvXsWZw61qL2ksXG4gICAgICAgIC9ebGlzL2ksXG4gICAgICAgIC9ecHJvL2ksXG4gICAgXSxcbiAgICAvLyBOT1RFOiAnxI1lcnZlbicgaXMgc3Vic3RyaW5nIG9mICfEjWVydmVuZWMnOyB0aGVyZWZvcmUgJ8SNZXJ2ZW5lYycgbXVzdCBwcmVjZWRlICfEjWVydmVuJyBpbiB0aGUgcmVnZXggdG8gYmUgZnVsbHkgbWF0Y2hlZC5cbiAgICAvLyBPdGhlcndpc2UgcGFyc2VyIG1hdGNoZXMgJzEuIMSNZXJ2ZW5lYycgYXMgJzEuIMSNZXJ2ZW4nICsgJ2VjJy5cbiAgICBtb250aHNSZWdleCA9IC9eKGxlZGVufMO6bm9yfGLFmWV6ZW58ZHViZW58a3bEm3RlbnzEjWVydmVuZWN8xI1lcnZlbmNlfMSNZXJ2ZW58xI1lcnZuYXxzcnBlbnx6w6HFmcOtfMWZw61qZW58bGlzdG9wYWR8cHJvc2luZWN8bGVkfMO6bm98YsWZZXxkdWJ8a3bEm3zEjXZufMSNdmN8c3JwfHrDocWZfMWZw61qfGxpc3xwcm8pL2k7XG5cbmZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgcmV0dXJuIG4gPiAxICYmIG4gPCA1ICYmIH5+KG4gLyAxMCkgIT09IDE7XG59XG5mdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdzJzogLy8gYSBmZXcgc2Vjb25kcyAvIGluIGEgZmV3IHNlY29uZHMgLyBhIGZldyBzZWNvbmRzIGFnb1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAncMOhciBzZWt1bmQnIDogJ3DDoXIgc2VrdW5kYW1pJztcbiAgICAgICAgY2FzZSAnc3MnOiAvLyA5IHNlY29uZHMgLyBpbiA5IHNlY29uZHMgLyA5IHNlY29uZHMgYWdvXG4gICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnc2VrdW5keScgOiAnc2VrdW5kJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnc2VrdW5kYW1pJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnbSc6IC8vIGEgbWludXRlIC8gaW4gYSBtaW51dGUgLyBhIG1pbnV0ZSBhZ29cbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ21pbnV0YScgOiBpc0Z1dHVyZSA/ICdtaW51dHUnIDogJ21pbnV0b3UnO1xuICAgICAgICBjYXNlICdtbSc6IC8vIDkgbWludXRlcyAvIGluIDkgbWludXRlcyAvIDkgbWludXRlcyBhZ29cbiAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaW51dHknIDogJ21pbnV0Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWludXRhbWknO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlICdoJzogLy8gYW4gaG91ciAvIGluIGFuIGhvdXIgLyBhbiBob3VyIGFnb1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnaG9kaW5hJyA6IGlzRnV0dXJlID8gJ2hvZGludScgOiAnaG9kaW5vdSc7XG4gICAgICAgIGNhc2UgJ2hoJzogLy8gOSBob3VycyAvIGluIDkgaG91cnMgLyA5IGhvdXJzIGFnb1xuICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2hvZGlueScgOiAnaG9kaW4nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdob2RpbmFtaSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIGNhc2UgJ2QnOiAvLyBhIGRheSAvIGluIGEgZGF5IC8gYSBkYXkgYWdvXG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdkZW4nIDogJ2RuZW0nO1xuICAgICAgICBjYXNlICdkZCc6IC8vIDkgZGF5cyAvIGluIDkgZGF5cyAvIDkgZGF5cyBhZ29cbiAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdkbnknIDogJ2Ruw60nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdkbnknO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlICdNJzogLy8gYSBtb250aCAvIGluIGEgbW9udGggLyBhIG1vbnRoIGFnb1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbcSbc8OtYycgOiAnbcSbc8OtY2VtJztcbiAgICAgICAgY2FzZSAnTU0nOiAvLyA5IG1vbnRocyAvIGluIDkgbW9udGhzIC8gOSBtb250aHMgYWdvXG4gICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbcSbc8OtY2UnIDogJ23Em3PDrWPFrycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23Em3PDrWNpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAneSc6IC8vIGEgeWVhciAvIGluIGEgeWVhciAvIGEgeWVhciBhZ29cbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3JvaycgOiAncm9rZW0nO1xuICAgICAgICBjYXNlICd5eSc6IC8vIDkgeWVhcnMgLyBpbiA5IHllYXJzIC8gOSB5ZWFycyBhZ29cbiAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdyb2t5JyA6ICdsZXQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdsZXR5JztcbiAgICAgICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2NzJywge1xuICAgIG1vbnRoczogbW9udGhzLFxuICAgIG1vbnRoc1Nob3J0OiBtb250aHNTaG9ydCxcbiAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgLy8gTk9URTogJ8SNZXJ2ZW4nIGlzIHN1YnN0cmluZyBvZiAnxI1lcnZlbmVjJzsgdGhlcmVmb3JlICfEjWVydmVuZWMnIG11c3QgcHJlY2VkZSAnxI1lcnZlbicgaW4gdGhlIHJlZ2V4IHRvIGJlIGZ1bGx5IG1hdGNoZWQuXG4gICAgLy8gT3RoZXJ3aXNlIHBhcnNlciBtYXRjaGVzICcxLiDEjWVydmVuZWMnIGFzICcxLiDEjWVydmVuJyArICdlYycuXG4gICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKGxlZGVufGxlZG5hfMO6bm9yYXzDum5vcnxixZllemVufGLFmWV6bmF8ZHViZW58ZHVibmF8a3bEm3RlbnxrdsSbdG5hfMSNZXJ2ZW5lY3zEjWVydmVuY2V8xI1lcnZlbnzEjWVydm5hfHNycGVufHNycG5hfHrDocWZw618xZnDrWplbnzFmcOtam5hfGxpc3RvcGFkdXxsaXN0b3BhZHxwcm9zaW5lY3xwcm9zaW5jZSkvaSxcbiAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvXihsZWR8w7pub3xixZllfGR1YnxrdsSbfMSNdm58xI12Y3xzcnB8esOhxZl8xZnDrWp8bGlzfHBybykvaSxcbiAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICB3ZWVrZGF5czogJ25lZMSbbGVfcG9uZMSbbMOtX8O6dGVyw71fc3TFmWVkYV/EjXR2cnRla19ww6F0ZWtfc29ib3RhJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICduZV9wb1/DunRfc3RfxI10X3DDoV9zbycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ25lX3BvX8O6dF9zdF/EjXRfcMOhX3NvJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSDptbScsXG4gICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCBELiBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIGw6ICdELiBNLiBZWVlZJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbZG5lcyB2XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbesOtdHJhIHZdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdiBuZWTEm2xpIHZdIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2XSBkZGRkIFt2XSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2ZSBzdMWZZWR1IHZdIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZlIMSNdHZydGVrIHZdIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgcMOhdGVrIHZdIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc29ib3R1IHZdIExUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbGFzdERheTogJ1t2xI1lcmEgdl0gTFQnLFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bG91IG5lZMSbbGkgdl0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw6ldIGRkZGQgW3ZdIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsb3Ugc3TFmWVkdSB2XSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWzDvV0gZGRkZCBbdl0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbWludWxvdSBzb2JvdHUgdl0gTFQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgcGFzdDogJ3DFmWVkICVzJyxcbiAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgb3JkaW5hbDogJyVkLicsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2h1dmFzaCBbY3ZdXG4vLyEgYXV0aG9yIDogQW5hdG9seSBNaXJvbm92IDogaHR0cHM6Ly9naXRodWIuY29tL21pcm9udG9saVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2N2Jywge1xuICAgIG1vbnRoczogJ9C605HRgNC70LDRh1/QvdCw0YDTkdGBX9C/0YPRiF/QsNC60LBf0LzQsNC5X9Kr05fRgNGC0LzQtV/Rg9GC05Ff0qvRg9GA0LvQsF/QsNCy05HQvV/RjtC/0LBf0YfTs9C6X9GA0LDRiNGC0LDQsicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICfQutOR0YBf0L3QsNGAX9C/0YPRiF/QsNC60LBf0LzQsNC5X9Kr05fRgF/Rg9GC05Ff0qvRg9GAX9Cw0LLQvV/RjtC/0LBf0YfTs9C6X9GA0LDRiCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ9Cy0YvRgNGB0LDRgNC90LjQutGD0L1f0YLRg9C90YLQuNC60YPQvV/Ri9GC0LvQsNGA0LjQutGD0L1f0Y7QvdC60YPQvV/QutOX0qvQvdC10YDQvdC40LrRg9C9X9GN0YDQvdC10LrRg9C9X9GI05HQvNCw0YLQutGD0L0nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfQstGL0YBf0YLRg9C9X9GL0YLQu1/RjtC9X9C605fSq1/RjdGA0L1f0YjTkdC8Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn0LLRgF/RgtC9X9GL0YJf0Y7QvV/QutKrX9GN0YBf0YjQvCcuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgIExMOiAnWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10nLFxuICAgICAgICBMTEw6ICdZWVlZIFvSq9GD0LvRhdC4XSBNTU1NIFvRg9C505HRhdOX0L1dIERbLdC805fRiNOXXSwgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgWVlZWSBb0qvRg9C70YXQuF0gTU1NTSBb0YPQudOR0YXTl9C9XSBEWy3QvNOX0YjTl10sIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdb0J/QsNGP0L1dIExUIFvRgdC10YXQtdGC0YDQtV0nLFxuICAgICAgICBuZXh0RGF5OiAnW9Cr0YDQsNC9XSBMVCBb0YHQtdGF0LXRgtGA0LVdJyxcbiAgICAgICAgbGFzdERheTogJ1vTltC90LXRgF0gTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgIG5leHRXZWVrOiAnW9Kq0LjRgtC10YFdIGRkZGQgTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgIGxhc3RXZWVrOiAnW9CY0YDRgtC905ddIGRkZGQgTFQgW9GB0LXRhdC10YLRgNC1XScsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAob3V0cHV0KSB7XG4gICAgICAgICAgICB2YXIgYWZmaXggPSAv0YHQtdGF0LXRgiQvaS5leGVjKG91dHB1dClcbiAgICAgICAgICAgICAgICA/ICfRgNC10L0nXG4gICAgICAgICAgICAgICAgOiAv0qvRg9C7JC9pLmV4ZWMob3V0cHV0KVxuICAgICAgICAgICAgICAgID8gJ9GC0LDQvSdcbiAgICAgICAgICAgICAgICA6ICfRgNCw0L0nO1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dCArIGFmZml4O1xuICAgICAgICB9LFxuICAgICAgICBwYXN0OiAnJXMg0LrQsNGP0LvQu9CwJyxcbiAgICAgICAgczogJ9C/05fRgC3QuNC6INKr0LXQutC60YPQvdGCJyxcbiAgICAgICAgc3M6ICclZCDSq9C10LrQutGD0L3RgicsXG4gICAgICAgIG06ICfQv9OX0YAg0LzQuNC90YPRgicsXG4gICAgICAgIG1tOiAnJWQg0LzQuNC90YPRgicsXG4gICAgICAgIGg6ICfQv9OX0YAg0YHQtdGF0LXRgicsXG4gICAgICAgIGhoOiAnJWQg0YHQtdGF0LXRgicsXG4gICAgICAgIGQ6ICfQv9OX0YAg0LrRg9C9JyxcbiAgICAgICAgZGQ6ICclZCDQutGD0L0nLFxuICAgICAgICBNOiAn0L/Tl9GAINGD0LnTkdGFJyxcbiAgICAgICAgTU06ICclZCDRg9C505HRhScsXG4gICAgICAgIHk6ICfQv9OX0YAg0qvRg9C7JyxcbiAgICAgICAgeXk6ICclZCDSq9GD0LsnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LdC805fRiC8sXG4gICAgb3JkaW5hbDogJyVkLdC805fRiCcsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogV2Vsc2ggW2N5XVxuLy8hIGF1dGhvciA6IFJvYmVydCBBbGxlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yb2JnYWxsZW5cbi8vISBhdXRob3IgOiBodHRwczovL2dpdGh1Yi5jb20vcnlhbmdyZWF2ZXNcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdjeScsIHtcbiAgICBtb250aHM6ICdJb25hd3JfQ2h3ZWZyb3JfTWF3cnRoX0VicmlsbF9NYWlfTWVoZWZpbl9Hb3JmZmVubmFmX0F3c3RfTWVkaV9IeWRyZWZfVGFjaHdlZGRfUmhhZ2Z5cicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdJb25fQ2h3ZV9NYXdfRWJyX01haV9NZWhfR29yX0F3c19NZWRfSHlkX1RhY2hfUmhhZycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXM6ICdEeWRkIFN1bF9EeWRkIExsdW5fRHlkZCBNYXdydGhfRHlkZCBNZXJjaGVyX0R5ZGQgSWF1X0R5ZGQgR3dlbmVyX0R5ZGQgU2Fkd3JuJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnU3VsX0xsdW5fTWF3X01lcl9JYXVfR3dlX1NhZCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ1N1X0xsX01hX01lX0lhX0d3X1NhJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAvLyB0aW1lIGZvcm1hdHMgYXJlIHRoZSBzYW1lIGFzIGVuLWdiXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tIZWRkaXcgYW1dIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tZZm9yeSBhbV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FtXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbRGRvZSBhbV0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rpd2V0aGFmIGFtXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnbWV3biAlcycsXG4gICAgICAgIHBhc3Q6ICclcyB5biDDtGwnLFxuICAgICAgICBzOiAneWNoeWRpZyBlaWxpYWRhdScsXG4gICAgICAgIHNzOiAnJWQgZWlsaWFkJyxcbiAgICAgICAgbTogJ211bnVkJyxcbiAgICAgICAgbW06ICclZCBtdW51ZCcsXG4gICAgICAgIGg6ICdhd3InLFxuICAgICAgICBoaDogJyVkIGF3cicsXG4gICAgICAgIGQ6ICdkaXdybm9kJyxcbiAgICAgICAgZGQ6ICclZCBkaXdybm9kJyxcbiAgICAgICAgTTogJ21pcycsXG4gICAgICAgIE1NOiAnJWQgbWlzJyxcbiAgICAgICAgeTogJ2Jsd3lkZHluJyxcbiAgICAgICAgeXk6ICclZCBmbHluZWRkJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShmZWR8YWlufGFmfGlsfHlkZHxlZHxlZykvLFxuICAgIC8vIHRyYWRpdGlvbmFsIG9yZGluYWwgbnVtYmVycyBhYm92ZSAzMSBhcmUgbm90IGNvbW1vbmx5IHVzZWQgaW4gY29sbG9xdWlhbCBXZWxzaFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIGIgPSBudW1iZXIsXG4gICAgICAgICAgICBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgIGxvb2t1cCA9IFtcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAnYWYnLFxuICAgICAgICAgICAgICAgICdpbCcsXG4gICAgICAgICAgICAgICAgJ3lkZCcsXG4gICAgICAgICAgICAgICAgJ3lkZCcsXG4gICAgICAgICAgICAgICAgJ2VkJyxcbiAgICAgICAgICAgICAgICAnZWQnLFxuICAgICAgICAgICAgICAgICdlZCcsXG4gICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgJ2ZlZCcsIC8vIDFhZiB0byAxMGZlZFxuICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgJ2ZlZCcsXG4gICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICdmZWQnLFxuICAgICAgICAgICAgICAgICdlZycsXG4gICAgICAgICAgICAgICAgJ2VnJyxcbiAgICAgICAgICAgICAgICAnZmVkJyxcbiAgICAgICAgICAgICAgICAnZWcnLFxuICAgICAgICAgICAgICAgICdmZWQnLCAvLyAxMWVnIHRvIDIwZmVkXG4gICAgICAgICAgICBdO1xuICAgICAgICBpZiAoYiA+IDIwKSB7XG4gICAgICAgICAgICBpZiAoYiA9PT0gNDAgfHwgYiA9PT0gNTAgfHwgYiA9PT0gNjAgfHwgYiA9PT0gODAgfHwgYiA9PT0gMTAwKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2ZlZCc7IC8vIG5vdCAzMGFpbiwgNzBhaW4gb3IgOTBhaW5cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ2Fpbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoYiA+IDApIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvb2t1cFtiXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRGFuaXNoIFtkYV1cbi8vISBhdXRob3IgOiBVbHJpayBOaWVsc2VuIDogaHR0cHM6Ly9naXRodWIuY29tL21yYmFzZVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RhJywge1xuICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnc8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnc8O4bl9tYW5fdGlyX29uc190b3JfZnJlX2zDuHInLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdzw7hfbWFfdGlfb25fdG9fZnJfbMO4Jy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW2kgZGFnIGtsLl0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW2kgbW9yZ2VuIGtsLl0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ3DDpSBkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tpIGfDpXIga2wuXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW2ldIGRkZGRbcyBrbC5dIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBzaWRlbicsXG4gICAgICAgIHM6ICdmw6Ugc2VrdW5kZXInLFxuICAgICAgICBzczogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgbTogJ2V0IG1pbnV0JyxcbiAgICAgICAgbW06ICclZCBtaW51dHRlcicsXG4gICAgICAgIGg6ICdlbiB0aW1lJyxcbiAgICAgICAgaGg6ICclZCB0aW1lcicsXG4gICAgICAgIGQ6ICdlbiBkYWcnLFxuICAgICAgICBkZDogJyVkIGRhZ2UnLFxuICAgICAgICBNOiAnZW4gbcOlbmVkJyxcbiAgICAgICAgTU06ICclZCBtw6VuZWRlcicsXG4gICAgICAgIHk6ICdldCDDpXInLFxuICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiAoQXVzdHJpYSkgW2RlLWF0XVxuLy8hIGF1dGhvciA6IGxsdWNocyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sbHVjaHNcbi8vISBhdXRob3I6IE1lbmVsaW9uIEVsZW5zw7psZTogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcbi8vISBhdXRob3IgOiBNYXJ0aW4gR3JvbGxlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9NYWRNR1xuLy8hIGF1dGhvciA6IE1pa29sYWogRGFkZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL21pazAxYWpcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5mdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgIGg6IFsnZWluZSBTdHVuZGUnLCAnZWluZXIgU3R1bmRlJ10sXG4gICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgIHc6IFsnZWluZSBXb2NoZScsICdlaW5lciBXb2NoZSddLFxuICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgIHk6IFsnZWluIEphaHInLCAnZWluZW0gSmFociddLFxuICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgIH07XG4gICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdkZS1hdCcsIHtcbiAgICBtb250aHM6ICdKw6RubmVyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnSsOkbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1toZXV0ZSB1bV0gTFQgW1Vocl0nLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICBsYXN0V2VlazogJ1tsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgcGFzdDogJ3ZvciAlcycsXG4gICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgIHNzOiAnJWQgU2VrdW5kZW4nLFxuICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBoaDogJyVkIFN0dW5kZW4nLFxuICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgdzogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiAoU3dpdHplcmxhbmQpIFtkZS1jaF1cbi8vISBhdXRob3IgOiBzc2NodWVsbGVyIDogaHR0cHM6Ly9naXRodWIuY29tL3NzY2h1ZWxsZXJcblxuLy8gYmFzZWQgb246IGh0dHBzOi8vd3d3LmJrLmFkbWluLmNoL2Rva3VtZW50YXRpb24vc3ByYWNoZW4vMDQ5MTUvMDUwMTYvaW5kZXguaHRtbD9sYW5nPWRlI1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgbTogWydlaW5lIE1pbnV0ZScsICdlaW5lciBNaW51dGUnXSxcbiAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICBkZDogW251bWJlciArICcgVGFnZScsIG51bWJlciArICcgVGFnZW4nXSxcbiAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgIE1NOiBbbnVtYmVyICsgJyBNb25hdGUnLCBudW1iZXIgKyAnIE1vbmF0ZW4nXSxcbiAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgfTtcbiAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlLWNoJywge1xuICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ1NvX01vX0RpX01pX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgbGFzdERheTogJ1tnZXN0ZXJuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgIGxhc3RXZWVrOiAnW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgczogJ2VpbiBwYWFyIFNla3VuZGVuJyxcbiAgICAgICAgc3M6ICclZCBTZWt1bmRlbicsXG4gICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIG1tOiAnJWQgTWludXRlbicsXG4gICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB3dzogJyVkIFdvY2hlbicsXG4gICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgb3JkaW5hbDogJyVkLicsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIFtkZV1cbi8vISBhdXRob3IgOiBsbHVjaHMgOiBodHRwczovL2dpdGh1Yi5jb20vbGx1Y2hzXG4vLyEgYXV0aG9yOiBNZW5lbGlvbiBFbGVuc8O6bGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG4vLyEgYXV0aG9yIDogTWlrb2xhaiBEYWRlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vbWlrMDFhalxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgbTogWydlaW5lIE1pbnV0ZScsICdlaW5lciBNaW51dGUnXSxcbiAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICBkZDogW251bWJlciArICcgVGFnZScsIG51bWJlciArICcgVGFnZW4nXSxcbiAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgIE1NOiBbbnVtYmVyICsgJyBNb25hdGUnLCBudW1iZXIgKyAnIE1vbmF0ZW4nXSxcbiAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgfTtcbiAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlJywge1xuICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1toZXV0ZSB1bV0gTFQgW1Vocl0nLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICBsYXN0V2VlazogJ1tsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgcGFzdDogJ3ZvciAlcycsXG4gICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgIHNzOiAnJWQgU2VrdW5kZW4nLFxuICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBoaDogJyVkIFN0dW5kZW4nLFxuICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgdzogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbGRpdmlhbiBbZHZdXG4vLyEgYXV0aG9yIDogSmF3aXNoIEhhbWVlZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYXdpc2hcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgbW9udGhzID0gW1xuICAgICAgICAn3pberN6C3qreh96m3oPeqScsXG4gICAgICAgICfeit6s3oTesN6D3qreh96m3oPeqScsXG4gICAgICAgICfeid6n3oPeqN6X3qonLFxuICAgICAgICAn3oferd6V3rDeg96p3o3eqicsXG4gICAgICAgICfeid6tJyxcbiAgICAgICAgJ96W3qvegt6wJyxcbiAgICAgICAgJ96W3qrejd6m3ofeqCcsXG4gICAgICAgICfeh96v3o7ept6Q3rDek96qJyxcbiAgICAgICAgJ96Q3qzeld6w3pPerN6J3rDehN6m3oPeqicsXG4gICAgICAgICfeh96u3obesN6T3q/ehN6m3oPeqicsXG4gICAgICAgICfegt6u3ojerN6J3rDehN6m3oPeqicsXG4gICAgICAgICfekd6o3pDerN6J3rDehN6m3oPeqicsXG4gICAgXSxcbiAgICB3ZWVrZGF5cyA9IFtcbiAgICAgICAgJ96H3qfei96o3ofesN6M3qYnLFxuICAgICAgICAn3oDer96J3qYnLFxuICAgICAgICAn3ofept6C3rDejt6n3oPepicsXG4gICAgICAgICfehN6q3ovepicsXG4gICAgICAgICfehN6q3oPep96Q3rDeit6m3ozeqCcsXG4gICAgICAgICfegN6q3obeqt6D3qonLFxuICAgICAgICAn3oDert6C3qjegN6o3oPeqicsXG4gICAgXTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnZHYnLCB7XG4gICAgbW9udGhzOiBtb250aHMsXG4gICAgbW9udGhzU2hvcnQ6IG1vbnRocyxcbiAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgd2Vla2RheXNTaG9ydDogd2Vla2RheXMsXG4gICAgd2Vla2RheXNNaW46ICfeh96n3oveqF/egN6v3onepl/eh96m3oLesF/ehN6q3ovepl/ehN6q3oPep1/egN6q3obeql/egN6u3oLeqCcuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnRC9NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv3onehnzeid6KLyxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuICfeid6KJyA9PT0gaW5wdXQ7XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ96J3oYnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfeid6KJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1veid6o3ofept6L3qpdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1veid6n3ovept6J3qddIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUJyxcbiAgICAgICAgbGFzdERheTogJ1veh96o3ofesN6U3qxdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdb3orep96H3qjejN6q3ojeqF0gZGRkZCBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAn3ozerN6D3q3ejt6m3ofeqCAlcycsXG4gICAgICAgIHBhc3Q6ICfeht6q3oPeqN6C3rAgJXMnLFxuICAgICAgICBzOiAn3pDeqN6G3qregt6w3ozeqt6G3q7ehd6s3ofesCcsXG4gICAgICAgIHNzOiAnZCUg3pDeqN6G3qregt6w3ozeqicsXG4gICAgICAgIG06ICfeid6o3oLeqN6T3qzeh96wJyxcbiAgICAgICAgbW06ICfeid6o3oLeqN6T3qogJWQnLFxuICAgICAgICBoOiAn3o7ept6R3qjeh96o3oPerN6H3rAnLFxuICAgICAgICBoaDogJ96O3qbekd6o3ofeqN6D3qogJWQnLFxuICAgICAgICBkOiAn3oveqt6I3qbegN6s3ofesCcsXG4gICAgICAgIGRkOiAn3oveqt6I3qbekN6wICVkJyxcbiAgICAgICAgTTogJ96J3qbegN6s3ofesCcsXG4gICAgICAgIE1NOiAn3onept6Q3rAgJWQnLFxuICAgICAgICB5OiAn3ofept6A3qbeg96s3ofesCcsXG4gICAgICAgIHl5OiAn3ofept6A3qbeg96qICVkJyxcbiAgICB9LFxuICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICB9LFxuICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDcsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHcmVlayBbZWxdXG4vLyEgYXV0aG9yIDogQWdnZWxvcyBLYXJhbGlhcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tZWhpZWxcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKHR5cGVvZiBGdW5jdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbikgfHxcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VsJywge1xuICAgIG1vbnRoc05vbWluYXRpdmVFbDogJ86ZzrHOvc6/z4XOrM+BzrnOv8+CX86mzrXOss+Bzr/Phc6sz4HOuc6/z4JfzpzOrM+Bz4TOuc6/z4JfzpHPgM+Bzq/Ou865zr/Pgl/OnM6szrnOv8+CX86Zzr/Pjc69zrnOv8+CX86Zzr/Pjc67zrnOv8+CX86Rz43Os86/z4XPg8+Ezr/Pgl/Oo861z4DPhM6tzrzOss+BzrnOv8+CX86fzrrPhM+OzrLPgc65zr/Pgl/Onc6/zq3OvM6yz4HOuc6/z4JfzpTOtc66zq3OvM6yz4HOuc6/z4InLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc0dlbml0aXZlRWw6ICfOmc6xzr3Ov8+FzrHPgc6vzr/PhV/Ops61zrLPgc6/z4XOsc+Bzq/Ov8+FX86czrHPgc+Ezq/Ov8+FX86Rz4DPgc65zrvOr86/z4VfzpzOsc6Qzr/PhV/Omc6/z4XOvc6vzr/PhV/Omc6/z4XOu86vzr/PhV/Okc+FzrPOv8+Nz4PPhM6/z4VfzqPOtc+Az4TOtc68zrLPgc6vzr/PhV/On866z4TPic6yz4HOr86/z4Vfzp3Ov861zrzOss+Bzq/Ov8+FX86UzrXOus61zrzOss+Bzq/Ov8+FJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHM6IGZ1bmN0aW9uIChtb21lbnRUb0Zvcm1hdCwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbW9tZW50VG9Gb3JtYXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNOb21pbmF0aXZlRWw7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZm9ybWF0ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgL0QvLnRlc3QoZm9ybWF0LnN1YnN0cmluZygwLCBmb3JtYXQuaW5kZXhPZignTU1NTScpKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIGRheSBudW1iZXIgYmVmb3JlICdNTU1NJ1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc0dlbml0aXZlRWxbbW9tZW50VG9Gb3JtYXQubW9udGgoKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW21vbWVudFRvRm9ybWF0Lm1vbnRoKCldO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtb250aHNTaG9ydDogJ86ZzrHOvV/Ops61zrJfzpzOsc+BX86Rz4DPgV/OnM6xz4pfzpnOv8+Fzr1fzpnOv8+FzrtfzpHPhc6zX86jzrXPgF/On866z4Rfzp3Ov861X86UzrXOuicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ86az4XPgc65zrHOus6uX86UzrXPhc+Ezq3Pgc6xX86kz4HOr8+EzrdfzqTOtc+EzqzPgc+EzrdfzqDOrc68z4DPhM63X86gzrHPgc6xz4POus61z4XOrl/Oo86szrLOss6xz4TOvycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ86az4XPgV/OlM61z4VfzqTPgc65X86kzrXPhF/OoM61zrxfzqDOsc+BX86jzrHOsicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ86az4VfzpTOtV/OpM+BX86kzrVfzqDOtV/OoM6xX86jzrEnLnNwbGl0KCdfJyksXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnzrzOvCcgOiAnzpzOnCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfPgM68JyA6ICfOoM6cJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKVswXSA9PT0gJ868JztcbiAgICB9LFxuICAgIG1lcmlkaWVtUGFyc2U6IC9bzqDOnF1cXC4/zpw/XFwuPy9pLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgfSxcbiAgICBjYWxlbmRhckVsOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbzqPOrs68zrXPgc6xIHt9XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbzpHPjc+BzrnOvyB7fV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3t9XSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbzqfOuM61z4Ige31dIExUJyxcbiAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbz4TOvyDPgM+Bzr/Ot86zzr/Pjc68zrXOvc6/XSBkZGRkIFt7fV0gTFQnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW8+EzrfOvSDPgM+Bzr/Ot86zzr/Pjc68zrXOvc63XSBkZGRkIFt7fV0gTFQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IGZ1bmN0aW9uIChrZXksIG1vbSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJFbFtrZXldLFxuICAgICAgICAgICAgaG91cnMgPSBtb20gJiYgbW9tLmhvdXJzKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG91dHB1dCkpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5hcHBseShtb20pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQucmVwbGFjZSgne30nLCBob3VycyAlIDEyID09PSAxID8gJ8+Dz4TOtycgOiAnz4PPhM65z4InKTtcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfPg861ICVzJyxcbiAgICAgICAgcGFzdDogJyVzIM+Az4HOuc69JyxcbiAgICAgICAgczogJ867zq/Os86xIM60zrXPhc+EzrXPgc+MzrvOtc+Az4TOsScsXG4gICAgICAgIHNzOiAnJWQgzrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xJyxcbiAgICAgICAgbTogJ86tzr3OsSDOu861z4DPhM+MJyxcbiAgICAgICAgbW06ICclZCDOu861z4DPhM6sJyxcbiAgICAgICAgaDogJ868zq/OsSDPjs+BzrEnLFxuICAgICAgICBoaDogJyVkIM+Oz4HOtc+CJyxcbiAgICAgICAgZDogJ868zq/OsSDOvM6tz4HOsScsXG4gICAgICAgIGRkOiAnJWQgzrzOrc+BzrXPgicsXG4gICAgICAgIE06ICfOrc69zrHPgiDOvM6uzr3Osc+CJyxcbiAgICAgICAgTU06ICclZCDOvM6uzr3Otc+CJyxcbiAgICAgICAgeTogJ86tzr3Osc+CIM+Hz4HPjM69zr/PgicsXG4gICAgICAgIHl5OiAnJWQgz4fPgc+Mzr3Ouc6xJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfc63LyxcbiAgICBvcmRpbmFsOiAnJWTOtycsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDRzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoQXVzdHJhbGlhKSBbZW4tYXVdXG4vLyEgYXV0aG9yIDogSmFyZWQgTW9yc2UgOiBodHRwczovL2dpdGh1Yi5jb20vamFyY29hbFxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWF1Jywge1xuICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKENhbmFkYSkgW2VuLWNhXVxuLy8hIGF1dGhvciA6IEpvbmF0aGFuIEFib3VyYmloIDogaHR0cHM6Ly9naXRodWIuY29tL2pvbmJjYVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VuLWNhJywge1xuICAgIG1vbnRoczogJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoVW5pdGVkIEtpbmdkb20pIFtlbi1nYl1cbi8vISBhdXRob3IgOiBDaHJpcyBHZWRyaW0gOiBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNnZWRyaW1cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1nYicsIHtcbiAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKElyZWxhbmQpIFtlbi1pZV1cbi8vISBhdXRob3IgOiBDaHJpcyBDYXJ0bGlkZ2UgOiBodHRwczovL2dpdGh1Yi5jb20vY2hyaXNjYXJ0bGlkZ2VcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1pZScsIHtcbiAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoSXNyYWVsKSBbZW4taWxdXG4vLyEgYXV0aG9yIDogQ2hyaXMgR2VkcmltIDogaHR0cHM6Ly9naXRodWIuY29tL2NocmlzZ2VkcmltXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnZW4taWwnLCB7XG4gICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVuZ2xpc2ggKEluZGlhKSBbZW4taW5dXG4vLyEgYXV0aG9yIDogSmF0aW4gQWdyYXdhbCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYXRpbmFnMjJcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1pbicsIHtcbiAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3R8bmR8cmR8dGgpLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBFbmdsaXNoIChOZXcgWmVhbGFuZCkgW2VuLW56XVxuLy8hIGF1dGhvciA6IEx1a2UgTWNHcmVnb3IgOiBodHRwczovL2dpdGh1Yi5jb20vbHVrZW1jZ3JlZ29yXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnZW4tbnonLCB7XG4gICAgbW9udGhzOiAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0fG5kfHJkfHRoKS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRW5nbGlzaCAoU2luZ2Fwb3JlKSBbZW4tc2ddXG4vLyEgYXV0aG9yIDogTWF0dGhldyBDYXN0cmlsbG9uLU1hZHJpZ2FsIDogaHR0cHM6Ly9naXRodWIuY29tL3RlY2hkaW1lbnNpb25cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdlbi1zZycsIHtcbiAgICBtb250aHM6ICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVzcGVyYW50byBbZW9dXG4vLyEgYXV0aG9yIDogQ29saW4gRGVhbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jb2xpbmRlYW5cbi8vISBhdXRob3IgOiBNaWEgTm9yZGVudG9mdCBJbXBlcmF0b3JpIDogaHR0cHM6Ly9naXRodWIuY29tL21pZXN0YXNtaWFcbi8vISBjb21tZW50IDogbWllc3Rhc21pYSBjb3JyZWN0ZWQgdGhlIHRyYW5zbGF0aW9uIGJ5IGNvbGluZGVhblxuLy8hIGNvbW1lbnQgOiBWaXZha3ZvIGNvcnJlY3RlZCB0aGUgdHJhbnNsYXRpb24gYnkgY29saW5kZWFuIGFuZCBtaWVzdGFzbWlhXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnZW8nLCB7XG4gICAgbW9udGhzOiAnamFudWFyb19mZWJydWFyb19tYXJ0b19hcHJpbG9fbWFqb19qdW5pb19qdWxpb19hxa1ndXN0b19zZXB0ZW1icm9fb2t0b2Jyb19ub3ZlbWJyb19kZWNlbWJybycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdqYW5fZmViX21hcnRfYXByX21hal9qdW5fanVsX2HFrWdfc2VwdF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ2RpbWFuxIlvX2x1bmRvX21hcmRvX21lcmtyZWRvX8S1YcWtZG9fdmVuZHJlZG9fc2FiYXRvJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdkaW1fbHVuX21hcmRfbWVya1/EtWHFrV92ZW5fc2FiJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnZGlfbHVfbWFfbWVfxLVhX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgTEw6ICdbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZJyxcbiAgICAgICAgTExMOiAnW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkW25dLCBbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tJyxcbiAgICAgICAgbGxsbDogJ2RkZCwgW2xhXSBEWy1hbiBkZV0gTU1NLCBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIG1lcmlkaWVtUGFyc2U6IC9bYXBdXFwudFxcLm0vaSxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpID09PSAncCc7XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwLnQubS4nIDogJ1AuVC5NLic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdhLnQubS4nIDogJ0EuVC5NLic7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbSG9kaWHFrSBqZV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW01vcmdhxa0gamVdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkW24gamVdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tIaWVyYcWtIGplXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW3Bhc2ludGFuXSBkZGRkW24gamVdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdwb3N0ICVzJyxcbiAgICAgICAgcGFzdDogJ2FudGHFrSAlcycsXG4gICAgICAgIHM6ICdrZWxrYWogc2VrdW5kb2onLFxuICAgICAgICBzczogJyVkIHNla3VuZG9qJyxcbiAgICAgICAgbTogJ3VudSBtaW51dG8nLFxuICAgICAgICBtbTogJyVkIG1pbnV0b2onLFxuICAgICAgICBoOiAndW51IGhvcm8nLFxuICAgICAgICBoaDogJyVkIGhvcm9qJyxcbiAgICAgICAgZDogJ3VudSB0YWdvJywgLy9uZSAnZGl1cm5vJywgxIlhciBlc3RhcyB1eml0YSBwb3IgcHJva3NpbXVtb1xuICAgICAgICBkZDogJyVkIHRhZ29qJyxcbiAgICAgICAgTTogJ3VudSBtb25hdG8nLFxuICAgICAgICBNTTogJyVkIG1vbmF0b2onLFxuICAgICAgICB5OiAndW51IGphcm8nLFxuICAgICAgICB5eTogJyVkIGphcm9qJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfWEvLFxuICAgIG9yZGluYWw6ICclZGEnLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNwYW5pc2ggKERvbWluaWNhbiBSZXB1YmxpYykgW2VzLWRvXVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBtb250aHNTaG9ydERvdCA9ICdlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgIC9eZW5lL2ksXG4gICAgICAgIC9eZmViL2ksXG4gICAgICAgIC9ebWFyL2ksXG4gICAgICAgIC9eYWJyL2ksXG4gICAgICAgIC9ebWF5L2ksXG4gICAgICAgIC9eanVuL2ksXG4gICAgICAgIC9eanVsL2ksXG4gICAgICAgIC9eYWdvL2ksXG4gICAgICAgIC9ec2VwL2ksXG4gICAgICAgIC9eb2N0L2ksXG4gICAgICAgIC9ebm92L2ksXG4gICAgICAgIC9eZGljL2ksXG4gICAgXSxcbiAgICBtb250aHNSZWdleCA9IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2k7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VzLWRvJywge1xuICAgIG1vbnRoczogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90O1xuICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogL14oZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2ksXG4gICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21pX2p1X3ZpX3PDoScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICB9LFxuICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH0sXG4gICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICB9LFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgK1xuICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICddIExUJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdlbiAlcycsXG4gICAgICAgIHBhc3Q6ICdoYWNlICVzJyxcbiAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICB3OiAndW5hIHNlbWFuYScsXG4gICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICB5eTogJyVkIGHDsW9zJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3BhbmlzaCAoTWV4aWNvKSBbZXMtbXhdXG4vLyEgYXV0aG9yIDogSkMgRnJhbmNvIDogaHR0cHM6Ly9naXRodWIuY29tL2pjZnJhbmNvXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIG1vbnRoc1Nob3J0RG90ID0gJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydCA9ICdlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYycuc3BsaXQoJ18nKSxcbiAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgL15lbmUvaSxcbiAgICAgICAgL15mZWIvaSxcbiAgICAgICAgL15tYXIvaSxcbiAgICAgICAgL15hYnIvaSxcbiAgICAgICAgL15tYXkvaSxcbiAgICAgICAgL15qdW4vaSxcbiAgICAgICAgL15qdWwvaSxcbiAgICAgICAgL15hZ28vaSxcbiAgICAgICAgL15zZXAvaSxcbiAgICAgICAgL15vY3QvaSxcbiAgICAgICAgL15ub3YvaSxcbiAgICAgICAgL15kaWMvaSxcbiAgICBdLFxuICAgIG1vbnRoc1JlZ2V4ID0gL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnZXMtbXgnLCB7XG4gICAgbW9udGhzOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFttLm1vbnRoKCldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICBtb250aHNTdHJpY3RSZWdleDogL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxcbiAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICB9LFxuICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH0sXG4gICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICB9LFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgK1xuICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICddIExUJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdlbiAlcycsXG4gICAgICAgIHBhc3Q6ICdoYWNlICVzJyxcbiAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICB3OiAndW5hIHNlbWFuYScsXG4gICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICB5eTogJyVkIGHDsW9zJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxuICAgIGludmFsaWREYXRlOiAnRmVjaGEgaW52w6FsaWRhJyxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNwYW5pc2ggKFVuaXRlZCBTdGF0ZXMpIFtlcy11c11cbi8vISBhdXRob3IgOiBidXN0dGEgOiBodHRwczovL2dpdGh1Yi5jb20vYnVzdHRhXG4vLyEgYXV0aG9yIDogY2hyaXNyb2R6IDogaHR0cHM6Ly9naXRodWIuY29tL2Nocmlzcm9kelxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBtb250aHNTaG9ydERvdCA9ICdlbmUuX2ZlYi5fbWFyLl9hYnIuX21heS5fanVuLl9qdWwuX2Fnby5fc2VwLl9vY3QuX25vdi5fZGljLicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQgPSAnZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMnLnNwbGl0KCdfJyksXG4gICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgIC9eZW5lL2ksXG4gICAgICAgIC9eZmViL2ksXG4gICAgICAgIC9ebWFyL2ksXG4gICAgICAgIC9eYWJyL2ksXG4gICAgICAgIC9ebWF5L2ksXG4gICAgICAgIC9eanVuL2ksXG4gICAgICAgIC9eanVsL2ksXG4gICAgICAgIC9eYWdvL2ksXG4gICAgICAgIC9ec2VwL2ksXG4gICAgICAgIC9eb2N0L2ksXG4gICAgICAgIC9ebm92L2ksXG4gICAgICAgIC9eZGljL2ksXG4gICAgXSxcbiAgICBtb250aHNSZWdleCA9IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmV8ZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2k7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2VzLXVzJywge1xuICAgIG1vbnRoczogJ2VuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90O1xuICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRbbS5tb250aCgpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydERvdFttLm1vbnRoKCldO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKGVuZXJvfGZlYnJlcm98bWFyem98YWJyaWx8bWF5b3xqdW5pb3xqdWxpb3xhZ29zdG98c2VwdGllbWJyZXxvY3R1YnJlfG5vdmllbWJyZXxkaWNpZW1icmUpL2ksXG4gICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogL14oZW5lXFwuP3xmZWJcXC4/fG1hclxcLj98YWJyXFwuP3xtYXlcXC4/fGp1blxcLj98anVsXFwuP3xhZ29cXC4/fHNlcFxcLj98b2N0XFwuP3xub3ZcXC4/fGRpY1xcLj8pL2ksXG4gICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bmVzX21hcnRlc19tacOpcmNvbGVzX2p1ZXZlc192aWVybmVzX3PDoWJhZG8nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ2RvbS5fbHVuLl9tYXIuX21pw6kuX2p1ZS5fdmllLl9zw6FiLicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21pX2p1X3ZpX3PDoScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICB9LFxuICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH0sXG4gICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICB9LFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgK1xuICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICddIExUJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdlbiAlcycsXG4gICAgICAgIHBhc3Q6ICdoYWNlICVzJyxcbiAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICB3OiAndW5hIHNlbWFuYScsXG4gICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICB5eTogJyVkIGHDsW9zJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3BhbmlzaCBbZXNdXG4vLyEgYXV0aG9yIDogSnVsaW8gTmFwdXLDrSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qdWxpb25jXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIG1vbnRoc1Nob3J0RG90ID0gJ2VuZS5fZmViLl9tYXIuX2Fici5fbWF5Ll9qdW4uX2p1bC5fYWdvLl9zZXAuX29jdC5fbm92Ll9kaWMuJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydCA9ICdlbmVfZmViX21hcl9hYnJfbWF5X2p1bl9qdWxfYWdvX3NlcF9vY3Rfbm92X2RpYycuc3BsaXQoJ18nKSxcbiAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgL15lbmUvaSxcbiAgICAgICAgL15mZWIvaSxcbiAgICAgICAgL15tYXIvaSxcbiAgICAgICAgL15hYnIvaSxcbiAgICAgICAgL15tYXkvaSxcbiAgICAgICAgL15qdW4vaSxcbiAgICAgICAgL15qdWwvaSxcbiAgICAgICAgL15hZ28vaSxcbiAgICAgICAgL15zZXAvaSxcbiAgICAgICAgL15vY3QvaSxcbiAgICAgICAgL15ub3YvaSxcbiAgICAgICAgL15kaWMvaSxcbiAgICBdLFxuICAgIG1vbnRoc1JlZ2V4ID0gL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnZXMnLCB7XG4gICAgbW9udGhzOiAnZW5lcm9fZmVicmVyb19tYXJ6b19hYnJpbF9tYXlvX2p1bmlvX2p1bGlvX2Fnb3N0b19zZXB0aWVtYnJlX29jdHVicmVfbm92aWVtYnJlX2RpY2llbWJyZScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6IGZ1bmN0aW9uIChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnREb3Q7XG4gICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFttLm1vbnRoKCldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0RG90W20ubW9udGgoKV07XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICBtb250aHNTdHJpY3RSZWdleDogL14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxcbiAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvXihlbmVcXC4/fGZlYlxcLj98bWFyXFwuP3xhYnJcXC4/fG1heVxcLj98anVuXFwuP3xqdWxcXC4/fGFnb1xcLj98c2VwXFwuP3xvY3RcXC4/fG5vdlxcLj98ZGljXFwuPykvaSxcbiAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICB3ZWVrZGF5czogJ2RvbWluZ29fbHVuZXNfbWFydGVzX21pw6lyY29sZXNfanVldmVzX3ZpZXJuZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tLl9sdW4uX21hci5fbWnDqS5fanVlLl92aWUuX3PDoWIuJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbWlfanVfdmlfc8OhJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW2hveSBhIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHREYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW21hw7FhbmEgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICB9LFxuICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdkZGRkIFthIGxhJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgKyAnXSBMVCc7XG4gICAgICAgIH0sXG4gICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW2F5ZXIgYSBsYScgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ3MnIDogJycpICsgJ10gTFQnO1xuICAgICAgICB9LFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAnW2VsXSBkZGRkIFtwYXNhZG8gYSBsYScgK1xuICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgIT09IDEgPyAncycgOiAnJykgK1xuICAgICAgICAgICAgICAgICddIExUJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdlbiAlcycsXG4gICAgICAgIHBhc3Q6ICdoYWNlICVzJyxcbiAgICAgICAgczogJ3Vub3Mgc2VndW5kb3MnLFxuICAgICAgICBzczogJyVkIHNlZ3VuZG9zJyxcbiAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgIG1tOiAnJWQgbWludXRvcycsXG4gICAgICAgIGg6ICd1bmEgaG9yYScsXG4gICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICB3OiAndW5hIHNlbWFuYScsXG4gICAgICAgIHd3OiAnJWQgc2VtYW5hcycsXG4gICAgICAgIE06ICd1biBtZXMnLFxuICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgeTogJ3VuIGHDsW8nLFxuICAgICAgICB5eTogJyVkIGHDsW9zJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxuICAgIGludmFsaWREYXRlOiAnRmVjaGEgaW52w6FsaWRhJyxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEVzdG9uaWFuIFtldF1cbi8vISBhdXRob3IgOiBIZW5yeSBLZWhsbWFubiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWRoZW5yeVxuLy8hIGltcHJvdmVtZW50cyA6IElsbGltYXIgVGFtYmVrIDogaHR0cHM6Ly9naXRodWIuY29tL3JhZ3Vsa2FcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5mdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgIHM6IFsnbcO1bmUgc2VrdW5kaScsICdtw7VuaSBzZWt1bmQnLCAncGFhciBzZWt1bmRpdCddLFxuICAgICAgICBzczogW251bWJlciArICdzZWt1bmRpJywgbnVtYmVyICsgJ3Nla3VuZGl0J10sXG4gICAgICAgIG06IFsnw7xoZSBtaW51dGknLCAnw7xrcyBtaW51dCddLFxuICAgICAgICBtbTogW251bWJlciArICcgbWludXRpJywgbnVtYmVyICsgJyBtaW51dGl0J10sXG4gICAgICAgIGg6IFsnw7xoZSB0dW5uaScsICd0dW5kIGFlZ2EnLCAnw7xrcyB0dW5kJ10sXG4gICAgICAgIGhoOiBbbnVtYmVyICsgJyB0dW5uaScsIG51bWJlciArICcgdHVuZGknXSxcbiAgICAgICAgZDogWyfDvGhlIHDDpGV2YScsICfDvGtzIHDDpGV2J10sXG4gICAgICAgIE06IFsna3V1IGFqYScsICdrdXUgYWVnYScsICfDvGtzIGt1dSddLFxuICAgICAgICBNTTogW251bWJlciArICcga3V1JywgbnVtYmVyICsgJyBrdXVkJ10sXG4gICAgICAgIHk6IFsnw7xoZSBhYXN0YScsICdhYXN0YScsICfDvGtzIGFhc3RhJ10sXG4gICAgICAgIHl5OiBbbnVtYmVyICsgJyBhYXN0YScsIG51bWJlciArICcgYWFzdGF0J10sXG4gICAgfTtcbiAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0W2tleV1bMl0gPyBmb3JtYXRba2V5XVsyXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cbiAgICByZXR1cm4gaXNGdXR1cmUgPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdldCcsIHtcbiAgICBtb250aHM6ICdqYWFudWFyX3ZlZWJydWFyX23DpHJ0c19hcHJpbGxfbWFpX2p1dW5pX2p1dWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b29iZXJfbm92ZW1iZXJfZGV0c2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2phYW5fdmVlYnJfbcOkcnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5czogJ3DDvGhhcMOkZXZfZXNtYXNww6Rldl90ZWlzaXDDpGV2X2tvbG1hcMOkZXZfbmVsamFww6Rldl9yZWVkZV9sYXVww6Rldicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ1BfRV9UX0tfTl9SX0wnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdQX0VfVF9LX05fUl9MJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSDptbScsXG4gICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tUw6RuYSxdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tIb21tZSxdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdbSsOkcmdtaW5lXSBkZGRkIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tFaWxlLF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tFZWxtaW5lXSBkZGRkIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICclcyBww6RyYXN0JyxcbiAgICAgICAgcGFzdDogJyVzIHRhZ2FzaScsXG4gICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIGRkOiAnJWQgcMOkZXZhJyxcbiAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBCYXNxdWUgW2V1XVxuLy8hIGF1dGhvciA6IEVuZWtvIElsbGFycmFtZW5kaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9laWxsYXJyYVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2V1Jywge1xuICAgIG1vbnRoczogJ3VydGFycmlsYV9vdHNhaWxhX21hcnR4b2FfYXBpcmlsYV9tYWlhdHphX2VrYWluYV91enRhaWxhX2FidXp0dWFfaXJhaWxhX3VycmlhX2F6YXJvYV9hYmVuZHVhJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ3VydC5fb3RzLl9tYXIuX2FwaS5fbWFpLl9la2EuX3V6dC5fYWJ1Ll9pcmEuX3Vyci5fYXphLl9hYmUuJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAnaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ2lnLl9hbC5fYXIuX2F6Ll9vZy5fb2wuX2xyLicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ2lnX2FsX2FyX2F6X29nX29sX2xyJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgIExMOiAnWVlZWVtrb10gTU1NTVtyZW5dIERbYV0nLFxuICAgICAgICBMTEw6ICdZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBZWVlZW2tvXSBNTU1NW3Jlbl0gRFthXSBISDptbScsXG4gICAgICAgIGw6ICdZWVlZLU0tRCcsXG4gICAgICAgIGxsOiAnWVlZWVtrb10gTU1NIERbYV0nLFxuICAgICAgICBsbGw6ICdZWVlZW2tvXSBNTU0gRFthXSBISDptbScsXG4gICAgICAgIGxsbGw6ICdkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbZ2F1cl0gTFRbZXRhbl0nLFxuICAgICAgICBuZXh0RGF5OiAnW2JpaGFyXSBMVFtldGFuXScsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVFtldGFuXScsXG4gICAgICAgIGxhc3REYXk6ICdbYXR6b10gTFRbZXRhbl0nLFxuICAgICAgICBsYXN0V2VlazogJ1thdXJyZWtvXSBkZGRkIExUW2V0YW5dJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICclcyBiYXJydScsXG4gICAgICAgIHBhc3Q6ICdkdWVsYSAlcycsXG4gICAgICAgIHM6ICdzZWd1bmRvIGJhdHp1aycsXG4gICAgICAgIHNzOiAnJWQgc2VndW5kbycsXG4gICAgICAgIG06ICdtaW51dHUgYmF0JyxcbiAgICAgICAgbW06ICclZCBtaW51dHUnLFxuICAgICAgICBoOiAnb3JkdSBiYXQnLFxuICAgICAgICBoaDogJyVkIG9yZHUnLFxuICAgICAgICBkOiAnZWd1biBiYXQnLFxuICAgICAgICBkZDogJyVkIGVndW4nLFxuICAgICAgICBNOiAnaGlsYWJldGUgYmF0JyxcbiAgICAgICAgTU06ICclZCBoaWxhYmV0ZScsXG4gICAgICAgIHk6ICd1cnRlIGJhdCcsXG4gICAgICAgIHl5OiAnJWQgdXJ0ZScsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFBlcnNpYW4gW2ZhXVxuLy8hIGF1dGhvciA6IEVicmFoaW0gQnlhZ293aSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9lYnJhbWluaW9cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAxOiAn27EnLFxuICAgICAgICAyOiAn27InLFxuICAgICAgICAzOiAn27MnLFxuICAgICAgICA0OiAn27QnLFxuICAgICAgICA1OiAn27UnLFxuICAgICAgICA2OiAn27YnLFxuICAgICAgICA3OiAn27cnLFxuICAgICAgICA4OiAn27gnLFxuICAgICAgICA5OiAn27knLFxuICAgICAgICAwOiAn27AnLFxuICAgIH0sXG4gICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAn27EnOiAnMScsXG4gICAgICAgICfbsic6ICcyJyxcbiAgICAgICAgJ9uzJzogJzMnLFxuICAgICAgICAn27QnOiAnNCcsXG4gICAgICAgICfbtSc6ICc1JyxcbiAgICAgICAgJ9u2JzogJzYnLFxuICAgICAgICAn27cnOiAnNycsXG4gICAgICAgICfbuCc6ICc4JyxcbiAgICAgICAgJ9u5JzogJzknLFxuICAgICAgICAn27AnOiAnMCcsXG4gICAgfTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnZmEnLCB7XG4gICAgbW9udGhzOiAn2pjYp9mG2YjbjNmHX9mB2YjYsduM2Ydf2YXYp9ix2LNf2KLZiNix24zZhF/ZhdmHX9qY2YjYptmGX9qY2YjYptuM2Ydf2KfZiNiqX9iz2b7Yqtin2YXYqNixX9in2qnYqtio2LFf2YbZiNin2YXYqNixX9iv2LPYp9mF2KjYsScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICfamNin2YbZiNuM2Ydf2YHZiNix24zZh1/Zhdin2LHYs1/YotmI2LHbjNmEX9mF2Ydf2pjZiNim2YZf2pjZiNim24zZh1/Yp9mI2Kpf2LPZvtiq2KfZhdio2LFf2Kfaqdiq2KjYsV/ZhtmI2KfZhdio2LFf2K/Ys9in2YXYqNixJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5czogJ9uM2qlcXHUyMDBj2LTZhtio2Ydf2K/ZiNi02YbYqNmHX9iz2YdcXHUyMDBj2LTZhtio2Ydf2obZh9in2LHYtNmG2KjZh1/ZvtmG2KxcXHUyMDBj2LTZhtio2Ydf2KzZhdi52Ydf2LTZhtio2YcnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfbjNqpXFx1MjAwY9i02YbYqNmHX9iv2YjYtNmG2KjZh1/Ys9mHXFx1MjAwY9i02YbYqNmHX9qG2YfYp9ix2LTZhtio2Ydf2b7ZhtisXFx1MjAwY9i02YbYqNmHX9is2YXYudmHX9i02YbYqNmHJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c01pbjogJ9uMX9ivX9izX9qGX9m+X9isX9i0Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv2YLYqNmEINin2LIg2LjZh9ixfNio2LnYryDYp9iyINi42YfYsS8sXG4gICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAv2KjYudivINin2LIg2LjZh9ixLy50ZXN0KGlucHV0KTtcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAn2YLYqNmEINin2LIg2LjZh9ixJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn2KjYudivINin2LIg2LjZh9ixJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vYp9mF2LHZiNiyINiz2KfYudiqXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb2YHYsdiv2Kcg2LPYp9i52KpdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYs9in2LnYql0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW9iv24zYsdmI2LIg2LPYp9i52KpdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvZvtuM2LRdIFvYs9in2LnYql0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ9iv2LEgJXMnLFxuICAgICAgICBwYXN0OiAnJXMg2b7bjNi0JyxcbiAgICAgICAgczogJ9qG2YbYryDYq9in2YbbjNmHJyxcbiAgICAgICAgc3M6ICclZCDYq9in2YbbjNmHJyxcbiAgICAgICAgbTogJ9uM2qkg2K/ZgtuM2YLZhycsXG4gICAgICAgIG1tOiAnJWQg2K/ZgtuM2YLZhycsXG4gICAgICAgIGg6ICfbjNqpINiz2KfYudiqJyxcbiAgICAgICAgaGg6ICclZCDYs9in2LnYqicsXG4gICAgICAgIGQ6ICfbjNqpINix2YjYsicsXG4gICAgICAgIGRkOiAnJWQg2LHZiNiyJyxcbiAgICAgICAgTTogJ9uM2qkg2YXYp9mHJyxcbiAgICAgICAgTU06ICclZCDZhdin2YcnLFxuICAgICAgICB5OiAn24zaqSDYs9in2YQnLFxuICAgICAgICB5eTogJyVkINiz2KfZhCcsXG4gICAgfSxcbiAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAucmVwbGFjZSgvW9uwLdu5XS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICB9LFxuICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfdmFLyxcbiAgICBvcmRpbmFsOiAnJWTZhScsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZpbm5pc2ggW2ZpXVxuLy8hIGF1dGhvciA6IFRhcm1vIEFpZGFudGF1c3RhIDogaHR0cHM6Ly9naXRodWIuY29tL2JsZWFkb2ZcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgbnVtYmVyc1Bhc3QgPSAnbm9sbGEgeWtzaSBrYWtzaSBrb2xtZSBuZWxqw6Qgdmlpc2kga3V1c2kgc2VpdHNlbcOkbiBrYWhkZWtzYW4geWhkZWtzw6RuJy5zcGxpdChcbiAgICAgICAgJyAnXG4gICAgKSxcbiAgICBudW1iZXJzRnV0dXJlID0gW1xuICAgICAgICAnbm9sbGEnLFxuICAgICAgICAneWhkZW4nLFxuICAgICAgICAna2FoZGVuJyxcbiAgICAgICAgJ2tvbG1lbicsXG4gICAgICAgICduZWxqw6RuJyxcbiAgICAgICAgJ3ZpaWRlbicsXG4gICAgICAgICdrdXVkZW4nLFxuICAgICAgICBudW1iZXJzUGFzdFs3XSxcbiAgICAgICAgbnVtYmVyc1Bhc3RbOF0sXG4gICAgICAgIG51bWJlcnNQYXN0WzldLFxuICAgIF07XG5mdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ211dXRhbWFuIHNla3VubmluJyA6ICdtdXV0YW1hIHNla3VudGknO1xuICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdzZWt1bm5pbicgOiAnc2VrdW50aWEnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aSc7XG4gICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aWEnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGknO1xuICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpYSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6QnO1xuICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdww6RpdsOkbicgOiAncMOkaXbDpMOkJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdrdXVrYXVkZW4nIDogJ2t1dWthdXNpJztcbiAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXV0dGEnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvc2knO1xuICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3R0YSc7XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmVzdWx0ID0gdmVyYmFsTnVtYmVyKG51bWJlciwgaXNGdXR1cmUpICsgJyAnICsgcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkge1xuICAgIHJldHVybiBudW1iZXIgPCAxMFxuICAgICAgICA/IGlzRnV0dXJlXG4gICAgICAgICAgICA/IG51bWJlcnNGdXR1cmVbbnVtYmVyXVxuICAgICAgICAgICAgOiBudW1iZXJzUGFzdFtudW1iZXJdXG4gICAgICAgIDogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdmaScsIHtcbiAgICBtb250aHM6ICd0YW1taWt1dV9oZWxtaWt1dV9tYWFsaXNrdXVfaHVodGlrdXVfdG91a29rdXVfa2Vzw6RrdXVfaGVpbsOka3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1Jy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ3RhbW1pX2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXPDpF9oZWluw6RfZWxvX3N5eXNfbG9rYV9tYXJyYXNfam91bHUnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzOiAnc3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFpJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnc3VfbWFfdGlfa2VfdG9fcGVfbGEnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgIExMOiAnRG8gTU1NTVt0YV0gWVlZWScsXG4gICAgICAgIExMTDogJ0RvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgbDogJ0QuTS5ZWVlZJyxcbiAgICAgICAgbGw6ICdEbyBNTU0gWVlZWScsXG4gICAgICAgIGxsbDogJ0RvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgIGxsbGw6ICdkZGQsIERvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW3TDpG7DpMOkbl0gW2tsb10gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW2h1b21lbm5hXSBba2xvXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2xvXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbZWlsZW5dIFtrbG9dIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbdmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICclcyBww6TDpHN0w6QnLFxuICAgICAgICBwYXN0OiAnJXMgc2l0dGVuJyxcbiAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgb3JkaW5hbDogJyVkLicsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRmlsaXBpbm8gW2ZpbF1cbi8vISBhdXRob3IgOiBEYW4gSGFnbWFuIDogaHR0cHM6Ly9naXRodWIuY29tL2hhZ21hbmRhblxuLy8hIGF1dGhvciA6IE1hdHRoZXcgQ28gOiBodHRwczovL2dpdGh1Yi5jb20vbWF0dGhld2RlZWNvXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnZmlsJywge1xuICAgIG1vbnRoczogJ0VuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0Rpcycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ0xpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ0xpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ0xpX0x1X01hX01pX0h1X0JpX1NhYicuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnTU0vRC9ZWVlZJyxcbiAgICAgICAgTEw6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBERCwgWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnTFQgW25nYXlvbmcgYXJhd10nLFxuICAgICAgICBuZXh0RGF5OiAnW0J1a2FzIG5nXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQnLFxuICAgICAgICBsYXN0RGF5OiAnTFQgW2thaGFwb25dJyxcbiAgICAgICAgbGFzdFdlZWs6ICdMVCBbbm9vbmcgbmFrYXJhYW5nXSBkZGRkJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdzYSBsb29iIG5nICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGFuZyBuYWthbGlwYXMnLFxuICAgICAgICBzOiAnaWxhbmcgc2VndW5kbycsXG4gICAgICAgIHNzOiAnJWQgc2VndW5kbycsXG4gICAgICAgIG06ICdpc2FuZyBtaW51dG8nLFxuICAgICAgICBtbTogJyVkIG1pbnV0bycsXG4gICAgICAgIGg6ICdpc2FuZyBvcmFzJyxcbiAgICAgICAgaGg6ICclZCBvcmFzJyxcbiAgICAgICAgZDogJ2lzYW5nIGFyYXcnLFxuICAgICAgICBkZDogJyVkIGFyYXcnLFxuICAgICAgICBNOiAnaXNhbmcgYnV3YW4nLFxuICAgICAgICBNTTogJyVkIGJ1d2FuJyxcbiAgICAgICAgeTogJ2lzYW5nIHRhb24nLFxuICAgICAgICB5eTogJyVkIHRhb24nLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGYXJvZXNlIFtmb11cbi8vISBhdXRob3IgOiBSYWduYXIgSm9oYW5uZXNlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yYWduYXIxMjNcbi8vISBhdXRob3IgOiBLcmlzdGlhbiBTYWthcmlzc29uIDogaHR0cHM6Ly9naXRodWIuY29tL3Nha2FyaXNzb25cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdmbycsIHtcbiAgICBtb250aHM6ICdqYW51YXJfZmVicnVhcl9tYXJzX2FwcsOtbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2Rlcycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ3N1bm51ZGFndXJfbcOhbmFkYWd1cl90w71zZGFndXJfbWlrdWRhZ3VyX2jDs3NkYWd1cl9mcsOtZ2dqYWRhZ3VyX2xleWdhcmRhZ3VyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnc3VuX23DoW5fdMO9c19taWtfaMOzc19mcsOtX2xleScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ3N1X23DoV90w71fbWlfaMOzX2ZyX2xlJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSwgWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW8ONIGRhZyBrbC5dIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vDjSBtb3JnaW4ga2wuXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbw40gZ2rDoXIga2wuXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW3PDrcOwc3R1XSBkZGRkIFtrbF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ3VtICVzJyxcbiAgICAgICAgcGFzdDogJyVzIHPDrcOwYW5pJyxcbiAgICAgICAgczogJ2bDoSBzZWt1bmQnLFxuICAgICAgICBzczogJyVkIHNla3VuZGlyJyxcbiAgICAgICAgbTogJ2VpbiBtaW51dHR1cicsXG4gICAgICAgIG1tOiAnJWQgbWludXR0aXInLFxuICAgICAgICBoOiAnZWluIHTDrW1pJyxcbiAgICAgICAgaGg6ICclZCB0w61tYXInLFxuICAgICAgICBkOiAnZWluIGRhZ3VyJyxcbiAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgIE06ICdlaW4gbcOhbmHDsHVyJyxcbiAgICAgICAgTU06ICclZCBtw6FuYcOwaXInLFxuICAgICAgICB5OiAnZWl0dCDDoXInLFxuICAgICAgICB5eTogJyVkIMOhcicsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyZW5jaCAoQ2FuYWRhKSBbZnItY2FdXG4vLyEgYXV0aG9yIDogSm9uYXRoYW4gQWJvdXJiaWggOiBodHRwczovL2dpdGh1Yi5jb20vam9uYmNhXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnZnItY2EnLCB7XG4gICAgbW9udGhzOiAnamFudmllcl9mw6l2cmllcl9tYXJzX2F2cmlsX21haV9qdWluX2p1aWxsZXRfYW/Du3Rfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZMOpY2VtYnJlJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2phbnYuX2bDqXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW/Du3Rfc2VwdC5fb2N0Ll9ub3YuX2TDqWMuJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAnZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnZGlfbHVfbWFfbWVfamVfdmVfc2EnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tBdWpvdXJk4oCZaHVpIMOgXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbRGVtYWluIMOgXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6BdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tIaWVyIMOgXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZGVybmllciDDoF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2RhbnMgJXMnLFxuICAgICAgICBwYXN0OiAnaWwgeSBhICVzJyxcbiAgICAgICAgczogJ3F1ZWxxdWVzIHNlY29uZGVzJyxcbiAgICAgICAgc3M6ICclZCBzZWNvbmRlcycsXG4gICAgICAgIG06ICd1bmUgbWludXRlJyxcbiAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgaDogJ3VuZSBoZXVyZScsXG4gICAgICAgIGhoOiAnJWQgaGV1cmVzJyxcbiAgICAgICAgZDogJ3VuIGpvdXInLFxuICAgICAgICBkZDogJyVkIGpvdXJzJyxcbiAgICAgICAgTTogJ3VuIG1vaXMnLFxuICAgICAgICBNTTogJyVkIG1vaXMnLFxuICAgICAgICB5OiAndW4gYW4nLFxuICAgICAgICB5eTogJyVkIGFucycsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZXJ8ZSkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBtYXNjdWxpbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBtb2lzLCB0cmltZXN0cmUsIGpvdXJcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAnZXInIDogJ2UnKTtcblxuICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBmZW1pbmluZSBncmFtbWF0aWNhbCBnZW5kZXI6IHNlbWFpbmVcbiAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChudW1iZXIgPT09IDEgPyAncmUnIDogJ2UnKTtcbiAgICAgICAgfVxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGcmVuY2ggKFN3aXR6ZXJsYW5kKSBbZnItY2hdXG4vLyEgYXV0aG9yIDogR2FzcGFyZCBCdWNoZXIgOiBodHRwczovL2dpdGh1Yi5jb20vZ2FzcGFyZFxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZyLWNoJywge1xuICAgIG1vbnRoczogJ2phbnZpZXJfZsOpdnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2Fvw7t0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2TDqWNlbWJyZScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdqYW52Ll9mw6l2ci5fbWFyc19hdnIuX21haV9qdWluX2p1aWwuX2Fvw7t0X3NlcHQuX29jdC5fbm92Ll9kw6ljLicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogJ2RpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ2RpX2x1X21hX21lX2plX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbQXVqb3VyZOKAmWh1aSDDoF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW0RlbWFpbiDDoF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbSGllciDDoF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rlcm5pZXIgw6BdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdkYW5zICVzJyxcbiAgICAgICAgcGFzdDogJ2lsIHkgYSAlcycsXG4gICAgICAgIHM6ICdxdWVscXVlcyBzZWNvbmRlcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kZXMnLFxuICAgICAgICBtOiAndW5lIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICd1bmUgaGV1cmUnLFxuICAgICAgICBoaDogJyVkIGhldXJlcycsXG4gICAgICAgIGQ6ICd1biBqb3VyJyxcbiAgICAgICAgZGQ6ICclZCBqb3VycycsXG4gICAgICAgIE06ICd1biBtb2lzJyxcbiAgICAgICAgTU06ICclZCBtb2lzJyxcbiAgICAgICAgeTogJ3VuIGFuJyxcbiAgICAgICAgeXk6ICclZCBhbnMnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KGVyfGUpLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggbWFzY3VsaW5lIGdyYW1tYXRpY2FsIGdlbmRlcjogbW9pcywgdHJpbWVzdHJlLCBqb3VyXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICdlJyk7XG5cbiAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggZmVtaW5pbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBzZW1haW5lXG4gICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ3JlJyA6ICdlJyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyZW5jaCBbZnJdXG4vLyEgYXV0aG9yIDogSm9obiBGaXNjaGVyIDogaHR0cHM6Ly9naXRodWIuY29tL2pmcm9mZmljZVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBtb250aHNTdHJpY3RSZWdleCA9IC9eKGphbnZpZXJ8ZsOpdnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvw7t0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGTDqWNlbWJyZSkvaSxcbiAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gLyhqYW52XFwuP3xmw6l2clxcLj98bWFyc3xhdnJcXC4/fG1haXxqdWlufGp1aWxcXC4/fGFvw7t0fHNlcHRcXC4/fG9jdFxcLj98bm92XFwuP3xkw6ljXFwuPykvaSxcbiAgICBtb250aHNSZWdleCA9IC8oamFudlxcLj98ZsOpdnJcXC4/fG1hcnN8YXZyXFwuP3xtYWl8anVpbnxqdWlsXFwuP3xhb8O7dHxzZXB0XFwuP3xvY3RcXC4/fG5vdlxcLj98ZMOpY1xcLj98amFudmllcnxmw6l2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxsZXR8YW/Du3R8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZMOpY2VtYnJlKS9pLFxuICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAvXmphbnYvaSxcbiAgICAgICAgL15mw6l2ci9pLFxuICAgICAgICAvXm1hcnMvaSxcbiAgICAgICAgL15hdnIvaSxcbiAgICAgICAgL15tYWkvaSxcbiAgICAgICAgL15qdWluL2ksXG4gICAgICAgIC9eanVpbC9pLFxuICAgICAgICAvXmFvw7t0L2ksXG4gICAgICAgIC9ec2VwdC9pLFxuICAgICAgICAvXm9jdC9pLFxuICAgICAgICAvXm5vdi9pLFxuICAgICAgICAvXmTDqWMvaSxcbiAgICBdO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdmcicsIHtcbiAgICBtb250aHM6ICdqYW52aWVyX2bDqXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb8O7dF9zZXB0ZW1icmVfb2N0b2JyZV9ub3ZlbWJyZV9kw6ljZW1icmUnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnamFudi5fZsOpdnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb8O7dF9zZXB0Ll9vY3QuX25vdi5fZMOpYy4nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1JlZ2V4OiBtb250aHNSZWdleCxcbiAgICBtb250aHNTaG9ydFJlZ2V4OiBtb250aHNSZWdleCxcbiAgICBtb250aHNTdHJpY3RSZWdleDogbW9udGhzU3RyaWN0UmVnZXgsXG4gICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogbW9udGhzU2hvcnRTdHJpY3RSZWdleCxcbiAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICB3ZWVrZGF5czogJ2RpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ2RpX2x1X21hX21lX2plX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbQXVqb3VyZOKAmWh1aSDDoF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW0RlbWFpbiDDoF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8OgXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbSGllciDDoF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2Rlcm5pZXIgw6BdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdkYW5zICVzJyxcbiAgICAgICAgcGFzdDogJ2lsIHkgYSAlcycsXG4gICAgICAgIHM6ICdxdWVscXVlcyBzZWNvbmRlcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kZXMnLFxuICAgICAgICBtOiAndW5lIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICd1bmUgaGV1cmUnLFxuICAgICAgICBoaDogJyVkIGhldXJlcycsXG4gICAgICAgIGQ6ICd1biBqb3VyJyxcbiAgICAgICAgZGQ6ICclZCBqb3VycycsXG4gICAgICAgIHc6ICd1bmUgc2VtYWluZScsXG4gICAgICAgIHd3OiAnJWQgc2VtYWluZXMnLFxuICAgICAgICBNOiAndW4gbW9pcycsXG4gICAgICAgIE1NOiAnJWQgbW9pcycsXG4gICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgIHl5OiAnJWQgYW5zJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShlcnwpLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFJldHVybiAnZScgd2hlbiBkYXkgb2YgbW9udGggPiAxLiBNb3ZlIHRoaXMgY2FzZSBpbnNpZGVcbiAgICAgICAgICAgIC8vIGJsb2NrIGZvciBtYXNjdWxpbmUgd29yZHMgYmVsb3cuXG4gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzMzNzVcbiAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICcnKTtcblxuICAgICAgICAgICAgLy8gV29yZHMgd2l0aCBtYXNjdWxpbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBtb2lzLCB0cmltZXN0cmUsIGpvdXJcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgIGNhc2UgJ1EnOlxuICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ2VyJyA6ICdlJyk7XG5cbiAgICAgICAgICAgIC8vIFdvcmRzIHdpdGggZmVtaW5pbmUgZ3JhbW1hdGljYWwgZ2VuZGVyOiBzZW1haW5lXG4gICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAobnVtYmVyID09PSAxID8gJ3JlJyA6ICdlJyk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZyaXNpYW4gW2Z5XVxuLy8hIGF1dGhvciA6IFJvYmluIHZhbiBkZXIgVmxpZXQgOiBodHRwczovL2dpdGh1Yi5jb20vcm9iaW4wdmFuMGRlcjB2XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIG1vbnRoc1Nob3J0V2l0aERvdHMgPSAnamFuLl9mZWIuX21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnRXaXRob3V0RG90cyA9ICdqYW5fZmViX21ydF9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2Rlcycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICk7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2Z5Jywge1xuICAgIG1vbnRoczogJ2phbm5ld2FyaXNfZmVicmV3YXJpc19tYWFydF9hcHJpbF9tYWFpZV9qdW55X2p1bHlfYXVndXN0dXNfc2VwdGltYmVyX29rdG9iZXJfbm92aW1iZXJfZGVzaW1iZXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiBmdW5jdGlvbiAobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHM7XG4gICAgICAgIH0gZWxzZSBpZiAoLy1NTU0tLy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhvdXREb3RzW20ubW9udGgoKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRoRG90c1ttLm1vbnRoKCldO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAnc25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdzaS5fbW8uX3RpLl93by5fdG8uX2ZyLl9zby4nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdTaV9Nb19UaV9Xb19Ub19Gcl9Tbycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELU1NLVlZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW2hqb2VkIG9tXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbbW9hcm4gb21dIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtvbV0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW2p1c3RlciBvbV0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1vDtGZyw7tuZV0gZGRkZCBbb21dIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdvZXIgJXMnLFxuICAgICAgICBwYXN0OiAnJXMgbHluJyxcbiAgICAgICAgczogJ2luIHBlYXIgc2Vrb25kZW4nLFxuICAgICAgICBzczogJyVkIHNla29uZGVuJyxcbiAgICAgICAgbTogJ2llbiBtaW7DunQnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZW4nLFxuICAgICAgICBoOiAnaWVuIG9lcmUnLFxuICAgICAgICBoaDogJyVkIG9lcmVuJyxcbiAgICAgICAgZDogJ2llbiBkZWknLFxuICAgICAgICBkZDogJyVkIGRhZ2VuJyxcbiAgICAgICAgTTogJ2llbiBtb2FubmUnLFxuICAgICAgICBNTTogJyVkIG1vYW5uZW4nLFxuICAgICAgICB5OiAnaWVuIGppZXInLFxuICAgICAgICB5eTogJyVkIGppZXJyZW4nLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHN0ZXxkZSkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAobnVtYmVyID09PSAxIHx8IG51bWJlciA9PT0gOCB8fCBudW1iZXIgPj0gMjAgPyAnc3RlJyA6ICdkZScpXG4gICAgICAgICk7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBJcmlzaCBvciBJcmlzaCBHYWVsaWMgW2dhXVxuLy8hIGF1dGhvciA6IEFuZHLDqSBTaWx2YSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hc2twdFxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBtb250aHMgPSBbXG4gICAgICAgICdFYW7DoWlyJyxcbiAgICAgICAgJ0ZlYWJocmEnLFxuICAgICAgICAnTcOhcnRhJyxcbiAgICAgICAgJ0FpYnJlw6FuJyxcbiAgICAgICAgJ0JlYWx0YWluZScsXG4gICAgICAgICdNZWl0aGVhbWgnLFxuICAgICAgICAnScO6aWwnLFxuICAgICAgICAnTMO6bmFzYScsXG4gICAgICAgICdNZcOhbiBGw7NtaGFpcicsXG4gICAgICAgICdEZWlyZWFkaCBGw7NtaGFpcicsXG4gICAgICAgICdTYW1oYWluJyxcbiAgICAgICAgJ05vbGxhaWcnLFxuICAgIF0sXG4gICAgbW9udGhzU2hvcnQgPSBbXG4gICAgICAgICdFYW4nLFxuICAgICAgICAnRmVhYmgnLFxuICAgICAgICAnTcOhcnQnLFxuICAgICAgICAnQWliJyxcbiAgICAgICAgJ0JlYWwnLFxuICAgICAgICAnTWVpdGgnLFxuICAgICAgICAnScO6aWwnLFxuICAgICAgICAnTMO6bicsXG4gICAgICAgICdNLkYuJyxcbiAgICAgICAgJ0QuRi4nLFxuICAgICAgICAnU2FtaCcsXG4gICAgICAgICdOb2xsJyxcbiAgICBdLFxuICAgIHdlZWtkYXlzID0gW1xuICAgICAgICAnRMOpIERvbWhuYWlnaCcsXG4gICAgICAgICdEw6kgTHVhaW4nLFxuICAgICAgICAnRMOpIE3DoWlydCcsXG4gICAgICAgICdEw6kgQ8OpYWRhb2luJyxcbiAgICAgICAgJ0TDqWFyZGFvaW4nLFxuICAgICAgICAnRMOpIGhBb2luZScsXG4gICAgICAgICdEw6kgU2F0aGFpcm4nLFxuICAgIF0sXG4gICAgd2Vla2RheXNTaG9ydCA9IFsnRG9taCcsICdMdWFuJywgJ03DoWlydCcsICdDw6lhZCcsICdEw6lhcicsICdBb2luZScsICdTYXRoJ10sXG4gICAgd2Vla2RheXNNaW4gPSBbJ0RvJywgJ0x1JywgJ03DoScsICdDw6knLCAnRMOpJywgJ0EnLCAnU2EnXTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnZ2EnLCB7XG4gICAgbW9udGhzOiBtb250aHMsXG4gICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6IHdlZWtkYXlzLFxuICAgIHdlZWtkYXlzU2hvcnQ6IHdlZWtkYXlzU2hvcnQsXG4gICAgd2Vla2RheXNNaW46IHdlZWtkYXlzTWluLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbSW5uaXUgYWddIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tBbcOhcmFjaCBhZ10gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FnXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbSW5uw6kgYWddIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtzZW8gY2FpdGVdIFthZ10gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2kgJXMnLFxuICAgICAgICBwYXN0OiAnJXMgw7Mgc2hpbicsXG4gICAgICAgIHM6ICdjw7pwbGEgc29pY2luZCcsXG4gICAgICAgIHNzOiAnJWQgc29pY2luZCcsXG4gICAgICAgIG06ICduw7NpbcOpYWQnLFxuICAgICAgICBtbTogJyVkIG7Ds2ltw6lhZCcsXG4gICAgICAgIGg6ICd1YWlyIGFuIGNobG9pZycsXG4gICAgICAgIGhoOiAnJWQgdWFpciBhbiBjaGxvaWcnLFxuICAgICAgICBkOiAnbMOhJyxcbiAgICAgICAgZGQ6ICclZCBsw6EnLFxuICAgICAgICBNOiAnbcOtJyxcbiAgICAgICAgTU06ICclZCBtw61vbm5hJyxcbiAgICAgICAgeTogJ2JsaWFpbicsXG4gICAgICAgIHl5OiAnJWQgYmxpYWluJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShkfG5hfG1oKS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICB2YXIgb3V0cHV0ID0gbnVtYmVyID09PSAxID8gJ2QnIDogbnVtYmVyICUgMTAgPT09IDIgPyAnbmEnIDogJ21oJztcbiAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNjb3R0aXNoIEdhZWxpYyBbZ2RdXG4vLyEgYXV0aG9yIDogSm9uIEFzaGRvd24gOiBodHRwczovL2dpdGh1Yi5jb20vam9uYXNoZG93blxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBtb250aHMgPSBbXG4gICAgICAgICdBbSBGYW9pbGxlYWNoJyxcbiAgICAgICAgJ0FuIEdlYXJyYW4nLFxuICAgICAgICAnQW0gTcOgcnQnLFxuICAgICAgICAnQW4gR2libGVhbicsXG4gICAgICAgICdBbiBDw6hpdGVhbicsXG4gICAgICAgICdBbiB0LcOSZ21oaW9zJyxcbiAgICAgICAgJ0FuIHQtSXVjaGFyJyxcbiAgICAgICAgJ0FuIEzDuW5hc3RhbCcsXG4gICAgICAgICdBbiB0LVN1bHRhaW4nLFxuICAgICAgICAnQW4gRMOgbWhhaXInLFxuICAgICAgICAnQW4gdC1TYW1oYWluJyxcbiAgICAgICAgJ0FuIETDuWJobGFjaGQnLFxuICAgIF0sXG4gICAgbW9udGhzU2hvcnQgPSBbXG4gICAgICAgICdGYW9pJyxcbiAgICAgICAgJ0dlYXInLFxuICAgICAgICAnTcOgcnQnLFxuICAgICAgICAnR2libCcsXG4gICAgICAgICdDw6hpdCcsXG4gICAgICAgICfDkmdtaCcsXG4gICAgICAgICdJdWNoJyxcbiAgICAgICAgJ0zDuW4nLFxuICAgICAgICAnU3VsdCcsXG4gICAgICAgICdEw6BtaCcsXG4gICAgICAgICdTYW1oJyxcbiAgICAgICAgJ0TDuWJoJyxcbiAgICBdLFxuICAgIHdlZWtkYXlzID0gW1xuICAgICAgICAnRGlkw7JtaG5haWNoJyxcbiAgICAgICAgJ0RpbHVhaW4nLFxuICAgICAgICAnRGltw6BpcnQnLFxuICAgICAgICAnRGljaWFkYWluJyxcbiAgICAgICAgJ0RpYXJkYW9pbicsXG4gICAgICAgICdEaWhhb2luZScsXG4gICAgICAgICdEaXNhdGhhaXJuZScsXG4gICAgXSxcbiAgICB3ZWVrZGF5c1Nob3J0ID0gWydEaWQnLCAnRGlsJywgJ0RpbScsICdEaWMnLCAnRGlhJywgJ0RpaCcsICdEaXMnXSxcbiAgICB3ZWVrZGF5c01pbiA9IFsnRMOyJywgJ0x1JywgJ03DoCcsICdDaScsICdBcicsICdIYScsICdTYSddO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdnZCcsIHtcbiAgICBtb250aHM6IG1vbnRocyxcbiAgICBtb250aHNTaG9ydDogbW9udGhzU2hvcnQsXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogd2Vla2RheXMsXG4gICAgd2Vla2RheXNTaG9ydDogd2Vla2RheXNTaG9ydCxcbiAgICB3ZWVrZGF5c01pbjogd2Vla2RheXNNaW4sXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tBbi1kaXVnaCBhaWddIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tBLW3DoGlyZWFjaCBhaWddIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthaWddIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tBbi1kw6ggYWlnXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbc2VvIGNoYWlkaF0gW2FpZ10gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2FubiBhbiAlcycsXG4gICAgICAgIHBhc3Q6ICdiaG8gY2hpb25uICVzJyxcbiAgICAgICAgczogJ2JlYWdhbiBkaW9nYW4nLFxuICAgICAgICBzczogJyVkIGRpb2dhbicsXG4gICAgICAgIG06ICdtaW9uYWlkJyxcbiAgICAgICAgbW06ICclZCBtaW9uYWlkZWFuJyxcbiAgICAgICAgaDogJ3VhaXInLFxuICAgICAgICBoaDogJyVkIHVhaXJlYW4nLFxuICAgICAgICBkOiAnbGF0aGEnLFxuICAgICAgICBkZDogJyVkIGxhdGhhJyxcbiAgICAgICAgTTogJ23DrG9zJyxcbiAgICAgICAgTU06ICclZCBtw6xvc2FuJyxcbiAgICAgICAgeTogJ2JsaWFkaG5hJyxcbiAgICAgICAgeXk6ICclZCBibGlhZGhuYScsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZHxuYXxtaCkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IG51bWJlciA9PT0gMSA/ICdkJyA6IG51bWJlciAlIDEwID09PSAyID8gJ25hJyA6ICdtaCc7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHYWxpY2lhbiBbZ2xdXG4vLyEgYXV0aG9yIDogSnVhbiBHLiBIdXJ0YWRvIDogaHR0cHM6Ly9naXRodWIuY29tL2p1YW5naHVydGFkb1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dsJywge1xuICAgIG1vbnRoczogJ3hhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194dcOxb194dWxsb19hZ29zdG9fc2V0ZW1icm9fb3V0dWJyb19ub3ZlbWJyb19kZWNlbWJybycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICd4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHXDsS5feHVsLl9hZ28uX3NldC5fb3V0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6ICdkb21pbmdvX2x1bnNfbWFydGVzX23DqXJjb3Jlc194b3Zlc192ZW5yZXNfc8OhYmFkbycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnZG9tLl9sdW4uX21hci5fbcOpci5feG92Ll92ZW4uX3PDoWIuJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnZG9fbHVfbWFfbcOpX3hvX3ZlX3PDoScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ1tob3hlICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ8OhcycgOiAnw6EnKSArICddIExUJztcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdbbWHDscOhICcgKyAodGhpcy5ob3VycygpICE9PSAxID8gJ8OhcycgOiAnw6EnKSArICddIExUJztcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnZGRkZCBbJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICdhJykgKyAnXSBMVCc7XG4gICAgICAgIH0sXG4gICAgICAgIGxhc3REYXk6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW29udGUgJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6EnIDogJ2EnKSArICddIExUJztcbiAgICAgICAgfSxcbiAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgJ1tvXSBkZGRkIFtwYXNhZG8gJyArICh0aGlzLmhvdXJzKCkgIT09IDEgPyAnw6FzJyA6ICdhJykgKyAnXSBMVCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICBpZiAoc3RyLmluZGV4T2YoJ3VuJykgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ24nICsgc3RyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdlbiAnICsgc3RyO1xuICAgICAgICB9LFxuICAgICAgICBwYXN0OiAnaGFpICVzJyxcbiAgICAgICAgczogJ3VucyBzZWd1bmRvcycsXG4gICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICBtOiAndW4gbWludXRvJyxcbiAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgaDogJ3VuaGEgaG9yYScsXG4gICAgICAgIGhoOiAnJWQgaG9yYXMnLFxuICAgICAgICBkOiAndW4gZMOtYScsXG4gICAgICAgIGRkOiAnJWQgZMOtYXMnLFxuICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgIHk6ICd1biBhbm8nLFxuICAgICAgICB5eTogJyVkIGFub3MnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLb25rYW5pIERldmFuYWdhcmkgc2NyaXB0IFtnb20tZGV2YV1cbi8vISBhdXRob3IgOiBUaGUgRGlzY292ZXJlciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9XaWtpRGlzY292ZXJlclxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgczogWyfgpKXgpYvgpKHgpK/gpL4g4KS44KWF4KSV4KSC4KSh4KS+4KSC4KSo4KWAJywgJ+CkpeCli+CkoeClhyDgpLjgpYXgpJXgpILgpKEnXSxcbiAgICAgICAgc3M6IFtudW1iZXIgKyAnIOCkuOClheCkleCkguCkoeCkvuCkguCkqOClgCcsIG51bWJlciArICcg4KS44KWF4KSV4KSC4KShJ10sXG4gICAgICAgIG06IFsn4KSP4KSV4KS+IOCkruCkv+Cko+Ckn+CkvuCkqCcsICfgpI/gpJUg4KSu4KS/4KSo4KWC4KSfJ10sXG4gICAgICAgIG1tOiBbbnVtYmVyICsgJyDgpK7gpL/gpKPgpJ/gpL7gpILgpKjgpYAnLCBudW1iZXIgKyAnIOCkruCkv+Cko+Ckn+CkvuCkgiddLFxuICAgICAgICBoOiBbJ+Ckj+CkleCkviDgpLXgpLDgpL7gpKgnLCAn4KSP4KSVIOCkteCksCddLFxuICAgICAgICBoaDogW251bWJlciArICcg4KS14KSw4KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpLXgpLDgpL7gpIInXSxcbiAgICAgICAgZDogWyfgpI/gpJXgpL4g4KSm4KS/4KS44KS+4KSoJywgJ+Ckj+CklSDgpKbgpYDgpLgnXSxcbiAgICAgICAgZGQ6IFtudW1iZXIgKyAnIOCkpuCkv+CkuOCkvuCkguCkqOClgCcsIG51bWJlciArICcg4KSm4KWA4KS4J10sXG4gICAgICAgIE06IFsn4KSP4KSV4KS+IOCkruCljeCkueCkr+CkqOCljeCkr+CkvuCkqCcsICfgpI/gpJUg4KSu4KWN4KS54KSv4KSo4KWLJ10sXG4gICAgICAgIE1NOiBbbnVtYmVyICsgJyDgpK7gpY3gpLngpK/gpKjgpY3gpK/gpL7gpKjgpYAnLCBudW1iZXIgKyAnIOCkruCljeCkueCkr+CkqOClhyddLFxuICAgICAgICB5OiBbJ+Ckj+CkleCkviDgpLXgpLDgpY3gpLjgpL7gpKgnLCAn4KSP4KSVIOCkteCksOCljeCkuCddLFxuICAgICAgICB5eTogW251bWJlciArICcg4KS14KSw4KWN4KS44KS+4KSC4KSo4KWAJywgbnVtYmVyICsgJyDgpLXgpLDgpY3gpLjgpL7gpIInXSxcbiAgICB9O1xuICAgIHJldHVybiBpc0Z1dHVyZSA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2dvbS1kZXZhJywge1xuICAgIG1vbnRoczoge1xuICAgICAgICBzdGFuZGFsb25lOiAn4KSc4KS+4KSo4KWH4KS14KS+4KSw4KWAX+Ckq+Clh+CkrOCljeCksOClgeCkteCkvuCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSP4KSq4KWN4KSw4KWA4KSyX+CkruClh1/gpJzgpYLgpKhf4KSc4KWB4KSy4KSvX+CkkeCkl+CkuOCljeCkn1/gpLjgpKrgpY3gpJ/gpYfgpILgpKzgpLBf4KSR4KSV4KWN4KSf4KWL4KSs4KSwX+CkqOCli+CkteCljeCkueClh+CkguCkrOCksF/gpKHgpL/gpLjgpYfgpILgpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGZvcm1hdDogJ+CknOCkvuCkqOClh+CkteCkvuCksOClgOCkmuCljeCkr+Ckvl/gpKvgpYfgpKzgpY3gpLDgpYHgpLXgpL7gpLDgpYDgpJrgpY3gpK/gpL5f4KSu4KS+4KSw4KWN4KSa4KS+4KSa4KWN4KSv4KS+X+Ckj+CkquCljeCksOClgOCksuCkvuCkmuCljeCkr+Ckvl/gpK7gpYfgpK/gpL7gpJrgpY3gpK/gpL5f4KSc4KWC4KSo4KS+4KSa4KWN4KSv4KS+X+CknOClgeCksuCkr+CkvuCkmuCljeCkr+Ckvl/gpJHgpJfgpLjgpY3gpJ/gpL7gpJrgpY3gpK/gpL5f4KS44KSq4KWN4KSf4KWH4KSC4KSs4KSw4KS+4KSa4KWN4KSv4KS+X+CkkeCkleCljeCkn+Cli+CkrOCksOCkvuCkmuCljeCkr+Ckvl/gpKjgpYvgpLXgpY3gpLngpYfgpILgpKzgpLDgpL7gpJrgpY3gpK/gpL5f4KSh4KS/4KS44KWH4KSC4KSs4KSw4KS+4KSa4KWN4KSv4KS+Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBpc0Zvcm1hdDogL01NTU0oXFxzKStEW29EXT8vLFxuICAgIH0sXG4gICAgbW9udGhzU2hvcnQ6ICfgpJzgpL7gpKjgpYcuX+Ckq+Clh+CkrOCljeCksOClgS5f4KSu4KS+4KSw4KWN4KSaX+Ckj+CkquCljeCksOClgC5f4KSu4KWHX+CknOClguCkqF/gpJzgpYHgpLIuX+CkkeCkly5f4KS44KSq4KWN4KSf4KWH4KSCLl/gpJHgpJXgpY3gpJ/gpYsuX+CkqOCli+CkteCljeCkueClh+Ckgi5f4KSh4KS/4KS44KWH4KSCLicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogJ+CkhuCkr+CkpOCkvuCksF/gpLjgpYvgpK7gpL7gpLBf4KSu4KSC4KSX4KSz4KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpKzgpL/gpLDgpYfgpLjgpY3gpKTgpL7gpLBf4KS44KWB4KSV4KWN4KSw4KS+4KSwX+CktuClh+CkqOCkteCkvuCksCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn4KSG4KSv4KSkLl/gpLjgpYvgpK4uX+CkruCkguCkl+Cksy5f4KSs4KWB4KSnLl/gpKzgpY3gpLDgpYfgpLjgpY3gpKQuX+CkuOClgeCkleCljeCksC5f4KS24KWH4KSoLicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ+Ckhl/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpKzgpY3gpLDgpYdf4KS44KWBX+CktuClhycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdBIGg6bW0gW+CkteCkvuCknOCkpOCkvuCkgl0nLFxuICAgICAgICBMVFM6ICdBIGg6bW06c3MgW+CkteCkvuCknOCkpOCkvuCkgl0nLFxuICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBBIGg6bW0gW+CkteCkvuCknOCkpOCkvuCkgl0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdJyxcbiAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFvgpLXgpL7gpJzgpKTgpL7gpIJdJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdb4KSG4KSv4KScXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb4KSr4KS+4KSy4KWN4KSv4KS+4KSCXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnW+Ckq+ClgeCkoeCksuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4KSV4KS+4KSyXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW+Ckq+CkvuCkn+CksuCli10gZGRkZFssXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXMnLFxuICAgICAgICBwYXN0OiAnJXMg4KSG4KSm4KWA4KSCJyxcbiAgICAgICAgczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgc3M6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIG1tOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBoaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjgpLXgpYfgpLApLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgIC8vIHRoZSBvcmRpbmFsICfgpLXgpYfgpLAnIG9ubHkgYXBwbGllcyB0byBkYXkgb2YgdGhlIG1vbnRoXG4gICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CkteClh+CksCc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICBjYXNlICdRJzpcbiAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrXG4gICAgICAgIGRveTogMywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyICg3ICsgMCAtIDQpXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv4KSw4KS+4KSk4KWAfOCkuOCkleCkvuCks+ClgOCkgnzgpKbgpKjgpKrgpL7gpLDgpL7gpIJ84KS44KS+4KSC4KSc4KWHLyxcbiAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CksOCkvuCkpOClgCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpJXgpL7gpLPgpYDgpIInKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkpuCkqOCkquCkvuCksOCkvuCkgicpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyID4gMTIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KS44KS+4KSC4KSc4KWHJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOClgCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+CkuOCkleCkvuCks+ClgOCkgic7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICByZXR1cm4gJ+CkpuCkqOCkquCkvuCksOCkvuCkgic7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+CkuOCkvuCkguCknOClhyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ+CksOCkvuCkpOClgCc7XG4gICAgICAgIH1cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS29ua2FuaSBMYXRpbiBzY3JpcHQgW2dvbS1sYXRuXVxuLy8hIGF1dGhvciA6IFRoZSBEaXNjb3ZlcmVyIDogaHR0cHM6Ly9naXRodWIuY29tL1dpa2lEaXNjb3ZlcmVyXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICBzOiBbJ3Rob2RkZWEgc2Vrb25kYW1uaScsICd0aG9kZGUgc2Vrb25kJ10sXG4gICAgICAgIHNzOiBbbnVtYmVyICsgJyBzZWtvbmRhbW5pJywgbnVtYmVyICsgJyBzZWtvbmQnXSxcbiAgICAgICAgbTogWydla2EgbWludGFuJywgJ2VrIG1pbnV0J10sXG4gICAgICAgIG1tOiBbbnVtYmVyICsgJyBtaW50YW1uaScsIG51bWJlciArICcgbWludGFtJ10sXG4gICAgICAgIGg6IFsnZWthIHZvcmFuJywgJ2VrIHZvciddLFxuICAgICAgICBoaDogW251bWJlciArICcgdm9yYW1uaScsIG51bWJlciArICcgdm9yYW0nXSxcbiAgICAgICAgZDogWydla2EgZGlzYW4nLCAnZWsgZGlzJ10sXG4gICAgICAgIGRkOiBbbnVtYmVyICsgJyBkaXNhbW5pJywgbnVtYmVyICsgJyBkaXMnXSxcbiAgICAgICAgTTogWydla2EgbWhvaW5lYW4nLCAnZWsgbWhvaW5vJ10sXG4gICAgICAgIE1NOiBbbnVtYmVyICsgJyBtaG9pbmVhbW5pJywgbnVtYmVyICsgJyBtaG9pbmUnXSxcbiAgICAgICAgeTogWydla2Egdm9yc2FuJywgJ2VrIHZvcm9zJ10sXG4gICAgICAgIHl5OiBbbnVtYmVyICsgJyB2b3JzYW1uaScsIG51bWJlciArICcgdm9yc2FtJ10sXG4gICAgfTtcbiAgICByZXR1cm4gaXNGdXR1cmUgPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdnb20tbGF0bicsIHtcbiAgICBtb250aHM6IHtcbiAgICAgICAgc3RhbmRhbG9uZTogJ0phbmVyX0ZlYnJlcl9NYXJzX0FicmlsX01haV9KdW5fSnVsYWlfQWdvc3RfU2V0ZW1icl9PdHVicl9Ob3ZlbWJyX0RlemVtYnInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGZvcm1hdDogJ0phbmVyYWNoZWFfRmVicmVyYWNoZWFfTWFyc2FjaGVhX0FicmlsYWNoZWFfTWFpYWNoZWFfSnVuYWNoZWFfSnVsYWlhY2hlYV9BZ29zdGFjaGVhX1NldGVtYnJhY2hlYV9PdHVicmFjaGVhX05vdmVtYnJhY2hlYV9EZXplbWJyYWNoZWEnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGlzRm9ybWF0OiAvTU1NTShcXHMpK0Rbb0RdPy8sXG4gICAgfSxcbiAgICBtb250aHNTaG9ydDogJ0phbi5fRmViLl9NYXJzX0Fici5fTWFpX0p1bl9KdWwuX0Fnby5fU2V0Ll9PdHUuX05vdi5fRGV6Licuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogXCJBaXRhcl9Tb21hcl9Nb25nbGxhcl9CdWRodmFyX0JpcmVzdGFyX1N1a3Jhcl9Tb24ndmFyXCIuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnQWl0Ll9Tb20uX01vbi5fQnVkLl9CcmUuX1N1ay5fU29uLicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ0FpX1NtX01vX0J1X0JyX1N1X1NuJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0EgaDptbSBbdmF6dGFdJyxcbiAgICAgICAgTFRTOiAnQSBoOm1tOnNzIFt2YXp0YV0nLFxuICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBBIGg6bW0gW3ZhenRhXScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW3ZhenRhXScsXG4gICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVksIEEgaDptbSBbdmF6dGFdJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbQWl6XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbRmFsZWFtXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnW0Z1ZGRsb10gZGRkZFssXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbS2FsXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW0ZhdHRsb10gZGRkZFssXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWRpbScsXG4gICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oZXIpLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgIC8vIHRoZSBvcmRpbmFsICdlcicgb25seSBhcHBsaWVzIHRvIGRheSBvZiB0aGUgbW9udGhcbiAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnZXInO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgY2FzZSAnUSc6XG4gICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vla1xuICAgICAgICBkb3k6IDMsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhciAoNyArIDAgLSA0KVxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL3JhdGl8c29rYWxsaW18ZG9ucGFyYW18c2FuamUvLFxuICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lcmlkaWVtID09PSAncmF0aScpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb2thbGxpbScpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnZG9ucGFyYW0nKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA+IDEyID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3NhbmplJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ3JhdGknO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuICdzb2thbGxpbSc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE2KSB7XG4gICAgICAgICAgICByZXR1cm4gJ2RvbnBhcmFtJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgIHJldHVybiAnc2FuamUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdyYXRpJztcbiAgICAgICAgfVxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHdWphcmF0aSBbZ3VdXG4vLyEgYXV0aG9yIDogS2F1c2hpayBUaGFua2kgOiBodHRwczovL2dpdGh1Yi5jb20vS2F1c2hpazE5ODdcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAxOiAn4KunJyxcbiAgICAgICAgMjogJ+CrqCcsXG4gICAgICAgIDM6ICfgq6knLFxuICAgICAgICA0OiAn4KuqJyxcbiAgICAgICAgNTogJ+CrqycsXG4gICAgICAgIDY6ICfgq6wnLFxuICAgICAgICA3OiAn4KutJyxcbiAgICAgICAgODogJ+CrricsXG4gICAgICAgIDk6ICfgq68nLFxuICAgICAgICAwOiAn4KumJyxcbiAgICB9LFxuICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ+Crpyc6ICcxJyxcbiAgICAgICAgJ+CrqCc6ICcyJyxcbiAgICAgICAgJ+CrqSc6ICczJyxcbiAgICAgICAgJ+Crqic6ICc0JyxcbiAgICAgICAgJ+Crqyc6ICc1JyxcbiAgICAgICAgJ+CrrCc6ICc2JyxcbiAgICAgICAgJ+CrrSc6ICc3JyxcbiAgICAgICAgJ+Crric6ICc4JyxcbiAgICAgICAgJ+Crryc6ICc5JyxcbiAgICAgICAgJ+Crpic6ICcwJyxcbiAgICB9O1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdndScsIHtcbiAgICBtb250aHM6ICfgqpzgqr7gqqjgq43gqq/gq4HgqobgqrDgq4Bf4Kqr4KuH4Kqs4KuN4Kqw4KuB4KqG4Kqw4KuAX+CqruCqvuCqsOCrjeCqml/gqo/gqqrgq43gqrDgqr/gqrJf4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr7gqohf4KqR4KqX4Kq44KuN4KqfX+CquOCqquCrjeCqn+Crh+CqruCrjeCqrOCqsF/gqpHgqpXgq43gqp/gq43gqqzgqrBf4Kqo4Kq14KuH4Kqu4KuN4Kqs4KqwX+CqoeCqv+CquOCrh+CqruCrjeCqrOCqsCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICfgqpzgqr7gqqjgq43gqq/gq4EuX+Cqq+Crh+CqrOCrjeCqsOCrgS5f4Kqu4Kq+4Kqw4KuN4KqaX+Cqj+CqquCrjeCqsOCqvy5f4Kqu4KuHX+CqnOCrguCqqF/gqpzgq4HgqrLgqr4uX+CqkeCqly5f4Kq44Kqq4KuN4Kqf4KuHLl/gqpHgqpXgq43gqp/gq40uX+CqqOCqteCrhy5f4Kqh4Kq/4Kq44KuHLicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogJ+CqsOCqteCqv+CqteCqvuCqsF/gqrjgq4vgqq7gqrXgqr7gqrBf4Kqu4KqC4KqX4Kqz4Kq14Kq+4KqwX+CqrOCrgeCqp+CrjeCqteCqvuCqsF/gqpfgq4HgqrDgq4HgqrXgqr7gqrBf4Kq24KuB4KqV4KuN4Kqw4Kq14Kq+4KqwX+CqtuCqqOCqv+CqteCqvuCqsCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ+CqsOCqteCqv1/gqrjgq4vgqq5f4Kqu4KqC4KqX4KqzX+CqrOCrgeCqp+CrjV/gqpfgq4HgqrDgq4Ff4Kq24KuB4KqV4KuN4KqwX+CqtuCqqOCqvycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ+CqsF/gqrjgq4tf4Kqu4KqCX+CqrOCrgV/gqpfgq4Ff4Kq24KuBX+Cqticuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0EgaDptbSDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4Kq14Kq+4KqX4KuN4Kqv4KuHJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqrXgqr7gqpfgq43gqq/gq4cnLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vgqobgqpxdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vgqpXgqr7gqrLgq4ddIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4KqX4KqH4KqV4Kq+4Kqy4KuHXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW+CqquCqvuCqm+CqsuCqvl0gZGRkZCwgTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVzIOCqruCqvicsXG4gICAgICAgIHBhc3Q6ICclcyDgqqrgqrngq4fgqrLgqr4nLFxuICAgICAgICBzOiAn4KqF4Kqu4KuB4KqVIOCqquCqs+CriycsXG4gICAgICAgIHNzOiAnJWQg4Kq44KuH4KqV4KqC4KqhJyxcbiAgICAgICAgbTogJ+Cqj+CqlSDgqq7gqr/gqqjgqr/gqp8nLFxuICAgICAgICBtbTogJyVkIOCqruCqv+CqqOCqv+CqnycsXG4gICAgICAgIGg6ICfgqo/gqpUg4KqV4Kqy4Kq+4KqVJyxcbiAgICAgICAgaGg6ICclZCDgqpXgqrLgqr7gqpUnLFxuICAgICAgICBkOiAn4KqP4KqVIOCqpuCqv+CqteCquCcsXG4gICAgICAgIGRkOiAnJWQg4Kqm4Kq/4Kq14Kq4JyxcbiAgICAgICAgTTogJ+Cqj+CqlSDgqq7gqrngqr/gqqjgq4snLFxuICAgICAgICBNTTogJyVkIOCqruCqueCqv+CqqOCriycsXG4gICAgICAgIHk6ICfgqo/gqpUg4Kq14Kqw4KuN4Kq3JyxcbiAgICAgICAgeXk6ICclZCDgqrXgqrDgq43gqrcnLFxuICAgIH0sXG4gICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Kun4Kuo4Kup4Kuq4Kur4Kus4Kut4Kuu4Kuv4KumXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICAvLyBHdWphcmF0aSBub3RhdGlvbiBmb3IgbWVyaWRpZW1zIGFyZSBxdWl0ZSBmdXp6eSBpbiBwcmFjdGljZS4gV2hpbGUgdGhlcmUgZXhpc3RzXG4gICAgLy8gYSByaWdpZCBub3Rpb24gb2YgYSAnUGFoYXInIGl0IGlzIG5vdCB1c2VkIGFzIHJpZ2lkbHkgaW4gbW9kZXJuIEd1amFyYXRpLlxuICAgIG1lcmlkaWVtUGFyc2U6IC/gqrDgqr7gqqR84Kqs4Kqq4KuL4KqwfOCquOCqteCqvuCqsHzgqrjgqr7gqoLgqpwvLFxuICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4Kqw4Kq+4KqkJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CquOCqteCqvuCqsCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kqs4Kqq4KuL4KqwJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4Kq44Kq+4KqC4KqcJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ+CqsOCqvuCqpCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+CquOCqteCqvuCqsCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICByZXR1cm4gJ+CqrOCqquCri+CqsCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+CquOCqvuCqguCqnCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ+CqsOCqvuCqpCc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEhlYnJldyBbaGVdXG4vLyEgYXV0aG9yIDogVG9tZXIgQ29oZW4gOiBodHRwczovL2dpdGh1Yi5jb20vdG9tZXJcbi8vISBhdXRob3IgOiBNb3NoZSBTaW1hbnRvdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9EZXZlbG9wbWVudElMXG4vLyEgYXV0aG9yIDogVGFsIEF0ZXIgOiBodHRwczovL2dpdGh1Yi5jb20vVGFsQXRlclxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2hlJywge1xuICAgIG1vbnRoczogJ9eZ16DXldeQ16hf16TXkdeo15XXkNeoX9ee16jXpV/XkNek16jXmdecX9ee15DXmV/XmdeV16DXmV/XmdeV15zXmV/XkNeV15LXldeh15hf16HXpNeY157XkdeoX9eQ15XXp9eY15XXkdeoX9eg15XXkdee15HXqF/Xk9em157XkdeoJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ9eZ16DXldezX9ek15HXqNezX9ee16jXpV/XkNek16jXs1/XnteQ15lf15nXldeg15lf15nXldec15lf15DXldeS17Nf16HXpNeY17Nf15DXlden17Nf16DXldeR17Nf15PXptee17MnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzOiAn16jXkNep15XXn1/Xqdeg15lf16nXnNeZ16nXmV/XqNeR15nXoteZX9eX157Xmdep15lf16nXmdep15lf16nXkdeqJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfXkNezX9eR17Nf15LXs1/Xk9ezX9eU17Nf15XXs1/XqdezJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn15Bf15Ff15Jf15Nf15Rf15Vf16knLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgW9eRXU1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgW9eRXU1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIFvXkV1NTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBsOiAnRC9NL1lZWVknLFxuICAgICAgICBsbDogJ0QgTU1NIFlZWVknLFxuICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgbGxsbDogJ2RkZCwgRCBNTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW9eU15nXldedINeR1r5dTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW9ee15fXqCDXkda+XUxUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvXkdep16LXlF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW9eQ16rXnteV15wg15HWvl1MVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW9eR15nXldedXSBkZGRkIFvXlNeQ15fXqNeV158g15HXqdei15RdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfXkdei15XXkyAlcycsXG4gICAgICAgIHBhc3Q6ICfXnNek16DXmSAlcycsXG4gICAgICAgIHM6ICfXnteh16TXqCDXqdeg15nXldeqJyxcbiAgICAgICAgc3M6ICclZCDXqdeg15nXldeqJyxcbiAgICAgICAgbTogJ9eT16fXlCcsXG4gICAgICAgIG1tOiAnJWQg15PXp9eV16onLFxuICAgICAgICBoOiAn16nXoteUJyxcbiAgICAgICAgaGg6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9ep16LXqteZ15nXnSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdei15XXqic7XG4gICAgICAgIH0sXG4gICAgICAgIGQ6ICfXmdeV150nLFxuICAgICAgICBkZDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn15nXldee15nXmdedJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINeZ157XmdedJztcbiAgICAgICAgfSxcbiAgICAgICAgTTogJ9eX15XXk9epJyxcbiAgICAgICAgTU06IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ9eX15XXk9ep15nXmdedJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINeX15XXk9ep15nXnSc7XG4gICAgICAgIH0sXG4gICAgICAgIHk6ICfXqdeg15QnLFxuICAgICAgICB5eTogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMikge1xuICAgICAgICAgICAgICAgIHJldHVybiAn16nXoNeq15nXmdedJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyICUgMTAgPT09IDAgJiYgbnVtYmVyICE9PSAxMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnINep16DXlCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDXqdeg15nXnSc7XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv15DXl9eUXCLXpnzXnNek16DXlFwi16Z815DXl9eo15kg15TXpteU16jXmdeZ151815zXpNeg15kg15TXpteU16jXmdeZ151815zXpNeg15XXqiDXkdeV16fXqHzXkdeR15XXp9eofNeR16LXqNeRL2ksXG4gICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAvXijXkNeX15RcItemfNeQ15fXqNeZINeU16bXlNeo15nXmdedfNeR16LXqNeRKSQvLnRlc3QoaW5wdXQpO1xuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPCA1KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9ec16TXoNeV16og15HXlden16gnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgcmV0dXJuICfXkdeR15XXp9eoJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ9ec16TXoNeUXCLXpicgOiAn15zXpNeg15kg15TXpteU16jXmdeZ150nO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxOCkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAn15DXl9eUXCLXpicgOiAn15DXl9eo15kg15TXpteU16jXmdeZ150nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfXkdei16jXkSc7XG4gICAgICAgIH1cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSGluZGkgW2hpXVxuLy8hIGF1dGhvciA6IE1heWFuayBTaW5naGFsIDogaHR0cHM6Ly9naXRodWIuY29tL21heWFua3NpbmdoYWxcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAxOiAn4KWnJyxcbiAgICAgICAgMjogJ+ClqCcsXG4gICAgICAgIDM6ICfgpaknLFxuICAgICAgICA0OiAn4KWqJyxcbiAgICAgICAgNTogJ+ClqycsXG4gICAgICAgIDY6ICfgpawnLFxuICAgICAgICA3OiAn4KWtJyxcbiAgICAgICAgODogJ+ClricsXG4gICAgICAgIDk6ICfgpa8nLFxuICAgICAgICAwOiAn4KWmJyxcbiAgICB9LFxuICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ+Clpyc6ICcxJyxcbiAgICAgICAgJ+ClqCc6ICcyJyxcbiAgICAgICAgJ+ClqSc6ICczJyxcbiAgICAgICAgJ+Clqic6ICc0JyxcbiAgICAgICAgJ+Clqyc6ICc1JyxcbiAgICAgICAgJ+ClrCc6ICc2JyxcbiAgICAgICAgJ+ClrSc6ICc3JyxcbiAgICAgICAgJ+Clric6ICc4JyxcbiAgICAgICAgJ+Clryc6ICc5JyxcbiAgICAgICAgJ+Clpic6ICcwJyxcbiAgICB9LFxuICAgIG1vbnRoc1BhcnNlID0gW1xuICAgICAgICAvXuCknOCkqC9pLFxuICAgICAgICAvXuCkq+CkvOCksHzgpKvgpLAvaSxcbiAgICAgICAgL17gpK7gpL7gpLDgpY3gpJovaSxcbiAgICAgICAgL17gpIXgpKrgpY3gpLDgpYgvaSxcbiAgICAgICAgL17gpK7gpIgvaSxcbiAgICAgICAgL17gpJzgpYLgpKgvaSxcbiAgICAgICAgL17gpJzgpYHgpLIvaSxcbiAgICAgICAgL17gpIXgpJcvaSxcbiAgICAgICAgL17gpLjgpL/gpKTgpIJ84KS44KS/4KSkL2ksXG4gICAgICAgIC9e4KSF4KSV4KWN4KSf4KWCL2ksXG4gICAgICAgIC9e4KSo4KS1fOCkqOCkteCkgi9pLFxuICAgICAgICAvXuCkpuCkv+CkuOCkgnzgpKbgpL/gpLgvaSxcbiAgICBdLFxuICAgIHNob3J0TW9udGhzUGFyc2UgPSBbXG4gICAgICAgIC9e4KSc4KSoL2ksXG4gICAgICAgIC9e4KSr4KS84KSwL2ksXG4gICAgICAgIC9e4KSu4KS+4KSw4KWN4KSaL2ksXG4gICAgICAgIC9e4KSF4KSq4KWN4KSw4KWIL2ksXG4gICAgICAgIC9e4KSu4KSIL2ksXG4gICAgICAgIC9e4KSc4KWC4KSoL2ksXG4gICAgICAgIC9e4KSc4KWB4KSyL2ksXG4gICAgICAgIC9e4KSF4KSXL2ksXG4gICAgICAgIC9e4KS44KS/4KSkL2ksXG4gICAgICAgIC9e4KSF4KSV4KWN4KSf4KWCL2ksXG4gICAgICAgIC9e4KSo4KS1L2ksXG4gICAgICAgIC9e4KSm4KS/4KS4L2ksXG4gICAgXTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnaGknLCB7XG4gICAgbW9udGhzOiB7XG4gICAgICAgIGZvcm1hdDogJ+CknOCkqOCkteCksOClgF/gpKvgpLzgpLDgpLXgpLDgpYBf4KSu4KS+4KSw4KWN4KSaX+CkheCkquCljeCksOCliOCksl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksuCkvuCkiF/gpIXgpJfgpLjgpY3gpKRf4KS44KS/4KSk4KSu4KWN4KSs4KSwX+CkheCkleCljeCkn+ClguCkrOCksF/gpKjgpLXgpK7gpY3gpKzgpLBf4KSm4KS/4KS44KSu4KWN4KSs4KSwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBzdGFuZGFsb25lOiAn4KSc4KSo4KS14KSw4KWAX+Ckq+CksOCkteCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KWI4KSyX+CkruCkiF/gpJzgpYLgpKhf4KSc4KWB4KSy4KS+4KSIX+CkheCkl+CkuOCljeCkpF/gpLjgpL/gpKTgpILgpKzgpLBf4KSF4KSV4KWN4KSf4KWC4KSs4KSwX+CkqOCkteCkguCkrOCksF/gpKbgpL/gpLjgpILgpKzgpLAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgfSxcbiAgICBtb250aHNTaG9ydDogJ+CknOCkqC5f4KSr4KS84KSwLl/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KWILl/gpK7gpIhf4KSc4KWC4KSoX+CknOClgeCksi5f4KSF4KSXLl/gpLjgpL/gpKQuX+CkheCkleCljeCkn+Clgi5f4KSo4KS1Ll/gpKbgpL/gpLguJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5czogJ+CksOCkteCkv+CkteCkvuCksF/gpLjgpYvgpK7gpLXgpL7gpLBf4KSu4KSC4KSX4KSy4KS14KS+4KSwX+CkrOClgeCkp+CkteCkvuCksF/gpJfgpYHgpLDgpYLgpLXgpL7gpLBf4KS24KWB4KSV4KWN4KSw4KS14KS+4KSwX+CktuCkqOCkv+CkteCkvuCksCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn4KSw4KS14KS/X+CkuOCli+Ckrl/gpK7gpILgpJfgpLJf4KSs4KWB4KSnX+Ckl+ClgeCksOClgl/gpLbgpYHgpJXgpY3gpLBf4KS24KSo4KS/Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn4KSwX+CkuOCli1/gpK7gpIJf4KSs4KWBX+Ckl+ClgV/gpLbgpYFf4KS2Jy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnQSBoOm1tIOCkrOCknOClhycsXG4gICAgICAgIExUUzogJ0EgaDptbTpzcyDgpKzgpJzgpYcnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSwgQSBoOm1tIOCkrOCknOClhycsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIOCkrOCknOClhycsXG4gICAgfSxcblxuICAgIG1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICBsb25nTW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgIHNob3J0TW9udGhzUGFyc2U6IHNob3J0TW9udGhzUGFyc2UsXG5cbiAgICBtb250aHNSZWdleDogL14o4KSc4KSo4KS14KSw4KWAfOCknOCkqFxcLj984KSr4KS84KSw4KS14KSw4KWAfOCkq+CksOCkteCksOClgHzgpKvgpLzgpLBcXC4/fOCkruCkvuCksOCljeCkmj984KSF4KSq4KWN4KSw4KWI4KSyfOCkheCkquCljeCksOCliFxcLj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCksuCkvuCkiHzgpJzgpYHgpLJcXC4/fOCkheCkl+CkuOCljeCkpHzgpIXgpJdcXC4/fOCkuOCkv+CkpOCkruCljeCkrOCksHzgpLjgpL/gpKTgpILgpKzgpLB84KS44KS/4KSkXFwuP3zgpIXgpJXgpY3gpJ/gpYLgpKzgpLB84KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLXgpK7gpY3gpKzgpLB84KSo4KS14KSC4KSs4KSwfOCkqOCktVxcLj984KSm4KS/4KS44KSu4KWN4KSs4KSwfOCkpuCkv+CkuOCkguCkrOCksHzgpKbgpL/gpLhcXC4/KS9pLFxuXG4gICAgbW9udGhzU2hvcnRSZWdleDogL14o4KSc4KSo4KS14KSw4KWAfOCknOCkqFxcLj984KSr4KS84KSw4KS14KSw4KWAfOCkq+CksOCkteCksOClgHzgpKvgpLzgpLBcXC4/fOCkruCkvuCksOCljeCkmj984KSF4KSq4KWN4KSw4KWI4KSyfOCkheCkquCljeCksOCliFxcLj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCksuCkvuCkiHzgpJzgpYHgpLJcXC4/fOCkheCkl+CkuOCljeCkpHzgpIXgpJdcXC4/fOCkuOCkv+CkpOCkruCljeCkrOCksHzgpLjgpL/gpKTgpILgpKzgpLB84KS44KS/4KSkXFwuP3zgpIXgpJXgpY3gpJ/gpYLgpKzgpLB84KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLXgpK7gpY3gpKzgpLB84KSo4KS14KSC4KSs4KSwfOCkqOCktVxcLj984KSm4KS/4KS44KSu4KWN4KSs4KSwfOCkpuCkv+CkuOCkguCkrOCksHzgpKbgpL/gpLhcXC4/KS9pLFxuXG4gICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKOCknOCkqOCkteCksOClgD984KSr4KS84KSw4KS14KSw4KWAfOCkq+CksOCkteCksOClgD984KSu4KS+4KSw4KWN4KSaP3zgpIXgpKrgpY3gpLDgpYjgpLI/fOCkruCkiD984KSc4KWC4KSoP3zgpJzgpYHgpLLgpL7gpIg/fOCkheCkl+CkuOCljeCkpD984KS44KS/4KSk4KSu4KWN4KSs4KSwfOCkuOCkv+CkpOCkguCkrOCksHzgpLjgpL/gpKQ/XFwuP3zgpIXgpJXgpY3gpJ/gpYLgpKzgpLB84KSF4KSV4KWN4KSf4KWCXFwuP3zgpKjgpLXgpK7gpY3gpKzgpLB84KSo4KS14KSC4KSs4KSwP3zgpKbgpL/gpLjgpK7gpY3gpKzgpLB84KSm4KS/4KS44KSC4KSs4KSwPykvaSxcblxuICAgIG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IC9eKOCknOCkqFxcLj984KSr4KS84KSwXFwuP3zgpK7gpL7gpLDgpY3gpJo/fOCkheCkquCljeCksOCliFxcLj984KSu4KSIP3zgpJzgpYLgpKg/fOCknOClgeCkslxcLj984KSF4KSXXFwuP3zgpLjgpL/gpKRcXC4/fOCkheCkleCljeCkn+ClglxcLj984KSo4KS1XFwuP3zgpKbgpL/gpLhcXC4/KS9pLFxuXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vgpJXgpLJdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4KSV4KSyXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW+CkquCkv+Ckm+CksuClh10gZGRkZCwgTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVzIOCkruClh+CkgicsXG4gICAgICAgIHBhc3Q6ICclcyDgpKrgpLngpLLgpYcnLFxuICAgICAgICBzOiAn4KSV4KWB4KSbIOCkueClgCDgpJXgpY3gpLfgpKMnLFxuICAgICAgICBzczogJyVkIOCkuOClh+CkleCkguCkoScsXG4gICAgICAgIG06ICfgpI/gpJUg4KSu4KS/4KSo4KSfJyxcbiAgICAgICAgbW06ICclZCDgpK7gpL/gpKjgpJ8nLFxuICAgICAgICBoOiAn4KSP4KSVIOCkmOCkguCkn+CkvicsXG4gICAgICAgIGhoOiAnJWQg4KSY4KSC4KSf4KWHJyxcbiAgICAgICAgZDogJ+Ckj+CklSDgpKbgpL/gpKgnLFxuICAgICAgICBkZDogJyVkIOCkpuCkv+CkqCcsXG4gICAgICAgIE06ICfgpI/gpJUg4KSu4KS54KWA4KSo4KWHJyxcbiAgICAgICAgTU06ICclZCDgpK7gpLngpYDgpKjgpYcnLFxuICAgICAgICB5OiAn4KSP4KSVIOCkteCksOCljeCktycsXG4gICAgICAgIHl5OiAnJWQg4KS14KSw4KWN4KS3JyxcbiAgICB9LFxuICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgLy8gSGluZGkgbm90YXRpb24gZm9yIG1lcmlkaWVtcyBhcmUgcXVpdGUgZnV6enkgaW4gcHJhY3RpY2UuIFdoaWxlIHRoZXJlIGV4aXN0c1xuICAgIC8vIGEgcmlnaWQgbm90aW9uIG9mIGEgJ1BhaGFyJyBpdCBpcyBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBIaW5kaS5cbiAgICBtZXJpZGllbVBhcnNlOiAv4KSw4KS+4KSkfOCkuOClgeCkrOCkuXzgpKbgpYvgpKrgpLngpLB84KS24KS+4KSuLyxcbiAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CksOCkvuCkpCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpYHgpKzgpLknKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CkpuCli+CkquCkueCksCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CktuCkvuCkricpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKQnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgcmV0dXJuICfgpLjgpYHgpKzgpLknO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgcmV0dXJuICfgpKbgpYvgpKrgpLngpLAnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgcmV0dXJuICfgpLbgpL7gpK4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKQnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDcm9hdGlhbiBbaHJdXG4vLyEgYXV0aG9yIDogQm9qYW4gTWFya292acSHIDogaHR0cHM6Ly9naXRodWIuY29tL2JtYXJrb3ZpY1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2VrdW5kYSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRlJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdzZWt1bmRpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnamVkbmEgbWludXRhJyA6ICdqZWRuZSBtaW51dGUnO1xuICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIgfHwgbnVtYmVyID09PSAzIHx8IG51bWJlciA9PT0gNCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnbWludXRlJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtaW51dGEnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdqZWRhbiBzYXQnIDogJ2plZG5vZyBzYXRhJztcbiAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnc2F0JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyIHx8IG51bWJlciA9PT0gMyB8fCBudW1iZXIgPT09IDQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGEnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3NhdGknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnZGFuJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdkYW5hJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ21qZXNlYyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWNhJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdtamVzZWNpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA9PT0gMiB8fCBudW1iZXIgPT09IDMgfHwgbnVtYmVyID09PSA0KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICdnb2RpbmUnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ2dvZGluYSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnaHInLCB7XG4gICAgbW9udGhzOiB7XG4gICAgICAgIGZvcm1hdDogJ3NpamXEjW5qYV92ZWxqYcSNZV9vxb51amthX3RyYXZuamFfc3ZpYm5qYV9saXBuamFfc3JwbmphX2tvbG92b3phX3J1am5hX2xpc3RvcGFkYV9zdHVkZW5vZ2FfcHJvc2luY2EnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHN0YW5kYWxvbmU6ICdzaWplxI1hbmpfdmVsamHEjWFfb8W+dWpha190cmF2YW5qX3N2aWJhbmpfbGlwYW5qX3NycGFual9rb2xvdm96X3J1amFuX2xpc3RvcGFkX3N0dWRlbmlfcHJvc2luYWMnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgfSxcbiAgICBtb250aHNTaG9ydDogJ3Npai5fdmVsai5fb8W+dS5fdHJhLl9zdmkuX2xpcC5fc3JwLl9rb2wuX3J1ai5fbGlzLl9zdHUuX3Byby4nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6ICduZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV/EjWV0dnJ0YWtfcGV0YWtfc3Vib3RhJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnbmVkLl9wb24uX3V0by5fc3JpLl/EjWV0Ll9wZXQuX3N1Yi4nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSDptbScsXG4gICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgIExMOiAnRG8gTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRG8gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRG8gTU1NTSBZWVlZIEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGxhc3REYXk6ICdbanXEjWVyIHVdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsdV0gW25lZGplbGp1XSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsdV0gW3NyaWplZHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJvxaFsaV0gZGRkZCBbdV0gTFQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgcGFzdDogJ3ByaWplICVzJyxcbiAgICAgICAgczogJ3BhciBzZWt1bmRpJyxcbiAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICBNOiAnbWplc2VjJyxcbiAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgeTogJ2dvZGludScsXG4gICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEh1bmdhcmlhbiBbaHVdXG4vLyEgYXV0aG9yIDogQWRhbSBCcnVubmVyIDogaHR0cHM6Ly9naXRodWIuY29tL2FkYW1icnVubmVyXG4vLyEgYXV0aG9yIDogUGV0ZXIgVmlzenQgIDogaHR0cHM6Ly9naXRodWIuY29tL3Bhc3NhdGd0XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHdlZWtFbmRpbmdzID0gJ3Zhc8Ohcm5hcCBow6l0ZsWRbiBrZWRkZW4gc3plcmTDoW4gY3PDvHTDtnJ0w7Zrw7ZuIHDDqW50ZWtlbiBzem9tYmF0b24nLnNwbGl0KFxuICAgICcgJ1xuKTtcbmZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICB2YXIgbnVtID0gbnVtYmVyO1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXhcbiAgICAgICAgICAgICAgICA/ICduw6low6FueSBtw6Fzb2RwZXJjJ1xuICAgICAgICAgICAgICAgIDogJ27DqWjDoW55IG3DoXNvZHBlcmNlJztcbiAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4KVxuICAgICAgICAgICAgICAgID8gJyBtw6Fzb2RwZXJjJ1xuICAgICAgICAgICAgICAgIDogJyBtw6Fzb2RwZXJjZSc7XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgcmV0dXJuICdlZ3knICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIHBlcmMnIDogJyBwZXJjZScpO1xuICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIHBlcmMnIDogJyBwZXJjZScpO1xuICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDs3JhJyA6ICcgw7Nyw6FqYScpO1xuICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICByZXR1cm4gbnVtICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIMOzcmEnIDogJyDDs3LDoWphJyk7XG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgcmV0dXJuICdlZ3knICsgKGlzRnV0dXJlIHx8IHdpdGhvdXRTdWZmaXggPyAnIG5hcCcgOiAnIG5hcGphJyk7XG4gICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgbmFwJyA6ICcgbmFwamEnKTtcbiAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICByZXR1cm4gJ2VneScgKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgaMOzbmFwJyA6ICcgaMOzbmFwamEnKTtcbiAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgcmV0dXJuIG51bSArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyBow7NuYXAnIDogJyBow7NuYXBqYScpO1xuICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgIHJldHVybiAnZWd5JyArIChpc0Z1dHVyZSB8fCB3aXRob3V0U3VmZml4ID8gJyDDqXYnIDogJyDDqXZlJyk7XG4gICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgIHJldHVybiBudW0gKyAoaXNGdXR1cmUgfHwgd2l0aG91dFN1ZmZpeCA/ICcgw6l2JyA6ICcgw6l2ZScpO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG59XG5mdW5jdGlvbiB3ZWVrKGlzRnV0dXJlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGlzRnV0dXJlID8gJycgOiAnW23Dumx0XSAnKSArXG4gICAgICAgICdbJyArXG4gICAgICAgIHdlZWtFbmRpbmdzW3RoaXMuZGF5KCldICtcbiAgICAgICAgJ10gTFRbLWtvcl0nXG4gICAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnaHUnLCB7XG4gICAgbW9udGhzOiAnamFudcOhcl9mZWJydcOhcl9tw6FyY2l1c1/DoXByaWxpc19tw6FqdXNfasO6bml1c19qw7psaXVzX2F1Z3VzenR1c19zemVwdGVtYmVyX29rdMOzYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2phbi5fZmViLl9tw6FyYy5fw6Fwci5fbcOhai5fasO6bi5fasO6bC5fYXVnLl9zemVwdC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6ICd2YXPDoXJuYXBfaMOpdGbFkV9rZWRkX3N6ZXJkYV9jc8O8dMO2cnTDtmtfcMOpbnRla19zem9tYmF0Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICd2YXNfaMOpdF9rZWRkX3N6ZV9jc8O8dF9ww6luX3N6bycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ3ZfaF9rX3N6ZV9jc19wX3N6bycuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgTDogJ1lZWVkuTU0uREQuJyxcbiAgICAgICAgTEw6ICdZWVlZLiBNTU1NIEQuJyxcbiAgICAgICAgTExMOiAnWVlZWS4gTU1NTSBELiBIOm1tJyxcbiAgICAgICAgTExMTDogJ1lZWVkuIE1NTU0gRC4sIGRkZGQgSDptbScsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAvZGV8ZHUvaSxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0LmNoYXJBdCgxKS50b0xvd2VyQ2FzZSgpID09PSAndSc7XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA9PT0gdHJ1ZSA/ICdkZScgOiAnREUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPT09IHRydWUgPyAnZHUnIDogJ0RVJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1ttYV0gTFRbLWtvcl0nLFxuICAgICAgICBuZXh0RGF5OiAnW2hvbG5hcF0gTFRbLWtvcl0nLFxuICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWsuY2FsbCh0aGlzLCB0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbGFzdERheTogJ1t0ZWduYXBdIExUWy1rb3JdJyxcbiAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrLmNhbGwodGhpcywgZmFsc2UpO1xuICAgICAgICB9LFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVzIG3Dumx2YScsXG4gICAgICAgIHBhc3Q6ICclcycsXG4gICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEFybWVuaWFuIFtoeS1hbV1cbi8vISBhdXRob3IgOiBBcm1lbmRhcmFieWFuIDogaHR0cHM6Ly9naXRodWIuY29tL2FybWVuZGFyYWJ5YW5cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdoeS1hbScsIHtcbiAgICBtb250aHM6IHtcbiAgICAgICAgZm9ybWF0OiAn1bDVuNaC1bbVvtWh1oDVq1/Wg9Wl1b/WgNW+1aHWgNWrX9W01aHWgNW/1atf1aHVutaA1avVrNWrX9W01aHVtdWr1b3Vq1/VsNW41oLVttWr1b3Vq1/VsNW41oLVrNWr1b3Vq1/WhdWj1bjVvdW/1bjVvdWrX9W91aXVutW/1aXVtNWi1aXWgNWrX9Ww1bjVr9W/1aXVtNWi1aXWgNWrX9W21bjVtdWl1bTVotWl1oDVq1/VpNWl1a/Vv9Wl1bTVotWl1oDVqycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgc3RhbmRhbG9uZTogJ9Ww1bjWgtW21b7VodaAX9aD1aXVv9aA1b7VodaAX9W01aHWgNW/X9Wh1brWgNWr1axf1bTVodW11avVvV/VsNW41oLVttWr1b1f1bDVuNaC1azVq9W9X9aF1aPVuNW91b/VuNW9X9W91aXVutW/1aXVtNWi1aXWgF/VsNW41a/Vv9Wl1bTVotWl1oBf1bbVuNW11aXVtNWi1aXWgF/VpNWl1a/Vv9Wl1bTVotWl1oAnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgfSxcbiAgICBtb250aHNTaG9ydDogJ9Ww1bbVvl/Wg9W/1oBf1bTWgNW/X9Wh1brWgF/VtNW11b1f1bDVttW9X9Ww1azVvV/WhdWj1b1f1b3VutW/X9Ww1a/Vv1/VttW01aJf1aTVr9W/Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAn1a/Vq9aA1aHVr9WrX9Wl1oDVr9W41oLVt9Wh1aLVqdWrX9Wl1oDVpdaE1bfVodWi1anVq1/VudW41oDVpdaE1bfVodWi1anVq1/VsNWr1bbVo9W31aHVotWp1atf1bjWgtaA1aLVodWpX9W31aHVotWh1aknLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfVr9aA1a9f1aXWgNWvX9Wl1oDWhF/VudaA1oRf1bDVttWjX9W41oLWgNWiX9W31aLVqScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ9Wv1oDVr1/VpdaA1a9f1aXWgNaEX9W51oDWhF/VsNW21aNf1bjWgtaA1aJf1bfVotWpJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWSDVqS4nLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSDVqS4sIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZINWpLiwgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vVodW11b3WhdaAXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb1b7VodWy1ahdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vVpdaA1aXVr10gTFQnLFxuICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdkZGRkIFvWhdaA1agg1arVodW01ahdIExUJztcbiAgICAgICAgfSxcbiAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnW9Wh1bbWgdWh1a5dIGRkZGQgW9aF1oDVqCDVqtWh1bTVqF0gTFQnO1xuICAgICAgICB9LFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVzINWw1aXVv9W4JyxcbiAgICAgICAgcGFzdDogJyVzINWh1bzVodW7JyxcbiAgICAgICAgczogJ9W01asg1oTVodW21asg1b7VodW11oDVr9W11aHVticsXG4gICAgICAgIHNzOiAnJWQg1b7VodW11oDVr9W11aHVticsXG4gICAgICAgIG06ICfWgNW41brVpScsXG4gICAgICAgIG1tOiAnJWQg1oDVuNW61aUnLFxuICAgICAgICBoOiAn1arVodW0JyxcbiAgICAgICAgaGg6ICclZCDVqtWh1bQnLFxuICAgICAgICBkOiAn1oXWgCcsXG4gICAgICAgIGRkOiAnJWQg1oXWgCcsXG4gICAgICAgIE06ICfVodW01avVvScsXG4gICAgICAgIE1NOiAnJWQg1aHVtNWr1b0nLFxuICAgICAgICB5OiAn1b/VodaA1asnLFxuICAgICAgICB5eTogJyVkINW/1aHWgNWrJyxcbiAgICB9LFxuICAgIG1lcmlkaWVtUGFyc2U6IC/Vo9Wr1bfVpdaA1b7VoXzVodW81aHVvtW41b/VvtWhfNaB1aXWgNWl1a/VvtWhfNWl1oDVpdWv1bjVtdWh1bYvLFxuICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gL14o1oHVpdaA1aXVr9W+1aF81aXWgNWl1a/VuNW11aHVtikkLy50ZXN0KGlucHV0KTtcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cikge1xuICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiAn1aPVq9W31aXWgNW+1aEnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuICfVodW81aHVvtW41b/VvtWhJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgIHJldHVybiAn1oHVpdaA1aXVr9W+1aEnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfVpdaA1aXVr9W41bXVodW2JztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9fFxcZHsxLDJ9LSjVq9W2fNaA1aQpLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgY2FzZSAnREREbyc6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Vq9W2JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct1oDVpCc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEluZG9uZXNpYW4gW2lkXVxuLy8hIGF1dGhvciA6IE1vaGFtbWFkIFNhdHJpbyBVdG9tbyA6IGh0dHBzOi8vZ2l0aHViLmNvbS90eW9rXG4vLyEgcmVmZXJlbmNlOiBodHRwOi8vaWQud2lraXNvdXJjZS5vcmcvd2lraS9QZWRvbWFuX1VtdW1fRWphYW5fQmFoYXNhX0luZG9uZXNpYV95YW5nX0Rpc2VtcHVybmFrYW5cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdpZCcsIHtcbiAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hcmV0X0FwcmlsX01laV9KdW5pX0p1bGlfQWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0Rlcycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ01pbmdndV9TZW5pbl9TZWxhc2FfUmFidV9LYW1pc19KdW1hdF9TYWJ0dScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnTWluX1Nlbl9TZWxfUmFiX0thbV9KdW1fU2FiJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnTWdfU25fU2xfUmJfS21fSm1fU2InLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tJyxcbiAgICB9LFxuICAgIG1lcmlkaWVtUGFyc2U6IC9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLFxuICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lcmlkaWVtID09PSAncGFnaScpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnc2lhbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb3JlJyB8fCBtZXJpZGllbSA9PT0gJ21hbGFtJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPCAxMSkge1xuICAgICAgICAgICAgcmV0dXJuICdwYWdpJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE1KSB7XG4gICAgICAgICAgICByZXR1cm4gJ3NpYW5nJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VycyA8IDE5KSB7XG4gICAgICAgICAgICByZXR1cm4gJ3NvcmUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICdtYWxhbSc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbSGFyaSBpbmkgcHVrdWxdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tCZXNvayBwdWt1bF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbS2VtYXJpbiBwdWt1bF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2xhbHUgcHVrdWxdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdkYWxhbSAlcycsXG4gICAgICAgIHBhc3Q6ICclcyB5YW5nIGxhbHUnLFxuICAgICAgICBzOiAnYmViZXJhcGEgZGV0aWsnLFxuICAgICAgICBzczogJyVkIGRldGlrJyxcbiAgICAgICAgbTogJ3NlbWVuaXQnLFxuICAgICAgICBtbTogJyVkIG1lbml0JyxcbiAgICAgICAgaDogJ3NlamFtJyxcbiAgICAgICAgaGg6ICclZCBqYW0nLFxuICAgICAgICBkOiAnc2VoYXJpJyxcbiAgICAgICAgZGQ6ICclZCBoYXJpJyxcbiAgICAgICAgTTogJ3NlYnVsYW4nLFxuICAgICAgICBNTTogJyVkIGJ1bGFuJyxcbiAgICAgICAgeTogJ3NldGFodW4nLFxuICAgICAgICB5eTogJyVkIHRhaHVuJyxcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEljZWxhbmRpYyBbaXNdXG4vLyEgYXV0aG9yIDogSGlucmlrIMOWcm4gU2lndXLDsHNzb24gOiBodHRwczovL2dpdGh1Yi5jb20vaGlucmlrXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZnVuY3Rpb24gcGx1cmFsKG4pIHtcbiAgICBpZiAobiAlIDEwMCA9PT0gMTEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChuICUgMTAgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmVcbiAgICAgICAgICAgICAgICA/ICdub2trcmFyIHNla8O6bmR1cidcbiAgICAgICAgICAgICAgICA6ICdub2trcnVtIHNla8O6bmR1bSc7XG4gICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArXG4gICAgICAgICAgICAgICAgICAgICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3Nla8O6bmR1cicgOiAnc2Vrw7puZHVtJylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdzZWvDum5kYSc7XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnbcOtbsO6dGEnIDogJ23DrW7DunR1JztcbiAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICsgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbcOtbsO6dHVyJyA6ICdtw61uw7p0dW0nKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ23DrW7DunRhJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbcOtbsO6dHUnO1xuICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICBpZiAocGx1cmFsKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgK1xuICAgICAgICAgICAgICAgICAgICAod2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAna2x1a2t1c3R1bmRpcidcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ2tsdWtrdXN0dW5kdW0nKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgJ2tsdWtrdXN0dW5kJztcbiAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnZGFndXInO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2RhZycgOiAnZGVnaSc7XG4gICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgIGlmIChwbHVyYWwobnVtYmVyKSkge1xuICAgICAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnZGFnYXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKGlzRnV0dXJlID8gJ2RhZ2EnIDogJ2TDtmd1bScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdkYWd1cic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKGlzRnV0dXJlID8gJ2RhZycgOiAnZGVnaScpO1xuICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtw6FudcOwdXInO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ23DoW51w7AnIDogJ23DoW51w7BpJztcbiAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgaWYgKHBsdXJhbChudW1iZXIpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtw6FudcOwaXInO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKGlzRnV0dXJlID8gJ23DoW51w7BpJyA6ICdtw6FudcOwdW0nKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbcOhbnXDsHVyJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoaXNGdXR1cmUgPyAnbcOhbnXDsCcgOiAnbcOhbnXDsGknKTtcbiAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICfDoXInIDogJ8OhcmknO1xuICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICBpZiAocGx1cmFsKG51bWJlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnw6FyJyA6ICfDoXJ1bScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ8OhcicgOiAnw6FyaScpO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnaXMnLCB7XG4gICAgbW9udGhzOiAnamFuw7phcl9mZWJyw7phcl9tYXJzX2FwcsOtbF9tYcOtX2rDum7DrV9qw7psw61fw6Fnw7pzdF9zZXB0ZW1iZXJfb2t0w7NiZXJfbsOzdmVtYmVyX2Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYcOtX2rDum5fasO6bF/DoWfDul9zZXBfb2t0X27Ds3ZfZGVzJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnc3VubnVkYWd1cl9tw6FudWRhZ3VyX8O+cmnDsGp1ZGFndXJfbWnDsHZpa3VkYWd1cl9maW1tdHVkYWd1cl9mw7ZzdHVkYWd1cl9sYXVnYXJkYWd1cicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ3N1bl9tw6FuX8O+cmlfbWnDsF9maW1fZsO2c19sYXUnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdTdV9Nw6Ffw55yX01pX0ZpX0bDtl9MYScuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBba2wuXSBIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBba2wuXSBIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbw60gZGFnIGtsLl0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW8OhIG1vcmd1biBrbC5dIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vDrSBnw6ZyIGtsLl0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tzw63DsGFzdGFdIGRkZGQgW2tsLl0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2VmdGlyICVzJyxcbiAgICAgICAgcGFzdDogJ2Z5cmlyICVzIHPDrcOwYW4nLFxuICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgaDogJ2tsdWtrdXN0dW5kJyxcbiAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgb3JkaW5hbDogJyVkLicsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogSXRhbGlhbiAoU3dpdHplcmxhbmQpIFtpdC1jaF1cbi8vISBhdXRob3IgOiB4ZmggOiBodHRwczovL2dpdGh1Yi5jb20veGZoXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnaXQtY2gnLCB7XG4gICAgbW9udGhzOiAnZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2dlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnZG9tZW5pY2FfbHVuZWTDrF9tYXJ0ZWTDrF9tZXJjb2xlZMOsX2dpb3ZlZMOsX3ZlbmVyZMOsX3NhYmF0bycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ2RvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21lX2dpX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tPZ2dpIGFsbGVdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tEb21hbmkgYWxsZV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FsbGVdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tJZXJpIGFsbGVdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbGEgc2NvcnNhXSBkZGRkIFthbGxlXSBMVCc7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbbG8gc2NvcnNvXSBkZGRkIFthbGxlXSBMVCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgcmV0dXJuICgvXlswLTldLiskLy50ZXN0KHMpID8gJ3RyYScgOiAnaW4nKSArICcgJyArIHM7XG4gICAgICAgIH0sXG4gICAgICAgIHBhc3Q6ICclcyBmYScsXG4gICAgICAgIHM6ICdhbGN1bmkgc2Vjb25kaScsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kaScsXG4gICAgICAgIG06ICd1biBtaW51dG8nLFxuICAgICAgICBtbTogJyVkIG1pbnV0aScsXG4gICAgICAgIGg6IFwidW4nb3JhXCIsXG4gICAgICAgIGhoOiAnJWQgb3JlJyxcbiAgICAgICAgZDogJ3VuIGdpb3JubycsXG4gICAgICAgIGRkOiAnJWQgZ2lvcm5pJyxcbiAgICAgICAgTTogJ3VuIG1lc2UnLFxuICAgICAgICBNTTogJyVkIG1lc2knLFxuICAgICAgICB5OiAndW4gYW5ubycsXG4gICAgICAgIHl5OiAnJWQgYW5uaScsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgb3JkaW5hbDogJyVkwronLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEl0YWxpYW4gW2l0XVxuLy8hIGF1dGhvciA6IExvcmVuem8gOiBodHRwczovL2dpdGh1Yi5jb20vYWxpZW1cbi8vISBhdXRob3I6IE1hdHRpYSBMYXJlbnRpczogaHR0cHM6Ly9naXRodWIuY29tL25vc3RhbGdpYXpcbi8vISBhdXRob3I6IE1hcmNvIDogaHR0cHM6Ly9naXRodWIuY29tL01hbmZyZTk4XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnaXQnLCB7XG4gICAgbW9udGhzOiAnZ2VubmFpb19mZWJicmFpb19tYXJ6b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2dlbl9mZWJfbWFyX2Fwcl9tYWdfZ2l1X2x1Z19hZ29fc2V0X290dF9ub3ZfZGljJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnZG9tZW5pY2FfbHVuZWTDrF9tYXJ0ZWTDrF9tZXJjb2xlZMOsX2dpb3ZlZMOsX3ZlbmVyZMOsX3NhYmF0bycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ2RvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ2RvX2x1X21hX21lX2dpX3ZlX3NhJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAnW09nZ2kgYScgK1xuICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgPiAxID8gJ2xsZSAnIDogdGhpcy5ob3VycygpID09PSAwID8gJyAnIDogXCJsbCdcIikgK1xuICAgICAgICAgICAgICAgICddTFQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBuZXh0RGF5OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICdbRG9tYW5pIGEnICtcbiAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgJ2RkZGQgW2EnICtcbiAgICAgICAgICAgICAgICAodGhpcy5ob3VycygpID4gMSA/ICdsbGUgJyA6IHRoaXMuaG91cnMoKSA9PT0gMCA/ICcgJyA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgICAgbGFzdERheTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAnW0llcmkgYScgK1xuICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgPiAxID8gJ2xsZSAnIDogdGhpcy5ob3VycygpID09PSAwID8gJyAnIDogXCJsbCdcIikgK1xuICAgICAgICAgICAgICAgICddTFQnXG4gICAgICAgICAgICApO1xuICAgICAgICB9LFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1tMYSBzY29yc2FdIGRkZGQgW2EnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmhvdXJzKCkgPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbGxlICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuaG91cnMoKSA9PT0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJyAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcImxsJ1wiKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXUxUJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAnW0xvIHNjb3Jzb10gZGRkZCBbYScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuaG91cnMoKSA+IDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdsbGUgJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5ob3VycygpID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnICdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwibGwnXCIpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICddTFQnXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAndHJhICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGZhJyxcbiAgICAgICAgczogJ2FsY3VuaSBzZWNvbmRpJyxcbiAgICAgICAgc3M6ICclZCBzZWNvbmRpJyxcbiAgICAgICAgbTogJ3VuIG1pbnV0bycsXG4gICAgICAgIG1tOiAnJWQgbWludXRpJyxcbiAgICAgICAgaDogXCJ1bidvcmFcIixcbiAgICAgICAgaGg6ICclZCBvcmUnLFxuICAgICAgICBkOiAndW4gZ2lvcm5vJyxcbiAgICAgICAgZGQ6ICclZCBnaW9ybmknLFxuICAgICAgICB3OiAndW5hIHNldHRpbWFuYScsXG4gICAgICAgIHd3OiAnJWQgc2V0dGltYW5lJyxcbiAgICAgICAgTTogJ3VuIG1lc2UnLFxuICAgICAgICBNTTogJyVkIG1lc2knLFxuICAgICAgICB5OiAndW4gYW5ubycsXG4gICAgICAgIHl5OiAnJWQgYW5uaScsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgb3JkaW5hbDogJyVkwronLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEphcGFuZXNlIFtqYV1cbi8vISBhdXRob3IgOiBMSSBMb25nIDogaHR0cHM6Ly9naXRodWIuY29tL2JhcnlvblxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2phJywge1xuICAgIGVyYXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgc2luY2U6ICcyMDE5LTA1LTAxJyxcbiAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgIG5hbWU6ICfku6TlkownLFxuICAgICAgICAgICAgbmFycm93OiAn44u/JyxcbiAgICAgICAgICAgIGFiYnI6ICdSJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgc2luY2U6ICcxOTg5LTAxLTA4JyxcbiAgICAgICAgICAgIHVudGlsOiAnMjAxOS0wNC0zMCcsXG4gICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICBuYW1lOiAn5bmz5oiQJyxcbiAgICAgICAgICAgIG5hcnJvdzogJ+ONuycsXG4gICAgICAgICAgICBhYmJyOiAnSCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNpbmNlOiAnMTkyNi0xMi0yNScsXG4gICAgICAgICAgICB1bnRpbDogJzE5ODktMDEtMDcnLFxuICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgbmFtZTogJ+aYreWSjCcsXG4gICAgICAgICAgICBuYXJyb3c6ICfjjbwnLFxuICAgICAgICAgICAgYWJicjogJ1MnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBzaW5jZTogJzE5MTItMDctMzAnLFxuICAgICAgICAgICAgdW50aWw6ICcxOTI2LTEyLTI0JyxcbiAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgIG5hbWU6ICflpKfmraMnLFxuICAgICAgICAgICAgbmFycm93OiAn4429JyxcbiAgICAgICAgICAgIGFiYnI6ICdUJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgc2luY2U6ICcxODczLTAxLTAxJyxcbiAgICAgICAgICAgIHVudGlsOiAnMTkxMi0wNy0yOScsXG4gICAgICAgICAgICBvZmZzZXQ6IDYsXG4gICAgICAgICAgICBuYW1lOiAn5piO5rK7JyxcbiAgICAgICAgICAgIG5hcnJvdzogJ+ONvicsXG4gICAgICAgICAgICBhYmJyOiAnTScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICB1bnRpbDogJzE4NzMtMTItMzEnLFxuICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgbmFtZTogJ+ilv+aapicsXG4gICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgdW50aWw6IC1JbmZpbml0eSxcbiAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgIG5hbWU6ICfntIDlhYPliY0nLFxuICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGVyYVllYXJPcmRpbmFsUmVnZXg6IC8o5YWDfFxcZCsp5bm0LyxcbiAgICBlcmFZZWFyT3JkaW5hbFBhcnNlOiBmdW5jdGlvbiAoaW5wdXQsIG1hdGNoKSB7XG4gICAgICAgIHJldHVybiBtYXRjaFsxXSA9PT0gJ+WFgycgPyAxIDogcGFyc2VJbnQobWF0Y2hbMV0gfHwgaW5wdXQsIDEwKTtcbiAgICB9LFxuICAgIG1vbnRoczogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdCgnXycpLFxuICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzOiAn5pel5puc5pelX+aciOabnOaXpV/ngavmm5zml6Vf5rC05puc5pelX+acqOabnOaXpV/ph5Hmm5zml6Vf5Zyf5puc5pelJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfml6Vf5pyIX+eBq1/msLRf5pyoX+mHkV/lnJ8nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfml6Vf5pyIX+eBq1/msLRf5pyoX+mHkV/lnJ8nLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgIExMTEw6ICdZWVlZ5bm0TeaciETml6UgZGRkZCBISDptbScsXG4gICAgICAgIGw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelKGRkZCkgSEg6bW0nLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL+WNiOWJjXzljYjlvowvaSxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn5Y2I5b6MJztcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAn5Y2I5YmNJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn5Y2I5b6MJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vku4rml6VdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vmmI7ml6VdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgIGlmIChub3cud2VlaygpICE9PSB0aGlzLndlZWsoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW+adpemAsV1kZGRkIExUJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIExUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbGFzdERheTogJ1vmmKjml6VdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndlZWsoKSAhPT0gbm93LndlZWsoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnW+WFiOmAsV1kZGRkIExUJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdkZGRkIExUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfeaXpS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyID09PSAxID8gJ+WFg+W5tCcgOiBudW1iZXIgKyAn5bm0JztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVz5b6MJyxcbiAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgczogJ+aVsOenkicsXG4gICAgICAgIHNzOiAnJWTnp5InLFxuICAgICAgICBtOiAnMeWIhicsXG4gICAgICAgIG1tOiAnJWTliIYnLFxuICAgICAgICBoOiAnMeaZgumWkycsXG4gICAgICAgIGhoOiAnJWTmmYLplpMnLFxuICAgICAgICBkOiAnMeaXpScsXG4gICAgICAgIGRkOiAnJWTml6UnLFxuICAgICAgICBNOiAnMeODtuaciCcsXG4gICAgICAgIE1NOiAnJWTjg7bmnIgnLFxuICAgICAgICB5OiAnMeW5tCcsXG4gICAgICAgIHl5OiAnJWTlubQnLFxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBKYXZhbmVzZSBbanZdXG4vLyEgYXV0aG9yIDogUm9ueSBMYW50aXAgOiBodHRwczovL2dpdGh1Yi5jb20vbGFudGlwXG4vLyEgcmVmZXJlbmNlOiBodHRwOi8vanYud2lraXBlZGlhLm9yZy93aWtpL0Jhc2FfSmF3YVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2p2Jywge1xuICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vcGVtYmVyX0Rlc2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnTWluZ2d1X1NlbmVuX1NlbG9zb19SZWJ1X0tlbWlzX0plbXV3YWhfU2VwdHUnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ01pbl9TZW5fU2VsX1JlYl9LZW1fSmVtX1NlcCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ01nX1NuX1NsX1JiX0ttX0ptX1NwJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAvZW5qaW5nfHNpeWFuZ3xzb250ZW58bmRhbHUvLFxuICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lcmlkaWVtID09PSAnZW5qaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzaXlhbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICdzb250ZW4nIHx8IG1lcmlkaWVtID09PSAnbmRhbHUnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2VuamluZyc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgcmV0dXJuICdzaXlhbmcnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgIHJldHVybiAnc29udGVuJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnbmRhbHUnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW0RpbnRlbiBwdW5pa28gcHVrdWxdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tNYmVuamFuZyBwdWt1bF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbS2FsYSB3aW5naSBwdWt1bF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2tlcGVuZ2tlciBwdWt1bF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ3dvbnRlbiBpbmcgJXMnLFxuICAgICAgICBwYXN0OiAnJXMgaW5na2FuZyBrZXBlbmdrZXInLFxuICAgICAgICBzOiAnc2F3ZXRhd2lzIGRldGlrJyxcbiAgICAgICAgc3M6ICclZCBkZXRpaycsXG4gICAgICAgIG06ICdzZXR1bmdnYWwgbWVuaXQnLFxuICAgICAgICBtbTogJyVkIG1lbml0JyxcbiAgICAgICAgaDogJ3NldHVuZ2dhbCBqYW0nLFxuICAgICAgICBoaDogJyVkIGphbScsXG4gICAgICAgIGQ6ICdzZWRpbnRlbicsXG4gICAgICAgIGRkOiAnJWQgZGludGVuJyxcbiAgICAgICAgTTogJ3Nld3VsYW4nLFxuICAgICAgICBNTTogJyVkIHd1bGFuJyxcbiAgICAgICAgeTogJ3NldGF1bicsXG4gICAgICAgIHl5OiAnJWQgdGF1bicsXG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHZW9yZ2lhbiBba2FdXG4vLyEgYXV0aG9yIDogSXJha2xpIEphbmlhc2h2aWxpIDogaHR0cHM6Ly9naXRodWIuY29tL0lyYWtsaUphbmlcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdrYScsIHtcbiAgICBtb250aHM6ICfhg5jhg5Dhg5zhg5Xhg5Dhg6Dhg5hf4YOX4YOU4YOR4YOU4YOg4YOV4YOQ4YOa4YOYX+GDm+GDkOGDoOGDouGDmF/hg5Dhg57hg6Dhg5jhg5rhg5hf4YOb4YOQ4YOY4YOh4YOYX+GDmOGDleGDnOGDmOGDoeGDmF/hg5jhg5Xhg5rhg5jhg6Hhg5hf4YOQ4YOS4YOV4YOY4YOh4YOi4YOdX+GDoeGDlOGDpeGDouGDlOGDm+GDkeGDlOGDoOGDmF/hg53hg6Xhg6Lhg53hg5vhg5Hhg5Thg6Dhg5hf4YOc4YOd4YOU4YOb4YOR4YOU4YOg4YOYX+GDk+GDlOGDmeGDlOGDm+GDkeGDlOGDoOGDmCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICfhg5jhg5Dhg5xf4YOX4YOU4YORX+GDm+GDkOGDoF/hg5Dhg57hg6Bf4YOb4YOQ4YOYX+GDmOGDleGDnF/hg5jhg5Xhg5pf4YOQ4YOS4YOVX+GDoeGDlOGDpV/hg53hg6Xhg6Jf4YOc4YOd4YOUX+GDk+GDlOGDmScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czoge1xuICAgICAgICBzdGFuZGFsb25lOiAn4YOZ4YOV4YOY4YOg4YOQX+GDneGDoOGDqOGDkOGDkeGDkOGDl+GDmF/hg6Hhg5Dhg5vhg6jhg5Dhg5Hhg5Dhg5fhg5hf4YOd4YOX4YOu4YOo4YOQ4YOR4YOQ4YOX4YOYX+GDruGDo+GDl+GDqOGDkOGDkeGDkOGDl+GDmF/hg57hg5Dhg6Dhg5Dhg6Hhg5nhg5Thg5Xhg5hf4YOo4YOQ4YOR4YOQ4YOX4YOYJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBmb3JtYXQ6ICfhg5nhg5Xhg5jhg6Dhg5Dhg6Ff4YOd4YOg4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDoeGDkOGDm+GDqOGDkOGDkeGDkOGDl+GDoV/hg53hg5fhg67hg6jhg5Dhg5Hhg5Dhg5fhg6Ff4YOu4YOj4YOX4YOo4YOQ4YOR4YOQ4YOX4YOhX+GDnuGDkOGDoOGDkOGDoeGDmeGDlOGDleGDoV/hg6jhg5Dhg5Hhg5Dhg5fhg6EnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIGlzRm9ybWF0OiAvKOGDrOGDmOGDnOGDkHzhg6jhg5Thg5vhg5Phg5Thg5IpLyxcbiAgICB9LFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfhg5nhg5Xhg5hf4YOd4YOg4YOoX+GDoeGDkOGDm1/hg53hg5fhg65f4YOu4YOj4YOXX+GDnuGDkOGDoF/hg6jhg5Dhg5EnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfhg5nhg5Vf4YOd4YOgX+GDoeGDkF/hg53hg5df4YOu4YOjX+GDnuGDkF/hg6jhg5AnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vhg5Phg6bhg5Thg6FdIExUWy3hg5bhg5RdJyxcbiAgICAgICAgbmV4dERheTogJ1vhg67hg5Xhg5Dhg5pdIExUWy3hg5bhg5RdJyxcbiAgICAgICAgbGFzdERheTogJ1vhg5Lhg6Phg6jhg5jhg5xdIExUWy3hg5bhg5RdJyxcbiAgICAgICAgbmV4dFdlZWs6ICdb4YOo4YOU4YOb4YOT4YOU4YOSXSBkZGRkIExUWy3hg5bhg5RdJyxcbiAgICAgICAgbGFzdFdlZWs6ICdb4YOs4YOY4YOc4YOQXSBkZGRkIExULeGDluGDlCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvKOGDrOGDkOGDm3zhg6zhg6Phg5d84YOh4YOQ4YOQ4YOXfOGDrOGDlOGDmnzhg5Phg6Z84YOX4YOVKSjhg5h84YOUKS8sIGZ1bmN0aW9uIChcbiAgICAgICAgICAgICAgICAkMCxcbiAgICAgICAgICAgICAgICAkMSxcbiAgICAgICAgICAgICAgICAkMlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQyID09PSAn4YOYJyA/ICQxICsgJ+GDqOGDmCcgOiAkMSArICQyICsgJ+GDqOGDmCc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgcGFzdDogZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIGlmICgvKOGDrOGDkOGDm+GDmHzhg6zhg6Phg5fhg5h84YOh4YOQ4YOQ4YOX4YOYfOGDk+GDpuGDlHzhg5fhg5Xhg5QpLy50ZXN0KHMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvKOGDmHzhg5QpJC8sICfhg5jhg6Eg4YOs4YOY4YOcJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoL+GDrOGDlOGDmuGDmC8udGVzdChzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoL+GDrOGDlOGDmuGDmCQvLCAn4YOs4YOa4YOY4YOhIOGDrOGDmOGDnCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH0sXG4gICAgICAgIHM6ICfhg6Dhg5Dhg5vhg5Phg5Thg5zhg5jhg5vhg5Qg4YOs4YOQ4YOb4YOYJyxcbiAgICAgICAgc3M6ICclZCDhg6zhg5Dhg5vhg5gnLFxuICAgICAgICBtOiAn4YOs4YOj4YOX4YOYJyxcbiAgICAgICAgbW06ICclZCDhg6zhg6Phg5fhg5gnLFxuICAgICAgICBoOiAn4YOh4YOQ4YOQ4YOX4YOYJyxcbiAgICAgICAgaGg6ICclZCDhg6Hhg5Dhg5Dhg5fhg5gnLFxuICAgICAgICBkOiAn4YOT4YOm4YOUJyxcbiAgICAgICAgZGQ6ICclZCDhg5Phg6bhg5QnLFxuICAgICAgICBNOiAn4YOX4YOV4YOUJyxcbiAgICAgICAgTU06ICclZCDhg5fhg5Xhg5QnLFxuICAgICAgICB5OiAn4YOs4YOU4YOa4YOYJyxcbiAgICAgICAgeXk6ICclZCDhg6zhg5Thg5rhg5gnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogLzB8MS3hg5rhg5h84YOb4YOULVxcZHsxLDJ9fFxcZHsxLDJ9LeGDlC8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLeGDmuGDmCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbnVtYmVyIDwgMjAgfHxcbiAgICAgICAgICAgIChudW1iZXIgPD0gMTAwICYmIG51bWJlciAlIDIwID09PSAwKSB8fFxuICAgICAgICAgICAgbnVtYmVyICUgMTAwID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuICfhg5vhg5QtJyArIG51bWJlcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3hg5QnO1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsXG4gICAgICAgIGRveTogNyxcbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS2F6YWtoIFtra11cbi8vISBhdXRob3JzIDogTnVybGFuIFJha2hpbXpoYW5vdiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9udXJsYW5cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgc3VmZml4ZXMgPSB7XG4gICAgMDogJy3RiNGWJyxcbiAgICAxOiAnLdGI0ZYnLFxuICAgIDI6ICct0YjRlicsXG4gICAgMzogJy3RiNGWJyxcbiAgICA0OiAnLdGI0ZYnLFxuICAgIDU6ICct0YjRlicsXG4gICAgNjogJy3RiNGLJyxcbiAgICA3OiAnLdGI0ZYnLFxuICAgIDg6ICct0YjRlicsXG4gICAgOTogJy3RiNGLJyxcbiAgICAxMDogJy3RiNGLJyxcbiAgICAyMDogJy3RiNGLJyxcbiAgICAzMDogJy3RiNGLJyxcbiAgICA0MDogJy3RiNGLJyxcbiAgICA1MDogJy3RiNGWJyxcbiAgICA2MDogJy3RiNGLJyxcbiAgICA3MDogJy3RiNGWJyxcbiAgICA4MDogJy3RiNGWJyxcbiAgICA5MDogJy3RiNGLJyxcbiAgICAxMDA6ICct0YjRlicsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdraycsIHtcbiAgICBtb250aHM6ICfSm9Cw0qPRgtCw0YBf0LDSm9C/0LDQvV/QvdCw0YPRgNGL0Ldf0YHTmdGD0ZbRgF/QvNCw0LzRi9GAX9C80LDRg9GB0YvQvF/RiNGW0LvQtNC1X9GC0LDQvNGL0Ldf0pvRi9GA0LrSr9C50LXQul/Sm9Cw0LfQsNC9X9Kb0LDRgNCw0YjQsF/QttC10LvRgtC+0pvRgdCw0L0nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAn0pvQsNKjX9Cw0pvQv1/QvdCw0YNf0YHTmdGDX9C80LDQvF/QvNCw0YNf0YjRltC7X9GC0LDQvF/Sm9GL0YBf0pvQsNC3X9Kb0LDRgF/QttC10LsnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICfQttC10LrRgdC10L3QsdGWX9C00q/QudGB0LXQvdCx0ZZf0YHQtdC50YHQtdC90LHRll/RgdOZ0YDRgdC10L3QsdGWX9Cx0LXQudGB0LXQvdCx0ZZf0LbSsdC80LBf0YHQtdC90LHRlicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ9C20LXQul/QtNKv0Llf0YHQtdC5X9GB05nRgF/QsdC10Llf0LbSsdC8X9GB0LXQvScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ9C20Lpf0LTQuV/RgdC5X9GB0YBf0LHQuV/QttC8X9GB0L0nLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vQkdKv0LPRltC9INGB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vQldGA0YLQtdKjINGB0LDSk9Cw0YJdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb0JrQtdGI0LUg0YHQsNKT0LDRgl0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1vTqNGC0LrQtdC9INCw0L/RgtCw0L3Ri9KjXSBkZGRkIFvRgdCw0pPQsNGCXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXMg0ZbRiNGW0L3QtNC1JyxcbiAgICAgICAgcGFzdDogJyVzINCx0rHRgNGL0L0nLFxuICAgICAgICBzOiAn0LHRltGA0L3QtdGI0LUg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgc3M6ICclZCDRgdC10LrRg9C90LQnLFxuICAgICAgICBtOiAn0LHRltGAINC80LjQvdGD0YInLFxuICAgICAgICBtbTogJyVkINC80LjQvdGD0YInLFxuICAgICAgICBoOiAn0LHRltGAINGB0LDSk9Cw0YInLFxuICAgICAgICBoaDogJyVkINGB0LDSk9Cw0YInLFxuICAgICAgICBkOiAn0LHRltGAINC60q/QvScsXG4gICAgICAgIGRkOiAnJWQg0LrSr9C9JyxcbiAgICAgICAgTTogJ9Cx0ZbRgCDQsNC5JyxcbiAgICAgICAgTU06ICclZCDQsNC5JyxcbiAgICAgICAgeTogJ9Cx0ZbRgCDQttGL0LsnLFxuICAgICAgICB5eTogJyVkINC20YvQuycsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNGI0ZZ80YjRiykvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgIGIgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1tudW1iZXJdIHx8IHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdKTtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENhbWJvZGlhbiBba21dXG4vLyEgYXV0aG9yIDogS3J1eSBWYW5uYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rcnV5dmFubmFcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAxOiAn4Z+hJyxcbiAgICAgICAgMjogJ+GfoicsXG4gICAgICAgIDM6ICfhn6MnLFxuICAgICAgICA0OiAn4Z+kJyxcbiAgICAgICAgNTogJ+GfpScsXG4gICAgICAgIDY6ICfhn6YnLFxuICAgICAgICA3OiAn4Z+nJyxcbiAgICAgICAgODogJ+GfqCcsXG4gICAgICAgIDk6ICfhn6knLFxuICAgICAgICAwOiAn4Z+gJyxcbiAgICB9LFxuICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ+GfoSc6ICcxJyxcbiAgICAgICAgJ+Gfoic6ICcyJyxcbiAgICAgICAgJ+Gfoyc6ICczJyxcbiAgICAgICAgJ+GfpCc6ICc0JyxcbiAgICAgICAgJ+GfpSc6ICc1JyxcbiAgICAgICAgJ+Gfpic6ICc2JyxcbiAgICAgICAgJ+Gfpyc6ICc3JyxcbiAgICAgICAgJ+GfqCc6ICc4JyxcbiAgICAgICAgJ+GfqSc6ICc5JyxcbiAgICAgICAgJ+GfoCc6ICcwJyxcbiAgICB9O1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdrbScsIHtcbiAgICBtb250aHM6ICfhnpjhnoDhnprhnrZf4Z6A4Z674Z6Y4Z+S4Z6X4Z+IX+GemOGeuOGek+Getl/hnpjhn4Hhnp/hnrZf4Z6n4Z6f4Z6X4Z62X+GemOGet+GekOGeu+Gek+Getl/hnoDhnoDhn5LhnoDhnorhnrZf4Z6f4Z644Z6g4Z62X+GegOGeieGfkuGeieGetl/hno/hnrvhnpvhnrZf4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62X+GekuGfkuGek+GevCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICfhnpjhnoDhnprhnrZf4Z6A4Z674Z6Y4Z+S4Z6X4Z+IX+GemOGeuOGek+Getl/hnpjhn4Hhnp/hnrZf4Z6n4Z6f4Z6X4Z62X+GemOGet+GekOGeu+Gek+Getl/hnoDhnoDhn5LhnoDhnorhnrZf4Z6f4Z644Z6g4Z62X+GegOGeieGfkuGeieGetl/hno/hnrvhnpvhnrZf4Z6c4Z634Z6F4Z+S4Z6G4Z634Z6A4Z62X+GekuGfkuGek+GevCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXM6ICfhnqLhnrbhnpHhnrfhno/hn5Lhnplf4Z6F4Z+Q4Z6T4Z+S4Z6RX+GeouGehOGfkuGeguGetuGeml/hnpbhnrvhnpJf4Z6W4Z+S4Z6a4Z6g4Z6f4Z+S4Z6U4Z6P4Z634Z+NX+Gen+Geu+GegOGfkuGeml/hnp/hn4Xhnprhn40nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ+GeouGetl/hnoVf4Z6iX+Gell/hnpbhn5Lhnppf4Z6f4Z67X+Genycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ+GeouGetl/hnoVf4Z6iX+Gell/hnpbhn5Lhnppf4Z6f4Z67X+Genycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL+GeluGfkuGemuGeueGegHzhnpvhn5LhnoThnrbhnoUvLFxuICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfhnpvhn5LhnoThnrbhnoUnO1xuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuICfhnpbhn5LhnprhnrnhnoAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfhnpvhn5LhnoThnrbhnoUnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW+GekOGfkuGehOGfg+Gek+GfgeGfhyDhnpjhn4nhn4ThnoRdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vhnp/hn5LhnqLhn4LhnoAg4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBb4Z6Y4Z+J4Z+E4Z6EXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4Z6Y4Z+S4Z6f4Z634Z6b4Z6Y4Z634Z6JIOGemOGfieGfhOGehF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW+Gen+GelOGfkuGej+GetuGeoOGfjeGemOGeu+Gek10gW+GemOGfieGfhOGehF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVz4Z6R4Z+A4Z6PJyxcbiAgICAgICAgcGFzdDogJyVz4Z6Y4Z674Z6TJyxcbiAgICAgICAgczogJ+GelOGfieGeu+Gek+GfkuGemOGetuGek+GenOGet+Gek+GetuGekeGeuCcsXG4gICAgICAgIHNzOiAnJWQg4Z6c4Z634Z6T4Z624Z6R4Z64JyxcbiAgICAgICAgbTogJ+GemOGeveGemeGek+GetuGekeGeuCcsXG4gICAgICAgIG1tOiAnJWQg4Z6T4Z624Z6R4Z64JyxcbiAgICAgICAgaDogJ+GemOGeveGemeGemOGfieGfhOGehCcsXG4gICAgICAgIGhoOiAnJWQg4Z6Y4Z+J4Z+E4Z6EJyxcbiAgICAgICAgZDogJ+GemOGeveGemeGekOGfkuGehOGfgycsXG4gICAgICAgIGRkOiAnJWQg4Z6Q4Z+S4Z6E4Z+DJyxcbiAgICAgICAgTTogJ+GemOGeveGemeGegeGfgicsXG4gICAgICAgIE1NOiAnJWQg4Z6B4Z+CJyxcbiAgICAgICAgeTogJ+GemOGeveGemeGehuGfkuGek+GetuGfhicsXG4gICAgICAgIHl5OiAnJWQg4Z6G4Z+S4Z6T4Z624Z+GJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC/hnpHhnrhcXGR7MSwyfS8sXG4gICAgb3JkaW5hbDogJ+GekeGeuCVkJyxcbiAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vhn6Hhn6Lhn6Phn6Thn6Xhn6bhn6fhn6jhn6nhn6BdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEthbm5hZGEgW2tuXVxuLy8hIGF1dGhvciA6IFJhamVldiBOYWlrIDogaHR0cHM6Ly9naXRodWIuY29tL3JhamVldm5haWt0ZVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgIDE6ICfgs6cnLFxuICAgICAgICAyOiAn4LOoJyxcbiAgICAgICAgMzogJ+CzqScsXG4gICAgICAgIDQ6ICfgs6onLFxuICAgICAgICA1OiAn4LOrJyxcbiAgICAgICAgNjogJ+CzrCcsXG4gICAgICAgIDc6ICfgs60nLFxuICAgICAgICA4OiAn4LOuJyxcbiAgICAgICAgOTogJ+CzrycsXG4gICAgICAgIDA6ICfgs6YnLFxuICAgIH0sXG4gICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAn4LOnJzogJzEnLFxuICAgICAgICAn4LOoJzogJzInLFxuICAgICAgICAn4LOpJzogJzMnLFxuICAgICAgICAn4LOqJzogJzQnLFxuICAgICAgICAn4LOrJzogJzUnLFxuICAgICAgICAn4LOsJzogJzYnLFxuICAgICAgICAn4LOtJzogJzcnLFxuICAgICAgICAn4LOuJzogJzgnLFxuICAgICAgICAn4LOvJzogJzknLFxuICAgICAgICAn4LOmJzogJzAnLFxuICAgIH07XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2tuJywge1xuICAgIG1vbnRoczogJ+CynOCyqOCyteCysOCyv1/gsqvgs4bgsqzgs43gsrDgsrXgsrDgsr9f4LKu4LK+4LKw4LON4LKa4LONX+Cyj+CyquCzjeCysOCyv+CysuCzjV/gsq7gs4bgs5Vf4LKc4LOC4LKo4LONX+CynOCzgeCysuCzhuCzll/gsobgspfgsrjgs43gsp/gs41f4LK44LOG4LKq4LON4LKf4LOG4LKC4LKs4LKw4LONX+CyheCyleCzjeCyn+CzhuCzguCzleCyrOCysOCzjV/gsqjgsrXgs4bgsoLgsqzgsrDgs41f4LKh4LK/4LK44LOG4LKC4LKs4LKw4LONJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ+CynOCyqF/gsqvgs4bgsqzgs43gsrBf4LKu4LK+4LKw4LON4LKa4LONX+Cyj+CyquCzjeCysOCyv+CysuCzjV/gsq7gs4bgs5Vf4LKc4LOC4LKo4LONX+CynOCzgeCysuCzhuCzll/gsobgspfgsrjgs43gsp/gs41f4LK44LOG4LKq4LON4LKf4LOG4LKCX+CyheCyleCzjeCyn+CzhuCzguCzlV/gsqjgsrXgs4bgsoJf4LKh4LK/4LK44LOG4LKCJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAn4LKt4LK+4LKo4LOB4LK14LK+4LKwX+CyuOCzhuCzguCzleCyruCyteCyvuCysF/gsq7gsoLgspfgsrPgsrXgsr7gsrBf4LKs4LOB4LKn4LK14LK+4LKwX+Cyl+CzgeCysOCzgeCyteCyvuCysF/gsrbgs4HgspXgs43gsrDgsrXgsr7gsrBf4LK24LKo4LK/4LK14LK+4LKwJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn4LKt4LK+4LKo4LOBX+CyuOCzhuCzguCzleCyrl/gsq7gsoLgspfgsrNf4LKs4LOB4LKnX+Cyl+CzgeCysOCzgV/gsrbgs4HgspXgs43gsrBf4LK24LKo4LK/Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn4LKt4LK+X+CyuOCzhuCzguCzlV/gsq7gsoJf4LKs4LOBX+Cyl+CzgV/gsrbgs4Ff4LK2Jy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnQSBoOm1tJyxcbiAgICAgICAgTFRTOiAnQSBoOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdb4LKH4LKC4LKm4LOBXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb4LKo4LK+4LKz4LOGXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCwgTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW+CyqOCyv+CyqOCzjeCyqOCzhl0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1vgspXgs4bgs4Lgsqjgs4bgsq9dIGRkZGQsIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICclcyDgsqjgsoLgsqTgsrAnLFxuICAgICAgICBwYXN0OiAnJXMg4LK54LK/4LKC4LKm4LOGJyxcbiAgICAgICAgczogJ+CyleCzhuCysuCyteCzgSDgspXgs43gsrfgsqPgspfgsrPgs4EnLFxuICAgICAgICBzczogJyVkIOCyuOCzhuCyleCzhuCyguCyoeCzgeCyl+Cys+CzgScsXG4gICAgICAgIG06ICfgspLgsoLgsqbgs4Eg4LKo4LK/4LKu4LK/4LK3JyxcbiAgICAgICAgbW06ICclZCDgsqjgsr/gsq7gsr/gsrcnLFxuICAgICAgICBoOiAn4LKS4LKC4LKm4LOBIOCyl+CyguCyn+CzhicsXG4gICAgICAgIGhoOiAnJWQg4LKX4LKC4LKf4LOGJyxcbiAgICAgICAgZDogJ+CykuCyguCypuCzgSDgsqbgsr/gsqgnLFxuICAgICAgICBkZDogJyVkIOCypuCyv+CyqCcsXG4gICAgICAgIE06ICfgspLgsoLgsqbgs4Eg4LKk4LK/4LKC4LKX4LKz4LOBJyxcbiAgICAgICAgTU06ICclZCDgsqTgsr/gsoLgspfgsrPgs4EnLFxuICAgICAgICB5OiAn4LKS4LKC4LKm4LOBIOCyteCysOCzjeCytycsXG4gICAgICAgIHl5OiAnJWQg4LK14LKw4LON4LK3JyxcbiAgICB9LFxuICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Czp+CzqOCzqeCzquCzq+CzrOCzreCzruCzr+Czpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL+CysOCyvuCypOCzjeCysOCyv3zgsqzgs4bgsrPgsr/gspfgs43gspfgs4Z84LKu4LKn4LON4LKv4LK+4LK54LON4LKofOCyuOCyguCynOCzhi8sXG4gICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgsrDgsr7gsqTgs43gsrDgsr8nKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsq7gsqfgs43gsq/gsr7gsrngs43gsqgnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsrjgsoLgspzgs4YnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiAn4LKw4LK+4LKk4LON4LKw4LK/JztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgIHJldHVybiAn4LKs4LOG4LKz4LK/4LKX4LON4LKX4LOGJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgIHJldHVybiAn4LKu4LKn4LON4LKv4LK+4LK54LON4LKoJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgIHJldHVybiAn4LK44LKC4LKc4LOGJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn4LKw4LK+4LKk4LON4LKw4LK/JztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOCyqOCzhuCzlSkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlciArICfgsqjgs4bgs5UnO1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS29yZWFuIFtrb11cbi8vISBhdXRob3IgOiBLeXVuZ3dvb2ssIFBhcmsgOiBodHRwczovL2dpdGh1Yi5jb20va3l1bmd3MDBrXG4vLyEgYXV0aG9yIDogSmVlZXl1bCBMZWUgPGplZWV5dWxAZ21haWwuY29tPlxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2tvJywge1xuICAgIG1vbnRoczogJzHsm5RfMuyblF8z7JuUXzTsm5RfNeyblF827JuUXzfsm5RfOOyblF857JuUXzEw7JuUXzEx7JuUXzEy7JuUJy5zcGxpdCgnXycpLFxuICAgIG1vbnRoc1Nob3J0OiAnMeyblF8y7JuUXzPsm5RfNOyblF817JuUXzbsm5RfN+yblF847JuUXznsm5RfMTDsm5RfMTHsm5RfMTLsm5QnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzOiAn7J287JqU7J28X+yblOyalOydvF/tmZTsmpTsnbxf7IiY7JqU7J28X+uqqeyalOydvF/quIjsmpTsnbxf7Yag7JqU7J28Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfsnbxf7JuUX+2ZlF/siJhf66qpX+q4iF/thqAnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfsnbxf7JuUX+2ZlF/siJhf66qpX+q4iF/thqAnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdBIGg6bW0nLFxuICAgICAgICBMVFM6ICdBIGg6bW06c3MnLFxuICAgICAgICBMOiAnWVlZWS5NTS5ERC4nLFxuICAgICAgICBMTDogJ1lZWVnrhYQgTU1NTSBE7J28JyxcbiAgICAgICAgTExMOiAnWVlZWeuFhCBNTU1NIETsnbwgQSBoOm1tJyxcbiAgICAgICAgTExMTDogJ1lZWVnrhYQgTU1NTSBE7J28IGRkZGQgQSBoOm1tJyxcbiAgICAgICAgbDogJ1lZWVkuTU0uREQuJyxcbiAgICAgICAgbGw6ICdZWVlZ64WEIE1NTU0gROydvCcsXG4gICAgICAgIGxsbDogJ1lZWVnrhYQgTU1NTSBE7J28IEEgaDptbScsXG4gICAgICAgIGxsbGw6ICdZWVlZ64WEIE1NTU0gROydvCBkZGRkIEEgaDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAn7Jik64qYIExUJyxcbiAgICAgICAgbmV4dERheTogJ+uCtOydvCBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVCcsXG4gICAgICAgIGxhc3REYXk6ICfslrTsoJwgTFQnLFxuICAgICAgICBsYXN0V2VlazogJ+yngOuCnOyjvCBkZGRkIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICclcyDtm4QnLFxuICAgICAgICBwYXN0OiAnJXMg7KCEJyxcbiAgICAgICAgczogJ+uqhyDstIgnLFxuICAgICAgICBzczogJyVk7LSIJyxcbiAgICAgICAgbTogJzHrtoQnLFxuICAgICAgICBtbTogJyVk67aEJyxcbiAgICAgICAgaDogJ+2VnCDsi5zqsIQnLFxuICAgICAgICBoaDogJyVk7Iuc6rCEJyxcbiAgICAgICAgZDogJ+2VmOujqCcsXG4gICAgICAgIGRkOiAnJWTsnbwnLFxuICAgICAgICBNOiAn7ZWcIOuLrCcsXG4gICAgICAgIE1NOiAnJWTri6wnLFxuICAgICAgICB5OiAn7J28IOuFhCcsXG4gICAgICAgIHl5OiAnJWTrhYQnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOydvHzsm5R87KO8KS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+ydvCc7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+yblCc7XG4gICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn7KO8JztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL+yYpOyghHzsmKTtm4QvLFxuICAgIGlzUE06IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICByZXR1cm4gdG9rZW4gPT09ICfsmKTtm4QnO1xuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzVXBwZXIpIHtcbiAgICAgICAgcmV0dXJuIGhvdXIgPCAxMiA/ICfsmKTsoIQnIDogJ+yYpO2bhCc7XG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEt1cmRpc2ggW2t1XVxuLy8hIGF1dGhvciA6IFNoYWhyYW0gTWViYXNoYXIgOiBodHRwczovL2dpdGh1Yi5jb20vU2hhaHJhbU1lYmFzaGFyXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgMTogJ9mhJyxcbiAgICAgICAgMjogJ9miJyxcbiAgICAgICAgMzogJ9mjJyxcbiAgICAgICAgNDogJ9mkJyxcbiAgICAgICAgNTogJ9mlJyxcbiAgICAgICAgNjogJ9mmJyxcbiAgICAgICAgNzogJ9mnJyxcbiAgICAgICAgODogJ9moJyxcbiAgICAgICAgOTogJ9mpJyxcbiAgICAgICAgMDogJ9mgJyxcbiAgICB9LFxuICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ9mhJzogJzEnLFxuICAgICAgICAn2aInOiAnMicsXG4gICAgICAgICfZoyc6ICczJyxcbiAgICAgICAgJ9mkJzogJzQnLFxuICAgICAgICAn2aUnOiAnNScsXG4gICAgICAgICfZpic6ICc2JyxcbiAgICAgICAgJ9mnJzogJzcnLFxuICAgICAgICAn2agnOiAnOCcsXG4gICAgICAgICfZqSc6ICc5JyxcbiAgICAgICAgJ9mgJzogJzAnLFxuICAgIH0sXG4gICAgbW9udGhzID0gW1xuICAgICAgICAn2qnYp9mG2YjZhtuMINiv2YjZiNuV2YUnLFxuICAgICAgICAn2LTZiNio2KfYqicsXG4gICAgICAgICfYptin2LLYp9ixJyxcbiAgICAgICAgJ9mG24zYs9in2YYnLFxuICAgICAgICAn2KbYp9uM2KfYsScsXG4gICAgICAgICfYrdmI2LLblduM2LHYp9mGJyxcbiAgICAgICAgJ9iq25XZhdmF2YjYsicsXG4gICAgICAgICfYptin2KgnLFxuICAgICAgICAn2KbblduM2YTZiNmI2YQnLFxuICAgICAgICAn2KrYtNix24zZhtuMINuM25XZg9uV2YUnLFxuICAgICAgICAn2KrYtNix24zZhtuMINiv2YjZiNuV2YUnLFxuICAgICAgICAn2YPYp9mG2YjZhtuMINuM25XaqduV2YUnLFxuICAgIF07XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2t1Jywge1xuICAgIG1vbnRoczogbW9udGhzLFxuICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgd2Vla2RheXM6ICfbjNmH4oCM2YPYtNmH4oCM2YXZhdmH4oCMX9iv2YjZiNi02YfigIzZhdmF2YfigIxf2LPbjti02YfigIzZhdmF2YfigIxf2obZiNin2LHYtNmH4oCM2YXZhdmH4oCMX9m+247Zhtis2LTZh+KAjNmF2YXZh+KAjF/Zh9mH4oCM24zZhtuMX9i02YfigIzZhdmF2YfigIwnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfbjNmH4oCM2YPYtNmH4oCM2YVf2K/ZiNmI2LTZh+KAjNmFX9iz247YtNmH4oCM2YVf2obZiNin2LHYtNmH4oCM2YVf2b7bjtmG2KzYtNmH4oCM2YVf2YfZh+KAjNuM2YbbjF/YtNmH4oCM2YXZhdmH4oCMJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c01pbjogJ9uMX9ivX9izX9qGX9m+X9mHX9i0Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv2KbbjtmI2KfYsdmH4oCMfNio2YfigIzbjNin2YbbjC8sXG4gICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAv2KbbjtmI2KfYsdmH4oCMLy50ZXN0KGlucHV0KTtcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAn2KjZh+KAjNuM2KfZhtuMJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn2KbbjtmI2KfYsdmH4oCMJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vYptmH4oCM2YXYsduGINmD2KfYqtqY2YXbjtixXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb2KjZh+KAjNuM2KfZhtuMINmD2KfYqtqY2YXbjtixXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vYr9mI247ZhtuOINmD2KfYqtqY2YXbjtixXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnZGRkZCBb2YPYp9iq2pjZhduO2LFdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfZhNmH4oCMICVzJyxcbiAgICAgICAgcGFzdDogJyVzJyxcbiAgICAgICAgczogJ9qG2YfigIzZhtivINqG2LHZg9mH4oCM24zZh+KAjNmDJyxcbiAgICAgICAgc3M6ICfahtix2YPZh+KAjCAlZCcsXG4gICAgICAgIG06ICfbjNmH4oCM2YMg2K7ZiNmE2YfigIzZgycsXG4gICAgICAgIG1tOiAnJWQg2K7ZiNmE2YfigIzZgycsXG4gICAgICAgIGg6ICfbjNmH4oCM2YMg2YPYp9iq2pjZhduO2LEnLFxuICAgICAgICBoaDogJyVkINmD2KfYqtqY2YXbjtixJyxcbiAgICAgICAgZDogJ9uM2YfigIzZgyDalduG2pgnLFxuICAgICAgICBkZDogJyVkINqV24bamCcsXG4gICAgICAgIE06ICfbjNmH4oCM2YMg2YXYp9mG2q8nLFxuICAgICAgICBNTTogJyVkINmF2KfZhtqvJyxcbiAgICAgICAgeTogJ9uM2YfigIzZgyDYs9in2rUnLFxuICAgICAgICB5eTogJyVkINiz2KfatScsXG4gICAgfSxcbiAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nXG4gICAgICAgICAgICAucmVwbGFjZSgvW9mh2aLZo9mk2aXZptmn2ajZqdmgXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICB9LFxuICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAucmVwbGFjZSgvLC9nLCAn2IwnKTtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBLeXJneXogW2t5XVxuLy8hIGF1dGhvciA6IENoeW5neXogQXJ5c3RhbiB1dWx1IDogaHR0cHM6Ly9naXRodWIuY29tL2NoeW5neXpcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgc3VmZml4ZXMgPSB7XG4gICAgMDogJy3Rh9KvJyxcbiAgICAxOiAnLdGH0LgnLFxuICAgIDI6ICct0YfQuCcsXG4gICAgMzogJy3Rh9KvJyxcbiAgICA0OiAnLdGH0q8nLFxuICAgIDU6ICct0YfQuCcsXG4gICAgNjogJy3Rh9GLJyxcbiAgICA3OiAnLdGH0LgnLFxuICAgIDg6ICct0YfQuCcsXG4gICAgOTogJy3Rh9GDJyxcbiAgICAxMDogJy3Rh9GDJyxcbiAgICAyMDogJy3Rh9GLJyxcbiAgICAzMDogJy3Rh9GDJyxcbiAgICA0MDogJy3Rh9GLJyxcbiAgICA1MDogJy3Rh9KvJyxcbiAgICA2MDogJy3Rh9GLJyxcbiAgICA3MDogJy3Rh9C4JyxcbiAgICA4MDogJy3Rh9C4JyxcbiAgICA5MDogJy3Rh9GDJyxcbiAgICAxMDA6ICct0YfSrycsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdreScsIHtcbiAgICBtb250aHM6ICfRj9C90LLQsNGA0Yxf0YTQtdCy0YDQsNC70Yxf0LzQsNGA0YJf0LDQv9GA0LXQu9GMX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YDRjF/QvtC60YLRj9Cx0YDRjF/QvdC+0Y/QsdGA0Yxf0LTQtdC60LDQsdGA0YwnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAn0Y/QvdCyX9GE0LXQsl/QvNCw0YDRgl/QsNC/0YBf0LzQsNC5X9C40Y7QvdGMX9C40Y7Qu9GMX9Cw0LLQs1/RgdC10L1f0L7QutGCX9C90L7Rj1/QtNC10LonLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzOiAn0JbQtdC60YjQtdC80LHQuF/QlNKv0LnRiNOp0LzQsdKvX9Co0LXQudGI0LXQvNCx0Lhf0KjQsNGA0YjQtdC80LHQuF/QkdC10LnRiNC10LzQsdC4X9CW0YPQvNCwX9CY0YjQtdC80LHQuCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ9CW0LXQul/QlNKv0Llf0KjQtdC5X9Co0LDRgF/QkdC10Llf0JbRg9C8X9CY0YjQtScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ9CW0Lpf0JTQuV/QqNC5X9Co0YBf0JHQuV/QltC8X9CY0YgnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vQkdKv0LPSr9C9INGB0LDQsNGCXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb0K3RgNGC0LXSoyDRgdCw0LDRgl0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW9GB0LDQsNGCXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb0JrQtdGH0Y3RjSDRgdCw0LDRgl0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1vTqNGC0LrTqdC9INCw0L/RgtCw0L3Ri9C9XSBkZGRkIFvQutKv0L3Sr10gW9GB0LDQsNGCXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXMg0LjRh9C40L3QtNC1JyxcbiAgICAgICAgcGFzdDogJyVzINC80YPRgNGD0L0nLFxuICAgICAgICBzOiAn0LHQuNGA0L3QtdGH0LUg0YHQtdC60YPQvdC0JyxcbiAgICAgICAgc3M6ICclZCDRgdC10LrRg9C90LQnLFxuICAgICAgICBtOiAn0LHQuNGAINC80q/QvdOp0YInLFxuICAgICAgICBtbTogJyVkINC80q/QvdOp0YInLFxuICAgICAgICBoOiAn0LHQuNGAINGB0LDQsNGCJyxcbiAgICAgICAgaGg6ICclZCDRgdCw0LDRgicsXG4gICAgICAgIGQ6ICfQsdC40YAg0LrSr9C9JyxcbiAgICAgICAgZGQ6ICclZCDQutKv0L0nLFxuICAgICAgICBNOiAn0LHQuNGAINCw0LknLFxuICAgICAgICBNTTogJyVkINCw0LknLFxuICAgICAgICB5OiAn0LHQuNGAINC20YvQuycsXG4gICAgICAgIHl5OiAnJWQg0LbRi9C7JyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YfQuHzRh9GLfNGH0q980YfRgykvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIGEgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgIGIgPSBudW1iZXIgPj0gMTAwID8gMTAwIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1tudW1iZXJdIHx8IHN1ZmZpeGVzW2FdIHx8IHN1ZmZpeGVzW2JdKTtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEx1eGVtYm91cmdpc2ggW2xiXVxuLy8hIGF1dGhvciA6IG13ZWltZXJza2lyY2ggOiBodHRwczovL2dpdGh1Yi5jb20vbXdlaW1lcnNraXJjaFxuLy8hIGF1dGhvciA6IERhdmlkIFJhaXNvbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rd2lzYXR6XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICBtOiBbJ2VuZyBNaW51dHQnLCAnZW5nZXIgTWludXR0J10sXG4gICAgICAgIGg6IFsnZW5nIFN0b25uJywgJ2VuZ2VyIFN0b25uJ10sXG4gICAgICAgIGQ6IFsnZWVuIERhZycsICdlbmdlbSBEYWcnXSxcbiAgICAgICAgTTogWydlZSBNb3VudCcsICdlbmdlbSBNb3VudCddLFxuICAgICAgICB5OiBbJ2VlIEpvZXInLCAnZW5nZW0gSm9lciddLFxuICAgIH07XG4gICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0Z1dHVyZVRpbWUoc3RyaW5nKSB7XG4gICAgdmFyIG51bWJlciA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YoJyAnKSk7XG4gICAgaWYgKGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpKSB7XG4gICAgICAgIHJldHVybiAnYSAnICsgc3RyaW5nO1xuICAgIH1cbiAgICByZXR1cm4gJ2FuICcgKyBzdHJpbmc7XG59XG5mdW5jdGlvbiBwcm9jZXNzUGFzdFRpbWUoc3RyaW5nKSB7XG4gICAgdmFyIG51bWJlciA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YoJyAnKSk7XG4gICAgaWYgKGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpKSB7XG4gICAgICAgIHJldHVybiAndmlydSAnICsgc3RyaW5nO1xuICAgIH1cbiAgICByZXR1cm4gJ3ZpcnVuICcgKyBzdHJpbmc7XG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgd29yZCBiZWZvcmUgdGhlIGdpdmVuIG51bWJlciBsb3NlcyB0aGUgJy1uJyBlbmRpbmcuXG4gKiBlLmcuICdhbiAxMCBEZWVnJyBidXQgJ2EgNSBEZWVnJ1xuICpcbiAqIEBwYXJhbSBudW1iZXIge2ludGVnZXJ9XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gZWlmZWxlclJlZ2VsQXBwbGllc1RvTnVtYmVyKG51bWJlcikge1xuICAgIG51bWJlciA9IHBhcnNlSW50KG51bWJlciwgMTApO1xuICAgIGlmIChpc05hTihudW1iZXIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgLy8gTmVnYXRpdmUgTnVtYmVyIC0tPiBhbHdheXMgdHJ1ZVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA8IDEwKSB7XG4gICAgICAgIC8vIE9ubHkgMSBkaWdpdFxuICAgICAgICBpZiAoNCA8PSBudW1iZXIgJiYgbnVtYmVyIDw9IDcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA8IDEwMCkge1xuICAgICAgICAvLyAyIGRpZ2l0c1xuICAgICAgICB2YXIgbGFzdERpZ2l0ID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICBmaXJzdERpZ2l0ID0gbnVtYmVyIC8gMTA7XG4gICAgICAgIGlmIChsYXN0RGlnaXQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIoZmlyc3REaWdpdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihsYXN0RGlnaXQpO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgMTAwMDApIHtcbiAgICAgICAgLy8gMyBvciA0IGRpZ2l0cyAtLT4gcmVjdXJzaXZlbHkgY2hlY2sgZmlyc3QgZGlnaXRcbiAgICAgICAgd2hpbGUgKG51bWJlciA+PSAxMCkge1xuICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyIC8gMTA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVpZmVsZXJSZWdlbEFwcGxpZXNUb051bWJlcihudW1iZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFueXRoaW5nIGxhcmdlciB0aGFuIDQgZGlnaXRzOiByZWN1cnNpdmVseSBjaGVjayBmaXJzdCBuLTMgZGlnaXRzXG4gICAgICAgIG51bWJlciA9IG51bWJlciAvIDEwMDA7XG4gICAgICAgIHJldHVybiBlaWZlbGVyUmVnZWxBcHBsaWVzVG9OdW1iZXIobnVtYmVyKTtcbiAgICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2xiJywge1xuICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpGVyel9BYnLDq2xsX01lZV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbi5fRmVici5fTXJ6Ll9BYnIuX01lZV9KdW4uX0p1bC5fQXVnLl9TZXB0Ll9Pa3QuX05vdi5fRGV6Licuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogJ1Nvbm5kZWdfTcOpaW5kZWdfRMOrbnNjaGRlZ19Nw6t0dHdvY2hfRG9ubmVzY2hkZWdfRnJlaWRlZ19TYW1zY2hkZWcnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdTby5fTcOpLl9Ew6suX03Dqy5fRG8uX0ZyLl9TYS4nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdTb19Nw6lfRMOrX03Dq19Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdIOm1tIFtBdWVyXScsXG4gICAgICAgIExUUzogJ0g6bW06c3MgW0F1ZXJdJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tIFtBdWVyXScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tIYXV0IHVtXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIG5leHREYXk6ICdbTXVlciB1bV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbR8Orc2NodGVyIHVtXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBEaWZmZXJlbnQgZGF0ZSBzdHJpbmcgZm9yICdEw6tuc2NoZGVnJyAoVHVlc2RheSkgYW5kICdEb25uZXNjaGRlZycgKFRodXJzZGF5KSBkdWUgdG8gcGhvbm9sb2dpY2FsIHJ1bGVcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW0xlc2NodGVuXSBkZGRkIFt1bV0gTFQnO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW0xlc2NodGVdIGRkZGQgW3VtXSBMVCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiBwcm9jZXNzRnV0dXJlVGltZSxcbiAgICAgICAgcGFzdDogcHJvY2Vzc1Bhc3RUaW1lLFxuICAgICAgICBzOiAnZSBwdWVyIFNla29ubmVuJyxcbiAgICAgICAgc3M6ICclZCBTZWtvbm5lbicsXG4gICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIG1tOiAnJWQgTWludXR0ZW4nLFxuICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBoaDogJyVkIFN0b25uZW4nLFxuICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBkZDogJyVkIERlZWcnLFxuICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBNTTogJyVkIE3DqWludCcsXG4gICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIHl5OiAnJWQgSm9lcicsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IExhbyBbbG9dXG4vLyEgYXV0aG9yIDogUnlhbiBIYXJ0IDogaHR0cHM6Ly9naXRodWIuY29tL3J5YW5oYXJ0MlxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2xvJywge1xuICAgIG1vbnRoczogJ+C6oeC6seC6h+C6geC6reC6mV/guoHgurjguqHgup7gurJf4Lqh4Lq14LqZ4LqyX+C7gOC6oeC6quC6sl/gup7gurbgupTguqrgurDgup7gurJf4Lqh4Lq04LqW4Lq44LqZ4LqyX+C6geC7jeC6peC6sOC6geC6u+C6lF/guqrgurTguofguqvgurJf4LqB4Lqx4LqZ4LqN4LqyX+C6leC6uOC6peC6sl/gup7gurDguojgurTguoFf4LqX4Lqx4LqZ4Lqn4LqyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ+C6oeC6seC6h+C6geC6reC6mV/guoHgurjguqHgup7gurJf4Lqh4Lq14LqZ4LqyX+C7gOC6oeC6quC6sl/gup7gurbgupTguqrgurDgup7gurJf4Lqh4Lq04LqW4Lq44LqZ4LqyX+C6geC7jeC6peC6sOC6geC6u+C6lF/guqrgurTguofguqvgurJf4LqB4Lqx4LqZ4LqN4LqyX+C6leC6uOC6peC6sl/gup7gurDguojgurTguoFf4LqX4Lqx4LqZ4Lqn4LqyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5czogJ+C6reC6suC6l+C6tOC6lF/guojgurHguplf4Lqt4Lqx4LqH4LqE4Lqy4LqZX+C6nuC6uOC6lF/gup7gurDguqvgurHgupRf4Lqq4Lq44LqBX+C7gOC6quC6u+C6sicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn4LqX4Lq04LqUX+C6iOC6seC6mV/guq3gurHguofguoTgurLguplf4Lqe4Lq44LqUX+C6nuC6sOC6q+C6seC6lF/guqrgurjguoFf4LuA4Lqq4Lq74LqyJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn4LqXX+C6iF/guq3guoRf4LqeX+C6nuC6q1/guqrguoFf4LqqJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICfguqfgurHguplkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIG1lcmlkaWVtUGFyc2U6IC/gupXguq3gupngu4Dguorgurvgu4ngurJ84LqV4Lqt4LqZ4LuB4Lql4LqHLyxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn4LqV4Lqt4LqZ4LuB4Lql4LqHJztcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAn4LqV4Lqt4LqZ4LuA4LqK4Lq74LuJ4LqyJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn4LqV4Lqt4LqZ4LuB4Lql4LqHJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vguqHgurfgu4ngupngurXgu4ngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vguqHgurfgu4nguq3gurfgu4jgupngu4DguqfguqXgurJdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdb4Lqn4Lqx4LqZXWRkZGRb4Luc4LuJ4Lqy4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4Lqh4Lq34LuJ4Lqn4Lqy4LqZ4LqZ4Lq14LuJ4LuA4Lqn4Lql4LqyXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW+C6p+C6seC6mV1kZGRkW+C7geC6peC7ieC6p+C6meC6teC7ieC7gOC6p+C6peC6sl0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ+C6reC6teC6gSAlcycsXG4gICAgICAgIHBhc3Q6ICclc+C6nOC7iOC6suC6meC6oeC6sicsXG4gICAgICAgIHM6ICfguprgu43gu4jgu4Dgupfgurvgu4jgurLgu4PgupTguqfgurTgupngurLgupfgurUnLFxuICAgICAgICBzczogJyVkIOC6p+C6tOC6meC6suC6l+C6tScsXG4gICAgICAgIG06ICcxIOC6meC6suC6l+C6tScsXG4gICAgICAgIG1tOiAnJWQg4LqZ4Lqy4LqX4Lq1JyxcbiAgICAgICAgaDogJzEg4LqK4Lq74LuI4Lqn4LuC4Lqh4LqHJyxcbiAgICAgICAgaGg6ICclZCDguorgurvgu4jguqfgu4LguqHguocnLFxuICAgICAgICBkOiAnMSDguqHgurfgu4knLFxuICAgICAgICBkZDogJyVkIOC6oeC6t+C7iScsXG4gICAgICAgIE06ICcxIOC7gOC6lOC6t+C6reC6mScsXG4gICAgICAgIE1NOiAnJWQg4LuA4LqU4Lq34Lqt4LqZJyxcbiAgICAgICAgeTogJzEg4Lqb4Lq1JyxcbiAgICAgICAgeXk6ICclZCDgupvgurUnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogLyjgupfgurXgu4gpXFxkezEsMn0vLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuICfgupfgurXgu4gnICsgbnVtYmVyO1xuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBMaXRodWFuaWFuIFtsdF1cbi8vISBhdXRob3IgOiBNaW5kYXVnYXMgTW96xatyYXMgOiBodHRwczovL2dpdGh1Yi5jb20vbW1venVyYXNcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgdW5pdHMgPSB7XG4gICAgc3M6ICdzZWt1bmTEl19zZWt1bmTFvmnFs19zZWt1bmRlcycsXG4gICAgbTogJ21pbnV0xJdfbWludXTEl3NfbWludXTEmScsXG4gICAgbW06ICdtaW51dMSXc19taW51xI1pxbNfbWludXRlcycsXG4gICAgaDogJ3ZhbGFuZGFfdmFsYW5kb3NfdmFsYW5kxIUnLFxuICAgIGhoOiAndmFsYW5kb3NfdmFsYW5kxbNfdmFsYW5kYXMnLFxuICAgIGQ6ICdkaWVuYV9kaWVub3NfZGllbsSFJyxcbiAgICBkZDogJ2RpZW5vc19kaWVuxbNfZGllbmFzJyxcbiAgICBNOiAnbcSXbnVvX23El25lc2lvX23El25lc8SvJyxcbiAgICBNTTogJ23El25lc2lhaV9txJduZXNpxbNfbcSXbmVzaXVzJyxcbiAgICB5OiAnbWV0YWlfbWV0xbNfbWV0dXMnLFxuICAgIHl5OiAnbWV0YWlfbWV0xbNfbWV0dXMnLFxufTtcbmZ1bmN0aW9uIHRyYW5zbGF0ZVNlY29uZHMobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuICdrZWxpb3Mgc2VrdW5kxJdzJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAna2VsacWzIHNla3VuZMW+acWzJyA6ICdrZWxpYXMgc2VrdW5kZXMnO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRyYW5zbGF0ZVNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgIHJldHVybiB3aXRob3V0U3VmZml4XG4gICAgICAgID8gZm9ybXMoa2V5KVswXVxuICAgICAgICA6IGlzRnV0dXJlXG4gICAgICAgID8gZm9ybXMoa2V5KVsxXVxuICAgICAgICA6IGZvcm1zKGtleSlbMl07XG59XG5mdW5jdGlvbiBzcGVjaWFsKG51bWJlcikge1xuICAgIHJldHVybiBudW1iZXIgJSAxMCA9PT0gMCB8fCAobnVtYmVyID4gMTAgJiYgbnVtYmVyIDwgMjApO1xufVxuZnVuY3Rpb24gZm9ybXMoa2V5KSB7XG4gICAgcmV0dXJuIHVuaXRzW2tleV0uc3BsaXQoJ18nKTtcbn1cbmZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICB2YXIgcmVzdWx0ID0gbnVtYmVyICsgJyAnO1xuICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHJlc3VsdCArIHRyYW5zbGF0ZVNpbmd1bGFyKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5WzBdLCBpc0Z1dHVyZSlcbiAgICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCArIChzcGVjaWFsKG51bWJlcikgPyBmb3JtcyhrZXkpWzFdIDogZm9ybXMoa2V5KVswXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzRnV0dXJlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgZm9ybXMoa2V5KVsxXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAoc3BlY2lhbChudW1iZXIpID8gZm9ybXMoa2V5KVsxXSA6IGZvcm1zKGtleSlbMl0pO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnbHQnLCB7XG4gICAgbW9udGhzOiB7XG4gICAgICAgIGZvcm1hdDogJ3NhdXNpb192YXNhcmlvX2tvdm9fYmFsYW5kxb5pb19nZWd1xb7El3NfYmlyxb5lbGlvX2xpZXBvc19ydWdwasWrxI1pb19ydWdzxJdqb19zcGFsaW9fbGFwa3JpxI1pb19ncnVvZMW+aW8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHN0YW5kYWxvbmU6ICdzYXVzaXNfdmFzYXJpc19rb3Zhc19iYWxhbmRpc19nZWd1xb7El19iaXLFvmVsaXNfbGllcGFfcnVncGrFq3Rpc19ydWdzxJdqaXNfc3BhbGlzX2xhcGtyaXRpc19ncnVvZGlzJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBpc0Zvcm1hdDogL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT98TU1NTT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK0Rbb0RdPy8sXG4gICAgfSxcbiAgICBtb250aHNTaG9ydDogJ3NhdV92YXNfa292X2JhbF9nZWdfYmlyX2xpZV9yZ3BfcmdzX3NwYV9sYXBfZ3JkJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiB7XG4gICAgICAgIGZvcm1hdDogJ3Nla21hZGllbsSvX3Bpcm1hZGllbsSvX2FudHJhZGllbsSvX3RyZcSNaWFkaWVuxK9fa2V0dmlydGFkaWVuxK9fcGVua3RhZGllbsSvX8WhZcWhdGFkaWVuxK8nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHN0YW5kYWxvbmU6ICdzZWttYWRpZW5pc19waXJtYWRpZW5pc19hbnRyYWRpZW5pc190cmXEjWlhZGllbmlzX2tldHZpcnRhZGllbmlzX3Blbmt0YWRpZW5pc1/FoWXFoXRhZGllbmlzJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBpc0Zvcm1hdDogL2RkZGQgSEg6bW0vLFxuICAgIH0sXG4gICAgd2Vla2RheXNTaG9ydDogJ1Nla19QaXJfQW50X1RyZV9LZXRfUGVuX8WgZcWhJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnU19QX0FfVF9LX1BuX8WgJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgIExMOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dJyxcbiAgICAgICAgTExMOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0nLFxuICAgICAgICBMTExMOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGRkLCBISDptbSBbdmFsLl0nLFxuICAgICAgICBsOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgIGxsOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dJyxcbiAgICAgICAgbGxsOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBISDptbSBbdmFsLl0nLFxuICAgICAgICBsbGxsOiAnWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGQsIEhIOm1tIFt2YWwuXScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW8WgaWFuZGllbl0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1J5dG9qXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbVmFrYXJdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbUHJhxJdqdXPEr10gZGRkZCBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAncG8gJXMnLFxuICAgICAgICBwYXN0OiAncHJpZcWhICVzJyxcbiAgICAgICAgczogdHJhbnNsYXRlU2Vjb25kcyxcbiAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgbTogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgIGg6IHRyYW5zbGF0ZVNpbmd1bGFyLFxuICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICBkOiB0cmFuc2xhdGVTaW5ndWxhcixcbiAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgTTogdHJhbnNsYXRlU2luZ3VsYXIsXG4gICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgIHk6IHRyYW5zbGF0ZVNpbmd1bGFyLFxuICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LW9qaS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyICsgJy1vamknO1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTGF0dmlhbiBbbHZdXG4vLyEgYXV0aG9yIDogS3Jpc3RhcHMgS2FybHNvbnMgOiBodHRwczovL2dpdGh1Yi5jb20vc2tha3JpXG4vLyEgYXV0aG9yIDogSsSBbmlzIEVsbWVyaXMgOiBodHRwczovL2dpdGh1Yi5jb20vSmFuaXNFXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHVuaXRzID0ge1xuICAgIHNzOiAnc2VrdW5kZXNfc2VrdW5kxJNtX3Nla3VuZGVfc2VrdW5kZXMnLnNwbGl0KCdfJyksXG4gICAgbTogJ21pbsWrdGVzX21pbsWrdMSTbV9taW7Fq3RlX21pbsWrdGVzJy5zcGxpdCgnXycpLFxuICAgIG1tOiAnbWluxat0ZXNfbWluxat0xJNtX21pbsWrdGVfbWluxat0ZXMnLnNwbGl0KCdfJyksXG4gICAgaDogJ3N0dW5kYXNfc3R1bmTEgW1fc3R1bmRhX3N0dW5kYXMnLnNwbGl0KCdfJyksXG4gICAgaGg6ICdzdHVuZGFzX3N0dW5kxIFtX3N0dW5kYV9zdHVuZGFzJy5zcGxpdCgnXycpLFxuICAgIGQ6ICdkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXMnLnNwbGl0KCdfJyksXG4gICAgZGQ6ICdkaWVuYXNfZGllbsSBbV9kaWVuYV9kaWVuYXMnLnNwbGl0KCdfJyksXG4gICAgTTogJ23Ek25lxaFhX23Ek25lxaFpZW1fbcSTbmVzaXNfbcSTbmXFoWknLnNwbGl0KCdfJyksXG4gICAgTU06ICdtxJNuZcWhYV9txJNuZcWhaWVtX23Ek25lc2lzX23Ek25lxaFpJy5zcGxpdCgnXycpLFxuICAgIHk6ICdnYWRhX2dhZGllbV9nYWRzX2dhZGknLnNwbGl0KCdfJyksXG4gICAgeXk6ICdnYWRhX2dhZGllbV9nYWRzX2dhZGknLnNwbGl0KCdfJyksXG59O1xuLyoqXG4gKiBAcGFyYW0gd2l0aG91dFN1ZmZpeCBib29sZWFuIHRydWUgPSBhIGxlbmd0aCBvZiB0aW1lOyBmYWxzZSA9IGJlZm9yZS9hZnRlciBhIHBlcmlvZCBvZiB0aW1lLlxuICovXG5mdW5jdGlvbiBmb3JtYXQoZm9ybXMsIG51bWJlciwgd2l0aG91dFN1ZmZpeCkge1xuICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIC8vIEUuZy4gXCIyMSBtaW7Fq3RlXCIsIFwiMyBtaW7Fq3Rlc1wiLlxuICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDEgJiYgbnVtYmVyICUgMTAwICE9PSAxMSA/IGZvcm1zWzJdIDogZm9ybXNbM107XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRS5nLiBcIjIxIG1pbsWrdGVzXCIgYXMgaW4gXCJwxJNjIDIxIG1pbsWrdGVzXCIuXG4gICAgICAgIC8vIEUuZy4gXCIzIG1pbsWrdMSTbVwiIGFzIGluIFwicMSTYyAzIG1pbsWrdMSTbVwiLlxuICAgICAgICByZXR1cm4gbnVtYmVyICUgMTAgPT09IDEgJiYgbnVtYmVyICUgMTAwICE9PSAxMSA/IGZvcm1zWzBdIDogZm9ybXNbMV07XG4gICAgfVxufVxuZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgIHJldHVybiBudW1iZXIgKyAnICcgKyBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbn1cbmZ1bmN0aW9uIHJlbGF0aXZlVGltZVdpdGhTaW5ndWxhcihudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgIHJldHVybiBmb3JtYXQodW5pdHNba2V5XSwgbnVtYmVyLCB3aXRob3V0U3VmZml4KTtcbn1cbmZ1bmN0aW9uIHJlbGF0aXZlU2Vjb25kcyhudW1iZXIsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdkYcW+YXMgc2VrdW5kZXMnIDogJ2Rhxb7EgW0gc2VrdW5kxJNtJztcbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnbHYnLCB7XG4gICAgbW9udGhzOiAnamFudsSBcmlzX2ZlYnJ1xIFyaXNfbWFydHNfYXByxKtsaXNfbWFpanNfasWrbmlqc19qxatsaWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWlfasWrbl9qxatsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICdzdsSTdGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90cmXFoWRpZW5hX2NldHVydGRpZW5hX3BpZWt0ZGllbmFfc2VzdGRpZW5hJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnU3ZfUF9PX1RfQ19Qa19TJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnU3ZfUF9PX1RfQ19Qa19TJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQuTU0uWVlZWS4nLFxuICAgICAgICBMTDogJ1lZWVkuIFtnYWRhXSBELiBNTU1NJyxcbiAgICAgICAgTExMOiAnWVlZWS4gW2dhZGFdIEQuIE1NTU0sIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ1lZWVkuIFtnYWRhXSBELiBNTU1NLCBkZGRkLCBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW8Wgb2RpZW4gcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tSxKt0IHB1bGtzdGVuXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tWYWthciBwdWxrc3Rlbl0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tQYWfEgWp1xaHEgV0gZGRkZCBbcHVsa3N0ZW5dIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdwxJNjICVzJyxcbiAgICAgICAgcGFzdDogJ3Bpcm1zICVzJyxcbiAgICAgICAgczogcmVsYXRpdmVTZWNvbmRzLFxuICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgbTogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgaDogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICBoaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgZDogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgTTogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgeTogcmVsYXRpdmVUaW1lV2l0aFNpbmd1bGFyLFxuICAgICAgICB5eTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgb3JkaW5hbDogJyVkLicsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTW9udGVuZWdyaW4gW21lXVxuLy8hIGF1dGhvciA6IE1pb2RyYWcgTmlrYcSNIDxtaW9kcmFnQHJlc3RhcnRpdC5tZT4gOiBodHRwczovL2dpdGh1Yi5jb20vbWlvZHJhZ25pa2FjXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHRyYW5zbGF0b3IgPSB7XG4gICAgd29yZHM6IHtcbiAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgc3M6IFsnc2VrdW5kJywgJ3Nla3VuZGEnLCAnc2VrdW5kaSddLFxuICAgICAgICBtOiBbJ2plZGFuIG1pbnV0JywgJ2plZG5vZyBtaW51dGEnXSxcbiAgICAgICAgbW06IFsnbWludXQnLCAnbWludXRhJywgJ21pbnV0YSddLFxuICAgICAgICBoOiBbJ2plZGFuIHNhdCcsICdqZWRub2cgc2F0YSddLFxuICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgIGRkOiBbJ2RhbicsICdkYW5hJywgJ2RhbmEnXSxcbiAgICAgICAgTU06IFsnbWplc2VjJywgJ21qZXNlY2EnLCAnbWplc2VjaSddLFxuICAgICAgICB5eTogWydnb2RpbmEnLCAnZ29kaW5lJywgJ2dvZGluYSddLFxuICAgIH0sXG4gICAgY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTogZnVuY3Rpb24gKG51bWJlciwgd29yZEtleSkge1xuICAgICAgICByZXR1cm4gbnVtYmVyID09PSAxXG4gICAgICAgICAgICA/IHdvcmRLZXlbMF1cbiAgICAgICAgICAgIDogbnVtYmVyID49IDIgJiYgbnVtYmVyIDw9IDRcbiAgICAgICAgICAgID8gd29yZEtleVsxXVxuICAgICAgICAgICAgOiB3b3JkS2V5WzJdO1xuICAgIH0sXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIHdvcmRLZXkgPSB0cmFuc2xhdG9yLndvcmRzW2tleV07XG4gICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnbWUnLCB7XG4gICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6ICduZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV/EjWV0dnJ0YWtfcGV0YWtfc3Vib3RhJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnbmVkLl9wb24uX3V0by5fc3JpLl/EjWV0Ll9wZXQuX3N1Yi4nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICduZV9wb191dF9zcl/EjWVfcGVfc3UnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSDptbScsXG4gICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbc2p1dHJhIHVdIExUJyxcblxuICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkamVsanVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbc3JpamVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGxhc3REYXk6ICdbanXEjWUgdV0gTFQnLFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGxhc3RXZWVrRGF5cyA9IFtcbiAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtuZWRqZWxqZV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcG9uZWRqZWxqa2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3V0b3JrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtzcmlqZWRlXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFvEjWV0dnJ0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW3BldGthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICdbcHJvxaFsZV0gW3N1Ym90ZV0gW3VdIExUJyxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm4gbGFzdFdlZWtEYXlzW3RoaXMuZGF5KCldO1xuICAgICAgICB9LFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ3phICVzJyxcbiAgICAgICAgcGFzdDogJ3ByaWplICVzJyxcbiAgICAgICAgczogJ25la29saWtvIHNla3VuZGknLFxuICAgICAgICBzczogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIG06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICBtbTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICBoaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICBkZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIE06ICdtamVzZWMnLFxuICAgICAgICBNTTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIHk6ICdnb2RpbnUnLFxuICAgICAgICB5eTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hb3JpIFttaV1cbi8vISBhdXRob3IgOiBKb2huIENvcnJpZ2FuIDxyb2JiaWVjbG9zZXRAZ21haWwuY29tPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb2huaWRlYWxcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdtaScsIHtcbiAgICBtb250aHM6ICdLb2hpLXTEgXRlX0h1aS10YW5ndXJ1X1BvdXTFqy10ZS1yYW5naV9QYWVuZ2Etd2jEgXdoxIFfSGFyYXR1YV9QaXBpcmlfSMWNbmdvaW5nb2lfSGVyZS10dXJpLWvFjWvEgV9NYWh1cnVfV2hpcmluZ2EtxIEtbnVrdV9XaGlyaW5nYS3EgS1yYW5naV9IYWtpaGVhJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0tvaGlfSHVpX1BvdV9QYWVfSGFyYV9QaXBpX0jFjW5nb2lfSGVyZV9NYWh1X1doaS1udV9XaGktcmFfSGFraScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUmVnZXg6IC8oPzpbJ2EtelxcdTAxMDFcXHUwMTREXFx1MDE2Ql0rXFwtPyl7MSwzfS9pLFxuICAgIG1vbnRoc1N0cmljdFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICBtb250aHNTaG9ydFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsM30vaSxcbiAgICBtb250aHNTaG9ydFN0cmljdFJlZ2V4OiAvKD86WydhLXpcXHUwMTAxXFx1MDE0RFxcdTAxNkJdK1xcLT8pezEsMn0vaSxcbiAgICB3ZWVrZGF5czogJ1LEgXRhcHVfTWFuZV9UxatyZWlfV2VuZXJlaV9UxIFpdGVfUGFyYWlyZV9IxIF0YXJlaScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnVGFfTWFfVMWrX1dlX1TEgWlfUGFfSMSBJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnVGFfTWFfVMWrX1dlX1TEgWlfUGFfSMSBJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtpXSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBbaV0gSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tpIHRlaWUgbWFoYW5hLCBpXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbYXBvcG8gaV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2ldIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tpbmFuYWhpIGldIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt3aGFrYW11dHVuZ2EgaV0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2kgcm90byBpICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGkgbXVhJyxcbiAgICAgICAgczogJ3RlIGjEk2tvbmEgcnVhcnVhJyxcbiAgICAgICAgc3M6ICclZCBoxJNrb25hJyxcbiAgICAgICAgbTogJ2hlIG1lbmV0aScsXG4gICAgICAgIG1tOiAnJWQgbWVuZXRpJyxcbiAgICAgICAgaDogJ3RlIGhhb3JhJyxcbiAgICAgICAgaGg6ICclZCBoYW9yYScsXG4gICAgICAgIGQ6ICdoZSByYScsXG4gICAgICAgIGRkOiAnJWQgcmEnLFxuICAgICAgICBNOiAnaGUgbWFyYW1hJyxcbiAgICAgICAgTU06ICclZCBtYXJhbWEnLFxuICAgICAgICB5OiAnaGUgdGF1JyxcbiAgICAgICAgeXk6ICclZCB0YXUnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9wrovLFxuICAgIG9yZGluYWw6ICclZMK6JyxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWNlZG9uaWFuIFtta11cbi8vISBhdXRob3IgOiBCb3Jpc2xhdiBNaWNrb3YgOiBodHRwczovL2dpdGh1Yi5jb20vQjBrMFxuLy8hIGF1dGhvciA6IFNhc2hrbyBUb2Rvcm92IDogaHR0cHM6Ly9naXRodWIuY29tL2JreWNlaFxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdtaycsIHtcbiAgICBtb250aHM6ICfRmNCw0L3Rg9Cw0YDQuF/RhNC10LLRgNGD0LDRgNC4X9C80LDRgNGCX9Cw0L/RgNC40Ltf0LzQsNGYX9GY0YPQvdC4X9GY0YPQu9C4X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQstGA0Lhf0L7QutGC0L7QvNCy0YDQuF/QvdC+0LXQvNCy0YDQuF/QtNC10LrQtdC80LLRgNC4Jy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ9GY0LDQvV/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Zhf0ZjRg9C9X9GY0YPQu1/QsNCy0LNf0YHQtdC/X9C+0LrRgl/QvdC+0LVf0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAn0L3QtdC00LXQu9CwX9C/0L7QvdC10LTQtdC70L3QuNC6X9Cy0YLQvtGA0L3QuNC6X9GB0YDQtdC00LBf0YfQtdGC0LLRgNGC0L7Qul/Qv9C10YLQvtC6X9GB0LDQsdC+0YLQsCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ9C90LXQtF/Qv9C+0L1f0LLRgtC+X9GB0YDQtV/Rh9C10YJf0L/QtdGCX9GB0LDQsScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ9C9ZV/Qv29f0LLRgl/RgdGAX9GH0LVf0L/QtV/RgWEnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgIEw6ICdELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdb0JTQtdC90LXRgSDQstC+XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb0KPRgtGA0LUg0LLQvl0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ1vQktC+XSBkZGRkIFvQstC+XSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb0JLRh9C10YDQsCDQstC+XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JjQt9C80LjQvdCw0YLQsNGC0LBdIGRkZGQgW9Cy0L5dIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CY0LfQvNC40L3QsNGC0LjQvtGCXSBkZGRkIFvQstC+XSBMVCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAn0LfQsCAlcycsXG4gICAgICAgIHBhc3Q6ICfQv9GA0LXQtCAlcycsXG4gICAgICAgIHM6ICfQvdC10LrQvtC70LrRgyDRgdC10LrRg9C90LTQuCcsXG4gICAgICAgIHNzOiAnJWQg0YHQtdC60YPQvdC00LgnLFxuICAgICAgICBtOiAn0LXQtNC90LAg0LzQuNC90YPRgtCwJyxcbiAgICAgICAgbW06ICclZCDQvNC40L3Rg9GC0LgnLFxuICAgICAgICBoOiAn0LXQtNC10L0g0YfQsNGBJyxcbiAgICAgICAgaGg6ICclZCDRh9Cw0YHQsCcsXG4gICAgICAgIGQ6ICfQtdC00LXQvSDQtNC10L0nLFxuICAgICAgICBkZDogJyVkINC00LXQvdCwJyxcbiAgICAgICAgTTogJ9C10LTQtdC9INC80LXRgdC10YYnLFxuICAgICAgICBNTTogJyVkINC80LXRgdC10YbQuCcsXG4gICAgICAgIHk6ICfQtdC00L3QsCDQs9C+0LTQuNC90LAnLFxuICAgICAgICB5eTogJyVkINCz0L7QtNC40L3QuCcsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC10LJ80LXQvXzRgtC4fNCy0Lh80YDQuHzQvNC4KS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICB2YXIgbGFzdERpZ2l0ID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICBsYXN0MkRpZ2l0cyA9IG51bWJlciAlIDEwMDtcbiAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LXQsic7XG4gICAgICAgIH0gZWxzZSBpZiAobGFzdDJEaWdpdHMgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC10L0nO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3QyRGlnaXRzID4gMTAgJiYgbGFzdDJEaWdpdHMgPCAyMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgIH0gZWxzZSBpZiAobGFzdERpZ2l0ID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QstC4JztcbiAgICAgICAgfSBlbHNlIGlmIChsYXN0RGlnaXQgPT09IDIpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGA0LgnO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3REaWdpdCA9PT0gNyB8fCBsYXN0RGlnaXQgPT09IDgpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdC80LgnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0YLQuCc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE1hbGF5YWxhbSBbbWxdXG4vLyEgYXV0aG9yIDogRmxveWQgUGluayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbG95ZHBpbmtcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdtbCcsIHtcbiAgICBtb250aHM6ICfgtJzgtKjgtYHgtLXgtLDgtL9f4LSr4LWG4LSs4LWN4LSw4LWB4LS14LSw4LS/X+C0ruC0vuC1vOC0muC1jeC0muC1jV/gtI/gtKrgtY3gtLDgtL/gtb1f4LSu4LWH4LSv4LWNX+C0nOC1guC1ul/gtJzgtYLgtLLgtYhf4LST4LSX4LS44LWN4LSx4LWN4LSx4LWNX+C0uOC1huC0quC1jeC0seC1jeC0seC0guC0rOC1vF/gtJLgtJXgtY3gtJ/gtYvgtKzgtbxf4LSo4LS14LSC4LSs4LW8X+C0oeC0v+C0uOC0guC0rOC1vCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICfgtJzgtKjgtYEuX+C0q+C1huC0rOC1jeC0sOC1gS5f4LSu4LS+4LW8Ll/gtI/gtKrgtY3gtLDgtL8uX+C0ruC1h+C0r+C1jV/gtJzgtYLgtbpf4LSc4LWC4LSy4LWILl/gtJPgtJcuX+C0uOC1huC0quC1jeC0seC1jeC0sS5f4LSS4LSV4LWN4LSf4LWLLl/gtKjgtLXgtIIuX+C0oeC0v+C0uOC0gi4nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6ICfgtJ7gtL7gtK/gtLHgtL7gtLTgtY3gtJpf4LSk4LS/4LSZ4LWN4LSV4LSz4LS+4LS04LWN4LSaX+C0muC1iuC0teC1jeC0teC0vuC0tOC1jeC0ml/gtKzgtYHgtKfgtKjgtL7gtLTgtY3gtJpf4LS14LWN4LSv4LS+4LS04LS+4LS04LWN4LSaX+C0teC1huC0s+C1jeC0s+C0v+C0r+C0vuC0tOC1jeC0ml/gtLbgtKjgtL/gtK/gtL7gtLTgtY3gtJonLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfgtJ7gtL7gtK/gtbxf4LSk4LS/4LSZ4LWN4LSV4LW+X+C0muC1iuC0teC1jeC0tV/gtKzgtYHgtKfgtbtf4LS14LWN4LSv4LS+4LS04LSCX+C0teC1huC0s+C1jeC0s+C0v1/gtLbgtKjgtL8nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfgtJ7gtL5f4LSk4LS/X+C0muC1il/gtKzgtYFf4LS14LWN4LSv4LS+X+C0teC1hl/gtLYnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdBIGg6bW0gLeC0qOC1gScsXG4gICAgICAgIExUUzogJ0EgaDptbTpzcyAt4LSo4LWBJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSAt4LSo4LWBJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gLeC0qOC1gScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW+C0h+C0qOC1jeC0qOC1jV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW+C0qOC0vuC0s+C1hl0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vgtIfgtKjgtY3gtKjgtLLgtYZdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdb4LSV4LS04LS/4LSe4LWN4LSeXSBkZGRkLCBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXMg4LSV4LS04LS/4LSe4LWN4LSe4LWNJyxcbiAgICAgICAgcGFzdDogJyVzIOC0ruC1geC1u+C0quC1jScsXG4gICAgICAgIHM6ICfgtIXgtb3gtKog4LSo4LS/4LSu4LS/4LS34LSZ4LWN4LSZ4LW+JyxcbiAgICAgICAgc3M6ICclZCDgtLjgtYbgtJXgtY3gtJXgtbvgtKHgtY0nLFxuICAgICAgICBtOiAn4LSS4LSw4LWBIOC0ruC0v+C0qOC0v+C0seC1jeC0seC1jScsXG4gICAgICAgIG1tOiAnJWQg4LSu4LS/4LSo4LS/4LSx4LWN4LSx4LWNJyxcbiAgICAgICAgaDogJ+C0kuC0sOC1gSDgtK7gtKPgtL/gtJXgtY3gtJXgtYLgtbwnLFxuICAgICAgICBoaDogJyVkIOC0ruC0o+C0v+C0leC1jeC0leC1guC1vCcsXG4gICAgICAgIGQ6ICfgtJLgtLDgtYEg4LSm4LS/4LS14LS44LSCJyxcbiAgICAgICAgZGQ6ICclZCDgtKbgtL/gtLXgtLjgtIInLFxuICAgICAgICBNOiAn4LSS4LSw4LWBIOC0ruC0vuC0uOC0gicsXG4gICAgICAgIE1NOiAnJWQg4LSu4LS+4LS44LSCJyxcbiAgICAgICAgeTogJ+C0kuC0sOC1gSDgtLXgtbzgtLfgtIInLFxuICAgICAgICB5eTogJyVkIOC0teC1vOC0t+C0gicsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv4LSw4LS+4LSk4LWN4LSw4LS/fOC0sOC0vuC0teC0v+C0suC1hnzgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNfOC0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0gnzgtLDgtL7gtKTgtY3gtLDgtL8vaSxcbiAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChtZXJpZGllbSA9PT0gJ+C0sOC0vuC0pOC1jeC0sOC0vycgJiYgaG91ciA+PSA0KSB8fFxuICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgtIngtJrgtY3gtJog4LSV4LS04LS/4LSe4LWN4LSe4LWNJyB8fFxuICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgtLXgtYjgtJXgtYHgtKjgtY3gtKjgtYfgtLDgtIInXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiAn4LSw4LS+4LSk4LWN4LSw4LS/JztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAn4LSw4LS+4LS14LS/4LSy4LWGJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgIHJldHVybiAn4LSJ4LSa4LWN4LSaIOC0leC0tOC0v+C0nuC1jeC0nuC1jSc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDIwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+C0teC1iOC0leC1geC0qOC1jeC0qOC1h+C0sOC0gic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ+C0sOC0vuC0pOC1jeC0sOC0vyc7XG4gICAgICAgIH1cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTW9uZ29saWFuIFttbl1cbi8vISBhdXRob3IgOiBKYXZraGxhbnR1Z3MgTnlhbWRvcmogOiBodHRwczovL2dpdGh1Yi5jb20vamF2a2hhYW5qN1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9GF0Y3QtNGF0Y3QvSDRgdC10LrRg9C90LQnIDogJ9GF0Y3QtNGF0Y3QvSDRgdC10LrRg9C90LTRi9C9JztcbiAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDRgdC10LrRg9C90LQnIDogJyDRgdC10LrRg9C90LTRi9C9Jyk7XG4gICAgICAgIGNhc2UgJ20nOlxuICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgKHdpdGhvdXRTdWZmaXggPyAnINC80LjQvdGD0YInIDogJyDQvNC40L3Rg9GC0YvQvScpO1xuICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDRhtCw0LMnIDogJyDRhtCw0LPQuNC50L0nKTtcbiAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg06nQtNOp0YAnIDogJyDTqdC00YDQuNC50L0nKTtcbiAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAod2l0aG91dFN1ZmZpeCA/ICcg0YHQsNGAJyA6ICcg0YHQsNGA0YvQvScpO1xuICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICh3aXRob3V0U3VmZml4ID8gJyDQttC40LsnIDogJyDQttC40LvQuNC50L0nKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdtbicsIHtcbiAgICBtb250aHM6ICfQndGN0LPQtNKv0LPRjdGN0YAg0YHQsNGAX9Cl0L7RkdGA0LTRg9Cz0LDQsNGAINGB0LDRgF/Qk9GD0YDQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/QlNOp0YDTqdCy0LTSr9Cz0Y3RjdGAINGB0LDRgF/QotCw0LLQtNGD0LPQsNCw0YAg0YHQsNGAX9CX0YPRgNCz0LDQtNGD0LPQsNCw0YAg0YHQsNGAX9CU0L7Qu9C00YPQs9Cw0LDRgCDRgdCw0YBf0J3QsNC50LzQtNGD0LPQsNCw0YAg0YHQsNGAX9CV0YHQtNKv0LPRjdGN0YAg0YHQsNGAX9CQ0YDQsNCy0LTRg9Cz0LDQsNGAINGB0LDRgF/QkNGA0LLQsNC9INC90Y3Qs9C00q/Qs9GN0Y3RgCDRgdCw0YBf0JDRgNCy0LDQvSDRhdC+0ZHRgNC00YPQs9Cw0LDRgCDRgdCw0YAnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnMSDRgdCw0YBfMiDRgdCw0YBfMyDRgdCw0YBfNCDRgdCw0YBfNSDRgdCw0YBfNiDRgdCw0YBfNyDRgdCw0YBfOCDRgdCw0YBfOSDRgdCw0YBfMTAg0YHQsNGAXzExINGB0LDRgF8xMiDRgdCw0YAnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6ICfQndGP0Lxf0JTQsNCy0LDQsF/QnNGP0LPQvNCw0YBf0JvRhdCw0LPQstCwX9Cf0q/RgNGN0LJf0JHQsNCw0YHQsNC9X9CR0Y/QvNCx0LAnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ9Cd0Y/QvF/QlNCw0LJf0JzRj9CzX9Cb0YXQsF/Qn9Kv0YBf0JHQsNCwX9CR0Y/QvCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ9Cd0Y9f0JTQsF/QnNGPX9Cb0YVf0J/Sr1/QkdCwX9CR0Y8nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgTEw6ICdZWVlZINC+0L3RiyBNTU1N0YvQvSBEJyxcbiAgICAgICAgTExMOiAnWVlZWSDQvtC90YsgTU1NTdGL0L0gRCBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBZWVlZINC+0L3RiyBNTU1N0YvQvSBEIEhIOm1tJyxcbiAgICB9LFxuICAgIG1lcmlkaWVtUGFyc2U6IC/SrtOofNKu0KUvaSxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSAn0q7QpSc7XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ9Ku06gnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfSrtClJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vTqNC906nTqdC006nRgF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW9Cc0LDRgNCz0LDQsNGIXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnW9CY0YDRjdGFXSBkZGRkIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vTqNGH0LjQs9C006nRgF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1vTqNC90LPTqdGA0YHTqdC9XSBkZGRkIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICclcyDQtNCw0YDQsNCwJyxcbiAgICAgICAgcGFzdDogJyVzINOp0LzQvdOpJyxcbiAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSDTqdC006nRgC8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJyDTqdC006nRgCc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogTWFyYXRoaSBbbXJdXG4vLyEgYXV0aG9yIDogSGFyc2hhZCBLYWxlIDogaHR0cHM6Ly9naXRodWIuY29tL2thbGVodlxuLy8hIGF1dGhvciA6IFZpdmVrIEF0aGFseWUgOiBodHRwczovL2dpdGh1Yi5jb20vdm5hdGhhbHllXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgMTogJ+ClpycsXG4gICAgICAgIDI6ICfgpagnLFxuICAgICAgICAzOiAn4KWpJyxcbiAgICAgICAgNDogJ+ClqicsXG4gICAgICAgIDU6ICfgpasnLFxuICAgICAgICA2OiAn4KWsJyxcbiAgICAgICAgNzogJ+ClrScsXG4gICAgICAgIDg6ICfgpa4nLFxuICAgICAgICA5OiAn4KWvJyxcbiAgICAgICAgMDogJ+ClpicsXG4gICAgfSxcbiAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICfgpaknOiAnMycsXG4gICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICfgpawnOiAnNicsXG4gICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICfgpa8nOiAnOScsXG4gICAgICAgICfgpaYnOiAnMCcsXG4gICAgfTtcblxuZnVuY3Rpb24gcmVsYXRpdmVUaW1lTXIobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgdmFyIG91dHB1dCA9ICcnO1xuICAgIGlmICh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHN3aXRjaCAoc3RyaW5nKSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSV4KS+4KS54KWAIOCkuOClh+CkleCkguCkpic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkuOClh+CkleCkguCkpic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkruCkv+CkqOCkv+Cknyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkruCkv+CkqOCkv+Ckn+Clhyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkpOCkvuCkuCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkpOCkvuCkuCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkpuCkv+CkteCkuCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkpuCkv+CkteCkuCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkruCkueCkv+CkqOCkvic7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkruCkueCkv+CkqOClhyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAn4KSP4KSVIOCkteCksOCljeCktyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJyVkIOCkteCksOCljeCkt+Clhyc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBzd2l0Y2ggKHN0cmluZykge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+CkleCkvuCkueClgCDgpLjgpYfgpJXgpILgpKbgpL7gpIInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLjgpYfgpJXgpILgpKbgpL7gpIInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpK7gpL/gpKjgpL/gpJ/gpL4nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpL/gpKjgpL/gpJ/gpL7gpIInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpKTgpL7gpLjgpL4nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKTgpL7gpLjgpL7gpIInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpKbgpL/gpLXgpLjgpL4nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpKbgpL/gpLXgpLjgpL7gpIInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpK7gpLngpL/gpKjgpY3gpK/gpL4nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpK7gpLngpL/gpKjgpY3gpK/gpL7gpIInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gJ+Ckj+CkleCkviDgpLXgpLDgpY3gpLfgpL4nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICclZCDgpLXgpLDgpY3gpLfgpL7gpIInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnbXInLCB7XG4gICAgbW9udGhzOiAn4KSc4KS+4KSo4KWH4KS14KS+4KSw4KWAX+Ckq+Clh+CkrOCljeCksOClgeCkteCkvuCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSP4KSq4KWN4KSw4KS/4KSyX+CkruClh1/gpJzgpYLgpKhf4KSc4KWB4KSy4KWIX+CkkeCkl+CkuOCljeCkn1/gpLjgpKrgpY3gpJ/gpYfgpILgpKzgpLBf4KSR4KSV4KWN4KSf4KWL4KSs4KSwX+CkqOCli+CkteCljeCkueClh+CkguCkrOCksF/gpKHgpL/gpLjgpYfgpILgpKzgpLAnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAn4KSc4KS+4KSo4KWHLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkmi5f4KSP4KSq4KWN4KSw4KS/Ll/gpK7gpYcuX+CknOClguCkqC5f4KSc4KWB4KSy4KWILl/gpJHgpJcuX+CkuOCkquCljeCkn+Clh+Ckgi5f4KSR4KSV4KWN4KSf4KWLLl/gpKjgpYvgpLXgpY3gpLngpYfgpIIuX+CkoeCkv+CkuOClh+Ckgi4nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6ICfgpLDgpLXgpL/gpLXgpL7gpLBf4KS44KWL4KSu4KS14KS+4KSwX+CkruCkguCkl+Cks+CkteCkvuCksF/gpKzgpYHgpKfgpLXgpL7gpLBf4KSX4KWB4KSw4KWC4KS14KS+4KSwX+CktuClgeCkleCljeCksOCkteCkvuCksF/gpLbgpKjgpL/gpLXgpL7gpLAnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ+CksOCkteCkv1/gpLjgpYvgpK5f4KSu4KSC4KSX4KSzX+CkrOClgeCkp1/gpJfgpYHgpLDgpYJf4KS24KWB4KSV4KWN4KSwX+CktuCkqOCkvycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ+CksF/gpLjgpYtf4KSu4KSCX+CkrOClgV/gpJfgpYFf4KS24KWBX+Ckticuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0EgaDptbSDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4KS14KS+4KSc4KSk4KS+JyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL4nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgpLXgpL7gpJzgpKTgpL4nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vgpIngpKbgpY3gpK/gpL5dIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4KSV4KS+4KSyXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW+CkruCkvuCkl+ClgOCksl0gZGRkZCwgTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVz4KSu4KSn4KWN4KSv4KWHJyxcbiAgICAgICAgcGFzdDogJyVz4KSq4KWC4KSw4KWN4KS14KWAJyxcbiAgICAgICAgczogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgIHNzOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgbTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgIG1tOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgaDogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgIGhoOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgZDogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgIGRkOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgTTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgIE1NOiByZWxhdGl2ZVRpbWVNcixcbiAgICAgICAgeTogcmVsYXRpdmVUaW1lTXIsXG4gICAgICAgIHl5OiByZWxhdGl2ZVRpbWVNcixcbiAgICB9LFxuICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL+CkquCkueCkvuCkn+Clh3zgpLjgpJXgpL7gpLPgpYB84KSm4KWB4KSq4KS+4KSw4KWAfOCkuOCkvuCkr+CkguCkleCkvuCks+ClgHzgpLDgpL7gpKTgpY3gpLDgpYAvLFxuICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn4KSq4KS54KS+4KSf4KWHJyB8fCBtZXJpZGllbSA9PT0gJ+CkuOCkleCkvuCks+ClgCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgbWVyaWRpZW0gPT09ICfgpKbgpYHgpKrgpL7gpLDgpYAnIHx8XG4gICAgICAgICAgICBtZXJpZGllbSA9PT0gJ+CkuOCkvuCkr+CkguCkleCkvuCks+ClgCcgfHxcbiAgICAgICAgICAgIG1lcmlkaWVtID09PSAn4KSw4KS+4KSk4KWN4KSw4KWAJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyID49IDEyID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPj0gMCAmJiBob3VyIDwgNikge1xuICAgICAgICAgICAgcmV0dXJuICfgpKrgpLngpL7gpJ/gpYcnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuICfgpLjgpJXgpL7gpLPgpYAnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgcmV0dXJuICfgpKbgpYHgpKrgpL7gpLDgpYAnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgcmV0dXJuICfgpLjgpL7gpK/gpILgpJXgpL7gpLPgpYAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfgpLDgpL7gpKTgpY3gpLDgpYAnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWxheSBbbXMtbXldXG4vLyEgbm90ZSA6IERFUFJFQ0FURUQsIHRoZSBjb3JyZWN0IG9uZSBpcyBbbXNdXG4vLyEgYXV0aG9yIDogV2VsZGFuIEphbWlsaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS93ZWxkYW5cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcy1teScsIHtcbiAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICdBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ0FoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ0FoX0lzX1NsX1JiX0ttX0ptX1NiJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAvcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxcbiAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3RlbmdhaGFyaScpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3BldGFuZycgfHwgbWVyaWRpZW0gPT09ICdtYWxhbScpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgIHJldHVybiAncGFnaSc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgcmV0dXJuICd0ZW5nYWhhcmknO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgIHJldHVybiAncGV0YW5nJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnbWFsYW0nO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW0hhcmkgaW5pIHB1a3VsXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbRXNvayBwdWt1bF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbS2VsbWFyaW4gcHVrdWxdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsZXBhcyBwdWt1bF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2RhbGFtICVzJyxcbiAgICAgICAgcGFzdDogJyVzIHlhbmcgbGVwYXMnLFxuICAgICAgICBzOiAnYmViZXJhcGEgc2FhdCcsXG4gICAgICAgIHNzOiAnJWQgc2FhdCcsXG4gICAgICAgIG06ICdzZW1pbml0JyxcbiAgICAgICAgbW06ICclZCBtaW5pdCcsXG4gICAgICAgIGg6ICdzZWphbScsXG4gICAgICAgIGhoOiAnJWQgamFtJyxcbiAgICAgICAgZDogJ3NlaGFyaScsXG4gICAgICAgIGRkOiAnJWQgaGFyaScsXG4gICAgICAgIE06ICdzZWJ1bGFuJyxcbiAgICAgICAgTU06ICclZCBidWxhbicsXG4gICAgICAgIHk6ICdzZXRhaHVuJyxcbiAgICAgICAgeXk6ICclZCB0YWh1bicsXG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWxheSBbbXNdXG4vLyEgYXV0aG9yIDogV2VsZGFuIEphbWlsaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS93ZWxkYW5cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdtcycsIHtcbiAgICBtb250aHM6ICdKYW51YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICdBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ0FoZF9Jc25fU2VsX1JhYl9LaGFfSnVtX1NhYicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ0FoX0lzX1NsX1JiX0ttX0ptX1NiJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbScsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAvcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxcbiAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ3BhZ2knKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3RlbmdhaGFyaScpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ3BldGFuZycgfHwgbWVyaWRpZW0gPT09ICdtYWxhbScpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXJzIDwgMTEpIHtcbiAgICAgICAgICAgIHJldHVybiAncGFnaSc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPCAxNSkge1xuICAgICAgICAgICAgcmV0dXJuICd0ZW5nYWhhcmknO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgIHJldHVybiAncGV0YW5nJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnbWFsYW0nO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW0hhcmkgaW5pIHB1a3VsXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbRXNvayBwdWt1bF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3B1a3VsXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbS2VsbWFyaW4gcHVrdWxdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsZXBhcyBwdWt1bF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ2RhbGFtICVzJyxcbiAgICAgICAgcGFzdDogJyVzIHlhbmcgbGVwYXMnLFxuICAgICAgICBzOiAnYmViZXJhcGEgc2FhdCcsXG4gICAgICAgIHNzOiAnJWQgc2FhdCcsXG4gICAgICAgIG06ICdzZW1pbml0JyxcbiAgICAgICAgbW06ICclZCBtaW5pdCcsXG4gICAgICAgIGg6ICdzZWphbScsXG4gICAgICAgIGhoOiAnJWQgamFtJyxcbiAgICAgICAgZDogJ3NlaGFyaScsXG4gICAgICAgIGRkOiAnJWQgaGFyaScsXG4gICAgICAgIE06ICdzZWJ1bGFuJyxcbiAgICAgICAgTU06ICclZCBidWxhbicsXG4gICAgICAgIHk6ICdzZXRhaHVuJyxcbiAgICAgICAgeXk6ICclZCB0YWh1bicsXG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBNYWx0ZXNlIChNYWx0YSkgW210XVxuLy8hIGF1dGhvciA6IEFsZXNzYW5kcm8gTWFydWNjaWEgOiBodHRwczovL2dpdGh1Yi5jb20vYWxlc21hXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnbXQnLCB7XG4gICAgbW9udGhzOiAnSmFubmFyX0ZyYXJfTWFyenVfQXByaWxfTWVqanVfxKB1bmp1X0x1bGp1X0F3d2lzc3VfU2V0dGVtYnJ1X090dHVicnVfTm92ZW1icnVfRGnEi2VtYnJ1Jy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbl9GcmFfTWFyX0Fwcl9NZWpfxKB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpxIsnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICdJbC3EpmFkZF9JdC1UbmVqbl9JdC1UbGlldGFfTC1FcmJnxKdhX0lsLcSmYW1pc19JbC3EoGltZ8SnYV9Jcy1TaWJ0Jy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnxKZhZF9UbmVfVGxpX0VyYl/EpmFtX8SgaW1fU2liJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnxKZhX1RuX1RsX0VyX8SmYV/EoGlfU2knLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tJbGx1bSBmaWwtXUxUJyxcbiAgICAgICAgbmV4dERheTogJ1tHxKdhZGEgZmlsLV1MVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbZmlsLV1MVCcsXG4gICAgICAgIGxhc3REYXk6ICdbSWwtYmllcmHEpyBmaWwtXUxUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsaSBnxKdhZGRhXSBbZmlsLV1MVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnZuKAmSAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBpbHUnLFxuICAgICAgICBzOiAnZnRpdCBzZWtvbmRpJyxcbiAgICAgICAgc3M6ICclZCBzZWtvbmRpJyxcbiAgICAgICAgbTogJ21pbnV0YScsXG4gICAgICAgIG1tOiAnJWQgbWludXRpJyxcbiAgICAgICAgaDogJ3NpZWfEp2EnLFxuICAgICAgICBoaDogJyVkIHNpZWfEp2F0JyxcbiAgICAgICAgZDogJ8ShdXJuYXRhJyxcbiAgICAgICAgZGQ6ICclZCDEoXJhbmV0JyxcbiAgICAgICAgTTogJ3hhaGFyJyxcbiAgICAgICAgTU06ICclZCB4aHVyJyxcbiAgICAgICAgeTogJ3NlbmEnLFxuICAgICAgICB5eTogJyVkIHNuaScsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgb3JkaW5hbDogJyVkwronLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEJ1cm1lc2UgW215XVxuLy8hIGF1dGhvciA6IFNxdWFyIHRlYW0sIG15c3F1YXIuY29tXG4vLyEgYXV0aG9yIDogRGF2aWQgUm9zc2VsbGF0IDogaHR0cHM6Ly9naXRodWIuY29tL2dob2xhZHJcbi8vISBhdXRob3IgOiBUaW4gQXVuZyBMaW4gOiBodHRwczovL2dpdGh1Yi5jb20vdGhhbnlhd3ppbm1pblxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBzeW1ib2xNYXAgPSB7XG4gICAgICAgIDE6ICfhgYEnLFxuICAgICAgICAyOiAn4YGCJyxcbiAgICAgICAgMzogJ+GBgycsXG4gICAgICAgIDQ6ICfhgYQnLFxuICAgICAgICA1OiAn4YGFJyxcbiAgICAgICAgNjogJ+GBhicsXG4gICAgICAgIDc6ICfhgYcnLFxuICAgICAgICA4OiAn4YGIJyxcbiAgICAgICAgOTogJ+GBiScsXG4gICAgICAgIDA6ICfhgYAnLFxuICAgIH0sXG4gICAgbnVtYmVyTWFwID0ge1xuICAgICAgICAn4YGBJzogJzEnLFxuICAgICAgICAn4YGCJzogJzInLFxuICAgICAgICAn4YGDJzogJzMnLFxuICAgICAgICAn4YGEJzogJzQnLFxuICAgICAgICAn4YGFJzogJzUnLFxuICAgICAgICAn4YGGJzogJzYnLFxuICAgICAgICAn4YGHJzogJzcnLFxuICAgICAgICAn4YGIJzogJzgnLFxuICAgICAgICAn4YGJJzogJzknLFxuICAgICAgICAn4YGAJzogJzAnLFxuICAgIH07XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ215Jywge1xuICAgIG1vbnRoczogJ+GAh+GAlOGAuuGAlOGAneGAq+GAm+GArl/hgJbhgLHhgJbhgLHhgKzhgLrhgJ3hgKvhgJvhgK5f4YCZ4YCQ4YC6X+GAp+GAleGAvOGArl/hgJnhgLFf4YCH4YC94YCU4YC6X+GAh+GAsOGAnOGAreGAr+GAhOGAul/hgJ7hgLzhgILhgK/hgJDhgLpf4YCF4YCA4YC64YCQ4YCE4YC64YCY4YCsX+GAoeGAseGArOGAgOGAuuGAkOGAreGAr+GAmOGArF/hgJThgK3hgK/hgJ3hgIThgLrhgJjhgKxf4YCS4YCu4YCH4YCE4YC64YCY4YCsJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ+GAh+GAlOGAul/hgJbhgLFf4YCZ4YCQ4YC6X+GAleGAvOGArl/hgJnhgLFf4YCH4YC94YCU4YC6X+GAnOGAreGAr+GAhOGAul/hgJ7hgLxf4YCF4YCA4YC6X+GAoeGAseGArOGAgOGAul/hgJThgK3hgK9f4YCS4YCuJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAn4YCQ4YCU4YCE4YC64YC54YCC4YCU4YC94YCxX+GAkOGAlOGAhOGAuuGAueGAnOGArF/hgKHhgIThgLrhgLnhgILhgKtf4YCX4YCv4YCS4YC54YCT4YCf4YCw4YC4X+GAgOGAvOGArOGAnuGAleGAkOGAseGAuF/hgJ7hgLHhgKzhgIDhgLzhgKxf4YCF4YCU4YCxJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn4YCU4YC94YCxX+GAnOGArF/hgILhgKtf4YCf4YCw4YC4X+GAgOGAvOGArF/hgJ7hgLHhgKxf4YCU4YCxJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn4YCU4YC94YCxX+GAnOGArF/hgILhgKtf4YCf4YCw4YC4X+GAgOGAvOGArF/hgJ7hgLHhgKxf4YCU4YCxJy5zcGxpdCgnXycpLFxuXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW+GAmuGAlOGAsS5dIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgbmV4dERheTogJ1vhgJnhgJThgIDhgLrhgJbhgLzhgJThgLpdIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIExUIFvhgJnhgL7hgKxdJyxcbiAgICAgICAgbGFzdERheTogJ1vhgJnhgJThgLEu4YCAXSBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgIGxhc3RXZWVrOiAnW+GAleGAvOGAruGAuOGAgeGAsuGAt+GAnuGAseGArF0gZGRkZCBMVCBb4YCZ4YC+4YCsXScsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAn4YCc4YCs4YCZ4YCK4YC64YC3ICVzIOGAmeGAvuGArCcsXG4gICAgICAgIHBhc3Q6ICfhgJzhgL3hgJThgLrhgIHhgLLhgLfhgJ7hgLHhgKwgJXMg4YCAJyxcbiAgICAgICAgczogJ+GAheGAgOGAueGAgOGAlOGAui7hgKHhgJThgIrhgLrhgLjhgIThgJrhgLonLFxuICAgICAgICBzczogJyVkIOGAheGAgOGAueGAgOGAlOGAt+GAuicsXG4gICAgICAgIG06ICfhgJDhgIXhgLrhgJnhgK3hgJThgIXhgLonLFxuICAgICAgICBtbTogJyVkIOGAmeGAreGAlOGAheGAuicsXG4gICAgICAgIGg6ICfhgJDhgIXhgLrhgJThgKzhgJvhgK4nLFxuICAgICAgICBoaDogJyVkIOGAlOGArOGAm+GAricsXG4gICAgICAgIGQ6ICfhgJDhgIXhgLrhgJvhgIDhgLonLFxuICAgICAgICBkZDogJyVkIOGAm+GAgOGAuicsXG4gICAgICAgIE06ICfhgJDhgIXhgLrhgJwnLFxuICAgICAgICBNTTogJyVkIOGAnCcsXG4gICAgICAgIHk6ICfhgJDhgIXhgLrhgJThgL7hgIXhgLonLFxuICAgICAgICB5eTogJyVkIOGAlOGAvuGAheGAuicsXG4gICAgfSxcbiAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vhgYHhgYLhgYPhgYThgYXhgYbhgYfhgYjhgYnhgYBdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE5vcndlZ2lhbiBCb2ttw6VsIFtuYl1cbi8vISBhdXRob3JzIDogRXNwZW4gSG92bGFuZHNkYWwgOiBodHRwczovL2dpdGh1Yi5jb20vcmV4eGFyc1xuLy8hICAgICAgICAgICBTaWd1cmQgR2FydG1hbm4gOiBodHRwczovL2dpdGh1Yi5jb20vc2lndXJkZ2Fcbi8vISAgICAgICAgICAgU3RlcGhlbiBSYW10aHVuIDogaHR0cHM6Ly9naXRodWIuY29tL3N0ZXBoZW5yYW10aHVuXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnbmInLCB7XG4gICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlcicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdqYW4uX2ZlYi5fbWFyc19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAnc8O4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO4cmRhZycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnc8O4Ll9tYS5fdGkuX29uLl90by5fZnIuX2zDuC4nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdzw7hfbWFfdGlfb25fdG9fZnJfbMO4Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbaSBkYWcga2wuXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbaSBtb3JnZW4ga2wuXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2wuXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbaSBnw6VyIGtsLl0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tmb3JyaWdlXSBkZGRkIFtrbC5dIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBzaWRlbicsXG4gICAgICAgIHM6ICdub2VuIHNla3VuZGVyJyxcbiAgICAgICAgc3M6ICclZCBzZWt1bmRlcicsXG4gICAgICAgIG06ICdldHQgbWludXR0JyxcbiAgICAgICAgbW06ICclZCBtaW51dHRlcicsXG4gICAgICAgIGg6ICdlbiB0aW1lJyxcbiAgICAgICAgaGg6ICclZCB0aW1lcicsXG4gICAgICAgIGQ6ICdlbiBkYWcnLFxuICAgICAgICBkZDogJyVkIGRhZ2VyJyxcbiAgICAgICAgdzogJ2VuIHVrZScsXG4gICAgICAgIHd3OiAnJWQgdWtlcicsXG4gICAgICAgIE06ICdlbiBtw6VuZWQnLFxuICAgICAgICBNTTogJyVkIG3DpW5lZGVyJyxcbiAgICAgICAgeTogJ2V0dCDDpXInLFxuICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE5lcGFsZXNlIFtuZV1cbi8vISBhdXRob3IgOiBzdXZhc2ggOiBodHRwczovL2dpdGh1Yi5jb20vc3V2YXNoXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgMTogJ+ClpycsXG4gICAgICAgIDI6ICfgpagnLFxuICAgICAgICAzOiAn4KWpJyxcbiAgICAgICAgNDogJ+ClqicsXG4gICAgICAgIDU6ICfgpasnLFxuICAgICAgICA2OiAn4KWsJyxcbiAgICAgICAgNzogJ+ClrScsXG4gICAgICAgIDg6ICfgpa4nLFxuICAgICAgICA5OiAn4KWvJyxcbiAgICAgICAgMDogJ+ClpicsXG4gICAgfSxcbiAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICfgpacnOiAnMScsXG4gICAgICAgICfgpagnOiAnMicsXG4gICAgICAgICfgpaknOiAnMycsXG4gICAgICAgICfgpaonOiAnNCcsXG4gICAgICAgICfgpasnOiAnNScsXG4gICAgICAgICfgpawnOiAnNicsXG4gICAgICAgICfgpa0nOiAnNycsXG4gICAgICAgICfgpa4nOiAnOCcsXG4gICAgICAgICfgpa8nOiAnOScsXG4gICAgICAgICfgpaYnOiAnMCcsXG4gICAgfTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnbmUnLCB7XG4gICAgbW9udGhzOiAn4KSc4KSo4KS14KSw4KWAX+Ckq+Clh+CkrOCljeCksOClgeCkteCksOClgF/gpK7gpL7gpLDgpY3gpJpf4KSF4KSq4KWN4KSw4KS/4KSyX+CkruCkiF/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSIX+CkheCkl+Ckt+CljeCkn1/gpLjgpYfgpKrgpY3gpJ/gpYfgpK7gpY3gpKzgpLBf4KSF4KSV4KWN4KSf4KWL4KSs4KSwX+CkqOCli+CkreClh+CkruCljeCkrOCksF/gpKHgpL/gpLjgpYfgpK7gpY3gpKzgpLAnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAn4KSc4KSoLl/gpKvgpYfgpKzgpY3gpLDgpYEuX+CkruCkvuCksOCljeCkml/gpIXgpKrgpY3gpLDgpL8uX+CkruCkiF/gpJzgpYHgpKhf4KSc4KWB4KSy4KS+4KSILl/gpIXgpJcuX+CkuOClh+CkquCljeCkny5f4KSF4KSV4KWN4KSf4KWLLl/gpKjgpYvgpK3gpYcuX+CkoeCkv+CkuOClhy4nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6ICfgpIbgpIfgpKTgpKzgpL7gpLBf4KS44KWL4KSu4KSs4KS+4KSwX+CkruCkmeCljeCkl+CksuCkrOCkvuCksF/gpKzgpYHgpKfgpKzgpL7gpLBf4KSs4KS/4KS54KS/4KSs4KS+4KSwX+CktuClgeCkleCljeCksOCkrOCkvuCksF/gpLbgpKjgpL/gpKzgpL7gpLAnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfgpIbgpIfgpKQuX+CkuOCli+Ckri5f4KSu4KSZ4KWN4KSX4KSyLl/gpKzgpYHgpKcuX+CkrOCkv+CkueCkvy5f4KS24KWB4KSV4KWN4KSwLl/gpLbgpKjgpL8uJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn4KSGLl/gpLjgpYsuX+CkruCkgi5f4KSs4KWBLl/gpKzgpL8uX+CktuClgS5f4KS2Licuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgTFRTOiAnQeCkleCliyBoOm1tOnNzIOCkrOCknOClhycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZLCBB4KSV4KWLIGg6bW0g4KSs4KSc4KWHJyxcbiAgICB9LFxuICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvW+Clp+ClqOClqeClquClq+ClrOClreClruClr+Clpl0vZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyTWFwW21hdGNoXTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICBwb3N0Zm9ybWF0OiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXFxkL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIHN5bWJvbE1hcFttYXRjaF07XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL+CksOCkvuCkpOCkv3zgpKzgpL/gpLngpL7gpKh84KSm4KS/4KSJ4KSB4KS44KWLfOCkuOCkvuCkgeCknS8sXG4gICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgpLDgpL7gpKTgpL8nKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4KSs4KS/4KS54KS+4KSoJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpKbgpL/gpIngpIHgpLjgpYsnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgpLjgpL7gpIHgpJ0nKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91ciA8IDMpIHtcbiAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KS/JztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAn4KSs4KS/4KS54KS+4KSoJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTYpIHtcbiAgICAgICAgICAgIHJldHVybiAn4KSm4KS/4KSJ4KSB4KS44KWLJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgIHJldHVybiAn4KS44KS+4KSB4KSdJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn4KSw4KS+4KSk4KS/JztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vgpIbgpJxdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vgpK3gpYvgpLLgpL9dIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdb4KSG4KSJ4KSB4KSm4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vgpLngpL/gpJzgpYtdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdb4KSX4KSP4KSV4KWLXSBkZGRkWyxdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICclc+CkruCkvicsXG4gICAgICAgIHBhc3Q6ICclcyDgpIXgpJfgpL7gpKHgpL8nLFxuICAgICAgICBzOiAn4KSV4KWH4KS54KWAIOCkleCljeCkt+CkoycsXG4gICAgICAgIHNzOiAnJWQg4KS44KWH4KSV4KWH4KSj4KWN4KShJyxcbiAgICAgICAgbTogJ+Ckj+CklSDgpK7gpL/gpKjgpYfgpJ8nLFxuICAgICAgICBtbTogJyVkIOCkruCkv+CkqOClh+CknycsXG4gICAgICAgIGg6ICfgpI/gpJUg4KSY4KSj4KWN4KSf4KS+JyxcbiAgICAgICAgaGg6ICclZCDgpJjgpKPgpY3gpJ/gpL4nLFxuICAgICAgICBkOiAn4KSP4KSVIOCkpuCkv+CkqCcsXG4gICAgICAgIGRkOiAnJWQg4KSm4KS/4KSoJyxcbiAgICAgICAgTTogJ+Ckj+CklSDgpK7gpLngpL/gpKjgpL4nLFxuICAgICAgICBNTTogJyVkIOCkruCkueCkv+CkqOCkvicsXG4gICAgICAgIHk6ICfgpI/gpJUg4KSs4KSw4KWN4KS3JyxcbiAgICAgICAgeXk6ICclZCDgpKzgpLDgpY3gpLcnLFxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRHV0Y2ggKEJlbGdpdW0pIFtubC1iZV1cbi8vISBhdXRob3IgOiBKb3JpcyBSw7ZsaW5nIDogaHR0cHM6Ly9naXRodWIuY29tL2pvcmlzcm9saW5nXG4vLyEgYXV0aG9yIDogSmFjb2IgTWlkZGFnIDogaHR0cHM6Ly9naXRodWIuY29tL21pZGRhZ2pcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgbW9udGhzU2hvcnRXaXRoRG90cyA9ICdqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydFdpdGhvdXREb3RzID0gJ2phbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgL15qYW4vaSxcbiAgICAgICAgL15mZWIvaSxcbiAgICAgICAgL15tYWFydHxtcnQuPyQvaSxcbiAgICAgICAgL15hcHIvaSxcbiAgICAgICAgL15tZWkkL2ksXG4gICAgICAgIC9eanVuW2kuXT8kL2ksXG4gICAgICAgIC9eanVsW2kuXT8kL2ksXG4gICAgICAgIC9eYXVnL2ksXG4gICAgICAgIC9ec2VwL2ksXG4gICAgICAgIC9eb2t0L2ksXG4gICAgICAgIC9ebm92L2ksXG4gICAgICAgIC9eZGVjL2ksXG4gICAgXSxcbiAgICBtb250aHNSZWdleCA9IC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnbmwtYmUnLCB7XG4gICAgbW9udGhzOiAnamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzO1xuICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksXG4gICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogL14oamFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xtZWl8anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2ksXG5cbiAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcblxuICAgIHdlZWtkYXlzOiAnem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ3pvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ3pvX21hX2RpX3dvX2RvX3ZyX3phJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbdmFuZGFhZyBvbV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiBvbV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbZ2lzdGVyZW4gb21dIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ292ZXIgJXMnLFxuICAgICAgICBwYXN0OiAnJXMgZ2VsZWRlbicsXG4gICAgICAgIHM6ICdlZW4gcGFhciBzZWNvbmRlbicsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kZW4nLFxuICAgICAgICBtOiAnw6nDqW4gbWludXV0JyxcbiAgICAgICAgbW06ICclZCBtaW51dGVuJyxcbiAgICAgICAgaDogJ8Opw6luIHV1cicsXG4gICAgICAgIGhoOiAnJWQgdXVyJyxcbiAgICAgICAgZDogJ8Opw6luIGRhZycsXG4gICAgICAgIGRkOiAnJWQgZGFnZW4nLFxuICAgICAgICBNOiAnw6nDqW4gbWFhbmQnLFxuICAgICAgICBNTTogJyVkIG1hYW5kZW4nLFxuICAgICAgICB5OiAnw6nDqW4gamFhcicsXG4gICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IER1dGNoIFtubF1cbi8vISBhdXRob3IgOiBKb3JpcyBSw7ZsaW5nIDogaHR0cHM6Ly9naXRodWIuY29tL2pvcmlzcm9saW5nXG4vLyEgYXV0aG9yIDogSmFjb2IgTWlkZGFnIDogaHR0cHM6Ly9naXRodWIuY29tL21pZGRhZ2pcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgbW9udGhzU2hvcnRXaXRoRG90cyA9ICdqYW4uX2ZlYi5fbXJ0Ll9hcHIuX21laV9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92Ll9kZWMuJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydFdpdGhvdXREb3RzID0gJ2phbl9mZWJfbXJ0X2Fwcl9tZWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZSA9IFtcbiAgICAgICAgL15qYW4vaSxcbiAgICAgICAgL15mZWIvaSxcbiAgICAgICAgL15tYWFydHxtcnQuPyQvaSxcbiAgICAgICAgL15hcHIvaSxcbiAgICAgICAgL15tZWkkL2ksXG4gICAgICAgIC9eanVuW2kuXT8kL2ksXG4gICAgICAgIC9eanVsW2kuXT8kL2ksXG4gICAgICAgIC9eYXVnL2ksXG4gICAgICAgIC9ec2VwL2ksXG4gICAgICAgIC9eb2t0L2ksXG4gICAgICAgIC9ebm92L2ksXG4gICAgICAgIC9eZGVjL2ksXG4gICAgXSxcbiAgICBtb250aHNSZWdleCA9IC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xqdVtubF1cXC4/fGF1Z1xcLj98c2VwXFwuP3xva3RcXC4/fG5vdlxcLj98ZGVjXFwuPykvaTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnbmwnLCB7XG4gICAgbW9udGhzOiAnamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogZnVuY3Rpb24gKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aHNTaG9ydFdpdGhEb3RzO1xuICAgICAgICB9IGVsc2UgaWYgKC8tTU1NLS8udGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhzU2hvcnRXaXRob3V0RG90c1ttLm1vbnRoKCldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1Nob3J0V2l0aERvdHNbbS5tb250aCgpXTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBtb250aHNSZWdleDogbW9udGhzUmVnZXgsXG4gICAgbW9udGhzU2hvcnRSZWdleDogbW9udGhzUmVnZXgsXG4gICAgbW9udGhzU3RyaWN0UmVnZXg6IC9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXIpL2ksXG4gICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogL14oamFuXFwuP3xmZWJcXC4/fG1ydFxcLj98YXByXFwuP3xtZWl8anVbbmxdXFwuP3xhdWdcXC4/fHNlcFxcLj98b2t0XFwuP3xub3ZcXC4/fGRlY1xcLj8pL2ksXG5cbiAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcblxuICAgIHdlZWtkYXlzOiAnem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ3pvLl9tYS5fZGkuX3dvLl9kby5fdnIuX3phLicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ3pvX21hX2RpX3dvX2RvX3ZyX3phJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQtTU0tWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbdmFuZGFhZyBvbV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiBvbV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW29tXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbZ2lzdGVyZW4gb21dIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ292ZXIgJXMnLFxuICAgICAgICBwYXN0OiAnJXMgZ2VsZWRlbicsXG4gICAgICAgIHM6ICdlZW4gcGFhciBzZWNvbmRlbicsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kZW4nLFxuICAgICAgICBtOiAnw6nDqW4gbWludXV0JyxcbiAgICAgICAgbW06ICclZCBtaW51dGVuJyxcbiAgICAgICAgaDogJ8Opw6luIHV1cicsXG4gICAgICAgIGhoOiAnJWQgdXVyJyxcbiAgICAgICAgZDogJ8Opw6luIGRhZycsXG4gICAgICAgIGRkOiAnJWQgZGFnZW4nLFxuICAgICAgICB3OiAnw6nDqW4gd2VlaycsXG4gICAgICAgIHd3OiAnJWQgd2VrZW4nLFxuICAgICAgICBNOiAnw6nDqW4gbWFhbmQnLFxuICAgICAgICBNTTogJyVkIG1hYW5kZW4nLFxuICAgICAgICB5OiAnw6nDqW4gamFhcicsXG4gICAgICAgIHl5OiAnJWQgamFhcicsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oc3RlfGRlKS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgbnVtYmVyICtcbiAgICAgICAgICAgIChudW1iZXIgPT09IDEgfHwgbnVtYmVyID09PSA4IHx8IG51bWJlciA+PSAyMCA/ICdzdGUnIDogJ2RlJylcbiAgICAgICAgKTtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE55bm9yc2sgW25uXVxuLy8hIGF1dGhvcnMgOiBodHRwczovL2dpdGh1Yi5jb20vbWVjaHV3aW5kXG4vLyEgICAgICAgICAgIFN0ZXBoZW4gUmFtdGh1biA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdGVwaGVucmFtdGh1blxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ25uJywge1xuICAgIG1vbnRoczogJ2phbnVhcl9mZWJydWFyX21hcnNfYXByaWxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogJ3N1bmRhZ19tw6VuZGFnX3R5c2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbGF1cmRhZycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnc3UuX23DpS5fdHkuX29uLl90by5fZnIuX2xhdS4nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdzdV9tw6VfdHlfb25fdG9fZnJfbGEnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgW2tsLl0gSDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW0kgZGFnIGtsb2trYV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW0kgbW9yZ29uIGtsb2trYV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsb2trYV0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW0kgZ8OlciBrbG9ra2FdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbRsO4cmVnw6VhbmRlXSBkZGRkIFtrbG9ra2FdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBzaWRhbicsXG4gICAgICAgIHM6ICdub2tyZSBzZWt1bmQnLFxuICAgICAgICBzczogJyVkIHNla3VuZCcsXG4gICAgICAgIG06ICdlaXQgbWludXR0JyxcbiAgICAgICAgbW06ICclZCBtaW51dHQnLFxuICAgICAgICBoOiAnZWluIHRpbWUnLFxuICAgICAgICBoaDogJyVkIHRpbWFyJyxcbiAgICAgICAgZDogJ2VpbiBkYWcnLFxuICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgdzogJ2VpIHZla2UnLFxuICAgICAgICB3dzogJyVkIHZla2VyJyxcbiAgICAgICAgTTogJ2VpbiBtw6VuYWQnLFxuICAgICAgICBNTTogJyVkIG3DpW5hZGVyJyxcbiAgICAgICAgeTogJ2VpdCDDpXInLFxuICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IE9jY2l0YW4sIGxlbmdhZG9jaWFuIGRpYWxlY3RlIFtvYy1sbmNdXG4vLyEgYXV0aG9yIDogUXVlbnRpbiBQQUfDiFMgOiBodHRwczovL2dpdGh1Yi5jb20vUXVlbnR5MzFcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdvYy1sbmMnLCB7XG4gICAgbW9udGhzOiB7XG4gICAgICAgIHN0YW5kYWxvbmU6ICdnZW5pw6hyX2ZlYnJpw6hyX21hcsOnX2FicmlsX21haV9qdW5oX2p1bGhldF9hZ29zdF9zZXRlbWJyZV9vY3TDsmJyZV9ub3ZlbWJyZV9kZWNlbWJyZScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgZm9ybWF0OiBcImRlIGdlbmnDqHJfZGUgZmVicmnDqHJfZGUgbWFyw6dfZCdhYnJpbF9kZSBtYWlfZGUganVuaF9kZSBqdWxoZXRfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdMOyYnJlX2RlIG5vdmVtYnJlX2RlIGRlY2VtYnJlXCIuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgaXNGb3JtYXQ6IC9EW29EXT8oXFxzKStNTU1NLyxcbiAgICB9LFxuICAgIG1vbnRoc1Nob3J0OiAnZ2VuLl9mZWJyLl9tYXLDp19hYnIuX21haV9qdW5oX2p1bGguX2Fnby5fc2V0Ll9vY3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogJ2RpbWVuZ2VfZGlsdW5zX2RpbWFyc19kaW3DqGNyZXNfZGlqw7J1c19kaXZlbmRyZXNfZGlzc2FidGUnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdkZy5fZGwuX2RtLl9kYy5fZGouX2R2Ll9kcy4nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdkZ19kbF9kbV9kY19kal9kdl9kcycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gW2RlXSBZWVlZJyxcbiAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbScsXG4gICAgICAgIGxsbDogJ0QgTU1NIFlZWVksIEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tJyxcbiAgICAgICAgbGxsbDogJ2RkZCBEIE1NTSBZWVlZLCBIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbdcOoaSBhXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbZGVtYW4gYV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2FdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tpw6hyIGFdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtwYXNzYXQgYV0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogXCJkJ2FxdcOtICVzXCIsXG4gICAgICAgIHBhc3Q6ICdmYSAlcycsXG4gICAgICAgIHM6ICd1bmFzIHNlZ29uZGFzJyxcbiAgICAgICAgc3M6ICclZCBzZWdvbmRhcycsXG4gICAgICAgIG06ICd1bmEgbWludXRhJyxcbiAgICAgICAgbW06ICclZCBtaW51dGFzJyxcbiAgICAgICAgaDogJ3VuYSBvcmEnLFxuICAgICAgICBoaDogJyVkIG9yYXMnLFxuICAgICAgICBkOiAndW4gam9ybicsXG4gICAgICAgIGRkOiAnJWQgam9ybnMnLFxuICAgICAgICBNOiAndW4gbWVzJyxcbiAgICAgICAgTU06ICclZCBtZXNlcycsXG4gICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgIHl5OiAnJWQgYW5zJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShyfG58dHzDqHxhKS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPVxuICAgICAgICAgICAgbnVtYmVyID09PSAxXG4gICAgICAgICAgICAgICAgPyAncidcbiAgICAgICAgICAgICAgICA6IG51bWJlciA9PT0gMlxuICAgICAgICAgICAgICAgID8gJ24nXG4gICAgICAgICAgICAgICAgOiBudW1iZXIgPT09IDNcbiAgICAgICAgICAgICAgICA/ICdyJ1xuICAgICAgICAgICAgICAgIDogbnVtYmVyID09PSA0XG4gICAgICAgICAgICAgICAgPyAndCdcbiAgICAgICAgICAgICAgICA6ICfDqCc7XG4gICAgICAgIGlmIChwZXJpb2QgPT09ICd3JyB8fCBwZXJpb2QgPT09ICdXJykge1xuICAgICAgICAgICAgb3V0cHV0ID0gJ2EnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCxcbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUHVuamFiaSAoSW5kaWEpIFtwYS1pbl1cbi8vISBhdXRob3IgOiBIYXJwcmVldCBTaW5naCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYXJwcmVldGtoYWxzYWd0Yml0XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHN5bWJvbE1hcCA9IHtcbiAgICAgICAgMTogJ+CppycsXG4gICAgICAgIDI6ICfgqagnLFxuICAgICAgICAzOiAn4KmpJyxcbiAgICAgICAgNDogJ+CpqicsXG4gICAgICAgIDU6ICfgqasnLFxuICAgICAgICA2OiAn4KmsJyxcbiAgICAgICAgNzogJ+CprScsXG4gICAgICAgIDg6ICfgqa4nLFxuICAgICAgICA5OiAn4KmvJyxcbiAgICAgICAgMDogJ+CppicsXG4gICAgfSxcbiAgICBudW1iZXJNYXAgPSB7XG4gICAgICAgICfgqacnOiAnMScsXG4gICAgICAgICfgqagnOiAnMicsXG4gICAgICAgICfgqaknOiAnMycsXG4gICAgICAgICfgqaonOiAnNCcsXG4gICAgICAgICfgqasnOiAnNScsXG4gICAgICAgICfgqawnOiAnNicsXG4gICAgICAgICfgqa0nOiAnNycsXG4gICAgICAgICfgqa4nOiAnOCcsXG4gICAgICAgICfgqa8nOiAnOScsXG4gICAgICAgICfgqaYnOiAnMCcsXG4gICAgfTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgncGEtaW4nLCB7XG4gICAgLy8gVGhlcmUgYXJlIG1vbnRocyBuYW1lIGFzIHBlciBOYW5ha3NoYWhpIENhbGVuZGFyIGJ1dCB0aGV5IGFyZSBub3QgdXNlZCBhcyByaWdpZGx5IGluIG1vZGVybiBQdW5qYWJpLlxuICAgIG1vbnRoczogJ+ConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ+ConOCoqOCoteCosOCpgF/gqKvgqLzgqLDgqLXgqLDgqYBf4Kiu4Ki+4Kiw4KiaX+CoheCoquCpjeCosOCpiOCosl/gqK7gqIhf4Kic4KmC4KioX+ConOCpgeCosuCovuCoiF/gqIXgqJfgqLjgqKRf4Ki44Kik4Kmw4Kis4KiwX+CoheColeCopOCpguCorOCosF/gqKjgqLXgqbDgqKzgqLBf4Kim4Ki44Kmw4Kis4KiwJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5czogJ+CokOCopOCoteCovuCosF/gqLjgqYvgqK7gqLXgqL7gqLBf4Kiu4Kmw4KiX4Kiy4Ki14Ki+4KiwX+CorOCpgeCop+CoteCovuCosF/gqLXgqYDgqLDgqLXgqL7gqLBf4Ki44Ki84KmB4Kmx4KiV4Kiw4Ki14Ki+4KiwX+CouOCovOCoqOCpgOComuCosOCoteCovuCosCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ+CokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ+CokOCopF/gqLjgqYvgqK5f4Kiu4Kmw4KiX4KiyX+CorOCpgeCop1/gqLXgqYDgqLBf4Ki44Ki84KmB4KiV4KiwX+CouOCovOCoqOCpgCcuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0EgaDptbSDgqLXgqJzgqYcnLFxuICAgICAgICBMVFM6ICdBIGg6bW06c3Mg4Ki14Kic4KmHJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYcnLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSDgqLXgqJzgqYcnLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vgqIXgqJxdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vgqJXgqLJdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdb4KiF4KiX4Kiy4Ki+XSBkZGRkLCBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4KiV4KiyXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW+CoquCov+Com+CosuCph10gZGRkZCwgTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVzIOCoteCov+CpseComicsXG4gICAgICAgIHBhc3Q6ICclcyDgqKrgqL/gqJvgqLLgqYcnLFxuICAgICAgICBzOiAn4KiV4KmB4KidIOCouOColeCov+CpsOConycsXG4gICAgICAgIHNzOiAnJWQg4Ki44KiV4Ki/4Kmw4KifJyxcbiAgICAgICAgbTogJ+Coh+ColSDgqK7gqL/gqbDgqJ8nLFxuICAgICAgICBtbTogJyVkIOCoruCov+CpsOConycsXG4gICAgICAgIGg6ICfgqIfgqbHgqJUg4KiY4Kmw4Kif4Ki+JyxcbiAgICAgICAgaGg6ICclZCDgqJjgqbDgqJ/gqYcnLFxuICAgICAgICBkOiAn4KiH4Kmx4KiVIOCopuCov+CoqCcsXG4gICAgICAgIGRkOiAnJWQg4Kim4Ki/4KioJyxcbiAgICAgICAgTTogJ+Coh+CpseColSDgqK7gqLngqYDgqKjgqL4nLFxuICAgICAgICBNTTogJyVkIOCoruCoueCpgOCoqOCphycsXG4gICAgICAgIHk6ICfgqIfgqbHgqJUg4Ki44Ki+4KiyJyxcbiAgICAgICAgeXk6ICclZCDgqLjgqL7gqLInLFxuICAgIH0sXG4gICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9b4Kmn4Kmo4Kmp4Kmq4Kmr4Kms4Kmt4Kmu4Kmv4KmmXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXJNYXBbbWF0Y2hdO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXGQvZywgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ltYm9sTWFwW21hdGNoXTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICAvLyBQdW5qYWJpIG5vdGF0aW9uIGZvciBtZXJpZGllbXMgYXJlIHF1aXRlIGZ1enp5IGluIHByYWN0aWNlLiBXaGlsZSB0aGVyZSBleGlzdHNcbiAgICAvLyBhIHJpZ2lkIG5vdGlvbiBvZiBhICdQYWhhcicgaXQgaXMgbm90IHVzZWQgYXMgcmlnaWRseSBpbiBtb2Rlcm4gUHVuamFiaS5cbiAgICBtZXJpZGllbVBhcnNlOiAv4Kiw4Ki+4KikfOCouOCoteCph+CosHzgqKbgqYHgqKrgqLngqL/gqLB84Ki44Ki84Ki+4KiuLyxcbiAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+CosOCovuCopCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyIDwgNCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgqLjgqLXgqYfgqLAnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CopuCpgeCoquCoueCov+CosCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyID49IDEwID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+CouOCovOCovuCoricpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgcmV0dXJuICfgqLDgqL7gqKQnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMCkge1xuICAgICAgICAgICAgcmV0dXJuICfgqLjgqLXgqYfgqLAnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgcmV0dXJuICfgqKbgqYHgqKrgqLngqL/gqLAnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAyMCkge1xuICAgICAgICAgICAgcmV0dXJuICfgqLjgqLzgqL7gqK4nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfgqLDgqL7gqKQnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQb2xpc2ggW3BsXVxuLy8hIGF1dGhvciA6IFJhZmFsIEhpcnN6IDogaHR0cHM6Ly9naXRodWIuY29tL2V2b0xcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgbW9udGhzTm9taW5hdGl2ZSA9ICdzdHljemXFhF9sdXR5X21hcnplY19rd2llY2llxYRfbWFqX2N6ZXJ3aWVjX2xpcGllY19zaWVycGllxYRfd3J6ZXNpZcWEX3Bhxbpkemllcm5pa19saXN0b3BhZF9ncnVkemllxYQnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1N1YmplY3RpdmUgPSAnc3R5Y3puaWFfbHV0ZWdvX21hcmNhX2t3aWV0bmlhX21hamFfY3plcndjYV9saXBjYV9zaWVycG5pYV93cnplxZtuaWFfcGHFumR6aWVybmlrYV9saXN0b3BhZGFfZ3J1ZG5pYScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2UgPSBbXG4gICAgICAgIC9ec3R5L2ksXG4gICAgICAgIC9ebHV0L2ksXG4gICAgICAgIC9ebWFyL2ksXG4gICAgICAgIC9ea3dpL2ksXG4gICAgICAgIC9ebWFqL2ksXG4gICAgICAgIC9eY3plL2ksXG4gICAgICAgIC9ebGlwL2ksXG4gICAgICAgIC9ec2llL2ksXG4gICAgICAgIC9ed3J6L2ksXG4gICAgICAgIC9ecGHFui9pLFxuICAgICAgICAvXmxpcy9pLFxuICAgICAgICAvXmdydS9pLFxuICAgIF07XG5mdW5jdGlvbiBwbHVyYWwobikge1xuICAgIHJldHVybiBuICUgMTAgPCA1ICYmIG4gJSAxMCA+IDEgJiYgfn4obiAvIDEwKSAlIDEwICE9PSAxO1xufVxuZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Nla3VuZHknIDogJ3Nla3VuZCcpO1xuICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ21pbnV0YScgOiAnbWludXTEmSc7XG4gICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbWludXR5JyA6ICdtaW51dCcpO1xuICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2dvZHppbmEnIDogJ2dvZHppbsSZJztcbiAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdnb2R6aW55JyA6ICdnb2R6aW4nKTtcbiAgICAgICAgY2FzZSAnd3cnOlxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICd0eWdvZG5pZScgOiAndHlnb2RuaScpO1xuICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21pZXNpxIVjZScgOiAnbWllc2nEmWN5Jyk7XG4gICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAocGx1cmFsKG51bWJlcikgPyAnbGF0YScgOiAnbGF0Jyk7XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdwbCcsIHtcbiAgICBtb250aHM6IGZ1bmN0aW9uIChtb21lbnRUb0Zvcm1hdCwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbW9tZW50VG9Gb3JtYXQpIHtcbiAgICAgICAgICAgIHJldHVybiBtb250aHNOb21pbmF0aXZlO1xuICAgICAgICB9IGVsc2UgaWYgKC9EIE1NTU0vLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vbnRoc1N1YmplY3RpdmVbbW9tZW50VG9Gb3JtYXQubW9udGgoKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbW9udGhzTm9taW5hdGl2ZVttb21lbnRUb0Zvcm1hdC5tb250aCgpXTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbW9udGhzU2hvcnQ6ICdzdHlfbHV0X21hcl9rd2lfbWFqX2N6ZV9saXBfc2llX3dyel9wYcW6X2xpc19ncnUnLnNwbGl0KCdfJyksXG4gICAgbW9udGhzUGFyc2U6IG1vbnRoc1BhcnNlLFxuICAgIGxvbmdNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgc2hvcnRNb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgd2Vla2RheXM6ICduaWVkemllbGFfcG9uaWVkemlhxYJla193dG9yZWtfxZtyb2RhX2N6d2FydGVrX3BpxIV0ZWtfc29ib3RhJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnbmR6X3Bvbl93dF/Fm3JfY3p3X3B0X3NvYicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ05kX1BuX1d0X8Wacl9Del9QdF9Tbycuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW0R6acWbIG9dIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tKdXRybyBvXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgbmllZHppZWzEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1dlIHd0b3JlayBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgxZtyb2TEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgc29ib3TEmSBvXSBMVCc7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXXSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGxhc3REYXk6ICdbV2N6b3JhaiBvXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW1cgemVzesWCxIUgbmllZHppZWzEmSBvXSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIHplc3rFgsSFIMWbcm9kxJkgb10gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbVyB6ZXN6xYLEhSBzb2JvdMSZIG9dIExUJztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tXIHplc3rFgnldIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICd6YSAlcycsXG4gICAgICAgIHBhc3Q6ICclcyB0ZW11JyxcbiAgICAgICAgczogJ2tpbGthIHNla3VuZCcsXG4gICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICBkOiAnMSBkemllxYQnLFxuICAgICAgICBkZDogJyVkIGRuaScsXG4gICAgICAgIHc6ICd0eWR6aWXFhCcsXG4gICAgICAgIHd3OiB0cmFuc2xhdGUsXG4gICAgICAgIE06ICdtaWVzacSFYycsXG4gICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgIHk6ICdyb2snLFxuICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQb3J0dWd1ZXNlIChCcmF6aWwpIFtwdC1icl1cbi8vISBhdXRob3IgOiBDYWlvIFJpYmVpcm8gUGVyZWlyYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jYWlvLXJpYmVpcm8tcGVyZWlyYVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3B0LWJyJywge1xuICAgIG1vbnRoczogJ2phbmVpcm9fZmV2ZXJlaXJvX21hcsOnb19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2phbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnZG9taW5nb19zZWd1bmRhLWZlaXJhX3RlcsOnYS1mZWlyYV9xdWFydGEtZmVpcmFfcXVpbnRhLWZlaXJhX3NleHRhLWZlaXJhX3PDoWJhZG8nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdkb21fc2VnX3Rlcl9xdWFfcXVpX3NleF9zw6FiJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnZG9fMsKqXzPCql80wqpfNcKqXzbCql9zw6EnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW8Ogc10gSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFvDoHNdIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbSG9qZSDDoHNdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tBbWFuaMOjIMOgc10gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8Ogc10gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW09udGVtIMOgc10gTFQnLFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgPT09IDAgfHwgdGhpcy5kYXkoKSA9PT0gNlxuICAgICAgICAgICAgICAgID8gJ1vDmmx0aW1vXSBkZGRkIFvDoHNdIExUJyAvLyBTYXR1cmRheSArIFN1bmRheVxuICAgICAgICAgICAgICAgIDogJ1vDmmx0aW1hXSBkZGRkIFvDoHNdIExUJzsgLy8gTW9uZGF5IC0gRnJpZGF5XG4gICAgICAgIH0sXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnZW0gJXMnLFxuICAgICAgICBwYXN0OiAnaMOhICVzJyxcbiAgICAgICAgczogJ3BvdWNvcyBzZWd1bmRvcycsXG4gICAgICAgIHNzOiAnJWQgc2VndW5kb3MnLFxuICAgICAgICBtOiAndW0gbWludXRvJyxcbiAgICAgICAgbW06ICclZCBtaW51dG9zJyxcbiAgICAgICAgaDogJ3VtYSBob3JhJyxcbiAgICAgICAgaGg6ICclZCBob3JhcycsXG4gICAgICAgIGQ6ICd1bSBkaWEnLFxuICAgICAgICBkZDogJyVkIGRpYXMnLFxuICAgICAgICBNOiAndW0gbcOqcycsXG4gICAgICAgIE1NOiAnJWQgbWVzZXMnLFxuICAgICAgICB5OiAndW0gYW5vJyxcbiAgICAgICAgeXk6ICclZCBhbm9zJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfcK6LyxcbiAgICBvcmRpbmFsOiAnJWTCuicsXG4gICAgaW52YWxpZERhdGU6ICdEYXRhIGludsOhbGlkYScsXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQb3J0dWd1ZXNlIFtwdF1cbi8vISBhdXRob3IgOiBKZWZmZXJzb24gOiBodHRwczovL2dpdGh1Yi5jb20vamFsZXg3OVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3B0Jywge1xuICAgIG1vbnRoczogJ2phbmVpcm9fZmV2ZXJlaXJvX21hcsOnb19hYnJpbF9tYWlvX2p1bmhvX2p1bGhvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlemVtYnJvJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2phbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnRG9taW5nb19TZWd1bmRhLWZlaXJhX1RlcsOnYS1mZWlyYV9RdWFydGEtZmVpcmFfUXVpbnRhLWZlaXJhX1NleHRhLWZlaXJhX1PDoWJhZG8nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdEb21fU2VnX1Rlcl9RdWFfUXVpX1NleF9Tw6FiJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnRG9fMsKqXzPCql80wqpfNcKqXzbCql9Tw6EnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVknLFxuICAgICAgICBMTEw6ICdEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbSG9qZSDDoHNdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tBbWFuaMOjIMOgc10gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW8Ogc10gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW09udGVtIMOgc10gTFQnLFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgPT09IDAgfHwgdGhpcy5kYXkoKSA9PT0gNlxuICAgICAgICAgICAgICAgID8gJ1vDmmx0aW1vXSBkZGRkIFvDoHNdIExUJyAvLyBTYXR1cmRheSArIFN1bmRheVxuICAgICAgICAgICAgICAgIDogJ1vDmmx0aW1hXSBkZGRkIFvDoHNdIExUJzsgLy8gTW9uZGF5IC0gRnJpZGF5XG4gICAgICAgIH0sXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnZW0gJXMnLFxuICAgICAgICBwYXN0OiAnaMOhICVzJyxcbiAgICAgICAgczogJ3NlZ3VuZG9zJyxcbiAgICAgICAgc3M6ICclZCBzZWd1bmRvcycsXG4gICAgICAgIG06ICd1bSBtaW51dG8nLFxuICAgICAgICBtbTogJyVkIG1pbnV0b3MnLFxuICAgICAgICBoOiAndW1hIGhvcmEnLFxuICAgICAgICBoaDogJyVkIGhvcmFzJyxcbiAgICAgICAgZDogJ3VtIGRpYScsXG4gICAgICAgIGRkOiAnJWQgZGlhcycsXG4gICAgICAgIHc6ICd1bWEgc2VtYW5hJyxcbiAgICAgICAgd3c6ICclZCBzZW1hbmFzJyxcbiAgICAgICAgTTogJ3VtIG3DqnMnLFxuICAgICAgICBNTTogJyVkIG1lc2VzJyxcbiAgICAgICAgeTogJ3VtIGFubycsXG4gICAgICAgIHl5OiAnJWQgYW5vcycsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3Cui8sXG4gICAgb3JkaW5hbDogJyVkwronLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFJvbWFuaWFuIFtyb11cbi8vISBhdXRob3IgOiBWbGFkIEd1cmRpZ2EgOiBodHRwczovL2dpdGh1Yi5jb20vZ3VyZGlnYVxuLy8hIGF1dGhvciA6IFZhbGVudGluIEFnYWNoaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hdmFseVxuLy8hIGF1dGhvciA6IEVtYW51ZWwgQ2Vwb2kgOiBodHRwczovL2dpdGh1Yi5jb20vY2VwZW1cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5mdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIHNzOiAnc2VjdW5kZScsXG4gICAgICAgICAgICBtbTogJ21pbnV0ZScsXG4gICAgICAgICAgICBoaDogJ29yZScsXG4gICAgICAgICAgICBkZDogJ3ppbGUnLFxuICAgICAgICAgICAgd3c6ICdzxINwdMSDbcOibmknLFxuICAgICAgICAgICAgTU06ICdsdW5pJyxcbiAgICAgICAgICAgIHl5OiAnYW5pJyxcbiAgICAgICAgfSxcbiAgICAgICAgc2VwYXJhdG9yID0gJyAnO1xuICAgIGlmIChudW1iZXIgJSAxMDAgPj0gMjAgfHwgKG51bWJlciA+PSAxMDAgJiYgbnVtYmVyICUgMTAwID09PSAwKSkge1xuICAgICAgICBzZXBhcmF0b3IgPSAnIGRlICc7XG4gICAgfVxuICAgIHJldHVybiBudW1iZXIgKyBzZXBhcmF0b3IgKyBmb3JtYXRba2V5XTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgncm8nLCB7XG4gICAgbW9udGhzOiAnaWFudWFyaWVfZmVicnVhcmllX21hcnRpZV9hcHJpbGllX21haV9pdW5pZV9pdWxpZV9hdWd1c3Rfc2VwdGVtYnJpZV9vY3RvbWJyaWVfbm9pZW1icmllX2RlY2VtYnJpZScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdpYW4uX2ZlYi5fbWFydC5fYXByLl9tYWlfaXVuLl9pdWwuX2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6ICdkdW1pbmljxINfbHVuaV9tYXLIm2lfbWllcmN1cmlfam9pX3ZpbmVyaV9zw6JtYsSDdMSDJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9Tw6JtJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnRHVfTHVfTWFfTWlfSm9fVmlfU8OiJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSDptbScsXG4gICAgICAgIExUUzogJ0g6bW06c3MnLFxuICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1themkgbGFdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1ttw6JpbmUgbGFdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtsYV0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW2llcmkgbGFdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbZm9zdGFdIGRkZGQgW2xhXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAncGVzdGUgJXMnLFxuICAgICAgICBwYXN0OiAnJXMgw65uIHVybcSDJyxcbiAgICAgICAgczogJ2PDonRldmEgc2VjdW5kZScsXG4gICAgICAgIHNzOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICBtOiAndW4gbWludXQnLFxuICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgaDogJ28gb3LEgycsXG4gICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICBkOiAnbyB6aScsXG4gICAgICAgIGRkOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICB3OiAnbyBzxINwdMSDbcOibsSDJyxcbiAgICAgICAgd3c6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIE06ICdvIGx1bsSDJyxcbiAgICAgICAgTU06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIHk6ICd1biBhbicsXG4gICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogUnVzc2lhbiBbcnVdXG4vLyEgYXV0aG9yIDogVmlrdG9ybWluYXRvciA6IGh0dHBzOi8vZ2l0aHViLmNvbS9WaWt0b3JtaW5hdG9yXG4vLyEgYXV0aG9yIDogTWVuZWxpb24gRWxlbnPDumxlIDogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcbi8vISBhdXRob3IgOiDQmtC+0YDQtdC90LHQtdGA0LMg0JzQsNGA0LogOiBodHRwczovL2dpdGh1Yi5jb20vc29ja2V0cGFpclxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmZ1bmN0aW9uIHBsdXJhbCh3b3JkLCBudW0pIHtcbiAgICB2YXIgZm9ybXMgPSB3b3JkLnNwbGl0KCdfJyk7XG4gICAgcmV0dXJuIG51bSAlIDEwID09PSAxICYmIG51bSAlIDEwMCAhPT0gMTFcbiAgICAgICAgPyBmb3Jtc1swXVxuICAgICAgICA6IG51bSAlIDEwID49IDIgJiYgbnVtICUgMTAgPD0gNCAmJiAobnVtICUgMTAwIDwgMTAgfHwgbnVtICUgMTAwID49IDIwKVxuICAgICAgICA/IGZvcm1zWzFdXG4gICAgICAgIDogZm9ybXNbMl07XG59XG5mdW5jdGlvbiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5KSB7XG4gICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgc3M6IHdpdGhvdXRTdWZmaXggPyAn0YHQtdC60YPQvdC00LBf0YHQtdC60YPQvdC00Ytf0YHQtdC60YPQvdC0JyA6ICfRgdC10LrRg9C90LTRg1/RgdC10LrRg9C90LTRi1/RgdC10LrRg9C90LQnLFxuICAgICAgICBtbTogd2l0aG91dFN1ZmZpeCA/ICfQvNC40L3Rg9GC0LBf0LzQuNC90YPRgtGLX9C80LjQvdGD0YInIDogJ9C80LjQvdGD0YLRg1/QvNC40L3Rg9GC0Ytf0LzQuNC90YPRgicsXG4gICAgICAgIGhoOiAn0YfQsNGBX9GH0LDRgdCwX9GH0LDRgdC+0LInLFxuICAgICAgICBkZDogJ9C00LXQvdGMX9C00L3Rj1/QtNC90LXQuScsXG4gICAgICAgIHd3OiAn0L3QtdC00LXQu9GPX9C90LXQtNC10LvQuF/QvdC10LTQtdC70YwnLFxuICAgICAgICBNTTogJ9C80LXRgdGP0YZf0LzQtdGB0Y/RhtCwX9C80LXRgdGP0YbQtdCyJyxcbiAgICAgICAgeXk6ICfQs9C+0LRf0LPQvtC00LBf0LvQtdGCJyxcbiAgICB9O1xuICAgIGlmIChrZXkgPT09ICdtJykge1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICfQvNC40L3Rg9GC0LAnIDogJ9C80LjQvdGD0YLRgyc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bWJlciArICcgJyArIHBsdXJhbChmb3JtYXRba2V5XSwgK251bWJlcik7XG4gICAgfVxufVxudmFyIG1vbnRoc1BhcnNlID0gW1xuICAgIC9e0Y/QvdCyL2ksXG4gICAgL17RhNC10LIvaSxcbiAgICAvXtC80LDRgC9pLFxuICAgIC9e0LDQv9GAL2ksXG4gICAgL17QvNCwW9C50Y9dL2ksXG4gICAgL17QuNGO0L0vaSxcbiAgICAvXtC40Y7Quy9pLFxuICAgIC9e0LDQstCzL2ksXG4gICAgL17RgdC10L0vaSxcbiAgICAvXtC+0LrRgi9pLFxuICAgIC9e0L3QvtGPL2ksXG4gICAgL17QtNC10LovaSxcbl07XG5cbi8vIGh0dHA6Ly9uZXcuZ3JhbW90YS5ydS9zcHJhdmthL3J1bGVzLzEzOS1wcm9wIDogwqcgMTAzXG4vLyDQodC+0LrRgNCw0YnQtdC90LjRjyDQvNC10YHRj9GG0LXQsjogaHR0cDovL25ldy5ncmFtb3RhLnJ1L3NwcmF2a2EvYnVyby9zZWFyY2gtYW5zd2VyP3M9MjQyNjM3XG4vLyBDTERSIGRhdGE6ICAgICAgICAgIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY2xkci9jaGFydHMvMjgvc3VtbWFyeS9ydS5odG1sIzE3NTNcbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3J1Jywge1xuICAgIG1vbnRoczoge1xuICAgICAgICBmb3JtYXQ6ICfRj9C90LLQsNGA0Y9f0YTQtdCy0YDQsNC70Y9f0LzQsNGA0YLQsF/QsNC/0YDQtdC70Y9f0LzQsNGPX9C40Y7QvdGPX9C40Y7Qu9GPX9Cw0LLQs9GD0YHRgtCwX9GB0LXQvdGC0Y/QsdGA0Y9f0L7QutGC0Y/QsdGA0Y9f0L3QvtGP0LHRgNGPX9C00LXQutCw0LHRgNGPJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBzdGFuZGFsb25lOiAn0Y/QvdCy0LDRgNGMX9GE0LXQstGA0LDQu9GMX9C80LDRgNGCX9Cw0L/RgNC10LvRjF/QvNCw0Llf0LjRjtC90Yxf0LjRjtC70Yxf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGA0Yxf0L7QutGC0Y/QsdGA0Yxf0L3QvtGP0LHRgNGMX9C00LXQutCw0LHRgNGMJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgIH0sXG4gICAgbW9udGhzU2hvcnQ6IHtcbiAgICAgICAgLy8g0L/QviBDTERSINC40LzQtdC90L3QviBcItC40Y7Quy5cIiDQuCBcItC40Y7QvS5cIiwg0L3QviDQutCw0LrQvtC5INGB0LzRi9GB0Lsg0LzQtdC90Y/RgtGMINCx0YPQutCy0YMg0L3QsCDRgtC+0YfQutGDP1xuICAgICAgICBmb3JtYXQ6ICfRj9C90LIuX9GE0LXQstGALl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGPX9C40Y7QvdGPX9C40Y7Qu9GPX9Cw0LLQsy5f0YHQtdC90YIuX9C+0LrRgi5f0L3QvtGP0LEuX9C00LXQui4nLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIHN0YW5kYWxvbmU6ICfRj9C90LIuX9GE0LXQstGALl/QvNCw0YDRgl/QsNC/0YAuX9C80LDQuV/QuNGO0L3RjF/QuNGO0LvRjF/QsNCy0LMuX9GB0LXQvdGCLl/QvtC60YIuX9C90L7Rj9CxLl/QtNC10LouJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgIH0sXG4gICAgd2Vla2RheXM6IHtcbiAgICAgICAgc3RhbmRhbG9uZTogJ9Cy0L7RgdC60YDQtdGB0LXQvdGM0LVf0L/QvtC90LXQtNC10LvRjNC90LjQul/QstGC0L7RgNC90LjQul/RgdGA0LXQtNCwX9GH0LXRgtCy0LXRgNCzX9C/0Y/RgtC90LjRhtCwX9GB0YPQsdCx0L7RgtCwJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBmb3JtYXQ6ICfQstC+0YHQutGA0LXRgdC10L3RjNC1X9C/0L7QvdC10LTQtdC70YzQvdC40Lpf0LLRgtC+0YDQvdC40Lpf0YHRgNC10LTRg1/Rh9C10YLQstC10YDQs1/Qv9GP0YLQvdC40YbRg1/RgdGD0LHQsdC+0YLRgycuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgaXNGb3JtYXQ6IC9cXFsgP1vQktCyXSA/KD860L/RgNC+0YjQu9GD0Y580YHQu9C10LTRg9GO0YnRg9GOfNGN0YLRgyk/ID9dID9kZGRkLyxcbiAgICB9LFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfQstGBX9C/0L1f0LLRgl/RgdGAX9GH0YJf0L/Rgl/RgdCxJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn0LLRgV/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICBtb250aHNQYXJzZTogbW9udGhzUGFyc2UsXG4gICAgbG9uZ01vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcbiAgICBzaG9ydE1vbnRoc1BhcnNlOiBtb250aHNQYXJzZSxcblxuICAgIC8vINC/0L7Qu9C90YvQtSDQvdCw0LfQstCw0L3QuNGPINGBINC/0LDQtNC10LbQsNC80LgsINC/0L4g0YLRgNC4INCx0YPQutCy0YssINC00LvRjyDQvdC10LrQvtGC0L7RgNGL0YUsINC/0L4gNCDQsdGD0LrQstGLLCDRgdC+0LrRgNCw0YnQtdC90LjRjyDRgSDRgtC+0YfQutC+0Lkg0Lgg0LHQtdC3INGC0L7Rh9C60LhcbiAgICBtb250aHNSZWdleDogL14o0Y/QvdCy0LDRgFvRjNGPXXzRj9C90LJcXC4/fNGE0LXQstGA0LDQu1vRjNGPXXzRhNC10LLRgD9cXC4/fNC80LDRgNGC0LA/fNC80LDRgFxcLj980LDQv9GA0LXQu1vRjNGPXXzQsNC/0YBcXC4/fNC80LBb0LnRj1180LjRjtC9W9GM0Y9dfNC40Y7QvVxcLj980LjRjtC7W9GM0Y9dfNC40Y7Qu1xcLj980LDQstCz0YPRgdGC0LA/fNCw0LLQs1xcLj980YHQtdC90YLRj9Cx0YBb0YzRj1180YHQtdC90YI/XFwuP3zQvtC60YLRj9Cx0YBb0YzRj1180L7QutGCXFwuP3zQvdC+0Y/QsdGAW9GM0Y9dfNC90L7Rj9CxP1xcLj980LTQtdC60LDQsdGAW9GM0Y9dfNC00LXQulxcLj8pL2ksXG5cbiAgICAvLyDQutC+0L/QuNGPINC/0YDQtdC00YvQtNGD0YnQtdCz0L5cbiAgICBtb250aHNTaG9ydFJlZ2V4OiAvXijRj9C90LLQsNGAW9GM0Y9dfNGP0L3QslxcLj980YTQtdCy0YDQsNC7W9GM0Y9dfNGE0LXQstGAP1xcLj980LzQsNGA0YLQsD980LzQsNGAXFwuP3zQsNC/0YDQtdC7W9GM0Y9dfNCw0L/RgFxcLj980LzQsFvQudGPXXzQuNGO0L1b0YzRj1180LjRjtC9XFwuP3zQuNGO0Ltb0YzRj1180LjRjtC7XFwuP3zQsNCy0LPRg9GB0YLQsD980LDQstCzXFwuP3zRgdC10L3RgtGP0LHRgFvRjNGPXXzRgdC10L3Rgj9cXC4/fNC+0LrRgtGP0LHRgFvRjNGPXXzQvtC60YJcXC4/fNC90L7Rj9Cx0YBb0YzRj1180L3QvtGP0LE/XFwuP3zQtNC10LrQsNCx0YBb0YzRj1180LTQtdC6XFwuPykvaSxcblxuICAgIC8vINC/0L7Qu9C90YvQtSDQvdCw0LfQstCw0L3QuNGPINGBINC/0LDQtNC10LbQsNC80LhcbiAgICBtb250aHNTdHJpY3RSZWdleDogL14o0Y/QvdCy0LDRgFvRj9GMXXzRhNC10LLRgNCw0Ltb0Y/RjF180LzQsNGA0YLQsD980LDQv9GA0LXQu1vRj9GMXXzQvNCwW9GP0LldfNC40Y7QvVvRj9GMXXzQuNGO0Ltb0Y/RjF180LDQstCz0YPRgdGC0LA/fNGB0LXQvdGC0Y/QsdGAW9GP0YxdfNC+0LrRgtGP0LHRgFvRj9GMXXzQvdC+0Y/QsdGAW9GP0YxdfNC00LXQutCw0LHRgFvRj9GMXSkvaSxcblxuICAgIC8vINCS0YvRgNCw0LbQtdC90LjQtSwg0LrQvtGC0L7RgNC+0LUg0YHQvtC+0YLQstC10YLRgdGC0LLRg9C10YIg0YLQvtC70YzQutC+INGB0L7QutGA0LDRidGR0L3QvdGL0Lwg0YTQvtGA0LzQsNC8XG4gICAgbW9udGhzU2hvcnRTdHJpY3RSZWdleDogL14o0Y/QvdCyXFwufNGE0LXQstGAP1xcLnzQvNCw0YBb0YIuXXzQsNC/0YBcXC580LzQsFvRj9C5XXzQuNGO0L1b0YzRjy5dfNC40Y7Qu1vRjNGPLl180LDQstCzXFwufNGB0LXQvdGCP1xcLnzQvtC60YJcXC580L3QvtGP0LE/XFwufNC00LXQulxcLikvaSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZINCzLicsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINCzLiwgSDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSDQsy4sIEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vQodC10LPQvtC00L3Rjywg0LJdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vQl9Cw0LLRgtGA0LAsINCyXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb0JLRh9C10YDQsCwg0LJdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uIChub3cpIHtcbiAgICAgICAgICAgIGlmIChub3cud2VlaygpICE9PSB0aGlzLndlZWsoKSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkiDRgdC70LXQtNGD0Y7RidC10LVdIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0JIg0YHQu9C10LTRg9GO0YnQuNC5XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINGB0LvQtdC00YPRjtGJ0YPRjl0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXkoKSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQktC+XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vQkl0gZGRkZCwgW9CyXSBMVCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKG5vdykge1xuICAgICAgICAgICAgaWYgKG5vdy53ZWVrKCkgIT09IHRoaXMud2VlaygpKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC/0YDQvtGI0LvQvtC1XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC/0YDQvtGI0LvRi9C5XSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSINC/0YDQvtGI0LvRg9GOXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRheSgpID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CS0L5dIGRkZGQsIFvQsl0gTFQnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW9CSXSBkZGRkLCBb0LJdIExUJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAn0YfQtdGA0LXQtyAlcycsXG4gICAgICAgIHBhc3Q6ICclcyDQvdCw0LfQsNC0JyxcbiAgICAgICAgczogJ9C90LXRgdC60L7Qu9GM0LrQviDRgdC10LrRg9C90LQnLFxuICAgICAgICBzczogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgbW06IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIGg6ICfRh9Cw0YEnLFxuICAgICAgICBoaDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgZDogJ9C00LXQvdGMJyxcbiAgICAgICAgZGQ6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgICAgIHc6ICfQvdC10LTQtdC70Y8nLFxuICAgICAgICB3dzogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgTTogJ9C80LXRgdGP0YYnLFxuICAgICAgICBNTTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgeTogJ9Cz0L7QtCcsXG4gICAgICAgIHl5OiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL9C90L7Rh9C4fNGD0YLRgNCwfNC00L3Rj3zQstC10YfQtdGA0LAvaSxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIC9eKNC00L3Rj3zQstC10YfQtdGA0LApJC8udGVzdChpbnB1dCk7XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiAn0L3QvtGH0LgnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuICfRg9GC0YDQsCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE3KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9C00L3Rjyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ9Cy0LXRh9C10YDQsCc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0Ll80LPQvnzRjykvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LknO1xuICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct0LPQvic7XG4gICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdGPJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2luZGhpIFtzZF1cbi8vISBhdXRob3IgOiBOYXJhaW4gU2FnYXIgOiBodHRwczovL2dpdGh1Yi5jb20vbmFyYWluc2FnYXJcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgbW9udGhzID0gW1xuICAgICAgICAn2KzZhtmI2LHZiicsXG4gICAgICAgICfZgdmK2KjYsdmI2LHZiicsXG4gICAgICAgICfZhdin2LHahicsXG4gICAgICAgICfYp9m+2LHZitmEJyxcbiAgICAgICAgJ9mF2KbZiicsXG4gICAgICAgICfYrNmI2YYnLFxuICAgICAgICAn2KzZiNmE2KfYodmQJyxcbiAgICAgICAgJ9ii2q/Ys9m9JyxcbiAgICAgICAgJ9iz2YrZvtm92YXYqNixJyxcbiAgICAgICAgJ9ii2qrZvdmI2KjYsScsXG4gICAgICAgICfZhtmI2YXYqNixJyxcbiAgICAgICAgJ9qK2LPZhdio2LEnLFxuICAgIF0sXG4gICAgZGF5cyA9IFsn2KLahtixJywgJ9iz2YjZhdixJywgJ9in2rHYp9ix2YgnLCAn2KfYsdio2LknLCAn2K7ZhdmK2LMnLCAn2KzZhdi5JywgJ9qH2Ybah9ixJ107XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3NkJywge1xuICAgIG1vbnRoczogbW9udGhzLFxuICAgIG1vbnRoc1Nob3J0OiBtb250aHMsXG4gICAgd2Vla2RheXM6IGRheXMsXG4gICAgd2Vla2RheXNTaG9ydDogZGF5cyxcbiAgICB3ZWVrZGF5c01pbjogZGF5cyxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRk2IwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL9i12KjYrXzYtNin2YUvLFxuICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gJ9i02KfZhScgPT09IGlucHV0O1xuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuICfYtdio2K0nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAn2LTYp9mFJztcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdb2KfahF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW9iz2oDYp9q72YpdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvYp9qz2YrZhiDZh9mB2KrZiiDYqtmKXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb2qrYp9mE2YfZh10gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1var9iy2LHZitmEINmH2YHYqtmKXSBkZGRkIFvYqtmKXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXMg2b7ZiNihJyxcbiAgICAgICAgcGFzdDogJyVzINin2rMnLFxuICAgICAgICBzOiAn2obZhtivINiz2YraqtmG2oonLFxuICAgICAgICBzczogJyVkINiz2YraqtmG2oonLFxuICAgICAgICBtOiAn2YfaqiDZhdmG2b0nLFxuICAgICAgICBtbTogJyVkINmF2YbZvScsXG4gICAgICAgIGg6ICfZh9qqINqq2YTYp9qqJyxcbiAgICAgICAgaGg6ICclZCDaqtmE2KfaqicsXG4gICAgICAgIGQ6ICfZh9qqINqP2YrZhtmH2YYnLFxuICAgICAgICBkZDogJyVkINqP2YrZhtmH2YYnLFxuICAgICAgICBNOiAn2YfaqiDZhdmH2YrZhtmIJyxcbiAgICAgICAgTU06ICclZCDZhdmH2YrZhtinJyxcbiAgICAgICAgeTogJ9mH2qog2LPYp9mEJyxcbiAgICAgICAgeXk6ICclZCDYs9in2YQnLFxuICAgIH0sXG4gICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgIH0sXG4gICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBOb3J0aGVybiBTYW1pIFtzZV1cbi8vISBhdXRob3JzIDogQsOlcmQgUm9sc3RhZCBIZW5yaWtzZW4gOiBodHRwczovL2dpdGh1Yi5jb20va2FyYW1lbGxcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdzZScsIHtcbiAgICBtb250aHM6ICdvxJHEkWFqYWdlbcOhbm51X2d1b3Z2YW3DoW5udV9uanVrxI1hbcOhbm51X2N1b8WLb23DoW5udV9taWVzc2Vtw6FubnVfZ2Vhc3NlbcOhbm51X3N1b2lkbmVtw6FubnVfYm9yZ2Vtw6FubnVfxI1ha8SNYW3DoW5udV9nb2xnZ290bcOhbm51X3Nrw6FibWFtw6FubnVfanVvdmxhbcOhbm51Jy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ2/EkcSRal9ndW92X25qdWtfY3VvX21pZXNfZ2Vhc19zdW9pX2JvcmdfxI1ha8SNX2dvbGdfc2vDoWJfanVvdicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXM6ICdzb3RuYWJlYWl2aV92dW9zc8OhcmdhX21hxYvFi2Viw6FyZ2FfZ2Fza2F2YWhra3VfZHVvcmFzdGF0X2JlYXJqYWRhdF9sw6F2dmFyZGF0Jy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnc290bl92dW9zX21hxYtfZ2Fza19kdW9yX2JlYXJfbMOhdicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ3Nfdl9tX2dfZF9iX0wnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ01NTU0gRC4gW2IuXSBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tvdG5lIHRpXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbaWh0dGluIHRpXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdGldIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tpa3RlIHRpXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW292ZGRpdF0gZGRkZCBbdGldIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICclcyBnZWHFvmVzJyxcbiAgICAgICAgcGFzdDogJ21hxYtpdCAlcycsXG4gICAgICAgIHM6ICdtb2FkZGUgc2VrdW5kZGF0JyxcbiAgICAgICAgc3M6ICclZCBzZWt1bmRkYXQnLFxuICAgICAgICBtOiAnb2t0YSBtaW51aHRhJyxcbiAgICAgICAgbW06ICclZCBtaW51aHRhdCcsXG4gICAgICAgIGg6ICdva3RhIGRpaW1tdScsXG4gICAgICAgIGhoOiAnJWQgZGlpbW11dCcsXG4gICAgICAgIGQ6ICdva3RhIGJlYWl2aScsXG4gICAgICAgIGRkOiAnJWQgYmVhaXZ2aXQnLFxuICAgICAgICBNOiAnb2t0YSBtw6FubnUnLFxuICAgICAgICBNTTogJyVkIG3DoW51dCcsXG4gICAgICAgIHk6ICdva3RhIGphaGtpJyxcbiAgICAgICAgeXk6ICclZCBqYWdpdCcsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNpbmhhbGVzZSBbc2ldXG4vLyEgYXV0aG9yIDogU2FtcGF0aCBTaXRpbmFtYWx1d2EgOiBodHRwczovL2dpdGh1Yi5jb20vc2FtcGF0aHNyaXNcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG4vKmpzaGludCAtVzEwMCovXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdzaScsIHtcbiAgICBtb250aHM6ICfgtqLgtrHgt4Dgt4/gtrvgt5Jf4La04LeZ4La24La74LeA4LeP4La74LeSX+C2uOC3j+C2u+C3iuC2reC3lF/gtoXgtrTgt4rigI3gtrvgt5rgtr3gt4pf4La44LeQ4La64LeSX+C2ouC3luC2seC3kl/gtqLgt5bgtr3gt5Jf4LaF4Lac4Led4LeD4LeK4Lat4LeUX+C3g+C3kOC2tOC3iuC2reC3kOC2uOC3iuC2tuC2u+C3il/gtpTgtprgt4rgtq3gt53gtrbgtrvgt4pf4Lax4Lec4LeA4LeQ4La44LeK4La24La74LeKX+C2r+C3meC3g+C3kOC2uOC3iuC2tuC2u+C3iicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICfgtqLgtrFf4La04LeZ4La2X+C2uOC3j+C2u+C3il/gtoXgtrTgt4pf4La44LeQ4La64LeSX+C2ouC3luC2seC3kl/gtqLgt5bgtr3gt5Jf4LaF4Lac4LedX+C3g+C3kOC2tOC3il/gtpTgtprgt4pf4Lax4Lec4LeA4LeQX+C2r+C3meC3g+C3kCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXM6ICfgtongtrvgt5Lgtq/gt49f4LeD4Laz4LeU4Lav4LePX+C2heC2n+C3hOC2u+C3lOC3gOC3j+C2r+C3j1/gtrbgtq/gt4/gtq/gt49f4La24LeK4oCN4La74LeE4LeD4LeK4La04Lat4LeS4Lax4LeK4Lav4LePX+C3g+C3kuC2muC3lOC2u+C3j+C2r+C3j1/gt4Pgt5ngtrHgt4Pgt5Tgtrvgt4/gtq/gt48nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfgtongtrvgt5Jf4LeD4Laz4LeUX+C2heC2n1/gtrbgtq/gt49f4La24LeK4oCN4La74LeEX+C3g+C3kuC2muC3lF/gt4Pgt5ngtrEnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfgtolf4LeDX+C2hV/gtrZf4La24LeK4oCN4La7X+C3g+C3kl/gt4Pgt5knLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnYSBoOm1tJyxcbiAgICAgICAgTFRTOiAnYSBoOm1tOnNzJyxcbiAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICBMTDogJ1lZWVkgTU1NTSBEJyxcbiAgICAgICAgTExMOiAnWVlZWSBNTU1NIEQsIGEgaDptbScsXG4gICAgICAgIExMTEw6ICdZWVlZIE1NTU0gRCBb4LeA4LeQ4Lax4LeSXSBkZGRkLCBhIGg6bW06c3MnLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vgtoXgtq9dIExUW+C2p10nLFxuICAgICAgICBuZXh0RGF5OiAnW+C3hOC3meC2p10gTFRb4LanXScsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBMVFvgtqddJyxcbiAgICAgICAgbGFzdERheTogJ1vgtorgtrrgt5pdIExUW+C2p10nLFxuICAgICAgICBsYXN0V2VlazogJ1vgtrTgt4Pgt5Tgtpzgt5LgtrpdIGRkZGQgTFRb4LanXScsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXPgtprgt5LgtrHgt4onLFxuICAgICAgICBwYXN0OiAnJXPgtprgtqcg4La04LeZ4La7JyxcbiAgICAgICAgczogJ+C2reC2reC3iuC2tOC2uyDgtprgt5Lgt4Tgt5LgtrTgtronLFxuICAgICAgICBzczogJ+C2reC2reC3iuC2tOC2uyAlZCcsXG4gICAgICAgIG06ICfgtrjgt5LgtrHgt5Lgtq3gt4rgtq3gt5Tgt4AnLFxuICAgICAgICBtbTogJ+C2uOC3kuC2seC3kuC2reC3iuC2reC3lCAlZCcsXG4gICAgICAgIGg6ICfgtrTgt5DgtronLFxuICAgICAgICBoaDogJ+C2tOC3kOC2uiAlZCcsXG4gICAgICAgIGQ6ICfgtq/gt5LgtrHgtronLFxuICAgICAgICBkZDogJ+C2r+C3kuC2sSAlZCcsXG4gICAgICAgIE06ICfgtrjgt4/gt4PgtronLFxuICAgICAgICBNTTogJ+C2uOC3j+C3gyAlZCcsXG4gICAgICAgIHk6ICfgt4Dgt4PgtrsnLFxuICAgICAgICB5eTogJ+C3gOC3g+C2uyAlZCcsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0g4LeA4LeQ4Lax4LeSLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyAnIOC3gOC3kOC2seC3kic7XG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv4La04LeZ4La7IOC3gOC2u+C3lHzgtrTgt4Pgt4og4LeA4La74LeUfOC2tOC3mS7gt4B84La0LuC3gC4vLFxuICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfgtrQu4LeALicgfHwgaW5wdXQgPT09ICfgtrTgt4Pgt4og4LeA4La74LeUJztcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ+C2tC7gt4AuJyA6ICfgtrTgt4Pgt4og4LeA4La74LeUJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ+C2tOC3mS7gt4AuJyA6ICfgtrTgt5ngtrsg4LeA4La74LeUJztcbiAgICAgICAgfVxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTbG92YWsgW3NrXVxuLy8hIGF1dGhvciA6IE1hcnRpbiBNaW5rYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rMnNcbi8vISBiYXNlZCBvbiB3b3JrIG9mIHBldHJiZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL3BldHJiZWxhXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIG1vbnRocyA9ICdqYW51w6FyX2ZlYnJ1w6FyX21hcmVjX2FwcsOtbF9tw6FqX2rDum5fasO6bF9hdWd1c3Rfc2VwdGVtYmVyX29rdMOzYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydCA9ICdqYW5fZmViX21hcl9hcHJfbcOhal9qw7puX2rDumxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKTtcbmZ1bmN0aW9uIHBsdXJhbChuKSB7XG4gICAgcmV0dXJuIG4gPiAxICYmIG4gPCA1O1xufVxuZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgIHZhciByZXN1bHQgPSBudW1iZXIgKyAnICc7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSAncyc6IC8vIGEgZmV3IHNlY29uZHMgLyBpbiBhIGZldyBzZWNvbmRzIC8gYSBmZXcgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ3DDoXIgc2Vrw7puZCcgOiAncMOhciBzZWt1bmRhbWknO1xuICAgICAgICBjYXNlICdzcyc6IC8vIDkgc2Vjb25kcyAvIGluIDkgc2Vjb25kcyAvIDkgc2Vjb25kcyBhZ29cbiAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdzZWt1bmR5JyA6ICdzZWvDum5kJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnc2VrdW5kYW1pJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnbSc6IC8vIGEgbWludXRlIC8gaW4gYSBtaW51dGUgLyBhIG1pbnV0ZSBhZ29cbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ21pbsO6dGEnIDogaXNGdXR1cmUgPyAnbWluw7p0dScgOiAnbWluw7p0b3UnO1xuICAgICAgICBjYXNlICdtbSc6IC8vIDkgbWludXRlcyAvIGluIDkgbWludXRlcyAvIDkgbWludXRlcyBhZ29cbiAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdtaW7DunR5JyA6ICdtaW7DunQnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdtaW7DunRhbWknO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlICdoJzogLy8gYW4gaG91ciAvIGluIGFuIGhvdXIgLyBhbiBob3VyIGFnb1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAnaG9kaW5hJyA6IGlzRnV0dXJlID8gJ2hvZGludScgOiAnaG9kaW5vdSc7XG4gICAgICAgIGNhc2UgJ2hoJzogLy8gOSBob3VycyAvIGluIDkgaG91cnMgLyA5IGhvdXJzIGFnb1xuICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ2hvZGlueScgOiAnaG9kw61uJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnaG9kaW5hbWknO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlICdkJzogLy8gYSBkYXkgLyBpbiBhIGRheSAvIGEgZGF5IGFnb1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZGXFiCcgOiAnZMWIb20nO1xuICAgICAgICBjYXNlICdkZCc6IC8vIDkgZGF5cyAvIGluIDkgZGF5cyAvIDkgZGF5cyBhZ29cbiAgICAgICAgICAgIGlmICh3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArIChwbHVyYWwobnVtYmVyKSA/ICdkbmknIDogJ2Ruw60nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCArICdkxYhhbWknO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlICdNJzogLy8gYSBtb250aCAvIGluIGEgbW9udGggLyBhIG1vbnRoIGFnb1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzaWFjJyA6ICdtZXNpYWNvbSc7XG4gICAgICAgIGNhc2UgJ01NJzogLy8gOSBtb250aHMgLyBpbiA5IG1vbnRocyAvIDkgbW9udGhzIGFnb1xuICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ21lc2lhY2UnIDogJ21lc2lhY292Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAnbWVzaWFjbWknO1xuICAgICAgICAgICAgfVxuICAgICAgICBjYXNlICd5JzogLy8gYSB5ZWFyIC8gaW4gYSB5ZWFyIC8gYSB5ZWFyIGFnb1xuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAncm9rJyA6ICdyb2tvbSc7XG4gICAgICAgIGNhc2UgJ3l5JzogLy8gOSB5ZWFycyAvIGluIDkgeWVhcnMgLyA5IHllYXJzIGFnb1xuICAgICAgICAgICAgaWYgKHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICsgKHBsdXJhbChudW1iZXIpID8gJ3Jva3knIDogJ3Jva292Jyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgKyAncm9rbWknO1xuICAgICAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnc2snLCB7XG4gICAgbW9udGhzOiBtb250aHMsXG4gICAgbW9udGhzU2hvcnQ6IG1vbnRoc1Nob3J0LFxuICAgIHdlZWtkYXlzOiAnbmVkZcS+YV9wb25kZWxva191dG9yb2tfc3RyZWRhX8WhdHZydG9rX3BpYXRva19zb2JvdGEnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ25lX3BvX3V0X3N0X8WhdF9waV9zbycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3N0X8WhdF9waV9zbycuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tkbmVzIG9dIExUJyxcbiAgICAgICAgbmV4dERheTogJ1t6YWp0cmEgb10gTFQnLFxuICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t2IG5lZGXEvnUgb10gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc3RyZWR1IG9dIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZvIMWhdHZydG9rIG9dIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3YgcGlhdG9rIG9dIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3Ygc29ib3R1IG9dIExUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbGFzdERheTogJ1t2xI1lcmEgb10gTFQnLFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO6IG5lZGXEvnUgb10gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw71dIGRkZGQgW29dIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW21pbnVsw7ogc3RyZWR1IG9dIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO9XSBkZGRkIFtvXSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1ttaW51bMO6IHNvYm90dSBvXSBMVCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICBwYXN0OiAncHJlZCAlcycsXG4gICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNsb3ZlbmlhbiBbc2xdXG4vLyEgYXV0aG9yIDogUm9iZXJ0IFNlZG92xaFlayA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWRvdnNla1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgdmFyIHJlc3VsdCA9IG51bWJlciArICcgJztcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlXG4gICAgICAgICAgICAgICAgPyAnbmVrYWogc2VrdW5kJ1xuICAgICAgICAgICAgICAgIDogJ25la2FqIHNla3VuZGFtaSc7XG4gICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgIGlmIChudW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCA/ICdzZWt1bmRvJyA6ICdzZWt1bmRpJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnc2VrdW5kaScgOiAnc2VrdW5kYWgnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnc2VrdW5kZScgOiAnc2VrdW5kYWgnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ3Nla3VuZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ2VuYSBtaW51dGEnIDogJ2VubyBtaW51dG8nO1xuICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggPyAnbWludXRhJyA6ICdtaW51dG8nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtaW51dGknIDogJ21pbnV0YW1hJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21pbnV0ZScgOiAnbWludXRhbWknO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtaW51dCcgOiAnbWludXRhbWknO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/ICdlbmEgdXJhJyA6ICdlbm8gdXJvJztcbiAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4ID8gJ3VyYScgOiAndXJvJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAndXJpJyA6ICd1cmFtYSc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlciA8IDUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICd1cmUnIDogJ3VyYW1pJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAndXInIDogJ3VyYW1pJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW4gZGFuJyA6ICdlbmltIGRuZW0nO1xuICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZGFuJyA6ICdkbmVtJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZG5pJyA6ICdkbmV2b21hJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZG5pJyA6ICdkbmV2aSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2VuIG1lc2VjJyA6ICdlbmltIG1lc2VjZW0nO1xuICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWMnIDogJ21lc2VjZW0nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdtZXNlY2EnIDogJ21lc2VjZW1hJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVyIDwgNSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ21lc2VjZScgOiAnbWVzZWNpJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbWVzZWNldicgOiAnbWVzZWNpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnZW5vIGxldG8nIDogJ2VuaW0gbGV0b20nO1xuICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbGV0bycgOiAnbGV0b20nO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPT09IDIpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gd2l0aG91dFN1ZmZpeCB8fCBpc0Z1dHVyZSA/ICdsZXRpJyA6ICdsZXRvbWEnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChudW1iZXIgPCA1KSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHdpdGhvdXRTdWZmaXggfHwgaXNGdXR1cmUgPyAnbGV0YScgOiAnbGV0aSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSB3aXRob3V0U3VmZml4IHx8IGlzRnV0dXJlID8gJ2xldCcgOiAnbGV0aSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnc2wnLCB7XG4gICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFyZWNfYXByaWxfbWFqX2p1bmlqX2p1bGlqX2F2Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdqYW4uX2ZlYi5fbWFyLl9hcHIuX21hai5fanVuLl9qdWwuX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogJ25lZGVsamFfcG9uZWRlbGpla190b3Jla19zcmVkYV/EjWV0cnRla19wZXRla19zb2JvdGEnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ25lZC5fcG9uLl90b3IuX3NyZS5fxI1ldC5fcGV0Ll9zb2IuJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnbmVfcG9fdG9fc3JfxI1lX3BlX3NvJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0g6bW0nLFxuICAgICAgICBMVFM6ICdIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELiBNTS4gWVlZWScsXG4gICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tkYW5lcyBvYl0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW2p1dHJpIG9iXSBMVCcsXG5cbiAgICAgICAgbmV4dFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gW25lZGVsam9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gW3NyZWRvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ZdIFtzb2JvdG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbdl0gZGRkZCBbb2JdIExUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgbGFzdERheTogJ1t2xI1lcmFqIG9iXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuZGF5KCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qb10gW25lZGVsam9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmpvXSBbc3JlZG9dIFtvYl0gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbcHJlasWhbmpvXSBbc29ib3RvXSBbb2JdIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3ByZWrFoW5qaV0gZGRkZCBbb2JdIExUJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfEjWV6ICVzJyxcbiAgICAgICAgcGFzdDogJ3ByZWQgJXMnLFxuICAgICAgICBzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBzczogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgbW06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIGhoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gN3RoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBBbGJhbmlhbiBbc3FdXG4vLyEgYXV0aG9yIDogRmxha8OrcmltIElzbWFuaSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbGFrZXJpbWlcbi8vISBhdXRob3IgOiBNZW5lbGlvbiBFbGVuc8O6bGUgOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE9lcmQgQ3VrYWxsYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9vZXJkXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnc3EnLCB7XG4gICAgbW9udGhzOiAnSmFuYXJfU2hrdXJ0X01hcnNfUHJpbGxfTWFqX1FlcnNob3JfS29ycmlrX0d1c2h0X1NodGF0b3JfVGV0b3JfTsOrbnRvcl9EaGpldG9yJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbl9TaGtfTWFyX1ByaV9NYWpfUWVyX0tvcl9HdXNfU2h0X1RldF9Ow6tuX0Roaicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ0UgRGllbF9FIEjDq27Dq19FIE1hcnTDq19FIE3Dq3JrdXLDq19FIEVuanRlX0UgUHJlbXRlX0UgU2h0dW7Dqycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ0RpZV9Iw6tuX01hcl9Nw6tyX0Vual9QcmVfU2h0Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnRF9IX01hX03Dq19FX1BfU2gnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIG1lcmlkaWVtUGFyc2U6IC9QRHxNRC8sXG4gICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dC5jaGFyQXQoMCkgPT09ICdNJztcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgcmV0dXJuIGhvdXJzIDwgMTIgPyAnUEQnIDogJ01EJztcbiAgICB9LFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbU290IG7Dq10gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW05lc8OrciBuw6tdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtuw6tdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tEamUgbsOrXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbZSBrYWx1YXIgbsOrXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnbsOrICVzJyxcbiAgICAgICAgcGFzdDogJyVzIG3DqyBwYXLDqycsXG4gICAgICAgIHM6ICdkaXNhIHNla29uZGEnLFxuICAgICAgICBzczogJyVkIHNla29uZGEnLFxuICAgICAgICBtOiAnbmrDqyBtaW51dMOrJyxcbiAgICAgICAgbW06ICclZCBtaW51dGEnLFxuICAgICAgICBoOiAnbmrDqyBvcsOrJyxcbiAgICAgICAgaGg6ICclZCBvcsOrJyxcbiAgICAgICAgZDogJ25qw6sgZGl0w6snLFxuICAgICAgICBkZDogJyVkIGRpdMOrJyxcbiAgICAgICAgTTogJ25qw6sgbXVhaicsXG4gICAgICAgIE1NOiAnJWQgbXVhaicsXG4gICAgICAgIHk6ICduasOrIHZpdCcsXG4gICAgICAgIHl5OiAnJWQgdml0ZScsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFNlcmJpYW4gQ3lyaWxsaWMgW3NyLWN5cmxdXG4vLyEgYXV0aG9yIDogTWlsYW4gSmFuYcSNa292acSHPG1pbGFuamFuYWNrb3ZpY0BnbWFpbC5jb20+IDogaHR0cHM6Ly9naXRodWIuY29tL21pbGFuLWpcbi8vISBhdXRob3IgOiBTdGVmYW4gQ3JuamFrb3ZpxIcgPHN0ZWZhbkBob3RtYWlsLnJzPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jcm5qYWtvdmljXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHRyYW5zbGF0b3IgPSB7XG4gICAgd29yZHM6IHtcbiAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgc3M6IFsn0YHQtdC60YPQvdC00LAnLCAn0YHQtdC60YPQvdC00LUnLCAn0YHQtdC60YPQvdC00LgnXSxcbiAgICAgICAgbTogWyfRmNC10LTQsNC9INC80LjQvdGD0YInLCAn0ZjQtdC00L3QtSDQvNC40L3Rg9GC0LUnXSxcbiAgICAgICAgbW06IFsn0LzQuNC90YPRgicsICfQvNC40L3Rg9GC0LUnLCAn0LzQuNC90YPRgtCwJ10sXG4gICAgICAgIGg6IFsn0ZjQtdC00LDQvSDRgdCw0YInLCAn0ZjQtdC00L3QvtCzINGB0LDRgtCwJ10sXG4gICAgICAgIGhoOiBbJ9GB0LDRgicsICfRgdCw0YLQsCcsICfRgdCw0YLQuCddLFxuICAgICAgICBkZDogWyfQtNCw0L0nLCAn0LTQsNC90LAnLCAn0LTQsNC90LAnXSxcbiAgICAgICAgTU06IFsn0LzQtdGB0LXRhicsICfQvNC10YHQtdGG0LAnLCAn0LzQtdGB0LXRhtC4J10sXG4gICAgICAgIHl5OiBbJ9Cz0L7QtNC40L3QsCcsICfQs9C+0LTQuNC90LUnLCAn0LPQvtC00LjQvdCwJ10sXG4gICAgfSxcbiAgICBjb3JyZWN0R3JhbW1hdGljYWxDYXNlOiBmdW5jdGlvbiAobnVtYmVyLCB3b3JkS2V5KSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgPT09IDFcbiAgICAgICAgICAgID8gd29yZEtleVswXVxuICAgICAgICAgICAgOiBudW1iZXIgPj0gMiAmJiBudW1iZXIgPD0gNFxuICAgICAgICAgICAgPyB3b3JkS2V5WzFdXG4gICAgICAgICAgICA6IHdvcmRLZXlbMl07XG4gICAgfSxcbiAgICB0cmFuc2xhdGU6IGZ1bmN0aW9uIChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgICAgICB2YXIgd29yZEtleSA9IHRyYW5zbGF0b3Iud29yZHNba2V5XTtcbiAgICAgICAgaWYgKGtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gd29yZEtleVswXSA6IHdvcmRLZXlbMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIG51bWJlciArXG4gICAgICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdG9yLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UobnVtYmVyLCB3b3JkS2V5KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCdzci1jeXJsJywge1xuICAgIG1vbnRoczogJ9GY0LDQvdGD0LDRgF/RhNC10LHRgNGD0LDRgF/QvNCw0YDRgl/QsNC/0YDQuNC7X9C80LDRmF/RmNGD0L1f0ZjRg9C7X9Cw0LLQs9GD0YHRgl/RgdC10L/RgtC10LzQsdCw0YBf0L7QutGC0L7QsdCw0YBf0L3QvtCy0LXQvNCx0LDRgF/QtNC10YbQtdC80LHQsNGAJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ9GY0LDQvS5f0YTQtdCxLl/QvNCw0YAuX9Cw0L/RgC5f0LzQsNGYX9GY0YPQvV/RmNGD0Ltf0LDQstCzLl/RgdC10L8uX9C+0LrRgi5f0L3QvtCyLl/QtNC10YYuJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAn0L3QtdC00LXRmdCwX9C/0L7QvdC10LTQtdGZ0LDQul/Rg9GC0L7RgNCw0Lpf0YHRgNC10LTQsF/Rh9C10YLQstGA0YLQsNC6X9C/0LXRgtCw0Lpf0YHRg9Cx0L7RgtCwJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfQvdC10LQuX9C/0L7QvS5f0YPRgtC+Ll/RgdGA0LUuX9GH0LXRgi5f0L/QtdGCLl/RgdGD0LEuJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn0L3QtV/Qv9C+X9GD0YJf0YHRgF/Rh9C1X9C/0LVf0YHRgycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgIEw6ICdELiBNLiBZWVlZLicsXG4gICAgICAgIExMOiAnRC4gTU1NTSBZWVlZLicsXG4gICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vQtNCw0L3QsNGBINGDXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb0YHRg9GC0YDQsCDRg10gTFQnLFxuICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9C90LXQtNC10ZnRg10gW9GDXSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1vRg10gW9GB0YDQtdC00YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIFvRgdGD0LHQvtGC0YNdIFvRg10gTFQnO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdb0YNdIGRkZGQgW9GDXSBMVCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGxhc3REYXk6ICdb0ZjRg9GH0LUg0YNdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBsYXN0V2Vla0RheXMgPSBbXG4gICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70LVdIFvQvdC10LTQtdGZ0LVdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvQv9C+0L3QtdC00LXRmdC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvRg9GC0L7RgNC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C1XSBb0YHRgNC10LTQtV0gW9GDXSBMVCcsXG4gICAgICAgICAgICAgICAgJ1vQv9GA0L7RiNC70L7Qs10gW9GH0LXRgtCy0YDRgtC60LBdIFvRg10gTFQnLFxuICAgICAgICAgICAgICAgICdb0L/RgNC+0YjQu9C+0LNdIFvQv9C10YLQutCwXSBb0YNdIExUJyxcbiAgICAgICAgICAgICAgICAnW9C/0YDQvtGI0LvQtV0gW9GB0YPQsdC+0YLQtV0gW9GDXSBMVCcsXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RXZWVrRGF5c1t0aGlzLmRheSgpXTtcbiAgICAgICAgfSxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfQt9CwICVzJyxcbiAgICAgICAgcGFzdDogJ9C/0YDQtSAlcycsXG4gICAgICAgIHM6ICfQvdC10LrQvtC70LjQutC+INGB0LXQutGD0L3QtNC4JyxcbiAgICAgICAgc3M6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICBtOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgbW06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICBoOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgaGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICBkOiAn0LTQsNC9JyxcbiAgICAgICAgZGQ6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICBNOiAn0LzQtdGB0LXRhicsXG4gICAgICAgIE1NOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgeTogJ9Cz0L7QtNC40L3RgycsXG4gICAgICAgIHl5OiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgb3JkaW5hbDogJyVkLicsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDFzdCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU2VyYmlhbiBbc3JdXG4vLyEgYXV0aG9yIDogTWlsYW4gSmFuYcSNa292acSHPG1pbGFuamFuYWNrb3ZpY0BnbWFpbC5jb20+IDogaHR0cHM6Ly9naXRodWIuY29tL21pbGFuLWpcbi8vISBhdXRob3IgOiBTdGVmYW4gQ3JuamFrb3ZpxIcgPHN0ZWZhbkBob3RtYWlsLnJzPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9jcm5qYWtvdmljXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHRyYW5zbGF0b3IgPSB7XG4gICAgd29yZHM6IHtcbiAgICAgICAgLy9EaWZmZXJlbnQgZ3JhbW1hdGljYWwgY2FzZXNcbiAgICAgICAgc3M6IFsnc2VrdW5kYScsICdzZWt1bmRlJywgJ3Nla3VuZGknXSxcbiAgICAgICAgbTogWydqZWRhbiBtaW51dCcsICdqZWRuZSBtaW51dGUnXSxcbiAgICAgICAgbW06IFsnbWludXQnLCAnbWludXRlJywgJ21pbnV0YSddLFxuICAgICAgICBoOiBbJ2plZGFuIHNhdCcsICdqZWRub2cgc2F0YSddLFxuICAgICAgICBoaDogWydzYXQnLCAnc2F0YScsICdzYXRpJ10sXG4gICAgICAgIGRkOiBbJ2RhbicsICdkYW5hJywgJ2RhbmEnXSxcbiAgICAgICAgTU06IFsnbWVzZWMnLCAnbWVzZWNhJywgJ21lc2VjaSddLFxuICAgICAgICB5eTogWydnb2RpbmEnLCAnZ29kaW5lJywgJ2dvZGluYSddLFxuICAgIH0sXG4gICAgY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTogZnVuY3Rpb24gKG51bWJlciwgd29yZEtleSkge1xuICAgICAgICByZXR1cm4gbnVtYmVyID09PSAxXG4gICAgICAgICAgICA/IHdvcmRLZXlbMF1cbiAgICAgICAgICAgIDogbnVtYmVyID49IDIgJiYgbnVtYmVyIDw9IDRcbiAgICAgICAgICAgID8gd29yZEtleVsxXVxuICAgICAgICAgICAgOiB3b3JkS2V5WzJdO1xuICAgIH0sXG4gICAgdHJhbnNsYXRlOiBmdW5jdGlvbiAobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXkpIHtcbiAgICAgICAgdmFyIHdvcmRLZXkgPSB0cmFuc2xhdG9yLndvcmRzW2tleV07XG4gICAgICAgIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IHdvcmRLZXlbMF0gOiB3b3JkS2V5WzFdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBudW1iZXIgK1xuICAgICAgICAgICAgICAgICcgJyArXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRvci5jb3JyZWN0R3JhbW1hdGljYWxDYXNlKG51bWJlciwgd29yZEtleSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnc3InLCB7XG4gICAgbW9udGhzOiAnamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuX2p1bF9hdmd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnamFuLl9mZWIuX21hci5fYXByLl9tYWpfanVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6ICduZWRlbGphX3BvbmVkZWxqYWtfdXRvcmFrX3NyZWRhX8SNZXR2cnRha19wZXRha19zdWJvdGEnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICduZWQuX3Bvbi5fdXRvLl9zcmUuX8SNZXQuX3BldC5fc3ViLicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ25lX3BvX3V0X3NyX8SNZV9wZV9zdScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgIEw6ICdELiBNLiBZWVlZLicsXG4gICAgICAgIExMOiAnRC4gTU1NTSBZWVlZLicsXG4gICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWS4gSDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkuIEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tkYW5hcyB1XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbc3V0cmEgdV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLmRheSgpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBbbmVkZWxqdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzcmVkdV0gW3VdIExUJztcbiAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnW3VdIFtzdWJvdHVdIFt1XSBMVCc7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1t1XSBkZGRkIFt1XSBMVCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGxhc3REYXk6ICdbanXEjWUgdV0gTFQnLFxuICAgICAgICBsYXN0V2VlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGxhc3RXZWVrRGF5cyA9IFtcbiAgICAgICAgICAgICAgICAnW3Byb8WhbGVdIFtuZWRlbGplXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFtwb25lZGVsamthXSBbdV0gTFQnLFxuICAgICAgICAgICAgICAgICdbcHJvxaFsb2ddIFt1dG9ya2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbc3JlZGVdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgJ1twcm/FoWxvZ10gW8SNZXR2cnRrYV0gW3VdIExUJyxcbiAgICAgICAgICAgICAgICAnW3Byb8WhbG9nXSBbcGV0a2FdIFt1XSBMVCcsXG4gICAgICAgICAgICAgICAgJ1twcm/FoWxlXSBbc3Vib3RlXSBbdV0gTFQnLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHJldHVybiBsYXN0V2Vla0RheXNbdGhpcy5kYXkoKV07XG4gICAgICAgIH0sXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnemEgJXMnLFxuICAgICAgICBwYXN0OiAncHJlICVzJyxcbiAgICAgICAgczogJ25la29saWtvIHNla3VuZGknLFxuICAgICAgICBzczogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIG06IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICBtbTogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIGg6IHRyYW5zbGF0b3IudHJhbnNsYXRlLFxuICAgICAgICBoaDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIGQ6ICdkYW4nLFxuICAgICAgICBkZDogdHJhbnNsYXRvci50cmFuc2xhdGUsXG4gICAgICAgIE06ICdtZXNlYycsXG4gICAgICAgIE1NOiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICAgICAgeTogJ2dvZGludScsXG4gICAgICAgIHl5OiB0cmFuc2xhdG9yLnRyYW5zbGF0ZSxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgb3JkaW5hbDogJyVkLicsXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogc2lTd2F0aSBbc3NdXG4vLyEgYXV0aG9yIDogTmljb2xhaSBEYXZpZXM8bWFpbEBuaWNvbGFpLmlvPiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9uaWNvbGFpZGF2aWVzXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnc3MnLCB7XG4gICAgbW9udGhzOiBcIkJoaW1iaWR2d2FuZV9JbmRsb3ZhbmFfSW5kbG92J2xlbmtodWx1X01hYmFzYV9Jbmtod2VraHdldGlfSW5obGFiYV9LaG9sd2FuZV9JbmdjaV9JbnlvbmlfSW1waGFsYV9Md2V0aV9JbmdvbmdvbmlcIi5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0JoaV9JbmFfSW51X01hYl9JbmtfSW5oX0tob19JZ2NfSW55X0ltcF9Md2VfSWdvJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnTGlzb250Zm9fVW1zb21idWx1a29fTGVzaWJpbGlfTGVzaXRzYXRmdV9MZXNpbmVfTGVzaWhsYW51X1VtZ2NpYmVsbycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ0xpc19VbWJfTHNiX0xlc19Mc2lfTHNoX1VtZycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ0xpX1VzX0xiX0x0X0xzX0xoX1VnJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEnLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tOYW11aGxhIG5nYV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW0t1c2FzYSBuZ2FdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtuZ2FdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tJdG9sbyBuZ2FdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFtsZWxpcGhlbGlsZV0gW25nYV0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ25nYSAlcycsXG4gICAgICAgIHBhc3Q6ICd3ZW50ZWthIG5nYSAlcycsXG4gICAgICAgIHM6ICdlbWl6dXp3YW5hIGxvbWNhbmUnLFxuICAgICAgICBzczogJyVkIG16dXp3YW5hJyxcbiAgICAgICAgbTogJ3VtenV6dScsXG4gICAgICAgIG1tOiAnJWQgZW1penV6dScsXG4gICAgICAgIGg6ICdsaWhvcmEnLFxuICAgICAgICBoaDogJyVkIGVtYWhvcmEnLFxuICAgICAgICBkOiAnbGlsYW5nYScsXG4gICAgICAgIGRkOiAnJWQgZW1hbGFuZ2EnLFxuICAgICAgICBNOiAnaW55YW5nYScsXG4gICAgICAgIE1NOiAnJWQgdGlueWFuZ2EnLFxuICAgICAgICB5OiAndW1ueWFrYScsXG4gICAgICAgIHl5OiAnJWQgaW1pbnlha2EnLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL2VrdXNlbml8ZW1pbml8ZW50c2FtYmFtYXxlYnVzdWt1LyxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA8IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2VrdXNlbmknO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTUpIHtcbiAgICAgICAgICAgIHJldHVybiAnZW1pbmknO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXJzIDwgMTkpIHtcbiAgICAgICAgICAgIHJldHVybiAnZW50c2FtYmFtYSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ2VidXN1a3UnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ2VrdXNlbmknKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ2VtaW5pJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAnZW50c2FtYmFtYScgfHwgbWVyaWRpZW0gPT09ICdlYnVzdWt1Jykge1xuICAgICAgICAgICAgaWYgKGhvdXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgb3JkaW5hbDogJyVkJyxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTd2VkaXNoIFtzdl1cbi8vISBhdXRob3IgOiBKZW5zIEFsbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91bG11c1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3N2Jywge1xuICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICdzw7ZuZGFnX23DpW5kYWdfdGlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7ZyZGFnJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdzw7ZuX23DpW5fdGlzX29uc190b3JfZnJlX2zDtnInLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdzw7ZfbcOlX3RpX29uX3RvX2ZyX2zDticuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW0lkYWddIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tJbW9yZ29uXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbSWfDpXJdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdbUMOlXSBkZGRkIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbSV0gZGRkZFtzXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICBwYXN0OiAnZsO2ciAlcyBzZWRhbicsXG4gICAgICAgIHM6ICduw6VncmEgc2VrdW5kZXInLFxuICAgICAgICBzczogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgbTogJ2VuIG1pbnV0JyxcbiAgICAgICAgbW06ICclZCBtaW51dGVyJyxcbiAgICAgICAgaDogJ2VuIHRpbW1lJyxcbiAgICAgICAgaGg6ICclZCB0aW1tYXInLFxuICAgICAgICBkOiAnZW4gZGFnJyxcbiAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgIE06ICdlbiBtw6VuYWQnLFxuICAgICAgICBNTTogJyVkIG3DpW5hZGVyJyxcbiAgICAgICAgeTogJ2V0dCDDpXInLFxuICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oXFw6ZXxcXDphKS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICc6ZSdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgPyAnOmEnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICA/ICc6ZSdcbiAgICAgICAgICAgICAgICAgICAgOiAnOmUnO1xuICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3dhaGlsaSBbc3ddXG4vLyEgYXV0aG9yIDogRmFoYWQgS2Fzc2ltIDogaHR0cHM6Ly9naXRodWIuY29tL2ZhZHNlbFxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3N3Jywge1xuICAgIG1vbnRoczogJ0phbnVhcmlfRmVicnVhcmlfTWFjaGlfQXByaWxpX01laV9KdW5pX0p1bGFpX0Fnb3N0aV9TZXB0ZW1iYV9Pa3RvYmFfTm92ZW1iYV9EZXNlbWJhJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9BZ29fU2VwX09rdF9Ob3ZfRGVzJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnSnVtYXBpbGlfSnVtYXRhdHVfSnVtYW5uZV9KdW1hdGFub19BbGhhbWlzaV9JanVtYWFfSnVtYW1vc2knLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdKcGxfSnRhdF9Kbm5lX0p0YW5fQWxoX0lqbV9KbW9zJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnSjJfSjNfSjRfSjVfQWxfSWpfSjEnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnaGg6bW0gQScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tsZW8gc2FhXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdba2VzaG8gc2FhXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnW3dpa2kgaWpheW9dIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tqYW5hXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW3dpa2kgaWxpeW9waXRhXSBkZGRkIFtzYWF0XSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXMgYmFhZGF5ZScsXG4gICAgICAgIHBhc3Q6ICd0b2tlYSAlcycsXG4gICAgICAgIHM6ICdoaXZpIHB1bmRlJyxcbiAgICAgICAgc3M6ICdzZWt1bmRlICVkJyxcbiAgICAgICAgbTogJ2Rha2lrYSBtb2phJyxcbiAgICAgICAgbW06ICdkYWtpa2EgJWQnLFxuICAgICAgICBoOiAnc2FhIGxpbW9qYScsXG4gICAgICAgIGhoOiAnbWFzYWEgJWQnLFxuICAgICAgICBkOiAnc2lrdSBtb2phJyxcbiAgICAgICAgZGQ6ICdzaWt1ICVkJyxcbiAgICAgICAgTTogJ213ZXppIG1tb2phJyxcbiAgICAgICAgTU06ICdtaWV6aSAlZCcsXG4gICAgICAgIHk6ICdtd2FrYSBtbW9qYScsXG4gICAgICAgIHl5OiAnbWlha2EgJWQnLFxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGFtaWwgW3RhXVxuLy8hIGF1dGhvciA6IEFyanVua3VtYXIgS3Jpc2huYW1vb3J0aHkgOiBodHRwczovL2dpdGh1Yi5jb20vdGsxMjA0MDRcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgc3ltYm9sTWFwID0ge1xuICAgICAgICAxOiAn4K+nJyxcbiAgICAgICAgMjogJ+CvqCcsXG4gICAgICAgIDM6ICfgr6knLFxuICAgICAgICA0OiAn4K+qJyxcbiAgICAgICAgNTogJ+CvqycsXG4gICAgICAgIDY6ICfgr6wnLFxuICAgICAgICA3OiAn4K+tJyxcbiAgICAgICAgODogJ+CvricsXG4gICAgICAgIDk6ICfgr68nLFxuICAgICAgICAwOiAn4K+mJyxcbiAgICB9LFxuICAgIG51bWJlck1hcCA9IHtcbiAgICAgICAgJ+Cvpyc6ICcxJyxcbiAgICAgICAgJ+CvqCc6ICcyJyxcbiAgICAgICAgJ+CvqSc6ICczJyxcbiAgICAgICAgJ+Cvqic6ICc0JyxcbiAgICAgICAgJ+Cvqyc6ICc1JyxcbiAgICAgICAgJ+CvrCc6ICc2JyxcbiAgICAgICAgJ+CvrSc6ICc3JyxcbiAgICAgICAgJ+Cvric6ICc4JyxcbiAgICAgICAgJ+Cvryc6ICc5JyxcbiAgICAgICAgJ+Cvpic6ICcwJyxcbiAgICB9O1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCd0YScsIHtcbiAgICBtb250aHM6ICfgrpzgrqngrrXgrrDgrr9f4K6q4K6/4K6q4K+N4K6w4K614K6w4K6/X+CuruCuvuCusOCvjeCumuCvjV/gro/grqrgr43grrDgrrLgr41f4K6u4K+HX+CunOCvguCuqeCvjV/grpzgr4LgrrLgr4hf4K6G4K6V4K644K+N4K6f4K+NX+CumuCvhuCuquCvjeCun+CvhuCuruCvjeCuquCusOCvjV/groXgrpXgr43grp/gr4fgrr7grqrgrrDgr41f4K6o4K614K6u4K+N4K6q4K6w4K+NX+Cun+Cuv+CumuCuruCvjeCuquCusOCvjScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICfgrpzgrqngrrXgrrDgrr9f4K6q4K6/4K6q4K+N4K6w4K614K6w4K6/X+CuruCuvuCusOCvjeCumuCvjV/gro/grqrgr43grrDgrrLgr41f4K6u4K+HX+CunOCvguCuqeCvjV/grpzgr4LgrrLgr4hf4K6G4K6V4K644K+N4K6f4K+NX+CumuCvhuCuquCvjeCun+CvhuCuruCvjeCuquCusOCvjV/groXgrpXgr43grp/gr4fgrr7grqrgrrDgr41f4K6o4K614K6u4K+N4K6q4K6w4K+NX+Cun+Cuv+CumuCuruCvjeCuquCusOCvjScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXM6ICfgrp7grr7grq/grr/grrHgr43grrHgr4HgrpXgr43grpXgrr/grrTgrq7gr4hf4K6k4K6/4K6Z4K+N4K6V4K6f4K+N4K6V4K6/4K604K6u4K+IX+CumuCvhuCuteCvjeCuteCuvuCur+CvjeCuleCuv+CutOCuruCviF/grqrgr4HgrqTgrqngr43grpXgrr/grrTgrq7gr4hf4K614K6/4K6v4K6+4K604K6V4K+N4K6V4K6/4K604K6u4K+IX+CuteCvhuCus+CvjeCus+Cuv+CuleCvjeCuleCuv+CutOCuruCviF/grprgrqngrr/grpXgr43grpXgrr/grrTgrq7gr4gnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfgrp7grr7grq/grr/grrHgr4Ff4K6k4K6/4K6Z4K+N4K6V4K6z4K+NX+CumuCvhuCuteCvjeCuteCuvuCur+CvjV/grqrgr4HgrqTgrqngr41f4K614K6/4K6v4K6+4K604K6p4K+NX+CuteCvhuCus+CvjeCus+Cuv1/grprgrqngrr8nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzTWluOiAn4K6e4K6+X+CupOCuv1/grprgr4Zf4K6q4K+BX+CuteCuv1/grrXgr4Zf4K6aJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gWVlZWSwgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vgrofgrqngr43grrHgr4FdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vgrqjgrr7grrPgr4hdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkLCBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4K6o4K+H4K6x4K+N4K6x4K+BXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW+CuleCun+CuqOCvjeCupCDgrrXgrr7grrDgrq7gr41dIGRkZGQsIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICclcyDgrofgrrLgr40nLFxuICAgICAgICBwYXN0OiAnJXMg4K6u4K+B4K6p4K+NJyxcbiAgICAgICAgczogJ+CukuCusOCvgSDgrprgrr/grrIg4K614K6/4K6o4K6+4K6f4K6/4K6V4K6z4K+NJyxcbiAgICAgICAgc3M6ICclZCDgrrXgrr/grqjgrr7grp/grr/grpXgrrPgr40nLFxuICAgICAgICBtOiAn4K6S4K6w4K+BIOCuqOCuv+CuruCuv+Cun+CuruCvjScsXG4gICAgICAgIG1tOiAnJWQg4K6o4K6/4K6u4K6/4K6f4K6Z4K+N4K6V4K6z4K+NJyxcbiAgICAgICAgaDogJ+CukuCusOCvgSDgrq7grqPgrr8g4K6o4K+H4K6w4K6u4K+NJyxcbiAgICAgICAgaGg6ICclZCDgrq7grqPgrr8g4K6o4K+H4K6w4K6u4K+NJyxcbiAgICAgICAgZDogJ+CukuCusOCvgSDgrqjgrr7grrPgr40nLFxuICAgICAgICBkZDogJyVkIOCuqOCuvuCun+CvjeCuleCus+CvjScsXG4gICAgICAgIE06ICfgrpLgrrDgr4Eg4K6u4K6+4K6k4K6u4K+NJyxcbiAgICAgICAgTU06ICclZCDgrq7grr7grqTgrpngr43grpXgrrPgr40nLFxuICAgICAgICB5OiAn4K6S4K6w4K+BIOCuteCusOCvgeCun+CuruCvjScsXG4gICAgICAgIHl5OiAnJWQg4K6G4K6j4K+N4K6f4K+B4K6V4K6z4K+NJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfeCuteCupOCvgS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+CuteCupOCvgSc7XG4gICAgfSxcbiAgICBwcmVwYXJzZTogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1vgr6fgr6jgr6ngr6rgr6vgr6zgr63gr67gr6/gr6ZdL2csIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlck1hcFttYXRjaF07XG4gICAgICAgIH0pO1xuICAgIH0sXG4gICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1xcZC9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHJldHVybiBzeW1ib2xNYXBbbWF0Y2hdO1xuICAgICAgICB9KTtcbiAgICB9LFxuICAgIC8vIHJlZmVyIGh0dHA6Ly90YS53aWtpcGVkaWEub3JnL3MvMWVyMVxuICAgIG1lcmlkaWVtUGFyc2U6IC/grq/grr7grq7grq7gr4184K614K+I4K6V4K6x4K+IfOCuleCuvuCusuCviHzgrqjgrqPgr43grqrgrpXgrrLgr4184K6O4K6x4K+N4K6q4K6+4K6f4K+BfOCuruCuvuCusuCviC8sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPCAyKSB7XG4gICAgICAgICAgICByZXR1cm4gJyDgrq/grr7grq7grq7gr40nO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCA2KSB7XG4gICAgICAgICAgICByZXR1cm4gJyDgrrXgr4jgrpXgrrHgr4gnOyAvLyDgrrXgr4jgrpXgrrHgr4hcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgIHJldHVybiAnIOCuleCuvuCusuCviCc7IC8vIOCuleCuvuCusuCviFxuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNCkge1xuICAgICAgICAgICAgcmV0dXJuICcg4K6o4K6j4K+N4K6q4K6V4K6y4K+NJzsgLy8g4K6o4K6j4K+N4K6q4K6V4K6y4K+NXG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDE4KSB7XG4gICAgICAgICAgICByZXR1cm4gJyDgro7grrHgr43grqrgrr7grp/gr4EnOyAvLyDgro7grrHgr43grqrgrr7grp/gr4FcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjIpIHtcbiAgICAgICAgICAgIHJldHVybiAnIOCuruCuvuCusuCviCc7IC8vIOCuruCuvuCusuCviFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcg4K6v4K6+4K6u4K6u4K+NJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgrq/grr7grq7grq7gr40nKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA8IDIgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4K614K+I4K6V4K6x4K+IJyB8fCBtZXJpZGllbSA9PT0gJ+CuleCuvuCusuCviCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4K6o4K6j4K+N4K6q4K6V4K6y4K+NJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTAgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGVsdWd1IFt0ZV1cbi8vISBhdXRob3IgOiBLcmlzaG5hIENoYWl0YW55YSBUaG90YSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9rY3Rob3RhXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgndGUnLCB7XG4gICAgbW9udGhzOiAn4LCc4LCo4LC14LCw4LC/X+Cwq+Cwv+CwrOCxjeCwsOCwteCwsOCwv1/gsK7gsL7gsLDgsY3gsJrgsL9f4LCP4LCq4LGN4LCw4LC/4LCy4LGNX+CwruCxh1/gsJzgsYLgsKjgsY1f4LCc4LGB4LCy4LGIX+CwhuCwl+CwuOCxjeCwn+CxgV/gsLjgsYbgsKrgsY3gsJ/gsYbgsILgsKzgsLDgsY1f4LCF4LCV4LGN4LCf4LGL4LCs4LCw4LGNX+CwqOCwteCwguCwrOCwsOCxjV/gsKHgsL/gsLjgsYbgsILgsKzgsLDgsY0nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAn4LCc4LCoLl/gsKvgsL/gsKzgsY3gsLAuX+CwruCwvuCwsOCxjeCwmuCwv1/gsI/gsKrgsY3gsLDgsL8uX+CwruCxh1/gsJzgsYLgsKjgsY1f4LCc4LGB4LCy4LGIX+CwhuCwly5f4LC44LGG4LCq4LGNLl/gsIXgsJXgsY3gsJ/gsYsuX+CwqOCwtS5f4LCh4LC/4LC44LGGLicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogJ+CwhuCwpuCwv+CwteCwvuCwsOCwgl/gsLjgsYvgsK7gsLXgsL7gsLDgsIJf4LCu4LCC4LCX4LCz4LC14LC+4LCw4LCCX+CwrOCxgeCwp+CwteCwvuCwsOCwgl/gsJfgsYHgsLDgsYHgsLXgsL7gsLDgsIJf4LC24LGB4LCV4LGN4LCw4LC14LC+4LCw4LCCX+CwtuCwqOCwv+CwteCwvuCwsOCwgicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ+CwhuCwpuCwv1/gsLjgsYvgsK5f4LCu4LCC4LCX4LCzX+CwrOCxgeCwp1/gsJfgsYHgsLDgsYFf4LC24LGB4LCV4LGN4LCwX+CwtuCwqOCwvycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ+Cwhl/gsLjgsYtf4LCu4LCCX+CwrOCxgV/gsJfgsYFf4LC24LGBX+Cwticuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0EgaDptbScsXG4gICAgICAgIExUUzogJ0EgaDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZLCBBIGg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW+CwqOCxh+CwoeCxgV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW+CwsOCxh+CwquCxgV0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQsIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vgsKjgsL/gsKjgsY3gsKhdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdb4LCX4LCkXSBkZGRkLCBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXMg4LCy4LGLJyxcbiAgICAgICAgcGFzdDogJyVzIOCwleCxjeCwsOCwv+CwpOCwgicsXG4gICAgICAgIHM6ICfgsJXgsYrgsKjgsY3gsKjgsL8g4LCV4LGN4LC34LCj4LC+4LCy4LGBJyxcbiAgICAgICAgc3M6ICclZCDgsLjgsYbgsJXgsKjgsY3gsLLgsYEnLFxuICAgICAgICBtOiAn4LCS4LCVIOCwqOCwv+CwruCwv+Cwt+CwgicsXG4gICAgICAgIG1tOiAnJWQg4LCo4LC/4LCu4LC/4LC34LC+4LCy4LGBJyxcbiAgICAgICAgaDogJ+CwkuCwlSDgsJfgsILgsJ8nLFxuICAgICAgICBoaDogJyVkIOCwl+CwguCwn+CwsuCxgScsXG4gICAgICAgIGQ6ICfgsJLgsJUg4LCw4LGL4LCc4LGBJyxcbiAgICAgICAgZGQ6ICclZCDgsLDgsYvgsJzgsYHgsLLgsYEnLFxuICAgICAgICBNOiAn4LCS4LCVIOCwqOCxhuCwsicsXG4gICAgICAgIE1NOiAnJWQg4LCo4LGG4LCy4LCy4LGBJyxcbiAgICAgICAgeTogJ+CwkuCwlSDgsLjgsILgsLXgsKTgsY3gsLjgsLDgsIInLFxuICAgICAgICB5eTogJyVkIOCwuOCwguCwteCwpOCxjeCwuOCwsOCwvuCwsuCxgScsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn3gsLUvLFxuICAgIG9yZGluYWw6ICclZOCwtScsXG4gICAgbWVyaWRpZW1QYXJzZTogL+CwsOCwvuCwpOCxjeCwsOCwv3zgsIngsKbgsK/gsIJ84LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCfOCwuOCwvuCwr+CwguCwpOCxjeCwsOCwgi8sXG4gICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVyaWRpZW0gPT09ICfgsLDgsL7gsKTgsY3gsLDgsL8nKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA8IDQgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn4LCJ4LCm4LCv4LCCJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsK7gsKfgsY3gsK/gsL7gsLngsY3gsKjgsIInKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMCA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfgsLjgsL7gsK/gsILgsKTgsY3gsLDgsIInKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91ciA8IDQpIHtcbiAgICAgICAgICAgIHJldHVybiAn4LCw4LC+4LCk4LGN4LCw4LC/JztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTApIHtcbiAgICAgICAgICAgIHJldHVybiAn4LCJ4LCm4LCv4LCCJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTcpIHtcbiAgICAgICAgICAgIHJldHVybiAn4LCu4LCn4LGN4LCv4LC+4LC54LGN4LCo4LCCJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMjApIHtcbiAgICAgICAgICAgIHJldHVybiAn4LC44LC+4LCv4LCC4LCk4LGN4LCw4LCCJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn4LCw4LC+4LCk4LGN4LCw4LC/JztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGV0dW4gRGlsaSAoRWFzdCBUaW1vcikgW3RldF1cbi8vISBhdXRob3IgOiBKb3NodWEgQnJvb2tzIDogaHR0cHM6Ly9naXRodWIuY29tL2pvc2hicm9va3Ncbi8vISBhdXRob3IgOiBPbm9yaW8gRGUgSi4gQWZvbnNvIDogaHR0cHM6Ly9naXRodWIuY29tL21hcm9ib1xuLy8hIGF1dGhvciA6IFNvbmlhIFNpbW9lcyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zb25pYXNpbW9lc1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3RldCcsIHtcbiAgICBtb250aHM6ICdKYW5laXJ1X0ZldmVyZWlydV9NYXJzdV9BYnJpbF9NYWl1X0p1w7F1X0p1bGx1X0FndXN0dV9TZXRlbWJydV9PdXR1YnJ1X05vdmVtYnJ1X0RlemVtYnJ1Jy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ0phbl9GZXZfTWFyX0Ficl9NYWlfSnVuX0p1bF9BZ29fU2V0X091dF9Ob3ZfRGV6Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnRG9taW5ndV9TZWd1bmRhX1RlcnNhX0t1YXJ0YV9LaW50YV9TZXN0YV9TYWJhZHUnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ0RvbV9TZWdfVGVyc19LdWFfS2ludF9TZXN0X1NhYicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ0RvX1NlZ19UZV9LdV9LaV9TZXNfU2EnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tPaGluIGloYV0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW0FiYW4gaWhhXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbaWhhXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbSG9yaXNlaWsgaWhhXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnZGRkZCBbc2VtYW5hIGtvdHVrXSBbaWhhXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnaWhhICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGxpdWJhJyxcbiAgICAgICAgczogJ3NlZ3VuZHUgYmFsdW4nLFxuICAgICAgICBzczogJ3NlZ3VuZHUgJWQnLFxuICAgICAgICBtOiAnbWludXR1IGlkYScsXG4gICAgICAgIG1tOiAnbWludXR1ICVkJyxcbiAgICAgICAgaDogJ29yYXMgaWRhJyxcbiAgICAgICAgaGg6ICdvcmFzICVkJyxcbiAgICAgICAgZDogJ2xvcm9uIGlkYScsXG4gICAgICAgIGRkOiAnbG9yb24gJWQnLFxuICAgICAgICBNOiAnZnVsYW4gaWRhJyxcbiAgICAgICAgTU06ICdmdWxhbiAlZCcsXG4gICAgICAgIHk6ICd0aW5hbiBpZGEnLFxuICAgICAgICB5eTogJ3RpbmFuICVkJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShzdHxuZHxyZHx0aCkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhamlrIFt0Z11cbi8vISBhdXRob3IgOiBPcmlmIE4uIEpyLiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9vcmlmLWpyXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIHN1ZmZpeGVzID0ge1xuICAgIDA6ICct0YPQvCcsXG4gICAgMTogJy3Rg9C8JyxcbiAgICAyOiAnLdGO0LwnLFxuICAgIDM6ICct0Y7QvCcsXG4gICAgNDogJy3Rg9C8JyxcbiAgICA1OiAnLdGD0LwnLFxuICAgIDY6ICct0YPQvCcsXG4gICAgNzogJy3Rg9C8JyxcbiAgICA4OiAnLdGD0LwnLFxuICAgIDk6ICct0YPQvCcsXG4gICAgMTA6ICct0YPQvCcsXG4gICAgMTI6ICct0YPQvCcsXG4gICAgMTM6ICct0YPQvCcsXG4gICAgMjA6ICct0YPQvCcsXG4gICAgMzA6ICct0Y7QvCcsXG4gICAgNDA6ICct0YPQvCcsXG4gICAgNTA6ICct0YPQvCcsXG4gICAgNjA6ICct0YPQvCcsXG4gICAgNzA6ICct0YPQvCcsXG4gICAgODA6ICct0YPQvCcsXG4gICAgOTA6ICct0YPQvCcsXG4gICAgMTAwOiAnLdGD0LwnLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgndGcnLCB7XG4gICAgbW9udGhzOiB7XG4gICAgICAgIGZvcm1hdDogJ9GP0L3QstCw0YDQuF/RhNC10LLRgNCw0LvQuF/QvNCw0YDRgtC4X9Cw0L/RgNC10LvQuF/QvNCw0LnQuF/QuNGO0L3QuF/QuNGO0LvQuF/QsNCy0LPRg9GB0YLQuF/RgdC10L3RgtGP0LHRgNC4X9C+0LrRgtGP0LHRgNC4X9C90L7Rj9Cx0YDQuF/QtNC10LrQsNCx0YDQuCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgc3RhbmRhbG9uZTogJ9GP0L3QstCw0YBf0YTQtdCy0YDQsNC7X9C80LDRgNGCX9Cw0L/RgNC10Ltf0LzQsNC5X9C40Y7QvV/QuNGO0Ltf0LDQstCz0YPRgdGCX9GB0LXQvdGC0Y/QsdGAX9C+0LrRgtGP0LHRgF/QvdC+0Y/QsdGAX9C00LXQutCw0LHRgCcuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICB9LFxuICAgIG1vbnRoc1Nob3J0OiAn0Y/QvdCyX9GE0LXQsl/QvNCw0YBf0LDQv9GAX9C80LDQuV/QuNGO0L1f0LjRjtC7X9Cw0LLQs1/RgdC10L1f0L7QutGCX9C90L7Rj1/QtNC10LonLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICfRj9C60YjQsNC90LHQtV/QtNGD0YjQsNC90LHQtV/RgdC10YjQsNC90LHQtV/Rh9C+0YDRiNCw0L3QsdC1X9C/0LDQvdK30YjQsNC90LHQtV/St9GD0LzRitCwX9GI0LDQvdCx0LUnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfRj9GI0LFf0LTRiNCxX9GB0YjQsV/Rh9GI0LFf0L/RiNCxX9K30YPQvF/RiNC90LEnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfRj9GIX9C00Yhf0YHRiF/Rh9GIX9C/0Yhf0rfQvF/RiNCxJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdb0JjQvNGA06/QtyDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb0KTQsNGA0LTQviDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb0JTQuNGA06/QtyDRgdC+0LDRgtC4XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZFvQuF0gW9Kz0LDRhNGC0LDQuCDQvtGP0L3QtNCwINGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkW9C4XSBb0rPQsNGE0YLQsNC4INCz0YPQt9Cw0YjRgtCwINGB0L7QsNGC0LhdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfQsdCw0YrQtNC4ICVzJyxcbiAgICAgICAgcGFzdDogJyVzINC/0LXRiCcsXG4gICAgICAgIHM6ICfRj9C60YfQsNC90LQg0YHQvtC90LjRjycsXG4gICAgICAgIG06ICfRj9C6INC00LDSm9C40pvQsCcsXG4gICAgICAgIG1tOiAnJWQg0LTQsNKb0LjSm9CwJyxcbiAgICAgICAgaDogJ9GP0Log0YHQvtCw0YInLFxuICAgICAgICBoaDogJyVkINGB0L7QsNGCJyxcbiAgICAgICAgZDogJ9GP0Log0YDTr9C3JyxcbiAgICAgICAgZGQ6ICclZCDRgNOv0LcnLFxuICAgICAgICBNOiAn0Y/QuiDQvNC+0rMnLFxuICAgICAgICBNTTogJyVkINC80L7SsycsXG4gICAgICAgIHk6ICfRj9C6INGB0L7QuycsXG4gICAgICAgIHl5OiAnJWQg0YHQvtC7JyxcbiAgICB9LFxuICAgIG1lcmlkaWVtUGFyc2U6IC/RiNCw0LF80YHRg9Cx0rN80YDTr9C3fNCx0LXQs9C+0rMvLFxuICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn0YjQsNCxJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPCA0ID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ9GB0YPQsdKzJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfRgNOv0LcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfQsdC10LPQvtKzJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPCA0KSB7XG4gICAgICAgICAgICByZXR1cm4gJ9GI0LDQsSc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gJ9GB0YPQsdKzJztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTYpIHtcbiAgICAgICAgICAgIHJldHVybiAn0YDTr9C3JztcbiAgICAgICAgfSBlbHNlIGlmIChob3VyIDwgMTkpIHtcbiAgICAgICAgICAgIHJldHVybiAn0LHQtdCz0L7Ssyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ9GI0LDQsSc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS0o0YPQvHzRjtC8KS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgYiA9IG51bWJlciA+PSAxMDAgPyAxMDAgOiBudWxsO1xuICAgICAgICByZXR1cm4gbnVtYmVyICsgKHN1ZmZpeGVzW251bWJlcl0gfHwgc3VmZml4ZXNbYV0gfHwgc3VmZml4ZXNbYl0pO1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDF0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVGhhaSBbdGhdXG4vLyEgYXV0aG9yIDogS3JpZHNhZGEgVGhhbmFidWxwb25nIDogaHR0cHM6Ly9naXRodWIuY29tL3Npcm5cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCd0aCcsIHtcbiAgICBtb250aHM6ICfguKHguIHguKPguLLguITguKFf4LiB4Li44Lih4Lig4Liy4Lie4Lix4LiZ4LiY4LmMX+C4oeC4teC4meC4suC4hOC4oV/guYDguKHguKnguLLguKLguJlf4Lie4Lik4Lip4Lig4Liy4LiE4LihX+C4oeC4tOC4luC4uOC4meC4suC4ouC4mV/guIHguKPguIHguI7guLLguITguKFf4Liq4Li04LiH4Lir4Liy4LiE4LihX+C4geC4seC4meC4ouC4suC4ouC4mV/guJXguLjguKXguLLguITguKFf4Lie4Lik4Lio4LiI4Li04LiB4Liy4Lii4LiZX+C4mOC4seC4meC4p+C4suC4hOC4oScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICfguKEu4LiELl/guIEu4LieLl/guKHguLUu4LiELl/guYDguKEu4LiiLl/guJ4u4LiELl/guKHguLQu4LiiLl/guIEu4LiELl/guKou4LiELl/guIEu4LiiLl/guJUu4LiELl/guJ4u4LiiLl/guJgu4LiELicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogJ+C4reC4suC4l+C4tOC4leC4ouC5jF/guIjguLHguJnguJfguKPguYxf4Lit4Lix4LiH4LiE4Liy4LijX+C4nuC4uOC4mF/guJ7guKTguKvguLHguKrguJrguJTguLVf4Lio4Li44LiB4Lij4LmMX+C5gOC4quC4suC4o+C5jCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn4Lit4Liy4LiX4Li04LiV4Lii4LmMX+C4iOC4seC4meC4l+C4o+C5jF/guK3guLHguIfguITguLLguKNf4Lie4Li44LiYX+C4nuC4pOC4q+C4seC4ql/guKjguLjguIHguKPguYxf4LmA4Liq4Liy4Lij4LmMJy5zcGxpdCgnXycpLCAvLyB5ZXMsIHRocmVlIGNoYXJhY3RlcnMgZGlmZmVyZW5jZVxuICAgIHdlZWtkYXlzTWluOiAn4Lit4LiyLl/guIguX+C4rS5f4LieLl/guJ7guKQuX+C4qC5f4LiqLicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdIOm1tJyxcbiAgICAgICAgTFRTOiAnSDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIOC5gOC4p+C4peC4siBIOm1tJyxcbiAgICAgICAgTExMTDogJ+C4p+C4seC4mWRkZGTguJfguLXguYggRCBNTU1NIFlZWVkg4LmA4Lin4Lil4LiyIEg6bW0nLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL+C4geC5iOC4reC4meC5gOC4l+C4teC5iOC4ouC4h3zguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcvLFxuICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09ICfguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcnO1xuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXIgPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuICfguIHguYjguK3guJnguYDguJfguLXguYjguKLguIcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfguKvguKXguLHguIfguYDguJfguLXguYjguKLguIcnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW+C4p+C4seC4meC4meC4teC5iSDguYDguKfguKXguLJdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vguJ7guKPguLjguYjguIfguJnguLXguYkg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZFvguKvguJnguYnguLIg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4LmA4Lih4Li34LmI4Lit4Lin4Liy4LiZ4LiZ4Li14LmJIOC5gOC4p+C4peC4sl0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1vguKfguLHguJldZGRkZFvguJfguLXguYjguYHguKXguYnguKcg4LmA4Lin4Lil4LiyXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAn4Lit4Li14LiBICVzJyxcbiAgICAgICAgcGFzdDogJyVz4LiX4Li14LmI4LmB4Lil4LmJ4LinJyxcbiAgICAgICAgczogJ+C5hOC4oeC5iOC4geC4teC5iOC4p+C4tOC4meC4suC4l+C4tScsXG4gICAgICAgIHNzOiAnJWQg4Lin4Li04LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgbTogJzEg4LiZ4Liy4LiX4Li1JyxcbiAgICAgICAgbW06ICclZCDguJnguLLguJfguLUnLFxuICAgICAgICBoOiAnMSDguIrguLHguYjguKfguYLguKHguIcnLFxuICAgICAgICBoaDogJyVkIOC4iuC4seC5iOC4p+C5guC4oeC4hycsXG4gICAgICAgIGQ6ICcxIOC4p+C4seC4mScsXG4gICAgICAgIGRkOiAnJWQg4Lin4Lix4LiZJyxcbiAgICAgICAgdzogJzEg4Liq4Lix4Lib4LiU4Liy4Lir4LmMJyxcbiAgICAgICAgd3c6ICclZCDguKrguLHguJvguJTguLLguKvguYwnLFxuICAgICAgICBNOiAnMSDguYDguJTguLfguK3guJknLFxuICAgICAgICBNTTogJyVkIOC5gOC4lOC4t+C4reC4mScsXG4gICAgICAgIHk6ICcxIOC4m+C4tScsXG4gICAgICAgIHl5OiAnJWQg4Lib4Li1JyxcbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVHVya21lbiBbdGtdXG4vLyEgYXV0aG9yIDogQXRhbXlyYXQgQWJkeXJhaG1hbm92IDogaHR0cHM6Ly9naXRodWIuY29tL2F0YW15cmF0YWJkeVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBzdWZmaXhlcyA9IHtcbiAgICAxOiBcIidpbmppXCIsXG4gICAgNTogXCInaW5qaVwiLFxuICAgIDg6IFwiJ2luamlcIixcbiAgICA3MDogXCInaW5qaVwiLFxuICAgIDgwOiBcIidpbmppXCIsXG4gICAgMjogXCInbmppXCIsXG4gICAgNzogXCInbmppXCIsXG4gICAgMjA6IFwiJ25qaVwiLFxuICAgIDUwOiBcIiduamlcIixcbiAgICAzOiBcIifDvG5qaVwiLFxuICAgIDQ6IFwiJ8O8bmppXCIsXG4gICAgMTAwOiBcIifDvG5qaVwiLFxuICAgIDY6IFwiJ25qeVwiLFxuICAgIDk6IFwiJ3VuanlcIixcbiAgICAxMDogXCIndW5qeVwiLFxuICAgIDMwOiBcIid1bmp5XCIsXG4gICAgNjA6IFwiJ3luanlcIixcbiAgICA5MDogXCIneW5qeVwiLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgndGsnLCB7XG4gICAgbW9udGhzOiAnw51hbndhcl9GZXdyYWxfTWFydF9BcHJlbF9NYcO9X0nDvXVuX0nDvXVsX0F3Z3VzdF9TZW50w71hYnJfT2t0w71hYnJfTm/DvWFicl9EZWthYnInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnw51hbl9GZXdfTWFyX0Fwcl9NYcO9X0nDvW5fScO9bF9Bd2dfU2VuX09rdF9Ob8O9X0Rlaycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ8OdZWvFn2VuYmVfRHXFn2VuYmVfU2nFn2VuYmVfw4dhcsWfZW5iZV9QZW7Fn2VuYmVfQW5uYV/FnmVuYmUnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfDnWVrX0R1xZ9fU2nFn1/Dh2FyX1Blbl9Bbm5fxZ5lbicuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ8Oda19ExZ9fU8WfX8OHcl9Qbl9Bbl/Fnm4nLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tidWfDvG4gc2FnYXRdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tlcnRpciBzYWdhdF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ1tpbmRpa2ldIGRkZGQgW3NhZ2F0XSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbZMO8w71uXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW2dlw6dlbl0gZGRkZCBbc2FnYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICclcyBzb8WIJyxcbiAgICAgICAgcGFzdDogJyVzIMO2xYgnLFxuICAgICAgICBzOiAnYmlybsOkw6dlIHNla3VudCcsXG4gICAgICAgIG06ICdiaXIgbWludXQnLFxuICAgICAgICBtbTogJyVkIG1pbnV0JyxcbiAgICAgICAgaDogJ2JpciBzYWdhdCcsXG4gICAgICAgIGhoOiAnJWQgc2FnYXQnLFxuICAgICAgICBkOiAnYmlyIGfDvG4nLFxuICAgICAgICBkZDogJyVkIGfDvG4nLFxuICAgICAgICBNOiAnYmlyIGHDvScsXG4gICAgICAgIE1NOiAnJWQgYcO9JyxcbiAgICAgICAgeTogJ2JpciDDvXlsJyxcbiAgICAgICAgeXk6ICclZCDDvXlsJyxcbiAgICB9LFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgIGNhc2UgJ0RvJzpcbiAgICAgICAgICAgIGNhc2UgJ0REJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgemVyb1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgXCIndW5qeVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgICAgICBiID0gKG51bWJlciAlIDEwMCkgLSBhLFxuICAgICAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSB8fCBzdWZmaXhlc1tjXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhZ2Fsb2cgKFBoaWxpcHBpbmVzKSBbdGwtcGhdXG4vLyEgYXV0aG9yIDogRGFuIEhhZ21hbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9oYWdtYW5kYW5cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCd0bC1waCcsIHtcbiAgICBtb250aHM6ICdFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICdMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWInLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdMaV9MdV9NYV9NaV9IdV9CaV9TYWInLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ01NL0QvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ0xUIFtuZ2F5b25nIGFyYXddJyxcbiAgICAgICAgbmV4dERheTogJ1tCdWthcyBuZ10gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ0xUIFtzYSBzdXN1bm9kIG5hXSBkZGRkJyxcbiAgICAgICAgbGFzdERheTogJ0xUIFtrYWhhcG9uXScsXG4gICAgICAgIGxhc3RXZWVrOiAnTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnc2EgbG9vYiBuZyAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhbmcgbmFrYWxpcGFzJyxcbiAgICAgICAgczogJ2lsYW5nIHNlZ3VuZG8nLFxuICAgICAgICBzczogJyVkIHNlZ3VuZG8nLFxuICAgICAgICBtOiAnaXNhbmcgbWludXRvJyxcbiAgICAgICAgbW06ICclZCBtaW51dG8nLFxuICAgICAgICBoOiAnaXNhbmcgb3JhcycsXG4gICAgICAgIGhoOiAnJWQgb3JhcycsXG4gICAgICAgIGQ6ICdpc2FuZyBhcmF3JyxcbiAgICAgICAgZGQ6ICclZCBhcmF3JyxcbiAgICAgICAgTTogJ2lzYW5nIGJ1d2FuJyxcbiAgICAgICAgTU06ICclZCBidXdhbicsXG4gICAgICAgIHk6ICdpc2FuZyB0YW9uJyxcbiAgICAgICAgeXk6ICclZCB0YW9uJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogS2xpbmdvbiBbdGxoXVxuLy8hIGF1dGhvciA6IERvbWluaWthIEtydWsgOiBodHRwczovL2dpdGh1Yi5jb20vYW1hcmFudGhyb3NlXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxudmFyIG51bWJlcnNOb3VucyA9ICdwYWdoX3dh4oCZX2NoYeKAmV93ZWpfbG9TX3ZhZ2hfamF2X1NvY2hfY2hvcmdoX0h1dCcuc3BsaXQoJ18nKTtcblxuZnVuY3Rpb24gdHJhbnNsYXRlRnV0dXJlKG91dHB1dCkge1xuICAgIHZhciB0aW1lID0gb3V0cHV0O1xuICAgIHRpbWUgPVxuICAgICAgICBvdXRwdXQuaW5kZXhPZignamFqJykgIT09IC0xXG4gICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ2xlUydcbiAgICAgICAgICAgIDogb3V0cHV0LmluZGV4T2YoJ2phcicpICE9PSAtMVxuICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICd3YVEnXG4gICAgICAgICAgICA6IG91dHB1dC5pbmRleE9mKCdESVMnKSAhPT0gLTFcbiAgICAgICAgICAgID8gdGltZS5zbGljZSgwLCAtMykgKyAnbmVtJ1xuICAgICAgICAgICAgOiB0aW1lICsgJyBwSXEnO1xuICAgIHJldHVybiB0aW1lO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVQYXN0KG91dHB1dCkge1xuICAgIHZhciB0aW1lID0gb3V0cHV0O1xuICAgIHRpbWUgPVxuICAgICAgICBvdXRwdXQuaW5kZXhPZignamFqJykgIT09IC0xXG4gICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ0h14oCZJ1xuICAgICAgICAgICAgOiBvdXRwdXQuaW5kZXhPZignamFyJykgIT09IC0xXG4gICAgICAgICAgICA/IHRpbWUuc2xpY2UoMCwgLTMpICsgJ3dlbidcbiAgICAgICAgICAgIDogb3V0cHV0LmluZGV4T2YoJ0RJUycpICE9PSAtMVxuICAgICAgICAgICAgPyB0aW1lLnNsaWNlKDAsIC0zKSArICdiZW4nXG4gICAgICAgICAgICA6IHRpbWUgKyAnIHJldCc7XG4gICAgcmV0dXJuIHRpbWU7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICB2YXIgbnVtYmVyTm91biA9IG51bWJlckFzTm91bihudW1iZXIpO1xuICAgIHN3aXRjaCAoc3RyaW5nKSB7XG4gICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBsdXAnO1xuICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgdHVwJztcbiAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIHJlcCc7XG4gICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgIHJldHVybiBudW1iZXJOb3VuICsgJyBqYWonO1xuICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyTm91biArICcgamFyJztcbiAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgcmV0dXJuIG51bWJlck5vdW4gKyAnIERJUyc7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBudW1iZXJBc05vdW4obnVtYmVyKSB7XG4gICAgdmFyIGh1bmRyZWQgPSBNYXRoLmZsb29yKChudW1iZXIgJSAxMDAwKSAvIDEwMCksXG4gICAgICAgIHRlbiA9IE1hdGguZmxvb3IoKG51bWJlciAlIDEwMCkgLyAxMCksXG4gICAgICAgIG9uZSA9IG51bWJlciAlIDEwLFxuICAgICAgICB3b3JkID0gJyc7XG4gICAgaWYgKGh1bmRyZWQgPiAwKSB7XG4gICAgICAgIHdvcmQgKz0gbnVtYmVyc05vdW5zW2h1bmRyZWRdICsgJ3ZhdGxoJztcbiAgICB9XG4gICAgaWYgKHRlbiA+IDApIHtcbiAgICAgICAgd29yZCArPSAod29yZCAhPT0gJycgPyAnICcgOiAnJykgKyBudW1iZXJzTm91bnNbdGVuXSArICdtYUgnO1xuICAgIH1cbiAgICBpZiAob25lID4gMCkge1xuICAgICAgICB3b3JkICs9ICh3b3JkICE9PSAnJyA/ICcgJyA6ICcnKSArIG51bWJlcnNOb3Vuc1tvbmVdO1xuICAgIH1cbiAgICByZXR1cm4gd29yZCA9PT0gJycgPyAncGFnaCcgOiB3b3JkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCd0bGgnLCB7XG4gICAgbW9udGhzOiAndGVyYeKAmSBqYXIgd2HigJlfdGVyYeKAmSBqYXIgY2hh4oCZX3RlcmHigJkgamFyIHdlal90ZXJh4oCZIGphciBsb1NfdGVyYeKAmSBqYXIgdmFnaF90ZXJh4oCZIGphciBqYXZfdGVyYeKAmSBqYXIgU29jaF90ZXJh4oCZIGphciBjaG9yZ2hfdGVyYeKAmSBqYXIgSHV0X3RlcmHigJkgamFyIHdh4oCZbWFIX3RlcmHigJkgamFyIHdh4oCZbWFIIHdh4oCZX3RlcmHigJkgamFyIHdh4oCZbWFIIGNoYeKAmScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdqYXIgd2HigJlfamFyIGNoYeKAmV9qYXIgd2VqX2phciBsb1NfamFyIHZhZ2hfamFyIGphdl9qYXIgU29jaF9qYXIgY2hvcmdoX2phciBIdXRfamFyIHdh4oCZbWFIX2phciB3YeKAmW1hSCB3YeKAmV9qYXIgd2HigJltYUggY2hh4oCZJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgIHdlZWtkYXlzOiAnbG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWonLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNNaW46ICdsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tEYUhqYWpdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1t3YeKAmWxlU10gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ0xMTCcsXG4gICAgICAgIGxhc3REYXk6ICdbd2HigJlIdeKAmV0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ0xMTCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiB0cmFuc2xhdGVGdXR1cmUsXG4gICAgICAgIHBhc3Q6IHRyYW5zbGF0ZVBhc3QsXG4gICAgICAgIHM6ICdwdVMgbHVwJyxcbiAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgbTogJ3dh4oCZIHR1cCcsXG4gICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgIGg6ICd3YeKAmSByZXAnLFxuICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICBkOiAnd2HigJkgamFqJyxcbiAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgTTogJ3dh4oCZIGphcicsXG4gICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgIHk6ICd3YeKAmSBESVMnLFxuICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBUdXJraXNoIFt0cl1cbi8vISBhdXRob3JzIDogRXJoYW4gR3VuZG9nYW4gOiBodHRwczovL2dpdGh1Yi5jb20vZXJoYW5ndW5kb2dhbixcbi8vISAgICAgICAgICAgQnVyYWsgWWnEn2l0IEtheWE6IGh0dHBzOi8vZ2l0aHViLmNvbS9CWUtcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG52YXIgc3VmZml4ZXMgPSB7XG4gICAgMTogXCInaW5jaVwiLFxuICAgIDU6IFwiJ2luY2lcIixcbiAgICA4OiBcIidpbmNpXCIsXG4gICAgNzA6IFwiJ2luY2lcIixcbiAgICA4MDogXCInaW5jaVwiLFxuICAgIDI6IFwiJ25jaVwiLFxuICAgIDc6IFwiJ25jaVwiLFxuICAgIDIwOiBcIiduY2lcIixcbiAgICA1MDogXCInbmNpXCIsXG4gICAgMzogXCInw7xuY8O8XCIsXG4gICAgNDogXCInw7xuY8O8XCIsXG4gICAgMTAwOiBcIifDvG5jw7xcIixcbiAgICA2OiBcIiduY8SxXCIsXG4gICAgOTogXCIndW5jdVwiLFxuICAgIDEwOiBcIid1bmN1XCIsXG4gICAgMzA6IFwiJ3VuY3VcIixcbiAgICA2MDogXCInxLFuY8SxXCIsXG4gICAgOTA6IFwiJ8SxbmPEsVwiLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgndHInLCB7XG4gICAgbW9udGhzOiAnT2Nha1/FnnViYXRfTWFydF9OaXNhbl9NYXnEsXNfSGF6aXJhbl9UZW1tdXpfQcSfdXN0b3NfRXlsw7xsX0VraW1fS2FzxLFtX0FyYWzEsWsnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnT2NhX8WedWJfTWFyX05pc19NYXlfSGF6X1RlbV9BxJ91X0V5bF9Fa2lfS2FzX0FyYScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ1BhemFyX1BhemFydGVzaV9TYWzEsV/Dh2FyxZ9hbWJhX1BlcsWfZW1iZV9DdW1hX0N1bWFydGVzaScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ1Bhel9QdHNfU2FsX8OHYXJfUGVyX0N1bV9DdHMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdQel9QdF9TYV/Dh2FfUGVfQ3VfQ3QnLnNwbGl0KCdfJyksXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPCAxMikge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnw7bDticgOiAnw5bDlic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICfDtnMnIDogJ8OWUyc7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1lcmlkaWVtUGFyc2U6IC/DtsO2fMOWw5Z8w7ZzfMOWUy8sXG4gICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gJ8O2cycgfHwgaW5wdXQgPT09ICfDllMnO1xuICAgIH0sXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tidWfDvG4gc2FhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW3lhcsSxbiBzYWF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnW2dlbGVjZWtdIGRkZGQgW3NhYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tkw7xuXSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW2dlw6dlbl0gZGRkZCBbc2FhdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVzIHNvbnJhJyxcbiAgICAgICAgcGFzdDogJyVzIMO2bmNlJyxcbiAgICAgICAgczogJ2Jpcmthw6cgc2FuaXllJyxcbiAgICAgICAgc3M6ICclZCBzYW5peWUnLFxuICAgICAgICBtOiAnYmlyIGRha2lrYScsXG4gICAgICAgIG1tOiAnJWQgZGFraWthJyxcbiAgICAgICAgaDogJ2JpciBzYWF0JyxcbiAgICAgICAgaGg6ICclZCBzYWF0JyxcbiAgICAgICAgZDogJ2JpciBnw7xuJyxcbiAgICAgICAgZGQ6ICclZCBnw7xuJyxcbiAgICAgICAgdzogJ2JpciBoYWZ0YScsXG4gICAgICAgIHd3OiAnJWQgaGFmdGEnLFxuICAgICAgICBNOiAnYmlyIGF5JyxcbiAgICAgICAgTU06ICclZCBheScsXG4gICAgICAgIHk6ICdiaXIgecSxbCcsXG4gICAgICAgIHl5OiAnJWQgecSxbCcsXG4gICAgfSxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICBjYXNlICdEbyc6XG4gICAgICAgICAgICBjYXNlICdERCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIHplcm9cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIFwiJ8SxbmPEsVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgYSA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgICAgICBiID0gKG51bWJlciAlIDEwMCkgLSBhLFxuICAgICAgICAgICAgICAgICAgICBjID0gbnVtYmVyID49IDEwMCA/IDEwMCA6IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIChzdWZmaXhlc1thXSB8fCBzdWZmaXhlc1tiXSB8fCBzdWZmaXhlc1tjXSk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA3dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFRhbG9zc2FuIFt0emxdXG4vLyEgYXV0aG9yIDogUm9iaW4gdmFuIGRlciBWbGlldCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9yb2JpbjB2YW4wZGVyMHZcbi8vISBhdXRob3IgOiBJdXN0w6wgQ2FudW5cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG4vLyBBZnRlciB0aGUgeWVhciB0aGVyZSBzaG91bGQgYmUgYSBzbGFzaCBhbmQgdGhlIGFtb3VudCBvZiB5ZWFycyBzaW5jZSBEZWNlbWJlciAyNiwgMTk3OSBpbiBSb21hbiBudW1lcmFscy5cbi8vIFRoaXMgaXMgY3VycmVudGx5IHRvbyBkaWZmaWN1bHQgKG1heWJlIGV2ZW4gaW1wb3NzaWJsZSkgdG8gYWRkLlxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgndHpsJywge1xuICAgIG1vbnRoczogJ0phbnVhcl9GZXZyYWdsaF9NYXLDp19BdnLDr3VfTWFpX0fDvG5fSnVsaWFfR3VzY2h0X1NldGVtdmFyX0xpc3RvcMOkdHNfTm9lbXZhcl9aZWNlbXZhcicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICdKYW5fRmV2X01hcl9BdnJfTWFpX0fDvG5fSnVsX0d1c19TZXRfTGlzX05vZV9aZWMnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXM6ICdTw7psYWRpX0zDum5lw6dpX01haXR6aV9Nw6FyY3VyaV9YaMO6YWRpX1Zpw6luZXLDp2lfU8OhdHVyaScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAnU8O6bF9Mw7puX01haV9Nw6FyX1how7pfVmnDqV9Tw6F0Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnU8O6X0zDul9NYV9Nw6FfWGhfVmlfU8OhJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgTEw6ICdELiBNTU1NIFtkYWxsYXNdIFlZWVknLFxuICAgICAgICBMTEw6ICdELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgW2xpXSBELiBNTU1NIFtkYWxsYXNdIFlZWVkgSEgubW0nLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL2RcXCdvfGRcXCdhL2ksXG4gICAgaXNQTTogZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBcImQnb1wiID09PSBpbnB1dC50b0xvd2VyQ2FzZSgpO1xuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyBcImQnb1wiIDogXCJEJ09cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gXCJkJ2FcIiA6IFwiRCdBXCI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbb3hoaSDDoF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW2RlbcOgIMOgXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbw6BdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tpZWlyaSDDoF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tzw7xyIGVsXSBkZGRkIFtsYXN0ZXUgw6BdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdvc3ByZWkgJXMnLFxuICAgICAgICBwYXN0OiAnamElcycsXG4gICAgICAgIHM6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIHNzOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBtbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgaGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgIG9yZGluYWw6ICclZC4nLFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuXG5mdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgIHM6IFsndmllbnNhcyBzZWN1bmRzJywgXCInaWVuc2FzIHNlY3VuZHNcIl0sXG4gICAgICAgIHNzOiBbbnVtYmVyICsgJyBzZWN1bmRzJywgJycgKyBudW1iZXIgKyAnIHNlY3VuZHMnXSxcbiAgICAgICAgbTogW1wiJ24gbcOtdXRcIiwgXCInaWVucyBtw611dFwiXSxcbiAgICAgICAgbW06IFtudW1iZXIgKyAnIG3DrXV0cycsICcnICsgbnVtYmVyICsgJyBtw611dHMnXSxcbiAgICAgICAgaDogW1wiJ24gw75vcmFcIiwgXCInaWVuc2Egw75vcmFcIl0sXG4gICAgICAgIGhoOiBbbnVtYmVyICsgJyDDvm9yYXMnLCAnJyArIG51bWJlciArICcgw75vcmFzJ10sXG4gICAgICAgIGQ6IFtcIiduIHppdWFcIiwgXCInaWVuc2Egeml1YVwiXSxcbiAgICAgICAgZGQ6IFtudW1iZXIgKyAnIHppdWFzJywgJycgKyBudW1iZXIgKyAnIHppdWFzJ10sXG4gICAgICAgIE06IFtcIiduIG1lc1wiLCBcIidpZW5zIG1lc1wiXSxcbiAgICAgICAgTU06IFtudW1iZXIgKyAnIG1lc2VuJywgJycgKyBudW1iZXIgKyAnIG1lc2VuJ10sXG4gICAgICAgIHk6IFtcIiduIGFyXCIsIFwiJ2llbnMgYXJcIl0sXG4gICAgICAgIHl5OiBbbnVtYmVyICsgJyBhcnMnLCAnJyArIG51bWJlciArICcgYXJzJ10sXG4gICAgfTtcbiAgICByZXR1cm4gaXNGdXR1cmVcbiAgICAgICAgPyBmb3JtYXRba2V5XVswXVxuICAgICAgICA6IHdpdGhvdXRTdWZmaXhcbiAgICAgICAgPyBmb3JtYXRba2V5XVswXVxuICAgICAgICA6IGZvcm1hdFtrZXldWzFdO1xufVxuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IExhdGluIFt0em0tbGF0bl1cbi8vISBhdXRob3IgOiBBYmRlbCBTYWlkIDogaHR0cHM6Ly9naXRodWIuY29tL2FiZGVsc2FpZFxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3R6bS1sYXRuJywge1xuICAgIG1vbnRoczogJ2lubmF5cl9icsukYXlyy6RfbWFyy6Rzy6RfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X8mjd8WhdF/FoXd0YW5iaXJfa3TLpHdicsukX253d2FuYmlyX2R3am5iaXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnaW5uYXlyX2Jyy6RheXLLpF9tYXLLpHPLpF9pYnJpcl9tYXl5d195d255d195d2x5d3pfyaN3xaF0X8Whd3RhbmJpcl9rdMukd2Jyy6Rfbnd3YW5iaXJfZHdqbmJpcicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXM6ICdhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNp4biNeWFzJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAnYXNhbWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaeG4jXlhcycuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbYXNka2ggZ10gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW2Fza2EgZ10gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2ddIExUJyxcbiAgICAgICAgbGFzdERheTogJ1thc3NhbnQgZ10gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW2ddIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdkYWRraCBzIHlhbiAlcycsXG4gICAgICAgIHBhc3Q6ICd5YW4gJXMnLFxuICAgICAgICBzOiAnaW1paycsXG4gICAgICAgIHNzOiAnJWQgaW1paycsXG4gICAgICAgIG06ICdtaW514biNJyxcbiAgICAgICAgbW06ICclZCBtaW514biNJyxcbiAgICAgICAgaDogJ3NhyZthJyxcbiAgICAgICAgaGg6ICclZCB0YXNzYcmbaW4nLFxuICAgICAgICBkOiAnYXNzJyxcbiAgICAgICAgZGQ6ICclZCBvc3NhbicsXG4gICAgICAgIE06ICdheW93cicsXG4gICAgICAgIE1NOiAnJWQgaXl5aXJuJyxcbiAgICAgICAgeTogJ2FzZ2FzJyxcbiAgICAgICAgeXk6ICclZCBpc2dhc24nLFxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDYsIC8vIFNhdHVyZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogMTIsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDEydGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENlbnRyYWwgQXRsYXMgVGFtYXppZ2h0IFt0em1dXG4vLyEgYXV0aG9yIDogQWJkZWwgU2FpZCA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hYmRlbHNhaWRcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCd0em0nLCB7XG4gICAgbW9udGhzOiAn4rWJ4rWP4rWP4rSw4rWi4rWUX+K0seK1leK0sOK1ouK1lV/itY7itLDitZXitZpf4rWJ4rSx4rWU4rWJ4rWUX+K1juK0sOK1ouK1ouK1k1/itaLitZPitY/itaLitZNf4rWi4rWT4rWN4rWi4rWT4rWjX+K1luK1k+K1m+K1nF/itZvitZPitZzitLDitY/itLHitYnitZRf4rS94rWf4rWT4rSx4rWVX+K1j+K1k+K1oeK0sOK1j+K0seK1ieK1lF/itLfitZPitYritY/itLHitYnitZQnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAn4rWJ4rWP4rWP4rSw4rWi4rWUX+K0seK1leK0sOK1ouK1lV/itY7itLDitZXitZpf4rWJ4rSx4rWU4rWJ4rWUX+K1juK0sOK1ouK1ouK1k1/itaLitZPitY/itaLitZNf4rWi4rWT4rWN4rWi4rWT4rWjX+K1luK1k+K1m+K1nF/itZvitZPitZzitLDitY/itLHitYnitZRf4rS94rWf4rWT4rSx4rWVX+K1j+K1k+K1oeK0sOK1j+K0seK1ieK1lF/itLfitZPitYritY/itLHitYnitZQnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzOiAn4rSw4rWZ4rSw4rWO4rSw4rWZX+K0sOK1ouK1j+K0sOK1mV/itLDitZnitYnitY/itLDitZlf4rSw4rS94rWU4rSw4rWZX+K0sOK0veK1oeK0sOK1mV/itLDitZnitYnitY7itaHitLDitZlf4rSw4rWZ4rWJ4rS54rWi4rSw4rWZJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfitLDitZnitLDitY7itLDitZlf4rSw4rWi4rWP4rSw4rWZX+K0sOK1meK1ieK1j+K0sOK1mV/itLDitL3itZTitLDitZlf4rSw4rS94rWh4rSw4rWZX+K0sOK1meK1ieK1juK1oeK0sOK1mV/itLDitZnitYnitLnitaLitLDitZknLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW+K0sOK1meK0t+K1hSDitLRdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vitLDitZnitL3itLAg4rS0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBb4rS0XSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdb4rSw4rWa4rSw4rWP4rWcIOK0tF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ2RkZGQgW+K0tF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJ+K0t+K0sOK0t+K1hSDitZkg4rWi4rSw4rWPICVzJyxcbiAgICAgICAgcGFzdDogJ+K1ouK0sOK1jyAlcycsXG4gICAgICAgIHM6ICfitYnitY7itYnitL0nLFxuICAgICAgICBzczogJyVkIOK1ieK1juK1ieK0vScsXG4gICAgICAgIG06ICfitY7itYnitY/itZPitLonLFxuICAgICAgICBtbTogJyVkIOK1juK1ieK1j+K1k+K0uicsXG4gICAgICAgIGg6ICfitZnitLDitYTitLAnLFxuICAgICAgICBoaDogJyVkIOK1nOK0sOK1meK1meK0sOK1hOK1ieK1jycsXG4gICAgICAgIGQ6ICfitLDitZnitZknLFxuICAgICAgICBkZDogJyVkIG/itZnitZnitLDitY8nLFxuICAgICAgICBNOiAn4rSw4rWib+K1k+K1lCcsXG4gICAgICAgIE1NOiAnJWQg4rWJ4rWi4rWi4rWJ4rWU4rWPJyxcbiAgICAgICAgeTogJ+K0sOK1meK0s+K0sOK1mScsXG4gICAgICAgIHl5OiAnJWQg4rWJ4rWZ4rSz4rSw4rWZ4rWPJyxcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiA2LCAvLyBTYXR1cmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDEyLCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiAxMnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVeWdodXIgKENoaW5hKSBbdWctY25dXG4vLyEgYXV0aG9yOiBib3lhcSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ib3lhcVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3VnLWNuJywge1xuICAgIG1vbnRoczogJ9mK2KfZhtuL2KfYsV/ZgduQ24vYsdin2YRf2YXYp9ix2Kpf2KbYp9m+2LHbkNmEX9mF2KfZil/YptmJ2Yrbh9mGX9im2YnZituH2YRf2KbYp9uL2Lrbh9iz2Kpf2LPbkNmG2Krbldio2YnYsV/YptuG2YPYqtuV2KjZidixX9mG2YjZitin2KjZidixX9iv25DZg9in2KjZidixJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ9mK2KfZhtuL2KfYsV/ZgduQ24vYsdin2YRf2YXYp9ix2Kpf2KbYp9m+2LHbkNmEX9mF2KfZil/YptmJ2Yrbh9mGX9im2YnZituH2YRf2KbYp9uL2Lrbh9iz2Kpf2LPbkNmG2Krbldio2YnYsV/YptuG2YPYqtuV2KjZidixX9mG2YjZitin2KjZidixX9iv25DZg9in2KjZidixJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5czogJ9mK25XZg9i025XZhtio25Vf2K/biNi025XZhtio25Vf2LPbldmK2LTbldmG2KjblV/ahtin2LHYtNuV2YbYqNuVX9m+25XZiti025XZhtio25Vf2KzbiNmF25Vf2LTbldmG2KjblScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ9mK25Vf2K/biF/Ys9uVX9qG2Kdf2b7blV/YrNuIX9i025UnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfZituVX9iv24hf2LPblV/ahtinX9m+25Vf2KzbiF/YtNuVJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgTEw6ICdZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJJyxcbiAgICAgICAgTExMOiAnWVlZWS3ZitmJ2YTZiU0t2KbYp9mK2YbZidqtRC3Zg9uI2YbZidiMIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGTYjCBZWVlZLdmK2YnZhNmJTS3Yptin2YrZhtmJ2q1ELdmD24jZhtmJ2IwgSEg6bW0nLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL9mK25DYsdmJ2YUg2YPbkNqG25V82LPbldq+25XYsXzahtuI2LTYqtmJ2YYg2Kjbh9ix24fZhnzahtuI2LR82obbiNi02KrZidmGINmD25DZitmJ2YZ82YPbldqGLyxcbiAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2YrbkNix2YnZhSDZg9uQ2obblScgfHxcbiAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2LPbldq+25XYsScgfHxcbiAgICAgICAgICAgIG1lcmlkaWVtID09PSAn2obbiNi02KrZidmGINio24fYsduH2YYnXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfahtuI2LTYqtmJ2YYg2YPbkNmK2YnZhicgfHwgbWVyaWRpZW0gPT09ICfZg9uV2oYnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgIHJldHVybiAn2YrbkNix2YnZhSDZg9uQ2obblSc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgIHJldHVybiAn2LPbldq+25XYsSc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ9qG24jYtNiq2YnZhiDYqNuH2LHbh9mGJztcbiAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgIHJldHVybiAn2obbiNi0JztcbiAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgIHJldHVybiAn2obbiNi02KrZidmGINmD25DZitmJ2YYnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfZg9uV2oYnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW9io24jar9uI2YYg2LPYp9im25XYql0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW9im25XYqtuVINiz2KfYptuV2KpdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdb2YPbkNmE25XYsdmD2YldIGRkZGQgW9iz2KfYptuV2KpdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vYqtuG2YbbiNqv24jZhl0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1vYptin2YTYr9mJ2YbZgtmJXSBkZGRkIFvYs9in2KbbldiqXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXMg2YPbkNmK2YnZhicsXG4gICAgICAgIHBhc3Q6ICclcyDYqNuH2LHbh9mGJyxcbiAgICAgICAgczogJ9mG25XahtqG25Ug2LPbkNmD2YjZhtiqJyxcbiAgICAgICAgc3M6ICclZCDYs9uQ2YPZiNmG2KonLFxuICAgICAgICBtOiAn2KjZidixINmF2YnZhtuH2KonLFxuICAgICAgICBtbTogJyVkINmF2YnZhtuH2KonLFxuICAgICAgICBoOiAn2KjZidixINiz2KfYptuV2KonLFxuICAgICAgICBoaDogJyVkINiz2KfYptuV2KonLFxuICAgICAgICBkOiAn2KjZidixINmD24jZhicsXG4gICAgICAgIGRkOiAnJWQg2YPbiNmGJyxcbiAgICAgICAgTTogJ9io2YnYsSDYptin2YonLFxuICAgICAgICBNTTogJyVkINim2KfZiicsXG4gICAgICAgIHk6ICfYqNmJ2LEg2YrZidmEJyxcbiAgICAgICAgeXk6ICclZCDZitmJ2YQnLFxuICAgIH0sXG5cbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oLdmD24jZhtmJfC3Yptin2Yp8Ldq+25XZvtiq25UpLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAnLdmD24jZhtmJJztcbiAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICct2r7bldm+2KrblSc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHByZXBhcnNlOiBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgv2IwvZywgJywnKTtcbiAgICB9LFxuICAgIHBvc3Rmb3JtYXQ6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC8sL2csICfYjCcpO1xuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICAvLyBHQi9UIDc0MDgtMTk5NOOAiuaVsOaNruWFg+WSjOS6pOaNouagvOW8j8K35L+h5oGv5Lqk5o2iwrfml6XmnJ/lkozml7bpl7TooajnpLrms5XjgIvkuI5JU08gODYwMToxOTg4562J5pWIXG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNywgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gMXN0IGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVa3JhaW5pYW4gW3VrXVxuLy8hIGF1dGhvciA6IHplbWxhbmluIDogaHR0cHM6Ly9naXRodWIuY29tL3plbWxhbmluXG4vLyEgQXV0aG9yIDogTWVuZWxpb24gRWxlbnPDumxlIDogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5mdW5jdGlvbiBwbHVyYWwod29yZCwgbnVtKSB7XG4gICAgdmFyIGZvcm1zID0gd29yZC5zcGxpdCgnXycpO1xuICAgIHJldHVybiBudW0gJSAxMCA9PT0gMSAmJiBudW0gJSAxMDAgIT09IDExXG4gICAgICAgID8gZm9ybXNbMF1cbiAgICAgICAgOiBudW0gJSAxMCA+PSAyICYmIG51bSAlIDEwIDw9IDQgJiYgKG51bSAlIDEwMCA8IDEwIHx8IG51bSAlIDEwMCA+PSAyMClcbiAgICAgICAgPyBmb3Jtc1sxXVxuICAgICAgICA6IGZvcm1zWzJdO1xufVxuZnVuY3Rpb24gcmVsYXRpdmVUaW1lV2l0aFBsdXJhbChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSkge1xuICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgIHNzOiB3aXRob3V0U3VmZml4ID8gJ9GB0LXQutGD0L3QtNCwX9GB0LXQutGD0L3QtNC4X9GB0LXQutGD0L3QtCcgOiAn0YHQtdC60YPQvdC00YNf0YHQtdC60YPQvdC00Lhf0YHQtdC60YPQvdC0JyxcbiAgICAgICAgbW06IHdpdGhvdXRTdWZmaXggPyAn0YXQstC40LvQuNC90LBf0YXQstC40LvQuNC90Lhf0YXQstC40LvQuNC9JyA6ICfRhdCy0LjQu9C40L3Rg1/RhdCy0LjQu9C40L3QuF/RhdCy0LjQu9C40L0nLFxuICAgICAgICBoaDogd2l0aG91dFN1ZmZpeCA/ICfQs9C+0LTQuNC90LBf0LPQvtC00LjQvdC4X9Cz0L7QtNC40L0nIDogJ9Cz0L7QtNC40L3Rg1/Qs9C+0LTQuNC90Lhf0LPQvtC00LjQvScsXG4gICAgICAgIGRkOiAn0LTQtdC90Yxf0LTQvdGWX9C00L3RltCyJyxcbiAgICAgICAgTU06ICfQvNGW0YHRj9GG0Yxf0LzRltGB0Y/RhtGWX9C80ZbRgdGP0YbRltCyJyxcbiAgICAgICAgeXk6ICfRgNGW0Lpf0YDQvtC60Lhf0YDQvtC60ZbQsicsXG4gICAgfTtcbiAgICBpZiAoa2V5ID09PSAnbScpIHtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyAn0YXQstC40LvQuNC90LAnIDogJ9GF0LLQuNC70LjQvdGDJztcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2gnKSB7XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gJ9Cz0L7QtNC40L3QsCcgOiAn0LPQvtC00LjQvdGDJztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVtYmVyICsgJyAnICsgcGx1cmFsKGZvcm1hdFtrZXldLCArbnVtYmVyKTtcbiAgICB9XG59XG5mdW5jdGlvbiB3ZWVrZGF5c0Nhc2VSZXBsYWNlKG0sIGZvcm1hdCkge1xuICAgIHZhciB3ZWVrZGF5cyA9IHtcbiAgICAgICAgICAgIG5vbWluYXRpdmU6ICfQvdC10LTRltC70Y9f0L/QvtC90LXQtNGW0LvQvtC6X9Cy0ZbQstGC0L7RgNC+0Lpf0YHQtdGA0LXQtNCwX9GH0LXRgtCy0LXRgF/Qv+KAmdGP0YLQvdC40YbRj1/RgdGD0LHQvtGC0LAnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGFjY3VzYXRpdmU6ICfQvdC10LTRltC70Y5f0L/QvtC90LXQtNGW0LvQvtC6X9Cy0ZbQstGC0L7RgNC+0Lpf0YHQtdGA0LXQtNGDX9GH0LXRgtCy0LXRgF/Qv+KAmdGP0YLQvdC40YbRjl/RgdGD0LHQvtGC0YMnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGdlbml0aXZlOiAn0L3QtdC00ZbQu9GWX9C/0L7QvdC10LTRltC70LrQsF/QstGW0LLRgtC+0YDQutCwX9GB0LXRgNC10LTQuF/Rh9C10YLQstC10YDQs9CwX9C/4oCZ0Y/RgtC90LjRhtGWX9GB0YPQsdC+0YLQuCcuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBub3VuQ2FzZTtcblxuICAgIGlmIChtID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiB3ZWVrZGF5c1snbm9taW5hdGl2ZSddXG4gICAgICAgICAgICAuc2xpY2UoMSwgNylcbiAgICAgICAgICAgIC5jb25jYXQod2Vla2RheXNbJ25vbWluYXRpdmUnXS5zbGljZSgwLCAxKSk7XG4gICAgfVxuICAgIGlmICghbSkge1xuICAgICAgICByZXR1cm4gd2Vla2RheXNbJ25vbWluYXRpdmUnXTtcbiAgICB9XG5cbiAgICBub3VuQ2FzZSA9IC8oXFxbW9CS0LLQo9GDXVxcXSkgP2RkZGQvLnRlc3QoZm9ybWF0KVxuICAgICAgICA/ICdhY2N1c2F0aXZlJ1xuICAgICAgICA6IC9cXFs/KD860LzQuNC90YPQu9C+0Zd80L3QsNGB0YLRg9C/0L3QvtGXKT8gP1xcXSA/ZGRkZC8udGVzdChmb3JtYXQpXG4gICAgICAgID8gJ2dlbml0aXZlJ1xuICAgICAgICA6ICdub21pbmF0aXZlJztcbiAgICByZXR1cm4gd2Vla2RheXNbbm91bkNhc2VdW20uZGF5KCldO1xufVxuZnVuY3Rpb24gcHJvY2Vzc0hvdXJzRnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHN0ciArICfQvicgKyAodGhpcy5ob3VycygpID09PSAxMSA/ICfQsScgOiAnJykgKyAnXSBMVCc7XG4gICAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgndWsnLCB7XG4gICAgbW9udGhzOiB7XG4gICAgICAgIGZvcm1hdDogJ9GB0ZbRh9C90Y9f0LvRjtGC0L7Qs9C+X9Cx0LXRgNC10LfQvdGPX9C60LLRltGC0L3Rj1/RgtGA0LDQstC90Y9f0YfQtdGA0LLQvdGPX9C70LjQv9C90Y9f0YHQtdGA0L/QvdGPX9Cy0LXRgNC10YHQvdGPX9C20L7QstGC0L3Rj1/Qu9C40YHRgtC+0L/QsNC00LBf0LPRgNGD0LTQvdGPJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBzdGFuZGFsb25lOiAn0YHRltGH0LXQvdGMX9C70Y7RgtC40Llf0LHQtdGA0LXQt9C10L3RjF/QutCy0ZbRgtC10L3RjF/RgtGA0LDQstC10L3RjF/Rh9C10YDQstC10L3RjF/Qu9C40L/QtdC90Yxf0YHQtdGA0L/QtdC90Yxf0LLQtdGA0LXRgdC10L3RjF/QttC+0LLRgtC10L3RjF/Qu9C40YHRgtC+0L/QsNC0X9Cz0YDRg9C00LXQvdGMJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgIH0sXG4gICAgbW9udGhzU2hvcnQ6ICfRgdGW0Ydf0LvRjtGCX9Cx0LXRgF/QutCy0ZbRgl/RgtGA0LDQsl/Rh9C10YDQsl/Qu9C40L9f0YHQtdGA0L9f0LLQtdGAX9C20L7QstGCX9C70LjRgdGCX9Cz0YDRg9C0Jy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5czogd2Vla2RheXNDYXNlUmVwbGFjZSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn0L3QtF/Qv9C9X9Cy0YJf0YHRgF/Rh9GCX9C/0YJf0YHQsScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ9C90LRf0L/QvV/QstGCX9GB0YBf0YfRgl/Qv9GCX9GB0LEnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZINGALicsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZINGALiwgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZCwgRCBNTU1NIFlZWVkg0YAuLCBISDptbScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Ch0YzQvtCz0L7QtNC90ZYgJyksXG4gICAgICAgIG5leHREYXk6IHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JfQsNCy0YLRgNCwICcpLFxuICAgICAgICBsYXN0RGF5OiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CS0YfQvtGA0LAgJyksXG4gICAgICAgIG5leHRXZWVrOiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9CjXSBkZGRkIFsnKSxcbiAgICAgICAgbGFzdFdlZWs6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5kYXkoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NIb3Vyc0Z1bmN0aW9uKCdb0JzQuNC90YPQu9C+0ZddIGRkZGQgWycpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzSG91cnNGdW5jdGlvbignW9Cc0LjQvdGD0LvQvtCz0L5dIGRkZGQgWycpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAn0LfQsCAlcycsXG4gICAgICAgIHBhc3Q6ICclcyDRgtC+0LzRgycsXG4gICAgICAgIHM6ICfQtNC10LrRltC70YzQutCwINGB0LXQutGD0L3QtCcsXG4gICAgICAgIHNzOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICBtOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICBtbTogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgaDogJ9Cz0L7QtNC40L3RgycsXG4gICAgICAgIGhoOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICBkOiAn0LTQtdC90YwnLFxuICAgICAgICBkZDogcmVsYXRpdmVUaW1lV2l0aFBsdXJhbCxcbiAgICAgICAgTTogJ9C80ZbRgdGP0YbRjCcsXG4gICAgICAgIE1NOiByZWxhdGl2ZVRpbWVXaXRoUGx1cmFsLFxuICAgICAgICB5OiAn0YDRltC6JyxcbiAgICAgICAgeXk6IHJlbGF0aXZlVGltZVdpdGhQbHVyYWwsXG4gICAgfSxcbiAgICAvLyBNLiBFLjogdGhvc2UgdHdvIGFyZSB2aXJ0dWFsbHkgdW51c2VkIGJ1dCBhIHVzZXIgbWlnaHQgd2FudCB0byBpbXBsZW1lbnQgdGhlbSBmb3IgaGlzL2hlciB3ZWJzaXRlIGZvciBzb21lIHJlYXNvblxuICAgIG1lcmlkaWVtUGFyc2U6IC/QvdC+0YfRlnzRgNCw0L3QutGDfNC00L3Rj3zQstC10YfQvtGA0LAvLFxuICAgIGlzUE06IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gL14o0LTQvdGPfNCy0LXRh9C+0YDQsCkkLy50ZXN0KGlucHV0KTtcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgNCkge1xuICAgICAgICAgICAgcmV0dXJuICfQvdC+0YfRlic7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91ciA8IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ9GA0LDQvdC60YMnO1xuICAgICAgICB9IGVsc2UgaWYgKGhvdXIgPCAxNykge1xuICAgICAgICAgICAgcmV0dXJuICfQtNC90Y8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICfQstC10YfQvtGA0LAnO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0tKNC5fNCz0L4pLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3QuSc7XG4gICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJy3Qs9C+JztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVXJkdSBbdXJdXG4vLyEgYXV0aG9yIDogU2F3b29kIEFsYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaWJuZXNheWVlZFxuLy8hIGF1dGhvciA6IFphY2sgOiBodHRwczovL2dpdGh1Yi5jb20vWmFja1Zpc2lvblxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbnZhciBtb250aHMgPSBbXG4gICAgICAgICfYrNmG2YjYsduMJyxcbiAgICAgICAgJ9mB2LHZiNix24wnLFxuICAgICAgICAn2YXYp9ix2oYnLFxuICAgICAgICAn2KfZvtix24zZhCcsXG4gICAgICAgICfZhdim24wnLFxuICAgICAgICAn2KzZiNmGJyxcbiAgICAgICAgJ9is2YjZhNin2KbbjCcsXG4gICAgICAgICfYp9qv2LPYqicsXG4gICAgICAgICfYs9iq2YXYqNixJyxcbiAgICAgICAgJ9in2qnYqtmI2KjYsScsXG4gICAgICAgICfZhtmI2YXYqNixJyxcbiAgICAgICAgJ9iv2LPZhdio2LEnLFxuICAgIF0sXG4gICAgZGF5cyA9IFsn2KfYqtmI2KfYsScsICfZvtuM2LEnLCAn2YXZhtqv2YQnLCAn2KjYr9q+JywgJ9is2YXYudix2KfYqicsICfYrNmF2LnbgScsICfbgdmB2KrbgSddO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCd1cicsIHtcbiAgICBtb250aHM6IG1vbnRocyxcbiAgICBtb250aHNTaG9ydDogbW9udGhzLFxuICAgIHdlZWtkYXlzOiBkYXlzLFxuICAgIHdlZWtkYXlzU2hvcnQ6IGRheXMsXG4gICAgd2Vla2RheXNNaW46IGRheXMsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnZGRkZNiMIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIG1lcmlkaWVtUGFyc2U6IC/Ytdio2K182LTYp9mFLyxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuICfYtNin2YUnID09PSBpbnB1dDtcbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VyIDwgMTIpIHtcbiAgICAgICAgICAgIHJldHVybiAn2LXYqNitJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ9i02KfZhSc7XG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW9ii2Kwg2KjZiNmC2KpdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vaqdmEINio2YjZgtiqXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBb2KjZiNmC2KpdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1var9iw2LTYqtuBINix2YjYsiDYqNmI2YLYql0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1var9iw2LTYqtuBXSBkZGRkIFvYqNmI2YLYql0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVzINio2LnYrycsXG4gICAgICAgIHBhc3Q6ICclcyDZgtio2YQnLFxuICAgICAgICBzOiAn2obZhtivINiz24zaqdmG2ognLFxuICAgICAgICBzczogJyVkINiz24zaqdmG2ognLFxuICAgICAgICBtOiAn2KfbjNqpINmF2YbZuScsXG4gICAgICAgIG1tOiAnJWQg2YXZhtm5JyxcbiAgICAgICAgaDogJ9in24zaqSDar9q+2YbZuduBJyxcbiAgICAgICAgaGg6ICclZCDar9q+2YbZuduSJyxcbiAgICAgICAgZDogJ9in24zaqSDYr9mGJyxcbiAgICAgICAgZGQ6ICclZCDYr9mGJyxcbiAgICAgICAgTTogJ9in24zaqSDZhdin24EnLFxuICAgICAgICBNTTogJyVkINmF2KfbgScsXG4gICAgICAgIHk6ICfYp9uM2qkg2LPYp9mEJyxcbiAgICAgICAgeXk6ICclZCDYs9in2YQnLFxuICAgIH0sXG4gICAgcHJlcGFyc2U6IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC/YjC9nLCAnLCcpO1xuICAgIH0sXG4gICAgcG9zdGZvcm1hdDogZnVuY3Rpb24gKHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoLywvZywgJ9iMJyk7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBVemJlayBMYXRpbiBbdXotbGF0bl1cbi8vISBhdXRob3IgOiBSYXN1bGJlayBNaXJ6YXlldiA6IGdpdGh1Yi5jb20vUmFzdWxiZWVla1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3V6LWxhdG4nLCB7XG4gICAgbW9udGhzOiAnWWFudmFyX0ZldnJhbF9NYXJ0X0FwcmVsX01heV9JeXVuX0l5dWxfQXZndXN0X1NlbnRhYnJfT2t0YWJyX05veWFicl9EZWthYnInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnWWFuX0Zldl9NYXJfQXByX01heV9JeXVuX0l5dWxfQXZnX1Nlbl9Pa3RfTm95X0Rlaycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5czogJ1lha3NoYW5iYV9EdXNoYW5iYV9TZXNoYW5iYV9DaG9yc2hhbmJhX1BheXNoYW5iYV9KdW1hX1NoYW5iYScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXNTaG9ydDogJ1lha19EdXNoX1Nlc2hfQ2hvcl9QYXlfSnVtX1NoYW4nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdZYV9EdV9TZV9DaG9fUGFfSnVfU2hhJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ0QgTU1NTSBZWVlZLCBkZGRkIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbQnVndW4gc29hdF0gTFQgW2RhXScsXG4gICAgICAgIG5leHREYXk6ICdbRXJ0YWdhXSBMVCBbZGFdJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV0nLFxuICAgICAgICBsYXN0RGF5OiAnW0tlY2hhIHNvYXRdIExUIFtkYV0nLFxuICAgICAgICBsYXN0V2VlazogXCJbTyd0Z2FuXSBkZGRkIFtrdW5pIHNvYXRdIExUIFtkYV1cIixcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICdZYXFpbiAlcyBpY2hpZGEnLFxuICAgICAgICBwYXN0OiAnQmlyIG5lY2hhICVzIG9sZGluJyxcbiAgICAgICAgczogJ3Nvbml5YScsXG4gICAgICAgIHNzOiAnJWQgc29uaXlhJyxcbiAgICAgICAgbTogJ2JpciBkYXFpcWEnLFxuICAgICAgICBtbTogJyVkIGRhcWlxYScsXG4gICAgICAgIGg6ICdiaXIgc29hdCcsXG4gICAgICAgIGhoOiAnJWQgc29hdCcsXG4gICAgICAgIGQ6ICdiaXIga3VuJyxcbiAgICAgICAgZGQ6ICclZCBrdW4nLFxuICAgICAgICBNOiAnYmlyIG95JyxcbiAgICAgICAgTU06ICclZCBveScsXG4gICAgICAgIHk6ICdiaXIgeWlsJyxcbiAgICAgICAgeXk6ICclZCB5aWwnLFxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDcsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDd0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogVXpiZWsgW3V6XVxuLy8hIGF1dGhvciA6IFNhcmRvciBNdW1pbm92IDogaHR0cHM6Ly9naXRodWIuY29tL211bWlub2ZmXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgndXonLCB7XG4gICAgbW9udGhzOiAn0Y/QvdCy0LDRgF/RhNC10LLRgNCw0Ltf0LzQsNGA0YJf0LDQv9GA0LXQu1/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LPRg9GB0YJf0YHQtdC90YLRj9Cx0YBf0L7QutGC0Y/QsdGAX9C90L7Rj9Cx0YBf0LTQtdC60LDQsdGAJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJ9GP0L3Qsl/RhNC10LJf0LzQsNGAX9Cw0L/RgF/QvNCw0Llf0LjRjtC9X9C40Y7Qu1/QsNCy0LNf0YHQtdC9X9C+0LrRgl/QvdC+0Y9f0LTQtdC6Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAn0K/QutGI0LDQvdCx0LBf0JTRg9GI0LDQvdCx0LBf0KHQtdGI0LDQvdCx0LBf0KfQvtGA0YjQsNC90LHQsF/Qn9Cw0LnRiNCw0L3QsdCwX9CW0YPQvNCwX9Co0LDQvdCx0LAnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ9Cv0LrRiF/QlNGD0Yhf0KHQtdGIX9Cn0L7RgF/Qn9Cw0Llf0JbRg9C8X9Co0LDQvScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ9Cv0Lpf0JTRg1/QodC1X9Cn0L5f0J/QsF/QltGDX9Co0LAnLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICBMTExMOiAnRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vQkdGD0LPRg9C9INGB0L7QsNGCXSBMVCBb0LTQsF0nLFxuICAgICAgICBuZXh0RGF5OiAnW9Ct0YDRgtCw0LPQsF0gTFQgW9C00LBdJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvQutGD0L3QuCDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgbGFzdERheTogJ1vQmtC10YfQsCDRgdC+0LDRgl0gTFQgW9C00LBdJyxcbiAgICAgICAgbGFzdFdlZWs6ICdb0KPRgtCz0LDQvV0gZGRkZCBb0LrRg9C90Lgg0YHQvtCw0YJdIExUIFvQtNCwXScsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAn0K/QutC40L0gJXMg0LjRh9C40LTQsCcsXG4gICAgICAgIHBhc3Q6ICfQkdC40YAg0L3QtdGH0LAgJXMg0L7Qu9C00LjQvScsXG4gICAgICAgIHM6ICfRhNGD0YDRgdCw0YInLFxuICAgICAgICBzczogJyVkINGE0YPRgNGB0LDRgicsXG4gICAgICAgIG06ICfQsdC40YAg0LTQsNC60LjQutCwJyxcbiAgICAgICAgbW06ICclZCDQtNCw0LrQuNC60LAnLFxuICAgICAgICBoOiAn0LHQuNGAINGB0L7QsNGCJyxcbiAgICAgICAgaGg6ICclZCDRgdC+0LDRgicsXG4gICAgICAgIGQ6ICfQsdC40YAg0LrRg9C9JyxcbiAgICAgICAgZGQ6ICclZCDQutGD0L0nLFxuICAgICAgICBNOiAn0LHQuNGAINC+0LknLFxuICAgICAgICBNTTogJyVkINC+0LknLFxuICAgICAgICB5OiAn0LHQuNGAINC50LjQuycsXG4gICAgICAgIHl5OiAnJWQg0LnQuNC7JyxcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA3LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFZpZXRuYW1lc2UgW3ZpXVxuLy8hIGF1dGhvciA6IEJhbmcgTmd1eWVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jhbmdua1xuLy8hIGF1dGhvciA6IENoaWVuIEtpcmEgOiBodHRwczovL2dpdGh1Yi5jb20vY2hpZW5raXJhXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgndmknLCB7XG4gICAgbW9udGhzOiAndGjDoW5nIDFfdGjDoW5nIDJfdGjDoW5nIDNfdGjDoW5nIDRfdGjDoW5nIDVfdGjDoW5nIDZfdGjDoW5nIDdfdGjDoW5nIDhfdGjDoW5nIDlfdGjDoW5nIDEwX3Row6FuZyAxMV90aMOhbmcgMTInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnVGhnIDAxX1RoZyAwMl9UaGcgMDNfVGhnIDA0X1RoZyAwNV9UaGcgMDZfVGhnIDA3X1RoZyAwOF9UaGcgMDlfVGhnIDEwX1RoZyAxMV9UaGcgMTInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgd2Vla2RheXM6ICdjaOG7pyBuaOG6rXRfdGjhu6kgaGFpX3Ro4bupIGJhX3Ro4bupIHTGsF90aOG7qSBuxINtX3Ro4bupIHPDoXVfdGjhu6kgYuG6o3knLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdDTl9UMl9UM19UNF9UNV9UNl9UNycuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ0NOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Jy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICBtZXJpZGllbVBhcnNlOiAvc2F8Y2gvaSxcbiAgICBpc1BNOiBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIC9eY2gkL2kudGVzdChpbnB1dCk7XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA8IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdzYScgOiAnU0EnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnY2gnIDogJ0NIJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBbbsSDbV0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBbbsSDbV0gWVlZWSBISDptbScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBEIE1NTU0gW27Eg21dIFlZWVkgSEg6bW0nLFxuICAgICAgICBsOiAnREQvTS9ZWVlZJyxcbiAgICAgICAgbGw6ICdEIE1NTSBZWVlZJyxcbiAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIGxsbGw6ICdkZGQsIEQgTU1NIFlZWVkgSEg6bW0nLFxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1tIw7RtIG5heSBsw7pjXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbTmfDoHkgbWFpIGzDumNdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt0deG6p24gdOG7m2kgbMO6Y10gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW0jDtG0gcXVhIGzDumNdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFt0deG6p24gdHLGsOG7m2MgbMO6Y10gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVzIHThu5tpJyxcbiAgICAgICAgcGFzdDogJyVzIHRyxrDhu5tjJyxcbiAgICAgICAgczogJ3bDoGkgZ2nDonknLFxuICAgICAgICBzczogJyVkIGdpw6J5JyxcbiAgICAgICAgbTogJ23hu5l0IHBow7p0JyxcbiAgICAgICAgbW06ICclZCBwaMO6dCcsXG4gICAgICAgIGg6ICdt4buZdCBnaeG7nScsXG4gICAgICAgIGhoOiAnJWQgZ2nhu50nLFxuICAgICAgICBkOiAnbeG7mXQgbmfDoHknLFxuICAgICAgICBkZDogJyVkIG5nw6B5JyxcbiAgICAgICAgdzogJ23hu5l0IHR14bqnbicsXG4gICAgICAgIHd3OiAnJWQgdHXhuqduJyxcbiAgICAgICAgTTogJ23hu5l0IHRow6FuZycsXG4gICAgICAgIE1NOiAnJWQgdGjDoW5nJyxcbiAgICAgICAgeTogJ23hu5l0IG7Eg20nLFxuICAgICAgICB5eTogJyVkIG7Eg20nLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9LyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBQc2V1ZG8gW3gtcHNldWRvXVxuLy8hIGF1dGhvciA6IEFuZHJldyBIb29kIDogaHR0cHM6Ly9naXRodWIuY29tL2FuZHJld2hvb2QxMjVcblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCd4LXBzZXVkbycsIHtcbiAgICBtb250aHM6ICdKfsOhw7HDusOhfnLDvV9GfsOpYnLDun7DoXLDvV9+TcOhcmN+aF/DgXB+csOtbF9+TcOhw71ffkrDusOxw6l+X0rDumx+w71fw4HDun5nw7pzdH5fU8OpcH50w6ltYn7DqXJfw5N+Y3TDs2J+w6lyX8ORfsOzdsOpbX5iw6lyX35Ew6ljw6l+bWLDqXInLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnSn7DocOxX35Gw6liX35Nw6FyX37DgXByX35Nw6HDvV9+SsO6w7FffkrDumxffsOBw7pnX35Tw6lwX37Dk2N0X37DkcOzdl9+RMOpYycuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICB3ZWVrZGF5czogJ1N+w7rDsWTDoX7DvV9Nw7N+w7Fkw6HDvX5fVMO6w6l+c2TDocO9fl9Xw6lkfsOxw6lzZH7DocO9X1R+aMO6cnN+ZMOhw71ffkZyw61kfsOhw71fU37DoXTDunJ+ZMOhw70nLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdTfsO6w7Fffk3Ds8OxX35Uw7rDqV9+V8OpZF9+VGjDul9+RnLDrV9+U8OhdCcuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ1N+w7pfTcOzfl9Uw7pfflfDqV9UfmhfRnJ+X1PDoScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIEw6ICdERC9NTS9ZWVlZJyxcbiAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIEhIOm1tJyxcbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdbVH7Ds2TDoX7DvSDDoXRdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tUfsOzbcOzfnJyw7N+dyDDoXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFvDoXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vDnX7DqXN0fsOpcmTDoX7DvSDDoXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTH7DoXN0XSBkZGRkIFvDoXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICfDrX7DsSAlcycsXG4gICAgICAgIHBhc3Q6ICclcyDDoX5nw7MnLFxuICAgICAgICBzOiAnw6EgfmbDqXcgfnPDqWPDs37DsWRzJyxcbiAgICAgICAgc3M6ICclZCBzfsOpY8Ozw7F+ZHMnLFxuICAgICAgICBtOiAnw6Egfm3DrcOxfsO6dMOpJyxcbiAgICAgICAgbW06ICclZCBtfsOtw7HDun50w6lzJyxcbiAgICAgICAgaDogJ8OhfsOxIGjDs37DunInLFxuICAgICAgICBoaDogJyVkIGh+w7PDunJzJyxcbiAgICAgICAgZDogJ8OhIH5kw6HDvScsXG4gICAgICAgIGRkOiAnJWQgZH7DocO9cycsXG4gICAgICAgIE06ICfDoSB+bcOzw7F+dGgnLFxuICAgICAgICBNTTogJyVkIG1+w7PDsXR+aHMnLFxuICAgICAgICB5OiAnw6EgfsO9w6nDoXInLFxuICAgICAgICB5eTogJyVkIMO9fsOpw6FycycsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgfSxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBZb3J1YmEgTmlnZXJpYSBbeW9dXG4vLyEgYXV0aG9yIDogQXRvbGFnYmUgQWJpc295ZSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRlbGEtYmF0b2xhZ2JlXG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgneW8nLCB7XG4gICAgbW9udGhzOiAnU+G6ucyBcuG6ucyBX0XMgHJlzIBsZcyAX+G6uHLhurnMgG5hzIBfScyAZ2JlzIFfRcyAYmliaV9PzIBrdcyAZHVfQWfhurltb19PzIBndcyBbl9Pd2V3ZV/hu4zMgHdhzIByYcyAX0JlzIFsdcyBX+G7jMyAcOG6ucyAzIAnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnU+G6ucyBcl9FzIBybF/hurhybl9JzIBnYl9FzIBiaV9PzIBrdcyAX0Fn4bq5X0/MgGd1zIFfT3dlX+G7jMyAd2HMgF9CZcyBbF/hu4zMgHDhurnMgMyAJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzOiAnQcyAacyAa3XMgV9BamXMgV9JzIBz4bq5zIFndW5f4buMauG7jcyBcnXMgV/hu4xq4buNzIFi4buNX+G6uHRpzIBfQcyAYmHMgW3hurnMgXRhJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICdBzIBpzIBrX0FqZcyBX0nMgHPhurnMgV/hu4xqcl/hu4xqYl/hurh0acyAX0HMgGJhzIEnLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICdBzIBpzIBfQWpfScyAc1/hu4xyX+G7jGJf4bq4dF9BzIBiJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTDogJ0REL01NL1lZWVknLFxuICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgaDptbSBBJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQScsXG4gICAgfSxcbiAgICBjYWxlbmRhcjoge1xuICAgICAgICBzYW1lRGF5OiAnW0/MgG5pzIAgbmldIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vhu4zMgGxhIG5pXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiBcImRkZGQgW+G7jHPhurnMgCB0b8yBbidi4buNXSBbbmldIExUXCIsXG4gICAgICAgIGxhc3REYXk6ICdbQcyAbmEgbmldIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdkZGRkIFvhu4xz4bq5zIAgdG/MgWzhu43MgV0gW25pXSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnbmnMgSAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBr4buNamHMgScsXG4gICAgICAgIHM6ICdpzIBz4bq5anXMgSBhYXlhzIEgZGllJyxcbiAgICAgICAgc3M6ICdhYXlhzIEgJWQnLFxuICAgICAgICBtOiAnacyAc+G6uWp1zIEga2FuJyxcbiAgICAgICAgbW06ICdpzIBz4bq5anXMgSAlZCcsXG4gICAgICAgIGg6ICd3YcyBa2F0aSBrYW4nLFxuICAgICAgICBoaDogJ3dhzIFrYXRpICVkJyxcbiAgICAgICAgZDogJ+G7jWrhu43MgSBrYW4nLFxuICAgICAgICBkZDogJ+G7jWrhu43MgSAlZCcsXG4gICAgICAgIE06ICdvc3XMgCBrYW4nLFxuICAgICAgICBNTTogJ29zdcyAICVkJyxcbiAgICAgICAgeTogJ+G7jWR1zIFuIGthbicsXG4gICAgICAgIHl5OiAn4buNZHXMgW4gJWQnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL+G7jWrhu43MgVxcc1xcZHsxLDJ9LyxcbiAgICBvcmRpbmFsOiAn4buNauG7jcyBICVkJyxcbiAgICB3ZWVrOiB7XG4gICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChDaGluYSkgW3poLWNuXVxuLy8hIGF1dGhvciA6IHN1dXBpYyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXVwaWNcbi8vISBhdXRob3IgOiBaZW5vIFplbmcgOiBodHRwczovL2dpdGh1Yi5jb20vemVub3plbmdcbi8vISBhdXRob3IgOiB1dTEwOSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91dTEwOVxuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLWNuJywge1xuICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn5ZGo5pelX+WRqOS4gF/lkajkuoxf5ZGo5LiJX+WRqOWbm1/lkajkupRf5ZGo5YWtJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6VBaOeCuW1t5YiGJyxcbiAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGRBaOeCuW1t5YiGJyxcbiAgICAgICAgbDogJ1lZWVkvTS9EJyxcbiAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn5YeM5pmoJyB8fCBtZXJpZGllbSA9PT0gJ+aXqeS4iicgfHwgbWVyaWRpZW0gPT09ICfkuIrljYgnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gJ+S4reWNiCdcbiAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+WHjOaZqCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgIHJldHVybiAn5Lit5Y2IJztcbiAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vku4rlpKldTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW+aYjuWkqV1MVCcsXG4gICAgICAgIG5leHRXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICBpZiAobm93LndlZWsoKSAhPT0gdGhpcy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1vkuItdZGRkTFQnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1vmnKxdZGRkTFQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV1MVCcsXG4gICAgICAgIGxhc3RXZWVrOiBmdW5jdGlvbiAobm93KSB7XG4gICAgICAgICAgICBpZiAodGhpcy53ZWVrKCkgIT09IG5vdy53ZWVrKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1vkuIpdZGRkTFQnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1vmnKxdZGRkTFQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh85ZGoKS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5ZGoJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVz5ZCOJyxcbiAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgczogJ+WHoOenkicsXG4gICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgbTogJzEg5YiG6ZKfJyxcbiAgICAgICAgbW06ICclZCDliIbpkp8nLFxuICAgICAgICBoOiAnMSDlsI/ml7YnLFxuICAgICAgICBoaDogJyVkIOWwj+aXticsXG4gICAgICAgIGQ6ICcxIOWkqScsXG4gICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgdzogJzEg5ZGoJyxcbiAgICAgICAgd3c6ICclZCDlkagnLFxuICAgICAgICBNOiAnMSDkuKrmnIgnLFxuICAgICAgICBNTTogJyVkIOS4quaciCcsXG4gICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgIHl5OiAnJWQg5bm0JyxcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgICAgLy8gR0IvVCA3NDA4LTE5OTTjgIrmlbDmja7lhYPlkozkuqTmjaLmoLzlvI/Ct+S/oeaBr+S6pOaNosK35pel5pyf5ZKM5pe26Ze06KGo56S65rOV44CL5LiOSVNPIDg2MDE6MTk4OOetieaViFxuICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogQ2hpbmVzZSAoSG9uZyBLb25nKSBbemgtaGtdXG4vLyEgYXV0aG9yIDogQmVuIDogaHR0cHM6Ly9naXRodWIuY29tL2Jlbi1saW5cbi8vISBhdXRob3IgOiBDaHJpcyBMYW0gOiBodHRwczovL2dpdGh1Yi5jb20vaGVoYWNocmlzXG4vLyEgYXV0aG9yIDogS29uc3RhbnRpbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9za2ZkXG4vLyEgYXV0aG9yIDogQW50aG9ueSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRob255bGF1XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vbW9tZW50JztcblxuZXhwb3J0IGRlZmF1bHQgbW9tZW50LmRlZmluZUxvY2FsZSgnemgtaGsnLCB7XG4gICAgbW9udGhzOiAn5LiA5pyIX+S6jOaciF/kuInmnIhf5Zub5pyIX+S6lOaciF/lha3mnIhf5LiD5pyIX+WFq+aciF/kuZ3mnIhf5Y2B5pyIX+WNgeS4gOaciF/ljYHkuozmnIgnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIG1vbnRoc1Nob3J0OiAnMeaciF8y5pyIXzPmnIhfNOaciF815pyIXzbmnIhfN+aciF845pyIXznmnIhfMTDmnIhfMTHmnIhfMTLmnIgnLnNwbGl0KFxuICAgICAgICAnXydcbiAgICApLFxuICAgIHdlZWtkYXlzOiAn5pif5pyf5pelX+aYn+acn+S4gF/mmJ/mnJ/kuoxf5pif5pyf5LiJX+aYn+acn+Wbm1/mmJ/mnJ/kupRf5pif5pyf5YWtJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzU2hvcnQ6ICfpgLHml6Vf6YCx5LiAX+mAseS6jF/pgLHkuIlf6YCx5ZubX+mAseS6lF/pgLHlha0nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNNaW46ICfml6Vf5LiAX+S6jF/kuIlf5ZubX+S6lF/lha0nLnNwbGl0KCdfJyksXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgTDogJ1lZWVkvTU0vREQnLFxuICAgICAgICBMTDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgIExMTDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgIExMTEw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICAgICAgbDogJ1lZWVkvTS9EJyxcbiAgICAgICAgbGw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICBsbGw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICBsbGxsOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgfSxcbiAgICBtZXJpZGllbVBhcnNlOiAv5YeM5pmofOaXqeS4inzkuIrljYh85Lit5Y2IfOS4i+WNiHzmmZrkuIovLFxuICAgIG1lcmlkaWVtSG91cjogZnVuY3Rpb24gKGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIGlmIChob3VyID09PSAxMikge1xuICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1lcmlkaWVtID09PSAn5YeM5pmoJyB8fCBtZXJpZGllbSA9PT0gJ+aXqeS4iicgfHwgbWVyaWRpZW0gPT09ICfkuIrljYgnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4reWNiCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyID49IDExID8gaG91ciA6IGhvdXIgKyAxMjtcbiAgICAgICAgfSBlbHNlIGlmIChtZXJpZGllbSA9PT0gJ+S4i+WNiCcgfHwgbWVyaWRpZW0gPT09ICfmmZrkuIonKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciArIDEyO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBtZXJpZGllbTogZnVuY3Rpb24gKGhvdXIsIG1pbnV0ZSwgaXNMb3dlcikge1xuICAgICAgICB2YXIgaG0gPSBob3VyICogMTAwICsgbWludXRlO1xuICAgICAgICBpZiAoaG0gPCA2MDApIHtcbiAgICAgICAgICAgIHJldHVybiAn5YeM5pmoJztcbiAgICAgICAgfSBlbHNlIGlmIChobSA8IDkwMCkge1xuICAgICAgICAgICAgcmV0dXJuICfml6nkuIonO1xuICAgICAgICB9IGVsc2UgaWYgKGhtIDwgMTIwMCkge1xuICAgICAgICAgICAgcmV0dXJuICfkuIrljYgnO1xuICAgICAgICB9IGVsc2UgaWYgKGhtID09PSAxMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxODAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ+aZmuS4iic7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdb5LuK5aSpXUxUJyxcbiAgICAgICAgbmV4dERheTogJ1vmmI7lpKldTFQnLFxuICAgICAgICBuZXh0V2VlazogJ1vkuItdZGRkZExUJyxcbiAgICAgICAgbGFzdERheTogJ1vmmKjlpKldTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1vkuIpdZGRkZExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9LFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSjml6V85pyIfOmAsSkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIsIHBlcmlvZCkge1xuICAgICAgICBzd2l0Y2ggKHBlcmlvZCkge1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgIGNhc2UgJ0RERCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfml6UnO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfmnIgnO1xuICAgICAgICAgICAgY2FzZSAndyc6XG4gICAgICAgICAgICBjYXNlICdXJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+mAsSc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICBmdXR1cmU6ICclc+W+jCcsXG4gICAgICAgIHBhc3Q6ICclc+WJjScsXG4gICAgICAgIHM6ICflub7np5InLFxuICAgICAgICBzczogJyVkIOenkicsXG4gICAgICAgIG06ICcxIOWIhumQmCcsXG4gICAgICAgIG1tOiAnJWQg5YiG6ZCYJyxcbiAgICAgICAgaDogJzEg5bCP5pmCJyxcbiAgICAgICAgaGg6ICclZCDlsI/mmYInLFxuICAgICAgICBkOiAnMSDlpKknLFxuICAgICAgICBkZDogJyVkIOWkqScsXG4gICAgICAgIE06ICcxIOWAi+aciCcsXG4gICAgICAgIE1NOiAnJWQg5YCL5pyIJyxcbiAgICAgICAgeTogJzEg5bm0JyxcbiAgICAgICAgeXk6ICclZCDlubQnLFxuICAgIH0sXG59KTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBDaGluZXNlIChNYWNhdSkgW3poLW1vXVxuLy8hIGF1dGhvciA6IEJlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZW4tbGluXG4vLyEgYXV0aG9yIDogQ2hyaXMgTGFtIDogaHR0cHM6Ly9naXRodWIuY29tL2hlaGFjaHJpc1xuLy8hIGF1dGhvciA6IFRhbiBZdWFuaG9uZyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sZTB0YW5cblxuaW1wb3J0IG1vbWVudCBmcm9tICcuLi9tb21lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBtb21lbnQuZGVmaW5lTG9jYWxlKCd6aC1tbycsIHtcbiAgICBtb250aHM6ICfkuIDmnIhf5LqM5pyIX+S4ieaciF/lm5vmnIhf5LqU5pyIX+WFreaciF/kuIPmnIhf5YWr5pyIX+S5neaciF/ljYHmnIhf5Y2B5LiA5pyIX+WNgeS6jOaciCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgbW9udGhzU2hvcnQ6ICcx5pyIXzLmnIhfM+aciF805pyIXzXmnIhfNuaciF835pyIXzjmnIhfOeaciF8xMOaciF8xMeaciF8xMuaciCcuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgd2Vla2RheXM6ICfmmJ/mnJ/ml6Vf5pif5pyf5LiAX+aYn+acn+S6jF/mmJ/mnJ/kuIlf5pif5pyf5ZubX+aYn+acn+S6lF/mmJ/mnJ/lha0nLnNwbGl0KCdfJyksXG4gICAgd2Vla2RheXNTaG9ydDogJ+mAseaXpV/pgLHkuIBf6YCx5LqMX+mAseS4iV/pgLHlm5tf6YCx5LqUX+mAseWFrScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c01pbjogJ+aXpV/kuIBf5LqMX+S4iV/lm5tf5LqUX+WFrScuc3BsaXQoJ18nKSxcbiAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICBMOiAnREQvTU0vWVlZWScsXG4gICAgICAgIExMOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgTExMOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgTExMTDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgICAgICBsOiAnRC9NL1lZWVknLFxuICAgICAgICBsbDogJ1lZWVnlubRN5pyIROaXpScsXG4gICAgICAgIGxsbDogJ1lZWVnlubRN5pyIROaXpSBISDptbScsXG4gICAgICAgIGxsbGw6ICdZWVlZ5bm0TeaciETml6VkZGRkIEhIOm1tJyxcbiAgICB9LFxuICAgIG1lcmlkaWVtUGFyc2U6IC/lh4zmmah85pep5LiKfOS4iuWNiHzkuK3ljYh85LiL5Y2IfOaZmuS4ii8sXG4gICAgbWVyaWRpZW1Ib3VyOiBmdW5jdGlvbiAoaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgaWYgKGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWVyaWRpZW0gPT09ICflh4zmmagnIHx8IG1lcmlkaWVtID09PSAn5pep5LiKJyB8fCBtZXJpZGllbSA9PT0gJ+S4iuWNiCcpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5Lit5Y2IJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgPj0gMTEgPyBob3VyIDogaG91ciArIDEyO1xuICAgICAgICB9IGVsc2UgaWYgKG1lcmlkaWVtID09PSAn5LiL5Y2IJyB8fCBtZXJpZGllbSA9PT0gJ+aZmuS4iicpIHtcbiAgICAgICAgICAgIHJldHVybiBob3VyICsgMTI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIG1lcmlkaWVtOiBmdW5jdGlvbiAoaG91ciwgbWludXRlLCBpc0xvd2VyKSB7XG4gICAgICAgIHZhciBobSA9IGhvdXIgKiAxMDAgKyBtaW51dGU7XG4gICAgICAgIGlmIChobSA8IDYwMCkge1xuICAgICAgICAgICAgcmV0dXJuICflh4zmmagnO1xuICAgICAgICB9IGVsc2UgaWYgKGhtIDwgOTAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+aXqeS4iic7XG4gICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMTMwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+S4iuWNiCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxMjMwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+S4reWNiCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG0gPCAxODAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+S4i+WNiCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ+aZmuS4iic7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNhbGVuZGFyOiB7XG4gICAgICAgIHNhbWVEYXk6ICdb5LuK5aSpXSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdb5piO5aSpXSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnW+S4i11kZGRkIExUJyxcbiAgICAgICAgbGFzdERheTogJ1vmmKjlpKldIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdb5LiKXWRkZGQgTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH0sXG4gICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KOaXpXzmnIh86YCxKS8sXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlciwgcGVyaW9kKSB7XG4gICAgICAgIHN3aXRjaCAocGVyaW9kKSB7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgY2FzZSAnREREJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aXpSc7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgJ+aciCc7XG4gICAgICAgICAgICBjYXNlICd3JzpcbiAgICAgICAgICAgIGNhc2UgJ1cnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn6YCxJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgIGZ1dHVyZTogJyVz5YWnJyxcbiAgICAgICAgcGFzdDogJyVz5YmNJyxcbiAgICAgICAgczogJ+W5vuenkicsXG4gICAgICAgIHNzOiAnJWQg56eSJyxcbiAgICAgICAgbTogJzEg5YiG6ZCYJyxcbiAgICAgICAgbW06ICclZCDliIbpkJgnLFxuICAgICAgICBoOiAnMSDlsI/mmYInLFxuICAgICAgICBoaDogJyVkIOWwj+aZgicsXG4gICAgICAgIGQ6ICcxIOWkqScsXG4gICAgICAgIGRkOiAnJWQg5aSpJyxcbiAgICAgICAgTTogJzEg5YCL5pyIJyxcbiAgICAgICAgTU06ICclZCDlgIvmnIgnLFxuICAgICAgICB5OiAnMSDlubQnLFxuICAgICAgICB5eTogJyVkIOW5tCcsXG4gICAgfSxcbn0pO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IENoaW5lc2UgKFRhaXdhbikgW3poLXR3XVxuLy8hIGF1dGhvciA6IEJlbiA6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZW4tbGluXG4vLyEgYXV0aG9yIDogQ2hyaXMgTGFtIDogaHR0cHM6Ly9naXRodWIuY29tL2hlaGFjaHJpc1xuXG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL21vbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3poLXR3Jywge1xuICAgIG1vbnRoczogJ+S4gOaciF/kuozmnIhf5LiJ5pyIX+Wbm+aciF/kupTmnIhf5YWt5pyIX+S4g+aciF/lhavmnIhf5Lmd5pyIX+WNgeaciF/ljYHkuIDmnIhf5Y2B5LqM5pyIJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBtb250aHNTaG9ydDogJzHmnIhfMuaciF8z5pyIXzTmnIhfNeaciF825pyIXzfmnIhfOOaciF855pyIXzEw5pyIXzEx5pyIXzEy5pyIJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICB3ZWVrZGF5czogJ+aYn+acn+aXpV/mmJ/mnJ/kuIBf5pif5pyf5LqMX+aYn+acn+S4iV/mmJ/mnJ/lm5tf5pif5pyf5LqUX+aYn+acn+WFrScuc3BsaXQoJ18nKSxcbiAgICB3ZWVrZGF5c1Nob3J0OiAn6YCx5pelX+mAseS4gF/pgLHkuoxf6YCx5LiJX+mAseWbm1/pgLHkupRf6YCx5YWtJy5zcGxpdCgnXycpLFxuICAgIHdlZWtkYXlzTWluOiAn5pelX+S4gF/kuoxf5LiJX+Wbm1/kupRf5YWtJy5zcGxpdCgnXycpLFxuICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgIEw6ICdZWVlZL01NL0REJyxcbiAgICAgICAgTEw6ICdZWVlZ5bm0TeaciETml6UnLFxuICAgICAgICBMTEw6ICdZWVlZ5bm0TeaciETml6UgSEg6bW0nLFxuICAgICAgICBMTExMOiAnWVlZWeW5tE3mnIhE5pelZGRkZCBISDptbScsXG4gICAgICAgIGw6ICdZWVlZL00vRCcsXG4gICAgICAgIGxsOiAnWVlZWeW5tE3mnIhE5pelJyxcbiAgICAgICAgbGxsOiAnWVlZWeW5tE3mnIhE5pelIEhIOm1tJyxcbiAgICAgICAgbGxsbDogJ1lZWVnlubRN5pyIROaXpWRkZGQgSEg6bW0nLFxuICAgIH0sXG4gICAgbWVyaWRpZW1QYXJzZTogL+WHjOaZqHzml6nkuIp85LiK5Y2IfOS4reWNiHzkuIvljYh85pma5LiKLyxcbiAgICBtZXJpZGllbUhvdXI6IGZ1bmN0aW9uIChob3VyLCBtZXJpZGllbSkge1xuICAgICAgICBpZiAoaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXJpZGllbSA9PT0gJ+WHjOaZqCcgfHwgbWVyaWRpZW0gPT09ICfml6nkuIonIHx8IG1lcmlkaWVtID09PSAn5LiK5Y2IJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuK3ljYgnKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91ciA+PSAxMSA/IGhvdXIgOiBob3VyICsgMTI7XG4gICAgICAgIH0gZWxzZSBpZiAobWVyaWRpZW0gPT09ICfkuIvljYgnIHx8IG1lcmlkaWVtID09PSAn5pma5LiKJykge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXIgKyAxMjtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgbWVyaWRpZW06IGZ1bmN0aW9uIChob3VyLCBtaW51dGUsIGlzTG93ZXIpIHtcbiAgICAgICAgdmFyIGhtID0gaG91ciAqIDEwMCArIG1pbnV0ZTtcbiAgICAgICAgaWYgKGhtIDwgNjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ+WHjOaZqCc7XG4gICAgICAgIH0gZWxzZSBpZiAoaG0gPCA5MDApIHtcbiAgICAgICAgICAgIHJldHVybiAn5pep5LiKJztcbiAgICAgICAgfSBlbHNlIGlmIChobSA8IDExMzApIHtcbiAgICAgICAgICAgIHJldHVybiAn5LiK5Y2IJztcbiAgICAgICAgfSBlbHNlIGlmIChobSA8IDEyMzApIHtcbiAgICAgICAgICAgIHJldHVybiAn5Lit5Y2IJztcbiAgICAgICAgfSBlbHNlIGlmIChobSA8IDE4MDApIHtcbiAgICAgICAgICAgIHJldHVybiAn5LiL5Y2IJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAn5pma5LiKJztcbiAgICAgICAgfVxuICAgIH0sXG4gICAgY2FsZW5kYXI6IHtcbiAgICAgICAgc2FtZURheTogJ1vku4rlpKldIExUJyxcbiAgICAgICAgbmV4dERheTogJ1vmmI7lpKldIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdb5LiLXWRkZGQgTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW+aYqOWkqV0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1vkuIpdZGRkZCBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfSxcbiAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0o5pelfOaciHzpgLEpLyxcbiAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyLCBwZXJpb2QpIHtcbiAgICAgICAgc3dpdGNoIChwZXJpb2QpIHtcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICBjYXNlICdEREQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pelJztcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyAn5pyIJztcbiAgICAgICAgICAgIGNhc2UgJ3cnOlxuICAgICAgICAgICAgY2FzZSAnVyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciArICfpgLEnO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgICAgICB9XG4gICAgfSxcbiAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgZnV0dXJlOiAnJXPlvownLFxuICAgICAgICBwYXN0OiAnJXPliY0nLFxuICAgICAgICBzOiAn5bm+56eSJyxcbiAgICAgICAgc3M6ICclZCDnp5InLFxuICAgICAgICBtOiAnMSDliIbpkJgnLFxuICAgICAgICBtbTogJyVkIOWIhumQmCcsXG4gICAgICAgIGg6ICcxIOWwj+aZgicsXG4gICAgICAgIGhoOiAnJWQg5bCP5pmCJyxcbiAgICAgICAgZDogJzEg5aSpJyxcbiAgICAgICAgZGQ6ICclZCDlpKknLFxuICAgICAgICBNOiAnMSDlgIvmnIgnLFxuICAgICAgICBNTTogJyVkIOWAi+aciCcsXG4gICAgICAgIHk6ICcxIOW5tCcsXG4gICAgICAgIHl5OiAnJWQg5bm0JyxcbiAgICB9LFxufSk7XG4iLCIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMjkuMVxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbnZhciBob29rQ2FsbGJhY2s7XG5cbmZ1bmN0aW9uIGhvb2tzKCkge1xuICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cblxuLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbi8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkoaW5wdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSdcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgICBpbnB1dCAhPSBudWxsICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBiKTtcbn1cblxuZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrO1xuICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIoaW5wdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE51bWJlcl0nXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IERhdGVdJ1xuICAgICk7XG59XG5cbmZ1bmN0aW9uIG1hcChhcnIsIGZuKSB7XG4gICAgdmFyIHJlcyA9IFtdLFxuICAgICAgICBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgZm9yICh2YXIgaSBpbiBiKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgIGEudG9TdHJpbmcgPSBiLnRvU3RyaW5nO1xuICAgIH1cblxuICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgYS52YWx1ZU9mID0gYi52YWx1ZU9mO1xuICAgIH1cblxuICAgIHJldHVybiBhO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgIHJldHVybiB7XG4gICAgICAgIGVtcHR5OiBmYWxzZSxcbiAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgdW51c2VkSW5wdXQ6IFtdLFxuICAgICAgICBvdmVyZmxvdzogLTIsXG4gICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgIG51bGxJbnB1dDogZmFsc2UsXG4gICAgICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgaW52YWxpZEZvcm1hdDogZmFsc2UsXG4gICAgICAgIHVzZXJJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgIHBhcnNlZERhdGVQYXJ0czogW10sXG4gICAgICAgIGVyYTogbnVsbCxcbiAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgIHJmYzI4MjI6IGZhbHNlLFxuICAgICAgICB3ZWVrZGF5TWlzbWF0Y2g6IGZhbHNlLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgbS5fcGYgPSBkZWZhdWx0UGFyc2luZ0ZsYWdzKCk7XG4gICAgfVxuICAgIHJldHVybiBtLl9wZjtcbn1cblxudmFyIHNvbWU7XG5pZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICBzb21lID0gQXJyYXkucHJvdG90eXBlLnNvbWU7XG59IGVsc2Uge1xuICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICBpO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHtcbiAgICAgICAgdmFyIGZsYWdzID0gZ2V0UGFyc2luZ0ZsYWdzKG0pLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBzb21lLmNhbGwoZmxhZ3MucGFyc2VkRGF0ZVBhcnRzLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpICE9IG51bGw7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICFpc05hTihtLl9kLmdldFRpbWUoKSkgJiZcbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG5cbiAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCAmJlxuICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbiA9PSBudWxsIHx8ICFPYmplY3QuaXNGcm96ZW4obSkpIHtcbiAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWQoZmxhZ3MpIHtcbiAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgIGV4dGVuZChnZXRQYXJzaW5nRmxhZ3MobSksIGZsYWdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gUGx1Z2lucyB0aGF0IGFkZCBwcm9wZXJ0aWVzIHNob3VsZCBhbHNvIGFkZCB0aGUga2V5IGhlcmUgKG51bGwgdmFsdWUpLFxuLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbnZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgdmFyIGksIHByb3AsIHZhbDtcblxuICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICB0by5faXNBTW9tZW50T2JqZWN0ID0gZnJvbS5faXNBTW9tZW50T2JqZWN0O1xuICAgIH1cbiAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgIHRvLl9pID0gZnJvbS5faTtcbiAgICB9XG4gICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICB0by5fZiA9IGZyb20uX2Y7XG4gICAgfVxuICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgdG8uX2wgPSBmcm9tLl9sO1xuICAgIH1cbiAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgdG8uX3N0cmljdCA9IGZyb20uX3N0cmljdDtcbiAgICB9XG4gICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgIHRvLl90em0gPSBmcm9tLl90em07XG4gICAgfVxuICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgIHRvLl9pc1VUQyA9IGZyb20uX2lzVVRDO1xuICAgIH1cbiAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgdG8uX29mZnNldCA9IGZyb20uX29mZnNldDtcbiAgICB9XG4gICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgdG8uX3BmID0gZ2V0UGFyc2luZ0ZsYWdzKGZyb20pO1xuICAgIH1cbiAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgdG8uX2xvY2FsZSA9IGZyb20uX2xvY2FsZTtcbiAgICB9XG5cbiAgICBpZiAobW9tZW50UHJvcGVydGllcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHZhbCA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0bztcbn1cblxuLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbmZ1bmN0aW9uIE1vbWVudChjb25maWcpIHtcbiAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICB9XG4gICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wIGluIGNhc2UgdXBkYXRlT2Zmc2V0IGNyZWF0ZXMgbmV3IG1vbWVudFxuICAgIC8vIG9iamVjdHMuXG4gICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgIHJldHVybiAoXG4gICAgICAgIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbClcbiAgICApO1xufVxuXG5mdW5jdGlvbiB3YXJuKG1zZykge1xuICAgIGlmIChcbiAgICAgICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID09PSBmYWxzZSAmJlxuICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgY29uc29sZS53YXJuXG4gICAgKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICBhcmcsXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBrZXk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgbXNnICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sIGZuKTtcbn1cblxudmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBkZXByZWNhdGVTaW1wbGUobmFtZSwgbXNnKSB7XG4gICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgIH1cbiAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgIGRlcHJlY2F0aW9uc1tuYW1lXSA9IHRydWU7XG4gICAgfVxufVxuXG5ob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPSBmYWxzZTtcbmhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgKTtcbn1cblxuZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgIHZhciBwcm9wLCBpO1xuICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgcHJvcCA9IGNvbmZpZ1tpXTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAvLyBMZW5pZW50IG9yZGluYWwgcGFyc2luZyBhY2NlcHRzIGp1c3QgYSBudW1iZXIgaW4gYWRkaXRpb24gdG9cbiAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICB0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgL1xcZHsxLDJ9Ly5zb3VyY2VcbiAgICApO1xufVxuXG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjaGlsZENvbmZpZykge1xuICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgIHByb3A7XG4gICAgZm9yIChwcm9wIGluIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0ge307XG4gICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkQ29uZmlnW3Byb3BdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHJlc1twcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhhc093blByb3AocGFyZW50Q29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZXQoY29uZmlnKTtcbiAgICB9XG59XG5cbnZhciBrZXlzO1xuXG5pZiAoT2JqZWN0LmtleXMpIHtcbiAgICBrZXlzID0gT2JqZWN0LmtleXM7XG59IGVsc2Uge1xuICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgcmVzID0gW107XG4gICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICByZXMucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG59XG5cbnZhciBkZWZhdWx0Q2FsZW5kYXIgPSB7XG4gICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgIHNhbWVFbHNlOiAnTCcsXG59O1xuXG5mdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgdmFyIG91dHB1dCA9IHRoaXMuX2NhbGVuZGFyW2tleV0gfHwgdGhpcy5fY2FsZW5kYXJbJ3NhbWVFbHNlJ107XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbn1cblxuZnVuY3Rpb24gemVyb0ZpbGwobnVtYmVyLCB0YXJnZXRMZW5ndGgsIGZvcmNlU2lnbikge1xuICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgc2lnbiA9IG51bWJlciA+PSAwO1xuICAgIHJldHVybiAoXG4gICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICBNYXRoLnBvdygxMCwgTWF0aC5tYXgoMCwgemVyb3NUb0ZpbGwpKS50b1N0cmluZygpLnN1YnN0cigxKSArXG4gICAgICAgIGFic051bWJlclxuICAgICk7XG59XG5cbnZhciBmb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLFxuICAgIGZvcm1hdEZ1bmN0aW9ucyA9IHt9LFxuICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbi8vIHRva2VuOiAgICAnTSdcbi8vIHBhZGRlZDogICBbJ01NJywgMl1cbi8vIG9yZGluYWw6ICAnTW8nXG4vLyBjYWxsYmFjazogZnVuY3Rpb24gKCkgeyB0aGlzLm1vbnRoKCkgKyAxIH1cbmZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnc3RyaW5nJykge1xuICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmICh0b2tlbikge1xuICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0gPSBmdW5jO1xuICAgIH1cbiAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3BhZGRlZFswXV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoXG4gICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICApO1xuICAgICAgICB9O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xufVxuXG5mdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICBpLFxuICAgICAgICBsZW5ndGg7XG5cbiAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dKSB7XG4gICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycmF5W2ldID0gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKG1vbSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKVxuICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICA6IGFycmF5W2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbn1cblxuLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG5mdW5jdGlvbiBmb3JtYXRNb21lbnQobSwgZm9ybWF0KSB7XG4gICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICB9XG5cbiAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSB8fCBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KTtcblxuICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbG9jYWxlKSB7XG4gICAgdmFyIGkgPSA1O1xuXG4gICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubG9uZ0RhdGVGb3JtYXQoaW5wdXQpIHx8IGlucHV0O1xuICAgIH1cblxuICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgIHdoaWxlIChpID49IDAgJiYgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2Vuc1xuICAgICAgICApO1xuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgaSAtPSAxO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JtYXQ7XG59XG5cbnZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XG4gICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICBMVDogJ2g6bW0gQScsXG4gICAgTDogJ01NL0REL1lZWVknLFxuICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICBMTEw6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICBMTExMOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQScsXG59O1xuXG5mdW5jdGlvbiBsb25nRGF0ZUZvcm1hdChrZXkpIHtcbiAgICB2YXIgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSxcbiAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICBpZiAoZm9ybWF0IHx8ICFmb3JtYXRVcHBlcikge1xuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlclxuICAgICAgICAubWF0Y2goZm9ybWF0dGluZ1Rva2VucylcbiAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdG9rID09PSAnTU1NTScgfHxcbiAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICB0b2sgPT09ICdERCcgfHxcbiAgICAgICAgICAgICAgICB0b2sgPT09ICdkZGRkJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zbGljZSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgIH0pXG4gICAgICAgIC5qb2luKCcnKTtcblxuICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xufVxuXG52YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XG5cbmZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbnZhbGlkRGF0ZTtcbn1cblxudmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSA9IC9cXGR7MSwyfS87XG5cbmZ1bmN0aW9uIG9yZGluYWwobnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xufVxuXG52YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgcGFzdDogJyVzIGFnbycsXG4gICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgbTogJ2EgbWludXRlJyxcbiAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgIGg6ICdhbiBob3VyJyxcbiAgICBoaDogJyVkIGhvdXJzJyxcbiAgICBkOiAnYSBkYXknLFxuICAgIGRkOiAnJWQgZGF5cycsXG4gICAgdzogJ2Egd2VlaycsXG4gICAgd3c6ICclZCB3ZWVrcycsXG4gICAgTTogJ2EgbW9udGgnLFxuICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICB5OiAnYSB5ZWFyJyxcbiAgICB5eTogJyVkIHllYXJzJyxcbn07XG5cbmZ1bmN0aW9uIHJlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KVxuICAgICAgICA/IG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpXG4gICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG59XG5cbmZ1bmN0aW9uIHBhc3RGdXR1cmUoZGlmZiwgb3V0cHV0KSB7XG4gICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihmb3JtYXQpID8gZm9ybWF0KG91dHB1dCkgOiBmb3JtYXQucmVwbGFjZSgvJXMvaSwgb3V0cHV0KTtcbn1cblxudmFyIGFsaWFzZXMgPSB7fTtcblxuZnVuY3Rpb24gYWRkVW5pdEFsaWFzKHVuaXQsIHNob3J0aGFuZCkge1xuICAgIHZhciBsb3dlckNhc2UgPSB1bml0LnRvTG93ZXJDYXNlKCk7XG4gICAgYWxpYXNlc1tsb3dlckNhc2VdID0gYWxpYXNlc1tsb3dlckNhc2UgKyAncyddID0gYWxpYXNlc1tzaG9ydGhhbmRdID0gdW5pdDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVW5pdHModW5pdHMpIHtcbiAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IHt9LFxuICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgcHJvcDtcblxuICAgIGZvciAocHJvcCBpbiBpbnB1dE9iamVjdCkge1xuICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZFByb3ApIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xufVxuXG52YXIgcHJpb3JpdGllcyA9IHt9O1xuXG5mdW5jdGlvbiBhZGRVbml0UHJpb3JpdHkodW5pdCwgcHJpb3JpdHkpIHtcbiAgICBwcmlvcml0aWVzW3VuaXRdID0gcHJpb3JpdHk7XG59XG5cbmZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgdTtcbiAgICBmb3IgKHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICB1bml0cy5wdXNoKHsgdW5pdDogdSwgcHJpb3JpdHk6IHByaW9yaXRpZXNbdV0gfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHVuaXRzO1xufVxuXG5mdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGFic0Zsb29yKG51bWJlcikge1xuICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgIC8vIC0wIC0+IDBcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpIHx8IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pIHtcbiAgICB2YXIgY29lcmNlZE51bWJlciA9ICthcmd1bWVudEZvckNvZXJjaW9uLFxuICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICBpZiAoY29lcmNlZE51bWJlciAhPT0gMCAmJiBpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSkge1xuICAgICAgICB2YWx1ZSA9IGFic0Zsb29yKGNvZXJjZWROdW1iZXIpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgdW5pdCk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBnZXQobW9tLCB1bml0KSB7XG4gICAgcmV0dXJuIG1vbS5pc1ZhbGlkKClcbiAgICAgICAgPyBtb20uX2RbJ2dldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0oKVxuICAgICAgICA6IE5hTjtcbn1cblxuZnVuY3Rpb24gc2V0JDEobW9tLCB1bml0LCB2YWx1ZSkge1xuICAgIGlmIChtb20uaXNWYWxpZCgpICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdW5pdCA9PT0gJ0Z1bGxZZWFyJyAmJlxuICAgICAgICAgICAgaXNMZWFwWWVhcihtb20ueWVhcigpKSAmJlxuICAgICAgICAgICAgbW9tLm1vbnRoKCkgPT09IDEgJiZcbiAgICAgICAgICAgIG1vbS5kYXRlKCkgPT09IDI5XG4gICAgICAgICkge1xuICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0oXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgbW9tLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgZGF5c0luTW9udGgodmFsdWUsIG1vbS5tb250aCgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIE1PTUVOVFNcblxuZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gc3RyaW5nU2V0KHVuaXRzLCB2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICB2YXIgcHJpb3JpdGl6ZWQgPSBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzKSxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufVxuXG52YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgbWF0Y2gyID0gL1xcZFxcZC8sIC8vICAgICAgMDAgLSA5OVxuICAgIG1hdGNoMyA9IC9cXGR7M30vLCAvLyAgICAgMDAwIC0gOTk5XG4gICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgbWF0Y2g2ID0gL1srLV0/XFxkezZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgIG1hdGNoMXRvMiA9IC9cXGRcXGQ/LywgLy8gICAgICAgMCAtIDk5XG4gICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgIG1hdGNoNXRvNiA9IC9cXGRcXGRcXGRcXGRcXGRcXGQ/LywgLy8gICA5OTk5OSAtIDk5OTk5OVxuICAgIG1hdGNoMXRvMyA9IC9cXGR7MSwzfS8sIC8vICAgICAgIDAgLSA5OTlcbiAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgIG1hdGNoMXRvNiA9IC9bKy1dP1xcZHsxLDZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgIG1hdGNoVW5zaWduZWQgPSAvXFxkKy8sIC8vICAgICAgIDAgLSBpbmZcbiAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgbWF0Y2hPZmZzZXQgPSAvWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2ksIC8vICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naSwgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuXG4gICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgIG1hdGNoV29yZCA9IC9bMC05XXswLDI1Nn1bJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkYwN1xcdUZGMTAtXFx1RkZFRl17MSwyNTZ9fFtcXHUwNjAwLVxcdTA2RkZcXC9dezEsMjU2fShcXHMqP1tcXHUwNjAwLVxcdTA2RkZdezEsMjU2fSl7MSwyfS9pLFxuICAgIHJlZ2V4ZXM7XG5cbnJlZ2V4ZXMgPSB7fTtcblxuZnVuY3Rpb24gYWRkUmVnZXhUb2tlbih0b2tlbiwgcmVnZXgsIHN0cmljdFJlZ2V4KSB7XG4gICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KVxuICAgICAgICA/IHJlZ2V4XG4gICAgICAgIDogZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGVEYXRhKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpc1N0cmljdCAmJiBzdHJpY3RSZWdleCA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgICAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpIHtcbiAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG59XG5cbi8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbmZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICByZXR1cm4gcmVnZXhFc2NhcGUoXG4gICAgICAgIHNcbiAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxcXChcXFspfFxcXFwoXFxdKXxcXFsoW15cXF1cXFtdKilcXF18XFxcXCguKS9nLCBmdW5jdGlvbiAoXG4gICAgICAgICAgICAgICAgbWF0Y2hlZCxcbiAgICAgICAgICAgICAgICBwMSxcbiAgICAgICAgICAgICAgICBwMixcbiAgICAgICAgICAgICAgICBwMyxcbiAgICAgICAgICAgICAgICBwNFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgfSlcbiAgICApO1xufVxuXG5mdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG59XG5cbnZhciB0b2tlbnMgPSB7fTtcblxuZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICB2YXIgaSxcbiAgICAgICAgZnVuYyA9IGNhbGxiYWNrO1xuICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyKGNhbGxiYWNrKSkge1xuICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdG9rZW5zW3Rva2VuW2ldXSA9IGZ1bmM7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhZGRXZWVrUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5fdyA9IGNvbmZpZy5fdyB8fCB7fTtcbiAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICB0b2tlbnNbdG9rZW5dKGlucHV0LCBjb25maWcuX2EsIGNvbmZpZywgdG9rZW4pO1xuICAgIH1cbn1cblxudmFyIFlFQVIgPSAwLFxuICAgIE1PTlRIID0gMSxcbiAgICBEQVRFID0gMixcbiAgICBIT1VSID0gMyxcbiAgICBNSU5VVEUgPSA0LFxuICAgIFNFQ09ORCA9IDUsXG4gICAgTUlMTElTRUNPTkQgPSA2LFxuICAgIFdFRUsgPSA3LFxuICAgIFdFRUtEQVkgPSA4O1xuXG5mdW5jdGlvbiBtb2QobiwgeCkge1xuICAgIHJldHVybiAoKG4gJSB4KSArIHgpICUgeDtcbn1cblxudmFyIGluZGV4T2Y7XG5cbmlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbn0gZWxzZSB7XG4gICAgaW5kZXhPZiA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgIC8vIEkga25vd1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgaWYgKGlzTmFOKHllYXIpIHx8IGlzTmFOKG1vbnRoKSkge1xuICAgICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICB2YXIgbW9kTW9udGggPSBtb2QobW9udGgsIDEyKTtcbiAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgIHJldHVybiBtb2RNb250aCA9PT0gMVxuICAgICAgICA/IGlzTGVhcFllYXIoeWVhcilcbiAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgIDogMjhcbiAgICAgICAgOiAzMSAtICgobW9kTW9udGggJSA3KSAlIDIpO1xufVxuXG4vLyBGT1JNQVRUSU5HXG5cbmFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG59KTtcblxuYWRkRm9ybWF0VG9rZW4oJ01NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbn0pO1xuXG5hZGRGb3JtYXRUb2tlbignTU1NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG59KTtcblxuLy8gQUxJQVNFU1xuXG5hZGRVbml0QWxpYXMoJ21vbnRoJywgJ00nKTtcblxuLy8gUFJJT1JJVFlcblxuYWRkVW5pdFByaW9yaXR5KCdtb250aCcsIDgpO1xuXG4vLyBQQVJTSU5HXG5cbmFkZFJlZ2V4VG9rZW4oJ00nLCBtYXRjaDF0bzIpO1xuYWRkUmVnZXhUb2tlbignTU0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5hZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG59KTtcbmFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xufSk7XG5cbmFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xufSk7XG5cbmFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYSBtb250aCBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWQuXG4gICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgfVxufSk7XG5cbi8vIExPQ0FMRVNcblxudmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPSAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID0gJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdChcbiAgICAgICAgJ18nXG4gICAgKSxcbiAgICBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vLFxuICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcblxuZnVuY3Rpb24gbG9jYWxlTW9udGhzKG0sIGZvcm1hdCkge1xuICAgIGlmICghbSkge1xuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1xuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgIDogdGhpcy5fbW9udGhzW1xuICAgICAgICAgICAgICAodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IE1PTlRIU19JTl9GT1JNQVQpLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICBdW20ubW9udGgoKV07XG59XG5cbmZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0KG0sIGZvcm1hdCkge1xuICAgIGlmICghbSkge1xuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRcbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXVxuICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICBNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgXVttLm1vbnRoKCldO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgdmFyIGksXG4gICAgICAgIGlpLFxuICAgICAgICBtb20sXG4gICAgICAgIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZFxuICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHNTaG9ydChcbiAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UuY2FsbCh0aGlzLCBtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgfVxuXG4gICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgLy8gc2VlIHNvcnRpbmcgaW4gY29tcHV0ZU1vbnRoc1BhcnNlXG4gICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTU0nICYmXG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTScgJiZcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBNT01FTlRTXG5cbmZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICB2YXIgZGF5T2ZNb250aDtcblxuICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAvLyBObyBvcFxuICAgICAgICByZXR1cm4gbW9tO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cbiAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRheU9mTW9udGggPSBNYXRoLm1pbihtb20uZGF0ZSgpLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCB2YWx1ZSkpO1xuICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyAnTW9udGgnXSh2YWx1ZSwgZGF5T2ZNb250aCk7XG4gICAgcmV0dXJuIG1vbTtcbn1cblxuZnVuY3Rpb24gZ2V0U2V0TW9udGgodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBzZXRNb250aCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldERheXNJbk1vbnRoKCkge1xuICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbn1cblxuZnVuY3Rpb24gbW9udGhzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlTW9udGhzUGFyc2UoKSB7XG4gICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgaSxcbiAgICAgICAgbW9tO1xuICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgc2hvcnRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgfVxuICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgbG9uZ1BpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKGxvbmdQaWVjZXNbaV0pO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgICAgICBtaXhlZFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKG1peGVkUGllY2VzW2ldKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICdpJ1xuICAgICk7XG4gICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICdpJ1xuICAgICk7XG59XG5cbi8vIEZPUk1BVFRJTkdcblxuYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICByZXR1cm4geSA8PSA5OTk5ID8gemVyb0ZpbGwoeSwgNCkgOiAnKycgKyB5O1xufSk7XG5cbmFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnllYXIoKSAlIDEwMDtcbn0pO1xuXG5hZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbmFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVknLCA1XSwgMCwgJ3llYXInKTtcbmFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbi8vIEFMSUFTRVNcblxuYWRkVW5pdEFsaWFzKCd5ZWFyJywgJ3knKTtcblxuLy8gUFJJT1JJVElFU1xuXG5hZGRVbml0UHJpb3JpdHkoJ3llYXInLCAxKTtcblxuLy8gUEFSU0lOR1xuXG5hZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5hZGRSZWdleFRva2VuKCdZWVlZJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5hZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbmFkZFBhcnNlVG9rZW4oWydZWVlZWScsICdZWVlZWVknXSwgWUVBUik7XG5hZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgaW5wdXQubGVuZ3RoID09PSAyID8gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpIDogdG9JbnQoaW5wdXQpO1xufSk7XG5hZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICBhcnJheVtZRUFSXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbn0pO1xuYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG59KTtcblxuLy8gSEVMUEVSU1xuXG5mdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpIHtcbiAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbn1cblxuLy8gSE9PS1NcblxuaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xufTtcblxuLy8gTU9NRU5UU1xuXG52YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbmZ1bmN0aW9uIGdldElzTGVhcFllYXIoKSB7XG4gICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgLy8gY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgIHZhciBkYXRlO1xuICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICBkYXRlID0gbmV3IERhdGUoeSArIDQwMCwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUoeSkge1xuICAgIHZhciBkYXRlLCBhcmdzO1xuICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgIGFyZ3NbMF0gPSB5ICsgNDAwO1xuICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZTtcbn1cblxuLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbmZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgIHZhciAvLyBmaXJzdC13ZWVrIGRheSAtLSB3aGljaCBqYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayAoNCBmb3IgaXNvLCAxIGZvciBvdGhlcilcbiAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICBmd2RsdyA9ICg3ICsgY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCBmd2QpLmdldFVUQ0RheSgpIC0gZG93KSAlIDc7XG5cbiAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbn1cblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcbmZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgIHJlc1llYXIsXG4gICAgICAgIHJlc0RheU9mWWVhcjtcblxuICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXIpKSB7XG4gICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgd2VlayA9IE1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKSAtIHdlZWtPZmZzZXQgLSAxKSAvIDcpICsgMSxcbiAgICAgICAgcmVzV2VlayxcbiAgICAgICAgcmVzWWVhcjtcblxuICAgIGlmICh3ZWVrIDwgMSkge1xuICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgIH0gZWxzZSBpZiAod2VlayA+IHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KSkge1xuICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xufVxuXG4vLyBGT1JNQVRUSU5HXG5cbmFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbi8vIEFMSUFTRVNcblxuYWRkVW5pdEFsaWFzKCd3ZWVrJywgJ3cnKTtcbmFkZFVuaXRBbGlhcygnaXNvV2VlaycsICdXJyk7XG5cbi8vIFBSSU9SSVRJRVNcblxuYWRkVW5pdFByaW9yaXR5KCd3ZWVrJywgNSk7XG5hZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWsnLCA1KTtcblxuLy8gUEFSU0lOR1xuXG5hZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yKTtcbmFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuYWRkUmVnZXhUb2tlbignVycsIG1hdGNoMXRvMik7XG5hZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuYWRkV2Vla1BhcnNlVG9rZW4oWyd3JywgJ3d3JywgJ1cnLCAnV1cnXSwgZnVuY3Rpb24gKFxuICAgIGlucHV0LFxuICAgIHdlZWssXG4gICAgY29uZmlnLFxuICAgIHRva2VuXG4pIHtcbiAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAxKV0gPSB0b0ludChpbnB1dCk7XG59KTtcblxuLy8gSEVMUEVSU1xuXG4vLyBMT0NBTEVTXG5cbmZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgcmV0dXJuIHdlZWtPZlllYXIobW9tLCB0aGlzLl93ZWVrLmRvdywgdGhpcy5fd2Vlay5kb3kpLndlZWs7XG59XG5cbnZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxufTtcblxuZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZldlZWsoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xufVxuXG5mdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mWWVhcigpIHtcbiAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG59XG5cbi8vIE1PTUVOVFNcblxuZnVuY3Rpb24gZ2V0U2V0V2VlayhpbnB1dCkge1xuICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG59XG5cbmZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICB2YXIgd2VlayA9IHdlZWtPZlllYXIodGhpcywgMSwgNCkud2VlaztcbiAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG59XG5cbi8vIEZPUk1BVFRJTkdcblxuYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbmFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcywgZm9ybWF0KTtcbn0pO1xuXG5hZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsIGZvcm1hdCk7XG59KTtcblxuYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsIGZvcm1hdCk7XG59KTtcblxuYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuYWRkRm9ybWF0VG9rZW4oJ0UnLCAwLCAwLCAnaXNvV2Vla2RheScpO1xuXG4vLyBBTElBU0VTXG5cbmFkZFVuaXRBbGlhcygnZGF5JywgJ2QnKTtcbmFkZFVuaXRBbGlhcygnd2Vla2RheScsICdlJyk7XG5hZGRVbml0QWxpYXMoJ2lzb1dlZWtkYXknLCAnRScpO1xuXG4vLyBQUklPUklUWVxuYWRkVW5pdFByaW9yaXR5KCdkYXknLCAxMSk7XG5hZGRVbml0UHJpb3JpdHkoJ3dlZWtkYXknLCAxMSk7XG5hZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtkYXknLCAxMSk7XG5cbi8vIFBBUlNJTkdcblxuYWRkUmVnZXhUb2tlbignZCcsIG1hdGNoMXRvMik7XG5hZGRSZWdleFRva2VuKCdlJywgbWF0Y2gxdG8yKTtcbmFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuYWRkUmVnZXhUb2tlbignZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG59KTtcbmFkZFJlZ2V4VG9rZW4oJ2RkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xufSk7XG5hZGRSZWdleFRva2VuKCdkZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpO1xufSk7XG5cbmFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgd2Vlay5kID0gd2Vla2RheTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgIH1cbn0pO1xuXG5hZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgIHdlZWtbdG9rZW5dID0gdG9JbnQoaW5wdXQpO1xufSk7XG5cbi8vIEhFTFBFUlNcblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgfVxuXG4gICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkgJSA3IHx8IDc7XG4gICAgfVxuICAgIHJldHVybiBpc05hTihpbnB1dCkgPyBudWxsIDogaW5wdXQ7XG59XG5cbi8vIExPQ0FMRVNcbmZ1bmN0aW9uIHNoaWZ0V2Vla2RheXMod3MsIG4pIHtcbiAgICByZXR1cm4gd3Muc2xpY2UobiwgNykuY29uY2F0KHdzLnNsaWNlKDAsIG4pKTtcbn1cblxudmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5cyA9ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICAgICAgICdfJ1xuICAgICksXG4gICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICBkZWZhdWx0V2Vla2RheXNSZWdleCA9IG1hdGNoV29yZCxcbiAgICBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG5mdW5jdGlvbiBsb2NhbGVXZWVrZGF5cyhtLCBmb3JtYXQpIHtcbiAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKVxuICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgIDogdGhpcy5fd2Vla2RheXNbXG4gICAgICAgICAgICAgIG0gJiYgbSAhPT0gdHJ1ZSAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgXTtcbiAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICA6IG1cbiAgICAgICAgPyB3ZWVrZGF5c1ttLmRheSgpXVxuICAgICAgICA6IHdlZWtkYXlzO1xufVxuXG5mdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1Nob3J0KG0pIHtcbiAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgIDogbVxuICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV1cbiAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0O1xufVxuXG5mdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzTWluLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgOiBtXG4gICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbn1cblxuZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgaWksXG4gICAgICAgIG1vbSxcbiAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKFxuICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KFxuICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzKG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkZCcgJiZcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZCcgJiZcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICBmb3JtYXQgPT09ICdkZCcgJiZcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBNT01FTlRTXG5cbmZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgIH1cbiAgICB2YXIgZGF5ID0gdGhpcy5faXNVVEMgPyB0aGlzLl9kLmdldFVUQ0RheSgpIDogdGhpcy5fZC5nZXREYXkoKTtcbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpbnB1dCA9IHBhcnNlV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRheTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFNldExvY2FsZURheU9mV2VlayhpbnB1dCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgIH1cbiAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2Vla2RheSA6IHRoaXMuYWRkKGlucHV0IC0gd2Vla2RheSwgJ2QnKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgfVxuXG4gICAgLy8gYmVoYXZlcyB0aGUgc2FtZSBhcyBtb21lbnQjZGF5IGV4Y2VwdFxuICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gd2Vla2RheXNSZWdleChpc1N0cmljdCkge1xuICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1JlZ2V4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB3ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleFxuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY29tcHV0ZVdlZWtkYXlzUGFyc2UoKSB7XG4gICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgfVxuXG4gICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgIGksXG4gICAgICAgIG1vbSxcbiAgICAgICAgbWlucCxcbiAgICAgICAgc2hvcnRwLFxuICAgICAgICBsb25ncDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgc2hvcnRwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgbG9uZ3AgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzKG1vbSwgJycpKTtcbiAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICB9XG4gICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICdpJ1xuICAgICk7XG4gICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgJ2knXG4gICAgKTtcbiAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgJ14oJyArIG1pblBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICdpJ1xuICAgICk7XG59XG5cbi8vIEZPUk1BVFRJTkdcblxuZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3VycygpICUgMTIgfHwgMTI7XG59XG5cbmZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG91cnMoKSB8fCAyNDtcbn1cblxuYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG5hZGRGb3JtYXRUb2tlbignaCcsIFsnaGgnLCAyXSwgMCwgaEZvcm1hdCk7XG5hZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbmFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICcnICsgaEZvcm1hdC5hcHBseSh0aGlzKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbn0pO1xuXG5hZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgKTtcbn0pO1xuXG5hZGRGb3JtYXRUb2tlbignSG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbn0pO1xuXG5hZGRGb3JtYXRUb2tlbignSG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0aGlzLmhvdXJzKCkgK1xuICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICApO1xufSk7XG5cbmZ1bmN0aW9uIG1lcmlkaWVtKHRva2VuLCBsb3dlcmNhc2UpIHtcbiAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICB0aGlzLmhvdXJzKCksXG4gICAgICAgICAgICB0aGlzLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICApO1xuICAgIH0pO1xufVxuXG5tZXJpZGllbSgnYScsIHRydWUpO1xubWVyaWRpZW0oJ0EnLCBmYWxzZSk7XG5cbi8vIEFMSUFTRVNcblxuYWRkVW5pdEFsaWFzKCdob3VyJywgJ2gnKTtcblxuLy8gUFJJT1JJVFlcbmFkZFVuaXRQcmlvcml0eSgnaG91cicsIDEzKTtcblxuLy8gUEFSU0lOR1xuXG5mdW5jdGlvbiBtYXRjaE1lcmlkaWVtKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xufVxuXG5hZGRSZWdleFRva2VuKCdhJywgbWF0Y2hNZXJpZGllbSk7XG5hZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG5hZGRSZWdleFRva2VuKCdIJywgbWF0Y2gxdG8yKTtcbmFkZFJlZ2V4VG9rZW4oJ2gnLCBtYXRjaDF0bzIpO1xuYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMik7XG5hZGRSZWdleFRva2VuKCdISCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbmFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbmFkZFJlZ2V4VG9rZW4oJ2htbScsIG1hdGNoM3RvNCk7XG5hZGRSZWdleFRva2VuKCdobW1zcycsIG1hdGNoNXRvNik7XG5hZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuYWRkUmVnZXhUb2tlbignSG1tc3MnLCBtYXRjaDV0bzYpO1xuXG5hZGRQYXJzZVRva2VuKFsnSCcsICdISCddLCBIT1VSKTtcbmFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgIHZhciBrSW5wdXQgPSB0b0ludChpbnB1dCk7XG4gICAgYXJyYXlbSE9VUl0gPSBrSW5wdXQgPT09IDI0ID8gMCA6IGtJbnB1dDtcbn0pO1xuYWRkUGFyc2VUb2tlbihbJ2EnLCAnQSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTtcbiAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG59KTtcbmFkZFBhcnNlVG9rZW4oWydoJywgJ2hoJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xufSk7XG5hZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xufSk7XG5hZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xufSk7XG5hZGRQYXJzZVRva2VuKCdIbW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xufSk7XG5hZGRQYXJzZVRva2VuKCdIbW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xufSk7XG5cbi8vIExPQ0FMRVNcblxuZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgIC8vIElFOCBRdWlya3MgTW9kZSAmIElFNyBTdGFuZGFyZHMgTW9kZSBkbyBub3QgYWxsb3cgYWNjZXNzaW5nIHN0cmluZ3MgbGlrZSBhcnJheXNcbiAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG59XG5cbnZhciBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSA9IC9bYXBdXFwuP20/XFwuPy9pLFxuICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgIC8vIHNwZWNpZmllZCB3aGljaCBob3VyIHRoZXkgd2FudC4gU28gdHJ5aW5nIHRvIG1haW50YWluIHRoZSBzYW1lIGhvdXIgKGluXG4gICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93XG4gICAgLy8gdGhpcyBydWxlLlxuICAgIGdldFNldEhvdXIgPSBtYWtlR2V0U2V0KCdIb3VycycsIHRydWUpO1xuXG5mdW5jdGlvbiBsb2NhbGVNZXJpZGllbShob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3BtJyA6ICdQTSc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICB9XG59XG5cbnZhciBiYXNlQ29uZmlnID0ge1xuICAgIGNhbGVuZGFyOiBkZWZhdWx0Q2FsZW5kYXIsXG4gICAgbG9uZ0RhdGVGb3JtYXQ6IGRlZmF1bHRMb25nRGF0ZUZvcm1hdCxcbiAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgIG9yZGluYWw6IGRlZmF1bHRPcmRpbmFsLFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlLFxuICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgIG1vbnRoczogZGVmYXVsdExvY2FsZU1vbnRocyxcbiAgICBtb250aHNTaG9ydDogZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LFxuXG4gICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICB3ZWVrZGF5czogZGVmYXVsdExvY2FsZVdlZWtkYXlzLFxuICAgIHdlZWtkYXlzTWluOiBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4sXG4gICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICBtZXJpZGllbVBhcnNlOiBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSxcbn07XG5cbi8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbnZhciBsb2NhbGVzID0ge30sXG4gICAgbG9jYWxlRmFtaWxpZXMgPSB7fSxcbiAgICBnbG9iYWxMb2NhbGU7XG5cbmZ1bmN0aW9uIGNvbW1vblByZWZpeChhcnIxLCBhcnIyKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBtaW5sOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtaW5sO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVMb2NhbGUoa2V5KSB7XG4gICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xufVxuXG4vLyBwaWNrIHRoZSBsb2NhbGUgZnJvbSB0aGUgYXJyYXlcbi8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4vLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290XG5mdW5jdGlvbiBjaG9vc2VMb2NhbGUobmFtZXMpIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgICAgIGosXG4gICAgICAgIG5leHQsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgc3BsaXQ7XG5cbiAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgaiA9IHNwbGl0Lmxlbmd0aDtcbiAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbmV4dCAmJlxuICAgICAgICAgICAgICAgIG5leHQubGVuZ3RoID49IGogJiZcbiAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqLS07XG4gICAgICAgIH1cbiAgICAgICAgaSsrO1xuICAgIH1cbiAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xufVxuXG5mdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICB2YXIgb2xkTG9jYWxlID0gbnVsbCxcbiAgICAgICAgYWxpYXNlZFJlcXVpcmU7XG4gICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICBpZiAoXG4gICAgICAgIGxvY2FsZXNbbmFtZV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBtb2R1bGUgJiZcbiAgICAgICAgbW9kdWxlLmV4cG9ydHNcbiAgICApIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gbWFyayBhcyBub3QgZm91bmQgdG8gYXZvaWQgcmVwZWF0aW5nIGV4cGVuc2l2ZSBmaWxlIHJlcXVpcmUgY2FsbCBjYXVzaW5nIGhpZ2ggQ1BVXG4gICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBmaW5kIGVuLVVTLCBlbl9VUywgZW4tdXMgZm9yIGV2ZXJ5IGZvcm1hdCBjYWxsXG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXG4vLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuLy8gbG9jYWxlIGtleS5cbmZ1bmN0aW9uIGdldFNldEdsb2JhbExvY2FsZShrZXksIHZhbHVlcykge1xuICAgIHZhciBkYXRhO1xuICAgIGlmIChrZXkpIHtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgJ0xvY2FsZSAnICsga2V5ICsgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/J1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZ2xvYmFsTG9jYWxlLl9hYmJyO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgJ2RlZmluZUxvY2FsZU92ZXJyaWRlJyxcbiAgICAgICAgICAgICAgICAndXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgaWYgKGxvY2FsZUZhbWlsaWVzW25hbWVdKSB7XG4gICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgbG9jYWxlIEFGVEVSIGFsbCBjaGlsZCBsb2NhbGVzIGhhdmUgYmVlblxuICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICB0bXBMb2NhbGUsXG4gICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwgJiYgbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkIGxvY2FsZSBpbi1wbGFjZSB0byBhdm9pZCBtZW1vcnktbGVha3NcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICBpZiAodG1wTG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgICBpZiAodG1wTG9jYWxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAvLyBTZXQgYWJiciBzbyBpdCB3aWxsIGhhdmUgYSBuYW1lIChnZXR0ZXJzIHJldHVyblxuICAgICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBvdGhlcndpc2UpLlxuICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGdldFNldEdsb2JhbExvY2FsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xufVxuXG4vLyByZXR1cm5zIGxvY2FsZSBkYXRhXG5mdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgdmFyIGxvY2FsZTtcblxuICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgaWYgKCFrZXkpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoa2V5KTtcbiAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgfVxuICAgICAgICBrZXkgPSBba2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hvb3NlTG9jYWxlKGtleSk7XG59XG5cbmZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgIHJldHVybiBrZXlzKGxvY2FsZXMpO1xufVxuXG5mdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICB2YXIgb3ZlcmZsb3csXG4gICAgICAgIGEgPSBtLl9hO1xuXG4gICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICBvdmVyZmxvdyA9XG4gICAgICAgICAgICBhW01PTlRIXSA8IDAgfHwgYVtNT05USF0gPiAxMVxuICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICA6IGFbREFURV0gPCAxIHx8IGFbREFURV0gPiBkYXlzSW5Nb250aChhW1lFQVJdLCBhW01PTlRIXSlcbiAgICAgICAgICAgICAgICA/IERBVEVcbiAgICAgICAgICAgICAgICA6IGFbSE9VUl0gPCAwIHx8XG4gICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgIChhW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgICAgICAgIChhW01JTlVURV0gIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdICE9PSAwKSlcbiAgICAgICAgICAgICAgICA/IEhPVVJcbiAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICA/IE1JTlVURVxuICAgICAgICAgICAgICAgIDogYVtTRUNPTkRdIDwgMCB8fCBhW1NFQ09ORF0gPiA1OVxuICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgOiBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTlcbiAgICAgICAgICAgICAgICA/IE1JTExJU0VDT05EXG4gICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93RGF5T2ZZZWFyICYmXG4gICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrcyAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtkYXkgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPSBvdmVyZmxvdztcbiAgICB9XG5cbiAgICByZXR1cm4gbTtcbn1cblxuLy8gaXNvIDg2MDEgcmVnZXhcbi8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxudmFyIGV4dGVuZGVkSXNvUmVnZXggPSAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICBiYXNpY0lzb1JlZ2V4ID0gL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KSg/OlxcZFxcZFxcZFxcZHxXXFxkXFxkXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZHwpKSg/OihUfCApKFxcZFxcZCg/OlxcZFxcZCg/OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vLFxuICAgIGlzb0RhdGVzID0gW1xuICAgICAgICBbJ1lZWVlZWS1NTS1ERCcsIC9bKy1dXFxkezZ9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICBbJ0dHR0ctW1ddV1cnLCAvXFxkezR9LVdcXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgWydZWVlZWVlNTUREJywgL1srLV1cXGR7MTB9L10sXG4gICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgIFsnR0dHR1tXXVdXJywgL1xcZHs0fVdcXGR7Mn0vLCBmYWxzZV0sXG4gICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXSxcbiAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICBbJ1lZWVknLCAvXFxkezR9LywgZmFsc2VdLFxuICAgIF0sXG4gICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgIGlzb1RpbWVzID0gW1xuICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgIFsnSEg6bW06c3MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICBbJ0hIbW1zcyxTU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZCxcXGQrL10sXG4gICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgIFsnSEgnLCAvXFxkXFxkL10sXG4gICAgXSxcbiAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAvLyBSRkMgMjgyMiByZWdleDogRm9yIGRldGFpbHMgc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI3NlY3Rpb24tMy4zXG4gICAgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgb2JzT2Zmc2V0cyA9IHtcbiAgICAgICAgVVQ6IDAsXG4gICAgICAgIEdNVDogMCxcbiAgICAgICAgRURUOiAtNCAqIDYwLFxuICAgICAgICBFU1Q6IC01ICogNjAsXG4gICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgQ1NUOiAtNiAqIDYwLFxuICAgICAgICBNRFQ6IC02ICogNjAsXG4gICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgUERUOiAtNyAqIDYwLFxuICAgICAgICBQU1Q6IC04ICogNjAsXG4gICAgfTtcblxuLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcbmZ1bmN0aW9uIGNvbmZpZ0Zyb21JU08oY29uZmlnKSB7XG4gICAgdmFyIGksXG4gICAgICAgIGwsXG4gICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgYWxsb3dUaW1lLFxuICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICB0ekZvcm1hdDtcblxuICAgIGlmIChtYXRjaCkge1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pc28gPSB0cnVlO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQgPSBpc29EYXRlc1tpXVswXTtcbiAgICAgICAgICAgICAgICBhbGxvd1RpbWUgPSBpc29EYXRlc1tpXVsyXSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdCA9IChtYXRjaFsyXSB8fCAnICcpICsgaXNvVGltZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhbGxvd1RpbWUgJiYgdGltZUZvcm1hdCAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF0Y2hbNF0pIHtcbiAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgdHpGb3JtYXQgPSAnWic7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25maWcuX2YgPSBkYXRlRm9ybWF0ICsgKHRpbWVGb3JtYXQgfHwgJycpICsgKHR6Rm9ybWF0IHx8ICcnKTtcbiAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICB5ZWFyU3RyLFxuICAgIG1vbnRoU3RyLFxuICAgIGRheVN0cixcbiAgICBob3VyU3RyLFxuICAgIG1pbnV0ZVN0cixcbiAgICBzZWNvbmRTdHJcbikge1xuICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0ciksXG4gICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICBwYXJzZUludChob3VyU3RyLCAxMCksXG4gICAgICAgIHBhcnNlSW50KG1pbnV0ZVN0ciwgMTApLFxuICAgIF07XG5cbiAgICBpZiAoc2Vjb25kU3RyKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlSW50KHNlY29uZFN0ciwgMTApKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgdmFyIHllYXIgPSBwYXJzZUludCh5ZWFyU3RyLCAxMCk7XG4gICAgaWYgKHllYXIgPD0gNDkpIHtcbiAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgIH0gZWxzZSBpZiAoeWVhciA8PSA5OTkpIHtcbiAgICAgICAgcmV0dXJuIDE5MDAgKyB5ZWFyO1xuICAgIH1cbiAgICByZXR1cm4geWVhcjtcbn1cblxuZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gICAgcmV0dXJuIHNcbiAgICAgICAgLnJlcGxhY2UoL1xcKFteKV0qXFwpfFtcXG5cXHRdL2csICcgJylcbiAgICAgICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpXG4gICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAucmVwbGFjZSgvXFxzXFxzKiQvLCAnJyk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICAgICAgLy8gVE9ETzogUmVwbGFjZSB0aGUgdmFuaWxsYSBKUyBEYXRlIG9iamVjdCB3aXRoIGFuIGluZGVwZW5kZW50IGRheS1vZi13ZWVrIGNoZWNrLlxuICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgIHdlZWtkYXlBY3R1YWwgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFswXSxcbiAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsyXVxuICAgICAgICAgICAgKS5nZXREYXkoKTtcbiAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVPZmZzZXQob2JzT2Zmc2V0LCBtaWxpdGFyeU9mZnNldCwgbnVtT2Zmc2V0KSB7XG4gICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICByZXR1cm4gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICAgIH0gZWxzZSBpZiAobWlsaXRhcnlPZmZzZXQpIHtcbiAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgbSA9IGhtICUgMTAwLFxuICAgICAgICAgICAgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICB9XG59XG5cbi8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbmZ1bmN0aW9uIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZykge1xuICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKSxcbiAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHBhcnNlZEFycmF5ID0gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgbWF0Y2hbM10sXG4gICAgICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgbWF0Y2hbNl0sXG4gICAgICAgICAgICBtYXRjaFs3XVxuICAgICAgICApO1xuICAgICAgICBpZiAoIWNoZWNrV2Vla2RheShtYXRjaFsxXSwgcGFyc2VkQXJyYXksIGNvbmZpZykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5fYSA9IHBhcnNlZEFycmF5O1xuICAgICAgICBjb25maWcuX3R6bSA9IGNhbGN1bGF0ZU9mZnNldChtYXRjaFs4XSwgbWF0Y2hbOV0sIG1hdGNoWzEwXSk7XG5cbiAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnJmYzI4MjIgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgIH1cbn1cblxuLy8gZGF0ZSBmcm9tIDEpIEFTUC5ORVQsIDIpIElTTywgMykgUkZDIDI4MjIgZm9ybWF0cywgb3IgNCkgb3B0aW9uYWwgZmFsbGJhY2sgaWYgcGFyc2luZyBpc24ndCBzdHJpY3RcbmZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKSB7XG4gICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuX3N0cmljdCkge1xuICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICB9XG59XG5cbmhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICd2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgJyArXG4gICAgICAgICd3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlICcgK1xuICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgfVxuKTtcblxuLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgIGlmIChhICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgfVxuICAgIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgIC8vIGhvb2tzIGlzIGFjdHVhbGx5IHRoZSBleHBvcnRlZCBtb21lbnQgb2JqZWN0XG4gICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENEYXRlKCksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbbm93VmFsdWUuZ2V0RnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0TW9udGgoKSwgbm93VmFsdWUuZ2V0RGF0ZSgpXTtcbn1cblxuLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4vLyB0aGUgYXJyYXkgc2hvdWxkIG1pcnJvciB0aGUgcGFyYW1ldGVycyBiZWxvd1xuLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4vLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbmZ1bmN0aW9uIGNvbmZpZ0Zyb21BcnJheShjb25maWcpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgZGF0ZSxcbiAgICAgICAgaW5wdXQgPSBbXSxcbiAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgeWVhclRvVXNlO1xuXG4gICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZyk7XG5cbiAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XG4gICAgfVxuXG4gICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyICE9IG51bGwpIHtcbiAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXJUb1VzZSkgfHxcbiAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKHllYXJUb1VzZSwgMCwgY29uZmlnLl9kYXlPZlllYXIpO1xuICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgLy8gKiBpZiBkYXkgb2YgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgbW9udGggYW5kIHllYXJcbiAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgIGZvciAoaSA9IDA7IGkgPCAzICYmIGNvbmZpZy5fYVtpXSA9PSBudWxsOyArK2kpIHtcbiAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICB9XG5cbiAgICAvLyBaZXJvIG91dCB3aGF0ZXZlciB3YXMgbm90IGRlZmF1bHRlZCwgaW5jbHVkaW5nIHRpbWVcbiAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPT0gbnVsbCA/IChpID09PSAyID8gMSA6IDApIDogY29uZmlnLl9hW2ldO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICBpZiAoXG4gICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgY29uZmlnLl9hW1NFQ09ORF0gPT09IDAgJiZcbiAgICAgICAgY29uZmlnLl9hW01JTExJU0VDT05EXSA9PT0gMFxuICAgICkge1xuICAgICAgICBjb25maWcuX25leHREYXkgPSB0cnVlO1xuICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgIH1cblxuICAgIGNvbmZpZy5fZCA9IChjb25maWcuX3VzZVVUQyA/IGNyZWF0ZVVUQ0RhdGUgOiBjcmVhdGVEYXRlKS5hcHBseShcbiAgICAgICAgbnVsbCxcbiAgICAgICAgaW5wdXRcbiAgICApO1xuICAgIGV4cGVjdGVkV2Vla2RheSA9IGNvbmZpZy5fdXNlVVRDXG4gICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgIDogY29uZmlnLl9kLmdldERheSgpO1xuXG4gICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgaWYgKGNvbmZpZy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLl9uZXh0RGF5KSB7XG4gICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciBtaXNtYXRjaGluZyBkYXkgb2Ygd2Vla1xuICAgIGlmIChcbiAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgIHR5cGVvZiBjb25maWcuX3cuZCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgY29uZmlnLl93LmQgIT09IGV4cGVjdGVkV2Vla2RheVxuICAgICkge1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXAsIHdlZWtkYXlPdmVyZmxvdywgY3VyV2VlaztcblxuICAgIHcgPSBjb25maWcuX3c7XG4gICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICBkb3cgPSAxO1xuICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAvLyBob3cgd2UgaW50ZXJwcmV0IG5vdyAobG9jYWwsIHV0YywgZml4ZWQgb2Zmc2V0KS4gU28gY3JlYXRlXG4gICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKFxuICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSxcbiAgICAgICAgICAgIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhclxuICAgICAgICApO1xuICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgd2Vla2RheSA9IGRlZmF1bHRzKHcuRSwgMSk7XG4gICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95O1xuXG4gICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKHcuZ2csIGNvbmZpZy5fYVtZRUFSXSwgY3VyV2Vlay55ZWFyKTtcblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgd2Vlay5cbiAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICBpZiAody5kICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xuICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMCB8fCB3ZWVrZGF5ID4gNikge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAody5lICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICBpZiAody5lIDwgMCB8fCB3LmUgPiA2KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHdlZWtkYXlPdmVyZmxvdyAhPSBudWxsKSB7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRlbXAgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRlbXAuZGF5T2ZZZWFyO1xuICAgIH1cbn1cblxuLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIElTTyBzdGFuZGFyZFxuaG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcblxuLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbmhvb2tzLlJGQ18yODIyID0gZnVuY3Rpb24gKCkge307XG5cbi8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmdcbmZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgY3JlYXRpb24gZmxvdyB0byBwcmV2ZW50IGNpcmN1bGFyIGRlcHNcbiAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5JU09fODYwMSkge1xuICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25maWcuX2EgPSBbXTtcbiAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IHRydWU7XG5cbiAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcbiAgICAgICAgaSxcbiAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgIHRva2VucyxcbiAgICAgICAgdG9rZW4sXG4gICAgICAgIHNraXBwZWQsXG4gICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwLFxuICAgICAgICBlcmE7XG5cbiAgICB0b2tlbnMgPVxuICAgICAgICBleHBhbmRGb3JtYXQoY29uZmlnLl9mLCBjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2VucykgfHwgW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fFxuICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChza2lwcGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkgKyBwYXJzZWRJbnB1dC5sZW5ndGhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb25maWcuX3N0cmljdCAmJiAhcGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgc3RyaW5nTGVuZ3RoIC0gdG90YWxQYXJzZWRJbnB1dExlbmd0aDtcbiAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgIH1cblxuICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyXG4gICAgaWYgKFxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPD0gMTIgJiZcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgKSB7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzID0gY29uZmlnLl9hLnNsaWNlKDApO1xuICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLm1lcmlkaWVtID0gY29uZmlnLl9tZXJpZGllbTtcbiAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICBjb25maWcuX2FbSE9VUl0gPSBtZXJpZGllbUZpeFdyYXAoXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlLFxuICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgIGNvbmZpZy5fbWVyaWRpZW1cbiAgICApO1xuXG4gICAgLy8gaGFuZGxlIGVyYVxuICAgIGVyYSA9IGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYTtcbiAgICBpZiAoZXJhICE9PSBudWxsKSB7XG4gICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgfVxuXG4gICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xufVxuXG5mdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgIHZhciBpc1BtO1xuXG4gICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICByZXR1cm4gaG91cjtcbiAgICB9XG4gICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBob3VyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICByZXR1cm4gaG91cjtcbiAgICB9XG59XG5cbi8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGFycmF5IG9mIGZvcm1hdCBzdHJpbmdzXG5mdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgIGJlc3RNb21lbnQsXG4gICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICBpLFxuICAgICAgICBjdXJyZW50U2NvcmUsXG4gICAgICAgIHZhbGlkRm9ybWF0Rm91bmQsXG4gICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2U7XG5cbiAgICBpZiAoY29uZmlnLl9mLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWcuX2YubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IGZhbHNlO1xuICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDO1xuICAgICAgICB9XG4gICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7XG5cbiAgICAgICAgaWYgKGlzVmFsaWQodGVtcENvbmZpZykpIHtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcbiAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgIC8vb3IgdG9rZW5zXG4gICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykudW51c2VkVG9rZW5zLmxlbmd0aCAqIDEwO1xuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICBpZiAoIWJlc3RGb3JtYXRJc1ZhbGlkKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgIGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0IHx8XG4gICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCkge1xuICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXh0ZW5kKGNvbmZpZywgYmVzdE1vbWVudCB8fCB0ZW1wQ29uZmlnKTtcbn1cblxuZnVuY3Rpb24gY29uZmlnRnJvbU9iamVjdChjb25maWcpIHtcbiAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgaSA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGNvbmZpZy5faSksXG4gICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICBjb25maWcuX2EgPSBtYXAoXG4gICAgICAgIFtpLnllYXIsIGkubW9udGgsIGRheU9yRGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdLFxuICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgIHZhciByZXMgPSBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3cocHJlcGFyZUNvbmZpZyhjb25maWcpKSk7XG4gICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgcmVzLmFkZCgxLCAnZCcpO1xuICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXG4gICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcblxuICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgKGZvcm1hdCA9PT0gdW5kZWZpbmVkICYmIGlucHV0ID09PSAnJykpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoeyBudWxsSW5wdXQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uZmlnLl9pID0gaW5wdXQgPSBjb25maWcuX2xvY2FsZS5wcmVwYXJzZShpbnB1dCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTW9tZW50KGlucHV0KSkge1xuICAgICAgICByZXR1cm4gbmV3IE1vbWVudChjaGVja092ZXJmbG93KGlucHV0KSk7XG4gICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IGlucHV0O1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShmb3JtYXQpKSB7XG4gICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0KSB7XG4gICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25maWdGcm9tSW5wdXQoY29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICBjb25maWcuX2QgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjb25maWc7XG59XG5cbmZ1bmN0aW9uIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpIHtcbiAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0LnZhbHVlT2YoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgY29uZmlnRnJvbU9iamVjdChjb25maWcpO1xuICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICB2YXIgYyA9IHt9O1xuXG4gICAgaWYgKGZvcm1hdCA9PT0gdHJ1ZSB8fCBmb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICBzdHJpY3QgPSBsb2NhbGU7XG4gICAgICAgIGxvY2FsZSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAgIChpc09iamVjdChpbnB1dCkgJiYgaXNPYmplY3RFbXB0eShpbnB1dCkpIHx8XG4gICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgKSB7XG4gICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBvYmplY3QgY29uc3RydWN0aW9uIG11c3QgYmUgZG9uZSB0aGlzIHdheS5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xuICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgYy5fdXNlVVRDID0gYy5faXNVVEMgPSBpc1VUQztcbiAgICBjLl9sID0gbG9jYWxlO1xuICAgIGMuX2kgPSBpbnB1dDtcbiAgICBjLl9mID0gZm9ybWF0O1xuICAgIGMuX3N0cmljdCA9IHN0cmljdDtcblxuICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVMb2NhbChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG59XG5cbnZhciBwcm90b3R5cGVNaW4gPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICksXG4gICAgcHJvdG90eXBlTWF4ID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4vLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuLy8gb3RoZXIuIFRoaXMgcmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBmbiB0byBiZSB0cmFuc2l0aXZlLlxuLy9cbi8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2Vcbi8vIGZpcnN0IGVsZW1lbnQgaXMgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMuXG5mdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICB2YXIgcmVzLCBpO1xuICAgIGlmIChtb21lbnRzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG1vbWVudHNbMF0pKSB7XG4gICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgIH1cbiAgICBpZiAoIW1vbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbCgpO1xuICAgIH1cbiAgICByZXMgPSBtb21lbnRzWzBdO1xuICAgIGZvciAoaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgcmVzID0gbW9tZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuZnVuY3Rpb24gbWluKCkge1xuICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbn1cblxuZnVuY3Rpb24gbWF4KCkge1xuICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgcmV0dXJuIHBpY2tCeSgnaXNBZnRlcicsIGFyZ3MpO1xufVxuXG52YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBEYXRlLm5vdyA/IERhdGUubm93KCkgOiArbmV3IERhdGUoKTtcbn07XG5cbnZhciBvcmRlcmluZyA9IFtcbiAgICAneWVhcicsXG4gICAgJ3F1YXJ0ZXInLFxuICAgICdtb250aCcsXG4gICAgJ3dlZWsnLFxuICAgICdkYXknLFxuICAgICdob3VyJyxcbiAgICAnbWludXRlJyxcbiAgICAnc2Vjb25kJyxcbiAgICAnbWlsbGlzZWNvbmQnLFxuXTtcblxuZnVuY3Rpb24gaXNEdXJhdGlvblZhbGlkKG0pIHtcbiAgICB2YXIga2V5LFxuICAgICAgICB1bml0SGFzRGVjaW1hbCA9IGZhbHNlLFxuICAgICAgICBpO1xuICAgIGZvciAoa2V5IGluIG0pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaGFzT3duUHJvcChtLCBrZXkpICYmXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAobVtrZXldID09IG51bGwgfHwgIWlzTmFOKG1ba2V5XSkpXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IG9yZGVyaW5nLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGlmIChtW29yZGVyaW5nW2ldXSkge1xuICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1ZhbGlkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKE5hTik7XG59XG5cbmZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSxcbiAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgIG1vbnRocyA9IG5vcm1hbGl6ZWRJbnB1dC5tb250aCB8fCAwLFxuICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IG5vcm1hbGl6ZWRJbnB1dC5pc29XZWVrIHx8IDAsXG4gICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgIGhvdXJzID0gbm9ybWFsaXplZElucHV0LmhvdXIgfHwgMCxcbiAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgbWlsbGlzZWNvbmRzID0gbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kIHx8IDA7XG5cbiAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9XG4gICAgICAgICttaWxsaXNlY29uZHMgK1xuICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICBtaW51dGVzICogNmU0ICsgLy8gMTAwMCAqIDYwXG4gICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgIC8vIGRheSB3aGVuIHdvcmtpbmcgYXJvdW5kIERTVCwgd2UgbmVlZCB0byBzdG9yZSB0aGVtIHNlcGFyYXRlbHlcbiAgICB0aGlzLl9kYXlzID0gK2RheXMgKyB3ZWVrcyAqIDc7XG4gICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAvLyB3aGljaCBtb250aHMgeW91IGFyZSBhcmUgdGFsa2luZyBhYm91dCwgc28gd2UgaGF2ZSB0byBzdG9yZVxuICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICB0aGlzLl9kYXRhID0ge307XG5cbiAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgIHRoaXMuX2J1YmJsZSgpO1xufVxuXG5mdW5jdGlvbiBpc0R1cmF0aW9uKG9iaikge1xuICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbn1cblxuZnVuY3Rpb24gYWJzUm91bmQobnVtYmVyKSB7XG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoLTEgKiBudW1iZXIpICogLTE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICB9XG59XG5cbi8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbmZ1bmN0aW9uIGNvbXBhcmVBcnJheXMoYXJyYXkxLCBhcnJheTIsIGRvbnRDb252ZXJ0KSB7XG4gICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICBkaWZmcyA9IDAsXG4gICAgICAgIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmcysrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkaWZmcyArIGxlbmd0aERpZmY7XG59XG5cbi8vIEZPUk1BVFRJTkdcblxuZnVuY3Rpb24gb2Zmc2V0KHRva2VuLCBzZXBhcmF0b3IpIHtcbiAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKSxcbiAgICAgICAgICAgIHNpZ24gPSAnKyc7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgc2lnbiArXG4gICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgIHNlcGFyYXRvciArXG4gICAgICAgICAgICB6ZXJvRmlsbCh+fm9mZnNldCAlIDYwLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xufVxuXG5vZmZzZXQoJ1onLCAnOicpO1xub2Zmc2V0KCdaWicsICcnKTtcblxuLy8gUEFSU0lOR1xuXG5hZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG5hZGRSZWdleFRva2VuKCdaWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgIGNvbmZpZy5fdHptID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG59KTtcblxuLy8gSEVMUEVSU1xuXG4vLyB0aW1lem9uZSBjaHVua2VyXG4vLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbi8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxudmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xuXG5mdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgIGNodW5rLFxuICAgICAgICBwYXJ0cyxcbiAgICAgICAgbWludXRlcztcblxuICAgIGlmIChtYXRjaGVzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNodW5rID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgIHBhcnRzID0gKGNodW5rICsgJycpLm1hdGNoKGNodW5rT2Zmc2V0KSB8fCBbJy0nLCAwLCAwXTtcbiAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgIHJldHVybiBtaW51dGVzID09PSAwID8gMCA6IHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG59XG5cbi8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG5mdW5jdGlvbiBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIG1vZGVsKSB7XG4gICAgdmFyIHJlcywgZGlmZjtcbiAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgIHJlcyA9IG1vZGVsLmNsb25lKCk7XG4gICAgICAgIGRpZmYgPVxuICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgPyBpbnB1dC52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICA6IGNyZWF0ZUxvY2FsKGlucHV0KS52YWx1ZU9mKCkpIC0gcmVzLnZhbHVlT2YoKTtcbiAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICByZXMuX2Quc2V0VGltZShyZXMuX2QudmFsdWVPZigpICsgZGlmZik7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChyZXMsIGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQpLmxvY2FsKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXREYXRlT2Zmc2V0KG0pIHtcbiAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L3B1bGwvMTg3MVxuICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xufVxuXG4vLyBIT09LU1xuXG4vLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4vLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbmhvb2tzLnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4vLyBNT01FTlRTXG5cbi8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuLy8gYWZmZWN0aW5nIHRoZSBsb2NhbCBob3VyLiBTbyA1OjMxOjI2ICswMzAwIC0tW3V0Y09mZnNldCgyLCB0cnVlKV0tLT5cbi8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbi8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbi8vXG4vLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbi8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpblxuLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4vLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuZnVuY3Rpb24gZ2V0U2V0T2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lLCBrZWVwTWludXRlcykge1xuICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQgfHwgMCxcbiAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYgJiYgIWtlZXBNaW51dGVzKSB7XG4gICAgICAgICAgICBpbnB1dCA9IGlucHV0ICogNjA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICBsb2NhbEFkanVzdCA9IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX2lzVVRDID0gdHJ1ZTtcbiAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGFkZFN1YnRyYWN0KFxuICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVEdXJhdGlvbihpbnB1dCAtIG9mZnNldCwgJ20nKSxcbiAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZ2V0U2V0Wm9uZShpbnB1dCwga2VlcExvY2FsVGltZSkge1xuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpbnB1dCA9IC1pbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xufVxuXG5mdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQoKSB7XG4gICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodFpvbmUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0KGlucHV0KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgcmV0dXJuICh0aGlzLnV0Y09mZnNldCgpIC0gaW5wdXQpICUgNjAgPT09IDA7XG59XG5cbmZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX2lzRFNUU2hpZnRlZCkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICB9XG5cbiAgICB2YXIgYyA9IHt9LFxuICAgICAgICBvdGhlcjtcblxuICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgYyA9IHByZXBhcmVDb25maWcoYyk7XG5cbiAgICBpZiAoYy5fYSkge1xuICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9XG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJiBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG59XG5cbmZ1bmN0aW9uIGlzTG9jYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzVXRjT2Zmc2V0KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzVXRjKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xufVxuXG4vLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbnZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICBpc29SZWdleCA9IC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbmZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICB2YXIgZHVyYXRpb24gPSBpbnB1dCxcbiAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmRcbiAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICBzaWduLFxuICAgICAgICByZXQsXG4gICAgICAgIGRpZmZSZXM7XG5cbiAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkpIHtcbiAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGQ6IGlucHV0Ll9kYXlzLFxuICAgICAgICAgICAgTTogaW5wdXQuX21vbnRocyxcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSB8fCAhaXNOYU4oK2lucHV0KSkge1xuICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBkdXJhdGlvbltrZXldID0gK2lucHV0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICgobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICBoOiB0b0ludChtYXRjaFtIT1VSXSkgKiBzaWduLFxuICAgICAgICAgICAgbTogdG9JbnQobWF0Y2hbTUlOVVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgbXM6IHRvSW50KGFic1JvdW5kKG1hdGNoW01JTExJU0VDT05EXSAqIDEwMDApKSAqIHNpZ24sIC8vIHRoZSBtaWxsaXNlY29uZCBkZWNpbWFsIHBvaW50IGlzIGluY2x1ZGVkIGluIHRoZSBtYXRjaFxuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgIE06IHBhcnNlSXNvKG1hdGNoWzNdLCBzaWduKSxcbiAgICAgICAgICAgIHc6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgIGg6IHBhcnNlSXNvKG1hdGNoWzZdLCBzaWduKSxcbiAgICAgICAgICAgIG06IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcbiAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgKCdmcm9tJyBpbiBkdXJhdGlvbiB8fCAndG8nIGluIGR1cmF0aW9uKVxuICAgICkge1xuICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICBjcmVhdGVMb2NhbChkdXJhdGlvbi5mcm9tKSxcbiAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKVxuICAgICAgICApO1xuXG4gICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgIGR1cmF0aW9uLm1zID0gZGlmZlJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICB9XG5cbiAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xuXG4gICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgcmV0Ll9sb2NhbGUgPSBpbnB1dC5fbG9jYWxlO1xuICAgIH1cblxuICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICByZXQuX2lzVmFsaWQgPSBpbnB1dC5faXNWYWxpZDtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xufVxuXG5jcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcbmNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbmZ1bmN0aW9uIHBhcnNlSXNvKGlucCwgc2lnbikge1xuICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXG4gICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgLy8gaW5wIG1heSBiZSB1bmRlZmluZWQsIHNvIGNhcmVmdWwgY2FsbGluZyByZXBsYWNlIG9uIGl0LlxuICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xuICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICByZXR1cm4gKGlzTmFOKHJlcykgPyAwIDogcmVzKSAqIHNpZ247XG59XG5cbmZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICB2YXIgcmVzID0ge307XG5cbiAgICByZXMubW9udGhzID1cbiAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICBpZiAoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpLmlzQWZ0ZXIob3RoZXIpKSB7XG4gICAgICAgIC0tcmVzLm1vbnRocztcbiAgICB9XG5cbiAgICByZXMubWlsbGlzZWNvbmRzID0gK290aGVyIC0gK2Jhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKTtcblxuICAgIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIG1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgdmFyIHJlcztcbiAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgIHJldHVybiB7IG1pbGxpc2Vjb25kczogMCwgbW9udGhzOiAwIH07XG4gICAgfVxuXG4gICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgIGlmIChiYXNlLmlzQmVmb3JlKG90aGVyKSkge1xuICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKG90aGVyLCBiYXNlKTtcbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuLy8gVE9ETzogcmVtb3ZlICduYW1lJyBhcmcgYWZ0ZXIgZGVwcmVjYXRpb24gaXMgcmVtb3ZlZFxuZnVuY3Rpb24gY3JlYXRlQWRkZXIoZGlyZWN0aW9uLCBuYW1lKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICB2YXIgZHVyLCB0bXA7XG4gICAgICAgIC8vaW52ZXJ0IHRoZSBhcmd1bWVudHMsIGJ1dCBjb21wbGFpbiBhYm91dCBpdFxuICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICcobnVtYmVyLCBwZXJpb2QpLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdG1wID0gdmFsO1xuICAgICAgICAgICAgdmFsID0gcGVyaW9kO1xuICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICB9XG5cbiAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGFkZFN1YnRyYWN0KG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHtcbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcbiAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgbW9udGhzID0gYWJzUm91bmQoZHVyYXRpb24uX21vbnRocyk7XG5cbiAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgIGlmIChtb250aHMpIHtcbiAgICAgICAgc2V0TW9udGgobW9tLCBnZXQobW9tLCAnTW9udGgnKSArIG1vbnRocyAqIGlzQWRkaW5nKTtcbiAgICB9XG4gICAgaWYgKGRheXMpIHtcbiAgICAgICAgc2V0JDEobW9tLCAnRGF0ZScsIGdldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xuICAgIH1cbiAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgIG1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMgKiBpc0FkZGluZyk7XG4gICAgfVxuICAgIGlmICh1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KG1vbSwgZGF5cyB8fCBtb250aHMpO1xuICAgIH1cbn1cblxudmFyIGFkZCA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKSxcbiAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuZnVuY3Rpb24gaXNTdHJpbmcoaW5wdXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZztcbn1cblxuLy8gdHlwZSBNb21lbnRJbnB1dCA9IE1vbWVudCB8IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgTW9tZW50SW5wdXRPYmplY3QgfCB2b2lkOyAvLyBudWxsIHwgdW5kZWZpbmVkXG5mdW5jdGlvbiBpc01vbWVudElucHV0KGlucHV0KSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgaXNNb21lbnQoaW5wdXQpIHx8XG4gICAgICAgIGlzRGF0ZShpbnB1dCkgfHxcbiAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgIGlzTnVtYmVyKGlucHV0KSB8fFxuICAgICAgICBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHx8XG4gICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgIGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgIGlucHV0ID09PSB1bmRlZmluZWRcbiAgICApO1xufVxuXG5mdW5jdGlvbiBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB7XG4gICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAneWVhcicsXG4gICAgICAgICAgICAneScsXG4gICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICdtb250aCcsXG4gICAgICAgICAgICAnTScsXG4gICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAnZGF5JyxcbiAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAnZGF0ZScsXG4gICAgICAgICAgICAnRCcsXG4gICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgJ2hvdXInLFxuICAgICAgICAgICAgJ2gnLFxuICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICAgICAnbScsXG4gICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgICAgICdzJyxcbiAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgICAgICdtcycsXG4gICAgICAgIF0sXG4gICAgICAgIGksXG4gICAgICAgIHByb3BlcnR5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB7XG4gICAgdmFyIGFycmF5VGVzdCA9IGlzQXJyYXkoaW5wdXQpLFxuICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICBpZiAoYXJyYXlUZXN0KSB7XG4gICAgICAgIGRhdGFUeXBlVGVzdCA9XG4gICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIWlzTnVtYmVyKGl0ZW0pICYmIGlzU3RyaW5nKGlucHV0KTtcbiAgICAgICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5VGVzdCAmJiBkYXRhVHlwZVRlc3Q7XG59XG5cbmZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICdzYW1lRGF5JyxcbiAgICAgICAgICAgICduZXh0RGF5JyxcbiAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICduZXh0V2VlaycsXG4gICAgICAgICAgICAnbGFzdFdlZWsnLFxuICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgXSxcbiAgICAgICAgaSxcbiAgICAgICAgcHJvcGVydHk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xufVxuXG5mdW5jdGlvbiBnZXRDYWxlbmRhckZvcm1hdChteU1vbWVudCwgbm93KSB7XG4gICAgdmFyIGRpZmYgPSBteU1vbWVudC5kaWZmKG5vdywgJ2RheXMnLCB0cnVlKTtcbiAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgID8gJ3NhbWVFbHNlJ1xuICAgICAgICA6IGRpZmYgPCAtMVxuICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgOiBkaWZmIDwgMFxuICAgICAgICA/ICdsYXN0RGF5J1xuICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgID8gJ3NhbWVEYXknXG4gICAgICAgIDogZGlmZiA8IDJcbiAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgOiBkaWZmIDwgN1xuICAgICAgICA/ICduZXh0V2VlaydcbiAgICAgICAgOiAnc2FtZUVsc2UnO1xufVxuXG5mdW5jdGlvbiBjYWxlbmRhciQxKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKCFhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTW9tZW50SW5wdXQoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDYWxlbmRhclNwZWMoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cbiAgICAvLyBHZXR0aW5nIHN0YXJ0LW9mLXRvZGF5IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBsb2NhbC91dGMvb2Zmc2V0IG9yIG5vdC5cbiAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICBzb2QgPSBjbG9uZVdpdGhPZmZzZXQobm93LCB0aGlzKS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgZm9ybWF0ID0gaG9va3MuY2FsZW5kYXJGb3JtYXQodGhpcywgc29kKSB8fCAnc2FtZUVsc2UnLFxuICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgZm9ybWF0cyAmJlxuICAgICAgICAgICAgKGlzRnVuY3Rpb24oZm9ybWF0c1tmb3JtYXRdKVxuICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgIDogZm9ybWF0c1tmb3JtYXRdKTtcblxuICAgIHJldHVybiB0aGlzLmZvcm1hdChcbiAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICApO1xufVxuXG5mdW5jdGlvbiBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcbn1cblxuZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA+IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICB2YXIgbG9jYWxGcm9tID0gaXNNb21lbnQoZnJvbSkgPyBmcm9tIDogY3JlYXRlTG9jYWwoZnJvbSksXG4gICAgICAgIGxvY2FsVG8gPSBpc01vbWVudCh0bykgPyB0byA6IGNyZWF0ZUxvY2FsKHRvKTtcbiAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICByZXR1cm4gKFxuICAgICAgICAoaW5jbHVzaXZpdHlbMF0gPT09ICcoJ1xuICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgIDogIXRoaXMuaXNCZWZvcmUobG9jYWxGcm9tLCB1bml0cykpICYmXG4gICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknXG4gICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICA6ICF0aGlzLmlzQWZ0ZXIobG9jYWxUbywgdW5pdHMpKVxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGlzU2FtZShpbnB1dCwgdW5pdHMpIHtcbiAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpLFxuICAgICAgICBpbnB1dE1zO1xuICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXRNcyA9IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKSA8PSBpbnB1dE1zICYmXG4gICAgICAgICAgICBpbnB1dE1zIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNBZnRlcihpbnB1dCwgdW5pdHMpO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQmVmb3JlKGlucHV0LCB1bml0cyk7XG59XG5cbmZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgdmFyIHRoYXQsIHpvbmVEZWx0YSwgb3V0cHV0O1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gTmFOO1xuICAgIH1cblxuICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gTmFOO1xuICAgIH1cblxuICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzO1xuICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDBcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyA2ZTQ7XG4gICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwXG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDM2ZTU7XG4gICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTtcbiAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0LCBuZWdhdGUgZHN0XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDYwNDhlNTtcbiAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0ICogNywgbmVnYXRlIGRzdFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgb3V0cHV0ID0gdGhpcyAtIHRoYXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiBtb250aERpZmYoYSwgYikge1xuICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgIC8vIGVuZC1vZi1tb250aCBjYWxjdWxhdGlvbnMgd29yayBjb3JyZWN0IHdoZW4gdGhlIHN0YXJ0IG1vbnRoIGhhcyBtb3JlXG4gICAgICAgIC8vIGRheXMgdGhhbiB0aGUgZW5kIG1vbnRoLlxuICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICB9XG4gICAgLy8gZGlmZmVyZW5jZSBpbiBtb250aHNcbiAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICBhbmNob3IgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmLCAnbW9udGhzJyksXG4gICAgICAgIGFuY2hvcjIsXG4gICAgICAgIGFkanVzdDtcblxuICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmICsgMSwgJ21vbnRocycpO1xuICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgfVxuXG4gICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xufVxuXG5ob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbmhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbmZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCdlbicpLmZvcm1hdCgnZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlonKTtcbn1cblxuZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciB1dGMgPSBrZWVwT2Zmc2V0ICE9PSB0cnVlLFxuICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgbSxcbiAgICAgICAgICAgIHV0Y1xuICAgICAgICAgICAgICAgID8gJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSdcbiAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICApO1xuICAgIH1cbiAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgLy8gbmF0aXZlIGltcGxlbWVudGF0aW9uIGlzIH41MHggZmFzdGVyLCB1c2UgaXQgd2hlbiB3ZSBjYW5cbiAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApXG4gICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICBtLFxuICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBodW1hbiByZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIG1vbWVudCB0aGF0IGNhblxuICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICpcbiAqIEBsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC9kb2NzL2FwaS91dGlsLmh0bWwjdXRpbF9jdXN0b21faW5zcGVjdF9mdW5jdGlvbl9vbl9vYmplY3RzXG4gKi9cbmZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gJ21vbWVudC5pbnZhbGlkKC8qICcgKyB0aGlzLl9pICsgJyAqLyknO1xuICAgIH1cbiAgICB2YXIgZnVuYyA9ICdtb21lbnQnLFxuICAgICAgICB6b25lID0gJycsXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgeWVhcixcbiAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgIHN1ZmZpeDtcbiAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgIGZ1bmMgPSB0aGlzLnV0Y09mZnNldCgpID09PSAwID8gJ21vbWVudC51dGMnIDogJ21vbWVudC5wYXJzZVpvbmUnO1xuICAgICAgICB6b25lID0gJ1onO1xuICAgIH1cbiAgICBwcmVmaXggPSAnWycgKyBmdW5jICsgJyhcIl0nO1xuICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICBkYXRldGltZSA9ICctTU0tRERbVF1ISDptbTpzcy5TU1MnO1xuICAgIHN1ZmZpeCA9IHpvbmUgKyAnW1wiKV0nO1xuXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdChpbnB1dFN0cmluZykge1xuICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgaW5wdXRTdHJpbmcgPSB0aGlzLmlzVXRjKClcbiAgICAgICAgICAgID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0Y1xuICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgIH1cbiAgICB2YXIgb3V0cHV0ID0gZm9ybWF0TW9tZW50KHRoaXMsIGlucHV0U3RyaW5nKTtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiBmcm9tKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgdG86IHRoaXMsIGZyb206IHRpbWUgfSlcbiAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBmcm9tTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xufVxuXG5mdW5jdGlvbiB0byh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgaWYgKFxuICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IGZyb206IHRoaXMsIHRvOiB0aW1lIH0pXG4gICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdG9Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xufVxuXG4vLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4vLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyB2YXJpYWJsZXMgZm9yIHRoaXMgaW5zdGFuY2UuXG5mdW5jdGlvbiBsb2NhbGUoa2V5KSB7XG4gICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgIGlmIChuZXdMb2NhbGVEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG52YXIgbGFuZyA9IGRlcHJlY2F0ZShcbiAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGUoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbik7XG5cbmZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbn1cblxudmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgIE1TX1BFUl9NSU5VVEUgPSA2MCAqIE1TX1BFUl9TRUNPTkQsXG4gICAgTVNfUEVSX0hPVVIgPSA2MCAqIE1TX1BFUl9NSU5VVEUsXG4gICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4vLyBhY3R1YWwgbW9kdWxvIC0gaGFuZGxlcyBuZWdhdGl2ZSBudW1iZXJzIChmb3IgZGF0ZXMgYmVmb3JlIDE5NzApOlxuZnVuY3Rpb24gbW9kJDEoZGl2aWRlbmQsIGRpdmlzb3IpIHtcbiAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xufVxuXG5mdW5jdGlvbiBsb2NhbFN0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUoeSwgbSwgZCkudmFsdWVPZigpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBEYXRlLlVUQyh5LCBtLCBkKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHN0YXJ0T2YodW5pdHMpIHtcbiAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMyksXG4gICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgdGltZSAtPSBtb2QkMShcbiAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIGVuZE9mKHVuaXRzKSB7XG4gICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSArIDEsIDAsIDEpIC0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpICsgMyxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KCkgKyA3XG4gICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSArIDEpIC0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICBNU19QRVJfSE9VUiAtXG4gICAgICAgICAgICAgICAgbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX01JTlVURSAtIG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpIC0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgdGltZSArPSBNU19QRVJfU0VDT05EIC0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCkgLSAxO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICByZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCkgLSAodGhpcy5fb2Zmc2V0IHx8IDApICogNjAwMDA7XG59XG5cbmZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxMDAwKTtcbn1cblxuZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSk7XG59XG5cbmZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgdmFyIG0gPSB0aGlzO1xuICAgIHJldHVybiBbXG4gICAgICAgIG0ueWVhcigpLFxuICAgICAgICBtLm1vbnRoKCksXG4gICAgICAgIG0uZGF0ZSgpLFxuICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgbS5taW51dGUoKSxcbiAgICAgICAgbS5zZWNvbmQoKSxcbiAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgIF07XG59XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgIHZhciBtID0gdGhpcztcbiAgICByZXR1cm4ge1xuICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgIG1vbnRoczogbS5tb250aCgpLFxuICAgICAgICBkYXRlOiBtLmRhdGUoKSxcbiAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgbWludXRlczogbS5taW51dGVzKCksXG4gICAgICAgIHNlY29uZHM6IG0uc2Vjb25kcygpLFxuICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIC8vIG5ldyBEYXRlKE5hTikudG9KU09OKCkgPT09IG51bGxcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1ZhbGlkJDIoKSB7XG4gICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7XG59XG5cbmZ1bmN0aW9uIHBhcnNpbmdGbGFncygpIHtcbiAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xufVxuXG5mdW5jdGlvbiBpbnZhbGlkQXQoKSB7XG4gICAgcmV0dXJuIGdldFBhcnNpbmdGbGFncyh0aGlzKS5vdmVyZmxvdztcbn1cblxuZnVuY3Rpb24gY3JlYXRpb25EYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICBmb3JtYXQ6IHRoaXMuX2YsXG4gICAgICAgIGxvY2FsZTogdGhpcy5fbG9jYWxlLFxuICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgIHN0cmljdDogdGhpcy5fc3RyaWN0LFxuICAgIH07XG59XG5cbmFkZEZvcm1hdFRva2VuKCdOJywgMCwgMCwgJ2VyYUFiYnInKTtcbmFkZEZvcm1hdFRva2VuKCdOTicsIDAsIDAsICdlcmFBYmJyJyk7XG5hZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbmFkZEZvcm1hdFRva2VuKCdOTk5OJywgMCwgMCwgJ2VyYU5hbWUnKTtcbmFkZEZvcm1hdFRva2VuKCdOTk5OTicsIDAsIDAsICdlcmFOYXJyb3cnKTtcblxuYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbmFkZEZvcm1hdFRva2VuKCd5JywgWyd5eScsIDJdLCAwLCAnZXJhWWVhcicpO1xuYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eScsIDNdLCAwLCAnZXJhWWVhcicpO1xuYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuYWRkUmVnZXhUb2tlbignTicsIG1hdGNoRXJhQWJicik7XG5hZGRSZWdleFRva2VuKCdOTicsIG1hdGNoRXJhQWJicik7XG5hZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuYWRkUmVnZXhUb2tlbignTk5OTicsIG1hdGNoRXJhTmFtZSk7XG5hZGRSZWdleFRva2VuKCdOTk5OTicsIG1hdGNoRXJhTmFycm93KTtcblxuYWRkUGFyc2VUb2tlbihbJ04nLCAnTk4nLCAnTk5OJywgJ05OTk4nLCAnTk5OTk4nXSwgZnVuY3Rpb24gKFxuICAgIGlucHV0LFxuICAgIGFycmF5LFxuICAgIGNvbmZpZyxcbiAgICB0b2tlblxuKSB7XG4gICAgdmFyIGVyYSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICBpZiAoZXJhKSB7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYSA9IGVyYTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgfVxufSk7XG5cbmFkZFJlZ2V4VG9rZW4oJ3knLCBtYXRjaFVuc2lnbmVkKTtcbmFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG5hZGRSZWdleFRva2VuKCd5eXknLCBtYXRjaFVuc2lnbmVkKTtcbmFkZFJlZ2V4VG9rZW4oJ3l5eXknLCBtYXRjaFVuc2lnbmVkKTtcbmFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbmFkZFBhcnNlVG9rZW4oWyd5JywgJ3l5JywgJ3l5eScsICd5eXl5J10sIFlFQVIpO1xuYWRkUGFyc2VUb2tlbihbJ3lvJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICB2YXIgbWF0Y2g7XG4gICAgaWYgKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSB7XG4gICAgICAgIG1hdGNoID0gaW5wdXQubWF0Y2goY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShpbnB1dCwgbWF0Y2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9XG59KTtcblxuZnVuY3Rpb24gbG9jYWxlRXJhcyhtLCBmb3JtYXQpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbCxcbiAgICAgICAgZGF0ZSxcbiAgICAgICAgZXJhcyA9IHRoaXMuX2VyYXMgfHwgZ2V0TG9jYWxlKCdlbicpLl9lcmFzO1xuICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS5zaW5jZSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgICAgICAgICAgZXJhc1tpXS5zaW5jZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gK0luZmluaXR5O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0udW50aWwpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGVyYXM7XG59XG5cbmZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgIHZhciBpLFxuICAgICAgICBsLFxuICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGFiYnIsXG4gICAgICAgIG5hcnJvdztcbiAgICBlcmFOYW1lID0gZXJhTmFtZS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgYWJiciA9IGVyYXNbaV0uYWJici50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBuYXJyb3cgPSBlcmFzW2ldLm5hcnJvdy50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgIGNhc2UgJ05OTic6XG4gICAgICAgICAgICAgICAgICAgIGlmIChhYmJyID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdOTk5OTic6XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKFtuYW1lLCBhYmJyLCBuYXJyb3ddLmluZGV4T2YoZXJhTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIGxvY2FsZUVyYXNDb252ZXJ0WWVhcihlcmEsIHllYXIpIHtcbiAgICB2YXIgZGlyID0gZXJhLnNpbmNlIDw9IGVyYS51bnRpbCA/ICsxIDogLTE7XG4gICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgdmFyIGksXG4gICAgICAgIGwsXG4gICAgICAgIHZhbCxcbiAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldEVyYU5hcnJvdygpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbCxcbiAgICAgICAgdmFsLFxuICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldEVyYUFiYnIoKSB7XG4gICAgdmFyIGksXG4gICAgICAgIGwsXG4gICAgICAgIHZhbCxcbiAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgdmFyIGksXG4gICAgICAgIGwsXG4gICAgICAgIGRpcixcbiAgICAgICAgdmFsLFxuICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICBkaXIgPSBlcmFzW2ldLnNpbmNlIDw9IGVyYXNbaV0udW50aWwgPyArMSA6IC0xO1xuXG4gICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHx8XG4gICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICBlcmFzW2ldLm9mZnNldFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnllYXIoKTtcbn1cblxuZnVuY3Rpb24gZXJhc05hbWVSZWdleChpc1N0cmljdCkge1xuICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYW1lUmVnZXgnKSkge1xuICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYW1lUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG59XG5cbmZ1bmN0aW9uIGVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpIHtcbiAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzQWJiclJlZ2V4JykpIHtcbiAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzQWJiclJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xufVxuXG5mdW5jdGlvbiBlcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpIHtcbiAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFycm93UmVnZXgnKSkge1xuICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgfVxuICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYXJyb3dSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbn1cblxuZnVuY3Rpb24gbWF0Y2hFcmFBYmJyKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICByZXR1cm4gbG9jYWxlLmVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpO1xufVxuXG5mdW5jdGlvbiBtYXRjaEVyYU5hbWUoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgIHJldHVybiBsb2NhbGUuZXJhc05hbWVSZWdleChpc1N0cmljdCk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoRXJhTmFycm93KGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICByZXR1cm4gbG9jYWxlLmVyYXNOYXJyb3dSZWdleChpc1N0cmljdCk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoRXJhWWVhck9yZGluYWwoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgIHJldHVybiBsb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXggfHwgbWF0Y2hVbnNpZ25lZDtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUVyYXNQYXJzZSgpIHtcbiAgICB2YXIgYWJiclBpZWNlcyA9IFtdLFxuICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgIG5hcnJvd1BpZWNlcyA9IFtdLFxuICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICBpLFxuICAgICAgICBsLFxuICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCk7XG5cbiAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgbmFtZVBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFtZSkpO1xuICAgICAgICBhYmJyUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKSk7XG4gICAgICAgIG5hcnJvd1BpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KSk7XG5cbiAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpKTtcbiAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpKTtcbiAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdykpO1xuICAgIH1cblxuICAgIHRoaXMuX2VyYXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgdGhpcy5fZXJhc0FiYnJSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGFiYnJQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgIHRoaXMuX2VyYXNOYXJyb3dSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAnaSdcbiAgICApO1xufVxuXG4vLyBGT1JNQVRUSU5HXG5cbmFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG59KTtcblxuYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbn0pO1xuXG5mdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuKHRva2VuLCBnZXR0ZXIpIHtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG59XG5cbmFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAnd2Vla1llYXInKTtcbmFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG5hZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5hZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4vLyBBTElBU0VTXG5cbmFkZFVuaXRBbGlhcygnd2Vla1llYXInLCAnZ2cnKTtcbmFkZFVuaXRBbGlhcygnaXNvV2Vla1llYXInLCAnR0cnKTtcblxuLy8gUFJJT1JJVFlcblxuYWRkVW5pdFByaW9yaXR5KCd3ZWVrWWVhcicsIDEpO1xuYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrWWVhcicsIDEpO1xuXG4vLyBQQVJTSU5HXG5cbmFkZFJlZ2V4VG9rZW4oJ0cnLCBtYXRjaFNpZ25lZCk7XG5hZGRSZWdleFRva2VuKCdnJywgbWF0Y2hTaWduZWQpO1xuYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5hZGRSZWdleFRva2VuKCdnZycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbmFkZFJlZ2V4VG9rZW4oJ0dHR0cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG5hZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuYWRkUmVnZXhUb2tlbignR0dHR0cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5hZGRSZWdleFRva2VuKCdnZ2dnZycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuYWRkV2Vla1BhcnNlVG9rZW4oWydnZ2dnJywgJ2dnZ2dnJywgJ0dHR0cnLCAnR0dHR0cnXSwgZnVuY3Rpb24gKFxuICAgIGlucHV0LFxuICAgIHdlZWssXG4gICAgY29uZmlnLFxuICAgIHRva2VuXG4pIHtcbiAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAyKV0gPSB0b0ludChpbnB1dCk7XG59KTtcblxuYWRkV2Vla1BhcnNlVG9rZW4oWydnZycsICdHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICB3ZWVrW3Rva2VuXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbn0pO1xuXG4vLyBNT01FTlRTXG5cbmZ1bmN0aW9uIGdldFNldFdlZWtZZWFyKGlucHV0KSB7XG4gICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGlucHV0LFxuICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgdGhpcy53ZWVrZGF5KCksXG4gICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHRoaXMuaXNvV2VlaygpLFxuICAgICAgICB0aGlzLmlzb1dlZWtkYXkoKSxcbiAgICAgICAgMSxcbiAgICAgICAgNFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldElTT1dlZWtzSW5ZZWFyKCkge1xuICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgMSwgNCk7XG59XG5cbmZ1bmN0aW9uIGdldElTT1dlZWtzSW5JU09XZWVrWWVhcigpIHtcbiAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy5pc29XZWVrWWVhcigpLCAxLCA0KTtcbn1cblxuZnVuY3Rpb24gZ2V0V2Vla3NJblllYXIoKSB7XG4gICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG59XG5cbmZ1bmN0aW9uIGdldFdlZWtzSW5XZWVrWWVhcigpIHtcbiAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy53ZWVrWWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG59XG5cbmZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgIHZhciB3ZWVrc1RhcmdldDtcbiAgICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3ZWVrc1RhcmdldCA9IHdlZWtzSW5ZZWFyKGlucHV0LCBkb3csIGRveSk7XG4gICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgIHdlZWsgPSB3ZWVrc1RhcmdldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgIHZhciBkYXlPZlllYXJEYXRhID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSksXG4gICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKGRheU9mWWVhckRhdGEueWVhciwgMCwgZGF5T2ZZZWFyRGF0YS5kYXlPZlllYXIpO1xuXG4gICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgdGhpcy5tb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgIHRoaXMuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIEZPUk1BVFRJTkdcblxuYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4vLyBBTElBU0VTXG5cbmFkZFVuaXRBbGlhcygncXVhcnRlcicsICdRJyk7XG5cbi8vIFBSSU9SSVRZXG5cbmFkZFVuaXRQcmlvcml0eSgncXVhcnRlcicsIDcpO1xuXG4vLyBQQVJTSU5HXG5cbmFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICBhcnJheVtNT05USF0gPSAodG9JbnQoaW5wdXQpIC0gMSkgKiAzO1xufSk7XG5cbi8vIE1PTUVOVFNcblxuZnVuY3Rpb24gZ2V0U2V0UXVhcnRlcihpbnB1dCkge1xuICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgIDogdGhpcy5tb250aCgoaW5wdXQgLSAxKSAqIDMgKyAodGhpcy5tb250aCgpICUgMykpO1xufVxuXG4vLyBGT1JNQVRUSU5HXG5cbmFkZEZvcm1hdFRva2VuKCdEJywgWydERCcsIDJdLCAnRG8nLCAnZGF0ZScpO1xuXG4vLyBBTElBU0VTXG5cbmFkZFVuaXRBbGlhcygnZGF0ZScsICdEJyk7XG5cbi8vIFBSSU9SSVRZXG5hZGRVbml0UHJpb3JpdHkoJ2RhdGUnLCA5KTtcblxuLy8gUEFSU0lOR1xuXG5hZGRSZWdleFRva2VuKCdEJywgbWF0Y2gxdG8yKTtcbmFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuYWRkUmVnZXhUb2tlbignRG8nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgPyBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2UgfHwgbG9jYWxlLl9vcmRpbmFsUGFyc2VcbiAgICAgICAgOiBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xufSk7XG5cbmFkZFBhcnNlVG9rZW4oWydEJywgJ0REJ10sIERBVEUpO1xuYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbn0pO1xuXG4vLyBNT01FTlRTXG5cbnZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4vLyBGT1JNQVRUSU5HXG5cbmFkZEZvcm1hdFRva2VuKCdEREQnLCBbJ0REREQnLCAzXSwgJ0RERG8nLCAnZGF5T2ZZZWFyJyk7XG5cbi8vIEFMSUFTRVNcblxuYWRkVW5pdEFsaWFzKCdkYXlPZlllYXInLCAnREREJyk7XG5cbi8vIFBSSU9SSVRZXG5hZGRVbml0UHJpb3JpdHkoJ2RheU9mWWVhcicsIDQpO1xuXG4vLyBQQVJTSU5HXG5cbmFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG5hZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbmFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbn0pO1xuXG4vLyBIRUxQRVJTXG5cbi8vIE1PTUVOVFNcblxuZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyKGlucHV0KSB7XG4gICAgdmFyIGRheU9mWWVhciA9XG4gICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNVxuICAgICAgICApICsgMTtcbiAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xufVxuXG4vLyBGT1JNQVRUSU5HXG5cbmFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbi8vIEFMSUFTRVNcblxuYWRkVW5pdEFsaWFzKCdtaW51dGUnLCAnbScpO1xuXG4vLyBQUklPUklUWVxuXG5hZGRVbml0UHJpb3JpdHkoJ21pbnV0ZScsIDE0KTtcblxuLy8gUEFSU0lOR1xuXG5hZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yKTtcbmFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuYWRkUGFyc2VUb2tlbihbJ20nLCAnbW0nXSwgTUlOVVRFKTtcblxuLy8gTU9NRU5UU1xuXG52YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuLy8gRk9STUFUVElOR1xuXG5hZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4vLyBBTElBU0VTXG5cbmFkZFVuaXRBbGlhcygnc2Vjb25kJywgJ3MnKTtcblxuLy8gUFJJT1JJVFlcblxuYWRkVW5pdFByaW9yaXR5KCdzZWNvbmQnLCAxNSk7XG5cbi8vIFBBUlNJTkdcblxuYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMik7XG5hZGRSZWdleFRva2VuKCdzcycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbmFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbi8vIE1PTUVOVFNcblxudmFyIGdldFNldFNlY29uZCA9IG1ha2VHZXRTZXQoJ1NlY29uZHMnLCBmYWxzZSk7XG5cbi8vIEZPUk1BVFRJTkdcblxuYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwMCk7XG59KTtcblxuYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwKTtcbn0pO1xuXG5hZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbmFkZEZvcm1hdFRva2VuKDAsIFsnU1NTUycsIDRdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xufSk7XG5hZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTJywgNV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xufSk7XG5hZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTUycsIDZdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG59KTtcbmFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTUycsIDddLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xufSk7XG5hZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTJywgOF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xufSk7XG5hZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTUycsIDldLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG59KTtcblxuLy8gQUxJQVNFU1xuXG5hZGRVbml0QWxpYXMoJ21pbGxpc2Vjb25kJywgJ21zJyk7XG5cbi8vIFBSSU9SSVRZXG5cbmFkZFVuaXRQcmlvcml0eSgnbWlsbGlzZWNvbmQnLCAxNik7XG5cbi8vIFBBUlNJTkdcblxuYWRkUmVnZXhUb2tlbignUycsIG1hdGNoMXRvMywgbWF0Y2gxKTtcbmFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG52YXIgdG9rZW4sIGdldFNldE1pbGxpc2Vjb25kO1xuZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG59XG5cbmZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbn1cblxuZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbi8vIEZPUk1BVFRJTkdcblxuYWRkRm9ybWF0VG9rZW4oJ3onLCAwLCAwLCAnem9uZUFiYnInKTtcbmFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4vLyBNT01FTlRTXG5cbmZ1bmN0aW9uIGdldFpvbmVBYmJyKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG59XG5cbmZ1bmN0aW9uIGdldFpvbmVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbn1cblxudmFyIHByb3RvID0gTW9tZW50LnByb3RvdHlwZTtcblxucHJvdG8uYWRkID0gYWRkO1xucHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xucHJvdG8uY2xvbmUgPSBjbG9uZTtcbnByb3RvLmRpZmYgPSBkaWZmO1xucHJvdG8uZW5kT2YgPSBlbmRPZjtcbnByb3RvLmZvcm1hdCA9IGZvcm1hdDtcbnByb3RvLmZyb20gPSBmcm9tO1xucHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG5wcm90by50byA9IHRvO1xucHJvdG8udG9Ob3cgPSB0b05vdztcbnByb3RvLmdldCA9IHN0cmluZ0dldDtcbnByb3RvLmludmFsaWRBdCA9IGludmFsaWRBdDtcbnByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xucHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbnByb3RvLmlzQmV0d2VlbiA9IGlzQmV0d2VlbjtcbnByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbnByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xucHJvdG8uaXNTYW1lT3JCZWZvcmUgPSBpc1NhbWVPckJlZm9yZTtcbnByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG5wcm90by5sYW5nID0gbGFuZztcbnByb3RvLmxvY2FsZSA9IGxvY2FsZTtcbnByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xucHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xucHJvdG8ubWluID0gcHJvdG90eXBlTWluO1xucHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xucHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xucHJvdG8uc3RhcnRPZiA9IHN0YXJ0T2Y7XG5wcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xucHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG5wcm90by50b09iamVjdCA9IHRvT2JqZWN0O1xucHJvdG8udG9EYXRlID0gdG9EYXRlO1xucHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbnByb3RvLmluc3BlY3QgPSBpbnNwZWN0O1xuaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJ01vbWVudDwnICsgdGhpcy5mb3JtYXQoKSArICc+JztcbiAgICB9O1xufVxucHJvdG8udG9KU09OID0gdG9KU09OO1xucHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbnByb3RvLnVuaXggPSB1bml4O1xucHJvdG8udmFsdWVPZiA9IHZhbHVlT2Y7XG5wcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG5wcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbnByb3RvLmVyYU5hcnJvdyA9IGdldEVyYU5hcnJvdztcbnByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xucHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG5wcm90by55ZWFyID0gZ2V0U2V0WWVhcjtcbnByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xucHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbnByb3RvLmlzb1dlZWtZZWFyID0gZ2V0U2V0SVNPV2Vla1llYXI7XG5wcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xucHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbnByb3RvLmRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGg7XG5wcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xucHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbnByb3RvLndlZWtzSW5ZZWFyID0gZ2V0V2Vla3NJblllYXI7XG5wcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG5wcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xucHJvdG8uaXNvV2Vla3NJbklTT1dlZWtZZWFyID0gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyO1xucHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG5wcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xucHJvdG8ud2Vla2RheSA9IGdldFNldExvY2FsZURheU9mV2VlaztcbnByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG5wcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG5wcm90by5ob3VyID0gcHJvdG8uaG91cnMgPSBnZXRTZXRIb3VyO1xucHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbnByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG5wcm90by5taWxsaXNlY29uZCA9IHByb3RvLm1pbGxpc2Vjb25kcyA9IGdldFNldE1pbGxpc2Vjb25kO1xucHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xucHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG5wcm90by5sb2NhbCA9IHNldE9mZnNldFRvTG9jYWw7XG5wcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbnByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG5wcm90by5pc0RTVCA9IGlzRGF5bGlnaHRTYXZpbmdUaW1lO1xucHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG5wcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xucHJvdG8uaXNVdGMgPSBpc1V0YztcbnByb3RvLmlzVVRDID0gaXNVdGM7XG5wcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xucHJvdG8uem9uZU5hbWUgPSBnZXRab25lTmFtZTtcbnByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgZ2V0U2V0RGF5T2ZNb250aFxuKTtcbnByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAnbW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkJyxcbiAgICBnZXRTZXRNb250aFxuKTtcbnByb3RvLnllYXJzID0gZGVwcmVjYXRlKFxuICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICBnZXRTZXRZZWFyXG4pO1xucHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgIGdldFNldFpvbmVcbik7XG5wcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgJ2lzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24nLFxuICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuKTtcblxuZnVuY3Rpb24gY3JlYXRlVW5peChpbnB1dCkge1xuICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVJblpvbmUoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG59XG5cbmZ1bmN0aW9uIHByZVBhcnNlUG9zdEZvcm1hdChzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgcHJvdG8kMSA9IExvY2FsZS5wcm90b3R5cGU7XG5cbnByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbnByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbnByb3RvJDEuaW52YWxpZERhdGUgPSBpbnZhbGlkRGF0ZTtcbnByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG5wcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xucHJvdG8kMS5wb3N0Zm9ybWF0ID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xucHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG5wcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xucHJvdG8kMS5zZXQgPSBzZXQ7XG5wcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xucHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG5wcm90byQxLmVyYXNDb252ZXJ0WWVhciA9IGxvY2FsZUVyYXNDb252ZXJ0WWVhcjtcbnByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG5wcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xucHJvdG8kMS5lcmFzTmFycm93UmVnZXggPSBlcmFzTmFycm93UmVnZXg7XG5cbnByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xucHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xucHJvdG8kMS5tb250aHNQYXJzZSA9IGxvY2FsZU1vbnRoc1BhcnNlO1xucHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xucHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbnByb3RvJDEud2VlayA9IGxvY2FsZVdlZWs7XG5wcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG5wcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbnByb3RvJDEud2Vla2RheXMgPSBsb2NhbGVXZWVrZGF5cztcbnByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbnByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG5wcm90byQxLndlZWtkYXlzUGFyc2UgPSBsb2NhbGVXZWVrZGF5c1BhcnNlO1xuXG5wcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xucHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG5wcm90byQxLndlZWtkYXlzTWluUmVnZXggPSB3ZWVrZGF5c01pblJlZ2V4O1xuXG5wcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xucHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG5mdW5jdGlvbiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgc2V0dGVyKSB7XG4gICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgcmV0dXJuIGxvY2FsZVtmaWVsZF0odXRjLCBmb3JtYXQpO1xufVxuXG5mdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCAnbW9udGgnKTtcbiAgICB9XG5cbiAgICB2YXIgaSxcbiAgICAgICAgb3V0ID0gW107XG4gICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5cbi8vICgpXG4vLyAoNSlcbi8vIChmbXQsIDUpXG4vLyAoZm10KVxuLy8gKHRydWUpXG4vLyAodHJ1ZSwgNSlcbi8vICh0cnVlLCBmbXQsIDUpXG4vLyAodHJ1ZSwgZm10KVxuZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgaWYgKHR5cGVvZiBsb2NhbGVTb3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgbG9jYWxlU29ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgIH1cblxuICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgaSxcbiAgICAgICAgb3V0ID0gW107XG5cbiAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCAoaW5kZXggKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCAoaSArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG59XG5cbmZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xufVxuXG5mdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbn1cblxuZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xufVxuXG5mdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbn1cblxuZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICBlcmFzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgIGFiYnI6ICdBRCcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNpbmNlOiAnMDAwMC0xMi0zMScsXG4gICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgbmFtZTogJ0JlZm9yZSBDaHJpc3QnLFxuICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgdG9JbnQoKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICB9LFxufSk7XG5cbi8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgIGdldFNldEdsb2JhbExvY2FsZVxuKTtcbmhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICdtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuJyxcbiAgICBnZXRMb2NhbGVcbik7XG5cbnZhciBtYXRoQWJzID0gTWF0aC5hYnM7XG5cbmZ1bmN0aW9uIGFicygpIHtcbiAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICB0aGlzLl9taWxsaXNlY29uZHMgPSBtYXRoQWJzKHRoaXMuX21pbGxpc2Vjb25kcyk7XG4gICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgZGF0YS5taWxsaXNlY29uZHMgPSBtYXRoQWJzKGRhdGEubWlsbGlzZWNvbmRzKTtcbiAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgIGRhdGEuaG91cnMgPSBtYXRoQWJzKGRhdGEuaG91cnMpO1xuICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICB2YXIgb3RoZXIgPSBjcmVhdGVEdXJhdGlvbihpbnB1dCwgdmFsdWUpO1xuXG4gICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgIGR1cmF0aW9uLl9tb250aHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21vbnRocztcblxuICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG59XG5cbi8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIGFkZCgxLCAncycpIG9yIGFkZChkdXJhdGlvbilcbmZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG59XG5cbi8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG5mdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgLTEpO1xufVxuXG5mdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gYnViYmxlKCkge1xuICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMsXG4gICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICBzZWNvbmRzLFxuICAgICAgICBtaW51dGVzLFxuICAgICAgICBob3VycyxcbiAgICAgICAgeWVhcnMsXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzO1xuXG4gICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgIGlmIChcbiAgICAgICAgIShcbiAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAobWlsbGlzZWNvbmRzIDw9IDAgJiYgZGF5cyA8PSAwICYmIG1vbnRocyA8PSAwKVxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIG1pbGxpc2Vjb25kcyArPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHMpICsgZGF5cykgKiA4NjRlNTtcbiAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgIG1vbnRocyA9IDA7XG4gICAgfVxuXG4gICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcyAlIDEwMDA7XG5cbiAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgIGRhdGEuaG91cnMgPSBob3VycyAlIDI0O1xuXG4gICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICBtb250aHNGcm9tRGF5cyA9IGFic0Zsb29yKGRheXNUb01vbnRocyhkYXlzKSk7XG4gICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICBtb250aHMgJT0gMTI7XG5cbiAgICBkYXRhLmRheXMgPSBkYXlzO1xuICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgIC8vIDQwMCB5ZWFycyBoYXZlIDE0NjA5NyBkYXlzICh0YWtpbmcgaW50byBhY2NvdW50IGxlYXAgeWVhciBydWxlcylcbiAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5Nztcbn1cblxuZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgIHJldHVybiAobW9udGhzICogMTQ2MDk3KSAvIDQ4MDA7XG59XG5cbmZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gTmFOO1xuICAgIH1cbiAgICB2YXIgZGF5cyxcbiAgICAgICAgbW9udGhzLFxuICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzICsgZGF5c1RvTW9udGhzKGRheXMpO1xuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDI0ICsgbWlsbGlzZWNvbmRzIC8gMzZlNTtcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biB1bml0ICcgKyB1bml0cyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuZnVuY3Rpb24gdmFsdWVPZiQxKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzICtcbiAgICAgICAgdGhpcy5fZGF5cyAqIDg2NGU1ICtcbiAgICAgICAgKHRoaXMuX21vbnRocyAlIDEyKSAqIDI1OTJlNiArXG4gICAgICAgIHRvSW50KHRoaXMuX21vbnRocyAvIDEyKSAqIDMxNTM2ZTZcbiAgICApO1xufVxuXG5mdW5jdGlvbiBtYWtlQXMoYWxpYXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgfTtcbn1cblxudmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgIGFzU2Vjb25kcyA9IG1ha2VBcygncycpLFxuICAgIGFzTWludXRlcyA9IG1ha2VBcygnbScpLFxuICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICBhc0RheXMgPSBtYWtlQXMoJ2QnKSxcbiAgICBhc1dlZWtzID0gbWFrZUFzKCd3JyksXG4gICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICBhc1F1YXJ0ZXJzID0gbWFrZUFzKCdRJyksXG4gICAgYXNZZWFycyA9IG1ha2VBcygneScpO1xuXG5mdW5jdGlvbiBjbG9uZSQxKCkge1xuICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbn1cblxuZnVuY3Rpb24gZ2V0JDIodW5pdHMpIHtcbiAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xufVxuXG5mdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9kYXRhW25hbWVdIDogTmFOO1xuICAgIH07XG59XG5cbnZhciBtaWxsaXNlY29uZHMgPSBtYWtlR2V0dGVyKCdtaWxsaXNlY29uZHMnKSxcbiAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgaG91cnMgPSBtYWtlR2V0dGVyKCdob3VycycpLFxuICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgeWVhcnMgPSBtYWtlR2V0dGVyKCd5ZWFycycpO1xuXG5mdW5jdGlvbiB3ZWVrcygpIHtcbiAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbn1cblxudmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICBzczogNDQsIC8vIGEgZmV3IHNlY29uZHMgdG8gc2Vjb25kc1xuICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICBoOiAyMiwgLy8gaG91cnMgdG8gZGF5XG4gICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgTTogMTEsIC8vIG1vbnRocyB0byB5ZWFyXG4gICAgfTtcblxuLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbmZ1bmN0aW9uIHN1YnN0aXR1dGVUaW1lQWdvKHN0cmluZywgbnVtYmVyLCB3aXRob3V0U3VmZml4LCBpc0Z1dHVyZSwgbG9jYWxlKSB7XG4gICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG59XG5cbmZ1bmN0aW9uIHJlbGF0aXZlVGltZSQxKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCB0aHJlc2hvbGRzLCBsb2NhbGUpIHtcbiAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgbWludXRlcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdtJykpLFxuICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgIG1vbnRocyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdNJykpLFxuICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICBhID1cbiAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAobWludXRlcyA8PSAxICYmIFsnbSddKSB8fFxuICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAoaG91cnMgPCB0aHJlc2hvbGRzLmggJiYgWydoaCcsIGhvdXJzXSkgfHxcbiAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgaWYgKHRocmVzaG9sZHMudyAhPSBudWxsKSB7XG4gICAgICAgIGEgPVxuICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgKHdlZWtzIDw9IDEgJiYgWyd3J10pIHx8XG4gICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgfVxuICAgIGEgPSBhIHx8XG4gICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgKHllYXJzIDw9IDEgJiYgWyd5J10pIHx8IFsneXknLCB5ZWFyc107XG5cbiAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICBhWzRdID0gbG9jYWxlO1xuICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgcm91bmRpbmcgZnVuY3Rpb24gZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcm91bmQgPSByb3VuZGluZ0Z1bmN0aW9uO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbmZ1bmN0aW9uIGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCh0aHJlc2hvbGQsIGxpbWl0KSB7XG4gICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICB9XG4gICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgIHRocmVzaG9sZHMuc3MgPSBsaW1pdCAtIDE7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICB9XG5cbiAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICB0aCA9IHRocmVzaG9sZHMsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgb3V0cHV0O1xuXG4gICAgaWYgKHR5cGVvZiBhcmdXaXRoU3VmZml4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICBpZiAoYXJnVGhyZXNob2xkcy5zICE9IG51bGwgJiYgYXJnVGhyZXNob2xkcy5zcyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICBpZiAod2l0aFN1ZmZpeCkge1xuICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9jYWxlLnBvc3Rmb3JtYXQob3V0cHV0KTtcbn1cblxudmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbmZ1bmN0aW9uIHNpZ24oeCkge1xuICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbn1cblxuZnVuY3Rpb24gdG9JU09TdHJpbmckMSgpIHtcbiAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAvLyAgKiBkYXlzIGRvIG5vdCBidWJibGUgYXQgYWxsXG4gICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgLy8gKHRoaW5rIG9mIGNsb2NrIGNoYW5nZXMpXG4gICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgIH1cblxuICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgIGRheXMgPSBhYnMkMSh0aGlzLl9kYXlzKSxcbiAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgbWludXRlcyxcbiAgICAgICAgaG91cnMsXG4gICAgICAgIHllYXJzLFxuICAgICAgICBzLFxuICAgICAgICB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCksXG4gICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgeW1TaWduLFxuICAgICAgICBkYXlzU2lnbixcbiAgICAgICAgaG1zU2lnbjtcblxuICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxuICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgIHJldHVybiAnUDBEJztcbiAgICB9XG5cbiAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICBob3VycyA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XG4gICAgc2Vjb25kcyAlPSA2MDtcbiAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgIG1vbnRocyAlPSAxMjtcblxuICAgIC8vIGluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9kb3JkaWxsZS9tb21lbnQtaXNvZHVyYXRpb24vYmxvYi9tYXN0ZXIvbW9tZW50Lmlzb2R1cmF0aW9uLmpzXG4gICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgeW1TaWduID0gc2lnbih0aGlzLl9tb250aHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgJ1AnICtcbiAgICAgICAgKHllYXJzID8geW1TaWduICsgeWVhcnMgKyAnWScgOiAnJykgK1xuICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAoaG91cnMgfHwgbWludXRlcyB8fCBzZWNvbmRzID8gJ1QnIDogJycpICtcbiAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgIChzZWNvbmRzID8gaG1zU2lnbiArIHMgKyAnUycgOiAnJylcbiAgICApO1xufVxuXG52YXIgcHJvdG8kMiA9IER1cmF0aW9uLnByb3RvdHlwZTtcblxucHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xucHJvdG8kMi5hYnMgPSBhYnM7XG5wcm90byQyLmFkZCA9IGFkZCQxO1xucHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG5wcm90byQyLmFzID0gYXM7XG5wcm90byQyLmFzTWlsbGlzZWNvbmRzID0gYXNNaWxsaXNlY29uZHM7XG5wcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbnByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xucHJvdG8kMi5hc0hvdXJzID0gYXNIb3VycztcbnByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xucHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbnByb3RvJDIuYXNNb250aHMgPSBhc01vbnRocztcbnByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG5wcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xucHJvdG8kMi52YWx1ZU9mID0gdmFsdWVPZiQxO1xucHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xucHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG5wcm90byQyLmdldCA9IGdldCQyO1xucHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG5wcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xucHJvdG8kMi5taW51dGVzID0gbWludXRlcztcbnByb3RvJDIuaG91cnMgPSBob3VycztcbnByb3RvJDIuZGF5cyA9IGRheXM7XG5wcm90byQyLndlZWtzID0gd2Vla3M7XG5wcm90byQyLm1vbnRocyA9IG1vbnRocztcbnByb3RvJDIueWVhcnMgPSB5ZWFycztcbnByb3RvJDIuaHVtYW5pemUgPSBodW1hbml6ZTtcbnByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xucHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG5wcm90byQyLnRvSlNPTiA9IHRvSVNPU3RyaW5nJDE7XG5wcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbnByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbnByb3RvJDIudG9Jc29TdHJpbmcgPSBkZXByZWNhdGUoXG4gICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICB0b0lTT1N0cmluZyQxXG4pO1xucHJvdG8kMi5sYW5nID0gbGFuZztcblxuLy8gRk9STUFUVElOR1xuXG5hZGRGb3JtYXRUb2tlbignWCcsIDAsIDAsICd1bml4Jyk7XG5hZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbi8vIFBBUlNJTkdcblxuYWRkUmVnZXhUb2tlbigneCcsIG1hdGNoU2lnbmVkKTtcbmFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG5hZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgY29uZmlnLl9kID0gbmV3IERhdGUocGFyc2VGbG9hdChpbnB1dCkgKiAxMDAwKTtcbn0pO1xuYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHRvSW50KGlucHV0KSk7XG59KTtcblxuLy8hIG1vbWVudC5qc1xuXG5ob29rcy52ZXJzaW9uID0gJzIuMjkuMSc7XG5cbnNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbmhvb2tzLmZuID0gcHJvdG87XG5ob29rcy5taW4gPSBtaW47XG5ob29rcy5tYXggPSBtYXg7XG5ob29rcy5ub3cgPSBub3c7XG5ob29rcy51dGMgPSBjcmVhdGVVVEM7XG5ob29rcy51bml4ID0gY3JlYXRlVW5peDtcbmhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG5ob29rcy5pc0RhdGUgPSBpc0RhdGU7XG5ob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG5ob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbmhvb2tzLmR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb247XG5ob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG5ob29rcy5wYXJzZVpvbmUgPSBjcmVhdGVJblpvbmU7XG5ob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG5ob29rcy5tb250aHNTaG9ydCA9IGxpc3RNb250aHNTaG9ydDtcbmhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuaG9va3MudXBkYXRlTG9jYWxlID0gdXBkYXRlTG9jYWxlO1xuaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuaG9va3Mubm9ybWFsaXplVW5pdHMgPSBub3JtYWxpemVVbml0cztcbmhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG5ob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG5ob29rcy5jYWxlbmRhckZvcm1hdCA9IGdldENhbGVuZGFyRm9ybWF0O1xuaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbi8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG5ob29rcy5IVE1MNV9GTVQgPSB7XG4gICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgIERBVEVUSU1FX0xPQ0FMX01TOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICBUSU1FX1NFQ09ORFM6ICdISDptbTpzcycsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIxXCIgLz5cbiAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgTU9OVEg6ICdZWVlZLU1NJywgLy8gPGlucHV0IHR5cGU9XCJtb250aFwiIC8+XG59O1xuXG5leHBvcnQgZGVmYXVsdCBob29rcztcbiIsIi8qISBTZWxlY3QyIDQuMC4xMyB8IGh0dHBzOi8vZ2l0aHViLmNvbS9zZWxlY3QyL3NlbGVjdDIvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZCAqL1xuXG4hZnVuY3Rpb24oKXtpZihqUXVlcnkmJmpRdWVyeS5mbiYmalF1ZXJ5LmZuLnNlbGVjdDImJmpRdWVyeS5mbi5zZWxlY3QyLmFtZCl2YXIgZT1qUXVlcnkuZm4uc2VsZWN0Mi5hbWQ7ZS5kZWZpbmUoXCJzZWxlY3QyL2kxOG4vZnJcIixbXSxmdW5jdGlvbigpe3JldHVybntlcnJvckxvYWRpbmc6ZnVuY3Rpb24oKXtyZXR1cm5cIkxlcyByw6lzdWx0YXRzIG5lIHBldXZlbnQgcGFzIMOqdHJlIGNoYXJnw6lzLlwifSxpbnB1dFRvb0xvbmc6ZnVuY3Rpb24oZSl7dmFyIG49ZS5pbnB1dC5sZW5ndGgtZS5tYXhpbXVtO3JldHVyblwiU3VwcHJpbWV6IFwiK24rXCIgY2FyYWN0w6hyZVwiKyhuPjE/XCJzXCI6XCJcIil9LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24oZSl7dmFyIG49ZS5taW5pbXVtLWUuaW5wdXQubGVuZ3RoO3JldHVyblwiU2Fpc2lzc2V6IGF1IG1vaW5zIFwiK24rXCIgY2FyYWN0w6hyZVwiKyhuPjE/XCJzXCI6XCJcIil9LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuXCJDaGFyZ2VtZW50IGRlIHLDqXN1bHRhdHMgc3VwcGzDqW1lbnRhaXJlc+KAplwifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuXCJWb3VzIHBvdXZleiBzZXVsZW1lbnQgc8OpbGVjdGlvbm5lciBcIitlLm1heGltdW0rXCIgw6lsw6ltZW50XCIrKGUubWF4aW11bT4xP1wic1wiOlwiXCIpfSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm5cIkF1Y3VuIHLDqXN1bHRhdCB0cm91dsOpXCJ9LHNlYXJjaGluZzpmdW5jdGlvbigpe3JldHVyblwiUmVjaGVyY2hlIGVuIGNvdXJz4oCmXCJ9LHJlbW92ZUFsbEl0ZW1zOmZ1bmN0aW9uKCl7cmV0dXJuXCJTdXBwcmltZXIgdG91cyBsZXMgw6lsw6ltZW50c1wifX19KSxlLmRlZmluZSxlLnJlcXVpcmV9KCk7IiwiLyohIFNlbGVjdDIgNC4wLjEzIHwgaHR0cHM6Ly9naXRodWIuY29tL3NlbGVjdDIvc2VsZWN0Mi9ibG9iL21hc3Rlci9MSUNFTlNFLm1kICovXG4hZnVuY3Rpb24obil7XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJqcXVlcnlcIl0sbik6XCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9yZXF1aXJlKFwianF1ZXJ5XCIpOnJlcXVpcmUoXCJqcXVlcnlcIikoZSkpLG4odCksdH06bihqUXVlcnkpfShmdW5jdGlvbih1KXt2YXIgZT1mdW5jdGlvbigpe2lmKHUmJnUuZm4mJnUuZm4uc2VsZWN0MiYmdS5mbi5zZWxlY3QyLmFtZCl2YXIgZT11LmZuLnNlbGVjdDIuYW1kO3ZhciB0LG4scixoLG8scyxmLGcsbSx2LHksXyxpLGEsYjtmdW5jdGlvbiB3KGUsdCl7cmV0dXJuIGkuY2FsbChlLHQpfWZ1bmN0aW9uIGwoZSx0KXt2YXIgbixyLGksbyxzLGEsbCxjLHUsZCxwLGg9dCYmdC5zcGxpdChcIi9cIiksZj15Lm1hcCxnPWYmJmZbXCIqXCJdfHx7fTtpZihlKXtmb3Iocz0oZT1lLnNwbGl0KFwiL1wiKSkubGVuZ3RoLTEseS5ub2RlSWRDb21wYXQmJmIudGVzdChlW3NdKSYmKGVbc109ZVtzXS5yZXBsYWNlKGIsXCJcIikpLFwiLlwiPT09ZVswXS5jaGFyQXQoMCkmJmgmJihlPWguc2xpY2UoMCxoLmxlbmd0aC0xKS5jb25jYXQoZSkpLHU9MDt1PGUubGVuZ3RoO3UrKylpZihcIi5cIj09PShwPWVbdV0pKWUuc3BsaWNlKHUsMSksLS11O2Vsc2UgaWYoXCIuLlwiPT09cCl7aWYoMD09PXV8fDE9PT11JiZcIi4uXCI9PT1lWzJdfHxcIi4uXCI9PT1lW3UtMV0pY29udGludWU7MDx1JiYoZS5zcGxpY2UodS0xLDIpLHUtPTIpfWU9ZS5qb2luKFwiL1wiKX1pZigoaHx8ZykmJmYpe2Zvcih1PShuPWUuc3BsaXQoXCIvXCIpKS5sZW5ndGg7MDx1Oy0tdSl7aWYocj1uLnNsaWNlKDAsdSkuam9pbihcIi9cIiksaClmb3IoZD1oLmxlbmd0aDswPGQ7LS1kKWlmKGk9KGk9ZltoLnNsaWNlKDAsZCkuam9pbihcIi9cIildKSYmaVtyXSl7bz1pLGE9dTticmVha31pZihvKWJyZWFrOyFsJiZnJiZnW3JdJiYobD1nW3JdLGM9dSl9IW8mJmwmJihvPWwsYT1jKSxvJiYobi5zcGxpY2UoMCxhLG8pLGU9bi5qb2luKFwiL1wiKSl9cmV0dXJuIGV9ZnVuY3Rpb24gQSh0LG4pe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPWEuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuXCJzdHJpbmdcIiE9dHlwZW9mIGVbMF0mJjE9PT1lLmxlbmd0aCYmZS5wdXNoKG51bGwpLHMuYXBwbHkoaCxlLmNvbmNhdChbdCxuXSkpfX1mdW5jdGlvbiB4KHQpe3JldHVybiBmdW5jdGlvbihlKXttW3RdPWV9fWZ1bmN0aW9uIEQoZSl7aWYodyh2LGUpKXt2YXIgdD12W2VdO2RlbGV0ZSB2W2VdLF9bZV09ITAsby5hcHBseShoLHQpfWlmKCF3KG0sZSkmJiF3KF8sZSkpdGhyb3cgbmV3IEVycm9yKFwiTm8gXCIrZSk7cmV0dXJuIG1bZV19ZnVuY3Rpb24gYyhlKXt2YXIgdCxuPWU/ZS5pbmRleE9mKFwiIVwiKTotMTtyZXR1cm4tMTxuJiYodD1lLnN1YnN0cmluZygwLG4pLGU9ZS5zdWJzdHJpbmcobisxLGUubGVuZ3RoKSksW3QsZV19ZnVuY3Rpb24gUyhlKXtyZXR1cm4gZT9jKGUpOltdfXJldHVybiBlJiZlLnJlcXVpcmVqc3x8KGU/bj1lOmU9e30sbT17fSx2PXt9LHk9e30sXz17fSxpPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksYT1bXS5zbGljZSxiPS9cXC5qcyQvLGY9ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGk9YyhlKSxvPWlbMF0scz10WzFdO3JldHVybiBlPWlbMV0sbyYmKG49RChvPWwobyxzKSkpLG8/ZT1uJiZuLm5vcm1hbGl6ZT9uLm5vcm1hbGl6ZShlLChyPXMsZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxyKX0pKTpsKGUscyk6KG89KGk9YyhlPWwoZSxzKSkpWzBdLGU9aVsxXSxvJiYobj1EKG8pKSkse2Y6bz9vK1wiIVwiK2U6ZSxuOmUscHI6byxwOm59fSxnPXtyZXF1aXJlOmZ1bmN0aW9uKGUpe3JldHVybiBBKGUpfSxleHBvcnRzOmZ1bmN0aW9uKGUpe3ZhciB0PW1bZV07cmV0dXJuIHZvaWQgMCE9PXQ/dDptW2VdPXt9fSxtb2R1bGU6ZnVuY3Rpb24oZSl7cmV0dXJue2lkOmUsdXJpOlwiXCIsZXhwb3J0czptW2VdLGNvbmZpZzoodD1lLGZ1bmN0aW9uKCl7cmV0dXJuIHkmJnkuY29uZmlnJiZ5LmNvbmZpZ1t0XXx8e319KX07dmFyIHR9fSxvPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpLG8scyxhLGwsYyx1LGQ9W10scD10eXBlb2YgbjtpZihjPVMocj1yfHxlKSxcInVuZGVmaW5lZFwiPT1wfHxcImZ1bmN0aW9uXCI9PXApe2Zvcih0PSF0Lmxlbmd0aCYmbi5sZW5ndGg/W1wicmVxdWlyZVwiLFwiZXhwb3J0c1wiLFwibW9kdWxlXCJdOnQsbD0wO2w8dC5sZW5ndGg7bCs9MSlpZihcInJlcXVpcmVcIj09PShvPShhPWYodFtsXSxjKSkuZikpZFtsXT1nLnJlcXVpcmUoZSk7ZWxzZSBpZihcImV4cG9ydHNcIj09PW8pZFtsXT1nLmV4cG9ydHMoZSksdT0hMDtlbHNlIGlmKFwibW9kdWxlXCI9PT1vKWk9ZFtsXT1nLm1vZHVsZShlKTtlbHNlIGlmKHcobSxvKXx8dyh2LG8pfHx3KF8sbykpZFtsXT1EKG8pO2Vsc2V7aWYoIWEucCl0aHJvdyBuZXcgRXJyb3IoZStcIiBtaXNzaW5nIFwiK28pO2EucC5sb2FkKGEubixBKHIsITApLHgobykse30pLGRbbF09bVtvXX1zPW4/bi5hcHBseShtW2VdLGQpOnZvaWQgMCxlJiYoaSYmaS5leHBvcnRzIT09aCYmaS5leHBvcnRzIT09bVtlXT9tW2VdPWkuZXhwb3J0czpzPT09aCYmdXx8KG1bZV09cykpfWVsc2UgZSYmKG1bZV09bil9LHQ9bj1zPWZ1bmN0aW9uKGUsdCxuLHIsaSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIGdbZV0/Z1tlXSh0KTpEKGYoZSxTKHQpKS5mKTtpZighZS5zcGxpY2Upe2lmKCh5PWUpLmRlcHMmJnMoeS5kZXBzLHkuY2FsbGJhY2spLCF0KXJldHVybjt0LnNwbGljZT8oZT10LHQ9bixuPW51bGwpOmU9aH1yZXR1cm4gdD10fHxmdW5jdGlvbigpe30sXCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49cixyPWkpLHI/byhoLGUsdCxuKTpzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7byhoLGUsdCxuKX0sNCksc30scy5jb25maWc9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSl9LHQuX2RlZmluZWQ9bSwocj1mdW5jdGlvbihlLHQsbil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKFwiU2VlIGFsbW9uZCBSRUFETUU6IGluY29ycmVjdCBtb2R1bGUgYnVpbGQsIG5vIG1vZHVsZSBuYW1lXCIpO3Quc3BsaWNlfHwobj10LHQ9W10pLHcobSxlKXx8dyh2LGUpfHwodltlXT1bZSx0LG5dKX0pLmFtZD17alF1ZXJ5OiEwfSxlLnJlcXVpcmVqcz10LGUucmVxdWlyZT1uLGUuZGVmaW5lPXIpLGUuZGVmaW5lKFwiYWxtb25kXCIsZnVuY3Rpb24oKXt9KSxlLmRlZmluZShcImpxdWVyeVwiLFtdLGZ1bmN0aW9uKCl7dmFyIGU9dXx8JDtyZXR1cm4gbnVsbD09ZSYmY29uc29sZSYmY29uc29sZS5lcnJvciYmY29uc29sZS5lcnJvcihcIlNlbGVjdDI6IEFuIGluc3RhbmNlIG9mIGpRdWVyeSBvciBhIGpRdWVyeS1jb21wYXRpYmxlIGxpYnJhcnkgd2FzIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHRoYXQgeW91IGFyZSBpbmNsdWRpbmcgalF1ZXJ5IGJlZm9yZSBTZWxlY3QyIG9uIHlvdXIgd2ViIHBhZ2UuXCIpLGV9KSxlLmRlZmluZShcInNlbGVjdDIvdXRpbHNcIixbXCJqcXVlcnlcIl0sZnVuY3Rpb24obyl7dmFyIGk9e307ZnVuY3Rpb24gdShlKXt2YXIgdD1lLnByb3RvdHlwZSxuPVtdO2Zvcih2YXIgciBpbiB0KXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0W3JdJiZcImNvbnN0cnVjdG9yXCIhPT1yJiZuLnB1c2gocil9cmV0dXJuIG59aS5FeHRlbmQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfWZvcih2YXIgaSBpbiB0KW4uY2FsbCh0LGkpJiYoZVtpXT10W2ldKTtyZXR1cm4gci5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS5wcm90b3R5cGU9bmV3IHIsZS5fX3N1cGVyX189dC5wcm90b3R5cGUsZX0saS5EZWNvcmF0ZT1mdW5jdGlvbihyLGkpe3ZhciBlPXUoaSksdD11KHIpO2Z1bmN0aW9uIG8oKXt2YXIgZT1BcnJheS5wcm90b3R5cGUudW5zaGlmdCx0PWkucHJvdG90eXBlLmNvbnN0cnVjdG9yLmxlbmd0aCxuPXIucHJvdG90eXBlLmNvbnN0cnVjdG9yOzA8dCYmKGUuY2FsbChhcmd1bWVudHMsci5wcm90b3R5cGUuY29uc3RydWN0b3IpLG49aS5wcm90b3R5cGUuY29uc3RydWN0b3IpLG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfWkuZGlzcGxheU5hbWU9ci5kaXNwbGF5TmFtZSxvLnByb3RvdHlwZT1uZXcgZnVuY3Rpb24oKXt0aGlzLmNvbnN0cnVjdG9yPW99O2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcz10W25dO28ucHJvdG90eXBlW3NdPXIucHJvdG90eXBlW3NdfWZ1bmN0aW9uIGEoZSl7dmFyIHQ9ZnVuY3Rpb24oKXt9O2UgaW4gby5wcm90b3R5cGUmJih0PW8ucHJvdG90eXBlW2VdKTt2YXIgbj1pLnByb3RvdHlwZVtlXTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuY2FsbChhcmd1bWVudHMsdCksbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZvcih2YXIgbD0wO2w8ZS5sZW5ndGg7bCsrKXt2YXIgYz1lW2xdO28ucHJvdG90eXBlW2NdPWEoYyl9cmV0dXJuIG99O2Z1bmN0aW9uIGUoKXt0aGlzLmxpc3RlbmVycz17fX1lLnByb3RvdHlwZS5vbj1mdW5jdGlvbihlLHQpe3RoaXMubGlzdGVuZXJzPXRoaXMubGlzdGVuZXJzfHx7fSxlIGluIHRoaXMubGlzdGVuZXJzP3RoaXMubGlzdGVuZXJzW2VdLnB1c2godCk6dGhpcy5saXN0ZW5lcnNbZV09W3RdfSxlLnByb3RvdHlwZS50cmlnZ2VyPWZ1bmN0aW9uKGUpe3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZSxuPXQuY2FsbChhcmd1bWVudHMsMSk7dGhpcy5saXN0ZW5lcnM9dGhpcy5saXN0ZW5lcnN8fHt9LG51bGw9PW4mJihuPVtdKSwwPT09bi5sZW5ndGgmJm4ucHVzaCh7fSksKG5bMF0uX3R5cGU9ZSlpbiB0aGlzLmxpc3RlbmVycyYmdGhpcy5pbnZva2UodGhpcy5saXN0ZW5lcnNbZV0sdC5jYWxsKGFyZ3VtZW50cywxKSksXCIqXCJpbiB0aGlzLmxpc3RlbmVycyYmdGhpcy5pbnZva2UodGhpcy5saXN0ZW5lcnNbXCIqXCJdLGFyZ3VtZW50cyl9LGUucHJvdG90eXBlLmludm9rZT1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wLHI9ZS5sZW5ndGg7bjxyO24rKyllW25dLmFwcGx5KHRoaXMsdCl9LGkuT2JzZXJ2YWJsZT1lLGkuZ2VuZXJhdGVDaGFycz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9XCJcIixuPTA7bjxlO24rKyl7dCs9TWF0aC5mbG9vcigzNipNYXRoLnJhbmRvbSgpKS50b1N0cmluZygzNil9cmV0dXJuIHR9LGkuYmluZD1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbigpe2UuYXBwbHkodCxhcmd1bWVudHMpfX0saS5fY29udmVydERhdGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0IGluIGUpe3ZhciBuPXQuc3BsaXQoXCItXCIpLHI9ZTtpZigxIT09bi5sZW5ndGgpe2Zvcih2YXIgaT0wO2k8bi5sZW5ndGg7aSsrKXt2YXIgbz1uW2ldOyhvPW8uc3Vic3RyaW5nKDAsMSkudG9Mb3dlckNhc2UoKStvLnN1YnN0cmluZygxKSlpbiByfHwocltvXT17fSksaT09bi5sZW5ndGgtMSYmKHJbb109ZVt0XSkscj1yW29dfWRlbGV0ZSBlW3RdfX1yZXR1cm4gZX0saS5oYXNTY3JvbGw9ZnVuY3Rpb24oZSx0KXt2YXIgbj1vKHQpLHI9dC5zdHlsZS5vdmVyZmxvd1gsaT10LnN0eWxlLm92ZXJmbG93WTtyZXR1cm4ociE9PWl8fFwiaGlkZGVuXCIhPT1pJiZcInZpc2libGVcIiE9PWkpJiYoXCJzY3JvbGxcIj09PXJ8fFwic2Nyb2xsXCI9PT1pfHwobi5pbm5lckhlaWdodCgpPHQuc2Nyb2xsSGVpZ2h0fHxuLmlubmVyV2lkdGgoKTx0LnNjcm9sbFdpZHRoKSl9LGkuZXNjYXBlTWFya3VwPWZ1bmN0aW9uKGUpe3ZhciB0PXtcIlxcXFxcIjpcIiYjOTI7XCIsXCImXCI6XCImYW1wO1wiLFwiPFwiOlwiJmx0O1wiLFwiPlwiOlwiJmd0O1wiLCdcIic6XCImcXVvdDtcIixcIidcIjpcIiYjMzk7XCIsXCIvXCI6XCImIzQ3O1wifTtyZXR1cm5cInN0cmluZ1wiIT10eXBlb2YgZT9lOlN0cmluZyhlKS5yZXBsYWNlKC9bJjw+XCInXFwvXFxcXF0vZyxmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pfSxpLmFwcGVuZE1hbnk9ZnVuY3Rpb24oZSx0KXtpZihcIjEuN1wiPT09by5mbi5qcXVlcnkuc3Vic3RyKDAsMykpe3ZhciBuPW8oKTtvLm1hcCh0LGZ1bmN0aW9uKGUpe249bi5hZGQoZSl9KSx0PW59ZS5hcHBlbmQodCl9LGkuX19jYWNoZT17fTt2YXIgbj0wO3JldHVybiBpLkdldFVuaXF1ZUVsZW1lbnRJZD1mdW5jdGlvbihlKXt2YXIgdD1lLmdldEF0dHJpYnV0ZShcImRhdGEtc2VsZWN0Mi1pZFwiKTtyZXR1cm4gbnVsbD09dCYmKGUuaWQ/KHQ9ZS5pZCxlLnNldEF0dHJpYnV0ZShcImRhdGEtc2VsZWN0Mi1pZFwiLHQpKTooZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLXNlbGVjdDItaWRcIiwrK24pLHQ9bi50b1N0cmluZygpKSksdH0saS5TdG9yZURhdGE9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWkuR2V0VW5pcXVlRWxlbWVudElkKGUpO2kuX19jYWNoZVtyXXx8KGkuX19jYWNoZVtyXT17fSksaS5fX2NhY2hlW3JdW3RdPW59LGkuR2V0RGF0YT1mdW5jdGlvbihlLHQpe3ZhciBuPWkuR2V0VW5pcXVlRWxlbWVudElkKGUpO3JldHVybiB0P2kuX19jYWNoZVtuXSYmbnVsbCE9aS5fX2NhY2hlW25dW3RdP2kuX19jYWNoZVtuXVt0XTpvKGUpLmRhdGEodCk6aS5fX2NhY2hlW25dfSxpLlJlbW92ZURhdGE9ZnVuY3Rpb24oZSl7dmFyIHQ9aS5HZXRVbmlxdWVFbGVtZW50SWQoZSk7bnVsbCE9aS5fX2NhY2hlW3RdJiZkZWxldGUgaS5fX2NhY2hlW3RdLGUucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1zZWxlY3QyLWlkXCIpfSxpfSksZS5kZWZpbmUoXCJzZWxlY3QyL3Jlc3VsdHNcIixbXCJqcXVlcnlcIixcIi4vdXRpbHNcIl0sZnVuY3Rpb24oaCxmKXtmdW5jdGlvbiByKGUsdCxuKXt0aGlzLiRlbGVtZW50PWUsdGhpcy5kYXRhPW4sdGhpcy5vcHRpb25zPXQsci5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKX1yZXR1cm4gZi5FeHRlbmQocixmLk9ic2VydmFibGUpLHIucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPWgoJzx1bCBjbGFzcz1cInNlbGVjdDItcmVzdWx0c19fb3B0aW9uc1wiIHJvbGU9XCJsaXN0Ym94XCI+PC91bD4nKTtyZXR1cm4gdGhpcy5vcHRpb25zLmdldChcIm11bHRpcGxlXCIpJiZlLmF0dHIoXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiLFwidHJ1ZVwiKSx0aGlzLiRyZXN1bHRzPWV9LHIucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy4kcmVzdWx0cy5lbXB0eSgpfSxyLnByb3RvdHlwZS5kaXNwbGF5TWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wdGlvbnMuZ2V0KFwiZXNjYXBlTWFya3VwXCIpO3RoaXMuY2xlYXIoKSx0aGlzLmhpZGVMb2FkaW5nKCk7dmFyIG49aCgnPGxpIHJvbGU9XCJhbGVydFwiIGFyaWEtbGl2ZT1cImFzc2VydGl2ZVwiIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25cIj48L2xpPicpLHI9dGhpcy5vcHRpb25zLmdldChcInRyYW5zbGF0aW9uc1wiKS5nZXQoZS5tZXNzYWdlKTtuLmFwcGVuZCh0KHIoZS5hcmdzKSkpLG5bMF0uY2xhc3NOYW1lKz1cIiBzZWxlY3QyLXJlc3VsdHNfX21lc3NhZ2VcIix0aGlzLiRyZXN1bHRzLmFwcGVuZChuKX0sci5wcm90b3R5cGUuaGlkZU1lc3NhZ2VzPWZ1bmN0aW9uKCl7dGhpcy4kcmVzdWx0cy5maW5kKFwiLnNlbGVjdDItcmVzdWx0c19fbWVzc2FnZVwiKS5yZW1vdmUoKX0sci5wcm90b3R5cGUuYXBwZW5kPWZ1bmN0aW9uKGUpe3RoaXMuaGlkZUxvYWRpbmcoKTt2YXIgdD1bXTtpZihudWxsIT1lLnJlc3VsdHMmJjAhPT1lLnJlc3VsdHMubGVuZ3RoKXtlLnJlc3VsdHM9dGhpcy5zb3J0KGUucmVzdWx0cyk7Zm9yKHZhciBuPTA7bjxlLnJlc3VsdHMubGVuZ3RoO24rKyl7dmFyIHI9ZS5yZXN1bHRzW25dLGk9dGhpcy5vcHRpb24ocik7dC5wdXNoKGkpfXRoaXMuJHJlc3VsdHMuYXBwZW5kKHQpfWVsc2UgMD09PXRoaXMuJHJlc3VsdHMuY2hpbGRyZW4oKS5sZW5ndGgmJnRoaXMudHJpZ2dlcihcInJlc3VsdHM6bWVzc2FnZVwiLHttZXNzYWdlOlwibm9SZXN1bHRzXCJ9KX0sci5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oZSx0KXt0LmZpbmQoXCIuc2VsZWN0Mi1yZXN1bHRzXCIpLmFwcGVuZChlKX0sci5wcm90b3R5cGUuc29ydD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zLmdldChcInNvcnRlclwiKShlKX0sci5wcm90b3R5cGUuaGlnaGxpZ2h0Rmlyc3RJdGVtPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kcmVzdWx0cy5maW5kKFwiLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdXCIpLHQ9ZS5maWx0ZXIoXCJbYXJpYS1zZWxlY3RlZD10cnVlXVwiKTswPHQubGVuZ3RoP3QuZmlyc3QoKS50cmlnZ2VyKFwibW91c2VlbnRlclwiKTplLmZpcnN0KCkudHJpZ2dlcihcIm1vdXNlZW50ZXJcIiksdGhpcy5lbnN1cmVIaWdobGlnaHRWaXNpYmxlKCl9LHIucHJvdG90eXBlLnNldENsYXNzZXM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZGF0YS5jdXJyZW50KGZ1bmN0aW9uKGUpe3ZhciByPWgubWFwKGUsZnVuY3Rpb24oZSl7cmV0dXJuIGUuaWQudG9TdHJpbmcoKX0pO3QuJHJlc3VsdHMuZmluZChcIi5zZWxlY3QyLXJlc3VsdHNfX29wdGlvblthcmlhLXNlbGVjdGVkXVwiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9aCh0aGlzKSx0PWYuR2V0RGF0YSh0aGlzLFwiZGF0YVwiKSxuPVwiXCIrdC5pZDtudWxsIT10LmVsZW1lbnQmJnQuZWxlbWVudC5zZWxlY3RlZHx8bnVsbD09dC5lbGVtZW50JiYtMTxoLmluQXJyYXkobixyKT9lLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIsXCJ0cnVlXCIpOmUuYXR0cihcImFyaWEtc2VsZWN0ZWRcIixcImZhbHNlXCIpfSl9KX0sci5wcm90b3R5cGUuc2hvd0xvYWRpbmc9ZnVuY3Rpb24oZSl7dGhpcy5oaWRlTG9hZGluZygpO3ZhciB0PXtkaXNhYmxlZDohMCxsb2FkaW5nOiEwLHRleHQ6dGhpcy5vcHRpb25zLmdldChcInRyYW5zbGF0aW9uc1wiKS5nZXQoXCJzZWFyY2hpbmdcIikoZSl9LG49dGhpcy5vcHRpb24odCk7bi5jbGFzc05hbWUrPVwiIGxvYWRpbmctcmVzdWx0c1wiLHRoaXMuJHJlc3VsdHMucHJlcGVuZChuKX0sci5wcm90b3R5cGUuaGlkZUxvYWRpbmc9ZnVuY3Rpb24oKXt0aGlzLiRyZXN1bHRzLmZpbmQoXCIubG9hZGluZy1yZXN1bHRzXCIpLnJlbW92ZSgpfSxyLnByb3RvdHlwZS5vcHRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpXCIpO3QuY2xhc3NOYW1lPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb25cIjt2YXIgbj17cm9sZTpcIm9wdGlvblwiLFwiYXJpYS1zZWxlY3RlZFwiOlwiZmFsc2VcIn0scj13aW5kb3cuRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlc3x8d2luZG93LkVsZW1lbnQucHJvdG90eXBlLm1zTWF0Y2hlc1NlbGVjdG9yfHx3aW5kb3cuRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yO2Zvcih2YXIgaSBpbihudWxsIT1lLmVsZW1lbnQmJnIuY2FsbChlLmVsZW1lbnQsXCI6ZGlzYWJsZWRcIil8fG51bGw9PWUuZWxlbWVudCYmZS5kaXNhYmxlZCkmJihkZWxldGUgbltcImFyaWEtc2VsZWN0ZWRcIl0sbltcImFyaWEtZGlzYWJsZWRcIl09XCJ0cnVlXCIpLG51bGw9PWUuaWQmJmRlbGV0ZSBuW1wiYXJpYS1zZWxlY3RlZFwiXSxudWxsIT1lLl9yZXN1bHRJZCYmKHQuaWQ9ZS5fcmVzdWx0SWQpLGUudGl0bGUmJih0LnRpdGxlPWUudGl0bGUpLGUuY2hpbGRyZW4mJihuLnJvbGU9XCJncm91cFwiLG5bXCJhcmlhLWxhYmVsXCJdPWUudGV4dCxkZWxldGUgbltcImFyaWEtc2VsZWN0ZWRcIl0pLG4pe3ZhciBvPW5baV07dC5zZXRBdHRyaWJ1dGUoaSxvKX1pZihlLmNoaWxkcmVuKXt2YXIgcz1oKHQpLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiKTthLmNsYXNzTmFtZT1cInNlbGVjdDItcmVzdWx0c19fZ3JvdXBcIjtoKGEpO3RoaXMudGVtcGxhdGUoZSxhKTtmb3IodmFyIGw9W10sYz0wO2M8ZS5jaGlsZHJlbi5sZW5ndGg7YysrKXt2YXIgdT1lLmNoaWxkcmVuW2NdLGQ9dGhpcy5vcHRpb24odSk7bC5wdXNoKGQpfXZhciBwPWgoXCI8dWw+PC91bD5cIix7Y2xhc3M6XCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbnMgc2VsZWN0Mi1yZXN1bHRzX19vcHRpb25zLS1uZXN0ZWRcIn0pO3AuYXBwZW5kKGwpLHMuYXBwZW5kKGEpLHMuYXBwZW5kKHApfWVsc2UgdGhpcy50ZW1wbGF0ZShlLHQpO3JldHVybiBmLlN0b3JlRGF0YSh0LFwiZGF0YVwiLGUpLHR9LHIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24odCxlKXt2YXIgbD10aGlzLG49dC5pZCtcIi1yZXN1bHRzXCI7dGhpcy4kcmVzdWx0cy5hdHRyKFwiaWRcIixuKSx0Lm9uKFwicmVzdWx0czphbGxcIixmdW5jdGlvbihlKXtsLmNsZWFyKCksbC5hcHBlbmQoZS5kYXRhKSx0LmlzT3BlbigpJiYobC5zZXRDbGFzc2VzKCksbC5oaWdobGlnaHRGaXJzdEl0ZW0oKSl9KSx0Lm9uKFwicmVzdWx0czphcHBlbmRcIixmdW5jdGlvbihlKXtsLmFwcGVuZChlLmRhdGEpLHQuaXNPcGVuKCkmJmwuc2V0Q2xhc3NlcygpfSksdC5vbihcInF1ZXJ5XCIsZnVuY3Rpb24oZSl7bC5oaWRlTWVzc2FnZXMoKSxsLnNob3dMb2FkaW5nKGUpfSksdC5vbihcInNlbGVjdFwiLGZ1bmN0aW9uKCl7dC5pc09wZW4oKSYmKGwuc2V0Q2xhc3NlcygpLGwub3B0aW9ucy5nZXQoXCJzY3JvbGxBZnRlclNlbGVjdFwiKSYmbC5oaWdobGlnaHRGaXJzdEl0ZW0oKSl9KSx0Lm9uKFwidW5zZWxlY3RcIixmdW5jdGlvbigpe3QuaXNPcGVuKCkmJihsLnNldENsYXNzZXMoKSxsLm9wdGlvbnMuZ2V0KFwic2Nyb2xsQWZ0ZXJTZWxlY3RcIikmJmwuaGlnaGxpZ2h0Rmlyc3RJdGVtKCkpfSksdC5vbihcIm9wZW5cIixmdW5jdGlvbigpe2wuJHJlc3VsdHMuYXR0cihcImFyaWEtZXhwYW5kZWRcIixcInRydWVcIiksbC4kcmVzdWx0cy5hdHRyKFwiYXJpYS1oaWRkZW5cIixcImZhbHNlXCIpLGwuc2V0Q2xhc3NlcygpLGwuZW5zdXJlSGlnaGxpZ2h0VmlzaWJsZSgpfSksdC5vbihcImNsb3NlXCIsZnVuY3Rpb24oKXtsLiRyZXN1bHRzLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJmYWxzZVwiKSxsLiRyZXN1bHRzLmF0dHIoXCJhcmlhLWhpZGRlblwiLFwidHJ1ZVwiKSxsLiRyZXN1bHRzLnJlbW92ZUF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIil9KSx0Lm9uKFwicmVzdWx0czp0b2dnbGVcIixmdW5jdGlvbigpe3ZhciBlPWwuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7MCE9PWUubGVuZ3RoJiZlLnRyaWdnZXIoXCJtb3VzZXVwXCIpfSksdC5vbihcInJlc3VsdHM6c2VsZWN0XCIsZnVuY3Rpb24oKXt2YXIgZT1sLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpO2lmKDAhPT1lLmxlbmd0aCl7dmFyIHQ9Zi5HZXREYXRhKGVbMF0sXCJkYXRhXCIpO1widHJ1ZVwiPT1lLmF0dHIoXCJhcmlhLXNlbGVjdGVkXCIpP2wudHJpZ2dlcihcImNsb3NlXCIse30pOmwudHJpZ2dlcihcInNlbGVjdFwiLHtkYXRhOnR9KX19KSx0Lm9uKFwicmVzdWx0czpwcmV2aW91c1wiLGZ1bmN0aW9uKCl7dmFyIGU9bC5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKSx0PWwuJHJlc3VsdHMuZmluZChcIlthcmlhLXNlbGVjdGVkXVwiKSxuPXQuaW5kZXgoZSk7aWYoIShuPD0wKSl7dmFyIHI9bi0xOzA9PT1lLmxlbmd0aCYmKHI9MCk7dmFyIGk9dC5lcShyKTtpLnRyaWdnZXIoXCJtb3VzZWVudGVyXCIpO3ZhciBvPWwuJHJlc3VsdHMub2Zmc2V0KCkudG9wLHM9aS5vZmZzZXQoKS50b3AsYT1sLiRyZXN1bHRzLnNjcm9sbFRvcCgpKyhzLW8pOzA9PT1yP2wuJHJlc3VsdHMuc2Nyb2xsVG9wKDApOnMtbzwwJiZsLiRyZXN1bHRzLnNjcm9sbFRvcChhKX19KSx0Lm9uKFwicmVzdWx0czpuZXh0XCIsZnVuY3Rpb24oKXt2YXIgZT1sLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpLHQ9bC4kcmVzdWx0cy5maW5kKFwiW2FyaWEtc2VsZWN0ZWRdXCIpLG49dC5pbmRleChlKSsxO2lmKCEobj49dC5sZW5ndGgpKXt2YXIgcj10LmVxKG4pO3IudHJpZ2dlcihcIm1vdXNlZW50ZXJcIik7dmFyIGk9bC4kcmVzdWx0cy5vZmZzZXQoKS50b3ArbC4kcmVzdWx0cy5vdXRlckhlaWdodCghMSksbz1yLm9mZnNldCgpLnRvcCtyLm91dGVySGVpZ2h0KCExKSxzPWwuJHJlc3VsdHMuc2Nyb2xsVG9wKCkrby1pOzA9PT1uP2wuJHJlc3VsdHMuc2Nyb2xsVG9wKDApOmk8byYmbC4kcmVzdWx0cy5zY3JvbGxUb3Aocyl9fSksdC5vbihcInJlc3VsdHM6Zm9jdXNcIixmdW5jdGlvbihlKXtlLmVsZW1lbnQuYWRkQ2xhc3MoXCJzZWxlY3QyLXJlc3VsdHNfX29wdGlvbi0taGlnaGxpZ2h0ZWRcIil9KSx0Lm9uKFwicmVzdWx0czptZXNzYWdlXCIsZnVuY3Rpb24oZSl7bC5kaXNwbGF5TWVzc2FnZShlKX0pLGguZm4ubW91c2V3aGVlbCYmdGhpcy4kcmVzdWx0cy5vbihcIm1vdXNld2hlZWxcIixmdW5jdGlvbihlKXt2YXIgdD1sLiRyZXN1bHRzLnNjcm9sbFRvcCgpLG49bC4kcmVzdWx0cy5nZXQoMCkuc2Nyb2xsSGVpZ2h0LXQrZS5kZWx0YVkscj0wPGUuZGVsdGFZJiZ0LWUuZGVsdGFZPD0wLGk9ZS5kZWx0YVk8MCYmbjw9bC4kcmVzdWx0cy5oZWlnaHQoKTtyPyhsLiRyZXN1bHRzLnNjcm9sbFRvcCgwKSxlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSk6aSYmKGwuJHJlc3VsdHMuc2Nyb2xsVG9wKGwuJHJlc3VsdHMuZ2V0KDApLnNjcm9sbEhlaWdodC1sLiRyZXN1bHRzLmhlaWdodCgpKSxlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSl9KSx0aGlzLiRyZXN1bHRzLm9uKFwibW91c2V1cFwiLFwiLnNlbGVjdDItcmVzdWx0c19fb3B0aW9uW2FyaWEtc2VsZWN0ZWRdXCIsZnVuY3Rpb24oZSl7dmFyIHQ9aCh0aGlzKSxuPWYuR2V0RGF0YSh0aGlzLFwiZGF0YVwiKTtcInRydWVcIiE9PXQuYXR0cihcImFyaWEtc2VsZWN0ZWRcIik/bC50cmlnZ2VyKFwic2VsZWN0XCIse29yaWdpbmFsRXZlbnQ6ZSxkYXRhOm59KTpsLm9wdGlvbnMuZ2V0KFwibXVsdGlwbGVcIik/bC50cmlnZ2VyKFwidW5zZWxlY3RcIix7b3JpZ2luYWxFdmVudDplLGRhdGE6bn0pOmwudHJpZ2dlcihcImNsb3NlXCIse30pfSksdGhpcy4kcmVzdWx0cy5vbihcIm1vdXNlZW50ZXJcIixcIi5zZWxlY3QyLXJlc3VsdHNfX29wdGlvblthcmlhLXNlbGVjdGVkXVwiLGZ1bmN0aW9uKGUpe3ZhciB0PWYuR2V0RGF0YSh0aGlzLFwiZGF0YVwiKTtsLmdldEhpZ2hsaWdodGVkUmVzdWx0cygpLnJlbW92ZUNsYXNzKFwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkXCIpLGwudHJpZ2dlcihcInJlc3VsdHM6Zm9jdXNcIix7ZGF0YTp0LGVsZW1lbnQ6aCh0aGlzKX0pfSl9LHIucHJvdG90eXBlLmdldEhpZ2hsaWdodGVkUmVzdWx0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRyZXN1bHRzLmZpbmQoXCIuc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWhpZ2hsaWdodGVkXCIpfSxyLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kcmVzdWx0cy5yZW1vdmUoKX0sci5wcm90b3R5cGUuZW5zdXJlSGlnaGxpZ2h0VmlzaWJsZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0SGlnaGxpZ2h0ZWRSZXN1bHRzKCk7aWYoMCE9PWUubGVuZ3RoKXt2YXIgdD10aGlzLiRyZXN1bHRzLmZpbmQoXCJbYXJpYS1zZWxlY3RlZF1cIikuaW5kZXgoZSksbj10aGlzLiRyZXN1bHRzLm9mZnNldCgpLnRvcCxyPWUub2Zmc2V0KCkudG9wLGk9dGhpcy4kcmVzdWx0cy5zY3JvbGxUb3AoKSsoci1uKSxvPXItbjtpLT0yKmUub3V0ZXJIZWlnaHQoITEpLHQ8PTI/dGhpcy4kcmVzdWx0cy5zY3JvbGxUb3AoMCk6KG8+dGhpcy4kcmVzdWx0cy5vdXRlckhlaWdodCgpfHxvPDApJiZ0aGlzLiRyZXN1bHRzLnNjcm9sbFRvcChpKX19LHIucHJvdG90eXBlLnRlbXBsYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5vcHRpb25zLmdldChcInRlbXBsYXRlUmVzdWx0XCIpLHI9dGhpcy5vcHRpb25zLmdldChcImVzY2FwZU1hcmt1cFwiKSxpPW4oZSx0KTtudWxsPT1pP3Quc3R5bGUuZGlzcGxheT1cIm5vbmVcIjpcInN0cmluZ1wiPT10eXBlb2YgaT90LmlubmVySFRNTD1yKGkpOmgodCkuYXBwZW5kKGkpfSxyfSksZS5kZWZpbmUoXCJzZWxlY3QyL2tleXNcIixbXSxmdW5jdGlvbigpe3JldHVybntCQUNLU1BBQ0U6OCxUQUI6OSxFTlRFUjoxMyxTSElGVDoxNixDVFJMOjE3LEFMVDoxOCxFU0M6MjcsU1BBQ0U6MzIsUEFHRV9VUDozMyxQQUdFX0RPV046MzQsRU5EOjM1LEhPTUU6MzYsTEVGVDozNyxVUDozOCxSSUdIVDozOSxET1dOOjQwLERFTEVURTo0Nn19KSxlLmRlZmluZShcInNlbGVjdDIvc2VsZWN0aW9uL2Jhc2VcIixbXCJqcXVlcnlcIixcIi4uL3V0aWxzXCIsXCIuLi9rZXlzXCJdLGZ1bmN0aW9uKG4scixpKXtmdW5jdGlvbiBvKGUsdCl7dGhpcy4kZWxlbWVudD1lLHRoaXMub3B0aW9ucz10LG8uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIHIuRXh0ZW5kKG8sci5PYnNlcnZhYmxlKSxvLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT1uKCc8c3BhbiBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uXCIgcm9sZT1cImNvbWJvYm94XCIgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+PC9zcGFuPicpO3JldHVybiB0aGlzLl90YWJpbmRleD0wLG51bGwhPXIuR2V0RGF0YSh0aGlzLiRlbGVtZW50WzBdLFwib2xkLXRhYmluZGV4XCIpP3RoaXMuX3RhYmluZGV4PXIuR2V0RGF0YSh0aGlzLiRlbGVtZW50WzBdLFwib2xkLXRhYmluZGV4XCIpOm51bGwhPXRoaXMuJGVsZW1lbnQuYXR0cihcInRhYmluZGV4XCIpJiYodGhpcy5fdGFiaW5kZXg9dGhpcy4kZWxlbWVudC5hdHRyKFwidGFiaW5kZXhcIikpLGUuYXR0cihcInRpdGxlXCIsdGhpcy4kZWxlbWVudC5hdHRyKFwidGl0bGVcIikpLGUuYXR0cihcInRhYmluZGV4XCIsdGhpcy5fdGFiaW5kZXgpLGUuYXR0cihcImFyaWEtZGlzYWJsZWRcIixcImZhbHNlXCIpLHRoaXMuJHNlbGVjdGlvbj1lfSxvLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyxyPWUuaWQrXCItcmVzdWx0c1wiO3RoaXMuY29udGFpbmVyPWUsdGhpcy4kc2VsZWN0aW9uLm9uKFwiZm9jdXNcIixmdW5jdGlvbihlKXtuLnRyaWdnZXIoXCJmb2N1c1wiLGUpfSksdGhpcy4kc2VsZWN0aW9uLm9uKFwiYmx1clwiLGZ1bmN0aW9uKGUpe24uX2hhbmRsZUJsdXIoZSl9KSx0aGlzLiRzZWxlY3Rpb24ub24oXCJrZXlkb3duXCIsZnVuY3Rpb24oZSl7bi50cmlnZ2VyKFwia2V5cHJlc3NcIixlKSxlLndoaWNoPT09aS5TUEFDRSYmZS5wcmV2ZW50RGVmYXVsdCgpfSksZS5vbihcInJlc3VsdHM6Zm9jdXNcIixmdW5jdGlvbihlKXtuLiRzZWxlY3Rpb24uYXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiLGUuZGF0YS5fcmVzdWx0SWQpfSksZS5vbihcInNlbGVjdGlvbjp1cGRhdGVcIixmdW5jdGlvbihlKXtuLnVwZGF0ZShlLmRhdGEpfSksZS5vbihcIm9wZW5cIixmdW5jdGlvbigpe24uJHNlbGVjdGlvbi5hdHRyKFwiYXJpYS1leHBhbmRlZFwiLFwidHJ1ZVwiKSxuLiRzZWxlY3Rpb24uYXR0cihcImFyaWEtb3duc1wiLHIpLG4uX2F0dGFjaENsb3NlSGFuZGxlcihlKX0pLGUub24oXCJjbG9zZVwiLGZ1bmN0aW9uKCl7bi4kc2VsZWN0aW9uLmF0dHIoXCJhcmlhLWV4cGFuZGVkXCIsXCJmYWxzZVwiKSxuLiRzZWxlY3Rpb24ucmVtb3ZlQXR0cihcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiKSxuLiRzZWxlY3Rpb24ucmVtb3ZlQXR0cihcImFyaWEtb3duc1wiKSxuLiRzZWxlY3Rpb24udHJpZ2dlcihcImZvY3VzXCIpLG4uX2RldGFjaENsb3NlSGFuZGxlcihlKX0pLGUub24oXCJlbmFibGVcIixmdW5jdGlvbigpe24uJHNlbGVjdGlvbi5hdHRyKFwidGFiaW5kZXhcIixuLl90YWJpbmRleCksbi4kc2VsZWN0aW9uLmF0dHIoXCJhcmlhLWRpc2FibGVkXCIsXCJmYWxzZVwiKX0pLGUub24oXCJkaXNhYmxlXCIsZnVuY3Rpb24oKXtuLiRzZWxlY3Rpb24uYXR0cihcInRhYmluZGV4XCIsXCItMVwiKSxuLiRzZWxlY3Rpb24uYXR0cihcImFyaWEtZGlzYWJsZWRcIixcInRydWVcIil9KX0sby5wcm90b3R5cGUuX2hhbmRsZUJsdXI9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PXQuJHNlbGVjdGlvblswXXx8bi5jb250YWlucyh0LiRzZWxlY3Rpb25bMF0sZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fHQudHJpZ2dlcihcImJsdXJcIixlKX0sMSl9LG8ucHJvdG90eXBlLl9hdHRhY2hDbG9zZUhhbmRsZXI9ZnVuY3Rpb24oZSl7bihkb2N1bWVudC5ib2R5KS5vbihcIm1vdXNlZG93bi5zZWxlY3QyLlwiK2UuaWQsZnVuY3Rpb24oZSl7dmFyIHQ9bihlLnRhcmdldCkuY2xvc2VzdChcIi5zZWxlY3QyXCIpO24oXCIuc2VsZWN0Mi5zZWxlY3QyLWNvbnRhaW5lci0tb3BlblwiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcyE9dFswXSYmci5HZXREYXRhKHRoaXMsXCJlbGVtZW50XCIpLnNlbGVjdDIoXCJjbG9zZVwiKX0pfSl9LG8ucHJvdG90eXBlLl9kZXRhY2hDbG9zZUhhbmRsZXI9ZnVuY3Rpb24oZSl7bihkb2N1bWVudC5ib2R5KS5vZmYoXCJtb3VzZWRvd24uc2VsZWN0Mi5cIitlLmlkKX0sby5wcm90b3R5cGUucG9zaXRpb249ZnVuY3Rpb24oZSx0KXt0LmZpbmQoXCIuc2VsZWN0aW9uXCIpLmFwcGVuZChlKX0sby5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuX2RldGFjaENsb3NlSGFuZGxlcih0aGlzLmNvbnRhaW5lcil9LG8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoXCJUaGUgYHVwZGF0ZWAgbWV0aG9kIG11c3QgYmUgZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzLlwiKX0sby5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEaXNhYmxlZCgpfSxvLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5nZXQoXCJkaXNhYmxlZFwiKX0sb30pLGUuZGVmaW5lKFwic2VsZWN0Mi9zZWxlY3Rpb24vc2luZ2xlXCIsW1wianF1ZXJ5XCIsXCIuL2Jhc2VcIixcIi4uL3V0aWxzXCIsXCIuLi9rZXlzXCJdLGZ1bmN0aW9uKGUsdCxuLHIpe2Z1bmN0aW9uIGkoKXtpLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuIG4uRXh0ZW5kKGksdCksaS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9aS5fX3N1cGVyX18ucmVuZGVyLmNhbGwodGhpcyk7cmV0dXJuIGUuYWRkQ2xhc3MoXCJzZWxlY3QyLXNlbGVjdGlvbi0tc2luZ2xlXCIpLGUuaHRtbCgnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIj48L3NwYW4+PHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fYXJyb3dcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+PGIgcm9sZT1cInByZXNlbnRhdGlvblwiPjwvYj48L3NwYW4+JyksZX0saS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXM7aS5fX3N1cGVyX18uYmluZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHI9dC5pZCtcIi1jb250YWluZXJcIjt0aGlzLiRzZWxlY3Rpb24uZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIikuYXR0cihcImlkXCIscikuYXR0cihcInJvbGVcIixcInRleHRib3hcIikuYXR0cihcImFyaWEtcmVhZG9ubHlcIixcInRydWVcIiksdGhpcy4kc2VsZWN0aW9uLmF0dHIoXCJhcmlhLWxhYmVsbGVkYnlcIixyKSx0aGlzLiRzZWxlY3Rpb24ub24oXCJtb3VzZWRvd25cIixmdW5jdGlvbihlKXsxPT09ZS53aGljaCYmbi50cmlnZ2VyKFwidG9nZ2xlXCIse29yaWdpbmFsRXZlbnQ6ZX0pfSksdGhpcy4kc2VsZWN0aW9uLm9uKFwiZm9jdXNcIixmdW5jdGlvbihlKXt9KSx0aGlzLiRzZWxlY3Rpb24ub24oXCJibHVyXCIsZnVuY3Rpb24oZSl7fSksdC5vbihcImZvY3VzXCIsZnVuY3Rpb24oZSl7dC5pc09wZW4oKXx8bi4kc2VsZWN0aW9uLnRyaWdnZXIoXCJmb2N1c1wiKX0pfSxpLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMuJHNlbGVjdGlvbi5maW5kKFwiLnNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZFwiKTtlLmVtcHR5KCksZS5yZW1vdmVBdHRyKFwidGl0bGVcIil9LGkucHJvdG90eXBlLmRpc3BsYXk9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm9wdGlvbnMuZ2V0KFwidGVtcGxhdGVTZWxlY3Rpb25cIik7cmV0dXJuIHRoaXMub3B0aW9ucy5nZXQoXCJlc2NhcGVNYXJrdXBcIikobihlLHQpKX0saS5wcm90b3R5cGUuc2VsZWN0aW9uQ29udGFpbmVyPWZ1bmN0aW9uKCl7cmV0dXJuIGUoXCI8c3Bhbj48L3NwYW4+XCIpfSxpLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSl7aWYoMCE9PWUubGVuZ3RoKXt2YXIgdD1lWzBdLG49dGhpcy4kc2VsZWN0aW9uLmZpbmQoXCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkXCIpLHI9dGhpcy5kaXNwbGF5KHQsbik7bi5lbXB0eSgpLmFwcGVuZChyKTt2YXIgaT10LnRpdGxlfHx0LnRleHQ7aT9uLmF0dHIoXCJ0aXRsZVwiLGkpOm4ucmVtb3ZlQXR0cihcInRpdGxlXCIpfWVsc2UgdGhpcy5jbGVhcigpfSxpfSksZS5kZWZpbmUoXCJzZWxlY3QyL3NlbGVjdGlvbi9tdWx0aXBsZVwiLFtcImpxdWVyeVwiLFwiLi9iYXNlXCIsXCIuLi91dGlsc1wiXSxmdW5jdGlvbihpLGUsbCl7ZnVuY3Rpb24gbihlLHQpe24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4gbC5FeHRlbmQobixlKSxuLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT1uLl9fc3VwZXJfXy5yZW5kZXIuY2FsbCh0aGlzKTtyZXR1cm4gZS5hZGRDbGFzcyhcInNlbGVjdDItc2VsZWN0aW9uLS1tdWx0aXBsZVwiKSxlLmh0bWwoJzx1bCBjbGFzcz1cInNlbGVjdDItc2VsZWN0aW9uX19yZW5kZXJlZFwiPjwvdWw+JyksZX0sbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7bi5fX3N1cGVyX18uYmluZC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy4kc2VsZWN0aW9uLm9uKFwiY2xpY2tcIixmdW5jdGlvbihlKXtyLnRyaWdnZXIoXCJ0b2dnbGVcIix7b3JpZ2luYWxFdmVudDplfSl9KSx0aGlzLiRzZWxlY3Rpb24ub24oXCJjbGlja1wiLFwiLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VfX3JlbW92ZVwiLGZ1bmN0aW9uKGUpe2lmKCFyLmlzRGlzYWJsZWQoKSl7dmFyIHQ9aSh0aGlzKS5wYXJlbnQoKSxuPWwuR2V0RGF0YSh0WzBdLFwiZGF0YVwiKTtyLnRyaWdnZXIoXCJ1bnNlbGVjdFwiLHtvcmlnaW5hbEV2ZW50OmUsZGF0YTpufSl9fSl9LG4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy4kc2VsZWN0aW9uLmZpbmQoXCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkXCIpO2UuZW1wdHkoKSxlLnJlbW92ZUF0dHIoXCJ0aXRsZVwiKX0sbi5wcm90b3R5cGUuZGlzcGxheT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMub3B0aW9ucy5nZXQoXCJ0ZW1wbGF0ZVNlbGVjdGlvblwiKTtyZXR1cm4gdGhpcy5vcHRpb25zLmdldChcImVzY2FwZU1hcmt1cFwiKShuKGUsdCkpfSxuLnByb3RvdHlwZS5zZWxlY3Rpb25Db250YWluZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaSgnPGxpIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZVwiPjxzcGFuIGNsYXNzPVwic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPiZ0aW1lczs8L3NwYW4+PC9saT4nKX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUpe2lmKHRoaXMuY2xlYXIoKSwwIT09ZS5sZW5ndGgpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0saT10aGlzLnNlbGVjdGlvbkNvbnRhaW5lcigpLG89dGhpcy5kaXNwbGF5KHIsaSk7aS5hcHBlbmQobyk7dmFyIHM9ci50aXRsZXx8ci50ZXh0O3MmJmkuYXR0cihcInRpdGxlXCIscyksbC5TdG9yZURhdGEoaVswXSxcImRhdGFcIixyKSx0LnB1c2goaSl9dmFyIGE9dGhpcy4kc2VsZWN0aW9uLmZpbmQoXCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkXCIpO2wuYXBwZW5kTWFueShhLHQpfX0sbn0pLGUuZGVmaW5lKFwic2VsZWN0Mi9zZWxlY3Rpb24vcGxhY2Vob2xkZXJcIixbXCIuLi91dGlsc1wiXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCxuKXt0aGlzLnBsYWNlaG9sZGVyPXRoaXMubm9ybWFsaXplUGxhY2Vob2xkZXIobi5nZXQoXCJwbGFjZWhvbGRlclwiKSksZS5jYWxsKHRoaXMsdCxuKX1yZXR1cm4gdC5wcm90b3R5cGUubm9ybWFsaXplUGxhY2Vob2xkZXI9ZnVuY3Rpb24oZSx0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9e2lkOlwiXCIsdGV4dDp0fSksdH0sdC5wcm90b3R5cGUuY3JlYXRlUGxhY2Vob2xkZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnNlbGVjdGlvbkNvbnRhaW5lcigpO3JldHVybiBuLmh0bWwodGhpcy5kaXNwbGF5KHQpKSxuLmFkZENsYXNzKFwic2VsZWN0Mi1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyXCIpLnJlbW92ZUNsYXNzKFwic2VsZWN0Mi1zZWxlY3Rpb25fX2Nob2ljZVwiKSxufSx0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oZSx0KXt2YXIgbj0xPT10Lmxlbmd0aCYmdFswXS5pZCE9dGhpcy5wbGFjZWhvbGRlci5pZDtpZigxPHQubGVuZ3RofHxuKXJldHVybiBlLmNhbGwodGhpcyx0KTt0aGlzLmNsZWFyKCk7dmFyIHI9dGhpcy5jcmVhdGVQbGFjZWhvbGRlcih0aGlzLnBsYWNlaG9sZGVyKTt0aGlzLiRzZWxlY3Rpb24uZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIikuYXBwZW5kKHIpfSx0fSksZS5kZWZpbmUoXCJzZWxlY3QyL3NlbGVjdGlvbi9hbGxvd0NsZWFyXCIsW1wianF1ZXJ5XCIsXCIuLi9rZXlzXCIsXCIuLi91dGlsc1wiXSxmdW5jdGlvbihpLHIsYSl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztlLmNhbGwodGhpcyx0LG4pLG51bGw9PXRoaXMucGxhY2Vob2xkZXImJnRoaXMub3B0aW9ucy5nZXQoXCJkZWJ1Z1wiKSYmd2luZG93LmNvbnNvbGUmJmNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoXCJTZWxlY3QyOiBUaGUgYGFsbG93Q2xlYXJgIG9wdGlvbiBzaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBgcGxhY2Vob2xkZXJgIG9wdGlvbi5cIiksdGhpcy4kc2VsZWN0aW9uLm9uKFwibW91c2Vkb3duXCIsXCIuc2VsZWN0Mi1zZWxlY3Rpb25fX2NsZWFyXCIsZnVuY3Rpb24oZSl7ci5faGFuZGxlQ2xlYXIoZSl9KSx0Lm9uKFwia2V5cHJlc3NcIixmdW5jdGlvbihlKXtyLl9oYW5kbGVLZXlib2FyZENsZWFyKGUsdCl9KX0sZS5wcm90b3R5cGUuX2hhbmRsZUNsZWFyPWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuaXNEaXNhYmxlZCgpKXt2YXIgbj10aGlzLiRzZWxlY3Rpb24uZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXJcIik7aWYoMCE9PW4ubGVuZ3RoKXt0LnN0b3BQcm9wYWdhdGlvbigpO3ZhciByPWEuR2V0RGF0YShuWzBdLFwiZGF0YVwiKSxpPXRoaXMuJGVsZW1lbnQudmFsKCk7dGhpcy4kZWxlbWVudC52YWwodGhpcy5wbGFjZWhvbGRlci5pZCk7dmFyIG89e2RhdGE6cn07aWYodGhpcy50cmlnZ2VyKFwiY2xlYXJcIixvKSxvLnByZXZlbnRlZCl0aGlzLiRlbGVtZW50LnZhbChpKTtlbHNle2Zvcih2YXIgcz0wO3M8ci5sZW5ndGg7cysrKWlmKG89e2RhdGE6cltzXX0sdGhpcy50cmlnZ2VyKFwidW5zZWxlY3RcIixvKSxvLnByZXZlbnRlZClyZXR1cm4gdm9pZCB0aGlzLiRlbGVtZW50LnZhbChpKTt0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJpbnB1dFwiKS50cmlnZ2VyKFwiY2hhbmdlXCIpLHRoaXMudHJpZ2dlcihcInRvZ2dsZVwiLHt9KX19fX0sZS5wcm90b3R5cGUuX2hhbmRsZUtleWJvYXJkQ2xlYXI9ZnVuY3Rpb24oZSx0LG4pe24uaXNPcGVuKCl8fHQud2hpY2ghPXIuREVMRVRFJiZ0LndoaWNoIT1yLkJBQ0tTUEFDRXx8dGhpcy5faGFuZGxlQ2xlYXIodCl9LGUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihlLHQpe2lmKGUuY2FsbCh0aGlzLHQpLCEoMDx0aGlzLiRzZWxlY3Rpb24uZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fcGxhY2Vob2xkZXJcIikubGVuZ3RofHwwPT09dC5sZW5ndGgpKXt2YXIgbj10aGlzLm9wdGlvbnMuZ2V0KFwidHJhbnNsYXRpb25zXCIpLmdldChcInJlbW92ZUFsbEl0ZW1zXCIpLHI9aSgnPHNwYW4gY2xhc3M9XCJzZWxlY3QyLXNlbGVjdGlvbl9fY2xlYXJcIiB0aXRsZT1cIicrbigpKydcIj4mdGltZXM7PC9zcGFuPicpO2EuU3RvcmVEYXRhKHJbMF0sXCJkYXRhXCIsdCksdGhpcy4kc2VsZWN0aW9uLmZpbmQoXCIuc2VsZWN0Mi1zZWxlY3Rpb25fX3JlbmRlcmVkXCIpLnByZXBlbmQocil9fSxlfSksZS5kZWZpbmUoXCJzZWxlY3QyL3NlbGVjdGlvbi9zZWFyY2hcIixbXCJqcXVlcnlcIixcIi4uL3V0aWxzXCIsXCIuLi9rZXlzXCJdLGZ1bmN0aW9uKHIsYSxsKXtmdW5jdGlvbiBlKGUsdCxuKXtlLmNhbGwodGhpcyx0LG4pfXJldHVybiBlLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9cignPGxpIGNsYXNzPVwic2VsZWN0Mi1zZWFyY2ggc2VsZWN0Mi1zZWFyY2gtLWlubGluZVwiPjxpbnB1dCBjbGFzcz1cInNlbGVjdDItc2VhcmNoX19maWVsZFwiIHR5cGU9XCJzZWFyY2hcIiB0YWJpbmRleD1cIi0xXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgYXV0b2NvcnJlY3Q9XCJvZmZcIiBhdXRvY2FwaXRhbGl6ZT1cIm5vbmVcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiByb2xlPVwic2VhcmNoYm94XCIgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCIgLz48L2xpPicpO3RoaXMuJHNlYXJjaENvbnRhaW5lcj10LHRoaXMuJHNlYXJjaD10LmZpbmQoXCJpbnB1dFwiKTt2YXIgbj1lLmNhbGwodGhpcyk7cmV0dXJuIHRoaXMuX3RyYW5zZmVyVGFiSW5kZXgoKSxufSxlLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLGk9dC5pZCtcIi1yZXN1bHRzXCI7ZS5jYWxsKHRoaXMsdCxuKSx0Lm9uKFwib3BlblwiLGZ1bmN0aW9uKCl7ci4kc2VhcmNoLmF0dHIoXCJhcmlhLWNvbnRyb2xzXCIsaSksci4kc2VhcmNoLnRyaWdnZXIoXCJmb2N1c1wiKX0pLHQub24oXCJjbG9zZVwiLGZ1bmN0aW9uKCl7ci4kc2VhcmNoLnZhbChcIlwiKSxyLiRzZWFyY2gucmVtb3ZlQXR0cihcImFyaWEtY29udHJvbHNcIiksci4kc2VhcmNoLnJlbW92ZUF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiksci4kc2VhcmNoLnRyaWdnZXIoXCJmb2N1c1wiKX0pLHQub24oXCJlbmFibGVcIixmdW5jdGlvbigpe3IuJHNlYXJjaC5wcm9wKFwiZGlzYWJsZWRcIiwhMSksci5fdHJhbnNmZXJUYWJJbmRleCgpfSksdC5vbihcImRpc2FibGVcIixmdW5jdGlvbigpe3IuJHNlYXJjaC5wcm9wKFwiZGlzYWJsZWRcIiwhMCl9KSx0Lm9uKFwiZm9jdXNcIixmdW5jdGlvbihlKXtyLiRzZWFyY2gudHJpZ2dlcihcImZvY3VzXCIpfSksdC5vbihcInJlc3VsdHM6Zm9jdXNcIixmdW5jdGlvbihlKXtlLmRhdGEuX3Jlc3VsdElkP3IuJHNlYXJjaC5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsZS5kYXRhLl9yZXN1bHRJZCk6ci4kc2VhcmNoLnJlbW92ZUF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIil9KSx0aGlzLiRzZWxlY3Rpb24ub24oXCJmb2N1c2luXCIsXCIuc2VsZWN0Mi1zZWFyY2gtLWlubGluZVwiLGZ1bmN0aW9uKGUpe3IudHJpZ2dlcihcImZvY3VzXCIsZSl9KSx0aGlzLiRzZWxlY3Rpb24ub24oXCJmb2N1c291dFwiLFwiLnNlbGVjdDItc2VhcmNoLS1pbmxpbmVcIixmdW5jdGlvbihlKXtyLl9oYW5kbGVCbHVyKGUpfSksdGhpcy4kc2VsZWN0aW9uLm9uKFwia2V5ZG93blwiLFwiLnNlbGVjdDItc2VhcmNoLS1pbmxpbmVcIixmdW5jdGlvbihlKXtpZihlLnN0b3BQcm9wYWdhdGlvbigpLHIudHJpZ2dlcihcImtleXByZXNzXCIsZSksci5fa2V5VXBQcmV2ZW50ZWQ9ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSxlLndoaWNoPT09bC5CQUNLU1BBQ0UmJlwiXCI9PT1yLiRzZWFyY2gudmFsKCkpe3ZhciB0PXIuJHNlYXJjaENvbnRhaW5lci5wcmV2KFwiLnNlbGVjdDItc2VsZWN0aW9uX19jaG9pY2VcIik7aWYoMDx0Lmxlbmd0aCl7dmFyIG49YS5HZXREYXRhKHRbMF0sXCJkYXRhXCIpO3Iuc2VhcmNoUmVtb3ZlQ2hvaWNlKG4pLGUucHJldmVudERlZmF1bHQoKX19fSksdGhpcy4kc2VsZWN0aW9uLm9uKFwiY2xpY2tcIixcIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lXCIsZnVuY3Rpb24oZSl7ci4kc2VhcmNoLnZhbCgpJiZlLnN0b3BQcm9wYWdhdGlvbigpfSk7dmFyIG89ZG9jdW1lbnQuZG9jdW1lbnRNb2RlLHM9byYmbzw9MTE7dGhpcy4kc2VsZWN0aW9uLm9uKFwiaW5wdXQuc2VhcmNoY2hlY2tcIixcIi5zZWxlY3QyLXNlYXJjaC0taW5saW5lXCIsZnVuY3Rpb24oZSl7cz9yLiRzZWxlY3Rpb24ub2ZmKFwiaW5wdXQuc2VhcmNoIGlucHV0LnNlYXJjaGNoZWNrXCIpOnIuJHNlbGVjdGlvbi5vZmYoXCJrZXl1cC5zZWFyY2hcIil9KSx0aGlzLiRzZWxlY3Rpb24ub24oXCJrZXl1cC5zZWFyY2ggaW5wdXQuc2VhcmNoXCIsXCIuc2VsZWN0Mi1zZWFyY2gtLWlubGluZVwiLGZ1bmN0aW9uKGUpe2lmKHMmJlwiaW5wdXRcIj09PWUudHlwZSlyLiRzZWxlY3Rpb24ub2ZmKFwiaW5wdXQuc2VhcmNoIGlucHV0LnNlYXJjaGNoZWNrXCIpO2Vsc2V7dmFyIHQ9ZS53aGljaDt0IT1sLlNISUZUJiZ0IT1sLkNUUkwmJnQhPWwuQUxUJiZ0IT1sLlRBQiYmci5oYW5kbGVTZWFyY2goZSl9fSl9LGUucHJvdG90eXBlLl90cmFuc2ZlclRhYkluZGV4PWZ1bmN0aW9uKGUpe3RoaXMuJHNlYXJjaC5hdHRyKFwidGFiaW5kZXhcIix0aGlzLiRzZWxlY3Rpb24uYXR0cihcInRhYmluZGV4XCIpKSx0aGlzLiRzZWxlY3Rpb24uYXR0cihcInRhYmluZGV4XCIsXCItMVwiKX0sZS5wcm90b3R5cGUuY3JlYXRlUGxhY2Vob2xkZXI9ZnVuY3Rpb24oZSx0KXt0aGlzLiRzZWFyY2guYXR0cihcInBsYWNlaG9sZGVyXCIsdC50ZXh0KX0sZS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy4kc2VhcmNoWzBdPT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3RoaXMuJHNlYXJjaC5hdHRyKFwicGxhY2Vob2xkZXJcIixcIlwiKSxlLmNhbGwodGhpcyx0KSx0aGlzLiRzZWxlY3Rpb24uZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIikuYXBwZW5kKHRoaXMuJHNlYXJjaENvbnRhaW5lciksdGhpcy5yZXNpemVTZWFyY2goKSxuJiZ0aGlzLiRzZWFyY2gudHJpZ2dlcihcImZvY3VzXCIpfSxlLnByb3RvdHlwZS5oYW5kbGVTZWFyY2g9ZnVuY3Rpb24oKXtpZih0aGlzLnJlc2l6ZVNlYXJjaCgpLCF0aGlzLl9rZXlVcFByZXZlbnRlZCl7dmFyIGU9dGhpcy4kc2VhcmNoLnZhbCgpO3RoaXMudHJpZ2dlcihcInF1ZXJ5XCIse3Rlcm06ZX0pfXRoaXMuX2tleVVwUHJldmVudGVkPSExfSxlLnByb3RvdHlwZS5zZWFyY2hSZW1vdmVDaG9pY2U9ZnVuY3Rpb24oZSx0KXt0aGlzLnRyaWdnZXIoXCJ1bnNlbGVjdFwiLHtkYXRhOnR9KSx0aGlzLiRzZWFyY2gudmFsKHQudGV4dCksdGhpcy5oYW5kbGVTZWFyY2goKX0sZS5wcm90b3R5cGUucmVzaXplU2VhcmNoPWZ1bmN0aW9uKCl7dGhpcy4kc2VhcmNoLmNzcyhcIndpZHRoXCIsXCIyNXB4XCIpO3ZhciBlPVwiXCI7XCJcIiE9PXRoaXMuJHNlYXJjaC5hdHRyKFwicGxhY2Vob2xkZXJcIik/ZT10aGlzLiRzZWxlY3Rpb24uZmluZChcIi5zZWxlY3QyLXNlbGVjdGlvbl9fcmVuZGVyZWRcIikud2lkdGgoKTplPS43NSoodGhpcy4kc2VhcmNoLnZhbCgpLmxlbmd0aCsxKStcImVtXCI7dGhpcy4kc2VhcmNoLmNzcyhcIndpZHRoXCIsZSl9LGV9KSxlLmRlZmluZShcInNlbGVjdDIvc2VsZWN0aW9uL2V2ZW50UmVsYXlcIixbXCJqcXVlcnlcIl0sZnVuY3Rpb24ocyl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxpPVtcIm9wZW5cIixcIm9wZW5pbmdcIixcImNsb3NlXCIsXCJjbG9zaW5nXCIsXCJzZWxlY3RcIixcInNlbGVjdGluZ1wiLFwidW5zZWxlY3RcIixcInVuc2VsZWN0aW5nXCIsXCJjbGVhclwiLFwiY2xlYXJpbmdcIl0sbz1bXCJvcGVuaW5nXCIsXCJjbG9zaW5nXCIsXCJzZWxlY3RpbmdcIixcInVuc2VsZWN0aW5nXCIsXCJjbGVhcmluZ1wiXTtlLmNhbGwodGhpcyx0LG4pLHQub24oXCIqXCIsZnVuY3Rpb24oZSx0KXtpZigtMSE9PXMuaW5BcnJheShlLGkpKXt0PXR8fHt9O3ZhciBuPXMuRXZlbnQoXCJzZWxlY3QyOlwiK2Use3BhcmFtczp0fSk7ci4kZWxlbWVudC50cmlnZ2VyKG4pLC0xIT09cy5pbkFycmF5KGUsbykmJih0LnByZXZlbnRlZD1uLmlzRGVmYXVsdFByZXZlbnRlZCgpKX19KX0sZX0pLGUuZGVmaW5lKFwic2VsZWN0Mi90cmFuc2xhdGlvblwiLFtcImpxdWVyeVwiLFwicmVxdWlyZVwiXSxmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoZSl7dGhpcy5kaWN0PWV8fHt9fXJldHVybiByLnByb3RvdHlwZS5hbGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kaWN0fSxyLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGljdFtlXX0sci5wcm90b3R5cGUuZXh0ZW5kPWZ1bmN0aW9uKGUpe3RoaXMuZGljdD10LmV4dGVuZCh7fSxlLmFsbCgpLHRoaXMuZGljdCl9LHIuX2NhY2hlPXt9LHIubG9hZFBhdGg9ZnVuY3Rpb24oZSl7aWYoIShlIGluIHIuX2NhY2hlKSl7dmFyIHQ9bihlKTtyLl9jYWNoZVtlXT10fXJldHVybiBuZXcgcihyLl9jYWNoZVtlXSl9LHJ9KSxlLmRlZmluZShcInNlbGVjdDIvZGlhY3JpdGljc1wiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue1wi4pK2XCI6XCJBXCIsXCLvvKFcIjpcIkFcIixcIsOAXCI6XCJBXCIsXCLDgVwiOlwiQVwiLFwiw4JcIjpcIkFcIixcIuG6plwiOlwiQVwiLFwi4bqkXCI6XCJBXCIsXCLhuqpcIjpcIkFcIixcIuG6qFwiOlwiQVwiLFwiw4NcIjpcIkFcIixcIsSAXCI6XCJBXCIsXCLEglwiOlwiQVwiLFwi4bqwXCI6XCJBXCIsXCLhuq5cIjpcIkFcIixcIuG6tFwiOlwiQVwiLFwi4bqyXCI6XCJBXCIsXCLIplwiOlwiQVwiLFwix6BcIjpcIkFcIixcIsOEXCI6XCJBXCIsXCLHnlwiOlwiQVwiLFwi4bqiXCI6XCJBXCIsXCLDhVwiOlwiQVwiLFwix7pcIjpcIkFcIixcIseNXCI6XCJBXCIsXCLIgFwiOlwiQVwiLFwiyIJcIjpcIkFcIixcIuG6oFwiOlwiQVwiLFwi4bqsXCI6XCJBXCIsXCLhurZcIjpcIkFcIixcIuG4gFwiOlwiQVwiLFwixIRcIjpcIkFcIixcIsi6XCI6XCJBXCIsXCLisa9cIjpcIkFcIixcIuqcslwiOlwiQUFcIixcIsOGXCI6XCJBRVwiLFwix7xcIjpcIkFFXCIsXCLHolwiOlwiQUVcIixcIuqctFwiOlwiQU9cIixcIuqctlwiOlwiQVVcIixcIuqcuFwiOlwiQVZcIixcIuqculwiOlwiQVZcIixcIuqcvFwiOlwiQVlcIixcIuKSt1wiOlwiQlwiLFwi77yiXCI6XCJCXCIsXCLhuIJcIjpcIkJcIixcIuG4hFwiOlwiQlwiLFwi4biGXCI6XCJCXCIsXCLJg1wiOlwiQlwiLFwixoJcIjpcIkJcIixcIsaBXCI6XCJCXCIsXCLikrhcIjpcIkNcIixcIu+8o1wiOlwiQ1wiLFwixIZcIjpcIkNcIixcIsSIXCI6XCJDXCIsXCLEilwiOlwiQ1wiLFwixIxcIjpcIkNcIixcIsOHXCI6XCJDXCIsXCLhuIhcIjpcIkNcIixcIsaHXCI6XCJDXCIsXCLIu1wiOlwiQ1wiLFwi6py+XCI6XCJDXCIsXCLikrlcIjpcIkRcIixcIu+8pFwiOlwiRFwiLFwi4biKXCI6XCJEXCIsXCLEjlwiOlwiRFwiLFwi4biMXCI6XCJEXCIsXCLhuJBcIjpcIkRcIixcIuG4klwiOlwiRFwiLFwi4biOXCI6XCJEXCIsXCLEkFwiOlwiRFwiLFwixotcIjpcIkRcIixcIsaKXCI6XCJEXCIsXCLGiVwiOlwiRFwiLFwi6p25XCI6XCJEXCIsXCLHsVwiOlwiRFpcIixcIseEXCI6XCJEWlwiLFwix7JcIjpcIkR6XCIsXCLHhVwiOlwiRHpcIixcIuKSulwiOlwiRVwiLFwi77ylXCI6XCJFXCIsXCLDiFwiOlwiRVwiLFwiw4lcIjpcIkVcIixcIsOKXCI6XCJFXCIsXCLhu4BcIjpcIkVcIixcIuG6vlwiOlwiRVwiLFwi4buEXCI6XCJFXCIsXCLhu4JcIjpcIkVcIixcIuG6vFwiOlwiRVwiLFwixJJcIjpcIkVcIixcIuG4lFwiOlwiRVwiLFwi4biWXCI6XCJFXCIsXCLElFwiOlwiRVwiLFwixJZcIjpcIkVcIixcIsOLXCI6XCJFXCIsXCLhurpcIjpcIkVcIixcIsSaXCI6XCJFXCIsXCLIhFwiOlwiRVwiLFwiyIZcIjpcIkVcIixcIuG6uFwiOlwiRVwiLFwi4buGXCI6XCJFXCIsXCLIqFwiOlwiRVwiLFwi4bicXCI6XCJFXCIsXCLEmFwiOlwiRVwiLFwi4biYXCI6XCJFXCIsXCLhuJpcIjpcIkVcIixcIsaQXCI6XCJFXCIsXCLGjlwiOlwiRVwiLFwi4pK7XCI6XCJGXCIsXCLvvKZcIjpcIkZcIixcIuG4nlwiOlwiRlwiLFwixpFcIjpcIkZcIixcIuqdu1wiOlwiRlwiLFwi4pK8XCI6XCJHXCIsXCLvvKdcIjpcIkdcIixcIse0XCI6XCJHXCIsXCLEnFwiOlwiR1wiLFwi4bigXCI6XCJHXCIsXCLEnlwiOlwiR1wiLFwixKBcIjpcIkdcIixcIsemXCI6XCJHXCIsXCLEolwiOlwiR1wiLFwix6RcIjpcIkdcIixcIsaTXCI6XCJHXCIsXCLqnqBcIjpcIkdcIixcIuqdvVwiOlwiR1wiLFwi6p2+XCI6XCJHXCIsXCLikr1cIjpcIkhcIixcIu+8qFwiOlwiSFwiLFwixKRcIjpcIkhcIixcIuG4olwiOlwiSFwiLFwi4bimXCI6XCJIXCIsXCLInlwiOlwiSFwiLFwi4bikXCI6XCJIXCIsXCLhuKhcIjpcIkhcIixcIuG4qlwiOlwiSFwiLFwixKZcIjpcIkhcIixcIuKxp1wiOlwiSFwiLFwi4rG1XCI6XCJIXCIsXCLqno1cIjpcIkhcIixcIuKSvlwiOlwiSVwiLFwi77ypXCI6XCJJXCIsXCLDjFwiOlwiSVwiLFwiw41cIjpcIklcIixcIsOOXCI6XCJJXCIsXCLEqFwiOlwiSVwiLFwixKpcIjpcIklcIixcIsSsXCI6XCJJXCIsXCLEsFwiOlwiSVwiLFwiw49cIjpcIklcIixcIuG4rlwiOlwiSVwiLFwi4buIXCI6XCJJXCIsXCLHj1wiOlwiSVwiLFwiyIhcIjpcIklcIixcIsiKXCI6XCJJXCIsXCLhu4pcIjpcIklcIixcIsSuXCI6XCJJXCIsXCLhuKxcIjpcIklcIixcIsaXXCI6XCJJXCIsXCLikr9cIjpcIkpcIixcIu+8qlwiOlwiSlwiLFwixLRcIjpcIkpcIixcIsmIXCI6XCJKXCIsXCLik4BcIjpcIktcIixcIu+8q1wiOlwiS1wiLFwi4biwXCI6XCJLXCIsXCLHqFwiOlwiS1wiLFwi4biyXCI6XCJLXCIsXCLEtlwiOlwiS1wiLFwi4bi0XCI6XCJLXCIsXCLGmFwiOlwiS1wiLFwi4rGpXCI6XCJLXCIsXCLqnYBcIjpcIktcIixcIuqdglwiOlwiS1wiLFwi6p2EXCI6XCJLXCIsXCLqnqJcIjpcIktcIixcIuKTgVwiOlwiTFwiLFwi77ysXCI6XCJMXCIsXCLEv1wiOlwiTFwiLFwixLlcIjpcIkxcIixcIsS9XCI6XCJMXCIsXCLhuLZcIjpcIkxcIixcIuG4uFwiOlwiTFwiLFwixLtcIjpcIkxcIixcIuG4vFwiOlwiTFwiLFwi4bi6XCI6XCJMXCIsXCLFgVwiOlwiTFwiLFwiyL1cIjpcIkxcIixcIuKxolwiOlwiTFwiLFwi4rGgXCI6XCJMXCIsXCLqnYhcIjpcIkxcIixcIuqdhlwiOlwiTFwiLFwi6p6AXCI6XCJMXCIsXCLHh1wiOlwiTEpcIixcIseIXCI6XCJMalwiLFwi4pOCXCI6XCJNXCIsXCLvvK1cIjpcIk1cIixcIuG4vlwiOlwiTVwiLFwi4bmAXCI6XCJNXCIsXCLhuYJcIjpcIk1cIixcIuKxrlwiOlwiTVwiLFwixpxcIjpcIk1cIixcIuKTg1wiOlwiTlwiLFwi77yuXCI6XCJOXCIsXCLHuFwiOlwiTlwiLFwixYNcIjpcIk5cIixcIsORXCI6XCJOXCIsXCLhuYRcIjpcIk5cIixcIsWHXCI6XCJOXCIsXCLhuYZcIjpcIk5cIixcIsWFXCI6XCJOXCIsXCLhuYpcIjpcIk5cIixcIuG5iFwiOlwiTlwiLFwiyKBcIjpcIk5cIixcIsadXCI6XCJOXCIsXCLqnpBcIjpcIk5cIixcIuqepFwiOlwiTlwiLFwix4pcIjpcIk5KXCIsXCLHi1wiOlwiTmpcIixcIuKThFwiOlwiT1wiLFwi77yvXCI6XCJPXCIsXCLDklwiOlwiT1wiLFwiw5NcIjpcIk9cIixcIsOUXCI6XCJPXCIsXCLhu5JcIjpcIk9cIixcIuG7kFwiOlwiT1wiLFwi4buWXCI6XCJPXCIsXCLhu5RcIjpcIk9cIixcIsOVXCI6XCJPXCIsXCLhuYxcIjpcIk9cIixcIsisXCI6XCJPXCIsXCLhuY5cIjpcIk9cIixcIsWMXCI6XCJPXCIsXCLhuZBcIjpcIk9cIixcIuG5klwiOlwiT1wiLFwixY5cIjpcIk9cIixcIsiuXCI6XCJPXCIsXCLIsFwiOlwiT1wiLFwiw5ZcIjpcIk9cIixcIsiqXCI6XCJPXCIsXCLhu45cIjpcIk9cIixcIsWQXCI6XCJPXCIsXCLHkVwiOlwiT1wiLFwiyIxcIjpcIk9cIixcIsiOXCI6XCJPXCIsXCLGoFwiOlwiT1wiLFwi4bucXCI6XCJPXCIsXCLhu5pcIjpcIk9cIixcIuG7oFwiOlwiT1wiLFwi4bueXCI6XCJPXCIsXCLhu6JcIjpcIk9cIixcIuG7jFwiOlwiT1wiLFwi4buYXCI6XCJPXCIsXCLHqlwiOlwiT1wiLFwix6xcIjpcIk9cIixcIsOYXCI6XCJPXCIsXCLHvlwiOlwiT1wiLFwixoZcIjpcIk9cIixcIsafXCI6XCJPXCIsXCLqnYpcIjpcIk9cIixcIuqdjFwiOlwiT1wiLFwixZJcIjpcIk9FXCIsXCLGolwiOlwiT0lcIixcIuqdjlwiOlwiT09cIixcIsiiXCI6XCJPVVwiLFwi4pOFXCI6XCJQXCIsXCLvvLBcIjpcIlBcIixcIuG5lFwiOlwiUFwiLFwi4bmWXCI6XCJQXCIsXCLGpFwiOlwiUFwiLFwi4rGjXCI6XCJQXCIsXCLqnZBcIjpcIlBcIixcIuqdklwiOlwiUFwiLFwi6p2UXCI6XCJQXCIsXCLik4ZcIjpcIlFcIixcIu+8sVwiOlwiUVwiLFwi6p2WXCI6XCJRXCIsXCLqnZhcIjpcIlFcIixcIsmKXCI6XCJRXCIsXCLik4dcIjpcIlJcIixcIu+8slwiOlwiUlwiLFwixZRcIjpcIlJcIixcIuG5mFwiOlwiUlwiLFwixZhcIjpcIlJcIixcIsiQXCI6XCJSXCIsXCLIklwiOlwiUlwiLFwi4bmaXCI6XCJSXCIsXCLhuZxcIjpcIlJcIixcIsWWXCI6XCJSXCIsXCLhuZ5cIjpcIlJcIixcIsmMXCI6XCJSXCIsXCLisaRcIjpcIlJcIixcIuqdmlwiOlwiUlwiLFwi6p6mXCI6XCJSXCIsXCLqnoJcIjpcIlJcIixcIuKTiFwiOlwiU1wiLFwi77yzXCI6XCJTXCIsXCLhup5cIjpcIlNcIixcIsWaXCI6XCJTXCIsXCLhuaRcIjpcIlNcIixcIsWcXCI6XCJTXCIsXCLhuaBcIjpcIlNcIixcIsWgXCI6XCJTXCIsXCLhuaZcIjpcIlNcIixcIuG5olwiOlwiU1wiLFwi4bmoXCI6XCJTXCIsXCLImFwiOlwiU1wiLFwixZ5cIjpcIlNcIixcIuKxvlwiOlwiU1wiLFwi6p6oXCI6XCJTXCIsXCLqnoRcIjpcIlNcIixcIuKTiVwiOlwiVFwiLFwi77y0XCI6XCJUXCIsXCLhuapcIjpcIlRcIixcIsWkXCI6XCJUXCIsXCLhuaxcIjpcIlRcIixcIsiaXCI6XCJUXCIsXCLFolwiOlwiVFwiLFwi4bmwXCI6XCJUXCIsXCLhua5cIjpcIlRcIixcIsWmXCI6XCJUXCIsXCLGrFwiOlwiVFwiLFwixq5cIjpcIlRcIixcIsi+XCI6XCJUXCIsXCLqnoZcIjpcIlRcIixcIuqcqFwiOlwiVFpcIixcIuKTilwiOlwiVVwiLFwi77y1XCI6XCJVXCIsXCLDmVwiOlwiVVwiLFwiw5pcIjpcIlVcIixcIsObXCI6XCJVXCIsXCLFqFwiOlwiVVwiLFwi4bm4XCI6XCJVXCIsXCLFqlwiOlwiVVwiLFwi4bm6XCI6XCJVXCIsXCLFrFwiOlwiVVwiLFwiw5xcIjpcIlVcIixcIsebXCI6XCJVXCIsXCLHl1wiOlwiVVwiLFwix5VcIjpcIlVcIixcIseZXCI6XCJVXCIsXCLhu6ZcIjpcIlVcIixcIsWuXCI6XCJVXCIsXCLFsFwiOlwiVVwiLFwix5NcIjpcIlVcIixcIsiUXCI6XCJVXCIsXCLIllwiOlwiVVwiLFwixq9cIjpcIlVcIixcIuG7qlwiOlwiVVwiLFwi4buoXCI6XCJVXCIsXCLhu65cIjpcIlVcIixcIuG7rFwiOlwiVVwiLFwi4buwXCI6XCJVXCIsXCLhu6RcIjpcIlVcIixcIuG5slwiOlwiVVwiLFwixbJcIjpcIlVcIixcIuG5tlwiOlwiVVwiLFwi4bm0XCI6XCJVXCIsXCLJhFwiOlwiVVwiLFwi4pOLXCI6XCJWXCIsXCLvvLZcIjpcIlZcIixcIuG5vFwiOlwiVlwiLFwi4bm+XCI6XCJWXCIsXCLGslwiOlwiVlwiLFwi6p2eXCI6XCJWXCIsXCLJhVwiOlwiVlwiLFwi6p2gXCI6XCJWWVwiLFwi4pOMXCI6XCJXXCIsXCLvvLdcIjpcIldcIixcIuG6gFwiOlwiV1wiLFwi4bqCXCI6XCJXXCIsXCLFtFwiOlwiV1wiLFwi4bqGXCI6XCJXXCIsXCLhuoRcIjpcIldcIixcIuG6iFwiOlwiV1wiLFwi4rGyXCI6XCJXXCIsXCLik41cIjpcIlhcIixcIu+8uFwiOlwiWFwiLFwi4bqKXCI6XCJYXCIsXCLhuoxcIjpcIlhcIixcIuKTjlwiOlwiWVwiLFwi77y5XCI6XCJZXCIsXCLhu7JcIjpcIllcIixcIsOdXCI6XCJZXCIsXCLFtlwiOlwiWVwiLFwi4bu4XCI6XCJZXCIsXCLIslwiOlwiWVwiLFwi4bqOXCI6XCJZXCIsXCLFuFwiOlwiWVwiLFwi4bu2XCI6XCJZXCIsXCLhu7RcIjpcIllcIixcIsazXCI6XCJZXCIsXCLJjlwiOlwiWVwiLFwi4bu+XCI6XCJZXCIsXCLik49cIjpcIlpcIixcIu+8ulwiOlwiWlwiLFwixblcIjpcIlpcIixcIuG6kFwiOlwiWlwiLFwixbtcIjpcIlpcIixcIsW9XCI6XCJaXCIsXCLhupJcIjpcIlpcIixcIuG6lFwiOlwiWlwiLFwixrVcIjpcIlpcIixcIsikXCI6XCJaXCIsXCLisb9cIjpcIlpcIixcIuKxq1wiOlwiWlwiLFwi6p2iXCI6XCJaXCIsXCLik5BcIjpcImFcIixcIu+9gVwiOlwiYVwiLFwi4bqaXCI6XCJhXCIsXCLDoFwiOlwiYVwiLFwiw6FcIjpcImFcIixcIsOiXCI6XCJhXCIsXCLhuqdcIjpcImFcIixcIuG6pVwiOlwiYVwiLFwi4bqrXCI6XCJhXCIsXCLhuqlcIjpcImFcIixcIsOjXCI6XCJhXCIsXCLEgVwiOlwiYVwiLFwixINcIjpcImFcIixcIuG6sVwiOlwiYVwiLFwi4bqvXCI6XCJhXCIsXCLhurVcIjpcImFcIixcIuG6s1wiOlwiYVwiLFwiyKdcIjpcImFcIixcIsehXCI6XCJhXCIsXCLDpFwiOlwiYVwiLFwix59cIjpcImFcIixcIuG6o1wiOlwiYVwiLFwiw6VcIjpcImFcIixcIse7XCI6XCJhXCIsXCLHjlwiOlwiYVwiLFwiyIFcIjpcImFcIixcIsiDXCI6XCJhXCIsXCLhuqFcIjpcImFcIixcIuG6rVwiOlwiYVwiLFwi4bq3XCI6XCJhXCIsXCLhuIFcIjpcImFcIixcIsSFXCI6XCJhXCIsXCLisaVcIjpcImFcIixcIsmQXCI6XCJhXCIsXCLqnLNcIjpcImFhXCIsXCLDplwiOlwiYWVcIixcIse9XCI6XCJhZVwiLFwix6NcIjpcImFlXCIsXCLqnLVcIjpcImFvXCIsXCLqnLdcIjpcImF1XCIsXCLqnLlcIjpcImF2XCIsXCLqnLtcIjpcImF2XCIsXCLqnL1cIjpcImF5XCIsXCLik5FcIjpcImJcIixcIu+9glwiOlwiYlwiLFwi4biDXCI6XCJiXCIsXCLhuIVcIjpcImJcIixcIuG4h1wiOlwiYlwiLFwixoBcIjpcImJcIixcIsaDXCI6XCJiXCIsXCLJk1wiOlwiYlwiLFwi4pOSXCI6XCJjXCIsXCLvvYNcIjpcImNcIixcIsSHXCI6XCJjXCIsXCLEiVwiOlwiY1wiLFwixItcIjpcImNcIixcIsSNXCI6XCJjXCIsXCLDp1wiOlwiY1wiLFwi4biJXCI6XCJjXCIsXCLGiFwiOlwiY1wiLFwiyLxcIjpcImNcIixcIuqcv1wiOlwiY1wiLFwi4oaEXCI6XCJjXCIsXCLik5NcIjpcImRcIixcIu+9hFwiOlwiZFwiLFwi4biLXCI6XCJkXCIsXCLEj1wiOlwiZFwiLFwi4biNXCI6XCJkXCIsXCLhuJFcIjpcImRcIixcIuG4k1wiOlwiZFwiLFwi4biPXCI6XCJkXCIsXCLEkVwiOlwiZFwiLFwixoxcIjpcImRcIixcIsmWXCI6XCJkXCIsXCLJl1wiOlwiZFwiLFwi6p26XCI6XCJkXCIsXCLHs1wiOlwiZHpcIixcIseGXCI6XCJkelwiLFwi4pOUXCI6XCJlXCIsXCLvvYVcIjpcImVcIixcIsOoXCI6XCJlXCIsXCLDqVwiOlwiZVwiLFwiw6pcIjpcImVcIixcIuG7gVwiOlwiZVwiLFwi4bq/XCI6XCJlXCIsXCLhu4VcIjpcImVcIixcIuG7g1wiOlwiZVwiLFwi4bq9XCI6XCJlXCIsXCLEk1wiOlwiZVwiLFwi4biVXCI6XCJlXCIsXCLhuJdcIjpcImVcIixcIsSVXCI6XCJlXCIsXCLEl1wiOlwiZVwiLFwiw6tcIjpcImVcIixcIuG6u1wiOlwiZVwiLFwixJtcIjpcImVcIixcIsiFXCI6XCJlXCIsXCLIh1wiOlwiZVwiLFwi4bq5XCI6XCJlXCIsXCLhu4dcIjpcImVcIixcIsipXCI6XCJlXCIsXCLhuJ1cIjpcImVcIixcIsSZXCI6XCJlXCIsXCLhuJlcIjpcImVcIixcIuG4m1wiOlwiZVwiLFwiyYdcIjpcImVcIixcIsmbXCI6XCJlXCIsXCLHnVwiOlwiZVwiLFwi4pOVXCI6XCJmXCIsXCLvvYZcIjpcImZcIixcIuG4n1wiOlwiZlwiLFwixpJcIjpcImZcIixcIuqdvFwiOlwiZlwiLFwi4pOWXCI6XCJnXCIsXCLvvYdcIjpcImdcIixcIse1XCI6XCJnXCIsXCLEnVwiOlwiZ1wiLFwi4bihXCI6XCJnXCIsXCLEn1wiOlwiZ1wiLFwixKFcIjpcImdcIixcIsenXCI6XCJnXCIsXCLEo1wiOlwiZ1wiLFwix6VcIjpcImdcIixcIsmgXCI6XCJnXCIsXCLqnqFcIjpcImdcIixcIuG1uVwiOlwiZ1wiLFwi6p2/XCI6XCJnXCIsXCLik5dcIjpcImhcIixcIu+9iFwiOlwiaFwiLFwixKVcIjpcImhcIixcIuG4o1wiOlwiaFwiLFwi4binXCI6XCJoXCIsXCLIn1wiOlwiaFwiLFwi4bilXCI6XCJoXCIsXCLhuKlcIjpcImhcIixcIuG4q1wiOlwiaFwiLFwi4bqWXCI6XCJoXCIsXCLEp1wiOlwiaFwiLFwi4rGoXCI6XCJoXCIsXCLisbZcIjpcImhcIixcIsmlXCI6XCJoXCIsXCLGlVwiOlwiaHZcIixcIuKTmFwiOlwiaVwiLFwi772JXCI6XCJpXCIsXCLDrFwiOlwiaVwiLFwiw61cIjpcImlcIixcIsOuXCI6XCJpXCIsXCLEqVwiOlwiaVwiLFwixKtcIjpcImlcIixcIsStXCI6XCJpXCIsXCLDr1wiOlwiaVwiLFwi4bivXCI6XCJpXCIsXCLhu4lcIjpcImlcIixcIseQXCI6XCJpXCIsXCLIiVwiOlwiaVwiLFwiyItcIjpcImlcIixcIuG7i1wiOlwiaVwiLFwixK9cIjpcImlcIixcIuG4rVwiOlwiaVwiLFwiyahcIjpcImlcIixcIsSxXCI6XCJpXCIsXCLik5lcIjpcImpcIixcIu+9ilwiOlwialwiLFwixLVcIjpcImpcIixcIsewXCI6XCJqXCIsXCLJiVwiOlwialwiLFwi4pOaXCI6XCJrXCIsXCLvvYtcIjpcImtcIixcIuG4sVwiOlwia1wiLFwix6lcIjpcImtcIixcIuG4s1wiOlwia1wiLFwixLdcIjpcImtcIixcIuG4tVwiOlwia1wiLFwixplcIjpcImtcIixcIuKxqlwiOlwia1wiLFwi6p2BXCI6XCJrXCIsXCLqnYNcIjpcImtcIixcIuqdhVwiOlwia1wiLFwi6p6jXCI6XCJrXCIsXCLik5tcIjpcImxcIixcIu+9jFwiOlwibFwiLFwixYBcIjpcImxcIixcIsS6XCI6XCJsXCIsXCLEvlwiOlwibFwiLFwi4bi3XCI6XCJsXCIsXCLhuLlcIjpcImxcIixcIsS8XCI6XCJsXCIsXCLhuL1cIjpcImxcIixcIuG4u1wiOlwibFwiLFwixb9cIjpcImxcIixcIsWCXCI6XCJsXCIsXCLGmlwiOlwibFwiLFwiyatcIjpcImxcIixcIuKxoVwiOlwibFwiLFwi6p2JXCI6XCJsXCIsXCLqnoFcIjpcImxcIixcIuqdh1wiOlwibFwiLFwix4lcIjpcImxqXCIsXCLik5xcIjpcIm1cIixcIu+9jVwiOlwibVwiLFwi4bi/XCI6XCJtXCIsXCLhuYFcIjpcIm1cIixcIuG5g1wiOlwibVwiLFwiybFcIjpcIm1cIixcIsmvXCI6XCJtXCIsXCLik51cIjpcIm5cIixcIu+9jlwiOlwiblwiLFwix7lcIjpcIm5cIixcIsWEXCI6XCJuXCIsXCLDsVwiOlwiblwiLFwi4bmFXCI6XCJuXCIsXCLFiFwiOlwiblwiLFwi4bmHXCI6XCJuXCIsXCLFhlwiOlwiblwiLFwi4bmLXCI6XCJuXCIsXCLhuYlcIjpcIm5cIixcIsaeXCI6XCJuXCIsXCLJslwiOlwiblwiLFwixYlcIjpcIm5cIixcIuqekVwiOlwiblwiLFwi6p6lXCI6XCJuXCIsXCLHjFwiOlwibmpcIixcIuKTnlwiOlwib1wiLFwi772PXCI6XCJvXCIsXCLDslwiOlwib1wiLFwiw7NcIjpcIm9cIixcIsO0XCI6XCJvXCIsXCLhu5NcIjpcIm9cIixcIuG7kVwiOlwib1wiLFwi4buXXCI6XCJvXCIsXCLhu5VcIjpcIm9cIixcIsO1XCI6XCJvXCIsXCLhuY1cIjpcIm9cIixcIsitXCI6XCJvXCIsXCLhuY9cIjpcIm9cIixcIsWNXCI6XCJvXCIsXCLhuZFcIjpcIm9cIixcIuG5k1wiOlwib1wiLFwixY9cIjpcIm9cIixcIsivXCI6XCJvXCIsXCLIsVwiOlwib1wiLFwiw7ZcIjpcIm9cIixcIsirXCI6XCJvXCIsXCLhu49cIjpcIm9cIixcIsWRXCI6XCJvXCIsXCLHklwiOlwib1wiLFwiyI1cIjpcIm9cIixcIsiPXCI6XCJvXCIsXCLGoVwiOlwib1wiLFwi4budXCI6XCJvXCIsXCLhu5tcIjpcIm9cIixcIuG7oVwiOlwib1wiLFwi4bufXCI6XCJvXCIsXCLhu6NcIjpcIm9cIixcIuG7jVwiOlwib1wiLFwi4buZXCI6XCJvXCIsXCLHq1wiOlwib1wiLFwix61cIjpcIm9cIixcIsO4XCI6XCJvXCIsXCLHv1wiOlwib1wiLFwiyZRcIjpcIm9cIixcIuqdi1wiOlwib1wiLFwi6p2NXCI6XCJvXCIsXCLJtVwiOlwib1wiLFwixZNcIjpcIm9lXCIsXCLGo1wiOlwib2lcIixcIsijXCI6XCJvdVwiLFwi6p2PXCI6XCJvb1wiLFwi4pOfXCI6XCJwXCIsXCLvvZBcIjpcInBcIixcIuG5lVwiOlwicFwiLFwi4bmXXCI6XCJwXCIsXCLGpVwiOlwicFwiLFwi4bW9XCI6XCJwXCIsXCLqnZFcIjpcInBcIixcIuqdk1wiOlwicFwiLFwi6p2VXCI6XCJwXCIsXCLik6BcIjpcInFcIixcIu+9kVwiOlwicVwiLFwiyYtcIjpcInFcIixcIuqdl1wiOlwicVwiLFwi6p2ZXCI6XCJxXCIsXCLik6FcIjpcInJcIixcIu+9klwiOlwiclwiLFwixZVcIjpcInJcIixcIuG5mVwiOlwiclwiLFwixZlcIjpcInJcIixcIsiRXCI6XCJyXCIsXCLIk1wiOlwiclwiLFwi4bmbXCI6XCJyXCIsXCLhuZ1cIjpcInJcIixcIsWXXCI6XCJyXCIsXCLhuZ9cIjpcInJcIixcIsmNXCI6XCJyXCIsXCLJvVwiOlwiclwiLFwi6p2bXCI6XCJyXCIsXCLqnqdcIjpcInJcIixcIuqeg1wiOlwiclwiLFwi4pOiXCI6XCJzXCIsXCLvvZNcIjpcInNcIixcIsOfXCI6XCJzXCIsXCLFm1wiOlwic1wiLFwi4bmlXCI6XCJzXCIsXCLFnVwiOlwic1wiLFwi4bmhXCI6XCJzXCIsXCLFoVwiOlwic1wiLFwi4bmnXCI6XCJzXCIsXCLhuaNcIjpcInNcIixcIuG5qVwiOlwic1wiLFwiyJlcIjpcInNcIixcIsWfXCI6XCJzXCIsXCLIv1wiOlwic1wiLFwi6p6pXCI6XCJzXCIsXCLqnoVcIjpcInNcIixcIuG6m1wiOlwic1wiLFwi4pOjXCI6XCJ0XCIsXCLvvZRcIjpcInRcIixcIuG5q1wiOlwidFwiLFwi4bqXXCI6XCJ0XCIsXCLFpVwiOlwidFwiLFwi4bmtXCI6XCJ0XCIsXCLIm1wiOlwidFwiLFwixaNcIjpcInRcIixcIuG5sVwiOlwidFwiLFwi4bmvXCI6XCJ0XCIsXCLFp1wiOlwidFwiLFwixq1cIjpcInRcIixcIsqIXCI6XCJ0XCIsXCLisaZcIjpcInRcIixcIuqeh1wiOlwidFwiLFwi6pypXCI6XCJ0elwiLFwi4pOkXCI6XCJ1XCIsXCLvvZVcIjpcInVcIixcIsO5XCI6XCJ1XCIsXCLDulwiOlwidVwiLFwiw7tcIjpcInVcIixcIsWpXCI6XCJ1XCIsXCLhublcIjpcInVcIixcIsWrXCI6XCJ1XCIsXCLhubtcIjpcInVcIixcIsWtXCI6XCJ1XCIsXCLDvFwiOlwidVwiLFwix5xcIjpcInVcIixcIseYXCI6XCJ1XCIsXCLHllwiOlwidVwiLFwix5pcIjpcInVcIixcIuG7p1wiOlwidVwiLFwixa9cIjpcInVcIixcIsWxXCI6XCJ1XCIsXCLHlFwiOlwidVwiLFwiyJVcIjpcInVcIixcIsiXXCI6XCJ1XCIsXCLGsFwiOlwidVwiLFwi4burXCI6XCJ1XCIsXCLhu6lcIjpcInVcIixcIuG7r1wiOlwidVwiLFwi4butXCI6XCJ1XCIsXCLhu7FcIjpcInVcIixcIuG7pVwiOlwidVwiLFwi4bmzXCI6XCJ1XCIsXCLFs1wiOlwidVwiLFwi4bm3XCI6XCJ1XCIsXCLhubVcIjpcInVcIixcIsqJXCI6XCJ1XCIsXCLik6VcIjpcInZcIixcIu+9llwiOlwidlwiLFwi4bm9XCI6XCJ2XCIsXCLhub9cIjpcInZcIixcIsqLXCI6XCJ2XCIsXCLqnZ9cIjpcInZcIixcIsqMXCI6XCJ2XCIsXCLqnaFcIjpcInZ5XCIsXCLik6ZcIjpcIndcIixcIu+9l1wiOlwid1wiLFwi4bqBXCI6XCJ3XCIsXCLhuoNcIjpcIndcIixcIsW1XCI6XCJ3XCIsXCLhuodcIjpcIndcIixcIuG6hVwiOlwid1wiLFwi4bqYXCI6XCJ3XCIsXCLhuolcIjpcIndcIixcIuKxs1wiOlwid1wiLFwi4pOnXCI6XCJ4XCIsXCLvvZhcIjpcInhcIixcIuG6i1wiOlwieFwiLFwi4bqNXCI6XCJ4XCIsXCLik6hcIjpcInlcIixcIu+9mVwiOlwieVwiLFwi4buzXCI6XCJ5XCIsXCLDvVwiOlwieVwiLFwixbdcIjpcInlcIixcIuG7uVwiOlwieVwiLFwiyLNcIjpcInlcIixcIuG6j1wiOlwieVwiLFwiw79cIjpcInlcIixcIuG7t1wiOlwieVwiLFwi4bqZXCI6XCJ5XCIsXCLhu7VcIjpcInlcIixcIsa0XCI6XCJ5XCIsXCLJj1wiOlwieVwiLFwi4bu/XCI6XCJ5XCIsXCLik6lcIjpcInpcIixcIu+9mlwiOlwielwiLFwixbpcIjpcInpcIixcIuG6kVwiOlwielwiLFwixbxcIjpcInpcIixcIsW+XCI6XCJ6XCIsXCLhupNcIjpcInpcIixcIuG6lVwiOlwielwiLFwixrZcIjpcInpcIixcIsilXCI6XCJ6XCIsXCLJgFwiOlwielwiLFwi4rGsXCI6XCJ6XCIsXCLqnaNcIjpcInpcIixcIs6GXCI6XCLOkVwiLFwizohcIjpcIs6VXCIsXCLOiVwiOlwizpdcIixcIs6KXCI6XCLOmVwiLFwizqpcIjpcIs6ZXCIsXCLOjFwiOlwizp9cIixcIs6OXCI6XCLOpVwiLFwizqtcIjpcIs6lXCIsXCLOj1wiOlwizqlcIixcIs6sXCI6XCLOsVwiLFwizq1cIjpcIs61XCIsXCLOrlwiOlwizrdcIixcIs6vXCI6XCLOuVwiLFwiz4pcIjpcIs65XCIsXCLOkFwiOlwizrlcIixcIs+MXCI6XCLOv1wiLFwiz41cIjpcIs+FXCIsXCLPi1wiOlwiz4VcIixcIs6wXCI6XCLPhVwiLFwiz45cIjpcIs+JXCIsXCLPglwiOlwiz4NcIixcIuKAmVwiOlwiJ1wifX0pLGUuZGVmaW5lKFwic2VsZWN0Mi9kYXRhL2Jhc2VcIixbXCIuLi91dGlsc1wiXSxmdW5jdGlvbihyKXtmdW5jdGlvbiBuKGUsdCl7bi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzKX1yZXR1cm4gci5FeHRlbmQobixyLk9ic2VydmFibGUpLG4ucHJvdG90eXBlLmN1cnJlbnQ9ZnVuY3Rpb24oZSl7dGhyb3cgbmV3IEVycm9yKFwiVGhlIGBjdXJyZW50YCBtZXRob2QgbXVzdCBiZSBkZWZpbmVkIGluIGNoaWxkIGNsYXNzZXMuXCIpfSxuLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbihlLHQpe3Rocm93IG5ldyBFcnJvcihcIlRoZSBgcXVlcnlgIG1ldGhvZCBtdXN0IGJlIGRlZmluZWQgaW4gY2hpbGQgY2xhc3Nlcy5cIil9LG4ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0KXt9LG4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmdlbmVyYXRlUmVzdWx0SWQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmlkK1wiLXJlc3VsdC1cIjtyZXR1cm4gbis9ci5nZW5lcmF0ZUNoYXJzKDQpLG51bGwhPXQuaWQ/bis9XCItXCIrdC5pZC50b1N0cmluZygpOm4rPVwiLVwiK3IuZ2VuZXJhdGVDaGFycyg0KSxufSxufSksZS5kZWZpbmUoXCJzZWxlY3QyL2RhdGEvc2VsZWN0XCIsW1wiLi9iYXNlXCIsXCIuLi91dGlsc1wiLFwianF1ZXJ5XCJdLGZ1bmN0aW9uKGUsYSxsKXtmdW5jdGlvbiBuKGUsdCl7dGhpcy4kZWxlbWVudD1lLHRoaXMub3B0aW9ucz10LG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIGEuRXh0ZW5kKG4sZSksbi5wcm90b3R5cGUuY3VycmVudD1mdW5jdGlvbihlKXt2YXIgbj1bXSxyPXRoaXM7dGhpcy4kZWxlbWVudC5maW5kKFwiOnNlbGVjdGVkXCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1sKHRoaXMpLHQ9ci5pdGVtKGUpO24ucHVzaCh0KX0pLGUobil9LG4ucHJvdG90eXBlLnNlbGVjdD1mdW5jdGlvbihpKXt2YXIgbz10aGlzO2lmKGkuc2VsZWN0ZWQ9ITAsbChpLmVsZW1lbnQpLmlzKFwib3B0aW9uXCIpKXJldHVybiBpLmVsZW1lbnQuc2VsZWN0ZWQ9ITAsdm9pZCB0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJpbnB1dFwiKS50cmlnZ2VyKFwiY2hhbmdlXCIpO2lmKHRoaXMuJGVsZW1lbnQucHJvcChcIm11bHRpcGxlXCIpKXRoaXMuY3VycmVudChmdW5jdGlvbihlKXt2YXIgdD1bXTsoaT1baV0pLnB1c2guYXBwbHkoaSxlKTtmb3IodmFyIG49MDtuPGkubGVuZ3RoO24rKyl7dmFyIHI9aVtuXS5pZDstMT09PWwuaW5BcnJheShyLHQpJiZ0LnB1c2gocil9by4kZWxlbWVudC52YWwodCksby4kZWxlbWVudC50cmlnZ2VyKFwiaW5wdXRcIikudHJpZ2dlcihcImNoYW5nZVwiKX0pO2Vsc2V7dmFyIGU9aS5pZDt0aGlzLiRlbGVtZW50LnZhbChlKSx0aGlzLiRlbGVtZW50LnRyaWdnZXIoXCJpbnB1dFwiKS50cmlnZ2VyKFwiY2hhbmdlXCIpfX0sbi5wcm90b3R5cGUudW5zZWxlY3Q9ZnVuY3Rpb24oaSl7dmFyIG89dGhpcztpZih0aGlzLiRlbGVtZW50LnByb3AoXCJtdWx0aXBsZVwiKSl7aWYoaS5zZWxlY3RlZD0hMSxsKGkuZWxlbWVudCkuaXMoXCJvcHRpb25cIikpcmV0dXJuIGkuZWxlbWVudC5zZWxlY3RlZD0hMSx2b2lkIHRoaXMuJGVsZW1lbnQudHJpZ2dlcihcImlucHV0XCIpLnRyaWdnZXIoXCJjaGFuZ2VcIik7dGhpcy5jdXJyZW50KGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciByPWVbbl0uaWQ7ciE9PWkuaWQmJi0xPT09bC5pbkFycmF5KHIsdCkmJnQucHVzaChyKX1vLiRlbGVtZW50LnZhbCh0KSxvLiRlbGVtZW50LnRyaWdnZXIoXCJpbnB1dFwiKS50cmlnZ2VyKFwiY2hhbmdlXCIpfSl9fSxuLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpczsodGhpcy5jb250YWluZXI9ZSkub24oXCJzZWxlY3RcIixmdW5jdGlvbihlKXtuLnNlbGVjdChlLmRhdGEpfSksZS5vbihcInVuc2VsZWN0XCIsZnVuY3Rpb24oZSl7bi51bnNlbGVjdChlLmRhdGEpfSl9LG4ucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLiRlbGVtZW50LmZpbmQoXCIqXCIpLmVhY2goZnVuY3Rpb24oKXthLlJlbW92ZURhdGEodGhpcyl9KX0sbi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24ocixlKXt2YXIgaT1bXSxvPXRoaXM7dGhpcy4kZWxlbWVudC5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1sKHRoaXMpO2lmKGUuaXMoXCJvcHRpb25cIil8fGUuaXMoXCJvcHRncm91cFwiKSl7dmFyIHQ9by5pdGVtKGUpLG49by5tYXRjaGVzKHIsdCk7bnVsbCE9PW4mJmkucHVzaChuKX19KSxlKHtyZXN1bHRzOml9KX0sbi5wcm90b3R5cGUuYWRkT3B0aW9ucz1mdW5jdGlvbihlKXthLmFwcGVuZE1hbnkodGhpcy4kZWxlbWVudCxlKX0sbi5wcm90b3R5cGUub3B0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0O2UuY2hpbGRyZW4/KHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGdyb3VwXCIpKS5sYWJlbD1lLnRleHQ6dm9pZCAwIT09KHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKSkudGV4dENvbnRlbnQ/dC50ZXh0Q29udGVudD1lLnRleHQ6dC5pbm5lclRleHQ9ZS50ZXh0LHZvaWQgMCE9PWUuaWQmJih0LnZhbHVlPWUuaWQpLGUuZGlzYWJsZWQmJih0LmRpc2FibGVkPSEwKSxlLnNlbGVjdGVkJiYodC5zZWxlY3RlZD0hMCksZS50aXRsZSYmKHQudGl0bGU9ZS50aXRsZSk7dmFyIG49bCh0KSxyPXRoaXMuX25vcm1hbGl6ZUl0ZW0oZSk7cmV0dXJuIHIuZWxlbWVudD10LGEuU3RvcmVEYXRhKHQsXCJkYXRhXCIsciksbn0sbi5wcm90b3R5cGUuaXRlbT1mdW5jdGlvbihlKXt2YXIgdD17fTtpZihudWxsIT0odD1hLkdldERhdGEoZVswXSxcImRhdGFcIikpKXJldHVybiB0O2lmKGUuaXMoXCJvcHRpb25cIikpdD17aWQ6ZS52YWwoKSx0ZXh0OmUudGV4dCgpLGRpc2FibGVkOmUucHJvcChcImRpc2FibGVkXCIpLHNlbGVjdGVkOmUucHJvcChcInNlbGVjdGVkXCIpLHRpdGxlOmUucHJvcChcInRpdGxlXCIpfTtlbHNlIGlmKGUuaXMoXCJvcHRncm91cFwiKSl7dD17dGV4dDplLnByb3AoXCJsYWJlbFwiKSxjaGlsZHJlbjpbXSx0aXRsZTplLnByb3AoXCJ0aXRsZVwiKX07Zm9yKHZhciBuPWUuY2hpbGRyZW4oXCJvcHRpb25cIikscj1bXSxpPTA7aTxuLmxlbmd0aDtpKyspe3ZhciBvPWwobltpXSkscz10aGlzLml0ZW0obyk7ci5wdXNoKHMpfXQuY2hpbGRyZW49cn1yZXR1cm4odD10aGlzLl9ub3JtYWxpemVJdGVtKHQpKS5lbGVtZW50PWVbMF0sYS5TdG9yZURhdGEoZVswXSxcImRhdGFcIix0KSx0fSxuLnByb3RvdHlwZS5fbm9ybWFsaXplSXRlbT1mdW5jdGlvbihlKXtlIT09T2JqZWN0KGUpJiYoZT17aWQ6ZSx0ZXh0OmV9KTtyZXR1cm4gbnVsbCE9KGU9bC5leHRlbmQoe30se3RleHQ6XCJcIn0sZSkpLmlkJiYoZS5pZD1lLmlkLnRvU3RyaW5nKCkpLG51bGwhPWUudGV4dCYmKGUudGV4dD1lLnRleHQudG9TdHJpbmcoKSksbnVsbD09ZS5fcmVzdWx0SWQmJmUuaWQmJm51bGwhPXRoaXMuY29udGFpbmVyJiYoZS5fcmVzdWx0SWQ9dGhpcy5nZW5lcmF0ZVJlc3VsdElkKHRoaXMuY29udGFpbmVyLGUpKSxsLmV4dGVuZCh7fSx7c2VsZWN0ZWQ6ITEsZGlzYWJsZWQ6ITF9LGUpfSxuLnByb3RvdHlwZS5tYXRjaGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub3B0aW9ucy5nZXQoXCJtYXRjaGVyXCIpKGUsdCl9LG59KSxlLmRlZmluZShcInNlbGVjdDIvZGF0YS9hcnJheVwiLFtcIi4vc2VsZWN0XCIsXCIuLi91dGlsc1wiLFwianF1ZXJ5XCJdLGZ1bmN0aW9uKGUsZixnKXtmdW5jdGlvbiByKGUsdCl7dGhpcy5fZGF0YVRvQ29udmVydD10LmdldChcImRhdGFcIil8fFtdLHIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxlLHQpfXJldHVybiBmLkV4dGVuZChyLGUpLHIucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0KXtyLl9fc3VwZXJfXy5iaW5kLmNhbGwodGhpcyxlLHQpLHRoaXMuYWRkT3B0aW9ucyh0aGlzLmNvbnZlcnRUb09wdGlvbnModGhpcy5fZGF0YVRvQ29udmVydCkpfSxyLnByb3RvdHlwZS5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIGU9dGhpcy4kZWxlbWVudC5maW5kKFwib3B0aW9uXCIpLmZpbHRlcihmdW5jdGlvbihlLHQpe3JldHVybiB0LnZhbHVlPT1uLmlkLnRvU3RyaW5nKCl9KTswPT09ZS5sZW5ndGgmJihlPXRoaXMub3B0aW9uKG4pLHRoaXMuYWRkT3B0aW9ucyhlKSksci5fX3N1cGVyX18uc2VsZWN0LmNhbGwodGhpcyxuKX0sci5wcm90b3R5cGUuY29udmVydFRvT3B0aW9ucz1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49dGhpcy4kZWxlbWVudC5maW5kKFwib3B0aW9uXCIpLHI9bi5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdC5pdGVtKGcodGhpcykpLmlkfSkuZ2V0KCksaT1bXTtmdW5jdGlvbiBvKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBnKHRoaXMpLnZhbCgpPT1lLmlkfX1mb3IodmFyIHM9MDtzPGUubGVuZ3RoO3MrKyl7dmFyIGE9dGhpcy5fbm9ybWFsaXplSXRlbShlW3NdKTtpZigwPD1nLmluQXJyYXkoYS5pZCxyKSl7dmFyIGw9bi5maWx0ZXIobyhhKSksYz10aGlzLml0ZW0obCksdT1nLmV4dGVuZCghMCx7fSxhLGMpLGQ9dGhpcy5vcHRpb24odSk7bC5yZXBsYWNlV2l0aChkKX1lbHNle3ZhciBwPXRoaXMub3B0aW9uKGEpO2lmKGEuY2hpbGRyZW4pe3ZhciBoPXRoaXMuY29udmVydFRvT3B0aW9ucyhhLmNoaWxkcmVuKTtmLmFwcGVuZE1hbnkocCxoKX1pLnB1c2gocCl9fXJldHVybiBpfSxyfSksZS5kZWZpbmUoXCJzZWxlY3QyL2RhdGEvYWpheFwiLFtcIi4vYXJyYXlcIixcIi4uL3V0aWxzXCIsXCJqcXVlcnlcIl0sZnVuY3Rpb24oZSx0LG8pe2Z1bmN0aW9uIG4oZSx0KXt0aGlzLmFqYXhPcHRpb25zPXRoaXMuX2FwcGx5RGVmYXVsdHModC5nZXQoXCJhamF4XCIpKSxudWxsIT10aGlzLmFqYXhPcHRpb25zLnByb2Nlc3NSZXN1bHRzJiYodGhpcy5wcm9jZXNzUmVzdWx0cz10aGlzLmFqYXhPcHRpb25zLnByb2Nlc3NSZXN1bHRzKSxuLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsZSx0KX1yZXR1cm4gdC5FeHRlbmQobixlKSxuLnByb3RvdHlwZS5fYXBwbHlEZWZhdWx0cz1mdW5jdGlvbihlKXt2YXIgdD17ZGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gby5leHRlbmQoe30sZSx7cTplLnRlcm19KX0sdHJhbnNwb3J0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1vLmFqYXgoZSk7cmV0dXJuIHIudGhlbih0KSxyLmZhaWwobikscn19O3JldHVybiBvLmV4dGVuZCh7fSx0LGUsITApfSxuLnByb3RvdHlwZS5wcm9jZXNzUmVzdWx0cz1mdW5jdGlvbihlKXtyZXR1cm4gZX0sbi5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24obixyKXt2YXIgaT10aGlzO251bGwhPXRoaXMuX3JlcXVlc3QmJihvLmlzRnVuY3Rpb24odGhpcy5fcmVxdWVzdC5hYm9ydCkmJnRoaXMuX3JlcXVlc3QuYWJvcnQoKSx0aGlzLl9yZXF1ZXN0PW51bGwpO3ZhciB0PW8uZXh0ZW5kKHt0eXBlOlwiR0VUXCJ9LHRoaXMuYWpheE9wdGlvbnMpO2Z1bmN0aW9uIGUoKXt2YXIgZT10LnRyYW5zcG9ydCh0LGZ1bmN0aW9uKGUpe3ZhciB0PWkucHJvY2Vzc1Jlc3VsdHMoZSxuKTtpLm9wdGlvbnMuZ2V0KFwiZGVidWdcIikmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLmVycm9yJiYodCYmdC5yZXN1bHRzJiZvLmlzQXJyYXkodC5yZXN1bHRzKXx8Y29uc29sZS5lcnJvcihcIlNlbGVjdDI6IFRoZSBBSkFYIHJlc3VsdHMgZGlkIG5vdCByZXR1cm4gYW4gYXJyYXkgaW4gdGhlIGByZXN1bHRzYCBrZXkgb2YgdGhlIHJlc3BvbnNlLlwiKSkscih0KX0sZnVuY3Rpb24oKXtcInN0YXR1c1wiaW4gZSYmKDA9PT1lLnN0YXR1c3x8XCIwXCI9PT1lLnN0YXR1cyl8fGkudHJpZ2dlcihcInJlc3VsdHM6bWVzc2FnZVwiLHttZXNzYWdlOlwiZXJyb3JMb2FkaW5nXCJ9KX0pO2kuX3JlcXVlc3Q9ZX1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnVybCYmKHQudXJsPXQudXJsLmNhbGwodGhpcy4kZWxlbWVudCxuKSksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5kYXRhJiYodC5kYXRhPXQuZGF0YS5jYWxsKHRoaXMuJGVsZW1lbnQsbikpLHRoaXMuYWpheE9wdGlvbnMuZGVsYXkmJm51bGwhPW4udGVybT8odGhpcy5fcXVlcnlUaW1lb3V0JiZ3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3F1ZXJ5VGltZW91dCksdGhpcy5fcXVlcnlUaW1lb3V0PXdpbmRvdy5zZXRUaW1lb3V0KGUsdGhpcy5hamF4T3B0aW9ucy5kZWxheSkpOmUoKX0sbn0pLGUuZGVmaW5lKFwic2VsZWN0Mi9kYXRhL3RhZ3NcIixbXCJqcXVlcnlcIl0sZnVuY3Rpb24odSl7ZnVuY3Rpb24gZShlLHQsbil7dmFyIHI9bi5nZXQoXCJ0YWdzXCIpLGk9bi5nZXQoXCJjcmVhdGVUYWdcIik7dm9pZCAwIT09aSYmKHRoaXMuY3JlYXRlVGFnPWkpO3ZhciBvPW4uZ2V0KFwiaW5zZXJ0VGFnXCIpO2lmKHZvaWQgMCE9PW8mJih0aGlzLmluc2VydFRhZz1vKSxlLmNhbGwodGhpcyx0LG4pLHUuaXNBcnJheShyKSlmb3IodmFyIHM9MDtzPHIubGVuZ3RoO3MrKyl7dmFyIGE9cltzXSxsPXRoaXMuX25vcm1hbGl6ZUl0ZW0oYSksYz10aGlzLm9wdGlvbihsKTt0aGlzLiRlbGVtZW50LmFwcGVuZChjKX19cmV0dXJuIGUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGUsYyx1KXt2YXIgZD10aGlzO3RoaXMuX3JlbW92ZU9sZFRhZ3MoKSxudWxsIT1jLnRlcm0mJm51bGw9PWMucGFnZT9lLmNhbGwodGhpcyxjLGZ1bmN0aW9uIGUodCxuKXtmb3IodmFyIHI9dC5yZXN1bHRzLGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIG89cltpXSxzPW51bGwhPW8uY2hpbGRyZW4mJiFlKHtyZXN1bHRzOm8uY2hpbGRyZW59LCEwKTtpZigoby50ZXh0fHxcIlwiKS50b1VwcGVyQ2FzZSgpPT09KGMudGVybXx8XCJcIikudG9VcHBlckNhc2UoKXx8cylyZXR1cm4hbiYmKHQuZGF0YT1yLHZvaWQgdSh0KSl9aWYobilyZXR1cm4hMDt2YXIgYT1kLmNyZWF0ZVRhZyhjKTtpZihudWxsIT1hKXt2YXIgbD1kLm9wdGlvbihhKTtsLmF0dHIoXCJkYXRhLXNlbGVjdDItdGFnXCIsITApLGQuYWRkT3B0aW9ucyhbbF0pLGQuaW5zZXJ0VGFnKHIsYSl9dC5yZXN1bHRzPXIsdSh0KX0pOmUuY2FsbCh0aGlzLGMsdSl9LGUucHJvdG90eXBlLmNyZWF0ZVRhZz1mdW5jdGlvbihlLHQpe3ZhciBuPXUudHJpbSh0LnRlcm0pO3JldHVyblwiXCI9PT1uP251bGw6e2lkOm4sdGV4dDpufX0sZS5wcm90b3R5cGUuaW5zZXJ0VGFnPWZ1bmN0aW9uKGUsdCxuKXt0LnVuc2hpZnQobil9LGUucHJvdG90eXBlLl9yZW1vdmVPbGRUYWdzPWZ1bmN0aW9uKGUpe3RoaXMuJGVsZW1lbnQuZmluZChcIm9wdGlvbltkYXRhLXNlbGVjdDItdGFnXVwiKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZHx8dSh0aGlzKS5yZW1vdmUoKX0pfSxlfSksZS5kZWZpbmUoXCJzZWxlY3QyL2RhdGEvdG9rZW5pemVyXCIsW1wianF1ZXJ5XCJdLGZ1bmN0aW9uKGQpe2Z1bmN0aW9uIGUoZSx0LG4pe3ZhciByPW4uZ2V0KFwidG9rZW5pemVyXCIpO3ZvaWQgMCE9PXImJih0aGlzLnRva2VuaXplcj1yKSxlLmNhbGwodGhpcyx0LG4pfXJldHVybiBlLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUsdCxuKXtlLmNhbGwodGhpcyx0LG4pLHRoaXMuJHNlYXJjaD10LmRyb3Bkb3duLiRzZWFyY2h8fHQuc2VsZWN0aW9uLiRzZWFyY2h8fG4uZmluZChcIi5zZWxlY3QyLXNlYXJjaF9fZmllbGRcIil9LGUucHJvdG90eXBlLnF1ZXJ5PWZ1bmN0aW9uKGUsdCxuKXt2YXIgaT10aGlzO3QudGVybT10LnRlcm18fFwiXCI7dmFyIHI9dGhpcy50b2tlbml6ZXIodCx0aGlzLm9wdGlvbnMsZnVuY3Rpb24oZSl7dmFyIHQsbj1pLl9ub3JtYWxpemVJdGVtKGUpO2lmKCFpLiRlbGVtZW50LmZpbmQoXCJvcHRpb25cIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGQodGhpcykudmFsKCk9PT1uLmlkfSkubGVuZ3RoKXt2YXIgcj1pLm9wdGlvbihuKTtyLmF0dHIoXCJkYXRhLXNlbGVjdDItdGFnXCIsITApLGkuX3JlbW92ZU9sZFRhZ3MoKSxpLmFkZE9wdGlvbnMoW3JdKX10PW4saS50cmlnZ2VyKFwic2VsZWN0XCIse2RhdGE6dH0pfSk7ci50ZXJtIT09dC50ZXJtJiYodGhpcy4kc2VhcmNoLmxlbmd0aCYmKHRoaXMuJHNlYXJjaC52YWwoci50ZXJtKSx0aGlzLiRzZWFyY2gudHJpZ2dlcihcImZvY3VzXCIpKSx0LnRlcm09ci50ZXJtKSxlLmNhbGwodGhpcyx0LG4pfSxlLnByb3RvdHlwZS50b2tlbml6ZXI9ZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBpPW4uZ2V0KFwidG9rZW5TZXBhcmF0b3JzXCIpfHxbXSxvPXQudGVybSxzPTAsYT10aGlzLmNyZWF0ZVRhZ3x8ZnVuY3Rpb24oZSl7cmV0dXJue2lkOmUudGVybSx0ZXh0OmUudGVybX19O3M8by5sZW5ndGg7KXt2YXIgbD1vW3NdO2lmKC0xIT09ZC5pbkFycmF5KGwsaSkpe3ZhciBjPW8uc3Vic3RyKDAscyksdT1hKGQuZXh0ZW5kKHt9LHQse3Rlcm06Y30pKTtudWxsIT11PyhyKHUpLG89by5zdWJzdHIocysxKXx8XCJcIixzPTApOnMrK31lbHNlIHMrK31yZXR1cm57dGVybTpvfX0sZX0pLGUuZGVmaW5lKFwic2VsZWN0Mi9kYXRhL21pbmltdW1JbnB1dExlbmd0aFwiLFtdLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQsbil7dGhpcy5taW5pbXVtSW5wdXRMZW5ndGg9bi5nZXQoXCJtaW5pbXVtSW5wdXRMZW5ndGhcIiksZS5jYWxsKHRoaXMsdCxuKX1yZXR1cm4gZS5wcm90b3R5cGUucXVlcnk9ZnVuY3Rpb24oZSx0LG4pe3QudGVybT10LnRlcm18fFwiXCIsdC50ZXJtLmxlbmd0aDx0aGlzLm1pbmltdW1JbnB1dExlbmd0aD90aGlzLnRyaWdnZXIoXCJyZXN1bHRzOm1lc3NhZ2VcIix7bWVzc2FnZTpcImlucHV0VG9vU2hvcnRcIixhcmdzOnttaW5pbXVtOnRoaXMubWluaW11bUlucHV0TGVuZ3RoLGlucHV0OnQudGVybSxwYXJhbXM6dH19KTplLmNhbGwodGhpcyx0LG4pfSxlfSksZS5kZWZpbmUoXCJzZWxlY3QyL2RhdGEvbWF4aW11bUlucHV0TGVuZ3RoXCIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLm1heGltdW1JbnB1dExlbmd0aD1uLmdldChcIm1heGltdW1JbnB1dExlbmd0aFwiKSxlLmNhbGwodGhpcyx0LG4pfXJldHVybiBlLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbihlLHQsbil7dC50ZXJtPXQudGVybXx8XCJcIiwwPHRoaXMubWF4aW11bUlucHV0TGVuZ3RoJiZ0LnRlcm0ubGVuZ3RoPnRoaXMubWF4aW11bUlucHV0TGVuZ3RoP3RoaXMudHJpZ2dlcihcInJlc3VsdHM6bWVzc2FnZVwiLHttZXNzYWdlOlwiaW5wdXRUb29Mb25nXCIsYXJnczp7bWF4aW11bTp0aGlzLm1heGltdW1JbnB1dExlbmd0aCxpbnB1dDp0LnRlcm0scGFyYW1zOnR9fSk6ZS5jYWxsKHRoaXMsdCxuKX0sZX0pLGUuZGVmaW5lKFwic2VsZWN0Mi9kYXRhL21heGltdW1TZWxlY3Rpb25MZW5ndGhcIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMubWF4aW11bVNlbGVjdGlvbkxlbmd0aD1uLmdldChcIm1heGltdW1TZWxlY3Rpb25MZW5ndGhcIiksZS5jYWxsKHRoaXMsdCxuKX1yZXR1cm4gZS5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcztlLmNhbGwodGhpcyx0LG4pLHQub24oXCJzZWxlY3RcIixmdW5jdGlvbigpe3IuX2NoZWNrSWZNYXhpbXVtU2VsZWN0ZWQoKX0pfSxlLnByb3RvdHlwZS5xdWVyeT1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpczt0aGlzLl9jaGVja0lmTWF4aW11bVNlbGVjdGVkKGZ1bmN0aW9uKCl7ZS5jYWxsKHIsdCxuKX0pfSxlLnByb3RvdHlwZS5fY2hlY2tJZk1heGltdW1TZWxlY3RlZD1mdW5jdGlvbihlLG4pe3ZhciByPXRoaXM7dGhpcy5jdXJyZW50KGZ1bmN0aW9uKGUpe3ZhciB0PW51bGwhPWU/ZS5sZW5ndGg6MDswPHIubWF4aW11bVNlbGVjdGlvbkxlbmd0aCYmdD49ci5tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoP3IudHJpZ2dlcihcInJlc3VsdHM6bWVzc2FnZVwiLHttZXNzYWdlOlwibWF4aW11bVNlbGVjdGVkXCIsYXJnczp7bWF4aW11bTpyLm1heGltdW1TZWxlY3Rpb25MZW5ndGh9fSk6biYmbigpfSl9LGV9KSxlLmRlZmluZShcInNlbGVjdDIvZHJvcGRvd25cIixbXCJqcXVlcnlcIixcIi4vdXRpbHNcIl0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBuKGUsdCl7dGhpcy4kZWxlbWVudD1lLHRoaXMub3B0aW9ucz10LG4uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyl9cmV0dXJuIGUuRXh0ZW5kKG4sZS5PYnNlcnZhYmxlKSxuLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10KCc8c3BhbiBjbGFzcz1cInNlbGVjdDItZHJvcGRvd25cIj48c3BhbiBjbGFzcz1cInNlbGVjdDItcmVzdWx0c1wiPjwvc3Bhbj48L3NwYW4+Jyk7cmV0dXJuIGUuYXR0cihcImRpclwiLHRoaXMub3B0aW9ucy5nZXQoXCJkaXJcIikpLHRoaXMuJGRyb3Bkb3duPWV9LG4ucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLnBvc2l0aW9uPWZ1bmN0aW9uKGUsdCl7fSxuLnByb3RvdHlwZS5kZXN0cm95PWZ1bmN0aW9uKCl7dGhpcy4kZHJvcGRvd24ucmVtb3ZlKCl9LG59KSxlLmRlZmluZShcInNlbGVjdDIvZHJvcGRvd24vc2VhcmNoXCIsW1wianF1ZXJ5XCIsXCIuLi91dGlsc1wiXSxmdW5jdGlvbihvLGUpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt2YXIgdD1lLmNhbGwodGhpcyksbj1vKCc8c3BhbiBjbGFzcz1cInNlbGVjdDItc2VhcmNoIHNlbGVjdDItc2VhcmNoLS1kcm9wZG93blwiPjxpbnB1dCBjbGFzcz1cInNlbGVjdDItc2VhcmNoX19maWVsZFwiIHR5cGU9XCJzZWFyY2hcIiB0YWJpbmRleD1cIi0xXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgYXV0b2NvcnJlY3Q9XCJvZmZcIiBhdXRvY2FwaXRhbGl6ZT1cIm5vbmVcIiBzcGVsbGNoZWNrPVwiZmFsc2VcIiByb2xlPVwic2VhcmNoYm94XCIgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCIgLz48L3NwYW4+Jyk7cmV0dXJuIHRoaXMuJHNlYXJjaENvbnRhaW5lcj1uLHRoaXMuJHNlYXJjaD1uLmZpbmQoXCJpbnB1dFwiKSx0LnByZXBlbmQobiksdH0sdC5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcyxpPXQuaWQrXCItcmVzdWx0c1wiO2UuY2FsbCh0aGlzLHQsbiksdGhpcy4kc2VhcmNoLm9uKFwia2V5ZG93blwiLGZ1bmN0aW9uKGUpe3IudHJpZ2dlcihcImtleXByZXNzXCIsZSksci5fa2V5VXBQcmV2ZW50ZWQ9ZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKX0pLHRoaXMuJHNlYXJjaC5vbihcImlucHV0XCIsZnVuY3Rpb24oZSl7byh0aGlzKS5vZmYoXCJrZXl1cFwiKX0pLHRoaXMuJHNlYXJjaC5vbihcImtleXVwIGlucHV0XCIsZnVuY3Rpb24oZSl7ci5oYW5kbGVTZWFyY2goZSl9KSx0Lm9uKFwib3BlblwiLGZ1bmN0aW9uKCl7ci4kc2VhcmNoLmF0dHIoXCJ0YWJpbmRleFwiLDApLHIuJHNlYXJjaC5hdHRyKFwiYXJpYS1jb250cm9sc1wiLGkpLHIuJHNlYXJjaC50cmlnZ2VyKFwiZm9jdXNcIiksd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtyLiRzZWFyY2gudHJpZ2dlcihcImZvY3VzXCIpfSwwKX0pLHQub24oXCJjbG9zZVwiLGZ1bmN0aW9uKCl7ci4kc2VhcmNoLmF0dHIoXCJ0YWJpbmRleFwiLC0xKSxyLiRzZWFyY2gucmVtb3ZlQXR0cihcImFyaWEtY29udHJvbHNcIiksci4kc2VhcmNoLnJlbW92ZUF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIiksci4kc2VhcmNoLnZhbChcIlwiKSxyLiRzZWFyY2gudHJpZ2dlcihcImJsdXJcIil9KSx0Lm9uKFwiZm9jdXNcIixmdW5jdGlvbigpe3QuaXNPcGVuKCl8fHIuJHNlYXJjaC50cmlnZ2VyKFwiZm9jdXNcIil9KSx0Lm9uKFwicmVzdWx0czphbGxcIixmdW5jdGlvbihlKXtudWxsIT1lLnF1ZXJ5LnRlcm0mJlwiXCIhPT1lLnF1ZXJ5LnRlcm18fChyLnNob3dTZWFyY2goZSk/ci4kc2VhcmNoQ29udGFpbmVyLnJlbW92ZUNsYXNzKFwic2VsZWN0Mi1zZWFyY2gtLWhpZGVcIik6ci4kc2VhcmNoQ29udGFpbmVyLmFkZENsYXNzKFwic2VsZWN0Mi1zZWFyY2gtLWhpZGVcIikpfSksdC5vbihcInJlc3VsdHM6Zm9jdXNcIixmdW5jdGlvbihlKXtlLmRhdGEuX3Jlc3VsdElkP3IuJHNlYXJjaC5hdHRyKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsZS5kYXRhLl9yZXN1bHRJZCk6ci4kc2VhcmNoLnJlbW92ZUF0dHIoXCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnRcIil9KX0sdC5wcm90b3R5cGUuaGFuZGxlU2VhcmNoPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLl9rZXlVcFByZXZlbnRlZCl7dmFyIHQ9dGhpcy4kc2VhcmNoLnZhbCgpO3RoaXMudHJpZ2dlcihcInF1ZXJ5XCIse3Rlcm06dH0pfXRoaXMuX2tleVVwUHJldmVudGVkPSExfSx0LnByb3RvdHlwZS5zaG93U2VhcmNoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuITB9LHR9KSxlLmRlZmluZShcInNlbGVjdDIvZHJvcGRvd24vaGlkZVBsYWNlaG9sZGVyXCIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLHIpe3RoaXMucGxhY2Vob2xkZXI9dGhpcy5ub3JtYWxpemVQbGFjZWhvbGRlcihuLmdldChcInBsYWNlaG9sZGVyXCIpKSxlLmNhbGwodGhpcyx0LG4scil9cmV0dXJuIGUucHJvdG90eXBlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3QucmVzdWx0cz10aGlzLnJlbW92ZVBsYWNlaG9sZGVyKHQucmVzdWx0cyksZS5jYWxsKHRoaXMsdCl9LGUucHJvdG90eXBlLm5vcm1hbGl6ZVBsYWNlaG9sZGVyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PXtpZDpcIlwiLHRleHQ6dH0pLHR9LGUucHJvdG90eXBlLnJlbW92ZVBsYWNlaG9sZGVyPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQuc2xpY2UoMCkscj10Lmxlbmd0aC0xOzA8PXI7ci0tKXt2YXIgaT10W3JdO3RoaXMucGxhY2Vob2xkZXIuaWQ9PT1pLmlkJiZuLnNwbGljZShyLDEpfXJldHVybiBufSxlfSksZS5kZWZpbmUoXCJzZWxlY3QyL2Ryb3Bkb3duL2luZmluaXRlU2Nyb2xsXCIsW1wianF1ZXJ5XCJdLGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGUoZSx0LG4scil7dGhpcy5sYXN0UGFyYW1zPXt9LGUuY2FsbCh0aGlzLHQsbixyKSx0aGlzLiRsb2FkaW5nTW9yZT10aGlzLmNyZWF0ZUxvYWRpbmdNb3JlKCksdGhpcy5sb2FkaW5nPSExfXJldHVybiBlLnByb3RvdHlwZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLiRsb2FkaW5nTW9yZS5yZW1vdmUoKSx0aGlzLmxvYWRpbmc9ITEsZS5jYWxsKHRoaXMsdCksdGhpcy5zaG93TG9hZGluZ01vcmUodCkmJih0aGlzLiRyZXN1bHRzLmFwcGVuZCh0aGlzLiRsb2FkaW5nTW9yZSksdGhpcy5sb2FkTW9yZUlmTmVlZGVkKCkpfSxlLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO2UuY2FsbCh0aGlzLHQsbiksdC5vbihcInF1ZXJ5XCIsZnVuY3Rpb24oZSl7ci5sYXN0UGFyYW1zPWUsci5sb2FkaW5nPSEwfSksdC5vbihcInF1ZXJ5OmFwcGVuZFwiLGZ1bmN0aW9uKGUpe3IubGFzdFBhcmFtcz1lLHIubG9hZGluZz0hMH0pLHRoaXMuJHJlc3VsdHMub24oXCJzY3JvbGxcIix0aGlzLmxvYWRNb3JlSWZOZWVkZWQuYmluZCh0aGlzKSl9LGUucHJvdG90eXBlLmxvYWRNb3JlSWZOZWVkZWQ9ZnVuY3Rpb24oKXt2YXIgZT1uLmNvbnRhaW5zKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx0aGlzLiRsb2FkaW5nTW9yZVswXSk7aWYoIXRoaXMubG9hZGluZyYmZSl7dmFyIHQ9dGhpcy4kcmVzdWx0cy5vZmZzZXQoKS50b3ArdGhpcy4kcmVzdWx0cy5vdXRlckhlaWdodCghMSk7dGhpcy4kbG9hZGluZ01vcmUub2Zmc2V0KCkudG9wK3RoaXMuJGxvYWRpbmdNb3JlLm91dGVySGVpZ2h0KCExKTw9dCs1MCYmdGhpcy5sb2FkTW9yZSgpfX0sZS5wcm90b3R5cGUubG9hZE1vcmU9ZnVuY3Rpb24oKXt0aGlzLmxvYWRpbmc9ITA7dmFyIGU9bi5leHRlbmQoe30se3BhZ2U6MX0sdGhpcy5sYXN0UGFyYW1zKTtlLnBhZ2UrKyx0aGlzLnRyaWdnZXIoXCJxdWVyeTphcHBlbmRcIixlKX0sZS5wcm90b3R5cGUuc2hvd0xvYWRpbmdNb3JlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQucGFnaW5hdGlvbiYmdC5wYWdpbmF0aW9uLm1vcmV9LGUucHJvdG90eXBlLmNyZWF0ZUxvYWRpbmdNb3JlPWZ1bmN0aW9uKCl7dmFyIGU9bignPGxpIGNsYXNzPVwic2VsZWN0Mi1yZXN1bHRzX19vcHRpb24gc2VsZWN0Mi1yZXN1bHRzX19vcHRpb24tLWxvYWQtbW9yZVwicm9sZT1cIm9wdGlvblwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+PC9saT4nKSx0PXRoaXMub3B0aW9ucy5nZXQoXCJ0cmFuc2xhdGlvbnNcIikuZ2V0KFwibG9hZGluZ01vcmVcIik7cmV0dXJuIGUuaHRtbCh0KHRoaXMubGFzdFBhcmFtcykpLGV9LGV9KSxlLmRlZmluZShcInNlbGVjdDIvZHJvcGRvd24vYXR0YWNoQm9keVwiLFtcImpxdWVyeVwiLFwiLi4vdXRpbHNcIl0sZnVuY3Rpb24oZixhKXtmdW5jdGlvbiBlKGUsdCxuKXt0aGlzLiRkcm9wZG93blBhcmVudD1mKG4uZ2V0KFwiZHJvcGRvd25QYXJlbnRcIil8fGRvY3VtZW50LmJvZHkpLGUuY2FsbCh0aGlzLHQsbil9cmV0dXJuIGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7ZS5jYWxsKHRoaXMsdCxuKSx0Lm9uKFwib3BlblwiLGZ1bmN0aW9uKCl7ci5fc2hvd0Ryb3Bkb3duKCksci5fYXR0YWNoUG9zaXRpb25pbmdIYW5kbGVyKHQpLHIuX2JpbmRDb250YWluZXJSZXN1bHRIYW5kbGVycyh0KX0pLHQub24oXCJjbG9zZVwiLGZ1bmN0aW9uKCl7ci5faGlkZURyb3Bkb3duKCksci5fZGV0YWNoUG9zaXRpb25pbmdIYW5kbGVyKHQpfSksdGhpcy4kZHJvcGRvd25Db250YWluZXIub24oXCJtb3VzZWRvd25cIixmdW5jdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpfSl9LGUucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oZSl7ZS5jYWxsKHRoaXMpLHRoaXMuJGRyb3Bkb3duQ29udGFpbmVyLnJlbW92ZSgpfSxlLnByb3RvdHlwZS5wb3NpdGlvbj1mdW5jdGlvbihlLHQsbil7dC5hdHRyKFwiY2xhc3NcIixuLmF0dHIoXCJjbGFzc1wiKSksdC5yZW1vdmVDbGFzcyhcInNlbGVjdDJcIiksdC5hZGRDbGFzcyhcInNlbGVjdDItY29udGFpbmVyLS1vcGVuXCIpLHQuY3NzKHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOi05OTk5OTl9KSx0aGlzLiRjb250YWluZXI9bn0sZS5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PWYoXCI8c3Bhbj48L3NwYW4+XCIpLG49ZS5jYWxsKHRoaXMpO3JldHVybiB0LmFwcGVuZChuKSx0aGlzLiRkcm9wZG93bkNvbnRhaW5lcj10fSxlLnByb3RvdHlwZS5faGlkZURyb3Bkb3duPWZ1bmN0aW9uKGUpe3RoaXMuJGRyb3Bkb3duQ29udGFpbmVyLmRldGFjaCgpfSxlLnByb3RvdHlwZS5fYmluZENvbnRhaW5lclJlc3VsdEhhbmRsZXJzPWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2NvbnRhaW5lclJlc3VsdHNIYW5kbGVyc0JvdW5kKXt2YXIgbj10aGlzO3Qub24oXCJyZXN1bHRzOmFsbFwiLGZ1bmN0aW9uKCl7bi5fcG9zaXRpb25Ecm9wZG93bigpLG4uX3Jlc2l6ZURyb3Bkb3duKCl9KSx0Lm9uKFwicmVzdWx0czphcHBlbmRcIixmdW5jdGlvbigpe24uX3Bvc2l0aW9uRHJvcGRvd24oKSxuLl9yZXNpemVEcm9wZG93bigpfSksdC5vbihcInJlc3VsdHM6bWVzc2FnZVwiLGZ1bmN0aW9uKCl7bi5fcG9zaXRpb25Ecm9wZG93bigpLG4uX3Jlc2l6ZURyb3Bkb3duKCl9KSx0Lm9uKFwic2VsZWN0XCIsZnVuY3Rpb24oKXtuLl9wb3NpdGlvbkRyb3Bkb3duKCksbi5fcmVzaXplRHJvcGRvd24oKX0pLHQub24oXCJ1bnNlbGVjdFwiLGZ1bmN0aW9uKCl7bi5fcG9zaXRpb25Ecm9wZG93bigpLG4uX3Jlc2l6ZURyb3Bkb3duKCl9KSx0aGlzLl9jb250YWluZXJSZXN1bHRzSGFuZGxlcnNCb3VuZD0hMH19LGUucHJvdG90eXBlLl9hdHRhY2hQb3NpdGlvbmluZ0hhbmRsZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9XCJzY3JvbGwuc2VsZWN0Mi5cIit0LmlkLGk9XCJyZXNpemUuc2VsZWN0Mi5cIit0LmlkLG89XCJvcmllbnRhdGlvbmNoYW5nZS5zZWxlY3QyLlwiK3QuaWQscz10aGlzLiRjb250YWluZXIucGFyZW50cygpLmZpbHRlcihhLmhhc1Njcm9sbCk7cy5lYWNoKGZ1bmN0aW9uKCl7YS5TdG9yZURhdGEodGhpcyxcInNlbGVjdDItc2Nyb2xsLXBvc2l0aW9uXCIse3g6Zih0aGlzKS5zY3JvbGxMZWZ0KCkseTpmKHRoaXMpLnNjcm9sbFRvcCgpfSl9KSxzLm9uKHIsZnVuY3Rpb24oZSl7dmFyIHQ9YS5HZXREYXRhKHRoaXMsXCJzZWxlY3QyLXNjcm9sbC1wb3NpdGlvblwiKTtmKHRoaXMpLnNjcm9sbFRvcCh0LnkpfSksZih3aW5kb3cpLm9uKHIrXCIgXCIraStcIiBcIitvLGZ1bmN0aW9uKGUpe24uX3Bvc2l0aW9uRHJvcGRvd24oKSxuLl9yZXNpemVEcm9wZG93bigpfSl9LGUucHJvdG90eXBlLl9kZXRhY2hQb3NpdGlvbmluZ0hhbmRsZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj1cInNjcm9sbC5zZWxlY3QyLlwiK3QuaWQscj1cInJlc2l6ZS5zZWxlY3QyLlwiK3QuaWQsaT1cIm9yaWVudGF0aW9uY2hhbmdlLnNlbGVjdDIuXCIrdC5pZDt0aGlzLiRjb250YWluZXIucGFyZW50cygpLmZpbHRlcihhLmhhc1Njcm9sbCkub2ZmKG4pLGYod2luZG93KS5vZmYobitcIiBcIityK1wiIFwiK2kpfSxlLnByb3RvdHlwZS5fcG9zaXRpb25Ecm9wZG93bj1mdW5jdGlvbigpe3ZhciBlPWYod2luZG93KSx0PXRoaXMuJGRyb3Bkb3duLmhhc0NsYXNzKFwic2VsZWN0Mi1kcm9wZG93bi0tYWJvdmVcIiksbj10aGlzLiRkcm9wZG93bi5oYXNDbGFzcyhcInNlbGVjdDItZHJvcGRvd24tLWJlbG93XCIpLHI9bnVsbCxpPXRoaXMuJGNvbnRhaW5lci5vZmZzZXQoKTtpLmJvdHRvbT1pLnRvcCt0aGlzLiRjb250YWluZXIub3V0ZXJIZWlnaHQoITEpO3ZhciBvPXtoZWlnaHQ6dGhpcy4kY29udGFpbmVyLm91dGVySGVpZ2h0KCExKX07by50b3A9aS50b3Asby5ib3R0b209aS50b3Arby5oZWlnaHQ7dmFyIHM9dGhpcy4kZHJvcGRvd24ub3V0ZXJIZWlnaHQoITEpLGE9ZS5zY3JvbGxUb3AoKSxsPWUuc2Nyb2xsVG9wKCkrZS5oZWlnaHQoKSxjPWE8aS50b3Atcyx1PWw+aS5ib3R0b20rcyxkPXtsZWZ0OmkubGVmdCx0b3A6by5ib3R0b219LHA9dGhpcy4kZHJvcGRvd25QYXJlbnQ7XCJzdGF0aWNcIj09PXAuY3NzKFwicG9zaXRpb25cIikmJihwPXAub2Zmc2V0UGFyZW50KCkpO3ZhciBoPXt0b3A6MCxsZWZ0OjB9OyhmLmNvbnRhaW5zKGRvY3VtZW50LmJvZHkscFswXSl8fHBbMF0uaXNDb25uZWN0ZWQpJiYoaD1wLm9mZnNldCgpKSxkLnRvcC09aC50b3AsZC5sZWZ0LT1oLmxlZnQsdHx8bnx8KHI9XCJiZWxvd1wiKSx1fHwhY3x8dD8hYyYmdSYmdCYmKHI9XCJiZWxvd1wiKTpyPVwiYWJvdmVcIiwoXCJhYm92ZVwiPT1yfHx0JiZcImJlbG93XCIhPT1yKSYmKGQudG9wPW8udG9wLWgudG9wLXMpLG51bGwhPXImJih0aGlzLiRkcm9wZG93bi5yZW1vdmVDbGFzcyhcInNlbGVjdDItZHJvcGRvd24tLWJlbG93IHNlbGVjdDItZHJvcGRvd24tLWFib3ZlXCIpLmFkZENsYXNzKFwic2VsZWN0Mi1kcm9wZG93bi0tXCIrciksdGhpcy4kY29udGFpbmVyLnJlbW92ZUNsYXNzKFwic2VsZWN0Mi1jb250YWluZXItLWJlbG93IHNlbGVjdDItY29udGFpbmVyLS1hYm92ZVwiKS5hZGRDbGFzcyhcInNlbGVjdDItY29udGFpbmVyLS1cIityKSksdGhpcy4kZHJvcGRvd25Db250YWluZXIuY3NzKGQpfSxlLnByb3RvdHlwZS5fcmVzaXplRHJvcGRvd249ZnVuY3Rpb24oKXt2YXIgZT17d2lkdGg6dGhpcy4kY29udGFpbmVyLm91dGVyV2lkdGgoITEpK1wicHhcIn07dGhpcy5vcHRpb25zLmdldChcImRyb3Bkb3duQXV0b1dpZHRoXCIpJiYoZS5taW5XaWR0aD1lLndpZHRoLGUucG9zaXRpb249XCJyZWxhdGl2ZVwiLGUud2lkdGg9XCJhdXRvXCIpLHRoaXMuJGRyb3Bkb3duLmNzcyhlKX0sZS5wcm90b3R5cGUuX3Nob3dEcm9wZG93bj1mdW5jdGlvbihlKXt0aGlzLiRkcm9wZG93bkNvbnRhaW5lci5hcHBlbmRUbyh0aGlzLiRkcm9wZG93blBhcmVudCksdGhpcy5fcG9zaXRpb25Ecm9wZG93bigpLHRoaXMuX3Jlc2l6ZURyb3Bkb3duKCl9LGV9KSxlLmRlZmluZShcInNlbGVjdDIvZHJvcGRvd24vbWluaW11bVJlc3VsdHNGb3JTZWFyY2hcIixbXSxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4scil7dGhpcy5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaD1uLmdldChcIm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoXCIpLHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2g8MCYmKHRoaXMubWluaW11bVJlc3VsdHNGb3JTZWFyY2g9MS8wKSxlLmNhbGwodGhpcyx0LG4scil9cmV0dXJuIGUucHJvdG90eXBlLnNob3dTZWFyY2g9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hKGZ1bmN0aW9uIGUodCl7Zm9yKHZhciBuPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgaT10W3JdO2kuY2hpbGRyZW4/bis9ZShpLmNoaWxkcmVuKTpuKyt9cmV0dXJuIG59KHQuZGF0YS5yZXN1bHRzKTx0aGlzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoKSYmZS5jYWxsKHRoaXMsdCl9LGV9KSxlLmRlZmluZShcInNlbGVjdDIvZHJvcGRvd24vc2VsZWN0T25DbG9zZVwiLFtcIi4uL3V0aWxzXCJdLGZ1bmN0aW9uKG8pe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmJpbmQ9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXM7ZS5jYWxsKHRoaXMsdCxuKSx0Lm9uKFwiY2xvc2VcIixmdW5jdGlvbihlKXtyLl9oYW5kbGVTZWxlY3RPbkNsb3NlKGUpfSl9LGUucHJvdG90eXBlLl9oYW5kbGVTZWxlY3RPbkNsb3NlPWZ1bmN0aW9uKGUsdCl7aWYodCYmbnVsbCE9dC5vcmlnaW5hbFNlbGVjdDJFdmVudCl7dmFyIG49dC5vcmlnaW5hbFNlbGVjdDJFdmVudDtpZihcInNlbGVjdFwiPT09bi5fdHlwZXx8XCJ1bnNlbGVjdFwiPT09bi5fdHlwZSlyZXR1cm59dmFyIHI9dGhpcy5nZXRIaWdobGlnaHRlZFJlc3VsdHMoKTtpZighKHIubGVuZ3RoPDEpKXt2YXIgaT1vLkdldERhdGEoclswXSxcImRhdGFcIik7bnVsbCE9aS5lbGVtZW50JiZpLmVsZW1lbnQuc2VsZWN0ZWR8fG51bGw9PWkuZWxlbWVudCYmaS5zZWxlY3RlZHx8dGhpcy50cmlnZ2VyKFwic2VsZWN0XCIse2RhdGE6aX0pfX0sZX0pLGUuZGVmaW5lKFwic2VsZWN0Mi9kcm9wZG93bi9jbG9zZU9uU2VsZWN0XCIsW10sZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZS5iaW5kPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzO2UuY2FsbCh0aGlzLHQsbiksdC5vbihcInNlbGVjdFwiLGZ1bmN0aW9uKGUpe3IuX3NlbGVjdFRyaWdnZXJlZChlKX0pLHQub24oXCJ1bnNlbGVjdFwiLGZ1bmN0aW9uKGUpe3IuX3NlbGVjdFRyaWdnZXJlZChlKX0pfSxlLnByb3RvdHlwZS5fc2VsZWN0VHJpZ2dlcmVkPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5vcmlnaW5hbEV2ZW50O24mJihuLmN0cmxLZXl8fG4ubWV0YUtleSl8fHRoaXMudHJpZ2dlcihcImNsb3NlXCIse29yaWdpbmFsRXZlbnQ6bixvcmlnaW5hbFNlbGVjdDJFdmVudDp0fSl9LGV9KSxlLmRlZmluZShcInNlbGVjdDIvaTE4bi9lblwiLFtdLGZ1bmN0aW9uKCl7cmV0dXJue2Vycm9yTG9hZGluZzpmdW5jdGlvbigpe3JldHVyblwiVGhlIHJlc3VsdHMgY291bGQgbm90IGJlIGxvYWRlZC5cIn0saW5wdXRUb29Mb25nOmZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5wdXQubGVuZ3RoLWUubWF4aW11bSxuPVwiUGxlYXNlIGRlbGV0ZSBcIit0K1wiIGNoYXJhY3RlclwiO3JldHVybiAxIT10JiYobis9XCJzXCIpLG59LGlucHV0VG9vU2hvcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuXCJQbGVhc2UgZW50ZXIgXCIrKGUubWluaW11bS1lLmlucHV0Lmxlbmd0aCkrXCIgb3IgbW9yZSBjaGFyYWN0ZXJzXCJ9LGxvYWRpbmdNb3JlOmZ1bmN0aW9uKCl7cmV0dXJuXCJMb2FkaW5nIG1vcmUgcmVzdWx0c+KAplwifSxtYXhpbXVtU2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9XCJZb3UgY2FuIG9ubHkgc2VsZWN0IFwiK2UubWF4aW11bStcIiBpdGVtXCI7cmV0dXJuIDEhPWUubWF4aW11bSYmKHQrPVwic1wiKSx0fSxub1Jlc3VsdHM6ZnVuY3Rpb24oKXtyZXR1cm5cIk5vIHJlc3VsdHMgZm91bmRcIn0sc2VhcmNoaW5nOmZ1bmN0aW9uKCl7cmV0dXJuXCJTZWFyY2hpbmfigKZcIn0scmVtb3ZlQWxsSXRlbXM6ZnVuY3Rpb24oKXtyZXR1cm5cIlJlbW92ZSBhbGwgaXRlbXNcIn19fSksZS5kZWZpbmUoXCJzZWxlY3QyL2RlZmF1bHRzXCIsW1wianF1ZXJ5XCIsXCJyZXF1aXJlXCIsXCIuL3Jlc3VsdHNcIixcIi4vc2VsZWN0aW9uL3NpbmdsZVwiLFwiLi9zZWxlY3Rpb24vbXVsdGlwbGVcIixcIi4vc2VsZWN0aW9uL3BsYWNlaG9sZGVyXCIsXCIuL3NlbGVjdGlvbi9hbGxvd0NsZWFyXCIsXCIuL3NlbGVjdGlvbi9zZWFyY2hcIixcIi4vc2VsZWN0aW9uL2V2ZW50UmVsYXlcIixcIi4vdXRpbHNcIixcIi4vdHJhbnNsYXRpb25cIixcIi4vZGlhY3JpdGljc1wiLFwiLi9kYXRhL3NlbGVjdFwiLFwiLi9kYXRhL2FycmF5XCIsXCIuL2RhdGEvYWpheFwiLFwiLi9kYXRhL3RhZ3NcIixcIi4vZGF0YS90b2tlbml6ZXJcIixcIi4vZGF0YS9taW5pbXVtSW5wdXRMZW5ndGhcIixcIi4vZGF0YS9tYXhpbXVtSW5wdXRMZW5ndGhcIixcIi4vZGF0YS9tYXhpbXVtU2VsZWN0aW9uTGVuZ3RoXCIsXCIuL2Ryb3Bkb3duXCIsXCIuL2Ryb3Bkb3duL3NlYXJjaFwiLFwiLi9kcm9wZG93bi9oaWRlUGxhY2Vob2xkZXJcIixcIi4vZHJvcGRvd24vaW5maW5pdGVTY3JvbGxcIixcIi4vZHJvcGRvd24vYXR0YWNoQm9keVwiLFwiLi9kcm9wZG93bi9taW5pbXVtUmVzdWx0c0ZvclNlYXJjaFwiLFwiLi9kcm9wZG93bi9zZWxlY3RPbkNsb3NlXCIsXCIuL2Ryb3Bkb3duL2Nsb3NlT25TZWxlY3RcIixcIi4vaTE4bi9lblwiXSxmdW5jdGlvbihjLHUsZCxwLGgsZixnLG0sdix5LHMsdCxfLCQsYix3LEEseCxELFMsRSxDLE8sVCxxLEwsSSxqLGUpe2Z1bmN0aW9uIG4oKXt0aGlzLnJlc2V0KCl9cmV0dXJuIG4ucHJvdG90eXBlLmFwcGx5PWZ1bmN0aW9uKGUpe2lmKG51bGw9PShlPWMuZXh0ZW5kKCEwLHt9LHRoaXMuZGVmYXVsdHMsZSkpLmRhdGFBZGFwdGVyKXtpZihudWxsIT1lLmFqYXg/ZS5kYXRhQWRhcHRlcj1iOm51bGwhPWUuZGF0YT9lLmRhdGFBZGFwdGVyPSQ6ZS5kYXRhQWRhcHRlcj1fLDA8ZS5taW5pbXVtSW5wdXRMZW5ndGgmJihlLmRhdGFBZGFwdGVyPXkuRGVjb3JhdGUoZS5kYXRhQWRhcHRlcix4KSksMDxlLm1heGltdW1JbnB1dExlbmd0aCYmKGUuZGF0YUFkYXB0ZXI9eS5EZWNvcmF0ZShlLmRhdGFBZGFwdGVyLEQpKSwwPGUubWF4aW11bVNlbGVjdGlvbkxlbmd0aCYmKGUuZGF0YUFkYXB0ZXI9eS5EZWNvcmF0ZShlLmRhdGFBZGFwdGVyLFMpKSxlLnRhZ3MmJihlLmRhdGFBZGFwdGVyPXkuRGVjb3JhdGUoZS5kYXRhQWRhcHRlcix3KSksbnVsbD09ZS50b2tlblNlcGFyYXRvcnMmJm51bGw9PWUudG9rZW5pemVyfHwoZS5kYXRhQWRhcHRlcj15LkRlY29yYXRlKGUuZGF0YUFkYXB0ZXIsQSkpLG51bGwhPWUucXVlcnkpe3ZhciB0PXUoZS5hbWRCYXNlK1wiY29tcGF0L3F1ZXJ5XCIpO2UuZGF0YUFkYXB0ZXI9eS5EZWNvcmF0ZShlLmRhdGFBZGFwdGVyLHQpfWlmKG51bGwhPWUuaW5pdFNlbGVjdGlvbil7dmFyIG49dShlLmFtZEJhc2UrXCJjb21wYXQvaW5pdFNlbGVjdGlvblwiKTtlLmRhdGFBZGFwdGVyPXkuRGVjb3JhdGUoZS5kYXRhQWRhcHRlcixuKX19aWYobnVsbD09ZS5yZXN1bHRzQWRhcHRlciYmKGUucmVzdWx0c0FkYXB0ZXI9ZCxudWxsIT1lLmFqYXgmJihlLnJlc3VsdHNBZGFwdGVyPXkuRGVjb3JhdGUoZS5yZXN1bHRzQWRhcHRlcixUKSksbnVsbCE9ZS5wbGFjZWhvbGRlciYmKGUucmVzdWx0c0FkYXB0ZXI9eS5EZWNvcmF0ZShlLnJlc3VsdHNBZGFwdGVyLE8pKSxlLnNlbGVjdE9uQ2xvc2UmJihlLnJlc3VsdHNBZGFwdGVyPXkuRGVjb3JhdGUoZS5yZXN1bHRzQWRhcHRlcixJKSkpLG51bGw9PWUuZHJvcGRvd25BZGFwdGVyKXtpZihlLm11bHRpcGxlKWUuZHJvcGRvd25BZGFwdGVyPUU7ZWxzZXt2YXIgcj15LkRlY29yYXRlKEUsQyk7ZS5kcm9wZG93bkFkYXB0ZXI9cn1pZigwIT09ZS5taW5pbXVtUmVzdWx0c0ZvclNlYXJjaCYmKGUuZHJvcGRvd25BZGFwdGVyPXkuRGVjb3JhdGUoZS5kcm9wZG93bkFkYXB0ZXIsTCkpLGUuY2xvc2VPblNlbGVjdCYmKGUuZHJvcGRvd25BZGFwdGVyPXkuRGVjb3JhdGUoZS5kcm9wZG93bkFkYXB0ZXIsaikpLG51bGwhPWUuZHJvcGRvd25Dc3NDbGFzc3x8bnVsbCE9ZS5kcm9wZG93bkNzc3x8bnVsbCE9ZS5hZGFwdERyb3Bkb3duQ3NzQ2xhc3Mpe3ZhciBpPXUoZS5hbWRCYXNlK1wiY29tcGF0L2Ryb3Bkb3duQ3NzXCIpO2UuZHJvcGRvd25BZGFwdGVyPXkuRGVjb3JhdGUoZS5kcm9wZG93bkFkYXB0ZXIsaSl9ZS5kcm9wZG93bkFkYXB0ZXI9eS5EZWNvcmF0ZShlLmRyb3Bkb3duQWRhcHRlcixxKX1pZihudWxsPT1lLnNlbGVjdGlvbkFkYXB0ZXIpe2lmKGUubXVsdGlwbGU/ZS5zZWxlY3Rpb25BZGFwdGVyPWg6ZS5zZWxlY3Rpb25BZGFwdGVyPXAsbnVsbCE9ZS5wbGFjZWhvbGRlciYmKGUuc2VsZWN0aW9uQWRhcHRlcj15LkRlY29yYXRlKGUuc2VsZWN0aW9uQWRhcHRlcixmKSksZS5hbGxvd0NsZWFyJiYoZS5zZWxlY3Rpb25BZGFwdGVyPXkuRGVjb3JhdGUoZS5zZWxlY3Rpb25BZGFwdGVyLGcpKSxlLm11bHRpcGxlJiYoZS5zZWxlY3Rpb25BZGFwdGVyPXkuRGVjb3JhdGUoZS5zZWxlY3Rpb25BZGFwdGVyLG0pKSxudWxsIT1lLmNvbnRhaW5lckNzc0NsYXNzfHxudWxsIT1lLmNvbnRhaW5lckNzc3x8bnVsbCE9ZS5hZGFwdENvbnRhaW5lckNzc0NsYXNzKXt2YXIgbz11KGUuYW1kQmFzZStcImNvbXBhdC9jb250YWluZXJDc3NcIik7ZS5zZWxlY3Rpb25BZGFwdGVyPXkuRGVjb3JhdGUoZS5zZWxlY3Rpb25BZGFwdGVyLG8pfWUuc2VsZWN0aW9uQWRhcHRlcj15LkRlY29yYXRlKGUuc2VsZWN0aW9uQWRhcHRlcix2KX1lLmxhbmd1YWdlPXRoaXMuX3Jlc29sdmVMYW5ndWFnZShlLmxhbmd1YWdlKSxlLmxhbmd1YWdlLnB1c2goXCJlblwiKTtmb3IodmFyIHM9W10sYT0wO2E8ZS5sYW5ndWFnZS5sZW5ndGg7YSsrKXt2YXIgbD1lLmxhbmd1YWdlW2FdOy0xPT09cy5pbmRleE9mKGwpJiZzLnB1c2gobCl9cmV0dXJuIGUubGFuZ3VhZ2U9cyxlLnRyYW5zbGF0aW9ucz10aGlzLl9wcm9jZXNzVHJhbnNsYXRpb25zKGUubGFuZ3VhZ2UsZS5kZWJ1ZyksZX0sbi5wcm90b3R5cGUucmVzZXQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGUpe3JldHVybiBlLnJlcGxhY2UoL1teXFx1MDAwMC1cXHUwMDdFXS9nLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfHxlfSl9dGhpcy5kZWZhdWx0cz17YW1kQmFzZTpcIi4vXCIsYW1kTGFuZ3VhZ2VCYXNlOlwiLi9pMThuL1wiLGNsb3NlT25TZWxlY3Q6ITAsZGVidWc6ITEsZHJvcGRvd25BdXRvV2lkdGg6ITEsZXNjYXBlTWFya3VwOnkuZXNjYXBlTWFya3VwLGxhbmd1YWdlOnt9LG1hdGNoZXI6ZnVuY3Rpb24gZSh0LG4pe2lmKFwiXCI9PT1jLnRyaW0odC50ZXJtKSlyZXR1cm4gbjtpZihuLmNoaWxkcmVuJiYwPG4uY2hpbGRyZW4ubGVuZ3RoKXtmb3IodmFyIHI9Yy5leHRlbmQoITAse30sbiksaT1uLmNoaWxkcmVuLmxlbmd0aC0xOzA8PWk7aS0tKW51bGw9PWUodCxuLmNoaWxkcmVuW2ldKSYmci5jaGlsZHJlbi5zcGxpY2UoaSwxKTtyZXR1cm4gMDxyLmNoaWxkcmVuLmxlbmd0aD9yOmUodCxyKX12YXIgbz1hKG4udGV4dCkudG9VcHBlckNhc2UoKSxzPWEodC50ZXJtKS50b1VwcGVyQ2FzZSgpO3JldHVybi0xPG8uaW5kZXhPZihzKT9uOm51bGx9LG1pbmltdW1JbnB1dExlbmd0aDowLG1heGltdW1JbnB1dExlbmd0aDowLG1heGltdW1TZWxlY3Rpb25MZW5ndGg6MCxtaW5pbXVtUmVzdWx0c0ZvclNlYXJjaDowLHNlbGVjdE9uQ2xvc2U6ITEsc2Nyb2xsQWZ0ZXJTZWxlY3Q6ITEsc29ydGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSx0ZW1wbGF0ZVJlc3VsdDpmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0fSx0ZW1wbGF0ZVNlbGVjdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0fSx0aGVtZTpcImRlZmF1bHRcIix3aWR0aDpcInJlc29sdmVcIn19LG4ucHJvdG90eXBlLmFwcGx5RnJvbUVsZW1lbnQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmxhbmd1YWdlLHI9dGhpcy5kZWZhdWx0cy5sYW5ndWFnZSxpPXQucHJvcChcImxhbmdcIiksbz10LmNsb3Nlc3QoXCJbbGFuZ11cIikucHJvcChcImxhbmdcIikscz1BcnJheS5wcm90b3R5cGUuY29uY2F0LmNhbGwodGhpcy5fcmVzb2x2ZUxhbmd1YWdlKGkpLHRoaXMuX3Jlc29sdmVMYW5ndWFnZShuKSx0aGlzLl9yZXNvbHZlTGFuZ3VhZ2UociksdGhpcy5fcmVzb2x2ZUxhbmd1YWdlKG8pKTtyZXR1cm4gZS5sYW5ndWFnZT1zLGV9LG4ucHJvdG90eXBlLl9yZXNvbHZlTGFuZ3VhZ2U9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuW107aWYoYy5pc0VtcHR5T2JqZWN0KGUpKXJldHVybltdO2lmKGMuaXNQbGFpbk9iamVjdChlKSlyZXR1cm5bZV07dmFyIHQ7dD1jLmlzQXJyYXkoZSk/ZTpbZV07Zm9yKHZhciBuPVtdLHI9MDtyPHQubGVuZ3RoO3IrKylpZihuLnB1c2godFtyXSksXCJzdHJpbmdcIj09dHlwZW9mIHRbcl0mJjA8dFtyXS5pbmRleE9mKFwiLVwiKSl7dmFyIGk9dFtyXS5zcGxpdChcIi1cIilbMF07bi5wdXNoKGkpfXJldHVybiBufSxuLnByb3RvdHlwZS5fcHJvY2Vzc1RyYW5zbGF0aW9ucz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1uZXcgcyxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBpPW5ldyBzLG89ZVtyXTtpZihcInN0cmluZ1wiPT10eXBlb2Ygbyl0cnl7aT1zLmxvYWRQYXRoKG8pfWNhdGNoKGUpe3RyeXtvPXRoaXMuZGVmYXVsdHMuYW1kTGFuZ3VhZ2VCYXNlK28saT1zLmxvYWRQYXRoKG8pfWNhdGNoKGUpe3QmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGxhbmd1YWdlIGZpbGUgZm9yIFwiJytvKydcIiBjb3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBsb2FkZWQuIEEgZmFsbGJhY2sgd2lsbCBiZSB1c2VkIGluc3RlYWQuJyl9fWVsc2UgaT1jLmlzUGxhaW5PYmplY3Qobyk/bmV3IHMobyk6bztuLmV4dGVuZChpKX1yZXR1cm4gbn0sbi5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49e307bltjLmNhbWVsQ2FzZShlKV09dDt2YXIgcj15Ll9jb252ZXJ0RGF0YShuKTtjLmV4dGVuZCghMCx0aGlzLmRlZmF1bHRzLHIpfSxuZXcgbn0pLGUuZGVmaW5lKFwic2VsZWN0Mi9vcHRpb25zXCIsW1wicmVxdWlyZVwiLFwianF1ZXJ5XCIsXCIuL2RlZmF1bHRzXCIsXCIuL3V0aWxzXCJdLGZ1bmN0aW9uKHIsZCxpLHApe2Z1bmN0aW9uIGUoZSx0KXtpZih0aGlzLm9wdGlvbnM9ZSxudWxsIT10JiZ0aGlzLmZyb21FbGVtZW50KHQpLG51bGwhPXQmJih0aGlzLm9wdGlvbnM9aS5hcHBseUZyb21FbGVtZW50KHRoaXMub3B0aW9ucyx0KSksdGhpcy5vcHRpb25zPWkuYXBwbHkodGhpcy5vcHRpb25zKSx0JiZ0LmlzKFwiaW5wdXRcIikpe3ZhciBuPXIodGhpcy5nZXQoXCJhbWRCYXNlXCIpK1wiY29tcGF0L2lucHV0RGF0YVwiKTt0aGlzLm9wdGlvbnMuZGF0YUFkYXB0ZXI9cC5EZWNvcmF0ZSh0aGlzLm9wdGlvbnMuZGF0YUFkYXB0ZXIsbil9fXJldHVybiBlLnByb3RvdHlwZS5mcm9tRWxlbWVudD1mdW5jdGlvbihlKXt2YXIgdD1bXCJzZWxlY3QyXCJdO251bGw9PXRoaXMub3B0aW9ucy5tdWx0aXBsZSYmKHRoaXMub3B0aW9ucy5tdWx0aXBsZT1lLnByb3AoXCJtdWx0aXBsZVwiKSksbnVsbD09dGhpcy5vcHRpb25zLmRpc2FibGVkJiYodGhpcy5vcHRpb25zLmRpc2FibGVkPWUucHJvcChcImRpc2FibGVkXCIpKSxudWxsPT10aGlzLm9wdGlvbnMuZGlyJiYoZS5wcm9wKFwiZGlyXCIpP3RoaXMub3B0aW9ucy5kaXI9ZS5wcm9wKFwiZGlyXCIpOmUuY2xvc2VzdChcIltkaXJdXCIpLnByb3AoXCJkaXJcIik/dGhpcy5vcHRpb25zLmRpcj1lLmNsb3Nlc3QoXCJbZGlyXVwiKS5wcm9wKFwiZGlyXCIpOnRoaXMub3B0aW9ucy5kaXI9XCJsdHJcIiksZS5wcm9wKFwiZGlzYWJsZWRcIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLGUucHJvcChcIm11bHRpcGxlXCIsdGhpcy5vcHRpb25zLm11bHRpcGxlKSxwLkdldERhdGEoZVswXSxcInNlbGVjdDJUYWdzXCIpJiYodGhpcy5vcHRpb25zLmRlYnVnJiZ3aW5kb3cuY29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4oJ1NlbGVjdDI6IFRoZSBgZGF0YS1zZWxlY3QyLXRhZ3NgIGF0dHJpYnV0ZSBoYXMgYmVlbiBjaGFuZ2VkIHRvIHVzZSB0aGUgYGRhdGEtZGF0YWAgYW5kIGBkYXRhLXRhZ3M9XCJ0cnVlXCJgIGF0dHJpYnV0ZXMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgU2VsZWN0Mi4nKSxwLlN0b3JlRGF0YShlWzBdLFwiZGF0YVwiLHAuR2V0RGF0YShlWzBdLFwic2VsZWN0MlRhZ3NcIikpLHAuU3RvcmVEYXRhKGVbMF0sXCJ0YWdzXCIsITApKSxwLkdldERhdGEoZVswXSxcImFqYXhVcmxcIikmJih0aGlzLm9wdGlvbnMuZGVidWcmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybihcIlNlbGVjdDI6IFRoZSBgZGF0YS1hamF4LXVybGAgYXR0cmlidXRlIGhhcyBiZWVuIGNoYW5nZWQgdG8gYGRhdGEtYWpheC0tdXJsYCBhbmQgc3VwcG9ydCBmb3IgdGhlIG9sZCBhdHRyaWJ1dGUgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiBTZWxlY3QyLlwiKSxlLmF0dHIoXCJhamF4LS11cmxcIixwLkdldERhdGEoZVswXSxcImFqYXhVcmxcIikpLHAuU3RvcmVEYXRhKGVbMF0sXCJhamF4LVVybFwiLHAuR2V0RGF0YShlWzBdLFwiYWpheFVybFwiKSkpO3ZhciBuPXt9O2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpfWZvcih2YXIgaT0wO2k8ZVswXS5hdHRyaWJ1dGVzLmxlbmd0aDtpKyspe3ZhciBvPWVbMF0uYXR0cmlidXRlc1tpXS5uYW1lLHM9XCJkYXRhLVwiO2lmKG8uc3Vic3RyKDAscy5sZW5ndGgpPT1zKXt2YXIgYT1vLnN1YnN0cmluZyhzLmxlbmd0aCksbD1wLkdldERhdGEoZVswXSxhKTtuW2EucmVwbGFjZSgvLShbYS16XSkvZyxyKV09bH19ZC5mbi5qcXVlcnkmJlwiMS5cIj09ZC5mbi5qcXVlcnkuc3Vic3RyKDAsMikmJmVbMF0uZGF0YXNldCYmKG49ZC5leHRlbmQoITAse30sZVswXS5kYXRhc2V0LG4pKTt2YXIgYz1kLmV4dGVuZCghMCx7fSxwLkdldERhdGEoZVswXSksbik7Zm9yKHZhciB1IGluIGM9cC5fY29udmVydERhdGEoYykpLTE8ZC5pbkFycmF5KHUsdCl8fChkLmlzUGxhaW5PYmplY3QodGhpcy5vcHRpb25zW3VdKT9kLmV4dGVuZCh0aGlzLm9wdGlvbnNbdV0sY1t1XSk6dGhpcy5vcHRpb25zW3VdPWNbdV0pO3JldHVybiB0aGlzfSxlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub3B0aW9uc1tlXX0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dGhpcy5vcHRpb25zW2VdPXR9LGV9KSxlLmRlZmluZShcInNlbGVjdDIvY29yZVwiLFtcImpxdWVyeVwiLFwiLi9vcHRpb25zXCIsXCIuL3V0aWxzXCIsXCIuL2tleXNcIl0sZnVuY3Rpb24obyxjLHUscil7dmFyIGQ9ZnVuY3Rpb24oZSx0KXtudWxsIT11LkdldERhdGEoZVswXSxcInNlbGVjdDJcIikmJnUuR2V0RGF0YShlWzBdLFwic2VsZWN0MlwiKS5kZXN0cm95KCksdGhpcy4kZWxlbWVudD1lLHRoaXMuaWQ9dGhpcy5fZ2VuZXJhdGVJZChlKSx0PXR8fHt9LHRoaXMub3B0aW9ucz1uZXcgYyh0LGUpLGQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dmFyIG49ZS5hdHRyKFwidGFiaW5kZXhcIil8fDA7dS5TdG9yZURhdGEoZVswXSxcIm9sZC10YWJpbmRleFwiLG4pLGUuYXR0cihcInRhYmluZGV4XCIsXCItMVwiKTt2YXIgcj10aGlzLm9wdGlvbnMuZ2V0KFwiZGF0YUFkYXB0ZXJcIik7dGhpcy5kYXRhQWRhcHRlcj1uZXcgcihlLHRoaXMub3B0aW9ucyk7dmFyIGk9dGhpcy5yZW5kZXIoKTt0aGlzLl9wbGFjZUNvbnRhaW5lcihpKTt2YXIgbz10aGlzLm9wdGlvbnMuZ2V0KFwic2VsZWN0aW9uQWRhcHRlclwiKTt0aGlzLnNlbGVjdGlvbj1uZXcgbyhlLHRoaXMub3B0aW9ucyksdGhpcy4kc2VsZWN0aW9uPXRoaXMuc2VsZWN0aW9uLnJlbmRlcigpLHRoaXMuc2VsZWN0aW9uLnBvc2l0aW9uKHRoaXMuJHNlbGVjdGlvbixpKTt2YXIgcz10aGlzLm9wdGlvbnMuZ2V0KFwiZHJvcGRvd25BZGFwdGVyXCIpO3RoaXMuZHJvcGRvd249bmV3IHMoZSx0aGlzLm9wdGlvbnMpLHRoaXMuJGRyb3Bkb3duPXRoaXMuZHJvcGRvd24ucmVuZGVyKCksdGhpcy5kcm9wZG93bi5wb3NpdGlvbih0aGlzLiRkcm9wZG93bixpKTt2YXIgYT10aGlzLm9wdGlvbnMuZ2V0KFwicmVzdWx0c0FkYXB0ZXJcIik7dGhpcy5yZXN1bHRzPW5ldyBhKGUsdGhpcy5vcHRpb25zLHRoaXMuZGF0YUFkYXB0ZXIpLHRoaXMuJHJlc3VsdHM9dGhpcy5yZXN1bHRzLnJlbmRlcigpLHRoaXMucmVzdWx0cy5wb3NpdGlvbih0aGlzLiRyZXN1bHRzLHRoaXMuJGRyb3Bkb3duKTt2YXIgbD10aGlzO3RoaXMuX2JpbmRBZGFwdGVycygpLHRoaXMuX3JlZ2lzdGVyRG9tRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJEYXRhRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJTZWxlY3Rpb25FdmVudHMoKSx0aGlzLl9yZWdpc3RlckRyb3Bkb3duRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJSZXN1bHRzRXZlbnRzKCksdGhpcy5fcmVnaXN0ZXJFdmVudHMoKSx0aGlzLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24oZSl7bC50cmlnZ2VyKFwic2VsZWN0aW9uOnVwZGF0ZVwiLHtkYXRhOmV9KX0pLGUuYWRkQ2xhc3MoXCJzZWxlY3QyLWhpZGRlbi1hY2Nlc3NpYmxlXCIpLGUuYXR0cihcImFyaWEtaGlkZGVuXCIsXCJ0cnVlXCIpLHRoaXMuX3N5bmNBdHRyaWJ1dGVzKCksdS5TdG9yZURhdGEoZVswXSxcInNlbGVjdDJcIix0aGlzKSxlLmRhdGEoXCJzZWxlY3QyXCIsdGhpcyl9O3JldHVybiB1LkV4dGVuZChkLHUuT2JzZXJ2YWJsZSksZC5wcm90b3R5cGUuX2dlbmVyYXRlSWQ9ZnVuY3Rpb24oZSl7cmV0dXJuXCJzZWxlY3QyLVwiKyhudWxsIT1lLmF0dHIoXCJpZFwiKT9lLmF0dHIoXCJpZFwiKTpudWxsIT1lLmF0dHIoXCJuYW1lXCIpP2UuYXR0cihcIm5hbWVcIikrXCItXCIrdS5nZW5lcmF0ZUNoYXJzKDIpOnUuZ2VuZXJhdGVDaGFycyg0KSkucmVwbGFjZSgvKDp8XFwufFxcW3xcXF18LCkvZyxcIlwiKX0sZC5wcm90b3R5cGUuX3BsYWNlQ29udGFpbmVyPWZ1bmN0aW9uKGUpe2UuaW5zZXJ0QWZ0ZXIodGhpcy4kZWxlbWVudCk7dmFyIHQ9dGhpcy5fcmVzb2x2ZVdpZHRoKHRoaXMuJGVsZW1lbnQsdGhpcy5vcHRpb25zLmdldChcIndpZHRoXCIpKTtudWxsIT10JiZlLmNzcyhcIndpZHRoXCIsdCl9LGQucHJvdG90eXBlLl9yZXNvbHZlV2lkdGg9ZnVuY3Rpb24oZSx0KXt2YXIgbj0vXndpZHRoOigoWy0rXT8oWzAtOV0qXFwuKT9bMC05XSspKHB4fGVtfGV4fCV8aW58Y218bW18cHR8cGMpKS9pO2lmKFwicmVzb2x2ZVwiPT10KXt2YXIgcj10aGlzLl9yZXNvbHZlV2lkdGgoZSxcInN0eWxlXCIpO3JldHVybiBudWxsIT1yP3I6dGhpcy5fcmVzb2x2ZVdpZHRoKGUsXCJlbGVtZW50XCIpfWlmKFwiZWxlbWVudFwiPT10KXt2YXIgaT1lLm91dGVyV2lkdGgoITEpO3JldHVybiBpPD0wP1wiYXV0b1wiOmkrXCJweFwifWlmKFwic3R5bGVcIiE9dClyZXR1cm5cImNvbXB1dGVkc3R5bGVcIiE9dD90OndpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVbMF0pLndpZHRoO3ZhciBvPWUuYXR0cihcInN0eWxlXCIpO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBvKXJldHVybiBudWxsO2Zvcih2YXIgcz1vLnNwbGl0KFwiO1wiKSxhPTAsbD1zLmxlbmd0aDthPGw7YSs9MSl7dmFyIGM9c1thXS5yZXBsYWNlKC9cXHMvZyxcIlwiKS5tYXRjaChuKTtpZihudWxsIT09YyYmMTw9Yy5sZW5ndGgpcmV0dXJuIGNbMV19cmV0dXJuIG51bGx9LGQucHJvdG90eXBlLl9iaW5kQWRhcHRlcnM9ZnVuY3Rpb24oKXt0aGlzLmRhdGFBZGFwdGVyLmJpbmQodGhpcyx0aGlzLiRjb250YWluZXIpLHRoaXMuc2VsZWN0aW9uLmJpbmQodGhpcyx0aGlzLiRjb250YWluZXIpLHRoaXMuZHJvcGRvd24uYmluZCh0aGlzLHRoaXMuJGNvbnRhaW5lciksdGhpcy5yZXN1bHRzLmJpbmQodGhpcyx0aGlzLiRjb250YWluZXIpfSxkLnByb3RvdHlwZS5fcmVnaXN0ZXJEb21FdmVudHM9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuJGVsZW1lbnQub24oXCJjaGFuZ2Uuc2VsZWN0MlwiLGZ1bmN0aW9uKCl7dC5kYXRhQWRhcHRlci5jdXJyZW50KGZ1bmN0aW9uKGUpe3QudHJpZ2dlcihcInNlbGVjdGlvbjp1cGRhdGVcIix7ZGF0YTplfSl9KX0pLHRoaXMuJGVsZW1lbnQub24oXCJmb2N1cy5zZWxlY3QyXCIsZnVuY3Rpb24oZSl7dC50cmlnZ2VyKFwiZm9jdXNcIixlKX0pLHRoaXMuX3N5bmNBPXUuYmluZCh0aGlzLl9zeW5jQXR0cmlidXRlcyx0aGlzKSx0aGlzLl9zeW5jUz11LmJpbmQodGhpcy5fc3luY1N1YnRyZWUsdGhpcyksdGhpcy4kZWxlbWVudFswXS5hdHRhY2hFdmVudCYmdGhpcy4kZWxlbWVudFswXS5hdHRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIix0aGlzLl9zeW5jQSk7dmFyIGU9d2luZG93Lk11dGF0aW9uT2JzZXJ2ZXJ8fHdpbmRvdy5XZWJLaXRNdXRhdGlvbk9ic2VydmVyfHx3aW5kb3cuTW96TXV0YXRpb25PYnNlcnZlcjtudWxsIT1lPyh0aGlzLl9vYnNlcnZlcj1uZXcgZShmdW5jdGlvbihlKXt0Ll9zeW5jQSgpLHQuX3N5bmNTKG51bGwsZSl9KSx0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMuJGVsZW1lbnRbMF0se2F0dHJpYnV0ZXM6ITAsY2hpbGRMaXN0OiEwLHN1YnRyZWU6ITF9KSk6dGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyJiYodGhpcy4kZWxlbWVudFswXS5hZGRFdmVudExpc3RlbmVyKFwiRE9NQXR0ck1vZGlmaWVkXCIsdC5fc3luY0EsITEpLHRoaXMuJGVsZW1lbnRbMF0uYWRkRXZlbnRMaXN0ZW5lcihcIkRPTU5vZGVJbnNlcnRlZFwiLHQuX3N5bmNTLCExKSx0aGlzLiRlbGVtZW50WzBdLmFkZEV2ZW50TGlzdGVuZXIoXCJET01Ob2RlUmVtb3ZlZFwiLHQuX3N5bmNTLCExKSl9LGQucHJvdG90eXBlLl9yZWdpc3RlckRhdGFFdmVudHM9ZnVuY3Rpb24oKXt2YXIgbj10aGlzO3RoaXMuZGF0YUFkYXB0ZXIub24oXCIqXCIsZnVuY3Rpb24oZSx0KXtuLnRyaWdnZXIoZSx0KX0pfSxkLnByb3RvdHlwZS5fcmVnaXN0ZXJTZWxlY3Rpb25FdmVudHM9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLHI9W1widG9nZ2xlXCIsXCJmb2N1c1wiXTt0aGlzLnNlbGVjdGlvbi5vbihcInRvZ2dsZVwiLGZ1bmN0aW9uKCl7bi50b2dnbGVEcm9wZG93bigpfSksdGhpcy5zZWxlY3Rpb24ub24oXCJmb2N1c1wiLGZ1bmN0aW9uKGUpe24uZm9jdXMoZSl9KSx0aGlzLnNlbGVjdGlvbi5vbihcIipcIixmdW5jdGlvbihlLHQpey0xPT09by5pbkFycmF5KGUscikmJm4udHJpZ2dlcihlLHQpfSl9LGQucHJvdG90eXBlLl9yZWdpc3RlckRyb3Bkb3duRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLmRyb3Bkb3duLm9uKFwiKlwiLGZ1bmN0aW9uKGUsdCl7bi50cmlnZ2VyKGUsdCl9KX0sZC5wcm90b3R5cGUuX3JlZ2lzdGVyUmVzdWx0c0V2ZW50cz1mdW5jdGlvbigpe3ZhciBuPXRoaXM7dGhpcy5yZXN1bHRzLm9uKFwiKlwiLGZ1bmN0aW9uKGUsdCl7bi50cmlnZ2VyKGUsdCl9KX0sZC5wcm90b3R5cGUuX3JlZ2lzdGVyRXZlbnRzPWZ1bmN0aW9uKCl7dmFyIG49dGhpczt0aGlzLm9uKFwib3BlblwiLGZ1bmN0aW9uKCl7bi4kY29udGFpbmVyLmFkZENsYXNzKFwic2VsZWN0Mi1jb250YWluZXItLW9wZW5cIil9KSx0aGlzLm9uKFwiY2xvc2VcIixmdW5jdGlvbigpe24uJGNvbnRhaW5lci5yZW1vdmVDbGFzcyhcInNlbGVjdDItY29udGFpbmVyLS1vcGVuXCIpfSksdGhpcy5vbihcImVuYWJsZVwiLGZ1bmN0aW9uKCl7bi4kY29udGFpbmVyLnJlbW92ZUNsYXNzKFwic2VsZWN0Mi1jb250YWluZXItLWRpc2FibGVkXCIpfSksdGhpcy5vbihcImRpc2FibGVcIixmdW5jdGlvbigpe24uJGNvbnRhaW5lci5hZGRDbGFzcyhcInNlbGVjdDItY29udGFpbmVyLS1kaXNhYmxlZFwiKX0pLHRoaXMub24oXCJibHVyXCIsZnVuY3Rpb24oKXtuLiRjb250YWluZXIucmVtb3ZlQ2xhc3MoXCJzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXNcIil9KSx0aGlzLm9uKFwicXVlcnlcIixmdW5jdGlvbih0KXtuLmlzT3BlbigpfHxuLnRyaWdnZXIoXCJvcGVuXCIse30pLHRoaXMuZGF0YUFkYXB0ZXIucXVlcnkodCxmdW5jdGlvbihlKXtuLnRyaWdnZXIoXCJyZXN1bHRzOmFsbFwiLHtkYXRhOmUscXVlcnk6dH0pfSl9KSx0aGlzLm9uKFwicXVlcnk6YXBwZW5kXCIsZnVuY3Rpb24odCl7dGhpcy5kYXRhQWRhcHRlci5xdWVyeSh0LGZ1bmN0aW9uKGUpe24udHJpZ2dlcihcInJlc3VsdHM6YXBwZW5kXCIse2RhdGE6ZSxxdWVyeTp0fSl9KX0pLHRoaXMub24oXCJrZXlwcmVzc1wiLGZ1bmN0aW9uKGUpe3ZhciB0PWUud2hpY2g7bi5pc09wZW4oKT90PT09ci5FU0N8fHQ9PT1yLlRBQnx8dD09PXIuVVAmJmUuYWx0S2V5PyhuLmNsb3NlKGUpLGUucHJldmVudERlZmF1bHQoKSk6dD09PXIuRU5URVI/KG4udHJpZ2dlcihcInJlc3VsdHM6c2VsZWN0XCIse30pLGUucHJldmVudERlZmF1bHQoKSk6dD09PXIuU1BBQ0UmJmUuY3RybEtleT8obi50cmlnZ2VyKFwicmVzdWx0czp0b2dnbGVcIix7fSksZS5wcmV2ZW50RGVmYXVsdCgpKTp0PT09ci5VUD8obi50cmlnZ2VyKFwicmVzdWx0czpwcmV2aW91c1wiLHt9KSxlLnByZXZlbnREZWZhdWx0KCkpOnQ9PT1yLkRPV04mJihuLnRyaWdnZXIoXCJyZXN1bHRzOm5leHRcIix7fSksZS5wcmV2ZW50RGVmYXVsdCgpKToodD09PXIuRU5URVJ8fHQ9PT1yLlNQQUNFfHx0PT09ci5ET1dOJiZlLmFsdEtleSkmJihuLm9wZW4oKSxlLnByZXZlbnREZWZhdWx0KCkpfSl9LGQucHJvdG90eXBlLl9zeW5jQXR0cmlidXRlcz1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5zZXQoXCJkaXNhYmxlZFwiLHRoaXMuJGVsZW1lbnQucHJvcChcImRpc2FibGVkXCIpKSx0aGlzLmlzRGlzYWJsZWQoKT8odGhpcy5pc09wZW4oKSYmdGhpcy5jbG9zZSgpLHRoaXMudHJpZ2dlcihcImRpc2FibGVcIix7fSkpOnRoaXMudHJpZ2dlcihcImVuYWJsZVwiLHt9KX0sZC5wcm90b3R5cGUuX2lzQ2hhbmdlTXV0YXRpb249ZnVuY3Rpb24oZSx0KXt2YXIgbj0hMSxyPXRoaXM7aWYoIWV8fCFlLnRhcmdldHx8XCJPUFRJT05cIj09PWUudGFyZ2V0Lm5vZGVOYW1lfHxcIk9QVEdST1VQXCI9PT1lLnRhcmdldC5ub2RlTmFtZSl7aWYodClpZih0LmFkZGVkTm9kZXMmJjA8dC5hZGRlZE5vZGVzLmxlbmd0aClmb3IodmFyIGk9MDtpPHQuYWRkZWROb2Rlcy5sZW5ndGg7aSsrKXt0LmFkZGVkTm9kZXNbaV0uc2VsZWN0ZWQmJihuPSEwKX1lbHNlIHQucmVtb3ZlZE5vZGVzJiYwPHQucmVtb3ZlZE5vZGVzLmxlbmd0aD9uPSEwOm8uaXNBcnJheSh0KSYmby5lYWNoKHQsZnVuY3Rpb24oZSx0KXtpZihyLl9pc0NoYW5nZU11dGF0aW9uKGUsdCkpcmV0dXJuIShuPSEwKX0pO2Vsc2Ugbj0hMDtyZXR1cm4gbn19LGQucHJvdG90eXBlLl9zeW5jU3VidHJlZT1mdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2lzQ2hhbmdlTXV0YXRpb24oZSx0KSxyPXRoaXM7biYmdGhpcy5kYXRhQWRhcHRlci5jdXJyZW50KGZ1bmN0aW9uKGUpe3IudHJpZ2dlcihcInNlbGVjdGlvbjp1cGRhdGVcIix7ZGF0YTplfSl9KX0sZC5wcm90b3R5cGUudHJpZ2dlcj1mdW5jdGlvbihlLHQpe3ZhciBuPWQuX19zdXBlcl9fLnRyaWdnZXIscj17b3BlbjpcIm9wZW5pbmdcIixjbG9zZTpcImNsb3NpbmdcIixzZWxlY3Q6XCJzZWxlY3RpbmdcIix1bnNlbGVjdDpcInVuc2VsZWN0aW5nXCIsY2xlYXI6XCJjbGVhcmluZ1wifTtpZih2b2lkIDA9PT10JiYodD17fSksZSBpbiByKXt2YXIgaT1yW2VdLG89e3ByZXZlbnRlZDohMSxuYW1lOmUsYXJnczp0fTtpZihuLmNhbGwodGhpcyxpLG8pLG8ucHJldmVudGVkKXJldHVybiB2b2lkKHQucHJldmVudGVkPSEwKX1uLmNhbGwodGhpcyxlLHQpfSxkLnByb3RvdHlwZS50b2dnbGVEcm9wZG93bj1mdW5jdGlvbigpe3RoaXMuaXNEaXNhYmxlZCgpfHwodGhpcy5pc09wZW4oKT90aGlzLmNsb3NlKCk6dGhpcy5vcGVuKCkpfSxkLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dGhpcy5pc09wZW4oKXx8dGhpcy5pc0Rpc2FibGVkKCl8fHRoaXMudHJpZ2dlcihcInF1ZXJ5XCIse30pfSxkLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbihlKXt0aGlzLmlzT3BlbigpJiZ0aGlzLnRyaWdnZXIoXCJjbG9zZVwiLHtvcmlnaW5hbEV2ZW50OmV9KX0sZC5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuaXNEaXNhYmxlZCgpfSxkLnByb3RvdHlwZS5pc0Rpc2FibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5nZXQoXCJkaXNhYmxlZFwiKX0sZC5wcm90b3R5cGUuaXNPcGVuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGNvbnRhaW5lci5oYXNDbGFzcyhcInNlbGVjdDItY29udGFpbmVyLS1vcGVuXCIpfSxkLnByb3RvdHlwZS5oYXNGb2N1cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRjb250YWluZXIuaGFzQ2xhc3MoXCJzZWxlY3QyLWNvbnRhaW5lci0tZm9jdXNcIil9LGQucHJvdG90eXBlLmZvY3VzPWZ1bmN0aW9uKGUpe3RoaXMuaGFzRm9jdXMoKXx8KHRoaXMuJGNvbnRhaW5lci5hZGRDbGFzcyhcInNlbGVjdDItY29udGFpbmVyLS1mb2N1c1wiKSx0aGlzLnRyaWdnZXIoXCJmb2N1c1wiLHt9KSl9LGQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbihlKXt0aGlzLm9wdGlvbnMuZ2V0KFwiZGVidWdcIikmJndpbmRvdy5jb25zb2xlJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybignU2VsZWN0MjogVGhlIGBzZWxlY3QyKFwiZW5hYmxlXCIpYCBtZXRob2QgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGxhdGVyIFNlbGVjdDIgdmVyc2lvbnMuIFVzZSAkZWxlbWVudC5wcm9wKFwiZGlzYWJsZWRcIikgaW5zdGVhZC4nKSxudWxsIT1lJiYwIT09ZS5sZW5ndGh8fChlPVshMF0pO3ZhciB0PSFlWzBdO3RoaXMuJGVsZW1lbnQucHJvcChcImRpc2FibGVkXCIsdCl9LGQucHJvdG90eXBlLmRhdGE9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuZ2V0KFwiZGVidWdcIikmJjA8YXJndW1lbnRzLmxlbmd0aCYmd2luZG93LmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCdTZWxlY3QyOiBEYXRhIGNhbiBubyBsb25nZXIgYmUgc2V0IHVzaW5nIGBzZWxlY3QyKFwiZGF0YVwiKWAuIFlvdSBzaG91bGQgY29uc2lkZXIgc2V0dGluZyB0aGUgdmFsdWUgaW5zdGVhZCB1c2luZyBgJGVsZW1lbnQudmFsKClgLicpO3ZhciB0PVtdO3JldHVybiB0aGlzLmRhdGFBZGFwdGVyLmN1cnJlbnQoZnVuY3Rpb24oZSl7dD1lfSksdH0sZC5wcm90b3R5cGUudmFsPWZ1bmN0aW9uKGUpe2lmKHRoaXMub3B0aW9ucy5nZXQoXCJkZWJ1Z1wiKSYmd2luZG93LmNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCdTZWxlY3QyOiBUaGUgYHNlbGVjdDIoXCJ2YWxcIilgIG1ldGhvZCBoYXMgYmVlbiBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbGF0ZXIgU2VsZWN0MiB2ZXJzaW9ucy4gVXNlICRlbGVtZW50LnZhbCgpIGluc3RlYWQuJyksbnVsbD09ZXx8MD09PWUubGVuZ3RoKXJldHVybiB0aGlzLiRlbGVtZW50LnZhbCgpO3ZhciB0PWVbMF07by5pc0FycmF5KHQpJiYodD1vLm1hcCh0LGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvU3RyaW5nKCl9KSksdGhpcy4kZWxlbWVudC52YWwodCkudHJpZ2dlcihcImlucHV0XCIpLnRyaWdnZXIoXCJjaGFuZ2VcIil9LGQucHJvdG90eXBlLmRlc3Ryb3k9ZnVuY3Rpb24oKXt0aGlzLiRjb250YWluZXIucmVtb3ZlKCksdGhpcy4kZWxlbWVudFswXS5kZXRhY2hFdmVudCYmdGhpcy4kZWxlbWVudFswXS5kZXRhY2hFdmVudChcIm9ucHJvcGVydHljaGFuZ2VcIix0aGlzLl9zeW5jQSksbnVsbCE9dGhpcy5fb2JzZXJ2ZXI/KHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLl9vYnNlcnZlcj1udWxsKTp0aGlzLiRlbGVtZW50WzBdLnJlbW92ZUV2ZW50TGlzdGVuZXImJih0aGlzLiRlbGVtZW50WzBdLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJET01BdHRyTW9kaWZpZWRcIix0aGlzLl9zeW5jQSwhMSksdGhpcy4kZWxlbWVudFswXS5yZW1vdmVFdmVudExpc3RlbmVyKFwiRE9NTm9kZUluc2VydGVkXCIsdGhpcy5fc3luY1MsITEpLHRoaXMuJGVsZW1lbnRbMF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIkRPTU5vZGVSZW1vdmVkXCIsdGhpcy5fc3luY1MsITEpKSx0aGlzLl9zeW5jQT1udWxsLHRoaXMuX3N5bmNTPW51bGwsdGhpcy4kZWxlbWVudC5vZmYoXCIuc2VsZWN0MlwiKSx0aGlzLiRlbGVtZW50LmF0dHIoXCJ0YWJpbmRleFwiLHUuR2V0RGF0YSh0aGlzLiRlbGVtZW50WzBdLFwib2xkLXRhYmluZGV4XCIpKSx0aGlzLiRlbGVtZW50LnJlbW92ZUNsYXNzKFwic2VsZWN0Mi1oaWRkZW4tYWNjZXNzaWJsZVwiKSx0aGlzLiRlbGVtZW50LmF0dHIoXCJhcmlhLWhpZGRlblwiLFwiZmFsc2VcIiksdS5SZW1vdmVEYXRhKHRoaXMuJGVsZW1lbnRbMF0pLHRoaXMuJGVsZW1lbnQucmVtb3ZlRGF0YShcInNlbGVjdDJcIiksdGhpcy5kYXRhQWRhcHRlci5kZXN0cm95KCksdGhpcy5zZWxlY3Rpb24uZGVzdHJveSgpLHRoaXMuZHJvcGRvd24uZGVzdHJveSgpLHRoaXMucmVzdWx0cy5kZXN0cm95KCksdGhpcy5kYXRhQWRhcHRlcj1udWxsLHRoaXMuc2VsZWN0aW9uPW51bGwsdGhpcy5kcm9wZG93bj1udWxsLHRoaXMucmVzdWx0cz1udWxsfSxkLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT1vKCc8c3BhbiBjbGFzcz1cInNlbGVjdDIgc2VsZWN0Mi1jb250YWluZXJcIj48c3BhbiBjbGFzcz1cInNlbGVjdGlvblwiPjwvc3Bhbj48c3BhbiBjbGFzcz1cImRyb3Bkb3duLXdyYXBwZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+PC9zcGFuPicpO3JldHVybiBlLmF0dHIoXCJkaXJcIix0aGlzLm9wdGlvbnMuZ2V0KFwiZGlyXCIpKSx0aGlzLiRjb250YWluZXI9ZSx0aGlzLiRjb250YWluZXIuYWRkQ2xhc3MoXCJzZWxlY3QyLWNvbnRhaW5lci0tXCIrdGhpcy5vcHRpb25zLmdldChcInRoZW1lXCIpKSx1LlN0b3JlRGF0YShlWzBdLFwiZWxlbWVudFwiLHRoaXMuJGVsZW1lbnQpLGV9LGR9KSxlLmRlZmluZShcImpxdWVyeS1tb3VzZXdoZWVsXCIsW1wianF1ZXJ5XCJdLGZ1bmN0aW9uKGUpe3JldHVybiBlfSksZS5kZWZpbmUoXCJqcXVlcnkuc2VsZWN0MlwiLFtcImpxdWVyeVwiLFwianF1ZXJ5LW1vdXNld2hlZWxcIixcIi4vc2VsZWN0Mi9jb3JlXCIsXCIuL3NlbGVjdDIvZGVmYXVsdHNcIixcIi4vc2VsZWN0Mi91dGlsc1wiXSxmdW5jdGlvbihpLGUsbyx0LHMpe2lmKG51bGw9PWkuZm4uc2VsZWN0Mil7dmFyIGE9W1wib3BlblwiLFwiY2xvc2VcIixcImRlc3Ryb3lcIl07aS5mbi5zZWxlY3QyPWZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZih0PXR8fHt9KSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9aS5leHRlbmQoITAse30sdCk7bmV3IG8oaSh0aGlzKSxlKX0pLHRoaXM7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBhcmd1bWVudHMgZm9yIFNlbGVjdDI6IFwiK3QpO3ZhciBuLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgZT1zLkdldERhdGEodGhpcyxcInNlbGVjdDJcIik7bnVsbD09ZSYmd2luZG93LmNvbnNvbGUmJmNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoXCJUaGUgc2VsZWN0MignXCIrdCtcIicpIG1ldGhvZCB3YXMgY2FsbGVkIG9uIGFuIGVsZW1lbnQgdGhhdCBpcyBub3QgdXNpbmcgU2VsZWN0Mi5cIiksbj1lW3RdLmFwcGx5KGUscil9KSwtMTxpLmluQXJyYXkodCxhKT90aGlzOm59fXJldHVybiBudWxsPT1pLmZuLnNlbGVjdDIuZGVmYXVsdHMmJihpLmZuLnNlbGVjdDIuZGVmYXVsdHM9dCksb30pLHtkZWZpbmU6ZS5kZWZpbmUscmVxdWlyZTplLnJlcXVpcmV9fSgpLHQ9ZS5yZXF1aXJlKFwianF1ZXJ5LnNlbGVjdDJcIik7cmV0dXJuIHUuZm4uc2VsZWN0Mi5hbWQ9ZSx0fSk7IiwiLypcbiAqIFRvYXN0clxuICogQ29weXJpZ2h0IDIwMTItMjAxNVxuICogQXV0aG9yczogSm9obiBQYXBhLCBIYW5zIEZqw6RsbGVtYXJrLCBhbmQgVGltIEZlcnJlbGwuXG4gKiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogVXNlLCByZXByb2R1Y3Rpb24sIGRpc3RyaWJ1dGlvbiwgYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGlzIGNvZGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kXG4gKiBjb25kaXRpb25zIG9mIHRoZSBNSVQgbGljZW5zZSwgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gKlxuICogQVJJQSBTdXBwb3J0OiBHcmV0YSBLcmFmc2lnXG4gKlxuICogUHJvamVjdDogaHR0cHM6Ly9naXRodWIuY29tL0NvZGVTZXZlbi90b2FzdHJcbiAqL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuKGZ1bmN0aW9uIChkZWZpbmUpIHtcbiAgICBkZWZpbmUoWydqcXVlcnknXSwgZnVuY3Rpb24gKCQpIHtcbiAgICAgICAgcmV0dXJuIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgJGNvbnRhaW5lcjtcbiAgICAgICAgICAgIHZhciBsaXN0ZW5lcjtcbiAgICAgICAgICAgIHZhciB0b2FzdElkID0gMDtcbiAgICAgICAgICAgIHZhciB0b2FzdFR5cGUgPSB7XG4gICAgICAgICAgICAgICAgZXJyb3I6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgaW5mbzogJ2luZm8nLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgICB3YXJuaW5nOiAnd2FybmluZydcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciB0b2FzdHIgPSB7XG4gICAgICAgICAgICAgICAgY2xlYXI6IGNsZWFyLFxuICAgICAgICAgICAgICAgIHJlbW92ZTogcmVtb3ZlLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICBnZXRDb250YWluZXI6IGdldENvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBpbmZvOiBpbmZvLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHt9LFxuICAgICAgICAgICAgICAgIHN1YnNjcmliZTogc3Vic2NyaWJlLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgdmVyc2lvbjogJzIuMS40JyxcbiAgICAgICAgICAgICAgICB3YXJuaW5nOiB3YXJuaW5nXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB2YXIgcHJldmlvdXNUb2FzdDtcblxuICAgICAgICAgICAgcmV0dXJuIHRvYXN0cjtcblxuICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBlcnJvcihtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vdGlmeSh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHRvYXN0VHlwZS5lcnJvcixcbiAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzOiBnZXRPcHRpb25zKCkuaWNvbkNsYXNzZXMuZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNPdmVycmlkZTogb3B0aW9uc092ZXJyaWRlLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q29udGFpbmVyKG9wdGlvbnMsIGNyZWF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucykgeyBvcHRpb25zID0gZ2V0T3B0aW9ucygpOyB9XG4gICAgICAgICAgICAgICAgJGNvbnRhaW5lciA9ICQoJyMnICsgb3B0aW9ucy5jb250YWluZXJJZCk7XG4gICAgICAgICAgICAgICAgaWYgKCRjb250YWluZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkY29udGFpbmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICRjb250YWluZXIgPSBjcmVhdGVDb250YWluZXIob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAkY29udGFpbmVyO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBpbmZvKG1lc3NhZ2UsIHRpdGxlLCBvcHRpb25zT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbm90aWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdG9hc3RUeXBlLmluZm8sXG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzczogZ2V0T3B0aW9ucygpLmljb25DbGFzc2VzLmluZm8sXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnNPdmVycmlkZTogb3B0aW9uc092ZXJyaWRlLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIgPSBjYWxsYmFjaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gc3VjY2VzcyhtZXNzYWdlLCB0aXRsZSwgb3B0aW9uc092ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vdGlmeSh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHRvYXN0VHlwZS5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3M6IGdldE9wdGlvbnMoKS5pY29uQ2xhc3Nlcy5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zT3ZlcnJpZGU6IG9wdGlvbnNPdmVycmlkZSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHdhcm5pbmcobWVzc2FnZSwgdGl0bGUsIG9wdGlvbnNPdmVycmlkZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBub3RpZnkoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiB0b2FzdFR5cGUud2FybmluZyxcbiAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzOiBnZXRPcHRpb25zKCkuaWNvbkNsYXNzZXMud2FybmluZyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc092ZXJyaWRlOiBvcHRpb25zT3ZlcnJpZGUsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGVhcigkdG9hc3RFbGVtZW50LCBjbGVhck9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IGdldE9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICBpZiAoISRjb250YWluZXIpIHsgZ2V0Q29udGFpbmVyKG9wdGlvbnMpOyB9XG4gICAgICAgICAgICAgICAgaWYgKCFjbGVhclRvYXN0KCR0b2FzdEVsZW1lbnQsIG9wdGlvbnMsIGNsZWFyT3B0aW9ucykpIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJDb250YWluZXIob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiByZW1vdmUoJHRvYXN0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gZ2V0T3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIGlmICghJGNvbnRhaW5lcikgeyBnZXRDb250YWluZXIob3B0aW9ucyk7IH1cbiAgICAgICAgICAgICAgICBpZiAoJHRvYXN0RWxlbWVudCAmJiAkKCc6Zm9jdXMnLCAkdG9hc3RFbGVtZW50KS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlVG9hc3QoJHRvYXN0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCRjb250YWluZXIuY2hpbGRyZW4oKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGludGVybmFsIGZ1bmN0aW9uc1xuXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGVhckNvbnRhaW5lciAob3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHZhciB0b2FzdHNUb0NsZWFyID0gJGNvbnRhaW5lci5jaGlsZHJlbigpO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0b2FzdHNUb0NsZWFyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVG9hc3QoJCh0b2FzdHNUb0NsZWFyW2ldKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmdW5jdGlvbiBjbGVhclRvYXN0ICgkdG9hc3RFbGVtZW50LCBvcHRpb25zLCBjbGVhck9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB2YXIgZm9yY2UgPSBjbGVhck9wdGlvbnMgJiYgY2xlYXJPcHRpb25zLmZvcmNlID8gY2xlYXJPcHRpb25zLmZvcmNlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKCR0b2FzdEVsZW1lbnQgJiYgKGZvcmNlIHx8ICQoJzpmb2N1cycsICR0b2FzdEVsZW1lbnQpLmxlbmd0aCA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgJHRvYXN0RWxlbWVudFtvcHRpb25zLmhpZGVNZXRob2RdKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBvcHRpb25zLmhpZGVEdXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhc2luZzogb3B0aW9ucy5oaWRlRWFzaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHsgcmVtb3ZlVG9hc3QoJHRvYXN0RWxlbWVudCk7IH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgJGNvbnRhaW5lciA9ICQoJzxkaXYvPicpXG4gICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsIG9wdGlvbnMuY29udGFpbmVySWQpXG4gICAgICAgICAgICAgICAgICAgIC5hZGRDbGFzcyhvcHRpb25zLnBvc2l0aW9uQ2xhc3MpO1xuXG4gICAgICAgICAgICAgICAgJGNvbnRhaW5lci5hcHBlbmRUbygkKG9wdGlvbnMudGFyZ2V0KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICRjb250YWluZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIGdldERlZmF1bHRzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHRhcFRvRGlzbWlzczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdG9hc3RDbGFzczogJ3RvYXN0JyxcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVySWQ6ICd0b2FzdC1jb250YWluZXInLFxuICAgICAgICAgICAgICAgICAgICBkZWJ1ZzogZmFsc2UsXG5cbiAgICAgICAgICAgICAgICAgICAgc2hvd01ldGhvZDogJ2ZhZGVJbicsIC8vZmFkZUluLCBzbGlkZURvd24sIGFuZCBzaG93IGFyZSBidWlsdCBpbnRvIGpRdWVyeVxuICAgICAgICAgICAgICAgICAgICBzaG93RHVyYXRpb246IDMwMCxcbiAgICAgICAgICAgICAgICAgICAgc2hvd0Vhc2luZzogJ3N3aW5nJywgLy9zd2luZyBhbmQgbGluZWFyIGFyZSBidWlsdCBpbnRvIGpRdWVyeVxuICAgICAgICAgICAgICAgICAgICBvblNob3duOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGhpZGVNZXRob2Q6ICdmYWRlT3V0JyxcbiAgICAgICAgICAgICAgICAgICAgaGlkZUR1cmF0aW9uOiAxMDAwLFxuICAgICAgICAgICAgICAgICAgICBoaWRlRWFzaW5nOiAnc3dpbmcnLFxuICAgICAgICAgICAgICAgICAgICBvbkhpZGRlbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZU1ldGhvZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlRHVyYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUVhc2luZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlT25Ib3ZlcjogdHJ1ZSxcblxuICAgICAgICAgICAgICAgICAgICBleHRlbmRlZFRpbWVPdXQ6IDEwMDAsXG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzc2VzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogJ3RvYXN0LWVycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZm86ICd0b2FzdC1pbmZvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ICd0b2FzdC1zdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmc6ICd0b2FzdC13YXJuaW5nJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3M6ICd0b2FzdC1pbmZvJyxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25DbGFzczogJ3RvYXN0LXRvcC1yaWdodCcsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVPdXQ6IDUwMDAsIC8vIFNldCB0aW1lT3V0IGFuZCBleHRlbmRlZFRpbWVPdXQgdG8gMCB0byBtYWtlIGl0IHN0aWNreVxuICAgICAgICAgICAgICAgICAgICB0aXRsZUNsYXNzOiAndG9hc3QtdGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlQ2xhc3M6ICd0b2FzdC1tZXNzYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBlSHRtbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldDogJ2JvZHknLFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUh0bWw6ICc8YnV0dG9uIHR5cGU9XCJidXR0b25cIj4mdGltZXM7PC9idXR0b24+JyxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VDbGFzczogJ3RvYXN0LWNsb3NlLWJ1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgIG5ld2VzdE9uVG9wOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RHVwbGljYXRlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3NDbGFzczogJ3RvYXN0LXByb2dyZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgcnRsOiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIHB1Ymxpc2goYXJncykge1xuICAgICAgICAgICAgICAgIGlmICghbGlzdGVuZXIpIHsgcmV0dXJuOyB9XG4gICAgICAgICAgICAgICAgbGlzdGVuZXIoYXJncyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZ1bmN0aW9uIG5vdGlmeShtYXApIHtcbiAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9IGdldE9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICB2YXIgaWNvbkNsYXNzID0gbWFwLmljb25DbGFzcyB8fCBvcHRpb25zLmljb25DbGFzcztcblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKG1hcC5vcHRpb25zT3ZlcnJpZGUpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gJC5leHRlbmQob3B0aW9ucywgbWFwLm9wdGlvbnNPdmVycmlkZSk7XG4gICAgICAgICAgICAgICAgICAgIGljb25DbGFzcyA9IG1hcC5vcHRpb25zT3ZlcnJpZGUuaWNvbkNsYXNzIHx8IGljb25DbGFzcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRXhpdChvcHRpb25zLCBtYXApKSB7IHJldHVybjsgfVxuXG4gICAgICAgICAgICAgICAgdG9hc3RJZCsrO1xuXG4gICAgICAgICAgICAgICAgJGNvbnRhaW5lciA9IGdldENvbnRhaW5lcihvcHRpb25zLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIHZhciBpbnRlcnZhbElkID0gbnVsbDtcbiAgICAgICAgICAgICAgICB2YXIgJHRvYXN0RWxlbWVudCA9ICQoJzxkaXYvPicpO1xuICAgICAgICAgICAgICAgIHZhciAkdGl0bGVFbGVtZW50ID0gJCgnPGRpdi8+Jyk7XG4gICAgICAgICAgICAgICAgdmFyICRtZXNzYWdlRWxlbWVudCA9ICQoJzxkaXYvPicpO1xuICAgICAgICAgICAgICAgIHZhciAkcHJvZ3Jlc3NFbGVtZW50ID0gJCgnPGRpdi8+Jyk7XG4gICAgICAgICAgICAgICAgdmFyICRjbG9zZUVsZW1lbnQgPSAkKG9wdGlvbnMuY2xvc2VIdG1sKTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvZ3Jlc3NCYXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIGludGVydmFsSWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGhpZGVFdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG1heEhpZGVUaW1lOiBudWxsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHRvYXN0SWQ6IHRvYXN0SWQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlOiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0VGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgbWFwOiBtYXBcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgcGVyc29uYWxpemVUb2FzdCgpO1xuXG4gICAgICAgICAgICAgICAgZGlzcGxheVRvYXN0KCk7XG5cbiAgICAgICAgICAgICAgICBoYW5kbGVFdmVudHMoKTtcblxuICAgICAgICAgICAgICAgIHB1Ymxpc2gocmVzcG9uc2UpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVidWcgJiYgY29uc29sZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuICR0b2FzdEVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBlc2NhcGVIdG1sKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyYvZywgJyZhbXA7JylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csICcmIzM5OycpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPC9nLCAnJmx0OycpXG4gICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBlcnNvbmFsaXplVG9hc3QoKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEljb24oKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGl0bGUoKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0TWVzc2FnZSgpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDbG9zZUJ1dHRvbigpO1xuICAgICAgICAgICAgICAgICAgICBzZXRQcm9ncmVzc0JhcigpO1xuICAgICAgICAgICAgICAgICAgICBzZXRSVEwoKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VxdWVuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0QXJpYSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldEFyaWEoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhcmlhVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChtYXAuaWNvbkNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0b2FzdC1zdWNjZXNzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RvYXN0LWluZm8nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWFWYWx1ZSA9ICAncG9saXRlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYVZhbHVlID0gJ2Fzc2VydGl2ZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgJHRvYXN0RWxlbWVudC5hdHRyKCdhcmlhLWxpdmUnLCBhcmlhVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhbmRsZUV2ZW50cygpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2xvc2VPbkhvdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG9hc3RFbGVtZW50LmhvdmVyKHN0aWNrQXJvdW5kLCBkZWxheWVkSGlkZVRvYXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5vbmNsaWNrICYmIG9wdGlvbnMudGFwVG9EaXNtaXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG9hc3RFbGVtZW50LmNsaWNrKGhpZGVUb2FzdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5jbG9zZUJ1dHRvbiAmJiAkY2xvc2VFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkY2xvc2VFbGVtZW50LmNsaWNrKGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jYW5jZWxCdWJibGUgIT09IHVuZGVmaW5lZCAmJiBldmVudC5jYW5jZWxCdWJibGUgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbkNsb3NlQ2xpY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkNsb3NlQ2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVUb2FzdCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25jbGljaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHRvYXN0RWxlbWVudC5jbGljayhmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uY2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVUb2FzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkaXNwbGF5VG9hc3QoKSB7XG4gICAgICAgICAgICAgICAgICAgICR0b2FzdEVsZW1lbnQuaGlkZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICR0b2FzdEVsZW1lbnRbb3B0aW9ucy5zaG93TWV0aG9kXShcbiAgICAgICAgICAgICAgICAgICAgICAgIHtkdXJhdGlvbjogb3B0aW9ucy5zaG93RHVyYXRpb24sIGVhc2luZzogb3B0aW9ucy5zaG93RWFzaW5nLCBjb21wbGV0ZTogb3B0aW9ucy5vblNob3dufVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnRpbWVPdXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbElkID0gc2V0VGltZW91dChoaWRlVG9hc3QsIG9wdGlvbnMudGltZU91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5tYXhIaWRlVGltZSA9IHBhcnNlRmxvYXQob3B0aW9ucy50aW1lT3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLmhpZGVFdGEgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIHByb2dyZXNzQmFyLm1heEhpZGVUaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwodXBkYXRlUHJvZ3Jlc3MsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldEljb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXAuaWNvbkNsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG9hc3RFbGVtZW50LmFkZENsYXNzKG9wdGlvbnMudG9hc3RDbGFzcykuYWRkQ2xhc3MoaWNvbkNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldFNlcXVlbmNlKCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5uZXdlc3RPblRvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci5wcmVwZW5kKCR0b2FzdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci5hcHBlbmQoJHRvYXN0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRUaXRsZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcC50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1ZmZpeCA9IG1hcC50aXRsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmVzY2FwZUh0bWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXggPSBlc2NhcGVIdG1sKG1hcC50aXRsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAkdGl0bGVFbGVtZW50LmFwcGVuZChzdWZmaXgpLmFkZENsYXNzKG9wdGlvbnMudGl0bGVDbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG9hc3RFbGVtZW50LmFwcGVuZCgkdGl0bGVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldE1lc3NhZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXAubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1ZmZpeCA9IG1hcC5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZXNjYXBlSHRtbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeCA9IGVzY2FwZUh0bWwobWFwLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2VFbGVtZW50LmFwcGVuZChzdWZmaXgpLmFkZENsYXNzKG9wdGlvbnMubWVzc2FnZUNsYXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICR0b2FzdEVsZW1lbnQuYXBwZW5kKCRtZXNzYWdlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRDbG9zZUJ1dHRvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY2xvc2VCdXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRjbG9zZUVsZW1lbnQuYWRkQ2xhc3Mob3B0aW9ucy5jbG9zZUNsYXNzKS5hdHRyKCdyb2xlJywgJ2J1dHRvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJHRvYXN0RWxlbWVudC5wcmVwZW5kKCRjbG9zZUVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc2V0UHJvZ3Jlc3NCYXIoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnByb2dyZXNzQmFyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkcHJvZ3Jlc3NFbGVtZW50LmFkZENsYXNzKG9wdGlvbnMucHJvZ3Jlc3NDbGFzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAkdG9hc3RFbGVtZW50LnByZXBlbmQoJHByb2dyZXNzRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzZXRSVEwoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnJ0bCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHRvYXN0RWxlbWVudC5hZGRDbGFzcygncnRsJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzaG91bGRFeGl0KG9wdGlvbnMsIG1hcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5wcmV2ZW50RHVwbGljYXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcC5tZXNzYWdlID09PSBwcmV2aW91c1RvYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVG9hc3QgPSBtYXAubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaGlkZVRvYXN0KG92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSBvdmVycmlkZSAmJiBvcHRpb25zLmNsb3NlTWV0aG9kICE9PSBmYWxzZSA/IG9wdGlvbnMuY2xvc2VNZXRob2QgOiBvcHRpb25zLmhpZGVNZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvbiA9IG92ZXJyaWRlICYmIG9wdGlvbnMuY2xvc2VEdXJhdGlvbiAhPT0gZmFsc2UgP1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jbG9zZUR1cmF0aW9uIDogb3B0aW9ucy5oaWRlRHVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgIHZhciBlYXNpbmcgPSBvdmVycmlkZSAmJiBvcHRpb25zLmNsb3NlRWFzaW5nICE9PSBmYWxzZSA/IG9wdGlvbnMuY2xvc2VFYXNpbmcgOiBvcHRpb25zLmhpZGVFYXNpbmc7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKCc6Zm9jdXMnLCAkdG9hc3RFbGVtZW50KS5sZW5ndGggJiYgIW92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHByb2dyZXNzQmFyLmludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRvYXN0RWxlbWVudFttZXRob2RdKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVhc2luZzogZWFzaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVUb2FzdCgkdG9hc3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25IaWRkZW4gJiYgcmVzcG9uc2Uuc3RhdGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25IaWRkZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSAnaGlkZGVuJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lbmRUaW1lID0gbmV3IERhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaXNoKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVsYXllZEhpZGVUb2FzdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudGltZU91dCA+IDAgfHwgb3B0aW9ucy5leHRlbmRlZFRpbWVPdXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnZhbElkID0gc2V0VGltZW91dChoaWRlVG9hc3QsIG9wdGlvbnMuZXh0ZW5kZWRUaW1lT3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLm1heEhpZGVUaW1lID0gcGFyc2VGbG9hdChvcHRpb25zLmV4dGVuZGVkVGltZU91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5oaWRlRXRhID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBwcm9ncmVzc0Jhci5tYXhIaWRlVGltZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0aWNrQXJvdW5kKCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLmhpZGVFdGEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAkdG9hc3RFbGVtZW50LnN0b3AodHJ1ZSwgdHJ1ZSlbb3B0aW9ucy5zaG93TWV0aG9kXShcbiAgICAgICAgICAgICAgICAgICAgICAgIHtkdXJhdGlvbjogb3B0aW9ucy5zaG93RHVyYXRpb24sIGVhc2luZzogb3B0aW9ucy5zaG93RWFzaW5nfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVByb2dyZXNzKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGVyY2VudGFnZSA9ICgocHJvZ3Jlc3NCYXIuaGlkZUV0YSAtIChuZXcgRGF0ZSgpLmdldFRpbWUoKSkpIC8gcHJvZ3Jlc3NCYXIubWF4SGlkZVRpbWUpICogMTAwO1xuICAgICAgICAgICAgICAgICAgICAkcHJvZ3Jlc3NFbGVtZW50LndpZHRoKHBlcmNlbnRhZ2UgKyAnJScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gZ2V0T3B0aW9ucygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5leHRlbmQoe30sIGdldERlZmF1bHRzKCksIHRvYXN0ci5vcHRpb25zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlVG9hc3QoJHRvYXN0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmICghJGNvbnRhaW5lcikgeyAkY29udGFpbmVyID0gZ2V0Q29udGFpbmVyKCk7IH1cbiAgICAgICAgICAgICAgICBpZiAoJHRvYXN0RWxlbWVudC5pcygnOnZpc2libGUnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICR0b2FzdEVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgJHRvYXN0RWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKCRjb250YWluZXIuY2hpbGRyZW4oKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lci5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNUb2FzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSkoKTtcbiAgICB9KTtcbn0odHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lIDogZnVuY3Rpb24gKGRlcHMsIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHsgLy9Ob2RlXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdqcXVlcnknKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnRvYXN0ciA9IGZhY3Rvcnkod2luZG93LmpRdWVyeSk7XG4gICAgfVxufSkpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==