403Webshell
Server IP : 82.208.35.60  /  Your IP : 216.73.216.89
Web Server : Apache/2.4.55 (FreeBSD) OpenSSL/1.1.1q-freebsd PHP/7.3.31
System : FreeBSD server7.d2m.cz 12.4-RELEASE-p9 FreeBSD 12.4-RELEASE-p9 GENERIC amd64
User : studiokobylisy_cz ( 1008)
PHP Version : 7.3.31
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/air-sport_cz/www/admin939wizxmp/themes/new-theme/public/employee_form.bundle.js
/*! For license information please see employee_form.bundle.js.LICENSE.txt */
(()=>{var e={83830:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=s(n(99663)),o=s(n(22600));function s(e){return e&&e.__esModule?e:{default:e}}var a=window.$,i=function(){function e(t,n){return(0,r.default)(this,e),this.addonsConnectFormSelector=t,this.$loadingSpinner=a(n),this.initEvents(),{}}return(0,o.default)(e,[{key:"initEvents",value:function(){var e=this;a("body").on("submit",this.addonsConnectFormSelector,(function(t){var n=a(t.currentTarget);t.preventDefault(),t.stopPropagation(),e.connect(n.attr("action"),n.serialize())}))}},{key:"connect",value:function(e,t){var n=this;a.ajax({method:"POST",url:e,dataType:"json",data:t,beforeSend:function(){n.$loadingSpinner.show(),a('button.btn[type="submit"]',n.addonsConnectFormSelector).hide()}}).then((function(e){1===e.success?window.location.reload():(a.growl.error({message:e.message}),n.$loadingSpinner.hide(),a('button.btn[type="submit"]',n.addonsConnectFormSelector).fadeIn())}),(function(){a.growl.error({message:a(n.addonsConnectFormSelector).data("error-message")}),n.$loadingSpinner.hide(),a('button.btn[type="submit"]',n.addonsConnectFormSelector).show()}))}}]),e}();t.default=i},50542:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=s(n(99663)),o=s(n(22600));function s(e){return e&&e.__esModule?e:{default:e}}var a=window.$,i=function(){function e(t){var n=this,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(0,r.default)(this,e),this.minLength=o.minLength||8,this.$feedbackContainer=a(t),{watchPasswordStrength:function(e){return n.watchPasswordStrength(e)},generatePassword:function(e){return n.generatePassword(e)}}}return(0,o.default)(e,[{key:"watchPasswordStrength",value:function(e){var t=this;a.passy.requirements.length.min=this.minLength,a.passy.requirements.characters="DIGIT",e.each((function(e,n){var r=a("<span>");r.insertAfter(a(n)),a(n).passy((function(e,n){t.displayFeedback(r,e,n)}))}))}},{key:"generatePassword",value:function(e){e.passy("generate",this.minLength)}},{key:"displayFeedback",value:function(e,t,n){var r=this.getPasswordStrengthFeedback(t);e.text(r.message),e.removeClass("text-danger text-warning text-success"),e.addClass(r.elementClass),e.toggleClass("d-none",!n)}},{key:"getPasswordStrengthFeedback",value:function(e){switch(e){case a.passy.strength.LOW:return{message:this.$feedbackContainer.find(".strength-low").text(),elementClass:"text-danger"};case a.passy.strength.MEDIUM:return{message:this.$feedbackContainer.find(".strength-medium").text(),elementClass:"text-warning"};case a.passy.strength.HIGH:return{message:this.$feedbackContainer.find(".strength-high").text(),elementClass:"text-success"};case a.passy.strength.EXTREME:return{message:this.$feedbackContainer.find(".strength-extreme").text(),elementClass:"text-success"};default:throw new Error("Invalid password strength indicator.")}}}]),e}();t.default=i},73111:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=i(n(99663)),o=i(n(22600)),s=i(n(50542)),a=i(n(61036));function i(e){return e&&e.__esModule?e:{default:e}}var u=window.$,l=function(){function e(t,n,o,i,l,d,c,p,f){return(0,r.default)(this,e),this.$inputsBlock=u(t),this.showButtonSelector=n,this.hideButtonSelector=o,this.generatePasswordButtonSelector=i,this.oldPasswordInputSelector=l,this.newPasswordInputSelector=d,this.confirmNewPasswordInputSelector=c,this.generatedPasswordDisplaySelector=p,this.$newPasswordInputs=this.$inputsBlock.find(this.newPasswordInputSelector),this.$copyPasswordInputs=this.$inputsBlock.find(this.confirmNewPasswordInputSelector).add(this.generatedPasswordDisplaySelector),this.$submittableInputs=this.$inputsBlock.find(this.oldPasswordInputSelector).add(this.newPasswordInputSelector).add(this.confirmNewPasswordInputSelector),this.passwordHandler=new s.default(f),this.passwordValidator=new a.default(this.newPasswordInputSelector,this.confirmNewPasswordInputSelector),this.hideInputsBlock(),this.initEvents(),{}}return(0,o.default)(e,[{key:"initEvents",value:function(){var e=this;u(document).on("click",this.showButtonSelector,(function(t){e.hide(u(t.currentTarget)),e.showInputsBlock()})),u(document).on("click",this.hideButtonSelector,(function(){e.hideInputsBlock(),e.show(u(e.showButtonSelector))})),this.passwordHandler.watchPasswordStrength(this.$newPasswordInputs),u(document).on("click",this.generatePasswordButtonSelector,(function(){e.passwordHandler.generatePassword(e.$newPasswordInputs),e.$copyPasswordInputs.val(e.$newPasswordInputs.val()),e.checkPasswordValidity()})),u(document).on("keyup",this.newPasswordInputSelector+","+this.confirmNewPasswordInputSelector,(function(){e.checkPasswordValidity()})),u(document).on("submit",u(this.oldPasswordInputSelector).closest("form"),(function(t){u(e.oldPasswordInputSelector).is(":disabled")||e.passwordValidator.isPasswordValid()||t.preventDefault()}))}},{key:"checkPasswordValidity",value:function(){var e=u(this.newPasswordInputSelector).parent().find(".form-text"),t=u(this.confirmNewPasswordInputSelector).parent().find(".form-text");e.text(this.getPasswordLengthValidationMessage()).toggleClass("text-danger",!this.passwordValidator.isPasswordLengthValid()),t.text(this.getPasswordConfirmationValidationMessage()).toggleClass("text-danger",!this.passwordValidator.isPasswordMatchingConfirmation())}},{key:"getPasswordConfirmationValidationMessage",value:function(){return this.passwordValidator.isPasswordMatchingConfirmation()?"":u(this.confirmNewPasswordInputSelector).data("invalid-password")}},{key:"getPasswordLengthValidationMessage",value:function(){return this.passwordValidator.isPasswordTooShort()?u(this.newPasswordInputSelector).data("password-too-short"):this.passwordValidator.isPasswordTooLong()?u(this.newPasswordInputSelector).data("password-too-long"):""}},{key:"showInputsBlock",value:function(){this.show(this.$inputsBlock),this.$submittableInputs.removeAttr("disabled"),this.$submittableInputs.attr("required","required")}},{key:"hideInputsBlock",value:function(){this.hide(this.$inputsBlock),this.$submittableInputs.attr("disabled","disabled"),this.$submittableInputs.removeAttr("required"),this.$inputsBlock.find("input").val(""),this.$inputsBlock.find(".form-text").text("")}},{key:"hide",value:function(e){e.addClass("d-none")}},{key:"show",value:function(e){e.removeClass("d-none")}}]),e}();t.default=l},19078:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=s(n(99663)),o=s(n(22600));function s(e){return e&&e.__esModule?e:{default:e}}var a=window.$,i=function(){function e(t){var n=this;return(0,r.default)(this,e),this.$container=a(t),this.$container.on("click",".js-input-wrapper",(function(e){var t=a(e.currentTarget);n.toggleChildTree(t)})),this.$container.on("click",".js-toggle-choice-tree-action",(function(e){var t=a(e.currentTarget);n.toggleTree(t)})),{enableAutoCheckChildren:function(){return n.enableAutoCheckChildren()},enableAllInputs:function(){return n.enableAllInputs()},disableAllInputs:function(){return n.disableAllInputs()}}}return(0,o.default)(e,[{key:"enableAutoCheckChildren",value:function(){this.$container.on("change",'input[type="checkbox"]',(function(e){var t=a(e.currentTarget);t.closest("li").find('ul input[type="checkbox"]').prop("checked",t.is(":checked"))}))}},{key:"enableAllInputs",value:function(){this.$container.find("input").removeAttr("disabled")}},{key:"disableAllInputs",value:function(){this.$container.find("input").attr("disabled","disabled")}},{key:"toggleChildTree",value:function(e){var t=e.closest("li");t.hasClass("expanded")?t.removeClass("expanded").addClass("collapsed"):t.hasClass("collapsed")&&t.removeClass("collapsed").addClass("expanded")}},{key:"toggleTree",value:function(e){var t=e.closest(".js-choice-tree-container"),n=e.data("action"),r={addClass:{expand:"expanded",collapse:"collapsed"},removeClass:{expand:"collapsed",collapse:"expanded"},nextAction:{expand:"collapse",collapse:"expand"},text:{expand:"collapsed-text",collapse:"expanded-text"},icon:{expand:"collapsed-icon",collapse:"expanded-icon"}};t.find("li").each((function(e,t){var o=a(t);o.hasClass(r.removeClass[n])&&o.removeClass(r.removeClass[n]).addClass(r.addClass[n])})),e.data("action",r.nextAction[n]),e.find(".material-icons").text(e.data(r.icon[n])),e.find(".js-toggle-text").text(e.data(r.text[n]))}}]),e}();t.default=i},61036:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=s(n(99663)),o=s(n(22600));function s(e){return e&&e.__esModule?e:{default:e}}var a=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};(0,r.default)(this,e),this.newPasswordInput=document.querySelector(t),this.confirmPasswordInput=document.querySelector(n),this.minPasswordLength=o.minPasswordLength||8,this.maxPasswordLength=o.maxPasswordLength||255}return(0,o.default)(e,[{key:"isPasswordValid",value:function(){return!(this.confirmPasswordInput&&!this.isPasswordMatchingConfirmation())&&this.isPasswordLengthValid()}},{key:"isPasswordLengthValid",value:function(){return!this.isPasswordTooShort()&&!this.isPasswordTooLong()}},{key:"isPasswordMatchingConfirmation",value:function(){if(!this.confirmPasswordInput)throw new Error("Confirm password input is not provided for the password validator.");return""===this.confirmPasswordInput.value||this.newPasswordInput.value===this.confirmPasswordInput.value}},{key:"isPasswordTooShort",value:function(){return this.newPasswordInput.value.length<this.minPasswordLength}},{key:"isPasswordTooLong",value:function(){return this.newPasswordInput.value.length>this.maxPasswordLength}}]),e}();t.default=a},28681:(e,t,n)=>{"use strict";var r=n(73609);Object.defineProperty(t,"__esModule",{value:!0});var o=p(n(88902)),s=p(n(47518)),a=p(n(99663)),i=p(n(22600)),u=p(n(19078)),l=p(n(83830)),d=p(n(73111)),c=p(n(65389));function p(e){return e&&e.__esModule?e:{default:e}}var f=function(){function e(){return(0,a.default)(this,e),this.shopChoiceTreeSelector=c.default.shopChoiceTree,this.shopChoiceTree=new u.default(this.shopChoiceTreeSelector),this.employeeProfileSelector=c.default.profileSelect,this.tabsDropdownSelector=c.default.defaultPageSelect,this.shopChoiceTree.enableAutoCheckChildren(),new l.default(c.default.addonsConnectForm,c.default.addonsLoginButton),new d.default(c.default.changePasswordInputsBlock,c.default.showChangePasswordBlockButton,c.default.hideChangePasswordBlockButton,c.default.generatePasswordButton,c.default.oldPasswordInput,c.default.newPasswordInput,c.default.confirmNewPasswordInput,c.default.generatedPasswordDisplayInput,c.default.passwordStrengthFeedbackContainer),this.initEvents(),this.toggleShopTree(),{}}return(0,i.default)(e,[{key:"initEvents",value:function(){var e=this,t=r(this.employeeProfileSelector).data("get-tabs-url");r(document).on("change",this.employeeProfileSelector,(function(){return e.toggleShopTree()})),r(document).on("change",this.employeeProfileSelector,(function(n){r.get(t,{profileId:r(n.currentTarget).val()},(function(t){e.reloadTabsDropdown(t)}),"json")}))}},{key:"reloadTabsDropdown",value:function(e){var t=this,n=r(this.tabsDropdownSelector);n.empty(),(0,s.default)(e).forEach((function(e){if(e.children.length>0&&e.name){var r=t.createOptionGroup(e.name);(0,o.default)(e.children).forEach((function(n){e.children[n].name&&r.append(t.createOption(e.children[n].name,e.children[n].id_tab))})),n.append(r)}else e.name&&n.append(t.createOption(e.name,e.id_tab))}))}},{key:"toggleShopTree",value:function(){var e=r(this.employeeProfileSelector),t=e.data("admin-profile");r(this.shopChoiceTreeSelector).closest(".form-group").toggleClass("d-none",e.val()===t)}},{key:"createOptionGroup",value:function(e){return r('<optgroup label="'+e+'">')}},{key:"createOption",value:function(e,t){return r('<option value="'+t+'">'+e+"</option>")}}]),e}();t.default=f},65389:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={shopChoiceTree:"#employee_shop_association",profileSelect:"#employee_profile",defaultPageSelect:"#employee_default_page",addonsConnectForm:"#addons-connect-form",addonsLoginButton:"#addons_login_btn",changePasswordInputsBlock:".js-change-password-block",showChangePasswordBlockButton:".js-change-password",hideChangePasswordBlockButton:".js-change-password-cancel",generatePasswordButton:"#employee_change_password_generate_password_button",oldPasswordInput:"#employee_change_password_old_password",newPasswordInput:"#employee_change_password_new_password_first",confirmNewPasswordInput:"#employee_change_password_new_password_second",generatedPasswordDisplayInput:"#employee_change_password_generated_password",passwordStrengthFeedbackContainer:".js-password-strength-feedback"}},32242:(e,t,n)=>{e.exports={default:n(33391),__esModule:!0}},88902:(e,t,n)=>{e.exports={default:n(98613),__esModule:!0}},47518:(e,t,n)=>{e.exports={default:n(48056),__esModule:!0}},99663:(e,t)=>{"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},22600:(e,t,n)=>{"use strict";t.__esModule=!0;var r,o=(r=n(32242))&&r.__esModule?r:{default:r};t.default=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),(0,o.default)(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}()},33391:(e,t,n)=>{n(31477);var r=n(34579).Object;e.exports=function(e,t,n){return r.defineProperty(e,t,n)}},98613:(e,t,n)=>{n(40961),e.exports=n(34579).Object.keys},48056:(e,t,n)=>{n(21013),e.exports=n(34579).Object.values},85663:e=>{e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},12159:(e,t,n)=>{var r=n(36727);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},57428:(e,t,n)=>{var r=n(7932),o=n(78728),s=n(16531);e.exports=function(e){return function(t,n,a){var i,u=r(t),l=o(u.length),d=s(a,l);if(e&&n!=n){for(;l>d;)if((i=u[d++])!=i)return!0}else for(;l>d;d++)if((e||d in u)&&u[d]===n)return e||d||0;return!e&&-1}}},32894:e=>{var t={}.toString;e.exports=function(e){return t.call(e).slice(8,-1)}},34579:e=>{var t=e.exports={version:"2.6.11"};"number"==typeof __e&&(__e=t)},19216:(e,t,n)=>{var r=n(85663);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}}},8333:e=>{e.exports=function(e){if(null==e)throw TypeError("Can't call method on  "+e);return e}},89666:(e,t,n)=>{e.exports=!n(7929)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},97467:(e,t,n)=>{var r=n(36727),o=n(33938).document,s=r(o)&&r(o.createElement);e.exports=function(e){return s?o.createElement(e):{}}},73338:e=>{e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},83856:(e,t,n)=>{var r=n(33938),o=n(34579),s=n(19216),a=n(41818),i=n(27069),u=function(e,t,n){var l,d,c,p=e&u.F,f=e&u.G,h=e&u.S,w=e&u.P,g=e&u.B,v=e&u.W,m=f?o:o[t]||(o[t]={}),y=m.prototype,P=f?r:h?r[t]:(r[t]||{}).prototype;for(l in f&&(n=t),n)(d=!p&&P&&void 0!==P[l])&&i(m,l)||(c=d?P[l]:n[l],m[l]=f&&"function"!=typeof P[l]?n[l]:g&&d?s(c,r):v&&P[l]==c?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t.prototype=e.prototype,t}(c):w&&"function"==typeof c?s(Function.call,c):c,w&&((m.virtual||(m.virtual={}))[l]=c,e&u.R&&y&&!y[l]&&a(y,l,c)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},7929:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},33938:e=>{var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)},27069:e=>{var t={}.hasOwnProperty;e.exports=function(e,n){return t.call(e,n)}},41818:(e,t,n)=>{var r=n(4743),o=n(83101);e.exports=n(89666)?function(e,t,n){return r.f(e,t,o(1,n))}:function(e,t,n){return e[t]=n,e}},33758:(e,t,n)=>{e.exports=!n(89666)&&!n(7929)((function(){return 7!=Object.defineProperty(n(97467)("div"),"a",{get:function(){return 7}}).a}))},50799:(e,t,n)=>{var r=n(32894);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},36727:e=>{e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},16227:e=>{e.exports=!0},4743:(e,t,n)=>{var r=n(12159),o=n(33758),s=n(33206),a=Object.defineProperty;t.f=n(89666)?Object.defineProperty:function(e,t,n){if(r(e),t=s(t,!0),r(n),o)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},12963:(e,t,n)=>{var r=n(27069),o=n(7932),s=n(57428)(!1),a=n(58989)("IE_PROTO");e.exports=function(e,t){var n,i=o(e),u=0,l=[];for(n in i)n!=a&&r(i,n)&&l.push(n);for(;t.length>u;)r(i,n=t[u++])&&(~s(l,n)||l.push(n));return l}},46162:(e,t,n)=>{var r=n(12963),o=n(73338);e.exports=Object.keys||function(e){return r(e,o)}},86274:(e,t)=>{t.f={}.propertyIsEnumerable},12584:(e,t,n)=>{var r=n(83856),o=n(34579),s=n(7929);e.exports=function(e,t){var n=(o.Object||{})[e]||Object[e],a={};a[e]=t(n),r(r.S+r.F*s((function(){n(1)})),"Object",a)}},52050:(e,t,n)=>{var r=n(89666),o=n(46162),s=n(7932),a=n(86274).f;e.exports=function(e){return function(t){for(var n,i=s(t),u=o(i),l=u.length,d=0,c=[];l>d;)n=u[d++],r&&!a.call(i,n)||c.push(e?[n,i[n]]:i[n]);return c}}},83101:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},58989:(e,t,n)=>{var r=n(20250)("keys"),o=n(65730);e.exports=function(e){return r[e]||(r[e]=o(e))}},20250:(e,t,n)=>{var r=n(34579),o=n(33938),s="__core-js_shared__",a=o[s]||(o[s]={});(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:r.version,mode:n(16227)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},16531:(e,t,n)=>{var r=n(11052),o=Math.max,s=Math.min;e.exports=function(e,t){return(e=r(e))<0?o(e+t,0):s(e,t)}},11052:e=>{var t=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:t)(e)}},7932:(e,t,n)=>{var r=n(50799),o=n(8333);e.exports=function(e){return r(o(e))}},78728:(e,t,n)=>{var r=n(11052),o=Math.min;e.exports=function(e){return e>0?o(r(e),9007199254740991):0}},66530:(e,t,n)=>{var r=n(8333);e.exports=function(e){return Object(r(e))}},33206:(e,t,n)=>{var r=n(36727);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},65730:e=>{var t=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++t+n).toString(36))}},31477:(e,t,n)=>{var r=n(83856);r(r.S+r.F*!n(89666),"Object",{defineProperty:n(4743).f})},40961:(e,t,n)=>{var r=n(66530),o=n(46162);n(12584)("keys",(function(){return function(e){return o(r(e))}}))},21013:(e,t,n)=>{var r=n(83856),o=n(52050)(!1);r(r.S,"Object",{values:function(e){return o(e)}})},73609:e=>{"use strict";e.exports=window.jQuery}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={exports:{}};return e[r](s,s.exports,n),s.exports}(()=>{"use strict";var e,t=n(73609),r=(e=n(28681))&&e.__esModule?e:{default:e};t((function(){new r.default}))})(),window.employee_form={}})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL2FkZG9ucy1jb25uZWN0b3IuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9jaGFuZ2UtcGFzc3dvcmQtaGFuZGxlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9jb21wb25lbnRzL2Zvcm0vY2hhbmdlLXBhc3N3b3JkLWNvbnRyb2wuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vanMvY29tcG9uZW50cy9mb3JtL2Nob2ljZS10cmVlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL2NvbXBvbmVudHMvcGFzc3dvcmQtdmFsaWRhdG9yLmpzIiwid2VicGFjazovL1tuYW1lXS8uL2pzL3BhZ2VzL2VtcGxveWVlL0VtcGxveWVlRm9ybS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9lbXBsb3llZS9lbXBsb3llZS1mb3JtLW1hcC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvY29yZS1qcy9vYmplY3Qva2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9jb3JlLWpzL29iamVjdC92YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2JhYmVsLXJ1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvYmFiZWwtcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2RlZmluZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3ZhbHVlcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZ2xvYmFsLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2llOC1kb20tZGVmaW5lLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX29iamVjdC1zYXAuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9bbmFtZV0vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL1tuYW1lXS8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vW25hbWVdLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL1tuYW1lXS9leHRlcm5hbCBcImpRdWVyeVwiIiwid2VicGFjazovL1tuYW1lXS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9bbmFtZV0vLi9qcy9wYWdlcy9lbXBsb3llZS9mb3JtLmpzIl0sIm5hbWVzIjpbIiQiLCJ3aW5kb3ciLCJBZGRvbnNDb25uZWN0b3IiLCJhZGRvbnNDb25uZWN0Rm9ybVNlbGVjdG9yIiwibG9hZGluZ1NwaW5uZXJTZWxlY3RvciIsInRoaXMiLCIkbG9hZGluZ1NwaW5uZXIiLCJpbml0RXZlbnRzIiwib24iLCJldmVudCIsIiRmb3JtIiwiY3VycmVudFRhcmdldCIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiY29ubmVjdCIsImF0dHIiLCJzZXJpYWxpemUiLCJhZGRvbnNDb25uZWN0VXJsIiwiZm9ybURhdGEiLCJhamF4IiwibWV0aG9kIiwidXJsIiwiZGF0YVR5cGUiLCJkYXRhIiwiYmVmb3JlU2VuZCIsInNob3ciLCJoaWRlIiwidGhlbiIsInJlc3BvbnNlIiwic3VjY2VzcyIsImxvY2F0aW9uIiwicmVsb2FkIiwiZ3Jvd2wiLCJlcnJvciIsIm1lc3NhZ2UiLCJmYWRlSW4iLCJDaGFuZ2VQYXNzd29yZEhhbmRsZXIiLCJwYXNzd29yZFN0cmVuZ3RoRmVlZGJhY2tDb250YWluZXJTZWxlY3RvciIsIm9wdGlvbnMiLCJtaW5MZW5ndGgiLCIkZmVlZGJhY2tDb250YWluZXIiLCJ3YXRjaFBhc3N3b3JkU3RyZW5ndGgiLCIkaW5wdXQiLCJnZW5lcmF0ZVBhc3N3b3JkIiwicGFzc3kiLCJyZXF1aXJlbWVudHMiLCJsZW5ndGgiLCJtaW4iLCJjaGFyYWN0ZXJzIiwiZWFjaCIsImluZGV4IiwiZWxlbWVudCIsIiRvdXRwdXRDb250YWluZXIiLCJpbnNlcnRBZnRlciIsInN0cmVuZ3RoIiwidmFsaWQiLCJkaXNwbGF5RmVlZGJhY2siLCJwYXNzd29yZFN0cmVuZ3RoIiwiaXNQYXNzd29yZFZhbGlkIiwiZmVlZGJhY2siLCJnZXRQYXNzd29yZFN0cmVuZ3RoRmVlZGJhY2siLCJ0ZXh0IiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsImVsZW1lbnRDbGFzcyIsInRvZ2dsZUNsYXNzIiwiTE9XIiwiZmluZCIsIk1FRElVTSIsIkhJR0giLCJFWFRSRU1FIiwiRXJyb3IiLCJDaGFuZ2VQYXNzd29yZENvbnRyb2wiLCJpbnB1dHNCbG9ja1NlbGVjdG9yIiwic2hvd0J1dHRvblNlbGVjdG9yIiwiaGlkZUJ1dHRvblNlbGVjdG9yIiwiZ2VuZXJhdGVQYXNzd29yZEJ1dHRvblNlbGVjdG9yIiwib2xkUGFzc3dvcmRJbnB1dFNlbGVjdG9yIiwibmV3UGFzc3dvcmRJbnB1dFNlbGVjdG9yIiwiY29uZmlybU5ld1Bhc3N3b3JkSW5wdXRTZWxlY3RvciIsImdlbmVyYXRlZFBhc3N3b3JkRGlzcGxheVNlbGVjdG9yIiwiJGlucHV0c0Jsb2NrIiwiJG5ld1Bhc3N3b3JkSW5wdXRzIiwiJGNvcHlQYXNzd29yZElucHV0cyIsImFkZCIsIiRzdWJtaXR0YWJsZUlucHV0cyIsInBhc3N3b3JkSGFuZGxlciIsInBhc3N3b3JkVmFsaWRhdG9yIiwiUGFzc3dvcmRWYWxpZGF0b3IiLCJoaWRlSW5wdXRzQmxvY2siLCJkb2N1bWVudCIsImUiLCJzaG93SW5wdXRzQmxvY2siLCJ2YWwiLCJjaGVja1Bhc3N3b3JkVmFsaWRpdHkiLCJjbG9zZXN0IiwiaXMiLCIkZmlyc3RQYXNzd29yZEVycm9yQ29udGFpbmVyIiwicGFyZW50IiwiJHNlY29uZFBhc3N3b3JkRXJyb3JDb250YWluZXIiLCJnZXRQYXNzd29yZExlbmd0aFZhbGlkYXRpb25NZXNzYWdlIiwiaXNQYXNzd29yZExlbmd0aFZhbGlkIiwiZ2V0UGFzc3dvcmRDb25maXJtYXRpb25WYWxpZGF0aW9uTWVzc2FnZSIsImlzUGFzc3dvcmRNYXRjaGluZ0NvbmZpcm1hdGlvbiIsImlzUGFzc3dvcmRUb29TaG9ydCIsImlzUGFzc3dvcmRUb29Mb25nIiwicmVtb3ZlQXR0ciIsIiRlbCIsIkNob2ljZVRyZWUiLCJ0cmVlU2VsZWN0b3IiLCIkY29udGFpbmVyIiwiJGlucHV0V3JhcHBlciIsInRvZ2dsZUNoaWxkVHJlZSIsIiRhY3Rpb24iLCJ0b2dnbGVUcmVlIiwiZW5hYmxlQXV0b0NoZWNrQ2hpbGRyZW4iLCJlbmFibGVBbGxJbnB1dHMiLCJkaXNhYmxlQWxsSW5wdXRzIiwiJGNsaWNrZWRDaGVja2JveCIsInByb3AiLCIkcGFyZW50V3JhcHBlciIsImhhc0NsYXNzIiwiJHBhcmVudENvbnRhaW5lciIsImFjdGlvbiIsImNvbmZpZyIsImV4cGFuZCIsImNvbGxhcHNlIiwibmV4dEFjdGlvbiIsImljb24iLCJpdGVtIiwiJGl0ZW0iLCJwYXNzd29yZElucHV0U2VsZWN0b3IiLCJjb25maXJtUGFzc3dvcmRJbnB1dFNlbGVjdG9yIiwibmV3UGFzc3dvcmRJbnB1dCIsInF1ZXJ5U2VsZWN0b3IiLCJjb25maXJtUGFzc3dvcmRJbnB1dCIsIm1pblBhc3N3b3JkTGVuZ3RoIiwibWF4UGFzc3dvcmRMZW5ndGgiLCJ2YWx1ZSIsIkVtcGxveWVlRm9ybSIsInNob3BDaG9pY2VUcmVlU2VsZWN0b3IiLCJlbXBsb3llZUZvcm1NYXAiLCJzaG9wQ2hvaWNlVHJlZSIsImVtcGxveWVlUHJvZmlsZVNlbGVjdG9yIiwicHJvZmlsZVNlbGVjdCIsInRhYnNEcm9wZG93blNlbGVjdG9yIiwiZGVmYXVsdFBhZ2VTZWxlY3QiLCJhZGRvbnNDb25uZWN0Rm9ybSIsImFkZG9uc0xvZ2luQnV0dG9uIiwiY2hhbmdlUGFzc3dvcmRJbnB1dHNCbG9jayIsInNob3dDaGFuZ2VQYXNzd29yZEJsb2NrQnV0dG9uIiwiaGlkZUNoYW5nZVBhc3N3b3JkQmxvY2tCdXR0b24iLCJnZW5lcmF0ZVBhc3N3b3JkQnV0dG9uIiwib2xkUGFzc3dvcmRJbnB1dCIsImNvbmZpcm1OZXdQYXNzd29yZElucHV0IiwiZ2VuZXJhdGVkUGFzc3dvcmREaXNwbGF5SW5wdXQiLCJwYXNzd29yZFN0cmVuZ3RoRmVlZGJhY2tDb250YWluZXIiLCJ0b2dnbGVTaG9wVHJlZSIsImdldFRhYnNVcmwiLCJnZXQiLCJwcm9maWxlSWQiLCJ0YWJzIiwicmVsb2FkVGFic0Ryb3Bkb3duIiwiYWNjZXNzaWJsZVRhYnMiLCIkdGFic0Ryb3Bkb3duIiwiZW1wdHkiLCJmb3JFYWNoIiwiYWNjZXNzaWJsZVRhYiIsImNoaWxkcmVuIiwibmFtZSIsIiRvcHRncm91cCIsImNyZWF0ZU9wdGlvbkdyb3VwIiwiY2hpbGRLZXkiLCJhcHBlbmQiLCJjcmVhdGVPcHRpb24iLCJpZF90YWIiLCIkZW1wbG95ZWVQcm9maWxlRHJvcGRvd24iLCJzdXBlckFkbWluUHJvZmlsZUlkIiwibW9kdWxlIiwiZXhwb3J0cyIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsIlR5cGVFcnJvciIsIm9iaiIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZpbmVQcm9wZXJ0aWVzIiwidGFyZ2V0IiwicHJvcHMiLCJpIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImtleSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInByb3RvdHlwZSIsIiRPYmplY3QiLCJpdCIsImRlc2MiLCJkZWZpbmVQcm9wZXJ0eSIsImlzT2JqZWN0IiwidG9JT2JqZWN0IiwidG9MZW5ndGgiLCJ0b0Fic29sdXRlSW5kZXgiLCJJU19JTkNMVURFUyIsIiR0aGlzIiwiZWwiLCJmcm9tSW5kZXgiLCJPIiwidG9TdHJpbmciLCJjYWxsIiwic2xpY2UiLCJjb3JlIiwidmVyc2lvbiIsIl9fZSIsImFGdW5jdGlvbiIsImZuIiwidGhhdCIsInVuZGVmaW5lZCIsImEiLCJiIiwiYyIsImFwcGx5IiwiYXJndW1lbnRzIiwiT2JqZWN0IiwiY3JlYXRlRWxlbWVudCIsInNwbGl0IiwiZ2xvYmFsIiwiY3R4IiwiaGFzIiwiJGV4cG9ydCIsInR5cGUiLCJzb3VyY2UiLCJvd24iLCJvdXQiLCJJU19GT1JDRUQiLCJGIiwiSVNfR0xPQkFMIiwiRyIsIklTX1NUQVRJQyIsIlMiLCJJU19QUk9UTyIsIlAiLCJJU19CSU5EIiwiQiIsIklTX1dSQVAiLCJXIiwiZXhwUHJvdG8iLCJDIiwiRnVuY3Rpb24iLCJ2aXJ0dWFsIiwiUiIsIlUiLCJleGVjIiwiTWF0aCIsInNlbGYiLCJfX2ciLCJoYXNPd25Qcm9wZXJ0eSIsImRQIiwiY3JlYXRlRGVzYyIsIm9iamVjdCIsImYiLCJjb2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImFuT2JqZWN0IiwiSUU4X0RPTV9ERUZJTkUiLCJ0b1ByaW1pdGl2ZSIsIkF0dHJpYnV0ZXMiLCJhcnJheUluZGV4T2YiLCJJRV9QUk9UTyIsIm5hbWVzIiwicmVzdWx0IiwicHVzaCIsIiRrZXlzIiwiZW51bUJ1Z0tleXMiLCJrZXlzIiwiZmFpbHMiLCJLRVkiLCJleHAiLCJERVNDUklQVE9SUyIsImdldEtleXMiLCJpc0VudW0iLCJpc0VudHJpZXMiLCJiaXRtYXAiLCJzaGFyZWQiLCJ1aWQiLCJTSEFSRUQiLCJzdG9yZSIsIm1vZGUiLCJjb3B5cmlnaHQiLCJ0b0ludGVnZXIiLCJtYXgiLCJjZWlsIiwiZmxvb3IiLCJpc05hTiIsIklPYmplY3QiLCJkZWZpbmVkIiwidmFsdWVPZiIsImlkIiwicHgiLCJyYW5kb20iLCJjb25jYXQiLCJ0b09iamVjdCIsIiR2YWx1ZXMiLCJ2YWx1ZXMiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIl0sIm1hcHBpbmdzIjoiO2tMQXlCT0EsRUFBS0MsT0FBTEQsRUFNY0UsRSxXQUNuQixXQUNFQyxFQUNBQyxHQU9BLE9BTkEscUJBQ0FDLEtBQUtGLDBCQUE0QkEsRUFDakNFLEtBQUtDLGdCQUFrQk4sRUFBRUksR0FFekJDLEtBQUtFLGFBRUUsRywwREFRSSxXQUNYUCxFQUFFLFFBQVFRLEdBQ1IsU0FDQUgsS0FBS0YsMkJBQ0wsU0FBQ00sR0FDQyxJQUFNQyxFQUFRVixFQUFFUyxFQUFNRSxlQUN0QkYsRUFBTUcsaUJBQ05ILEVBQU1JLGtCQUVOLEVBQUtDLFFBQVFKLEVBQU1LLEtBQUssVUFBV0wsRUFBTU0sa0IsOEJBYXZDQyxFQUFrQkMsR0FBVSxXQUNsQ2xCLEVBQUVtQixLQUFLLENBQ0xDLE9BQVEsT0FDUkMsSUFBS0osRUFDTEssU0FBVSxPQUNWQyxLQUFNTCxFQUNOTSxXQUFZLFdBQ1YsRUFBS2xCLGdCQUFnQm1CLE9BQ3JCekIsRUFBRSw0QkFBNkIsRUFBS0csMkJBQTJCdUIsVUFFaEVDLE1BQUssU0FBQ0MsR0FDa0IsSUFBckJBLEVBQVNDLFFBQ1g1QixPQUFPNkIsU0FBU0MsVUFFaEIvQixFQUFFZ0MsTUFBTUMsTUFBTSxDQUNaQyxRQUFTTixFQUFTTSxVQUdwQixFQUFLNUIsZ0JBQWdCb0IsT0FDckIxQixFQUFFLDRCQUE2QixFQUFLRywyQkFBMkJnQyxhQUVoRSxXQUNEbkMsRUFBRWdDLE1BQU1DLE1BQU0sQ0FDWkMsUUFBU2xDLEVBQUUsRUFBS0csMkJBQTJCb0IsS0FBSyxtQkFHbEQsRUFBS2pCLGdCQUFnQm9CLE9BQ3JCMUIsRUFBRSw0QkFBNkIsRUFBS0csMkJBQTJCc0IsYyxlQW5FaER2QixHLHFLQ05kRixFQUFLQyxPQUFMRCxFQU9jb0MsRSxXQUNuQixXQUFZQyxHQUF5RCxXQUFkQyxFQUFjLHVEQUFKLEdBTy9ELE9BUG1FLHFCQUVuRWpDLEtBQUtrQyxVQUFZRCxFQUFRQyxXQUFhLEVBR3RDbEMsS0FBS21DLG1CQUFxQnhDLEVBQUVxQyxHQUVyQixDQUNMSSxzQkFBdUIsU0FBQ0MsR0FBRCxPQUFZLEVBQUtELHNCQUFzQkMsSUFDOURDLGlCQUFrQixTQUFDRCxHQUFELE9BQVksRUFBS0MsaUJBQWlCRCxLLG1FQVNsQ0EsR0FBUSxXQUM1QjFDLEVBQUU0QyxNQUFNQyxhQUFhQyxPQUFPQyxJQUFNMUMsS0FBS2tDLFVBQ3ZDdkMsRUFBRTRDLE1BQU1DLGFBQWFHLFdBQWEsUUFFbENOLEVBQU9PLE1BQUssU0FBQ0MsRUFBT0MsR0FDbEIsSUFBTUMsRUFBbUJwRCxFQUFFLFVBRTNCb0QsRUFBaUJDLFlBQVlyRCxFQUFFbUQsSUFFL0JuRCxFQUFFbUQsR0FBU1AsT0FBTSxTQUFDVSxFQUFVQyxHQUMxQixFQUFLQyxnQkFBZ0JKLEVBQWtCRSxFQUFVQyxXLHVDQVV0Q2IsR0FDZkEsRUFBT0UsTUFBTSxXQUFZdkMsS0FBS2tDLGEsc0NBWWhCYSxFQUFrQkssRUFBa0JDLEdBQ2xELElBQU1DLEVBQVd0RCxLQUFLdUQsNEJBQTRCSCxHQUNsREwsRUFBaUJTLEtBQUtGLEVBQVN6QixTQUMvQmtCLEVBQWlCVSxZQUFZLHlDQUM3QlYsRUFBaUJXLFNBQVNKLEVBQVNLLGNBQ25DWixFQUFpQmEsWUFBWSxVQUFXUCxLLGtEQVdkSixHQUMxQixPQUFRQSxHQUNOLEtBQUt0RCxFQUFFNEMsTUFBTVUsU0FBU1ksSUFDcEIsTUFBTyxDQUNMaEMsUUFBUzdCLEtBQUttQyxtQkFBbUIyQixLQUFLLGlCQUFpQk4sT0FDdkRHLGFBQWMsZUFHbEIsS0FBS2hFLEVBQUU0QyxNQUFNVSxTQUFTYyxPQUNwQixNQUFPLENBQ0xsQyxRQUFTN0IsS0FBS21DLG1CQUFtQjJCLEtBQUssb0JBQW9CTixPQUMxREcsYUFBYyxnQkFHbEIsS0FBS2hFLEVBQUU0QyxNQUFNVSxTQUFTZSxLQUNwQixNQUFPLENBQ0xuQyxRQUFTN0IsS0FBS21DLG1CQUFtQjJCLEtBQUssa0JBQWtCTixPQUN4REcsYUFBYyxnQkFHbEIsS0FBS2hFLEVBQUU0QyxNQUFNVSxTQUFTZ0IsUUFDcEIsTUFBTyxDQUNMcEMsUUFBUzdCLEtBQUttQyxtQkFBbUIyQixLQUFLLHFCQUFxQk4sT0FDM0RHLGFBQWMsZ0JBR2xCLFFBQ0UsTUFBTSxJQUFJTyxNQUFNLDZDLGVBL0ZIbkMsRyxrSENQckIsVSxJQUNBLFUsdURBRU9wQyxFQUFLQyxPQUFMRCxFQU9jd0UsRSxXQUNuQixXQUNFQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUNBM0MsR0FxREEsT0FwREEscUJBRUFoQyxLQUFLNEUsYUFBZWpGLEVBQUV5RSxHQUd0QnBFLEtBQUtxRSxtQkFBcUJBLEVBRzFCckUsS0FBS3NFLG1CQUFxQkEsRUFHMUJ0RSxLQUFLdUUsK0JBQWlDQSxFQUd0Q3ZFLEtBQUt3RSx5QkFBMkJBLEVBR2hDeEUsS0FBS3lFLHlCQUEyQkEsRUFHaEN6RSxLQUFLMEUsZ0NBQWtDQSxFQUd2QzFFLEtBQUsyRSxpQ0FBbUNBLEVBR3hDM0UsS0FBSzZFLG1CQUFxQjdFLEtBQUs0RSxhQUM1QmQsS0FBSzlELEtBQUt5RSwwQkFHYnpFLEtBQUs4RSxvQkFBc0I5RSxLQUFLNEUsYUFDN0JkLEtBQUs5RCxLQUFLMEUsaUNBQ1ZLLElBQUkvRSxLQUFLMkUsa0NBR1ozRSxLQUFLZ0YsbUJBQXFCaEYsS0FBSzRFLGFBQzVCZCxLQUFLOUQsS0FBS3dFLDBCQUNWTyxJQUFJL0UsS0FBS3lFLDBCQUNUTSxJQUFJL0UsS0FBSzBFLGlDQUVaMUUsS0FBS2lGLGdCQUFrQixJQUFJbEQsVUFDekJDLEdBR0ZoQyxLQUFLa0Ysa0JBQW9CLElBQUlDLFVBQzNCbkYsS0FBS3lFLHlCQUNMekUsS0FBSzBFLGlDQUdQMUUsS0FBS29GLGtCQUNMcEYsS0FBS0UsYUFFRSxHLDBEQVFJLFdBRVhQLEVBQUUwRixVQUFVbEYsR0FBRyxRQUFTSCxLQUFLcUUsb0JBQW9CLFNBQUNpQixHQUNoRCxFQUFLakUsS0FBSzFCLEVBQUUyRixFQUFFaEYsZ0JBQ2QsRUFBS2lGLHFCQUdQNUYsRUFBRTBGLFVBQVVsRixHQUFHLFFBQVNILEtBQUtzRSxvQkFBb0IsV0FDL0MsRUFBS2Msa0JBQ0wsRUFBS2hFLEtBQUt6QixFQUFFLEVBQUswRSx3QkFJbkJyRSxLQUFLaUYsZ0JBQWdCN0Msc0JBQXNCcEMsS0FBSzZFLG9CQUVoRGxGLEVBQUUwRixVQUFVbEYsR0FBRyxRQUFTSCxLQUFLdUUsZ0NBQWdDLFdBRTNELEVBQUtVLGdCQUFnQjNDLGlCQUFpQixFQUFLdUMsb0JBRzNDLEVBQUtDLG9CQUFvQlUsSUFBSSxFQUFLWCxtQkFBbUJXLE9BQ3JELEVBQUtDLDJCQUlQOUYsRUFBRTBGLFVBQVVsRixHQUNWLFFBQ0dILEtBQUt5RSx5QkFGVixJQUVzQ3pFLEtBQUswRSxpQ0FDekMsV0FDRSxFQUFLZSwyQkFLVDlGLEVBQUUwRixVQUFVbEYsR0FBRyxTQUFVUixFQUFFSyxLQUFLd0UsMEJBQTBCa0IsUUFBUSxTQUFTLFNBQUN0RixHQUV0RVQsRUFBRSxFQUFLNkUsMEJBQTBCbUIsR0FBRyxjQUluQyxFQUFLVCxrQkFBa0I3QixtQkFDMUJqRCxFQUFNRyxzQiw4Q0FXVixJQUFNcUYsRUFBK0JqRyxFQUFFSyxLQUFLeUUsMEJBQTBCb0IsU0FBUy9CLEtBQUssY0FDOUVnQyxFQUFnQ25HLEVBQUVLLEtBQUswRSxpQ0FBaUNtQixTQUFTL0IsS0FBSyxjQUU1RjhCLEVBQ0dwQyxLQUFLeEQsS0FBSytGLHNDQUNWbkMsWUFBWSxlQUFnQjVELEtBQUtrRixrQkFBa0JjLHlCQUN0REYsRUFDR3RDLEtBQUt4RCxLQUFLaUcsNENBQ1ZyQyxZQUFZLGVBQWdCNUQsS0FBS2tGLGtCQUFrQmdCLG9DLGlFQVd0RCxPQUFLbEcsS0FBS2tGLGtCQUFrQmdCLGlDQUlyQixHQUhFdkcsRUFBRUssS0FBSzBFLGlDQUFpQ3hELEtBQUssc0IsMkRBY3RELE9BQUlsQixLQUFLa0Ysa0JBQWtCaUIscUJBQ2xCeEcsRUFBRUssS0FBS3lFLDBCQUEwQnZELEtBQUssc0JBRzNDbEIsS0FBS2tGLGtCQUFrQmtCLG9CQUNsQnpHLEVBQUVLLEtBQUt5RSwwQkFBMEJ2RCxLQUFLLHFCQUd4QyxLLHdDQVNQbEIsS0FBS29CLEtBQUtwQixLQUFLNEUsY0FDZjVFLEtBQUtnRixtQkFBbUJxQixXQUFXLFlBQ25DckcsS0FBS2dGLG1CQUFtQnRFLEtBQUssV0FBWSxjLHdDQVN6Q1YsS0FBS3FCLEtBQUtyQixLQUFLNEUsY0FDZjVFLEtBQUtnRixtQkFBbUJ0RSxLQUFLLFdBQVksWUFDekNWLEtBQUtnRixtQkFBbUJxQixXQUFXLFlBQ25DckcsS0FBSzRFLGFBQWFkLEtBQUssU0FBUzBCLElBQUksSUFDcEN4RixLQUFLNEUsYUFBYWQsS0FBSyxjQUFjTixLQUFLLE0sMkJBVXZDOEMsR0FDSEEsRUFBSTVDLFNBQVMsWSwyQkFVVjRDLEdBQ0hBLEVBQUk3QyxZQUFZLGMsZUFuTkNVLEcscUtDVmR4RSxFQUFLQyxPQUFMRCxFQUtjNEcsRSxXQUluQixXQUFZQyxHQUFjLFdBZXhCLE9BZndCLHFCQUN4QnhHLEtBQUt5RyxXQUFhOUcsRUFBRTZHLEdBRXBCeEcsS0FBS3lHLFdBQVd0RyxHQUFHLFFBQVMscUJBQXFCLFNBQUNDLEdBQ2hELElBQU1zRyxFQUFnQi9HLEVBQUVTLEVBQU1FLGVBRTlCLEVBQUtxRyxnQkFBZ0JELE1BR3ZCMUcsS0FBS3lHLFdBQVd0RyxHQUFHLFFBQVMsaUNBQWlDLFNBQUNDLEdBQzVELElBQU13RyxFQUFVakgsRUFBRVMsRUFBTUUsZUFFeEIsRUFBS3VHLFdBQVdELE1BR1gsQ0FDTEUsd0JBQXlCLGtCQUFNLEVBQUtBLDJCQUNwQ0MsZ0JBQWlCLGtCQUFNLEVBQUtBLG1CQUM1QkMsaUJBQWtCLGtCQUFNLEVBQUtBLHFCLHVFQVEvQmhILEtBQUt5RyxXQUFXdEcsR0FBRyxTQUFVLDBCQUEwQixTQUFDQyxHQUN0RCxJQUFNNkcsRUFBbUJ0SCxFQUFFUyxFQUFNRSxlQUNQMkcsRUFBaUJ2QixRQUFRLE1BR2hENUIsS0FBSyw2QkFDTG9ELEtBQUssVUFBV0QsRUFBaUJ0QixHQUFHLGtCLHdDQVF6QzNGLEtBQUt5RyxXQUFXM0MsS0FBSyxTQUFTdUMsV0FBVyxjLHlDQU96Q3JHLEtBQUt5RyxXQUFXM0MsS0FBSyxTQUFTcEQsS0FBSyxXQUFZLGMsc0NBVWpDZ0csR0FDZCxJQUFNUyxFQUFpQlQsRUFBY2hCLFFBQVEsTUFFekN5QixFQUFlQyxTQUFTLFlBQzFCRCxFQUNHMUQsWUFBWSxZQUNaQyxTQUFTLGFBS1Z5RCxFQUFlQyxTQUFTLGNBQzFCRCxFQUNHMUQsWUFBWSxhQUNaQyxTQUFTLGMsaUNBV0xrRCxHQUNULElBQU1TLEVBQW1CVCxFQUFRbEIsUUFBUSw2QkFDbkM0QixFQUFTVixFQUFRMUYsS0FBSyxVQUd0QnFHLEVBQVMsQ0FDYjdELFNBQVUsQ0FDUjhELE9BQVEsV0FDUkMsU0FBVSxhQUVaaEUsWUFBYSxDQUNYK0QsT0FBUSxZQUNSQyxTQUFVLFlBRVpDLFdBQVksQ0FDVkYsT0FBUSxXQUNSQyxTQUFVLFVBRVpqRSxLQUFNLENBQ0pnRSxPQUFRLGlCQUNSQyxTQUFVLGlCQUVaRSxLQUFNLENBQ0pILE9BQVEsaUJBQ1JDLFNBQVUsa0JBSWRKLEVBQWlCdkQsS0FBSyxNQUFNbEIsTUFBSyxTQUFDQyxFQUFPK0UsR0FDdkMsSUFBTUMsRUFBUWxJLEVBQUVpSSxHQUVaQyxFQUFNVCxTQUFTRyxFQUFPOUQsWUFBWTZELEtBQ3BDTyxFQUFNcEUsWUFBWThELEVBQU85RCxZQUFZNkQsSUFDbEM1RCxTQUFTNkQsRUFBTzdELFNBQVM0RCxPQUloQ1YsRUFBUTFGLEtBQUssU0FBVXFHLEVBQU9HLFdBQVdKLElBQ3pDVixFQUFROUMsS0FBSyxtQkFBbUJOLEtBQUtvRCxFQUFRMUYsS0FBS3FHLEVBQU9JLEtBQUtMLEtBQzlEVixFQUFROUMsS0FBSyxtQkFBbUJOLEtBQUtvRCxFQUFRMUYsS0FBS3FHLEVBQU8vRCxLQUFLOEQsUyxlQTdIN0NmLEcscUtDQUFwQixFLFdBTW5CLFdBQVkyQyxHQUEwRSxJQUFuREMsRUFBbUQsdURBQXBCLEtBQU05RixFQUFjLHVEQUFKLElBQUkscUJBQ3BGakMsS0FBS2dJLGlCQUFtQjNDLFNBQVM0QyxjQUFjSCxHQUMvQzlILEtBQUtrSSxxQkFBdUI3QyxTQUFTNEMsY0FBY0YsR0FHbkQvSCxLQUFLbUksa0JBQW9CbEcsRUFBUWtHLG1CQUFxQixFQUd0RG5JLEtBQUtvSSxrQkFBb0JuRyxFQUFRbUcsbUJBQXFCLEksK0RBU3RELFFBQUlwSSxLQUFLa0ksdUJBQXlCbEksS0FBS2tHLG1DQUloQ2xHLEtBQUtnRywwQiw4Q0FTWixPQUFRaEcsS0FBS21HLHVCQUF5Qm5HLEtBQUtvRyxzQix1REFTM0MsSUFBS3BHLEtBQUtrSSxxQkFDUixNQUFNLElBQUloRSxNQUFNLHNFQUdsQixNQUF3QyxLQUFwQ2xFLEtBQUtrSSxxQkFBcUJHLE9BSXZCckksS0FBS2dJLGlCQUFpQkssUUFBVXJJLEtBQUtrSSxxQkFBcUJHLFEsMkNBU2pFLE9BQU9ySSxLQUFLZ0ksaUJBQWlCSyxNQUFNNUYsT0FBU3pDLEtBQUttSSxvQiwwQ0FTakQsT0FBT25JLEtBQUtnSSxpQkFBaUJLLE1BQU01RixPQUFTekMsS0FBS29JLHNCLGVBdkVoQ2pELEcsNkpDTHJCLFUsSUFDQSxVLElBQ0EsVSxJQUNBLFUsdURBS3FCbUQsRSxXQUNuQixhQTRCRSxPQTVCWSxxQkFDWnRJLEtBQUt1SSx1QkFBeUJDLFVBQWdCQyxlQUM5Q3pJLEtBQUt5SSxlQUFpQixJQUFJbEMsVUFBV3ZHLEtBQUt1SSx3QkFDMUN2SSxLQUFLMEksd0JBQTBCRixVQUFnQkcsY0FDL0MzSSxLQUFLNEkscUJBQXVCSixVQUFnQkssa0JBRTVDN0ksS0FBS3lJLGVBQWUzQiwwQkFFcEIsSUFBSWpILFVBQ0YySSxVQUFnQk0sa0JBQ2hCTixVQUFnQk8sbUJBR2xCLElBQUk1RSxVQUNGcUUsVUFBZ0JRLDBCQUNoQlIsVUFBZ0JTLDhCQUNoQlQsVUFBZ0JVLDhCQUNoQlYsVUFBZ0JXLHVCQUNoQlgsVUFBZ0JZLGlCQUNoQlosVUFBZ0JSLGlCQUNoQlEsVUFBZ0JhLHdCQUNoQmIsVUFBZ0JjLDhCQUNoQmQsVUFBZ0JlLG1DQUdsQnZKLEtBQUtFLGFBQ0xGLEtBQUt3SixpQkFFRSxHLDBEQVFJLFdBRUxDLEVBRDRCOUosRUFBRUssS0FBSzBJLHlCQUNJeEgsS0FBSyxnQkFFbER2QixFQUFFMEYsVUFBVWxGLEdBQUcsU0FBVUgsS0FBSzBJLHlCQUF5QixrQkFBTSxFQUFLYyxvQkFHbEU3SixFQUFFMEYsVUFBVWxGLEdBQUcsU0FBVUgsS0FBSzBJLHlCQUF5QixTQUFDdEksR0FDdERULEVBQUUrSixJQUNBRCxFQUNBLENBQ0VFLFVBQVdoSyxFQUFFUyxFQUFNRSxlQUFla0YsUUFFcEMsU0FBQ29FLEdBQ0MsRUFBS0MsbUJBQW1CRCxLQUUxQixhLHlDQVlhRSxHQUFnQixXQUMzQkMsRUFBZ0JwSyxFQUFFSyxLQUFLNEksc0JBRTdCbUIsRUFBY0MsU0FFZCxhQUFjRixHQUFnQkcsU0FBUSxTQUFDQyxHQUNyQyxHQUFJQSxFQUFjQyxTQUFTMUgsT0FBUyxHQUFLeUgsRUFBY0UsS0FBTSxDQUUzRCxJQUFNQyxFQUFZLEVBQUtDLGtCQUFrQkosRUFBY0UsT0FFdkQsYUFBWUYsRUFBY0MsVUFBVUYsU0FBUSxTQUFDTSxHQUN2Q0wsRUFBY0MsU0FBU0ksR0FBVUgsTUFDbkNDLEVBQVVHLE9BQ1IsRUFBS0MsYUFDSFAsRUFBY0MsU0FBU0ksR0FBVUgsS0FDakNGLEVBQWNDLFNBQVNJLEdBQVVHLFlBS3pDWCxFQUFjUyxPQUFPSCxRQUNaSCxFQUFjRSxNQUV2QkwsRUFBY1MsT0FDWixFQUFLQyxhQUNIUCxFQUFjRSxLQUNkRixFQUFjUSxjLHVDQWF0QixJQUFNQyxFQUEyQmhMLEVBQUVLLEtBQUswSSx5QkFDbENrQyxFQUFzQkQsRUFBeUJ6SixLQUFLLGlCQUMxRHZCLEVBQUVLLEtBQUt1SSx3QkFDSjdDLFFBQVEsZUFDUjlCLFlBQVksU0FBVStHLEVBQXlCbkYsUUFBVW9GLEssd0NBWTVDUixHQUNoQixPQUFPekssRUFBRSxvQkFBb0J5SyxFQUF0QixRLG1DQWFJQSxFQUFNL0IsR0FDakIsT0FBTzFJLEVBQUUsa0JBQWtCMEksRUFBcEIsS0FBOEIrQixFQUE5QixpQixlQXZJVTlCLEcsc0ZDTE4sQ0FDYkcsZUFBZ0IsNkJBQ2hCRSxjQUFlLG9CQUNmRSxrQkFBbUIseUJBQ25CQyxrQkFBbUIsdUJBQ25CQyxrQkFBbUIsb0JBR25CQywwQkFBMkIsNEJBQzNCQyw4QkFBK0Isc0JBQy9CQyw4QkFBK0IsNkJBQy9CQyx1QkFBd0IscURBQ3hCQyxpQkFBa0IseUNBQ2xCcEIsaUJBQWtCLCtDQUNsQnFCLHdCQUF5QixnREFDekJDLDhCQUErQiwrQ0FDL0JDLGtDQUFtQyxtQyxnQkM1Q3JDc0IsRUFBT0MsUUFBVSxDQUFFLFFBQVcsRUFBUSxPQUE4Q0MsWUFBWSxJLGdCQ0FoR0YsRUFBT0MsUUFBVSxDQUFFLFFBQVcsRUFBUSxPQUFtQ0MsWUFBWSxJLGdCQ0FyRkYsRUFBT0MsUUFBVSxDQUFFLFFBQVcsRUFBUSxPQUFxQ0MsWUFBWSxJLDJCQ0V2RkQsRUFBUUMsWUFBYSxFQUVyQkQsRUFBUUUsUUFBVSxTQUFVQyxFQUFVQyxHQUNwQyxLQUFNRCxhQUFvQkMsR0FDeEIsTUFBTSxJQUFJQyxVQUFVLHVDLDZCQ0p4QkwsRUFBUUMsWUFBYSxFQUVyQixJQUlnQ0ssRUFGNUJDLEdBRTRCRCxFQUpWLEVBQVEsU0FJdUJBLEVBQUlMLFdBQWFLLEVBQU0sQ0FBRUosUUFBU0ksR0FFdkZOLEVBQVFFLFFBQVUsV0FDaEIsU0FBU00sRUFBaUJDLEVBQVFDLEdBQ2hDLElBQUssSUFBSUMsRUFBSSxFQUFHQSxFQUFJRCxFQUFNL0ksT0FBUWdKLElBQUssQ0FDckMsSUFBSUMsRUFBYUYsRUFBTUMsR0FDdkJDLEVBQVdDLFdBQWFELEVBQVdDLGFBQWMsRUFDakRELEVBQVdFLGNBQWUsRUFDdEIsVUFBV0YsSUFBWUEsRUFBV0csVUFBVyxJQUNqRCxFQUFJUixFQUFpQkwsU0FBU08sRUFBUUcsRUFBV0ksSUFBS0osSUFJMUQsT0FBTyxTQUFVUixFQUFhYSxFQUFZQyxHQUd4QyxPQUZJRCxHQUFZVCxFQUFpQkosRUFBWWUsVUFBV0YsR0FDcERDLEdBQWFWLEVBQWlCSixFQUFhYyxHQUN4Q2QsR0FkTyxJLGdCQ1ZsQixFQUFRLE9BQ1IsSUFBSWdCLEVBQVUsZ0JBQ2RyQixFQUFPQyxRQUFVLFNBQXdCcUIsRUFBSUwsRUFBS00sR0FDaEQsT0FBT0YsRUFBUUcsZUFBZUYsRUFBSUwsRUFBS00sSyxnQkNIekMsRUFBUSxPQUNSdkIsRUFBT0MsUUFBVSxFQUFqQixvQixnQkNEQSxFQUFRLE9BQ1JELEVBQU9DLFFBQVUsRUFBakIsc0IsVUNEQUQsRUFBT0MsUUFBVSxTQUFVcUIsR0FDekIsR0FBaUIsbUJBQU5BLEVBQWtCLE1BQU1oQixVQUFVZ0IsRUFBSyx1QkFDbEQsT0FBT0EsSSxnQkNGVCxJQUFJRyxFQUFXLEVBQVEsT0FDdkJ6QixFQUFPQyxRQUFVLFNBQVVxQixHQUN6QixJQUFLRyxFQUFTSCxHQUFLLE1BQU1oQixVQUFVZ0IsRUFBSyxzQkFDeEMsT0FBT0EsSSxnQkNEVCxJQUFJSSxFQUFZLEVBQVEsTUFDcEJDLEVBQVcsRUFBUSxPQUNuQkMsRUFBa0IsRUFBUSxPQUM5QjVCLEVBQU9DLFFBQVUsU0FBVTRCLEdBQ3pCLE9BQU8sU0FBVUMsRUFBT0MsRUFBSUMsR0FDMUIsSUFHSXhFLEVBSEF5RSxFQUFJUCxFQUFVSSxHQUNkbEssRUFBUytKLEVBQVNNLEVBQUVySyxRQUNwQkksRUFBUTRKLEVBQWdCSSxFQUFXcEssR0FJdkMsR0FBSWlLLEdBQWVFLEdBQU1BLEdBQUksS0FBT25LLEVBQVNJLEdBRzNDLElBRkF3RixFQUFReUUsRUFBRWpLLE9BRUd3RixFQUFPLE9BQU8sT0FFdEIsS0FBTTVGLEVBQVNJLEVBQU9BLElBQVMsSUFBSTZKLEdBQWU3SixLQUFTaUssSUFDNURBLEVBQUVqSyxLQUFXK0osRUFBSSxPQUFPRixHQUFlN0osR0FBUyxFQUNwRCxPQUFRNkosSUFBZ0IsSyxVQ3BCOUIsSUFBSUssRUFBVyxHQUFHQSxTQUVsQmxDLEVBQU9DLFFBQVUsU0FBVXFCLEdBQ3pCLE9BQU9ZLEVBQVNDLEtBQUtiLEdBQUljLE1BQU0sR0FBSSxLLFVDSHJDLElBQUlDLEVBQU9yQyxFQUFPQyxRQUFVLENBQUVxQyxRQUFTLFVBQ3JCLGlCQUFQQyxNQUFpQkEsSUFBTUYsSSxnQkNBbEMsSUFBSUcsRUFBWSxFQUFRLE9BQ3hCeEMsRUFBT0MsUUFBVSxTQUFVd0MsRUFBSUMsRUFBTTlLLEdBRW5DLEdBREE0SyxFQUFVQyxRQUNHRSxJQUFURCxFQUFvQixPQUFPRCxFQUMvQixPQUFRN0ssR0FDTixLQUFLLEVBQUcsT0FBTyxTQUFVZ0wsR0FDdkIsT0FBT0gsRUFBR04sS0FBS08sRUFBTUUsSUFFdkIsS0FBSyxFQUFHLE9BQU8sU0FBVUEsRUFBR0MsR0FDMUIsT0FBT0osRUFBR04sS0FBS08sRUFBTUUsRUFBR0MsSUFFMUIsS0FBSyxFQUFHLE9BQU8sU0FBVUQsRUFBR0MsRUFBR0MsR0FDN0IsT0FBT0wsRUFBR04sS0FBS08sRUFBTUUsRUFBR0MsRUFBR0MsSUFHL0IsT0FBTyxXQUNMLE9BQU9MLEVBQUdNLE1BQU1MLEVBQU1NLGMsU0NoQjFCaEQsRUFBT0MsUUFBVSxTQUFVcUIsR0FDekIsR0FBVXFCLE1BQU5yQixFQUFpQixNQUFNaEIsVUFBVSx5QkFBMkJnQixHQUNoRSxPQUFPQSxJLGdCQ0ZUdEIsRUFBT0MsU0FBVyxFQUFRLEtBQVIsRUFBb0IsV0FDcEMsT0FBK0UsR0FBeEVnRCxPQUFPekIsZUFBZSxHQUFJLElBQUssQ0FBRTNDLElBQUssV0FBYyxPQUFPLEtBQVErRCxNLGdCQ0Y1RSxJQUFJbkIsRUFBVyxFQUFRLE9BQ25CakgsRUFBVyxrQkFFWE0sRUFBSzJHLEVBQVNqSCxJQUFhaUgsRUFBU2pILEVBQVMwSSxlQUNqRGxELEVBQU9DLFFBQVUsU0FBVXFCLEdBQ3pCLE9BQU94RyxFQUFLTixFQUFTMEksY0FBYzVCLEdBQU0sSyxVQ0ozQ3RCLEVBQU9DLFFBQVUsZ0dBRWZrRCxNQUFNLE0sZ0JDSFIsSUFBSUMsRUFBUyxFQUFRLE9BQ2pCZixFQUFPLEVBQVEsT0FDZmdCLEVBQU0sRUFBUSxPQUNkN00sRUFBTyxFQUFRLE9BQ2Y4TSxFQUFNLEVBQVEsT0FHZEMsRUFBVSxTQUFVQyxFQUFNakUsRUFBTWtFLEdBQ2xDLElBU0l4QyxFQUFLeUMsRUFBS0MsRUFUVkMsRUFBWUosRUFBT0QsRUFBUU0sRUFDM0JDLEVBQVlOLEVBQU9ELEVBQVFRLEVBQzNCQyxFQUFZUixFQUFPRCxFQUFRVSxFQUMzQkMsRUFBV1YsRUFBT0QsRUFBUVksRUFDMUJDLEVBQVVaLEVBQU9ELEVBQVFjLEVBQ3pCQyxFQUFVZCxFQUFPRCxFQUFRZ0IsRUFDekJ0RSxFQUFVNkQsRUFBWXpCLEVBQU9BLEVBQUs5QyxLQUFVOEMsRUFBSzlDLEdBQVEsSUFDekRpRixFQUFXdkUsRUFBaUIsVUFDNUJTLEVBQVNvRCxFQUFZVixFQUFTWSxFQUFZWixFQUFPN0QsSUFBUzZELEVBQU83RCxJQUFTLElBQWEsVUFHM0YsSUFBSzBCLEtBREQ2QyxJQUFXTCxFQUFTbEUsR0FDWmtFLEdBRVZDLEdBQU9FLEdBQWFsRCxRQUEwQmlDLElBQWhCakMsRUFBT08sS0FDMUJxQyxFQUFJckQsRUFBU2dCLEtBRXhCMEMsRUFBTUQsRUFBTWhELEVBQU9PLEdBQU93QyxFQUFPeEMsR0FFakNoQixFQUFRZ0IsR0FBTzZDLEdBQW1DLG1CQUFmcEQsRUFBT08sR0FBcUJ3QyxFQUFPeEMsR0FFcEVtRCxHQUFXVixFQUFNTCxFQUFJTSxFQUFLUCxHQUUxQmtCLEdBQVc1RCxFQUFPTyxJQUFRMEMsRUFBTSxTQUFXYyxHQUMzQyxJQUFJWixFQUFJLFNBQVVqQixFQUFHQyxFQUFHQyxHQUN0QixHQUFJM04sZ0JBQWdCc1AsRUFBRyxDQUNyQixPQUFRekIsVUFBVXBMLFFBQ2hCLEtBQUssRUFBRyxPQUFPLElBQUk2TSxFQUNuQixLQUFLLEVBQUcsT0FBTyxJQUFJQSxFQUFFN0IsR0FDckIsS0FBSyxFQUFHLE9BQU8sSUFBSTZCLEVBQUU3QixFQUFHQyxHQUN4QixPQUFPLElBQUk0QixFQUFFN0IsRUFBR0MsRUFBR0MsR0FDckIsT0FBTzJCLEVBQUUxQixNQUFNNU4sS0FBTTZOLFlBR3pCLE9BREFhLEVBQVcsVUFBSVksRUFBVyxVQUNuQlosRUFYeUIsQ0FhL0JGLEdBQU9PLEdBQTBCLG1CQUFQUCxFQUFvQk4sRUFBSXFCLFNBQVN2QyxLQUFNd0IsR0FBT0EsRUFFdkVPLEtBQ0RqRSxFQUFRMEUsVUFBWTFFLEVBQVEwRSxRQUFVLEtBQUsxRCxHQUFPMEMsRUFFL0NILEVBQU9ELEVBQVFxQixHQUFLSixJQUFhQSxFQUFTdkQsSUFBTXpLLEVBQUtnTyxFQUFVdkQsRUFBSzBDLE1BSzlFSixFQUFRTSxFQUFJLEVBQ1pOLEVBQVFRLEVBQUksRUFDWlIsRUFBUVUsRUFBSSxFQUNaVixFQUFRWSxFQUFJLEVBQ1paLEVBQVFjLEVBQUksR0FDWmQsRUFBUWdCLEVBQUksR0FDWmhCLEVBQVFzQixFQUFJLEdBQ1p0QixFQUFRcUIsRUFBSSxJQUNaNUUsRUFBT0MsUUFBVXNELEcsU0M3RGpCdkQsRUFBT0MsUUFBVSxTQUFVNkUsR0FDekIsSUFDRSxRQUFTQSxJQUNULE1BQU9ySyxHQUNQLE9BQU8sSyxVQ0hYLElBQUkySSxFQUFTcEQsRUFBT0MsUUFBMkIsb0JBQVZsTCxRQUF5QkEsT0FBT2dRLE1BQVFBLEtBQ3pFaFEsT0FBd0Isb0JBQVJpUSxNQUF1QkEsS0FBS0QsTUFBUUEsS0FBT0MsS0FFM0ROLFNBQVMsY0FBVEEsR0FDYyxpQkFBUE8sTUFBaUJBLElBQU03QixJLFVDTGxDLElBQUk4QixFQUFpQixHQUFHQSxlQUN4QmxGLEVBQU9DLFFBQVUsU0FBVXFCLEVBQUlMLEdBQzdCLE9BQU9pRSxFQUFlL0MsS0FBS2IsRUFBSUwsSyxnQkNGakMsSUFBSWtFLEVBQUssRUFBUSxNQUNiQyxFQUFhLEVBQVEsT0FDekJwRixFQUFPQyxRQUFVLEVBQVEsT0FBb0IsU0FBVW9GLEVBQVFwRSxFQUFLekQsR0FDbEUsT0FBTzJILEVBQUdHLEVBQUVELEVBQVFwRSxFQUFLbUUsRUFBVyxFQUFHNUgsS0FDckMsU0FBVTZILEVBQVFwRSxFQUFLekQsR0FFekIsT0FEQTZILEVBQU9wRSxHQUFPekQsRUFDUDZILEksZ0JDTlRyRixFQUFPQyxTQUFXLEVBQVEsU0FBc0IsRUFBUSxLQUFSLEVBQW9CLFdBQ2xFLE9BQTRHLEdBQXJHZ0QsT0FBT3pCLGVBQWUsRUFBUSxNQUFSLENBQXlCLE9BQVEsSUFBSyxDQUFFM0MsSUFBSyxXQUFjLE9BQU8sS0FBUStELE0sZ0JDQXpHLElBQUkyQyxFQUFNLEVBQVEsT0FFbEJ2RixFQUFPQyxRQUFVZ0QsT0FBTyxLQUFLdUMscUJBQXFCLEdBQUt2QyxPQUFTLFNBQVUzQixHQUN4RSxNQUFrQixVQUFYaUUsRUFBSWpFLEdBQWtCQSxFQUFHNkIsTUFBTSxJQUFNRixPQUFPM0IsSyxVQ0pyRHRCLEVBQU9DLFFBQVUsU0FBVXFCLEdBQ3pCLE1BQXFCLGlCQUFQQSxFQUF5QixPQUFQQSxFQUE0QixtQkFBUEEsSSxVQ0R2RHRCLEVBQU9DLFNBQVUsRyxlQ0FqQixJQUFJd0YsRUFBVyxFQUFRLE9BQ25CQyxFQUFpQixFQUFRLE9BQ3pCQyxFQUFjLEVBQVEsT0FDdEJSLEVBQUtsQyxPQUFPekIsZUFFaEJ2QixFQUFRcUYsRUFBSSxFQUFRLE9BQW9CckMsT0FBT3pCLGVBQWlCLFNBQXdCUyxFQUFHa0MsRUFBR3lCLEdBSTVGLEdBSEFILEVBQVN4RCxHQUNUa0MsRUFBSXdCLEVBQVl4QixHQUFHLEdBQ25Cc0IsRUFBU0csR0FDTEYsRUFBZ0IsSUFDbEIsT0FBT1AsRUFBR2xELEVBQUdrQyxFQUFHeUIsR0FDaEIsTUFBT25MLElBQ1QsR0FBSSxRQUFTbUwsR0FBYyxRQUFTQSxFQUFZLE1BQU10RixVQUFVLDRCQUVoRSxNQURJLFVBQVdzRixJQUFZM0QsRUFBRWtDLEdBQUt5QixFQUFXcEksT0FDdEN5RSxJLGdCQ2RULElBQUlxQixFQUFNLEVBQVEsT0FDZDVCLEVBQVksRUFBUSxNQUNwQm1FLEVBQWUsRUFBUSxNQUFSLEVBQTZCLEdBQzVDQyxFQUFXLEVBQVEsTUFBUixDQUF5QixZQUV4QzlGLEVBQU9DLFFBQVUsU0FBVW9GLEVBQVFVLEdBQ2pDLElBR0k5RSxFQUhBZ0IsRUFBSVAsRUFBVTJELEdBQ2R6RSxFQUFJLEVBQ0pvRixFQUFTLEdBRWIsSUFBSy9FLEtBQU9nQixFQUFPaEIsR0FBTzZFLEdBQVV4QyxFQUFJckIsRUFBR2hCLElBQVErRSxFQUFPQyxLQUFLaEYsR0FFL0QsS0FBTzhFLEVBQU1uTyxPQUFTZ0osR0FBTzBDLEVBQUlyQixFQUFHaEIsRUFBTThFLEVBQU1uRixTQUM3Q2lGLEVBQWFHLEVBQVEvRSxJQUFRK0UsRUFBT0MsS0FBS2hGLElBRTVDLE9BQU8rRSxJLGdCQ2RULElBQUlFLEVBQVEsRUFBUSxPQUNoQkMsRUFBYyxFQUFRLE9BRTFCbkcsRUFBT0MsUUFBVWdELE9BQU9tRCxNQUFRLFNBQWNuRSxHQUM1QyxPQUFPaUUsRUFBTWpFLEVBQUdrRSxLLGNDTGxCbEcsRUFBUXFGLEVBQUksR0FBR0Usc0IsZ0JDQ2YsSUFBSWpDLEVBQVUsRUFBUSxPQUNsQmxCLEVBQU8sRUFBUSxPQUNmZ0UsRUFBUSxFQUFRLE1BQ3BCckcsRUFBT0MsUUFBVSxTQUFVcUcsRUFBS3hCLEdBQzlCLElBQUlyQyxHQUFNSixFQUFLWSxRQUFVLElBQUlxRCxJQUFRckQsT0FBT3FELEdBQ3hDQyxFQUFNLEdBQ1ZBLEVBQUlELEdBQU94QixFQUFLckMsR0FDaEJjLEVBQVFBLEVBQVFVLEVBQUlWLEVBQVFNLEVBQUl3QyxHQUFNLFdBQWM1RCxFQUFHLE1BQVEsU0FBVThELEssZ0JDUjNFLElBQUlDLEVBQWMsRUFBUSxPQUN0QkMsRUFBVSxFQUFRLE9BQ2xCL0UsRUFBWSxFQUFRLE1BQ3BCZ0YsRUFBUyxXQUNiMUcsRUFBT0MsUUFBVSxTQUFVMEcsR0FDekIsT0FBTyxTQUFVckYsR0FPZixJQU5BLElBS0lMLEVBTEFnQixFQUFJUCxFQUFVSixHQUNkOEUsRUFBT0ssRUFBUXhFLEdBQ2ZySyxFQUFTd08sRUFBS3hPLE9BQ2RnSixFQUFJLEVBQ0pvRixFQUFTLEdBRU5wTyxFQUFTZ0osR0FDZEssRUFBTW1GLEVBQUt4RixLQUNONEYsSUFBZUUsRUFBT3ZFLEtBQUtGLEVBQUdoQixJQUNqQytFLEVBQU9DLEtBQUtVLEVBQVksQ0FBQzFGLEVBQUtnQixFQUFFaEIsSUFBUWdCLEVBQUVoQixJQUc5QyxPQUFPK0UsSyxVQ2xCWGhHLEVBQU9DLFFBQVUsU0FBVTJHLEVBQVFwSixHQUNqQyxNQUFPLENBQ0xzRCxhQUF1QixFQUFUOEYsR0FDZDdGLGVBQXlCLEVBQVQ2RixHQUNoQjVGLFdBQXFCLEVBQVQ0RixHQUNacEosTUFBT0EsSyxnQkNMWCxJQUFJcUosRUFBUyxFQUFRLE1BQVIsQ0FBcUIsUUFDOUJDLEVBQU0sRUFBUSxPQUNsQjlHLEVBQU9DLFFBQVUsU0FBVWdCLEdBQ3pCLE9BQU80RixFQUFPNUYsS0FBUzRGLEVBQU81RixHQUFPNkYsRUFBSTdGLE0sZ0JDSDNDLElBQUlvQixFQUFPLEVBQVEsT0FDZmUsRUFBUyxFQUFRLE9BQ2pCMkQsRUFBUyxxQkFDVEMsRUFBUTVELEVBQU8yRCxLQUFZM0QsRUFBTzJELEdBQVUsS0FFL0MvRyxFQUFPQyxRQUFVLFNBQVVnQixFQUFLekQsR0FDL0IsT0FBT3dKLEVBQU0vRixLQUFTK0YsRUFBTS9GLFFBQWlCMEIsSUFBVm5GLEVBQXNCQSxFQUFRLE1BQ2hFLFdBQVksSUFBSXlJLEtBQUssQ0FDdEIzRCxRQUFTRCxFQUFLQyxRQUNkMkUsS0FBTSxFQUFRLE9BQWdCLE9BQVMsU0FDdkNDLFVBQVcsMEMsZ0JDVmIsSUFBSUMsRUFBWSxFQUFRLE9BQ3BCQyxFQUFNckMsS0FBS3FDLElBQ1h2UCxFQUFNa04sS0FBS2xOLElBQ2ZtSSxFQUFPQyxRQUFVLFNBQVVqSSxFQUFPSixHQUVoQyxPQURBSSxFQUFRbVAsRUFBVW5QLElBQ0gsRUFBSW9QLEVBQUlwUCxFQUFRSixFQUFRLEdBQUtDLEVBQUlHLEVBQU9KLEssVUNKekQsSUFBSXlQLEVBQU90QyxLQUFLc0MsS0FDWkMsRUFBUXZDLEtBQUt1QyxNQUNqQnRILEVBQU9DLFFBQVUsU0FBVXFCLEdBQ3pCLE9BQU9pRyxNQUFNakcsR0FBTUEsR0FBTSxHQUFLQSxFQUFLLEVBQUlnRyxFQUFRRCxHQUFNL0YsSyxlQ0h2RCxJQUFJa0csRUFBVSxFQUFRLE9BQ2xCQyxFQUFVLEVBQVEsTUFDdEJ6SCxFQUFPQyxRQUFVLFNBQVVxQixHQUN6QixPQUFPa0csRUFBUUMsRUFBUW5HLE0sZ0JDSHpCLElBQUk2RixFQUFZLEVBQVEsT0FDcEJ0UCxFQUFNa04sS0FBS2xOLElBQ2ZtSSxFQUFPQyxRQUFVLFNBQVVxQixHQUN6QixPQUFPQSxFQUFLLEVBQUl6SixFQUFJc1AsRUFBVTdGLEdBQUssa0JBQW9CLEksZ0JDSHpELElBQUltRyxFQUFVLEVBQVEsTUFDdEJ6SCxFQUFPQyxRQUFVLFNBQVVxQixHQUN6QixPQUFPMkIsT0FBT3dFLEVBQVFuRyxNLGdCQ0Z4QixJQUFJRyxFQUFXLEVBQVEsT0FHdkJ6QixFQUFPQyxRQUFVLFNBQVVxQixFQUFJMkMsR0FDN0IsSUFBS3hDLEVBQVNILEdBQUssT0FBT0EsRUFDMUIsSUFBSW1CLEVBQUk5SCxFQUNSLEdBQUlzSixHQUFrQyxtQkFBckJ4QixFQUFLbkIsRUFBR1ksWUFBNEJULEVBQVM5RyxFQUFNOEgsRUFBR04sS0FBS2IsSUFBTSxPQUFPM0csRUFDekYsR0FBZ0MsbUJBQXBCOEgsRUFBS25CLEVBQUdvRyxXQUEyQmpHLEVBQVM5RyxFQUFNOEgsRUFBR04sS0FBS2IsSUFBTSxPQUFPM0csRUFDbkYsSUFBS3NKLEdBQWtDLG1CQUFyQnhCLEVBQUtuQixFQUFHWSxZQUE0QlQsRUFBUzlHLEVBQU04SCxFQUFHTixLQUFLYixJQUFNLE9BQU8zRyxFQUMxRixNQUFNMkYsVUFBVSw2QyxVQ1ZsQixJQUFJcUgsRUFBSyxFQUNMQyxFQUFLN0MsS0FBSzhDLFNBQ2Q3SCxFQUFPQyxRQUFVLFNBQVVnQixHQUN6QixNQUFPLFVBQVU2RyxZQUFlbkYsSUFBUjFCLEVBQW9CLEdBQUtBLEVBQUssUUFBUzBHLEVBQUtDLEdBQUkxRixTQUFTLE8sZ0JDSG5GLElBQUlxQixFQUFVLEVBQVEsT0FFdEJBLEVBQVFBLEVBQVFVLEVBQUlWLEVBQVFNLEdBQUssRUFBUSxPQUFtQixTQUFVLENBQUVyQyxlQUFnQixhLGdCQ0R4RixJQUFJdUcsRUFBVyxFQUFRLE9BQ25CN0IsRUFBUSxFQUFRLE9BRXBCLEVBQVEsTUFBUixDQUF5QixRQUFRLFdBQy9CLE9BQU8sU0FBYzVFLEdBQ25CLE9BQU80RSxFQUFNNkIsRUFBU3pHLFMsZ0JDTDFCLElBQUlpQyxFQUFVLEVBQVEsT0FDbEJ5RSxFQUFVLEVBQVEsTUFBUixFQUE4QixHQUU1Q3pFLEVBQVFBLEVBQVFVLEVBQUcsU0FBVSxDQUMzQmdFLE9BQVEsU0FBZ0IzRyxHQUN0QixPQUFPMEcsRUFBUTFHLE8sdUJDTm5CdEIsRUFBT0MsUUFBVWxMLE9BQWUsU0NDNUJtVCxFQUEyQixHQUcvQixTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUgsRUFBeUJFLEdBQzVDLFFBQXFCekYsSUFBakIwRixFQUNILE9BQU9BLEVBQWFwSSxRQUdyQixJQUFJRCxFQUFTa0ksRUFBeUJFLEdBQVksQ0FHakRuSSxRQUFTLElBT1YsT0FIQXFJLEVBQW9CRixHQUFVcEksRUFBUUEsRUFBT0MsUUFBU2tJLEdBRy9DbkksRUFBT0MsUSx5Q0NJZixXLDJCQUVBbkwsR0FBRSxXQUNBLElBQUkySSxjIiwiZmlsZSI6ImVtcGxveWVlX2Zvcm0uYnVuZGxlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogUmVzcG9uc2libGUgZm9yIGNvbm5lY3RpbmcgdG8gYWRkb25zIG1hcmtldHBsYWNlLlxuICogTWFrZXMgYW4gYWRkb25zIGNvbm5lY3QgcmVxdWVzdCB0byB0aGUgc2VydmVyLCBkaXNwbGF5cyBlcnJvciBtZXNzYWdlcyBpZiBpdCBmYWlscy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWRkb25zQ29ubmVjdG9yIHtcbiAgY29uc3RydWN0b3IoXG4gICAgYWRkb25zQ29ubmVjdEZvcm1TZWxlY3RvcixcbiAgICBsb2FkaW5nU3Bpbm5lclNlbGVjdG9yLFxuICApIHtcbiAgICB0aGlzLmFkZG9uc0Nvbm5lY3RGb3JtU2VsZWN0b3IgPSBhZGRvbnNDb25uZWN0Rm9ybVNlbGVjdG9yO1xuICAgIHRoaXMuJGxvYWRpbmdTcGlubmVyID0gJChsb2FkaW5nU3Bpbm5lclNlbGVjdG9yKTtcblxuICAgIHRoaXMuaW5pdEV2ZW50cygpO1xuXG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgZXZlbnRzIHJlbGF0ZWQgdG8gY29ubmVjdGlvbiB0byBhZGRvbnMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpbml0RXZlbnRzKCkge1xuICAgICQoJ2JvZHknKS5vbihcbiAgICAgICdzdWJtaXQnLFxuICAgICAgdGhpcy5hZGRvbnNDb25uZWN0Rm9ybVNlbGVjdG9yLFxuICAgICAgKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0ICRmb3JtID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5jb25uZWN0KCRmb3JtLmF0dHIoJ2FjdGlvbicpLCAkZm9ybS5zZXJpYWxpemUoKSk7XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRG8gYSBQT1NUIHJlcXVlc3QgdG8gY29ubmVjdCB0byBhZGRvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfSBhZGRvbnNDb25uZWN0VXJsXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBmb3JtRGF0YVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29ubmVjdChhZGRvbnNDb25uZWN0VXJsLCBmb3JtRGF0YSkge1xuICAgICQuYWpheCh7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHVybDogYWRkb25zQ29ubmVjdFVybCxcbiAgICAgIGRhdGFUeXBlOiAnanNvbicsXG4gICAgICBkYXRhOiBmb3JtRGF0YSxcbiAgICAgIGJlZm9yZVNlbmQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy4kbG9hZGluZ1NwaW5uZXIuc2hvdygpO1xuICAgICAgICAkKCdidXR0b24uYnRuW3R5cGU9XCJzdWJtaXRcIl0nLCB0aGlzLmFkZG9uc0Nvbm5lY3RGb3JtU2VsZWN0b3IpLmhpZGUoKTtcbiAgICAgIH0sXG4gICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzID09PSAxKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICQuZ3Jvd2wuZXJyb3Ioe1xuICAgICAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLm1lc3NhZ2UsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJGxvYWRpbmdTcGlubmVyLmhpZGUoKTtcbiAgICAgICAgJCgnYnV0dG9uLmJ0blt0eXBlPVwic3VibWl0XCJdJywgdGhpcy5hZGRvbnNDb25uZWN0Rm9ybVNlbGVjdG9yKS5mYWRlSW4oKTtcbiAgICAgIH1cbiAgICB9LCAoKSA9PiB7XG4gICAgICAkLmdyb3dsLmVycm9yKHtcbiAgICAgICAgbWVzc2FnZTogJCh0aGlzLmFkZG9uc0Nvbm5lY3RGb3JtU2VsZWN0b3IpLmRhdGEoJ2Vycm9yLW1lc3NhZ2UnKSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLiRsb2FkaW5nU3Bpbm5lci5oaWRlKCk7XG4gICAgICAkKCdidXR0b24uYnRuW3R5cGU9XCJzdWJtaXRcIl0nLCB0aGlzLmFkZG9uc0Nvbm5lY3RGb3JtU2VsZWN0b3IpLnNob3coKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgcGFzc3dvcmQgYW5kIGluZm9ybXMgYWJvdXQgaXQncyBzdHJlbmd0aC5cbiAqIFlvdSBjYW4gcGFzcyBhIHBhc3N3b3JkIGlucHV0IHRvIHdhdGNoIHRoZSBwYXNzd29yZCBzdHJlbmd0aCBhbmQgZGlzcGxheSBmZWVkYmFjayBtZXNzYWdlcy5cbiAqIFlvdSBjYW4gYWxzbyBnZW5lcmF0ZSBhIHJhbmRvbSBwYXNzd29yZCBpbnRvIGFuIGlucHV0LlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFuZ2VQYXNzd29yZEhhbmRsZXIge1xuICBjb25zdHJ1Y3RvcihwYXNzd29yZFN0cmVuZ3RoRmVlZGJhY2tDb250YWluZXJTZWxlY3Rvciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gTWluaW11bSBsZW5ndGggb2YgdGhlIGdlbmVyYXRlZCBwYXNzd29yZC5cbiAgICB0aGlzLm1pbkxlbmd0aCA9IG9wdGlvbnMubWluTGVuZ3RoIHx8IDg7XG5cbiAgICAvLyBGZWVkYmFjayBjb250YWluZXIgaG9sZHMgbWVzc2FnZXMgcmVwcmVzZW50aW5nIHBhc3N3b3JkIHN0cmVuZ3RoLlxuICAgIHRoaXMuJGZlZWRiYWNrQ29udGFpbmVyID0gJChwYXNzd29yZFN0cmVuZ3RoRmVlZGJhY2tDb250YWluZXJTZWxlY3Rvcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgd2F0Y2hQYXNzd29yZFN0cmVuZ3RoOiAoJGlucHV0KSA9PiB0aGlzLndhdGNoUGFzc3dvcmRTdHJlbmd0aCgkaW5wdXQpLFxuICAgICAgZ2VuZXJhdGVQYXNzd29yZDogKCRpbnB1dCkgPT4gdGhpcy5nZW5lcmF0ZVBhc3N3b3JkKCRpbnB1dCksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaCBwYXNzd29yZCwgd2hpY2ggaXMgZW50ZXJlZCBpbiB0aGUgaW5wdXQsIHN0cmVuZ3RoIGFuZCBpbmZvcm0gYWJvdXQgaXQuXG4gICAqXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkaW5wdXQgdGhlIGlucHV0IHRvIHdhdGNoLlxuICAgKi9cbiAgd2F0Y2hQYXNzd29yZFN0cmVuZ3RoKCRpbnB1dCkge1xuICAgICQucGFzc3kucmVxdWlyZW1lbnRzLmxlbmd0aC5taW4gPSB0aGlzLm1pbkxlbmd0aDtcbiAgICAkLnBhc3N5LnJlcXVpcmVtZW50cy5jaGFyYWN0ZXJzID0gJ0RJR0lUJztcblxuICAgICRpbnB1dC5lYWNoKChpbmRleCwgZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgJG91dHB1dENvbnRhaW5lciA9ICQoJzxzcGFuPicpO1xuXG4gICAgICAkb3V0cHV0Q29udGFpbmVyLmluc2VydEFmdGVyKCQoZWxlbWVudCkpO1xuXG4gICAgICAkKGVsZW1lbnQpLnBhc3N5KChzdHJlbmd0aCwgdmFsaWQpID0+IHtcbiAgICAgICAgdGhpcy5kaXNwbGF5RmVlZGJhY2soJG91dHB1dENvbnRhaW5lciwgc3RyZW5ndGgsIHZhbGlkKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHBhc3N3b3JkIGFuZCBmaWxscyBpdCB0byBnaXZlbiBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRpbnB1dCB0aGUgaW5wdXQgdG8gZmlsbCB0aGUgcGFzc3dvcmQgaW50by5cbiAgICovXG4gIGdlbmVyYXRlUGFzc3dvcmQoJGlucHV0KSB7XG4gICAgJGlucHV0LnBhc3N5KCdnZW5lcmF0ZScsIHRoaXMubWluTGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGZlZWRiYWNrIGFib3V0IHBhc3N3b3JkJ3Mgc3RyZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkb3V0cHV0Q29udGFpbmVyIGEgY29udGFpbmVyIHRvIHB1dCBmZWVkYmFjayBvdXRwdXQgaW50by5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHBhc3N3b3JkU3RyZW5ndGhcbiAgICogQHBhcmFtIHtib29sZWFufSBpc1Bhc3N3b3JkVmFsaWRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRpc3BsYXlGZWVkYmFjaygkb3V0cHV0Q29udGFpbmVyLCBwYXNzd29yZFN0cmVuZ3RoLCBpc1Bhc3N3b3JkVmFsaWQpIHtcbiAgICBjb25zdCBmZWVkYmFjayA9IHRoaXMuZ2V0UGFzc3dvcmRTdHJlbmd0aEZlZWRiYWNrKHBhc3N3b3JkU3RyZW5ndGgpO1xuICAgICRvdXRwdXRDb250YWluZXIudGV4dChmZWVkYmFjay5tZXNzYWdlKTtcbiAgICAkb3V0cHV0Q29udGFpbmVyLnJlbW92ZUNsYXNzKCd0ZXh0LWRhbmdlciB0ZXh0LXdhcm5pbmcgdGV4dC1zdWNjZXNzJyk7XG4gICAgJG91dHB1dENvbnRhaW5lci5hZGRDbGFzcyhmZWVkYmFjay5lbGVtZW50Q2xhc3MpO1xuICAgICRvdXRwdXRDb250YWluZXIudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScsICFpc1Bhc3N3b3JkVmFsaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBmZWVkYmFjayB0aGF0IGRlc2NyaWJlcyBnaXZlbiBwYXNzd29yZCBzdHJlbmd0aC5cbiAgICogUmVzcG9uc2UgY29udGFpbnMgdGV4dCBtZXNzYWdlIGFuZCBlbGVtZW50IGNsYXNzLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RyZW5ndGhcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldFBhc3N3b3JkU3RyZW5ndGhGZWVkYmFjayhzdHJlbmd0aCkge1xuICAgIHN3aXRjaCAoc3RyZW5ndGgpIHtcbiAgICAgIGNhc2UgJC5wYXNzeS5zdHJlbmd0aC5MT1c6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogdGhpcy4kZmVlZGJhY2tDb250YWluZXIuZmluZCgnLnN0cmVuZ3RoLWxvdycpLnRleHQoKSxcbiAgICAgICAgICBlbGVtZW50Q2xhc3M6ICd0ZXh0LWRhbmdlcicsXG4gICAgICAgIH07XG5cbiAgICAgIGNhc2UgJC5wYXNzeS5zdHJlbmd0aC5NRURJVU06XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWVzc2FnZTogdGhpcy4kZmVlZGJhY2tDb250YWluZXIuZmluZCgnLnN0cmVuZ3RoLW1lZGl1bScpLnRleHQoKSxcbiAgICAgICAgICBlbGVtZW50Q2xhc3M6ICd0ZXh0LXdhcm5pbmcnLFxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICQucGFzc3kuc3RyZW5ndGguSElHSDpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLiRmZWVkYmFja0NvbnRhaW5lci5maW5kKCcuc3RyZW5ndGgtaGlnaCcpLnRleHQoKSxcbiAgICAgICAgICBlbGVtZW50Q2xhc3M6ICd0ZXh0LXN1Y2Nlc3MnLFxuICAgICAgICB9O1xuXG4gICAgICBjYXNlICQucGFzc3kuc3RyZW5ndGguRVhUUkVNRTpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLiRmZWVkYmFja0NvbnRhaW5lci5maW5kKCcuc3RyZW5ndGgtZXh0cmVtZScpLnRleHQoKSxcbiAgICAgICAgICBlbGVtZW50Q2xhc3M6ICd0ZXh0LXN1Y2Nlc3MnLFxuICAgICAgICB9O1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgcGFzc3dvcmQgc3RyZW5ndGggaW5kaWNhdG9yLicpO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgQ2hhbmdlUGFzc3dvcmRIYW5kbGVyIGZyb20gJy4uL2NoYW5nZS1wYXNzd29yZC1oYW5kbGVyJztcbmltcG9ydCBQYXNzd29yZFZhbGlkYXRvciBmcm9tICcuLi9wYXNzd29yZC12YWxpZGF0b3InO1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogQ2xhc3MgcmVzcG9uc2libGUgZm9yIGFjdGlvbnMgcmVsYXRlZCB0byBcImNoYW5nZSBwYXNzd29yZFwiIGZvcm0gdHlwZS5cbiAqIEdlbmVyYXRlcyByYW5kb20gcGFzc3dvcmRzLCB2YWxpZGF0ZXMgbmV3IHBhc3N3b3JkIGFuZCBpdCdzIGNvbmZpcm1hdGlvbixcbiAqIGRpc3BsYXlzIGVycm9yIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdmFsaWRhdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbmdlUGFzc3dvcmRDb250cm9sIHtcbiAgY29uc3RydWN0b3IoXG4gICAgaW5wdXRzQmxvY2tTZWxlY3RvcixcbiAgICBzaG93QnV0dG9uU2VsZWN0b3IsXG4gICAgaGlkZUJ1dHRvblNlbGVjdG9yLFxuICAgIGdlbmVyYXRlUGFzc3dvcmRCdXR0b25TZWxlY3RvcixcbiAgICBvbGRQYXNzd29yZElucHV0U2VsZWN0b3IsXG4gICAgbmV3UGFzc3dvcmRJbnB1dFNlbGVjdG9yLFxuICAgIGNvbmZpcm1OZXdQYXNzd29yZElucHV0U2VsZWN0b3IsXG4gICAgZ2VuZXJhdGVkUGFzc3dvcmREaXNwbGF5U2VsZWN0b3IsXG4gICAgcGFzc3dvcmRTdHJlbmd0aEZlZWRiYWNrQ29udGFpbmVyU2VsZWN0b3IsXG4gICkge1xuICAgIC8vIEJsb2NrIHRoYXQgY29udGFpbnMgcGFzc3dvcmQgaW5wdXRzXG4gICAgdGhpcy4kaW5wdXRzQmxvY2sgPSAkKGlucHV0c0Jsb2NrU2VsZWN0b3IpO1xuXG4gICAgLy8gQnV0dG9uIHRoYXQgc2hvd3MgdGhlIHBhc3N3b3JkIGlucHV0cyBibG9ja1xuICAgIHRoaXMuc2hvd0J1dHRvblNlbGVjdG9yID0gc2hvd0J1dHRvblNlbGVjdG9yO1xuXG4gICAgLy8gQnV0dG9uIHRoYXQgaGlkZXMgdGhlIHBhc3N3b3JkIGlucHV0cyBibG9ja1xuICAgIHRoaXMuaGlkZUJ1dHRvblNlbGVjdG9yID0gaGlkZUJ1dHRvblNlbGVjdG9yO1xuXG4gICAgLy8gQnV0dG9uIHRoYXQgZ2VuZXJhdGVzIGEgcmFuZG9tIHBhc3N3b3JkXG4gICAgdGhpcy5nZW5lcmF0ZVBhc3N3b3JkQnV0dG9uU2VsZWN0b3IgPSBnZW5lcmF0ZVBhc3N3b3JkQnV0dG9uU2VsZWN0b3I7XG5cbiAgICAvLyBJbnB1dCB0byBlbnRlciBvbGQgcGFzc3dvcmRcbiAgICB0aGlzLm9sZFBhc3N3b3JkSW5wdXRTZWxlY3RvciA9IG9sZFBhc3N3b3JkSW5wdXRTZWxlY3RvcjtcblxuICAgIC8vIElucHV0IHRvIGVudGVyIG5ldyBwYXNzd29yZFxuICAgIHRoaXMubmV3UGFzc3dvcmRJbnB1dFNlbGVjdG9yID0gbmV3UGFzc3dvcmRJbnB1dFNlbGVjdG9yO1xuXG4gICAgLy8gSW5wdXQgdG8gY29uZmlybSB0aGUgbmV3IHBhc3N3b3JkXG4gICAgdGhpcy5jb25maXJtTmV3UGFzc3dvcmRJbnB1dFNlbGVjdG9yID0gY29uZmlybU5ld1Bhc3N3b3JkSW5wdXRTZWxlY3RvcjtcblxuICAgIC8vIElucHV0IHRoYXQgZGlzcGxheXMgZ2VuZXJhdGVkIHJhbmRvbSBwYXNzd29yZFxuICAgIHRoaXMuZ2VuZXJhdGVkUGFzc3dvcmREaXNwbGF5U2VsZWN0b3IgPSBnZW5lcmF0ZWRQYXNzd29yZERpc3BsYXlTZWxlY3RvcjtcblxuICAgIC8vIE1haW4gaW5wdXQgZm9yIHBhc3N3b3JkIGdlbmVyYXRpb25cbiAgICB0aGlzLiRuZXdQYXNzd29yZElucHV0cyA9IHRoaXMuJGlucHV0c0Jsb2NrXG4gICAgICAuZmluZCh0aGlzLm5ld1Bhc3N3b3JkSW5wdXRTZWxlY3Rvcik7XG5cbiAgICAvLyBHZW5lcmF0ZWQgcGFzc3dvcmQgd2lsbCBiZSBjb3BpZWQgdG8gdGhlc2UgaW5wdXRzXG4gICAgdGhpcy4kY29weVBhc3N3b3JkSW5wdXRzID0gdGhpcy4kaW5wdXRzQmxvY2tcbiAgICAgIC5maW5kKHRoaXMuY29uZmlybU5ld1Bhc3N3b3JkSW5wdXRTZWxlY3RvcilcbiAgICAgIC5hZGQodGhpcy5nZW5lcmF0ZWRQYXNzd29yZERpc3BsYXlTZWxlY3Rvcik7XG5cbiAgICAvLyBBbGwgaW5wdXRzIGluIHRoZSBjaGFuZ2UgcGFzc3dvcmQgYmxvY2ssIHRoYXQgYXJlIHN1Ym1pdHRhYmxlIHdpdGggdGhlIGZvcm0uXG4gICAgdGhpcy4kc3VibWl0dGFibGVJbnB1dHMgPSB0aGlzLiRpbnB1dHNCbG9ja1xuICAgICAgLmZpbmQodGhpcy5vbGRQYXNzd29yZElucHV0U2VsZWN0b3IpXG4gICAgICAuYWRkKHRoaXMubmV3UGFzc3dvcmRJbnB1dFNlbGVjdG9yKVxuICAgICAgLmFkZCh0aGlzLmNvbmZpcm1OZXdQYXNzd29yZElucHV0U2VsZWN0b3IpO1xuXG4gICAgdGhpcy5wYXNzd29yZEhhbmRsZXIgPSBuZXcgQ2hhbmdlUGFzc3dvcmRIYW5kbGVyKFxuICAgICAgcGFzc3dvcmRTdHJlbmd0aEZlZWRiYWNrQ29udGFpbmVyU2VsZWN0b3IsXG4gICAgKTtcblxuICAgIHRoaXMucGFzc3dvcmRWYWxpZGF0b3IgPSBuZXcgUGFzc3dvcmRWYWxpZGF0b3IoXG4gICAgICB0aGlzLm5ld1Bhc3N3b3JkSW5wdXRTZWxlY3RvcixcbiAgICAgIHRoaXMuY29uZmlybU5ld1Bhc3N3b3JkSW5wdXRTZWxlY3RvcixcbiAgICApO1xuXG4gICAgdGhpcy5oaWRlSW5wdXRzQmxvY2soKTtcbiAgICB0aGlzLmluaXRFdmVudHMoKTtcblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGV2ZW50cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGluaXRFdmVudHMoKSB7XG4gICAgLy8gU2hvdyB0aGUgaW5wdXRzIGJsb2NrIHdoZW4gc2hvdyBidXR0b24gaXMgY2xpY2tlZFxuICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsIHRoaXMuc2hvd0J1dHRvblNlbGVjdG9yLCAoZSkgPT4ge1xuICAgICAgdGhpcy5oaWRlKCQoZS5jdXJyZW50VGFyZ2V0KSk7XG4gICAgICB0aGlzLnNob3dJbnB1dHNCbG9jaygpO1xuICAgIH0pO1xuXG4gICAgJChkb2N1bWVudCkub24oJ2NsaWNrJywgdGhpcy5oaWRlQnV0dG9uU2VsZWN0b3IsICgpID0+IHtcbiAgICAgIHRoaXMuaGlkZUlucHV0c0Jsb2NrKCk7XG4gICAgICB0aGlzLnNob3coJCh0aGlzLnNob3dCdXR0b25TZWxlY3RvcikpO1xuICAgIH0pO1xuXG4gICAgLy8gV2F0Y2ggYW5kIGRpc3BsYXkgZmVlZGJhY2sgYWJvdXQgcGFzc3dvcmQncyBzdHJlbmd0aFxuICAgIHRoaXMucGFzc3dvcmRIYW5kbGVyLndhdGNoUGFzc3dvcmRTdHJlbmd0aCh0aGlzLiRuZXdQYXNzd29yZElucHV0cyk7XG5cbiAgICAkKGRvY3VtZW50KS5vbignY2xpY2snLCB0aGlzLmdlbmVyYXRlUGFzc3dvcmRCdXR0b25TZWxlY3RvciwgKCkgPT4ge1xuICAgICAgLy8gR2VuZXJhdGUgdGhlIHBhc3N3b3JkIGludG8gbWFpbiBpbnB1dC5cbiAgICAgIHRoaXMucGFzc3dvcmRIYW5kbGVyLmdlbmVyYXRlUGFzc3dvcmQodGhpcy4kbmV3UGFzc3dvcmRJbnB1dHMpO1xuXG4gICAgICAvLyBDb3B5IHRoZSBnZW5lcmF0ZWQgcGFzc3dvcmQgZnJvbSBtYWluIGlucHV0IHRvIGFkZGl0aW9uYWwgaW5wdXRzXG4gICAgICB0aGlzLiRjb3B5UGFzc3dvcmRJbnB1dHMudmFsKHRoaXMuJG5ld1Bhc3N3b3JkSW5wdXRzLnZhbCgpKTtcbiAgICAgIHRoaXMuY2hlY2tQYXNzd29yZFZhbGlkaXR5KCk7XG4gICAgfSk7XG5cbiAgICAvLyBWYWxpZGF0ZSBuZXcgcGFzc3dvcmQgYW5kIGl0J3MgY29uZmlybWF0aW9uIHdoZW4gYW55IG9mIHRoZSBpbnB1dHMgaXMgY2hhbmdlZFxuICAgICQoZG9jdW1lbnQpLm9uKFxuICAgICAgJ2tleXVwJyxcbiAgICAgIGAke3RoaXMubmV3UGFzc3dvcmRJbnB1dFNlbGVjdG9yfSwke3RoaXMuY29uZmlybU5ld1Bhc3N3b3JkSW5wdXRTZWxlY3Rvcn1gLFxuICAgICAgKCkgPT4ge1xuICAgICAgICB0aGlzLmNoZWNrUGFzc3dvcmRWYWxpZGl0eSgpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gUHJldmVudCBzdWJtaXR0aW5nIHRoZSBmb3JtIGlmIG5ldyBwYXNzd29yZCBpcyBub3QgdmFsaWRcbiAgICAkKGRvY3VtZW50KS5vbignc3VibWl0JywgJCh0aGlzLm9sZFBhc3N3b3JkSW5wdXRTZWxlY3RvcikuY2xvc2VzdCgnZm9ybScpLCAoZXZlbnQpID0+IHtcbiAgICAgIC8vIElmIHBhc3N3b3JkIGlucHV0IGlzIGRpc2FibGVkIC0gd2UgZG9uJ3QgbmVlZCB0byB2YWxpZGF0ZSBpdC5cbiAgICAgIGlmICgkKHRoaXMub2xkUGFzc3dvcmRJbnB1dFNlbGVjdG9yKS5pcygnOmRpc2FibGVkJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMucGFzc3dvcmRWYWxpZGF0b3IuaXNQYXNzd29yZFZhbGlkKCkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwYXNzd29yZCBpcyB2YWxpZCwgc2hvdyBlcnJvciBtZXNzYWdlcyBpZiBpdCdzIG5vdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNoZWNrUGFzc3dvcmRWYWxpZGl0eSgpIHtcbiAgICBjb25zdCAkZmlyc3RQYXNzd29yZEVycm9yQ29udGFpbmVyID0gJCh0aGlzLm5ld1Bhc3N3b3JkSW5wdXRTZWxlY3RvcikucGFyZW50KCkuZmluZCgnLmZvcm0tdGV4dCcpO1xuICAgIGNvbnN0ICRzZWNvbmRQYXNzd29yZEVycm9yQ29udGFpbmVyID0gJCh0aGlzLmNvbmZpcm1OZXdQYXNzd29yZElucHV0U2VsZWN0b3IpLnBhcmVudCgpLmZpbmQoJy5mb3JtLXRleHQnKTtcblxuICAgICRmaXJzdFBhc3N3b3JkRXJyb3JDb250YWluZXJcbiAgICAgIC50ZXh0KHRoaXMuZ2V0UGFzc3dvcmRMZW5ndGhWYWxpZGF0aW9uTWVzc2FnZSgpKVxuICAgICAgLnRvZ2dsZUNsYXNzKCd0ZXh0LWRhbmdlcicsICF0aGlzLnBhc3N3b3JkVmFsaWRhdG9yLmlzUGFzc3dvcmRMZW5ndGhWYWxpZCgpKTtcbiAgICAkc2Vjb25kUGFzc3dvcmRFcnJvckNvbnRhaW5lclxuICAgICAgLnRleHQodGhpcy5nZXRQYXNzd29yZENvbmZpcm1hdGlvblZhbGlkYXRpb25NZXNzYWdlKCkpXG4gICAgICAudG9nZ2xlQ2xhc3MoJ3RleHQtZGFuZ2VyJywgIXRoaXMucGFzc3dvcmRWYWxpZGF0b3IuaXNQYXNzd29yZE1hdGNoaW5nQ29uZmlybWF0aW9uKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwYXNzd29yZCBjb25maXJtYXRpb24gdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7U3RyaW5nfVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0UGFzc3dvcmRDb25maXJtYXRpb25WYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICBpZiAoIXRoaXMucGFzc3dvcmRWYWxpZGF0b3IuaXNQYXNzd29yZE1hdGNoaW5nQ29uZmlybWF0aW9uKCkpIHtcbiAgICAgIHJldHVybiAkKHRoaXMuY29uZmlybU5ld1Bhc3N3b3JkSW5wdXRTZWxlY3RvcikuZGF0YSgnaW52YWxpZC1wYXNzd29yZCcpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGFzc3dvcmQgbGVuZ3RoIHZhbGlkYXRpb24gbWVzc2FnZS5cbiAgICpcbiAgICogQHJldHVybnMge1N0cmluZ31cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGdldFBhc3N3b3JkTGVuZ3RoVmFsaWRhdGlvbk1lc3NhZ2UoKSB7XG4gICAgaWYgKHRoaXMucGFzc3dvcmRWYWxpZGF0b3IuaXNQYXNzd29yZFRvb1Nob3J0KCkpIHtcbiAgICAgIHJldHVybiAkKHRoaXMubmV3UGFzc3dvcmRJbnB1dFNlbGVjdG9yKS5kYXRhKCdwYXNzd29yZC10b28tc2hvcnQnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYXNzd29yZFZhbGlkYXRvci5pc1Bhc3N3b3JkVG9vTG9uZygpKSB7XG4gICAgICByZXR1cm4gJCh0aGlzLm5ld1Bhc3N3b3JkSW5wdXRTZWxlY3RvcikuZGF0YSgncGFzc3dvcmQtdG9vLWxvbmcnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyB0aGUgcGFzc3dvcmQgaW5wdXRzIGJsb2NrLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgc2hvd0lucHV0c0Jsb2NrKCkge1xuICAgIHRoaXMuc2hvdyh0aGlzLiRpbnB1dHNCbG9jayk7XG4gICAgdGhpcy4kc3VibWl0dGFibGVJbnB1dHMucmVtb3ZlQXR0cignZGlzYWJsZWQnKTtcbiAgICB0aGlzLiRzdWJtaXR0YWJsZUlucHV0cy5hdHRyKCdyZXF1aXJlZCcsICdyZXF1aXJlZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgdGhlIHBhc3N3b3JkIGlucHV0cyBibG9jay5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGhpZGVJbnB1dHNCbG9jaygpIHtcbiAgICB0aGlzLmhpZGUodGhpcy4kaW5wdXRzQmxvY2spO1xuICAgIHRoaXMuJHN1Ym1pdHRhYmxlSW5wdXRzLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7XG4gICAgdGhpcy4kc3VibWl0dGFibGVJbnB1dHMucmVtb3ZlQXR0cigncmVxdWlyZWQnKTtcbiAgICB0aGlzLiRpbnB1dHNCbG9jay5maW5kKCdpbnB1dCcpLnZhbCgnJyk7XG4gICAgdGhpcy4kaW5wdXRzQmxvY2suZmluZCgnLmZvcm0tdGV4dCcpLnRleHQoJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgYW4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRlbFxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaGlkZSgkZWwpIHtcbiAgICAkZWwuYWRkQ2xhc3MoJ2Qtbm9uZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgaGlkZGVuIGVsZW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkZWxcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHNob3coJGVsKSB7XG4gICAgJGVsLnJlbW92ZUNsYXNzKCdkLW5vbmUnKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5jb25zdCB7JH0gPSB3aW5kb3c7XG5cbi8qKlxuICogSGFuZGxlcyBVSSBpbnRlcmFjdGlvbnMgb2YgY2hvaWNlIHRyZWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hvaWNlVHJlZSB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdHJlZVNlbGVjdG9yXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih0cmVlU2VsZWN0b3IpIHtcbiAgICB0aGlzLiRjb250YWluZXIgPSAkKHRyZWVTZWxlY3Rvcik7XG5cbiAgICB0aGlzLiRjb250YWluZXIub24oJ2NsaWNrJywgJy5qcy1pbnB1dC13cmFwcGVyJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCAkaW5wdXRXcmFwcGVyID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICAgICAgdGhpcy50b2dnbGVDaGlsZFRyZWUoJGlucHV0V3JhcHBlcik7XG4gICAgfSk7XG5cbiAgICB0aGlzLiRjb250YWluZXIub24oJ2NsaWNrJywgJy5qcy10b2dnbGUtY2hvaWNlLXRyZWUtYWN0aW9uJywgKGV2ZW50KSA9PiB7XG4gICAgICBjb25zdCAkYWN0aW9uID0gJChldmVudC5jdXJyZW50VGFyZ2V0KTtcblxuICAgICAgdGhpcy50b2dnbGVUcmVlKCRhY3Rpb24pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVuYWJsZUF1dG9DaGVja0NoaWxkcmVuOiAoKSA9PiB0aGlzLmVuYWJsZUF1dG9DaGVja0NoaWxkcmVuKCksXG4gICAgICBlbmFibGVBbGxJbnB1dHM6ICgpID0+IHRoaXMuZW5hYmxlQWxsSW5wdXRzKCksXG4gICAgICBkaXNhYmxlQWxsSW5wdXRzOiAoKSA9PiB0aGlzLmRpc2FibGVBbGxJbnB1dHMoKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBhdXRvbWF0aWMgY2hlY2svdW5jaGVjayBvZiBjbGlja2VkIGl0ZW0ncyBjaGlsZHJlbi5cbiAgICovXG4gIGVuYWJsZUF1dG9DaGVja0NoaWxkcmVuKCkge1xuICAgIHRoaXMuJGNvbnRhaW5lci5vbignY2hhbmdlJywgJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScsIChldmVudCkgPT4ge1xuICAgICAgY29uc3QgJGNsaWNrZWRDaGVja2JveCA9ICQoZXZlbnQuY3VycmVudFRhcmdldCk7XG4gICAgICBjb25zdCAkaXRlbVdpdGhDaGlsZHJlbiA9ICRjbGlja2VkQ2hlY2tib3guY2xvc2VzdCgnbGknKTtcblxuICAgICAgJGl0ZW1XaXRoQ2hpbGRyZW5cbiAgICAgICAgLmZpbmQoJ3VsIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXScpXG4gICAgICAgIC5wcm9wKCdjaGVja2VkJywgJGNsaWNrZWRDaGVja2JveC5pcygnOmNoZWNrZWQnKSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIGFsbCBpbnB1dHMgaW4gdGhlIGNob2ljZSB0cmVlLlxuICAgKi9cbiAgZW5hYmxlQWxsSW5wdXRzKCkge1xuICAgIHRoaXMuJGNvbnRhaW5lci5maW5kKCdpbnB1dCcpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7XG4gIH1cblxuICAvKipcbiAgICogRGlzYWJsZSBhbGwgaW5wdXRzIGluIHRoZSBjaG9pY2UgdHJlZS5cbiAgICovXG4gIGRpc2FibGVBbGxJbnB1dHMoKSB7XG4gICAgdGhpcy4kY29udGFpbmVyLmZpbmQoJ2lucHV0JykuYXR0cignZGlzYWJsZWQnLCAnZGlzYWJsZWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsYXBzZSBvciBleHBhbmQgc3ViLXRyZWUgZm9yIHNpbmdsZSBwYXJlbnRcbiAgICpcbiAgICogQHBhcmFtIHtqUXVlcnl9ICRpbnB1dFdyYXBwZXJcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHRvZ2dsZUNoaWxkVHJlZSgkaW5wdXRXcmFwcGVyKSB7XG4gICAgY29uc3QgJHBhcmVudFdyYXBwZXIgPSAkaW5wdXRXcmFwcGVyLmNsb3Nlc3QoJ2xpJyk7XG5cbiAgICBpZiAoJHBhcmVudFdyYXBwZXIuaGFzQ2xhc3MoJ2V4cGFuZGVkJykpIHtcbiAgICAgICRwYXJlbnRXcmFwcGVyXG4gICAgICAgIC5yZW1vdmVDbGFzcygnZXhwYW5kZWQnKVxuICAgICAgICAuYWRkQ2xhc3MoJ2NvbGxhcHNlZCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCRwYXJlbnRXcmFwcGVyLmhhc0NsYXNzKCdjb2xsYXBzZWQnKSkge1xuICAgICAgJHBhcmVudFdyYXBwZXJcbiAgICAgICAgLnJlbW92ZUNsYXNzKCdjb2xsYXBzZWQnKVxuICAgICAgICAuYWRkQ2xhc3MoJ2V4cGFuZGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbGxhcHNlIG9yIGV4cGFuZCB3aG9sZSB0cmVlXG4gICAqXG4gICAqIEBwYXJhbSB7alF1ZXJ5fSAkYWN0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0b2dnbGVUcmVlKCRhY3Rpb24pIHtcbiAgICBjb25zdCAkcGFyZW50Q29udGFpbmVyID0gJGFjdGlvbi5jbG9zZXN0KCcuanMtY2hvaWNlLXRyZWUtY29udGFpbmVyJyk7XG4gICAgY29uc3QgYWN0aW9uID0gJGFjdGlvbi5kYXRhKCdhY3Rpb24nKTtcblxuICAgIC8vIHRvZ2dsZSBhY3Rpb24gY29uZmlndXJhdGlvblxuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIGFkZENsYXNzOiB7XG4gICAgICAgIGV4cGFuZDogJ2V4cGFuZGVkJyxcbiAgICAgICAgY29sbGFwc2U6ICdjb2xsYXBzZWQnLFxuICAgICAgfSxcbiAgICAgIHJlbW92ZUNsYXNzOiB7XG4gICAgICAgIGV4cGFuZDogJ2NvbGxhcHNlZCcsXG4gICAgICAgIGNvbGxhcHNlOiAnZXhwYW5kZWQnLFxuICAgICAgfSxcbiAgICAgIG5leHRBY3Rpb246IHtcbiAgICAgICAgZXhwYW5kOiAnY29sbGFwc2UnLFxuICAgICAgICBjb2xsYXBzZTogJ2V4cGFuZCcsXG4gICAgICB9LFxuICAgICAgdGV4dDoge1xuICAgICAgICBleHBhbmQ6ICdjb2xsYXBzZWQtdGV4dCcsXG4gICAgICAgIGNvbGxhcHNlOiAnZXhwYW5kZWQtdGV4dCcsXG4gICAgICB9LFxuICAgICAgaWNvbjoge1xuICAgICAgICBleHBhbmQ6ICdjb2xsYXBzZWQtaWNvbicsXG4gICAgICAgIGNvbGxhcHNlOiAnZXhwYW5kZWQtaWNvbicsXG4gICAgICB9LFxuICAgIH07XG5cbiAgICAkcGFyZW50Q29udGFpbmVyLmZpbmQoJ2xpJykuZWFjaCgoaW5kZXgsIGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0ICRpdGVtID0gJChpdGVtKTtcblxuICAgICAgaWYgKCRpdGVtLmhhc0NsYXNzKGNvbmZpZy5yZW1vdmVDbGFzc1thY3Rpb25dKSkge1xuICAgICAgICAkaXRlbS5yZW1vdmVDbGFzcyhjb25maWcucmVtb3ZlQ2xhc3NbYWN0aW9uXSlcbiAgICAgICAgICAuYWRkQ2xhc3MoY29uZmlnLmFkZENsYXNzW2FjdGlvbl0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgJGFjdGlvbi5kYXRhKCdhY3Rpb24nLCBjb25maWcubmV4dEFjdGlvblthY3Rpb25dKTtcbiAgICAkYWN0aW9uLmZpbmQoJy5tYXRlcmlhbC1pY29ucycpLnRleHQoJGFjdGlvbi5kYXRhKGNvbmZpZy5pY29uW2FjdGlvbl0pKTtcbiAgICAkYWN0aW9uLmZpbmQoJy5qcy10b2dnbGUtdGV4dCcpLnRleHQoJGFjdGlvbi5kYXRhKGNvbmZpZy50ZXh0W2FjdGlvbl0pKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG4vKipcbiAqIENsYXNzIHJlc3BvbnNpYmxlIGZvciBjaGVja2luZyBwYXNzd29yZCdzIHZhbGlkaXR5LlxuICogQ2FuIHZhbGlkYXRlIGVudGVyZWQgcGFzc3dvcmQncyBsZW5ndGggYWdhaW5zdCBtaW4vbWF4IHZhbHVlcy5cbiAqIElmIHBhc3N3b3JkIGNvbmZpcm1hdGlvbiBpbnB1dCBpcyBwcm92aWRlZCwgY2FuIHZhbGlkYXRlIGlmIGVudGVyZWQgcGFzc3dvcmQgaXMgbWF0Y2hpbmcgY29uZmlybWF0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXNzd29yZFZhbGlkYXRvciB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge1N0cmluZ30gcGFzc3dvcmRJbnB1dFNlbGVjdG9yIHNlbGVjdG9yIG9mIHRoZSBwYXNzd29yZCBpbnB1dC5cbiAgICogQHBhcmFtIHtTdHJpbmd8bnVsbH0gY29uZmlybVBhc3N3b3JkSW5wdXRTZWxlY3RvciAob3B0aW9uYWwpIHNlbGVjdG9yIGZvciB0aGUgcGFzc3dvcmQgY29uZmlybWF0aW9uIGlucHV0LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBhbGxvd3Mgb3ZlcnJpZGluZyBkZWZhdWx0IG9wdGlvbnMuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihwYXNzd29yZElucHV0U2VsZWN0b3IsIGNvbmZpcm1QYXNzd29yZElucHV0U2VsZWN0b3IgPSBudWxsLCBvcHRpb25zID0ge30pIHtcbiAgICB0aGlzLm5ld1Bhc3N3b3JkSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhc3N3b3JkSW5wdXRTZWxlY3Rvcik7XG4gICAgdGhpcy5jb25maXJtUGFzc3dvcmRJbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoY29uZmlybVBhc3N3b3JkSW5wdXRTZWxlY3Rvcik7XG5cbiAgICAvLyBNaW5pbXVtIGFsbG93ZWQgbGVuZ3RoIGZvciBlbnRlcmVkIHBhc3N3b3JkXG4gICAgdGhpcy5taW5QYXNzd29yZExlbmd0aCA9IG9wdGlvbnMubWluUGFzc3dvcmRMZW5ndGggfHwgODtcblxuICAgIC8vIE1heGltdW0gYWxsb3dlZCBsZW5ndGggZm9yIGVudGVyZWQgcGFzc3dvcmRcbiAgICB0aGlzLm1heFBhc3N3b3JkTGVuZ3RoID0gb3B0aW9ucy5tYXhQYXNzd29yZExlbmd0aCB8fCAyNTU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBhc3N3b3JkIGlzIHZhbGlkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzUGFzc3dvcmRWYWxpZCgpIHtcbiAgICBpZiAodGhpcy5jb25maXJtUGFzc3dvcmRJbnB1dCAmJiAhdGhpcy5pc1Bhc3N3b3JkTWF0Y2hpbmdDb25maXJtYXRpb24oKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmlzUGFzc3dvcmRMZW5ndGhWYWxpZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHBhc3N3b3JkJ3MgbGVuZ3RoIGlzIHZhbGlkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzUGFzc3dvcmRMZW5ndGhWYWxpZCgpIHtcbiAgICByZXR1cm4gIXRoaXMuaXNQYXNzd29yZFRvb1Nob3J0KCkgJiYgIXRoaXMuaXNQYXNzd29yZFRvb0xvbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwYXNzd29yZCBpcyBtYXRjaGluZyBpdCdzIGNvbmZpcm1hdGlvbi5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1Bhc3N3b3JkTWF0Y2hpbmdDb25maXJtYXRpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpcm1QYXNzd29yZElucHV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbmZpcm0gcGFzc3dvcmQgaW5wdXQgaXMgbm90IHByb3ZpZGVkIGZvciB0aGUgcGFzc3dvcmQgdmFsaWRhdG9yLicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpcm1QYXNzd29yZElucHV0LnZhbHVlID09PSAnJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubmV3UGFzc3dvcmRJbnB1dC52YWx1ZSA9PT0gdGhpcy5jb25maXJtUGFzc3dvcmRJbnB1dC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwYXNzd29yZCBpcyB0b28gc2hvcnQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNQYXNzd29yZFRvb1Nob3J0KCkge1xuICAgIHJldHVybiB0aGlzLm5ld1Bhc3N3b3JkSW5wdXQudmFsdWUubGVuZ3RoIDwgdGhpcy5taW5QYXNzd29yZExlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBwYXNzd29yZCBpcyB0b28gbG9uZy5cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc1Bhc3N3b3JkVG9vTG9uZygpIHtcbiAgICByZXR1cm4gdGhpcy5uZXdQYXNzd29yZElucHV0LnZhbHVlLmxlbmd0aCA+IHRoaXMubWF4UGFzc3dvcmRMZW5ndGg7XG4gIH1cbn1cbiIsIi8qKlxuICogQ29weXJpZ2h0IHNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBQcmVzdGFTaG9wIGlzIGFuIEludGVybmF0aW9uYWwgUmVnaXN0ZXJlZCBUcmFkZW1hcmsgJiBQcm9wZXJ0eSBvZiBQcmVzdGFTaG9wIFNBXG4gKlxuICogTk9USUNFIE9GIExJQ0VOU0VcbiAqXG4gKiBUaGlzIHNvdXJjZSBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgcGFja2FnZSBpbiB0aGUgZmlsZSBMSUNFTlNFLm1kLlxuICogSXQgaXMgYWxzbyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIgYXQgdGhpcyBVUkw6XG4gKiBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjBcbiAqIElmIHlvdSBkaWQgbm90IHJlY2VpdmUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGFuZCBhcmUgdW5hYmxlIHRvXG4gKiBvYnRhaW4gaXQgdGhyb3VnaCB0aGUgd29ybGQtd2lkZS13ZWIsIHBsZWFzZSBzZW5kIGFuIGVtYWlsXG4gKiB0byBsaWNlbnNlQHByZXN0YXNob3AuY29tIHNvIHdlIGNhbiBzZW5kIHlvdSBhIGNvcHkgaW1tZWRpYXRlbHkuXG4gKlxuICogRElTQ0xBSU1FUlxuICpcbiAqIERvIG5vdCBlZGl0IG9yIGFkZCB0byB0aGlzIGZpbGUgaWYgeW91IHdpc2ggdG8gdXBncmFkZSBQcmVzdGFTaG9wIHRvIG5ld2VyXG4gKiB2ZXJzaW9ucyBpbiB0aGUgZnV0dXJlLiBJZiB5b3Ugd2lzaCB0byBjdXN0b21pemUgUHJlc3RhU2hvcCBmb3IgeW91clxuICogbmVlZHMgcGxlYXNlIHJlZmVyIHRvIGh0dHBzOi8vZGV2ZG9jcy5wcmVzdGFzaG9wLmNvbS8gZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gKlxuICogQGF1dGhvciAgICBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnMgPGNvbnRhY3RAcHJlc3Rhc2hvcC5jb20+XG4gKiBAY29weXJpZ2h0IFNpbmNlIDIwMDcgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzXG4gKiBAbGljZW5zZSAgIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMCBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKi9cblxuaW1wb3J0IENob2ljZVRyZWUgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9mb3JtL2Nob2ljZS10cmVlJztcbmltcG9ydCBBZGRvbnNDb25uZWN0b3IgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9hZGRvbnMtY29ubmVjdG9yJztcbmltcG9ydCBDaGFuZ2VQYXNzd29yZENvbnRyb2wgZnJvbSAnLi4vLi4vY29tcG9uZW50cy9mb3JtL2NoYW5nZS1wYXNzd29yZC1jb250cm9sJztcbmltcG9ydCBlbXBsb3llZUZvcm1NYXAgZnJvbSAnLi9lbXBsb3llZS1mb3JtLW1hcCc7XG5cbi8qKlxuICogQ2xhc3MgcmVzcG9uc2libGUgZm9yIGphdmFzY3JpcHQgYWN0aW9ucyBpbiBlbXBsb3llZSBhZGQvZWRpdCBwYWdlLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbXBsb3llZUZvcm0ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNob3BDaG9pY2VUcmVlU2VsZWN0b3IgPSBlbXBsb3llZUZvcm1NYXAuc2hvcENob2ljZVRyZWU7XG4gICAgdGhpcy5zaG9wQ2hvaWNlVHJlZSA9IG5ldyBDaG9pY2VUcmVlKHRoaXMuc2hvcENob2ljZVRyZWVTZWxlY3Rvcik7XG4gICAgdGhpcy5lbXBsb3llZVByb2ZpbGVTZWxlY3RvciA9IGVtcGxveWVlRm9ybU1hcC5wcm9maWxlU2VsZWN0O1xuICAgIHRoaXMudGFic0Ryb3Bkb3duU2VsZWN0b3IgPSBlbXBsb3llZUZvcm1NYXAuZGVmYXVsdFBhZ2VTZWxlY3Q7XG5cbiAgICB0aGlzLnNob3BDaG9pY2VUcmVlLmVuYWJsZUF1dG9DaGVja0NoaWxkcmVuKCk7XG5cbiAgICBuZXcgQWRkb25zQ29ubmVjdG9yKFxuICAgICAgZW1wbG95ZWVGb3JtTWFwLmFkZG9uc0Nvbm5lY3RGb3JtLFxuICAgICAgZW1wbG95ZWVGb3JtTWFwLmFkZG9uc0xvZ2luQnV0dG9uLFxuICAgICk7XG5cbiAgICBuZXcgQ2hhbmdlUGFzc3dvcmRDb250cm9sKFxuICAgICAgZW1wbG95ZWVGb3JtTWFwLmNoYW5nZVBhc3N3b3JkSW5wdXRzQmxvY2ssXG4gICAgICBlbXBsb3llZUZvcm1NYXAuc2hvd0NoYW5nZVBhc3N3b3JkQmxvY2tCdXR0b24sXG4gICAgICBlbXBsb3llZUZvcm1NYXAuaGlkZUNoYW5nZVBhc3N3b3JkQmxvY2tCdXR0b24sXG4gICAgICBlbXBsb3llZUZvcm1NYXAuZ2VuZXJhdGVQYXNzd29yZEJ1dHRvbixcbiAgICAgIGVtcGxveWVlRm9ybU1hcC5vbGRQYXNzd29yZElucHV0LFxuICAgICAgZW1wbG95ZWVGb3JtTWFwLm5ld1Bhc3N3b3JkSW5wdXQsXG4gICAgICBlbXBsb3llZUZvcm1NYXAuY29uZmlybU5ld1Bhc3N3b3JkSW5wdXQsXG4gICAgICBlbXBsb3llZUZvcm1NYXAuZ2VuZXJhdGVkUGFzc3dvcmREaXNwbGF5SW5wdXQsXG4gICAgICBlbXBsb3llZUZvcm1NYXAucGFzc3dvcmRTdHJlbmd0aEZlZWRiYWNrQ29udGFpbmVyLFxuICAgICk7XG5cbiAgICB0aGlzLmluaXRFdmVudHMoKTtcbiAgICB0aGlzLnRvZ2dsZVNob3BUcmVlKCk7XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBwYWdlJ3MgZXZlbnRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaW5pdEV2ZW50cygpIHtcbiAgICBjb25zdCAkZW1wbG95ZWVQcm9maWxlc0Ryb3Bkb3duID0gJCh0aGlzLmVtcGxveWVlUHJvZmlsZVNlbGVjdG9yKTtcbiAgICBjb25zdCBnZXRUYWJzVXJsID0gJGVtcGxveWVlUHJvZmlsZXNEcm9wZG93bi5kYXRhKCdnZXQtdGFicy11cmwnKTtcblxuICAgICQoZG9jdW1lbnQpLm9uKCdjaGFuZ2UnLCB0aGlzLmVtcGxveWVlUHJvZmlsZVNlbGVjdG9yLCAoKSA9PiB0aGlzLnRvZ2dsZVNob3BUcmVlKCkpO1xuXG4gICAgLy8gUmVsb2FkIHRhYnMgZHJvcGRvd24gd2hlbiBlbXBsb3llZSBwcm9maWxlIGlzIGNoYW5nZWQuXG4gICAgJChkb2N1bWVudCkub24oJ2NoYW5nZScsIHRoaXMuZW1wbG95ZWVQcm9maWxlU2VsZWN0b3IsIChldmVudCkgPT4ge1xuICAgICAgJC5nZXQoXG4gICAgICAgIGdldFRhYnNVcmwsXG4gICAgICAgIHtcbiAgICAgICAgICBwcm9maWxlSWQ6ICQoZXZlbnQuY3VycmVudFRhcmdldCkudmFsKCksXG4gICAgICAgIH0sXG4gICAgICAgICh0YWJzKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWxvYWRUYWJzRHJvcGRvd24odGFicyk7XG4gICAgICAgIH0sXG4gICAgICAgICdqc29uJyxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVsb2FkIHRhYnMgZHJvcGRvd24gd2l0aCBuZXcgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGFjY2Vzc2libGVUYWJzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZWxvYWRUYWJzRHJvcGRvd24oYWNjZXNzaWJsZVRhYnMpIHtcbiAgICBjb25zdCAkdGFic0Ryb3Bkb3duID0gJCh0aGlzLnRhYnNEcm9wZG93blNlbGVjdG9yKTtcblxuICAgICR0YWJzRHJvcGRvd24uZW1wdHkoKTtcblxuICAgIE9iamVjdC52YWx1ZXMoYWNjZXNzaWJsZVRhYnMpLmZvckVhY2goKGFjY2Vzc2libGVUYWIpID0+IHtcbiAgICAgIGlmIChhY2Nlc3NpYmxlVGFiLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgYWNjZXNzaWJsZVRhYi5uYW1lKSB7XG4gICAgICAgIC8vIElmIHRhYiBoYXMgY2hpbGRyZW4gLSBjcmVhdGUgYW4gb3B0aW9uIGdyb3VwIGFuZCBwdXQgY2hpbGRyZW4gaW5zaWRlLlxuICAgICAgICBjb25zdCAkb3B0Z3JvdXAgPSB0aGlzLmNyZWF0ZU9wdGlvbkdyb3VwKGFjY2Vzc2libGVUYWIubmFtZSk7XG5cbiAgICAgICAgT2JqZWN0LmtleXMoYWNjZXNzaWJsZVRhYi5jaGlsZHJlbikuZm9yRWFjaCgoY2hpbGRLZXkpID0+IHtcbiAgICAgICAgICBpZiAoYWNjZXNzaWJsZVRhYi5jaGlsZHJlbltjaGlsZEtleV0ubmFtZSkge1xuICAgICAgICAgICAgJG9wdGdyb3VwLmFwcGVuZChcbiAgICAgICAgICAgICAgdGhpcy5jcmVhdGVPcHRpb24oXG4gICAgICAgICAgICAgICAgYWNjZXNzaWJsZVRhYi5jaGlsZHJlbltjaGlsZEtleV0ubmFtZSxcbiAgICAgICAgICAgICAgICBhY2Nlc3NpYmxlVGFiLmNoaWxkcmVuW2NoaWxkS2V5XS5pZF90YWIpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgICR0YWJzRHJvcGRvd24uYXBwZW5kKCRvcHRncm91cCk7XG4gICAgICB9IGVsc2UgaWYgKGFjY2Vzc2libGVUYWIubmFtZSkge1xuICAgICAgICAvLyBJZiB0YWIgZG9lc24ndCBoYXZlIGNoaWxkcmVuIC0gY3JlYXRlIGFuIG9wdGlvbi5cbiAgICAgICAgJHRhYnNEcm9wZG93bi5hcHBlbmQoXG4gICAgICAgICAgdGhpcy5jcmVhdGVPcHRpb24oXG4gICAgICAgICAgICBhY2Nlc3NpYmxlVGFiLm5hbWUsXG4gICAgICAgICAgICBhY2Nlc3NpYmxlVGFiLmlkX3RhYixcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhpZGUgc2hvcCBjaG9pY2UgdHJlZSBpZiBzdXBlcmFkbWluIHByb2ZpbGUgaXMgc2VsZWN0ZWQsIHNob3cgaXQgb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdG9nZ2xlU2hvcFRyZWUoKSB7XG4gICAgY29uc3QgJGVtcGxveWVlUHJvZmlsZURyb3Bkb3duID0gJCh0aGlzLmVtcGxveWVlUHJvZmlsZVNlbGVjdG9yKTtcbiAgICBjb25zdCBzdXBlckFkbWluUHJvZmlsZUlkID0gJGVtcGxveWVlUHJvZmlsZURyb3Bkb3duLmRhdGEoJ2FkbWluLXByb2ZpbGUnKTtcbiAgICAkKHRoaXMuc2hvcENob2ljZVRyZWVTZWxlY3RvcilcbiAgICAgIC5jbG9zZXN0KCcuZm9ybS1ncm91cCcpXG4gICAgICAudG9nZ2xlQ2xhc3MoJ2Qtbm9uZScsICRlbXBsb3llZVByb2ZpbGVEcm9wZG93bi52YWwoKSA9PT0gc3VwZXJBZG1pblByb2ZpbGVJZCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiA8b3B0Z3JvdXA+IGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAgICpcbiAgICogQHJldHVybnMge2pRdWVyeX1cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZU9wdGlvbkdyb3VwKG5hbWUpIHtcbiAgICByZXR1cm4gJChgPG9wdGdyb3VwIGxhYmVsPVwiJHtuYW1lfVwiPmApO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gPG9wdGlvbj4gZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbHVlXG4gICAqXG4gICAqIEByZXR1cm5zIHtqUXVlcnl9XG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVPcHRpb24obmFtZSwgdmFsdWUpIHtcbiAgICByZXR1cm4gJChgPG9wdGlvbiB2YWx1ZT1cIiR7dmFsdWV9XCI+JHtuYW1lfTwvb3B0aW9uPmApO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCBzaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogUHJlc3RhU2hvcCBpcyBhbiBJbnRlcm5hdGlvbmFsIFJlZ2lzdGVyZWQgVHJhZGVtYXJrICYgUHJvcGVydHkgb2YgUHJlc3RhU2hvcCBTQVxuICpcbiAqIE5PVElDRSBPRiBMSUNFTlNFXG4gKlxuICogVGhpcyBzb3VyY2UgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCAzLjApXG4gKiB0aGF0IGlzIGJ1bmRsZWQgd2l0aCB0aGlzIHBhY2thZ2UgaW4gdGhlIGZpbGUgTElDRU5TRS5tZC5cbiAqIEl0IGlzIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViIGF0IHRoaXMgVVJMOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wXG4gKiBJZiB5b3UgZGlkIG5vdCByZWNlaXZlIGEgY29weSBvZiB0aGUgbGljZW5zZSBhbmQgYXJlIHVuYWJsZSB0b1xuICogb2J0YWluIGl0IHRocm91Z2ggdGhlIHdvcmxkLXdpZGUtd2ViLCBwbGVhc2Ugc2VuZCBhbiBlbWFpbFxuICogdG8gbGljZW5zZUBwcmVzdGFzaG9wLmNvbSBzbyB3ZSBjYW4gc2VuZCB5b3UgYSBjb3B5IGltbWVkaWF0ZWx5LlxuICpcbiAqIERJU0NMQUlNRVJcbiAqXG4gKiBEbyBub3QgZWRpdCBvciBhZGQgdG8gdGhpcyBmaWxlIGlmIHlvdSB3aXNoIHRvIHVwZ3JhZGUgUHJlc3RhU2hvcCB0byBuZXdlclxuICogdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgeW91IHdpc2ggdG8gY3VzdG9taXplIFByZXN0YVNob3AgZm9yIHlvdXJcbiAqIG5lZWRzIHBsZWFzZSByZWZlciB0byBodHRwczovL2RldmRvY3MucHJlc3Rhc2hvcC5jb20vIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIEBhdXRob3IgICAgUHJlc3RhU2hvcCBTQSBhbmQgQ29udHJpYnV0b3JzIDxjb250YWN0QHByZXN0YXNob3AuY29tPlxuICogQGNvcHlyaWdodCBTaW5jZSAyMDA3IFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9yc1xuICogQGxpY2Vuc2UgICBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL09TTC0zLjAgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICovXG5cbi8qKlxuICogRGVmaW5lcyBhbGwgc2VsZWN0b3JzIHRoYXQgYXJlIHVzZWQgaW4gZW1wbG95ZWUgYWRkL2VkaXQgZm9ybS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQge1xuICBzaG9wQ2hvaWNlVHJlZTogJyNlbXBsb3llZV9zaG9wX2Fzc29jaWF0aW9uJyxcbiAgcHJvZmlsZVNlbGVjdDogJyNlbXBsb3llZV9wcm9maWxlJyxcbiAgZGVmYXVsdFBhZ2VTZWxlY3Q6ICcjZW1wbG95ZWVfZGVmYXVsdF9wYWdlJyxcbiAgYWRkb25zQ29ubmVjdEZvcm06ICcjYWRkb25zLWNvbm5lY3QtZm9ybScsXG4gIGFkZG9uc0xvZ2luQnV0dG9uOiAnI2FkZG9uc19sb2dpbl9idG4nLFxuXG4gIC8vIHNlbGVjdG9ycyByZWxhdGVkIHRvIFwiY2hhbmdlIHBhc3N3b3JkXCIgZm9ybSBjb250cm9sXG4gIGNoYW5nZVBhc3N3b3JkSW5wdXRzQmxvY2s6ICcuanMtY2hhbmdlLXBhc3N3b3JkLWJsb2NrJyxcbiAgc2hvd0NoYW5nZVBhc3N3b3JkQmxvY2tCdXR0b246ICcuanMtY2hhbmdlLXBhc3N3b3JkJyxcbiAgaGlkZUNoYW5nZVBhc3N3b3JkQmxvY2tCdXR0b246ICcuanMtY2hhbmdlLXBhc3N3b3JkLWNhbmNlbCcsXG4gIGdlbmVyYXRlUGFzc3dvcmRCdXR0b246ICcjZW1wbG95ZWVfY2hhbmdlX3Bhc3N3b3JkX2dlbmVyYXRlX3Bhc3N3b3JkX2J1dHRvbicsXG4gIG9sZFBhc3N3b3JkSW5wdXQ6ICcjZW1wbG95ZWVfY2hhbmdlX3Bhc3N3b3JkX29sZF9wYXNzd29yZCcsXG4gIG5ld1Bhc3N3b3JkSW5wdXQ6ICcjZW1wbG95ZWVfY2hhbmdlX3Bhc3N3b3JkX25ld19wYXNzd29yZF9maXJzdCcsXG4gIGNvbmZpcm1OZXdQYXNzd29yZElucHV0OiAnI2VtcGxveWVlX2NoYW5nZV9wYXNzd29yZF9uZXdfcGFzc3dvcmRfc2Vjb25kJyxcbiAgZ2VuZXJhdGVkUGFzc3dvcmREaXNwbGF5SW5wdXQ6ICcjZW1wbG95ZWVfY2hhbmdlX3Bhc3N3b3JkX2dlbmVyYXRlZF9wYXNzd29yZCcsXG4gIHBhc3N3b3JkU3RyZW5ndGhGZWVkYmFja0NvbnRhaW5lcjogJy5qcy1wYXNzd29yZC1zdHJlbmd0aC1mZWVkYmFjaycsXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7IFwiZGVmYXVsdFwiOiByZXF1aXJlKFwiY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2tleXNcIiksIF9fZXNNb2R1bGU6IHRydWUgfTsiLCJtb2R1bGUuZXhwb3J0cyA9IHsgXCJkZWZhdWx0XCI6IHJlcXVpcmUoXCJjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L3ZhbHVlc1wiKSwgX19lc01vZHVsZTogdHJ1ZSB9OyIsIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgfVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF9kZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoXCIuLi9jb3JlLWpzL29iamVjdC9kZWZpbmUtcHJvcGVydHlcIik7XG5cbnZhciBfZGVmaW5lUHJvcGVydHkyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVmaW5lUHJvcGVydHkpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5leHBvcnRzLmRlZmF1bHQgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgKDAsIF9kZWZpbmVQcm9wZXJ0eTIuZGVmYXVsdCkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTsiLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIGRlc2MpIHtcbiAgcmV0dXJuICRPYmplY3QuZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgZGVzYyk7XG59O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5rZXlzO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LnZhbHVlcztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMScgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIElTX1dSQVAgPSB0eXBlICYgJGV4cG9ydC5XO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV07XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIga2V5LCBvd24sIG91dDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAob3duICYmIGhhcyhleHBvcnRzLCBrZXkpKSBjb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uIChDKSB7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgQykge1xuICAgICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEMoKTtcbiAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDKGEpO1xuICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEMoYSwgYik7XG4gICAgICAgICAgfSByZXR1cm4gbmV3IEMoYSwgYiwgYyk7XG4gICAgICAgIH0gcmV0dXJuIEMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgICBGW1BST1RPVFlQRV0gPSBDW1BST1RPVFlQRV07XG4gICAgICByZXR1cm4gRjtcbiAgICAvLyBtYWtlIHN0YXRpYyB2ZXJzaW9ucyBmb3IgcHJvdG90eXBlIG1ldGhvZHNcbiAgICB9KShvdXQpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXhwb3J0IHByb3RvIG1ldGhvZHMgdG8gY29yZS4lQ09OU1RSVUNUT1IlLm1ldGhvZHMuJU5BTUUlXG4gICAgaWYgKElTX1BST1RPKSB7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYgKHR5cGUgJiAkZXhwb3J0LlIgJiYgZXhwUHJvdG8gJiYgIWV4cFByb3RvW2tleV0pIGhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gdHJ1ZTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChPLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdpbmRvd1tcImpRdWVyeVwiXTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgc2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIFByZXN0YVNob3AgaXMgYW4gSW50ZXJuYXRpb25hbCBSZWdpc3RlcmVkIFRyYWRlbWFyayAmIFByb3BlcnR5IG9mIFByZXN0YVNob3AgU0FcbiAqXG4gKiBOT1RJQ0UgT0YgTElDRU5TRVxuICpcbiAqIFRoaXMgc291cmNlIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlIChPU0wgMy4wKVxuICogdGhhdCBpcyBidW5kbGVkIHdpdGggdGhpcyBwYWNrYWdlIGluIHRoZSBmaWxlIExJQ0VOU0UubWQuXG4gKiBJdCBpcyBhbHNvIGF2YWlsYWJsZSB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiBhdCB0aGlzIFVSTDpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvT1NMLTMuMFxuICogSWYgeW91IGRpZCBub3QgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYW5kIGFyZSB1bmFibGUgdG9cbiAqIG9idGFpbiBpdCB0aHJvdWdoIHRoZSB3b3JsZC13aWRlLXdlYiwgcGxlYXNlIHNlbmQgYW4gZW1haWxcbiAqIHRvIGxpY2Vuc2VAcHJlc3Rhc2hvcC5jb20gc28gd2UgY2FuIHNlbmQgeW91IGEgY29weSBpbW1lZGlhdGVseS5cbiAqXG4gKiBESVNDTEFJTUVSXG4gKlxuICogRG8gbm90IGVkaXQgb3IgYWRkIHRvIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaCB0byB1cGdyYWRlIFByZXN0YVNob3AgdG8gbmV3ZXJcbiAqIHZlcnNpb25zIGluIHRoZSBmdXR1cmUuIElmIHlvdSB3aXNoIHRvIGN1c3RvbWl6ZSBQcmVzdGFTaG9wIGZvciB5b3VyXG4gKiBuZWVkcyBwbGVhc2UgcmVmZXIgdG8gaHR0cHM6Ly9kZXZkb2NzLnByZXN0YXNob3AuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAqXG4gKiBAYXV0aG9yICAgIFByZXN0YVNob3AgU0EgYW5kIENvbnRyaWJ1dG9ycyA8Y29udGFjdEBwcmVzdGFzaG9wLmNvbT5cbiAqIEBjb3B5cmlnaHQgU2luY2UgMjAwNyBQcmVzdGFTaG9wIFNBIGFuZCBDb250cmlidXRvcnNcbiAqIEBsaWNlbnNlICAgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9PU0wtMy4wIE9wZW4gU29mdHdhcmUgTGljZW5zZSAoT1NMIDMuMClcbiAqL1xuXG5pbXBvcnQgRW1wbG95ZWVGb3JtIGZyb20gJy4vRW1wbG95ZWVGb3JtJztcblxuJCgoKSA9PiB7XG4gIG5ldyBFbXBsb3llZUZvcm0oKTtcbn0pO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==

Youez - 2016 - github.com/yon3zu
LinuXploit