-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackground2.html
2 lines (2 loc) · 283 KB
/
background2.html
1
2
<!doctype html><html lang=en><meta charset=UTF-8><meta name=viewport content="width=device-width,shrink-to-fit=0,user-scalable=no,minimum-scale=1,maximum-scale=1"><title>background2</title><style>html{width:100%;height:100%;display:flex;justify-content:center;align-items:center;flex-direction:column}body{width:100%;height:100%;display:flex;justify-content:center;align-items:center;flex-direction:row;margin:0}canvas{margin:auto;display:block;box-shadow:0 2px 12px -2px rgba(0,0,0,.15)}</style><body><script>!function t(e,n,r){function i(a,s){if(!n[a]){if(!e[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(o)return o(a,!0);var c=new Error("Cannot find module '"+a+"'");throw c.code="MODULE_NOT_FOUND",c}var p=n[a]={exports:{}};e[a][0].call(p.exports,(function(t){return i(e[a][1][t]||t)}),p,p.exports,t,e,n,r)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a<r.length;a++)i(r[a]);return i}({1:[function(t,e,n){e.exports=function(t,e,n){if("number"!=typeof e||"number"!=typeof n)throw new TypeError('Must specify "to" and "from" arguments as numbers');if(e>n){var r=e;e=n,n=r}var i=n-e;if(0===i)return n;return t-i*Math.floor((t-e)/i)}},{}],2:[function(t,e,n){var r=t("defined"),i=t("./lib/wrap"),o=Number.EPSILON;function a(t,e,n){return e<n?t<e?e:t>n?n:t:t<n?n:t>e?e:t}function s(t,e,n){return t*(1-n)+e*n}function u(t,e,n){return Math.abs(t-e)<o?0:(n-t)/(e-t)}function c(t,e){return e=r(e,0),"number"==typeof t&&isFinite(t)?t:e}function p(t){if("number"!=typeof t)throw new TypeError("Expected dims argument");return function(e,n){var i;n=r(n,0),null==e?i=n:"number"==typeof e&&isFinite(e)&&(i=e);var o,a=[];if(null==i)for(o=0;o<t;o++)a[o]=c(e[o],n);else for(o=0;o<t;o++)a[o]=i;return a}}function f(t,e,n,r){if(r=r||[],t.length!==e.length)throw new TypeError("min and max array are expected to have the same length");for(var i=0;i<t.length;i++)r[i]=s(t[i],e[i],n);return r}function h(t,e){if("number"!=typeof(t=r(t,0)))throw new TypeError("Expected n argument to be a number");for(var n=[],i=0;i<t;i++)n.push(e);return n}function l(t,e){return(t%e+e)%e}function d(t,e,n,r){return s(t,e,1-Math.exp(-n*r))}e.exports={mod:l,fract:function(t){return t-Math.floor(t)},sign:function(t){return t>0?1:t<0?-1:0},degToRad:function(t){return t*Math.PI/180},radToDeg:function(t){return 180*t/Math.PI},wrap:i,pingPong:function(t,e){return t=l(t,2*e),e-Math.abs(t-e)},linspace:function(t,e){if("number"!=typeof(t=r(t,0)))throw new TypeError("Expected n argument to be a number");"boolean"==typeof(e=e||{})&&(e={endpoint:!0});var n=r(e.offset,0);return e.endpoint?h(t).map((function(e,r){return t<=1?0:(r+n)/(t-1)})):h(t).map((function(e,r){return(r+n)/t}))},lerp:s,lerpArray:f,inverseLerp:u,lerpFrames:function(t,e,n){e=a(e,0,1);var r=t.length-1,i=e*r,o=Math.floor(i),u=i-o,c=Math.min(o+1,r),p=t[o%t.length],h=t[c%t.length];if("number"==typeof p&&"number"==typeof h)return s(p,h,u);if(Array.isArray(p)&&Array.isArray(h))return f(p,h,u,n);throw new TypeError("Mismatch in value type of two array elements: "+o+" and "+c)},clamp:a,clamp01:function(t){return a(t,0,1)},smoothstep:function(t,e,n){var r=a(u(t,e,n),0,1);return r*r*(3-2*r)},damp:d,dampArray:function(t,e,n,r,i){i=i||[];for(var o=0;o<t.length;o++)i[o]=d(t[o],e[o],n,r);return i},mapRange:function(t,e,n,r,i,a){if(Math.abs(e-n)<o)return r;var s=(t-e)/(n-e)*(i-r)+r;return a&&(i<r?s<i?s=i:s>r&&(s=r):s>i?s=i:s<r&&(s=r)),s},expand2D:p(2),expand3D:p(3),expand4D:p(4)}},{"./lib/wrap":1,defined:5}],3:[function(t,e,n){var r=t("seed-random"),i=t("simplex-noise"),o=t("defined");e.exports=function t(e){e=o(e,null);var n,a,s,u=Math.random,c=null,p=!1;return f(e),{value:h,createRandom:function(e){return t(e)},setSeed:f,getSeed:function(){return n},getRandomSeed:function(){return String(Math.floor(1e6*Math.random()))},valueNonZero:function(){var t=0;for(;0===t;)t=h();return t},permuteNoise:function(){s=l()},noise1D:function(t,e,n){if(!isFinite(t))throw new TypeError("x component for noise() must be finite");return e=o(e,1),(n=o(n,1))*s.noise2D(t*e,0)},noise2D:function(t,e,n,r){if(!isFinite(t))throw new TypeError("x component for noise() must be finite");if(!isFinite(e))throw new TypeError("y component for noise() must be finite");return n=o(n,1),(r=o(r,1))*s.noise2D(t*n,e*n)},noise3D:function(t,e,n,r,i){if(!isFinite(t))throw new TypeError("x component for noise() must be finite");if(!isFinite(e))throw new TypeError("y component for noise() must be finite");if(!isFinite(n))throw new TypeError("z component for noise() must be finite");return r=o(r,1),(i=o(i,1))*s.noise3D(t*r,e*r,n*r)},noise4D:function(t,e,n,r,i,a){if(!isFinite(t))throw new TypeError("x component for noise() must be finite");if(!isFinite(e))throw new TypeError("y component for noise() must be finite");if(!isFinite(n))throw new TypeError("z component for noise() must be finite");if(!isFinite(r))throw new TypeError("w component for noise() must be finite");return i=o(i,1),(a=o(a,1))*s.noise4D(t*i,e*i,n*i,r*i)},sign:function(){return d()?1:-1},boolean:d,chance:function(t){if("number"!=typeof(t=o(t,.5)))throw new TypeError("expected n to be a number");return h()<t},range:m,rangeFloor:y,pick:function(t){return 0===t.length?void 0:t[y(0,t.length)]},shuffle:function(t){if(!Array.isArray(t))throw new TypeError("Expected Array, got "+typeof t);var e,n,r=t.length,i=t.slice();for(;r;)e=Math.floor(h()*r--),n=i[r],i[r]=i[e],i[e]=n;return i},onCircle:g,insideCircle:function(t,e){t=o(t,1),g(1,e=e||[]);var n=t*Math.sqrt(h());return e[0]*=n,e[1]*=n,e},onSphere:function(t,e){t=o(t,1),e=e||[];var n=h()*Math.PI*2,r=2*h()-1,i=n,a=Math.acos(r);return e[0]=t*Math.sin(a)*Math.cos(i),e[1]=t*Math.sin(a)*Math.sin(i),e[2]=t*Math.cos(a),e},insideSphere:function(t,e){t=o(t,1),e=e||[];var n=h()*Math.PI*2,r=2*h()-1,i=h(),a=n,s=Math.acos(r),u=t*Math.cbrt(i);return e[0]=u*Math.sin(s)*Math.cos(a),e[1]=u*Math.sin(s)*Math.sin(a),e[2]=u*Math.cos(s),e},quaternion:function(t){t=t||[];var e=h(),n=h(),r=h(),i=Math.sqrt(1-e),o=Math.sqrt(e),a=2*Math.PI*n,s=2*Math.PI*r,u=Math.sin(a)*i,c=Math.cos(a)*i,p=Math.sin(s)*o,f=Math.cos(s)*o;return t[0]=u,t[1]=c,t[2]=p,t[3]=f,t},weighted:w,weightedSet:function(t){return 0===(t=t||[]).length?null:t[v(t)].value},weightedSetIndex:v,gaussian:function(t,e){if(t=o(t,0),e=o(e,1),p){p=!1;var n=c;return c=null,t+e*n}var r=0,i=0,a=0;do{a=(r=2*h()-1)*r+(i=2*h()-1)*i}while(a>=1||0===a);var s=Math.sqrt(-2*Math.log(a)/a);return c=i*s,p=!0,t+e*(r*s)}};function f(t,e){"number"==typeof t||"string"==typeof t?a=r(n=t,e):(n=void 0,a=u),s=l(),c=null,p=!1}function h(){return a()}function l(){return new i(a)}function d(){return h()>.5}function m(t,e){if(void 0===e&&(e=t,t=0),"number"!=typeof t||"number"!=typeof e)throw new TypeError("Expected all arguments to be numbers");return h()*(e-t)+t}function y(t,e){if(void 0===e&&(e=t,t=0),"number"!=typeof t||"number"!=typeof e)throw new TypeError("Expected all arguments to be numbers");return Math.floor(m(t,e))}function g(t,e){t=o(t,1),e=e||[];var n=2*h()*Math.PI;return e[0]=t*Math.cos(n),e[1]=t*Math.sin(n),e}function v(t){return 0===(t=t||[]).length?-1:w(t.map((function(t){return t.weight})))}function w(t){if(0===(t=t||[]).length)return-1;var e,n=0;for(e=0;e<t.length;e++)n+=t[e];if(n<=0)throw new Error("Weights must sum to > 0");var r=h()*n;for(e=0;e<t.length;e++){if(r<t[e])return e;r-=t[e]}return 0}}()},{defined:5,"seed-random":6,"simplex-noise":7}],4:[function(t,e,n){(function(t){(function(){!function(t,r){"object"==typeof n&&void 0!==e?e.exports=r():"function"==typeof define&&define.amd?define(r):t.canvasSketch=r()}(this,(function(){var e=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;var i=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(e).map((function(t){return e[t]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(t){r[t]=t})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(t){return!1}}()?Object.assign:function(t,i){for(var o,a,s=function(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}(t),u=1;u<arguments.length;u++){for(var c in o=Object(arguments[u]))n.call(o,c)&&(s[c]=o[c]);if(e){a=e(o);for(var p=0;p<a.length;p++)r.call(o,a[p])&&(s[a[p]]=o[a[p]])}}return s},o="undefined"!=typeof window?window:void 0!==t?t:"undefined"!=typeof self?self:{};function a(t,e){return t(e={exports:{}},e.exports),e.exports}var s=o.performance&&o.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date},u=function(t){return!!t&&("object"==typeof t||"function"==typeof t)&&"function"==typeof t.then};var c=function(t){return!(!t||"object"!=typeof t)&&("object"==typeof window&&"object"==typeof window.Node?t instanceof window.Node:"number"==typeof t.nodeType&&"string"==typeof t.nodeName)};function p(){return"undefined"!=typeof window&&window["canvas-sketch-cli"]}function f(){for(var t=arguments,e=0;e<arguments.length;e++)if(null!=t[e])return t[e]}function h(){return"undefined"!=typeof document}var l,d=a((function(t,e){function n(t){var e=[];for(var n in t)e.push(n);return e}(t.exports="function"==typeof Object.keys?Object.keys:n).shim=n})),m=a((function(t,e){var n="[object Arguments]"==function(){return Object.prototype.toString.call(arguments)}();function r(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function i(t){return t&&"object"==typeof t&&"number"==typeof t.length&&Object.prototype.hasOwnProperty.call(t,"callee")&&!Object.prototype.propertyIsEnumerable.call(t,"callee")||!1}(e=t.exports=n?r:i).supported=r,e.unsupported=i})),y=a((function(t){var e=Array.prototype.slice,n=t.exports=function(t,o,a){return a||(a={}),t===o||(t instanceof Date&&o instanceof Date?t.getTime()===o.getTime():!t||!o||"object"!=typeof t&&"object"!=typeof o?a.strict?t===o:t==o:function(t,o,a){var s,u;if(r(t)||r(o))return!1;if(t.prototype!==o.prototype)return!1;if(m(t))return!!m(o)&&(t=e.call(t),o=e.call(o),n(t,o,a));if(i(t)){if(!i(o))return!1;if(t.length!==o.length)return!1;for(s=0;s<t.length;s++)if(t[s]!==o[s])return!1;return!0}try{var c=d(t),p=d(o)}catch(t){return!1}if(c.length!=p.length)return!1;for(c.sort(),p.sort(),s=c.length-1;s>=0;s--)if(c[s]!=p[s])return!1;for(s=c.length-1;s>=0;s--)if(!n(t[u=c[s]],o[u],a))return!1;return typeof t==typeof o}(t,o,a))};function r(t){return null==t}function i(t){return!(!t||"object"!=typeof t||"number"!=typeof t.length)&&("function"==typeof t.copy&&"function"==typeof t.slice&&!(t.length>0&&"number"!=typeof t[0]))}})),g=a((function(t,e){!function(e){var n,r,i,o=(n=/d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZWN]|"[^"]*"|'[^']*'/g,r=/\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,i=/[^-+\dA-Z]/g,function(t,e,s,u){if(1!==arguments.length||"string"!==(null===(c=t)?"null":void 0===c?"undefined":"object"!=typeof c?typeof c:Array.isArray(c)?"array":{}.toString.call(c).slice(8,-1).toLowerCase())||/\d/.test(t)||(e=t,t=void 0),(t=t||new Date)instanceof Date||(t=new Date(t)),isNaN(t))throw TypeError("Invalid date");var c,p=(e=String(o.masks[e]||e||o.masks.default)).slice(0,4);"UTC:"!==p&&"GMT:"!==p||(e=e.slice(4),s=!0,"GMT:"===p&&(u=!0));var f=s?"getUTC":"get",h=t[f+"Date"](),l=t[f+"Day"](),d=t[f+"Month"](),m=t[f+"FullYear"](),y=t[f+"Hours"](),g=t[f+"Minutes"](),v=t[f+"Seconds"](),w=t[f+"Milliseconds"](),b=s?0:t.getTimezoneOffset(),x=function(t){var e=new Date(t.getFullYear(),t.getMonth(),t.getDate());e.setDate(e.getDate()-(e.getDay()+6)%7+3);var n=new Date(e.getFullYear(),0,4);n.setDate(n.getDate()-(n.getDay()+6)%7+3);var r=e.getTimezoneOffset()-n.getTimezoneOffset();return e.setHours(e.getHours()-r),1+Math.floor((e-n)/6048e5)}(t),M=function(t){var e=t.getDay();return 0===e&&(e=7),e}(t),_={d:h,dd:a(h),ddd:o.i18n.dayNames[l],dddd:o.i18n.dayNames[l+7],m:d+1,mm:a(d+1),mmm:o.i18n.monthNames[d],mmmm:o.i18n.monthNames[d+12],yy:String(m).slice(2),yyyy:m,h:y%12||12,hh:a(y%12||12),H:y,HH:a(y),M:g,MM:a(g),s:v,ss:a(v),l:a(w,3),L:a(Math.round(w/10)),t:y<12?o.i18n.timeNames[0]:o.i18n.timeNames[1],tt:y<12?o.i18n.timeNames[2]:o.i18n.timeNames[3],T:y<12?o.i18n.timeNames[4]:o.i18n.timeNames[5],TT:y<12?o.i18n.timeNames[6]:o.i18n.timeNames[7],Z:u?"GMT":s?"UTC":(String(t).match(r)||[""]).pop().replace(i,""),o:(b>0?"-":"+")+a(100*Math.floor(Math.abs(b)/60)+Math.abs(b)%60,4),S:["th","st","nd","rd"][h%10>3?0:(h%100-h%10!=10)*h%10],W:x,N:M};return e.replace(n,(function(t){return t in _?_[t]:t.slice(1,t.length-1)}))});function a(t,e){for(t=String(t),e=e||2;t.length<e;)t="0"+t;return t}o.masks={default:"ddd mmm dd yyyy HH:MM:ss",shortDate:"m/d/yy",mediumDate:"mmm d, yyyy",longDate:"mmmm d, yyyy",fullDate:"dddd, mmmm d, yyyy",shortTime:"h:MM TT",mediumTime:"h:MM:ss TT",longTime:"h:MM:ss TT Z",isoDate:"yyyy-mm-dd",isoTime:"HH:MM:ss",isoDateTime:"yyyy-mm-dd'T'HH:MM:sso",isoUtcDateTime:"UTC:yyyy-mm-dd'T'HH:MM:ss'Z'",expiresHeaderFormat:"ddd, dd mmm yyyy HH:MM:ss Z"},o.i18n={dayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec","January","February","March","April","May","June","July","August","September","October","November","December"],timeNames:["a","p","am","pm","A","P","AM","PM"]},t.exports=o}()})),v="",w=function(t,e){if("string"!=typeof t)throw new TypeError("expected a string");if(1===e)return t;if(2===e)return t+t;var n=t.length*e;if(l!==t||void 0===l)l=t,v="";else if(v.length>=n)return v.substr(0,n);for(;n>v.length&&e>1;)1&e&&(v+=t),e>>=1,t+=t;return v=(v+=t).substr(0,n)};var b,x=function(t,e,n){return t=t.toString(),void 0===e?t:(n=0===n?"0":n?n.toString():" ",w(n,e-t.length)+t)},M=function(){},_={extension:"",prefix:"",suffix:""},T=["image/png","image/jpeg","image/webp"];function k(t,e){return void 0===e&&(e={}),new Promise((function(n,r){e=i({},_,e);var o=P(Object.assign({},e,{extension:"",frame:void 0})),a=t?"streamStart":"streamEnd",s=p();return s&&s.output&&"function"==typeof s[a]?s[a](i({},e,{filename:o})).then((function(t){return n(t)})):n({filename:o,client:!1})}))}function E(t,e){return void 0===e&&(e={}),function(t){return new Promise((function(e){var n=t.indexOf(",");if(-1!==n){for(var r=t.slice(n+1),i=window.atob(r),o=t.slice(0,n),a=/data:([^;]+)/.exec(o),s=(a?a[1]:"")||void 0,u=new ArrayBuffer(i.length),c=new Uint8Array(u),p=0;p<i.length;p++)c[p]=i.charCodeAt(p);e(new window.Blob([u],{type:s}))}else e(new window.Blob)}))}(t).then((function(t){return F(t,e)}))}function F(t,e){return void 0===e&&(e={}),new Promise((function(n){var r=(e=i({},_,e)).filename,o=p();if(o&&"function"==typeof o.saveBlob&&o.output)return o.saveBlob(t,i({},e,{filename:r})).then((function(t){return n(t)}));b||((b=document.createElement("a")).style.visibility="hidden",b.target="_blank"),b.download=r,b.href=window.URL.createObjectURL(t),document.body.appendChild(b),b.onclick=function(){b.onclick=M,setTimeout((function(){window.URL.revokeObjectURL(t),b.parentElement&&b.parentElement.removeChild(b),b.removeAttribute("href"),n({filename:r,client:!1})}))},b.click()}))}function P(t){if(void 0===t&&(t={}),"function"==typeof(t=i({},t)).file)return t.file(t);if(t.file)return t.file;var e,n=null,r="";("string"==typeof t.extension&&(r=t.extension),"number"==typeof t.frame)&&(e="number"==typeof t.totalFrames?t.totalFrames:Math.max(1e4,t.frame),n=x(String(t.frame),String(e).length,"0"));var o=isFinite(t.totalLayers)&&isFinite(t.layer)&&t.totalLayers>1?""+t.layer:"";return null!=n?[o,n].filter(Boolean).join("-")+r:[t.prefix,t.name||t.timeStamp,o,t.hash,t.suffix].filter(Boolean).join("-")+r}var R={dimension:"dimensions",animated:"animate",animating:"animate",unit:"units",P5:"p5",pixellated:"pixelated",looping:"loop",pixelPerInch:"pixels"},S=["dimensions","units","pixelsPerInch","orientation","scaleToFit","scaleToView","bleed","pixelRatio","exportPixelRatio","maxPixelRatio","scaleContext","resizeCanvas","styleCanvas","canvas","context","attributes","parent","file","name","prefix","suffix","animate","playing","loop","duration","totalFrames","fps","playbackRate","timeScale","frame","time","flush","pixelated","hotkeys","p5","id","scaleToFitPadding","data","params","encoding","encodingQuality"],C=function(t){Object.keys(t).forEach((function(t){t in R?console.warn('[canvas-sketch] Could not recognize the setting "'+t+'", did you mean "'+R[t]+'"?'):S.includes(t)||console.warn('[canvas-sketch] Could not recognize the setting "'+t+'"')}))};var j=[["postcard",101.6,152.4],["poster-small",280,430],["poster",460,610],["poster-large",610,910],["business-card",50.8,88.9],["2r",64,89],["3r",89,127],["4r",102,152],["5r",127,178],["6r",152,203],["8r",203,254],["10r",254,305],["11r",279,356],["12r",305,381],["a0",841,1189],["a1",594,841],["a2",420,594],["a3",297,420],["a4",210,297],["a5",148,210],["a6",105,148],["a7",74,105],["a8",52,74],["a9",37,52],["a10",26,37],["2a0",1189,1682],["4a0",1682,2378],["b0",1e3,1414],["b1",707,1e3],["b1+",720,1020],["b2",500,707],["b2+",520,720],["b3",353,500],["b4",250,353],["b5",176,250],["b6",125,176],["b7",88,125],["b8",62,88],["b9",44,62],["b10",31,44],["b11",22,32],["b12",16,22],["c0",917,1297],["c1",648,917],["c2",458,648],["c3",324,458],["c4",229,324],["c5",162,229],["c6",114,162],["c7",81,114],["c8",57,81],["c9",40,57],["c10",28,40],["c11",22,32],["c12",16,22],["half-letter",5.5,8.5,"in"],["letter",8.5,11,"in"],["legal",8.5,14,"in"],["junior-legal",5,8,"in"],["ledger",11,17,"in"],["tabloid",11,17,"in"],["ansi-a",8.5,11,"in"],["ansi-b",11,17,"in"],["ansi-c",17,22,"in"],["ansi-d",22,34,"in"],["ansi-e",34,44,"in"],["arch-a",9,12,"in"],["arch-b",12,18,"in"],["arch-c",18,24,"in"],["arch-d",24,36,"in"],["arch-e",36,48,"in"],["arch-e1",30,42,"in"],["arch-e2",26,38,"in"],["arch-e3",27,39,"in"]].reduce((function(t,e){var n={units:e[3]||"mm",dimensions:[e[1],e[2]]};return t[e[0]]=n,t[e[0].replace(/-/g," ")]=n,t}),{}),D=function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]},A=["mm","cm","m","pc","pt","in","ft","px"],O={m:{system:"metric",factor:1},cm:{system:"metric",factor:.01},mm:{system:"metric",factor:.001},pt:{system:"imperial",factor:1/72},pc:{system:"imperial",factor:1/6},in:{system:"imperial",factor:1},ft:{system:"imperial",factor:12}};const N={metric:{unit:"m",ratio:1/.0254},imperial:{unit:"in",ratio:.0254}};var H=function(t,e,n,r){if("number"!=typeof t||!isFinite(t))throw new Error("Value must be a finite number");if(!e||!n)throw new Error("Must specify from and to units");var i=D((r=r||{}).pixelsPerInch,96),o=r.precision,a=!1!==r.roundPixel;if(e=e.toLowerCase(),n=n.toLowerCase(),-1===A.indexOf(e))throw new Error('Invalid from unit "'+e+'", must be one of: '+A.join(", "));if(-1===A.indexOf(n))throw new Error('Invalid from unit "'+n+'", must be one of: '+A.join(", "));if(e===n)return t;var s=1,u=1,c=!1;"px"===e&&(u=1/i,e="in"),"px"===n&&(c=!0,s=i,n="in");var p=O[e],f=O[n],h=t*p.factor*u;p.system!==f.system&&(h*=N[p.system].ratio);var l=h/f.factor*s;return c&&a?l=Math.round(l):"number"==typeof o&&isFinite(o)&&(l=function(t,e){return Number(Math.round(t+"e"+e)+"e-"+e)}(l,o)),l};function z(t,e,n,r){return void 0===e&&(e="px"),void 0===n&&(n="px"),void 0===r&&(r=72),H(t,e,n,{pixelsPerInch:r,precision:4,roundPixel:!0})}function I(t,e){var n,r,i,o,a,s,u=h(),c=e.dimensions,p=function(t){return!(!t.dimensions||"string"!=typeof t.dimensions&&!(Array.isArray(t.dimensions)&&t.dimensions.length>=2))}(e),l=t.exporting,d=!!p&&!1!==e.scaleToFit,m=!(!l&&p)||e.scaleToView;u||(d=m=!1);var y,g,v=e.units,w="number"==typeof e.pixelsPerInch&&isFinite(e.pixelsPerInch)?e.pixelsPerInch:72,b=f(e.bleed,0),x=u?window.devicePixelRatio:1,M=m?x:1;"number"==typeof e.pixelRatio&&isFinite(e.pixelRatio)?g=f(e.exportPixelRatio,y=e.pixelRatio):p?(y=M,g=f(e.exportPixelRatio,1)):g=f(e.exportPixelRatio,y=x),"number"==typeof e.maxPixelRatio&&isFinite(e.maxPixelRatio)&&(y=Math.min(e.maxPixelRatio,y)),l&&(y=g);var _,T,k=function(t,e){if(!h())return[300,150];var n=e.parent||window;if(n===window||n===document||n===document.body)return[window.innerWidth,window.innerHeight];var r=n.getBoundingClientRect();return[r.width,r.height]}(0,e),E=k[0],F=k[1];if(p){var P=function(t,e,n){if(void 0===e&&(e="px"),void 0===n&&(n=72),"string"==typeof t){var r=t.toLowerCase();if(!(r in j))throw new Error('The dimension preset "'+t+'" is not supported or could not be found; try using a4, a3, postcard, letter, etc.');var i=j[r];return i.dimensions.map((function(t){return z(t,i.units,e,n)}))}return t}(c,v,w),R=Math.max(P[0],P[1]),S=Math.min(P[0],P[1]);if(e.orientation){var C="landscape"===e.orientation;n=C?R:S,r=C?S:R}else n=P[0],r=P[1];_=n,T=r,n+=2*b,r+=2*b}else _=n=E,T=r=F;var D=n,A=r;if(p&&v&&(D=z(n,v,"px",w),A=z(r,v,"px",w)),i=Math.round(D),o=Math.round(A),d&&!l&&p){var O=n/r,N=E/F,H=f(e.scaleToFitPadding,40),I=Math.round(E-2*H),L=Math.round(F-2*H);(i>I||o>L)&&(N>O?(o=L,i=Math.round(o*O)):(i=I,o=Math.round(i/O)))}return{bleed:b,pixelRatio:y,width:n,height:r,dimensions:[n,r],units:v||"px",scaleX:(a=m?Math.round(y*i):Math.round(y*D))/n,scaleY:(s=m?Math.round(y*o):Math.round(y*A))/r,pixelsPerInch:w,viewportWidth:m?Math.round(i):Math.round(D),viewportHeight:m?Math.round(o):Math.round(A),canvasWidth:a,canvasHeight:s,trimWidth:_,trimHeight:T,styleWidth:i,styleHeight:o}}H.units=A;var L=function(t,e){if("string"!=typeof t)throw new TypeError("must specify type string");if(e=e||{},"undefined"==typeof document&&!e.canvas)return null;var n=e.canvas||document.createElement("canvas");"number"==typeof e.width&&(n.width=e.width);"number"==typeof e.height&&(n.height=e.height);var r,i=e;try{var o=[t];0===t.indexOf("webgl")&&o.push("experimental-"+t);for(var a=0;a<o.length;a++)if(r=n.getContext(o[a],i))return r}catch(t){r=null}return r||null};function U(t){var e,n;void 0===t&&(t={});var r=!1;if(!1!==t.canvas){if(!(e=t.context)||"string"==typeof e){var o=t.canvas;o||(o=function(){if(!h())throw new Error("It appears you are runing from Node.js or a non-browser environment. Try passing in an existing { canvas } interface instead.");return document.createElement("canvas")}(),r=!0);var a=e||"2d";if("function"!=typeof o.getContext)throw new Error("The specified { canvas } element does not have a getContext() function, maybe it is not a <canvas> tag?");if(!(e=L(a,i({},t.attributes,{canvas:o}))))throw new Error("Failed at canvas.getContext('"+a+"') - the browser may not support this context, or a different context may already be in use with this canvas.")}if(n=e.canvas,t.canvas&&n!==t.canvas)throw new Error("The { canvas } and { context } settings must point to the same underlying canvas element");t.pixelated&&(e.imageSmoothingEnabled=!1,e.mozImageSmoothingEnabled=!1,e.oImageSmoothingEnabled=!1,e.webkitImageSmoothingEnabled=!1,e.msImageSmoothingEnabled=!1,n.style["image-rendering"]="pixelated")}return{canvas:n,context:e,ownsCanvas:r}}var q=function(){var t=this;this._settings={},this._props={},this._sketch=void 0,this._raf=null,this._recordTimeout=null,this._lastRedrawResult=void 0,this._isP5Resizing=!1,this._keyboardShortcuts=function(t){void 0===t&&(t={});var e=function(e){if(t.enabled()){var n=p();83!==e.keyCode||e.altKey||!e.metaKey&&!e.ctrlKey?32===e.keyCode?t.togglePlay(e):n&&!e.altKey&&75===e.keyCode&&(e.metaKey||e.ctrlKey)&&(e.preventDefault(),t.commit(e)):(e.preventDefault(),t.save(e))}};return{attach:function(){window.addEventListener("keydown",e)},detach:function(){window.removeEventListener("keydown",e)}}}({enabled:function(){return!1!==t.settings.hotkeys},save:function(e){e.shiftKey?t.props.recording?(t.endRecord(),t.run()):t.record():t.props.recording||t.exportFrame()},togglePlay:function(){t.props.playing?t.pause():t.play()},commit:function(e){t.exportFrame({commit:!0})}}),this._animateHandler=function(){return t.animate()},this._resizeHandler=function(){t.resize()&&t.render()}},W={sketch:{configurable:!0},settings:{configurable:!0},props:{configurable:!0}};W.sketch.get=function(){return this._sketch},W.settings.get=function(){return this._settings},W.props.get=function(){return this._props},q.prototype._computePlayhead=function(t,e){return"number"==typeof e&&isFinite(e)?t/e:0},q.prototype._computeFrame=function(t,e,n,r){return isFinite(n)&&n>1?Math.floor(t*(n-1)):Math.floor(r*e)},q.prototype._computeCurrentFrame=function(){return this._computeFrame(this.props.playhead,this.props.time,this.props.totalFrames,this.props.fps)},q.prototype._getSizeProps=function(){var t=this.props;return{width:t.width,height:t.height,pixelRatio:t.pixelRatio,canvasWidth:t.canvasWidth,canvasHeight:t.canvasHeight,viewportWidth:t.viewportWidth,viewportHeight:t.viewportHeight}},q.prototype.run=function(){if(!this.sketch)throw new Error("should wait until sketch is loaded before trying to play()");return!1!==this.settings.playing&&this.play(),"function"==typeof this.sketch.dispose&&console.warn("In [email protected] the dispose() event has been renamed to unload()"),this.props.started||(this._signalBegin(),this.props.started=!0),this.tick(),this.render(),this},q.prototype._cancelTimeouts=function(){null!=this._raf&&"undefined"!=typeof window&&"function"==typeof window.cancelAnimationFrame&&(window.cancelAnimationFrame(this._raf),this._raf=null),null!=this._recordTimeout&&(clearTimeout(this._recordTimeout),this._recordTimeout=null)},q.prototype.play=function(){var t=this.settings.animate;"animation"in this.settings&&(t=!0,console.warn("[canvas-sketch] { animation } has been renamed to { animate }")),t&&(h()?this.props.playing||(this.props.started||(this._signalBegin(),this.props.started=!0),this.props.playing=!0,this._cancelTimeouts(),this._lastTime=s(),this._raf=window.requestAnimationFrame(this._animateHandler)):console.error("[canvas-sketch] WARN: Using { animate } in Node.js is not yet supported"))},q.prototype.pause=function(){this.props.recording&&this.endRecord(),this.props.playing=!1,this._cancelTimeouts()},q.prototype.togglePlay=function(){this.props.playing?this.pause():this.play()},q.prototype.stop=function(){this.pause(),this.props.frame=0,this.props.playhead=0,this.props.time=0,this.props.deltaTime=0,this.props.started=!1,this.render()},q.prototype.record=function(){var t=this;if(!this.props.recording)if(h()){this.stop(),this.props.playing=!0,this.props.recording=!0;var e=this._createExportOptions({sequence:!0}),n=1/this.props.fps;this._cancelTimeouts();var r,i=function(){return t.props.recording?(t.props.deltaTime=n,t.tick(),t.exportFrame(e).then((function(){t.props.recording&&(t.props.deltaTime=0,t.props.frame++,t.props.frame<t.props.totalFrames?(t.props.time+=n,t.props.playhead=t._computePlayhead(t.props.time,t.props.duration),t._recordTimeout=setTimeout(i,0)):(console.log("Finished recording"),t._signalEnd(),t.endRecord(),t.stop(),t.run()))}))):Promise.resolve()};this.props.started||(this._signalBegin(),this.props.started=!0),this.sketch&&"function"==typeof this.sketch.beginRecord&&this._wrapContextScale((function(e){return t.sketch.beginRecord(e)})),(r=e,void 0===r&&(r={}),k(!0,r)).catch((function(t){console.error(t)})).then((function(e){t._raf=window.requestAnimationFrame(i)}))}else console.error("[canvas-sketch] WARN: Recording from Node.js is not yet supported")},q.prototype._signalBegin=function(){var t=this;this.sketch&&"function"==typeof this.sketch.begin&&this._wrapContextScale((function(e){return t.sketch.begin(e)}))},q.prototype._signalEnd=function(){var t=this;this.sketch&&"function"==typeof this.sketch.end&&this._wrapContextScale((function(e){return t.sketch.end(e)}))},q.prototype.endRecord=function(){var t,e=this,n=this.props.recording;return this._cancelTimeouts(),this.props.recording=!1,this.props.deltaTime=0,this.props.playing=!1,(void 0===t&&(t={}),k(!1,t)).catch((function(t){console.error(t)})).then((function(){n&&e.sketch&&"function"==typeof e.sketch.endRecord&&e._wrapContextScale((function(t){return e.sketch.endRecord(t)}))}))},q.prototype._createExportOptions=function(t){return void 0===t&&(t={}),{sequence:t.sequence,save:t.save,fps:this.props.fps,frame:t.sequence?this.props.frame:void 0,file:this.settings.file,name:this.settings.name,prefix:this.settings.prefix,suffix:this.settings.suffix,encoding:this.settings.encoding,encodingQuality:this.settings.encodingQuality,timeStamp:t.timeStamp||g(new Date,"yyyy.mm.dd-HH.MM.ss"),totalFrames:isFinite(this.props.totalFrames)?Math.max(0,this.props.totalFrames):1e3}},q.prototype.exportFrame=function(t){var e=this;if(void 0===t&&(t={}),!this.sketch)return Promise.all([]);"function"==typeof this.sketch.preExport&&this.sketch.preExport();var n=this._createExportOptions(t),r=p(),o=Promise.resolve();if(r&&t.commit&&"function"==typeof r.commit){var a=i({},n),s=r.commit(a);o=u(s)?s:Promise.resolve(s)}return o.then((function(t){return e._doExportFrame(i({},n,{hash:t||""}))})).then((function(t){return 1===t.length?t[0]:t}))},q.prototype._doExportFrame=function(t){var e=this;void 0===t&&(t={}),this._props.exporting=!0,this.resize();var n=this.render();return void 0===n&&(n=[this.props.canvas]),n=(n=[].concat(n).filter(Boolean)).map((function(e){var n,r="object"==typeof e&&e&&("data"in e||"dataURL"in e),o=r?e.data:e,a=r?i({},e,{data:o}):{data:o};if(c(n=o)&&/canvas/i.test(n.nodeName)&&"function"==typeof n.getContext){var s=function(t,e){void 0===e&&(e={});var n=e.encoding||"image/png";if(!T.includes(n))throw new Error("Invalid canvas encoding "+n);var r=(n.split("/")[1]||"").replace(/jpeg/i,"jpg");return r&&(r=("."+r).toLowerCase()),{extension:r,type:n,dataURL:t.toDataURL(n,e.encodingQuality)}}(o,{encoding:a.encoding||t.encoding,encodingQuality:f(a.encodingQuality,t.encodingQuality,.95)});return Object.assign(a,{dataURL:s.dataURL,extension:s.extension,type:s.type})}return a})),this._props.exporting=!1,this.resize(),this.render(),Promise.all(n.map((function(e,n,r){var o=i({extension:"",prefix:"",suffix:""},t,e,{layer:n,totalLayers:r.length}),a=!1!==t.save&&e.save;for(var s in o.save=!1!==a,o.filename=P(o),delete o.encoding,delete o.encodingQuality,o)void 0===o[s]&&delete o[s];var u=Promise.resolve({});if(o.save){var c=o.data;if(o.dataURL)u=E(o.dataURL,o);else u=function(t,e){void 0===e&&(e={});var n=Array.isArray(t)?t:[t];return F(new window.Blob(n,{type:e.type||""}),e)}(c,o)}return u.then((function(t){return Object.assign({},o,t)}))}))).then((function(n){var r=n.filter((function(t){return t.save}));if(r.length>0){var i,o=r.find((function(t){return t.outputName})),a=r.some((function(t){return t.client})),s=r.some((function(t){return t.stream}));i=r.length>1?r.length:o?o.outputName+"/"+r[0].filename:""+r[0].filename;var u="";if(t.sequence)u=isFinite(e.props.totalFrames)?" (frame "+(t.frame+1)+" / "+e.props.totalFrames+")":" (frame "+t.frame+")";else r.length>1&&(u=" files");console.log("%c["+(a?"canvas-sketch-cli":"canvas-sketch")+"]%c "+(s?"Streaming into":"Exported")+" %c"+i+"%c"+u,"color: #8e8e8e;","color: initial;","font-weight: bold;","font-weight: initial;")}return"function"==typeof e.sketch.postExport&&e.sketch.postExport(),n}))},q.prototype._wrapContextScale=function(t){this._preRender(),t(this.props),this._postRender()},q.prototype._preRender=function(){var t=this.props;this.props.gl||!t.context||t.p5?t.p5&&t.p5.scale(t.scaleX/t.pixelRatio,t.scaleY/t.pixelRatio):(t.context.save(),!1!==this.settings.scaleContext&&t.context.scale(t.scaleX,t.scaleY))},q.prototype._postRender=function(){var t=this.props;this.props.gl||!t.context||t.p5||t.context.restore(),t.gl&&!1!==this.settings.flush&&!t.p5&&t.gl.flush()},q.prototype.tick=function(){this.sketch&&"function"==typeof this.sketch.tick&&(this._preRender(),this.sketch.tick(this.props),this._postRender())},q.prototype.render=function(){return this.props.p5?(this._lastRedrawResult=void 0,this.props.p5.redraw(),this._lastRedrawResult):this.submitDrawCall()},q.prototype.submitDrawCall=function(){if(this.sketch){var t,e=this.props;return this._preRender(),"function"==typeof this.sketch?t=this.sketch(e):"function"==typeof this.sketch.render&&(t=this.sketch.render(e)),this._postRender(),t}},q.prototype.update=function(t){var e=this;void 0===t&&(t={});var n=["animate"];Object.keys(t).forEach((function(t){if(n.indexOf(t)>=0)throw new Error("Sorry, the { "+t+" } option is not yet supported with update().")}));var r=this._settings.canvas,i=this._settings.context;for(var o in t){var a=t[o];void 0!==a&&(e._settings[o]=a)}var s=Object.assign({},this._settings,t);if("time"in t&&"frame"in t)throw new Error("You should specify { time } or { frame } but not both");if("time"in t?delete s.frame:"frame"in t&&delete s.time,"duration"in t&&"totalFrames"in t)throw new Error("You should specify { duration } or { totalFrames } but not both");"duration"in t?delete s.totalFrames:"totalFrames"in t&&delete s.duration,"data"in t&&(this._props.data=t.data);var u=this.getTimeProps(s);if(Object.assign(this._props,u),r!==this._settings.canvas||i!==this._settings.context){var c=U(this._settings),p=c.context;this.props.canvas=c.canvas,this.props.context=p,this._setupGLKey(),this._appendCanvasIfNeeded()}return t.p5&&"function"!=typeof t.p5&&(this.props.p5=t.p5,this.props.p5.draw=function(){e._isP5Resizing||(e._lastRedrawResult=e.submitDrawCall())}),"playing"in t&&(t.playing?this.play():this.pause()),C(this._settings),this.resize(),this.render(),this.props},q.prototype.resize=function(){var t=this._getSizeProps(),e=this.settings,n=this.props,r=I(n,e);Object.assign(this._props,r);var i=this.props,o=i.pixelRatio,a=i.canvasWidth,s=i.canvasHeight,u=i.styleWidth,c=i.styleHeight,p=this.props.canvas;p&&!1!==e.resizeCanvas&&(n.p5?p.width===a&&p.height===s||(this._isP5Resizing=!0,n.p5.pixelDensity(o),n.p5.resizeCanvas(a/o,s/o,!1),this._isP5Resizing=!1):(p.width!==a&&(p.width=a),p.height!==s&&(p.height=s)),h()&&!1!==e.styleCanvas&&(p.style.width=u+"px",p.style.height=c+"px"));var f=this._getSizeProps(),l=!y(t,f);return l&&this._sizeChanged(),l},q.prototype._sizeChanged=function(){this.sketch&&"function"==typeof this.sketch.resize&&this.sketch.resize(this.props)},q.prototype.animate=function(){if(this.props.playing)if(h()){this._raf=window.requestAnimationFrame(this._animateHandler);var t=s(),e=1e3/this.props.fps,n=t-this._lastTime,r=this.props.duration,i="number"==typeof r&&isFinite(r),o=!0,a=this.settings.playbackRate;"fixed"===a?n=e:"throttle"===a?n>e?this._lastTime=t-=n%e:o=!1:this._lastTime=t;var u=n/1e3,c=this.props.time+u*this.props.timeScale;c<0&&i&&(c=r+c);var p=!1,f=!1;if(i&&c>=r&&(!1!==this.settings.loop?(o=!0,c%=r,f=!0):(o=!1,c=r,p=!0),this._signalEnd()),o){this.props.deltaTime=u,this.props.time=c,this.props.playhead=this._computePlayhead(c,r);var l=this.props.frame;this.props.frame=this._computeCurrentFrame(),f&&this._signalBegin(),l!==this.props.frame&&this.tick(),this.render(),this.props.deltaTime=0}p&&this.pause()}else console.error("[canvas-sketch] WARN: Animation in Node.js is not yet supported")},q.prototype.dispatch=function(t){if("function"!=typeof t)throw new Error("must pass function into dispatch()");t(this.props),this.render()},q.prototype.mount=function(){this._appendCanvasIfNeeded()},q.prototype.unmount=function(){h()&&(window.removeEventListener("resize",this._resizeHandler),this._keyboardShortcuts.detach()),this.props.canvas.parentElement&&this.props.canvas.parentElement.removeChild(this.props.canvas)},q.prototype._appendCanvasIfNeeded=function(){h()&&(!1!==this.settings.parent&&this.props.canvas&&!this.props.canvas.parentElement&&(this.settings.parent||document.body).appendChild(this.props.canvas))},q.prototype._setupGLKey=function(){var t;this.props.context&&("function"==typeof(t=this.props.context).clear&&"function"==typeof t.clearColor&&"function"==typeof t.bufferData?this._props.gl=this.props.context:delete this._props.gl)},q.prototype.getTimeProps=function(t){void 0===t&&(t={});var e=t.duration,n=t.totalFrames,r=f(t.timeScale,1),i=f(t.fps,24),o="number"==typeof e&&isFinite(e),a="number"==typeof n&&isFinite(n),s=o?Math.floor(i*e):void 0,u=a?n/i:void 0;if(o&&a&&s!==n)throw new Error("You should specify either duration or totalFrames, but not both. Or, they must match exactly.");void 0===t.dimensions&&void 0!==t.units&&console.warn("You've specified a { units } setting but no { dimension }, so the units will be ignored."),n=f(n,s,Infinity),e=f(e,u,Infinity);var c=t.time,p=t.frame,h="number"==typeof c&&isFinite(c),l="number"==typeof p&&isFinite(p),d=0,m=0,y=0;if(h&&l)throw new Error("You should specify either start frame or time, but not both.");return h?(y=this._computePlayhead(d=c,e),m=this._computeFrame(y,d,n,i)):l&&(y=this._computePlayhead(d=(m=p)/i,e)),{playhead:y,time:d,frame:m,duration:e,totalFrames:n,fps:i,timeScale:r}},q.prototype.setup=function(t){var e=this;if(void 0===t&&(t={}),this.sketch)throw new Error("Multiple setup() calls not yet supported.");this._settings=Object.assign({},t,this._settings),C(this._settings);var n=U(this._settings),r=n.context,i=n.canvas,o=this.getTimeProps(this._settings);this._props=Object.assign({},o,{canvas:i,context:r,deltaTime:0,started:!1,exporting:!1,playing:!1,recording:!1,settings:this.settings,data:this.settings.data,render:function(){return e.render()},togglePlay:function(){return e.togglePlay()},dispatch:function(t){return e.dispatch(t)},tick:function(){return e.tick()},resize:function(){return e.resize()},update:function(t){return e.update(t)},exportFrame:function(t){return e.exportFrame(t)},record:function(){return e.record()},play:function(){return e.play()},pause:function(){return e.pause()},stop:function(){return e.stop()}}),this._setupGLKey(),this.resize()},q.prototype.loadAndRun=function(t,e){var n=this;return this.load(t,e).then((function(){return n.run(),n}))},q.prototype.unload=function(){var t=this;this.pause(),this.sketch&&("function"==typeof this.sketch.unload&&this._wrapContextScale((function(e){return t.sketch.unload(e)})),this._sketch=null)},q.prototype.destroy=function(){this.unload(),this.unmount()},q.prototype.load=function(t,e){var n=this;if("function"!=typeof t)throw new Error("The function must take in a function as the first parameter. Example:\n canvasSketcher(() => { ... }, settings)");this.sketch&&this.unload(),void 0!==e&&this.update(e),this._preRender();var r=Promise.resolve();if(this.settings.p5){if(!h())throw new Error("[canvas-sketch] ERROR: Using p5.js in Node.js is not supported");r=new Promise((function(t){var e,r=n.settings.p5;r.p5&&(e=r.preload,r=r.p5);var i=function(r){e&&(r.preload=function(){return e(r)}),r.setup=function(){var e=n.props,i="webgl"===n.settings.context,o=i?r.WEBGL:r.P2D;r.noLoop(),r.pixelDensity(e.pixelRatio),r.createCanvas(e.viewportWidth,e.viewportHeight,o),i&&n.settings.attributes&&r.setAttributes(n.settings.attributes),n.update({p5:r,canvas:r.canvas,context:r._renderer.drawingContext}),t()}};if("function"==typeof r)new r(i);else{if("function"!=typeof window.createCanvas)throw new Error("{ p5 } setting is passed but can't find p5.js in global (window) scope. Maybe you did not create it globally?\nnew p5(); // <-- attaches to global scope");i(window)}}))}return r.then((function(){var e=t(n.props);return u(e)||(e=Promise.resolve(e)),e})).then((function(t){return t||(t={}),n._sketch=t,h()&&(n._keyboardShortcuts.attach(),window.addEventListener("resize",n._resizeHandler)),n._postRender(),n._sizeChanged(),n})).catch((function(t){throw console.warn("Could not start sketch, the async loading function rejected with an error:\n Error: "+t.message),t}))},Object.defineProperties(q.prototype,W);var B="hot-id-cache",Y=[];function K(t,e){if(void 0===e&&(e={}),e.p5){if(e.canvas||e.context&&"string"!=typeof e.context)throw new Error('In { p5 } mode, you can\'t pass your own canvas or context, unless the context is a "webgl" or "2d" string');e=Object.assign({},e,{canvas:!1,context:"string"==typeof e.context&&e.context})}var n,r,i=(n=p())&&n.hot;i&&(r=f(e.id,"$__DEFAULT_CANVAS_SKETCH_ID__$"));var o=i&&"string"==typeof r;o&&Y.includes(r)&&(console.warn("Warning: You have multiple calls to canvasSketch() in --hot mode. You must pass unique { id } strings in settings to enable hot reload across multiple sketches. ",r),o=!1);var a=Promise.resolve();if(o){Y.push(r);var s=function(t){var e=p();if(e)return e[B]=e[B]||{},e[B][t]}(r);if(s){var u=function(){var t,n=(t=s.manager,e.animate?{time:t.props.time}:void 0);return s.manager.destroy(),n};a=s.load.then(u).catch(u)}}return a.then((function(n){var i,a=new q;return t?(e=Object.assign({},e,n),a.setup(e),a.mount(),i=a.loadAndRun(t)):i=Promise.resolve(a),o&&function(t,e){var n=p();n&&(n[B]=n[B]||{},n[B][t]=e)}(r,{load:i,manager:a}),i}))}return K.canvasSketch=K,K.PaperSizes=j,K}))}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],5:[function(t,e,n){"use strict";e.exports=function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]}},{}],6:[function(t,e,n){(function(t){(function(){"use strict";var n=256,r=[],i=void 0===t?window:t,o=Math.pow(n,6),a=Math.pow(2,52),s=2*a,u=n-1,c=Math.random;function p(t){var e,r=t.length,i=this,o=0,a=i.i=i.j=0,s=i.S=[];for(r||(t=[r++]);o<n;)s[o]=o++;for(o=0;o<n;o++)s[o]=s[a=u&a+t[o%r]+(e=s[o])],s[a]=e;(i.g=function(t){for(var e,r=0,o=i.i,a=i.j,s=i.S;t--;)e=s[o=u&o+1],r=r*n+s[u&(s[o]=s[a=u&a+e])+(s[a]=e)];return i.i=o,i.j=a,r})(n)}function f(t,e){var n,r=[],i=(typeof t)[0];if(e&&"o"==i)for(n in t)try{r.push(f(t[n],e-1))}catch(t){}return r.length?r:"s"==i?t:t+"\0"}function h(t,e){for(var n,r=t+"",i=0;i<r.length;)e[u&i]=u&(n^=19*e[u&i])+r.charCodeAt(i++);return l(e)}function l(t){return String.fromCharCode.apply(0,t)}e.exports=function(t,u){if(u&&!0===u.global)return u.global=!1,Math.random=e.exports(t,u),u.global=!0,Math.random;var c=[],d=(h(f(u&&u.entropy||!1?[t,l(r)]:0 in arguments?t:function(t){try{return i.crypto.getRandomValues(t=new Uint8Array(n)),l(t)}catch(t){return[+new Date,i,i.navigator&&i.navigator.plugins,i.screen,l(r)]}}(),3),c),new p(c));return h(l(d.S),r),function(){for(var t=d.g(6),e=o,r=0;t<a;)t=(t+r)*n,e*=n,r=d.g(1);for(;t>=s;)t/=2,e/=2,r>>>=1;return(t+r)/e}},e.exports.resetGlobal=function(){Math.random=c},h(Math.random(),r)}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(t,e,n){!function(){"use strict";var t=.5*(Math.sqrt(3)-1),r=(3-Math.sqrt(3))/6,i=1/6,o=(Math.sqrt(5)-1)/4,a=(5-Math.sqrt(5))/20;function s(t){var e;e="function"==typeof t?t:t?function(){var t=0,e=0,n=0,r=1,i=(o=4022871197,function(t){t=t.toString();for(var e=0;e<t.length;e++){var n=.02519603282416938*(o+=t.charCodeAt(e));n-=o=n>>>0,o=(n*=o)>>>0,o+=4294967296*(n-=o)}return 2.3283064365386963e-10*(o>>>0)});var o;t=i(" "),e=i(" "),n=i(" ");for(var a=0;a<arguments.length;a++)(t-=i(arguments[a]))<0&&(t+=1),(e-=i(arguments[a]))<0&&(e+=1),(n-=i(arguments[a]))<0&&(n+=1);return i=null,function(){var i=2091639*t+2.3283064365386963e-10*r;return t=e,e=n,n=i-(r=0|i)}}(t):Math.random,this.p=u(e),this.perm=new Uint8Array(512),this.permMod12=new Uint8Array(512);for(var n=0;n<512;n++)this.perm[n]=this.p[255&n],this.permMod12[n]=this.perm[n]%12}function u(t){var e,n=new Uint8Array(256);for(e=0;e<256;e++)n[e]=e;for(e=0;e<255;e++){var r=e+~~(t()*(256-e)),i=n[e];n[e]=n[r],n[r]=i}return n}s.prototype={grad3:new Float32Array([1,1,0,-1,1,0,1,-1,0,-1,-1,0,1,0,1,-1,0,1,1,0,-1,-1,0,-1,0,1,1,0,-1,1,0,1,-1,0,-1,-1]),grad4:new Float32Array([0,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,1,0,1,1,1,0,1,-1,1,0,-1,1,1,0,-1,-1,-1,0,1,1,-1,0,1,-1,-1,0,-1,1,-1,0,-1,-1,1,1,0,1,1,1,0,-1,1,-1,0,1,1,-1,0,-1,-1,1,0,1,-1,1,0,-1,-1,-1,0,1,-1,-1,0,-1,1,1,1,0,1,1,-1,0,1,-1,1,0,1,-1,-1,0,-1,1,1,0,-1,1,-1,0,-1,-1,1,0,-1,-1,-1,0]),noise2D:function(e,n){var i,o,a=this.permMod12,s=this.perm,u=this.grad3,c=0,p=0,f=0,h=(e+n)*t,l=Math.floor(e+h),d=Math.floor(n+h),m=(l+d)*r,y=e-(l-m),g=n-(d-m);y>g?(i=1,o=0):(i=0,o=1);var v=y-i+r,w=g-o+r,b=y-1+2*r,x=g-1+2*r,M=255&l,_=255&d,T=.5-y*y-g*g;if(T>=0){var k=3*a[M+s[_]];c=(T*=T)*T*(u[k]*y+u[k+1]*g)}var E=.5-v*v-w*w;if(E>=0){var F=3*a[M+i+s[_+o]];p=(E*=E)*E*(u[F]*v+u[F+1]*w)}var P=.5-b*b-x*x;if(P>=0){var R=3*a[M+1+s[_+1]];f=(P*=P)*P*(u[R]*b+u[R+1]*x)}return 70*(c+p+f)},noise3D:function(t,e,n){var r,o,a,s,u,c,p,f,h,l,d=this.permMod12,m=this.perm,y=this.grad3,g=.3333333333333333*(t+e+n),v=Math.floor(t+g),w=Math.floor(e+g),b=Math.floor(n+g),x=(v+w+b)*i,M=t-(v-x),_=e-(w-x),T=n-(b-x);M>=_?_>=T?(u=1,c=0,p=0,f=1,h=1,l=0):M>=T?(u=1,c=0,p=0,f=1,h=0,l=1):(u=0,c=0,p=1,f=1,h=0,l=1):_<T?(u=0,c=0,p=1,f=0,h=1,l=1):M<T?(u=0,c=1,p=0,f=0,h=1,l=1):(u=0,c=1,p=0,f=1,h=1,l=0);var k=M-u+i,E=_-c+i,F=T-p+i,P=M-f+2*i,R=_-h+2*i,S=T-l+2*i,C=M-1+.5,j=_-1+.5,D=T-1+.5,A=255&v,O=255&w,N=255&b,H=.6-M*M-_*_-T*T;if(H<0)r=0;else{var z=3*d[A+m[O+m[N]]];r=(H*=H)*H*(y[z]*M+y[z+1]*_+y[z+2]*T)}var I=.6-k*k-E*E-F*F;if(I<0)o=0;else{var L=3*d[A+u+m[O+c+m[N+p]]];o=(I*=I)*I*(y[L]*k+y[L+1]*E+y[L+2]*F)}var U=.6-P*P-R*R-S*S;if(U<0)a=0;else{var q=3*d[A+f+m[O+h+m[N+l]]];a=(U*=U)*U*(y[q]*P+y[q+1]*R+y[q+2]*S)}var W=.6-C*C-j*j-D*D;if(W<0)s=0;else{var B=3*d[A+1+m[O+1+m[N+1]]];s=(W*=W)*W*(y[B]*C+y[B+1]*j+y[B+2]*D)}return 32*(r+o+a+s)},noise4D:function(t,e,n,r){var i,s,u,c,p,f,h,l,d,m,y,g,v,w,b,x,M,_=this.perm,T=this.grad4,k=(t+e+n+r)*o,E=Math.floor(t+k),F=Math.floor(e+k),P=Math.floor(n+k),R=Math.floor(r+k),S=(E+F+P+R)*a,C=t-(E-S),j=e-(F-S),D=n-(P-S),A=r-(R-S),O=0,N=0,H=0,z=0;C>j?O++:N++,C>D?O++:H++,C>A?O++:z++,j>D?N++:H++,j>A?N++:z++,D>A?H++:z++;var I=C-(f=O>=3?1:0)+a,L=j-(h=N>=3?1:0)+a,U=D-(l=H>=3?1:0)+a,q=A-(d=z>=3?1:0)+a,W=C-(m=O>=2?1:0)+2*a,B=j-(y=N>=2?1:0)+2*a,Y=D-(g=H>=2?1:0)+2*a,K=A-(v=z>=2?1:0)+2*a,G=C-(w=O>=1?1:0)+3*a,Q=j-(b=N>=1?1:0)+3*a,V=D-(x=H>=1?1:0)+3*a,Z=A-(M=z>=1?1:0)+3*a,J=C-1+4*a,X=j-1+4*a,$=D-1+4*a,tt=A-1+4*a,et=255&E,nt=255&F,rt=255&P,it=255&R,ot=.6-C*C-j*j-D*D-A*A;if(ot<0)i=0;else{var at=_[et+_[nt+_[rt+_[it]]]]%32*4;i=(ot*=ot)*ot*(T[at]*C+T[at+1]*j+T[at+2]*D+T[at+3]*A)}var st=.6-I*I-L*L-U*U-q*q;if(st<0)s=0;else{var ut=_[et+f+_[nt+h+_[rt+l+_[it+d]]]]%32*4;s=(st*=st)*st*(T[ut]*I+T[ut+1]*L+T[ut+2]*U+T[ut+3]*q)}var ct=.6-W*W-B*B-Y*Y-K*K;if(ct<0)u=0;else{var pt=_[et+m+_[nt+y+_[rt+g+_[it+v]]]]%32*4;u=(ct*=ct)*ct*(T[pt]*W+T[pt+1]*B+T[pt+2]*Y+T[pt+3]*K)}var ft=.6-G*G-Q*Q-V*V-Z*Z;if(ft<0)c=0;else{var ht=_[et+w+_[nt+b+_[rt+x+_[it+M]]]]%32*4;c=(ft*=ft)*ft*(T[ht]*G+T[ht+1]*Q+T[ht+2]*V+T[ht+3]*Z)}var lt=.6-J*J-X*X-$*$-tt*tt;if(lt<0)p=0;else{var dt=_[et+1+_[nt+1+_[rt+1+_[it+1]]]]%32*4;p=(lt*=lt)*lt*(T[dt]*J+T[dt+1]*X+T[dt+2]*$+T[dt+3]*tt)}return 27*(i+s+u+c+p)}},s._buildPermutationTable=u,"undefined"!=typeof define&&define.amd&&define((function(){return s})),void 0!==n?n.SimplexNoise=s:"undefined"!=typeof window&&(window.SimplexNoise=s),void 0!==e&&(e.exports=s)}()},{}],8:[function(t,e,n){const r=t("canvas-sketch"),i=t("canvas-sketch-util/random"),o=t("canvas-sketch-util/math"),a={dimensions:[window.innerWidth,window.innerHeight],animate:!0,scaleToFit:!1};document.body.style.background="black",document.title="WAVE";const s={cols:Math.floor(i.range(2,12)),rows:Math.floor(i.range(2,12)),scaleMin:1,scaleMax:30,freq:i.range(5e-4,.005),amp:1,frame:0,animate:!0,lineCap:"butt"};r((()=>({context:t,width:e,height:n,frame:r})=>{t.fillStyle="black",t.fillRect(0,0,e,n);const a=s.cols,u=s.rows,c=a*u,p=.95*e,f=.95*n,h=p/a,l=f/u,d=.5*(e-p),m=.5*(n-f);for(let e=0;e<c;e++){t.strokeStyle="yellow";const n=e%a*h,u=Math.floor(e/a)*l,c=.8*h,p=i.noise3D(n,u,10*(s.animate?r:s.frame),s.freq,s.amp),f=o.mapRange(p,-1,1,s.scaleMin,s.scaleMax),y=p*Math.PI*.2;t.save(),t.translate(n,u),t.translate(d,m),t.translate(.5*h,.5*l),t.rotate(y),t.lineWidth=f,t.lineCap=s.lineCap,t.beginPath(),t.moveTo(-.5*c,0),t.lineTo(.5*c,0),t.stroke(),t.restore()}}),a)},{"canvas-sketch":4,"canvas-sketch-util/math":2,"canvas-sketch-util/random":3}],9:[function(t,e,n){(function(t){(function(){t.CANVAS_SKETCH_DEFAULT_STORAGE_KEY=window.location.href}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[8,9]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyIiwiZSIsIm4iLCJ0IiwibyIsImkiLCJmIiwiYyIsInJlcXVpcmUiLCJ1IiwiYSIsIkVycm9yIiwiY29kZSIsInAiLCJleHBvcnRzIiwiY2FsbCIsImxlbmd0aCIsIm1vZHVsZSIsInZhbHVlIiwiZnJvbSIsInRvIiwiVHlwZUVycm9yIiwiY3ljbGUiLCJNYXRoIiwiZmxvb3IiLCJkZWZpbmVkIiwid3JhcCIsIkVQU0lMT04iLCJOdW1iZXIiLCJjbGFtcCIsIm1pbiIsIm1heCIsImxlcnAiLCJpbnZlcnNlTGVycCIsImFicyIsInRvRmluaXRlIiwiZGVmYXVsdFZhbHVlIiwiaXNGaW5pdGUiLCJleHBhbmRWZWN0b3IiLCJkaW1zIiwic2NhbGFyIiwib3V0IiwibGVycEFycmF5IiwibmV3QXJyYXkiLCJpbml0aWFsVmFsdWUiLCJwdXNoIiwibW9kIiwiYiIsImRhbXAiLCJsYW1iZGEiLCJkdCIsImV4cCIsImZyYWN0Iiwic2lnbiIsImRlZ1RvUmFkIiwiUEkiLCJyYWRUb0RlZyIsInBpbmdQb25nIiwibGluc3BhY2UiLCJvcHRzIiwiZW5kcG9pbnQiLCJvZmZzZXQiLCJtYXAiLCJfIiwibGVycEZyYW1lcyIsInZhbHVlcyIsImxlbiIsIndob2xlIiwiZnJhbWUiLCJuZXh0RnJhbWUiLCJBcnJheSIsImlzQXJyYXkiLCJjbGFtcDAxIiwidiIsInNtb290aHN0ZXAiLCJ4IiwiZGFtcEFycmF5IiwibWFwUmFuZ2UiLCJpbnB1dE1pbiIsImlucHV0TWF4Iiwib3V0cHV0TWluIiwib3V0cHV0TWF4Iiwib3V0VmFsIiwiZXhwYW5kMkQiLCJleHBhbmQzRCIsImV4cGFuZDREIiwic2VlZFJhbmRvbSIsIlNpbXBsZXhOb2lzZSIsImNyZWF0ZVJhbmRvbSIsImRlZmF1bHRTZWVkIiwiY3VycmVudFNlZWQiLCJjdXJyZW50UmFuZG9tIiwibm9pc2VHZW5lcmF0b3IiLCJkZWZhdWx0UmFuZG9tIiwicmFuZG9tIiwiX25leHRHYXVzc2lhbiIsIl9oYXNOZXh0R2F1c3NpYW4iLCJzZXRTZWVkIiwiZ2V0U2VlZCIsImdldFJhbmRvbVNlZWQiLCJTdHJpbmciLCJ2YWx1ZU5vblplcm8iLCJwZXJtdXRlTm9pc2UiLCJjcmVhdGVOb2lzZSIsIm5vaXNlMUQiLCJmcmVxdWVuY3kiLCJhbXBsaXR1ZGUiLCJub2lzZTJEIiwieSIsIm5vaXNlM0QiLCJ6Iiwibm9pc2U0RCIsInciLCJib29sZWFuIiwiY2hhbmNlIiwicmFuZ2UiLCJyYW5nZUZsb29yIiwicGljayIsImFycmF5Iiwic2h1ZmZsZSIsImFyciIsInJhbmQiLCJ0bXAiLCJyZXQiLCJzbGljZSIsIm9uQ2lyY2xlIiwiaW5zaWRlQ2lyY2xlIiwicmFkaXVzIiwic3FydCIsIm9uU3BoZXJlIiwicGhpIiwidGhldGEiLCJhY29zIiwic2luIiwiY29zIiwiaW5zaWRlU3BoZXJlIiwiayIsImNicnQiLCJxdWF0ZXJuaW9uIiwidTEiLCJ1MiIsInUzIiwic3ExIiwic3EyIiwidGhldGExIiwidGhldGEyIiwid2VpZ2h0ZWQiLCJ3ZWlnaHRlZFNldCIsInNldCIsIndlaWdodGVkU2V0SW5kZXgiLCJnYXVzc2lhbiIsIm1lYW4iLCJzdGFuZGFyZERlcml2YXRpb24iLCJyZXN1bHQiLCJ2MSIsInYyIiwicyIsIm11bHRpcGxpZXIiLCJsb2ciLCJzZWVkIiwib3B0IiwidW5kZWZpbmVkIiwid2VpZ2h0Iiwid2VpZ2h0cyIsInRvdGFsV2VpZ2h0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJwcm90b3R5cGUiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJvYmplY3RBc3NpZ24iLCJhc3NpZ24iLCJ0ZXN0MSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJ0ZXN0MyIsInNwbGl0IiwiZm9yRWFjaCIsImxldHRlciIsImtleXMiLCJlcnIiLCJzaG91bGRVc2VOYXRpdmUiLCJ0YXJnZXQiLCJzb3VyY2UiLCJzeW1ib2xzIiwidmFsIiwidG9PYmplY3QiLCJhcmd1bWVudHMiLCJrZXkiLCJicm93c2VyIiwiY29tbW9uanNHbG9iYWwiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIkRhdGUiLCJpc1Byb21pc2VfMSIsIm9iaiIsInRoZW4iLCJpc0RvbSIsIndpbmRvdyIsIk5vZGUiLCJub2RlVHlwZSIsIm5vZGVOYW1lIiwiZ2V0Q2xpZW50QVBJIiwiYXJndW1lbnRzJDEiLCJpc0Jyb3dzZXIiLCJkb2N1bWVudCIsImNhY2hlIiwic2hpbSIsInN1cHBvcnRzQXJndW1lbnRzQ2xhc3MiLCJ0b1N0cmluZyIsInN1cHBvcnRlZCIsIm9iamVjdCIsInVuc3VwcG9ydGVkIiwicFNsaWNlIiwiZGVlcEVxdWFsIiwiYWN0dWFsIiwiZXhwZWN0ZWQiLCJnZXRUaW1lIiwic3RyaWN0IiwiaXNVbmRlZmluZWRPck51bGwiLCJpc19hcmd1bWVudHMiLCJpc0J1ZmZlciIsImthIiwia2IiLCJzb3J0Iiwib2JqRXF1aXYiLCJjb3B5IiwiZ2xvYmFsIiwidG9rZW4iLCJ0aW1lem9uZSIsInRpbWV6b25lQ2xpcCIsImRhdGVGb3JtYXQiLCJkYXRlIiwibWFzayIsInV0YyIsImdtdCIsInRvTG93ZXJDYXNlIiwidGVzdCIsImlzTmFOIiwibWFza1NsaWNlIiwibWFza3MiLCJkIiwiRCIsIm0iLCJIIiwiTSIsIkwiLCJnZXRUaW1lem9uZU9mZnNldCIsIlciLCJ0YXJnZXRUaHVyc2RheSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwic2V0RGF0ZSIsImdldERheSIsImZpcnN0VGh1cnNkYXkiLCJkcyIsInNldEhvdXJzIiwiZ2V0SG91cnMiLCJnZXRXZWVrIiwiTiIsImRvdyIsImdldERheU9mV2VlayIsImZsYWdzIiwiZGQiLCJwYWQiLCJkZGQiLCJpMThuIiwiZGF5TmFtZXMiLCJkZGRkIiwibW0iLCJtbW0iLCJtb250aE5hbWVzIiwibW1tbSIsInl5IiwieXl5eSIsImgiLCJoaCIsIkhIIiwiTU0iLCJzcyIsImwiLCJyb3VuZCIsInRpbWVOYW1lcyIsInR0IiwiVCIsIlRUIiwiWiIsIm1hdGNoIiwicG9wIiwicmVwbGFjZSIsIlMiLCJkZWZhdWx0Iiwic2hvcnREYXRlIiwibWVkaXVtRGF0ZSIsImxvbmdEYXRlIiwiZnVsbERhdGUiLCJzaG9ydFRpbWUiLCJtZWRpdW1UaW1lIiwibG9uZ1RpbWUiLCJpc29EYXRlIiwiaXNvVGltZSIsImlzb0RhdGVUaW1lIiwiaXNvVXRjRGF0ZVRpbWUiLCJleHBpcmVzSGVhZGVyRm9ybWF0IiwicmVzIiwicmVwZWF0U3RyaW5nIiwic3RyIiwibnVtIiwic3Vic3RyIiwibGluayIsInBhZExlZnQiLCJjaCIsIm5vb3AiLCJkZWZhdWx0RXh0cyIsImV4dGVuc2lvbiIsInByZWZpeCIsInN1ZmZpeCIsInN1cHBvcnRlZEVuY29kaW5ncyIsInN0cmVhbSIsImlzU3RhcnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZpbGVuYW1lIiwicmVzb2x2ZUZpbGVuYW1lIiwiZnVuYyIsImNsaWVudCIsIm91dHB1dCIsImV2Iiwic2F2ZURhdGFVUkwiLCJkYXRhVVJMIiwic3BsaXRJbmRleCIsImluZGV4T2YiLCJiYXNlNjQiLCJieXRlU3RyaW5nIiwiYXRvYiIsInR5cGUiLCJtaW1lTWF0Y2giLCJleGVjIiwibWltZSIsImFiIiwiQXJyYXlCdWZmZXIiLCJpYSIsIlVpbnQ4QXJyYXkiLCJjaGFyQ29kZUF0IiwiQmxvYiIsImNyZWF0ZUJsb2JGcm9tRGF0YVVSTCIsImJsb2IiLCJzYXZlQmxvYiIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJkb3dubG9hZCIsImhyZWYiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJvbmNsaWNrIiwic2V0VGltZW91dCIsInJldm9rZU9iamVjdFVSTCIsInBhcmVudEVsZW1lbnQiLCJyZW1vdmVDaGlsZCIsInJlbW92ZUF0dHJpYnV0ZSIsImNsaWNrIiwiZmlsZSIsInRvdGFsRnJhbWVzIiwibGF5ZXJTdHIiLCJ0b3RhbExheWVycyIsImxheWVyIiwiZmlsdGVyIiwiQm9vbGVhbiIsIm5hbWUiLCJ0aW1lU3RhbXAiLCJoYXNoIiwiY29tbW9uVHlwb3MiLCJkaW1lbnNpb24iLCJhbmltYXRlZCIsImFuaW1hdGluZyIsInVuaXQiLCJQNSIsInBpeGVsbGF0ZWQiLCJsb29waW5nIiwicGl4ZWxQZXJJbmNoIiwiYWxsS2V5cyIsImNoZWNrU2V0dGluZ3MiLCJzZXR0aW5ncyIsImNvbnNvbGUiLCJ3YXJuIiwiaW5jbHVkZXMiLCJwYXBlclNpemVzIiwicmVkdWNlIiwiZGljdCIsInByZXNldCIsIml0ZW0iLCJ1bml0cyIsImRpbWVuc2lvbnMiLCJkZWZpbmVkJDEiLCJjb252ZXJzaW9ucyIsInN5c3RlbSIsImZhY3RvciIsImNtIiwicHQiLCJwYyIsImluIiwiZnQiLCJhbmNob3JzIiwibWV0cmljIiwicmF0aW8iLCJpbXBlcmlhbCIsImNvbnZlcnRMZW5ndGgiLCJmcm9tVW5pdCIsInRvVW5pdCIsInBpeGVsc1BlckluY2giLCJwcmVjaXNpb24iLCJyb3VuZFBpeGVsIiwidG9GYWN0b3IiLCJmcm9tRmFjdG9yIiwiaXNUb1BpeGVsIiwiZnJvbVVuaXREYXRhIiwidG9Vbml0RGF0YSIsImFuY2hvciIsImRlY2ltYWxzIiwiY29udmVydERpc3RhbmNlJDEiLCJ1bml0c0Zyb20iLCJ1bml0c1RvIiwicmVzaXplQ2FudmFzIiwicHJvcHMiLCJ3aWR0aCIsImhlaWdodCIsInN0eWxlV2lkdGgiLCJzdHlsZUhlaWdodCIsImNhbnZhc1dpZHRoIiwiY2FudmFzSGVpZ2h0IiwiaGFzRGltZW5zaW9ucyIsImNoZWNrSWZIYXNEaW1lbnNpb25zIiwiZXhwb3J0aW5nIiwic2NhbGVUb0ZpdCIsInNjYWxlVG9WaWV3IiwicGl4ZWxSYXRpbyIsImV4cG9ydFBpeGVsUmF0aW8iLCJibGVlZCIsImRldmljZVBpeGVsUmF0aW8iLCJiYXNlUGl4ZWxSYXRpbyIsIm1heFBpeGVsUmF0aW8iLCJ0cmltV2lkdGgiLCJ0cmltSGVpZ2h0IiwicmVmIiwiZWxlbWVudCIsInBhcmVudCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImdldFBhcmVudFNpemUiLCJwYXJlbnRXaWR0aCIsInBhcmVudEhlaWdodCIsImdldERpbWVuc2lvbnNGcm9tUHJlc2V0IiwiaGlnaGVzdCIsImxvd2VzdCIsIm9yaWVudGF0aW9uIiwibGFuZHNjYXBlIiwicmVhbFdpZHRoIiwicmVhbEhlaWdodCIsImFzcGVjdCIsIndpbmRvd0FzcGVjdCIsInNjYWxlVG9GaXRQYWRkaW5nIiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJnZXRDYW52YXNDb250ZXh0XzEiLCJjYW52YXMiLCJnbCIsImF0dHJpYnMiLCJuYW1lcyIsImdldENvbnRleHQiLCJjcmVhdGVDYW52YXMiLCJjb250ZXh0Iiwib3duc0NhbnZhcyIsIm5ld0NhbnZhcyIsImNyZWF0ZUNhbnZhc0VsZW1lbnQiLCJhdHRyaWJ1dGVzIiwicGl4ZWxhdGVkIiwiaW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwibW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwib0ltYWdlU21vb3RoaW5nRW5hYmxlZCIsIndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCIsIm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwiU2tldGNoTWFuYWdlciIsIl9zZXR0aW5ncyIsIl9wcm9wcyIsIl9za2V0Y2giLCJfcmFmIiwiX3JlY29yZFRpbWVvdXQiLCJfbGFzdFJlZHJhd1Jlc3VsdCIsIl9pc1A1UmVzaXppbmciLCJfa2V5Ym9hcmRTaG9ydGN1dHMiLCJoYW5kbGVyIiwiZW5hYmxlZCIsImtleUNvZGUiLCJhbHRLZXkiLCJtZXRhS2V5IiwiY3RybEtleSIsInRvZ2dsZVBsYXkiLCJwcmV2ZW50RGVmYXVsdCIsImNvbW1pdCIsInNhdmUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImtleWJvYXJkU2hvcnRjdXRzIiwidGhpcyQxIiwiaG90a2V5cyIsInNoaWZ0S2V5IiwicmVjb3JkaW5nIiwiZW5kUmVjb3JkIiwicnVuIiwicmVjb3JkIiwiZXhwb3J0RnJhbWUiLCJwbGF5aW5nIiwicGF1c2UiLCJwbGF5IiwiX2FuaW1hdGVIYW5kbGVyIiwiYW5pbWF0ZSIsIl9yZXNpemVIYW5kbGVyIiwicmVzaXplIiwicmVuZGVyIiwic2tldGNoIiwiZ2V0IiwidGhpcyIsIl9jb21wdXRlUGxheWhlYWQiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX2NvbXB1dGVGcmFtZSIsInBsYXloZWFkIiwidGltZSIsImZwcyIsIl9jb21wdXRlQ3VycmVudEZyYW1lIiwiX2dldFNpemVQcm9wcyIsInZpZXdwb3J0V2lkdGgiLCJ2aWV3cG9ydEhlaWdodCIsImRpc3Bvc2UiLCJzdGFydGVkIiwiX3NpZ25hbEJlZ2luIiwidGljayIsIl9jYW5jZWxUaW1lb3V0cyIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2xhc3RUaW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXJyb3IiLCJzdG9wIiwiZGVsdGFUaW1lIiwiZXhwb3J0T3B0cyIsIl9jcmVhdGVFeHBvcnRPcHRpb25zIiwiZnJhbWVJbnRlcnZhbCIsIl9zaWduYWxFbmQiLCJiZWdpblJlY29yZCIsIl93cmFwQ29udGV4dFNjYWxlIiwiY2F0Y2giLCJyZXNwb25zZSIsImJlZ2luIiwiZW5kIiwid2FzUmVjb3JkaW5nIiwic2VxdWVuY2UiLCJlbmNvZGluZyIsImVuY29kaW5nUXVhbGl0eSIsImRhdGVmb3JtYXQiLCJhbGwiLCJwcmVFeHBvcnQiLCJjb21taXRPcHRzIiwiX2RvRXhwb3J0RnJhbWUiLCJkcmF3UmVzdWx0IiwiY29uY2F0IiwiaGFzRGF0YU9iamVjdCIsImRhdGEiLCJ0b0RhdGFVUkwiLCJleHBvcnRDYW52YXMiLCJsYXllckxpc3QiLCJjdXJPcHQiLCJzYXZlUGFyYW0iLCJzYXZlUHJvbWlzZSIsInBhcnRzIiwic2F2ZUZpbGUiLCJzYXZlUmVzdWx0Iiwic2F2ZWRFdmVudHMiLCJldmVudFdpdGhPdXRwdXQiLCJmaW5kIiwib3V0cHV0TmFtZSIsImlzQ2xpZW50Iiwic29tZSIsImlzU3RyZWFtaW5nIiwib2ZTZXEiLCJwb3N0RXhwb3J0IiwiY2IiLCJfcHJlUmVuZGVyIiwiX3Bvc3RSZW5kZXIiLCJwNSIsInNjYWxlIiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVDb250ZXh0IiwicmVzdG9yZSIsImZsdXNoIiwicmVkcmF3Iiwic3VibWl0RHJhd0NhbGwiLCJ1cGRhdGUiLCJub3RZZXRTdXBwb3J0ZWQiLCJvbGRDYW52YXMiLCJvbGRDb250ZXh0IiwidGltZU9wdHMiLCJ0aW1lUHJvcHMiLCJnZXRUaW1lUHJvcHMiLCJfc2V0dXBHTEtleSIsIl9hcHBlbmRDYW52YXNJZk5lZWRlZCIsImRyYXciLCJvbGRTaXplcyIsIm5ld1Byb3BzIiwicGl4ZWxEZW5zaXR5Iiwic3R5bGVDYW52YXMiLCJuZXdTaXplcyIsImNoYW5nZWQiLCJkZWVwRXF1YWxfMSIsIl9zaXplQ2hhbmdlZCIsImZyYW1lSW50ZXJ2YWxNUyIsImRlbHRhVGltZU1TIiwiaGFzRHVyYXRpb24iLCJpc05ld0ZyYW1lIiwicGxheWJhY2tSYXRlIiwibmV3VGltZSIsInRpbWVTY2FsZSIsImlzRmluaXNoZWQiLCJpc0xvb3BTdGFydCIsImxvb3AiLCJsYXN0RnJhbWUiLCJkaXNwYXRjaCIsIm1vdW50IiwidW5tb3VudCIsImRldGFjaCIsImN0eCIsImNsZWFyIiwiY2xlYXJDb2xvciIsImJ1ZmZlckRhdGEiLCJoYXNUb3RhbEZyYW1lcyIsInRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uIiwiZHVyYXRpb25Gcm9tVG90YWxGcmFtZXMiLCJJbmZpbml0eSIsInN0YXJ0VGltZSIsInN0YXJ0RnJhbWUiLCJoYXNTdGFydFRpbWUiLCJoYXNTdGFydEZyYW1lIiwic2V0dXAiLCJsb2FkQW5kUnVuIiwiY2FudmFzU2tldGNoIiwibmV3U2V0dGluZ3MiLCJsb2FkIiwidW5sb2FkIiwiZGVzdHJveSIsImNyZWF0ZVNrZXRjaCIsInByZWxvYWQiLCJQNUNvbnN0cnVjdG9yIiwicDVTa2V0Y2giLCJpc0dMIiwicmVuZGVyZXIiLCJXRUJHTCIsIlAyRCIsIm5vTG9vcCIsInNldEF0dHJpYnV0ZXMiLCJfcmVuZGVyZXIiLCJkcmF3aW5nQ29udGV4dCIsImxvYWRlciIsImF0dGFjaCIsIm1lc3NhZ2UiLCJDQUNIRSIsInJ1bnRpbWVDb2xsaXNpb25zIiwiaG90SUQiLCJpc0hvdCIsImhvdCIsImlkIiwiaXNJbmplY3RpbmciLCJwcmV2aW91c0RhdGEiLCJjYWNoZUdldCIsIm5leHQiLCJvbGRNYW5hZ2VyIiwibWFuYWdlciIsImNhY2hlUHV0IiwiUGFwZXJTaXplcyIsInBvb2wiLCJHTE9CQUwiLCJzdGFydGRlbm9tIiwicG93Iiwic2lnbmlmaWNhbmNlIiwib3ZlcmZsb3ciLCJvbGRSYW5kb20iLCJBUkM0Iiwia2V5bGVuIiwibWUiLCJqIiwiZyIsImNvdW50IiwiZmxhdHRlbiIsImRlcHRoIiwicHJvcCIsInR5cCIsIm1peGtleSIsInNtZWFyIiwic3RyaW5nc2VlZCIsInRvc3RyaW5nIiwiYXBwbHkiLCJvcHRpb25zIiwiYXJjNCIsImVudHJvcHkiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJuYXZpZ2F0b3IiLCJwbHVnaW5zIiwic2NyZWVuIiwiYXV0b3NlZWQiLCJyZXNldEdsb2JhbCIsIkYyIiwiRzIiLCJHMyIsIkY0IiwiRzQiLCJyYW5kb21PclNlZWQiLCJzMCIsInMxIiwiczIiLCJtYXNoIiwiYWxlYSIsImJ1aWxkUGVybXV0YXRpb25UYWJsZSIsInBlcm0iLCJwZXJtTW9kMTIiLCJhdXgiLCJncmFkMyIsIkZsb2F0MzJBcnJheSIsImdyYWQ0IiwieGluIiwieWluIiwiaTEiLCJqMSIsIm4wIiwibjEiLCJuMiIsIngwIiwieTAiLCJ4MSIsInkxIiwieDIiLCJ5MiIsImlpIiwiamoiLCJ0MCIsImdpMCIsInQxIiwiZ2kxIiwidDIiLCJnaTIiLCJ6aW4iLCJuMyIsImsxIiwiaTIiLCJqMiIsImsyIiwiejAiLCJ6MSIsInoyIiwieDMiLCJ5MyIsInozIiwia2siLCJ0MyIsImdpMyIsIm40IiwibDEiLCJsMiIsImkzIiwiajMiLCJrMyIsImwzIiwidzAiLCJyYW5reCIsInJhbmt5IiwicmFua3oiLCJyYW5rdyIsIncxIiwidzIiLCJ3MyIsIng0IiwieTQiLCJ6NCIsInc0IiwibGwiLCJ0NCIsImdpNCIsIl9idWlsZFBlcm11dGF0aW9uVGFibGUiLCJkZWZpbmUiLCJhbWQiLCJtYXRoIiwiYmFja2dyb3VuZCIsInRpdGxlIiwicGFyYW1zIiwiY29scyIsInJvd3MiLCJzY2FsZU1pbiIsInNjYWxlTWF4IiwiZnJlcSIsImFtcCIsImxpbmVDYXAiLCJmaWxsU3R5bGUiLCJmaWxsUmVjdCIsIm51bUNlbGxzIiwiZ3JpZFciLCJncmlkSCIsImNlbGxXIiwiY2VsbEgiLCJtYXJnWCIsIm1hcmdZIiwic3Ryb2tlU3R5bGUiLCJhbmdsZSIsInRyYW5zbGF0ZSIsInJvdGF0ZSIsImxpbmVXaWR0aCIsImJlZ2luUGF0aCIsIm1vdmVUbyIsImxpbmVUbyIsInN0cm9rZSIsIkNBTlZBU19TS0VUQ0hfREVGQVVMVF9TVE9SQUdFX0tFWSIsImxvY2F0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLmNvbmZpZy95YXJuL2dsb2JhbC9ub2RlX21vZHVsZXMvYnJvd3Nlci1wYWNrL19wcmVsdWRlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9saWIvd3JhcC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbWF0aC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvcmFuZG9tLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3JpZ2h0LW5vdy9icm93c2VyLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvaXMtcHJvbWlzZS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLWRvbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3V0aWwuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yZXBlYXQtc3RyaW5nL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9saWIva2V5cy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2lzX2FyZ3VtZW50cy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kYXRlZm9ybWF0L2xpYi9kYXRlZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcGFkLWxlZnQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9zYXZlLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvYWNjZXNzaWJpbGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3BhcGVyLXNpemVzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2NvbnZlcnQtbGVuZ3RoL2NvbnZlcnQtbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvZGlzdGFuY2VzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9yZXNpemVDYW52YXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9nZXQtY2FudmFzLWNvbnRleHQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2NyZWF0ZUNhbnZhcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvU2tldGNoTWFuYWdlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUva2V5Ym9hcmRTaG9ydGN1dHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jYW52YXMtc2tldGNoLmpzIiwibm9kZV9tb2R1bGVzL2RlZmluZWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvc2VlZC1yYW5kb20vaW5kZXguanMiLCJub2RlX21vZHVsZXMvc2ltcGxleC1ub2lzZS9zaW1wbGV4LW5vaXNlLmpzIiwic2tldGNoLTA1LmpzIiwiY2FudmFzLXNrZXRjaC1jbGkvaW5qZWN0ZWQvc3RvcmFnZS1rZXkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIm1vZHVsZS5leHBvcnRzID0gd3JhcDtcbmZ1bmN0aW9uIHdyYXAgKHZhbHVlLCBmcm9tLCB0bykge1xuICBpZiAodHlwZW9mIGZyb20gIT09ICdudW1iZXInIHx8IHR5cGVvZiB0byAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHNwZWNpZnkgXCJ0b1wiIGFuZCBcImZyb21cIiBhcmd1bWVudHMgYXMgbnVtYmVycycpO1xuICB9XG4gIC8vIGFsZ29yaXRobSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU4NTI2MjgvNTk5ODg0XG4gIGlmIChmcm9tID4gdG8pIHtcbiAgICB2YXIgdCA9IGZyb207XG4gICAgZnJvbSA9IHRvO1xuICAgIHRvID0gdDtcbiAgfVxuICB2YXIgY3ljbGUgPSB0byAtIGZyb207XG4gIGlmIChjeWNsZSA9PT0gMCkge1xuICAgIHJldHVybiB0bztcbiAgfVxuICByZXR1cm4gdmFsdWUgLSBjeWNsZSAqIE1hdGguZmxvb3IoKHZhbHVlIC0gZnJvbSkgLyBjeWNsZSk7XG59XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB3cmFwID0gcmVxdWlyZSgnLi9saWIvd3JhcCcpO1xudmFyIEVQU0lMT04gPSBOdW1iZXIuRVBTSUxPTjtcblxuZnVuY3Rpb24gY2xhbXAgKHZhbHVlLCBtaW4sIG1heCkge1xuICByZXR1cm4gbWluIDwgbWF4XG4gICAgPyAodmFsdWUgPCBtaW4gPyBtaW4gOiB2YWx1ZSA+IG1heCA/IG1heCA6IHZhbHVlKVxuICAgIDogKHZhbHVlIDwgbWF4ID8gbWF4IDogdmFsdWUgPiBtaW4gPyBtaW4gOiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wMDEgKHYpIHtcbiAgcmV0dXJuIGNsYW1wKHYsIDAsIDEpO1xufVxuXG5mdW5jdGlvbiBsZXJwIChtaW4sIG1heCwgdCkge1xuICByZXR1cm4gbWluICogKDEgLSB0KSArIG1heCAqIHQ7XG59XG5cbmZ1bmN0aW9uIGludmVyc2VMZXJwIChtaW4sIG1heCwgdCkge1xuICBpZiAoTWF0aC5hYnMobWluIC0gbWF4KSA8IEVQU0lMT04pIHJldHVybiAwO1xuICBlbHNlIHJldHVybiAodCAtIG1pbikgLyAobWF4IC0gbWluKTtcbn1cblxuZnVuY3Rpb24gc21vb3Roc3RlcCAobWluLCBtYXgsIHQpIHtcbiAgdmFyIHggPSBjbGFtcChpbnZlcnNlTGVycChtaW4sIG1heCwgdCksIDAsIDEpO1xuICByZXR1cm4geCAqIHggKiAoMyAtIDIgKiB4KTtcbn1cblxuZnVuY3Rpb24gdG9GaW5pdGUgKG4sIGRlZmF1bHRWYWx1ZSkge1xuICBkZWZhdWx0VmFsdWUgPSBkZWZpbmVkKGRlZmF1bHRWYWx1ZSwgMCk7XG4gIHJldHVybiB0eXBlb2YgbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUobikgPyBuIDogZGVmYXVsdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBleHBhbmRWZWN0b3IgKGRpbXMpIHtcbiAgaWYgKHR5cGVvZiBkaW1zICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZGltcyBhcmd1bWVudCcpO1xuICByZXR1cm4gZnVuY3Rpb24gKHAsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmluZWQoZGVmYXVsdFZhbHVlLCAwKTtcbiAgICB2YXIgc2NhbGFyO1xuICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgIC8vIE5vIHZlY3RvciwgY3JlYXRlIGEgZGVmYXVsdCBvbmVcbiAgICAgIHNjYWxhciA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShwKSkge1xuICAgICAgLy8gRXhwYW5kIHNpbmdsZSBjaGFubmVsIHRvIG11bHRpcGxlIHZlY3RvclxuICAgICAgc2NhbGFyID0gcDtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gW107XG4gICAgdmFyIGk7XG4gICAgaWYgKHNjYWxhciA9PSBudWxsKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZGltczsgaSsrKSB7XG4gICAgICAgIG91dFtpXSA9IHRvRmluaXRlKHBbaV0sIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBkaW1zOyBpKyspIHtcbiAgICAgICAgb3V0W2ldID0gc2NhbGFyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBsZXJwQXJyYXkgKG1pbiwgbWF4LCB0LCBvdXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdO1xuICBpZiAobWluLmxlbmd0aCAhPT0gbWF4Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBhbmQgbWF4IGFycmF5IGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBzYW1lIGxlbmd0aCcpO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWluLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0W2ldID0gbGVycChtaW5baV0sIG1heFtpXSwgdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbmV3QXJyYXkgKG4sIGluaXRpYWxWYWx1ZSkge1xuICBuID0gZGVmaW5lZChuLCAwKTtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbiBhcmd1bWVudCB0byBiZSBhIG51bWJlcicpO1xuICB2YXIgb3V0ID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBvdXQucHVzaChpbml0aWFsVmFsdWUpO1xuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBsaW5zcGFjZSAobiwgb3B0cykge1xuICBuID0gZGVmaW5lZChuLCAwKTtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbiBhcmd1bWVudCB0byBiZSBhIG51bWJlcicpO1xuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnYm9vbGVhbicpIHtcbiAgICBvcHRzID0geyBlbmRwb2ludDogdHJ1ZSB9O1xuICB9XG4gIHZhciBvZmZzZXQgPSBkZWZpbmVkKG9wdHMub2Zmc2V0LCAwKTtcbiAgaWYgKG9wdHMuZW5kcG9pbnQpIHtcbiAgICByZXR1cm4gbmV3QXJyYXkobikubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICByZXR1cm4gbiA8PSAxID8gMCA6ICgoaSArIG9mZnNldCkgLyAobiAtIDEpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3QXJyYXkobikubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICByZXR1cm4gKGkgKyBvZmZzZXQpIC8gbjtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsZXJwRnJhbWVzICh2YWx1ZXMsIHQsIG91dCkge1xuICB0ID0gY2xhbXAodCwgMCwgMSk7XG5cbiAgdmFyIGxlbiA9IHZhbHVlcy5sZW5ndGggLSAxO1xuICB2YXIgd2hvbGUgPSB0ICogbGVuO1xuICB2YXIgZnJhbWUgPSBNYXRoLmZsb29yKHdob2xlKTtcbiAgdmFyIGZyYWN0ID0gd2hvbGUgLSBmcmFtZTtcblxuICB2YXIgbmV4dEZyYW1lID0gTWF0aC5taW4oZnJhbWUgKyAxLCBsZW4pO1xuICB2YXIgYSA9IHZhbHVlc1tmcmFtZSAlIHZhbHVlcy5sZW5ndGhdO1xuICB2YXIgYiA9IHZhbHVlc1tuZXh0RnJhbWUgJSB2YWx1ZXMubGVuZ3RoXTtcbiAgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYiA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbGVycChhLCBiLCBmcmFjdCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgcmV0dXJuIGxlcnBBcnJheShhLCBiLCBmcmFjdCwgb3V0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXNtYXRjaCBpbiB2YWx1ZSB0eXBlIG9mIHR3byBhcnJheSBlbGVtZW50czogJyArIGZyYW1lICsgJyBhbmQgJyArIG5leHRGcmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW9kIChhLCBiKSB7XG4gIHJldHVybiAoKGEgJSBiKSArIGIpICUgYjtcbn1cblxuZnVuY3Rpb24gZGVnVG9SYWQgKG4pIHtcbiAgcmV0dXJuIG4gKiBNYXRoLlBJIC8gMTgwO1xufVxuXG5mdW5jdGlvbiByYWRUb0RlZyAobikge1xuICByZXR1cm4gbiAqIDE4MCAvIE1hdGguUEk7XG59XG5cbmZ1bmN0aW9uIGZyYWN0IChuKSB7XG4gIHJldHVybiBuIC0gTWF0aC5mbG9vcihuKTtcbn1cblxuZnVuY3Rpb24gc2lnbiAobikge1xuICBpZiAobiA+IDApIHJldHVybiAxO1xuICBlbHNlIGlmIChuIDwgMCkgcmV0dXJuIC0xO1xuICBlbHNlIHJldHVybiAwO1xufVxuXG4vLyBTcGVjaWZpYyBmdW5jdGlvbiBmcm9tIFVuaXR5IC8gb2ZNYXRoLCBub3Qgc3VyZSBpdHMgbmVlZGVkP1xuLy8gZnVuY3Rpb24gbGVycFdyYXAgKGEsIGIsIHQsIG1pbiwgbWF4KSB7XG4vLyAgIHJldHVybiB3cmFwKGEgKyB3cmFwKGIgLSBhLCBtaW4sIG1heCkgKiB0LCBtaW4sIG1heClcbi8vIH1cblxuZnVuY3Rpb24gcGluZ1BvbmcgKHQsIGxlbmd0aCkge1xuICB0ID0gbW9kKHQsIGxlbmd0aCAqIDIpO1xuICByZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnModCAtIGxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGRhbXAgKGEsIGIsIGxhbWJkYSwgZHQpIHtcbiAgcmV0dXJuIGxlcnAoYSwgYiwgMSAtIE1hdGguZXhwKC1sYW1iZGEgKiBkdCkpO1xufVxuXG5mdW5jdGlvbiBkYW1wQXJyYXkgKGEsIGIsIGxhbWJkYSwgZHQsIG91dCkge1xuICBvdXQgPSBvdXQgfHwgW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIG91dFtpXSA9IGRhbXAoYVtpXSwgYltpXSwgbGFtYmRhLCBkdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbWFwUmFuZ2UgKHZhbHVlLCBpbnB1dE1pbiwgaW5wdXRNYXgsIG91dHB1dE1pbiwgb3V0cHV0TWF4LCBjbGFtcCkge1xuICAvLyBSZWZlcmVuY2U6XG4gIC8vIGh0dHBzOi8vb3BlbmZyYW1ld29ya3MuY2MvZG9jdW1lbnRhdGlvbi9tYXRoL29mTWF0aC9cbiAgaWYgKE1hdGguYWJzKGlucHV0TWluIC0gaW5wdXRNYXgpIDwgRVBTSUxPTikge1xuICAgIHJldHVybiBvdXRwdXRNaW47XG4gIH0gZWxzZSB7XG4gICAgdmFyIG91dFZhbCA9ICgodmFsdWUgLSBpbnB1dE1pbikgLyAoaW5wdXRNYXggLSBpbnB1dE1pbikgKiAob3V0cHV0TWF4IC0gb3V0cHV0TWluKSArIG91dHB1dE1pbik7XG4gICAgaWYgKGNsYW1wKSB7XG4gICAgICBpZiAob3V0cHV0TWF4IDwgb3V0cHV0TWluKSB7XG4gICAgICAgIGlmIChvdXRWYWwgPCBvdXRwdXRNYXgpIG91dFZhbCA9IG91dHB1dE1heDtcbiAgICAgICAgZWxzZSBpZiAob3V0VmFsID4gb3V0cHV0TWluKSBvdXRWYWwgPSBvdXRwdXRNaW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3V0VmFsID4gb3V0cHV0TWF4KSBvdXRWYWwgPSBvdXRwdXRNYXg7XG4gICAgICAgIGVsc2UgaWYgKG91dFZhbCA8IG91dHB1dE1pbikgb3V0VmFsID0gb3V0cHV0TWluO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0VmFsO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtb2Q6IG1vZCxcbiAgZnJhY3Q6IGZyYWN0LFxuICBzaWduOiBzaWduLFxuICBkZWdUb1JhZDogZGVnVG9SYWQsXG4gIHJhZFRvRGVnOiByYWRUb0RlZyxcbiAgd3JhcDogd3JhcCxcbiAgcGluZ1Bvbmc6IHBpbmdQb25nLFxuICBsaW5zcGFjZTogbGluc3BhY2UsXG4gIGxlcnA6IGxlcnAsXG4gIGxlcnBBcnJheTogbGVycEFycmF5LFxuICBpbnZlcnNlTGVycDogaW52ZXJzZUxlcnAsXG4gIGxlcnBGcmFtZXM6IGxlcnBGcmFtZXMsXG4gIGNsYW1wOiBjbGFtcCxcbiAgY2xhbXAwMTogY2xhbXAwMSxcbiAgc21vb3Roc3RlcDogc21vb3Roc3RlcCxcbiAgZGFtcDogZGFtcCxcbiAgZGFtcEFycmF5OiBkYW1wQXJyYXksXG4gIG1hcFJhbmdlOiBtYXBSYW5nZSxcbiAgZXhwYW5kMkQ6IGV4cGFuZFZlY3RvcigyKSxcbiAgZXhwYW5kM0Q6IGV4cGFuZFZlY3RvcigzKSxcbiAgZXhwYW5kNEQ6IGV4cGFuZFZlY3Rvcig0KVxufTtcbiIsInZhciBzZWVkUmFuZG9tID0gcmVxdWlyZSgnc2VlZC1yYW5kb20nKTtcbnZhciBTaW1wbGV4Tm9pc2UgPSByZXF1aXJlKCdzaW1wbGV4LW5vaXNlJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcblxuZnVuY3Rpb24gY3JlYXRlUmFuZG9tIChkZWZhdWx0U2VlZCkge1xuICBkZWZhdWx0U2VlZCA9IGRlZmluZWQoZGVmYXVsdFNlZWQsIG51bGwpO1xuICB2YXIgZGVmYXVsdFJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICB2YXIgY3VycmVudFNlZWQ7XG4gIHZhciBjdXJyZW50UmFuZG9tO1xuICB2YXIgbm9pc2VHZW5lcmF0b3I7XG4gIHZhciBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgdmFyIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcblxuICBzZXRTZWVkKGRlZmF1bHRTZWVkKTtcblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBjcmVhdGVSYW5kb206IGZ1bmN0aW9uIChkZWZhdWx0U2VlZCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVJhbmRvbShkZWZhdWx0U2VlZCk7XG4gICAgfSxcbiAgICBzZXRTZWVkOiBzZXRTZWVkLFxuICAgIGdldFNlZWQ6IGdldFNlZWQsXG4gICAgZ2V0UmFuZG9tU2VlZDogZ2V0UmFuZG9tU2VlZCxcbiAgICB2YWx1ZU5vblplcm86IHZhbHVlTm9uWmVybyxcbiAgICBwZXJtdXRlTm9pc2U6IHBlcm11dGVOb2lzZSxcbiAgICBub2lzZTFEOiBub2lzZTFELFxuICAgIG5vaXNlMkQ6IG5vaXNlMkQsXG4gICAgbm9pc2UzRDogbm9pc2UzRCxcbiAgICBub2lzZTREOiBub2lzZTRELFxuICAgIHNpZ246IHNpZ24sXG4gICAgYm9vbGVhbjogYm9vbGVhbixcbiAgICBjaGFuY2U6IGNoYW5jZSxcbiAgICByYW5nZTogcmFuZ2UsXG4gICAgcmFuZ2VGbG9vcjogcmFuZ2VGbG9vcixcbiAgICBwaWNrOiBwaWNrLFxuICAgIHNodWZmbGU6IHNodWZmbGUsXG4gICAgb25DaXJjbGU6IG9uQ2lyY2xlLFxuICAgIGluc2lkZUNpcmNsZTogaW5zaWRlQ2lyY2xlLFxuICAgIG9uU3BoZXJlOiBvblNwaGVyZSxcbiAgICBpbnNpZGVTcGhlcmU6IGluc2lkZVNwaGVyZSxcbiAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLFxuICAgIHdlaWdodGVkOiB3ZWlnaHRlZCxcbiAgICB3ZWlnaHRlZFNldDogd2VpZ2h0ZWRTZXQsXG4gICAgd2VpZ2h0ZWRTZXRJbmRleDogd2VpZ2h0ZWRTZXRJbmRleCxcbiAgICBnYXVzc2lhbjogZ2F1c3NpYW5cbiAgfTtcblxuICBmdW5jdGlvbiBzZXRTZWVkIChzZWVkLCBvcHQpIHtcbiAgICBpZiAodHlwZW9mIHNlZWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZWVkID09PSAnc3RyaW5nJykge1xuICAgICAgY3VycmVudFNlZWQgPSBzZWVkO1xuICAgICAgY3VycmVudFJhbmRvbSA9IHNlZWRSYW5kb20oY3VycmVudFNlZWQsIG9wdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRTZWVkID0gdW5kZWZpbmVkO1xuICAgICAgY3VycmVudFJhbmRvbSA9IGRlZmF1bHRSYW5kb207XG4gICAgfVxuICAgIG5vaXNlR2VuZXJhdG9yID0gY3JlYXRlTm9pc2UoKTtcbiAgICBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgICBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZSAoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRSYW5kb20oKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbHVlTm9uWmVybyAoKSB7XG4gICAgdmFyIHUgPSAwO1xuICAgIHdoaWxlICh1ID09PSAwKSB1ID0gdmFsdWUoKTtcbiAgICByZXR1cm4gdTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNlZWQgKCkge1xuICAgIHJldHVybiBjdXJyZW50U2VlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJhbmRvbVNlZWQgKCkge1xuICAgIHZhciBzZWVkID0gU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApKTtcbiAgICByZXR1cm4gc2VlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vaXNlICgpIHtcbiAgICByZXR1cm4gbmV3IFNpbXBsZXhOb2lzZShjdXJyZW50UmFuZG9tKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcm11dGVOb2lzZSAoKSB7XG4gICAgbm9pc2VHZW5lcmF0b3IgPSBjcmVhdGVOb2lzZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UxRCAoeCwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlMkQoeCAqIGZyZXF1ZW5jeSwgMCk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTJEICh4LCB5LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTJEKHggKiBmcmVxdWVuY3ksIHkgKiBmcmVxdWVuY3kpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UzRCAoeCwgeSwgeiwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh6KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneiBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTNEKFxuICAgICAgeCAqIGZyZXF1ZW5jeSxcbiAgICAgIHkgKiBmcmVxdWVuY3ksXG4gICAgICB6ICogZnJlcXVlbmN5XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlNEQgKHgsIHksIHosIHcsIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ogY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh3KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigndyBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTREKFxuICAgICAgeCAqIGZyZXF1ZW5jeSxcbiAgICAgIHkgKiBmcmVxdWVuY3ksXG4gICAgICB6ICogZnJlcXVlbmN5LFxuICAgICAgdyAqIGZyZXF1ZW5jeVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduICgpIHtcbiAgICByZXR1cm4gYm9vbGVhbigpID8gMSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gYm9vbGVhbiAoKSB7XG4gICAgcmV0dXJuIHZhbHVlKCkgPiAwLjU7XG4gIH1cblxuICBmdW5jdGlvbiBjaGFuY2UgKG4pIHtcbiAgICBuID0gZGVmaW5lZChuLCAwLjUpO1xuICAgIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIG4gdG8gYmUgYSBudW1iZXInKTtcbiAgICByZXR1cm4gdmFsdWUoKSA8IG47XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZSAobWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgYXJndW1lbnRzIHRvIGJlIG51bWJlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUoKSAqIChtYXggLSBtaW4pICsgbWluO1xuICB9XG5cbiAgZnVuY3Rpb24gcmFuZ2VGbG9vciAobWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgYXJndW1lbnRzIHRvIGJlIG51bWJlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihyYW5nZShtaW4sIG1heCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGljayAoYXJyYXkpIHtcbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBhcnJheVtyYW5nZUZsb29yKDAsIGFycmF5Lmxlbmd0aCldO1xuICB9XG5cbiAgZnVuY3Rpb24gc2h1ZmZsZSAoYXJyKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIEFycmF5LCBnb3QgJyArIHR5cGVvZiBhcnIpO1xuICAgIH1cblxuICAgIHZhciByYW5kO1xuICAgIHZhciB0bXA7XG4gICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gICAgdmFyIHJldCA9IGFyci5zbGljZSgpO1xuICAgIHdoaWxlIChsZW4pIHtcbiAgICAgIHJhbmQgPSBNYXRoLmZsb29yKHZhbHVlKCkgKiBsZW4tLSk7XG4gICAgICB0bXAgPSByZXRbbGVuXTtcbiAgICAgIHJldFtsZW5dID0gcmV0W3JhbmRdO1xuICAgICAgcmV0W3JhbmRdID0gdG1wO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgZnVuY3Rpb24gb25DaXJjbGUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdGhldGEgPSB2YWx1ZSgpICogMi4wICogTWF0aC5QSTtcbiAgICBvdXRbMF0gPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgb3V0WzFdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNpZGVDaXJjbGUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICBvbkNpcmNsZSgxLCBvdXQpO1xuICAgIHZhciByID0gcmFkaXVzICogTWF0aC5zcXJ0KHZhbHVlKCkpO1xuICAgIG91dFswXSAqPSByO1xuICAgIG91dFsxXSAqPSByO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBvblNwaGVyZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1ID0gdmFsdWUoKSAqIE1hdGguUEkgKiAyO1xuICAgIHZhciB2ID0gdmFsdWUoKSAqIDIgLSAxO1xuICAgIHZhciBwaGkgPSB1O1xuICAgIHZhciB0aGV0YSA9IE1hdGguYWNvcyh2KTtcbiAgICBvdXRbMF0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLmNvcyhwaGkpO1xuICAgIG91dFsxXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguc2luKHBoaSk7XG4gICAgb3V0WzJdID0gcmFkaXVzICogTWF0aC5jb3ModGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNpZGVTcGhlcmUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdSA9IHZhbHVlKCkgKiBNYXRoLlBJICogMjtcbiAgICB2YXIgdiA9IHZhbHVlKCkgKiAyIC0gMTtcbiAgICB2YXIgayA9IHZhbHVlKCk7XG5cbiAgICB2YXIgcGhpID0gdTtcbiAgICB2YXIgdGhldGEgPSBNYXRoLmFjb3Modik7XG4gICAgdmFyIHIgPSByYWRpdXMgKiBNYXRoLmNicnQoayk7XG4gICAgb3V0WzBdID0gciAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguY29zKHBoaSk7XG4gICAgb3V0WzFdID0gciAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguc2luKHBoaSk7XG4gICAgb3V0WzJdID0gciAqIE1hdGguY29zKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhdGVybmlvbiAob3V0KSB7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1MSA9IHZhbHVlKCk7XG4gICAgdmFyIHUyID0gdmFsdWUoKTtcbiAgICB2YXIgdTMgPSB2YWx1ZSgpO1xuXG4gICAgdmFyIHNxMSA9IE1hdGguc3FydCgxIC0gdTEpO1xuICAgIHZhciBzcTIgPSBNYXRoLnNxcnQodTEpO1xuXG4gICAgdmFyIHRoZXRhMSA9IE1hdGguUEkgKiAyICogdTI7XG4gICAgdmFyIHRoZXRhMiA9IE1hdGguUEkgKiAyICogdTM7XG5cbiAgICB2YXIgeCA9IE1hdGguc2luKHRoZXRhMSkgKiBzcTE7XG4gICAgdmFyIHkgPSBNYXRoLmNvcyh0aGV0YTEpICogc3ExO1xuICAgIHZhciB6ID0gTWF0aC5zaW4odGhldGEyKSAqIHNxMjtcbiAgICB2YXIgdyA9IE1hdGguY29zKHRoZXRhMikgKiBzcTI7XG4gICAgb3V0WzBdID0geDtcbiAgICBvdXRbMV0gPSB5O1xuICAgIG91dFsyXSA9IHo7XG4gICAgb3V0WzNdID0gdztcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWRTZXQgKHNldCkge1xuICAgIHNldCA9IHNldCB8fCBbXTtcbiAgICBpZiAoc2V0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHNldFt3ZWlnaHRlZFNldEluZGV4KHNldCldLnZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWRTZXRJbmRleCAoc2V0KSB7XG4gICAgc2V0ID0gc2V0IHx8IFtdO1xuICAgIGlmIChzZXQubGVuZ3RoID09PSAwKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIHdlaWdodGVkKHNldC5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLndlaWdodDtcbiAgICB9KSk7XG4gIH1cblxuICBmdW5jdGlvbiB3ZWlnaHRlZCAod2VpZ2h0cykge1xuICAgIHdlaWdodHMgPSB3ZWlnaHRzIHx8IFtdO1xuICAgIGlmICh3ZWlnaHRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIHZhciB0b3RhbFdlaWdodCA9IDA7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdG90YWxXZWlnaHQgKz0gd2VpZ2h0c1tpXTtcbiAgICB9XG5cbiAgICBpZiAodG90YWxXZWlnaHQgPD0gMCkgdGhyb3cgbmV3IEVycm9yKCdXZWlnaHRzIG11c3Qgc3VtIHRvID4gMCcpO1xuXG4gICAgdmFyIHJhbmRvbSA9IHZhbHVlKCkgKiB0b3RhbFdlaWdodDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJhbmRvbSA8IHdlaWdodHNbaV0pIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgICByYW5kb20gLT0gd2VpZ2h0c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBnYXVzc2lhbiAobWVhbiwgc3RhbmRhcmREZXJpdmF0aW9uKSB7XG4gICAgbWVhbiA9IGRlZmluZWQobWVhbiwgMCk7XG4gICAgc3RhbmRhcmREZXJpdmF0aW9uID0gZGVmaW5lZChzdGFuZGFyZERlcml2YXRpb24sIDEpO1xuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5qZGstbWlycm9yL2pkazd1LWpkay9ibG9iL2Y0ZDgwOTU3ZTg5YTE5YTI5YmI5Zjk4MDdkMmEyODM1MWVkN2Y3ZGYvc3JjL3NoYXJlL2NsYXNzZXMvamF2YS91dGlsL1JhbmRvbS5qYXZhI0w0OTZcbiAgICBpZiAoX2hhc05leHRHYXVzc2lhbikge1xuICAgICAgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuICAgICAgdmFyIHJlc3VsdCA9IF9uZXh0R2F1c3NpYW47XG4gICAgICBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgICAgIHJldHVybiBtZWFuICsgc3RhbmRhcmREZXJpdmF0aW9uICogcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdjEgPSAwO1xuICAgICAgdmFyIHYyID0gMDtcbiAgICAgIHZhciBzID0gMDtcbiAgICAgIGRvIHtcbiAgICAgICAgdjEgPSB2YWx1ZSgpICogMiAtIDE7IC8vIGJldHdlZW4gLTEgYW5kIDFcbiAgICAgICAgdjIgPSB2YWx1ZSgpICogMiAtIDE7IC8vIGJldHdlZW4gLTEgYW5kIDFcbiAgICAgICAgcyA9IHYxICogdjEgKyB2MiAqIHYyO1xuICAgICAgfSB3aGlsZSAocyA+PSAxIHx8IHMgPT09IDApO1xuICAgICAgdmFyIG11bHRpcGxpZXIgPSBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhzKSAvIHMpO1xuICAgICAgX25leHRHYXVzc2lhbiA9ICh2MiAqIG11bHRpcGxpZXIpO1xuICAgICAgX2hhc05leHRHYXVzc2lhbiA9IHRydWU7XG4gICAgICByZXR1cm4gbWVhbiArIHN0YW5kYXJkRGVyaXZhdGlvbiAqICh2MSAqIG11bHRpcGxpZXIpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJhbmRvbSgpO1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID1cbiAgZ2xvYmFsLnBlcmZvcm1hbmNlICYmXG4gIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPyBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpXG4gIH0gOiBEYXRlLm5vdyB8fCBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuICtuZXcgRGF0ZVxuICB9XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzUHJvbWlzZTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xuICByZXR1cm4gISFvYmogJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gaXNOb2RlXG5cbmZ1bmN0aW9uIGlzTm9kZSAodmFsKSB7XG4gIHJldHVybiAoIXZhbCB8fCB0eXBlb2YgdmFsICE9PSAnb2JqZWN0JylcbiAgICA/IGZhbHNlXG4gICAgOiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHdpbmRvdy5Ob2RlID09PSAnb2JqZWN0JylcbiAgICAgID8gKHZhbCBpbnN0YW5jZW9mIHdpbmRvdy5Ob2RlKVxuICAgICAgOiAodHlwZW9mIHZhbC5ub2RlVHlwZSA9PT0gJ251bWJlcicpICYmXG4gICAgICAgICh0eXBlb2YgdmFsLm5vZGVOYW1lID09PSAnc3RyaW5nJylcbn1cbiIsIi8vIFRPRE86IFdlIGNhbiByZW1vdmUgYSBodWdlIGNodW5rIG9mIGJ1bmRsZSBzaXplIGJ5IHVzaW5nIGEgc21hbGxlclxuLy8gdXRpbGl0eSBtb2R1bGUgZm9yIGNvbnZlcnRpbmcgdW5pdHMuXG5pbXBvcnQgaXNET00gZnJvbSAnaXMtZG9tJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudEFQSSAoKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3dbJ2NhbnZhcy1za2V0Y2gtY2xpJ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkICgpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jyb3dzZXIgKCkge1xuICByZXR1cm4gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViR0xDb250ZXh0IChjdHgpIHtcbiAgcmV0dXJuIHR5cGVvZiBjdHguY2xlYXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGN0eC5jbGVhckNvbG9yID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdHguYnVmZmVyRGF0YSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzIChlbGVtZW50KSB7XG4gIHJldHVybiBpc0RPTShlbGVtZW50KSAmJiAvY2FudmFzL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSAmJiB0eXBlb2YgZWxlbWVudC5nZXRDb250ZXh0ID09PSAnZnVuY3Rpb24nO1xufVxuIiwiLyohXG4gKiByZXBlYXQtc3RyaW5nIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9yZXBlYXQtc3RyaW5nPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBKb24gU2NobGlua2VydC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUmVzdWx0cyBjYWNoZVxuICovXG5cbnZhciByZXMgPSAnJztcbnZhciBjYWNoZTtcblxuLyoqXG4gKiBFeHBvc2UgYHJlcGVhdGBcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcGVhdDtcblxuLyoqXG4gKiBSZXBlYXQgdGhlIGdpdmVuIGBzdHJpbmdgIHRoZSBzcGVjaWZpZWQgYG51bWJlcmBcbiAqIG9mIHRpbWVzLlxuICpcbiAqICoqRXhhbXBsZToqKlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuICogcmVwZWF0KCdBJywgNSk7XG4gKiAvLz0+IEFBQUFBXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmluZ2AgVGhlIHN0cmluZyB0byByZXBlYXRcbiAqIEBwYXJhbSB7TnVtYmVyfSBgbnVtYmVyYCBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nXG4gKiBAcmV0dXJuIHtTdHJpbmd9IFJlcGVhdGVkIHN0cmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiByZXBlYXQoc3RyLCBudW0pIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIC8vIGNvdmVyIGNvbW1vbiwgcXVpY2sgdXNlIGNhc2VzXG4gIGlmIChudW0gPT09IDEpIHJldHVybiBzdHI7XG4gIGlmIChudW0gPT09IDIpIHJldHVybiBzdHIgKyBzdHI7XG5cbiAgdmFyIG1heCA9IHN0ci5sZW5ndGggKiBudW07XG4gIGlmIChjYWNoZSAhPT0gc3RyIHx8IHR5cGVvZiBjYWNoZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjYWNoZSA9IHN0cjtcbiAgICByZXMgPSAnJztcbiAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID49IG1heCkge1xuICAgIHJldHVybiByZXMuc3Vic3RyKDAsIG1heCk7XG4gIH1cblxuICB3aGlsZSAobWF4ID4gcmVzLmxlbmd0aCAmJiBudW0gPiAxKSB7XG4gICAgaWYgKG51bSAmIDEpIHtcbiAgICAgIHJlcyArPSBzdHI7XG4gICAgfVxuXG4gICAgbnVtID4+PSAxO1xuICAgIHN0ciArPSBzdHI7XG4gIH1cblxuICByZXMgKz0gc3RyO1xuICByZXMgPSByZXMuc3Vic3RyKDAsIG1heCk7XG4gIHJldHVybiByZXM7XG59XG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbidcbiAgPyBPYmplY3Qua2V5cyA6IHNoaW07XG5cbmV4cG9ydHMuc2hpbSA9IHNoaW07XG5mdW5jdGlvbiBzaGltIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwidmFyIHN1cHBvcnRzQXJndW1lbnRzQ2xhc3MgPSAoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHMpXG59KSgpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID8gc3VwcG9ydGVkIDogdW5zdXBwb3J0ZWQ7XG5cbmV4cG9ydHMuc3VwcG9ydGVkID0gc3VwcG9ydGVkO1xuZnVuY3Rpb24gc3VwcG9ydGVkKG9iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG59O1xuXG5leHBvcnRzLnVuc3VwcG9ydGVkID0gdW5zdXBwb3J0ZWQ7XG5mdW5jdGlvbiB1bnN1cHBvcnRlZChvYmplY3Qpe1xuICByZXR1cm4gb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvYmplY3QubGVuZ3RoID09ICdudW1iZXInICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ2NhbGxlZScpICYmXG4gICAgIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsICdjYWxsZWUnKSB8fFxuICAgIGZhbHNlO1xufTtcbiIsInZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4vbGliL2tleXMuanMnKTtcbnZhciBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vbGliL2lzX2FyZ3VtZW50cy5qcycpO1xuXG52YXIgZGVlcEVxdWFsID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYWN0dWFsLCBleHBlY3RlZCwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBEYXRlICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zLiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkIHx8IHR5cGVvZiBhY3R1YWwgIT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cGVjdGVkICE9ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG9wdHMuc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyA3LjQuIEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgb3B0cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWRPck51bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyICh4KSB7XG4gIGlmICgheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHgubGVuZ3RoICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHguY29weSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeC5zbGljZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoeC5sZW5ndGggPiAwICYmIHR5cGVvZiB4WzBdICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgb3B0cykge1xuICB2YXIgaSwga2V5O1xuICBpZiAoaXNVbmRlZmluZWRPck51bGwoYSkgfHwgaXNVbmRlZmluZWRPck51bGwoYikpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuXG4gIGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcbiAgLy9+fn5JJ3ZlIG1hbmFnZWQgdG8gYnJlYWsgT2JqZWN0LmtleXMgdGhyb3VnaCBzY3Jld3kgYXJndW1lbnRzIHBhc3NpbmcuXG4gIC8vICAgQ29udmVydGluZyB0byBhcnJheSBzb2x2ZXMgdGhlIHByb2JsZW0uXG4gIGlmIChpc0FyZ3VtZW50cyhhKSkge1xuICAgIGlmICghaXNBcmd1bWVudHMoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYSA9IHBTbGljZS5jYWxsKGEpO1xuICAgIGIgPSBwU2xpY2UuY2FsbChiKTtcbiAgICByZXR1cm4gZGVlcEVxdWFsKGEsIGIsIG9wdHMpO1xuICB9XG4gIGlmIChpc0J1ZmZlcihhKSkge1xuICAgIGlmICghaXNCdWZmZXIoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB0cnkge1xuICAgIHZhciBrYSA9IG9iamVjdEtleXMoYSksXG4gICAgICAgIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgfSBjYXRjaCAoZSkgey8vaGFwcGVucyB3aGVuIG9uZSBpcyBhIHN0cmluZyBsaXRlcmFsIGFuZCB0aGUgb3RoZXIgaXNuJ3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBvcHRzKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGI7XG59XG4iLCIvKlxuICogRGF0ZSBGb3JtYXQgMS4yLjNcbiAqIChjKSAyMDA3LTIwMDkgU3RldmVuIExldml0aGFuIDxzdGV2ZW5sZXZpdGhhbi5jb20+XG4gKiBNSVQgbGljZW5zZVxuICpcbiAqIEluY2x1ZGVzIGVuaGFuY2VtZW50cyBieSBTY290dCBUcmVuZGEgPHNjb3R0LnRyZW5kYS5uZXQ+XG4gKiBhbmQgS3JpcyBLb3dhbCA8Y2l4YXIuY29tL35rcmlzLmtvd2FsLz5cbiAqXG4gKiBBY2NlcHRzIGEgZGF0ZSwgYSBtYXNrLCBvciBhIGRhdGUgYW5kIGEgbWFzay5cbiAqIFJldHVybnMgYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBkYXRlIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGRhdGUvdGltZS5cbiAqIFRoZSBtYXNrIGRlZmF1bHRzIHRvIGRhdGVGb3JtYXQubWFza3MuZGVmYXVsdC5cbiAqL1xuXG4oZnVuY3Rpb24oZ2xvYmFsKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgZGF0ZUZvcm1hdCA9IChmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0b2tlbiA9IC9kezEsNH18bXsxLDR9fHl5KD86eXkpP3woW0hoTXNUdF0pXFwxP3xbTGxvU1pXTl18XCJbXlwiXSpcInwnW14nXSonL2c7XG4gICAgICB2YXIgdGltZXpvbmUgPSAvXFxiKD86W1BNQ0VBXVtTRFBdVHwoPzpQYWNpZmljfE1vdW50YWlufENlbnRyYWx8RWFzdGVybnxBdGxhbnRpYykgKD86U3RhbmRhcmR8RGF5bGlnaHR8UHJldmFpbGluZykgVGltZXwoPzpHTVR8VVRDKSg/OlstK11cXGR7NH0pPylcXGIvZztcbiAgICAgIHZhciB0aW1lem9uZUNsaXAgPSAvW14tK1xcZEEtWl0vZztcbiAgXG4gICAgICAvLyBSZWdleGVzIGFuZCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBhcmUgY2FjaGVkIHRocm91Z2ggY2xvc3VyZVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlLCBtYXNrLCB1dGMsIGdtdCkge1xuICBcbiAgICAgICAgLy8gWW91IGNhbid0IHByb3ZpZGUgdXRjIGlmIHlvdSBza2lwIG90aGVyIGFyZ3MgKHVzZSB0aGUgJ1VUQzonIG1hc2sgcHJlZml4KVxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBraW5kT2YoZGF0ZSkgPT09ICdzdHJpbmcnICYmICEvXFxkLy50ZXN0KGRhdGUpKSB7XG4gICAgICAgICAgbWFzayA9IGRhdGU7XG4gICAgICAgICAgZGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICBcbiAgICAgICAgZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGU7XG4gIFxuICAgICAgICBpZighKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIGRhdGUnKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgbWFzayA9IFN0cmluZyhkYXRlRm9ybWF0Lm1hc2tzW21hc2tdIHx8IG1hc2sgfHwgZGF0ZUZvcm1hdC5tYXNrc1snZGVmYXVsdCddKTtcbiAgXG4gICAgICAgIC8vIEFsbG93IHNldHRpbmcgdGhlIHV0Yy9nbXQgYXJndW1lbnQgdmlhIHRoZSBtYXNrXG4gICAgICAgIHZhciBtYXNrU2xpY2UgPSBtYXNrLnNsaWNlKDAsIDQpO1xuICAgICAgICBpZiAobWFza1NsaWNlID09PSAnVVRDOicgfHwgbWFza1NsaWNlID09PSAnR01UOicpIHtcbiAgICAgICAgICBtYXNrID0gbWFzay5zbGljZSg0KTtcbiAgICAgICAgICB1dGMgPSB0cnVlO1xuICAgICAgICAgIGlmIChtYXNrU2xpY2UgPT09ICdHTVQ6Jykge1xuICAgICAgICAgICAgZ210ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgXG4gICAgICAgIHZhciBfID0gdXRjID8gJ2dldFVUQycgOiAnZ2V0JztcbiAgICAgICAgdmFyIGQgPSBkYXRlW18gKyAnRGF0ZSddKCk7XG4gICAgICAgIHZhciBEID0gZGF0ZVtfICsgJ0RheSddKCk7XG4gICAgICAgIHZhciBtID0gZGF0ZVtfICsgJ01vbnRoJ10oKTtcbiAgICAgICAgdmFyIHkgPSBkYXRlW18gKyAnRnVsbFllYXInXSgpO1xuICAgICAgICB2YXIgSCA9IGRhdGVbXyArICdIb3VycyddKCk7XG4gICAgICAgIHZhciBNID0gZGF0ZVtfICsgJ01pbnV0ZXMnXSgpO1xuICAgICAgICB2YXIgcyA9IGRhdGVbXyArICdTZWNvbmRzJ10oKTtcbiAgICAgICAgdmFyIEwgPSBkYXRlW18gKyAnTWlsbGlzZWNvbmRzJ10oKTtcbiAgICAgICAgdmFyIG8gPSB1dGMgPyAwIDogZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgICAgICB2YXIgVyA9IGdldFdlZWsoZGF0ZSk7XG4gICAgICAgIHZhciBOID0gZ2V0RGF5T2ZXZWVrKGRhdGUpO1xuICAgICAgICB2YXIgZmxhZ3MgPSB7XG4gICAgICAgICAgZDogICAgZCxcbiAgICAgICAgICBkZDogICBwYWQoZCksXG4gICAgICAgICAgZGRkOiAgZGF0ZUZvcm1hdC5pMThuLmRheU5hbWVzW0RdLFxuICAgICAgICAgIGRkZGQ6IGRhdGVGb3JtYXQuaTE4bi5kYXlOYW1lc1tEICsgN10sXG4gICAgICAgICAgbTogICAgbSArIDEsXG4gICAgICAgICAgbW06ICAgcGFkKG0gKyAxKSxcbiAgICAgICAgICBtbW06ICBkYXRlRm9ybWF0LmkxOG4ubW9udGhOYW1lc1ttXSxcbiAgICAgICAgICBtbW1tOiBkYXRlRm9ybWF0LmkxOG4ubW9udGhOYW1lc1ttICsgMTJdLFxuICAgICAgICAgIHl5OiAgIFN0cmluZyh5KS5zbGljZSgyKSxcbiAgICAgICAgICB5eXl5OiB5LFxuICAgICAgICAgIGg6ICAgIEggJSAxMiB8fCAxMixcbiAgICAgICAgICBoaDogICBwYWQoSCAlIDEyIHx8IDEyKSxcbiAgICAgICAgICBIOiAgICBILFxuICAgICAgICAgIEhIOiAgIHBhZChIKSxcbiAgICAgICAgICBNOiAgICBNLFxuICAgICAgICAgIE1NOiAgIHBhZChNKSxcbiAgICAgICAgICBzOiAgICBzLFxuICAgICAgICAgIHNzOiAgIHBhZChzKSxcbiAgICAgICAgICBsOiAgICBwYWQoTCwgMyksXG4gICAgICAgICAgTDogICAgcGFkKE1hdGgucm91bmQoTCAvIDEwKSksXG4gICAgICAgICAgdDogICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1swXSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMV0sXG4gICAgICAgICAgdHQ6ICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1syXSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbM10sXG4gICAgICAgICAgVDogICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s0XSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNV0sXG4gICAgICAgICAgVFQ6ICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s2XSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbN10sXG4gICAgICAgICAgWjogICAgZ210ID8gJ0dNVCcgOiB1dGMgPyAnVVRDJyA6IChTdHJpbmcoZGF0ZSkubWF0Y2godGltZXpvbmUpIHx8IFsnJ10pLnBvcCgpLnJlcGxhY2UodGltZXpvbmVDbGlwLCAnJyksXG4gICAgICAgICAgbzogICAgKG8gPiAwID8gJy0nIDogJysnKSArIHBhZChNYXRoLmZsb29yKE1hdGguYWJzKG8pIC8gNjApICogMTAwICsgTWF0aC5hYnMobykgJSA2MCwgNCksXG4gICAgICAgICAgUzogICAgWyd0aCcsICdzdCcsICduZCcsICdyZCddW2QgJSAxMCA+IDMgPyAwIDogKGQgJSAxMDAgLSBkICUgMTAgIT0gMTApICogZCAlIDEwXSxcbiAgICAgICAgICBXOiAgICBXLFxuICAgICAgICAgIE46ICAgIE5cbiAgICAgICAgfTtcbiAgXG4gICAgICAgIHJldHVybiBtYXNrLnJlcGxhY2UodG9rZW4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgIGlmIChtYXRjaCBpbiBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIGZsYWdzW21hdGNoXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKDEsIG1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSkoKTtcblxuICBkYXRlRm9ybWF0Lm1hc2tzID0ge1xuICAgICdkZWZhdWx0JzogICAgICAgICAgICAgICAnZGRkIG1tbSBkZCB5eXl5IEhIOk1NOnNzJyxcbiAgICAnc2hvcnREYXRlJzogICAgICAgICAgICAgJ20vZC95eScsXG4gICAgJ21lZGl1bURhdGUnOiAgICAgICAgICAgICdtbW0gZCwgeXl5eScsXG4gICAgJ2xvbmdEYXRlJzogICAgICAgICAgICAgICdtbW1tIGQsIHl5eXknLFxuICAgICdmdWxsRGF0ZSc6ICAgICAgICAgICAgICAnZGRkZCwgbW1tbSBkLCB5eXl5JyxcbiAgICAnc2hvcnRUaW1lJzogICAgICAgICAgICAgJ2g6TU0gVFQnLFxuICAgICdtZWRpdW1UaW1lJzogICAgICAgICAgICAnaDpNTTpzcyBUVCcsXG4gICAgJ2xvbmdUaW1lJzogICAgICAgICAgICAgICdoOk1NOnNzIFRUIFonLFxuICAgICdpc29EYXRlJzogICAgICAgICAgICAgICAneXl5eS1tbS1kZCcsXG4gICAgJ2lzb1RpbWUnOiAgICAgICAgICAgICAgICdISDpNTTpzcycsXG4gICAgJ2lzb0RhdGVUaW1lJzogICAgICAgICAgICd5eXl5LW1tLWRkXFwnVFxcJ0hIOk1NOnNzbycsXG4gICAgJ2lzb1V0Y0RhdGVUaW1lJzogICAgICAgICdVVEM6eXl5eS1tbS1kZFxcJ1RcXCdISDpNTTpzc1xcJ1pcXCcnLFxuICAgICdleHBpcmVzSGVhZGVyRm9ybWF0JzogICAnZGRkLCBkZCBtbW0geXl5eSBISDpNTTpzcyBaJ1xuICB9O1xuXG4gIC8vIEludGVybmF0aW9uYWxpemF0aW9uIHN0cmluZ3NcbiAgZGF0ZUZvcm1hdC5pMThuID0ge1xuICAgIGRheU5hbWVzOiBbXG4gICAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0JyxcbiAgICAgICdTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSdcbiAgICBdLFxuICAgIG1vbnRoTmFtZXM6IFtcbiAgICAgICdKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYycsXG4gICAgICAnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlcidcbiAgICBdLFxuICAgIHRpbWVOYW1lczogW1xuICAgICAgJ2EnLCAncCcsICdhbScsICdwbScsICdBJywgJ1AnLCAnQU0nLCAnUE0nXG4gICAgXVxuICB9O1xuXG5mdW5jdGlvbiBwYWQodmFsLCBsZW4pIHtcbiAgdmFsID0gU3RyaW5nKHZhbCk7XG4gIGxlbiA9IGxlbiB8fCAyO1xuICB3aGlsZSAodmFsLmxlbmd0aCA8IGxlbikge1xuICAgIHZhbCA9ICcwJyArIHZhbDtcbiAgfVxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEdldCB0aGUgSVNPIDg2MDEgd2VlayBudW1iZXJcbiAqIEJhc2VkIG9uIGNvbW1lbnRzIGZyb21cbiAqIGh0dHA6Ly90ZWNoYmxvZy5wcm9jdXJpb3Mubmwvay9uNjE4L25ld3Mvdmlldy8zMzc5Ni8xNDg2My9DYWxjdWxhdGUtSVNPLTg2MDEtd2Vlay1hbmQteWVhci1pbi1qYXZhc2NyaXB0Lmh0bWxcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IGBkYXRlYFxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXRXZWVrKGRhdGUpIHtcbiAgLy8gUmVtb3ZlIHRpbWUgY29tcG9uZW50cyBvZiBkYXRlXG4gIHZhciB0YXJnZXRUaHVyc2RheSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XG5cbiAgLy8gQ2hhbmdlIGRhdGUgdG8gVGh1cnNkYXkgc2FtZSB3ZWVrXG4gIHRhcmdldFRodXJzZGF5LnNldERhdGUodGFyZ2V0VGh1cnNkYXkuZ2V0RGF0ZSgpIC0gKCh0YXJnZXRUaHVyc2RheS5nZXREYXkoKSArIDYpICUgNykgKyAzKTtcblxuICAvLyBUYWtlIEphbnVhcnkgNHRoIGFzIGl0IGlzIGFsd2F5cyBpbiB3ZWVrIDEgKHNlZSBJU08gODYwMSlcbiAgdmFyIGZpcnN0VGh1cnNkYXkgPSBuZXcgRGF0ZSh0YXJnZXRUaHVyc2RheS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcblxuICAvLyBDaGFuZ2UgZGF0ZSB0byBUaHVyc2RheSBzYW1lIHdlZWtcbiAgZmlyc3RUaHVyc2RheS5zZXREYXRlKGZpcnN0VGh1cnNkYXkuZ2V0RGF0ZSgpIC0gKChmaXJzdFRodXJzZGF5LmdldERheSgpICsgNikgJSA3KSArIDMpO1xuXG4gIC8vIENoZWNrIGlmIGRheWxpZ2h0LXNhdmluZy10aW1lLXN3aXRjaCBvY2N1cnJlZCBhbmQgY29ycmVjdCBmb3IgaXRcbiAgdmFyIGRzID0gdGFyZ2V0VGh1cnNkYXkuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIGZpcnN0VGh1cnNkYXkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgdGFyZ2V0VGh1cnNkYXkuc2V0SG91cnModGFyZ2V0VGh1cnNkYXkuZ2V0SG91cnMoKSAtIGRzKTtcblxuICAvLyBOdW1iZXIgb2Ygd2Vla3MgYmV0d2VlbiB0YXJnZXQgVGh1cnNkYXkgYW5kIGZpcnN0IFRodXJzZGF5XG4gIHZhciB3ZWVrRGlmZiA9ICh0YXJnZXRUaHVyc2RheSAtIGZpcnN0VGh1cnNkYXkpIC8gKDg2NDAwMDAwKjcpO1xuICByZXR1cm4gMSArIE1hdGguZmxvb3Iod2Vla0RpZmYpO1xufVxuXG4vKipcbiAqIEdldCBJU08tODYwMSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWtcbiAqIDEgKGZvciBNb25kYXkpIHRocm91Z2ggNyAoZm9yIFN1bmRheSlcbiAqIFxuICogQHBhcmFtICB7T2JqZWN0fSBgZGF0ZWBcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGF5T2ZXZWVrKGRhdGUpIHtcbiAgdmFyIGRvdyA9IGRhdGUuZ2V0RGF5KCk7XG4gIGlmKGRvdyA9PT0gMCkge1xuICAgIGRvdyA9IDc7XG4gIH1cbiAgcmV0dXJuIGRvdztcbn1cblxuLyoqXG4gKiBraW5kLW9mIHNob3J0Y3V0XG4gKiBAcGFyYW0gIHsqfSB2YWxcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24ga2luZE9mKHZhbCkge1xuICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfVxuXG4gIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB0eXBlb2YgdmFsO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiAnYXJyYXknO1xuICB9XG5cbiAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwodmFsKVxuICAgIC5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTtcbn07XG5cblxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRhdGVGb3JtYXQ7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBkYXRlRm9ybWF0O1xuICB9IGVsc2Uge1xuICAgIGdsb2JhbC5kYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdDtcbiAgfVxufSkodGhpcyk7XG4iLCIvKiFcbiAqIHBhZC1sZWZ0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9wYWQtbGVmdD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhZExlZnQoc3RyLCBudW0sIGNoKSB7XG4gIHN0ciA9IHN0ci50b1N0cmluZygpO1xuXG4gIGlmICh0eXBlb2YgbnVtID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAoY2ggPT09IDApIHtcbiAgICBjaCA9ICcwJztcbiAgfSBlbHNlIGlmIChjaCkge1xuICAgIGNoID0gY2gudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICBjaCA9ICcgJztcbiAgfVxuXG4gIHJldHVybiByZXBlYXQoY2gsIG51bSAtIHN0ci5sZW5ndGgpICsgc3RyO1xufTtcbiIsImltcG9ydCBkYXRlZm9ybWF0IGZyb20gJ2RhdGVmb3JtYXQnO1xuaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCBwYWRMZWZ0IGZyb20gJ3BhZC1sZWZ0JztcbmltcG9ydCB7IGdldENsaWVudEFQSSB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcbmxldCBsaW5rO1xubGV0IGRlZmF1bHRFeHRzID0geyBleHRlbnNpb246ICcnLCBwcmVmaXg6ICcnLCBzdWZmaXg6ICcnIH07XG5cbi8vIEFsdGVybmF0aXZlIHNvbHV0aW9uIGZvciBzYXZpbmcgZmlsZXMsXG4vLyBhIGJpdCBzbG93ZXIgYW5kIGRvZXMgbm90IHdvcmsgaW4gU2FmYXJpXG4vLyBmdW5jdGlvbiBmZXRjaEJsb2JGcm9tRGF0YVVSTCAoZGF0YVVSTCkge1xuLy8gICByZXR1cm4gd2luZG93LmZldGNoKGRhdGFVUkwpLnRoZW4ocmVzID0+IHJlcy5ibG9iKCkpO1xuLy8gfVxuXG5jb25zdCBzdXBwb3J0ZWRFbmNvZGluZ3MgPSBbXG4gICdpbWFnZS9wbmcnLFxuICAnaW1hZ2UvanBlZycsXG4gICdpbWFnZS93ZWJwJ1xuXTtcblxuZnVuY3Rpb24gc3RyZWFtIChpc1N0YXJ0LCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBvcHRzID0gYXNzaWduKHt9LCBkZWZhdWx0RXh0cywgb3B0cyk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSByZXNvbHZlRmlsZW5hbWUoT2JqZWN0LmFzc2lnbih7fSwgb3B0cywge1xuICAgICAgZXh0ZW5zaW9uOiAnJyxcbiAgICAgIGZyYW1lOiB1bmRlZmluZWRcbiAgICB9KSk7XG4gICAgY29uc3QgZnVuYyA9IGlzU3RhcnQgPyAnc3RyZWFtU3RhcnQnIDogJ3N0cmVhbUVuZCc7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGNsaWVudCAmJiBjbGllbnQub3V0cHV0ICYmIHR5cGVvZiBjbGllbnRbZnVuY10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjbGllbnRbZnVuY10oYXNzaWduKHt9LCBvcHRzLCB7IGZpbGVuYW1lIH0pKVxuICAgICAgICAudGhlbihldiA9PiByZXNvbHZlKGV2KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNvbHZlKHsgZmlsZW5hbWUsIGNsaWVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbVN0YXJ0IChvcHRzID0ge30pIHtcbiAgcmV0dXJuIHN0cmVhbSh0cnVlLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbUVuZCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBzdHJlYW0oZmFsc2UsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q2FudmFzIChjYW52YXMsIG9wdCA9IHt9KSB7XG4gIGNvbnN0IGVuY29kaW5nID0gb3B0LmVuY29kaW5nIHx8ICdpbWFnZS9wbmcnO1xuICBpZiAoIXN1cHBvcnRlZEVuY29kaW5ncy5pbmNsdWRlcyhlbmNvZGluZykpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYW52YXMgZW5jb2RpbmcgJHtlbmNvZGluZ31gKTtcbiAgbGV0IGV4dGVuc2lvbiA9IChlbmNvZGluZy5zcGxpdCgnLycpWzFdIHx8ICcnKS5yZXBsYWNlKC9qcGVnL2ksICdqcGcnKTtcbiAgaWYgKGV4dGVuc2lvbikgZXh0ZW5zaW9uID0gYC4ke2V4dGVuc2lvbn1gLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiB7XG4gICAgZXh0ZW5zaW9uLFxuICAgIHR5cGU6IGVuY29kaW5nLFxuICAgIGRhdGFVUkw6IGNhbnZhcy50b0RhdGFVUkwoZW5jb2RpbmcsIG9wdC5lbmNvZGluZ1F1YWxpdHkpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJsb2JGcm9tRGF0YVVSTCAoZGF0YVVSTCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzcGxpdEluZGV4ID0gZGF0YVVSTC5pbmRleE9mKCcsJyk7XG4gICAgaWYgKHNwbGl0SW5kZXggPT09IC0xKSB7XG4gICAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmFzZTY0ID0gZGF0YVVSTC5zbGljZShzcGxpdEluZGV4ICsgMSk7XG4gICAgY29uc3QgYnl0ZVN0cmluZyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7XG4gICAgY29uc3QgdHlwZSA9IGRhdGFVUkwuc2xpY2UoMCwgc3BsaXRJbmRleCk7XG4gICAgY29uc3QgbWltZU1hdGNoID0gL2RhdGE6KFteO10rKS8uZXhlYyh0eXBlKTtcbiAgICBjb25zdCBtaW1lID0gKG1pbWVNYXRjaCA/IG1pbWVNYXRjaFsxXSA6ICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgIGNvbnN0IGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJlc29sdmUobmV3IHdpbmRvdy5CbG9iKFsgYWIgXSwgeyB0eXBlOiBtaW1lIH0pKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlRGF0YVVSTCAoZGF0YVVSTCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVCbG9iRnJvbURhdGFVUkwoZGF0YVVSTClcbiAgICAudGhlbihibG9iID0+IHNhdmVCbG9iKGJsb2IsIG9wdHMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVCbG9iIChibG9iLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIG9wdHMgPSBhc3NpZ24oe30sIGRlZmF1bHRFeHRzLCBvcHRzKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IG9wdHMuZmlsZW5hbWU7XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoY2xpZW50ICYmIHR5cGVvZiBjbGllbnQuc2F2ZUJsb2IgPT09ICdmdW5jdGlvbicgJiYgY2xpZW50Lm91dHB1dCkge1xuICAgICAgLy8gbmF0aXZlIHNhdmluZyB1c2luZyBhIENMSSB0b29sXG4gICAgICByZXR1cm4gY2xpZW50LnNhdmVCbG9iKGJsb2IsIGFzc2lnbih7fSwgb3B0cywgeyBmaWxlbmFtZSB9KSlcbiAgICAgICAgLnRoZW4oZXYgPT4gcmVzb2x2ZShldikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3JjZSBkb3dubG9hZFxuICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgfVxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgbGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICBsaW5rLm9uY2xpY2sgPSBub29wO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICBpZiAobGluay5wYXJlbnRFbGVtZW50KSBsaW5rLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgICByZXNvbHZlKHsgZmlsZW5hbWUsIGNsaWVudDogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZpbGUgKGRhdGEsIG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogWyBkYXRhIF07XG4gIGNvbnN0IGJsb2IgPSBuZXcgd2luZG93LkJsb2IocGFydHMsIHsgdHlwZTogb3B0cy50eXBlIHx8ICcnIH0pO1xuICByZXR1cm4gc2F2ZUJsb2IoYmxvYiwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lU3RhbXAgKCkge1xuICBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXkubW0uZGQtSEguTU0uc3NgO1xuICByZXR1cm4gZGF0ZWZvcm1hdChuZXcgRGF0ZSgpLCBkYXRlRm9ybWF0U3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRGaWxlIChwcmVmaXggPSAnJywgc3VmZml4ID0gJycsIGV4dCkge1xuICAvLyBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXkubW0uZGQtSEguTU0uc3NgO1xuICBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXktbW0tZGQgJ2F0JyBoLk1NLnNzIFRUYDtcbiAgcmV0dXJuIGAke3ByZWZpeH0ke2RhdGVmb3JtYXQobmV3IERhdGUoKSwgZGF0ZUZvcm1hdFN0cil9JHtzdWZmaXh9JHtleHR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGaWxlbmFtZSAob3B0ID0ge30pIHtcbiAgb3B0ID0gYXNzaWduKHt9LCBvcHQpO1xuXG4gIC8vIEN1c3RvbSBmaWxlbmFtZSBmdW5jdGlvblxuICBpZiAodHlwZW9mIG9wdC5maWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9wdC5maWxlKG9wdCk7XG4gIH0gZWxzZSBpZiAob3B0LmZpbGUpIHtcbiAgICByZXR1cm4gb3B0LmZpbGU7XG4gIH1cblxuICBsZXQgZnJhbWUgPSBudWxsO1xuICBsZXQgZXh0ZW5zaW9uID0gJyc7XG4gIGlmICh0eXBlb2Ygb3B0LmV4dGVuc2lvbiA9PT0gJ3N0cmluZycpIGV4dGVuc2lvbiA9IG9wdC5leHRlbnNpb247XG5cbiAgaWYgKHR5cGVvZiBvcHQuZnJhbWUgPT09ICdudW1iZXInKSB7XG4gICAgbGV0IHRvdGFsRnJhbWVzO1xuICAgIGlmICh0eXBlb2Ygb3B0LnRvdGFsRnJhbWVzID09PSAnbnVtYmVyJykge1xuICAgICAgdG90YWxGcmFtZXMgPSBvcHQudG90YWxGcmFtZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvdGFsRnJhbWVzID0gTWF0aC5tYXgoMTAwMDAsIG9wdC5mcmFtZSk7XG4gICAgfVxuICAgIGZyYW1lID0gcGFkTGVmdChTdHJpbmcob3B0LmZyYW1lKSwgU3RyaW5nKHRvdGFsRnJhbWVzKS5sZW5ndGgsICcwJyk7XG4gIH1cblxuICBjb25zdCBsYXllclN0ciA9IGlzRmluaXRlKG9wdC50b3RhbExheWVycykgJiYgaXNGaW5pdGUob3B0LmxheWVyKSAmJiBvcHQudG90YWxMYXllcnMgPiAxID8gYCR7b3B0LmxheWVyfWAgOiAnJztcbiAgaWYgKGZyYW1lICE9IG51bGwpIHtcbiAgICByZXR1cm4gWyBsYXllclN0ciwgZnJhbWUgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlZmF1bHRGaWxlTmFtZSA9IG9wdC50aW1lU3RhbXA7XG4gICAgcmV0dXJuIFsgb3B0LnByZWZpeCwgb3B0Lm5hbWUgfHwgZGVmYXVsdEZpbGVOYW1lLCBsYXllclN0ciwgb3B0Lmhhc2gsIG9wdC5zdWZmaXggXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9XG59XG4iLCIvLyBIYW5kbGUgc29tZSBjb21tb24gdHlwb3NcbmNvbnN0IGNvbW1vblR5cG9zID0ge1xuICBkaW1lbnNpb246ICdkaW1lbnNpb25zJyxcbiAgYW5pbWF0ZWQ6ICdhbmltYXRlJyxcbiAgYW5pbWF0aW5nOiAnYW5pbWF0ZScsXG4gIHVuaXQ6ICd1bml0cycsXG4gIFA1OiAncDUnLFxuICBwaXhlbGxhdGVkOiAncGl4ZWxhdGVkJyxcbiAgbG9vcGluZzogJ2xvb3AnLFxuICBwaXhlbFBlckluY2g6ICdwaXhlbHMnXG59O1xuXG4vLyBIYW5kbGUgYWxsIG90aGVyIHR5cG9zXG5jb25zdCBhbGxLZXlzID0gW1xuICAnZGltZW5zaW9ucycsICd1bml0cycsICdwaXhlbHNQZXJJbmNoJywgJ29yaWVudGF0aW9uJyxcbiAgJ3NjYWxlVG9GaXQnLCAnc2NhbGVUb1ZpZXcnLCAnYmxlZWQnLCAncGl4ZWxSYXRpbycsXG4gICdleHBvcnRQaXhlbFJhdGlvJywgJ21heFBpeGVsUmF0aW8nLCAnc2NhbGVDb250ZXh0JyxcbiAgJ3Jlc2l6ZUNhbnZhcycsICdzdHlsZUNhbnZhcycsICdjYW52YXMnLCAnY29udGV4dCcsICdhdHRyaWJ1dGVzJyxcbiAgJ3BhcmVudCcsICdmaWxlJywgJ25hbWUnLCAncHJlZml4JywgJ3N1ZmZpeCcsICdhbmltYXRlJywgJ3BsYXlpbmcnLFxuICAnbG9vcCcsICdkdXJhdGlvbicsICd0b3RhbEZyYW1lcycsICdmcHMnLCAncGxheWJhY2tSYXRlJywgJ3RpbWVTY2FsZScsXG4gICdmcmFtZScsICd0aW1lJywgJ2ZsdXNoJywgJ3BpeGVsYXRlZCcsICdob3RrZXlzJywgJ3A1JywgJ2lkJyxcbiAgJ3NjYWxlVG9GaXRQYWRkaW5nJywgJ2RhdGEnLCAncGFyYW1zJywgJ2VuY29kaW5nJywgJ2VuY29kaW5nUXVhbGl0eSdcbl07XG5cbi8vIFRoaXMgaXMgZmFpcmx5IG9waW5pb25hdGVkIGFuZCBmb3JjZXMgdXNlcnMgdG8gdXNlIHRoZSAnZGF0YScgcGFyYW1ldGVyXG4vLyBpZiB0aGV5IHdhbnQgdG8gcGFzcyBhbG9uZyBub24tc2V0dGluZyBvYmplY3RzLi4uXG5leHBvcnQgY29uc3QgY2hlY2tTZXR0aW5ncyA9IChzZXR0aW5ncykgPT4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpO1xuICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5IGluIGNvbW1vblR5cG9zKSB7XG4gICAgICBjb25zdCBhY3R1YWwgPSBjb21tb25UeXBvc1trZXldO1xuICAgICAgY29uc29sZS53YXJuKGBbY2FudmFzLXNrZXRjaF0gQ291bGQgbm90IHJlY29nbml6ZSB0aGUgc2V0dGluZyBcIiR7a2V5fVwiLCBkaWQgeW91IG1lYW4gXCIke2FjdHVhbH1cIj9gKTtcbiAgICB9IGVsc2UgaWYgKCFhbGxLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2NhbnZhcy1za2V0Y2hdIENvdWxkIG5vdCByZWNvZ25pemUgdGhlIHNldHRpbmcgXCIke2tleX1cImApO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiY29uc3QgZGVmYXVsdFVuaXRzID0gJ21tJztcblxuY29uc3QgZGF0YSA9IFtcbiAgLy8gQ29tbW9uIFBhcGVyIFNpemVzXG4gIC8vIChNb3N0bHkgTm9ydGgtQW1lcmljYW4gYmFzZWQpXG4gIFsgJ3Bvc3RjYXJkJywgMTAxLjYsIDE1Mi40IF0sXG4gIFsgJ3Bvc3Rlci1zbWFsbCcsIDI4MCwgNDMwIF0sXG4gIFsgJ3Bvc3RlcicsIDQ2MCwgNjEwIF0sXG4gIFsgJ3Bvc3Rlci1sYXJnZScsIDYxMCwgOTEwIF0sXG4gIFsgJ2J1c2luZXNzLWNhcmQnLCA1MC44LCA4OC45IF0sXG5cbiAgLy8gUGhvdG9ncmFwaGljIFByaW50IFBhcGVyIFNpemVzXG4gIFsgJzJyJywgNjQsIDg5IF0sXG4gIFsgJzNyJywgODksIDEyNyBdLFxuICBbICc0cicsIDEwMiwgMTUyIF0sXG4gIFsgJzVyJywgMTI3LCAxNzggXSwgLy8gNeKAs3g34oCzXG4gIFsgJzZyJywgMTUyLCAyMDMgXSwgLy8gNuKAs3g44oCzXG4gIFsgJzhyJywgMjAzLCAyNTQgXSwgLy8gOOKAs3gxMOKAs1xuICBbICcxMHInLCAyNTQsIDMwNSBdLCAvLyAxMOKAs3gxMuKAs1xuICBbICcxMXInLCAyNzksIDM1NiBdLCAvLyAxMeKAs3gxNOKAs1xuICBbICcxMnInLCAzMDUsIDM4MSBdLFxuXG4gIC8vIFN0YW5kYXJkIFBhcGVyIFNpemVzXG4gIFsgJ2EwJywgODQxLCAxMTg5IF0sXG4gIFsgJ2ExJywgNTk0LCA4NDEgXSxcbiAgWyAnYTInLCA0MjAsIDU5NCBdLFxuICBbICdhMycsIDI5NywgNDIwIF0sXG4gIFsgJ2E0JywgMjEwLCAyOTcgXSxcbiAgWyAnYTUnLCAxNDgsIDIxMCBdLFxuICBbICdhNicsIDEwNSwgMTQ4IF0sXG4gIFsgJ2E3JywgNzQsIDEwNSBdLFxuICBbICdhOCcsIDUyLCA3NCBdLFxuICBbICdhOScsIDM3LCA1MiBdLFxuICBbICdhMTAnLCAyNiwgMzcgXSxcbiAgWyAnMmEwJywgMTE4OSwgMTY4MiBdLFxuICBbICc0YTAnLCAxNjgyLCAyMzc4IF0sXG4gIFsgJ2IwJywgMTAwMCwgMTQxNCBdLFxuICBbICdiMScsIDcwNywgMTAwMCBdLFxuICBbICdiMSsnLCA3MjAsIDEwMjAgXSxcbiAgWyAnYjInLCA1MDAsIDcwNyBdLFxuICBbICdiMisnLCA1MjAsIDcyMCBdLFxuICBbICdiMycsIDM1MywgNTAwIF0sXG4gIFsgJ2I0JywgMjUwLCAzNTMgXSxcbiAgWyAnYjUnLCAxNzYsIDI1MCBdLFxuICBbICdiNicsIDEyNSwgMTc2IF0sXG4gIFsgJ2I3JywgODgsIDEyNSBdLFxuICBbICdiOCcsIDYyLCA4OCBdLFxuICBbICdiOScsIDQ0LCA2MiBdLFxuICBbICdiMTAnLCAzMSwgNDQgXSxcbiAgWyAnYjExJywgMjIsIDMyIF0sXG4gIFsgJ2IxMicsIDE2LCAyMiBdLFxuICBbICdjMCcsIDkxNywgMTI5NyBdLFxuICBbICdjMScsIDY0OCwgOTE3IF0sXG4gIFsgJ2MyJywgNDU4LCA2NDggXSxcbiAgWyAnYzMnLCAzMjQsIDQ1OCBdLFxuICBbICdjNCcsIDIyOSwgMzI0IF0sXG4gIFsgJ2M1JywgMTYyLCAyMjkgXSxcbiAgWyAnYzYnLCAxMTQsIDE2MiBdLFxuICBbICdjNycsIDgxLCAxMTQgXSxcbiAgWyAnYzgnLCA1NywgODEgXSxcbiAgWyAnYzknLCA0MCwgNTcgXSxcbiAgWyAnYzEwJywgMjgsIDQwIF0sXG4gIFsgJ2MxMScsIDIyLCAzMiBdLFxuICBbICdjMTInLCAxNiwgMjIgXSxcblxuICAvLyBVc2UgaW5jaGVzIGZvciBOb3J0aCBBbWVyaWNhbiBzaXplcyxcbiAgLy8gYXMgaXQgcHJvZHVjZXMgbGVzcyBmbG9hdCBwcmVjaXNpb24gZXJyb3JzXG4gIFsgJ2hhbGYtbGV0dGVyJywgNS41LCA4LjUsICdpbicgXSxcbiAgWyAnbGV0dGVyJywgOC41LCAxMSwgJ2luJyBdLFxuICBbICdsZWdhbCcsIDguNSwgMTQsICdpbicgXSxcbiAgWyAnanVuaW9yLWxlZ2FsJywgNSwgOCwgJ2luJyBdLFxuICBbICdsZWRnZXInLCAxMSwgMTcsICdpbicgXSxcbiAgWyAndGFibG9pZCcsIDExLCAxNywgJ2luJyBdLFxuICBbICdhbnNpLWEnLCA4LjUsIDExLjAsICdpbicgXSxcbiAgWyAnYW5zaS1iJywgMTEuMCwgMTcuMCwgJ2luJyBdLFxuICBbICdhbnNpLWMnLCAxNy4wLCAyMi4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktZCcsIDIyLjAsIDM0LjAsICdpbicgXSxcbiAgWyAnYW5zaS1lJywgMzQuMCwgNDQuMCwgJ2luJyBdLFxuICBbICdhcmNoLWEnLCA5LCAxMiwgJ2luJyBdLFxuICBbICdhcmNoLWInLCAxMiwgMTgsICdpbicgXSxcbiAgWyAnYXJjaC1jJywgMTgsIDI0LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZCcsIDI0LCAzNiwgJ2luJyBdLFxuICBbICdhcmNoLWUnLCAzNiwgNDgsICdpbicgXSxcbiAgWyAnYXJjaC1lMScsIDMwLCA0MiwgJ2luJyBdLFxuICBbICdhcmNoLWUyJywgMjYsIDM4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTMnLCAyNywgMzksICdpbicgXVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZGF0YS5yZWR1Y2UoKGRpY3QsIHByZXNldCkgPT4ge1xuICBjb25zdCBpdGVtID0ge1xuICAgIHVuaXRzOiBwcmVzZXRbM10gfHwgZGVmYXVsdFVuaXRzLFxuICAgIGRpbWVuc2lvbnM6IFsgcHJlc2V0WzFdLCBwcmVzZXRbMl0gXVxuICB9O1xuICBkaWN0W3ByZXNldFswXV0gPSBpdGVtO1xuICBkaWN0W3ByZXNldFswXS5yZXBsYWNlKC8tL2csICcgJyldID0gaXRlbTtcbiAgcmV0dXJuIGRpY3Q7XG59LCB7fSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9PSB1bmRlZmluZWQpIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxufTtcbiIsInZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xudmFyIHVuaXRzID0gWyAnbW0nLCAnY20nLCAnbScsICdwYycsICdwdCcsICdpbicsICdmdCcsICdweCcgXTtcblxudmFyIGNvbnZlcnNpb25zID0ge1xuICAvLyBtZXRyaWNcbiAgbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGNtOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDBcbiAgfSxcbiAgbW06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMSAvIDEwMDBcbiAgfSxcbiAgLy8gaW1wZXJpYWxcbiAgcHQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNzJcbiAgfSxcbiAgcGM6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNlxuICB9LFxuICBpbjoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDFcbiAgfSxcbiAgZnQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxMlxuICB9XG59O1xuXG5jb25zdCBhbmNob3JzID0ge1xuICBtZXRyaWM6IHtcbiAgICB1bml0OiAnbScsXG4gICAgcmF0aW86IDEgLyAwLjAyNTRcbiAgfSxcbiAgaW1wZXJpYWw6IHtcbiAgICB1bml0OiAnaW4nLFxuICAgIHJhdGlvOiAwLjAyNTRcbiAgfVxufTtcblxuZnVuY3Rpb24gcm91bmQgKHZhbHVlLCBkZWNpbWFscykge1xuICByZXR1cm4gTnVtYmVyKE1hdGgucm91bmQodmFsdWUgKyAnZScgKyBkZWNpbWFscykgKyAnZS0nICsgZGVjaW1hbHMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UgKHZhbHVlLCBmcm9tVW5pdCwgdG9Vbml0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXInKTtcbiAgaWYgKCFmcm9tVW5pdCB8fCAhdG9Vbml0KSB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBmcm9tIGFuZCB0byB1bml0cycpO1xuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB2YXIgcGl4ZWxzUGVySW5jaCA9IGRlZmluZWQob3B0cy5waXhlbHNQZXJJbmNoLCA5Nik7XG4gIHZhciBwcmVjaXNpb24gPSBvcHRzLnByZWNpc2lvbjtcbiAgdmFyIHJvdW5kUGl4ZWwgPSBvcHRzLnJvdW5kUGl4ZWwgIT09IGZhbHNlO1xuXG4gIGZyb21Vbml0ID0gZnJvbVVuaXQudG9Mb3dlckNhc2UoKTtcbiAgdG9Vbml0ID0gdG9Vbml0LnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHVuaXRzLmluZGV4T2YoZnJvbVVuaXQpID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20gdW5pdCBcIicgKyBmcm9tVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcbiAgaWYgKHVuaXRzLmluZGV4T2YodG9Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgdG9Vbml0ICsgJ1wiLCBtdXN0IGJlIG9uZSBvZjogJyArIHVuaXRzLmpvaW4oJywgJykpO1xuXG4gIGlmIChmcm9tVW5pdCA9PT0gdG9Vbml0KSB7XG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb252ZXJ0IGZyb20gQSB0byBCIHNpbmNlIHRoZXkgYXJlIHRoZSBzYW1lIGFscmVhZHlcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB2YXIgdG9GYWN0b3IgPSAxO1xuICB2YXIgZnJvbUZhY3RvciA9IDE7XG4gIHZhciBpc1RvUGl4ZWwgPSBmYWxzZTtcblxuICBpZiAoZnJvbVVuaXQgPT09ICdweCcpIHtcbiAgICBmcm9tRmFjdG9yID0gMSAvIHBpeGVsc1BlckluY2g7XG4gICAgZnJvbVVuaXQgPSAnaW4nO1xuICB9XG4gIGlmICh0b1VuaXQgPT09ICdweCcpIHtcbiAgICBpc1RvUGl4ZWwgPSB0cnVlO1xuICAgIHRvRmFjdG9yID0gcGl4ZWxzUGVySW5jaDtcbiAgICB0b1VuaXQgPSAnaW4nO1xuICB9XG5cbiAgdmFyIGZyb21Vbml0RGF0YSA9IGNvbnZlcnNpb25zW2Zyb21Vbml0XTtcbiAgdmFyIHRvVW5pdERhdGEgPSBjb252ZXJzaW9uc1t0b1VuaXRdO1xuXG4gIC8vIHNvdXJjZSB0byBhbmNob3IgaW5zaWRlIHNvdXJjZSdzIHN5c3RlbVxuICB2YXIgYW5jaG9yID0gdmFsdWUgKiBmcm9tVW5pdERhdGEuZmFjdG9yICogZnJvbUZhY3RvcjtcblxuICAvLyBpZiBzeXN0ZW1zIGRpZmZlciwgY29udmVydCBvbmUgdG8gYW5vdGhlclxuICBpZiAoZnJvbVVuaXREYXRhLnN5c3RlbSAhPT0gdG9Vbml0RGF0YS5zeXN0ZW0pIHtcbiAgICAvLyByZWd1bGFyICdtJyB0byAnaW4nIGFuZCBzbyBmb3J0aFxuICAgIGFuY2hvciAqPSBhbmNob3JzW2Zyb21Vbml0RGF0YS5zeXN0ZW1dLnJhdGlvO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IGFuY2hvciAvIHRvVW5pdERhdGEuZmFjdG9yICogdG9GYWN0b3I7XG4gIGlmIChpc1RvUGl4ZWwgJiYgcm91bmRQaXhlbCkge1xuICAgIHJlc3VsdCA9IE1hdGgucm91bmQocmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJlY2lzaW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShwcmVjaXNpb24pKSB7XG4gICAgcmVzdWx0ID0gcm91bmQocmVzdWx0LCBwcmVjaXNpb24pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydERpc3RhbmNlO1xubW9kdWxlLmV4cG9ydHMudW5pdHMgPSB1bml0cztcbiIsImltcG9ydCBwYXBlclNpemVzIGZyb20gJy4vcGFwZXItc2l6ZXMnO1xuaW1wb3J0IGNvbnZlcnRMZW5ndGggZnJvbSAnY29udmVydC1sZW5ndGgnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQgKGRpbWVuc2lvbnMsIHVuaXRzVG8gPSAncHgnLCBwaXhlbHNQZXJJbmNoID0gNzIpIHtcbiAgaWYgKHR5cGVvZiBkaW1lbnNpb25zID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGtleSA9IGRpbWVuc2lvbnMudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIShrZXkgaW4gcGFwZXJTaXplcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGRpbWVuc2lvbiBwcmVzZXQgXCIke2RpbWVuc2lvbnN9XCIgaXMgbm90IHN1cHBvcnRlZCBvciBjb3VsZCBub3QgYmUgZm91bmQ7IHRyeSB1c2luZyBhNCwgYTMsIHBvc3RjYXJkLCBsZXR0ZXIsIGV0Yy5gKVxuICAgIH1cbiAgICBjb25zdCBwcmVzZXQgPSBwYXBlclNpemVzW2tleV07XG4gICAgcmV0dXJuIHByZXNldC5kaW1lbnNpb25zLm1hcChkID0+IHtcbiAgICAgIHJldHVybiBjb252ZXJ0RGlzdGFuY2UoZCwgcHJlc2V0LnVuaXRzLCB1bml0c1RvLCBwaXhlbHNQZXJJbmNoKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGltZW5zaW9ucztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERpc3RhbmNlIChkaW1lbnNpb24sIHVuaXRzRnJvbSA9ICdweCcsIHVuaXRzVG8gPSAncHgnLCBwaXhlbHNQZXJJbmNoID0gNzIpIHtcbiAgcmV0dXJuIGNvbnZlcnRMZW5ndGgoZGltZW5zaW9uLCB1bml0c0Zyb20sIHVuaXRzVG8sIHtcbiAgICBwaXhlbHNQZXJJbmNoLFxuICAgIHByZWNpc2lvbjogNCxcbiAgICByb3VuZFBpeGVsOiB0cnVlXG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQsIGNvbnZlcnREaXN0YW5jZSB9IGZyb20gJy4uL2Rpc3RhbmNlcyc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIsIGRlZmluZWQgfSBmcm9tICcuLi91dGlsJztcblxuZnVuY3Rpb24gY2hlY2tJZkhhc0RpbWVuc2lvbnMgKHNldHRpbmdzKSB7XG4gIGlmICghc2V0dGluZ3MuZGltZW5zaW9ucykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHNldHRpbmdzLmRpbWVuc2lvbnMgPT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2V0dGluZ3MuZGltZW5zaW9ucykgJiYgc2V0dGluZ3MuZGltZW5zaW9ucy5sZW5ndGggPj0gMikgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50U2l6ZSAocHJvcHMsIHNldHRpbmdzKSB7XG4gIC8vIFdoZW4gbm8geyBkaW1lbnNpb24gfSBpcyBwYXNzZWQgaW4gbm9kZSwgd2UgZGVmYXVsdCB0byBIVE1MIGNhbnZhcyBzaXplXG4gIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICByZXR1cm4gWyAzMDAsIDE1MCBdO1xuICB9XG5cbiAgbGV0IGVsZW1lbnQgPSBzZXR0aW5ncy5wYXJlbnQgfHwgd2luZG93O1xuXG4gIGlmIChlbGVtZW50ID09PSB3aW5kb3cgfHxcbiAgICAgIGVsZW1lbnQgPT09IGRvY3VtZW50IHx8XG4gICAgICBlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIFsgd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodCBdO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gWyB3aWR0aCwgaGVpZ2h0IF07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzaXplQ2FudmFzIChwcm9wcywgc2V0dGluZ3MpIHtcbiAgbGV0IHdpZHRoLCBoZWlnaHQ7XG4gIGxldCBzdHlsZVdpZHRoLCBzdHlsZUhlaWdodDtcbiAgbGV0IGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQ7XG5cbiAgY29uc3QgYnJvd3NlciA9IGlzQnJvd3NlcigpO1xuICBjb25zdCBkaW1lbnNpb25zID0gc2V0dGluZ3MuZGltZW5zaW9ucztcbiAgY29uc3QgaGFzRGltZW5zaW9ucyA9IGNoZWNrSWZIYXNEaW1lbnNpb25zKHNldHRpbmdzKTtcbiAgY29uc3QgZXhwb3J0aW5nID0gcHJvcHMuZXhwb3J0aW5nO1xuICBsZXQgc2NhbGVUb0ZpdCA9IGhhc0RpbWVuc2lvbnMgPyBzZXR0aW5ncy5zY2FsZVRvRml0ICE9PSBmYWxzZSA6IGZhbHNlO1xuICBsZXQgc2NhbGVUb1ZpZXcgPSAoIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSA/IHNldHRpbmdzLnNjYWxlVG9WaWV3IDogdHJ1ZTtcbiAgLy8gaW4gbm9kZSwgY2FuY2VsIGJvdGggb2YgdGhlc2Ugb3B0aW9uc1xuICBpZiAoIWJyb3dzZXIpIHNjYWxlVG9GaXQgPSBzY2FsZVRvVmlldyA9IGZhbHNlO1xuICBjb25zdCB1bml0cyA9IHNldHRpbmdzLnVuaXRzO1xuICBjb25zdCBwaXhlbHNQZXJJbmNoID0gKHR5cGVvZiBzZXR0aW5ncy5waXhlbHNQZXJJbmNoID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5waXhlbHNQZXJJbmNoKSkgPyBzZXR0aW5ncy5waXhlbHNQZXJJbmNoIDogNzI7XG4gIGNvbnN0IGJsZWVkID0gZGVmaW5lZChzZXR0aW5ncy5ibGVlZCwgMCk7XG5cbiAgY29uc3QgZGV2aWNlUGl4ZWxSYXRpbyA9IGJyb3dzZXIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7XG4gIGNvbnN0IGJhc2VQaXhlbFJhdGlvID0gc2NhbGVUb1ZpZXcgPyBkZXZpY2VQaXhlbFJhdGlvIDogMTtcblxuICBsZXQgcGl4ZWxSYXRpbywgZXhwb3J0UGl4ZWxSYXRpbztcblxuICAvLyBJZiBhIHBpeGVsIHJhdGlvIGlzIHNwZWNpZmllZCwgd2Ugd2lsbCB1c2UgaXQuXG4gIC8vIE90aGVyd2lzZTpcbiAgLy8gIC0+IElmIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBiYXNlIHJhdGlvIChpLmUuIHNpemUgZm9yIGV4cG9ydClcbiAgLy8gIC0+IElmIG5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBkZXZpY2UgcmF0aW8gKGkuZS4gc2l6ZSBmb3Igc2NyZWVuKVxuICBpZiAodHlwZW9mIHNldHRpbmdzLnBpeGVsUmF0aW8gPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNldHRpbmdzLnBpeGVsUmF0aW8pKSB7XG4gICAgLy8gV2hlbiB7IHBpeGVsUmF0aW8gfSBpcyBzcGVjaWZpZWQsIGl0J3MgYWxzbyB1c2VkIGFzIGRlZmF1bHQgZXhwb3J0UGl4ZWxSYXRpby5cbiAgICBwaXhlbFJhdGlvID0gc2V0dGluZ3MucGl4ZWxSYXRpbztcbiAgICBleHBvcnRQaXhlbFJhdGlvID0gZGVmaW5lZChzZXR0aW5ncy5leHBvcnRQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgICAgLy8gV2hlbiBhIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSB0aGUgYmFzZSByYXRpbyByYXRoZXIgdGhhbiBzY3JlZW4gcmF0aW9cbiAgICAgIHBpeGVsUmF0aW8gPSBiYXNlUGl4ZWxSYXRpbztcbiAgICAgIC8vIERlZmF1bHQgdG8gYSBwaXhlbCByYXRpbyBvZiAxIHNvIHRoYXQgeW91IGVuZCB1cCB3aXRoIHRoZSBzYW1lIGRpbWVuc2lvblxuICAgICAgLy8geW91IHNwZWNpZmllZCwgaS5lLiBbIDUwMCwgNTAwIF0gaXMgZXhwb3J0ZWQgYXMgNTAweDUwMCBweFxuICAgICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIGFzc3VtZSBmdWxsLXNjcmVlbiByZXRpbmEgc2l6aW5nXG4gICAgICBwaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgIC8vIERlZmF1bHQgdG8gc2NyZWVuIHBpeGVsIHJhdGlvLCBzbyB0aGF0IGl0J3MgbGlrZSB0YWtpbmcgYSBkZXZpY2Ugc2NyZWVuc2hvdFxuICAgICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2xhbXAgcGl4ZWwgcmF0aW9cbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5tYXhQaXhlbFJhdGlvID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5tYXhQaXhlbFJhdGlvKSkge1xuICAgIHBpeGVsUmF0aW8gPSBNYXRoLm1pbihzZXR0aW5ncy5tYXhQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBleHBvcnQgcGl4ZWwgcmF0aW9cbiAgaWYgKGV4cG9ydGluZykge1xuICAgIHBpeGVsUmF0aW8gPSBleHBvcnRQaXhlbFJhdGlvO1xuICB9XG5cbiAgLy8gcGFyZW50V2lkdGggPSB0eXBlb2YgcGFyZW50V2lkdGggPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzBdIDogcGFyZW50V2lkdGg7XG4gIC8vIHBhcmVudEhlaWdodCA9IHR5cGVvZiBwYXJlbnRIZWlnaHQgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzFdIDogcGFyZW50SGVpZ2h0O1xuXG4gIGxldCBbIHBhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHQgXSA9IGdldFBhcmVudFNpemUocHJvcHMsIHNldHRpbmdzKTtcbiAgbGV0IHRyaW1XaWR0aCwgdHJpbUhlaWdodDtcblxuICAvLyBZb3UgY2FuIHNwZWNpZnkgYSBkaW1lbnNpb25zIGluIHBpeGVscyBvciBjbS9tL2luL2V0Y1xuICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGdldERpbWVuc2lvbnNGcm9tUHJlc2V0KGRpbWVuc2lvbnMsIHVuaXRzLCBwaXhlbHNQZXJJbmNoKTtcbiAgICBjb25zdCBoaWdoZXN0ID0gTWF0aC5tYXgocmVzdWx0WzBdLCByZXN1bHRbMV0pO1xuICAgIGNvbnN0IGxvd2VzdCA9IE1hdGgubWluKHJlc3VsdFswXSwgcmVzdWx0WzFdKTtcbiAgICBpZiAoc2V0dGluZ3Mub3JpZW50YXRpb24pIHtcbiAgICAgIGNvbnN0IGxhbmRzY2FwZSA9IHNldHRpbmdzLm9yaWVudGF0aW9uID09PSAnbGFuZHNjYXBlJztcbiAgICAgIHdpZHRoID0gbGFuZHNjYXBlID8gaGlnaGVzdCA6IGxvd2VzdDtcbiAgICAgIGhlaWdodCA9IGxhbmRzY2FwZSA/IGxvd2VzdCA6IGhpZ2hlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gcmVzdWx0WzBdO1xuICAgICAgaGVpZ2h0ID0gcmVzdWx0WzFdO1xuICAgIH1cblxuICAgIHRyaW1XaWR0aCA9IHdpZHRoO1xuICAgIHRyaW1IZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvLyBBcHBseSBibGVlZCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIGluIHRoZSBzYW1lIHVuaXRzXG4gICAgd2lkdGggKz0gYmxlZWQgKiAyO1xuICAgIGhlaWdodCArPSBibGVlZCAqIDI7XG4gIH0gZWxzZSB7XG4gICAgd2lkdGggPSBwYXJlbnRXaWR0aDtcbiAgICBoZWlnaHQgPSBwYXJlbnRIZWlnaHQ7XG4gICAgdHJpbVdpZHRoID0gd2lkdGg7XG4gICAgdHJpbUhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIC8vIFJlYWwgc2l6ZSBpbiBwaXhlbHMgYWZ0ZXIgUFBJIGlzIHRha2VuIGludG8gYWNjb3VudFxuICBsZXQgcmVhbFdpZHRoID0gd2lkdGg7XG4gIGxldCByZWFsSGVpZ2h0ID0gaGVpZ2h0O1xuICBpZiAoaGFzRGltZW5zaW9ucyAmJiB1bml0cykge1xuICAgIC8vIENvbnZlcnQgdG8gZGlnaXRhbC9waXhlbCB1bml0cyBpZiBuZWNlc3NhcnlcbiAgICByZWFsV2lkdGggPSBjb252ZXJ0RGlzdGFuY2Uod2lkdGgsIHVuaXRzLCAncHgnLCBwaXhlbHNQZXJJbmNoKTtcbiAgICByZWFsSGVpZ2h0ID0gY29udmVydERpc3RhbmNlKGhlaWdodCwgdW5pdHMsICdweCcsIHBpeGVsc1BlckluY2gpO1xuICB9XG5cbiAgLy8gSG93IGJpZyB0byBzZXQgdGhlICd2aWV3JyBvZiB0aGUgY2FudmFzIGluIHRoZSBicm93c2VyIChpLmUuIHN0eWxlKVxuICBzdHlsZVdpZHRoID0gTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQocmVhbEhlaWdodCk7XG5cbiAgLy8gSWYgd2Ugd2lzaCB0byBzY2FsZSB0aGUgdmlldyB0byB0aGUgYnJvd3NlciB3aW5kb3dcbiAgaWYgKHNjYWxlVG9GaXQgJiYgIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSB7XG4gICAgY29uc3QgYXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7XG4gICAgY29uc3Qgd2luZG93QXNwZWN0ID0gcGFyZW50V2lkdGggLyBwYXJlbnRIZWlnaHQ7XG4gICAgY29uc3Qgc2NhbGVUb0ZpdFBhZGRpbmcgPSBkZWZpbmVkKHNldHRpbmdzLnNjYWxlVG9GaXRQYWRkaW5nLCA0MCk7XG4gICAgY29uc3QgbWF4V2lkdGggPSBNYXRoLnJvdW5kKHBhcmVudFdpZHRoIC0gc2NhbGVUb0ZpdFBhZGRpbmcgKiAyKTtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLnJvdW5kKHBhcmVudEhlaWdodCAtIHNjYWxlVG9GaXRQYWRkaW5nICogMik7XG4gICAgaWYgKHN0eWxlV2lkdGggPiBtYXhXaWR0aCB8fCBzdHlsZUhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgaWYgKHdpbmRvd0FzcGVjdCA+IGFzcGVjdCkge1xuICAgICAgICBzdHlsZUhlaWdodCA9IG1heEhlaWdodDtcbiAgICAgICAgc3R5bGVXaWR0aCA9IE1hdGgucm91bmQoc3R5bGVIZWlnaHQgKiBhc3BlY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQoc3R5bGVXaWR0aCAvIGFzcGVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FudmFzV2lkdGggPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChwaXhlbFJhdGlvICogcmVhbFdpZHRoKTtcbiAgY2FudmFzSGVpZ2h0ID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiBzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiByZWFsSGVpZ2h0KTtcblxuICBjb25zdCB2aWV3cG9ydFdpZHRoID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHJlYWxIZWlnaHQpO1xuXG4gIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1dpZHRoIC8gd2lkdGg7XG4gIGNvbnN0IHNjYWxlWSA9IGNhbnZhc0hlaWdodCAvIGhlaWdodDtcblxuICAvLyBBc3NpZ24gdG8gY3VycmVudCBwcm9wc1xuICByZXR1cm4ge1xuICAgIGJsZWVkLFxuICAgIHBpeGVsUmF0aW8sXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGRpbWVuc2lvbnM6IFsgd2lkdGgsIGhlaWdodCBdLFxuICAgIHVuaXRzOiB1bml0cyB8fCAncHgnLFxuICAgIHNjYWxlWCxcbiAgICBzY2FsZVksXG4gICAgcGl4ZWxzUGVySW5jaCxcbiAgICB2aWV3cG9ydFdpZHRoLFxuICAgIHZpZXdwb3J0SGVpZ2h0LFxuICAgIGNhbnZhc1dpZHRoLFxuICAgIGNhbnZhc0hlaWdodCxcbiAgICB0cmltV2lkdGgsXG4gICAgdHJpbUhlaWdodCxcbiAgICBzdHlsZVdpZHRoLFxuICAgIHN0eWxlSGVpZ2h0XG4gIH07XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGdldENhbnZhc0NvbnRleHRcbmZ1bmN0aW9uIGdldENhbnZhc0NvbnRleHQgKHR5cGUsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3Qgc3BlY2lmeSB0eXBlIHN0cmluZycpXG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fVxuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnICYmICFvcHRzLmNhbnZhcykge1xuICAgIHJldHVybiBudWxsIC8vIGNoZWNrIGZvciBOb2RlXG4gIH1cblxuICB2YXIgY2FudmFzID0gb3B0cy5jYW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcbiAgaWYgKHR5cGVvZiBvcHRzLndpZHRoID09PSAnbnVtYmVyJykge1xuICAgIGNhbnZhcy53aWR0aCA9IG9wdHMud2lkdGhcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaGVpZ2h0ID09PSAnbnVtYmVyJykge1xuICAgIGNhbnZhcy5oZWlnaHQgPSBvcHRzLmhlaWdodFxuICB9XG5cbiAgdmFyIGF0dHJpYnMgPSBvcHRzXG4gIHZhciBnbFxuICB0cnkge1xuICAgIHZhciBuYW1lcyA9IFsgdHlwZSBdXG4gICAgLy8gcHJlZml4IEdMIGNvbnRleHRzXG4gICAgaWYgKHR5cGUuaW5kZXhPZignd2ViZ2wnKSA9PT0gMCkge1xuICAgICAgbmFtZXMucHVzaCgnZXhwZXJpbWVudGFsLScgKyB0eXBlKVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQobmFtZXNbaV0sIGF0dHJpYnMpXG4gICAgICBpZiAoZ2wpIHJldHVybiBnbFxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGdsID0gbnVsbFxuICB9XG4gIHJldHVybiAoZ2wgfHwgbnVsbCkgLy8gZW5zdXJlIG51bGwgb24gZmFpbFxufVxuIiwiaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCBnZXRDYW52YXNDb250ZXh0IGZyb20gJ2dldC1jYW52YXMtY29udGV4dCc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICcuLi91dGlsJztcblxuZnVuY3Rpb24gY3JlYXRlQ2FudmFzRWxlbWVudCAoKSB7XG4gIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGFwcGVhcnMgeW91IGFyZSBydW5pbmcgZnJvbSBOb2RlLmpzIG9yIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuIFRyeSBwYXNzaW5nIGluIGFuIGV4aXN0aW5nIHsgY2FudmFzIH0gaW50ZXJmYWNlIGluc3RlYWQuJyk7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDYW52YXMgKHNldHRpbmdzID0ge30pIHtcbiAgbGV0IGNvbnRleHQsIGNhbnZhcztcbiAgbGV0IG93bnNDYW52YXMgPSBmYWxzZTtcbiAgaWYgKHNldHRpbmdzLmNhbnZhcyAhPT0gZmFsc2UpIHtcbiAgICAvLyBEZXRlcm1pbmUgdGhlIGNhbnZhcyBhbmQgY29udGV4dCB0byBjcmVhdGVcbiAgICBjb250ZXh0ID0gc2V0dGluZ3MuY29udGV4dDtcbiAgICBpZiAoIWNvbnRleHQgfHwgdHlwZW9mIGNvbnRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbmV3Q2FudmFzID0gc2V0dGluZ3MuY2FudmFzO1xuICAgICAgaWYgKCFuZXdDYW52YXMpIHtcbiAgICAgICAgbmV3Q2FudmFzID0gY3JlYXRlQ2FudmFzRWxlbWVudCgpO1xuICAgICAgICBvd25zQ2FudmFzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0IHx8ICcyZCc7XG4gICAgICBpZiAodHlwZW9mIG5ld0NhbnZhcy5nZXRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHNwZWNpZmllZCB7IGNhbnZhcyB9IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIGdldENvbnRleHQoKSBmdW5jdGlvbiwgbWF5YmUgaXQgaXMgbm90IGEgPGNhbnZhcz4gdGFnP2ApO1xuICAgICAgfVxuICAgICAgY29udGV4dCA9IGdldENhbnZhc0NvbnRleHQodHlwZSwgYXNzaWduKHt9LCBzZXR0aW5ncy5hdHRyaWJ1dGVzLCB7IGNhbnZhczogbmV3Q2FudmFzIH0pKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCBhdCBjYW52YXMuZ2V0Q29udGV4dCgnJHt0eXBlfScpIC0gdGhlIGJyb3dzZXIgbWF5IG5vdCBzdXBwb3J0IHRoaXMgY29udGV4dCwgb3IgYSBkaWZmZXJlbnQgY29udGV4dCBtYXkgYWxyZWFkeSBiZSBpbiB1c2Ugd2l0aCB0aGlzIGNhbnZhcy5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYW52YXMgPSBjb250ZXh0LmNhbnZhcztcbiAgICAvLyBFbnN1cmUgY29udGV4dCBtYXRjaGVzIHVzZXIncyBjYW52YXMgZXhwZWN0YXRpb25zXG4gICAgaWYgKHNldHRpbmdzLmNhbnZhcyAmJiBjYW52YXMgIT09IHNldHRpbmdzLmNhbnZhcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgeyBjYW52YXMgfSBhbmQgeyBjb250ZXh0IH0gc2V0dGluZ3MgbXVzdCBwb2ludCB0byB0aGUgc2FtZSB1bmRlcmx5aW5nIGNhbnZhcyBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgcGl4ZWxhdGlvbiB0byBjYW52YXMgaWYgbmVjZXNzYXJ5LCB0aGlzIGlzIG1vc3RseSBhIGNvbnZlbmllbmNlIHV0aWxpdHlcbiAgICBpZiAoc2V0dGluZ3MucGl4ZWxhdGVkKSB7XG4gICAgICBjb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQub0ltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNhbnZhcy5zdHlsZVsnaW1hZ2UtcmVuZGVyaW5nJ10gPSAncGl4ZWxhdGVkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY2FudmFzLCBjb250ZXh0LCBvd25zQ2FudmFzIH07XG59XG4iLCJpbXBvcnQgYXNzaWduIGZyb20gJ29iamVjdC1hc3NpZ24nO1xuaW1wb3J0IHJpZ2h0Tm93IGZyb20gJ3JpZ2h0LW5vdyc7XG5pbXBvcnQgaXNQcm9taXNlIGZyb20gJ2lzLXByb21pc2UnO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBkZWZpbmVkLCBpc1dlYkdMQ29udGV4dCwgaXNDYW52YXMsIGdldENsaWVudEFQSSB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tICdkZWVwLWVxdWFsJztcbmltcG9ydCB7XG4gIHJlc29sdmVGaWxlbmFtZSxcbiAgc2F2ZUZpbGUsXG4gIHNhdmVEYXRhVVJMLFxuICBnZXRUaW1lU3RhbXAsXG4gIGV4cG9ydENhbnZhcyxcbiAgc3RyZWFtU3RhcnQsXG4gIHN0cmVhbUVuZFxufSBmcm9tICcuLi9zYXZlJztcbmltcG9ydCB7IGNoZWNrU2V0dGluZ3MgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcblxuaW1wb3J0IGtleWJvYXJkU2hvcnRjdXRzIGZyb20gJy4va2V5Ym9hcmRTaG9ydGN1dHMnO1xuaW1wb3J0IHJlc2l6ZUNhbnZhcyBmcm9tICcuL3Jlc2l6ZUNhbnZhcyc7XG5pbXBvcnQgY3JlYXRlQ2FudmFzIGZyb20gJy4vY3JlYXRlQ2FudmFzJztcblxuY2xhc3MgU2tldGNoTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9zZXR0aW5ncyA9IHt9O1xuICAgIHRoaXMuX3Byb3BzID0ge307XG4gICAgdGhpcy5fc2tldGNoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JhZiA9IG51bGw7XG4gICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IG51bGw7XG5cbiAgICAvLyBTb21lIGhhY2t5IHRoaW5ncyByZXF1aXJlZCB0byBnZXQgYXJvdW5kIHA1LmpzIHN0cnVjdHVyZVxuICAgIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5faXNQNVJlc2l6aW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cyA9IGtleWJvYXJkU2hvcnRjdXRzKHtcbiAgICAgIGVuYWJsZWQ6ICgpID0+IHRoaXMuc2V0dGluZ3MuaG90a2V5cyAhPT0gZmFsc2UsXG4gICAgICBzYXZlOiAoZXYpID0+IHtcbiAgICAgICAgaWYgKGV2LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMucmVjb3JkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmVuZFJlY29yZCgpO1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5yZWNvcmQoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5wcm9wcy5yZWNvcmRpbmcpIHtcbiAgICAgICAgICB0aGlzLmV4cG9ydEZyYW1lKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0b2dnbGVQbGF5OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnBsYXlpbmcpIHRoaXMucGF1c2UoKTtcbiAgICAgICAgZWxzZSB0aGlzLnBsYXkoKTtcbiAgICAgIH0sXG4gICAgICBjb21taXQ6IChldikgPT4ge1xuICAgICAgICB0aGlzLmV4cG9ydEZyYW1lKHsgY29tbWl0OiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fYW5pbWF0ZUhhbmRsZXIgPSAoKSA9PiB0aGlzLmFuaW1hdGUoKTtcblxuICAgIHRoaXMuX3Jlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5yZXNpemUoKTtcbiAgICAgIC8vIE9ubHkgcmUtcmVuZGVyIHdoZW4gc2l6ZSBhY3R1YWxseSBjaGFuZ2VzXG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXQgc2tldGNoICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2tldGNoO1xuICB9XG5cbiAgZ2V0IHNldHRpbmdzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XG4gIH1cblxuICBnZXQgcHJvcHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9wcztcbiAgfVxuXG4gIF9jb21wdXRlUGxheWhlYWQgKGN1cnJlbnRUaW1lLCBkdXJhdGlvbikge1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG4gICAgcmV0dXJuIGhhc0R1cmF0aW9uID8gY3VycmVudFRpbWUgLyBkdXJhdGlvbiA6IDA7XG4gIH1cblxuICBfY29tcHV0ZUZyYW1lIChwbGF5aGVhZCwgdGltZSwgdG90YWxGcmFtZXMsIGZwcykge1xuICAgIHJldHVybiAoaXNGaW5pdGUodG90YWxGcmFtZXMpICYmIHRvdGFsRnJhbWVzID4gMSlcbiAgICAgID8gTWF0aC5mbG9vcihwbGF5aGVhZCAqICh0b3RhbEZyYW1lcyAtIDEpKVxuICAgICAgOiBNYXRoLmZsb29yKGZwcyAqIHRpbWUpO1xuICB9XG5cbiAgX2NvbXB1dGVDdXJyZW50RnJhbWUgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb21wdXRlRnJhbWUoXG4gICAgICB0aGlzLnByb3BzLnBsYXloZWFkLCB0aGlzLnByb3BzLnRpbWUsXG4gICAgICB0aGlzLnByb3BzLnRvdGFsRnJhbWVzLCB0aGlzLnByb3BzLmZwc1xuICAgICk7XG4gIH1cblxuICBfZ2V0U2l6ZVByb3BzICgpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiBwcm9wcy53aWR0aCxcbiAgICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0LFxuICAgICAgcGl4ZWxSYXRpbzogcHJvcHMucGl4ZWxSYXRpbyxcbiAgICAgIGNhbnZhc1dpZHRoOiBwcm9wcy5jYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodDogcHJvcHMuY2FudmFzSGVpZ2h0LFxuICAgICAgdmlld3BvcnRXaWR0aDogcHJvcHMudmlld3BvcnRXaWR0aCxcbiAgICAgIHZpZXdwb3J0SGVpZ2h0OiBwcm9wcy52aWV3cG9ydEhlaWdodFxuICAgIH07XG4gIH1cblxuICBydW4gKCkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHRocm93IG5ldyBFcnJvcignc2hvdWxkIHdhaXQgdW50aWwgc2tldGNoIGlzIGxvYWRlZCBiZWZvcmUgdHJ5aW5nIHRvIHBsYXkoKScpO1xuXG4gICAgLy8gU3RhcnQgYW4gYW5pbWF0aW9uIGZyYW1lIGxvb3AgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucGxheWluZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucGxheSgpO1xuICAgIH1cblxuICAgIC8vIExldCdzIGxldCB0aGlzIHdhcm5pbmcgaGFuZyBhcm91bmQgZm9yIGEgZmV3IHZlcnNpb25zLi4uXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5kaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0luIGNhbnZhcy1za2V0Y2hAMC4wLjIzIHRoZSBkaXNwb3NlKCkgZXZlbnQgaGFzIGJlZW4gcmVuYW1lZCB0byB1bmxvYWQoKScpO1xuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugd2UgYXJlbid0IHBsYXlpbmcgb3IgYW5pbWF0ZWQsIG1ha2Ugc3VyZSB3ZSBzdGlsbCB0cmlnZ2VyIGJlZ2luIG1lc3NhZ2UuLi5cbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIGFuIGluaXRpYWwgZnJhbWVcbiAgICB0aGlzLnRpY2soKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX2NhbmNlbFRpbWVvdXRzICgpIHtcbiAgICBpZiAodGhpcy5fcmFmICE9IG51bGwgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JhZik7XG4gICAgICB0aGlzLl9yYWYgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcmVjb3JkVGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVjb3JkVGltZW91dCk7XG4gICAgICB0aGlzLl9yZWNvcmRUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwbGF5ICgpIHtcbiAgICBsZXQgYW5pbWF0ZSA9IHRoaXMuc2V0dGluZ3MuYW5pbWF0ZTtcbiAgICBpZiAoJ2FuaW1hdGlvbicgaW4gdGhpcy5zZXR0aW5ncykge1xuICAgICAgYW5pbWF0ZSA9IHRydWU7XG4gICAgICBjb25zb2xlLndhcm4oJ1tjYW52YXMtc2tldGNoXSB7IGFuaW1hdGlvbiB9IGhhcyBiZWVuIHJlbmFtZWQgdG8geyBhbmltYXRlIH0nKTtcbiAgICB9XG4gICAgaWYgKCFhbmltYXRlKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IFVzaW5nIHsgYW5pbWF0ZSB9IGluIE5vZGUuanMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgcmV0dXJuO1xuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZygncGxheScsIHRoaXMucHJvcHMudGltZSlcblxuICAgIC8vIFN0YXJ0IGEgcmVuZGVyIGxvb3BcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgdGhpcy5fbGFzdFRpbWUgPSByaWdodE5vdygpO1xuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuICB9XG5cbiAgcGF1c2UgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gIH1cblxuICB0b2dnbGVQbGF5ICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wbGF5aW5nKSB0aGlzLnBhdXNlKCk7XG4gICAgZWxzZSB0aGlzLnBsYXkoKTtcbiAgfVxuXG4gIC8vIFN0b3AgYW5kIHJlc2V0IHRvIGZyYW1lIHplcm9cbiAgc3RvcCAoKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMucHJvcHMuZnJhbWUgPSAwO1xuICAgIHRoaXMucHJvcHMucGxheWhlYWQgPSAwO1xuICAgIHRoaXMucHJvcHMudGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZWNvcmQgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBSZWNvcmRpbmcgZnJvbSBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wKCk7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnByb3BzLnJlY29yZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBleHBvcnRPcHRzID0gdGhpcy5fY3JlYXRlRXhwb3J0T3B0aW9ucyh7IHNlcXVlbmNlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEgLyB0aGlzLnByb3BzLmZwcztcbiAgICAvLyBSZW5kZXIgZWFjaCBmcmFtZSBpbiB0aGUgc2VxdWVuY2VcbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGZyYW1lSW50ZXJ2YWw7XG4gICAgICB0aGlzLnRpY2soKTtcbiAgICAgIHJldHVybiB0aGlzLmV4cG9ydEZyYW1lKGV4cG9ydE9wdHMpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm47IC8vIHdhcyBjYW5jZWxsZWQgYmVmb3JlXG4gICAgICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgICAgICAgIHRoaXMucHJvcHMuZnJhbWUrKztcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5mcmFtZSA8IHRoaXMucHJvcHMudG90YWxGcmFtZXMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGltZSArPSBmcmFtZUludGVydmFsO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZCh0aGlzLnByb3BzLnRpbWUsIHRoaXMucHJvcHMuZHVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IHNldFRpbWVvdXQodGljaywgMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaW5pc2hlZCByZWNvcmRpbmcnKTtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbEVuZCgpO1xuICAgICAgICAgICAgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBUcmlnZ2VyIGEgc3RhcnQgZXZlbnQgYmVmb3JlIHdlIGJlZ2luIHJlY29yZGluZ1xuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyICdiZWdpbiByZWNvcmQnIGV2ZW50XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5iZWdpblJlY29yZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5iZWdpblJlY29yZChwcm9wcykpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYXRlIGEgc3RyZWFtaW5nIHN0YXJ0IGlmIG5lY2Vzc2FyeVxuICAgIHN0cmVhbVN0YXJ0KGV4cG9ydE9wdHMpXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5fcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgX3NpZ25hbEJlZ2luICgpIHtcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLmJlZ2luID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmJlZ2luKHByb3BzKSk7XG4gICAgfVxuICB9XG5cbiAgX3NpZ25hbEVuZCAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5lbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guZW5kKHByb3BzKSk7XG4gICAgfVxuICB9XG5cbiAgZW5kUmVjb3JkICgpIHtcbiAgICBjb25zdCB3YXNSZWNvcmRpbmcgPSB0aGlzLnByb3BzLnJlY29yZGluZztcblxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgdGhpcy5wcm9wcy5yZWNvcmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gZmFsc2U7XG5cbiAgICAvLyB0ZWxsIENMSSB0aGF0IHN0cmVhbSBoYXMgZmluaXNoZWRcbiAgICByZXR1cm4gc3RyZWFtRW5kKClcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBUcmlnZ2VyICdlbmQgcmVjb3JkJyBldmVudFxuICAgICAgICBpZiAod2FzUmVjb3JkaW5nICYmIHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5lbmRSZWNvcmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmVuZFJlY29yZChwcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVFeHBvcnRPcHRpb25zIChvcHQgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXF1ZW5jZTogb3B0LnNlcXVlbmNlLFxuICAgICAgc2F2ZTogb3B0LnNhdmUsXG4gICAgICBmcHM6IHRoaXMucHJvcHMuZnBzLFxuICAgICAgZnJhbWU6IG9wdC5zZXF1ZW5jZSA/IHRoaXMucHJvcHMuZnJhbWUgOiB1bmRlZmluZWQsXG4gICAgICBmaWxlOiB0aGlzLnNldHRpbmdzLmZpbGUsXG4gICAgICBuYW1lOiB0aGlzLnNldHRpbmdzLm5hbWUsXG4gICAgICBwcmVmaXg6IHRoaXMuc2V0dGluZ3MucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLnNldHRpbmdzLnN1ZmZpeCxcbiAgICAgIGVuY29kaW5nOiB0aGlzLnNldHRpbmdzLmVuY29kaW5nLFxuICAgICAgZW5jb2RpbmdRdWFsaXR5OiB0aGlzLnNldHRpbmdzLmVuY29kaW5nUXVhbGl0eSxcbiAgICAgIHRpbWVTdGFtcDogb3B0LnRpbWVTdGFtcCB8fCBnZXRUaW1lU3RhbXAoKSxcbiAgICAgIHRvdGFsRnJhbWVzOiBpc0Zpbml0ZSh0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSA/IE1hdGgubWF4KDAsIHRoaXMucHJvcHMudG90YWxGcmFtZXMpIDogMTAwMFxuICAgIH07XG4gIH1cblxuICBleHBvcnRGcmFtZSAob3B0ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSByZXR1cm4gUHJvbWlzZS5hbGwoW10pO1xuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gucHJlRXhwb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnNrZXRjaC5wcmVFeHBvcnQoKTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25zIGZvciBleHBvcnQgZnVuY3Rpb25cbiAgICBsZXQgZXhwb3J0T3B0cyA9IHRoaXMuX2NyZWF0ZUV4cG9ydE9wdGlvbnMob3B0KTtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGxldCBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGNsaWVudCAmJiBvcHQuY29tbWl0ICYmIHR5cGVvZiBjbGllbnQuY29tbWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBjb21taXRPcHRzID0gYXNzaWduKHt9LCBleHBvcnRPcHRzKTtcbiAgICAgIGNvbnN0IGhhc2ggPSBjbGllbnQuY29tbWl0KGNvbW1pdE9wdHMpO1xuICAgICAgaWYgKGlzUHJvbWlzZShoYXNoKSkgcCA9IGhhc2g7XG4gICAgICBlbHNlIHAgPSBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHAudGhlbihoYXNoID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl9kb0V4cG9ydEZyYW1lKGFzc2lnbih7fSwgZXhwb3J0T3B0cywgeyBoYXNoOiBoYXNoIHx8ICcnIH0pKTtcbiAgICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAvLyBNb3N0IGNvbW1vbiB1c2VjYXNlIGlzIHRvIGV4cG9ydCBhIHNpbmdsZSBsYXllcixcbiAgICAgIC8vIHNvIGxldCdzIG9wdGltaXplIHRoZSB1c2VyIGV4cGVyaWVuY2UgZm9yIHRoYXQuXG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMSkgcmV0dXJuIHJlc3VsdFswXTtcbiAgICAgIGVsc2UgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxuXG4gIF9kb0V4cG9ydEZyYW1lIChleHBvcnRPcHRzID0ge30pIHtcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSB0cnVlO1xuXG4gICAgLy8gUmVzaXplIHRvIG91dHB1dCByZXNvbHV0aW9uXG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIC8vIERyYXcgYXQgdGhpcyBvdXRwdXQgcmVzb2x1dGlvblxuICAgIGxldCBkcmF3UmVzdWx0ID0gdGhpcy5yZW5kZXIoKTtcblxuICAgIC8vIFRoZSBzZWxmIG93bmVkIGNhbnZhcyAobWF5IGJlIHVuZGVmaW5lZC4uLiEpXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5wcm9wcy5jYW52YXM7XG5cbiAgICAvLyBHZXQgbGlzdCBvZiByZXN1bHRzIGZyb20gcmVuZGVyXG4gICAgaWYgKHR5cGVvZiBkcmF3UmVzdWx0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IFsgY2FudmFzIF07XG4gICAgfVxuICAgIGRyYXdSZXN1bHQgPSBbXS5jb25jYXQoZHJhd1Jlc3VsdCkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBjYW52YXMvZmlsZSBkZXNjcmlwdG9ycyBpbnRvIGEgY29uc2lzdGVudCBmb3JtYXQsXG4gICAgLy8gYW5kIHB1bGwgb3V0IGFueSBkYXRhIFVSTHMgZnJvbSBjYW52YXMgZWxlbWVudHNcbiAgICBkcmF3UmVzdWx0ID0gZHJhd1Jlc3VsdC5tYXAocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGhhc0RhdGFPYmplY3QgPSB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgKCdkYXRhJyBpbiByZXN1bHQgfHwgJ2RhdGFVUkwnIGluIHJlc3VsdCk7XG4gICAgICBjb25zdCBkYXRhID0gaGFzRGF0YU9iamVjdCA/IHJlc3VsdC5kYXRhIDogcmVzdWx0O1xuICAgICAgY29uc3Qgb3B0cyA9IGhhc0RhdGFPYmplY3QgPyBhc3NpZ24oe30sIHJlc3VsdCwgeyBkYXRhIH0pIDogeyBkYXRhIH07XG4gICAgICBpZiAoaXNDYW52YXMoZGF0YSkpIHtcbiAgICAgICAgY29uc3QgZW5jb2RpbmcgPSBvcHRzLmVuY29kaW5nIHx8IGV4cG9ydE9wdHMuZW5jb2Rpbmc7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nUXVhbGl0eSA9IGRlZmluZWQob3B0cy5lbmNvZGluZ1F1YWxpdHksIGV4cG9ydE9wdHMuZW5jb2RpbmdRdWFsaXR5LCAwLjk1KTtcbiAgICAgICAgY29uc3QgeyBkYXRhVVJMLCBleHRlbnNpb24sIHR5cGUgfSA9IGV4cG9ydENhbnZhcyhkYXRhLCB7IGVuY29kaW5nLCBlbmNvZGluZ1F1YWxpdHkgfSk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9wdHMsIHsgZGF0YVVSTCwgZXh0ZW5zaW9uLCB0eXBlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBOb3cgcmV0dXJuIHRvIHJlZ3VsYXIgcmVuZGVyaW5nIG1vZGVcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICAvLyBBbmQgbm93IHdlIGNhbiBzYXZlIGVhY2ggcmVzdWx0XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGRyYXdSZXN1bHQubWFwKChyZXN1bHQsIGksIGxheWVyTGlzdCkgPT4ge1xuICAgICAgLy8gQnkgZGVmYXVsdCwgaWYgcmVuZGVyaW5nIG11bHRpcGxlIGxheWVycyB3ZSB3aWxsIGdpdmUgdGhlbSBpbmRpY2VzXG4gICAgICBjb25zdCBjdXJPcHQgPSBhc3NpZ24oe1xuICAgICAgICBleHRlbnNpb246ICcnLFxuICAgICAgICBwcmVmaXg6ICcnLFxuICAgICAgICBzdWZmaXg6ICcnXG4gICAgICB9LCBleHBvcnRPcHRzLCByZXN1bHQsIHtcbiAgICAgICAgbGF5ZXI6IGksXG4gICAgICAgIHRvdGFsTGF5ZXJzOiBsYXllckxpc3QubGVuZ3RoXG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgZXhwb3J0IGlzIGV4cGxpY2l0bHkgbm90IHNhdmluZywgbWFrZSBzdXJlIG5vdGhpbmcgc2F2ZXNcbiAgICAgIC8vIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBsYXllciBzYXZlIG9wdGlvbiwgb3IgZmFsbGJhY2sgdG8gdHJ1ZVxuICAgICAgY29uc3Qgc2F2ZVBhcmFtID0gZXhwb3J0T3B0cy5zYXZlID09PSBmYWxzZSA/IGZhbHNlIDogcmVzdWx0LnNhdmU7XG4gICAgICBjdXJPcHQuc2F2ZSA9IHNhdmVQYXJhbSAhPT0gZmFsc2U7XG5cbiAgICAgIC8vIFJlc29sdmUgYSBmdWxsIGZpbGVuYW1lIGZyb20gYWxsIHRoZSBvcHRpb25zXG4gICAgICBjdXJPcHQuZmlsZW5hbWUgPSByZXNvbHZlRmlsZW5hbWUoY3VyT3B0KTtcblxuICAgICAgLy8gQ2xlYW4gdXAgc29tZSBwYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIGFtYmlndW91cyB0byB0aGUgdXNlclxuICAgICAgZGVsZXRlIGN1ck9wdC5lbmNvZGluZztcbiAgICAgIGRlbGV0ZSBjdXJPcHQuZW5jb2RpbmdRdWFsaXR5O1xuXG4gICAgICAvLyBDbGVhbiBpdCB1cCBmdXJ0aGVyIGJ5IGp1c3QgcmVtb3ZpbmcgdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgZm9yIChsZXQgayBpbiBjdXJPcHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJPcHRba10gPT09ICd1bmRlZmluZWQnKSBkZWxldGUgY3VyT3B0W2tdO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2F2ZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgaWYgKGN1ck9wdC5zYXZlKSB7XG4gICAgICAgIC8vIFdoZXRoZXIgdG8gYWN0dWFsbHkgc2F2ZSAoZG93bmxvYWQpIHRoaXMgZnJhZ21lbnRcbiAgICAgICAgY29uc3QgZGF0YSA9IGN1ck9wdC5kYXRhO1xuICAgICAgICBpZiAoY3VyT3B0LmRhdGFVUkwpIHtcbiAgICAgICAgICBjb25zdCBkYXRhVVJMID0gY3VyT3B0LmRhdGFVUkw7XG4gICAgICAgICAgc2F2ZVByb21pc2UgPSBzYXZlRGF0YVVSTChkYXRhVVJMLCBjdXJPcHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNhdmVQcm9taXNlID0gc2F2ZUZpbGUoZGF0YSwgY3VyT3B0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNhdmVQcm9taXNlLnRoZW4oc2F2ZVJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjdXJPcHQsIHNhdmVSZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSkpLnRoZW4oZXYgPT4ge1xuICAgICAgY29uc3Qgc2F2ZWRFdmVudHMgPSBldi5maWx0ZXIoZSA9PiBlLnNhdmUpO1xuICAgICAgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gTG9nIHRoZSBzYXZlZCBleHBvcnRzXG4gICAgICAgIGNvbnN0IGV2ZW50V2l0aE91dHB1dCA9IHNhdmVkRXZlbnRzLmZpbmQoZSA9PiBlLm91dHB1dE5hbWUpO1xuICAgICAgICBjb25zdCBpc0NsaWVudCA9IHNhdmVkRXZlbnRzLnNvbWUoZSA9PiBlLmNsaWVudCk7XG4gICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gc2F2ZWRFdmVudHMuc29tZShlID0+IGUuc3RyZWFtKTtcbiAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgIC8vIG1hbnkgZmlsZXMsIGp1c3QgbG9nIGhvdyBtYW55IHdlcmUgZXhwb3J0ZWRcbiAgICAgICAgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDEpIGl0ZW0gPSBzYXZlZEV2ZW50cy5sZW5ndGg7XG4gICAgICAgIC8vIGluIENMSSwgd2Uga25vdyBleGFjdCBwYXRoIGRpcm5hbWVcbiAgICAgICAgZWxzZSBpZiAoZXZlbnRXaXRoT3V0cHV0KSBpdGVtID0gYCR7ZXZlbnRXaXRoT3V0cHV0Lm91dHB1dE5hbWV9LyR7c2F2ZWRFdmVudHNbMF0uZmlsZW5hbWV9YDtcbiAgICAgICAgLy8gaW4gYnJvd3Nlciwgd2UgY2FuIG9ubHkga25vdyBpdCB3ZW50IHRvIFwiYnJvd3NlciBkb3dubG9hZCBmb2xkZXJcIlxuICAgICAgICBlbHNlIGl0ZW0gPSBgJHtzYXZlZEV2ZW50c1swXS5maWxlbmFtZX1gO1xuICAgICAgICBsZXQgb2ZTZXEgPSAnJztcbiAgICAgICAgaWYgKGV4cG9ydE9wdHMuc2VxdWVuY2UpIHtcbiAgICAgICAgICBjb25zdCBoYXNUb3RhbEZyYW1lcyA9IGlzRmluaXRlKHRoaXMucHJvcHMudG90YWxGcmFtZXMpO1xuICAgICAgICAgIG9mU2VxID0gaGFzVG90YWxGcmFtZXMgPyBgIChmcmFtZSAke2V4cG9ydE9wdHMuZnJhbWUgKyAxfSAvICR7dGhpcy5wcm9wcy50b3RhbEZyYW1lc30pYCA6IGAgKGZyYW1lICR7ZXhwb3J0T3B0cy5mcmFtZX0pYDtcbiAgICAgICAgfSBlbHNlIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgb2ZTZXEgPSBgIGZpbGVzYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnQgPSBpc0NsaWVudCA/ICdjYW52YXMtc2tldGNoLWNsaScgOiAnY2FudmFzLXNrZXRjaCc7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGlzU3RyZWFtaW5nID8gJ1N0cmVhbWluZyBpbnRvJyA6ICdFeHBvcnRlZCc7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1ske2NsaWVudH1dJWMgJHthY3Rpb259ICVjJHtpdGVtfSVjJHtvZlNlcX1gLCAnY29sb3I6ICM4ZThlOGU7JywgJ2NvbG9yOiBpbml0aWFsOycsICdmb250LXdlaWdodDogYm9sZDsnLCAnZm9udC13ZWlnaHQ6IGluaXRpYWw7Jyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnBvc3RFeHBvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5za2V0Y2gucG9zdEV4cG9ydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2O1xuICAgIH0pO1xuICB9XG5cbiAgX3dyYXBDb250ZXh0U2NhbGUgKGNiKSB7XG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuICB9XG5cbiAgX3ByZVJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gU2NhbGUgY29udGV4dCBmb3IgdW5pdCBzaXppbmdcbiAgICBpZiAoIXRoaXMucHJvcHMuZ2wgJiYgcHJvcHMuY29udGV4dCAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2NhbGVDb250ZXh0ICE9PSBmYWxzZSkge1xuICAgICAgICBwcm9wcy5jb250ZXh0LnNjYWxlKHByb3BzLnNjYWxlWCwgcHJvcHMuc2NhbGVZKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5wNS5zY2FsZShwcm9wcy5zY2FsZVggLyBwcm9wcy5waXhlbFJhdGlvLCBwcm9wcy5zY2FsZVkgLyBwcm9wcy5waXhlbFJhdGlvKTtcbiAgICB9XG4gIH1cblxuICBfcG9zdFJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCF0aGlzLnByb3BzLmdsICYmIHByb3BzLmNvbnRleHQgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5jb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICAvLyBGbHVzaCBieSBkZWZhdWx0LCB0aGlzIG1heSBiZSByZXZpc2l0ZWQgYXQgYSBsYXRlciBwb2ludC5cbiAgICAvLyBXZSBkbyB0aGlzIHRvIGVuc3VyZSB0b0RhdGFVUkwgY2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlci5cbiAgICAvLyBNb3N0IGxpa2VseSBicm93c2VycyBhbHJlYWR5IGhhbmRsZSB0aGlzLCBzbyB3ZSBtYXkgcmV2aXNpdCB0aGlzIGFuZFxuICAgIC8vIHJlbW92ZSBpdCBpZiBpdCBpbXByb3ZlcyBwZXJmb3JtYW5jZSB3aXRob3V0IGFueSB1c2FiaWxpdHkgaXNzdWVzLlxuICAgIGlmIChwcm9wcy5nbCAmJiB0aGlzLnNldHRpbmdzLmZsdXNoICE9PSBmYWxzZSAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmdsLmZsdXNoKCk7XG4gICAgfVxuICB9XG5cbiAgdGljayAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC50aWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl9wcmVSZW5kZXIoKTtcbiAgICAgIHRoaXMuc2tldGNoLnRpY2sodGhpcy5wcm9wcyk7XG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wNSkge1xuICAgICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucHJvcHMucDUucmVkcmF3KCk7XG4gICAgICByZXR1cm4gdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0RHJhd0NhbGwoKTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXREcmF3Q2FsbCAoKSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuXG4gICAgbGV0IGRyYXdSZXN1bHQ7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkcmF3UmVzdWx0ID0gdGhpcy5za2V0Y2gocHJvcHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IHRoaXMuc2tldGNoLnJlbmRlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuXG4gICAgcmV0dXJuIGRyYXdSZXN1bHQ7XG4gIH1cblxuICB1cGRhdGUgKG9wdCA9IHt9KSB7XG4gICAgLy8gQ3VycmVudGx5IHVwZGF0ZSgpIGlzIG9ubHkgZm9jdXNlZCBvbiByZXNpemluZyxcbiAgICAvLyBidXQgbGF0ZXIgd2Ugd2lsbCBzdXBwb3J0IG90aGVyIG9wdGlvbnMgbGlrZSBzd2l0Y2hpbmdcbiAgICAvLyBmcmFtZXMgYW5kIHN1Y2guXG4gICAgY29uc3Qgbm90WWV0U3VwcG9ydGVkID0gW1xuICAgICAgJ2FuaW1hdGUnXG4gICAgXTtcblxuICAgIE9iamVjdC5rZXlzKG9wdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKG5vdFlldFN1cHBvcnRlZC5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvcnJ5LCB0aGUgeyAke2tleX0gfSBvcHRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCB1cGRhdGUoKS5gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG9sZENhbnZhcyA9IHRoaXMuX3NldHRpbmdzLmNhbnZhcztcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5fc2V0dGluZ3MuY29udGV4dDtcblxuICAgIC8vIE1lcmdlIG5ldyBvcHRpb25zIGludG8gc2V0dGluZ3NcbiAgICBmb3IgKGxldCBrZXkgaW4gb3B0KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdFtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gaWdub3JlIHVuZGVmaW5lZFxuICAgICAgICB0aGlzLl9zZXR0aW5nc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgaW4gdGltZSBwcm9wc1xuICAgIGNvbnN0IHRpbWVPcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fc2V0dGluZ3MsIG9wdCk7XG4gICAgaWYgKCd0aW1lJyBpbiBvcHQgJiYgJ2ZyYW1lJyBpbiBvcHQpIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IHsgdGltZSB9IG9yIHsgZnJhbWUgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgndGltZScgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZnJhbWU7XG4gICAgZWxzZSBpZiAoJ2ZyYW1lJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy50aW1lO1xuICAgIGlmICgnZHVyYXRpb24nIGluIG9wdCAmJiAndG90YWxGcmFtZXMnIGluIG9wdCkgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgeyBkdXJhdGlvbiB9IG9yIHsgdG90YWxGcmFtZXMgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgnZHVyYXRpb24nIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLnRvdGFsRnJhbWVzO1xuICAgIGVsc2UgaWYgKCd0b3RhbEZyYW1lcycgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZHVyYXRpb247XG5cbiAgICAvLyBNZXJnZSBpbiB1c2VyIGRhdGEgd2l0aG91dCBjb3B5aW5nXG4gICAgaWYgKCdkYXRhJyBpbiBvcHQpIHRoaXMuX3Byb3BzLmRhdGEgPSBvcHQuZGF0YTtcblxuICAgIGNvbnN0IHRpbWVQcm9wcyA9IHRoaXMuZ2V0VGltZVByb3BzKHRpbWVPcHRzKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCB0aW1lUHJvcHMpO1xuXG4gICAgLy8gSWYgZWl0aGVyIGNhbnZhcyBvciBjb250ZXh0IGlzIGNoYW5nZWQsIHdlIHNob3VsZCByZS11cGRhdGVcbiAgICBpZiAob2xkQ2FudmFzICE9PSB0aGlzLl9zZXR0aW5ncy5jYW52YXMgfHwgb2xkQ29udGV4dCAhPT0gdGhpcy5fc2V0dGluZ3MuY29udGV4dCkge1xuICAgICAgY29uc3QgeyBjYW52YXMsIGNvbnRleHQgfSA9IGNyZWF0ZUNhbnZhcyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAgIHRoaXMucHJvcHMuY2FudmFzID0gY2FudmFzO1xuICAgICAgdGhpcy5wcm9wcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgICAgLy8gRGVsZXRlIG9yIGFkZCBhICdnbCcgcHJvcCBmb3IgY29udmVuaWVuY2VcbiAgICAgIHRoaXMuX3NldHVwR0xLZXkoKTtcblxuICAgICAgLy8gUmUtbW91bnQgdGhlIG5ldyBjYW52YXMgaWYgaXQgaGFzIG5vIHBhcmVudFxuICAgICAgdGhpcy5fYXBwZW5kQ2FudmFzSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gc3VwcG9ydCBQNS5qc1xuICAgIGlmIChvcHQucDUgJiYgdHlwZW9mIG9wdC5wNSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5wcm9wcy5wNSA9IG9wdC5wNTtcbiAgICAgIHRoaXMucHJvcHMucDUuZHJhdyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUDVSZXNpemluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdGhpcy5zdWJtaXREcmF3Q2FsbCgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgcGxheWluZyBzdGF0ZSBpZiBuZWNlc3NhcnlcbiAgICBpZiAoJ3BsYXlpbmcnIGluIG9wdCkge1xuICAgICAgaWYgKG9wdC5wbGF5aW5nKSB0aGlzLnBsYXkoKTtcbiAgICAgIGVsc2UgdGhpcy5wYXVzZSgpO1xuICAgIH1cblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gRHJhdyBuZXcgZnJhbWVcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgcmV0dXJuIHRoaXMucHJvcHM7XG4gIH1cblxuICByZXNpemUgKCkge1xuICAgIGNvbnN0IG9sZFNpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3M7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gUmVjb21wdXRlIG5ldyBwcm9wZXJ0aWVzIGJhc2VkIG9uIGN1cnJlbnQgc2V0dXBcbiAgICBjb25zdCBuZXdQcm9wcyA9IHJlc2l6ZUNhbnZhcyhwcm9wcywgc2V0dGluZ3MpO1xuXG4gICAgLy8gQXNzaWduIHRvIGN1cnJlbnQgcHJvcHNcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCBuZXdQcm9wcyk7XG5cbiAgICAvLyBOb3cgd2UgYWN0dWFsbHkgdXBkYXRlIHRoZSBjYW52YXMgd2lkdGgvaGVpZ2h0IGFuZCBzdHlsZSBwcm9wc1xuICAgIGNvbnN0IHtcbiAgICAgIHBpeGVsUmF0aW8sXG4gICAgICBjYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodCxcbiAgICAgIHN0eWxlV2lkdGgsXG4gICAgICBzdHlsZUhlaWdodFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gVXBkYXRlIGNhbnZhcyBzZXR0aW5nc1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMucHJvcHMuY2FudmFzO1xuICAgIGlmIChjYW52YXMgJiYgc2V0dGluZ3MucmVzaXplQ2FudmFzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKHByb3BzLnA1KSB7XG4gICAgICAgIC8vIFA1LmpzIHNwZWNpZmljIGVkZ2UgY2FzZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCB8fCBjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSB0cnVlO1xuICAgICAgICAgIC8vIFRoaXMgY2F1c2VzIGEgcmUtZHJhdyA6XFwgc28gd2UgaWdub3JlIGRyYXdzIGluIHRoZSBtZWFuIHRpbWUuLi4gc29ydGEgaGFja3lcbiAgICAgICAgICBwcm9wcy5wNS5waXhlbERlbnNpdHkocGl4ZWxSYXRpbyk7XG4gICAgICAgICAgcHJvcHMucDUucmVzaXplQ2FudmFzKGNhbnZhc1dpZHRoIC8gcGl4ZWxSYXRpbywgY2FudmFzSGVpZ2h0IC8gcGl4ZWxSYXRpbywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3JjZSBjYW52YXMgc2l6ZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCkgY2FudmFzLndpZHRoID0gY2FudmFzV2lkdGg7XG4gICAgICAgIGlmIChjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIGNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQ7XG4gICAgICB9XG4gICAgICAvLyBVcGRhdGUgY2FudmFzIHN0eWxlXG4gICAgICBpZiAoaXNCcm93c2VyKCkgJiYgc2V0dGluZ3Muc3R5bGVDYW52YXMgIT09IGZhbHNlKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke3N0eWxlV2lkdGh9cHhgO1xuICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7c3R5bGVIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1NpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG4gICAgbGV0IGNoYW5nZWQgPSAhZGVlcEVxdWFsKG9sZFNpemVzLCBuZXdTaXplcyk7XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3NpemVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgX3NpemVDaGFuZ2VkICgpIHtcbiAgICAvLyBTZW5kIHJlc2l6ZSBldmVudCB0byBza2V0Y2hcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLnJlc2l6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5za2V0Y2gucmVzaXplKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGUgKCkge1xuICAgIGlmICghdGhpcy5wcm9wcy5wbGF5aW5nKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IEFuaW1hdGlvbiBpbiBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuXG4gICAgbGV0IG5vdyA9IHJpZ2h0Tm93KCk7XG5cbiAgICBjb25zdCBmcHMgPSB0aGlzLnByb3BzLmZwcztcbiAgICBjb25zdCBmcmFtZUludGVydmFsTVMgPSAxMDAwIC8gZnBzO1xuICAgIGxldCBkZWx0YVRpbWVNUyA9IG5vdyAtIHRoaXMuX2xhc3RUaW1lO1xuXG4gICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLnByb3BzLmR1cmF0aW9uO1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG5cbiAgICBsZXQgaXNOZXdGcmFtZSA9IHRydWU7XG4gICAgY29uc3QgcGxheWJhY2tSYXRlID0gdGhpcy5zZXR0aW5ncy5wbGF5YmFja1JhdGU7XG4gICAgaWYgKHBsYXliYWNrUmF0ZSA9PT0gJ2ZpeGVkJykge1xuICAgICAgZGVsdGFUaW1lTVMgPSBmcmFtZUludGVydmFsTVM7XG4gICAgfSBlbHNlIGlmIChwbGF5YmFja1JhdGUgPT09ICd0aHJvdHRsZScpIHtcbiAgICAgIGlmIChkZWx0YVRpbWVNUyA+IGZyYW1lSW50ZXJ2YWxNUykge1xuICAgICAgICBub3cgPSBub3cgLSAoZGVsdGFUaW1lTVMgJSBmcmFtZUludGVydmFsTVMpO1xuICAgICAgICB0aGlzLl9sYXN0VGltZSA9IG5vdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGFzdFRpbWUgPSBub3c7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFUaW1lID0gZGVsdGFUaW1lTVMgLyAxMDAwO1xuICAgIGxldCBuZXdUaW1lID0gdGhpcy5wcm9wcy50aW1lICsgZGVsdGFUaW1lICogdGhpcy5wcm9wcy50aW1lU2NhbGU7XG5cbiAgICAvLyBIYW5kbGUgcmV2ZXJzZSB0aW1lIHNjYWxlXG4gICAgaWYgKG5ld1RpbWUgPCAwICYmIGhhc0R1cmF0aW9uKSB7XG4gICAgICBuZXdUaW1lID0gZHVyYXRpb24gKyBuZXdUaW1lO1xuICAgIH1cblxuICAgIC8vIFJlLXN0YXJ0IGFuaW1hdGlvblxuICAgIGxldCBpc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgbGV0IGlzTG9vcFN0YXJ0ID0gZmFsc2U7XG5cbiAgICBjb25zdCBsb29waW5nID0gdGhpcy5zZXR0aW5ncy5sb29wICE9PSBmYWxzZTtcblxuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBuZXdUaW1lID49IGR1cmF0aW9uKSB7XG4gICAgICAvLyBSZS1zdGFydCBhbmltYXRpb25cbiAgICAgIGlmIChsb29waW5nKSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSB0cnVlO1xuICAgICAgICBuZXdUaW1lID0gbmV3VGltZSAlIGR1cmF0aW9uO1xuICAgICAgICBpc0xvb3BTdGFydCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc05ld0ZyYW1lID0gZmFsc2U7XG4gICAgICAgIG5ld1RpbWUgPSBkdXJhdGlvbjtcbiAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NpZ25hbEVuZCgpO1xuICAgIH1cblxuICAgIGlmIChpc05ld0ZyYW1lKSB7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGRlbHRhVGltZTtcbiAgICAgIHRoaXMucHJvcHMudGltZSA9IG5ld1RpbWU7XG4gICAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKG5ld1RpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGNvbnN0IGxhc3RGcmFtZSA9IHRoaXMucHJvcHMuZnJhbWU7XG4gICAgICB0aGlzLnByb3BzLmZyYW1lID0gdGhpcy5fY29tcHV0ZUN1cnJlbnRGcmFtZSgpO1xuICAgICAgaWYgKGlzTG9vcFN0YXJ0KSB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgaWYgKGxhc3RGcmFtZSAhPT0gdGhpcy5wcm9wcy5mcmFtZSkgdGhpcy50aWNrKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIH1cblxuICAgIGlmIChpc0ZpbmlzaGVkKSB7XG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2ggKGNiKSB7XG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHBhc3MgZnVuY3Rpb24gaW50byBkaXNwYXRjaCgpJyk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdW50ICgpIHtcbiAgICB0aGlzLl9hcHBlbmRDYW52YXNJZk5lZWRlZCgpO1xuICB9XG5cbiAgdW5tb3VudCAoKSB7XG4gICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fcmVzaXplSGFuZGxlcik7XG4gICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5kZXRhY2goKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5wcm9wcy5jYW52YXMpO1xuICAgIH1cbiAgfVxuXG4gIF9hcHBlbmRDYW52YXNJZk5lZWRlZCAoKSB7XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnBhcmVudCAhPT0gZmFsc2UgJiYgKHRoaXMucHJvcHMuY2FudmFzICYmICF0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50KSkge1xuICAgICAgY29uc3QgZGVmYXVsdFBhcmVudCA9IHRoaXMuc2V0dGluZ3MucGFyZW50IHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICBkZWZhdWx0UGFyZW50LmFwcGVuZENoaWxkKHRoaXMucHJvcHMuY2FudmFzKTtcbiAgICB9XG4gIH1cblxuICBfc2V0dXBHTEtleSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuY29udGV4dCkge1xuICAgICAgaWYgKGlzV2ViR0xDb250ZXh0KHRoaXMucHJvcHMuY29udGV4dCkpIHtcbiAgICAgICAgdGhpcy5fcHJvcHMuZ2wgPSB0aGlzLnByb3BzLmNvbnRleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5fcHJvcHMuZ2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGltZVByb3BzIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgLy8gR2V0IHRpbWluZyBkYXRhXG4gICAgbGV0IGR1cmF0aW9uID0gc2V0dGluZ3MuZHVyYXRpb247XG4gICAgbGV0IHRvdGFsRnJhbWVzID0gc2V0dGluZ3MudG90YWxGcmFtZXM7XG4gICAgY29uc3QgdGltZVNjYWxlID0gZGVmaW5lZChzZXR0aW5ncy50aW1lU2NhbGUsIDEpO1xuICAgIGNvbnN0IGZwcyA9IGRlZmluZWQoc2V0dGluZ3MuZnBzLCAyNCk7XG4gICAgY29uc3QgaGFzRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKGR1cmF0aW9uKTtcbiAgICBjb25zdCBoYXNUb3RhbEZyYW1lcyA9IHR5cGVvZiB0b3RhbEZyYW1lcyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodG90YWxGcmFtZXMpO1xuXG4gICAgY29uc3QgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24gPSBoYXNEdXJhdGlvbiA/IE1hdGguZmxvb3IoZnBzICogZHVyYXRpb24pIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzID0gaGFzVG90YWxGcmFtZXMgPyAodG90YWxGcmFtZXMgLyBmcHMpIDogdW5kZWZpbmVkO1xuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBoYXNUb3RhbEZyYW1lcyAmJiB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiAhPT0gdG90YWxGcmFtZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBkdXJhdGlvbiBvciB0b3RhbEZyYW1lcywgYnV0IG5vdCBib3RoLiBPciwgdGhleSBtdXN0IG1hdGNoIGV4YWN0bHkuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kaW1lbnNpb25zID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2V0dGluZ3MudW5pdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFlvdSd2ZSBzcGVjaWZpZWQgYSB7IHVuaXRzIH0gc2V0dGluZyBidXQgbm8geyBkaW1lbnNpb24gfSwgc28gdGhlIHVuaXRzIHdpbGwgYmUgaWdub3JlZC5gKTtcbiAgICB9XG5cbiAgICB0b3RhbEZyYW1lcyA9IGRlZmluZWQodG90YWxGcmFtZXMsIHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uLCBJbmZpbml0eSk7XG4gICAgZHVyYXRpb24gPSBkZWZpbmVkKGR1cmF0aW9uLCBkdXJhdGlvbkZyb21Ub3RhbEZyYW1lcywgSW5maW5pdHkpO1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gc2V0dGluZ3MudGltZTtcbiAgICBjb25zdCBzdGFydEZyYW1lID0gc2V0dGluZ3MuZnJhbWU7XG4gICAgY29uc3QgaGFzU3RhcnRUaW1lID0gdHlwZW9mIHN0YXJ0VGltZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc3RhcnRUaW1lKTtcbiAgICBjb25zdCBoYXNTdGFydEZyYW1lID0gdHlwZW9mIHN0YXJ0RnJhbWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHN0YXJ0RnJhbWUpO1xuXG4gICAgLy8gc3RhcnQgYXQgemVybyB1bmxlc3MgdXNlciBzcGVjaWZpZXMgZnJhbWUgb3IgdGltZSAoYnV0IG5vdCBib3RoIG1pc21hdGNoZWQpXG4gICAgbGV0IHRpbWUgPSAwO1xuICAgIGxldCBmcmFtZSA9IDA7XG4gICAgbGV0IHBsYXloZWFkID0gMDtcbiAgICBpZiAoaGFzU3RhcnRUaW1lICYmIGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBzdGFydCBmcmFtZSBvciB0aW1lLCBidXQgbm90IGJvdGguJyk7XG4gICAgfSBlbHNlIGlmIChoYXNTdGFydFRpbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIHRpbWUsIHdlIGluZmVyIGZyYW1lcyBmcm9tIEZQU1xuICAgICAgdGltZSA9IHN0YXJ0VGltZTtcbiAgICAgIHBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGZyYW1lID0gdGhpcy5fY29tcHV0ZUZyYW1lKFxuICAgICAgICBwbGF5aGVhZCwgdGltZSxcbiAgICAgICAgdG90YWxGcmFtZXMsIGZwc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIGZyYW1lIG51bWJlciwgd2UgaW5mZXIgdGltZSBmcm9tIEZQU1xuICAgICAgZnJhbWUgPSBzdGFydEZyYW1lO1xuICAgICAgdGltZSA9IGZyYW1lIC8gZnBzO1xuICAgICAgcGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGltZSwgZHVyYXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwbGF5aGVhZCxcbiAgICAgIHRpbWUsXG4gICAgICBmcmFtZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdG90YWxGcmFtZXMsXG4gICAgICBmcHMsXG4gICAgICB0aW1lU2NhbGVcbiAgICB9O1xuICB9XG5cbiAgc2V0dXAgKHNldHRpbmdzID0ge30pIHtcbiAgICBpZiAodGhpcy5za2V0Y2gpIHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgc2V0dXAoKSBjYWxscyBub3QgeWV0IHN1cHBvcnRlZC4nKTtcblxuICAgIHRoaXMuX3NldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIHRoaXMuX3NldHRpbmdzKTtcblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gR2V0IGluaXRpYWwgY2FudmFzICYgY29udGV4dFxuICAgIGNvbnN0IHsgY29udGV4dCwgY2FudmFzIH0gPSBjcmVhdGVDYW52YXModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgY29uc3QgdGltZVByb3BzID0gdGhpcy5nZXRUaW1lUHJvcHModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gSW5pdGlhbCByZW5kZXIgc3RhdGUgZmVhdHVyZXNcbiAgICB0aGlzLl9wcm9wcyA9IHtcbiAgICAgIC4uLnRpbWVQcm9wcyxcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWx0YVRpbWU6IDAsXG4gICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgIGV4cG9ydGluZzogZmFsc2UsXG4gICAgICBwbGF5aW5nOiBmYWxzZSxcbiAgICAgIHJlY29yZGluZzogZmFsc2UsXG4gICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcbiAgICAgIGRhdGE6IHRoaXMuc2V0dGluZ3MuZGF0YSxcblxuICAgICAgLy8gRXhwb3J0IHNvbWUgc3BlY2lmaWMgYWN0aW9ucyB0byB0aGUgc2tldGNoXG4gICAgICByZW5kZXI6ICgpID0+IHRoaXMucmVuZGVyKCksXG4gICAgICB0b2dnbGVQbGF5OiAoKSA9PiB0aGlzLnRvZ2dsZVBsYXkoKSxcbiAgICAgIGRpc3BhdGNoOiAoY2IpID0+IHRoaXMuZGlzcGF0Y2goY2IpLFxuICAgICAgdGljazogKCkgPT4gdGhpcy50aWNrKCksXG4gICAgICByZXNpemU6ICgpID0+IHRoaXMucmVzaXplKCksXG4gICAgICB1cGRhdGU6IChvcHQpID0+IHRoaXMudXBkYXRlKG9wdCksXG4gICAgICBleHBvcnRGcmFtZTogb3B0ID0+IHRoaXMuZXhwb3J0RnJhbWUob3B0KSxcbiAgICAgIHJlY29yZDogKCkgPT4gdGhpcy5yZWNvcmQoKSxcbiAgICAgIHBsYXk6ICgpID0+IHRoaXMucGxheSgpLFxuICAgICAgcGF1c2U6ICgpID0+IHRoaXMucGF1c2UoKSxcbiAgICAgIHN0b3A6ICgpID0+IHRoaXMuc3RvcCgpXG4gICAgfTtcblxuICAgIC8vIEZvciBXZWJHTCBza2V0Y2hlcywgYSBnbCB2YXJpYWJsZSByZWFkcyBhIGJpdCBiZXR0ZXJcbiAgICB0aGlzLl9zZXR1cEdMS2V5KCk7XG5cbiAgICAvLyBUcmlnZ2VyIGluaXRpYWwgcmVzaXplIG5vdyBzbyB0aGF0IGNhbnZhcyBpcyBhbHJlYWR5IHNpemVkXG4gICAgLy8gYnkgdGhlIHRpbWUgd2UgbG9hZCB0aGUgc2tldGNoXG4gICAgdGhpcy5yZXNpemUoKTtcbiAgfVxuXG4gIGxvYWRBbmRSdW4gKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5ydW4oKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pO1xuICB9XG5cbiAgdW5sb2FkICgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gudW5sb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLnVubG9hZChwcm9wcykpO1xuICAgIH1cbiAgICB0aGlzLl9za2V0Y2ggPSBudWxsO1xuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhpcy51bmxvYWQoKTtcbiAgICB0aGlzLnVubW91bnQoKTtcbiAgfVxuXG4gIGxvYWQgKGNyZWF0ZVNrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICAvLyBVc2VyIGRpZG4ndCBzcGVjaWZ5IGEgZnVuY3Rpb25cbiAgICBpZiAodHlwZW9mIGNyZWF0ZVNrZXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnVuY3Rpb24gbXVzdCB0YWtlIGluIGEgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gRXhhbXBsZTpcXG4gIGNhbnZhc1NrZXRjaGVyKCgpID0+IHsgLi4uIH0sIHNldHRpbmdzKScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNrZXRjaCkge1xuICAgICAgdGhpcy51bmxvYWQoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld1NldHRpbmdzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy51cGRhdGUobmV3U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSB0cmlja3kgY2FzZTsgd2Ugc2V0IHVwIHRoZSBhdXRvLXNjYWxpbmcgaGVyZVxuICAgIC8vIGluIGNhc2UgdGhlIHVzZXIgZGVjaWRlcyB0byByZW5kZXIgYW55dGhpbmcgdG8gdGhlIGNvbnRleHQgKmJlZm9yZSogdGhlXG4gICAgLy8gcmVuZGVyKCkgZnVuY3Rpb24uLi4gSG93ZXZlciwgdXNlcnMgc2hvdWxkIGluc3RlYWQgdXNlIGJlZ2luKCkgZnVuY3Rpb24gZm9yIHRoYXQuXG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG5cbiAgICBsZXQgcHJlbG9hZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgLy8gQmVjYXVzZSBvZiBQNS5qcydzIHVudXN1YWwgc3RydWN0dXJlLCB3ZSBoYXZlIHRvIGRvIGEgYml0IG9mXG4gICAgLy8gbGlicmFyeS1zcGVjaWZpYyBjaGFuZ2VzIHRvIHN1cHBvcnQgaXQgcHJvcGVybHkuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucDUpIHtcbiAgICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbY2FudmFzLXNrZXRjaF0gRVJST1I6IFVzaW5nIHA1LmpzIGluIE5vZGUuanMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfVxuICAgICAgcHJlbG9hZCA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBsZXQgUDVDb25zdHJ1Y3RvciA9IHRoaXMuc2V0dGluZ3MucDU7XG4gICAgICAgIGxldCBwcmVsb2FkO1xuICAgICAgICBpZiAoUDVDb25zdHJ1Y3Rvci5wNSkge1xuICAgICAgICAgIHByZWxvYWQgPSBQNUNvbnN0cnVjdG9yLnByZWxvYWQ7XG4gICAgICAgICAgUDVDb25zdHJ1Y3RvciA9IFA1Q29uc3RydWN0b3IucDU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgc2tldGNoIHNldHVwOyBkaXNhYmxlIGxvb3AsIHNldCBzaXppbmcsIGV0Yy5cbiAgICAgICAgY29uc3QgcDVTa2V0Y2ggPSBwNSA9PiB7XG4gICAgICAgICAgLy8gSG9vayBpbiBwcmVsb2FkIGlmIG5lY2Vzc2FyeVxuICAgICAgICAgIGlmIChwcmVsb2FkKSBwNS5wcmVsb2FkID0gKCkgPT4gcHJlbG9hZChwNSk7XG4gICAgICAgICAgcDUuc2V0dXAgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICAgICAgICBjb25zdCBpc0dMID0gdGhpcy5zZXR0aW5ncy5jb250ZXh0ID09PSAnd2ViZ2wnO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBpc0dMID8gcDUuV0VCR0wgOiBwNS5QMkQ7XG4gICAgICAgICAgICBwNS5ub0xvb3AoKTtcbiAgICAgICAgICAgIHA1LnBpeGVsRGVuc2l0eShwcm9wcy5waXhlbFJhdGlvKTtcbiAgICAgICAgICAgIHA1LmNyZWF0ZUNhbnZhcyhwcm9wcy52aWV3cG9ydFdpZHRoLCBwcm9wcy52aWV3cG9ydEhlaWdodCwgcmVuZGVyZXIpO1xuICAgICAgICAgICAgaWYgKGlzR0wgJiYgdGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgIHA1LnNldEF0dHJpYnV0ZXModGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51cGRhdGUoeyBwNSwgY2FudmFzOiBwNS5jYW52YXMsIGNvbnRleHQ6IHA1Ll9yZW5kZXJlci5kcmF3aW5nQ29udGV4dCB9KTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFN1cHBvcnQgZ2xvYmFsIGFuZCBpbnN0YW5jZSBQNS5qcyBtb2Rlc1xuICAgICAgICBpZiAodHlwZW9mIFA1Q29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBuZXcgUDVDb25zdHJ1Y3RvcihwNVNrZXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuY3JlYXRlQ2FudmFzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ7IHA1IH0gc2V0dGluZyBpcyBwYXNzZWQgYnV0IGNhbid0IGZpbmQgcDUuanMgaW4gZ2xvYmFsICh3aW5kb3cpIHNjb3BlLiBNYXliZSB5b3UgZGlkIG5vdCBjcmVhdGUgaXQgZ2xvYmFsbHk/XFxubmV3IHA1KCk7IC8vIDwtLSBhdHRhY2hlcyB0byBnbG9iYWwgc2NvcGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHA1U2tldGNoKHdpbmRvdyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcmVsb2FkLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gTG9hZCB0aGUgdXNlcidzIHNrZXRjaFxuICAgICAgbGV0IGxvYWRlciA9IGNyZWF0ZVNrZXRjaCh0aGlzLnByb3BzKTtcbiAgICAgIGlmICghaXNQcm9taXNlKGxvYWRlcikpIHtcbiAgICAgICAgbG9hZGVyID0gUHJvbWlzZS5yZXNvbHZlKGxvYWRlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG9hZGVyO1xuICAgIH0pLnRoZW4oc2tldGNoID0+IHtcbiAgICAgIGlmICghc2tldGNoKSBza2V0Y2ggPSB7fTtcbiAgICAgIHRoaXMuX3NrZXRjaCA9IHNrZXRjaDtcblxuICAgICAgLy8gT25jZSB0aGUgc2tldGNoIGlzIGxvYWRlZCB3ZSBjYW4gYWRkIHRoZSBldmVudHNcbiAgICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5hdHRhY2goKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG5cbiAgICAgIC8vIFRoZSBpbml0aWFsIHJlc2l6ZSgpIGluIHRoZSBjb25zdHJ1Y3RvciB3aWxsIG5vdCBoYXZlXG4gICAgICAvLyB0cmlnZ2VyZWQgYSByZXNpemUoKSBldmVudCBvbiB0aGUgc2tldGNoLCBzaW5jZSBpdCB3YXMgYmVmb3JlXG4gICAgICAvLyB0aGUgc2tldGNoIHdhcyBsb2FkZWQuIFNvIHdlIHNlbmQgdGhlIHNpZ25hbCBoZXJlLCBhbGxvd2luZ1xuICAgICAgLy8gdXNlcnMgdG8gcmVhY3QgdG8gdGhlIGluaXRpYWwgc2l6ZSBiZWZvcmUgZmlyc3QgcmVuZGVyLlxuICAgICAgdGhpcy5fc2l6ZUNoYW5nZWQoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzdGFydCBza2V0Y2gsIHRoZSBhc3luYyBsb2FkaW5nIGZ1bmN0aW9uIHJlamVjdGVkIHdpdGggYW4gZXJyb3I6XFxuICAgIEVycm9yOiAnICsgZXJyLm1lc3NhZ2UpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNrZXRjaE1hbmFnZXI7XG4iLCJpbXBvcnQgeyBnZXRDbGllbnRBUEkgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG9wdCA9IHt9KSB7XG4gIGNvbnN0IGhhbmRsZXIgPSBldiA9PiB7XG4gICAgaWYgKCFvcHQuZW5hYmxlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoZXYua2V5Q29kZSA9PT0gODMgJiYgIWV2LmFsdEtleSAmJiAoZXYubWV0YUtleSB8fCBldi5jdHJsS2V5KSkge1xuICAgICAgLy8gQ21kICsgU1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5zYXZlKGV2KTtcbiAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IDMyKSB7XG4gICAgICAvLyBTcGFjZVxuICAgICAgLy8gVE9ETzogd2hhdCB0byBkbyB3aXRoIHRoaXM/IGtlZXAgaXQsIG9yIHJlbW92ZSBpdD9cbiAgICAgIG9wdC50b2dnbGVQbGF5KGV2KTtcbiAgICB9IGVsc2UgaWYgKGNsaWVudCAmJiAhZXYuYWx0S2V5ICYmIGV2LmtleUNvZGUgPT09IDc1ICYmIChldi5tZXRhS2V5IHx8IGV2LmN0cmxLZXkpKSB7XG4gICAgICAvLyBDbWQgKyBLLCBvbmx5IHdoZW4gY2FudmFzLXNrZXRjaC1jbGkgaXMgdXNlZFxuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5jb21taXQoZXYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhdHRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICBjb25zdCBkZXRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGF0dGFjaCxcbiAgICBkZXRhY2hcbiAgfTtcbn1cbiIsImltcG9ydCBTa2V0Y2hNYW5hZ2VyIGZyb20gJy4vY29yZS9Ta2V0Y2hNYW5hZ2VyJztcbmltcG9ydCBQYXBlclNpemVzIGZyb20gJy4vcGFwZXItc2l6ZXMnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50QVBJLCBkZWZpbmVkIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgQ0FDSEUgPSAnaG90LWlkLWNhY2hlJztcbmNvbnN0IHJ1bnRpbWVDb2xsaXNpb25zID0gW107XG5cbmZ1bmN0aW9uIGlzSG90UmVsb2FkICgpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gIHJldHVybiBjbGllbnQgJiYgY2xpZW50LmhvdDtcbn1cblxuZnVuY3Rpb24gY2FjaGVHZXQgKGlkKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICBpZiAoIWNsaWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY2xpZW50W0NBQ0hFXSA9IGNsaWVudFtDQUNIRV0gfHwge307XG4gIHJldHVybiBjbGllbnRbQ0FDSEVdW2lkXTtcbn1cblxuZnVuY3Rpb24gY2FjaGVQdXQgKGlkLCBkYXRhKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICBpZiAoIWNsaWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY2xpZW50W0NBQ0hFXSA9IGNsaWVudFtDQUNIRV0gfHwge307XG4gIGNsaWVudFtDQUNIRV1baWRdID0gZGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZVByb3AgKG9sZE1hbmFnZXIsIG5ld1NldHRpbmdzKSB7XG4gIC8vIFN0YXRpYyBza2V0Y2hlcyBpZ25vcmUgdGhlIHRpbWUgcGVyc2lzdGVuY3lcbiAgcmV0dXJuIG5ld1NldHRpbmdzLmFuaW1hdGUgPyB7IHRpbWU6IG9sZE1hbmFnZXIucHJvcHMudGltZSB9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjYW52YXNTa2V0Y2ggKHNrZXRjaCwgc2V0dGluZ3MgPSB7fSkge1xuICBpZiAoc2V0dGluZ3MucDUpIHtcbiAgICBpZiAoc2V0dGluZ3MuY2FudmFzIHx8IChzZXR0aW5ncy5jb250ZXh0ICYmIHR5cGVvZiBzZXR0aW5ncy5jb250ZXh0ICE9PSAnc3RyaW5nJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW4geyBwNSB9IG1vZGUsIHlvdSBjYW4ndCBwYXNzIHlvdXIgb3duIGNhbnZhcyBvciBjb250ZXh0LCB1bmxlc3MgdGhlIGNvbnRleHQgaXMgYSBcIndlYmdsXCIgb3IgXCIyZFwiIHN0cmluZ2ApO1xuICAgIH1cblxuICAgIC8vIERvIG5vdCBjcmVhdGUgYSBjYW52YXMgb24gc3RhcnR1cCwgc2luY2UgUDUuanMgZG9lcyB0aGF0IGZvciB1c1xuICAgIGNvbnN0IGNvbnRleHQgPSB0eXBlb2Ygc2V0dGluZ3MuY29udGV4dCA9PT0gJ3N0cmluZycgPyBzZXR0aW5ncy5jb250ZXh0IDogZmFsc2U7XG4gICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncywgeyBjYW52YXM6IGZhbHNlLCBjb250ZXh0IH0pO1xuICB9XG5cbiAgY29uc3QgaXNIb3QgPSBpc0hvdFJlbG9hZCgpO1xuICBsZXQgaG90SUQ7XG4gIGlmIChpc0hvdCkge1xuICAgIC8vIFVzZSBhIG1hZ2ljIG5hbWUgYnkgZGVmYXVsdCwgZm9yY2UgdXNlciB0byBkZWZpbmUgZWFjaCBza2V0Y2ggaWYgdGhleVxuICAgIC8vIHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBpbiBhbiBhcHBsaWNhdGlvbi4gT3BlbiB0byBvdGhlciBpZGVhcyBvbiBob3cgdG8gdGFja2xlXG4gICAgLy8gdGhpcyBhcyB3ZWxsLi4uXG4gICAgaG90SUQgPSBkZWZpbmVkKHNldHRpbmdzLmlkLCAnJF9fREVGQVVMVF9DQU5WQVNfU0tFVENIX0lEX18kJyk7XG4gIH1cbiAgbGV0IGlzSW5qZWN0aW5nID0gaXNIb3QgJiYgdHlwZW9mIGhvdElEID09PSAnc3RyaW5nJztcblxuICBpZiAoaXNJbmplY3RpbmcgJiYgcnVudGltZUNvbGxpc2lvbnMuaW5jbHVkZXMoaG90SUQpKSB7XG4gICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBZb3UgaGF2ZSBtdWx0aXBsZSBjYWxscyB0byBjYW52YXNTa2V0Y2goKSBpbiAtLWhvdCBtb2RlLiBZb3UgbXVzdCBwYXNzIHVuaXF1ZSB7IGlkIH0gc3RyaW5ncyBpbiBzZXR0aW5ncyB0byBlbmFibGUgaG90IHJlbG9hZCBhY3Jvc3MgbXVsdGlwbGUgc2tldGNoZXMuIGAsIGhvdElEKTtcbiAgICBpc0luamVjdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IHByZWxvYWQgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICBpZiAoaXNJbmplY3RpbmcpIHtcbiAgICAvLyBNYXJrIHRoaXMgYXMgYWxyZWFkeSBzcG90dGVkIGluIHRoaXMgcnVudGltZSBpbnN0YW5jZVxuICAgIHJ1bnRpbWVDb2xsaXNpb25zLnB1c2goaG90SUQpO1xuXG4gICAgY29uc3QgcHJldmlvdXNEYXRhID0gY2FjaGVHZXQoaG90SUQpO1xuICAgIGlmIChwcmV2aW91c0RhdGEpIHtcbiAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgIC8vIEdyYWIgbmV3IHByb3BzIGZyb20gb2xkIHNrZXRjaCBpbnN0YW5jZVxuICAgICAgICBjb25zdCBuZXdQcm9wcyA9IGdldFRpbWVQcm9wKHByZXZpb3VzRGF0YS5tYW5hZ2VyLCBzZXR0aW5ncyk7XG4gICAgICAgIC8vIERlc3Ryb3kgdGhlIG9sZCBpbnN0YW5jZVxuICAgICAgICBwcmV2aW91c0RhdGEubWFuYWdlci5kZXN0cm95KCk7XG4gICAgICAgIC8vIFBhc3MgYWxvbmcgbmV3IHByb3BzXG4gICAgICAgIHJldHVybiBuZXdQcm9wcztcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vdmUgYWxvbmcgdGhlIG5leHQgZGF0YS4uLlxuICAgICAgcHJlbG9hZCA9IHByZXZpb3VzRGF0YS5sb2FkLnRoZW4obmV4dCkuY2F0Y2gobmV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZWxvYWQudGhlbihuZXdQcm9wcyA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTa2V0Y2hNYW5hZ2VyKCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoc2tldGNoKSB7XG4gICAgICAvLyBNZXJnZSB3aXRoIGluY29taW5nIGRhdGFcbiAgICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIG5ld1Byb3BzKTtcblxuICAgICAgLy8gQXBwbHkgc2V0dGluZ3MgYW5kIGNyZWF0ZSBhIGNhbnZhc1xuICAgICAgbWFuYWdlci5zZXR1cChzZXR0aW5ncyk7XG5cbiAgICAgIC8vIE1vdW50IHRvIERPTVxuICAgICAgbWFuYWdlci5tb3VudCgpO1xuXG4gICAgICAvLyBsb2FkIHRoZSBza2V0Y2ggZmlyc3RcbiAgICAgIHJlc3VsdCA9IG1hbmFnZXIubG9hZEFuZFJ1bihza2V0Y2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBQcm9taXNlLnJlc29sdmUobWFuYWdlcik7XG4gICAgfVxuICAgIGlmIChpc0luamVjdGluZykge1xuICAgICAgY2FjaGVQdXQoaG90SUQsIHsgbG9hZDogcmVzdWx0LCBtYW5hZ2VyIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbn1cblxuLy8gVE9ETzogRmlndXJlIG91dCBhIG5pY2Ugd2F5IHRvIGV4cG9ydCB0aGluZ3MuXG5jYW52YXNTa2V0Y2guY2FudmFzU2tldGNoID0gY2FudmFzU2tldGNoO1xuY2FudmFzU2tldGNoLlBhcGVyU2l6ZXMgPSBQYXBlclNpemVzO1xuXG5leHBvcnQgZGVmYXVsdCBjYW52YXNTa2V0Y2g7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmaW5lZCgpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdHJldHVybiBhcmd1bWVudHNbaV07XG5cdFx0fVxuXHR9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIHdpZHRoID0gMjU2Oy8vIGVhY2ggUkM0IG91dHB1dCBpcyAwIDw9IHggPCAyNTZcclxudmFyIGNodW5rcyA9IDY7Ly8gYXQgbGVhc3Qgc2l4IFJDNCBvdXRwdXRzIGZvciBlYWNoIGRvdWJsZVxyXG52YXIgZGlnaXRzID0gNTI7Ly8gdGhlcmUgYXJlIDUyIHNpZ25pZmljYW50IGRpZ2l0cyBpbiBhIGRvdWJsZVxyXG52YXIgcG9vbCA9IFtdOy8vIHBvb2w6IGVudHJvcHkgcG9vbCBzdGFydHMgZW1wdHlcclxudmFyIEdMT0JBTCA9IHR5cGVvZiBnbG9iYWwgPT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xyXG5cclxuLy9cclxuLy8gVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlbGF0ZWQgdG8gSUVFRSA3NTQgbGltaXRzLlxyXG4vL1xyXG52YXIgc3RhcnRkZW5vbSA9IE1hdGgucG93KHdpZHRoLCBjaHVua3MpLFxyXG4gICAgc2lnbmlmaWNhbmNlID0gTWF0aC5wb3coMiwgZGlnaXRzKSxcclxuICAgIG92ZXJmbG93ID0gc2lnbmlmaWNhbmNlICogMixcclxuICAgIG1hc2sgPSB3aWR0aCAtIDE7XHJcblxyXG5cclxudmFyIG9sZFJhbmRvbSA9IE1hdGgucmFuZG9tO1xyXG5cclxuLy9cclxuLy8gc2VlZHJhbmRvbSgpXHJcbi8vIFRoaXMgaXMgdGhlIHNlZWRyYW5kb20gZnVuY3Rpb24gZGVzY3JpYmVkIGFib3ZlLlxyXG4vL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHNlZWQsIG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdsb2JhbCA9PT0gdHJ1ZSkge1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSBmYWxzZTtcclxuICAgIE1hdGgucmFuZG9tID0gbW9kdWxlLmV4cG9ydHMoc2VlZCwgb3B0aW9ucyk7XHJcbiAgICBvcHRpb25zLmdsb2JhbCA9IHRydWU7XHJcbiAgICByZXR1cm4gTWF0aC5yYW5kb207XHJcbiAgfVxyXG4gIHZhciB1c2VfZW50cm9weSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW50cm9weSkgfHwgZmFsc2U7XHJcbiAgdmFyIGtleSA9IFtdO1xyXG5cclxuICAvLyBGbGF0dGVuIHRoZSBzZWVkIHN0cmluZyBvciBidWlsZCBvbmUgZnJvbSBsb2NhbCBlbnRyb3B5IGlmIG5lZWRlZC5cclxuICB2YXIgc2hvcnRzZWVkID0gbWl4a2V5KGZsYXR0ZW4oXHJcbiAgICB1c2VfZW50cm9weSA/IFtzZWVkLCB0b3N0cmluZyhwb29sKV0gOlxyXG4gICAgMCBpbiBhcmd1bWVudHMgPyBzZWVkIDogYXV0b3NlZWQoKSwgMyksIGtleSk7XHJcblxyXG4gIC8vIFVzZSB0aGUgc2VlZCB0byBpbml0aWFsaXplIGFuIEFSQzQgZ2VuZXJhdG9yLlxyXG4gIHZhciBhcmM0ID0gbmV3IEFSQzQoa2V5KTtcclxuXHJcbiAgLy8gTWl4IHRoZSByYW5kb21uZXNzIGludG8gYWNjdW11bGF0ZWQgZW50cm9weS5cclxuICBtaXhrZXkodG9zdHJpbmcoYXJjNC5TKSwgcG9vbCk7XHJcblxyXG4gIC8vIE92ZXJyaWRlIE1hdGgucmFuZG9tXHJcblxyXG4gIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHJhbmRvbSBkb3VibGUgaW4gWzAsIDEpIHRoYXQgY29udGFpbnNcclxuICAvLyByYW5kb21uZXNzIGluIGV2ZXJ5IGJpdCBvZiB0aGUgbWFudGlzc2Egb2YgdGhlIElFRUUgNzU0IHZhbHVlLlxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24oKSB7ICAgICAgICAgLy8gQ2xvc3VyZSB0byByZXR1cm4gYSByYW5kb20gZG91YmxlOlxyXG4gICAgdmFyIG4gPSBhcmM0LmcoY2h1bmtzKSwgICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG51bWVyYXRvciBuIDwgMiBeIDQ4XHJcbiAgICAgICAgZCA9IHN0YXJ0ZGVub20sICAgICAgICAgICAgICAgICAvLyAgIGFuZCBkZW5vbWluYXRvciBkID0gMiBeIDQ4LlxyXG4gICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBhbmQgbm8gJ2V4dHJhIGxhc3QgYnl0ZScuXHJcbiAgICB3aGlsZSAobiA8IHNpZ25pZmljYW5jZSkgeyAgICAgICAgICAvLyBGaWxsIHVwIGFsbCBzaWduaWZpY2FudCBkaWdpdHMgYnlcclxuICAgICAgbiA9IChuICsgeCkgKiB3aWR0aDsgICAgICAgICAgICAgIC8vICAgc2hpZnRpbmcgbnVtZXJhdG9yIGFuZFxyXG4gICAgICBkICo9IHdpZHRoOyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBkZW5vbWluYXRvciBhbmQgZ2VuZXJhdGluZyBhXHJcbiAgICAgIHggPSBhcmM0LmcoMSk7ICAgICAgICAgICAgICAgICAgICAvLyAgIG5ldyBsZWFzdC1zaWduaWZpY2FudC1ieXRlLlxyXG4gICAgfVxyXG4gICAgd2hpbGUgKG4gPj0gb3ZlcmZsb3cpIHsgICAgICAgICAgICAgLy8gVG8gYXZvaWQgcm91bmRpbmcgdXAsIGJlZm9yZSBhZGRpbmdcclxuICAgICAgbiAvPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgbGFzdCBieXRlLCBzaGlmdCBldmVyeXRoaW5nXHJcbiAgICAgIGQgLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHJpZ2h0IHVzaW5nIGludGVnZXIgTWF0aCB1bnRpbFxyXG4gICAgICB4ID4+Pj0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3ZSBoYXZlIGV4YWN0bHkgdGhlIGRlc2lyZWQgYml0cy5cclxuICAgIH1cclxuICAgIHJldHVybiAobiArIHgpIC8gZDsgICAgICAgICAgICAgICAgIC8vIEZvcm0gdGhlIG51bWJlciB3aXRoaW4gWzAsIDEpLlxyXG4gIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZXNldEdsb2JhbCA9IGZ1bmN0aW9uICgpIHtcclxuICBNYXRoLnJhbmRvbSA9IG9sZFJhbmRvbTtcclxufTtcclxuXHJcbi8vXHJcbi8vIEFSQzRcclxuLy9cclxuLy8gQW4gQVJDNCBpbXBsZW1lbnRhdGlvbi4gIFRoZSBjb25zdHJ1Y3RvciB0YWtlcyBhIGtleSBpbiB0aGUgZm9ybSBvZlxyXG4vLyBhbiBhcnJheSBvZiBhdCBtb3N0ICh3aWR0aCkgaW50ZWdlcnMgdGhhdCBzaG91bGQgYmUgMCA8PSB4IDwgKHdpZHRoKS5cclxuLy9cclxuLy8gVGhlIGcoY291bnQpIG1ldGhvZCByZXR1cm5zIGEgcHNldWRvcmFuZG9tIGludGVnZXIgdGhhdCBjb25jYXRlbmF0ZXNcclxuLy8gdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGZyb20gQVJDNC4gIEl0cyByZXR1cm4gdmFsdWUgaXMgYSBudW1iZXIgeFxyXG4vLyB0aGF0IGlzIGluIHRoZSByYW5nZSAwIDw9IHggPCAod2lkdGggXiBjb3VudCkuXHJcbi8vXHJcbi8qKiBAY29uc3RydWN0b3IgKi9cclxuZnVuY3Rpb24gQVJDNChrZXkpIHtcclxuICB2YXIgdCwga2V5bGVuID0ga2V5Lmxlbmd0aCxcclxuICAgICAgbWUgPSB0aGlzLCBpID0gMCwgaiA9IG1lLmkgPSBtZS5qID0gMCwgcyA9IG1lLlMgPSBbXTtcclxuXHJcbiAgLy8gVGhlIGVtcHR5IGtleSBbXSBpcyB0cmVhdGVkIGFzIFswXS5cclxuICBpZiAoIWtleWxlbikgeyBrZXkgPSBba2V5bGVuKytdOyB9XHJcblxyXG4gIC8vIFNldCB1cCBTIHVzaW5nIHRoZSBzdGFuZGFyZCBrZXkgc2NoZWR1bGluZyBhbGdvcml0aG0uXHJcbiAgd2hpbGUgKGkgPCB3aWR0aCkge1xyXG4gICAgc1tpXSA9IGkrKztcclxuICB9XHJcbiAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcclxuICAgIHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyBrZXlbaSAlIGtleWxlbl0gKyAodCA9IHNbaV0pKV07XHJcbiAgICBzW2pdID0gdDtcclxuICB9XHJcblxyXG4gIC8vIFRoZSBcImdcIiBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCAoY291bnQpIG91dHB1dHMgYXMgb25lIG51bWJlci5cclxuICAobWUuZyA9IGZ1bmN0aW9uKGNvdW50KSB7XHJcbiAgICAvLyBVc2luZyBpbnN0YW5jZSBtZW1iZXJzIGluc3RlYWQgb2YgY2xvc3VyZSBzdGF0ZSBuZWFybHkgZG91YmxlcyBzcGVlZC5cclxuICAgIHZhciB0LCByID0gMCxcclxuICAgICAgICBpID0gbWUuaSwgaiA9IG1lLmosIHMgPSBtZS5TO1xyXG4gICAgd2hpbGUgKGNvdW50LS0pIHtcclxuICAgICAgdCA9IHNbaSA9IG1hc2sgJiAoaSArIDEpXTtcclxuICAgICAgciA9IHIgKiB3aWR0aCArIHNbbWFzayAmICgoc1tpXSA9IHNbaiA9IG1hc2sgJiAoaiArIHQpXSkgKyAoc1tqXSA9IHQpKV07XHJcbiAgICB9XHJcbiAgICBtZS5pID0gaTsgbWUuaiA9IGo7XHJcbiAgICByZXR1cm4gcjtcclxuICAgIC8vIEZvciByb2J1c3QgdW5wcmVkaWN0YWJpbGl0eSBkaXNjYXJkIGFuIGluaXRpYWwgYmF0Y2ggb2YgdmFsdWVzLlxyXG4gICAgLy8gU2VlIGh0dHA6Ly93d3cucnNhLmNvbS9yc2FsYWJzL25vZGUuYXNwP2lkPTIwMDlcclxuICB9KSh3aWR0aCk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIGZsYXR0ZW4oKVxyXG4vLyBDb252ZXJ0cyBhbiBvYmplY3QgdHJlZSB0byBuZXN0ZWQgYXJyYXlzIG9mIHN0cmluZ3MuXHJcbi8vXHJcbmZ1bmN0aW9uIGZsYXR0ZW4ob2JqLCBkZXB0aCkge1xyXG4gIHZhciByZXN1bHQgPSBbXSwgdHlwID0gKHR5cGVvZiBvYmopWzBdLCBwcm9wO1xyXG4gIGlmIChkZXB0aCAmJiB0eXAgPT0gJ28nKSB7XHJcbiAgICBmb3IgKHByb3AgaW4gb2JqKSB7XHJcbiAgICAgIHRyeSB7IHJlc3VsdC5wdXNoKGZsYXR0ZW4ob2JqW3Byb3BdLCBkZXB0aCAtIDEpKTsgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIChyZXN1bHQubGVuZ3RoID8gcmVzdWx0IDogdHlwID09ICdzJyA/IG9iaiA6IG9iaiArICdcXDAnKTtcclxufVxyXG5cclxuLy9cclxuLy8gbWl4a2V5KClcclxuLy8gTWl4ZXMgYSBzdHJpbmcgc2VlZCBpbnRvIGEga2V5IHRoYXQgaXMgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGFuZFxyXG4vLyByZXR1cm5zIGEgc2hvcnRlbmVkIHN0cmluZyBzZWVkIHRoYXQgaXMgZXF1aXZhbGVudCB0byB0aGUgcmVzdWx0IGtleS5cclxuLy9cclxuZnVuY3Rpb24gbWl4a2V5KHNlZWQsIGtleSkge1xyXG4gIHZhciBzdHJpbmdzZWVkID0gc2VlZCArICcnLCBzbWVhciwgaiA9IDA7XHJcbiAgd2hpbGUgKGogPCBzdHJpbmdzZWVkLmxlbmd0aCkge1xyXG4gICAga2V5W21hc2sgJiBqXSA9XHJcbiAgICAgIG1hc2sgJiAoKHNtZWFyIF49IGtleVttYXNrICYgal0gKiAxOSkgKyBzdHJpbmdzZWVkLmNoYXJDb2RlQXQoaisrKSk7XHJcbiAgfVxyXG4gIHJldHVybiB0b3N0cmluZyhrZXkpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBhdXRvc2VlZCgpXHJcbi8vIFJldHVybnMgYW4gb2JqZWN0IGZvciBhdXRvc2VlZGluZywgdXNpbmcgd2luZG93LmNyeXB0byBpZiBhdmFpbGFibGUuXHJcbi8vXHJcbi8qKiBAcGFyYW0ge1VpbnQ4QXJyYXk9fSBzZWVkICovXHJcbmZ1bmN0aW9uIGF1dG9zZWVkKHNlZWQpIHtcclxuICB0cnkge1xyXG4gICAgR0xPQkFMLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoc2VlZCA9IG5ldyBVaW50OEFycmF5KHdpZHRoKSk7XHJcbiAgICByZXR1cm4gdG9zdHJpbmcoc2VlZCk7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuIFsrbmV3IERhdGUsIEdMT0JBTCwgR0xPQkFMLm5hdmlnYXRvciAmJiBHTE9CQUwubmF2aWdhdG9yLnBsdWdpbnMsXHJcbiAgICAgICAgICAgIEdMT0JBTC5zY3JlZW4sIHRvc3RyaW5nKHBvb2wpXTtcclxuICB9XHJcbn1cclxuXHJcbi8vXHJcbi8vIHRvc3RyaW5nKClcclxuLy8gQ29udmVydHMgYW4gYXJyYXkgb2YgY2hhcmNvZGVzIHRvIGEgc3RyaW5nXHJcbi8vXHJcbmZ1bmN0aW9uIHRvc3RyaW5nKGEpIHtcclxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSgwLCBhKTtcclxufVxyXG5cclxuLy9cclxuLy8gV2hlbiBzZWVkcmFuZG9tLmpzIGlzIGxvYWRlZCwgd2UgaW1tZWRpYXRlbHkgbWl4IGEgZmV3IGJpdHNcclxuLy8gZnJvbSB0aGUgYnVpbHQtaW4gUk5HIGludG8gdGhlIGVudHJvcHkgcG9vbC4gIEJlY2F1c2Ugd2UgZG9cclxuLy8gbm90IHdhbnQgdG8gaW50ZWZlcmUgd2l0aCBkZXRlcm1pbnN0aWMgUFJORyBzdGF0ZSBsYXRlcixcclxuLy8gc2VlZHJhbmRvbSB3aWxsIG5vdCBjYWxsIE1hdGgucmFuZG9tIG9uIGl0cyBvd24gYWdhaW4gYWZ0ZXJcclxuLy8gaW5pdGlhbGl6YXRpb24uXHJcbi8vXHJcbm1peGtleShNYXRoLnJhbmRvbSgpLCBwb29sKTtcclxuIiwiLypcbiAqIEEgZmFzdCBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHNpbXBsZXggbm9pc2UgYnkgSm9uYXMgV2FnbmVyXG5cbkJhc2VkIG9uIGEgc3BlZWQtaW1wcm92ZWQgc2ltcGxleCBub2lzZSBhbGdvcml0aG0gZm9yIDJELCAzRCBhbmQgNEQgaW4gSmF2YS5cbldoaWNoIGlzIGJhc2VkIG9uIGV4YW1wbGUgY29kZSBieSBTdGVmYW4gR3VzdGF2c29uIChzdGVndUBpdG4ubGl1LnNlKS5cbldpdGggT3B0aW1pc2F0aW9ucyBieSBQZXRlciBFYXN0bWFuIChwZWFzdG1hbkBkcml6emxlLnN0YW5mb3JkLmVkdSkuXG5CZXR0ZXIgcmFuayBvcmRlcmluZyBtZXRob2QgYnkgU3RlZmFuIEd1c3RhdnNvbiBpbiAyMDEyLlxuXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTggSm9uYXMgV2FnbmVyXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIEYyID0gMC41ICogKE1hdGguc3FydCgzLjApIC0gMS4wKTtcbiAgdmFyIEcyID0gKDMuMCAtIE1hdGguc3FydCgzLjApKSAvIDYuMDtcbiAgdmFyIEYzID0gMS4wIC8gMy4wO1xuICB2YXIgRzMgPSAxLjAgLyA2LjA7XG4gIHZhciBGNCA9IChNYXRoLnNxcnQoNS4wKSAtIDEuMCkgLyA0LjA7XG4gIHZhciBHNCA9ICg1LjAgLSBNYXRoLnNxcnQoNS4wKSkgLyAyMC4wO1xuXG4gIGZ1bmN0aW9uIFNpbXBsZXhOb2lzZShyYW5kb21PclNlZWQpIHtcbiAgICB2YXIgcmFuZG9tO1xuICAgIGlmICh0eXBlb2YgcmFuZG9tT3JTZWVkID09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJhbmRvbSA9IHJhbmRvbU9yU2VlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZG9tT3JTZWVkKSB7XG4gICAgICByYW5kb20gPSBhbGVhKHJhbmRvbU9yU2VlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICAgIH1cbiAgICB0aGlzLnAgPSBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKTtcbiAgICB0aGlzLnBlcm0gPSBuZXcgVWludDhBcnJheSg1MTIpO1xuICAgIHRoaXMucGVybU1vZDEyID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUxMjsgaSsrKSB7XG4gICAgICB0aGlzLnBlcm1baV0gPSB0aGlzLnBbaSAmIDI1NV07XG4gICAgICB0aGlzLnBlcm1Nb2QxMltpXSA9IHRoaXMucGVybVtpXSAlIDEyO1xuICAgIH1cblxuICB9XG4gIFNpbXBsZXhOb2lzZS5wcm90b3R5cGUgPSB7XG4gICAgZ3JhZDM6IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDEsIDAsXG4gICAgICAtMSwgMSwgMCxcbiAgICAgIDEsIC0xLCAwLFxuXG4gICAgICAtMSwgLTEsIDAsXG4gICAgICAxLCAwLCAxLFxuICAgICAgLTEsIDAsIDEsXG5cbiAgICAgIDEsIDAsIC0xLFxuICAgICAgLTEsIDAsIC0xLFxuICAgICAgMCwgMSwgMSxcblxuICAgICAgMCwgLTEsIDEsXG4gICAgICAwLCAxLCAtMSxcbiAgICAgIDAsIC0xLCAtMV0pLFxuICAgIGdyYWQ0OiBuZXcgRmxvYXQzMkFycmF5KFswLCAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSxcbiAgICAgIDAsIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSxcbiAgICAgIDEsIDAsIDEsIDEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgMSwgMSwgMCwgLTEsIC0xLFxuICAgICAgLTEsIDAsIDEsIDEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLCAxLCAtMSwgMCwgLTEsIC0xLFxuICAgICAgMSwgMSwgMCwgMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAxLCAxLCAtMSwgMCwgLTEsXG4gICAgICAtMSwgMSwgMCwgMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsIDAsIDEsIC0xLCAtMSwgMCwgLTEsXG4gICAgICAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSwgMCxcbiAgICAgIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSwgMF0pLFxuICAgIG5vaXNlMkQ6IGZ1bmN0aW9uKHhpbiwgeWluKSB7XG4gICAgICB2YXIgcGVybU1vZDEyID0gdGhpcy5wZXJtTW9kMTI7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkMyA9IHRoaXMuZ3JhZDM7XG4gICAgICB2YXIgbjAgPSAwOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciBuMSA9IDA7XG4gICAgICB2YXIgbjIgPSAwO1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluKSAqIEYyOyAvLyBIYWlyeSBmYWN0b3IgZm9yIDJEXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeGluICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeWluICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaikgKiBHMjtcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSkgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIHgwID0geGluIC0gWDA7IC8vIFRoZSB4LHkgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIC8vIEZvciB0aGUgMkQgY2FzZSwgdGhlIHNpbXBsZXggc2hhcGUgaXMgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUuXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW4uXG4gICAgICB2YXIgaTEsIGoxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgKG1pZGRsZSkgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaikgY29vcmRzXG4gICAgICBpZiAoeDAgPiB5MCkge1xuICAgICAgICBpMSA9IDE7XG4gICAgICAgIGoxID0gMDtcbiAgICAgIH0gLy8gbG93ZXIgdHJpYW5nbGUsIFhZIG9yZGVyOiAoMCwwKS0+KDEsMCktPigxLDEpXG4gICAgICBlbHNlIHtcbiAgICAgICAgaTEgPSAwO1xuICAgICAgICBqMSA9IDE7XG4gICAgICB9IC8vIHVwcGVyIHRyaWFuZ2xlLCBZWCBvcmRlcjogKDAsMCktPigwLDEpLT4oMSwxKVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDApIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoMS1jLC1jKSBpbiAoeCx5KSwgYW5kXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMSkgaW4gKGksaikgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMpIGluICh4LHkpLCB3aGVyZVxuICAgICAgLy8gYyA9ICgzLXNxcnQoMykpLzZcbiAgICAgIHZhciB4MSA9IHgwIC0gaTEgKyBHMjsgLy8gT2Zmc2V0cyBmb3IgbWlkZGxlIGNvcm5lciBpbiAoeCx5KSB1bnNrZXdlZCBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMjtcbiAgICAgIHZhciB4MiA9IHgwIC0gMS4wICsgMi4wICogRzI7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkpIHVuc2tld2VkIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSAxLjAgKyAyLjAgKiBHMjtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgdGhyZWUgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY29udHJpYnV0aW9uIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNSAtIHgwICogeDAgLSB5MCAqIHkwO1xuICAgICAgaWYgKHQwID49IDApIHtcbiAgICAgICAgdmFyIGdpMCA9IHBlcm1Nb2QxMltpaSArIHBlcm1bampdXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCk7IC8vICh4LHkpIG9mIGdyYWQzIHVzZWQgZm9yIDJEIGdyYWRpZW50XG4gICAgICB9XG4gICAgICB2YXIgdDEgPSAwLjUgLSB4MSAqIHgxIC0geTEgKiB5MTtcbiAgICAgIGlmICh0MSA+PSAwKSB7XG4gICAgICAgIHZhciBnaTEgPSBwZXJtTW9kMTJbaWkgKyBpMSArIHBlcm1bamogKyBqMV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNSAtIHgyICogeDIgLSB5MiAqIHkyO1xuICAgICAgaWYgKHQyID49IDApIHtcbiAgICAgICAgdmFyIGdpMiA9IHBlcm1Nb2QxMltpaSArIDEgKyBwZXJtW2pqICsgMV1dICogMztcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkM1tnaTJdICogeDIgKyBncmFkM1tnaTIgKyAxXSAqIHkyKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgc2NhbGVkIHRvIHJldHVybiB2YWx1ZXMgaW4gdGhlIGludGVydmFsIFstMSwxXS5cbiAgICAgIHJldHVybiA3MC4wICogKG4wICsgbjEgKyBuMik7XG4gICAgfSxcbiAgICAvLyAzRCBzaW1wbGV4IG5vaXNlXG4gICAgbm9pc2UzRDogZnVuY3Rpb24oeGluLCB5aW4sIHppbikge1xuICAgICAgdmFyIHBlcm1Nb2QxMiA9IHRoaXMucGVybU1vZDEyO1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDMgPSB0aGlzLmdyYWQzO1xuICAgICAgdmFyIG4wLCBuMSwgbjIsIG4zOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZvdXIgY29ybmVyc1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluICsgemluKSAqIEYzOyAvLyBWZXJ5IG5pY2UgYW5kIHNpbXBsZSBza2V3IGZhY3RvciBmb3IgM0RcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4aW4gKyBzKTtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcih5aW4gKyBzKTtcbiAgICAgIHZhciBrID0gTWF0aC5mbG9vcih6aW4gKyBzKTtcbiAgICAgIHZhciB0ID0gKGkgKyBqICsgaykgKiBHMztcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSx6KSBzcGFjZVxuICAgICAgdmFyIFkwID0gaiAtIHQ7XG4gICAgICB2YXIgWjAgPSBrIC0gdDtcbiAgICAgIHZhciB4MCA9IHhpbiAtIFgwOyAvLyBUaGUgeCx5LHogZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIHZhciB6MCA9IHppbiAtIFowO1xuICAgICAgLy8gRm9yIHRoZSAzRCBjYXNlLCB0aGUgc2ltcGxleCBzaGFwZSBpcyBhIHNsaWdodGx5IGlycmVndWxhciB0ZXRyYWhlZHJvbi5cbiAgICAgIC8vIERldGVybWluZSB3aGljaCBzaW1wbGV4IHdlIGFyZSBpbi5cbiAgICAgIHZhciBpMSwgajEsIGsxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaixrKSBjb29yZHNcbiAgICAgIHZhciBpMiwgajIsIGsyOyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgb2Ygc2ltcGxleCBpbiAoaSxqLGspIGNvb3Jkc1xuICAgICAgaWYgKHgwID49IHkwKSB7XG4gICAgICAgIGlmICh5MCA+PSB6MCkge1xuICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAwO1xuICAgICAgICB9IC8vIFggWSBaIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwID49IHowKSB7XG4gICAgICAgICAgaTEgPSAxO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWCBaIFkgb3JkZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDE7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWiBYIFkgb3JkZXJcbiAgICAgIH1cbiAgICAgIGVsc2UgeyAvLyB4MDx5MFxuICAgICAgICBpZiAoeTAgPCB6MCkge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAxO1xuICAgICAgICAgIGkyID0gMDtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFogWSBYIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwIDwgejApIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBZIFogWCBvcmRlclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMDtcbiAgICAgICAgfSAvLyBZIFggWiBvcmRlclxuICAgICAgfVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDAsMCkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKDEtYywtYywtYykgaW4gKHgseSx6KSxcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwxLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMsLWMpIGluICh4LHkseiksIGFuZFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDAsMSkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKC1jLC1jLDEtYykgaW4gKHgseSx6KSwgd2hlcmVcbiAgICAgIC8vIGMgPSAxLzYuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzM7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMztcbiAgICAgIHZhciB6MSA9IHowIC0gazEgKyBHMztcbiAgICAgIHZhciB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHMzsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTIgPSB5MCAtIGoyICsgMi4wICogRzM7XG4gICAgICB2YXIgejIgPSB6MCAtIGsyICsgMi4wICogRzM7XG4gICAgICB2YXIgeDMgPSB4MCAtIDEuMCArIDMuMCAqIEczOyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkzID0geTAgLSAxLjAgKyAzLjAgKiBHMztcbiAgICAgIHZhciB6MyA9IHowIC0gMS4wICsgMy4wICogRzM7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZvdXIgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIHZhciBrayA9IGsgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MDtcbiAgICAgIGlmICh0MCA8IDApIG4wID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqICsgcGVybVtra11dXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCArIGdyYWQzW2dpMCArIDJdICogejApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxO1xuICAgICAgaWYgKHQxIDwgMCkgbjEgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMSA9IHBlcm1Nb2QxMltpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxXV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxICsgZ3JhZDNbZ2kxICsgMl0gKiB6MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjYgLSB4MiAqIHgyIC0geTIgKiB5MiAtIHoyICogejI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gcGVybU1vZDEyW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazJdXV0gKiAzO1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQzW2dpMl0gKiB4MiArIGdyYWQzW2dpMiArIDFdICogeTIgKyBncmFkM1tnaTIgKyAyXSAqIHoyKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MyA9IDAuNiAtIHgzICogeDMgLSB5MyAqIHkzIC0gejMgKiB6MztcbiAgICAgIGlmICh0MyA8IDApIG4zID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTMgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMV1dXSAqIDM7XG4gICAgICAgIHQzICo9IHQzO1xuICAgICAgICBuMyA9IHQzICogdDMgKiAoZ3JhZDNbZ2kzXSAqIHgzICsgZ3JhZDNbZ2kzICsgMV0gKiB5MyArIGdyYWQzW2dpMyArIDJdICogejMpO1xuICAgICAgfVxuICAgICAgLy8gQWRkIGNvbnRyaWJ1dGlvbnMgZnJvbSBlYWNoIGNvcm5lciB0byBnZXQgdGhlIGZpbmFsIG5vaXNlIHZhbHVlLlxuICAgICAgLy8gVGhlIHJlc3VsdCBpcyBzY2FsZWQgdG8gc3RheSBqdXN0IGluc2lkZSBbLTEsMV1cbiAgICAgIHJldHVybiAzMi4wICogKG4wICsgbjEgKyBuMiArIG4zKTtcbiAgICB9LFxuICAgIC8vIDREIHNpbXBsZXggbm9pc2UsIGJldHRlciBzaW1wbGV4IHJhbmsgb3JkZXJpbmcgbWV0aG9kIDIwMTItMDMtMDlcbiAgICBub2lzZTREOiBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkNCA9IHRoaXMuZ3JhZDQ7XG5cbiAgICAgIHZhciBuMCwgbjEsIG4yLCBuMywgbjQ7IC8vIE5vaXNlIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICAvLyBTa2V3IHRoZSAoeCx5LHosdykgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGNlbGwgb2YgMjQgc2ltcGxpY2VzIHdlJ3JlIGluXG4gICAgICB2YXIgcyA9ICh4ICsgeSArIHogKyB3KSAqIEY0OyAvLyBGYWN0b3IgZm9yIDREIHNrZXdpbmdcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4ICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeSArIHMpO1xuICAgICAgdmFyIGsgPSBNYXRoLmZsb29yKHogKyBzKTtcbiAgICAgIHZhciBsID0gTWF0aC5mbG9vcih3ICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaiArIGsgKyBsKSAqIEc0OyAvLyBGYWN0b3IgZm9yIDREIHVuc2tld2luZ1xuICAgICAgdmFyIFgwID0gaSAtIHQ7IC8vIFVuc2tldyB0aGUgY2VsbCBvcmlnaW4gYmFjayB0byAoeCx5LHosdykgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIFowID0gayAtIHQ7XG4gICAgICB2YXIgVzAgPSBsIC0gdDtcbiAgICAgIHZhciB4MCA9IHggLSBYMDsgLy8gVGhlIHgseSx6LHcgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5IC0gWTA7XG4gICAgICB2YXIgejAgPSB6IC0gWjA7XG4gICAgICB2YXIgdzAgPSB3IC0gVzA7XG4gICAgICAvLyBGb3IgdGhlIDREIGNhc2UsIHRoZSBzaW1wbGV4IGlzIGEgNEQgc2hhcGUgSSB3b24ndCBldmVuIHRyeSB0byBkZXNjcmliZS5cbiAgICAgIC8vIFRvIGZpbmQgb3V0IHdoaWNoIG9mIHRoZSAyNCBwb3NzaWJsZSBzaW1wbGljZXMgd2UncmUgaW4sIHdlIG5lZWQgdG9cbiAgICAgIC8vIGRldGVybWluZSB0aGUgbWFnbml0dWRlIG9yZGVyaW5nIG9mIHgwLCB5MCwgejAgYW5kIHcwLlxuICAgICAgLy8gU2l4IHBhaXItd2lzZSBjb21wYXJpc29ucyBhcmUgcGVyZm9ybWVkIGJldHdlZW4gZWFjaCBwb3NzaWJsZSBwYWlyXG4gICAgICAvLyBvZiB0aGUgZm91ciBjb29yZGluYXRlcywgYW5kIHRoZSByZXN1bHRzIGFyZSB1c2VkIHRvIHJhbmsgdGhlIG51bWJlcnMuXG4gICAgICB2YXIgcmFua3ggPSAwO1xuICAgICAgdmFyIHJhbmt5ID0gMDtcbiAgICAgIHZhciByYW5reiA9IDA7XG4gICAgICB2YXIgcmFua3cgPSAwO1xuICAgICAgaWYgKHgwID4geTApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt5Kys7XG4gICAgICBpZiAoeDAgPiB6MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3orKztcbiAgICAgIGlmICh4MCA+IHcwKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgaWYgKHkwID4gejApIHJhbmt5Kys7XG4gICAgICBlbHNlIHJhbmt6Kys7XG4gICAgICBpZiAoeTAgPiB3MCkgcmFua3krKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIGlmICh6MCA+IHcwKSByYW5reisrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgdmFyIGkxLCBqMSwgazEsIGwxOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgc2Vjb25kIHNpbXBsZXggY29ybmVyXG4gICAgICB2YXIgaTIsIGoyLCBrMiwgbDI7IC8vIFRoZSBpbnRlZ2VyIG9mZnNldHMgZm9yIHRoZSB0aGlyZCBzaW1wbGV4IGNvcm5lclxuICAgICAgdmFyIGkzLCBqMywgazMsIGwzOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgZm91cnRoIHNpbXBsZXggY29ybmVyXG4gICAgICAvLyBzaW1wbGV4W2NdIGlzIGEgNC12ZWN0b3Igd2l0aCB0aGUgbnVtYmVycyAwLCAxLCAyIGFuZCAzIGluIHNvbWUgb3JkZXIuXG4gICAgICAvLyBNYW55IHZhbHVlcyBvZiBjIHdpbGwgbmV2ZXIgb2NjdXIsIHNpbmNlIGUuZy4geD55Pno+dyBtYWtlcyB4PHosIHk8dyBhbmQgeDx3XG4gICAgICAvLyBpbXBvc3NpYmxlLiBPbmx5IHRoZSAyNCBpbmRpY2VzIHdoaWNoIGhhdmUgbm9uLXplcm8gZW50cmllcyBtYWtlIGFueSBzZW5zZS5cbiAgICAgIC8vIFdlIHVzZSBhIHRocmVzaG9sZGluZyB0byBzZXQgdGhlIGNvb3JkaW5hdGVzIGluIHR1cm4gZnJvbSB0aGUgbGFyZ2VzdCBtYWduaXR1ZGUuXG4gICAgICAvLyBSYW5rIDMgZGVub3RlcyB0aGUgbGFyZ2VzdCBjb29yZGluYXRlLlxuICAgICAgaTEgPSByYW5reCA+PSAzID8gMSA6IDA7XG4gICAgICBqMSA9IHJhbmt5ID49IDMgPyAxIDogMDtcbiAgICAgIGsxID0gcmFua3ogPj0gMyA/IDEgOiAwO1xuICAgICAgbDEgPSByYW5rdyA+PSAzID8gMSA6IDA7XG4gICAgICAvLyBSYW5rIDIgZGVub3RlcyB0aGUgc2Vjb25kIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkyID0gcmFua3ggPj0gMiA/IDEgOiAwO1xuICAgICAgajIgPSByYW5reSA+PSAyID8gMSA6IDA7XG4gICAgICBrMiA9IHJhbmt6ID49IDIgPyAxIDogMDtcbiAgICAgIGwyID0gcmFua3cgPj0gMiA/IDEgOiAwO1xuICAgICAgLy8gUmFuayAxIGRlbm90ZXMgdGhlIHNlY29uZCBzbWFsbGVzdCBjb29yZGluYXRlLlxuICAgICAgaTMgPSByYW5reCA+PSAxID8gMSA6IDA7XG4gICAgICBqMyA9IHJhbmt5ID49IDEgPyAxIDogMDtcbiAgICAgIGszID0gcmFua3ogPj0gMSA/IDEgOiAwO1xuICAgICAgbDMgPSByYW5rdyA+PSAxID8gMSA6IDA7XG4gICAgICAvLyBUaGUgZmlmdGggY29ybmVyIGhhcyBhbGwgY29vcmRpbmF0ZSBvZmZzZXRzID0gMSwgc28gbm8gbmVlZCB0byBjb21wdXRlIHRoYXQuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzQ7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkxID0geTAgLSBqMSArIEc0O1xuICAgICAgdmFyIHoxID0gejAgLSBrMSArIEc0O1xuICAgICAgdmFyIHcxID0gdzAgLSBsMSArIEc0O1xuICAgICAgdmFyIHgyID0geDAgLSBpMiArIDIuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSBqMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHoyID0gejAgLSBrMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHcyID0gdzAgLSBsMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHgzID0geDAgLSBpMyArIDMuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciBmb3VydGggY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MyA9IHkwIC0gajMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB6MyA9IHowIC0gazMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB3MyA9IHcwIC0gbDMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB4NCA9IHgwIC0gMS4wICsgNC4wICogRzQ7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5NCA9IHkwIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICB2YXIgejQgPSB6MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgdmFyIHc0ID0gdzAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgZml2ZSBzaW1wbGV4IGNvcm5lcnNcbiAgICAgIHZhciBpaSA9IGkgJiAyNTU7XG4gICAgICB2YXIgamogPSBqICYgMjU1O1xuICAgICAgdmFyIGtrID0gayAmIDI1NTtcbiAgICAgIHZhciBsbCA9IGwgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmaXZlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MCAtIHcwICogdzA7XG4gICAgICBpZiAodDAgPCAwKSBuMCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kwID0gKHBlcm1baWkgKyBwZXJtW2pqICsgcGVybVtrayArIHBlcm1bbGxdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDAgKj0gdDA7XG4gICAgICAgIG4wID0gdDAgKiB0MCAqIChncmFkNFtnaTBdICogeDAgKyBncmFkNFtnaTAgKyAxXSAqIHkwICsgZ3JhZDRbZ2kwICsgMl0gKiB6MCArIGdyYWQ0W2dpMCArIDNdICogdzApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxIC0gdzEgKiB3MTtcbiAgICAgIGlmICh0MSA8IDApIG4xID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTEgPSAocGVybVtpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxICsgcGVybVtsbCArIGwxXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDRbZ2kxXSAqIHgxICsgZ3JhZDRbZ2kxICsgMV0gKiB5MSArIGdyYWQ0W2dpMSArIDJdICogejEgKyBncmFkNFtnaTEgKyAzXSAqIHcxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNiAtIHgyICogeDIgLSB5MiAqIHkyIC0gejIgKiB6MiAtIHcyICogdzI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gKHBlcm1baWkgKyBpMiArIHBlcm1bamogKyBqMiArIHBlcm1ba2sgKyBrMiArIHBlcm1bbGwgKyBsMl1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQ0W2dpMl0gKiB4MiArIGdyYWQ0W2dpMiArIDFdICogeTIgKyBncmFkNFtnaTIgKyAyXSAqIHoyICsgZ3JhZDRbZ2kyICsgM10gKiB3Mik7XG4gICAgICB9XG4gICAgICB2YXIgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejMgLSB3MyAqIHczO1xuICAgICAgaWYgKHQzIDwgMCkgbjMgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMyA9IChwZXJtW2lpICsgaTMgKyBwZXJtW2pqICsgajMgKyBwZXJtW2trICsgazMgKyBwZXJtW2xsICsgbDNdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDMgKj0gdDM7XG4gICAgICAgIG4zID0gdDMgKiB0MyAqIChncmFkNFtnaTNdICogeDMgKyBncmFkNFtnaTMgKyAxXSAqIHkzICsgZ3JhZDRbZ2kzICsgMl0gKiB6MyArIGdyYWQ0W2dpMyArIDNdICogdzMpO1xuICAgICAgfVxuICAgICAgdmFyIHQ0ID0gMC42IC0geDQgKiB4NCAtIHk0ICogeTQgLSB6NCAqIHo0IC0gdzQgKiB3NDtcbiAgICAgIGlmICh0NCA8IDApIG40ID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTQgPSAocGVybVtpaSArIDEgKyBwZXJtW2pqICsgMSArIHBlcm1ba2sgKyAxICsgcGVybVtsbCArIDFdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDQgKj0gdDQ7XG4gICAgICAgIG40ID0gdDQgKiB0NCAqIChncmFkNFtnaTRdICogeDQgKyBncmFkNFtnaTQgKyAxXSAqIHk0ICsgZ3JhZDRbZ2k0ICsgMl0gKiB6NCArIGdyYWQ0W2dpNCArIDNdICogdzQpO1xuICAgICAgfVxuICAgICAgLy8gU3VtIHVwIGFuZCBzY2FsZSB0aGUgcmVzdWx0IHRvIGNvdmVyIHRoZSByYW5nZSBbLTEsMV1cbiAgICAgIHJldHVybiAyNy4wICogKG4wICsgbjEgKyBuMiArIG4zICsgbjQpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKSB7XG4gICAgdmFyIGk7XG4gICAgdmFyIHAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgcFtpXSA9IGk7XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykge1xuICAgICAgdmFyIHIgPSBpICsgfn4ocmFuZG9tKCkgKiAoMjU2IC0gaSkpO1xuICAgICAgdmFyIGF1eCA9IHBbaV07XG4gICAgICBwW2ldID0gcFtyXTtcbiAgICAgIHBbcl0gPSBhdXg7XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9XG4gIFNpbXBsZXhOb2lzZS5fYnVpbGRQZXJtdXRhdGlvblRhYmxlID0gYnVpbGRQZXJtdXRhdGlvblRhYmxlO1xuXG4gIGZ1bmN0aW9uIGFsZWEoKSB7XG4gICAgLy8gSm9oYW5uZXMgQmFhZ8O4ZSA8YmFhZ29lQGJhYWdvZS5jb20+LCAyMDEwXG4gICAgdmFyIHMwID0gMDtcbiAgICB2YXIgczEgPSAwO1xuICAgIHZhciBzMiA9IDA7XG4gICAgdmFyIGMgPSAxO1xuXG4gICAgdmFyIG1hc2ggPSBtYXNoZXIoKTtcbiAgICBzMCA9IG1hc2goJyAnKTtcbiAgICBzMSA9IG1hc2goJyAnKTtcbiAgICBzMiA9IG1hc2goJyAnKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzMCAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczAgPCAwKSB7XG4gICAgICAgIHMwICs9IDE7XG4gICAgICB9XG4gICAgICBzMSAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczEgPCAwKSB7XG4gICAgICAgIHMxICs9IDE7XG4gICAgICB9XG4gICAgICBzMiAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczIgPCAwKSB7XG4gICAgICAgIHMyICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIG1hc2ggPSBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gMjA5MTYzOSAqIHMwICsgYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXG4gICAgICBzMCA9IHMxO1xuICAgICAgczEgPSBzMjtcbiAgICAgIHJldHVybiBzMiA9IHQgLSAoYyA9IHQgfCAwKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1hc2hlcigpIHtcbiAgICB2YXIgbiA9IDB4ZWZjODI0OWQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbiArPSBkYXRhLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHZhciBoID0gMC4wMjUxOTYwMzI4MjQxNjkzOCAqIG47XG4gICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICBoIC09IG47XG4gICAgICAgIGggKj0gbjtcbiAgICAgICAgbiA9IGggPj4+IDA7XG4gICAgICAgIGggLT0gbjtcbiAgICAgICAgbiArPSBoICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcbiAgICAgIH1cbiAgICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICAgIH07XG4gIH1cblxuICAvLyBhbWRcbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnICYmIGRlZmluZS5hbWQpIGRlZmluZShmdW5jdGlvbigpIHtyZXR1cm4gU2ltcGxleE5vaXNlO30pO1xuICAvLyBjb21tb24ganNcbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgZXhwb3J0cy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIGJyb3dzZXJcbiAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHdpbmRvdy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIG5vZGVqc1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IFNpbXBsZXhOb2lzZTtcbiAgfVxuXG59KSgpO1xuIiwiY29uc3QgY2FudmFzU2tldGNoID0gcmVxdWlyZSgnY2FudmFzLXNrZXRjaCcpO1xuY29uc3QgcmFuZG9tID0gcmVxdWlyZSgnY2FudmFzLXNrZXRjaC11dGlsL3JhbmRvbScpO1xuY29uc3QgbWF0aCA9IHJlcXVpcmUoJ2NhbnZhcy1za2V0Y2gtdXRpbC9tYXRoJyk7XG4vLyBjb25zdCBUd2Vha3BhbmUgPSByZXF1aXJlKCdUd2Vha3BhbmUnKTtcblxuY29uc3Qgc2V0dGluZ3MgPSB7XG4gIGRpbWVuc2lvbnM6IFsgd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodF0sXG4gIGFuaW1hdGU6IHRydWUsXG4gIHNjYWxlVG9GaXQ6IGZhbHNlLFxufTtcbmZ1bmN0aW9uIGNoYW5nZUJhY2tncm91bmQoY29sb3IpIHtcbiAgIGRvY3VtZW50LmJvZHkuc3R5bGUuYmFja2dyb3VuZCA9IGNvbG9yO1xufVxuY2hhbmdlQmFja2dyb3VuZCgnYmxhY2snKTtcbmRvY3VtZW50LnRpdGxlID0gXCJXQVZFXCI7XG5jb25zdCByYW5kb21Db2wgPSBNYXRoLmZsb29yKHJhbmRvbS5yYW5nZSgyLDEyKSk7XG5jb25zdCByYW5kb21Sb3cgPSBNYXRoLmZsb29yKHJhbmRvbS5yYW5nZSgyLDEyKSk7XG5jb25zdCByYW5kb21GcmVxID0gcmFuZG9tLnJhbmdlKDAuMDAwNSwgMC4wMDUpO1xuY29uc3QgcGFyYW1zID17XG4gIGNvbHMgOiByYW5kb21Db2wsXG4gIHJvd3MgOiByYW5kb21Sb3csXG4gIHNjYWxlTWluOiAxLFxuICBzY2FsZU1heDozMCxcbiAgZnJlcSA6IHJhbmRvbUZyZXEsXG4gIGFtcDogMSxcbiAgZnJhbWU6IDAsXG4gIGFuaW1hdGU6IHRydWUsXG4gIGxpbmVDYXA6ICdidXR0J1xufTtcbmNvbnN0IHNrZXRjaCA9ICgpID0+IHtcbiAgcmV0dXJuICh7IGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsZnJhbWUgfSkgPT4ge1xuICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ2JsYWNrJztcbiAgICBjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgY29uc3QgY29scyA9IHBhcmFtcy5jb2xzO1xuICAgIGNvbnN0IHJvd3MgPSBwYXJhbXMucm93cztcbiAgICBjb25zdCBudW1DZWxscyA9IGNvbHMqcm93cztcbiAgICBjb25zdCBncmlkVyA9IDAuOTUgKiB3aWR0aDtcbiAgICBjb25zdCBncmlkSCA9IDAuOTUgKiBoZWlnaHQ7XG4gICAgY29uc3QgY2VsbFcgPSBncmlkVy9jb2xzO1xuICAgIGNvbnN0IGNlbGxIID0gZ3JpZEgvcm93cztcbiAgICBjb25zdCBtYXJnWCA9IDAuNSAqICh3aWR0aC1ncmlkVyk7XG4gICAgY29uc3QgbWFyZ1kgPSAwLjUgKiAoaGVpZ2h0LWdyaWRIKTtcblxuICAgIGZvcihsZXQgaT0wOyBpPG51bUNlbGxzIDsgaSsrKXtcbiAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSAneWVsbG93JztcblxuICAgICAgY29uc3QgY29sID0gaSAlIGNvbHM7XG4gICAgICBjb25zdCByb3cgPSBNYXRoLmZsb29yKGkvY29scyk7XG4gICAgICBjb25zdCB4ID0gY29sICogY2VsbFc7XG4gICAgICBjb25zdCB5ID0gcm93ICogY2VsbEg7XG4gICAgICBjb25zdCB3ID0gMC44ICogY2VsbFc7XG4gICAgICBjb25zdCBoID0gMC44ICogY2VsbEg7XG4gICAgICBjb25zdCBmID0gcGFyYW1zLmFuaW1hdGUgPyBmcmFtZSA6IHBhcmFtcy5mcmFtZTtcbiAgICAgIC8vY29uc3QgbiA9IHJhbmRvbS5ub2lzZTJEKHgtZnJhbWUqcGFyYW1zLnNwZWVkKjIwLHkrZnJhbWUqcGFyYW1zLnNwZWVkKjIwLCBwYXJhbXMuYW1wKTtcbiAgICAgIGNvbnN0IG4gPSByYW5kb20ubm9pc2UzRCh4LHksIGYqMTAscGFyYW1zLmZyZXEsIHBhcmFtcy5hbXApO1xuICAgICAgY29uc3Qgc2NhbGUgPSBtYXRoLm1hcFJhbmdlKG4sLTEsMSxwYXJhbXMuc2NhbGVNaW4scGFyYW1zLnNjYWxlTWF4KTtcblxuICAgICAgY29uc3QgYW5nbGUgPSBuKiBNYXRoLlBJKjAuMjtcblxuICAgICAgY29udGV4dC5zYXZlKCk7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZSh4LHkpO1xuICAgICAgY29udGV4dC50cmFuc2xhdGUobWFyZ1gsbWFyZ1kpO1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoY2VsbFcqMC41LCBjZWxsSCowLjUpO1xuICAgICAgY29udGV4dC5yb3RhdGUoYW5nbGUpO1xuICAgICAgLy9jb250ZXh0LnNjYWxlKHNjYWxlLHNjYWxlKTtcbiAgICAgIGNvbnRleHQubGluZVdpZHRoID0gc2NhbGU7XG4gICAgICBjb250ZXh0LmxpbmVDYXAgPSBwYXJhbXMubGluZUNhcDtcbiAgICAgIGNvbnRleHQuYmVnaW5QYXRoKCk7XG4gICAgICBjb250ZXh0Lm1vdmVUbyh3ICogLTAuNSwgMCk7XG4gICAgICBjb250ZXh0LmxpbmVUbyh3ICogMC41LCAwKTtcbiAgICAgIGNvbnRleHQuc3Ryb2tlKCk7XG5cbiAgICAgIGNvbnRleHQucmVzdG9yZSgpO1xuICAgIH1cblxuICB9O1xufTtcblxuLy8gY29uc3QgY3JlYXRlUGFuZSA9ICgpID0+e1xuLy8gICBjb25zdCBwYW5lID0gbmV3IFR3ZWFrcGFuZS5QYW5lKCk7XG4vLyAgIGxldCBmb2xkZXI7XG4vLyAgIGZvbGRlciA9IHBhbmUuYWRkRm9sZGVyKHt0aXRsZTogJ0dyaWQnfSk7XG4vLyAgIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsJ2xpbmVDYXAnLHtvcHRpb25zOntidXR0OididXR0Jywgcm91bmQ6ICdyb3VuZCcsIHNxdWFyZSA6J3NxdWFyZSd9fSk7XG4vLyAgIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdjb2xzJywge21pbjogMiAsIG1heDogNTAgLCBzdGVwOiAxfSk7XG4vLyAgIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdyb3dzJywge21pbjogMiAsIG1heDogNTAgLCBzdGVwOiAxfSk7XG4vLyAgIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdzY2FsZU1pbicsIHttaW46IDEgLCBtYXg6IDEwMH0pO1xuLy8gICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnc2NhbGVNYXgnLCB7bWluOiAxICwgbWF4OiAxMDB9KTtcblxuLy8gICBmb2xkZXIgPSBwYW5lLmFkZEZvbGRlcih7dGl0bGU6ICdOb2lzZSd9KTtcbi8vICAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ2ZyZXEnLCB7bWluOiAtMC4wMSAsIG1heDogMC4wMX0pO1xuLy8gICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnYW1wJywge21pbjogLTIgLCBtYXg6IDJ9KTtcbi8vICAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ2ZyYW1lJywge21pbjogMCAsIG1heDogOTk5fSk7XG4vLyAgIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdhbmltYXRlJyk7XG5cblxuXG4vLyB9XG5cbi8vIGNyZWF0ZVBhbmUoKTtcbmNhbnZhc1NrZXRjaChza2V0Y2gsIHNldHRpbmdzKTtcbiIsIlxuZ2xvYmFsLkNBTlZBU19TS0VUQ0hfREVGQVVMVF9TVE9SQUdFX0tFWSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuIl0sIm1hcHBpbmdzIjoiQ0FBQSxTQUFBQSxFQUFBQyxFQUFBQyxFQUFBQyxHQUFBLFNBQUFDLEVBQUFDLEVBQUFDLEdBQUEsSUFBQUosRUFBQUcsR0FBQSxLQUFBSixFQUFBSSxHQUFBLEtBQUFFLEVBQUEsbUJBQUFDLGlCQUFBLElBQUFGLEdBQUFDLEVBQUEsT0FBQUEsRUFBQUYsR0FBQSxNQUFBSSxFQUFBLE9BQUFBLEVBQUFKLEdBQUEsT0FBQUssRUFBQSxJQUFBQyxNQUFBLHVCQUFBTixFQUFBLFdBQUFLLEVBQUFFLEtBQUEsbUJBQUFGLENBQUEsS0FBQUcsRUFBQVgsRUFBQUcsR0FBQSxDQUFBUyxRQUFBLElBQUFiLEVBQUFJLEdBQUEsR0FBQVUsS0FBQUYsRUFBQUMsU0FBQSxTQUFBZCxHQUFBLE9BQUFJLEVBQUFILEVBQUFJLEdBQUEsR0FBQUwsTUFBQSxHQUFBYSxJQUFBQyxRQUFBZCxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBLFFBQUFELEVBQUFHLEdBQUFTLE9BQUEsU0FBQUwsRUFBQSxtQkFBQUQsaUJBQUFILEVBQUEsRUFBQUEsRUFBQUYsRUFBQWEsT0FBQVgsSUFBQUQsRUFBQUQsRUFBQUUsSUFBQSxPQUFBRCxDQUFBLGVBQUFJLEVBQUFTLEVBQUFILEdDQUFHLEVBQUFILFFBQ0EsU0FBQUksRUFBQUMsRUFBQUMsR0FDQSxvQkFBQUQsR0FBQSxpQkFBQUMsRUFDQSxVQUFBQyxVQUFBLHFEQUdBLEdBQUFGLEVBQUFDLEVBQUEsQ0FDQSxJQUFBakIsRUFBQWdCLEVBQ0FBLEVBQUFDLEVBQ0FBLEVBQUFqQixDQUNBLENBQ0EsSUFBQW1CLEVBQUFGLEVBQUFELEVBQ0EsT0FBQUcsRUFDQSxPQUFBRixFQUVBLE9BQUFGLEVBQUFJLEVBQUFDLEtBQUFDLE9BQUFOLEVBQUFDLEdBQUFHLEVBQ0EsQyx5QkNoQkEsSUFBQUcsRUFBQWpCLEVBQUEsV0FDQWtCLEVBQUFsQixFQUFBLGNBQ0FtQixFQUFBQyxPQUFBRCxRQUVBLFNBQUFFLEVBQUFYLEVBQUFZLEVBQUFDLEdBQ0EsT0FBQUQsRUFBQUMsRUFDQWIsRUFBQVksSUFBQVosRUFBQWEsSUFBQWIsRUFDQUEsRUFBQWEsSUFBQWIsRUFBQVksSUFBQVosQ0FDQSxDQU1BLFNBQUFjLEVBQUFGLEVBQUFDLEVBQUE1QixHQUNBLE9BQUEyQixHQUFBLEVBQUEzQixHQUFBNEIsRUFBQTVCLENBQ0EsQ0FFQSxTQUFBOEIsRUFBQUgsRUFBQUMsRUFBQTVCLEdBQ0EsT0FBQW9CLEtBQUFXLElBQUFKLEVBQUFDLEdBQUFKLEVBQUEsR0FDQXhCLEVBQUEyQixJQUFBQyxFQUFBRCxFQUNBLENBT0EsU0FBQUssRUFBQWpDLEVBQUFrQyxHQUVBLE9BREFBLEVBQUFYLEVBQUFXLEVBQUEsR0FDQSxpQkFBQWxDLEdBQUFtQyxTQUFBbkMsS0FBQWtDLENBQ0EsQ0FFQSxTQUFBRSxFQUFBQyxHQUNBLG9CQUFBQSxFQUFBLFVBQUFsQixVQUFBLDBCQUNBLGdCQUFBUixFQUFBdUIsR0FFQSxJQUFBSSxFQURBSixFQUFBWCxFQUFBVyxFQUFBLEdBRUEsTUFBQXZCLEVBRUEyQixFQUFBSixFQUNBLGlCQUFBdkIsR0FBQXdCLFNBQUF4QixLQUVBMkIsRUFBQTNCLEdBR0EsSUFDQVIsRUFEQW9DLEVBQUEsR0FFQSxTQUFBRCxFQUNBLElBQUFuQyxFQUFBLEVBQUFBLEVBQUFrQyxFQUFBbEMsSUFDQW9DLEVBQUFwQyxHQUFBOEIsRUFBQXRCLEVBQUFSLEdBQUErQixRQUdBLElBQUEvQixFQUFBLEVBQUFBLEVBQUFrQyxFQUFBbEMsSUFDQW9DLEVBQUFwQyxHQUFBbUMsRUFHQSxPQUFBQyxDQUNBLENBQ0EsQ0FFQSxTQUFBQyxFQUFBWixFQUFBQyxFQUFBNUIsRUFBQXNDLEdBRUEsR0FEQUEsS0FBQSxHQUNBWCxFQUFBZCxTQUFBZSxFQUFBZixPQUNBLFVBQUFLLFVBQUEsMERBRUEsUUFBQWhCLEVBQUEsRUFBQUEsRUFBQXlCLEVBQUFkLE9BQUFYLElBQ0FvQyxFQUFBcEMsR0FBQTJCLEVBQUFGLEVBQUF6QixHQUFBMEIsRUFBQTFCLEdBQUFGLEdBRUEsT0FBQXNDLENBQ0EsQ0FFQSxTQUFBRSxFQUFBekMsRUFBQTBDLEdBRUEsb0JBREExQyxFQUFBdUIsRUFBQXZCLEVBQUEsSUFDQSxVQUFBbUIsVUFBQSxzQ0FFQSxJQURBLElBQUFvQixFQUFBLEdBQ0FwQyxFQUFBLEVBQUFBLEVBQUFILEVBQUFHLElBQUFvQyxFQUFBSSxLQUFBRCxHQUNBLE9BQUFILENBQ0EsQ0F5Q0EsU0FBQUssRUFBQXBDLEVBQUFxQyxHQUNBLE9BQUFyQyxFQUFBcUMsTUFDQSxDQThCQSxTQUFBQyxFQUFBdEMsRUFBQXFDLEVBQUFFLEVBQUFDLEdBQ0EsT0FBQWxCLEVBQUF0QixFQUFBcUMsRUFBQSxFQUFBeEIsS0FBQTRCLEtBQUFGLEVBQUFDLEdBQ0EsQ0E4QkFqQyxFQUFBSCxRQUFBLENBQ0FnQyxNQUNBTSxNQXREQSxTQUFBbEQsR0FDQSxPQUFBQSxFQUFBcUIsS0FBQUMsTUFBQXRCLEVBQ0EsRUFxREFtRCxLQW5EQSxTQUFBbkQsR0FDQSxPQUFBQSxFQUFBLElBQ0FBLEVBQUEsS0FDQSxDQUNBLEVBZ0RBb0QsU0FoRUEsU0FBQXBELEdBQ0EsT0FBQUEsRUFBQXFCLEtBQUFnQyxHQUFBLEdBQ0EsRUErREFDLFNBN0RBLFNBQUF0RCxHQUNBLFdBQUFBLEVBQUFxQixLQUFBZ0MsRUFDQSxFQTREQTdCLE9BQ0ErQixTQTVDQSxTQUFBdEQsRUFBQWEsR0FFQSxPQURBYixFQUFBMkMsRUFBQTNDLEVBQUEsRUFBQWEsR0FDQUEsRUFBQU8sS0FBQVcsSUFBQS9CLEVBQUFhLEVBQ0EsRUEwQ0EwQyxTQS9HQSxTQUFBeEQsRUFBQXlELEdBRUEsb0JBREF6RCxFQUFBdUIsRUFBQXZCLEVBQUEsSUFDQSxVQUFBbUIsVUFBQSxzQ0FFQSxrQkFEQXNDLEtBQUEsTUFFQUEsRUFBQSxDQUFBQyxVQUFBLElBRUEsSUFBQUMsRUFBQXBDLEVBQUFrQyxFQUFBRSxPQUFBLEdBQ0EsT0FBQUYsRUFBQUMsU0FDQWpCLEVBQUF6QyxHQUFBNEQsS0FBQSxTQUFBQyxFQUFBMUQsR0FDQSxPQUFBSCxHQUFBLEtBQUFHLEVBQUF3RCxJQUFBM0QsRUFBQSxFQUNBLElBRUF5QyxFQUFBekMsR0FBQTRELEtBQUEsU0FBQUMsRUFBQTFELEdBQ0EsT0FBQUEsRUFBQXdELEdBQUEzRCxDQUNBLEdBRUEsRUErRkE4QixPQUNBVSxZQUNBVCxjQUNBK0IsV0FoR0EsU0FBQUMsRUFBQTlELEVBQUFzQyxHQUNBdEMsRUFBQTBCLEVBQUExQixFQUFBLEtBRUEsSUFBQStELEVBQUFELEVBQUFqRCxPQUFBLEVBQ0FtRCxFQUFBaEUsRUFBQStELEVBQ0FFLEVBQUE3QyxLQUFBQyxNQUFBMkMsR0FDQWYsRUFBQWUsRUFBQUMsRUFFQUMsRUFBQTlDLEtBQUFPLElBQUFzQyxFQUFBLEVBQUFGLEdBQ0F4RCxFQUFBdUQsRUFBQUcsRUFBQUgsRUFBQWpELFFBQ0ErQixFQUFBa0IsRUFBQUksRUFBQUosRUFBQWpELFFBQ0Esb0JBQUFOLEdBQUEsaUJBQUFxQyxFQUNBLE9BQUFmLEVBQUF0QixFQUFBcUMsRUFBQUssR0FDQSxHQUFBa0IsTUFBQUMsUUFBQTdELElBQUE0RCxNQUFBQyxRQUFBeEIsR0FDQSxPQUFBTCxFQUFBaEMsRUFBQXFDLEVBQUFLLEVBQUFYLEdBRUEsVUFBQXBCLFVBQUEsaURBQUErQyxFQUFBLFFBQUFDLEVBRUEsRUErRUF4QyxRQUNBMkMsUUEzTEEsU0FBQUMsR0FDQSxPQUFBNUMsRUFBQTRDLEVBQUEsSUFDQSxFQTBMQUMsV0EvS0EsU0FBQTVDLEVBQUFDLEVBQUE1QixHQUNBLElBQUF3RSxFQUFBOUMsRUFBQUksRUFBQUgsRUFBQUMsRUFBQTVCLEdBQUEsS0FDQSxPQUFBd0UsS0FBQSxJQUFBQSxFQUNBLEVBNktBM0IsT0FDQTRCLFVBN0NBLFNBQUFsRSxFQUFBcUMsRUFBQUUsRUFBQUMsRUFBQVQsR0FDQUEsS0FBQSxHQUNBLFFBQUFwQyxFQUFBLEVBQUFBLEVBQUFLLEVBQUFNLE9BQUFYLElBQ0FvQyxFQUFBcEMsR0FBQTJDLEVBQUF0QyxFQUFBTCxHQUFBMEMsRUFBQTFDLEdBQUE0QyxFQUFBQyxHQUVBLE9BQUFULENBQ0EsRUF3Q0FvQyxTQXRDQSxTQUFBM0QsRUFBQTRELEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFwRCxHQUdBLEdBQUFOLEtBQUFXLElBQUE0QyxFQUFBQyxHQUFBcEQsRUFDQSxPQUFBcUQsRUFFQSxJQUFBRSxHQUFBaEUsRUFBQTRELElBQUFDLEVBQUFELElBQUFHLEVBQUFELEtBVUEsT0FUQW5ELElBQ0FvRCxFQUFBRCxFQUNBRSxFQUFBRCxFQUFBQyxFQUFBRCxFQUNBQyxFQUFBRixJQUFBRSxFQUFBRixHQUVBRSxFQUFBRCxFQUFBQyxFQUFBRCxFQUNBQyxFQUFBRixJQUFBRSxFQUFBRixJQUdBRSxDQUVBLEVBcUJBQyxTQUFBN0MsRUFBQSxHQUNBOEMsU0FBQTlDLEVBQUEsR0FDQStDLFNBQUEvQyxFQUFBLEcsaURDNU1BLElBQUFnRCxFQUFBOUUsRUFBQSxlQUNBK0UsRUFBQS9FLEVBQUEsaUJBQ0FpQixFQUFBakIsRUFBQSxXQXFVQVMsRUFBQUgsUUFuVUEsU0FBQTBFLEVBQUFDLEdBQ0FBLEVBQUFoRSxFQUFBZ0UsRUFBQSxNQUNBLElBQ0FDLEVBQ0FDLEVBQ0FDLEVBSEFDLEVBQUF0RSxLQUFBdUUsT0FJQUMsRUFBQSxLQUNBQyxHQUFBLEVBSUEsT0FGQUMsRUFBQVIsR0FFQSxDQUNBdkUsUUFDQXNFLGFBQUEsU0FBQUMsR0FDQSxPQUFBRCxFQUFBQyxFQUNBLEVBQ0FRLFVBQ0FDLFFBaURBLFdBQ0EsT0FBQVIsQ0FDQSxFQWxEQVMsY0FvREEsV0FFQSxPQURBQyxPQUFBN0UsS0FBQUMsTUFBQSxJQUFBRCxLQUFBdUUsVUFFQSxFQXREQU8sYUF5Q0EsV0FDQSxJQUFBNUYsRUFBQSxFQUNBLFNBQUFBLEtBQUFTLElBQ0EsT0FBQVQsQ0FDQSxFQTVDQTZGLGFBMkRBLFdBQ0FWLEVBQUFXLEdBQ0EsRUE1REFDLFFBOERBLFNBQUE3QixFQUFBOEIsRUFBQUMsR0FDQSxJQUFBckUsU0FBQXNDLEdBQUEsVUFBQXRELFVBQUEsMENBR0EsT0FGQW9GLEVBQUFoRixFQUFBZ0YsRUFBQSxJQUNBQyxFQUFBakYsRUFBQWlGLEVBQUEsSUFDQWQsRUFBQWUsUUFBQWhDLEVBQUE4QixFQUFBLEVBQ0EsRUFsRUFFLFFBb0VBLFNBQUFoQyxFQUFBaUMsRUFBQUgsRUFBQUMsR0FDQSxJQUFBckUsU0FBQXNDLEdBQUEsVUFBQXRELFVBQUEsMENBQ0EsSUFBQWdCLFNBQUF1RSxHQUFBLFVBQUF2RixVQUFBLDBDQUdBLE9BRkFvRixFQUFBaEYsRUFBQWdGLEVBQUEsSUFDQUMsRUFBQWpGLEVBQUFpRixFQUFBLElBQ0FkLEVBQUFlLFFBQUFoQyxFQUFBOEIsRUFBQUcsRUFBQUgsRUFDQSxFQXpFQUksUUEyRUEsU0FBQWxDLEVBQUFpQyxFQUFBRSxFQUFBTCxFQUFBQyxHQUNBLElBQUFyRSxTQUFBc0MsR0FBQSxVQUFBdEQsVUFBQSwwQ0FDQSxJQUFBZ0IsU0FBQXVFLEdBQUEsVUFBQXZGLFVBQUEsMENBQ0EsSUFBQWdCLFNBQUF5RSxHQUFBLFVBQUF6RixVQUFBLDBDQUdBLE9BRkFvRixFQUFBaEYsRUFBQWdGLEVBQUEsSUFDQUMsRUFBQWpGLEVBQUFpRixFQUFBLElBQ0FkLEVBQUFpQixRQUNBbEMsRUFBQThCLEVBQ0FHLEVBQUFILEVBQ0FLLEVBQUFMLEVBRUEsRUFyRkFNLFFBdUZBLFNBQUFwQyxFQUFBaUMsRUFBQUUsRUFBQUUsRUFBQVAsRUFBQUMsR0FDQSxJQUFBckUsU0FBQXNDLEdBQUEsVUFBQXRELFVBQUEsMENBQ0EsSUFBQWdCLFNBQUF1RSxHQUFBLFVBQUF2RixVQUFBLDBDQUNBLElBQUFnQixTQUFBeUUsR0FBQSxVQUFBekYsVUFBQSwwQ0FDQSxJQUFBZ0IsU0FBQTJFLEdBQUEsVUFBQTNGLFVBQUEsMENBR0EsT0FGQW9GLEVBQUFoRixFQUFBZ0YsRUFBQSxJQUNBQyxFQUFBakYsRUFBQWlGLEVBQUEsSUFDQWQsRUFBQW1CLFFBQ0FwQyxFQUFBOEIsRUFDQUcsRUFBQUgsRUFDQUssRUFBQUwsRUFDQU8sRUFBQVAsRUFFQSxFQW5HQXBELEtBcUdBLFdBQ0EsT0FBQTRELElBQUEsSUFDQSxFQXRHQUEsVUFDQUMsT0EyR0EsU0FBQWhILEdBRUEsb0JBREFBLEVBQUF1QixFQUFBdkIsRUFBQSxLQUNBLFVBQUFtQixVQUFBLDZCQUNBLE9BQUFILElBQUFoQixDQUNBLEVBOUdBaUgsUUFDQUMsYUFDQUMsS0F3SUEsU0FBQUMsR0FDQSxXQUFBQSxFQUFBdEcsWUFBQSxFQUNBc0csRUFBQUYsRUFBQSxFQUFBRSxFQUFBdEcsUUFDQSxFQTFJQXVHLFFBNElBLFNBQUFDLEdBQ0EsSUFBQWxELE1BQUFDLFFBQUFpRCxHQUNBLFVBQUFuRyxVQUFBLDhCQUFBbUcsR0FHQSxJQUFBQyxFQUNBQyxFQUNBeEQsRUFBQXNELEVBQUF4RyxPQUNBMkcsRUFBQUgsRUFBQUksUUFDQSxLQUFBMUQsR0FDQXVELEVBQUFsRyxLQUFBQyxNQUFBTixJQUFBZ0QsS0FDQXdELEVBQUFDLEVBQUF6RCxHQUNBeUQsRUFBQXpELEdBQUF5RCxFQUFBRixHQUNBRSxFQUFBRixHQUFBQyxFQUVBLE9BQUFDLENBQ0EsRUEzSkFFLFdBQ0FDLGFBcUtBLFNBQUFDLEVBQUF0RixHQUNBc0YsRUFBQXRHLEVBQUFzRyxFQUFBLEdBRUFGLEVBQUEsRUFEQXBGLEtBQUEsSUFFQSxJQUFBekMsRUFBQStILEVBQUF4RyxLQUFBeUcsS0FBQTlHLEtBR0EsT0FGQXVCLEVBQUEsSUFBQXpDLEVBQ0F5QyxFQUFBLElBQUF6QyxFQUNBeUMsQ0FDQSxFQTVLQXdGLFNBOEtBLFNBQUFGLEVBQUF0RixHQUNBc0YsRUFBQXRHLEVBQUFzRyxFQUFBLEdBQ0F0RixLQUFBLEdBQ0EsSUFBQWhDLEVBQUFTLElBQUFLLEtBQUFnQyxHQUFBLEVBQ0FrQixFQUFBLEVBQUF2RCxJQUFBLEVBQ0FnSCxFQUFBekgsRUFDQTBILEVBQUE1RyxLQUFBNkcsS0FBQTNELEdBSUEsT0FIQWhDLEVBQUEsR0FBQXNGLEVBQUF4RyxLQUFBOEcsSUFBQUYsR0FBQTVHLEtBQUErRyxJQUFBSixHQUNBekYsRUFBQSxHQUFBc0YsRUFBQXhHLEtBQUE4RyxJQUFBRixHQUFBNUcsS0FBQThHLElBQUFILEdBQ0F6RixFQUFBLEdBQUFzRixFQUFBeEcsS0FBQStHLElBQUFILEdBQ0ExRixDQUNBLEVBeExBOEYsYUEwTEEsU0FBQVIsRUFBQXRGLEdBQ0FzRixFQUFBdEcsRUFBQXNHLEVBQUEsR0FDQXRGLEtBQUEsR0FDQSxJQUFBaEMsRUFBQVMsSUFBQUssS0FBQWdDLEdBQUEsRUFDQWtCLEVBQUEsRUFBQXZELElBQUEsRUFDQXNILEVBQUF0SCxJQUVBZ0gsRUFBQXpILEVBQ0EwSCxFQUFBNUcsS0FBQTZHLEtBQUEzRCxHQUNBekUsRUFBQStILEVBQUF4RyxLQUFBa0gsS0FBQUQsR0FJQSxPQUhBL0YsRUFBQSxHQUFBekMsRUFBQXVCLEtBQUE4RyxJQUFBRixHQUFBNUcsS0FBQStHLElBQUFKLEdBQ0F6RixFQUFBLEdBQUF6QyxFQUFBdUIsS0FBQThHLElBQUFGLEdBQUE1RyxLQUFBOEcsSUFBQUgsR0FDQXpGLEVBQUEsR0FBQXpDLEVBQUF1QixLQUFBK0csSUFBQUgsR0FDQTFGLENBQ0EsRUF2TUFpRyxXQXlNQSxTQUFBakcsR0FDQUEsS0FBQSxHQUNBLElBQUFrRyxFQUFBekgsSUFDQTBILEVBQUExSCxJQUNBMkgsRUFBQTNILElBRUE0SCxFQUFBdkgsS0FBQXlHLEtBQUEsRUFBQVcsR0FDQUksRUFBQXhILEtBQUF5RyxLQUFBVyxHQUVBSyxFQUFBLEVBQUF6SCxLQUFBZ0MsR0FBQXFGLEVBQ0FLLEVBQUEsRUFBQTFILEtBQUFnQyxHQUFBc0YsRUFFQWxFLEVBQUFwRCxLQUFBOEcsSUFBQVcsR0FBQUYsRUFDQWxDLEVBQUFyRixLQUFBK0csSUFBQVUsR0FBQUYsRUFDQWhDLEVBQUF2RixLQUFBOEcsSUFBQVksR0FBQUYsRUFDQS9CLEVBQUF6RixLQUFBK0csSUFBQVcsR0FBQUYsRUFLQSxPQUpBdEcsRUFBQSxHQUFBa0MsRUFDQWxDLEVBQUEsR0FBQW1FLEVBQ0FuRSxFQUFBLEdBQUFxRSxFQUNBckUsRUFBQSxHQUFBdUUsRUFDQXZFLENBQ0EsRUE3TkF5RyxXQUNBQyxZQThOQSxTQUFBQyxHQUVBLFlBREFBLEtBQUEsSUFDQXBJLE9BQUEsS0FDQW9JLEVBQUFDLEVBQUFELElBQUFsSSxLQUNBLEVBak9BbUksbUJBQ0FDLFNBZ1FBLFNBQUFDLEVBQUFDLEdBS0EsR0FKQUQsRUFBQTlILEVBQUE4SCxFQUFBLEdBQ0FDLEVBQUEvSCxFQUFBK0gsRUFBQSxHQUdBeEQsRUFBQSxDQUNBQSxHQUFBLEVBQ0EsSUFBQXlELEVBQUExRCxFQUVBLE9BREFBLEVBQUEsS0FDQXdELEVBQUFDLEVBQUFDLENBQ0EsQ0FDQSxJQUFBQyxFQUFBLEVBQ0FDLEVBQUEsRUFDQUMsRUFBQSxFQUNBLEdBR0FBLEdBRkFGLEVBQUEsRUFBQXhJLElBQUEsR0FFQXdJLEdBREFDLEVBQUEsRUFBQXpJLElBQUEsR0FDQXlJLFFBQ0FDLEdBQUEsT0FBQUEsR0FDQSxJQUFBQyxFQUFBdEksS0FBQXlHLE1BQUEsRUFBQXpHLEtBQUF1SSxJQUFBRixNQUdBLE9BRkE3RCxFQUFBNEQsRUFBQUUsRUFDQTdELEdBQUEsRUFDQXVELEVBQUFDLEdBQUFFLEVBQUFHLEVBRUEsR0FyUkEsU0FBQTVELEVBQUE4RCxFQUFBQyxHQUNBLGlCQUFBRCxHQUFBLGlCQUFBQSxFQUVBcEUsRUFBQUwsRUFEQUksRUFBQXFFLEVBQ0FDLElBRUF0RSxPQUFBdUUsRUFDQXRFLEVBQUFFLEdBRUFELEVBQUFXLElBQ0FSLEVBQUEsS0FDQUMsR0FBQSxDQUNBLENBRUEsU0FBQTlFLElBQ0EsT0FBQXlFLEdBQ0EsQ0FpQkEsU0FBQVksSUFDQSxXQUFBaEIsRUFBQUksRUFDQSxDQXFEQSxTQUFBc0IsSUFDQSxPQUFBL0YsSUFBQSxFQUNBLENBUUEsU0FBQWlHLEVBQUFyRixFQUFBQyxHQU1BLFFBTEFrSSxJQUFBbEksSUFDQUEsRUFBQUQsRUFDQUEsRUFBQSxHQUdBLGlCQUFBQSxHQUFBLGlCQUFBQyxFQUNBLFVBQUFWLFVBQUEsd0NBR0EsT0FBQUgsS0FBQWEsRUFBQUQsSUFDQSxDQUVBLFNBQUFzRixFQUFBdEYsRUFBQUMsR0FNQSxRQUxBa0ksSUFBQWxJLElBQ0FBLEVBQUFELEVBQ0FBLEVBQUEsR0FHQSxpQkFBQUEsR0FBQSxpQkFBQUMsRUFDQSxVQUFBVixVQUFBLHdDQUdBLE9BQUFFLEtBQUFDLE1BQUEyRixFQUFBckYsRUFBQUMsR0FDQSxDQXlCQSxTQUFBOEYsRUFBQUUsRUFBQXRGLEdBQ0FzRixFQUFBdEcsRUFBQXNHLEVBQUEsR0FDQXRGLEtBQUEsR0FDQSxJQUFBMEYsRUFBQSxFQUFBakgsSUFBQUssS0FBQWdDLEdBR0EsT0FGQWQsRUFBQSxHQUFBc0YsRUFBQXhHLEtBQUErRyxJQUFBSCxHQUNBMUYsRUFBQSxHQUFBc0YsRUFBQXhHLEtBQUE4RyxJQUFBRixHQUNBMUYsQ0FDQSxDQXNFQSxTQUFBNEcsRUFBQUQsR0FFQSxZQURBQSxLQUFBLElBQ0FwSSxRQUFBLEVBQ0FrSSxFQUFBRSxFQUFBdEYsS0FBQSxTQUFBOEYsR0FDQSxPQUFBQSxFQUFBTSxNQUNBLElBQ0EsQ0FFQSxTQUFBaEIsRUFBQWlCLEdBRUEsUUFEQUEsS0FBQSxJQUNBbkosT0FBQSxTQUNBLElBQ0FYLEVBREErSixFQUFBLEVBR0EsSUFBQS9KLEVBQUEsRUFBQUEsRUFBQThKLEVBQUFuSixPQUFBWCxJQUNBK0osR0FBQUQsRUFBQTlKLEdBR0EsR0FBQStKLEdBQUEsWUFBQXpKLE1BQUEsMkJBRUEsSUFBQW1GLEVBQUE1RSxJQUFBa0osRUFDQSxJQUFBL0osRUFBQSxFQUFBQSxFQUFBOEosRUFBQW5KLE9BQUFYLElBQUEsQ0FDQSxHQUFBeUYsRUFBQXFFLEVBQUE5SixHQUNBLE9BQUFBLEVBRUF5RixHQUFBcUUsRUFBQTlKLEVBQ0EsQ0FDQSxRQUNBLENBMkJBLENBRUFtRixFLDhPQy9UQSxJQUFJNkUsRUFBd0JDLE9BQU9ELHNCQUMvQkUsRUFBaUJELE9BQU9FLFVBQVVELGVBQ2xDRSxFQUFtQkgsT0FBT0UsVUFBVUUscUJBc0R4QyxJQUFBQyxFQTVDQSxXQUNDLElBQ0MsSUFBS0wsT0FBT00sT0FDWCxPQUFPLEVBTVIsSUFBSUMsRUFBUSxJQUFJekUsT0FBTyxPQUV2QixHQURBeUUsRUFBTSxHQUFLLEtBQ2tDLE1BQXpDUCxPQUFPUSxvQkFBb0JELEdBQU8sR0FDckMsT0FBTyxFQUtSLElBREEsSUFBSUUsRUFBUSxHQUNIMUssRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ3ZCMEssRUFBTSxJQUFNM0UsT0FBTzRFLGFBQWEzSyxJQUFNQSxFQUt2QyxHQUF3QixlQUhYaUssT0FBT1Esb0JBQW9CQyxHQUFPakgsS0FBSSxTQUFVNUQsR0FDNUQsT0FBTzZLLEVBQU03SyxFLElBRUgrSyxLQUFLLElBQ2YsT0FBTyxFQUlSLElBQUlDLEVBQVEsR0FJWixNQUhBLHVCQUF1QkMsTUFBTSxJQUFJQyxTQUFRLFNBQVVDLEdBQ2xESCxFQUFNRyxHQUFVQSxDLElBR2YseUJBREVmLE9BQU9nQixLQUFLaEIsT0FBT00sT0FBTyxHQUFJTSxJQUFRRCxLQUFLLEcsQ0FNOUMsTUFBT00sR0FFUixPQUFPLEMsRUFJUUMsR0FBb0JsQixPQUFPTSxPQUFTLFNBQVVhLEVBQVFDLEdBS3RFLElBSkEsSUFBSXZLLEVBRUF3SyxFQURBdkssRUF0REwsU0FBa0J3SyxHQUNqQixHQUFJQSxRQUNILE1BQU0sSUFBSXZLLFVBQVUseURBR3JCLE9BQU9pSixPQUFPc0IsRSxDQWlETEMsQ0FBU0osR0FHVDdCLEVBQUksRUFBR0EsRUFBSWtDLFVBQVU5SyxPQUFRNEksSUFBSyxDQUcxQyxJQUFLLElBQUltQyxLQUZUNUssRUFBT21KLE9BQU93QixVQUFVbEMsSUFHbkJXLEVBQWV4SixLQUFLSSxFQUFNNEssS0FDN0IzSyxFQUFHMkssR0FBTzVLLEVBQUs0SyxJQUlqQixHQUFJMUIsRUFBdUIsQ0FDMUJzQixFQUFVdEIsRUFBc0JsSixHQUNoQyxJQUFLLElBQUlkLEVBQUksRUFBR0EsRUFBSXNMLEVBQVEzSyxPQUFRWCxJQUMvQm9LLEVBQWlCMUosS0FBS0ksRUFBTXdLLEVBQVF0TCxNQUN2Q2UsRUFBR3VLLEVBQVF0TCxJQUFNYyxFQUFLd0ssRUFBUXRMLEksRUFNbEMsT0FBT2UsQyxpSkN4RlIsSUFBQTRLLEVBQ0VDLEVBQU9DLGFBQ1BELEVBQU9DLFlBQVlDLElBQU0sV0FDdkIsT0FBT0QsWUFBWUMsSyxFQUNqQkMsS0FBS0QsS0FBTyxXQUNkLE9BQVEsSUFBSUMsSSxFQ0xoQkMsRUFFQSxTQUFtQkMsR0FDakIsUUFBU0EsSUFBdUIsaUJBQVJBLEdBQW1DLG1CQUFSQSxJQUEyQyxtQkFBYkEsRUFBSUMsSSxFQ0h2RixJQUFBQyxFQUVBLFNBQWlCWixHQUNmLFNBQVNBLEdBQXNCLGlCQUFSQSxLQUVBLGlCQUFYYSxRQUE4QyxpQkFBaEJBLE9BQU9DLEtBQzFDZCxhQUFlYSxPQUFPQyxLQUNFLGlCQUFqQmQsRUFBSWUsVUFDYSxpQkFBakJmLEVBQUlnQixTLEVDSmIsU0FBU0MsSUFDZCxNQUF5QixvQkFBWEosUUFBMEJBLE9BQU8sb0IsQ0FHMUMsU0FBU2hMLElBQ2QsSSxnQkFBU3BCLEVBQUksRUFBR0EsRUFBSXlMLFVBQVU5SyxPQUFRWCxJQUNwQyxHQUFvQixNQUFoQnlNLEVBQVV6TSxHQUNaLE9BQU95TSxFQUFVek0sRSxDQU1oQixTQUFTME0sSUFDZCxNQUEyQixvQkFBYkMsUSxLQ0paQyxFLG1CQ1ZKLFNBQVNDLEVBQU1aLEdBQ2IsSUFBSWhCLEVBQU8sR0FDWCxJQUFLLElBQUlTLEtBQU9PLEVBQUtoQixFQUFLekksS0FBS2tKLEdBQy9CLE9BQU9ULEMsRUFQQ3JLLEVBQUFILFFBQXdDLG1CQUFoQndKLE9BQU9nQixLQUNyQ2hCLE9BQU9nQixLQUFPNEIsR0FFbEJBLEtBQWVBLEMsdUJDSGYsSUFBSUMsRUFFSSxzQkFGcUIsV0FDM0IsT0FBTzdDLE9BQU9FLFVBQVU0QyxTQUFTck0sS0FBSytLLFVBQ3ZDLENBRjRCLEdBTzdCLFNBQVN1QixFQUFVQyxHQUNqQixNQUFpRCxzQkFBMUNoRCxPQUFPRSxVQUFVNEMsU0FBU3JNLEtBQUt1TSxFLENBSXhDLFNBQVNDLEVBQVlELEdBQ25CLE9BQU9BLEdBQ1ksaUJBQVZBLEdBQ2lCLGlCQUFqQkEsRUFBT3RNLFFBQ2RzSixPQUFPRSxVQUFVRCxlQUFleEosS0FBS3VNLEVBQVEsWUFDNUNoRCxPQUFPRSxVQUFVRSxxQkFBcUIzSixLQUFLdU0sRUFBUSxZQUNwRCxDLEVBZEp4TSxFQUFVRyxFQUFBSCxRQUFpQnFNLEVBQXlCRSxFQUFZRSxHQUVoRUYsVUFBb0JBLEVBS3BCdk0sRUFBQXlNLFlBQXNCQSxDQVFyQixJLGlCQ25CRCxJQUFJQyxFQUFTbEosTUFBTWtHLFVBQVU1QyxNQUl6QjZGLEVBQVl4TSxFQUFBSCxRQUFpQixTQUFVNE0sRUFBUUMsRUFBVWhLLEdBRzNELE9BRktBLElBQU1BLEVBQU8sSUFFZCtKLElBQVdDLElBR0pELGFBQWtCdEIsTUFBUXVCLGFBQW9CdkIsS0FDaERzQixFQUFPRSxZQUFjRCxFQUFTQyxXQUkzQkYsSUFBV0MsR0FBNkIsaUJBQVZELEdBQXlDLGlCQUFaQyxFQUM5RGhLLEVBQUtrSyxPQUFTSCxJQUFXQyxFQUFXRCxHQUFVQyxFQTBCekQsU0FBa0JqTixFQUFHcUMsRUFBR1ksR0FDdEIsSUFBSXRELEVBQUcwTCxFQUNQLEdBQUkrQixFQUFrQnBOLElBQU1vTixFQUFrQi9LLEdBQzVDLE9BQU8sRUFFVCxHQUFJckMsRUFBRThKLFlBQWN6SCxFQUFFeUgsVUFBVyxPQUFPLEVBR3hDLEdBQUl1RCxFQUFZck4sR0FDZCxRQUFLcU4sRUFBWWhMLEtBR2pCckMsRUFBSThNLEVBQU96TSxLQUFLTCxHQUNoQnFDLEVBQUl5SyxFQUFPek0sS0FBS2dDLEdBQ1QwSyxFQUFVL00sRUFBR3FDLEVBQUdZLElBRXpCLEdBQUlxSyxFQUFTdE4sR0FBSSxDQUNmLElBQUtzTixFQUFTakwsR0FDWixPQUFPLEVBRVQsR0FBSXJDLEVBQUVNLFNBQVcrQixFQUFFL0IsT0FBUSxPQUFPLEVBQ2xDLElBQUtYLEVBQUksRUFBR0EsRUFBSUssRUFBRU0sT0FBUVgsSUFDeEIsR0FBSUssRUFBRUwsS0FBTzBDLEVBQUUxQyxHQUFJLE9BQU8sRUFFNUIsT0FBTyxDLENBRVQsSUFDRSxJQUFJNE4sRUFBSzNDLEVBQVc1SyxHQUNoQndOLEVBQUs1QyxFQUFXdkksRSxDQUNwQixNQUFPOUMsR0FDUCxPQUFPLEMsQ0FJVCxHQUFJZ08sRUFBR2pOLFFBQVVrTixFQUFHbE4sT0FDbEIsT0FBTyxFQUtULElBSEFpTixFQUFHRSxPQUNIRCxFQUFHQyxPQUVFOU4sRUFBSTROLEVBQUdqTixPQUFTLEVBQUdYLEdBQUssRUFBR0EsSUFDOUIsR0FBSTROLEVBQUc1TixJQUFNNk4sRUFBRzdOLEdBQ2QsT0FBTyxFQUlYLElBQUtBLEVBQUk0TixFQUFHak4sT0FBUyxFQUFHWCxHQUFLLEVBQUdBLElBRTlCLElBQUtvTixFQUFVL00sRUFEZnFMLEVBQU1rQyxFQUFHNU4sSUFDYzBDLEVBQUVnSixHQUFNcEksR0FBTyxPQUFPLEVBRS9DLGNBQWNqRCxVQUFhcUMsQyxDQW5FbEJxTCxDQUFTVixFQUFRQyxFQUFVaEssRyxFQUl0QyxTQUFTbUssRUFBa0I1TSxHQUN6QixPQUFPQSxPLENBR1QsU0FBUzhNLEVBQVVySixHQUNqQixTQUFLQSxHQUFrQixpQkFBTkEsR0FBc0MsaUJBQWJBLEVBQUUzRCxVQUN0QixtQkFBWDJELEVBQUUwSixNQUEwQyxtQkFBWjFKLEVBQUVpRCxTQUd6Q2pELEVBQUUzRCxPQUFTLEdBQXFCLGlCQUFUMkQsRUFBRSxJLHlCQ3hCL0IsU0FBVTJKLEdBR1IsSUFDUUMsRUFDQUMsRUFDQUMsRUFISkMsR0FDSUgsRUFBUSxtRUFDUkMsRUFBVyx1SUFDWEMsRUFBZSxjQUdaLFNBQVVFLEVBQU1DLEVBQU1DLEVBQUtDLEdBY2hDLEdBWHlCLElBQXJCaEQsVUFBVTlLLFFBQWlDLFlBMkt6QyxRQURFNEssRUExSzZCK0MsR0E0S2xDLFlBR0cxRSxJQUFSMkIsRUFDSyxZQUdVLGlCQUFSQSxTQUNLQSxFQUdadEgsTUFBTUMsUUFBUXFILEdBQ1QsUUFHRixHQUFHd0IsU0FBU3JNLEtBQUs2SyxHQUNyQmhFLE1BQU0sR0FBSSxHQUFHbUgsZ0JBNUxrRCxLQUFLQyxLQUFLTCxLQUNwRUMsRUFBT0QsRUFDUEEsT0FBTzFFLElBR1QwRSxFQUFPQSxHQUFRLElBQUl2QyxnQkFFRUEsT0FDbkJ1QyxFQUFPLElBQUl2QyxLQUFLdUMsSUFHZE0sTUFBTU4sR0FDUixNQUFNdE4sVUFBVSxnQkE4SjFCLElBQWdCdUssRUF4SkpzRCxHQUhKTixFQUFPeEksT0FBT3NJLEVBQVdTLE1BQU1QLElBQVNBLEdBQVFGLEVBQVdTLE1BQWUsVUFHckR2SCxNQUFNLEVBQUcsR0FDWixTQUFkc0gsR0FBc0MsU0FBZEEsSUFDMUJOLEVBQU9BLEVBQUtoSCxNQUFNLEdBQ2xCaUgsR0FBTSxFQUNZLFNBQWRLLElBQ0ZKLEdBQU0sSUFJVixJQUFJL0ssRUFBSThLLEVBQU0sU0FBVyxNQUNyQk8sRUFBSVQsRUFBSzVLLEVBQUksVUFDYnNMLEVBQUlWLEVBQUs1SyxFQUFJLFNBQ2J1TCxFQUFJWCxFQUFLNUssRUFBSSxXQUNiNkMsRUFBSStILEVBQUs1SyxFQUFJLGNBQ2J3TCxFQUFJWixFQUFLNUssRUFBSSxXQUNieUwsRUFBSWIsRUFBSzVLLEVBQUksYUFDYjZGLEVBQUkrRSxFQUFLNUssRUFBSSxhQUNiMEwsRUFBSWQsRUFBSzVLLEVBQUksa0JBQ2IzRCxFQUFJeU8sRUFBTSxFQUFJRixFQUFLZSxvQkFDbkJDLEVBMkZaLFNBQWlCaEIsR0FFZixJQUFJaUIsRUFBaUIsSUFBSXhELEtBQUt1QyxFQUFLa0IsY0FBZWxCLEVBQUttQixXQUFZbkIsRUFBS29CLFdBR3hFSCxFQUFlSSxRQUFRSixFQUFlRyxXQUFjSCxFQUFlSyxTQUFXLEdBQUssRUFBSyxHQUd4RixJQUFJQyxFQUFnQixJQUFJOUQsS0FBS3dELEVBQWVDLGNBQWUsRUFBRyxHQUc5REssRUFBY0YsUUFBUUUsRUFBY0gsV0FBY0csRUFBY0QsU0FBVyxHQUFLLEVBQUssR0FHckYsSUFBSUUsRUFBS1AsRUFBZUYsb0JBQXNCUSxFQUFjUixvQkFLNUQsT0FKQUUsRUFBZVEsU0FBU1IsRUFBZVMsV0FBYUYsR0FJN0MsRUFBSTVPLEtBQUtDLE9BREFvTyxFQUFpQk0sR0FBYSxPLENBN0doQ0ksQ0FBUTNCLEdBQ1o0QixFQXVIWixTQUFzQjVCLEdBQ3BCLElBQUk2QixFQUFNN0IsRUFBS3NCLFNBSWYsT0FIVyxJQUFSTyxJQUNEQSxFQUFNLEdBRURBLEMsQ0E1SE9DLENBQWE5QixHQUNqQitCLEVBQVEsQ0FDVnRCLEVBQU1BLEVBQ051QixHQUFNQyxFQUFJeEIsR0FDVnlCLElBQU1uQyxFQUFXb0MsS0FBS0MsU0FBUzFCLEdBQy9CMkIsS0FBTXRDLEVBQVdvQyxLQUFLQyxTQUFTMUIsRUFBSSxHQUNuQ0MsRUFBTUEsRUFBSSxFQUNWMkIsR0FBTUwsRUFBSXRCLEVBQUksR0FDZDRCLElBQU14QyxFQUFXb0MsS0FBS0ssV0FBVzdCLEdBQ2pDOEIsS0FBTTFDLEVBQVdvQyxLQUFLSyxXQUFXN0IsRUFBSSxJQUNyQytCLEdBQU1qTCxPQUFPUSxHQUFHZ0IsTUFBTSxHQUN0QjBKLEtBQU0xSyxFQUNOMkssRUFBTWhDLEVBQUksSUFBTSxHQUNoQmlDLEdBQU1aLEVBQUlyQixFQUFJLElBQU0sSUFDcEJBLEVBQU1BLEVBQ05rQyxHQUFNYixFQUFJckIsR0FDVkMsRUFBTUEsRUFDTmtDLEdBQU1kLEVBQUlwQixHQUNWNUYsRUFBTUEsRUFDTitILEdBQU1mLEVBQUloSCxHQUNWZ0ksRUFBTWhCLEVBQUluQixFQUFHLEdBQ2JBLEVBQU1tQixFQUFJclAsS0FBS3NRLE1BQU1wQyxFQUFJLEtBQ3pCdFAsRUFBTW9QLEVBQUksR0FBS2IsRUFBV29DLEtBQUtnQixVQUFVLEdBQUtwRCxFQUFXb0MsS0FBS2dCLFVBQVUsR0FDeEVDLEdBQU14QyxFQUFJLEdBQUtiLEVBQVdvQyxLQUFLZ0IsVUFBVSxHQUFLcEQsRUFBV29DLEtBQUtnQixVQUFVLEdBQ3hFRSxFQUFNekMsRUFBSSxHQUFLYixFQUFXb0MsS0FBS2dCLFVBQVUsR0FBS3BELEVBQVdvQyxLQUFLZ0IsVUFBVSxHQUN4RUcsR0FBTTFDLEVBQUksR0FBS2IsRUFBV29DLEtBQUtnQixVQUFVLEdBQUtwRCxFQUFXb0MsS0FBS2dCLFVBQVUsR0FDeEVJLEVBQU1wRCxFQUFNLE1BQVFELEVBQU0sT0FBU3pJLE9BQU91SSxHQUFNd0QsTUFBTTNELElBQWEsQ0FBQyxLQUFLNEQsTUFBTUMsUUFBUTVELEVBQWMsSUFDckdyTyxHQUFPQSxFQUFJLEVBQUksSUFBTSxLQUFPd1EsRUFBbUMsSUFBL0JyUCxLQUFLQyxNQUFNRCxLQUFLVyxJQUFJOUIsR0FBSyxJQUFZbUIsS0FBS1csSUFBSTlCLEdBQUssR0FBSSxHQUN2RmtTLEVBQU0sQ0FBQyxLQUFNLEtBQU0sS0FBTSxNQUFNbEQsRUFBSSxHQUFLLEVBQUksR0FBS0EsRUFBSSxJQUFNQSxFQUFJLElBQU0sSUFBTUEsRUFBSSxJQUMvRU8sRUFBTUEsRUFDTlksRUFBTUEsR0FHUixPQUFPM0IsRUFBS3lELFFBQVE5RCxHQUFPLFNBQVU0RCxHQUNuQyxPQUFJQSxLQUFTekIsRUFDSkEsRUFBTXlCLEdBRVJBLEVBQU12SyxNQUFNLEVBQUd1SyxFQUFNblIsT0FBUyxFLE1Bb0MvQyxTQUFTNFAsRUFBSWhGLEVBQUsxSCxHQUdoQixJQUZBMEgsRUFBTXhGLE9BQU93RixHQUNiMUgsRUFBTUEsR0FBTyxFQUNOMEgsRUFBSTVLLE9BQVNrRCxHQUNsQjBILEVBQU0sSUFBTUEsRUFFZCxPQUFPQSxDLENBckNQOEMsRUFBV1MsTUFBUSxDQUNqQm9ELFFBQXlCLDJCQUN6QkMsVUFBeUIsU0FDekJDLFdBQXlCLGNBQ3pCQyxTQUF5QixlQUN6QkMsU0FBeUIscUJBQ3pCQyxVQUF5QixVQUN6QkMsV0FBeUIsYUFDekJDLFNBQXlCLGVBQ3pCQyxRQUF5QixhQUN6QkMsUUFBeUIsV0FDekJDLFlBQXlCLHlCQUN6QkMsZUFBeUIsK0JBQ3pCQyxvQkFBeUIsK0JBSTNCekUsRUFBV29DLEtBQU8sQ0FDaEJDLFNBQVUsQ0FDUixNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUMxQyxTQUFVLFNBQVUsVUFBVyxZQUFhLFdBQVksU0FBVSxZQUVwRUksV0FBWSxDQUNWLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUM3RSxVQUFXLFdBQVksUUFBUyxRQUFTLE1BQU8sT0FBUSxPQUFRLFNBQVUsWUFBYSxVQUFXLFdBQVksWUFFaEhXLFVBQVcsQ0FDVCxJQUFLLElBQUssS0FBTSxLQUFNLElBQUssSUFBSyxLQUFNLE9BMkZ4QzdRLEVBQUFILFFBQWlCNE4sQ0FJcEIsQ0F0TkQsRSxJSkRJMEUsRUFBTSxHQU9WQyxFQW9CQSxTQUFnQkMsRUFBS0MsR0FDbkIsR0FBbUIsaUJBQVJELEVBQ1QsTUFBTSxJQUFJalMsVUFBVSxxQkFJdEIsR0FBWSxJQUFSa1MsRUFBVyxPQUFPRCxFQUN0QixHQUFZLElBQVJDLEVBQVcsT0FBT0QsRUFBTUEsRUFFNUIsSUFBSXZSLEVBQU11UixFQUFJdFMsT0FBU3VTLEVBQ3ZCLEdBQUl0RyxJQUFVcUcsUUFBd0IsSUFBVnJHLEVBQzFCQSxFQUFRcUcsRUFDUkYsRUFBTSxRQUNELEdBQUlBLEVBQUlwUyxRQUFVZSxFQUN2QixPQUFPcVIsRUFBSUksT0FBTyxFQUFHelIsR0FHdkIsS0FBT0EsRUFBTXFSLEVBQUlwUyxRQUFVdVMsRUFBTSxHQUNyQixFQUFOQSxJQUNGSCxHQUFPRSxHQUdUQyxJQUFRLEVBQ1JELEdBQU9BLEVBS1QsT0FEQUYsR0FEQUEsR0FBT0UsR0FDR0UsT0FBTyxFQUFHelIsRSxFS3hEdEIsSUNMSTBSLEVES0pDLEVBQWlCLFNBQWlCSixFQUFLQyxFQUFLSSxHQUcxQyxPQUZBTCxFQUFNQSxFQUFJbEcsZ0JBRVMsSUFBUm1HLEVBQ0ZELEdBSVBLLEVBRFMsSUFBUEEsRUFDRyxJQUNJQSxFQUNKQSxFQUFHdkcsV0FFSCxJQUdBaUcsRUFBT00sRUFBSUosRUFBTUQsRUFBSXRTLFFBQVVzUyxFLEVDckJsQ00sRUFBQSxXQUFPLEVBRVRDLEVBQWMsQ0FBRUMsVUFBVyxHQUFJQyxPQUFRLEdBQUlDLE9BQVEsSUFRakRDLEVBQXFCLENBQ3pCLFlBQ0EsYUFDQSxjQUdGLFNBQVNDLEVBQVFDLEVBQVN4USxHQUN4QixZLFVBRCtCLElBQ3hCLElBQUl5USxTQUFKLFNBQWFDLEVBQVNDLEdBQzNCM1EsRUFBT2dILEVBQU8sR0FBSWtKLEVBQWFsUSxHQUMvQixJQUFNNFEsRUFBV0MsRUFBZ0JsSyxPQUFPTSxPQUFPLEdBQUlqSCxFQUFNLENBQ3ZEbVEsVUFBVyxHQUNYMVAsV0FBTzZGLEtBRUh3SyxFQUFPTixFQUFVLGNBQWdCLFlBQ2pDTyxFQUFTN0gsSUFDZixPQUFJNkgsR0FBVUEsRUFBT0MsUUFBa0MsbUJBQWpCRCxFQUFPRCxHQUNwQ0MsRUFBT0QsR0FBTTlKLEVBQU8sR0FBSWhILEVBQU0sQyxTQUFFNFEsS0FDcENoSSxNQURJLFNBQ0NxSSxHQUFBLE9BQU1QLEVBQVFPLEVBQUEsSUFFZlAsRUFBUSxDLFNBQUVFLEVBQVVHLFFBQVEsRyxJQThDbEMsU0FBU0csRUFBYUMsRUFBU25SLEdBQ3BDLFksVUFEMkMsSUFyQjdDLFNBQWdDbVIsR0FDOUIsT0FBTyxJQUFJVixTQUFKLFNBQWFDLEdBQ2xCLElBQU1VLEVBQWFELEVBQVFFLFFBQVEsS0FDbkMsSUFBb0IsSUFBaEJELEVBQUosQ0FXQSxJQVBBLElBQU1FLEVBQVNILEVBQVFsTixNQUFNbU4sRUFBYSxHQUNwQ0csRUFBYXpJLE9BQU8wSSxLQUFLRixHQUN6QkcsRUFBT04sRUFBUWxOLE1BQU0sRUFBR21OLEdBQ3hCTSxFQUFZLGVBQWVDLEtBQUtGLEdBQ2hDRyxHQUFRRixFQUFZQSxFQUFVLEdBQUssVUFBT3BMLEVBQzFDdUwsRUFBSyxJQUFJQyxZQUFZUCxFQUFXbFUsUUFDaEMwVSxFQUFLLElBQUlDLFdBQVdILEdBQ2pCblYsRUFBSSxFQUFHQSxFQUFJNlUsRUFBV2xVLE9BQVFYLElBQ3JDcVYsRUFBR3JWLEdBQUs2VSxFQUFXVSxXQUFXdlYsR0FFaENnVSxFQUFRLElBQUk1SCxPQUFPb0osS0FBSyxDQUFFTCxHQUFNLENBQUVKLEtBQU1HLEksTUFidENsQixFQUFRLElBQUk1SCxPQUFPb0osSyxJQWtCaEJDLENBQXNCaEIsR0FDMUJ2SSxNQURJLFNBQ0N3SixHQUFBLE9BQVFDLEVBQVNELEVBQU1wUyxFQUFBLEcsQ0FHMUIsU0FBU3FTLEVBQVVELEVBQU1wUyxHQUM5QixZLFVBRHFDLElBQzlCLElBQUl5USxTQUFKLFNBQVlDLEdBRWpCLElBQU1FLEdBRE41USxFQUFPZ0gsRUFBTyxHQUFJa0osRUFBYWxRLElBQ1Q0USxTQUVoQkcsRUFBUzdILElBQ2YsR0FBSTZILEdBQXFDLG1CQUFwQkEsRUFBT3NCLFVBQTJCdEIsRUFBT0MsT0FFNUQsT0FBT0QsRUFBT3NCLFNBQVNELEVBQU1wTCxFQUFPLEdBQUloSCxFQUFNLEMsU0FBRTRRLEtBQzdDaEksTUFESSxTQUNDcUksR0FBQSxPQUFNUCxFQUFRTyxFQUFBLElBR2pCbkIsS0FDSEEsRUFBT3pHLFNBQVNpSixjQUFjLE1BQ3pCQyxNQUFNQyxXQUFhLFNBQ3hCMUMsRUFBS2hJLE9BQVMsVUFFaEJnSSxFQUFLMkMsU0FBVzdCLEVBQ2hCZCxFQUFLNEMsS0FBTzVKLE9BQU82SixJQUFJQyxnQkFBZ0JSLEdBQ3ZDL0ksU0FBU3dKLEtBQUtDLFlBQVloRCxHQUMxQkEsRUFBS2lELFFBQUwsV0FDRWpELEVBQUtpRCxRQUFVOUMsRUFDZitDLFlBQUEsV0FDRWxLLE9BQU82SixJQUFJTSxnQkFBZ0JiLEdBQ3ZCdEMsRUFBS29ELGVBQWVwRCxFQUFLb0QsY0FBY0MsWUFBWXJELEdBQ3ZEQSxFQUFLc0QsZ0JBQWdCLFFBQ3JCMUMsRUFBUSxDLFNBQUVFLEVBQVVHLFFBQVEsRyxLQUdoQ2pCLEVBQUt1RCxPLElBc0JKLFNBQVN4QyxFQUFpQnhLLEdBSS9CLFEsVUFKcUMsSUFJYixtQkFIeEJBLEVBQU1XLEVBQU8sR0FBSVgsSUFHRmlOLEtBQ2IsT0FBT2pOLEVBQUlpTixLQUFLak4sR0FDWCxHQUFJQSxFQUFJaU4sS0FDYixPQUFPak4sRUFBSWlOLEtBR2IsSUFLTUMsRUFMRjlTLEVBQVEsS0FDUjBQLEVBQVksSUFDYSxpQkFBbEI5SixFQUFJOEosWUFBd0JBLEVBQVk5SixFQUFJOEosV0FFOUIsaUJBQWQ5SixFQUFJNUYsU0FHWDhTLEVBRDZCLGlCQUFwQmxOLEVBQUlrTixZQUNDbE4sRUFBSWtOLFlBRUozVixLQUFLUSxJQUFJLElBQU9pSSxFQUFJNUYsT0FFcENBLEVBQVFzUCxFQUFRdE4sT0FBTzRELEVBQUk1RixPQUFRZ0MsT0FBTzhRLEdBQWFsVyxPQUFRLE1BR2pFLElBQU1tVyxFQUFXOVUsU0FBUzJILEVBQUlvTixjQUFnQi9VLFNBQVMySCxFQUFJcU4sUUFBVXJOLEVBQUlvTixZQUFjLEVBQXRFLEdBQTZFcE4sRUFBSSxNQUFVLEdBQzVHLE9BQWEsTUFBVDVGLEVBQ0ssQ0FBRStTLEVBQVUvUyxHQUFRa1QsT0FBT0MsU0FBU3RNLEtBQUssS0FBTzZJLEVBR2hELENBQUU5SixFQUFJK0osT0FBUS9KLEVBQUl3TixNQUREeE4sRUFBSXlOLFVBQ3NCTixFQUFVbk4sRUFBSTBOLEtBQU0xTixFQUFJZ0ssUUFBU3NELE9BQU9DLFNBQVN0TSxLQUFLLEtBQU82SSxDLENDcEtuSCxJQUFNNkQsRUFBYyxDQUNsQkMsVUFBVyxhQUNYQyxTQUFVLFVBQ1ZDLFVBQVcsVUFDWEMsS0FBTSxRQUNOQyxHQUFJLEtBQ0pDLFdBQVksWUFDWkMsUUFBUyxPQUNUQyxhQUFjLFVBSVZDLEVBQVUsQ0FDZCxhQUFjLFFBQVMsZ0JBQWlCLGNBQ3hDLGFBQWMsY0FBZSxRQUFTLGFBQ3RDLG1CQUFvQixnQkFBaUIsZUFDckMsZUFBZ0IsY0FBZSxTQUFVLFVBQVcsYUFDcEQsU0FBVSxPQUFRLE9BQVEsU0FBVSxTQUFVLFVBQVcsVUFDekQsT0FBUSxXQUFZLGNBQWUsTUFBTyxlQUFnQixZQUMxRCxRQUFTLE9BQVEsUUFBUyxZQUFhLFVBQVcsS0FBTSxLQUN4RCxvQkFBcUIsT0FBUSxTQUFVLFdBQVksbUJBS3hDQyxFQUFBLFNBQWlCQyxHQUNmaE8sT0FBT2dCLEtBQUtnTixHQUNwQmxOLFNBQUwsU0FBYVcsR0FDUEEsS0FBTzRMLEVBRVRZLFFBQVFDLEtBQVIsb0RBQWlFek0sRUFBQSxvQkFEbEQ0TCxFQUFZNUwsR0FDNkQsTUFDOUVxTSxFQUFRSyxTQUFTMU0sSUFDM0J3TSxRQUFRQyxLQUFSLG9EQUFpRXpNLEVBQUEsSSxLQ2pDdkUsSUF3RkEyTSxFQXRGYSxDQUdYLENBQUUsV0FBWSxNQUFPLE9BQ3JCLENBQUUsZUFBZ0IsSUFBSyxLQUN2QixDQUFFLFNBQVUsSUFBSyxLQUNqQixDQUFFLGVBQWdCLElBQUssS0FDdkIsQ0FBRSxnQkFBaUIsS0FBTSxNQUd6QixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLEtBQ1osQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLE1BQU8sSUFBSyxLQUNkLENBQUUsTUFBTyxJQUFLLEtBQ2QsQ0FBRSxNQUFPLElBQUssS0FHZCxDQUFFLEtBQU0sSUFBSyxNQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxHQUFJLEtBQ1osQ0FBRSxLQUFNLEdBQUksSUFDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsTUFBTyxHQUFJLElBQ2IsQ0FBRSxNQUFPLEtBQU0sTUFDZixDQUFFLE1BQU8sS0FBTSxNQUNmLENBQUUsS0FBTSxJQUFNLE1BQ2QsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLE1BQU8sSUFBSyxNQUNkLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxNQUFPLElBQUssS0FDZCxDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxHQUFJLEtBQ1osQ0FBRSxLQUFNLEdBQUksSUFDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsTUFBTyxHQUFJLElBQ2IsQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsS0FBTSxJQUFLLE1BQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsTUFBTyxHQUFJLElBSWIsQ0FBRSxjQUFlLElBQUssSUFBSyxNQUMzQixDQUFFLFNBQVUsSUFBSyxHQUFJLE1BQ3JCLENBQUUsUUFBUyxJQUFLLEdBQUksTUFDcEIsQ0FBRSxlQUFnQixFQUFHLEVBQUcsTUFDeEIsQ0FBRSxTQUFVLEdBQUksR0FBSSxNQUNwQixDQUFFLFVBQVcsR0FBSSxHQUFJLE1BQ3JCLENBQUUsU0FBVSxJQUFLLEdBQU0sTUFDdkIsQ0FBRSxTQUFVLEdBQU0sR0FBTSxNQUN4QixDQUFFLFNBQVUsR0FBTSxHQUFNLE1BQ3hCLENBQUUsU0FBVSxHQUFNLEdBQU0sTUFDeEIsQ0FBRSxTQUFVLEdBQU0sR0FBTSxNQUN4QixDQUFFLFNBQVUsRUFBRyxHQUFJLE1BQ25CLENBQUUsU0FBVSxHQUFJLEdBQUksTUFDcEIsQ0FBRSxTQUFVLEdBQUksR0FBSSxNQUNwQixDQUFFLFNBQVUsR0FBSSxHQUFJLE1BQ3BCLENBQUUsU0FBVSxHQUFJLEdBQUksTUFDcEIsQ0FBRSxVQUFXLEdBQUksR0FBSSxNQUNyQixDQUFFLFVBQVcsR0FBSSxHQUFJLE1BQ3JCLENBQUUsVUFBVyxHQUFJLEdBQUksT0FHSEMsUUFBTCxTQUFhQyxFQUFNQyxHQUNoQyxJQUFNQyxFQUFPLENBQ1hDLE1BQU9GLEVBQU8sSUExRkcsS0EyRmpCRyxXQUFZLENBQUVILEVBQU8sR0FBSUEsRUFBTyxLQUlsQyxPQUZBRCxFQUFLQyxFQUFPLElBQU1DLEVBQ2xCRixFQUFLQyxFQUFPLEdBQUd4RyxRQUFRLEtBQU0sTUFBUXlHLEVBQzlCRixDLEdBQ04sSUNoR0hLLEVBQWlCLFdBQ2IsSUFBSyxJQUFJNVksRUFBSSxFQUFHQSxFQUFJeUwsVUFBVTlLLE9BQVFYLElBQ2xDLFFBQXFCNEosSUFBakI2QixVQUFVekwsR0FBa0IsT0FBT3lMLFVBQVV6TCxFLEVDRHJEMFksRUFBUSxDQUFFLEtBQU0sS0FBTSxJQUFLLEtBQU0sS0FBTSxLQUFNLEtBQU0sTUFFbkRHLEVBQWMsQ0FFaEI1SixFQUFHLENBQ0Q2SixPQUFRLFNBQ1JDLE9BQVEsR0FFVkMsR0FBSSxDQUNGRixPQUFRLFNBQ1JDLE9BQVEsS0FFVm5JLEdBQUksQ0FDRmtJLE9BQVEsU0FDUkMsT0FBUSxNQUdWRSxHQUFJLENBQ0ZILE9BQVEsV0FDUkMsT0FBUSxFQUFJLElBRWRHLEdBQUksQ0FDRkosT0FBUSxXQUNSQyxPQUFRLEVBQUksR0FFZEksR0FBSSxDQUNGTCxPQUFRLFdBQ1JDLE9BQVEsR0FFVkssR0FBSSxDQUNGTixPQUFRLFdBQ1JDLE9BQVEsS0FJWixNQUFNTSxFQUFVLENBQ2RDLE9BQVEsQ0FDTjVCLEtBQU0sSUFDTjZCLE1BQU8sRUFBSSxPQUViQyxTQUFVLENBQ1I5QixLQUFNLEtBQ042QixNQUFPLFFBK0RYLElBQUFFLEVBdkRBLFNBQTBCNVksRUFBTzZZLEVBQVVDLEVBQVFyVyxHQUNqRCxHQUFxQixpQkFBVnpDLElBQXVCbUIsU0FBU25CLEdBQVEsTUFBTSxJQUFJUCxNQUFNLGlDQUNuRSxJQUFLb1osSUFBYUMsRUFBUSxNQUFNLElBQUlyWixNQUFNLGtDQUcxQyxJQUFJc1osRUFBZ0JoQixHQURwQnRWLEVBQU9BLEdBQVEsSUFDa0JzVyxjQUFlLElBQzVDQyxFQUFZdlcsRUFBS3VXLFVBQ2pCQyxHQUFpQyxJQUFwQnhXLEVBQUt3VyxXQUt0QixHQUhBSixFQUFXQSxFQUFTaEwsY0FDcEJpTCxFQUFTQSxFQUFPakwsZUFFaUIsSUFBN0JnSyxFQUFNL0QsUUFBUStFLEdBQWtCLE1BQU0sSUFBSXBaLE1BQU0sc0JBQXdCb1osRUFBVyxzQkFBd0JoQixFQUFNOU4sS0FBSyxPQUMxSCxJQUErQixJQUEzQjhOLEVBQU0vRCxRQUFRZ0YsR0FBZ0IsTUFBTSxJQUFJclosTUFBTSxzQkFBd0JxWixFQUFTLHNCQUF3QmpCLEVBQU05TixLQUFLLE9BRXRILEdBQUk4TyxJQUFhQyxFQUVmLE9BQU85WSxFQUdULElBQUlrWixFQUFXLEVBQ1hDLEVBQWEsRUFDYkMsR0FBWSxFQUVDLE9BQWJQLElBQ0ZNLEVBQWEsRUFBSUosRUFDakJGLEVBQVcsTUFFRSxPQUFYQyxJQUNGTSxHQUFZLEVBQ1pGLEVBQVdILEVBQ1hELEVBQVMsTUFHWCxJQUFJTyxFQUFlckIsRUFBWWEsR0FDM0JTLEVBQWF0QixFQUFZYyxHQUd6QlMsRUFBU3ZaLEVBQVFxWixFQUFhbkIsT0FBU2lCLEVBR3ZDRSxFQUFhcEIsU0FBV3FCLEVBQVdyQixTQUVyQ3NCLEdBQVVmLEVBQVFhLEVBQWFwQixRQUFRUyxPQUd6QyxJQUFJblEsRUFBU2dSLEVBQVNELEVBQVdwQixPQUFTZ0IsRUFNMUMsT0FMSUUsR0FBYUgsRUFDZjFRLEVBQVNsSSxLQUFLc1EsTUFBTXBJLEdBQ1UsaUJBQWR5USxHQUEwQjdYLFNBQVM2WCxLQUNuRHpRLEVBdERKLFNBQWdCdkksRUFBT3daLEdBQ3JCLE9BQU85WSxPQUFPTCxLQUFLc1EsTUFBTTNRLEVBQVEsSUFBTXdaLEdBQVksS0FBT0EsRSxDQXFEL0M3SSxDQUFNcEksRUFBUXlRLElBRWxCelEsQyxFQ3JGRixTQUFTa1IsRUFBaUIvQyxFQUFXZ0QsRUFBa0JDLEVBQWdCWixHQUM1RSxZLFVBRHNELFcsVUFBZ0IsVyxVQUFzQixJQUNyRkgsRUFBY2xDLEVBQVdnRCxFQUFXQyxFQUFTLEMsY0FDbERaLEVBQ0FDLFVBQVcsRUFDWEMsWUFBWSxHLENDTUQsU0FBU1csRUFBY0MsRUFBT3pDLEdBQzNDLElBQUkwQyxFQUFPQyxFQUNQQyxFQUFZQyxFQUNaQyxFQUFhQyxFQUVYclAsRUFBVWUsSUFDVmlNLEVBQWFWLEVBQVNVLFdBQ3RCc0MsRUFoQ1IsU0FBK0JoRCxHQUM3QixTQUFLQSxFQUFTVSxZQUNxQixpQkFBeEJWLEVBQVNVLGNBQ2hCMVUsTUFBTUMsUUFBUStULEVBQVNVLGFBQWVWLEVBQVNVLFdBQVdoWSxRQUFVLEcsQ0E2QmxEdWEsQ0FBcUJqRCxHQUNyQ2tELEVBQVlULEVBQU1TLFVBQ3BCQyxJQUFhSCxJQUF3QyxJQUF4QmhELEVBQVNtRCxXQUN0Q0MsS0FBZ0JGLEdBQWFGLElBQWlCaEQsRUFBU29ELFlBRXREMVAsSUFBU3lQLEVBQWFDLEdBQWMsR0FDekMsSUFPSUMsRUFBWUMsRUFQVjdDLEVBQVFULEVBQVNTLE1BQ2pCa0IsRUFBbUQsaUJBQTNCM0IsRUFBUzJCLGVBQThCNVgsU0FBU2lXLEVBQVMyQixlQUFrQjNCLEVBQVMyQixjQUFnQixHQUM1SDRCLEVBQVFwYSxFQUFRNlcsRUFBU3VELE1BQU8sR0FFaENDLEVBQW1COVAsRUFBVVMsT0FBT3FQLGlCQUFtQixFQUN2REMsRUFBaUJMLEVBQWNJLEVBQW1CLEVBUXJCLGlCQUF4QnhELEVBQVNxRCxZQUEyQnRaLFNBQVNpVyxFQUFTcUQsWUFHL0RDLEVBQW1CbmEsRUFBUTZXLEVBQVNzRCxpQkFEcENELEVBQWFyRCxFQUFTcUQsWUFHbEJMLEdBRUZLLEVBQWFJLEVBR2JILEVBQW1CbmEsRUFBUTZXLEVBQVNzRCxpQkFBa0IsSUFLdERBLEVBQW1CbmEsRUFBUTZXLEVBQVNzRCxpQkFGcENELEVBQWFHLEdBT3FCLGlCQUEzQnhELEVBQVMwRCxlQUE4QjNaLFNBQVNpVyxFQUFTMEQsaUJBQ2xFTCxFQUFhcGEsS0FBS08sSUFBSXdXLEVBQVMwRCxjQUFlTCxJQUk1Q0gsSUFDRkcsRUFBYUMsR0FNZixJQUNJSyxFQUFXQyxFQURmQyxFQTVFRixTQUF3QnBCLEVBQU96QyxHQUU3QixJQUFLdkwsSUFDSCxNQUFPLENBQUUsSUFBSyxLQUdoQixJQUFJcVAsRUFBVTlELEVBQVMrRCxRQUFVNVAsT0FFakMsR0FBSTJQLElBQVkzUCxRQUNaMlAsSUFBWXBQLFVBQ1pvUCxJQUFZcFAsU0FBU3dKLEtBQ3ZCLE1BQU8sQ0FBRS9KLE9BQU82UCxXQUFZN1AsT0FBTzhQLGFBRW5DLElBQUFKLEVBQTBCQyxFQUFRSSx3QkFDbEMsTUFBTyxDQURDTCxFQUFBbkIsTUFBT21CLEVBQUFsQixPLENBK0RtQndCLENBQWMxQixFQUFPekMsR0FBbkRvRSxFQUFBUCxFQUFBLEdBQWFRLEVBQUFSLEVBQUEsR0FJbkIsR0FBSWIsRUFBZSxDQUNqQixJQUFNN1IsRUR4RkgsU0FBa0N1UCxFQUFZNkIsRUFBZ0JaLEdBQ25FLFEsVUFENkQsVyxVQUFzQixJQUN6RCxpQkFBZmpCLEVBQXlCLENBQ2xDLElBQU1qTixFQUFNaU4sRUFBV2pLLGNBQ3ZCLEtBQU1oRCxLQUFPMk0sR0FDWCxNQUFNLElBQUkvWCxNQUFKLHlCQUFtQ3FZLEVBQUEsc0ZBRTNDLElBQU1ILEVBQVNILEVBQVczTSxHQUMxQixPQUFPOE0sRUFBT0csV0FBV2xWLEtBQWxCLFNBQXNCc0wsR0FBQSxPQUNwQnVMLEVBQWdCdkwsRUFBR3lKLEVBQU9FLE1BQU84QixFQUFTWixFQUFBLEcsQ0FHbkQsT0FBT2pCLEMsQ0M2RVE0RCxDQUF3QjVELEVBQVlELEVBQU9rQixHQUNwRDRDLEVBQVV0YixLQUFLUSxJQUFJMEgsRUFBTyxHQUFJQSxFQUFPLElBQ3JDcVQsRUFBU3ZiLEtBQUtPLElBQUkySCxFQUFPLEdBQUlBLEVBQU8sSUFDMUMsR0FBSTZPLEVBQVN5RSxZQUFhLENBQ3hCLElBQU1DLEVBQXFDLGNBQXpCMUUsRUFBU3lFLFlBQzNCL0IsRUFBUWdDLEVBQVlILEVBQVVDLEVBQzlCN0IsRUFBUytCLEVBQVlGLEVBQVNELEMsTUFFOUI3QixFQUFRdlIsRUFBTyxHQUNmd1IsRUFBU3hSLEVBQU8sR0FHbEJ3UyxFQUFZakIsRUFDWmtCLEVBQWFqQixFQUdiRCxHQUFpQixFQUFSYSxFQUNUWixHQUFrQixFQUFSWSxDLE1BSVZJLEVBRkFqQixFQUFRMEIsRUFHUlIsRUFGQWpCLEVBQVMwQixFQU1YLElBQUlNLEVBQVlqQyxFQUNaa0MsRUFBYWpDLEVBWWpCLEdBWElLLEdBQWlCdkMsSUFFbkJrRSxFQUFZdEMsRUFBZ0JLLEVBQU9qQyxFQUFPLEtBQU1rQixHQUNoRGlELEVBQWF2QyxFQUFnQk0sRUFBUWxDLEVBQU8sS0FBTWtCLElBSXBEaUIsRUFBYTNaLEtBQUtzUSxNQUFNb0wsR0FDeEI5QixFQUFjNVosS0FBS3NRLE1BQU1xTCxHQUdyQnpCLElBQWVELEdBQWFGLEVBQWUsQ0FDN0MsSUFBTTZCLEVBQVNuQyxFQUFRQyxFQUNqQm1DLEVBQWVWLEVBQWNDLEVBQzdCVSxFQUFvQjViLEVBQVE2VyxFQUFTK0Usa0JBQW1CLElBQ3hEQyxFQUFXL2IsS0FBS3NRLE1BQU02SyxFQUFrQyxFQUFwQlcsR0FDcENFLEVBQVloYyxLQUFLc1EsTUFBTThLLEVBQW1DLEVBQXBCVSxJQUN4Q25DLEVBQWFvQyxHQUFZbkMsRUFBY29DLEtBQ3JDSCxFQUFlRCxHQUNqQmhDLEVBQWNvQyxFQUNkckMsRUFBYTNaLEtBQUtzUSxNQUFNc0osRUFBY2dDLEtBRXRDakMsRUFBYW9DLEVBQ2JuQyxFQUFjNVosS0FBS3NRLE1BQU1xSixFQUFhaUMsSSxDQWU1QyxNQUFPLEMsTUFDTHRCLEUsV0FDQUYsRSxNQUNBWCxFLE9BQ0FDLEVBQ0FqQyxXQUFZLENBQUVnQyxFQUFPQyxHQUNyQmxDLE1BQU9BLEdBQVMsSyxRQWhCbEJxQyxFQUFjTSxFQUFjbmEsS0FBS3NRLE1BQU04SixFQUFhVCxHQUFjM1osS0FBS3NRLE1BQU04SixFQUFhc0IsSUFNN0RqQyxFLFFBTDdCSyxFQUFlSyxFQUFjbmEsS0FBS3NRLE1BQU04SixFQUFhUixHQUFlNVosS0FBS3NRLE1BQU04SixFQUFhdUIsSUFNOURqQyxFLGNBWTVCaEIsRSxjQWhCb0J5QixFQUFjbmEsS0FBS3NRLE1BQU1xSixHQUFjM1osS0FBS3NRLE1BQU1vTCxHLGVBQ2pEdkIsRUFBY25hLEtBQUtzUSxNQUFNc0osR0FBZTVaLEtBQUtzUSxNQUFNcUwsRyxZQWtCeEU5QixFLGFBQ0FDLEUsVUFDQVksRSxXQUNBQyxFLFdBQ0FoQixFLFlBQ0FDLEUsU0ZuRW1CcEMsRUczR3ZCLElBQUF5RSxFQUNBLFNBQTJCcEksRUFBTXpSLEdBQy9CLEdBQW9CLGlCQUFUeVIsRUFDVCxNQUFNLElBQUkvVCxVQUFVLDRCQUt0QixHQUZBc0MsRUFBT0EsR0FBUSxHQUVTLG9CQUFicUosV0FBNkJySixFQUFLOFosT0FDM0MsT0FBTyxLQUdULElBQUlBLEVBQVM5WixFQUFLOFosUUFBVXpRLFNBQVNpSixjQUFjLFVBQ3pCLGlCQUFmdFMsRUFBS3FYLFFBQ2R5QyxFQUFPekMsTUFBUXJYLEVBQUtxWCxPQUVLLGlCQUFoQnJYLEVBQUtzWCxTQUNkd0MsRUFBT3hDLE9BQVN0WCxFQUFLc1gsUUFHdkIsSUFDSXlDLEVBREFDLEVBQVVoYSxFQUVkLElBQ0UsSUFBSWlhLEVBQVEsQ0FBRXhJLEdBRWdCLElBQTFCQSxFQUFLSixRQUFRLFVBQ2Y0SSxFQUFNL2EsS0FBSyxnQkFBa0J1UyxHQUcvQixJQUFLLElBQUkvVSxFQUFJLEVBQUdBLEVBQUl1ZCxFQUFNNWMsT0FBUVgsSUFFaEMsR0FEQXFkLEVBQUtELEVBQU9JLFdBQVdELEVBQU12ZCxHQUFJc2QsR0FDekIsT0FBT0QsQyxDQUVqQixNQUFPemQsR0FDUHlkLEVBQUssSSxDQUVQLE9BQVFBLEdBQU0sSSxFQ3pCRCxTQUFTSSxFQUFjeEYsR0FDcEMsSUFBSXlGLEVBQVNOLE8sVUFEa0MsSUFFL0MsSUFBSU8sR0FBYSxFQUNqQixJQUF3QixJQUFwQjFGLEVBQVNtRixPQUFrQixDQUc3QixLQURBTSxFQUFVekYsRUFBU3lGLFVBQ2dCLGlCQUFaQSxFQUFzQixDQUMzQyxJQUFJRSxFQUFZM0YsRUFBU21GLE9BQ3BCUSxJQUNIQSxFQWhCUixXQUNFLElBQUtsUixJQUNILE1BQU0sSUFBSXBNLE1BQU0saUlBRWxCLE9BQU9xTSxTQUFTaUosY0FBYyxTLENBWVppSSxHQUNaRixHQUFhLEdBRWYsSUFBTTVJLEVBQU8ySSxHQUFXLEtBQ3hCLEdBQW9DLG1CQUF6QkUsRUFBVUosV0FDbkIsTUFBTSxJQUFJbGQsTUFBTSwyR0FHbEIsS0FEQW9kLEVBQVVQLEVBQWlCcEksRUFBTXpLLEVBQU8sR0FBSTJOLEVBQVM2RixXQUFZLENBQUVWLE9BQVFRLE1BRXpFLE1BQU0sSUFBSXRkLE1BQUosZ0NBQTBDeVUsRUFBQSxnSCxDQU1wRCxHQUZBcUksRUFBU00sRUFBUU4sT0FFYm5GLEVBQVNtRixRQUFVQSxJQUFXbkYsRUFBU21GLE9BQ3pDLE1BQU0sSUFBSTljLE1BQU0sNEZBSWQyWCxFQUFTOEYsWUFDWEwsRUFBUU0sdUJBQXdCLEVBQ2hDTixFQUFRTywwQkFBMkIsRUFDbkNQLEVBQVFRLHdCQUF5QixFQUNqQ1IsRUFBUVMsNkJBQThCLEVBQ3RDVCxFQUFRVSx5QkFBMEIsRUFDbENoQixFQUFPdkgsTUFBTSxtQkFBcUIsWSxDQUd0QyxNQUFPLEMsT0FBRXVILEUsUUFBUU0sRSxXQUFTQyxFLENDN0I1QixJQUFNVSxFQUNKLFcsZ0JBQ09DLFVBQVksRyxLQUNaQyxPQUFTLEcsS0FDVEMsYUFBVTVVLEUsS0FDVjZVLEtBQU8sSyxLQUNQQyxlQUFpQixLLEtBR2pCQyx1QkFBb0IvVSxFLEtBQ3BCZ1YsZUFBZ0IsRSxLQUVoQkMsbUJDOUJNLFNBQVVsVixRLFVBQU0sSUFDN0IsSUFBTW1WLEVBQUEsU0FBVXZLLEdBQ2QsR0FBSzVLLEVBQUlvVixVQUFULENBRUEsSUFBTTFLLEVBQVM3SCxJQUNJLEtBQWYrSCxFQUFHeUssU0FBbUJ6SyxFQUFHMEssU0FBVzFLLEVBQUcySyxVQUFXM0ssRUFBRzRLLFFBSS9CLEtBQWY1SyxFQUFHeUssUUFHWnJWLEVBQUl5VixXQUFXN0ssR0FDTkYsSUFBV0UsRUFBRzBLLFFBQXlCLEtBQWYxSyxFQUFHeUssVUFBbUJ6SyxFQUFHMkssU0FBVzNLLEVBQUc0SyxXQUV4RTVLLEVBQUc4SyxpQkFDSDFWLEVBQUkyVixPQUFPL0ssS0FUWEEsRUFBRzhLLGlCQUNIMVYsRUFBSTRWLEtBQUtoTCxHQU5TLEMsRUEwQnRCLE1BQU8sQyxPQVJELFdBQ0puSSxPQUFPb1QsaUJBQWlCLFVBQVdWLEUsU0FHL0IsV0FDSjFTLE9BQU9xVCxvQkFBb0IsVUFBV1gsRSxHREtaWSxDQUFrQixDLG1CQUNqQyxPQUFnQyxJQUExQkMsRUFBSzFILFNBQVMySCxPQUFZLEUsY0FDbENyTCxHQUNEQSxFQUFHc0wsU0FDREYsRUFBS2pGLE1BQU1vRixXLEVBQ1JDLFksRUFDQUMsT0FDQUwsRUFBS00sU0FDRk4sRUFBS2pGLE1BQU1vRixXLEVBQ2hCSSxhLHdCQUlIUCxFQUFLakYsTUFBTXlGLFFBQVNSLEVBQUtTLFFBQ3hCVCxFQUFLVSxNLGtCQUVIOUwsRyxFQUNGMkwsWUFBWSxDLFFBQVUsRyxTQUkxQkksZ0JBQUwsV0FBdUIsT0FBTVgsRUFBS1ksU0FBTCxFLEtBRXhCQyxlQUFMLFdBQ2tCYixFQUFLYyxVLEVBR2RDLFEscUZBS1BDLE9BQUFDLElBQUEsVyxPQUNLQyxLQUFLckMsTyxJQUdWdkcsU0FBQTJJLElBQUEsVyxPQUNLQyxLQUFLdkMsUyxJQUdWNUQsTUFBQWtHLElBQUEsVyxPQUNLQyxLQUFLdEMsTSxjQUdkdUMsaUJBQUEsU0FBa0JDLEVBQWFDLEcsTUFDVyxpQkFBYkEsR0FBeUJoZixTQUFTZ2YsR0FDeENELEVBQWNDLEVBQVcsQyxjQUdoREMsY0FBQSxTQUFlQyxFQUFVQyxFQUFNdEssRUFBYXVLLEcsT0FDbENwZixTQUFTNlUsSUFBZ0JBLEVBQWMsRUFDM0MzVixLQUFLQyxNQUFNK2YsR0FBWXJLLEVBQWMsSUFDckMzVixLQUFLQyxNQUFNaWdCLEVBQU1ELEUsY0FHdkJFLHFCQUFBLFcsT0FDU1IsS0FBS0ksY0FDVkosS0FBS25HLE1BQU13RyxTQUFVTCxLQUFLbkcsTUFBTXlHLEtBQ2hDTixLQUFLbkcsTUFBTTdELFlBQWFnSyxLQUFLbkcsTUFBTTBHLEksY0FJdkNFLGNBQUEsVyxJQUNRNUcsRUFBUW1HLEtBQUtuRyxNLE1BQ1osQyxNQUNFQSxFQUFNQyxNLE9BQ0xELEVBQU1FLE8sV0FDRkYsRUFBTVksVyxZQUNMWixFQUFNSyxZLGFBQ0xMLEVBQU1NLGEsY0FDTE4sRUFBTTZHLGMsZUFDTDdHLEVBQU04RyxlLGNBSTFCeEIsSUFBQSxXLElBQ09hLEtBQUtGLE9BQVEsTUFBTSxJQUFJcmdCLE1BQU0sOEQsT0FHSixJQUExQnVnQixLQUFLNUksU0FBU2tJLFMsS0FDWEUsT0FJNEIsbUJBQXhCUSxLQUFLRixPQUFPYyxTLFFBQ2J0SixLQUFLLDRFQUlWMEksS0FBS25HLE1BQU1nSCxVLEtBQ1RDLGUsS0FDQWpILE1BQU1nSCxTQUFVLEcsS0FJbEJFLE8sS0FDQWxCLFNBQ0VHLEksY0FHVGdCLGdCQUFBLFdBQ21CLE1BQWJoQixLQUFLcEMsTUFBa0Msb0JBQVhyUyxRQUFpRSxtQkFBaENBLE9BQU8wVix1QixPQUMvREEscUJBQXFCakIsS0FBS3BDLE0sS0FDNUJBLEtBQU8sTUFFYSxNQUF2Qm9DLEtBQUtuQyxpQixhQUNNbUMsS0FBS25DLGdCLEtBQ2JBLGVBQWlCLEssY0FJMUIyQixLQUFBLFcsSUFDTUUsRUFBVU0sS0FBSzVJLFNBQVNzSSxRQUN4QixjQUFlTSxLQUFLNUksVyxHQUNaLEUsUUFDRkUsS0FBSyxrRUFFVm9JLElBQ0E3VCxJQUlEbVUsS0FBS25HLE1BQU15RixVQUNWVSxLQUFLbkcsTUFBTWdILFUsS0FDVEMsZSxLQUNBakgsTUFBTWdILFNBQVUsRyxLQU1sQmhILE1BQU15RixTQUFVLEUsS0FDaEIwQixrQixLQUNBRSxVQUFZcFcsSSxLQUNaOFMsS0FBT3JTLE9BQU80VixzQkFBc0JuQixLQUFLUCxrQixRQWZwQzJCLE1BQU0sMkUsY0FrQmxCN0IsTUFBQSxXQUNNUyxLQUFLbkcsTUFBTW9GLFdBQVdlLEtBQUtkLFksS0FDMUJyRixNQUFNeUYsU0FBVSxFLEtBRWhCMEIsaUIsY0FHUHpDLFdBQUEsV0FDTXlCLEtBQUtuRyxNQUFNeUYsUUFBU1UsS0FBS1QsUUFDeEJTLEtBQUtSLE0sY0FJWjZCLEtBQUEsVyxLQUNPOUIsUSxLQUNBMUYsTUFBTTNXLE1BQVEsRSxLQUNkMlcsTUFBTXdHLFNBQVcsRSxLQUNqQnhHLE1BQU15RyxLQUFPLEUsS0FDYnpHLE1BQU15SCxVQUFZLEUsS0FDbEJ6SCxNQUFNZ0gsU0FBVSxFLEtBQ2hCaEIsUSxjQUdQVCxPQUFBLFcsZUFDTVksS0FBS25HLE1BQU1vRixVLEdBQ1ZwVCxJLE1BS0F3VixPLEtBQ0F4SCxNQUFNeUYsU0FBVSxFLEtBQ2hCekYsTUFBTW9GLFdBQVksRSxJQUVqQnNDLEVBQWF2QixLQUFLd0IscUJBQXFCLEMsVUFBWSxJQUVuREMsRUFBZ0IsRUFBSXpCLEtBQUtuRyxNQUFNMEcsSSxLQUVoQ1Msa0IsSVR4S29CdmUsRVN5S25Cc2UsRUFBQSxXLE9BQ0NqQyxFQUFLakYsTUFBTW9GLFcsRUFDWHBGLE1BQU15SCxVQUFZRyxFLEVBQ2xCVixPQUNFakMsRUFBS08sWUFBWWtDLEdBQ3JCbFcsTUFESSxXQUVFeVQsRUFBS2pGLE1BQU1vRixZLEVBQ1hwRixNQUFNeUgsVUFBWSxFLEVBQ2xCekgsTUFBTTNXLFFBQ1A0YixFQUFLakYsTUFBTTNXLE1BQVE0YixFQUFLakYsTUFBTTdELGEsRUFDM0I2RCxNQUFNeUcsTUFBUW1CLEUsRUFDZDVILE1BQU13RyxTQUFXdkIsRUFBS21CLGlCQUFpQm5CLEVBQUtqRixNQUFNeUcsS0FBTXhCLEVBQUtqRixNQUFNc0csVSxFQUNuRXRDLGVBQWlCcEksV0FBV3NMLEVBQU0sSyxRQUUvQm5ZLElBQUksc0IsRUFDUDhZLGEsRUFDQXhDLFksRUFDQW1DLE8sRUFDQWxDLE8sS0FqQnVCak0sUUFBUUMsUyxFQXVCdkM2TSxLQUFLbkcsTUFBTWdILFUsS0FDVEMsZSxLQUNBakgsTUFBTWdILFNBQVUsR0FJbkJiLEtBQUtGLFFBQTZDLG1CQUE1QkUsS0FBS0YsT0FBTzZCLGEsS0FDL0JDLG1CQUFMLFNBQXVCL0gsR0FBQSxPQUFTaUYsRUFBS2dCLE9BQU82QixZQUFZOUgsRUFBQSxLVHhNakNwWCxFUzRNYjhlLE8sVVQ1TW9CLElBQzNCdk8sR0FBTyxFQUFNdlEsSVM0TWZvZixPQURILFNBQ1N4WCxHLFFBQ0crVyxNQUFNL1csRSxJQUVmZ0IsTUFKSCxTQUlReVcsRyxFQUNDbEUsS0FBT3JTLE9BQU80VixzQkFBc0JKLEUsaUJBckRuQ0ssTUFBTSxvRSxjQXlEbEJOLGFBQUEsVyxXQUNNZCxLQUFLRixRQUF1QyxtQkFBdEJFLEtBQUtGLE9BQU9pQyxPLEtBQy9CSCxtQkFBTCxTQUF1Qi9ILEdBQUEsT0FBU2lGLEVBQUtnQixPQUFPaUMsTUFBTWxJLEVBQUEsRyxjQUl0RDZILFdBQUEsVyxXQUNNMUIsS0FBS0YsUUFBcUMsbUJBQXBCRSxLQUFLRixPQUFPa0MsSyxLQUMvQkosbUJBQUwsU0FBdUIvSCxHQUFBLE9BQVNpRixFQUFLZ0IsT0FBT2tDLElBQUluSSxFQUFBLEcsY0FJcERxRixVQUFBLFcsSVQ3TnlCemMsRSxPUzhOakJ3ZixFQUFlakMsS0FBS25HLE1BQU1vRixVLFlBRTNCK0Isa0IsS0FDQW5ILE1BQU1vRixXQUFZLEUsS0FDbEJwRixNQUFNeUgsVUFBWSxFLEtBQ2xCekgsTUFBTXlGLFNBQVUsUSxVVG5PUyxJQUN6QnRNLEdBQU8sRUFBT3ZRLElTc09oQm9mLE9BREksU0FDRXhYLEcsUUFDRytXLE1BQU0vVyxFLElBRWZnQixNQUpJLFdBTUM0VyxHQUFnQm5ELEVBQUtnQixRQUEyQyxtQkFBMUJoQixFQUFLZ0IsT0FBT1osVyxFQUMvQzBDLG1CQUFMLFNBQXVCL0gsR0FBQSxPQUFTaUYsRUFBS2dCLE9BQU9aLFVBQVVyRixFQUFBLEcsaUJBSzlEMkgscUJBQUEsU0FBc0IxWSxHLHNCQUFNLElBQ25CLEMsU0FDS0EsRUFBSW9aLFMsS0FDUnBaLEVBQUk0VixLLElBQ0xzQixLQUFLbkcsTUFBTTBHLEksTUFDVHpYLEVBQUlvWixTQUFXbEMsS0FBS25HLE1BQU0zVyxXQUFRNkYsRSxLQUNuQ2lYLEtBQUs1SSxTQUFTckIsSyxLQUNkaUssS0FBSzVJLFNBQVNkLEssT0FDWjBKLEtBQUs1SSxTQUFTdkUsTyxPQUNkbU4sS0FBSzVJLFNBQVN0RSxPLFNBQ1prTixLQUFLNUksU0FBUytLLFMsZ0JBQ1BuQyxLQUFLNUksU0FBU2dMLGdCLFVBQ3BCdFosRUFBSXlOLFdUMUtaOEwsRUFBVyxJQUFJblgsS0FEQSx1QixZUzRLTC9KLFNBQVM2ZSxLQUFLbkcsTUFBTTdELGFBQWUzVixLQUFLUSxJQUFJLEVBQUdtZixLQUFLbkcsTUFBTTdELGFBQWUsSSxjQUkxRnFKLFlBQUEsU0FBYXZXLEcsNkJBQU0sS0FDWmtYLEtBQUtGLE9BQVEsT0FBTzVNLFFBQVFvUCxJQUFJLElBQ0EsbUJBQTFCdEMsS0FBS0YsT0FBT3lDLFcsS0FDaEJ6QyxPQUFPeUMsWSxJQUlWaEIsRUFBYXZCLEtBQUt3QixxQkFBcUIxWSxHQUVyQzBLLEVBQVM3SCxJQUNYaE0sRUFBSXVULFFBQVFDLFUsR0FDWkssR0FBVTFLLEVBQUkyVixRQUFtQyxtQkFBbEJqTCxFQUFPaUwsT0FBdUIsQyxJQUN6RCtELEVBQWEvWSxFQUFPLEdBQUk4WCxHQUN4Qi9LLEVBQU9oRCxFQUFPaUwsT0FBTytELEdBQ043aUIsRUFBakJ3TCxFQUFVcUwsR0FBV0EsRUFDaEJ0RCxRQUFRQyxRQUFRcUQsRSxRQUdwQjdXLEVBQUUwTCxNQUFGLFNBQU9tTCxHQUFBLE9BQ0xzSSxFQUFLMkQsZUFBZWhaLEVBQU8sR0FBSThYLEVBQVksQyxLQUFRL0ssR0FBUSxLLElBQ2pFbkwsTUFGSSxTQUVDOUMsRyxPQUdnQixJQUFsQkEsRUFBT3pJLE9BQXFCeUksRUFBTyxHQUMzQkEsQyxpQkFJaEJrYSxlQUFBLFNBQWdCbEIsRywwQkFBYSxJLEtBQ3RCN0QsT0FBT3BELFdBQVksRSxLQUduQnNGLFMsSUFHRDhDLEVBQWExQyxLQUFLSCxTLFlBTUksSUFBZjZDLEksRUFDSSxDQUpBMUMsS0FBS25HLE1BQU0wQyxTLEtBTWIsR0FBR29HLE9BQU9ELEdBQVl0TSxPQUFPQyxVQUlsQnpULEtBQVgsU0FBZTJGLEcsSWhCclVOMlMsRWdCc1VkMEgsRUFBa0MsaUJBQVhyYSxHQUF1QkEsSUFBVyxTQUFVQSxHQUFVLFlBQWFBLEdBQzFGc2EsRUFBT0QsRUFBZ0JyYSxFQUFPc2EsS0FBT3RhLEVBQ3JDOUYsRUFBT21nQixFQUFnQm5aLEVBQU8sR0FBSWxCLEVBQVEsQyxLQUFFc2EsSUFBVSxDLEtBQUVBLEcsR2hCdlUzRHZYLEVBRGlCNFAsRWdCeVVQMkgsSWhCeFVRLFVBQVUvVSxLQUFLb04sRUFBUXhQLFdBQTJDLG1CQUF2QndQLEVBQVF5QixXZ0J3VXBELEMsTVRuVG5CLFNBQXVCSixFQUFRelQsUSxVQUFNLElBQzFDLElBQU1xWixFQUFXclosRUFBSXFaLFVBQVksWUFDakMsSUFBS3BQLEVBQW1Cd0UsU0FBUzRLLEdBQVcsTUFBTSxJQUFJMWlCLE1BQUosMkJBQXFDMGlCLEdBQ3ZGLElBQUl2UCxHQUFhdVAsRUFBU2xZLE1BQU0sS0FBSyxJQUFNLElBQUlrSCxRQUFRLFFBQVMsT0FFaEUsT0FESXlCLElBQVdBLEdBQVksSUFBSUEsR0FBWS9FLGVBQ3BDLEMsVUFDTCtFLEVBQ0FzQixLQUFNaU8sRUFDTnZPLFFBQVMySSxFQUFPdUcsVUFBVVgsRUFBVXJaLEVBQUlzWixpQixDUzhTQ1csQ0FBYUYsRUFBTSxDLFNBRnZDcGdCLEVBQUswZixVQUFZWixFQUFXWSxTLGdCQUNyQjVoQixFQUFRa0MsRUFBSzJmLGdCQUFpQmIsRUFBV2EsZ0JBQWlCLE8sT0FFM0VoWixPQUFPTSxPQUFPakgsRUFBTSxDLFFBRG5Cd1ksRUFBQXJILFEsVUFBU3FILEVBQUFySSxVLEtBQVdxSSxFQUFBL0csTSxRQUdyQnpSLEMsU0FLTmliLE9BQU9wRCxXQUFZLEUsS0FDbkJzRixTLEtBQ0FDLFNBR0UzTSxRQUFRb1AsSUFBSUksRUFBVzlmLEtBQVgsU0FBZ0IyRixFQUFRcEosRUFBRzZqQixHLElBRXRDQyxFQUFTeFosRUFBTyxDLFVBQ1QsRyxPQUNILEcsT0FDQSxJQUNQOFgsRUFBWWhaLEVBQVEsQyxNQUNkcEosRSxZQUNNNmpCLEVBQVVsakIsU0FLbkJvakIsR0FBZ0MsSUFBcEIzQixFQUFXN0MsTUFBeUJuVyxFQUFPbVcsSyxJQVd4RCxJQUFJcFgsSyxFQVZGb1gsTUFBcUIsSUFBZHdFLEUsRUFHUDdQLFNBQVdDLEVBQWdCMlAsVUFHM0JBLEVBQU9kLGdCQUNQYyxFQUFPYixnQkFHQWEsT0FDYSxJQUFkQSxFQUFPM2IsV0FBMkIyYixFQUFPM2IsRyxJQUdsRDZiLEVBQWNqUSxRQUFRQyxRQUFRLEksR0FDOUI4UCxFQUFPdkUsS0FBTSxDLElBRVRtRSxFQUFPSSxFQUFPSixLLEdBQ2hCSSxFQUFPclAsUSxFQUVLRCxFQURFc1AsRUFBT3JQLFFBQ1lxUCxRLEVUN1J0QyxTQUFtQkosRUFBTXBnQixRLFVBQU8sSUFDckMsSUFBTTJnQixFQUFRaGdCLE1BQU1DLFFBQVF3ZixHQUFRQSxFQUFPLENBQUVBLEdBRTdDLE9BQU8vTixFQURNLElBQUl2SixPQUFPb0osS0FBS3lPLEVBQU8sQ0FBRWxQLEtBQU16UixFQUFLeVIsTUFBUSxLQUNuQ3pSLEUsQ1M0UkE0Z0IsQ0FBU1IsRUFBTUksRSxRQUcxQkUsRUFBWTlYLE1BQVosU0FBaUJpWSxHQUFBLE9BQ2ZsYSxPQUFPTSxPQUFPLEdBQUl1WixFQUFRSyxFQUFBLEcsS0FFakNqWSxNQTFDRyxTQTBDRXFJLEcsSUFDRDZQLEVBQWM3UCxFQUFHMEMsUUFBSCxTQUFVclgsR0FBQSxPQUFLQSxFQUFFMmYsSUFBQSxJLEdBQ2pDNkUsRUFBWXpqQixPQUFTLEVBQUcsQyxJQUt0QjhYLEVBSEU0TCxFQUFrQkQsRUFBWUUsTUFBWixTQUFpQjFrQixHQUFBLE9BQUtBLEVBQUUya0IsVUFBQSxJQUMxQ0MsRUFBV0osRUFBWUssTUFBWixTQUFpQjdrQixHQUFBLE9BQUtBLEVBQUV5VSxNQUFBLElBQ25DcVEsRUFBY04sRUFBWUssTUFBWixTQUFpQjdrQixHQUFBLE9BQUtBLEVBQUVpVSxNQUFBLElBR2hCNEUsRUFBeEIyTCxFQUFZempCLE9BQVMsRUFBVXlqQixFQUFZempCLE9BRXRDMGpCLEVBQTJCQSxFQUFnQixlQUFjRCxFQUFZLEdBQUcsU0FFckUsR0FBR0EsRUFBWSxHQUFHLFMsSUFDMUJPLEVBQVEsRyxHQUNSdkMsRUFBV1csUyxFQUNVL2dCLFNBQVMyZCxFQUFLakYsTUFBTTdELGFBQ25DLFlBQTRCdUwsRUFBV3JlLE1BQVEsU0FBTzRiLEVBQUtqRixNQUFNLDJCQUE0QjBILEVBQVcsZUFDdkdnQyxFQUFZempCLE9BQVMsSSxFQUN0QixVLFFBSUY4SSxJQUFSLE9BRmUrYSxFQUFXLG9CQUFzQixpQkFFOUIsUUFESEUsRUFBYyxpQkFBbUIsWUFDakIsTUFBWWpNLEVBQUEsS0FBU2tNLEVBQVMsa0JBQW1CLGtCQUFtQixxQkFBc0Isd0IsT0FFckYsbUJBQTNCaEYsRUFBS2dCLE9BQU9pRSxZLEVBQ2hCakUsT0FBT2lFLGFBRVByUSxDLGlCQUlYa08sa0JBQUEsU0FBbUJvQyxHLEtBQ1pDLGEsRUFDRmpFLEtBQUtuRyxPLEtBQ0hxSyxhLGNBR1BELFdBQUEsVyxJQUNRcEssRUFBUW1HLEtBQUtuRyxNQUdkbUcsS0FBS25HLE1BQU0yQyxLQUFNM0MsRUFBTWdELFNBQVloRCxFQUFNc0ssR0FLbkN0SyxFQUFNc0ssSSxFQUNUQSxHQUFHQyxNQUFNdkssRUFBTXdLLE9BQVN4SyxFQUFNWSxXQUFZWixFQUFNeUssT0FBU3pLLEVBQU1ZLGEsRUFML0RvQyxRQUFRNkIsUUFDcUIsSUFBL0JzQixLQUFLNUksU0FBU21OLGMsRUFDVjFILFFBQVF1SCxNQUFNdkssRUFBTXdLLE9BQVF4SyxFQUFNeUssUSxjQU85Q0osWUFBQSxXLElBQ1FySyxFQUFRbUcsS0FBS25HLE1BRWRtRyxLQUFLbkcsTUFBTTJDLEtBQU0zQyxFQUFNZ0QsU0FBWWhELEVBQU1zSyxJLEVBQ3RDdEgsUUFBUTJILFVBT1ozSyxFQUFNMkMsS0FBOEIsSUFBeEJ3RCxLQUFLNUksU0FBU3FOLFFBQW9CNUssRUFBTXNLLEksRUFDaEQzSCxHQUFHaUksTyxjQUliMUQsS0FBQSxXQUNNZixLQUFLRixRQUFzQyxtQkFBckJFLEtBQUtGLE9BQU9pQixPLEtBQy9Ca0QsYSxLQUNBbkUsT0FBT2lCLEtBQUtmLEtBQUtuRyxPLEtBQ2pCcUssYyxjQUlUckUsT0FBQSxXLE9BQ01HLEtBQUtuRyxNQUFNc0ssSSxLQUNSckcsdUJBQW9CL1UsRSxLQUNwQjhRLE1BQU1zSyxHQUFHTyxTQUNQMUUsS0FBS2xDLG1CQUVMa0MsS0FBSzJFLGdCLGNBSWhCQSxlQUFBLFcsR0FDTzNFLEtBQUtGLE8sS0FLTjRDLEVBSEU3SSxFQUFRbUcsS0FBS25HLE0sWUFDZG9LLGFBSXNCLG1CQUFoQmpFLEtBQUtGLE8sRUFDREUsS0FBS0YsT0FBT2pHLEdBQ2MsbUJBQXZCbUcsS0FBS0YsT0FBT0QsUyxFQUNmRyxLQUFLRixPQUFPRCxPQUFPaEcsSSxLQUc3QnFLLGNBRUV4QixDQWZXLEMsY0FrQnBCa0MsT0FBQSxTQUFROWIsRywwQkFBTSxJLElBSU4rYixFQUFrQixDQUN0QixXLE9BR0t6YSxLQUFLdEIsR0FBS29CLFNBQWpCLFNBQXlCVyxHLEdBQ25CZ2EsRUFBZ0IvUSxRQUFRakosSUFBUSxFLE1BQzVCLElBQUlwTCxNQUFKLGdCQUEwQm9MLEVBQUEsZ0QsUUFJOUJpYSxFQUFZOUUsS0FBS3ZDLFVBQVVsQixPQUMzQndJLEVBQWEvRSxLQUFLdkMsVUFBVVosUSxJQUc3QixJQUFJaFMsS0FBTy9CLEVBQUssQyxJQUNiOUksRUFBUThJLEVBQUkrQixRQUNHLElBQVY3SyxJLEVBQ0p5ZCxVQUFVNVMsR0FBTzdLLEUsS0FLcEJnbEIsRUFBVzViLE9BQU9NLE9BQU8sR0FBSXNXLEtBQUt2QyxVQUFXM1UsRyxHQUMvQyxTQUFVQSxHQUFPLFVBQVdBLEVBQUssTUFBTSxJQUFJckosTUFBTSx5RCxHQUM1QyxTQUFVcUosU0FBWWtjLEVBQVM5aEIsTUFDL0IsVUFBVzRGLFVBQVlrYyxFQUFTMUUsS0FDckMsYUFBY3hYLEdBQU8sZ0JBQWlCQSxFQUFLLE1BQU0sSUFBSXJKLE1BQU0sbUVBQ3RELGFBQWNxSixTQUFZa2MsRUFBU2hQLFlBQ25DLGdCQUFpQmxOLFVBQVlrYyxFQUFTN0UsU0FHM0MsU0FBVXJYLElBQUtrWCxLQUFLdEMsT0FBT21GLEtBQU8vWixFQUFJK1osTSxJQUVwQ29DLEVBQVlqRixLQUFLa0YsYUFBYUYsRyxVQUM3QnRiLE9BQU9zVyxLQUFLdEMsT0FBUXVILEdBR3ZCSCxJQUFjOUUsS0FBS3ZDLFVBQVVsQixRQUFVd0ksSUFBZS9FLEtBQUt2QyxVQUFVWixRQUFTLEMsTUFDcERELEVBQWFvRCxLQUFLdkMsV0FBOUJaLEVBQUE1QixFQUFBNEIsUSxLQUVYaEQsTUFBTTBDLE9BRkh0QixFQUFBc0IsTyxLQUdIMUMsTUFBTWdELFFBQVVBLEUsS0FHaEJzSSxjLEtBR0FDLHVCLFFBSUh0YyxFQUFJcWIsSUFBd0IsbUJBQVhyYixFQUFJcWIsSyxLQUNsQnRLLE1BQU1zSyxHQUFLcmIsRUFBSXFiLEcsS0FDZnRLLE1BQU1zSyxHQUFHa0IsS0FBZCxXQUNNdkcsRUFBS2YsZ0IsRUFDSkQsa0JBQW9CZ0IsRUFBSzZGLGlCLEdBSzlCLFlBQWE3YixJQUNYQSxFQUFJd1csUUFBU1UsS0FBS1IsT0FDakJRLEtBQUtULFMsRUFHRVMsS0FBS3ZDLFcsS0FHZG1DLFMsS0FDQUMsU0FDRUcsS0FBS25HLEssY0FHZCtGLE9BQUEsVyxJQUNRMEYsRUFBV3RGLEtBQUtTLGdCQUVoQnJKLEVBQVc0SSxLQUFLNUksU0FDaEJ5QyxFQUFRbUcsS0FBS25HLE1BR2IwTCxFQUFXM0wsRUFBYUMsRUFBT3pDLEcsT0FHOUIxTixPQUFPc1csS0FBS3RDLE9BQVE2SCxHLE1BU3ZCdkYsS0FBS25HLE1BTFBZLEVBQUFRLEVBQUFSLFdBQ0FQLEVBQUFlLEVBQUFmLFlBQ0FDLEVBQUFjLEVBQUFkLGFBQ0FILEVBQUFpQixFQUFBakIsV0FDQUMsRUFBQWdCLEVBQUFoQixZQUlJc0MsRUFBU3lELEtBQUtuRyxNQUFNMEMsT0FDdEJBLElBQW9DLElBQTFCbkYsRUFBU3dDLGVBQ2pCQyxFQUFNc0ssR0FFSjVILEVBQU96QyxRQUFVSSxHQUFlcUMsRUFBT3hDLFNBQVdJLEksS0FDL0M0RCxlQUFnQixFLEVBRWZvRyxHQUFHcUIsYUFBYS9LLEcsRUFDaEIwSixHQUFHdkssYUFBYU0sRUFBY08sRUFBWU4sRUFBZU0sR0FBWSxHLEtBQ3RFc0QsZUFBZ0IsSUFJbkJ4QixFQUFPekMsUUFBVUksSUFBYXFDLEVBQU96QyxNQUFRSSxHQUM3Q3FDLEVBQU94QyxTQUFXSSxJQUFjb0MsRUFBT3hDLE9BQVNJLElBR2xEdE8sTUFBd0MsSUFBekJ1TCxFQUFTcU8sYyxFQUNuQnpRLE1BQU04RSxNQUFRRSxFQUFBLEssRUFDZGhGLE1BQU0rRSxPQUFTRSxFQUFBLE8sSUFJcEJ5TCxFQUFXMUYsS0FBS1MsZ0JBQ2xCa0YsR0FBV0MsRUFBVU4sRUFBVUksRyxPQUMvQkMsRyxLQUNHRSxlQUVBRixDLGNBR1RFLGFBQUEsV0FFTTdGLEtBQUtGLFFBQXdDLG1CQUF2QkUsS0FBS0YsT0FBT0YsUSxLQUMvQkUsT0FBT0YsT0FBT0ksS0FBS25HLE0sY0FJNUI2RixRQUFBLFcsR0FDT00sS0FBS25HLE1BQU15RixRLEdBQ1h6VCxJLE1BSUErUixLQUFPclMsT0FBTzRWLHNCQUFzQm5CLEtBQUtQLGlCLElBRTFDeFUsRUFBTUgsSUFHSmdiLEVBQWtCLElBRFo5RixLQUFLbkcsTUFBTTBHLElBRW5Cd0YsRUFBYzlhLEVBQU0rVSxLQUFLa0IsVUFFdkJmLEVBQVdILEtBQUtuRyxNQUFNc0csU0FDdEI2RixFQUFrQyxpQkFBYjdGLEdBQXlCaGYsU0FBU2dmLEdBRXpEOEYsR0FBYSxFQUNYQyxFQUFlbEcsS0FBSzVJLFNBQVM4TyxhQUNkLFVBQWpCQSxFLEVBQ1lKLEVBQ1ksYUFBakJJLEVBQ0xILEVBQWNELEUsS0FFWDVFLFUsR0FEUTZFLEVBQWNELEUsR0FHZCxFLEtBR1Y1RSxVQUFZalcsRSxJQUdicVcsRUFBWXlFLEVBQWMsSUFDNUJJLEVBQVVuRyxLQUFLbkcsTUFBTXlHLEtBQU9nQixFQUFZdEIsS0FBS25HLE1BQU11TSxVQUduREQsRUFBVSxHQUFLSCxJLEVBQ1A3RixFQUFXZ0csRyxJQUluQkUsR0FBYSxFQUNiQyxHQUFjLEUsR0FJZE4sR0FBZUcsR0FBV2hHLEtBRlMsSUFBdkJILEtBQUs1SSxTQUFTbVAsTSxHQUtiLEUsR0FDT3BHLEUsR0FDTixJLEdBRUQsRSxFQUNIQSxFLEdBQ0csRyxLQUdWdUIsY0FHSHVFLEVBQVksQyxLQUNUcE0sTUFBTXlILFVBQVlBLEUsS0FDbEJ6SCxNQUFNeUcsS0FBTzZGLEUsS0FDYnRNLE1BQU13RyxTQUFXTCxLQUFLQyxpQkFBaUJrRyxFQUFTaEcsRyxJQUMvQ3FHLEVBQVl4RyxLQUFLbkcsTUFBTTNXLE0sS0FDeEIyVyxNQUFNM1csTUFBUThjLEtBQUtRLHVCQUNwQjhGLEdBQWF0RyxLQUFLYyxlQUNsQjBGLElBQWN4RyxLQUFLbkcsTUFBTTNXLE9BQU84YyxLQUFLZSxPLEtBQ3BDbEIsUyxLQUNBaEcsTUFBTXlILFVBQVksQyxDQUdyQitFLEcsS0FDRzlHLE8sY0F2RUc2QixNQUFNLGtFLGNBMkVsQnFGLFNBQUEsU0FBVXpDLEcsR0FDVSxtQkFBUEEsRUFBbUIsTUFBTSxJQUFJdmtCLE1BQU0sc0MsRUFDM0N1Z0IsS0FBS25HLE8sS0FDSGdHLFEsY0FHUDZHLE1BQUEsVyxLQUNPdEIsdUIsY0FHUHVCLFFBQUEsV0FDTTlhLE0sT0FDSytTLG9CQUFvQixTQUFVb0IsS0FBS0wsZ0IsS0FDckMzQixtQkFBbUI0SSxVQUV0QjVHLEtBQUtuRyxNQUFNMEMsT0FBTzVHLGUsS0FDZmtFLE1BQU0wQyxPQUFPNUcsY0FBY0MsWUFBWW9LLEtBQUtuRyxNQUFNMEMsTyxjQUkzRDZJLHNCQUFBLFdBQ092WixPQUN3QixJQUF6Qm1VLEtBQUs1SSxTQUFTK0QsUUFBcUI2RSxLQUFLbkcsTUFBTTBDLFNBQVd5RCxLQUFLbkcsTUFBTTBDLE9BQU81RyxnQkFDdkRxSyxLQUFLNUksU0FBUytELFFBQVVyUCxTQUFTd0osTUFDekNDLFlBQVl5SyxLQUFLbkcsTUFBTTBDLFEsY0FJekM0SSxZQUFBLFdoQm51QkssSUFBeUIwQixFZ0JvdUJ4QjdHLEtBQUtuRyxNQUFNZ0QsVWhCbnVCVyxtQkFERWdLLEVnQnF1QlA3RyxLQUFLbkcsTUFBTWdELFNoQnB1QmhCaUssT0FBa0QsbUJBQW5CRCxFQUFJRSxZQUF1RCxtQkFBbkJGLEVBQUlHLFcsS2dCcXVCbEZ0SixPQUFPbEIsR0FBS3dELEtBQUtuRyxNQUFNZ0QsZUFFckJtRCxLQUFLdEMsT0FBT2xCLEcsY0FLekIwSSxhQUFBLFNBQWM5TixRLFVBQVcsSSxJQUVuQitJLEVBQVcvSSxFQUFTK0ksU0FDcEJuSyxFQUFjb0IsRUFBU3BCLFlBQ3JCb1EsRUFBWTdsQixFQUFRNlcsRUFBU2dQLFVBQVcsR0FDeEM3RixFQUFNaGdCLEVBQVE2VyxFQUFTbUosSUFBSyxJQUM1QnlGLEVBQWtDLGlCQUFiN0YsR0FBeUJoZixTQUFTZ2YsR0FDdkQ4RyxFQUF3QyxpQkFBaEJqUixHQUE0QjdVLFNBQVM2VSxHQUU3RGtSLEVBQTBCbEIsRUFBYzNsQixLQUFLQyxNQUFNaWdCLEVBQU1KLFFBQVlwWCxFQUNyRW9lLEVBQTBCRixFQUFrQmpSLEVBQWN1SyxPQUFPeFgsRSxHQUNuRWlkLEdBQWVpQixHQUFrQkMsSUFBNEJsUixFLE1BQ3pELElBQUl2VyxNQUFNLHNHQUdpQixJQUF4QjJYLEVBQVNVLGlCQUF3RCxJQUFuQlYsRUFBU1MsTyxRQUN4RFAsS0FBSyw0RixFQUdEL1csRUFBUXlWLEVBQWFrUixFQUF5QkUsVSxFQUNqRDdtQixFQUFRNGYsRUFBVWdILEVBQXlCQyxVLElBRWhEQyxFQUFZalEsRUFBU2tKLEtBQ3JCZ0gsRUFBYWxRLEVBQVNsVSxNQUN0QnFrQixFQUFvQyxpQkFBZEYsR0FBMEJsbUIsU0FBU2ttQixHQUN6REcsRUFBc0MsaUJBQWZGLEdBQTJCbm1CLFNBQVNtbUIsR0FHN0RoSCxFQUFPLEVBQ1BwZCxFQUFRLEVBQ1JtZCxFQUFXLEUsR0FDWGtILEdBQWdCQyxFLE1BQ1osSUFBSS9uQixNQUFNLGdFLE9BQ1A4bkIsRyxFQUdFdkgsS0FBS0MsaUIsRUFEVG9ILEVBQ2dDbEgsRyxFQUMvQkgsS0FBS0ksY0FDWEMsRUFBVUMsRUFDVnRLLEVBQWF1SyxJQUVOaUgsSSxFQUlFeEgsS0FBS0MsaUIsS0FGUnFILEdBQ08vRyxFQUN3QkosSUFHbEMsQyxTQUNMRSxFLEtBQ0FDLEUsTUFDQXBkLEUsU0FDQWlkLEUsWUFDQW5LLEUsSUFDQXVLLEUsVUFDQTZGLEUsY0FJSnFCLE1BQUEsU0FBT3JRLEcsNkJBQVcsSUFDWjRJLEtBQUtGLE9BQVEsTUFBTSxJQUFJcmdCLE1BQU0sNkMsS0FFNUJnZSxVQUFZclUsT0FBT00sT0FBTyxHQUFJME4sRUFBVTRJLEtBQUt2QyxXLEVBRXBDdUMsS0FBS3ZDLFcsTUFHU2IsRUFBYW9ELEtBQUt2QyxXQUF0Q1osRUFBQTVCLEVBQUE0QixRQUFTTixFQUFBdEIsRUFBQXNCLE9BRVgwSSxFQUFZakYsS0FBS2tGLGFBQWFsRixLQUFLdkMsVyxLQUdwQ0MsT0FBU3RVLE9BQUFNLE9BQUEsR0FDVHViLEUsUUFDSDFJLEUsUUFDQU0sRSxVQUNXLEUsU0FDRixFLFdBQ0UsRSxTQUNGLEUsV0FDRSxFLFNBQ0RtRCxLQUFLNUksUyxLQUNUNEksS0FBSzVJLFNBQVN5TCxLLGtCQUdaLE9BQU0vRCxFQUFLZSxRQUFMLEUsc0JBQ0YsT0FBTWYsRUFBS1AsWUFBTCxFLGtCQUNQeUYsR0FBQSxPQUFPbEYsRUFBSzJILFNBQVN6QyxFQUFBLEUsZ0JBQzFCLE9BQU1sRixFQUFLaUMsTUFBTCxFLGtCQUNKLE9BQU1qQyxFQUFLYyxRQUFMLEUsZ0JBQ0w5VyxHQUFBLE9BQVFnVyxFQUFLOEYsT0FBTzliLEVBQUEsRSxxQkFDaEJBLEdBQUEsT0FBT2dXLEVBQUtPLFlBQVl2VyxFQUFBLEUsa0JBQzdCLE9BQU1nVyxFQUFLTSxRQUFMLEUsZ0JBQ1IsT0FBTU4sRUFBS1UsTUFBTCxFLGlCQUNMLE9BQU1WLEVBQUtTLE9BQUwsRSxnQkFDUCxPQUFNVCxFQUFLdUMsTUFBTCxJLEtBSVQ4RCxjLEtBSUF2RixRLGNBR1A4SCxXQUFBLFNBQVlDLEVBQWNDLEcsa0JBQ2pCNUgsS0FBSzZILEtBQUtGLEVBQWNDLEdBQWF2YyxNQUFyQyxXLFNBQ0E4VCxNQUNFTCxDLGlCQUlYZ0osT0FBQSxXLGdCQUNPdkksUUFDQVMsS0FBS0YsU0FDd0IsbUJBQXZCRSxLQUFLRixPQUFPZ0ksUSxLQUNoQmxHLG1CQUFMLFNBQXVCL0gsR0FBQSxPQUFTaUYsRUFBS2dCLE9BQU9nSSxPQUFPak8sRUFBQSxJLEtBRWhEOEQsUUFBVSxLLGNBR2pCb0ssUUFBQSxXLEtBQ09ELFMsS0FDQW5CLFMsY0FHUGtCLEtBQUEsU0FBTUcsRUFBY0osRyxjQUVVLG1CQUFqQkksRSxNQUNILElBQUl2b0IsTUFBTSxvSEFHZHVnQixLQUFLRixRLEtBQ0ZnSSxjQUdvQixJQUFoQkYsRyxLQUNKaEQsT0FBT2dELEcsS0FNVDNELGEsSUFFRGdFLEVBQVUvVSxRQUFRQyxVLEdBSWxCNk0sS0FBSzVJLFNBQVMrTSxHQUFJLEMsSUFDZnRZLEksTUFDRyxJQUFJcE0sTUFBTSxrRSxFQUVSLElBQUl5VCxTQUFKLFNBQVlDLEcsSUFFaEI4VSxFQURBQyxFQUFnQnBKLEVBQUsxSCxTQUFTK00sR0FFOUIrRCxFQUFjL0QsSyxFQUNOK0QsRUFBY0QsUSxFQUNSQyxFQUFjL0QsSSxJQUkxQmdFLEVBQUEsU0FBV2hFLEdBRVg4RCxJQUFTOUQsRUFBRzhELFFBQUgsV0FBYSxPQUFNQSxFQUFROUQsRUFBQSxHLEVBQ3JDc0QsTUFBSCxXLElBQ1E1TixFQUFRaUYsRUFBS2pGLE1BQ2J1TyxFQUFpQyxVQUExQnRKLEVBQUsxSCxTQUFTeUYsUUFDckJ3TCxFQUFXRCxFQUFPakUsRUFBR21FLE1BQVFuRSxFQUFHb0UsSSxFQUNuQ0MsUyxFQUNBaEQsYUFBYTNMLEVBQU1ZLFksRUFDbkJtQyxhQUFhL0MsRUFBTTZHLGNBQWU3RyxFQUFNOEcsZUFBZ0IwSCxHQUN2REQsR0FBUXRKLEVBQUsxSCxTQUFTNkYsWSxFQUNyQndMLGNBQWMzSixFQUFLMUgsU0FBUzZGLFksRUFHNUIySCxPQUFPLEMsR0FBRVQsRSxPQUFZQSxFQUFHNUgsTyxRQUFpQjRILEVBQUd1RSxVQUFVQyxpQixTQU1sQyxtQkFBbEJULEUsSUFDTEEsRUFBY0MsT0FDYixDLEdBQzhCLG1CQUF4QjVjLE9BQU9xUixhLE1BQ1YsSUFBSW5kLE1BQU0sNEosRUFFVDhMLE8sWUFLUjBjLEVBQVE1YyxNQUFSLFcsSUFFRHVkLEVBQVNaLEVBQWFsSixFQUFLakYsTyxPQUMxQjFPLEVBQVV5ZCxLLEVBQ0oxVixRQUFRQyxRQUFReVYsSUFFcEJBLEMsSUFDTnZkLE1BUEksU0FPQ3lVLEcsT0FDREEsSUFBUUEsRUFBUyxJLEVBQ2pCbkMsUUFBVW1DLEVBR1hqVSxNLEVBQ0dtUyxtQkFBbUI2SyxTLE9BQ2pCbEssaUJBQWlCLFNBQVVHLEVBQUthLGlCLEVBR3BDdUUsYyxFQU1BMkIsZUFDRS9HLEMsSUFDTitDLE9BekJJLFNBeUJFeFgsRyxjQUNDaU4sS0FBSywwRkFBNEZqTixFQUFJeWUsU0FDdkd6ZSxDLDRDRTM5QlosSUFBTTBlLEVBQVEsZUFDUkMsRUFBb0IsR0EwQjFCLFNBQVNyQixFQUFjN0gsRUFBUTFJLEdBQzdCLFEsVUFEd0MsSUFDcENBLEVBQVMrTSxHQUFJLENBQ2YsR0FBSS9NLEVBQVNtRixRQUFXbkYsRUFBU3lGLFNBQXVDLGlCQUFyQnpGLEVBQVN5RixRQUMxRCxNQUFNLElBQUlwZCxNQUFNLDhHQUtsQjJYLEVBQVdoTyxPQUFPTSxPQUFPLEdBQUkwTixFQUFVLENBQUVtRixRQUFRLEUsUUFETCxpQkFBckJuRixFQUFTeUYsU0FBdUJ6RixFQUFTeUYsUyxDQUlsRSxJQWxDTXJKLEVBbUNGeVYsRUFERUMsR0FsQ0ExVixFQUFTN0gsTUFDRTZILEVBQU8yVixJQW1DcEJELElBSUZELEVBQVExb0IsRUFBUTZXLEVBQVNnUyxHQUFJLG1DQUUvQixJQUFJQyxFQUFjSCxHQUEwQixpQkFBVkQsRUFFOUJJLEdBQWVMLEVBQWtCelIsU0FBUzBSLEtBQzVDNVIsUUFBUUMsS0FBSyxvS0FBcUsyUixHQUNsTEksR0FBYyxHQUdoQixJQUFJcEIsRUFBVS9VLFFBQVFDLFVBRXRCLEdBQUlrVyxFQUFhLENBRWZMLEVBQWtCcm5CLEtBQUtzbkIsR0FFdkIsSUFBTUssRUFuRFYsU0FBbUJGLEdBQ2pCLElBQU01VixFQUFTN0gsSUFDZixHQUFLNkgsRUFFTCxPQURBQSxFQUFPdVYsR0FBU3ZWLEVBQU91VixJQUFVLEdBQzFCdlYsRUFBT3VWLEdBQU9LLEUsQ0ErQ0VHLENBQVNOLEdBQzlCLEdBQUlLLEVBQWMsQ0FDaEIsSUFBTUUsRUFBQSxXQUVKLElBekNjQyxFQXlDUmxFLEdBekNRa0UsRUF5Q2VILEVBQWFJLFFBQVN0UyxFQXZDdENzSSxRQUFVLENBQUVZLEtBQU1tSixFQUFXNVAsTUFBTXlHLFdBQVN2WCxHQTJDekQsT0FGQXVnQixFQUFhSSxRQUFRM0IsVUFFZHhDLEMsRUFJVDBDLEVBQVVxQixFQUFhekIsS0FBS3hjLEtBQUttZSxHQUFNM0gsTUFBTTJILEUsRUFJakQsT0FBT3ZCLEVBQVE1YyxNQUFSLFNBQWFrYSxHQUNsQixJQUNJaGQsRUFERW1oQixFQUFVLElBQUlsTSxFQW9CcEIsT0FsQklzQyxHQUVGMUksRUFBV2hPLE9BQU9NLE9BQU8sR0FBSTBOLEVBQVVtTyxHQUd2Q21FLEVBQVFqQyxNQUFNclEsR0FHZHNTLEVBQVFoRCxRQUdSbmUsRUFBU21oQixFQUFRaEMsV0FBVzVILElBRTVCdlgsRUFBUzJLLFFBQVFDLFFBQVF1VyxHQUV2QkwsR0E5RVIsU0FBbUJELEVBQUl2RyxHQUNyQixJQUFNclAsRUFBUzdILElBQ1Y2SCxJQUNMQSxFQUFPdVYsR0FBU3ZWLEVBQU91VixJQUFVLEdBQ2pDdlYsRUFBT3VWLEdBQU9LLEdBQU12RyxFLENBMkVoQjhHLENBQVNWLEVBQU8sQ0FBRXBCLEtBQU10ZixFLFFBQVFtaEIsSUFFM0JuaEIsQyxXQUtYb2YsRUFBYUEsYUFBZUEsRUFDNUJBLEVBQWFpQyxXQUFhcFMsRSw0SkMxRzFCLGFBRUF6WCxFQUFBSCxRQUFBLFdBQ0EsUUFBQVQsRUFBQSxFQUFBQSxFQUFBeUwsVUFBQTlLLE9BQUFYLElBQ0EsWUFBQXlMLFVBQUF6TCxHQUNBLE9BQUF5TCxVQUFBekwsRUFHQSxDLGtEQ1JBLGFBRUEsSUFBQTJhLEVBQUEsSUFHQStQLEVBQUEsR0FDQUMsT0FBQSxJQUFBMWMsRUFBQTdCLE9BQUE2QixFQUtBMmMsRUFBQTFwQixLQUFBMnBCLElBQUFsUSxFQVJBLEdBU0FtUSxFQUFBNXBCLEtBQUEycEIsSUFBQSxFQVJBLElBU0FFLEVBQUEsRUFBQUQsRUFDQXZjLEVBQUFvTSxFQUFBLEVBR0FxUSxFQUFBOXBCLEtBQUF1RSxPQWlFQSxTQUFBd2xCLEVBQUF2ZixHQUNBLElBQUE1TCxFQUFBb3JCLEVBQUF4ZixFQUFBL0ssT0FDQXdxQixFQUFBdEssS0FBQTdnQixFQUFBLEVBQUFvckIsRUFBQUQsRUFBQW5yQixFQUFBbXJCLEVBQUFDLEVBQUEsRUFBQTdoQixFQUFBNGhCLEVBQUFsWixFQUFBLEdBTUEsSUFIQWlaLElBQUF4ZixFQUFBLENBQUF3ZixNQUdBbHJCLEVBQUEyYSxHQUNBcFIsRUFBQXZKLE9BRUEsSUFBQUEsRUFBQSxFQUFBQSxFQUFBMmEsRUFBQTNhLElBQ0F1SixFQUFBdkosR0FBQXVKLEVBQUE2aEIsRUFBQTdjLEVBQUE2YyxFQUFBMWYsRUFBQTFMLEVBQUFrckIsSUFBQXByQixFQUFBeUosRUFBQXZKLEtBQ0F1SixFQUFBNmhCLEdBQUF0ckIsR0FJQXFyQixFQUFBRSxFQUFBLFNBQUFDLEdBSUEsSUFGQSxJQUFBeHJCLEVBQUFILEVBQUEsRUFDQUssRUFBQW1yQixFQUFBbnJCLEVBQUFvckIsRUFBQUQsRUFBQUMsRUFBQTdoQixFQUFBNGhCLEVBQUFsWixFQUNBcVosS0FDQXhyQixFQUFBeUosRUFBQXZKLEVBQUF1TyxFQUFBdk8sRUFBQSxHQUNBTCxJQUFBZ2IsRUFBQXBSLEVBQUFnRixHQUFBaEYsRUFBQXZKLEdBQUF1SixFQUFBNmhCLEVBQUE3YyxFQUFBNmMsRUFBQXRyQixLQUFBeUosRUFBQTZoQixHQUFBdHJCLElBR0EsT0FEQXFyQixFQUFBbnJCLElBQUFtckIsRUFBQUMsSUFDQXpyQixDQUdBLEdBQUFnYixFQUNBLENBTUEsU0FBQTRRLEVBQUF0ZixFQUFBdWYsR0FDQSxJQUFBQyxFQUFBcmlCLEVBQUEsR0FBQXNpQixVQUFBemYsR0FBQSxHQUNBLEdBQUF1ZixHQUFBLEtBQUFFLEVBQ0EsSUFBQUQsS0FBQXhmLEVBQ0EsSUFBQTdDLEVBQUE1RyxLQUFBK29CLEVBQUF0ZixFQUFBd2YsR0FBQUQsRUFBQSxVQUFBNXJCLEdBQUEsQ0FHQSxPQUFBd0osRUFBQXpJLE9BQUF5SSxFQUFBLEtBQUFzaUIsRUFBQXpmLElBQUEsSUFDQSxDQU9BLFNBQUEwZixFQUFBamlCLEVBQUFnQyxHQUVBLElBREEsSUFBQWtnQixFQUFBQyxFQUFBbmlCLEVBQUEsR0FBQTBoQixFQUFBLEVBQ0FBLEVBQUFTLEVBQUFsckIsUUFDQStLLEVBQUE2QyxFQUFBNmMsR0FDQTdjLEdBQUFxZCxHQUFBLEdBQUFsZ0IsRUFBQTZDLEVBQUE2YyxJQUFBUyxFQUFBdFcsV0FBQTZWLEtBRUEsT0FBQVUsRUFBQXBnQixFQUNBLENBcUJBLFNBQUFvZ0IsRUFBQXpyQixHQUNBLE9BQUEwRixPQUFBNEUsYUFBQW9oQixNQUFBLEVBQUExckIsRUFDQSxDQTVJQU8sRUFBQUgsUUFBQSxTQUFBaUosRUFBQXNpQixHQUNBLEdBQUFBLElBQUEsSUFBQUEsRUFBQS9kLE9BSUEsT0FIQStkLEVBQUEvZCxRQUFBLEVBQ0EvTSxLQUFBdUUsT0FBQTdFLEVBQUFILFFBQUFpSixFQUFBc2lCLEdBQ0FBLEVBQUEvZCxRQUFBLEVBQ0EvTSxLQUFBdUUsT0FFQSxJQUNBaUcsRUFBQSxHQVFBdWdCLEdBTEFOLEVBQUFKLEVBSkFTLEtBQUFFLFVBQUEsRUFLQSxDQUFBeGlCLEVBQUFvaUIsRUFBQXBCLElBQ0EsS0FBQWpmLFVBQUEvQixFQStHQSxTQUFBQSxHQUNBLElBRUEsT0FEQWloQixFQUFBd0IsT0FBQUMsZ0JBQUExaUIsRUFBQSxJQUFBNEwsV0FBQXFGLElBQ0FtUixFQUFBcGlCLEVBQ0EsT0FBQTlKLEdBQ0EsWUFBQW1NLEtBQUE0ZSxJQUFBMEIsV0FBQTFCLEVBQUEwQixVQUFBQyxRQUNBM0IsRUFBQTRCLE9BQUFULEVBQUFwQixHQUNBLENBQ0EsQ0F2SEE4QixHQUFBLEdBQUE5Z0IsR0FHQSxJQUFBdWYsRUFBQXZmLElBVUEsT0FQQWlnQixFQUFBRyxFQUFBRyxFQUFBaGEsR0FBQXlZLEdBT0EsV0FJQSxJQUhBLElBQUE3cUIsRUFBQW9zQixFQUFBWixFQS9DQSxHQWdEQXRjLEVBQUE2YixFQUNBdG1CLEVBQUEsRUFDQXpFLEVBQUFpckIsR0FDQWpyQixLQUFBeUUsR0FBQXFXLEVBQ0E1TCxHQUFBNEwsRUFDQXJXLEVBQUEybkIsRUFBQVosRUFBQSxHQUVBLEtBQUF4ckIsR0FBQWtyQixHQUNBbHJCLEdBQUEsRUFDQWtQLEdBQUEsRUFDQXpLLEtBQUEsRUFFQSxPQUFBekUsRUFBQXlFLEdBQUF5SyxDQUNBLENBQ0EsRUFFQW5PLEVBQUFILFFBQUFnc0IsWUFBQSxXQUNBdnJCLEtBQUF1RSxPQUFBdWxCLENBQ0EsRUF1R0FXLEVBQUF6cUIsS0FBQXVFLFNBQUFpbEIsRSx5SkMvSUEsV0FDQSxhQUVBLElBQUFnQyxFQUFBLElBQUF4ckIsS0FBQXlHLEtBQUEsTUFDQWdsQixHQUFBLEVBQUF6ckIsS0FBQXlHLEtBQUEsTUFFQWlsQixFQUFBLElBQ0FDLEdBQUEzckIsS0FBQXlHLEtBQUEsUUFDQW1sQixHQUFBLEVBQUE1ckIsS0FBQXlHLEtBQUEsT0FFQSxTQUFBekMsRUFBQTZuQixHQUNBLElBQUF0bkIsRUFFQUEsRUFEQSxtQkFBQXNuQixFQUNBQSxFQUVBQSxFQTZXQSxXQUVBLElBQUFDLEVBQUEsRUFDQUMsRUFBQSxFQUNBQyxFQUFBLEVBQ0FodEIsRUFBQSxFQUVBaXRCLEdBNEJBdHRCLEVBQUEsV0FDQSxTQUFBNmpCLEdBQ0FBLElBQUEzVyxXQUNBLFFBQUEvTSxFQUFBLEVBQUFBLEVBQUEwakIsRUFBQS9pQixPQUFBWCxJQUFBLENBRUEsSUFBQWtSLEVBQUEsb0JBREFyUixHQUFBNmpCLEVBQUFuTyxXQUFBdlYsSUFHQWtSLEdBREFyUixFQUFBcVIsSUFBQSxFQUdBclIsR0FEQXFSLEdBQUFyUixLQUNBLEVBRUFBLEdBQUEsWUFEQXFSLEdBQUFyUixFQUVBLENBQ0EsK0JBQUFBLElBQUEsRUFDQSxHQWZBLElBQ0FBLEVBM0JBbXRCLEVBQUFHLEVBQUEsS0FDQUYsRUFBQUUsRUFBQSxLQUNBRCxFQUFBQyxFQUFBLEtBRUEsUUFBQW50QixFQUFBLEVBQUFBLEVBQUF5TCxVQUFBOUssT0FBQVgsS0FDQWd0QixHQUFBRyxFQUFBMWhCLFVBQUF6TCxLQUNBLElBQ0FndEIsR0FBQSxJQUVBQyxHQUFBRSxFQUFBMWhCLFVBQUF6TCxLQUNBLElBQ0FpdEIsR0FBQSxJQUVBQyxHQUFBQyxFQUFBMWhCLFVBQUF6TCxLQUNBLElBQ0FrdEIsR0FBQSxHQUlBLE9BREFDLEVBQUEsS0FDQSxXQUNBLElBQUFydEIsRUFBQSxRQUFBa3RCLEVBQUEsdUJBQUE5c0IsRUFHQSxPQUZBOHNCLEVBQUFDLEVBQ0FBLEVBQUFDLEVBQ0FBLEVBQUFwdEIsR0FBQUksRUFBQSxFQUFBSixFQUNBLENBQ0EsQ0E3WUFzdEIsQ0FBQUwsR0FFQTdyQixLQUFBdUUsT0FFQW9iLEtBQUFyZ0IsRUFBQTZzQixFQUFBNW5CLEdBQ0FvYixLQUFBeU0sS0FBQSxJQUFBaFksV0FBQSxLQUNBdUwsS0FBQTBNLFVBQUEsSUFBQWpZLFdBQUEsS0FDQSxRQUFBdFYsRUFBQSxFQUFBQSxFQUFBLElBQUFBLElBQ0E2Z0IsS0FBQXlNLEtBQUF0dEIsR0FBQTZnQixLQUFBcmdCLEVBQUEsSUFBQVIsR0FDQTZnQixLQUFBME0sVUFBQXZ0QixHQUFBNmdCLEtBQUF5TSxLQUFBdHRCLEdBQUEsRUFHQSxDQWdWQSxTQUFBcXRCLEVBQUE1bkIsR0FDQSxJQUFBekYsRUFDQVEsRUFBQSxJQUFBOFUsV0FBQSxLQUNBLElBQUF0VixFQUFBLEVBQUFBLEVBQUEsSUFBQUEsSUFDQVEsRUFBQVIsS0FFQSxJQUFBQSxFQUFBLEVBQUFBLEVBQUEsSUFBQUEsSUFBQSxDQUNBLElBQUFMLEVBQUFLLEtBQUF5RixLQUFBLElBQUF6RixJQUNBd3RCLEVBQUFodEIsRUFBQVIsR0FDQVEsRUFBQVIsR0FBQVEsRUFBQWIsR0FDQWEsRUFBQWIsR0FBQTZ0QixDQUNBLENBQ0EsT0FBQWh0QixDQUNBLENBNVZBMEUsRUFBQWlGLFVBQUEsQ0FDQXNqQixNQUFBLElBQUFDLGFBQUEsUUFDQSxNQUNBLFFBRUEsT0FDQSxPQUNBLE1BRUEsUUFDQSxPQUNBLE1BRUEsT0FDQSxPQUNBLFVBQ0FDLE1BQUEsSUFBQUQsYUFBQSxxQ0FDQSx3Q0FDQSxxQ0FDQSx1Q0FDQSxxQ0FDQSx1Q0FDQSxxQ0FDQSx5Q0FDQXBuQixRQUFBLFNBQUFzbkIsRUFBQUMsR0FDQSxJQWlCQUMsRUFBQUMsRUFqQkFSLEVBQUExTSxLQUFBME0sVUFDQUQsRUFBQXpNLEtBQUF5TSxLQUNBRyxFQUFBNU0sS0FBQTRNLE1BQ0FPLEVBQUEsRUFDQUMsRUFBQSxFQUNBQyxFQUFBLEVBRUEza0IsR0FBQXFrQixFQUFBQyxHQUFBbkIsRUFDQTFzQixFQUFBa0IsS0FBQUMsTUFBQXlzQixFQUFBcmtCLEdBQ0E2aEIsRUFBQWxxQixLQUFBQyxNQUFBMHNCLEVBQUF0a0IsR0FDQXpKLEdBQUFFLEVBQUFvckIsR0FBQXVCLEVBR0F3QixFQUFBUCxHQUZBNXRCLEVBQUFGLEdBR0FzdUIsRUFBQVAsR0FGQXpDLEVBQUF0ckIsR0FNQXF1QixFQUFBQyxHQUNBTixFQUFBLEVBQ0FDLEVBQUEsSUFHQUQsRUFBQSxFQUNBQyxFQUFBLEdBS0EsSUFBQU0sRUFBQUYsRUFBQUwsRUFBQW5CLEVBQ0EyQixFQUFBRixFQUFBTCxFQUFBcEIsRUFDQTRCLEVBQUFKLEVBQUEsSUFBQXhCLEVBQ0E2QixFQUFBSixFQUFBLElBQUF6QixFQUVBOEIsRUFBQSxJQUFBenVCLEVBQ0EwdUIsRUFBQSxJQUFBdEQsRUFFQXVELEVBQUEsR0FBQVIsSUFBQUMsSUFDQSxHQUFBTyxHQUFBLEdBQ0EsSUFBQUMsRUFBQSxFQUFBckIsRUFBQWtCLEVBQUFuQixFQUFBb0IsSUFFQVYsR0FEQVcsTUFDQUEsR0FBQWxCLEVBQUFtQixHQUFBVCxFQUFBVixFQUFBbUIsRUFBQSxHQUFBUixFQUNBLENBQ0EsSUFBQVMsRUFBQSxHQUFBUixJQUFBQyxJQUNBLEdBQUFPLEdBQUEsR0FDQSxJQUFBQyxFQUFBLEVBQUF2QixFQUFBa0IsRUFBQVgsRUFBQVIsRUFBQW9CLEVBQUFYLElBRUFFLEdBREFZLE1BQ0FBLEdBQUFwQixFQUFBcUIsR0FBQVQsRUFBQVosRUFBQXFCLEVBQUEsR0FBQVIsRUFDQSxDQUNBLElBQUFTLEVBQUEsR0FBQVIsSUFBQUMsSUFDQSxHQUFBTyxHQUFBLEdBQ0EsSUFBQUMsRUFBQSxFQUFBekIsRUFBQWtCLEVBQUEsRUFBQW5CLEVBQUFvQixFQUFBLElBRUFSLEdBREFhLE1BQ0FBLEdBQUF0QixFQUFBdUIsR0FBQVQsRUFBQWQsRUFBQXVCLEVBQUEsR0FBQVIsRUFDQSxDQUdBLFdBQUFSLEVBQUFDLEVBQUFDLEVBQ0EsRUFFQTFuQixRQUFBLFNBQUFvbkIsRUFBQUMsRUFBQW9CLEdBQ0EsSUFHQWpCLEVBQUFDLEVBQUFDLEVBQUFnQixFQWVBcEIsRUFBQUMsRUFBQW9CLEVBQ0FDLEVBQUFDLEVBQUFDLEVBbkJBL0IsRUFBQTFNLEtBQUEwTSxVQUNBRCxFQUFBek0sS0FBQXlNLEtBQ0FHLEVBQUE1TSxLQUFBNE0sTUFHQWxrQixFQW5IQSxtQkFtSEFxa0IsRUFBQUMsRUFBQW9CLEdBQ0FqdkIsRUFBQWtCLEtBQUFDLE1BQUF5c0IsRUFBQXJrQixHQUNBNmhCLEVBQUFscUIsS0FBQUMsTUFBQTBzQixFQUFBdGtCLEdBQ0FwQixFQUFBakgsS0FBQUMsTUFBQTh0QixFQUFBMWxCLEdBQ0F6SixHQUFBRSxFQUFBb3JCLEVBQUFqakIsR0FBQXlrQixFQUlBdUIsRUFBQVAsR0FIQTV0QixFQUFBRixHQUlBc3VCLEVBQUFQLEdBSEF6QyxFQUFBdHJCLEdBSUF5dkIsRUFBQU4sR0FIQTltQixFQUFBckksR0FRQXF1QixHQUFBQyxFQUNBQSxHQUFBbUIsR0FDQXpCLEVBQUEsRUFDQUMsRUFBQSxFQUNBb0IsRUFBQSxFQUNBQyxFQUFBLEVBQ0FDLEVBQUEsRUFDQUMsRUFBQSxHQUVBbkIsR0FBQW9CLEdBQ0F6QixFQUFBLEVBQ0FDLEVBQUEsRUFDQW9CLEVBQUEsRUFDQUMsRUFBQSxFQUNBQyxFQUFBLEVBQ0FDLEVBQUEsSUFHQXhCLEVBQUEsRUFDQUMsRUFBQSxFQUNBb0IsRUFBQSxFQUNBQyxFQUFBLEVBQ0FDLEVBQUEsRUFDQUMsRUFBQSxHQUlBbEIsRUFBQW1CLEdBQ0F6QixFQUFBLEVBQ0FDLEVBQUEsRUFDQW9CLEVBQUEsRUFDQUMsRUFBQSxFQUNBQyxFQUFBLEVBQ0FDLEVBQUEsR0FFQW5CLEVBQUFvQixHQUNBekIsRUFBQSxFQUNBQyxFQUFBLEVBQ0FvQixFQUFBLEVBQ0FDLEVBQUEsRUFDQUMsRUFBQSxFQUNBQyxFQUFBLElBR0F4QixFQUFBLEVBQ0FDLEVBQUEsRUFDQW9CLEVBQUEsRUFDQUMsRUFBQSxFQUNBQyxFQUFBLEVBQ0FDLEVBQUEsR0FPQSxJQUFBakIsRUFBQUYsRUFBQUwsRUFBQWxCLEVBQ0EwQixFQUFBRixFQUFBTCxFQUFBbkIsRUFDQTRDLEVBQUFELEVBQUFKLEVBQUF2QyxFQUNBMkIsRUFBQUosRUFBQWlCLEVBQUEsRUFBQXhDLEVBQ0E0QixFQUFBSixFQUFBaUIsRUFBQSxFQUFBekMsRUFDQTZDLEVBQUFGLEVBQUFELEVBQUEsRUFBQTFDLEVBQ0E4QyxFQUFBdkIsRUFBQSxLQUNBd0IsRUFBQXZCLEVBQUEsS0FDQXdCLEVBQUFMLEVBQUEsS0FFQWQsRUFBQSxJQUFBenVCLEVBQ0EwdUIsRUFBQSxJQUFBdEQsRUFDQXlFLEVBQUEsSUFBQTFuQixFQUVBd21CLEVBQUEsR0FBQVIsSUFBQUMsSUFBQW1CLElBQ0EsR0FBQVosRUFBQSxFQUFBWCxFQUFBLE1BQ0EsQ0FDQSxJQUFBWSxFQUFBLEVBQUFyQixFQUFBa0IsRUFBQW5CLEVBQUFvQixFQUFBcEIsRUFBQXVDLEtBRUE3QixHQURBVyxNQUNBQSxHQUFBbEIsRUFBQW1CLEdBQUFULEVBQUFWLEVBQUFtQixFQUFBLEdBQUFSLEVBQUFYLEVBQUFtQixFQUFBLEdBQUFXLEVBQ0EsQ0FDQSxJQUFBVixFQUFBLEdBQUFSLElBQUFDLElBQUFrQixJQUNBLEdBQUFYLEVBQUEsRUFBQVosRUFBQSxNQUNBLENBQ0EsSUFBQWEsRUFBQSxFQUFBdkIsRUFBQWtCLEVBQUFYLEVBQUFSLEVBQUFvQixFQUFBWCxFQUFBVCxFQUFBdUMsRUFBQVYsS0FFQWxCLEdBREFZLE1BQ0FBLEdBQUFwQixFQUFBcUIsR0FBQVQsRUFBQVosRUFBQXFCLEVBQUEsR0FBQVIsRUFBQWIsRUFBQXFCLEVBQUEsR0FBQVUsRUFDQSxDQUNBLElBQUFULEVBQUEsR0FBQVIsSUFBQUMsSUFBQWlCLElBQ0EsR0FBQVYsRUFBQSxFQUFBYixFQUFBLE1BQ0EsQ0FDQSxJQUFBYyxFQUFBLEVBQUF6QixFQUFBa0IsRUFBQVcsRUFBQTlCLEVBQUFvQixFQUFBVyxFQUFBL0IsRUFBQXVDLEVBQUFQLEtBRUFwQixHQURBYSxNQUNBQSxHQUFBdEIsRUFBQXVCLEdBQUFULEVBQUFkLEVBQUF1QixFQUFBLEdBQUFSLEVBQUFmLEVBQUF1QixFQUFBLEdBQUFTLEVBQ0EsQ0FDQSxJQUFBSyxFQUFBLEdBQUFKLElBQUFDLElBQUFDLElBQ0EsR0FBQUUsRUFBQSxFQUFBWixFQUFBLE1BQ0EsQ0FDQSxJQUFBYSxFQUFBLEVBQUF4QyxFQUFBa0IsRUFBQSxFQUFBbkIsRUFBQW9CLEVBQUEsRUFBQXBCLEVBQUF1QyxFQUFBLEtBRUFYLEdBREFZLE1BQ0FBLEdBQUFyQyxFQUFBc0MsR0FBQUwsRUFBQWpDLEVBQUFzQyxFQUFBLEdBQUFKLEVBQUFsQyxFQUFBc0MsRUFBQSxHQUFBSCxFQUNBLENBR0EsV0FBQTVCLEVBQUFDLEVBQUFDLEVBQUFnQixFQUNBLEVBRUF4b0IsUUFBQSxTQUFBcEMsRUFBQWlDLEVBQUFFLEVBQUFFLEdBQ0EsSUFHQXFuQixFQUFBQyxFQUFBQyxFQUFBZ0IsRUFBQWMsRUFxQ0FsQyxFQUFBQyxFQUFBb0IsRUFBQWMsRUFDQWIsRUFBQUMsRUFBQUMsRUFBQVksRUFDQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUExQ0FoRCxFQUFBek0sS0FBQXlNLEtBQ0FLLEVBQUE5TSxLQUFBOE0sTUFJQXBrQixHQUFBakYsRUFBQWlDLEVBQUFFLEVBQUFFLEdBQUFrbUIsRUFDQTdzQixFQUFBa0IsS0FBQUMsTUFBQW1ELEVBQUFpRixHQUNBNmhCLEVBQUFscUIsS0FBQUMsTUFBQW9GLEVBQUFnRCxHQUNBcEIsRUFBQWpILEtBQUFDLE1BQUFzRixFQUFBOEMsR0FDQWdJLEVBQUFyUSxLQUFBQyxNQUFBd0YsRUFBQTRDLEdBQ0F6SixHQUFBRSxFQUFBb3JCLEVBQUFqakIsRUFBQW9KLEdBQUF1YixFQUtBcUIsRUFBQTdwQixHQUpBdEUsRUFBQUYsR0FLQXN1QixFQUFBN25CLEdBSkE2a0IsRUFBQXRyQixHQUtBeXZCLEVBQUE5b0IsR0FKQTBCLEVBQUFySSxHQUtBeXdCLEVBQUE1cEIsR0FKQTRLLEVBQUF6UixHQVVBMHdCLEVBQUEsRUFDQUMsRUFBQSxFQUNBQyxFQUFBLEVBQ0FDLEVBQUEsRUFDQXhDLEVBQUFDLEVBQUFvQyxJQUNBQyxJQUNBdEMsRUFBQW9CLEVBQUFpQixJQUNBRSxJQUNBdkMsRUFBQW9DLEVBQUFDLElBQ0FHLElBQ0F2QyxFQUFBbUIsRUFBQWtCLElBQ0FDLElBQ0F0QyxFQUFBbUMsRUFBQUUsSUFDQUUsSUFDQXBCLEVBQUFnQixFQUFBRyxJQUNBQyxJQXdCQSxJQUFBdEMsRUFBQUYsR0FmQUwsRUFBQTBDLEdBQUEsT0FlQTFELEVBQ0F3QixFQUFBRixHQWZBTCxFQUFBMEMsR0FBQSxPQWVBM0QsRUFDQTBDLEVBQUFELEdBZkFKLEVBQUF1QixHQUFBLE9BZUE1RCxFQUNBOEQsRUFBQUwsR0FmQU4sRUFBQVUsR0FBQSxPQWVBN0QsRUFDQXlCLEVBQUFKLEdBZEFpQixFQUFBb0IsR0FBQSxPQWNBLEVBQUExRCxFQUNBMEIsRUFBQUosR0FkQWlCLEVBQUFvQixHQUFBLE9BY0EsRUFBQTNELEVBQ0EyQyxFQUFBRixHQWRBRCxFQUFBb0IsR0FBQSxPQWNBLEVBQUE1RCxFQUNBK0QsRUFBQU4sR0FkQUwsRUFBQVMsR0FBQSxPQWNBLEVBQUE3RCxFQUNBNEMsRUFBQXZCLEdBYkFnQyxFQUFBSyxHQUFBLE9BYUEsRUFBQTFELEVBQ0E2QyxFQUFBdkIsR0FiQWdDLEVBQUFLLEdBQUEsT0FhQSxFQUFBM0QsRUFDQThDLEVBQUFMLEdBYkFjLEVBQUFLLEdBQUEsT0FhQSxFQUFBNUQsRUFDQWdFLEVBQUFQLEdBYkFELEVBQUFLLEdBQUEsT0FhQSxFQUFBN0QsRUFDQWlFLEVBQUE1QyxFQUFBLElBQUFyQixFQUNBa0UsRUFBQTVDLEVBQUEsSUFBQXRCLEVBQ0FtRSxFQUFBMUIsRUFBQSxJQUFBekMsRUFDQW9FLEdBQUFYLEVBQUEsSUFBQXpELEVBRUEyQixHQUFBLElBQUF6dUIsRUFDQTB1QixHQUFBLElBQUF0RCxFQUNBeUUsR0FBQSxJQUFBMW5CLEVBQ0FncEIsR0FBQSxJQUFBNWYsRUFFQW9kLEdBQUEsR0FBQVIsSUFBQUMsSUFBQW1CLElBQUFnQixJQUNBLEdBQUE1QixHQUFBLEVBQUFYLEVBQUEsTUFDQSxDQUNBLElBQUFZLEdBQUF0QixFQUFBbUIsR0FBQW5CLEVBQUFvQixHQUFBcEIsRUFBQXVDLEdBQUF2QyxFQUFBNkQsT0FBQSxLQUVBbkQsR0FEQVcsUUFDQUEsSUFBQWhCLEVBQUFpQixJQUFBVCxFQUFBUixFQUFBaUIsR0FBQSxHQUFBUixFQUFBVCxFQUFBaUIsR0FBQSxHQUFBVyxFQUFBNUIsRUFBQWlCLEdBQUEsR0FBQTJCLEVBQ0EsQ0FDQSxJQUFBMUIsR0FBQSxHQUFBUixJQUFBQyxJQUFBa0IsSUFBQW9CLElBQ0EsR0FBQS9CLEdBQUEsRUFBQVosRUFBQSxNQUNBLENBQ0EsSUFBQWEsR0FBQXhCLEVBQUFtQixHQUFBWCxFQUFBUixFQUFBb0IsR0FBQVgsRUFBQVQsRUFBQXVDLEdBQUFWLEVBQUE3QixFQUFBNkQsR0FBQWxCLE1BQUEsS0FFQWhDLEdBREFZLFFBQ0FBLElBQUFsQixFQUFBbUIsSUFBQVQsRUFBQVYsRUFBQW1CLEdBQUEsR0FBQVIsRUFBQVgsRUFBQW1CLEdBQUEsR0FBQVUsRUFBQTdCLEVBQUFtQixHQUFBLEdBQUE4QixFQUNBLENBQ0EsSUFBQTdCLEdBQUEsR0FBQVIsSUFBQUMsSUFBQWlCLElBQUFvQixJQUNBLEdBQUE5QixHQUFBLEVBQUFiLEVBQUEsTUFDQSxDQUNBLElBQUFjLEdBQUExQixFQUFBbUIsR0FBQVcsRUFBQTlCLEVBQUFvQixHQUFBVyxFQUFBL0IsRUFBQXVDLEdBQUFQLEVBQUFoQyxFQUFBNkQsR0FBQWpCLE1BQUEsS0FFQWhDLEdBREFhLFFBQ0FBLElBQUFwQixFQUFBcUIsSUFBQVQsRUFBQVosRUFBQXFCLEdBQUEsR0FBQVIsRUFBQWIsRUFBQXFCLEdBQUEsR0FBQVMsRUFBQTlCLEVBQUFxQixHQUFBLEdBQUE2QixFQUNBLENBQ0EsSUFBQWYsR0FBQSxHQUFBSixJQUFBQyxJQUFBQyxJQUFBa0IsSUFDQSxHQUFBaEIsR0FBQSxFQUFBWixFQUFBLE1BQ0EsQ0FDQSxJQUFBYSxHQUFBekMsRUFBQW1CLEdBQUEwQixFQUFBN0MsRUFBQW9CLEdBQUEwQixFQUFBOUMsRUFBQXVDLEdBQUFRLEVBQUEvQyxFQUFBNkQsR0FBQWIsTUFBQSxLQUVBcEIsR0FEQVksUUFDQUEsSUFBQW5DLEVBQUFvQyxJQUFBTCxFQUFBL0IsRUFBQW9DLEdBQUEsR0FBQUosRUFBQWhDLEVBQUFvQyxHQUFBLEdBQUFILEVBQUFqQyxFQUFBb0MsR0FBQSxHQUFBZSxFQUNBLENBQ0EsSUFBQU0sR0FBQSxHQUFBTCxJQUFBQyxJQUFBQyxJQUFBQyxNQUNBLEdBQUFFLEdBQUEsRUFBQXBCLEVBQUEsTUFDQSxDQUNBLElBQUFxQixHQUFBL0QsRUFBQW1CLEdBQUEsRUFBQW5CLEVBQUFvQixHQUFBLEVBQUFwQixFQUFBdUMsR0FBQSxFQUFBdkMsRUFBQTZELEdBQUEsV0FFQW5CLEdBREFvQixRQUNBQSxJQUFBekQsRUFBQTBELElBQUFOLEVBQUFwRCxFQUFBMEQsR0FBQSxHQUFBTCxFQUFBckQsRUFBQTBELEdBQUEsR0FBQUosRUFBQXRELEVBQUEwRCxHQUFBLEdBQUFILEdBQ0EsQ0FFQSxXQUFBbEQsRUFBQUMsRUFBQUMsRUFBQWdCLEVBQUFjLEVBQ0EsR0FpQkE5cUIsRUFBQW9zQix1QkFBQWpFLEVBdURBLG9CQUFBa0UsZUFBQUMsS0FBQUQsUUFBQSxrQkFBQXJzQixDQUFBLFNBRUEsSUFBQXpFLElBQUF5RSxlQUVBLG9CQUFBa0gsZ0JBQUFsSCxxQkFFQSxJQUFBdEUsSUFDQUEsRUFBQUgsUUFBQXlFLEVBR0EsQ0EzYkEsRSx5QkM3QkEsTUFBQXNqQixFQUFBcm9CLEVBQUEsaUJBQ0FzRixFQUFBdEYsRUFBQSw2QkFDQXN4QixFQUFBdHhCLEVBQUEsMkJBR0E4WCxFQUFBLENBQ0FVLFdBQUEsQ0FBQXZNLE9BQUE2UCxXQUFBN1AsT0FBQThQLGFBQ0FxRSxTQUFBLEVBQ0FuRixZQUFBLEdBR0F6TyxTQUFBd0osS0FBQU4sTUFBQTZiLFdBRUEsUUFDQS9rQixTQUFBZ2xCLE1BQUEsT0FDQSxNQUdBQyxFQUFBLENBQ0FDLEtBSkEzd0IsS0FBQUMsTUFBQXNFLEVBQUFxQixNQUFBLE9BS0FnckIsS0FKQTV3QixLQUFBQyxNQUFBc0UsRUFBQXFCLE1BQUEsT0FLQWlyQixTQUFBLEVBQ0FDLFNBQUEsR0FDQUMsS0FOQXhzQixFQUFBcUIsTUFBQSxXQU9Bb3JCLElBQUEsRUFDQW51QixNQUFBLEVBQ0F3YyxTQUFBLEVBQ0E0UixRQUFBLFFBeUVBM0osR0F2RUEsSUFDQSxFQUFBOUssVUFBQS9DLFFBQUFDLFNBQUE3VyxZQUNBMlosRUFBQTBVLFVBQUEsUUFDQTFVLEVBQUEyVSxTQUFBLElBQUExWCxFQUFBQyxHQUVBLE1BQUFpWCxFQUFBRCxFQUFBQyxLQUNBQyxFQUFBRixFQUFBRSxLQUNBUSxFQUFBVCxFQUFBQyxFQUNBUyxFQUFBLElBQUE1WCxFQUNBNlgsRUFBQSxJQUFBNVgsRUFDQTZYLEVBQUFGLEVBQUFWLEVBQ0FhLEVBQUFGLEVBQUFWLEVBQ0FhLEVBQUEsSUFBQWhZLEVBQUE0WCxHQUNBSyxFQUFBLElBQUFoWSxFQUFBNFgsR0FFQSxRQUFBeHlCLEVBQUEsRUFBQUEsRUFBQXN5QixFQUFBdHlCLElBQUEsQ0FDQTBkLEVBQUFtVixZQUFBLFNBRUEsTUFFQXZ1QixFQUZBdEUsRUFBQTZ4QixFQUVBWSxFQUNBbHNCLEVBRkFyRixLQUFBQyxNQUFBbkIsRUFBQTZ4QixHQUVBYSxFQUNBL3JCLEVBQUEsR0FBQThyQixFQUlBNXlCLEVBQUE0RixFQUFBZSxRQUFBbEMsRUFBQWlDLEVBQUEsSUFGQXFyQixFQUFBclIsUUFBQXhjLEVBQUE2dEIsRUFBQTd0QixPQUVBNnRCLEVBQUFLLEtBQUFMLEVBQUFNLEtBQ0FqTixFQUFBd00sRUFBQWp0QixTQUFBM0UsR0FBQSxJQUFBK3hCLEVBQUFHLFNBQUFILEVBQUFJLFVBRUFjLEVBQUFqekIsRUFBQXFCLEtBQUFnQyxHQUFBLEdBRUF3YSxFQUFBNkIsT0FDQTdCLEVBQUFxVixVQUFBenVCLEVBQUFpQyxHQUNBbVgsRUFBQXFWLFVBQUFKLEVBQUFDLEdBQ0FsVixFQUFBcVYsVUFBQSxHQUFBTixFQUFBLEdBQUFDLEdBQ0FoVixFQUFBc1YsT0FBQUYsR0FFQXBWLEVBQUF1VixVQUFBaE8sRUFDQXZILEVBQUF5VSxRQUFBUCxFQUFBTyxRQUNBelUsRUFBQXdWLFlBQ0F4VixFQUFBeVYsUUFBQSxHQUFBeHNCLEVBQUEsR0FDQStXLEVBQUEwVixPQUFBLEdBQUF6c0IsRUFBQSxHQUNBK1csRUFBQTJWLFNBRUEzVixFQUFBMkgsU0FDQSxJQTBCQXBOLEUsNkhDbkdBaEssRUFBQXFsQixrQ0FBQWxuQixPQUFBbW5CLFNBQUF2ZCxJIn0=</script>