!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.brewcalc=t():e.brewcalc=t()}(window,(function(){return function(e){var t={};function r(a){if(t[a])return t[a].exports;var o=t[a]={i:a,l:!1,exports:{}};return e[a].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,a){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(r.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(a,o,function(t){return e[t]}.bind(null,o));return a},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.roundMeasurable=t.getMeasurableValue=t.isMeasurable=t.isObject=t.round=t.isNotEmptyArray=t.capitalize=t.sum=t.lovibondToSrm=t.srmToLovibond=t.ebcToSrm=t.srmToEbc=t.sgToBrix=t.brixToSG=t.platoToSG=t.sgToPlato=t.psiTokpa=t.kpaToPsi=t.celsiusToFahrenheit=t.fahrenheitToCelsius=t.gallonsToLiters=t.litersToGallons=t.ouncesToLiters=t.litersToOunces=t.poundsTokg=t.kgToPounds=t.kgToOunces=void 0;t.kgToOunces=e=>35.2739619*e;t.kgToPounds=e=>t.kgToOunces(e)/16;t.poundsTokg=e=>e/2.204;t.litersToOunces=e=>e/.0295735;t.ouncesToLiters=e=>.0295735*e;t.litersToGallons=e=>t.litersToOunces(e)/128;t.gallonsToLiters=e=>t.ouncesToLiters(128*e);t.fahrenheitToCelsius=e=>(e-32)/1.8;t.celsiusToFahrenheit=e=>1.8*e+32;t.kpaToPsi=e=>.14503773773020923*e;t.psiTokpa=e=>6.894757293168361*e;t.sgToPlato=e=>1111.14*e-616.868-630.272*Math.pow(e,2)+135.997*Math.pow(e,3);t.platoToSG=e=>1+e/(258.6-e/258.2*227.1);t.brixToSG=e=>e/(258.6-e/258.2*227.1)+1;t.sgToBrix=e=>1262.7749*e-669.5622-775.6821*Math.pow(e,2)+182.4601*Math.pow(e,3);t.srmToEbc=e=>1.97*e;t.ebcToSrm=e=>.508*e;t.srmToLovibond=e=>(e+.76)/1.3546;t.lovibondToSrm=e=>1.3546*e-.76;t.sum=e=>e.reduce((e,t)=>e+t,0);t.capitalize=e=>e.split(" ").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ");function a(e,t=0){return"number"==typeof e?Number(e.toFixed(t)):null}function o(e){return null!=e&&"object"==typeof e}function n(e){return o(e)&&e.hasOwnProperty("value")&&e.hasOwnProperty("unit")}t.isNotEmptyArray=e=>!!Array.isArray(e)&&e.length>0,t.round=a,t.isObject=o,t.isMeasurable=n,t.getMeasurableValue=function(e){return n(e)?e.value:null};t.roundMeasurable=(e,t)=>({unit:e.unit,value:a(e.value,t)})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.convertMeasurableValue=void 0;const a=r(2);t.convertMeasurableValue=(e,t,r=4)=>a.convert(e.value,e.unit,t,r)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.convert=void 0;const a=r(9),o=(e,t)=>+e.toFixed(t);t.convert=(e,t,r,n)=>{if(null==e)throw new Error("Unable to convert null or undefined!");let u=null,i=null;for(const e in a.default){const o=a.default[e];for(const e in o){const a=o[e];a.units.hasOwnProperty(t)&&(u={unit:a.units[t],system:a}),a.units.hasOwnProperty(r)&&(i={unit:a.units[r],system:a})}if(null!=u&&null==i)throw new Error(`Unable to convert [${e}] unit [${t}] to [${r}]!`);if(null==u&&null!=i)throw new Error(`Unable to convert [${t}] to [${e}] unit [${r}]!`);if(null!=u&&null!=i)break}if(null==u)throw new Error(`Unit not found [${t}]!`);if(null==i)throw new Error(`Unit not found [${r}]!`);const s=null!=i.unit.precision?i.unit.precision:2,l=null!=n?n:s;if(t===r)return o(e,l);let c=e*u.unit.ratio;return u.system!==i.system&&(c=i.system.fromBase(u.system.toBase(c))),c/=i.unit.ratio,o(c,l)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.boilTime=t.use=void 0;t.use=(e={})=>({add_to_boil:"add_to_boil"===e.use,add_to_mash:!e.use||"add_to_mash"===e.use});t.boilTime=(e={})=>"add_to_boil"===e.use?e.time.value:0},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.yeastStarterGrow=t.yeastNeeded=t.yeastCount=t.carbonation=t.calcCalories=t.recalculateMashSteps=t.calcMashGrainWeight=t.calcMashVolumes=t.calcBoilVolumes=t.calculateRecipeBeerJSON=t.bitternessRatio=t.bitternessIbuTinseth=t.bitternessIbuRager=t.calcABV=t.srmToRgb=t.srmToCss=t.calcColor=t.calcBoilGravity=t.calcFinalGravity=t.calcOriginalGravity=t.convertMeasurableValue=t.convert=void 0;const a=r(5);Object.defineProperty(t,"yeastCount",{enumerable:!0,get:function(){return a.yeastCount}}),Object.defineProperty(t,"yeastNeeded",{enumerable:!0,get:function(){return a.yeastNeeded}}),Object.defineProperty(t,"yeastStarterGrow",{enumerable:!0,get:function(){return a.yeastStarterGrow}});const o=r(7);Object.defineProperty(t,"calcCalories",{enumerable:!0,get:function(){return o.calcCalories}}),Object.defineProperty(t,"carbonation",{enumerable:!0,get:function(){return o.carbonation}});const n=r(8);Object.defineProperty(t,"bitternessIbuRager",{enumerable:!0,get:function(){return n.bitternessIbuRager}}),Object.defineProperty(t,"bitternessIbuTinseth",{enumerable:!0,get:function(){return n.bitternessIbuTinseth}}),Object.defineProperty(t,"bitternessRatio",{enumerable:!0,get:function(){return n.bitternessRatio}});const u=r(0),i=r(1);Object.defineProperty(t,"convertMeasurableValue",{enumerable:!0,get:function(){return i.convertMeasurableValue}});const s=r(2);Object.defineProperty(t,"convert",{enumerable:!0,get:function(){return s.convert}});const l=r(10);Object.defineProperty(t,"calcMashGrainWeight",{enumerable:!0,get:function(){return l.calcMashGrainWeight}}),Object.defineProperty(t,"recalculateMashSteps",{enumerable:!0,get:function(){return l.recalculateMashSteps}});const c=r(11);Object.defineProperty(t,"calcBoilVolumes",{enumerable:!0,get:function(){return c.calcBoilVolumes}}),Object.defineProperty(t,"calcMashVolumes",{enumerable:!0,get:function(){return c.calcMashVolumes}});const b=r(12);Object.defineProperty(t,"calcOriginalGravity",{enumerable:!0,get:function(){return b.calcOriginalGravity}}),Object.defineProperty(t,"calcFinalGravity",{enumerable:!0,get:function(){return b.calcFinalGravity}}),Object.defineProperty(t,"calcBoilGravity",{enumerable:!0,get:function(){return b.calcBoilGravity}});const m=r(13);Object.defineProperty(t,"srmToCss",{enumerable:!0,get:function(){return m.srmToCss}}),Object.defineProperty(t,"srmToRgb",{enumerable:!0,get:function(){return m.srmToRgb}}),Object.defineProperty(t,"calcColor",{enumerable:!0,get:function(){return m.calcColor}});const d=r(14);Object.defineProperty(t,"calcABV",{enumerable:!0,get:function(){return d.calcABV}});t.calculateRecipeBeerJSON=(e,t,r)=>{const{batch_size:a,boil:o,efficiency:i,ingredients:s}=e,{fermentable_additions:f,hop_additions:p,culture_additions:v}=s;let g={unit:"sg",value:null},y={unit:"sg",value:null},h={unit:"SRM",value:null},_={unit:"IBUs",value:null},M={unit:"%",value:null},T=null,O=null,B=null;if(u.isNotEmptyArray(f)){g=b.calcOriginalGravity(a,f,i);const e={name:"Default Culture",type:"ale",form:"liquid",attenuation:{value:75,unit:"%"}};y=b.calcFinalGravity(a,f,i,u.isNotEmptyArray(v)?v:[e]),M=d.calcABV(g,y);const{pre_boil_size:s}=c.calcBoilVolumes(a,o,r);if(T={pre_boil_size:s},t){const e=l.calcMashGrainWeight(f),a=l.recalculateMashSteps(t.mash_steps,t.grain_temperature,e),{sparge_volume:o,mash_volume:n,total_volume:u}=c.calcMashVolumes(s,a,e,r);T=Object.assign(Object.assign({},T),{sparge_volume:o,mash_volume:n,total_volume:u}),O=Object.assign(Object.assign({},t),{mash_steps:l.updateSpargeVolume(a,o)})}if(o&&(B=Object.assign(Object.assign({},o),{pre_boil_size:s})),h=m.calcColor(f,a),u.isNotEmptyArray(p)){const e=b.calcBoilGravity(a,s,g);_=n.bitternessIbuTinseth(p,e,a)}}return{stats:{original_gravity:u.roundMeasurable(g,3),final_gravity:u.roundMeasurable(y,3),alcohol_by_volume:u.roundMeasurable(M,1),ibu_estimate:u.roundMeasurable(_,1),color_estimate:u.roundMeasurable(h,1)},volumes:T,mash:O,boil:B}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.yeastStarterGrow=t.yeastCount=t.yeastNeeded=void 0;const a=r(0),o=r(6);t.yeastNeeded=(e,t,r)=>e*(1e3*t)*r/1e3;t.yeastCount=({amount:e,form:t,cultureDate:r},a=(new Date).toString(),n=8,u=1)=>{switch(t){case o.YeastForms.dry:return n*e*1e3;case o.YeastForms.liquid:return((e,t=(new Date).toString())=>100-.7*Math.floor((Date.parse(e)-Date.parse(t))/864e5))(a,r)/100*100*e;case o.YeastForms.slant:return u*e*1e3;default:throw new Error("NotImplementedError")}};const n=e=>2.33-.67*e;t.yeastStarterGrow=(e,t,r,o)=>{const u=a.litersToGallons(t)*(r-1)*1e3/42,i=1e3*a.poundsTokg(u),s=(l=e/i)<1.4?1.4:l>=1.4&&l<=3.5&&n(l)>0?n(l):0;var l;const c=i*s+e;return{growthRate:s,endingCount:c,pitchRate:1e3*c/a.sgToPlato(r)/(o/1e3)}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.YeastForms=t.YeastTypes=void 0,t.YeastTypes={ale:"Ale",lager:"Lager",wheat:"Wheat",wine:"Wine",champagne:"Champagne"},t.YeastForms={liquid:"Liquid",dry:"Dry",slant:"Slant",culture:"Culture"}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.calcCalories=t.carbonation=void 0;const a=r(0),o=(e,t)=>Math.max(0,-16.6999-.0101059*t+.00116512*t*t+.173354*t*e+4.24267*e-.0684226*e*e),n=e=>Math.max(32,a.celsiusToFahrenheit(e));t.carbonation=(e,t,r)=>{const u=((e,t,r)=>15.195*r*(e-3.0378+.050062*t-26555e-8*t*t))(e,n(t),a.litersToGallons(r));return{kegPressure:o(e,n(t)),kegSugar:.5*u,cornSugar:u,dme:1.538*u}};t.calcCalories=(e,t)=>((e,t)=>1881.22*t*((e-t)/(1.775-e)))(e,t)+((e,t)=>3550*t*(.1808*e+.8192*t-1.0004))(e,t)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.bitternessIbuRager=t.bitternessRatio=t.bitternessIbuTinseth=void 0;const a=r(0),o=r(1),n=r(3),u=(e,t)=>e*t,i=(e="")=>"pellet"===e?1.1:1,s=(e="",t,r=0)=>i(e)*(e=>1.65*Math.pow(125e-6,e-1))(t)*(e=>(1-Math.exp(-.04*e))/4.15)(r);t.bitternessIbuTinseth=(e,t,r)=>({value:a.sum(e.map(({amount:e,alpha_acid:a,form:i,timing:l})=>{if(!n.use(l).add_to_boil)return 0;const c=u(o.convertMeasurableValue(e,"oz"),a.value);return s(i,o.convertMeasurableValue(t,"sg"),n.boilTime(l))*c*74.89/o.convertMeasurableValue(r,"gal")})),unit:"IBUs"});t.bitternessRatio=(e,t)=>e/t;const l=(e,t,r)=>{if(!n.use(e.timing).add_to_boil)return 0;var a;return(a=Math.floor(n.boilTime(e.timing)+.5),(18.11+13.86*Math.tanh((a-31.32)/18.27))*i(e.form)/100)*u(e.amount.value,e.alpha_acid.value)*74.89/r.value/(1+((o=t.value)<=1.05?0:(o-1.05)/.2));var o};t.bitternessIbuRager=(e,t,r)=>({value:a.sum(e.map(e=>l(e,t,r))),unit:"IBUs"})},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const a=r(0);t.default={mass:{metric:{toBase:e=>e,fromBase:e=>e,units:{mg:{ratio:.001},g:{ratio:1},kg:{ratio:1e3}}},us:{toBase:e=>453.592*e,fromBase:e=>e/453.592,units:{lb:{ratio:1},oz:{ratio:1/16}}}},volume:{metric:{toBase:e=>e,fromBase:e=>e,units:{l:{ratio:1},ml:{ratio:.001}}},imperial:{toBase:e=>1.136523*e,fromBase:e=>e/1.136523,units:{ifloz:{ratio:1/40},ipt:{ratio:.5},iqt:{ratio:1},igal:{ratio:4},ibbl:{ratio:144}}},us:{toBase:e=>.946353*e,fromBase:e=>e/.946353,units:{tsp:{ratio:1/192},tbsp:{ratio:1/64},floz:{ratio:1/32},cup:{ratio:1/4},pt:{ratio:.5},qt:{ratio:1},gal:{ratio:4},bbl:{ratio:124}}}},color:{lovibond:{toBase:a.lovibondToSrm,fromBase:a.srmToLovibond,units:{Lovi:{ratio:1}}},ebc:{toBase:a.ebcToSrm,fromBase:a.srmToEbc,units:{EBC:{ratio:1}}},srm:{toBase:e=>e,fromBase:e=>e,units:{SRM:{ratio:1},srm:{ratio:1}}}},gravity:{sg:{toBase:e=>e,fromBase:e=>e,units:{sg:{ratio:1,precision:4}}},plato:{toBase:a.platoToSG,fromBase:a.sgToPlato,units:{plato:{ratio:1}}},brix:{toBase:a.brixToSG,fromBase:a.sgToBrix,units:{brix:{ratio:1}}}},temperature:{celsius:{toBase:e=>e,fromBase:e=>e,units:{C:{ratio:1,precision:0}}},fahrenheit:{toBase:a.fahrenheitToCelsius,fromBase:a.celsiusToFahrenheit,units:{F:{ratio:1,precision:0}}}},time:{time:{toBase:e=>e,fromBase:e=>e,units:{sec:{ratio:1/60},min:{ratio:1},hr:{ratio:60},day:{ratio:1440},week:{ratio:10080},month:{ratio:43200},year:{ratio:525600}}}},pressure:{pressure:{toBase:e=>e,fromBase:e=>e,units:{kPa:{ratio:1},atm:{ratio:101.325},bar:{ratio:100},psi:{ratio:6.894757}}}}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.updateSpargeVolume=t.calcMashGrainWeight=t.recalculateMashSteps=void 0;const a=r(0),o=r(1),n=r(3);t.recalculateMashSteps=function(e,t,r){let n=0,u=t.value;const i=o.convertMeasurableValue(r,"kg");return e.map((e,t)=>{const r=a.getMeasurableValue(e.step_temperature);switch(e.type){case"decoction":{const{amount:t}=((e,t,r,a,o=0,n=0,u=0)=>{const i=.652*a+r;let s=(.38*a+n*((e,t,r)=>(e*=.8)>0&&t1&&(s=1),{amount:{value:i*s,unit:"l"}}})(u,r,n,i);return Object.assign(Object.assign({},e),{amount:t})}case"infusion":{const{amount:a,infuse_temperature:o}=((e,t,r,a,o)=>{const n=a>0?100:.38*(t-e)/2.5+t;return{infuse_temperature:{unit:"C",value:n},amount:{unit:"l",value:(.38*o+r)*(t-e)/(n-t)}}})(u,r,n,t,i);return n+=a.value,u=r,Object.assign(Object.assign({},e),{infuse_temperature:o,amount:a})}default:return e}})};t.calcMashGrainWeight=e=>({value:a.sum(e.map(({timing:e,type:t,amount:r})=>"grain"===t&&n.use(e).add_to_mash?o.convertMeasurableValue(r,"lb"):0)),unit:"lb"}),t.updateSpargeVolume=function(e,t){return e.map(e=>"sparge"===e.type?Object.assign(Object.assign({},e),{amount:t}):e)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.calcBoilVolumes=t.calcMashVolumes=void 0;const a=r(0),o=r(1),n={pre_boil_size:{value:0,unit:"gal"},boil_time:{value:0,unit:"min"}},u=e=>o.convertMeasurableValue(e,"gal");t.calcMashVolumes=(e,t,r,n)=>{const i=((e=[])=>({value:a.sum(e.map(({type:e,amount:t})=>"infusion"===e?u(t):0)),unit:"gal"}))(t),s=(l=r,{value:.12*o.convertMeasurableValue(l,"lb"),unit:"gal"});var l;const c=null!=n.mash_tun?u(n.mash_tun.loss):0,b={value:u(e)+s.value-i.value+c,unit:"gal"};return{mash_volume:i,sparge_volume:b,total_volume:{value:i.value+b.value,unit:"gal"}}};t.calcBoilVolumes=(e,t=n,r)=>{const a=t||n,o=u(e);let i=0,s=0;null!=r&&null!=r.brew_kettle&&(i=u(r.brew_kettle.loss),s=u(r.brew_kettle.boil_rate_per_hour));return{pre_boil_size:{value:o+s*a.boil_time.value/60+i+.04*o,unit:"gal"}}}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.calcBoilGravity=t.calcFinalGravity=t.calcOriginalGravity=t.calcTotalGravityPoints=void 0;const a=r(0),o=r(1),n=e=>({value:.01*e.value*46/1e3+1,unit:"sg"}),u=(e,t={value:100,unit:"%"},r={value:0,unit:"%"})=>{const a=o.convertMeasurableValue(e.amount,"lb");var u;return(o.convertMeasurableValue(null!=(u=e.yield).potential?u.potential:null!=u.fine_grind?n(u.fine_grind):null!=u.coarse_grind?n(u.coarse_grind):{value:0,unit:"sg"},"sg")-1)*a*((1-r.value/100)*((e,t,r=1)=>"extract"===e||"sugar"===e||"dry extract"===e?r:t)(e.type,t.value/100))};t.calcTotalGravityPoints=(e,t,r)=>a.sum(e.map(e=>u(e,t.brewhouse,r)));const i=(e,t)=>1+t/o.convertMeasurableValue(e,"gal");t.calcOriginalGravity=(e,r,a)=>({unit:"sg",value:i(e,t.calcTotalGravityPoints(r,a))});t.calcFinalGravity=(e,r,a,o)=>({unit:"sg",value:i(e,t.calcTotalGravityPoints(r,a,o[0].attenuation))});t.calcBoilGravity=(e,t,r)=>{return{unit:"sg",value:(a=o.convertMeasurableValue(e,"gal"),n=o.convertMeasurableValue(t,"gal"),u=o.convertMeasurableValue(r,"sg"),1+(u-1)*a/n)};var a,n,u}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.srmToCss=t.srmToRgb=t.calcColor=void 0;const a=r(0),o=r(1);t.calcColor=(e,t)=>{const r=e.map(e=>{return t=o.convertMeasurableValue(e.amount,"lb"),(r=o.convertMeasurableValue(e.color,"Lovi"))>.56?t*r:0;var t,r});var n;return{unit:"SRM",value:(n=a.sum(r)/o.convertMeasurableValue(t,"gal"),1.4922*Math.pow(n,.6859))}};t.srmToRgb=e=>({r:Math.round(Math.min(255,Math.max(0,255*Math.pow(.975,e)))),g:Math.round(Math.min(255,Math.max(0,255*Math.pow(.88,e)))),b:Math.round(Math.min(255,Math.max(0,255*Math.pow(.7,e))))});t.srmToCss=e=>{const r=t.srmToRgb(e);return`rgb(${r.r}, ${r.g}, ${r.b})`}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.calcABV=t.estABV=t.estABW=void 0;const a=r(0),o=r(1);t.estABW=(e,t)=>.105*(e-t);t.estABV=(e,t)=>.132*(e-t);const n=(e,t)=>{const r=a.sgToPlato(e);return(r-(.1808*r+.8192*a.sgToPlato(t)))/(2.0665-.010665*r)*(t/.79661)};t.calcABV=(e,t)=>({value:n(o.convertMeasurableValue(e,"sg"),o.convertMeasurableValue(t,"sg")),unit:"%"})}])})); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9icmV3Y2FsYy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vYnJld2NhbGMvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vYnJld2NhbGMvLi9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vYnJld2NhbGMvLi9zcmMvdW5pdHMudHMiLCJ3ZWJwYWNrOi8vYnJld2NhbGMvLi9zcmMvY29udmVydGVyL2NvbnZlcnRlci50cyIsIndlYnBhY2s6Ly9icmV3Y2FsYy8uL3NyYy90aW1pbmcudHMiLCJ3ZWJwYWNrOi8vYnJld2NhbGMvLi9zcmMvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vYnJld2NhbGMvLi9zcmMvY3VsdHVyZS50cyIsIndlYnBhY2s6Ly9icmV3Y2FsYy8uL3NyYy90eXBlcy95ZWFzdC50cyIsIndlYnBhY2s6Ly9icmV3Y2FsYy8uL3NyYy9jYXJib25hdGlvbi50cyIsIndlYnBhY2s6Ly9icmV3Y2FsYy8uL3NyYy9ob3BzLnRzIiwid2VicGFjazovL2JyZXdjYWxjLy4vc3JjL2NvbnZlcnRlci9kZWZpbml0aW9ucy50cyIsIndlYnBhY2s6Ly9icmV3Y2FsYy8uL3NyYy9tYXNoLnRzIiwid2VicGFjazovL2JyZXdjYWxjLy4vc3JjL3ZvbHVtZXMudHMiLCJ3ZWJwYWNrOi8vYnJld2NhbGMvLi9zcmMvZ3Jhdml0eS50cyIsIndlYnBhY2s6Ly9icmV3Y2FsYy8uL3NyYy9jb2xvci50cyIsIndlYnBhY2s6Ly9icmV3Y2FsYy8uL3NyYy9hYnYudHMiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwid2luZG93IiwiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImtnVG9PdW5jZXMiLCJrIiwia2dUb1BvdW5kcyIsInBvdW5kc1Rva2ciLCJsaXRlcnNUb091bmNlcyIsIm91bmNlc1RvTGl0ZXJzIiwibGl0ZXJzVG9HYWxsb25zIiwiZ2FsbG9uc1RvTGl0ZXJzIiwiZyIsImZhaHJlbmhlaXRUb0NlbHNpdXMiLCJmIiwiY2Vsc2l1c1RvRmFocmVuaGVpdCIsImtwYVRvUHNpIiwia3BhIiwicHNpVG9rcGEiLCJwc2kiLCJzZ1RvUGxhdG8iLCJzZyIsIk1hdGgiLCJwb3ciLCJwbGF0b1RvU0ciLCJlIiwiYnJpeFRvU0ciLCJicml4Iiwic2dUb0JyaXgiLCJzcm1Ub0ViYyIsInNybSIsImViY1RvU3JtIiwiZWJjIiwic3JtVG9Mb3ZpYm9uZCIsImxvdmlib25kVG9Tcm0iLCJsb3ZpYm9uZCIsInN1bSIsImFycmF5IiwicmVkdWNlIiwicHYiLCJjdiIsImNhcGl0YWxpemUiLCJzdHIiLCJzcGxpdCIsIm1hcCIsIndvcmQiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiam9pbiIsInJvdW5kIiwibnVtYmVyIiwicHJlY2lzaW9uIiwiTnVtYmVyIiwidG9GaXhlZCIsImlzT2JqZWN0IiwiaXNNZWFzdXJhYmxlIiwiaXNOb3RFbXB0eUFycmF5IiwiYXJyIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwibWVhc3VyYWJsZSIsInJvdW5kTWVhc3VyYWJsZSIsInVuaXQiLCJjb252ZXJ0TWVhc3VyYWJsZVZhbHVlIiwiY29udmVydCIsInJvdW5kVmFsdWUiLCJmcm9tIiwidG8iLCJFcnJvciIsIm9yaWdpbiIsImRlc3RpbmF0aW9uIiwibWVhc3VyYWJsZVR5cGVLZXkiLCJtZWFzdXJhYmxlVHlwZSIsInN5c3RlbUtleSIsInN5c3RlbSIsInVuaXRzIiwidW5pdFByZWNpc2lvbiIsImFjdHVhbFByZWNpc2lvbiIsInJlc3VsdCIsInJhdGlvIiwiZnJvbUJhc2UiLCJ0b0Jhc2UiLCJ1c2UiLCJ0aW1pbmciLCJhZGRfdG9fYm9pbCIsImFkZF90b19tYXNoIiwiYm9pbFRpbWUiLCJ0aW1lIiwieWVhc3RDb3VudCIsInllYXN0TmVlZGVkIiwieWVhc3RTdGFydGVyR3JvdyIsImNhbGNDYWxvcmllcyIsImNhcmJvbmF0aW9uIiwiYml0dGVybmVzc0lidVJhZ2VyIiwiYml0dGVybmVzc0lidVRpbnNldGgiLCJiaXR0ZXJuZXNzUmF0aW8iLCJjYWxjTWFzaEdyYWluV2VpZ2h0IiwicmVjYWxjdWxhdGVNYXNoU3RlcHMiLCJjYWxjQm9pbFZvbHVtZXMiLCJjYWxjTWFzaFZvbHVtZXMiLCJjYWxjT3JpZ2luYWxHcmF2aXR5IiwiY2FsY0ZpbmFsR3Jhdml0eSIsImNhbGNCb2lsR3Jhdml0eSIsInNybVRvQ3NzIiwic3JtVG9SZ2IiLCJjYWxjQ29sb3IiLCJjYWxjQUJWIiwiY2FsY3VsYXRlUmVjaXBlQmVlckpTT04iLCJyZWNpcGUiLCJtYXNoIiwiZXF1aXBtZW50IiwiYmF0Y2hfc2l6ZSIsImJvaWwiLCJlZmZpY2llbmN5IiwiaW5ncmVkaWVudHMiLCJmZXJtZW50YWJsZV9hZGRpdGlvbnMiLCJob3BfYWRkaXRpb25zIiwiY3VsdHVyZV9hZGRpdGlvbnMiLCJvcmlnaW5hbF9ncmF2aXR5IiwiZmluYWxfZ3Jhdml0eSIsImNvbG9yIiwiaWJ1IiwiYWJ2Iiwidm9sdW1lcyIsImNhbGN1bGF0ZWRNYXNoIiwiY2FsY3VsYXRlZEJvaWwiLCJkZWZhdWx0Q3VsdHVyZUFkZGl0aW9uIiwidHlwZSIsImZvcm0iLCJhdHRlbnVhdGlvbiIsInByZV9ib2lsX3NpemUiLCJtYXNoR3JhaW5XZWlnaHQiLCJtYXNoU3RlcHMiLCJtYXNoX3N0ZXBzIiwiZ3JhaW5fdGVtcGVyYXR1cmUiLCJzcGFyZ2Vfdm9sdW1lIiwibWFzaF92b2x1bWUiLCJ0b3RhbF92b2x1bWUiLCJ1cGRhdGVTcGFyZ2VWb2x1bWUiLCJib2lsR3Jhdml0eSIsInN0YXRzIiwiYWxjb2hvbF9ieV92b2x1bWUiLCJpYnVfZXN0aW1hdGUiLCJjb2xvcl9lc3RpbWF0ZSIsInBpdGNoUmF0ZSIsImJhdGNoU2l6ZSIsImFtb3VudCIsImN1bHR1cmVEYXRlIiwiY3VycmVudERhdGUiLCJEYXRlIiwidG9TdHJpbmciLCJjZWxsRGVuc2l0eSIsInNsdXJyeURlbnNpdHkiLCJZZWFzdEZvcm1zIiwiZHJ5IiwibGlxdWlkIiwiZmxvb3IiLCJwYXJzZSIsInZpYWJpbGl0eSIsInNsYW50IiwieWVhc3RHcm93dGgiLCJzdGFydGluZ1llYXN0Q291bnQiLCJzdGFydGVyU2l6ZSIsImdyYXZpdHkiLCJwb3VuZHNETUUiLCJncmFtc0RNRSIsImdyb3d0aFJhdGUiLCJlbmRpbmdDb3VudCIsIlllYXN0VHlwZXMiLCJhbGUiLCJsYWdlciIsIndoZWF0Iiwid2luZSIsImNoYW1wYWduZSIsImN1bHR1cmUiLCJrZWdQcmVzc3VyZSIsImNhcmJWb2x1bWUiLCJtYXgiLCJub3JtYWxpemVUZW1wIiwic3VnYXIiLCJwcmltaW5nU3VnYXIiLCJrZWdTdWdhciIsImNvcm5TdWdhciIsImRtZSIsIm9nIiwiZmciLCJjYWxvcmllc0FsYyIsImNhbG9yaWVzRXh0IiwiYWxwaGFBY2lkVW5pdHMiLCJhbW91bnRJbk96IiwiYWxwaGFBY2lkIiwicGVsbGV0RmFjdG9yIiwiaWJ1VXRpbGl6YXRpb24iLCJob3BGb3JtIiwiYm9pbEdyYXZpdHlWYWx1ZSIsImJvaWxUaW1lSW5NaW4iLCJncmF2aXR5RmFjdG9yIiwiZXhwIiwidGltZUZhY3RvciIsImhvcHMiLCJwb3N0Qm9pbFZvbHVtZSIsImFscGhhX2FjaWQiLCJBQVUiLCJndSIsInJhZ2VySG9wSWJ1IiwiaG9wIiwidGFuaCIsInNnYiIsIm1hc3MiLCJtZXRyaWMiLCJ2IiwibWciLCJrZyIsInVzIiwibGIiLCJveiIsInZvbHVtZSIsIm1sIiwiaW1wZXJpYWwiLCJpZmxveiIsImlwdCIsImlxdCIsImlnYWwiLCJpYmJsIiwidHNwIiwidGJzcCIsImZsb3oiLCJjdXAiLCJwdCIsInF0IiwiZ2FsIiwiYmJsIiwiTG92aSIsIkVCQyIsIlNSTSIsInBsYXRvIiwidGVtcGVyYXR1cmUiLCJjZWxzaXVzIiwiQyIsImZhaHJlbmhlaXQiLCJGIiwic2VjIiwibWluIiwiaHIiLCJkYXkiLCJ3ZWVrIiwibW9udGgiLCJ5ZWFyIiwicHJlc3N1cmUiLCJrUGEiLCJhdG0iLCJiYXIiLCJzdGFydFZvbHVtZSIsInN0YXJ0VGVtcCIsImdyYWluV2VpZ2h0VmFsdWUiLCJzdGVwIiwiaW5kZXgiLCJzdGVwVGVtcCIsImdldE1lYXN1cmFibGVWYWx1ZSIsInN0ZXBfdGVtcGVyYXR1cmUiLCJ0YXJnZXRUZW1wIiwidHVuTWFzcyIsInR1blNwZWNpZmljSGVhdCIsInR1blZvbHVtZSIsInRvdFZvbHVtZSIsImZyYWN0aW9uIiwiYWRqdXN0VHVuTWFzcyIsImNhbGNEZWNvY3Rpb25TdGVwIiwiaW5mdXNlX3RlbXBlcmF0dXJlIiwiaW5mdXNlVGVtcCIsImNhbGNJbmZ1c2lvblN0ZXAiLCJmZXJtZW50YWJsZXMiLCJzcGFyZ2VWb2x1bWUiLCJkZWZhdWx0Qm9pbCIsImJvaWxfdGltZSIsImNvbnZlcnRUb0dhbGxvbnMiLCJtYXNoV2F0ZXJWb2x1bWUiLCJjYWxjTWFzaFdhdGVyVm9sdW1lIiwiZ3JhaW5BYnNvcnB0aW9uIiwiZ3JhaW5XZWlnaHQiLCJtYXNoTG9zcyIsIm1hc2hfdHVuIiwibG9zcyIsImJvaWxQcm9maWxlIiwiYm9pbExvc3MiLCJib2lsUmF0ZSIsImJyZXdfa2V0dGxlIiwiYm9pbF9yYXRlX3Blcl9ob3VyIiwieWllbGRUb1BvdGVudGlhbCIsImZlcm1lbnRhYmxlWWllbGQiLCJjYWxjRmVybWVudGFibGVHcmF2aXR5UG9pbnRzIiwiZmVybWVudGFibGUiLCJicmV3aG91c2VFZmZpY2llbmN5IiwiYW1vdW50VmFsdWUiLCJ5aWVsZCIsInBvdGVudGlhbCIsImZpbmVfZ3JpbmQiLCJjb2Fyc2VfZ3JpbmQiLCJlcXVpcG1lbnRFZmZpY2llbmN5Iiwic3VnYXJFZmZpY2llbmN5IiwiY2FsY0Zlcm1lbnRhYmxlRWZmaWNpZW5jeSIsImNhbGNUb3RhbEdyYXZpdHlQb2ludHMiLCJicmV3aG91c2UiLCJjYWxjR3Jhdml0eSIsImdyYXZpdHlQb2ludHMiLCJjdWx0dXJlcyIsImJvaWxTaXplIiwiT0ciLCJiYXRjaFNpemVJbkdhbGxvbnMiLCJib2lsU2l6ZUluR2FsbG9ucyIsIm9nSW5TRyIsImZlcm1lbnRhYmxlc01DVSIsIm1jdSIsImIiLCJlc3RBQlciLCJvZ1B0cyIsImZnUHRzIiwiZXN0QUJWIiwiZXN0QUJWcmVhbEV4dHJhY3QiLCJvZSJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELElBQ1EsbUJBQVhHLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxHQUFJSCxHQUNlLGlCQUFaQyxRQUNkQSxRQUFrQixTQUFJRCxJQUV0QkQsRUFBZSxTQUFJQyxJQVJyQixDQVNHSyxRQUFRLFdBQ1gsTyxZQ1RFLElBQUlDLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVQLFFBR25DLElBQUlDLEVBQVNJLEVBQWlCRSxHQUFZLENBQ3pDQyxFQUFHRCxFQUNIRSxHQUFHLEVBQ0hULFFBQVMsSUFVVixPQU5BVSxFQUFRSCxHQUFVSSxLQUFLVixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTTSxHQUcvREwsRUFBT1EsR0FBSSxFQUdKUixFQUFPRCxRQTBEZixPQXJEQU0sRUFBb0JNLEVBQUlGLEVBR3hCSixFQUFvQk8sRUFBSVIsRUFHeEJDLEVBQW9CUSxFQUFJLFNBQVNkLEVBQVNlLEVBQU1DLEdBQzNDVixFQUFvQlcsRUFBRWpCLEVBQVNlLElBQ2xDRyxPQUFPQyxlQUFl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QUFNNUIsS0FBSzhOLElBQUksSUFBSzlOLEtBQUs2SixJQUFJLEVBQUcsSUFBTTdKLEtBQUtDLElBQUksS0FBT08sTUFDOURsQixFQUFHVSxLQUFLNEIsTUFBTTVCLEtBQUs4TixJQUFJLElBQUs5TixLQUFLNkosSUFBSSxFQUFHLElBQU03SixLQUFLQyxJQUFJLElBQU1PLE1BQzdENlIsRUFBR3JTLEtBQUs0QixNQUFNNUIsS0FBSzhOLElBQUksSUFBSzlOLEtBQUs2SixJQUFJLEVBQUcsSUFBTTdKLEtBQUtDLElBQUksR0FBS08sUUFHakQsRUFBQTJFLFNBQVkzRSxJQUN2QixNQUFNNEYsRUFBUSxFQUFBaEIsU0FBUzVFLEdBRXZCLE1BQU8sT0FBTzRGLEVBQU14SSxNQUFNd0ksRUFBTTlHLE1BQU04RyxFQUFNaU0sTyxpSEM5QzlDLGFBQ0EsT0FPYSxFQUFBQyxPQUFTLENBQUNDLEVBQWVDLElBQW9DLE1BQWpCRCxFQUFRQyxHQUNwRCxFQUFBQyxPQUFTLENBQUNGLEVBQWVDLElBQW9DLE1BQWpCRCxFQUFRQyxHQUdqRSxNQUFNRSxFQUFvQixDQUFDdEksRUFBWUMsS0FDckMsTUFBTXNJLEVBQUssRUFBQTdTLFVBQVVzSyxHQU1yQixPQUhhdUksR0FERixNQUFTQSxFQUFLLE1BRGQsRUFBQTdTLFVBQVV1SyxNQUVJLE9BQVMsUUFBV3NJLElBQzFCdEksRUFBSyxTQUtiLEVBQUEvRSxRQUFVLENBQUM4RSxFQUFpQkMsS0FDaEMsQ0FDTHRNLE1BQU8yVSxFQUNMLEVBQUEvUCx1QkFBdUJ5SCxFQUFJLE1BQzNCLEVBQUF6SCx1QkFBdUIwSCxFQUFJLE9BRTdCM0gsS0FBTSIsImZpbGUiOiJicmV3Y2FsYy5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJicmV3Y2FsY1wiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJicmV3Y2FsY1wiXSA9IGZhY3RvcnkoKTtcbn0pKHdpbmRvdywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDQpO1xuIiwiZXhwb3J0IGNvbnN0IGtnVG9PdW5jZXMgPSAoazogbnVtYmVyKSA9PiBrICogMzUuMjczOTYxOVxuXG5leHBvcnQgY29uc3Qga2dUb1BvdW5kcyA9IChrOiBudW1iZXIpID0+IGtnVG9PdW5jZXMoaykgLyAxNlxuXG5leHBvcnQgY29uc3QgcG91bmRzVG9rZyA9IChwOiBudW1iZXIpID0+IHAgLyAyLjIwNFxuXG5leHBvcnQgY29uc3QgbGl0ZXJzVG9PdW5jZXMgPSAobDogbnVtYmVyKSA9PiBsIC8gMC4wMjk1NzM1XG5cbmV4cG9ydCBjb25zdCBvdW5jZXNUb0xpdGVycyA9IChvOiBudW1iZXIpID0+IG8gKiAwLjAyOTU3MzVcblxuZXhwb3J0IGNvbnN0IGxpdGVyc1RvR2FsbG9ucyA9IChsOiBudW1iZXIpID0+IGxpdGVyc1RvT3VuY2VzKGwpIC8gMTI4XG5cbmV4cG9ydCBjb25zdCBnYWxsb25zVG9MaXRlcnMgPSAoZzogbnVtYmVyKSA9PiBvdW5jZXNUb0xpdGVycyhnICogMTI4KVxuXG5leHBvcnQgY29uc3QgZmFocmVuaGVpdFRvQ2Vsc2l1cyA9IChmOiBudW1iZXIpID0+IChmIC0gMzIpIC8gMS44XG5cbmV4cG9ydCBjb25zdCBjZWxzaXVzVG9GYWhyZW5oZWl0ID0gKGM6IG51bWJlcikgPT4gYyAqIDEuOCArIDMyXG5cbmV4cG9ydCBjb25zdCBrcGFUb1BzaSA9IChrcGE6IG51bWJlcikgPT4ga3BhICogMC4xNDUwMzc3Mzc3MzAyMDkyM1xuXG5leHBvcnQgY29uc3QgcHNpVG9rcGEgPSAocHNpOiBudW1iZXIpID0+IHBzaSAqIDYuODk0NzU3MjkzMTY4MzYxXG5cbmV4cG9ydCBjb25zdCBzZ1RvUGxhdG8gPSAoc2c6IG51bWJlcikgPT5cbiAgLTYxNi44NjggK1xuICAxMTExLjE0ICogc2cgLVxuICA2MzAuMjcyICogTWF0aC5wb3coc2csIDIpICtcbiAgMTM1Ljk5NyAqIE1hdGgucG93KHNnLCAzKVxuXG5leHBvcnQgY29uc3QgcGxhdG9Ub1NHID0gKGU6IG51bWJlcikgPT4gMSArIGUgLyAoMjU4LjYgLSAoZSAvIDI1OC4yKSAqIDIyNy4xKVxuXG5leHBvcnQgY29uc3QgYnJpeFRvU0cgPSAoYnJpeDogbnVtYmVyKSA9PlxuICBicml4IC8gKDI1OC42IC0gKGJyaXggLyAyNTguMikgKiAyMjcuMSkgKyAxXG5cbmV4cG9ydCBjb25zdCBzZ1RvQnJpeCA9IChzZzogbnVtYmVyKSA9PlxuICAtNjY5LjU2MjIgK1xuICAxMjYyLjc3NDkgKiBzZyAtXG4gIDc3NS42ODIxICogTWF0aC5wb3coc2csIDIpICtcbiAgMTgyLjQ2MDEgKiBNYXRoLnBvdyhzZywgMylcblxuZXhwb3J0IGNvbnN0IHNybVRvRWJjID0gKHNybTogbnVtYmVyKSA9PiBzcm0gKiAxLjk3XG5cbmV4cG9ydCBjb25zdCBlYmNUb1NybSA9IChlYmM6IG51bWJlcikgPT4gZWJjICogMC41MDhcblxuZXhwb3J0IGNvbnN0IHNybVRvTG92aWJvbmQgPSAoc3JtOiBudW1iZXIpID0+IChzcm0gKyAwLjc2KSAvIDEuMzU0NlxuXG5leHBvcnQgY29uc3QgbG92aWJvbmRUb1NybSA9IChsb3ZpYm9uZDogbnVtYmVyKSA9PiAxLjM1NDYgKiBsb3ZpYm9uZCAtIDAuNzZcblxuZXhwb3J0IGNvbnN0IHN1bSA9IChhcnJheTogQXJyYXk8bnVtYmVyPik6IG51bWJlciA9PlxuICBhcnJheS5yZWR1Y2UoKHB2LCBjdikgPT4gcHYgKyBjdiwgMClcblxuY29uc3Qgc2NhbGVJbmdyZWRpZW50cyA9IChzY2FsZUZhY3RvcjogbnVtYmVyLCBpbmdyZWRpZW50czogYW55KSA9PlxuICBpbmdyZWRpZW50cy5tYXAoKGkpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uaSxcbiAgICAgIGFtb3VudDogc2NhbGVGYWN0b3IgKiBpLmFtb3VudCxcbiAgICB9XG4gIH0pXG5cbmV4cG9ydCBjb25zdCBjYXBpdGFsaXplID0gKHN0cjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgd29yZHM6IEFycmF5PHN0cmluZz4gPSBzdHIuc3BsaXQoJyAnKVxuICBjb25zdCBjYXBpdGFsaXplZFdvcmRzOiBBcnJheTxzdHJpbmc+ID0gd29yZHMubWFwKFxuICAgICh3b3JkKSA9PiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKVxuICApXG4gIHJldHVybiBjYXBpdGFsaXplZFdvcmRzLmpvaW4oJyAnKVxufVxuXG5leHBvcnQgY29uc3QgaXNOb3RFbXB0eUFycmF5ID0gKGFycjogQXJyYXk8YW55Pik6IGJvb2xlYW4gPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgcmV0dXJuIGFyci5sZW5ndGggPiAwXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3VuZChudW1iZXIsIHByZWNpc2lvbiA9IDApIHtcbiAgaWYgKHR5cGVvZiBudW1iZXIgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIE51bWJlcihudW1iZXIudG9GaXhlZChwcmVjaXNpb24pKVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01lYXN1cmFibGUob2JqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgaXNPYmplY3Qob2JqZWN0KSAmJlxuICAgIG9iamVjdC5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSAmJlxuICAgIG9iamVjdC5oYXNPd25Qcm9wZXJ0eSgndW5pdCcpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1lYXN1cmFibGVWYWx1ZShtZWFzdXJhYmxlKSB7XG4gIGlmIChpc01lYXN1cmFibGUobWVhc3VyYWJsZSkpIHtcbiAgICByZXR1cm4gbWVhc3VyYWJsZS52YWx1ZVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCByb3VuZE1lYXN1cmFibGUgPSAobSwgcHJlY2lzaW9uKSA9PiB7XG4gIHJldHVybiB7XG4gICAgdW5pdDogbS51bml0LFxuICAgIHZhbHVlOiByb3VuZChtLnZhbHVlLCBwcmVjaXNpb24pLFxuICB9XG59XG4iLCJpbXBvcnQgeyBjb252ZXJ0IH0gZnJvbSAnLi9jb252ZXJ0ZXIvY29udmVydGVyJ1xuXG50eXBlIE1lYXN1cmFibGUgPSB7XG4gIHZhbHVlOiBudW1iZXJcbiAgdW5pdDogc3RyaW5nXG59XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlID0gKFxuICBtZWFzdXJhYmxlOiBNZWFzdXJhYmxlLFxuICB1bml0OiBzdHJpbmcsXG4gIHByZWNpc2lvbjogbnVtYmVyID0gNFxuKSA9PiB7XG4gIHJldHVybiBjb252ZXJ0KG1lYXN1cmFibGUudmFsdWUsIG1lYXN1cmFibGUudW5pdCwgdW5pdCwgcHJlY2lzaW9uKVxufVxuIiwiaW1wb3J0IGRlZmluaXRpb25zIGZyb20gJy4vZGVmaW5pdGlvbnMnXG5cbmNvbnN0IERFRkFVTFRfUFJFQ0lTSU9OID0gMlxuXG5jb25zdCByb3VuZFZhbHVlID0gKHZhbHVlOiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyID0+XG4gICt2YWx1ZS50b0ZpeGVkKHByZWNpc2lvbilcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBmcm9tXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9cbiAqIEBwYXJhbSB7bnVtYmVyfSBwcmVjaXNpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0ID0gKFxuICB2YWx1ZTogbnVtYmVyLFxuICBmcm9tOiBzdHJpbmcsXG4gIHRvOiBzdHJpbmcsXG4gIHByZWNpc2lvbj86IG51bWJlclxuKTogbnVtYmVyID0+IHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuYWJsZSB0byBjb252ZXJ0IG51bGwgb3IgdW5kZWZpbmVkIWApXG4gIH1cblxuICBsZXQgb3JpZ2luID0gbnVsbFxuICBsZXQgZGVzdGluYXRpb24gPSBudWxsXG5cbiAgZm9yIChjb25zdCBtZWFzdXJhYmxlVHlwZUtleSBpbiBkZWZpbml0aW9ucykge1xuICAgIGNvbnN0IG1lYXN1cmFibGVUeXBlID0gZGVmaW5pdGlvbnNbbWVhc3VyYWJsZVR5cGVLZXldXG4gICAgZm9yIChjb25zdCBzeXN0ZW1LZXkgaW4gbWVhc3VyYWJsZVR5cGUpIHtcbiAgICAgIGNvbnN0IHN5c3RlbSA9IG1lYXN1cmFibGVUeXBlW3N5c3RlbUtleV1cbiAgICAgIGlmIChzeXN0ZW0udW5pdHMuaGFzT3duUHJvcGVydHkoZnJvbSkpIHtcbiAgICAgICAgb3JpZ2luID0geyB1bml0OiBzeXN0ZW0udW5pdHNbZnJvbV0sIHN5c3RlbSB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzeXN0ZW0udW5pdHMuaGFzT3duUHJvcGVydHkodG8pKSB7XG4gICAgICAgIGRlc3RpbmF0aW9uID0geyB1bml0OiBzeXN0ZW0udW5pdHNbdG9dLCBzeXN0ZW0gfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcmlnaW4gIT0gbnVsbCAmJiBkZXN0aW5hdGlvbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbmFibGUgdG8gY29udmVydCBbJHttZWFzdXJhYmxlVHlwZUtleX1dIHVuaXQgWyR7ZnJvbX1dIHRvIFske3RvfV0hYFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChvcmlnaW4gPT0gbnVsbCAmJiBkZXN0aW5hdGlvbiAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbmFibGUgdG8gY29udmVydCBbJHtmcm9tfV0gdG8gWyR7bWVhc3VyYWJsZVR5cGVLZXl9XSB1bml0IFske3RvfV0hYFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChvcmlnaW4gIT0gbnVsbCAmJiBkZXN0aW5hdGlvbiAhPSBudWxsKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcmlnaW4gPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5pdCBub3QgZm91bmQgWyR7ZnJvbX1dIWApXG4gIH1cblxuICBpZiAoZGVzdGluYXRpb24gPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5pdCBub3QgZm91bmQgWyR7dG99XSFgKVxuICB9XG5cbiAgY29uc3QgdW5pdFByZWNpc2lvbiA9XG4gICAgZGVzdGluYXRpb24udW5pdC5wcmVjaXNpb24gIT0gbnVsbFxuICAgICAgPyBkZXN0aW5hdGlvbi51bml0LnByZWNpc2lvblxuICAgICAgOiBERUZBVUxUX1BSRUNJU0lPTlxuXG4gIGNvbnN0IGFjdHVhbFByZWNpc2lvbiA9IHByZWNpc2lvbiAhPSBudWxsID8gcHJlY2lzaW9uIDogdW5pdFByZWNpc2lvblxuXG4gIGlmIChmcm9tID09PSB0bykge1xuICAgIHJldHVybiByb3VuZFZhbHVlKHZhbHVlLCBhY3R1YWxQcmVjaXNpb24pXG4gIH1cblxuICBsZXQgcmVzdWx0ID0gdmFsdWUgKiBvcmlnaW4udW5pdC5yYXRpb1xuXG4gIGlmIChvcmlnaW4uc3lzdGVtICE9PSBkZXN0aW5hdGlvbi5zeXN0ZW0pIHtcbiAgICByZXN1bHQgPSBkZXN0aW5hdGlvbi5zeXN0ZW0uZnJvbUJhc2Uob3JpZ2luLnN5c3RlbS50b0Jhc2UocmVzdWx0KSlcbiAgfVxuXG4gIHJlc3VsdCAvPSBkZXN0aW5hdGlvbi51bml0LnJhdGlvXG5cbiAgcmV0dXJuIHJvdW5kVmFsdWUocmVzdWx0LCBhY3R1YWxQcmVjaXNpb24pXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRpbWluZ1R5cGUgfSBmcm9tICcuL3R5cGVzL2JlZXJqc29uJ1xuXG5leHBvcnQgY29uc3QgdXNlID0gKFxuICB0aW1pbmc6IFRpbWluZ1R5cGUgPSB7fVxuKToge1xuICBhZGRfdG9fYm9pbDogYm9vbGVhblxuICBhZGRfdG9fbWFzaDogYm9vbGVhblxufSA9PiAoe1xuICBhZGRfdG9fYm9pbDogdGltaW5nLnVzZSA9PT0gJ2FkZF90b19ib2lsJyxcbiAgYWRkX3RvX21hc2g6ICF0aW1pbmcudXNlIHx8IHRpbWluZy51c2UgPT09ICdhZGRfdG9fbWFzaCcsXG59KVxuXG5leHBvcnQgY29uc3QgYm9pbFRpbWUgPSAodGltaW5nOiBUaW1pbmdUeXBlID0ge30pOiBudW1iZXIgPT5cbiAgdGltaW5nLnVzZSA9PT0gJ2FkZF90b19ib2lsJyA/IHRpbWluZy50aW1lLnZhbHVlIDogMFxuIiwiaW1wb3J0IHsgeWVhc3RDb3VudCwgeWVhc3ROZWVkZWQsIHllYXN0U3RhcnRlckdyb3cgfSBmcm9tICcuL2N1bHR1cmUnXG5pbXBvcnQgeyBjYWxjQ2Fsb3JpZXMsIGNhcmJvbmF0aW9uIH0gZnJvbSAnLi9jYXJib25hdGlvbidcblxuaW1wb3J0IHtcbiAgYml0dGVybmVzc0lidVJhZ2VyLFxuICBiaXR0ZXJuZXNzSWJ1VGluc2V0aCxcbiAgYml0dGVybmVzc1JhdGlvLFxufSBmcm9tICcuL2hvcHMnXG5cbmltcG9ydCB7IGlzTm90RW1wdHlBcnJheSwgcm91bmRNZWFzdXJhYmxlIH0gZnJvbSAnLi91dGlscydcblxuaW1wb3J0IHsgY29udmVydE1lYXN1cmFibGVWYWx1ZSB9IGZyb20gJy4vdW5pdHMnXG5pbXBvcnQgeyBjb252ZXJ0IH0gZnJvbSAnLi9jb252ZXJ0ZXIvY29udmVydGVyJ1xuXG5pbXBvcnQge1xuICBjYWxjTWFzaEdyYWluV2VpZ2h0LFxuICByZWNhbGN1bGF0ZU1hc2hTdGVwcyxcbiAgdXBkYXRlU3BhcmdlVm9sdW1lLFxufSBmcm9tICcuL21hc2gnXG5pbXBvcnQgeyBjYWxjQm9pbFZvbHVtZXMsIGNhbGNNYXNoVm9sdW1lcyB9IGZyb20gJy4vdm9sdW1lcydcbmltcG9ydCB7IGNhbGNXYXRlckNoZW1pc3RyeSB9IGZyb20gJy4vd2F0ZXJDaGVtJ1xuXG5pbXBvcnQgdHlwZSB7XG4gIFJlY2lwZVR5cGUsXG4gIE1hc2hQcm9jZWR1cmVUeXBlLFxuICBFcXVpcG1lbnRJdGVtVHlwZSxcbiAgR3Jhdml0eVR5cGUsXG4gIENvbG9yVHlwZSxcbiAgUGVyY2VudFR5cGUsXG4gIEJpdHRlcm5lc3NUeXBlLFxuICBDdWx0dXJlQWRkaXRpb25UeXBlLFxuICBWb2x1bWVUeXBlLFxuICBCb2lsUHJvY2VkdXJlVHlwZSxcbn0gZnJvbSAnLi90eXBlcy9iZWVyanNvbidcblxuaW1wb3J0IHtcbiAgY2FsY09yaWdpbmFsR3Jhdml0eSxcbiAgY2FsY0ZpbmFsR3Jhdml0eSxcbiAgY2FsY0JvaWxHcmF2aXR5LFxufSBmcm9tICcuL2dyYXZpdHknXG5pbXBvcnQgeyBzcm1Ub0Nzcywgc3JtVG9SZ2IsIGNhbGNDb2xvciB9IGZyb20gJy4vY29sb3InXG5pbXBvcnQgeyBjYWxjQUJWIH0gZnJvbSAnLi9hYnYnXG5cbnR5cGUgU3RhdHMgPSB7XG4gIG9yaWdpbmFsX2dyYXZpdHk6IEdyYXZpdHlUeXBlXG4gIGZpbmFsX2dyYXZpdHk6IEdyYXZpdHlUeXBlXG4gIGFsY29ob2xfYnlfdm9sdW1lOiBQZXJjZW50VHlwZVxuICBpYnVfZXN0aW1hdGU6IEJpdHRlcm5lc3NUeXBlXG4gIGNvbG9yX2VzdGltYXRlOiBDb2xvclR5cGVcbn1cblxudHlwZSBWb2x1bWVzID0ge1xuICBzcGFyZ2Vfdm9sdW1lPzogVm9sdW1lVHlwZVxuICBtYXNoX3ZvbHVtZT86IFZvbHVtZVR5cGVcbiAgdG90YWxfdm9sdW1lPzogVm9sdW1lVHlwZVxufVxuXG5jb25zdCBjYWxjdWxhdGVSZWNpcGVCZWVySlNPTiA9IChcbiAgcmVjaXBlOiBSZWNpcGVUeXBlLFxuICBtYXNoOiBNYXNoUHJvY2VkdXJlVHlwZSxcbiAgZXF1aXBtZW50OiB7XG4gICAgaGx0PzogRXF1aXBtZW50SXRlbVR5cGVcbiAgICBtYXNoX3R1bj86IEVxdWlwbWVudEl0ZW1UeXBlXG4gICAgYnJld19rZXR0bGU/OiBFcXVpcG1lbnRJdGVtVHlwZVxuICAgIGZlcm1lbnRlcj86IEVxdWlwbWVudEl0ZW1UeXBlXG4gIH1cbik6IHtcbiAgc3RhdHM6IFN0YXRzXG4gIG1hc2g6IE1hc2hQcm9jZWR1cmVUeXBlXG4gIGJvaWw6IEJvaWxQcm9jZWR1cmVUeXBlXG4gIHZvbHVtZXM6IFZvbHVtZXNcbn0gPT4ge1xuICBjb25zdCB7IGJhdGNoX3NpemUsIGJvaWwsIGVmZmljaWVuY3ksIGluZ3JlZGllbnRzIH0gPSByZWNpcGVcblxuICBjb25zdCB7IGZlcm1lbnRhYmxlX2FkZGl0aW9ucywgaG9wX2FkZGl0aW9ucywgY3VsdHVyZV9hZGRpdGlvbnMgfSA9XG4gICAgaW5ncmVkaWVudHNcblxuICBsZXQgb3JpZ2luYWxfZ3Jhdml0eTogR3Jhdml0eVR5cGUgPSB7XG4gICAgdW5pdDogJ3NnJyxcbiAgICB2YWx1ZTogbnVsbCxcbiAgfVxuICBsZXQgZmluYWxfZ3Jhdml0eTogR3Jhdml0eVR5cGUgPSB7XG4gICAgdW5pdDogJ3NnJyxcbiAgICB2YWx1ZTogbnVsbCxcbiAgfVxuICBsZXQgY29sb3I6IENvbG9yVHlwZSA9IHtcbiAgICB1bml0OiAnU1JNJyxcbiAgICB2YWx1ZTogbnVsbCxcbiAgfVxuICBsZXQgaWJ1OiBCaXR0ZXJuZXNzVHlwZSA9IHtcbiAgICB1bml0OiAnSUJVcycsXG4gICAgdmFsdWU6IG51bGwsXG4gIH1cbiAgbGV0IGFidjogUGVyY2VudFR5cGUgPSB7XG4gICAgdW5pdDogJyUnLFxuICAgIHZhbHVlOiBudWxsLFxuICB9XG4gIGxldCB2b2x1bWVzID0gbnVsbFxuICBsZXQgY2FsY3VsYXRlZE1hc2ggPSBudWxsXG4gIGxldCBjYWxjdWxhdGVkQm9pbCA9IG51bGxcblxuICBpZiAoaXNOb3RFbXB0eUFycmF5KGZlcm1lbnRhYmxlX2FkZGl0aW9ucykpIHtcbiAgICBvcmlnaW5hbF9ncmF2aXR5ID0gY2FsY09yaWdpbmFsR3Jhdml0eShcbiAgICAgIGJhdGNoX3NpemUsXG4gICAgICBmZXJtZW50YWJsZV9hZGRpdGlvbnMsXG4gICAgICBlZmZpY2llbmN5XG4gICAgKVxuXG4gICAgY29uc3QgZGVmYXVsdEN1bHR1cmVBZGRpdGlvbjogQ3VsdHVyZUFkZGl0aW9uVHlwZSA9IHtcbiAgICAgIG5hbWU6ICdEZWZhdWx0IEN1bHR1cmUnLFxuICAgICAgdHlwZTogJ2FsZScsXG4gICAgICBmb3JtOiAnbGlxdWlkJyxcbiAgICAgIGF0dGVudWF0aW9uOiB7IHZhbHVlOiA3NSwgdW5pdDogJyUnIH0sXG4gICAgfVxuXG4gICAgZmluYWxfZ3Jhdml0eSA9IGNhbGNGaW5hbEdyYXZpdHkoXG4gICAgICBiYXRjaF9zaXplLFxuICAgICAgZmVybWVudGFibGVfYWRkaXRpb25zLFxuICAgICAgZWZmaWNpZW5jeSxcbiAgICAgIGlzTm90RW1wdHlBcnJheShjdWx0dXJlX2FkZGl0aW9ucylcbiAgICAgICAgPyBjdWx0dXJlX2FkZGl0aW9uc1xuICAgICAgICA6IFtkZWZhdWx0Q3VsdHVyZUFkZGl0aW9uXVxuICAgIClcblxuICAgIGFidiA9IGNhbGNBQlYob3JpZ2luYWxfZ3Jhdml0eSwgZmluYWxfZ3Jhdml0eSlcblxuICAgIGNvbnN0IHsgcHJlX2JvaWxfc2l6ZSB9ID0gY2FsY0JvaWxWb2x1bWVzKGJhdGNoX3NpemUsIGJvaWwsIGVxdWlwbWVudClcbiAgICB2b2x1bWVzID0ge1xuICAgICAgcHJlX2JvaWxfc2l6ZSxcbiAgICB9XG5cbiAgICBpZiAobWFzaCkge1xuICAgICAgY29uc3QgbWFzaEdyYWluV2VpZ2h0ID0gY2FsY01hc2hHcmFpbldlaWdodChmZXJtZW50YWJsZV9hZGRpdGlvbnMpXG5cbiAgICAgIGNvbnN0IG1hc2hTdGVwcyA9IHJlY2FsY3VsYXRlTWFzaFN0ZXBzKFxuICAgICAgICBtYXNoLm1hc2hfc3RlcHMsXG4gICAgICAgIG1hc2guZ3JhaW5fdGVtcGVyYXR1cmUsXG4gICAgICAgIG1hc2hHcmFpbldlaWdodFxuICAgICAgKVxuXG4gICAgICBjb25zdCB7IHNwYXJnZV92b2x1bWUsIG1hc2hfdm9sdW1lLCB0b3RhbF92b2x1bWUgfSA9IGNhbGNNYXNoVm9sdW1lcyhcbiAgICAgICAgcHJlX2JvaWxfc2l6ZSxcbiAgICAgICAgbWFzaFN0ZXBzLFxuICAgICAgICBtYXNoR3JhaW5XZWlnaHQsXG4gICAgICAgIGVxdWlwbWVudFxuICAgICAgKVxuXG4gICAgICB2b2x1bWVzID0ge1xuICAgICAgICAuLi52b2x1bWVzLFxuICAgICAgICBzcGFyZ2Vfdm9sdW1lLFxuICAgICAgICBtYXNoX3ZvbHVtZSxcbiAgICAgICAgdG90YWxfdm9sdW1lLFxuICAgICAgfVxuXG4gICAgICBjYWxjdWxhdGVkTWFzaCA9IHtcbiAgICAgICAgLi4ubWFzaCxcbiAgICAgICAgbWFzaF9zdGVwczogdXBkYXRlU3BhcmdlVm9sdW1lKG1hc2hTdGVwcywgc3BhcmdlX3ZvbHVtZSksXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJvaWwpIHtcbiAgICAgIGNhbGN1bGF0ZWRCb2lsID0geyAuLi5ib2lsLCBwcmVfYm9pbF9zaXplIH1cbiAgICB9XG5cbiAgICBjb2xvciA9IGNhbGNDb2xvcihmZXJtZW50YWJsZV9hZGRpdGlvbnMsIGJhdGNoX3NpemUpXG5cbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGhvcF9hZGRpdGlvbnMpKSB7XG4gICAgICBjb25zdCBib2lsR3Jhdml0eSA9IGNhbGNCb2lsR3Jhdml0eShcbiAgICAgICAgYmF0Y2hfc2l6ZSxcbiAgICAgICAgcHJlX2JvaWxfc2l6ZSxcbiAgICAgICAgb3JpZ2luYWxfZ3Jhdml0eVxuICAgICAgKVxuICAgICAgaWJ1ID0gYml0dGVybmVzc0lidVRpbnNldGgoaG9wX2FkZGl0aW9ucywgYm9pbEdyYXZpdHksIGJhdGNoX3NpemUpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0czoge1xuICAgICAgb3JpZ2luYWxfZ3Jhdml0eTogcm91bmRNZWFzdXJhYmxlKG9yaWdpbmFsX2dyYXZpdHksIDMpLFxuICAgICAgZmluYWxfZ3Jhdml0eTogcm91bmRNZWFzdXJhYmxlKGZpbmFsX2dyYXZpdHksIDMpLFxuICAgICAgYWxjb2hvbF9ieV92b2x1bWU6IHJvdW5kTWVhc3VyYWJsZShhYnYsIDEpLFxuICAgICAgaWJ1X2VzdGltYXRlOiByb3VuZE1lYXN1cmFibGUoaWJ1LCAxKSxcbiAgICAgIGNvbG9yX2VzdGltYXRlOiByb3VuZE1lYXN1cmFibGUoY29sb3IsIDEpLFxuICAgIH0sXG4gICAgdm9sdW1lcyxcbiAgICBtYXNoOiBjYWxjdWxhdGVkTWFzaCxcbiAgICBib2lsOiBjYWxjdWxhdGVkQm9pbCxcbiAgfVxufVxuXG5leHBvcnQge1xuICBjb252ZXJ0LFxuICBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlLFxuICBjYWxjT3JpZ2luYWxHcmF2aXR5LFxuICBjYWxjRmluYWxHcmF2aXR5LFxuICBjYWxjQm9pbEdyYXZpdHksXG4gIGNhbGNDb2xvcixcbiAgc3JtVG9Dc3MsXG4gIHNybVRvUmdiLFxuICBjYWxjQUJWLFxuICBiaXR0ZXJuZXNzSWJ1UmFnZXIsXG4gIGJpdHRlcm5lc3NJYnVUaW5zZXRoLFxuICBiaXR0ZXJuZXNzUmF0aW8sXG4gIGNhbGN1bGF0ZVJlY2lwZUJlZXJKU09OLFxuICBjYWxjQm9pbFZvbHVtZXMsXG4gIGNhbGNNYXNoVm9sdW1lcyxcbiAgY2FsY01hc2hHcmFpbldlaWdodCxcbiAgcmVjYWxjdWxhdGVNYXNoU3RlcHMsXG4gIC8vVE9ETzogdXNlIGJlZXJKU09OXG4gIGNhbGNDYWxvcmllcyxcbiAgY2FyYm9uYXRpb24sXG4gIHllYXN0Q291bnQsXG4gIHllYXN0TmVlZGVkLFxuICB5ZWFzdFN0YXJ0ZXJHcm93LFxufVxuIiwiaW1wb3J0IHsgbGl0ZXJzVG9HYWxsb25zLCBwb3VuZHNUb2tnLCBzZ1RvUGxhdG8gfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHR5cGUgeyBZZWFzdCB9IGZyb20gJy4vdHlwZXMveWVhc3QnXG5pbXBvcnQgeyBZZWFzdEZvcm1zIH0gZnJvbSAnLi90eXBlcy95ZWFzdCdcblxuLy8gaHR0cHM6Ly93d3cuYnJld2Vyc2ZyaWVuZC5jb20veWVhc3QtcGl0Y2gtcmF0ZS1hbmQtc3RhcnRlci1jYWxjdWxhdG9yL1xuXG4vLyBtaWxsaW9uIGNlbGxzIC8gbWwgLyBkZWdyZWUgUGxhdG9cblxuLy8gTWluaW11bSBtYW51ZmFjdHVyZXIncyByZWNvbW1lbmRhdGlvbjogMC4zNSAoYWxlIG9ubHksIGZyZXNoIHllYXN0IG9ubHkpXG4vLyBNaWRkbGUgb2YgdGhlIHJvYWQgUHJvIEJyZXdlciAwLjc1IChhbGUpXG4vLyBQcm8gQnJld2VyIDEuMDAgKGhpZ2ggZ3Jhdml0eSBhbGUpXG4vLyBQcm8gQnJld2VyIDEuNTAgKG1pbmltdW0gZm9yIGxhZ2VyKVxuLy8gUHJvIEJyZXdlciAyLjAgKGhpZ2ggZ3Jhdml0eSBsYWdlcilcblxuLy8gY2VsbERlbnNpdHkgPSBiaWxsaW9uIGNlbGxzIC8gZ3JhbVxuLy8gU2FmYWxlIEstOTdcdDE0XG4vLyBTYWZhbGUgUy0wNFx0OFxuLy8gU2FmYnJldyBULTU4XHQxOFxuLy8gU2FmYnJldyBTLTMzXHQxNlxuLy8gU2FmbGFnZXIgUy0yM1x0MTBcbi8vIFNhZmxhZ2VyIFMtMTg5XHQ5XG5cbi8vIEEgcGFjay92aWFsIGNvbnRhaW5zIDEwMCBiaWxsaW9uIGNlbGxzIGF0IHRoZSBkYXRlIG9mIG1hbnVmYWN0dXJlLlxuLy8gTGlxdWlkIHllYXN0IHZpYWJpbGl0eSBkcm9wcyAyMSUgZWFjaCBtb250aCwgb3IgMC43JSBlYWNoIGRheSwgZnJvbSB0aGUgZGF0ZSBvZiBtYW51ZmFjdHVyZS5cbi8vIFRoZSBhc3N1bXB0aW9uIGlzIHRoZSB5ZWFzdCB2aWFiaWxpdHkgZHJvcHMgaW4gYSBsaW5lYXIgZmFzaGlvbi4gSW4gNC43NSBtb250aHMgb3IgMTQzIGRheXMsIHRoaXMgY2FsY3VsYXRvciBhc3N1bWVzIHRoZSB5ZWFzdCBpcyAxMDAlIGRlYWQgKDEwMCAvIDAuNyA9IH4xNDMpLlxuXG4vLyBtaWxsaW9uIDEwIF4gNlxuLy8gYmlsbGlvbiAxMCBeIDlcblxuZXhwb3J0IGNvbnN0IHllYXN0TmVlZGVkID0gKHBpdGNoUmF0ZTogbnVtYmVyLCBiYXRjaFNpemU6IG51bWJlciwgZTogbnVtYmVyKSA9PlxuICAocGl0Y2hSYXRlICogKGJhdGNoU2l6ZSAqIDEwMDApICogZSkgLyAxMDAwXG5cbmNvbnN0IHZpYWJpbGl0eSA9IChcbiAgY3VycmVudERhdGU6IHN0cmluZyxcbiAgY3VsdHVyZURhdGU6IHN0cmluZyA9IG5ldyBEYXRlKCkudG9TdHJpbmcoKVxuKSA9PlxuICAxMDAgLVxuICBNYXRoLmZsb29yKChEYXRlLnBhcnNlKGN1cnJlbnREYXRlKSAtIERhdGUucGFyc2UoY3VsdHVyZURhdGUpKSAvIDg2NDAwMDAwKSAqXG4gICAgMC43XG5cbmV4cG9ydCBjb25zdCB5ZWFzdENvdW50ID0gKFxuICB7IGFtb3VudCwgZm9ybSwgY3VsdHVyZURhdGUgfTogWWVhc3QsXG4gIGN1cnJlbnREYXRlOiBzdHJpbmcgPSBuZXcgRGF0ZSgpLnRvU3RyaW5nKCksXG4gIGNlbGxEZW5zaXR5OiBudW1iZXIgPSA4LFxuICAvLyBiaWxsaW9uIGNlbGxzIC8gbWxcbiAgc2x1cnJ5RGVuc2l0eTogbnVtYmVyID0gMVxuKSA9PiB7XG4gIHN3aXRjaCAoZm9ybSkge1xuICAgIGNhc2UgWWVhc3RGb3Jtcy5kcnk6XG4gICAgICByZXR1cm4gY2VsbERlbnNpdHkgKiBhbW91bnQgKiAxMDAwXG4gICAgY2FzZSBZZWFzdEZvcm1zLmxpcXVpZDpcbiAgICAgIHJldHVybiAxMDAgKiAodmlhYmlsaXR5KGN1cnJlbnREYXRlLCBjdWx0dXJlRGF0ZSkgLyAxMDApICogYW1vdW50XG4gICAgY2FzZSBZZWFzdEZvcm1zLnNsYW50OlxuICAgICAgcmV0dXJuIHNsdXJyeURlbnNpdHkgKiBhbW91bnQgKiAxMDAwXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm90SW1wbGVtZW50ZWRFcnJvcicpXG4gIH1cbn1cblxuY29uc3QgeWVhc3RHcm93dGggPSAocmF0aW8pID0+IDIuMzMgLSAwLjY3ICogcmF0aW9cblxuY29uc3QgZ3Jvd3RoUmF0ZUN1cnZlQnJhdWthaXNlclN0aXIgPSAocmF0aW86IG51bWJlcikgPT5cbiAgcmF0aW8gPCAxLjRcbiAgICA/IDEuNFxuICAgIDogcmF0aW8gPj0gMS40ICYmIHJhdGlvIDw9IDMuNSAmJiB5ZWFzdEdyb3d0aChyYXRpbykgPiAwXG4gICAgPyB5ZWFzdEdyb3d0aChyYXRpbylcbiAgICA6IDBcblxuZXhwb3J0IGNvbnN0IHllYXN0U3RhcnRlckdyb3cgPSAoXG4gIHN0YXJ0aW5nWWVhc3RDb3VudDogbnVtYmVyLFxuICBzdGFydGVyU2l6ZTogbnVtYmVyLFxuICBncmF2aXR5OiBudW1iZXIsXG4gIGJhdGNoU2l6ZTogbnVtYmVyXG4pID0+IHtcbiAgY29uc3Qgdm9sdW1lTGV2ZWwgPSBsaXRlcnNUb0dhbGxvbnMoc3RhcnRlclNpemUpXG4gIGNvbnN0IHBvaW50c05lZWRlZCA9IHZvbHVtZUxldmVsICogKGdyYXZpdHkgLSAxKSAqIDEwMDBcbiAgY29uc3QgcG91bmRzRE1FID0gcG9pbnRzTmVlZGVkIC8gNDJcbiAgY29uc3QgZ3JhbXNETUUgPSBwb3VuZHNUb2tnKHBvdW5kc0RNRSkgKiAxMDAwXG4gIGNvbnN0IGNlbGxzVG9HcmFtc1JhdGlvID0gc3RhcnRpbmdZZWFzdENvdW50IC8gZ3JhbXNETUVcblxuICBjb25zdCBncm93dGhSYXRlID0gZ3Jvd3RoUmF0ZUN1cnZlQnJhdWthaXNlclN0aXIoY2VsbHNUb0dyYW1zUmF0aW8pXG4gIGNvbnN0IGVuZGluZ0NvdW50ID0gZ3JhbXNETUUgKiBncm93dGhSYXRlICsgc3RhcnRpbmdZZWFzdENvdW50XG4gIGNvbnN0IHBpdGNoUmF0ZSA9XG4gICAgKGVuZGluZ0NvdW50ICogMTAwMCkgLyBzZ1RvUGxhdG8oZ3Jhdml0eSkgLyAoYmF0Y2hTaXplIC8gMTAwMClcblxuICByZXR1cm4ge1xuICAgIGdyb3d0aFJhdGU6IGdyb3d0aFJhdGUsXG4gICAgZW5kaW5nQ291bnQ6IGVuZGluZ0NvdW50LFxuICAgIHBpdGNoUmF0ZTogcGl0Y2hSYXRlLFxuICB9XG59XG4iLCJleHBvcnQgdHlwZSBZZWFzdCA9IHtcbiAgbmFtZTogc3RyaW5nXG4gIGFtb3VudDogbnVtYmVyXG4gIGF0dGVudWF0aW9uPzogbnVtYmVyXG4gIGZvcm06ICdMaXF1aWQnIHwgJ0RyeScgfCAnU2xhbnQnIHwgJ0N1bHR1cmUnXG4gIHR5cGU6ICdBbGUnIHwgJ0xhZ2VyJyB8ICdXaGVhdCcgfCAnV2luZScgfCAnQ2hhbXBhZ25lJ1xuICBjdWx0dXJlRGF0ZT86IHN0cmluZ1xufVxuXG5leHBvcnQgY29uc3QgWWVhc3RUeXBlcyA9IHtcbiAgYWxlOiAnQWxlJyxcbiAgbGFnZXI6ICdMYWdlcicsXG4gIHdoZWF0OiAnV2hlYXQnLFxuICB3aW5lOiAnV2luZScsXG4gIGNoYW1wYWduZTogJ0NoYW1wYWduZScsXG59XG5leHBvcnQgY29uc3QgWWVhc3RGb3JtcyA9IHtcbiAgbGlxdWlkOiAnTGlxdWlkJyxcbiAgZHJ5OiAnRHJ5JyxcbiAgc2xhbnQ6ICdTbGFudCcsXG4gIGN1bHR1cmU6ICdDdWx0dXJlJyxcbn1cbiIsImltcG9ydCB7IGNlbHNpdXNUb0ZhaHJlbmhlaXQsIGxpdGVyc1RvR2FsbG9ucyB9IGZyb20gJy4vdXRpbHMnXG5cbi8vIGh0dHBzOi8vYnlvLmNvbS95ZWFzdC9pdGVtLzE2NC1iYWxhbmNpbmcteW91ci1kcmFmdC1zeXN0ZW0tYWR2YW5jZWQtYnJld2luZ1xuXG5jb25zdCBrZWdQcmVzc3VyZSA9IChjYXJiVm9sdW1lOiBudW1iZXIsIHQ6IG51bWJlcikgPT5cbiAgTWF0aC5tYXgoXG4gICAgMCxcbiAgICAtMTYuNjk5OSAtXG4gICAgICAwLjAxMDEwNTkgKiB0ICtcbiAgICAgIDAuMDAxMTY1MTIgKiB0ICogdCArXG4gICAgICAwLjE3MzM1NCAqIHQgKiBjYXJiVm9sdW1lICtcbiAgICAgIDQuMjQyNjcgKiBjYXJiVm9sdW1lIC1cbiAgICAgIDAuMDY4NDIyNiAqIGNhcmJWb2x1bWUgKiBjYXJiVm9sdW1lXG4gIClcblxuLy8gaHR0cDovL3d3dy5ob21lYnJld3RhbGsuY29tL3Nob3d0aHJlYWQucGhwP3Q9NDQxMzgzXG5jb25zdCBwcmltaW5nU3VnYXIgPSAoY2FyYlZvbHVtZSwgdCwgYmF0Y2hTaXplKSA9PlxuICAxNS4xOTUgKiBiYXRjaFNpemUgKiAoY2FyYlZvbHVtZSAtIDMuMDM3OCArIDUuMDA2MmUtMiAqIHQgLSAyLjY1NTVlLTQgKiB0ICogdClcblxuY29uc3Qgbm9ybWFsaXplVGVtcCA9ICh0OiBudW1iZXIpID0+IE1hdGgubWF4KDMyLjAsIGNlbHNpdXNUb0ZhaHJlbmhlaXQodCkpXG5cbmV4cG9ydCBjb25zdCBjYXJib25hdGlvbiA9IChcbiAgY2FyYlZvbHVtZTogbnVtYmVyLFxuICB0OiBudW1iZXIsXG4gIGJhdGNoU2l6ZTogbnVtYmVyXG4pID0+IHtcbiAgY29uc3Qgc3VnYXIgPSBwcmltaW5nU3VnYXIoXG4gICAgY2FyYlZvbHVtZSxcbiAgICBub3JtYWxpemVUZW1wKHQpLFxuICAgIGxpdGVyc1RvR2FsbG9ucyhiYXRjaFNpemUpXG4gIClcblxuICByZXR1cm4ge1xuICAgIGtlZ1ByZXNzdXJlOiBrZWdQcmVzc3VyZShjYXJiVm9sdW1lLCBub3JtYWxpemVUZW1wKHQpKSxcbiAgICBrZWdTdWdhcjogc3VnYXIgKiAwLjUsXG4gICAgY29yblN1Z2FyOiBzdWdhcixcbiAgICBkbWU6IHN1Z2FyICogMS41MzgsXG4gIH1cbn1cblxuLy8gaHR0cDovL2JlZXJzbWl0aC5jb20vYmxvZy8yMDExLzAyLzA0L2NvdW50aW5nLWNhbG9yaWVzLWluLXlvdXItaG9tZWJyZXdlZC1iZWVyL1xuLy8gQ2Fsb3JpZV9mcm9tX2FsY29ob2wgPSAxODgxLjIyICogRkcgKiAoT0ctRkcpLygxLjc3NS1PRylcbi8vIENhbG9yaWVzX2Zyb21fY2FyYnMgPSAzNTUwLjAgKiBGRyAqICgoMC4xODA4ICogT0cpICsgKDAuODE5MiAqIEZHKSDigJMgMS4wMDA0KVxuLy8gVG90YWwgY2Fsb3JpZXMg4oCTIGp1c3QgYWRkIHRoZSBDYWxvcmllc19mcm9tX2FsY29ob2wgdG8gQ2Fsb3JpZXNfZnJvbV9jYXJic1xuXG5jb25zdCBjYWxvcmllc0FsYyA9IChvZywgZmcpID0+IDE4ODEuMjIgKiBmZyAqICgob2cgLSBmZykgLyAoMS43NzUgLSBvZykpXG5jb25zdCBjYWxvcmllc0V4dCA9IChvZywgZmcpID0+XG4gIDM1NTAuMCAqIGZnICogKDAuMTgwOCAqIG9nICsgMC44MTkyICogZmcgLSAxLjAwMDQpXG5cbmV4cG9ydCBjb25zdCBjYWxjQ2Fsb3JpZXMgPSAob2c6IG51bWJlciwgZmc6IG51bWJlcikgPT5cbiAgY2Fsb3JpZXNBbGMob2csIGZnKSArIGNhbG9yaWVzRXh0KG9nLCBmZylcbiIsImltcG9ydCB7IHN1bSB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlIH0gZnJvbSAnLi91bml0cydcbmltcG9ydCB7IHVzZSwgYm9pbFRpbWUgfSBmcm9tICcuL3RpbWluZydcbmltcG9ydCB7XG4gIFZvbHVtZVR5cGUsXG4gIEhvcEFkZGl0aW9uVHlwZSxcbiAgQml0dGVybmVzc1R5cGUsXG4gIEdyYXZpdHlUeXBlLFxufSBmcm9tICcuL3R5cGVzL2JlZXJqc29uJ1xuXG5jb25zdCBhbHBoYUFjaWRVbml0cyA9IChhbW91bnRJbk96OiBudW1iZXIsIGFscGhhQWNpZDogbnVtYmVyKTogbnVtYmVyID0+XG4gIGFtb3VudEluT3ogKiBhbHBoYUFjaWRcblxuY29uc3QgZ3Jhdml0eUZhY3RvciA9IChib2lsR3Jhdml0eVZhbHVlOiBudW1iZXIpOiBudW1iZXIgPT5cbiAgMS42NSAqIE1hdGgucG93KDAuMDAwMTI1LCBib2lsR3Jhdml0eVZhbHVlIC0gMSlcblxuY29uc3QgdGltZUZhY3RvciA9IChib2lsVGltZUluTWluOiBudW1iZXIpOiBudW1iZXIgPT5cbiAgKDEgLSBNYXRoLmV4cCgtMC4wNCAqIGJvaWxUaW1lSW5NaW4pKSAvIDQuMTVcblxuY29uc3QgcGVsbGV0RmFjdG9yID0gKGZvcm06IHN0cmluZyA9ICcnKTogbnVtYmVyID0+XG4gIGZvcm0gPT09ICdwZWxsZXQnID8gMS4xIDogMVxuXG5jb25zdCBpYnVVdGlsaXphdGlvbiA9IChcbiAgaG9wRm9ybTogc3RyaW5nID0gJycsXG4gIGJvaWxHcmF2aXR5VmFsdWU6IG51bWJlcixcbiAgYm9pbFRpbWVJbk1pbjogbnVtYmVyID0gMFxuKSA9PlxuICBwZWxsZXRGYWN0b3IoaG9wRm9ybSkgKlxuICBncmF2aXR5RmFjdG9yKGJvaWxHcmF2aXR5VmFsdWUpICpcbiAgdGltZUZhY3Rvcihib2lsVGltZUluTWluKVxuXG4vLyBHbGVubiBUaW5zZXRoIGRldmVsb3BlZCB0aGUgZm9sbG93aW5nIGZvcm11bGEgdG8gY2FsY3VsYXRlIGJpdHRlcm5lc3MgaW4gSUJVczpcbi8vIElCVSA9IChVICogb3pzIGhvcHMgKiA3NDkwKS9Wb2x1bWUgKGluIGdhbGxvbnMpIFUgcmVwcmVzZW50cyB0aGUgdXRpbGl6YXRpb24gb2YgdGhlIGhvcHMgKGNvbnZlcnNpb24gdG8gaXNvLWFscGhhLWFjaWRzKSBiYXNlZCBvbiBib2lsIHRpbWUgYW5kIHdvcnQgZ3Jhdml0eS5cbi8vIFUgPSBiaWduZXNzIGZhY3RvciAqIGJvaWwgdGltZSBmYWN0b3JcblxuLy8gaHR0cDovL3d3dy5ob3d0b2JyZXcuY29tL2Jvb2svc2VjdGlvbi0xL2hvcHMvaG9wLWJpdHRlcmluZy1jYWxjdWxhdGlvbnNcblxuZXhwb3J0IGNvbnN0IGJpdHRlcm5lc3NJYnVUaW5zZXRoID0gKFxuICBob3BzOiBBcnJheTxIb3BBZGRpdGlvblR5cGU+LFxuICBib2lsR3Jhdml0eTogR3Jhdml0eVR5cGUsXG4gIHBvc3RCb2lsVm9sdW1lOiBWb2x1bWVUeXBlXG4pOiBCaXR0ZXJuZXNzVHlwZSA9PiB7XG4gIGNvbnN0IGJpdHRlcm5lc3MgPSBzdW0oXG4gICAgaG9wcy5tYXAoKHsgYW1vdW50LCBhbHBoYV9hY2lkLCBmb3JtLCB0aW1pbmcgfSkgPT4ge1xuICAgICAgLy8gVE9ETzogcmVzZWFyY2ggbmVlZGVkXG5cbiAgICAgIGlmICghdXNlKHRpbWluZykuYWRkX3RvX2JvaWwpIHtcbiAgICAgICAgcmV0dXJuIDBcbiAgICAgIH1cblxuICAgICAgY29uc3QgQUFVID0gYWxwaGFBY2lkVW5pdHMoXG4gICAgICAgIGNvbnZlcnRNZWFzdXJhYmxlVmFsdWUoYW1vdW50LCAnb3onKSxcbiAgICAgICAgYWxwaGFfYWNpZC52YWx1ZVxuICAgICAgKVxuICAgICAgY29uc3QgVSA9IGlidVV0aWxpemF0aW9uKFxuICAgICAgICBmb3JtLFxuICAgICAgICBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlKGJvaWxHcmF2aXR5LCAnc2cnKSxcbiAgICAgICAgYm9pbFRpbWUodGltaW5nKVxuICAgICAgKVxuXG4gICAgICByZXR1cm4gKFUgKiBBQVUgKiA3NC44OSkgLyBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlKHBvc3RCb2lsVm9sdW1lLCAnZ2FsJylcbiAgICB9KVxuICApXG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogYml0dGVybmVzcyxcbiAgICB1bml0OiAnSUJVcycsXG4gIH1cbn1cblxuLy8gVGhlIHByZWNlaXZlZCBiaXR0ZXJuZXNzIGV4cHJlc3NlZCBpbiBhIHJhdGlvIG9mIElCVXMgdG8gZ3Jhdml0eS4gVGhpcyBpcyBmcmVxdWVudGx5IHNlZW4gZXhwcmVzc2VkIGFzIEJVL0dVLlxuLy8gVGhlIEdyYXZpdHkgVW5pdHMgYXJlIHRoZSBkZWNpbWFsIHBvcnRpb24gb2YgdGhlIG9yaWdpbmFsIGdyYXZpdHlcbi8vIGh0dHA6Ly9iZWVyc21pdGguY29tL2Jsb2cvMjAwOS8wOS8yNi9iYWxhbmNpbmcteW91ci1iZWVyLXdpdGgtdGhlLWJpdHRlcm5lc3MtcmF0aW8vXG5leHBvcnQgY29uc3QgYml0dGVybmVzc1JhdGlvID0gKGlidTogbnVtYmVyLCBndTogbnVtYmVyKSA9PiBpYnUgLyBndVxuXG4vLyByYWdlclxuY29uc3QgcmFnZXJIb3BHcmF2aXR5QWRqdXN0bWVudCA9IChzZ2IpID0+XG4gIHNnYiA8PSAxLjA1ID8gMCA6IChzZ2IgLSAxLjA1KSAvIDAuMlxuY29uc3QgcmFnZXJVdGlsID0gKHRpbWUpID0+IDE4LjExICsgMTMuODYgKiBNYXRoLnRhbmgoKHRpbWUgLSAzMS4zMikgLyAxOC4yNylcblxuY29uc3QgcmFnZXJIb3BJYnUgPSAoXG4gIGhvcDogSG9wQWRkaXRpb25UeXBlLFxuICBib2lsR3Jhdml0eTogR3Jhdml0eVR5cGUsXG4gIHBvc3RCb2lsVm9sdW1lOiBWb2x1bWVUeXBlXG4pOiBudW1iZXIgPT4ge1xuICBpZiAoIXVzZShob3AudGltaW5nKS5hZGRfdG9fYm9pbCkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICBjb25zdCBVID1cbiAgICAocmFnZXJVdGlsKE1hdGguZmxvb3IoYm9pbFRpbWUoaG9wLnRpbWluZykgKyAwLjUpKSAqXG4gICAgICBwZWxsZXRGYWN0b3IoaG9wLmZvcm0pKSAvXG4gICAgMTAwXG4gIGNvbnN0IEFBVSA9IGFscGhhQWNpZFVuaXRzKGhvcC5hbW91bnQudmFsdWUsIGhvcC5hbHBoYV9hY2lkLnZhbHVlKVxuXG4gIHJldHVybiAoXG4gICAgKFUgKiBBQVUgKiA3NC44OSkgL1xuICAgIHBvc3RCb2lsVm9sdW1lLnZhbHVlIC9cbiAgICAoMS4wICsgcmFnZXJIb3BHcmF2aXR5QWRqdXN0bWVudChib2lsR3Jhdml0eS52YWx1ZSkpXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IGJpdHRlcm5lc3NJYnVSYWdlciA9IChcbiAgaG9wczogQXJyYXk8SG9wQWRkaXRpb25UeXBlPixcbiAgYm9pbEdyYXZpdHk6IEdyYXZpdHlUeXBlLFxuICBwb3N0Qm9pbFZvbHVtZTogVm9sdW1lVHlwZVxuKTogQml0dGVybmVzc1R5cGUgPT4ge1xuICBjb25zdCBiaXR0ZXJuZXNzID0gc3VtKFxuICAgIGhvcHMubWFwKChob3A6IEhvcEFkZGl0aW9uVHlwZSkgPT5cbiAgICAgIHJhZ2VySG9wSWJ1KGhvcCwgYm9pbEdyYXZpdHksIHBvc3RCb2lsVm9sdW1lKVxuICAgIClcbiAgKVxuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IGJpdHRlcm5lc3MsXG4gICAgdW5pdDogJ0lCVXMnLFxuICB9XG59XG4iLCJpbXBvcnQge1xuICBzcm1Ub0ViYyxcbiAgZWJjVG9Tcm0sXG4gIHNybVRvTG92aWJvbmQsXG4gIGxvdmlib25kVG9Tcm0sXG4gIHNnVG9QbGF0byxcbiAgcGxhdG9Ub1NHLFxuICBzZ1RvQnJpeCxcbiAgYnJpeFRvU0csXG4gIGZhaHJlbmhlaXRUb0NlbHNpdXMsXG4gIGNlbHNpdXNUb0ZhaHJlbmhlaXQsXG59IGZyb20gJy4uL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1hc3M6IHtcbiAgICBtZXRyaWM6IHtcbiAgICAgIHRvQmFzZTogKHYpID0+IHYsXG4gICAgICBmcm9tQmFzZTogKHYpID0+IHYsXG4gICAgICB1bml0czoge1xuICAgICAgICBtZzoge1xuICAgICAgICAgIHJhdGlvOiAwLjAwMSxcbiAgICAgICAgfSxcbiAgICAgICAgZzoge1xuICAgICAgICAgIHJhdGlvOiAxLFxuICAgICAgICB9LFxuICAgICAgICBrZzoge1xuICAgICAgICAgIHJhdGlvOiAxMDAwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICAgIHVzOiB7XG4gICAgICB0b0Jhc2U6ICh2KSA9PiB2ICogNDUzLjU5MixcbiAgICAgIGZyb21CYXNlOiAodikgPT4gdiAvIDQ1My41OTIsXG4gICAgICB1bml0czoge1xuICAgICAgICBsYjoge1xuICAgICAgICAgIHJhdGlvOiAxLFxuICAgICAgICB9LFxuICAgICAgICBvejoge1xuICAgICAgICAgIHJhdGlvOiAxIC8gMTYsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG5cbiAgdm9sdW1lOiB7XG4gICAgbWV0cmljOiB7XG4gICAgICB0b0Jhc2U6ICh2KSA9PiB2LFxuICAgICAgZnJvbUJhc2U6ICh2KSA9PiB2LFxuICAgICAgdW5pdHM6IHtcbiAgICAgICAgbDoge1xuICAgICAgICAgIHJhdGlvOiAxLFxuICAgICAgICB9LFxuICAgICAgICBtbDoge1xuICAgICAgICAgIHJhdGlvOiAwLjAwMSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGltcGVyaWFsOiB7XG4gICAgICB0b0Jhc2U6ICh2KSA9PiB2ICogMS4xMzY1MjMsXG4gICAgICBmcm9tQmFzZTogKHYpID0+IHYgLyAxLjEzNjUyMyxcbiAgICAgIHVuaXRzOiB7XG4gICAgICAgIGlmbG96OiB7XG4gICAgICAgICAgcmF0aW86IDEgLyA0MCxcbiAgICAgICAgfSxcbiAgICAgICAgaXB0OiB7XG4gICAgICAgICAgcmF0aW86IDEgLyAyLFxuICAgICAgICB9LFxuICAgICAgICBpcXQ6IHtcbiAgICAgICAgICByYXRpbzogMSxcbiAgICAgICAgfSxcbiAgICAgICAgaWdhbDoge1xuICAgICAgICAgIHJhdGlvOiA0LFxuICAgICAgICB9LFxuICAgICAgICBpYmJsOiB7XG4gICAgICAgICAgcmF0aW86IDE0NCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIHVzOiB7XG4gICAgICB0b0Jhc2U6ICh2KSA9PiB2ICogMC45NDYzNTMsXG4gICAgICBmcm9tQmFzZTogKHYpID0+IHYgLyAwLjk0NjM1MyxcbiAgICAgIHVuaXRzOiB7XG4gICAgICAgIHRzcDoge1xuICAgICAgICAgIHJhdGlvOiAxIC8gMTkyLFxuICAgICAgICB9LFxuICAgICAgICB0YnNwOiB7XG4gICAgICAgICAgcmF0aW86IDEgLyA2NCxcbiAgICAgICAgfSxcbiAgICAgICAgZmxvejoge1xuICAgICAgICAgIHJhdGlvOiAxIC8gMzIsXG4gICAgICAgIH0sXG4gICAgICAgIGN1cDoge1xuICAgICAgICAgIHJhdGlvOiAxIC8gNCxcbiAgICAgICAgfSxcbiAgICAgICAgcHQ6IHtcbiAgICAgICAgICByYXRpbzogMSAvIDIsXG4gICAgICAgIH0sXG4gICAgICAgIHF0OiB7XG4gICAgICAgICAgcmF0aW86IDEsXG4gICAgICAgIH0sXG4gICAgICAgIGdhbDoge1xuICAgICAgICAgIHJhdGlvOiA0LFxuICAgICAgICB9LFxuICAgICAgICBiYmw6IHtcbiAgICAgICAgICByYXRpbzogMTI0LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuXG4gIGNvbG9yOiB7XG4gICAgbG92aWJvbmQ6IHtcbiAgICAgIHRvQmFzZTogbG92aWJvbmRUb1NybSxcbiAgICAgIGZyb21CYXNlOiBzcm1Ub0xvdmlib25kLFxuICAgICAgdW5pdHM6IHtcbiAgICAgICAgTG92aToge1xuICAgICAgICAgIHJhdGlvOiAxLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgZWJjOiB7XG4gICAgICB0b0Jhc2U6IGViY1RvU3JtLFxuICAgICAgZnJvbUJhc2U6IHNybVRvRWJjLFxuICAgICAgdW5pdHM6IHtcbiAgICAgICAgRUJDOiB7XG4gICAgICAgICAgcmF0aW86IDEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBzcm06IHtcbiAgICAgIHRvQmFzZTogKHYpID0+IHYsXG4gICAgICBmcm9tQmFzZTogKHYpID0+IHYsXG4gICAgICB1bml0czoge1xuICAgICAgICBTUk06IHtcbiAgICAgICAgICByYXRpbzogMSxcbiAgICAgICAgfSxcbiAgICAgICAgc3JtOiB7XG4gICAgICAgICAgcmF0aW86IDEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG5cbiAgZ3Jhdml0eToge1xuICAgIHNnOiB7XG4gICAgICB0b0Jhc2U6ICh2KSA9PiB2LFxuICAgICAgZnJvbUJhc2U6ICh2KSA9PiB2LFxuICAgICAgdW5pdHM6IHtcbiAgICAgICAgc2c6IHtcbiAgICAgICAgICByYXRpbzogMSxcbiAgICAgICAgICBwcmVjaXNpb246IDQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG5cbiAgICBwbGF0bzoge1xuICAgICAgdG9CYXNlOiBwbGF0b1RvU0csXG4gICAgICBmcm9tQmFzZTogc2dUb1BsYXRvLFxuICAgICAgdW5pdHM6IHtcbiAgICAgICAgcGxhdG86IHtcbiAgICAgICAgICByYXRpbzogMSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGJyaXg6IHtcbiAgICAgIHRvQmFzZTogYnJpeFRvU0csXG4gICAgICBmcm9tQmFzZTogc2dUb0JyaXgsXG4gICAgICB1bml0czoge1xuICAgICAgICBicml4OiB7XG4gICAgICAgICAgcmF0aW86IDEsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG5cbiAgdGVtcGVyYXR1cmU6IHtcbiAgICBjZWxzaXVzOiB7XG4gICAgICB0b0Jhc2U6ICh2KSA9PiB2LFxuICAgICAgZnJvbUJhc2U6ICh2KSA9PiB2LFxuICAgICAgdW5pdHM6IHtcbiAgICAgICAgQzoge1xuICAgICAgICAgIHJhdGlvOiAxLFxuICAgICAgICAgIHByZWNpc2lvbjogMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcblxuICAgIGZhaHJlbmhlaXQ6IHtcbiAgICAgIHRvQmFzZTogZmFocmVuaGVpdFRvQ2Vsc2l1cyxcbiAgICAgIGZyb21CYXNlOiBjZWxzaXVzVG9GYWhyZW5oZWl0LFxuICAgICAgdW5pdHM6IHtcbiAgICAgICAgRjoge1xuICAgICAgICAgIHJhdGlvOiAxLFxuICAgICAgICAgIHByZWNpc2lvbjogMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcblxuICB0aW1lOiB7XG4gICAgdGltZToge1xuICAgICAgdG9CYXNlOiAodikgPT4gdixcbiAgICAgIGZyb21CYXNlOiAodikgPT4gdixcbiAgICAgIHVuaXRzOiB7XG4gICAgICAgIHNlYzoge1xuICAgICAgICAgIHJhdGlvOiAxIC8gNjAsXG4gICAgICAgIH0sXG4gICAgICAgIG1pbjoge1xuICAgICAgICAgIHJhdGlvOiAxLFxuICAgICAgICB9LFxuICAgICAgICBocjoge1xuICAgICAgICAgIHJhdGlvOiA2MCxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5OiB7XG4gICAgICAgICAgcmF0aW86IDYwICogMjQsXG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICByYXRpbzogNjAgKiAyNCAqIDcsXG4gICAgICAgIH0sXG4gICAgICAgIG1vbnRoOiB7XG4gICAgICAgICAgcmF0aW86IDYwICogMjQgKiAzMCxcbiAgICAgICAgfSxcbiAgICAgICAgeWVhcjoge1xuICAgICAgICAgIHJhdGlvOiA2MCAqIDI0ICogMzY1LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuXG4gIHByZXNzdXJlOiB7XG4gICAgcHJlc3N1cmU6IHtcbiAgICAgIHRvQmFzZTogKHYpID0+IHYsXG4gICAgICBmcm9tQmFzZTogKHYpID0+IHYsXG4gICAgICB1bml0czoge1xuICAgICAgICBrUGE6IHtcbiAgICAgICAgICByYXRpbzogMSxcbiAgICAgICAgfSxcbiAgICAgICAgYXRtOiB7XG4gICAgICAgICAgcmF0aW86IDEwMS4zMjUsXG4gICAgICAgIH0sXG4gICAgICAgIGJhcjoge1xuICAgICAgICAgIHJhdGlvOiAxMDAsXG4gICAgICAgIH0sXG4gICAgICAgIHBzaToge1xuICAgICAgICAgIHJhdGlvOiA2Ljg5NDc1NyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbn1cbiIsImltcG9ydCB7XG4gIEZlcm1lbnRhYmxlQWRkaXRpb25UeXBlLFxuICBNYXNoU3RlcFR5cGUsXG4gIFRlbXBlcmF0dXJlVHlwZSxcbiAgVm9sdW1lVHlwZSxcbiAgTWFzc1R5cGUsXG59IGZyb20gJy4vdHlwZXMvYmVlcmpzb24nXG5pbXBvcnQgeyBnZXRNZWFzdXJhYmxlVmFsdWUsIHN1bSB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlIH0gZnJvbSAnLi91bml0cydcbmltcG9ydCB7IHVzZSB9IGZyb20gJy4vdGltaW5nJ1xuXG5jb25zdCBncmFpblZvbHVtZSA9IDAuNjUyIC8vIGwva2dcbmNvbnN0IGJvaWxpbmdUZW1wID0gMTAwXG5jb25zdCBtYWx0U3BlY2lmaWNIZWF0ID0gMC4zOCAvLyBDYWwvZ3JhbS1DXG5jb25zdCBpbml0aWFsV2F0ZXJHcmFpblJhdGlvID0gMi41IC8vIGwva2dcblxuY29uc3QgYWRqdXN0VHVuTWFzcyA9ICh0dW5Wb2x1bWUsIHRvdFZvbHVtZSwgdHVuTWFzcykgPT4ge1xuICB0dW5Wb2x1bWUgPSB0dW5Wb2x1bWUgKiAwLjhcbiAgcmV0dXJuIHR1blZvbHVtZSA+IDAgJiYgdG90Vm9sdW1lIDwgdHVuVm9sdW1lXG4gICAgPyAodHVuTWFzcyAqIHRvdFZvbHVtZSkgLyB0dW5Wb2x1bWVcbiAgICA6IHR1bk1hc3Ncbn1cblxuY29uc3QgY2FsY0RlY29jdGlvblN0ZXAgPSAoXG4gIHN0YXJ0VGVtcCxcbiAgdGFyZ2V0VGVtcCxcbiAgc3RhcnRWb2x1bWUsXG4gIG1hc2hHcmFpbldlaWdodCxcbiAgdHVuTWFzcyA9IDAsXG4gIHR1blNwZWNpZmljSGVhdCA9IDAsXG4gIHR1blZvbHVtZSA9IDBcbik6IHsgYW1vdW50OiBWb2x1bWVUeXBlIH0gPT4ge1xuICBjb25zdCB0b3RWb2x1bWUgPSBncmFpblZvbHVtZSAqIG1hc2hHcmFpbldlaWdodCArIHN0YXJ0Vm9sdW1lXG4gIGNvbnN0IGFkanVzdGVkVHVuTWFzcyA9IGFkanVzdFR1bk1hc3ModHVuVm9sdW1lLCB0b3RWb2x1bWUsIHR1bk1hc3MpXG4gIGxldCBmcmFjdGlvbiA9XG4gICAgKCgobWFsdFNwZWNpZmljSGVhdCAqIG1hc2hHcmFpbldlaWdodCArXG4gICAgICB0dW5TcGVjaWZpY0hlYXQgKiBhZGp1c3RlZFR1bk1hc3MgK1xuICAgICAgc3RhcnRWb2x1bWUpIC9cbiAgICAgIChtYWx0U3BlY2lmaWNIZWF0ICogbWFzaEdyYWluV2VpZ2h0ICsgc3RhcnRWb2x1bWUpKSAqXG4gICAgICAodGFyZ2V0VGVtcCAtIHN0YXJ0VGVtcCkpIC9cbiAgICAoYm9pbGluZ1RlbXAgLSBzdGFydFRlbXApXG5cbiAgaWYgKGZyYWN0aW9uID4gMSkge1xuICAgIGZyYWN0aW9uID0gMVxuICB9XG4gIHJldHVybiB7IGFtb3VudDogeyB2YWx1ZTogdG90Vm9sdW1lICogZnJhY3Rpb24sIHVuaXQ6ICdsJyB9IH1cbn1cblxuY29uc3QgY2FsY0luZnVzaW9uU3RlcCA9IChcbiAgc3RhcnRUZW1wLFxuICBzdGVwVGVtcCxcbiAgc3RhcnRWb2x1bWUsXG4gIGluZGV4LFxuICBtYXNoR3JhaW5XZWlnaHRcbik6IHtcbiAgYW1vdW50OiBWb2x1bWVUeXBlXG4gIGluZnVzZV90ZW1wZXJhdHVyZTogVGVtcGVyYXR1cmVUeXBlXG59ID0+IHtcbiAgY29uc3QgaW5mdXNlVGVtcCA9XG4gICAgaW5kZXggPiAwXG4gICAgICA/IGJvaWxpbmdUZW1wXG4gICAgICA6IChtYWx0U3BlY2lmaWNIZWF0ICogKHN0ZXBUZW1wIC0gc3RhcnRUZW1wKSkgLyBpbml0aWFsV2F0ZXJHcmFpblJhdGlvICtcbiAgICAgICAgc3RlcFRlbXBcbiAgY29uc3QgaW5mdXNlQW1vdW50ID1cbiAgICAoKG1hc2hHcmFpbldlaWdodCAqIG1hbHRTcGVjaWZpY0hlYXQgKyBzdGFydFZvbHVtZSkgKlxuICAgICAgKHN0ZXBUZW1wIC0gc3RhcnRUZW1wKSkgL1xuICAgIChpbmZ1c2VUZW1wIC0gc3RlcFRlbXApXG5cbiAgcmV0dXJuIHtcbiAgICBpbmZ1c2VfdGVtcGVyYXR1cmU6IHtcbiAgICAgIHVuaXQ6ICdDJyxcbiAgICAgIHZhbHVlOiBpbmZ1c2VUZW1wLFxuICAgIH0sXG4gICAgYW1vdW50OiB7XG4gICAgICB1bml0OiAnbCcsXG4gICAgICB2YWx1ZTogaW5mdXNlQW1vdW50LFxuICAgIH0sXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlY2FsY3VsYXRlTWFzaFN0ZXBzKFxuICBtYXNoX3N0ZXBzOiBBcnJheTxNYXNoU3RlcFR5cGU+LFxuICBncmFpbl90ZW1wZXJhdHVyZTogVGVtcGVyYXR1cmVUeXBlLFxuICBtYXNoR3JhaW5XZWlnaHQ6IE1hc3NUeXBlXG4pOiBBcnJheTxNYXNoU3RlcFR5cGU+IHtcbiAgbGV0IHN0YXJ0Vm9sdW1lID0gMFxuICBsZXQgc3RhcnRUZW1wID0gZ3JhaW5fdGVtcGVyYXR1cmUudmFsdWVcblxuICBjb25zdCBncmFpbldlaWdodFZhbHVlID0gY29udmVydE1lYXN1cmFibGVWYWx1ZShtYXNoR3JhaW5XZWlnaHQsICdrZycpXG5cbiAgcmV0dXJuIG1hc2hfc3RlcHMubWFwKChzdGVwOiBNYXNoU3RlcFR5cGUsIGluZGV4OiBudW1iZXIpOiBNYXNoU3RlcFR5cGUgPT4ge1xuICAgIGNvbnN0IHN0ZXBUZW1wID0gZ2V0TWVhc3VyYWJsZVZhbHVlKHN0ZXAuc3RlcF90ZW1wZXJhdHVyZSlcblxuICAgIHN3aXRjaCAoc3RlcC50eXBlKSB7XG4gICAgICBjYXNlICdkZWNvY3Rpb24nOiB7XG4gICAgICAgIGNvbnN0IHsgYW1vdW50IH0gPSBjYWxjRGVjb2N0aW9uU3RlcChcbiAgICAgICAgICBzdGFydFRlbXAsXG4gICAgICAgICAgc3RlcFRlbXAsXG4gICAgICAgICAgc3RhcnRWb2x1bWUsXG4gICAgICAgICAgZ3JhaW5XZWlnaHRWYWx1ZVxuICAgICAgICApXG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5zdGVwLFxuICAgICAgICAgIGFtb3VudCxcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSAnaW5mdXNpb24nOiB7XG4gICAgICAgIGNvbnN0IHsgYW1vdW50LCBpbmZ1c2VfdGVtcGVyYXR1cmUgfSA9IGNhbGNJbmZ1c2lvblN0ZXAoXG4gICAgICAgICAgc3RhcnRUZW1wLFxuICAgICAgICAgIHN0ZXBUZW1wLFxuICAgICAgICAgIHN0YXJ0Vm9sdW1lLFxuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGdyYWluV2VpZ2h0VmFsdWVcbiAgICAgICAgKVxuXG4gICAgICAgIHN0YXJ0Vm9sdW1lICs9IGFtb3VudC52YWx1ZVxuICAgICAgICBzdGFydFRlbXAgPSBzdGVwVGVtcFxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uc3RlcCxcbiAgICAgICAgICBpbmZ1c2VfdGVtcGVyYXR1cmUsXG4gICAgICAgICAgYW1vdW50LFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc3RlcFxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGNhbGNNYXNoR3JhaW5XZWlnaHQgPSAoXG4gIGZlcm1lbnRhYmxlczogQXJyYXk8RmVybWVudGFibGVBZGRpdGlvblR5cGU+XG4pOiBNYXNzVHlwZSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gc3VtKFxuICAgIGZlcm1lbnRhYmxlcy5tYXAoKHsgdGltaW5nLCB0eXBlLCBhbW91bnQgfTogRmVybWVudGFibGVBZGRpdGlvblR5cGUpID0+XG4gICAgICB0eXBlID09PSAnZ3JhaW4nICYmIHVzZSh0aW1pbmcpLmFkZF90b19tYXNoXG4gICAgICAgID8gY29udmVydE1lYXN1cmFibGVWYWx1ZShhbW91bnQsICdsYicpXG4gICAgICAgIDogMFxuICAgIClcbiAgKVxuICByZXR1cm4ge1xuICAgIHZhbHVlLFxuICAgIHVuaXQ6ICdsYicsXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVNwYXJnZVZvbHVtZShcbiAgbWFzaF9zdGVwczogQXJyYXk8TWFzaFN0ZXBUeXBlPixcbiAgc3BhcmdlVm9sdW1lOiBWb2x1bWVUeXBlXG4pOiBBcnJheTxNYXNoU3RlcFR5cGU+IHtcbiAgcmV0dXJuIG1hc2hfc3RlcHMubWFwKChzdGVwKSA9PiB7XG4gICAgaWYgKHN0ZXAudHlwZSA9PT0gJ3NwYXJnZScpIHtcbiAgICAgIHJldHVybiB7IC4uLnN0ZXAsIGFtb3VudDogc3BhcmdlVm9sdW1lIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0ZXBcbiAgfSlcbn1cbiIsImltcG9ydCB7IHN1bSB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQge1xuICBWb2x1bWVUeXBlLFxuICBNYXNzVHlwZSxcbiAgRXF1aXBtZW50SXRlbVR5cGUsXG4gIEJvaWxQcm9jZWR1cmVUeXBlLFxuICBNYXNoU3RlcFR5cGUsXG59IGZyb20gJy4vdHlwZXMvYmVlcmpzb24nXG5pbXBvcnQgeyBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlIH0gZnJvbSAnLi91bml0cydcblxuY29uc3QgZGVmYXVsdEJvaWw6IEJvaWxQcm9jZWR1cmVUeXBlID0ge1xuICBwcmVfYm9pbF9zaXplOiB7XG4gICAgdmFsdWU6IDAsXG4gICAgdW5pdDogJ2dhbCcsXG4gIH0sXG4gIGJvaWxfdGltZToge1xuICAgIHZhbHVlOiAwLFxuICAgIHVuaXQ6ICdtaW4nLFxuICB9LFxufVxuXG5jb25zdCBjb29saW5nU2hyaW5rYWdlUmF0ZSA9IDAuMDRcblxuY29uc3QgY29udmVydFRvR2FsbG9ucyA9ICh2b2x1bWU6IFZvbHVtZVR5cGUpID0+XG4gIGNvbnZlcnRNZWFzdXJhYmxlVmFsdWUodm9sdW1lLCAnZ2FsJylcblxuLy8gMC45NiAtIG51bWJlciBvZiBmbC4gb3VuY2VzIG9mIHdhdGVyIGFic29yYmVkIHBlciBvdW5jZSBvZiB0aGUgZ3JhaW5cbi8vIDEyOCBmbC4gb3VuY2VzIGluIGdhbGxvbiwgMTYgb3VuY2VzIGluIHBvdW5kXG5jb25zdCBncmFpbkFic29ycHRpb25SYXRpbyA9ICgwLjk2IC8gMTI4KSAqIDE2XG5cbmNvbnN0IGNhbGNHcmFpbkFic29ycHRpb24gPSAoZ3JhaW5XZWlnaHQ6IE1hc3NUeXBlKTogVm9sdW1lVHlwZSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gY29udmVydE1lYXN1cmFibGVWYWx1ZShncmFpbldlaWdodCwgJ2xiJykgKiBncmFpbkFic29ycHRpb25SYXRpb1xuICByZXR1cm4ge1xuICAgIHZhbHVlLFxuICAgIHVuaXQ6ICdnYWwnLFxuICB9XG59XG5cbmNvbnN0IGNhbGNNYXNoV2F0ZXJWb2x1bWUgPSAoXG4gIG1hc2hfc3RlcHM6IEFycmF5PE1hc2hTdGVwVHlwZT4gPSBbXVxuKTogVm9sdW1lVHlwZSA9PiB7XG4gIGNvbnN0IHZhbHVlID0gc3VtKFxuICAgIG1hc2hfc3RlcHMubWFwKCh7IHR5cGUsIGFtb3VudCB9OiBNYXNoU3RlcFR5cGUpID0+XG4gICAgICB0eXBlID09PSAnaW5mdXNpb24nID8gY29udmVydFRvR2FsbG9ucyhhbW91bnQpIDogMFxuICAgIClcbiAgKVxuICByZXR1cm4ge1xuICAgIHZhbHVlLFxuICAgIHVuaXQ6ICdnYWwnLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjYWxjTWFzaFZvbHVtZXMgPSAoXG4gIHByZV9ib2lsX3NpemU6IFZvbHVtZVR5cGUsXG4gIG1hc2hTdGVwczogQXJyYXk8TWFzaFN0ZXBUeXBlPixcbiAgbWFzaEdyYWluV2VpZ2h0OiBNYXNzVHlwZSxcbiAgZXF1aXBtZW50OiB7XG4gICAgaGx0PzogRXF1aXBtZW50SXRlbVR5cGVcbiAgICBtYXNoX3R1bj86IEVxdWlwbWVudEl0ZW1UeXBlXG4gICAgYnJld19rZXR0bGU/OiBFcXVpcG1lbnRJdGVtVHlwZVxuICAgIGZlcm1lbnRlcj86IEVxdWlwbWVudEl0ZW1UeXBlXG4gIH1cbik6IHtcbiAgbWFzaF92b2x1bWU6IFZvbHVtZVR5cGVcbiAgc3BhcmdlX3ZvbHVtZTogVm9sdW1lVHlwZVxuICB0b3RhbF92b2x1bWU6IFZvbHVtZVR5cGVcbn0gPT4ge1xuICBjb25zdCBtYXNoV2F0ZXJWb2x1bWUgPSBjYWxjTWFzaFdhdGVyVm9sdW1lKG1hc2hTdGVwcylcblxuICBjb25zdCBncmFpbkFic29ycHRpb24gPSBjYWxjR3JhaW5BYnNvcnB0aW9uKG1hc2hHcmFpbldlaWdodClcblxuICBjb25zdCBtYXNoTG9zcyA9XG4gICAgZXF1aXBtZW50Lm1hc2hfdHVuICE9IG51bGwgPyBjb252ZXJ0VG9HYWxsb25zKGVxdWlwbWVudC5tYXNoX3R1bi5sb3NzKSA6IDBcblxuICBjb25zdCBzcGFyZ2VWb2x1bWVWYWx1ZSA9XG4gICAgY29udmVydFRvR2FsbG9ucyhwcmVfYm9pbF9zaXplKSArXG4gICAgZ3JhaW5BYnNvcnB0aW9uLnZhbHVlIC1cbiAgICBtYXNoV2F0ZXJWb2x1bWUudmFsdWUgK1xuICAgIG1hc2hMb3NzXG5cbiAgY29uc3Qgc3BhcmdlVm9sdW1lOiBWb2x1bWVUeXBlID0ge1xuICAgIHZhbHVlOiBzcGFyZ2VWb2x1bWVWYWx1ZSxcbiAgICB1bml0OiAnZ2FsJyxcbiAgfVxuXG4gIGNvbnN0IHRvdGFsVm9sdW1lOiBWb2x1bWVUeXBlID0ge1xuICAgIHZhbHVlOiBtYXNoV2F0ZXJWb2x1bWUudmFsdWUgKyBzcGFyZ2VWb2x1bWUudmFsdWUsXG4gICAgdW5pdDogJ2dhbCcsXG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1hc2hfdm9sdW1lOiBtYXNoV2F0ZXJWb2x1bWUsXG4gICAgc3BhcmdlX3ZvbHVtZTogc3BhcmdlVm9sdW1lLFxuICAgIHRvdGFsX3ZvbHVtZTogdG90YWxWb2x1bWUsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGNhbGNCb2lsVm9sdW1lcyA9IChcbiAgYmF0Y2hfc2l6ZTogVm9sdW1lVHlwZSxcbiAgYm9pbDogQm9pbFByb2NlZHVyZVR5cGUgPSBkZWZhdWx0Qm9pbCxcbiAgZXF1aXBtZW50OiB7XG4gICAgaGx0PzogRXF1aXBtZW50SXRlbVR5cGVcbiAgICBtYXNoX3R1bj86IEVxdWlwbWVudEl0ZW1UeXBlXG4gICAgYnJld19rZXR0bGU/OiBFcXVpcG1lbnRJdGVtVHlwZVxuICAgIGZlcm1lbnRlcj86IEVxdWlwbWVudEl0ZW1UeXBlXG4gIH1cbik6IHsgcHJlX2JvaWxfc2l6ZTogVm9sdW1lVHlwZSB9ID0+IHtcbiAgY29uc3QgYm9pbFByb2ZpbGUgPSBib2lsIHx8IGRlZmF1bHRCb2lsXG5cbiAgY29uc3QgcG9zdEJvaWxWb2x1bWUgPSBjb252ZXJ0VG9HYWxsb25zKGJhdGNoX3NpemUpXG5cbiAgbGV0IGJvaWxMb3NzID0gMFxuICBsZXQgYm9pbFJhdGUgPSAwXG4gIGlmIChlcXVpcG1lbnQgIT0gbnVsbCAmJiBlcXVpcG1lbnQuYnJld19rZXR0bGUgIT0gbnVsbCkge1xuICAgIGJvaWxMb3NzID0gY29udmVydFRvR2FsbG9ucyhlcXVpcG1lbnQuYnJld19rZXR0bGUubG9zcylcbiAgICBib2lsUmF0ZSA9IGNvbnZlcnRUb0dhbGxvbnMoZXF1aXBtZW50LmJyZXdfa2V0dGxlLmJvaWxfcmF0ZV9wZXJfaG91cilcbiAgfVxuXG4gIGNvbnN0IGJvaWxPZmZWb2x1bWUgPSAoYm9pbFJhdGUgKiBib2lsUHJvZmlsZS5ib2lsX3RpbWUudmFsdWUpIC8gNjBcbiAgY29uc3QgY29vbGluZ1Nocmlua2FnZSA9IHBvc3RCb2lsVm9sdW1lICogY29vbGluZ1Nocmlua2FnZVJhdGVcbiAgY29uc3QgcHJlQm9pbFZvbHVtZSA9XG4gICAgcG9zdEJvaWxWb2x1bWUgKyBib2lsT2ZmVm9sdW1lICsgYm9pbExvc3MgKyBjb29saW5nU2hyaW5rYWdlXG5cbiAgcmV0dXJuIHtcbiAgICBwcmVfYm9pbF9zaXplOiB7XG4gICAgICB2YWx1ZTogcHJlQm9pbFZvbHVtZSxcbiAgICAgIHVuaXQ6ICdnYWwnLFxuICAgIH0sXG4gIH1cbn1cbiIsImltcG9ydCB7IHN1bSB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQge1xuICBWb2x1bWVUeXBlLFxuICBHcmF2aXR5VHlwZSxcbiAgWWllbGRUeXBlLFxuICBFZmZpY2llbmN5VHlwZSxcbiAgUGVyY2VudFR5cGUsXG4gIEZlcm1lbnRhYmxlQWRkaXRpb25UeXBlLFxuICBDdWx0dXJlQWRkaXRpb25UeXBlLFxufSBmcm9tICcuL3R5cGVzL2JlZXJqc29uJ1xuaW1wb3J0IHsgY29udmVydE1lYXN1cmFibGVWYWx1ZSB9IGZyb20gJy4vdW5pdHMnXG5cbi8vIFN1Z2FyIHByb3ZpZGVzIDQ2IGdyYXZpdHkgcG9pbnRzIHBlciBwb3VuZCwgcGVyIGdhbGxvbiAoUFBQRykuXG4vLyAxIHBvdW5kID0gMTYgb3ogKHdlaWdodC9tYXNzKVxuLy8gMSBnYWxsb24gPSAxMjggZmwgb3pcbi8vIHlpZWxkIGFuZCBlZmZpY2llbmN5IHNob3VsZCBiZSBwYXJzZWQgZnJvbSByZWNpcGUgYXMgcGVyY2VudCB2YWx1ZXNcbi8vIFRoZSBtYXhpbXVtIHBvdGVudGlhbCBpcyBhcHByb3hpbWF0ZWx5IDEuMDQ2IHdoaWNoIHdvdWxkIGJlIGEgcG91bmQgb2YgcHVyZSBzdWdhciBpbiBhIGdhbGxvbiBvZiB3YXRlci5cblxuY29uc3QgeWllbGRUb1BvdGVudGlhbCA9IChmZXJtZW50YWJsZVlpZWxkOiBQZXJjZW50VHlwZSk6IEdyYXZpdHlUeXBlID0+ICh7XG4gIHZhbHVlOiAoZmVybWVudGFibGVZaWVsZC52YWx1ZSAqIDAuMDEgKiA0NikgLyAxMDAwICsgMSxcbiAgdW5pdDogJ3NnJyxcbn0pXG5cbmNvbnN0IGNhbGNGZXJtZW50YWJsZUVmZmljaWVuY3kgPSAoXG4gIHR5cGU6IHN0cmluZyxcbiAgZXF1aXBtZW50RWZmaWNpZW5jeTogbnVtYmVyLFxuICBzdWdhckVmZmljaWVuY3kgPSAxXG4pID0+XG4gIHR5cGUgPT09ICdleHRyYWN0JyB8fCB0eXBlID09PSAnc3VnYXInIHx8IHR5cGUgPT09ICdkcnkgZXh0cmFjdCdcbiAgICA/IHN1Z2FyRWZmaWNpZW5jeVxuICAgIDogZXF1aXBtZW50RWZmaWNpZW5jeVxuXG5jb25zdCBjYWxjRmVybWVudGFibGVQb3RlbnRpYWwgPSAoZmVybWVudGFibGVZaWVsZDogWWllbGRUeXBlKTogR3Jhdml0eVR5cGUgPT4ge1xuICBpZiAoZmVybWVudGFibGVZaWVsZC5wb3RlbnRpYWwgIT0gbnVsbCkge1xuICAgIHJldHVybiBmZXJtZW50YWJsZVlpZWxkLnBvdGVudGlhbFxuICB9XG4gIGlmIChmZXJtZW50YWJsZVlpZWxkLmZpbmVfZ3JpbmQgIT0gbnVsbCkge1xuICAgIHJldHVybiB5aWVsZFRvUG90ZW50aWFsKGZlcm1lbnRhYmxlWWllbGQuZmluZV9ncmluZClcbiAgfVxuICBpZiAoZmVybWVudGFibGVZaWVsZC5jb2Fyc2VfZ3JpbmQgIT0gbnVsbCkge1xuICAgIHJldHVybiB5aWVsZFRvUG90ZW50aWFsKGZlcm1lbnRhYmxlWWllbGQuY29hcnNlX2dyaW5kKVxuICB9XG4gIHJldHVybiB7IHZhbHVlOiAwLCB1bml0OiAnc2cnIH1cbn1cblxuY29uc3QgY2FsY0Zlcm1lbnRhYmxlR3Jhdml0eVBvaW50cyA9IChcbiAgZmVybWVudGFibGU6IEZlcm1lbnRhYmxlQWRkaXRpb25UeXBlLFxuICBicmV3aG91c2VFZmZpY2llbmN5OiBQZXJjZW50VHlwZSA9IHsgdmFsdWU6IDEwMCwgdW5pdDogJyUnIH0sXG4gIGF0dGVudWF0aW9uOiBQZXJjZW50VHlwZSA9IHsgdmFsdWU6IDAsIHVuaXQ6ICclJyB9XG4pID0+IHtcbiAgY29uc3QgYW1vdW50VmFsdWUgPSBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlKGZlcm1lbnRhYmxlLmFtb3VudCwgJ2xiJylcbiAgY29uc3QgcG90ZW50aWFsVmFsdWUgPSBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlKFxuICAgIGNhbGNGZXJtZW50YWJsZVBvdGVudGlhbChmZXJtZW50YWJsZS55aWVsZCksXG4gICAgJ3NnJ1xuICApXG5cbiAgY29uc3QgZWZmaWNpZW5jeVZhbHVlOiBudW1iZXIgPVxuICAgICgxIC0gYXR0ZW51YXRpb24udmFsdWUgLyAxMDApICpcbiAgICBjYWxjRmVybWVudGFibGVFZmZpY2llbmN5KGZlcm1lbnRhYmxlLnR5cGUsIGJyZXdob3VzZUVmZmljaWVuY3kudmFsdWUgLyAxMDApXG5cbiAgcmV0dXJuIChwb3RlbnRpYWxWYWx1ZSAtIDEpICogYW1vdW50VmFsdWUgKiBlZmZpY2llbmN5VmFsdWVcbn1cblxuZXhwb3J0IGNvbnN0IGNhbGNUb3RhbEdyYXZpdHlQb2ludHMgPSAoXG4gIGZlcm1lbnRhYmxlczogQXJyYXk8RmVybWVudGFibGVBZGRpdGlvblR5cGU+LFxuICBlZmZpY2llbmN5OiBFZmZpY2llbmN5VHlwZSxcbiAgYXR0ZW51YXRpb24/OiBQZXJjZW50VHlwZVxuKSA9PlxuICBzdW0oXG4gICAgZmVybWVudGFibGVzLm1hcCgoZmVybWVudGFibGU6IEZlcm1lbnRhYmxlQWRkaXRpb25UeXBlKSA9PlxuICAgICAgY2FsY0Zlcm1lbnRhYmxlR3Jhdml0eVBvaW50cyhcbiAgICAgICAgZmVybWVudGFibGUsXG4gICAgICAgIGVmZmljaWVuY3kuYnJld2hvdXNlLFxuICAgICAgICBhdHRlbnVhdGlvblxuICAgICAgKVxuICAgIClcbiAgKVxuXG5jb25zdCBjYWxjR3Jhdml0eSA9IChiYXRjaFNpemU6IFZvbHVtZVR5cGUsIGdyYXZpdHlQb2ludHM6IG51bWJlcik6IG51bWJlciA9PiB7XG4gIHJldHVybiAxLjAgKyBncmF2aXR5UG9pbnRzIC8gY29udmVydE1lYXN1cmFibGVWYWx1ZShiYXRjaFNpemUsICdnYWwnKVxufVxuXG5jb25zdCBib2lsR3Jhdml0eSA9IChcbiAgYmF0Y2hTaXplSW5HYWxsb25zOiBudW1iZXIsXG4gIGJvaWxTaXplSW5HYWxsb25zOiBudW1iZXIsXG4gIG9nSW5TRzogbnVtYmVyXG4pOiBudW1iZXIgPT4gMSArICgob2dJblNHIC0gMSkgKiBiYXRjaFNpemVJbkdhbGxvbnMpIC8gYm9pbFNpemVJbkdhbGxvbnNcblxuZXhwb3J0IGNvbnN0IGNhbGNPcmlnaW5hbEdyYXZpdHkgPSAoXG4gIGJhdGNoU2l6ZTogVm9sdW1lVHlwZSxcbiAgZmVybWVudGFibGVzOiBBcnJheTxGZXJtZW50YWJsZUFkZGl0aW9uVHlwZT4sXG4gIGVmZmljaWVuY3k6IEVmZmljaWVuY3lUeXBlXG4pOiBHcmF2aXR5VHlwZSA9PiB7XG4gIGNvbnN0IG9nVmFsdWUgPSBjYWxjR3Jhdml0eShcbiAgICBiYXRjaFNpemUsXG4gICAgY2FsY1RvdGFsR3Jhdml0eVBvaW50cyhmZXJtZW50YWJsZXMsIGVmZmljaWVuY3kpXG4gIClcbiAgcmV0dXJuIHtcbiAgICB1bml0OiAnc2cnLFxuICAgIHZhbHVlOiBvZ1ZhbHVlLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBjYWxjRmluYWxHcmF2aXR5ID0gKFxuICBiYXRjaFNpemU6IFZvbHVtZVR5cGUsXG4gIGZlcm1lbnRhYmxlczogQXJyYXk8RmVybWVudGFibGVBZGRpdGlvblR5cGU+LFxuICBlZmZpY2llbmN5OiBFZmZpY2llbmN5VHlwZSxcbiAgY3VsdHVyZXM6IEFycmF5PEN1bHR1cmVBZGRpdGlvblR5cGU+XG4pOiBHcmF2aXR5VHlwZSA9PiB7XG4gIGNvbnN0IGZnVmFsdWUgPSBjYWxjR3Jhdml0eShcbiAgICBiYXRjaFNpemUsXG4gICAgY2FsY1RvdGFsR3Jhdml0eVBvaW50cyhmZXJtZW50YWJsZXMsIGVmZmljaWVuY3ksIGN1bHR1cmVzWzBdLmF0dGVudWF0aW9uKVxuICApXG4gIHJldHVybiB7XG4gICAgdW5pdDogJ3NnJyxcbiAgICB2YWx1ZTogZmdWYWx1ZSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY2FsY0JvaWxHcmF2aXR5ID0gKFxuICBiYXRjaFNpemU6IFZvbHVtZVR5cGUsXG4gIGJvaWxTaXplOiBWb2x1bWVUeXBlLFxuICBPRzogR3Jhdml0eVR5cGVcbik6IEdyYXZpdHlUeXBlID0+IHtcbiAgcmV0dXJuIHtcbiAgICB1bml0OiAnc2cnLFxuICAgIHZhbHVlOiBib2lsR3Jhdml0eShcbiAgICAgIGNvbnZlcnRNZWFzdXJhYmxlVmFsdWUoYmF0Y2hTaXplLCAnZ2FsJyksXG4gICAgICBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlKGJvaWxTaXplLCAnZ2FsJyksXG4gICAgICBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlKE9HLCAnc2cnKVxuICAgICksXG4gIH1cbn1cbiIsImltcG9ydCB7IHN1bSB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlIH0gZnJvbSAnLi91bml0cydcbmltcG9ydCB7XG4gIFZvbHVtZVR5cGUsXG4gIENvbG9yVHlwZSxcbiAgRmVybWVudGFibGVBZGRpdGlvblR5cGUsXG59IGZyb20gJy4vdHlwZXMvYmVlcmpzb24nXG5cbi8vIE1DVSA9ICh3ZWlnaHQgb2YgZ3JhaW4gaW4gbGJzKSooY29sb3Igb2YgZ3JhaW4gaW4gbG92aWJvbmQpIC8gKHZvbHVtZSBpbiBnYWwpIFNSTSA9IDEuNDkyMiAqIE1DVSBeIDAuNjg1OVxuY29uc3QgbWN1MnNybSA9IChtY3U6IG51bWJlcik6IG51bWJlciA9PiAxLjQ5MjIgKiBNYXRoLnBvdyhtY3UsIDAuNjg1OSlcblxuY29uc3QgY2FsY01DVSA9IChhbW91bnQ6IG51bWJlciwgY29sb3I6IG51bWJlcik6IG51bWJlciA9PlxuICBjb2xvciA+IDAuNTYgPyBhbW91bnQgKiBjb2xvciA6IDBcblxuZXhwb3J0IGNvbnN0IGNhbGNDb2xvciA9IChcbiAgZmVybWVudGFibGVzOiBBcnJheTxGZXJtZW50YWJsZUFkZGl0aW9uVHlwZT4sXG4gIHBvc3RCb2lsVm9sdW1lOiBWb2x1bWVUeXBlXG4pOiBDb2xvclR5cGUgPT4ge1xuICBjb25zdCBmZXJtZW50YWJsZXNNQ1U6IG51bWJlcltdID0gZmVybWVudGFibGVzLm1hcChcbiAgICAoZmVybWVudGFibGU6IEZlcm1lbnRhYmxlQWRkaXRpb25UeXBlKSA9PiB7XG4gICAgICByZXR1cm4gY2FsY01DVShcbiAgICAgICAgY29udmVydE1lYXN1cmFibGVWYWx1ZShmZXJtZW50YWJsZS5hbW91bnQsICdsYicpLFxuICAgICAgICBjb252ZXJ0TWVhc3VyYWJsZVZhbHVlKGZlcm1lbnRhYmxlLmNvbG9yLCAnTG92aScpXG4gICAgICApXG4gICAgfVxuICApXG5cbiAgY29uc3QgY29sb3JTUk0gPSBtY3Uyc3JtKFxuICAgIHN1bShmZXJtZW50YWJsZXNNQ1UpIC8gY29udmVydE1lYXN1cmFibGVWYWx1ZShwb3N0Qm9pbFZvbHVtZSwgJ2dhbCcpXG4gIClcblxuICByZXR1cm4ge1xuICAgIHVuaXQ6ICdTUk0nLFxuICAgIHZhbHVlOiBjb2xvclNSTSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc3JtVG9SZ2IgPSAoc3JtOiBudW1iZXIpOiB7IHI6IG51bWJlcjsgZzogbnVtYmVyOyBiOiBudW1iZXIgfSA9PiAoe1xuICByOiBNYXRoLnJvdW5kKE1hdGgubWluKDI1NSwgTWF0aC5tYXgoMCwgMjU1ICogTWF0aC5wb3coMC45NzUsIHNybSkpKSksXG4gIGc6IE1hdGgucm91bmQoTWF0aC5taW4oMjU1LCBNYXRoLm1heCgwLCAyNTUgKiBNYXRoLnBvdygwLjg4LCBzcm0pKSkpLFxuICBiOiBNYXRoLnJvdW5kKE1hdGgubWluKDI1NSwgTWF0aC5tYXgoMCwgMjU1ICogTWF0aC5wb3coMC43LCBzcm0pKSkpLFxufSlcblxuZXhwb3J0IGNvbnN0IHNybVRvQ3NzID0gKHNybTogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY29sb3IgPSBzcm1Ub1JnYihzcm0pXG5cbiAgcmV0dXJuIGByZ2IoJHtjb2xvci5yfSwgJHtjb2xvci5nfSwgJHtjb2xvci5ifSlgXG59XG4iLCJpbXBvcnQgeyBzZ1RvUGxhdG8gfSBmcm9tICcuL3V0aWxzJ1xuaW1wb3J0IHsgY29udmVydE1lYXN1cmFibGVWYWx1ZSB9IGZyb20gJy4vdW5pdHMnXG5pbXBvcnQgeyBHcmF2aXR5VHlwZSwgUGVyY2VudFR5cGUgfSBmcm9tICcuL3R5cGVzL2JlZXJqc29uJ1xuXG4vLyBodHRwOi8vYnlvLmNvbS9ib2NrL2l0ZW0vNDA4LWNhbGN1bGF0aW5nLWFsY29ob2wtY29udGVudC1hdHRlbnVhdGlvbi1leHRyYWN0LWFuZC1jYWxvcmllcy1hZHZhbmNlZC1ob21lYnJld2luZ1xuLy8gaHR0cHM6Ly93d3cuYnJld2Vyc2ZyaWVuZC5jb20vMjAxMS8wNi8xNi9hbGNvaG9sLWJ5LXZvbHVtZS1jYWxjdWxhdG9yLXVwZGF0ZWQvXG4vLyBBQlcgPSAoT0cgcG9pbnRzIC0gRkcgcG9pbnRzKSAqIDAuMTA1XG4vLyBBQlYgPSAoT0cgcG9pbnRzIC0gRkcgcG9pbnRzKSAqIDAuMTMyXG5leHBvcnQgY29uc3QgZXN0QUJXID0gKG9nUHRzOiBudW1iZXIsIGZnUHRzOiBudW1iZXIpID0+IChvZ1B0cyAtIGZnUHRzKSAqIDAuMTA1XG5leHBvcnQgY29uc3QgZXN0QUJWID0gKG9nUHRzOiBudW1iZXIsIGZnUHRzOiBudW1iZXIpID0+IChvZ1B0cyAtIGZnUHRzKSAqIDAuMTMyXG5cbi8vIGh0dHA6Ly9iZWVyc21pdGguY29tL2Jsb2cvMjAxMC8wOS8wNy9hcHBhcmVudC1hbmQtcmVhbC1hdHRlbnVhdGlvbi1mb3ItYmVlci1icmV3ZXJzLXBhcnQtMS9cbmNvbnN0IGVzdEFCVnJlYWxFeHRyYWN0ID0gKG9nOiBudW1iZXIsIGZnOiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBjb25zdCBvZSA9IHNnVG9QbGF0byhvZylcbiAgY29uc3QgYWUgPSBzZ1RvUGxhdG8oZmcpXG4gIGNvbnN0IHJlID0gMC4xODA4ICogb2UgKyAwLjgxOTIgKiBhZVxuICBjb25zdCBhYncgPSAob2UgLSByZSkgLyAoMi4wNjY1IC0gMC4wMTA2NjUgKiBvZSlcbiAgY29uc3QgYWJ2ID0gYWJ3ICogKGZnIC8gMC43OTY2MSlcblxuICByZXR1cm4gYWJ2XG59XG5cbmV4cG9ydCBjb25zdCBjYWxjQUJWID0gKG9nOiBHcmF2aXR5VHlwZSwgZmc6IEdyYXZpdHlUeXBlKTogUGVyY2VudFR5cGUgPT4ge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBlc3RBQlZyZWFsRXh0cmFjdChcbiAgICAgIGNvbnZlcnRNZWFzdXJhYmxlVmFsdWUob2csICdzZycpLFxuICAgICAgY29udmVydE1lYXN1cmFibGVWYWx1ZShmZywgJ3NnJylcbiAgICApLFxuICAgIHVuaXQ6ICclJyxcbiAgfVxufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==