@turnai/turn-shared 1.0.4 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,23 +1,9 @@
1
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("turn-shared",[],e):"object"==typeof exports?exports["turn-shared"]=e():t["turn-shared"]=e()}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=307)}([function(t,e,n){var r=n(1),o=n(19);t.exports=function(t){return function e(n,i){switch(arguments.length){case 0:return e;case 1:return o(n)?e:r((function(e){return t(n,e)}));default:return o(n)&&o(i)?e:o(n)?r((function(e){return t(e,i)})):o(i)?r((function(e){return t(n,e)})):t(n,i)}}}},function(t,e,n){var r=n(19);t.exports=function(t){return function e(n){return 0===arguments.length||r(n)?e:t.apply(this,arguments)}}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(74),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();t.exports=i},function(t,e,n){"use strict";var r=n(65),o=n(172),i=Object.prototype.toString;function u(t){return"[object Array]"===i.call(t)}function a(t){return null!==t&&"object"==typeof t}function s(t){return"[object Function]"===i.call(t)}function c(t,e){if(null!=t)if("object"==typeof t||u(t)||(t=[t]),u(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.call(null,t[o],o,t)}t.exports={isArray:u,isArrayBuffer:function(t){return"[object ArrayBuffer]"===i.call(t)},isBuffer:o,isFormData:function(t){return"undefined"!=typeof FormData&&t instanceof FormData},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:a,isUndefined:function(t){return void 0===t},isDate:function(t){return"[object Date]"===i.call(t)},isFile:function(t){return"[object File]"===i.call(t)},isBlob:function(t){return"[object Blob]"===i.call(t)},isFunction:s,isStream:function(t){return a(t)&&s(t.pipe)},isURLSearchParams:function(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:c,merge:function t(){var e={};function n(n,r){"object"==typeof e[r]&&"object"==typeof n?e[r]=t(e[r],n):e[r]=n}for(var r=0,o=arguments.length;r<o;r++)c(arguments[r],n);return e},extend:function(t,e,n){return c(e,(function(e,o){t[o]=n&&"function"==typeof e?r(e,n):e})),t},trim:function(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}}},function(t,e,n){var r=n(11),o=n(2),i=n(8);t.exports=function(t){return"string"==typeof t||!o(t)&&i(t)&&"[object String]"==r(t)}},function(t,e,n){var r=n(202),o=n(207);t.exports=function(t,e){var n=o(t,e);return r(n)?n:void 0}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){t.exports=function(){"use strict";var t=6e4,e=36e5,n="millisecond",r="second",o="minute",i="hour",u="day",a="week",s="month",c="quarter",f="year",l="date",p="Invalid Date",h=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,d=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},y=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},g={s:y,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),o=n%60;return(e<=0?"+":"-")+y(r,2,"0")+":"+y(o,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),o=e.clone().add(r,s),i=n-o<0,u=e.clone().add(r+(i?-1:1),s);return+(-(r+(n-o)/(i?o-u:u-o))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:s,y:f,w:a,d:u,D:l,h:i,m:o,s:r,ms:n,Q:c}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},b="en",m={};m[b]=v;var x="$isDayjsObject",w=function(t){return t instanceof N||!(!t||!t[x])},_=function t(e,n,r){var o;if(!e)return b;if("string"==typeof e){var i=e.toLowerCase();m[i]&&(o=i),n&&(m[i]=n,o=i);var u=e.split("-");if(!o&&u.length>1)return t(u[0])}else{var a=e.name;m[a]=e,o=a}return!r&&o&&(b=o),o||!r&&b},O=function(t,e){if(w(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new N(n)},A=g;A.l=_,A.i=w,A.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var N=function(){function v(t){this.$L=_(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[x]=!0}var y=v.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(A.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(h);if(r){var o=r[2]-1||0,i=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)}}return new Date(e)}(t),this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return A},y.isValid=function(){return!(this.$d.toString()===p)},y.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},y.isAfter=function(t,e){return O(t)<this.startOf(e)},y.isBefore=function(t,e){return this.endOf(e)<O(t)},y.$g=function(t,e,n){return A.u(t)?this[e]:this.set(n,t)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(t,e){var n=this,c=!!A.u(e)||e,p=A.p(t),h=function(t,e){var r=A.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return c?r:r.endOf(u)},d=function(t,e){return A.w(n.toDate()[t].apply(n.toDate("s"),(c?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},v=this.$W,y=this.$M,g=this.$D,b="set"+(this.$u?"UTC":"");switch(p){case f:return c?h(1,0):h(31,11);case s:return c?h(1,y):h(0,y+1);case a:var m=this.$locale().weekStart||0,x=(v<m?v+7:v)-m;return h(c?g-x:g+(6-x),y);case u:case l:return d(b+"Hours",0);case i:return d(b+"Minutes",1);case o:return d(b+"Seconds",2);case r:return d(b+"Milliseconds",3);default:return this.clone()}},y.endOf=function(t){return this.startOf(t,!1)},y.$set=function(t,e){var a,c=A.p(t),p="set"+(this.$u?"UTC":""),h=(a={},a[u]=p+"Date",a[l]=p+"Date",a[s]=p+"Month",a[f]=p+"FullYear",a[i]=p+"Hours",a[o]=p+"Minutes",a[r]=p+"Seconds",a[n]=p+"Milliseconds",a)[c],d=c===u?this.$D+(e-this.$W):e;if(c===s||c===f){var v=this.clone().set(l,1);v.$d[h](d),v.init(),this.$d=v.set(l,Math.min(this.$D,v.daysInMonth())).$d}else h&&this.$d[h](d);return this.init(),this},y.set=function(t,e){return this.clone().$set(t,e)},y.get=function(t){return this[A.p(t)]()},y.add=function(n,c){var l,p=this;n=Number(n);var h=A.p(c),d=function(t){var e=O(p);return A.w(e.date(e.date()+Math.round(t*n)),p)};if(h===s)return this.set(s,this.$M+n);if(h===f)return this.set(f,this.$y+n);if(h===u)return d(1);if(h===a)return d(7);var v=(l={},l[o]=t,l[i]=e,l[r]=1e3,l)[h]||1,y=this.$d.getTime()+n*v;return A.w(y,this)},y.subtract=function(t,e){return this.add(-1*t,e)},y.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var r=t||"YYYY-MM-DDTHH:mm:ssZ",o=A.z(this),i=this.$H,u=this.$m,a=this.$M,s=n.weekdays,c=n.months,f=n.meridiem,l=function(t,n,o,i){return t&&(t[n]||t(e,r))||o[n].slice(0,i)},h=function(t){return A.s(i%12||12,t,"0")},v=f||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(d,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return A.s(e.$y,4,"0");case"M":return a+1;case"MM":return A.s(a+1,2,"0");case"MMM":return l(n.monthsShort,a,c,3);case"MMMM":return l(c,a);case"D":return e.$D;case"DD":return A.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return l(n.weekdaysMin,e.$W,s,2);case"ddd":return l(n.weekdaysShort,e.$W,s,3);case"dddd":return s[e.$W];case"H":return String(i);case"HH":return A.s(i,2,"0");case"h":return h(1);case"hh":return h(2);case"a":return v(i,u,!0);case"A":return v(i,u,!1);case"m":return String(u);case"mm":return A.s(u,2,"0");case"s":return String(e.$s);case"ss":return A.s(e.$s,2,"0");case"SSS":return A.s(e.$ms,3,"0");case"Z":return o}return null}(t)||o.replace(":","")}))},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(n,l,p){var h,d=this,v=A.p(l),y=O(n),g=(y.utcOffset()-this.utcOffset())*t,b=this-y,m=function(){return A.m(d,y)};switch(v){case f:h=m()/12;break;case s:h=m();break;case c:h=m()/3;break;case a:h=(b-g)/6048e5;break;case u:h=(b-g)/864e5;break;case i:h=b/e;break;case o:h=b/t;break;case r:h=b/1e3;break;default:h=b}return p?h:A.a(h)},y.daysInMonth=function(){return this.endOf(s).$D},y.$locale=function(){return m[this.$L]},y.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=_(t,e,!0);return r&&(n.$L=r),n},y.clone=function(){return A.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},v}(),S=N.prototype;return O.prototype=S,[["$ms",n],["$s",r],["$m",o],["$H",i],["$W",u],["$M",s],["$y",f],["$D",l]].forEach((function(t){S[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,N,O),t.$i=!0),O},O.locale=_,O.isDayjs=w,O.unix=function(t){return O(1e3*t)},O.en=m[b],O.Ls=m,O.p={},O}()},function(t,e){t.exports=function(t,e){switch(t){case 0:return function(){return e.apply(this,arguments)};case 1:return function(t){return e.apply(this,arguments)};case 2:return function(t,n){return e.apply(this,arguments)};case 3:return function(t,n,r){return e.apply(this,arguments)};case 4:return function(t,n,r,o){return e.apply(this,arguments)};case 5:return function(t,n,r,o,i){return e.apply(this,arguments)};case 6:return function(t,n,r,o,i,u){return e.apply(this,arguments)};case 7:return function(t,n,r,o,i,u,a){return e.apply(this,arguments)};case 8:return function(t,n,r,o,i,u,a,s){return e.apply(this,arguments)};case 9:return function(t,n,r,o,i,u,a,s,c){return e.apply(this,arguments)};case 10:return function(t,n,r,o,i,u,a,s,c,f){return e.apply(this,arguments)};default:throw new Error("First argument to _arity must be a non-negative integer no greater than ten")}}},function(t,e,n){var r=n(25),o=n(203),i=n(204),u=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?o(t):i(t)}},function(t,e,n){var r=n(93);function o(t,e,n){var i=r(t,8,void 0,void 0,void 0,void 0,void 0,e=n?void 0:e);return i.placeholder=o.placeholder,i}o.placeholder={},t.exports=o},function(t,e){t.exports=function(t,e){return Object.prototype.hasOwnProperty.call(e,t)}},function(t,e,n){var r=n(1),o=n(0),i=n(19);t.exports=function(t){return function e(n,u,a){switch(arguments.length){case 0:return e;case 1:return i(n)?e:o((function(e,r){return t(n,e,r)}));case 2:return i(n)&&i(u)?e:i(n)?o((function(e,n){return t(e,u,n)})):i(u)?o((function(e,r){return t(n,e,r)})):r((function(e){return t(n,u,e)}));default:return i(n)&&i(u)&&i(a)?e:i(n)&&i(u)?o((function(e,n){return t(e,n,a)})):i(n)&&i(a)?o((function(e,n){return t(e,u,n)})):i(u)&&i(a)?o((function(e,r){return t(n,e,r)})):i(n)?r((function(e){return t(e,u,a)})):i(u)?r((function(e){return t(n,e,a)})):i(a)?r((function(e){return t(n,u,e)})):t(n,u,a)}}}},function(t,e,n){var r=n(10),o=n(1),i=n(0),u=n(144);t.exports=i((function(t,e){return 1===t?o(e):r(t,u(t,[],e))}))},function(t,e,n){var r=n(73),o=n(46);t.exports=function(t){return null!=t&&o(t.length)&&!r(t)}},function(t,e){var n,r,o=t.exports={};function i(){throw new Error("setTimeout has not been defined")}function u(){throw new Error("clearTimeout has not been defined")}function a(t){if(n===setTimeout)return setTimeout(t,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(t){n=i}try{r="function"==typeof clearTimeout?clearTimeout:u}catch(t){r=u}}();var s,c=[],f=!1,l=-1;function p(){f&&s&&(f=!1,s.length?c=s.concat(c):l=-1,c.length&&h())}function h(){if(!f){var t=a(p);f=!0;for(var e=c.length;e;){for(s=c,c=[];++l<e;)s&&s[l].run();l=-1,e=c.length}s=null,f=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===u||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function d(t,e){this.fun=t,this.array=e}function v(){}o.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];c.push(new d(t,e)),1!==c.length||f||a(h)},d.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=v,o.addListener=v,o.once=v,o.off=v,o.removeListener=v,o.removeAllListeners=v,o.emit=v,o.prependListener=v,o.prependOnceListener=v,o.listeners=function(t){return[]},o.binding=function(t){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(t){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t&&!0===t["@@functional/placeholder"]}},function(t,e,n){var r=n(133),o=n(134),i=n(135);t.exports=function(){function t(t,e,n){for(var r=n.next();!r.done;){if((e=t["@@transducer/step"](e,r.value))&&e["@@transducer/reduced"]){e=e["@@transducer/value"];break}r=n.next()}return t["@@transducer/result"](e)}var e="undefined"!=typeof Symbol?Symbol.iterator:"@@iterator";return function(n,u,a){if("function"==typeof n&&(n=r(n)),i(a))return function(t,e,n){for(var r=0,o=n.length;r<o;){if((e=t["@@transducer/step"](e,n[r]))&&e["@@transducer/reduced"]){e=e["@@transducer/value"];break}r+=1}return t["@@transducer/result"](e)}(n,u,a);if("function"==typeof a.reduce)return function(t,e,n){return t["@@transducer/result"](n.reduce(o(t["@@transducer/step"],t),e))}(n,u,a);if(null!=a[e])return t(n,u,a[e]());if("function"==typeof a.next)return t(n,u,a);throw new TypeError("reduce: list must be array or iterable")}}()},function(t,e){t.exports=Array.isArray||function(t){return null!=t&&t.length>=0&&"[object Array]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(0),o=n(152),i=n(154),u=n(20),a=n(155),s=n(15),c=n(35);t.exports=r(o(["map"],a,(function(t,e){switch(Object.prototype.toString.call(e)){case"[object Function]":return s(e.length,(function(){return t.call(this,e.apply(this,arguments))}));case"[object Object]":return u((function(n,r){return n[r]=t(e[r]),n}),{},c(e));default:return i(t,e)}})))},function(t,e,n){var r=n(192),o=n(193),i=n(194),u=n(195),a=n(196);function s(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=i,s.prototype.has=u,s.prototype.set=a,t.exports=s},function(t,e,n){var r=n(39);t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},function(t,e,n){var r=n(4).Symbol;t.exports=r},function(t,e,n){var r=n(7)(Object,"create");t.exports=r},function(t,e,n){var r=n(216);t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&n.test(t))&&t>-1&&t%1==0&&t<e}},function(t,e,n){var r=n(11),o=n(8);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r=n(29);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(48),o=n(3);t.exports=function(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=r(t.prototype),i=t.apply(n,e);return o(i)?i:n}}},function(t,e){t.exports=function(t,e){for(var n=-1,r=t.length,o=0,i=[];++n<r;){var u=t[n];u!==e&&"__lodash_placeholder__"!==u||(t[n]="__lodash_placeholder__",i[o++]=n)}return i}},function(t,e){t.exports={AL:[{regex:/^\d{7,8}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 8"},{regex:/^[A-Z]\d{6,7}$/i,description:"ANNNNNNNN MinLength = 7 MaxLength = 8"}],AK:[{regex:/^\d{7}$/,description:"NNNNNNNN MinLength = 7 MaxLength = 7"}],AZ:[{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],AR:[{regex:/^[0-9]{9}$/,description:"NNNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],CA:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"}],CO:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]{1}[0-9]{3,6}$/i,description:"ANNNNNN min length 4 max 7"},{regex:/^[A-Z]{2}[0-9]{1,5}$/i,description:"AANNNNN min length 3 max 7"}],CT:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],DE:[{regex:/^\d{1,7}$/,description:"License must be 1-7 numbers"}],DC:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],FL:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"},{regex:/^[A-Z]\d{11}$/i,description:"ANNNNNNNNNNN MinLength = 12 MaxLength = 12"}],GA:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],GU:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],HI:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],ID:[{regex:/^[A-Z]{2}[0-9]{6}[A-Z]{1}$/i,description:"License must be 2 letters followed by 6 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],IL:[{regex:/^[A-Z]{1}[0-9]{11}$/i,description:"License must be 1 letter followed by 11 numbers"}],IN:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"}],IA:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{2}[0-9]{4}$/i,description:"License must be 3 numbers followed by 2 letters followed by 4 numbers"}],KS:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],KY:[{regex:/^[A-Z]{1}[0-9]{8,9}$/i,description:"License must be 1 letter followed by 8-9 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],LA:[{regex:/^[0-9]{1,9}$/i,description:"License must be 1-9 numbers"}],ME:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{7}[A-Z]{1}$/i,description:"License must be 7 numbers followed by 1 letter"},{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],MD:[{regex:/^[A-Z]{1,2}[0-9]{11,12}$/i,description:"License must be 1 or 2 letters followed by 11 or 12 numbers"}],MA:[{regex:/(^[A-Z]{1}[0-9]{8}$|^[A-Z]{2}[0-9]{7}$)/i,description:"License must be 1 letter followed by 8 numbers or 2 letters followed by 7 numbers"}],MI:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MN:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MS:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],MO:[{regex:/^[A-Z]{1}[0-9]{5,9}$/i,description:"License must be 1 letter followed by 5-9 numbers"},{regex:/^[A-Z]{1}[0-9]{6}[R]{1}$/i,description:'License must be 1 letter followed by 6 numbers followed by "R"'},{regex:/^[0-9]{9}[A-Z]{1}$/i,description:"License must be 9 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{1}[0-9]{6}$/i,description:"License must be 3 numbers + 1 alfanumeric + 6 numbers"},{regex:/^[A-Z]\d{5,6}[A-Z]$/i,description:"ANNNNNA MinLength = 7 MaxLength = 7 OR ANNNNNA MinLength = 8 MaxLength = 8"}],MT:[{regex:/^[0-9]{13}$/i,description:"License must be 13 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]\d(\d|[A-Z])\d{2}[A-Z]{3}\d$/i,description:"ANXNNAAAN MinLength = 9 MaxLength = 9"},{regex:/^[a-z]{3}\d{10}$/i,description:"Three letters and 10 digits"}],NE:[{regex:/^[A-Z]\d{3,8}$/i,description:"ANNNNNNNN MinLength = 4 MaxLength = 9"}],NV:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"},{regex:/^[0-9]{12}$/i,description:"License must be 12 numbers"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],NH:[{regex:/(^[0-9]{2}[A-Z]{3}[0-9]{5}$|^[A-Z]{3}[0-9]{8}$)/i,description:"License must be 2 numbers followed by 3 letters followed by 5 numbers OR 3 letters followed by 8 numbers"}],NJ:[{regex:/^[A-Z]{1}[0-9]{14}$/i,description:"License must be 1 letter followed by 14 numbers"}],NM:[{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NY:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"},{regex:/^[A-Z]{1}[0-9]{17,18}$/i,description:"License must be 1 letter followed by 17-18 numbers"},{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NC:[{regex:/^[0-9]{1,12}$/i,description:"License must be 1-12 numbers"}],ND:[{regex:/^[A-Z]{3}[0-9]{6}$/i,description:"License must be 3 letters followed by 6 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],OH:[{regex:/^[A-Z]{2}[0-9]{6}$/i,description:"License must be 2 letters followed by 6 numbers"}],OK:[{regex:/^[A-Z]{1}[0-9]{9}$/i,description:"License must be 1 letter followed by 9 numbers"},{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}],OR:[{regex:/^[0-9]{5,9}$/i,description:"License must be 5-9 numbers"},{regex:/^[A-Z]\d{7}$/i,description:"ANNNNNNN MinLength = 8 MaxLength = 8"},{regex:/^[A-Z0-9]{6,9}$/i,description:"XXXXXXXXX MinLength = 6 MaxLength = 9"}],PA:[{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],RI:[{regex:/^[0-9]{7,8}$/i,description:"License must be 7 or 8 numbers without letters"},{regex:/^[A-Z]{1}[0-9]{6}$/i,description:"License must be 1 letter followed by 6 numbers"}],SC:[{regex:/^[0-9]{6,11}$/i,description:"License must be 6-11 numbers (new: 9, old format: 6-11)"}],SD:[{regex:/^[0-9]{6,9}$/i,description:"License must be 6-9 numbers"}],TN:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],TX:[{regex:/^\d{5,8}$/,description:"NNNNNNNN MinLength = 5 MaxLength = 8"}],UT:[{regex:/^[0-9]{4,10}$/i,description:"License must be 4-10 numbers"}],VT:[{regex:/^[0-9]{7,}$/i,description:"License must be 7-8 numbers"},{regex:/^[0-9]{7}[A]$/i,description:'License must be 7 numbers followed by "A"'},{regex:/^\d{7}[A-Z]?$/i,description:"NNNNNNNA MinLength = 8 MaxLength = 8 OR NNNNNNN MinLength = 7 MaxLength = 7"}],VA:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],VI:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],WA:[{regex:/^(?=.{12}$)[A-Z]{1,7}[A-Z0-9\\*]{4,11}$/i,description:'License must be 1-7 letters followed by any combination of letters, numbers, or "*" for a total of 12 characters'},{regex:/^[A-Z0-9]{12}$/i,description:"XXXXXXXXXXXX MinLength = 12 MaxLength = 12"}],WV:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[A-Z]{2}[0-9]{5}$/i,description:"License must be 2 letters followed by 5 numbers"},{regex:/^[A-Z]{1,2}[0-9]{6}$/i,description:"License must be 1-2 letters followed by 6 numbers"},{regex:/^[A-Z]\d{6}$/i,description:"ANNNNNN MinLength = 7 MaxLength = 7"},{regex:/^[A-Z]{2}\d{5,6}$/i,description:"AANNNNN MinLength = 7 MaxLength = 7 OR AANNNNNN MinLength = 8 MaxLength = 8"},{regex:/^\d[A-Z]\d{5}$/i,description:"NANNNNN MinLength = 7 MaxLength = 7"}],WI:[{regex:/^[A-Z]{1}[0-9]{13}$/i,description:"License must be 1 letter followed by 13 numbers"}],WY:[{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],PR:[{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}]}},function(t,e,n){var r,o,i,u,a=n(1),s=n(13),c=n(58);t.exports=(r=!{toString:null}.propertyIsEnumerable("toString"),o=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],i=function(){"use strict";return arguments.propertyIsEnumerable("length")}(),u=function(t,e){for(var n=0;n<t.length;){if(t[n]===e)return!0;n+=1}return!1},"function"!=typeof Object.keys||i?a((function(t){if(Object(t)!==t)return[];var e,n,a=[],f=i&&c(t);for(e in t)!s(e,t)||f&&"length"===e||(a[a.length]=e);if(r)for(n=o.length-1;n>=0;)s(e=o[n],t)&&!u(a,e)&&(a[a.length]=e),n-=1;return a})):a((function(t){return Object(t)!==t?[]:Object.keys(t)})))},function(t,e,n){var r=n(14),o=n(20);t.exports=r(o)},function(t,e,n){var r=n(21);t.exports=function(t,e){return function(){var n=arguments.length;if(0===n)return e();var o=arguments[n-1];return r(o)||"function"!=typeof o[t]?e.apply(this,arguments):o[t].apply(o,Array.prototype.slice.call(arguments,0,n-1))}}},function(t,e,n){"use strict";(function(e){var r=n(5),o=n(174),i={"Content-Type":"application/x-www-form-urlencoded"};function u(t,e){!r.isUndefined(t)&&r.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var a,s={adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==e)&&(a=n(66)),a),transformRequest:[function(t,e){return o(e,"Content-Type"),r.isFormData(t)||r.isArrayBuffer(t)||r.isBuffer(t)||r.isStream(t)||r.isFile(t)||r.isBlob(t)?t:r.isArrayBufferView(t)?t.buffer:r.isURLSearchParams(t)?(u(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):r.isObject(t)?(u(e,"application/json;charset=utf-8"),JSON.stringify(t)):t}],transformResponse:[function(t){if("string"==typeof t)try{t=JSON.parse(t)}catch(t){}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}};s.headers={common:{Accept:"application/json, text/plain, */*"}},r.forEach(["delete","get","head"],(function(t){s.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){s.headers[t]=r.merge(i)})),t.exports=s}).call(this,n(17))},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(7)(n(4),"Map");t.exports=r},function(t,e,n){var r=n(208),o=n(215),i=n(217),u=n(218),a=n(219);function s(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=i,s.prototype.has=u,s.prototype.set=a,t.exports=s},function(t,e,n){var r=n(236),o=n(80),i=n(16);t.exports=function(t){return i(t)?r(t):o(t)}},function(t,e,n){var r=n(238),o=n(8),i=Object.prototype,u=i.hasOwnProperty,a=i.propertyIsEnumerable,s=r(function(){return arguments}())?r:function(t){return o(t)&&u.call(t,"callee")&&!a.call(t,"callee")};t.exports=s},function(t,e,n){(function(t){var r=n(4),o=n(239),i=e&&!e.nodeType&&e,u=i&&"object"==typeof t&&t&&!t.nodeType&&t,a=u&&u.exports===i?r.Buffer:void 0,s=(a?a.isBuffer:void 0)||o;t.exports=s}).call(this,n(79)(t))},function(t,e,n){var r=n(240),o=n(241),i=n(242),u=i&&i.isTypedArray,a=u?o(u):r;t.exports=a},function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var r=n(2),o=n(29),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(u.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(3),o=Object.create,i=function(){function t(){}return function(e){if(!r(e))return{};if(o)return o(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=i},function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},function(t,e,n){var r=n(48),o=n(51);function i(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}i.prototype=r(o.prototype),i.prototype.constructor=i,t.exports=i},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t){return t.placeholder}},function(t,e,n){var r,o,i;!function(u){"use strict";if(null!=e&&"number"!=typeof e.nodeType)t.exports=u();else if(null!=n(189))o=[],void 0===(i="function"==typeof(r=u)?r.apply(e,o):r)||(t.exports=i);else{var a=u(),s="undefined"!=typeof self?self:$.global;"function"!=typeof s.btoa&&(s.btoa=a.btoa),"function"!=typeof s.atob&&(s.atob=a.atob)}}((function(){"use strict";var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function e(t){this.message=t}return e.prototype=new Error,e.prototype.name="InvalidCharacterError",{btoa:function(n){for(var r,o,i=String(n),u=0,a=t,s="";i.charAt(0|u)||(a="=",u%1);s+=a.charAt(63&r>>8-u%1*8)){if((o=i.charCodeAt(u+=3/4))>255)throw new e("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|o}return s},atob:function(n){var r=String(n).replace(/[=]+$/,"");if(r.length%4==1)throw new e("'atob' failed: The string to be decoded is not correctly encoded.");for(var o,i,u=0,a=0,s="";i=r.charAt(a++);~i&&(o=u%4?64*o+i:i,u++%4)?s+=String.fromCharCode(255&o>>(-2*u&6)):0)i=t.indexOf(i);return s}}}))},function(t,e,n){var r=n(293),o=n(93),i=n(52),u=n(33),a=r((function(t,e){var n=u(e,i(a));return o(t,32,void 0,e,n)}));a.placeholder={},t.exports=a},function(t,e,n){var r=n(34),o=n(301),i=n(302),u=n(303);t.exports={driversLicenseRegex:r,isValidUSLicense:o,validateUSDriversLicense:i,supportedStates:u}},function(t,e,n){"use strict";(function(t,r){n.d(e,"a",(function(){return _e}));var o=[];Object.freeze(o);var i={};function u(){return++Et.mobxGuid}function a(t){throw s(!1,t),"X"}function s(t,e){if(!t)throw new Error("[mobx] "+(e||"An invariant failed, however the error is obfuscated because this is a production build."))}Object.freeze(i);function c(t){var e=!1;return function(){if(!e)return e=!0,t.apply(this,arguments)}}var f=function(){};function l(t){return null!==t&&"object"==typeof t}function p(t){if(null===t||"object"!=typeof t)return!1;var e=Object.getPrototypeOf(t);return e===Object.prototype||null===e}function h(t,e,n){Object.defineProperty(t,e,{enumerable:!1,writable:!0,configurable:!0,value:n})}function d(t,e){var n="isMobX"+t;return e.prototype[n]=!0,function(t){return l(t)&&!0===t[n]}}function v(t){return t instanceof Map}function y(t){return t instanceof Set}function g(t){var e=new Set;for(var n in t)e.add(n);return Object.getOwnPropertySymbols(t).forEach((function(n){Object.getOwnPropertyDescriptor(t,n).enumerable&&e.add(n)})),Array.from(e)}function b(t){return t&&t.toString?t.toString():new String(t).toString()}function m(t){return null===t?null:"object"==typeof t?""+t:t}var x="undefined"!=typeof Reflect&&Reflect.ownKeys?Reflect.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:Object.getOwnPropertyNames,w=Symbol("mobx administration"),_=function(){function t(t){void 0===t&&(t="Atom@"+u()),this.name=t,this.isPendingUnobservation=!1,this.isBeingObserved=!1,this.observers=new Set,this.diffValue=0,this.lastAccessedBy=0,this.lowestObserverState=J.NOT_TRACKING}return t.prototype.onBecomeObserved=function(){this.onBecomeObservedListeners&&this.onBecomeObservedListeners.forEach((function(t){return t()}))},t.prototype.onBecomeUnobserved=function(){this.onBecomeUnobservedListeners&&this.onBecomeUnobservedListeners.forEach((function(t){return t()}))},t.prototype.reportObserved=function(){return Mt(this)},t.prototype.reportChanged=function(){$t(),function(t){if(t.lowestObserverState===J.STALE)return;t.lowestObserverState=J.STALE,t.observers.forEach((function(e){e.dependenciesState===J.UP_TO_DATE&&(e.isTracing!==Q.NONE&&Dt(e,t),e.onBecomeStale()),e.dependenciesState=J.STALE}))}(this),Ct()},t.prototype.toString=function(){return this.name},t}(),O=d("Atom",_);function A(t,e,n){void 0===e&&(e=f),void 0===n&&(n=f);var r,o=new _(t);return e!==f&&Yt("onBecomeObserved",o,e,r),n!==f&&Gt(o,n),o}var N={identity:function(t,e){return t===e},structural:function(t,e){return Ve(t,e)},default:function(t,e){return Object.is(t,e)},shallow:function(t,e){return Ve(t,e,1)}},S=function(t,e){return(S=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};
2
- /*! *****************************************************************************
3
- Copyright (c) Microsoft Corporation. All rights reserved.
4
- Licensed under the Apache License, Version 2.0 (the "License"); you may not use
5
- this file except in compliance with the License. You may obtain a copy of the
6
- License at http://www.apache.org/licenses/LICENSE-2.0
7
-
8
- THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
9
- KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
10
- WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
11
- MERCHANTABLITY OR NON-INFRINGEMENT.
12
-
13
- See the Apache Version 2.0 License for specific language governing permissions
14
- and limitations under the License.
15
- ***************************************************************************** */var j=function(){return(j=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t}).apply(this,arguments)};function E(t){var e="function"==typeof Symbol&&t[Symbol.iterator],n=0;return e?e.call(t):{next:function(){return t&&n>=t.length&&(t=void 0),{value:t&&t[n++],done:!t}}}}function R(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),u=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)u.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return u}function T(){for(var t=[],e=0;e<arguments.length;e++)t=t.concat(R(arguments[e]));return t}var L=Symbol("mobx did run lazy initializers"),$=Symbol("mobx pending decorators"),C={},M={};function D(t,e){var n=e?C:M;return n[t]||(n[t]={configurable:!0,enumerable:e,get:function(){return k(this),this[t]},set:function(e){k(this),this[t]=e}})}function k(t){var e,n;if(!0!==t[L]){var r=t[$];if(r){h(t,L,!0);var o=T(Object.getOwnPropertySymbols(r),Object.keys(r));try{for(var i=E(o),u=i.next();!u.done;u=i.next()){var a=r[u.value];a.propertyCreator(t,a.prop,a.descriptor,a.decoratorTarget,a.decoratorArguments)}}catch(t){e={error:t}}finally{try{u&&!u.done&&(n=i.return)&&n.call(i)}finally{if(e)throw e.error}}}}}function I(t,e){return function(){var n,r=function(r,o,i,u){if(!0===u)return e(r,o,i,r,n),null;if(!Object.prototype.hasOwnProperty.call(r,$)){var a=r[$];h(r,$,j({},a))}return r[$][o]={prop:o,propertyCreator:e,descriptor:i,decoratorTarget:r,decoratorArguments:n},D(o,t)};return P(arguments)?(n=o,r.apply(null,arguments)):(n=Array.prototype.slice.call(arguments),r)}}function P(t){return(2===t.length||3===t.length)&&("string"==typeof t[1]||"symbol"==typeof t[1])||4===t.length&&!0===t[3]}function U(t,e,n){return re(t)?t:Array.isArray(t)?Y.array(t,{name:n}):p(t)?Y.object(t,void 0,{name:n}):v(t)?Y.map(t,{name:n}):y(t)?Y.set(t,{name:n}):t}function V(t){return t}function B(e){s(e);var n=I(!0,(function(t,n,r,o,i){var u=r?r.initializer?r.initializer.call(t):r.value:void 0;Le(t).addObservableProp(n,u,e)})),r=(void 0!==t&&t.env,n);return r.enhancer=e,r}var z={deep:!0,name:void 0,defaultDecorator:void 0,proxy:!0};function Z(t){return null==t?z:"string"==typeof t?{name:t,deep:!0,proxy:!0}:t}Object.freeze(z);var F=B(U),q=B((function(t,e,n){return null==t||ke(t)||_e(t)||Se(t)||Re(t)?t:Array.isArray(t)?Y.array(t,{name:n,deep:!1}):p(t)?Y.object(t,void 0,{name:n,deep:!1}):v(t)?Y.map(t,{name:n,deep:!1}):y(t)?Y.set(t,{name:n,deep:!1}):a(!1)})),W=B(V),H=B((function(t,e,n){return Ve(t,e)?e:t}));function K(t){return t.defaultDecorator?t.defaultDecorator.enhancer:!1===t.deep?V:U}var G={box:function(t,e){arguments.length>2&&X("box");var n=Z(e);return new xt(t,K(n),n.name,!0,n.equals)},array:function(t,e){arguments.length>2&&X("array");var n=Z(e);return ge(t,K(n),n.name)},map:function(t,e){arguments.length>2&&X("map");var n=Z(e);return new Ne(t,K(n),n.name)},set:function(t,e){arguments.length>2&&X("set");var n=Z(e);return new Ee(t,K(n),n.name)},object:function(t,e,n){"string"==typeof arguments[1]&&X("object");var r=Z(n);if(!1===r.proxy)return Xt({},t,e,r);var o=Jt(r),i=Xt({},void 0,void 0,r),u=ce(i);return Qt(u,t,e,o),u},ref:W,shallow:q,deep:F,struct:H},Y=function(t,e,n){if("string"==typeof arguments[1]||"symbol"==typeof arguments[1])return F.apply(null,arguments);if(re(t))return t;var r=p(t)?Y.object(t,e,n):Array.isArray(t)?Y.array(t,e):v(t)?Y.map(t,e):y(t)?Y.set(t,e):t;if(r!==t)return r;a(!1)};function X(t){a("Expected one or two arguments to observable."+t+". Did you accidentally try to use observable."+t+" as decorator?")}Object.keys(G).forEach((function(t){return Y[t]=G[t]}));var J,Q,tt=I(!1,(function(t,e,n,r,o){var i=n.get,u=n.set,a=o[0]||{};Le(t).addComputedProp(t,e,j({get:i,set:u,context:t},a))}));tt({equals:N.structural});!function(t){t[t.NOT_TRACKING=-1]="NOT_TRACKING",t[t.UP_TO_DATE=0]="UP_TO_DATE",t[t.POSSIBLY_STALE=1]="POSSIBLY_STALE",t[t.STALE=2]="STALE"}(J||(J={})),function(t){t[t.NONE=0]="NONE",t[t.LOG=1]="LOG",t[t.BREAK=2]="BREAK"}(Q||(Q={}));var et=function(t){this.cause=t};function nt(t){return t instanceof et}function rt(t){switch(t.dependenciesState){case J.UP_TO_DATE:return!1;case J.NOT_TRACKING:case J.STALE:return!0;case J.POSSIBLY_STALE:for(var e=ft(!0),n=st(),r=t.observing,o=r.length,i=0;i<o;i++){var u=r[i];if(_t(u)){if(Et.disableErrorBoundaries)u.get();else try{u.get()}catch(t){return ct(n),lt(e),!0}if(t.dependenciesState===J.STALE)return ct(n),lt(e),!0}}return pt(t),ct(n),lt(e),!1}}function ot(t){var e=t.observers.size>0;Et.computationDepth>0&&e&&a(!1),Et.allowStateChanges||!e&&"strict"!==Et.enforceActions||a(!1)}function it(t,e,n){var r=ft(!0);pt(t),t.newObserving=new Array(t.observing.length+100),t.unboundDepsCount=0,t.runId=++Et.runId;var o,i=Et.trackingDerivation;if(Et.trackingDerivation=t,!0===Et.disableErrorBoundaries)o=e.call(n);else try{o=e.call(n)}catch(t){o=new et(t)}return Et.trackingDerivation=i,function(t){for(var e=t.observing,n=t.observing=t.newObserving,r=J.UP_TO_DATE,o=0,i=t.unboundDepsCount,u=0;u<i;u++){0===(a=n[u]).diffValue&&(a.diffValue=1,o!==u&&(n[o]=a),o++),a.dependenciesState>r&&(r=a.dependenciesState)}n.length=o,t.newObserving=null,i=e.length;for(;i--;){0===(a=e[i]).diffValue&&Tt(a,t),a.diffValue=0}for(;o--;){var a;1===(a=n[o]).diffValue&&(a.diffValue=0,Rt(a,t))}r!==J.UP_TO_DATE&&(t.dependenciesState=r,t.onBecomeStale())}(t),lt(r),o}function ut(t){var e=t.observing;t.observing=[];for(var n=e.length;n--;)Tt(e[n],t);t.dependenciesState=J.NOT_TRACKING}function at(t){var e=st();try{return t()}finally{ct(e)}}function st(){var t=Et.trackingDerivation;return Et.trackingDerivation=null,t}function ct(t){Et.trackingDerivation=t}function ft(t){var e=Et.allowStateReads;return Et.allowStateReads=t,e}function lt(t){Et.allowStateReads=t}function pt(t){if(t.dependenciesState!==J.UP_TO_DATE){t.dependenciesState=J.UP_TO_DATE;for(var e=t.observing,n=e.length;n--;)e[n].lowestObserverState=J.UP_TO_DATE}}var ht=0,dt=1,vt=Object.getOwnPropertyDescriptor((function(){}),"name");vt&&vt.configurable;function yt(t,e,n){var r=function(){return gt(t,e,n||this,arguments)};return r.isMobxAction=!0,r}function gt(t,e,n,r){var o=function(t,e,n){var r=0;var o=st();$t();var i=bt(!0),u=ft(!0),a={prevDerivation:o,prevAllowStateChanges:i,prevAllowStateReads:u,notifySpy:!1,startTime:r,actionId:dt++,parentActionId:ht};return ht=a.actionId,a}();try{return e.apply(n,r)}catch(t){throw o.error=t,t}finally{!function(t){ht!==t.actionId&&a("invalid action stack. did you forget to finish an action?");ht=t.parentActionId,void 0!==t.error&&(Et.suppressReactionErrors=!0);mt(t.prevAllowStateChanges),lt(t.prevAllowStateReads),Ct(),ct(t.prevDerivation),t.notifySpy&&!1;Et.suppressReactionErrors=!1}(o)}}function bt(t){var e=Et.allowStateChanges;return Et.allowStateChanges=t,e}function mt(t){Et.allowStateChanges=t}var xt=function(t){function e(e,n,r,o,i){void 0===r&&(r="ObservableValue@"+u()),void 0===o&&(o=!0),void 0===i&&(i=N.default);var a=t.call(this,r)||this;return a.enhancer=n,a.name=r,a.equals=i,a.hasUnreportedChange=!1,a.value=n(e,void 0,r),a}return function(t,e){function n(){this.constructor=t}S(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}(e,t),e.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},e.prototype.set=function(t){this.value;if((t=this.prepareNewValue(t))!==Et.UNCHANGED){0,this.setNewValue(t)}},e.prototype.prepareNewValue=function(t){if(ot(this),fe(this)){var e=pe(this,{object:this,type:"update",newValue:t});if(!e)return Et.UNCHANGED;t=e.newValue}return t=this.enhancer(t,this.value,this.name),this.equals(this.value,t)?Et.UNCHANGED:t},e.prototype.setNewValue=function(t){var e=this.value;this.value=t,this.reportChanged(),he(this)&&ve(this,{type:"update",object:this,newValue:t,oldValue:e})},e.prototype.get=function(){return this.reportObserved(),this.dehanceValue(this.value)},e.prototype.intercept=function(t){return le(this,t)},e.prototype.observe=function(t,e){return e&&t({object:this,type:"update",newValue:this.value,oldValue:void 0}),de(this,t)},e.prototype.toJSON=function(){return this.get()},e.prototype.toString=function(){return this.name+"["+this.value+"]"},e.prototype.valueOf=function(){return m(this.get())},e.prototype[Symbol.toPrimitive]=function(){return this.valueOf()},e}(_),wt=(d("ObservableValue",xt),function(){function t(t){this.dependenciesState=J.NOT_TRACKING,this.observing=[],this.newObserving=null,this.isBeingObserved=!1,this.isPendingUnobservation=!1,this.observers=new Set,this.diffValue=0,this.runId=0,this.lastAccessedBy=0,this.lowestObserverState=J.UP_TO_DATE,this.unboundDepsCount=0,this.__mapid="#"+u(),this.value=new et(null),this.isComputing=!1,this.isRunningSetter=!1,this.isTracing=Q.NONE,s(t.get,"missing option for computed: get"),this.derivation=t.get,this.name=t.name||"ComputedValue@"+u(),t.set&&(this.setter=yt(this.name+"-setter",t.set)),this.equals=t.equals||(t.compareStructural||t.struct?N.structural:N.default),this.scope=t.context,this.requiresReaction=!!t.requiresReaction,this.keepAlive=!!t.keepAlive}return t.prototype.onBecomeStale=function(){!function(t){if(t.lowestObserverState!==J.UP_TO_DATE)return;t.lowestObserverState=J.POSSIBLY_STALE,t.observers.forEach((function(e){e.dependenciesState===J.UP_TO_DATE&&(e.dependenciesState=J.POSSIBLY_STALE,e.isTracing!==Q.NONE&&Dt(e,t),e.onBecomeStale())}))}(this)},t.prototype.onBecomeObserved=function(){this.onBecomeObservedListeners&&this.onBecomeObservedListeners.forEach((function(t){return t()}))},t.prototype.onBecomeUnobserved=function(){this.onBecomeUnobservedListeners&&this.onBecomeUnobservedListeners.forEach((function(t){return t()}))},t.prototype.get=function(){this.isComputing&&a("Cycle detected in computation "+this.name+": "+this.derivation),0!==Et.inBatch||0!==this.observers.size||this.keepAlive?(Mt(this),rt(this)&&this.trackAndCompute()&&function(t){if(t.lowestObserverState===J.STALE)return;t.lowestObserverState=J.STALE,t.observers.forEach((function(e){e.dependenciesState===J.POSSIBLY_STALE?e.dependenciesState=J.STALE:e.dependenciesState===J.UP_TO_DATE&&(t.lowestObserverState=J.UP_TO_DATE)}))}(this)):rt(this)&&(this.warnAboutUntrackedRead(),$t(),this.value=this.computeValue(!1),Ct());var t=this.value;if(nt(t))throw t.cause;return t},t.prototype.peek=function(){var t=this.computeValue(!1);if(nt(t))throw t.cause;return t},t.prototype.set=function(t){if(this.setter){s(!this.isRunningSetter,"The setter of computed value '"+this.name+"' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"),this.isRunningSetter=!0;try{this.setter.call(this.scope,t)}finally{this.isRunningSetter=!1}}else s(!1,!1)},t.prototype.trackAndCompute=function(){var t=this.value,e=this.dependenciesState===J.NOT_TRACKING,n=this.computeValue(!0),r=e||nt(t)||nt(n)||!this.equals(t,n);return r&&(this.value=n),r},t.prototype.computeValue=function(t){var e;if(this.isComputing=!0,Et.computationDepth++,t)e=it(this,this.derivation,this.scope);else if(!0===Et.disableErrorBoundaries)e=this.derivation.call(this.scope);else try{e=this.derivation.call(this.scope)}catch(t){e=new et(t)}return Et.computationDepth--,this.isComputing=!1,e},t.prototype.suspend=function(){this.keepAlive||(ut(this),this.value=void 0)},t.prototype.observe=function(t,e){var n=this,r=!0,o=void 0;return Wt((function(){var i=n.get();if(!r||e){var u=st();t({type:"update",object:n,newValue:i,oldValue:o}),ct(u)}r=!1,o=i}))},t.prototype.warnAboutUntrackedRead=function(){},t.prototype.toJSON=function(){return this.get()},t.prototype.toString=function(){return this.name+"["+this.derivation.toString()+"]"},t.prototype.valueOf=function(){return m(this.get())},t.prototype[Symbol.toPrimitive]=function(){return this.valueOf()},t}()),_t=d("ComputedValue",wt),Ot=function(){this.version=5,this.UNCHANGED={},this.trackingDerivation=null,this.computationDepth=0,this.runId=0,this.mobxGuid=0,this.inBatch=0,this.pendingUnobservations=[],this.pendingReactions=[],this.isRunningReactions=!1,this.allowStateChanges=!0,this.allowStateReads=!0,this.enforceActions=!1,this.spyListeners=[],this.globalReactionErrorHandlers=[],this.computedRequiresReaction=!1,this.reactionRequiresObservable=!1,this.observableRequiresReaction=!1,this.computedConfigurable=!1,this.disableErrorBoundaries=!1,this.suppressReactionErrors=!1},At={};function Nt(){return"undefined"!=typeof window?window:void 0!==r?r:"undefined"!=typeof self?self:At}var St=!0,jt=!1,Et=function(){var t=Nt();return t.__mobxInstanceCount>0&&!t.__mobxGlobals&&(St=!1),t.__mobxGlobals&&t.__mobxGlobals.version!==(new Ot).version&&(St=!1),St?t.__mobxGlobals?(t.__mobxInstanceCount+=1,t.__mobxGlobals.UNCHANGED||(t.__mobxGlobals.UNCHANGED={}),t.__mobxGlobals):(t.__mobxInstanceCount=1,t.__mobxGlobals=new Ot):(setTimeout((function(){jt||a("There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`")}),1),new Ot)}();function Rt(t,e){t.observers.add(e),t.lowestObserverState>e.dependenciesState&&(t.lowestObserverState=e.dependenciesState)}function Tt(t,e){t.observers.delete(e),0===t.observers.size&&Lt(t)}function Lt(t){!1===t.isPendingUnobservation&&(t.isPendingUnobservation=!0,Et.pendingUnobservations.push(t))}function $t(){Et.inBatch++}function Ct(){if(0==--Et.inBatch){Pt();for(var t=Et.pendingUnobservations,e=0;e<t.length;e++){var n=t[e];n.isPendingUnobservation=!1,0===n.observers.size&&(n.isBeingObserved&&(n.isBeingObserved=!1,n.onBecomeUnobserved()),n instanceof wt&&n.suspend())}Et.pendingUnobservations=[]}}function Mt(t){var e=Et.trackingDerivation;return null!==e?(e.runId!==t.lastAccessedBy&&(t.lastAccessedBy=e.runId,e.newObserving[e.unboundDepsCount++]=t,t.isBeingObserved||(t.isBeingObserved=!0,t.onBecomeObserved())),!0):(0===t.observers.size&&Et.inBatch>0&&Lt(t),!1)}function Dt(t,e){if(console.log("[mobx.trace] '"+t.name+"' is invalidated due to a change in: '"+e.name+"'"),t.isTracing===Q.BREAK){var n=[];!function t(e,n,r){if(n.length>=1e3)return void n.push("(and many more)");n.push(""+new Array(r).join("\t")+e.name),e.dependencies&&e.dependencies.forEach((function(e){return t(e,n,r+1)}))}((r=t,te(Ie(r,o))),n,1),new Function("debugger;\n/*\nTracing '"+t.name+"'\n\nYou are entering this break point because derivation '"+t.name+"' is being traced and '"+e.name+"' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n"+(t instanceof wt?t.derivation.toString().replace(/[*]\//g,"/"):"")+"\n\nThe dependencies for this derivation are:\n\n"+n.join("\n")+"\n*/\n ")()}var r,o}var kt=function(){function t(t,e,n,r){void 0===t&&(t="Reaction@"+u()),void 0===r&&(r=!1),this.name=t,this.onInvalidate=e,this.errorHandler=n,this.requiresObservable=r,this.observing=[],this.newObserving=[],this.dependenciesState=J.NOT_TRACKING,this.diffValue=0,this.runId=0,this.unboundDepsCount=0,this.__mapid="#"+u(),this.isDisposed=!1,this._isScheduled=!1,this._isTrackPending=!1,this._isRunning=!1,this.isTracing=Q.NONE}return t.prototype.onBecomeStale=function(){this.schedule()},t.prototype.schedule=function(){this._isScheduled||(this._isScheduled=!0,Et.pendingReactions.push(this),Pt())},t.prototype.isScheduled=function(){return this._isScheduled},t.prototype.runReaction=function(){if(!this.isDisposed){if($t(),this._isScheduled=!1,rt(this)){this._isTrackPending=!0;try{this.onInvalidate(),this._isTrackPending}catch(t){this.reportExceptionInDerivation(t)}}Ct()}},t.prototype.track=function(t){if(!this.isDisposed){$t();0,this._isRunning=!0;var e=it(this,t,void 0);this._isRunning=!1,this._isTrackPending=!1,this.isDisposed&&ut(this),nt(e)&&this.reportExceptionInDerivation(e.cause),Ct()}},t.prototype.reportExceptionInDerivation=function(t){var e=this;if(this.errorHandler)this.errorHandler(t,this);else{if(Et.disableErrorBoundaries)throw t;var n="[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '"+this+"'";Et.suppressReactionErrors?console.warn("[mobx] (error in reaction '"+this.name+"' suppressed, fix error of causing action below)"):console.error(n,t),Et.globalReactionErrorHandlers.forEach((function(n){return n(t,e)}))}},t.prototype.dispose=function(){this.isDisposed||(this.isDisposed=!0,this._isRunning||($t(),ut(this),Ct()))},t.prototype.getDisposer=function(){var t=this.dispose.bind(this);return t[w]=this,t},t.prototype.toString=function(){return"Reaction["+this.name+"]"},t.prototype.trace=function(t){void 0===t&&(t=!1),function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=!1;"boolean"==typeof t[t.length-1]&&(n=t.pop());var r=oe(t);if(!r)return a(!1);r.isTracing===Q.NONE&&console.log("[mobx.trace] '"+r.name+"' tracing enabled");r.isTracing=n?Q.BREAK:Q.LOG}(this,t)},t}();var It=function(t){return t()};function Pt(){Et.inBatch>0||Et.isRunningReactions||It(Ut)}function Ut(){Et.isRunningReactions=!0;for(var t=Et.pendingReactions,e=0;t.length>0;){100==++e&&(console.error("Reaction doesn't converge to a stable state after 100 iterations. Probably there is a cycle in the reactive function: "+t[0]),t.splice(0));for(var n=t.splice(0),r=0,o=n.length;r<o;r++)n[r].runReaction()}Et.isRunningReactions=!1}var Vt=d("Reaction",kt);function Bt(){a(!1)}function zt(t){return function(e,n,r){if(r){if(r.value)return{value:yt(t,r.value),enumerable:!1,configurable:!0,writable:!0};var o=r.initializer;return{enumerable:!1,configurable:!0,writable:!0,initializer:function(){return yt(t,o.call(this))}}}return Zt(t).apply(this,arguments)}}function Zt(t){return function(e,n,r){Object.defineProperty(e,n,{configurable:!0,enumerable:!1,get:function(){},set:function(e){h(this,n,Ft(t,e))}})}}var Ft=function(t,e,n,r){return 1===arguments.length&&"function"==typeof t?yt(t.name||"<unnamed action>",t):2===arguments.length&&"function"==typeof e?yt(t,e):1===arguments.length&&"string"==typeof t?zt(t):!0!==r?zt(e).apply(null,arguments):void h(t,e,yt(t.name||e,n.value,this))};function qt(t,e,n){h(t,e,yt(e,n.bind(t)))}function Wt(t,e){void 0===e&&(e=i);var n,r=e&&e.name||t.name||"Autorun@"+u();if(!e.scheduler&&!e.delay)n=new kt(r,(function(){this.track(s)}),e.onError,e.requiresObservable);else{var o=Kt(e),a=!1;n=new kt(r,(function(){a||(a=!0,o((function(){a=!1,n.isDisposed||n.track(s)})))}),e.onError,e.requiresObservable)}function s(){t(n)}return n.schedule(),n.getDisposer()}Ft.bound=function(t,e,n,r){return!0===r?(qt(t,e,n.value),null):n?{configurable:!0,enumerable:!1,get:function(){return qt(this,e,n.value||n.initializer.call(this)),this[e]},set:Bt}:{enumerable:!1,configurable:!0,set:function(t){qt(this,e,t)},get:function(){}}};var Ht=function(t){return t()};function Kt(t){return t.scheduler?t.scheduler:t.delay?function(e){return setTimeout(e,t.delay)}:Ht}function Gt(t,e,n){return Yt("onBecomeUnobserved",t,e,n)}function Yt(t,e,n,r){var o="function"==typeof r?Ie(e,n):Ie(e),i="function"==typeof r?r:n,u=t+"Listeners";return o[u]?o[u].add(i):o[u]=new Set([i]),"function"!=typeof o[t]?a(!1):function(){var t=o[u];t&&(t.delete(i),0===t.size&&delete o[u])}}function Xt(t,e,n,r){var o=Jt(r=Z(r));return k(t),Le(t,r.name,o.enhancer),e&&Qt(t,e,n,o),t}function Jt(t){return t.defaultDecorator||(!1===t.deep?W:F)}function Qt(t,e,n,r){var o,i;$t();try{var u=x(e);try{for(var a=E(u),s=a.next();!s.done;s=a.next()){var c=s.value,f=Object.getOwnPropertyDescriptor(e,c);0;var l=(n&&c in n?n[c]:f.get?tt:r)(t,c,f,!0);l&&Object.defineProperty(t,c,l)}}catch(t){o={error:t}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(o)throw o.error}}}finally{Ct()}}function te(t){var e,n,r={name:t.name};return t.observing&&t.observing.length>0&&(r.dependencies=(e=t.observing,n=[],e.forEach((function(t){-1===n.indexOf(t)&&n.push(t)})),n).map(te)),r}function ee(){this.message="FLOW_CANCELLED"}function ne(t,e){return null!=t&&(void 0!==e?!!ke(t)&&t[w].values.has(e):ke(t)||!!t[w]||O(t)||Vt(t)||_t(t))}function re(t){return 1!==arguments.length&&a(!1),ne(t)}ee.prototype=Object.create(Error.prototype);function oe(t){switch(t.length){case 0:return Et.trackingDerivation;case 1:return Ie(t[0]);case 2:return Ie(t[0],t[1])}}function ie(t,e){void 0===e&&(e=void 0),$t();try{return t.apply(e)}finally{Ct()}}function ue(t){return t[w]}function ae(t){return"string"==typeof t||"number"==typeof t||"symbol"==typeof t}var se={has:function(t,e){if(e===w||"constructor"===e||e===L)return!0;var n=ue(t);return ae(e)?n.has(e):e in t},get:function(t,e){if(e===w||"constructor"===e||e===L)return t[e];var n=ue(t),r=n.values.get(e);if(r instanceof _){var o=r.get();return void 0===o&&n.has(e),o}return ae(e)&&n.has(e),t[e]},set:function(t,e,n){return!!ae(e)&&(function t(e,n,r){if(2!==arguments.length||Re(e))if(ke(e)){var o=e[w],i=o.values.get(n);i?o.write(n,r):o.addObservableProp(n,r,o.defaultEnhancer)}else if(Se(e))e.set(n,r);else if(Re(e))e.add(n);else{if(!_e(e))return a(!1);"number"!=typeof n&&(n=parseInt(n,10)),s(n>=0,"Not a valid index: '"+n+"'"),$t(),n>=e.length&&(e.length=n+1),e[n]=r,Ct()}else{$t();var u=n;try{for(var c in u)t(e,c,u[c])}finally{Ct()}}}(t,e,n),!0)},deleteProperty:function(t,e){return!!ae(e)&&(ue(t).remove(e),!0)},ownKeys:function(t){return ue(t).keysAtom.reportObserved(),Reflect.ownKeys(t)},preventExtensions:function(t){return a("Dynamic observable objects cannot be frozen"),!1}};function ce(t){var e=new Proxy(t,se);return t[w].proxy=e,e}function fe(t){return void 0!==t.interceptors&&t.interceptors.length>0}function le(t,e){var n=t.interceptors||(t.interceptors=[]);return n.push(e),c((function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)}))}function pe(t,e){var n=st();try{for(var r=T(t.interceptors||[]),o=0,i=r.length;o<i&&(s(!(e=r[o](e))||e.type,"Intercept handlers should return nothing or a change object"),e);o++);return e}finally{ct(n)}}function he(t){return void 0!==t.changeListeners&&t.changeListeners.length>0}function de(t,e){var n=t.changeListeners||(t.changeListeners=[]);return n.push(e),c((function(){var t=n.indexOf(e);-1!==t&&n.splice(t,1)}))}function ve(t,e){var n=st(),r=t.changeListeners;if(r){for(var o=0,i=(r=r.slice()).length;o<i;o++)r[o](e);ct(n)}}var ye={get:function(t,e){return e===w?t[w]:"length"===e?t[w].getArrayLength():"number"==typeof e?me.get.call(t,e):"string"!=typeof e||isNaN(e)?me.hasOwnProperty(e)?me[e]:t[e]:me.get.call(t,parseInt(e))},set:function(t,e,n){return"length"===e&&t[w].setArrayLength(n),"number"==typeof e&&me.set.call(t,e,n),"symbol"==typeof e||isNaN(e)?t[e]=n:me.set.call(t,parseInt(e),n),!0},preventExtensions:function(t){return a("Observable arrays cannot be frozen"),!1}};function ge(t,e,n,r){void 0===n&&(n="ObservableArray@"+u()),void 0===r&&(r=!1);var o,i,a,s=new be(n,e,r);o=s.values,i=w,a=s,Object.defineProperty(o,i,{enumerable:!1,writable:!1,configurable:!0,value:a});var c=new Proxy(s.values,ye);if(s.proxy=c,t&&t.length){var f=bt(!0);s.spliceWithArray(0,0,t),mt(f)}return c}var be=function(){function t(t,e,n){this.owned=n,this.values=[],this.proxy=void 0,this.lastKnownLength=0,this.atom=new _(t||"ObservableArray@"+u()),this.enhancer=function(n,r){return e(n,r,t+"[..]")}}return t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.dehanceValues=function(t){return void 0!==this.dehancer&&t.length>0?t.map(this.dehancer):t},t.prototype.intercept=function(t){return le(this,t)},t.prototype.observe=function(t,e){return void 0===e&&(e=!1),e&&t({object:this.proxy,type:"splice",index:0,added:this.values.slice(),addedCount:this.values.length,removed:[],removedCount:0}),de(this,t)},t.prototype.getArrayLength=function(){return this.atom.reportObserved(),this.values.length},t.prototype.setArrayLength=function(t){if("number"!=typeof t||t<0)throw new Error("[mobx.array] Out of range: "+t);var e=this.values.length;if(t!==e)if(t>e){for(var n=new Array(t-e),r=0;r<t-e;r++)n[r]=void 0;this.spliceWithArray(e,0,n)}else this.spliceWithArray(t,e-t)},t.prototype.updateArrayLength=function(t,e){if(t!==this.lastKnownLength)throw new Error("[mobx] Modification exception: the internal structure of an observable array was changed.");this.lastKnownLength+=e},t.prototype.spliceWithArray=function(t,e,n){var r=this;ot(this.atom);var i=this.values.length;if(void 0===t?t=0:t>i?t=i:t<0&&(t=Math.max(0,i+t)),e=1===arguments.length?i-t:null==e?0:Math.max(0,Math.min(e,i-t)),void 0===n&&(n=o),fe(this)){var u=pe(this,{object:this.proxy,type:"splice",index:t,removedCount:e,added:n});if(!u)return o;e=u.removedCount,n=u.added}n=0===n.length?n:n.map((function(t){return r.enhancer(t,void 0)}));var a=this.spliceItemsIntoValues(t,e,n);return 0===e&&0===n.length||this.notifyArraySplice(t,n,a),this.dehanceValues(a)},t.prototype.spliceItemsIntoValues=function(t,e,n){var r;if(n.length<1e4)return(r=this.values).splice.apply(r,T([t,e],n));var o=this.values.slice(t,t+e);return this.values=this.values.slice(0,t).concat(n,this.values.slice(t+e)),o},t.prototype.notifyArrayChildUpdate=function(t,e,n){var r=!this.owned&&!1,o=he(this),i=o||r?{object:this.proxy,type:"update",index:t,newValue:e,oldValue:n}:null;this.atom.reportChanged(),o&&ve(this,i)},t.prototype.notifyArraySplice=function(t,e,n){var r=!this.owned&&!1,o=he(this),i=o||r?{object:this.proxy,type:"splice",index:t,removed:n,added:e,removedCount:n.length,addedCount:e.length}:null;this.atom.reportChanged(),o&&ve(this,i)},t}(),me={intercept:function(t){return this[w].intercept(t)},observe:function(t,e){return void 0===e&&(e=!1),this[w].observe(t,e)},clear:function(){return this.splice(0)},replace:function(t){var e=this[w];return e.spliceWithArray(0,e.values.length,t)},toJS:function(){return this.slice()},toJSON:function(){return this.toJS()},splice:function(t,e){for(var n=[],r=2;r<arguments.length;r++)n[r-2]=arguments[r];var o=this[w];switch(arguments.length){case 0:return[];case 1:return o.spliceWithArray(t);case 2:return o.spliceWithArray(t,e)}return o.spliceWithArray(t,e,n)},spliceWithArray:function(t,e,n){return this[w].spliceWithArray(t,e,n)},push:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this[w];return n.spliceWithArray(n.values.length,0,t),n.values.length},pop:function(){return this.splice(Math.max(this[w].values.length-1,0),1)[0]},shift:function(){return this.splice(0,1)[0]},unshift:function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];var n=this[w];return n.spliceWithArray(0,0,t),n.values.length},reverse:function(){var t=this.slice();return t.reverse.apply(t,arguments)},sort:function(t){var e=this.slice();return e.sort.apply(e,arguments)},remove:function(t){var e=this[w],n=e.dehanceValues(e.values).indexOf(t);return n>-1&&(this.splice(n,1),!0)},get:function(t){var e=this[w];if(e){if(t<e.values.length)return e.atom.reportObserved(),e.dehanceValue(e.values[t]);console.warn("[mobx.array] Attempt to read an array index ("+t+") that is out of bounds ("+e.values.length+"). Please check length first. Out of bound indices will not be tracked by MobX")}},set:function(t,e){var n=this[w],r=n.values;if(t<r.length){ot(n.atom);var o=r[t];if(fe(n)){var i=pe(n,{type:"update",object:n.proxy,index:t,newValue:e});if(!i)return;e=i.newValue}(e=n.enhancer(e,o))!==o&&(r[t]=e,n.notifyArrayChildUpdate(t,e,o))}else{if(t!==r.length)throw new Error("[mobx.array] Index out of bounds, "+t+" is larger than "+r.length);n.spliceWithArray(t,0,[e])}}};["concat","flat","includes","indexOf","join","lastIndexOf","slice","toString","toLocaleString"].forEach((function(t){"function"==typeof Array.prototype[t]&&(me[t]=function(){var e=this[w];e.atom.reportObserved();var n=e.dehanceValues(e.values);return n[t].apply(n,arguments)})})),["every","filter","find","findIndex","flatMap","forEach","map","some"].forEach((function(t){"function"==typeof Array.prototype[t]&&(me[t]=function(e,n){var r=this,o=this[w];return o.atom.reportObserved(),o.dehanceValues(o.values)[t]((function(t,o){return e.call(n,t,o,r)}),n)})})),["reduce","reduceRight"].forEach((function(t){me[t]=function(){var e=this,n=this[w];n.atom.reportObserved();var r=arguments[0];return arguments[0]=function(t,o,i){return o=n.dehanceValue(o),r(t,o,i,e)},n.values[t].apply(n.values,arguments)}}));var xe,we=d("ObservableArrayAdministration",be);function _e(t){return l(t)&&we(t[w])}var Oe,Ae={},Ne=function(){function t(t,e,n){if(void 0===e&&(e=U),void 0===n&&(n="ObservableMap@"+u()),this.enhancer=e,this.name=n,this[xe]=Ae,this._keysAtom=A(this.name+".keys()"),this[Symbol.toStringTag]="Map","function"!=typeof Map)throw new Error("mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js");this._data=new Map,this._hasMap=new Map,this.merge(t)}return t.prototype._has=function(t){return this._data.has(t)},t.prototype.has=function(t){var e=this;if(!Et.trackingDerivation)return this._has(t);var n=this._hasMap.get(t);if(!n){var r=n=new xt(this._has(t),V,this.name+"."+b(t)+"?",!1);this._hasMap.set(t,r),Gt(r,(function(){return e._hasMap.delete(t)}))}return n.get()},t.prototype.set=function(t,e){var n=this._has(t);if(fe(this)){var r=pe(this,{type:n?"update":"add",object:this,newValue:e,name:t});if(!r)return this;e=r.newValue}return n?this._updateValue(t,e):this._addValue(t,e),this},t.prototype.delete=function(t){var e=this;if((ot(this._keysAtom),fe(this))&&!(r=pe(this,{type:"delete",object:this,name:t})))return!1;if(this._has(t)){var n=he(this),r=n?{type:"delete",object:this,oldValue:this._data.get(t).value,name:t}:null;return ie((function(){e._keysAtom.reportChanged(),e._updateHasMapEntry(t,!1),e._data.get(t).setNewValue(void 0),e._data.delete(t)})),n&&ve(this,r),!0}return!1},t.prototype._updateHasMapEntry=function(t,e){var n=this._hasMap.get(t);n&&n.setNewValue(e)},t.prototype._updateValue=function(t,e){var n=this._data.get(t);if((e=n.prepareNewValue(e))!==Et.UNCHANGED){var r=he(this),o=r?{type:"update",object:this,oldValue:n.value,name:t,newValue:e}:null;0,n.setNewValue(e),r&&ve(this,o)}},t.prototype._addValue=function(t,e){var n=this;ot(this._keysAtom),ie((function(){var r=new xt(e,n.enhancer,n.name+"."+b(t),!1);n._data.set(t,r),e=r.value,n._updateHasMapEntry(t,!0),n._keysAtom.reportChanged()}));var r=he(this),o=r?{type:"add",object:this,name:t,newValue:e}:null;r&&ve(this,o)},t.prototype.get=function(t){return this.has(t)?this.dehanceValue(this._data.get(t).get()):this.dehanceValue(void 0)},t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.keys=function(){return this._keysAtom.reportObserved(),this._data.keys()},t.prototype.values=function(){var t=this,e=this.keys();return Ze({next:function(){var n=e.next(),r=n.done,o=n.value;return{done:r,value:r?void 0:t.get(o)}}})},t.prototype.entries=function(){var t=this,e=this.keys();return Ze({next:function(){var n=e.next(),r=n.done,o=n.value;return{done:r,value:r?void 0:[o,t.get(o)]}}})},t.prototype[(xe=w,Symbol.iterator)]=function(){return this.entries()},t.prototype.forEach=function(t,e){var n,r;try{for(var o=E(this),i=o.next();!i.done;i=o.next()){var u=R(i.value,2),a=u[0],s=u[1];t.call(e,s,a,this)}}catch(t){n={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}},t.prototype.merge=function(t){var e=this;return Se(t)&&(t=t.toJS()),ie((function(){var n=bt(!0);try{p(t)?g(t).forEach((function(n){return e.set(n,t[n])})):Array.isArray(t)?t.forEach((function(t){var n=R(t,2),r=n[0],o=n[1];return e.set(r,o)})):v(t)?(t.constructor!==Map&&a("Cannot initialize from classes that inherit from Map: "+t.constructor.name),t.forEach((function(t,n){return e.set(n,t)}))):null!=t&&a("Cannot initialize map from "+t)}finally{mt(n)}})),this},t.prototype.clear=function(){var t=this;ie((function(){at((function(){var e,n;try{for(var r=E(t.keys()),o=r.next();!o.done;o=r.next()){var i=o.value;t.delete(i)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}}))}))},t.prototype.replace=function(t){var e=this;return ie((function(){var n,r,o,i,u=function(t){if(v(t)||Se(t))return t;if(Array.isArray(t))return new Map(t);if(p(t)){var e=new Map;for(var n in t)e.set(n,t[n]);return e}return a("Cannot convert to map from '"+t+"'")}(t),s=new Map,c=!1;try{for(var f=E(e._data.keys()),l=f.next();!l.done;l=f.next()){var h=l.value;if(!u.has(h))if(e.delete(h))c=!0;else{var d=e._data.get(h);s.set(h,d)}}}catch(t){n={error:t}}finally{try{l&&!l.done&&(r=f.return)&&r.call(f)}finally{if(n)throw n.error}}try{for(var y=E(u.entries()),g=y.next();!g.done;g=y.next()){var b=R(g.value,2),m=(h=b[0],d=b[1],e._data.has(h));if(e.set(h,d),e._data.has(h)){var x=e._data.get(h);s.set(h,x),m||(c=!0)}}}catch(t){o={error:t}}finally{try{g&&!g.done&&(i=y.return)&&i.call(y)}finally{if(o)throw o.error}}if(!c)if(e._data.size!==s.size)e._keysAtom.reportChanged();else for(var w=e._data.keys(),_=s.keys(),O=w.next(),A=_.next();!O.done;){if(O.value!==A.value){e._keysAtom.reportChanged();break}O=w.next(),A=_.next()}e._data=s})),this},Object.defineProperty(t.prototype,"size",{get:function(){return this._keysAtom.reportObserved(),this._data.size},enumerable:!0,configurable:!0}),t.prototype.toPOJO=function(){var t,e,n={};try{for(var r=E(this),o=r.next();!o.done;o=r.next()){var i=R(o.value,2),u=i[0],a=i[1];n["symbol"==typeof u?u:b(u)]=a}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return n},t.prototype.toJS=function(){return new Map(this)},t.prototype.toJSON=function(){return this.toPOJO()},t.prototype.toString=function(){var t=this;return this.name+"[{ "+Array.from(this.keys()).map((function(e){return b(e)+": "+t.get(e)})).join(", ")+" }]"},t.prototype.observe=function(t,e){return de(this,t)},t.prototype.intercept=function(t){return le(this,t)},t}(),Se=d("ObservableMap",Ne),je={},Ee=function(){function t(t,e,n){if(void 0===e&&(e=U),void 0===n&&(n="ObservableSet@"+u()),this.name=n,this[Oe]=je,this._data=new Set,this._atom=A(this.name),this[Symbol.toStringTag]="Set","function"!=typeof Set)throw new Error("mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js");this.enhancer=function(t,r){return e(t,r,n)},t&&this.replace(t)}return t.prototype.dehanceValue=function(t){return void 0!==this.dehancer?this.dehancer(t):t},t.prototype.clear=function(){var t=this;ie((function(){at((function(){var e,n;try{for(var r=E(t._data.values()),o=r.next();!o.done;o=r.next()){var i=o.value;t.delete(i)}}catch(t){e={error:t}}finally{try{o&&!o.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}}))}))},t.prototype.forEach=function(t,e){var n,r;try{for(var o=E(this),i=o.next();!i.done;i=o.next()){var u=i.value;t.call(e,u,u,this)}}catch(t){n={error:t}}finally{try{i&&!i.done&&(r=o.return)&&r.call(o)}finally{if(n)throw n.error}}},Object.defineProperty(t.prototype,"size",{get:function(){return this._atom.reportObserved(),this._data.size},enumerable:!0,configurable:!0}),t.prototype.add=function(t){var e=this;if((ot(this._atom),fe(this))&&!(r=pe(this,{type:"add",object:this,newValue:t})))return this;if(!this.has(t)){ie((function(){e._data.add(e.enhancer(t,void 0)),e._atom.reportChanged()}));var n=he(this),r=n?{type:"add",object:this,newValue:t}:null;0,n&&ve(this,r)}return this},t.prototype.delete=function(t){var e=this;if(fe(this)&&!(r=pe(this,{type:"delete",object:this,oldValue:t})))return!1;if(this.has(t)){var n=he(this),r=n?{type:"delete",object:this,oldValue:t}:null;return ie((function(){e._atom.reportChanged(),e._data.delete(t)})),n&&ve(this,r),!0}return!1},t.prototype.has=function(t){return this._atom.reportObserved(),this._data.has(this.dehanceValue(t))},t.prototype.entries=function(){var t=0,e=Array.from(this.keys()),n=Array.from(this.values());return Ze({next:function(){var r=t;return t+=1,r<n.length?{value:[e[r],n[r]],done:!1}:{done:!0}}})},t.prototype.keys=function(){return this.values()},t.prototype.values=function(){this._atom.reportObserved();var t=this,e=0,n=Array.from(this._data.values());return Ze({next:function(){return e<n.length?{value:t.dehanceValue(n[e++]),done:!1}:{done:!0}}})},t.prototype.replace=function(t){var e=this;return Re(t)&&(t=t.toJS()),ie((function(){var n=bt(!0);try{Array.isArray(t)||y(t)?(e.clear(),t.forEach((function(t){return e.add(t)}))):null!=t&&a("Cannot initialize set from "+t)}finally{mt(n)}})),this},t.prototype.observe=function(t,e){return de(this,t)},t.prototype.intercept=function(t){return le(this,t)},t.prototype.toJS=function(){return new Set(this)},t.prototype.toString=function(){return this.name+"[ "+Array.from(this).join(", ")+" ]"},t.prototype[(Oe=w,Symbol.iterator)]=function(){return this.values()},t}(),Re=d("ObservableSet",Ee),Te=function(){function t(t,e,n,r){void 0===e&&(e=new Map),this.target=t,this.values=e,this.name=n,this.defaultEnhancer=r,this.keysAtom=new _(n+".keys")}return t.prototype.read=function(t){return this.values.get(t).get()},t.prototype.write=function(t,e){var n=this.target,r=this.values.get(t);if(r instanceof wt)r.set(e);else{if(fe(this)){if(!(i=pe(this,{type:"update",object:this.proxy||n,name:t,newValue:e})))return;e=i.newValue}if((e=r.prepareNewValue(e))!==Et.UNCHANGED){var o=he(this),i=o?{type:"update",object:this.proxy||n,oldValue:r.value,name:t,newValue:e}:null;0,r.setNewValue(e),o&&ve(this,i)}}},t.prototype.has=function(t){var e=this.pendingKeys||(this.pendingKeys=new Map),n=e.get(t);if(n)return n.get();var r=!!this.values.get(t);return n=new xt(r,V,this.name+"."+b(t)+"?",!1),e.set(t,n),n.get()},t.prototype.addObservableProp=function(t,e,n){void 0===n&&(n=this.defaultEnhancer);var r=this.target;if(fe(this)){var o=pe(this,{object:this.proxy||r,name:t,type:"add",newValue:e});if(!o)return;e=o.newValue}var i=new xt(e,n,this.name+"."+b(t),!1);this.values.set(t,i),e=i.value,Object.defineProperty(r,t,function(t){return $e[t]||($e[t]={configurable:!0,enumerable:!0,get:function(){return this[w].read(t)},set:function(e){this[w].write(t,e)}})}(t)),this.notifyPropertyAddition(t,e)},t.prototype.addComputedProp=function(t,e,n){var r,o,i,u=this.target;n.name=n.name||this.name+"."+b(e),this.values.set(e,new wt(n)),(t===u||(r=t,o=e,!(i=Object.getOwnPropertyDescriptor(r,o))||!1!==i.configurable&&!1!==i.writable))&&Object.defineProperty(t,e,function(t){return Ce[t]||(Ce[t]={configurable:Et.computedConfigurable,enumerable:!1,get:function(){return Me(this).read(t)},set:function(e){Me(this).write(t,e)}})}(e))},t.prototype.remove=function(t){if(this.values.has(t)){var e=this.target;if(fe(this))if(!(u=pe(this,{object:this.proxy||e,name:t,type:"remove"})))return;try{$t();var n=he(this),r=this.values.get(t),o=r&&r.get();if(r&&r.set(void 0),this.keysAtom.reportChanged(),this.values.delete(t),this.pendingKeys){var i=this.pendingKeys.get(t);i&&i.set(!1)}delete this.target[t];var u=n?{type:"remove",object:this.proxy||e,oldValue:o,name:t}:null;0,n&&ve(this,u)}finally{Ct()}}},t.prototype.illegalAccess=function(t,e){console.warn("Property '"+e+"' of '"+t+"' was accessed through the prototype chain. Use 'decorate' instead to declare the prop or access it statically through it's owner")},t.prototype.observe=function(t,e){return de(this,t)},t.prototype.intercept=function(t){return le(this,t)},t.prototype.notifyPropertyAddition=function(t,e){var n=he(this),r=n?{type:"add",object:this.proxy||this.target,name:t,newValue:e}:null;if(n&&ve(this,r),this.pendingKeys){var o=this.pendingKeys.get(t);o&&o.set(!0)}this.keysAtom.reportChanged()},t.prototype.getKeys=function(){var t,e;this.keysAtom.reportObserved();var n=[];try{for(var r=E(this.values),o=r.next();!o.done;o=r.next()){var i=R(o.value,2),u=i[0];i[1]instanceof xt&&n.push(u)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(e=r.return)&&e.call(r)}finally{if(t)throw t.error}}return n},t}();function Le(t,e,n){if(void 0===e&&(e=""),void 0===n&&(n=U),Object.prototype.hasOwnProperty.call(t,w))return t[w];p(t)||(e=(t.constructor.name||"ObservableObject")+"@"+u()),e||(e="ObservableObject@"+u());var r=new Te(t,new Map,b(e),n);return h(t,w,r),r}var $e=Object.create(null),Ce=Object.create(null);function Me(t){var e=t[w];return e||(k(t),t[w])}var De=d("ObservableObjectAdministration",Te);function ke(t){return!!l(t)&&(k(t),De(t[w]))}function Ie(t,e){if("object"==typeof t&&null!==t){if(_e(t))return void 0!==e&&a(!1),t[w].atom;if(Re(t))return t[w];if(Se(t)){var n=t;return void 0===e?n._keysAtom:((r=n._data.get(e)||n._hasMap.get(e))||a(!1),r)}var r;if(k(t),e&&!t[w]&&t[e],ke(t))return e?((r=t[w].values.get(e))||a(!1),r):a(!1);if(O(t)||_t(t)||Vt(t))return t}else if("function"==typeof t&&Vt(t[w]))return t[w];return a(!1)}function Pe(t,e){return t||a("Expecting some object"),void 0!==e?Pe(Ie(t,e)):O(t)||_t(t)||Vt(t)||Se(t)||Re(t)?t:(k(t),t[w]?t[w]:void a(!1))}var Ue=Object.prototype.toString;function Ve(t,e,n){return void 0===n&&(n=-1),function t(e,n,r,o,i){if(e===n)return 0!==e||1/e==1/n;if(null==e||null==n)return!1;if(e!=e)return n!=n;var u=typeof e;if("function"!==u&&"object"!==u&&"object"!=typeof n)return!1;var a=Ue.call(e);if(a!==Ue.call(n))return!1;switch(a){case"[object RegExp]":case"[object String]":return""+e==""+n;case"[object Number]":return+e!=+e?+n!=+n:0==+e?1/+e==1/n:+e==+n;case"[object Date]":case"[object Boolean]":return+e==+n;case"[object Symbol]":return"undefined"!=typeof Symbol&&Symbol.valueOf.call(e)===Symbol.valueOf.call(n);case"[object Map]":case"[object Set]":r>=0&&r++}e=Be(e),n=Be(n);var s="[object Array]"===a;if(!s){if("object"!=typeof e||"object"!=typeof n)return!1;var c=e.constructor,f=n.constructor;if(c!==f&&!("function"==typeof c&&c instanceof c&&"function"==typeof f&&f instanceof f)&&"constructor"in e&&"constructor"in n)return!1}if(0===r)return!1;r<0&&(r=-1);i=i||[];var l=(o=o||[]).length;for(;l--;)if(o[l]===e)return i[l]===n;if(o.push(e),i.push(n),s){if((l=e.length)!==n.length)return!1;for(;l--;)if(!t(e[l],n[l],r-1,o,i))return!1}else{var p=Object.keys(e),h=void 0;if(l=p.length,Object.keys(n).length!==l)return!1;for(;l--;)if(h=p[l],!ze(n,h)||!t(e[h],n[h],r-1,o,i))return!1}return o.pop(),i.pop(),!0}(t,e,n)}function Be(t){return _e(t)?t.slice():v(t)||Se(t)||y(t)||Re(t)?Array.from(t.entries()):t}function ze(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Ze(t){return t[Symbol.iterator]=Fe,t}function Fe(){return this}if("undefined"==typeof Proxy||"undefined"==typeof Symbol)throw new Error("[mobx] MobX 5+ requires Proxy and Symbol objects. If your environment doesn't support Symbol or Proxy objects, please downgrade to MobX 4. For React Native Android, consider upgrading JSCore.");"object"==typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__&&__MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({spy:function(t){return console.warn("[mobx.spy] Is a no-op in production builds"),function(){}},extras:{getDebugName:function(t,e){return(void 0!==e?Ie(t,e):ke(t)||Se(t)||Re(t)?Pe(t):Ie(t)).name}},$mobx:w})}).call(this,n(17),n(18))},function(t,e,n){var r=n(0),o=n(124);t.exports=r((function(t,e){return o(t,e,[],[])}))},function(t,e,n){var r=n(13);t.exports=function(){var t=Object.prototype.toString;return"[object Arguments]"===t.call(arguments)?function(e){return"[object Arguments]"===t.call(e)}:function(t){return r("callee",t)}}()},function(t,e){t.exports=function(t,e){var n;e=e||[];var r=(t=t||[]).length,o=e.length,i=[];for(n=0;n<r;)i[i.length]=t[n],n+=1;for(n=0;n<o;)i[i.length]=e[n],n+=1;return i}},function(t,e){t.exports=function(t){return"[object String]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return e[t]}))},function(t,e,n){var r=n(1);t.exports=r((function(t){return function(){return t}}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return null!=e&&e.constructor===t||e instanceof t}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return e>t?e:t}))},function(t,e,n){"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},function(t,e,n){"use strict";var r=n(5),o=n(175),i=n(177),u=n(178),a=n(179),s=n(67),c="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(180);t.exports=function(t){return new Promise((function(e,f){var l=t.data,p=t.headers;r.isFormData(l)&&delete p["Content-Type"];var h=new XMLHttpRequest,d="onreadystatechange",v=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in h||a(t.url)||(h=new window.XDomainRequest,d="onload",v=!0,h.onprogress=function(){},h.ontimeout=function(){}),t.auth){var y=t.auth.username||"",g=t.auth.password||"";p.Authorization="Basic "+c(y+":"+g)}if(h.open(t.method.toUpperCase(),i(t.url,t.params,t.paramsSerializer),!0),h.timeout=t.timeout,h[d]=function(){if(h&&(4===h.readyState||v)&&(0!==h.status||h.responseURL&&0===h.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in h?u(h.getAllResponseHeaders()):null,r={data:t.responseType&&"text"!==t.responseType?h.response:h.responseText,status:1223===h.status?204:h.status,statusText:1223===h.status?"No Content":h.statusText,headers:n,config:t,request:h};o(e,f,r),h=null}},h.onerror=function(){f(s("Network Error",t,null,h)),h=null},h.ontimeout=function(){f(s("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED",h)),h=null},r.isStandardBrowserEnv()){var b=n(181),m=(t.withCredentials||a(t.url))&&t.xsrfCookieName?b.read(t.xsrfCookieName):void 0;m&&(p[t.xsrfHeaderName]=m)}if("setRequestHeader"in h&&r.forEach(p,(function(t,e){void 0===l&&"content-type"===e.toLowerCase()?delete p[e]:h.setRequestHeader(e,t)})),t.withCredentials&&(h.withCredentials=!0),t.responseType)try{h.responseType=t.responseType}catch(e){if("json"!==t.responseType)throw e}"function"==typeof t.onDownloadProgress&&h.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&h.upload&&h.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){h&&(h.abort(),f(t),h=null)})),void 0===l&&(l=null),h.send(l)}))}},function(t,e,n){"use strict";var r=n(176);t.exports=function(t,e,n,o,i){var u=new Error(t);return r(u,e,n,o,i)}},function(t,e,n){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,e,n){"use strict";function r(t){this.message=t}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,t.exports=r},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n<r;)o[n]=e(t[n],n,t);return o}},function(t,e,n){var r=n(190),o=n(249),i=n(31),u=n(2),a=n(258);t.exports=function(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?u(t)?o(t[0],t[1]):r(t):a(t)}},function(t,e,n){var r=n(23),o=n(197),i=n(198),u=n(199),a=n(200),s=n(201);function c(t){var e=this.__data__=new r(t);this.size=e.size}c.prototype.clear=o,c.prototype.delete=i,c.prototype.get=u,c.prototype.has=a,c.prototype.set=s,t.exports=c},function(t,e,n){var r=n(11),o=n(3);t.exports=function(t){if(!o(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(18))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(220),o=n(8);t.exports=function t(e,n,i,u,a){return e===n||(null==e||null==n||!o(e)&&!o(n)?e!=e&&n!=n:r(e,n,i,u,t,a))}},function(t,e,n){var r=n(221),o=n(224),i=n(225);t.exports=function(t,e,n,u,a,s){var c=1&n,f=t.length,l=e.length;if(f!=l&&!(c&&l>f))return!1;var p=s.get(t),h=s.get(e);if(p&&h)return p==e&&h==t;var d=-1,v=!0,y=2&n?new r:void 0;for(s.set(t,e),s.set(e,t);++d<f;){var g=t[d],b=e[d];if(u)var m=c?u(b,g,d,e,t,s):u(g,b,d,t,e,s);if(void 0!==m){if(m)continue;v=!1;break}if(y){if(!o(e,(function(t,e){if(!i(y,e)&&(g===t||a(g,t,n,u,s)))return y.push(e)}))){v=!1;break}}else if(g!==b&&!a(g,b,n,u,s)){v=!1;break}}return s.delete(t),s.delete(e),v}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=0,i=[];++n<r;){var u=t[n];e(u,n,t)&&(i[o++]=u)}return i}},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){var r=n(81),o=n(243),i=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return o(t);var e=[];for(var n in Object(t))i.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},function(t,e,n){var r=n(245),o=n(40),i=n(246),u=n(247),a=n(83),s=n(11),c=n(75),f=c(r),l=c(o),p=c(i),h=c(u),d=c(a),v=s;(r&&"[object DataView]"!=v(new r(new ArrayBuffer(1)))||o&&"[object Map]"!=v(new o)||i&&"[object Promise]"!=v(i.resolve())||u&&"[object Set]"!=v(new u)||a&&"[object WeakMap]"!=v(new a))&&(v=function(t){var e=s(t),n="[object Object]"==e?t.constructor:void 0,r=n?c(n):"";if(r)switch(r){case f:return"[object DataView]";case l:return"[object Map]";case p:return"[object Promise]";case h:return"[object Set]";case d:return"[object WeakMap]"}return e}),t.exports=v},function(t,e,n){var r=n(7)(n(4),"WeakMap");t.exports=r},function(t,e,n){var r=n(3);t.exports=function(t){return t==t&&!r(t)}},function(t,e){t.exports=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}}},function(t,e,n){var r=n(87),o=n(30);t.exports=function(t,e){for(var n=0,i=(e=r(e,t)).length;null!=t&&n<i;)t=t[o(e[n++])];return n&&n==i?t:void 0}},function(t,e,n){var r=n(2),o=n(47),i=n(251),u=n(88);t.exports=function(t,e){return r(t)?t:o(t,e)?[t]:i(u(t))}},function(t,e,n){var r=n(254);t.exports=function(t){return null==t?"":r(t)}},function(t,e,n){var r=n(262),o=n(265)(r);t.exports=o},function(t,e,n){var r=n(267),o=n(268),i=n(269);t.exports=function(t,e,n){return e==e?i(t,e,n):r(t,o,n)}},function(t,e,n){var r=n(92);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var r=n(270);t.exports=function(t){return t?(t=r(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},function(t,e,n){var r=n(94),o=n(273),i=n(274),u=n(96),a=n(291),s=n(100),c=n(292),f=n(103),l=n(105),p=n(91),h=Math.max;t.exports=function(t,e,n,d,v,y,g,b){var m=2&e;if(!m&&"function"!=typeof t)throw new TypeError("Expected a function");var x=d?d.length:0;if(x||(e&=-97,d=v=void 0),g=void 0===g?g:h(p(g),0),b=void 0===b?b:p(b),x-=v?v.length:0,64&e){var w=d,_=v;d=v=void 0}var O=m?void 0:s(t),A=[t,e,n,d,v,w,_,y,g,b];if(O&&c(A,O),t=A[0],e=A[1],n=A[2],d=A[3],v=A[4],!(b=A[9]=void 0===A[9]?m?0:t.length:h(A[9]-x,0))&&24&e&&(e&=-25),e&&1!=e)N=8==e||16==e?i(t,e,b):32!=e&&33!=e||v.length?u.apply(void 0,A):a(t,e,n,d);else var N=o(t,e,n);return l((O?r:f)(N,A),t,e)}},function(t,e,n){var r=n(31),o=n(95),i=o?function(t,e){return o.set(t,e),t}:r;t.exports=i},function(t,e,n){var r=n(83),o=r&&new r;t.exports=o},function(t,e,n){var r=n(97),o=n(98),i=n(275),u=n(32),a=n(99),s=n(52),c=n(290),f=n(33),l=n(4);t.exports=function t(e,n,p,h,d,v,y,g,b,m){var x=128&n,w=1&n,_=2&n,O=24&n,A=512&n,N=_?void 0:u(e);return function S(){for(var j=arguments.length,E=Array(j),R=j;R--;)E[R]=arguments[R];if(O)var T=s(S),L=i(E,T);if(h&&(E=r(E,h,d,O)),v&&(E=o(E,v,y,O)),j-=L,O&&j<m){var $=f(E,T);return a(e,n,t,S.placeholder,p,E,$,g,b,m-j)}var C=w?p:this,M=_?C[e]:e;return j=E.length,g?E=c(E,g):A&&j>1&&E.reverse(),x&&b<j&&(E.length=b),this&&this!==l&&this instanceof S&&(M=N||u(M)),M.apply(C,E)}}},function(t,e){var n=Math.max;t.exports=function(t,e,r,o){for(var i=-1,u=t.length,a=r.length,s=-1,c=e.length,f=n(u-a,0),l=Array(c+f),p=!o;++s<c;)l[s]=e[s];for(;++i<a;)(p||i<u)&&(l[r[i]]=t[i]);for(;f--;)l[s++]=t[i++];return l}},function(t,e){var n=Math.max;t.exports=function(t,e,r,o){for(var i=-1,u=t.length,a=-1,s=r.length,c=-1,f=e.length,l=n(u-s,0),p=Array(l+f),h=!o;++i<l;)p[i]=t[i];for(var d=i;++c<f;)p[d+c]=e[c];for(;++a<s;)(h||i<u)&&(p[d+r[a]]=t[i++]);return p}},function(t,e,n){var r=n(276),o=n(103),i=n(105);t.exports=function(t,e,n,u,a,s,c,f,l,p){var h=8&e;e|=h?32:64,4&(e&=~(h?64:32))||(e&=-4);var d=[t,e,a,h?s:void 0,h?c:void 0,h?void 0:s,h?void 0:c,f,l,p],v=n.apply(void 0,d);return r(t)&&o(v,d),v.placeholder=u,i(v,t,e)}},function(t,e,n){var r=n(95),o=n(277),i=r?function(t){return r.get(t)}:o;t.exports=i},function(t,e,n){var r=n(48),o=n(51);function i(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}i.prototype=r(o.prototype),i.prototype.constructor=i,t.exports=i},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},function(t,e,n){var r=n(94),o=n(104)(r);t.exports=o},function(t,e){var n=Date.now;t.exports=function(t){var e=0,r=0;return function(){var o=n(),i=16-(o-r);if(r=o,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(282),o=n(283),i=n(106),u=n(287);t.exports=function(t,e,n){var a=e+"";return i(t,o(a,u(r(a),n)))}},function(t,e,n){var r=n(284),o=n(104)(r);t.exports=o},function(t,e){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");t.exports=function(t){return n.test(t)}},function(t,e,n){"use strict";(function(t,r){function o(t){return t&&"object"==typeof t&&"default"in t?t.default:t}Object.defineProperty(e,"__esModule",{value:!0});var i=o(n(120)),u=o(n(121)),a=o(n(129)),s=o(n(131)),c=o(n(35)),f=o(n(138)),l=o(n(139)),p=o(n(140)),h=o(n(61)),d=o(n(62)),v=o(n(143)),y=o(n(145)),g=o(n(146)),b=o(n(147)),m=o(n(148)),x=o(n(158)),w=o(n(161)),_=o(n(163)),O=o(n(164)),A=o(n(165)),N=o(n(63)),S=o(n(166)),j=o(n(168)),E=o(n(169)),R=o(n(170)),T="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},L=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t};Function.prototype.$asyncbind=function e(n,o){function i(){return u.apply(n,arguments)}Function.prototype.$asyncbind||Object.defineProperty(Function.prototype,"$asyncbind",{value:e,enumerable:!1,configurable:!0,writable:!0}),e.trampoline||(e.trampoline=function(t,e,n,r,o){return function i(u){for(;u;){if(u.then)return u=u.then(i,r),o?void 0:u;try{if(u.pop){if(u.length)return u.pop()?e.call(t):u;u=n}else u=u.call(t)}catch(t){return r(t)}}}}),e.LazyThenable||(e.LazyThenable=function(){function t(t){return t&&t instanceof Object&&"function"==typeof t.then}function e(n,r,o){try{var i=o?o(r):r;if(n===i)return n.reject(new TypeError("Promise resolution loop"));t(i)?i.then((function(t){e(n,t)}),(function(t){n.reject(t)})):n.resolve(i)}catch(t){n.reject(t)}}function n(){}function r(t){}function o(r,o){var i=new n;try{this._resolver((function(n){return t(n)?n.then(r,o):e(i,n,r)}),(function(t){e(i,t,o)}))}catch(t){e(i,t,o)}return i}function i(t){this._resolver=t,this.then=o}return n.prototype={resolve:r,reject:r,then:function(t,e){this.resolve=t,this.reject=e}},i.resolve=function(t){return i.isThenable(t)?t:{then:function(e){return e(t)}}},i.isThenable=t,i}(),e.EagerThenable=e.Thenable=(e.EagerThenableFactory=function(e){function n(t){if(t){var e=this;t((function(t){e.resolve(t)}),(function(t){e.reject(t)}))}}function o(t,e){if("function"==typeof t.y)try{var n=t.y.call(void 0,e);t.p.resolve(n)}catch(e){t.p.reject(e)}else t.p.resolve(e)}function i(t,e){if("function"==typeof t.n)try{var n=t.n.call(void 0,e);t.p.resolve(n)}catch(e){t.p.reject(e)}else t.p.reject(e)}e=e||"object"===(void 0===t?"undefined":T(t))&&t.nextTick||"function"==typeof r&&r||function(t){setTimeout(t,0)};var u=function(){function t(){for(;n.length-r;){try{n[r]()}catch(t){}n[r++]=void 0,r===o&&(n.splice(0,o),r=0)}}var n=[],r=0,o=1024;return function(o){n.push(o),n.length-r==1&&e(t)}}();return n.prototype={resolve:function(t){if(void 0===this.state){if(t===this)return this.reject(new TypeError("Attempt to resolve promise with self"));var e=this;if(t&&("function"==typeof t||"object"===(void 0===t?"undefined":T(t))))try{var n=0,r=t.then;if("function"==typeof r)return void r.call(t,(function(t){n++||e.resolve(t)}),(function(t){n++||e.reject(t)}))}catch(t){return void(n||this.reject(t))}this.state=o,this.v=t,e.c&&u((function(){for(var n=0,r=e.c.length;n<r;n++)o(e.c[n],t)}))}},reject:function(t){if(void 0===this.state){this.state=i,this.v=t;var e=this.c;e&&u((function(){for(var n=0,r=e.length;n<r;n++)i(e[n],t)}))}},then:function(t,e){var r=new n,o={y:t,n:e,p:r};if(void 0===this.state)this.c?this.c.push(o):this.c=[o];else{var i=this.state,a=this.v;u((function(){i(o,a)}))}return r}},n.resolve=function(t){if(t&&t instanceof n)return t;var e=new n;return e.resolve(t),e},n.reject=function(t){if(t&&t instanceof n)return t;var e=new n;return e.reject(t),e},n.version="2.3.3-nodent",n})());var u=this;switch(o){case!0:return new e.Thenable(i);case 0:return new e.LazyThenable(i);case void 0:return i.then=i,i;default:return function(){try{return u.apply(n,arguments)}catch(t){return o(t)}}}};var $=E([[j,S],[N(Number),S],[A,function(t){return Number(t)}]]),C=O((function(t,e,n){var r=N(Number);return r(t)&&r(e)&&r(n)&&_(n,t)&&_(e,n)})),M=w([j,x,m(b("baseURL")),m(g(String,"baseURL")),y(x,"baseURL")]),D={Accept:"application/json","Content-Type":"application/json"},k={timeout:0},I=["ECONNABORTED"],P=["ENOTFOUND","ECONNREFUSED","ECONNRESET"],U=C(200,299),V=C(400,499),B=C(500,599),z=v(j,d(void 0),h("status")),Z=function(t){if(M(t))throw new Error("config must have a baseURL");var e=p(D,t.headers||{}),n=p(k,l("headers",t)),r=R.create(n),o=[],h=[],v=[],y=[],g=function(t,n){return e[t]=n,r},b=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return x(p({url:e,params:n,method:t},r))},m=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return x(p({url:e,method:t,data:n},r))},x=function(t){return new Promise(function(n,o){function i(){function e(){return u}return l<v.length?function(t){return!!t&&("object"===(void 0===t?"undefined":T(t))||"function"==typeof t)&&"function"==typeof t.then}(p=v[l](t))?p.then(function(t){return e.call(this)}.$asyncbind(this,o),o):p(t).then(function(t){return e.call(this)}.$asyncbind(this,o),o):[1]}function u(){return l++,i}function c(){return d=s(a(_,[$(new Date)]),w),n(r.request(t).then(d).catch(d))}var l,p,d;return t.headers=L({},e,t.headers),h.length>0&&f((function(e){return e(t)}),h),v.length>0?(l=0,Function.$asyncbind.trampoline(this,(function(){return c.call(this)}),u,o,!0)(i)):c.call(this)}.$asyncbind(this))},w=function(t){return o.forEach((function(e){try{e(t)}catch(t){}})),t},_=function(t,e){var n=$(new Date)-t,r=e instanceof Error||R.isCancel(e),o=r?e.response:e,i=o&&o.status||null,u=r?O(e):N(i),a=U(i),s=e.config||null,c={duration:n,problem:u,ok:a,status:i,headers:o&&o.headers||null,config:s,data:o&&o.data||null};return y.length>0&&f((function(t){return t(c)}),y),c},O=function(t){return"Network Error"===t.message?"NETWORK_ERROR":R.isCancel(t)?"CANCEL_ERROR":E([[j,function(){return N(z(t.response))}],[u(i,I),d("TIMEOUT_ERROR")],[u(i,P),d("CONNECTION_ERROR")],[A,d("UNKNOWN_ERROR")]])(t.code)},N=function(t){return E([[j,d("UNKNOWN_ERROR")],[U,d(null)],[V,d("CLIENT_ERROR")],[B,d("SERVER_ERROR")],[A,d("UNKNOWN_ERROR")]])(t)};return{axiosInstance:r,monitors:o,addMonitor:function(t){o.push(t)},requestTransforms:h,asyncRequestTransforms:v,responseTransforms:y,addRequestTransform:function(t){return h.push(t)},addAsyncRequestTransform:function(t){return v.push(t)},addResponseTransform:function(t){return y.push(t)},setHeader:g,setHeaders:function(t){return f((function(e){return g(e,t[e])}),c(t)),r},deleteHeader:function(t){return delete e[t],r},headers:e,setBaseURL:function(t){return r.defaults.baseURL=t,r},getBaseURL:function(){return r.defaults.baseURL},get:a(b,["get"]),delete:a(b,["delete"]),head:a(b,["head"]),post:a(m,["post"]),put:a(m,["put"]),patch:a(m,["patch"]),link:a(b,["link"]),unlink:a(b,["unlink"])}},F={DEFAULT_HEADERS:D,NONE:null,CLIENT_ERROR:"CLIENT_ERROR",SERVER_ERROR:"SERVER_ERROR",TIMEOUT_ERROR:"TIMEOUT_ERROR",CONNECTION_ERROR:"CONNECTION_ERROR",NETWORK_ERROR:"NETWORK_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR",create:Z};e.DEFAULT_HEADERS=D,e.NONE=null,e.CLIENT_ERROR="CLIENT_ERROR",e.SERVER_ERROR="SERVER_ERROR",e.TIMEOUT_ERROR="TIMEOUT_ERROR",e.CONNECTION_ERROR="CONNECTION_ERROR",e.NETWORK_ERROR="NETWORK_ERROR",e.UNKNOWN_ERROR="UNKNOWN_ERROR",e.CANCEL_ERROR="CANCEL_ERROR",e.create=Z,e.default=F}).call(this,n(17),n(118).setImmediate)},function(t,e,n){var r=n(70),o=n(71),i=n(261),u=n(2);t.exports=function(t,e){return(u(t)?r:i)(t,o(e,3))}},function(t,e){t.exports=function(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var o=t[e];r[o[0]]=o[1]}return r}},function(t,e,n){var r=n(78),o=n(266),i=n(71),u=n(2);t.exports=function(t,e){return(u(t)?r:o)(t,i(e,3))}},function(t,e,n){var r=n(90),o=n(91),i=Math.max;t.exports=function(t,e,n){var u=null==t?0:t.length;if(!u)return-1;var a=null==n?0:o(n);return a<0&&(a=i(u+a,0)),r(t,e,a)}},function(t,e,n){var r=n(80),o=n(82),i=n(43),u=n(2),a=n(16),s=n(44),c=n(81),f=n(45),l=Object.prototype.hasOwnProperty;t.exports=function(t){if(null==t)return!0;if(a(t)&&(u(t)||"string"==typeof t||"function"==typeof t.splice||s(t)||f(t)||i(t)))return!t.length;var e=o(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if(c(t))return!r(t).length;for(var n in t)if(l.call(t,n))return!1;return!0}},function(t,e,n){t.exports=function(){"use strict";return function(t,e,n){t=t||{};var r=e.prototype,o={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function i(t,e,n,o){return r.fromToBase(t,e,n,o)}n.en.relativeTime=o,r.fromToBase=function(e,r,i,u,a){for(var s,c,f,l=i.$locale().relativeTime||o,p=t.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],h=p.length,d=0;d<h;d+=1){var v=p[d];v.d&&(s=u?n(e).diff(i,v.d,!0):i.diff(e,v.d,!0));var y=(t.rounding||Math.round)(Math.abs(s));if(f=s>0,y<=v.r||!v.r){y<=1&&d>0&&(v=p[d-1]);var g=l[v.l];a&&(y=a(""+y)),c="string"==typeof g?g.replace("%d",y):g(y,r,v.l,f);break}}if(r)return c;var b=f?l.future:l.past;return"function"==typeof b?b(c):b.replace("%s",c)},r.to=function(t,e){return i(t,e,this,!0)},r.from=function(t,e){return i(t,e,this)};var u=function(t){return t.$u?n.utc():n()};r.toNow=function(t){return this.to(u(this),t)},r.fromNow=function(t){return this.from(u(this),t)}}}()},function(t,e,n){t.exports=function(){"use strict";var t="minute",e=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,o,i){var u=o.prototype;i.utc=function(t){var e={date:t,utc:!0,args:arguments};return new o(e)},u.utc=function(e){var n=i(this.toDate(),{locale:this.$L,utc:!0});return e?n.add(this.utcOffset(),t):n},u.local=function(){return i(this.toDate(),{locale:this.$L,utc:!1})};var a=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),a.call(this,t)};var s=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else s.call(this)};var c=u.utcOffset;u.utcOffset=function(r,o){var i=this.$utils().u;if(i(r))return this.$u?0:i(this.$offset)?c.call(this):this.$offset;if("string"==typeof r&&null===(r=function(t){void 0===t&&(t="");var r=t.match(e);if(!r)return null;var o=(""+r[0]).match(n)||["-",0,0],i=o[0],u=60*+o[1]+ +o[2];return 0===u?0:"+"===i?u:-u}(r)))return this;var u=Math.abs(r)<=16?60*r:r;if(0===u)return this.utc(o);var a=this.clone();if(o)return a.$offset=u,a.$u=!1,a;var s=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(a=this.local().add(u+s,t)).$offset=u,a.$x.$localOffset=s,a};var f=u.format;u.format=function(t){var e=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return f.call(this,e)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return"s"===t&&this.$offset?i(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var p=u.diff;u.diff=function(t,e,n){if(t&&this.$u===t.$u)return p.call(this,t,e,n);var r=this.local(),o=i(t).local();return p.call(r,o,e,n)}}}()},function(t,e,n){var r=n(295)("toUpperCase");t.exports=r},function(t,e,n){var r=n(304)();t.exports=r},function(t,e,n){(function(t){var r=void 0!==t&&t||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},e.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},n(119),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(18))},function(t,e,n){(function(t,e){!function(t,n){"use strict";if(!t.setImmediate){var r,o,i,u,a,s=1,c={},f=!1,l=t.document,p=Object.getPrototypeOf&&Object.getPrototypeOf(t);p=p&&p.setTimeout?p:t,"[object process]"==={}.toString.call(t.process)?r=function(t){e.nextTick((function(){d(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?t.MessageChannel?((i=new MessageChannel).port1.onmessage=function(t){d(t.data)},r=function(t){i.port2.postMessage(t)}):l&&"onreadystatechange"in l.createElement("script")?(o=l.documentElement,r=function(t){var e=l.createElement("script");e.onreadystatechange=function(){d(t),e.onreadystatechange=null,o.removeChild(e),e=null},o.appendChild(e)}):r=function(t){setTimeout(d,0,t)}:(u="setImmediate$"+Math.random()+"$",a=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(u)&&d(+e.data.slice(u.length))},t.addEventListener?t.addEventListener("message",a,!1):t.attachEvent("onmessage",a),r=function(e){t.postMessage(u+e,"*")}),p.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n<e.length;n++)e[n]=arguments[n+1];var o={callback:t,args:e};return c[s]=o,r(s),s++},p.clearImmediate=h}function h(t){delete c[t]}function d(t){if(f)setTimeout(d,0,t);else{var e=c[t];if(e){f=!0;try{!function(t){var e=t.callback,n=t.args;switch(n.length){case 0:e();break;case 1:e(n[0]);break;case 2:e(n[0],n[1]);break;case 3:e(n[0],n[1],n[2]);break;default:e.apply(void 0,n)}}(e)}finally{h(t),f=!1}}}}}("undefined"==typeof self?void 0===t?this:t:self)}).call(this,n(18),n(17))},function(t,e){t.exports={"@@functional/placeholder":!0}},function(t,e,n){var r=n(122),o=n(0);t.exports=o(r)},function(t,e,n){var r=n(123);t.exports=function(t,e){return r(e,t,0)>=0}},function(t,e,n){var r=n(57);t.exports=function(t,e,n){var o,i;if("function"==typeof t.indexOf)switch(typeof e){case"number":if(0===e){for(o=1/e;n<t.length;){if(0===(i=t[n])&&1/i===o)return n;n+=1}return-1}if(e!=e){for(;n<t.length;){if("number"==typeof(i=t[n])&&i!=i)return n;n+=1}return-1}return t.indexOf(e,n);case"string":case"boolean":case"function":case"undefined":return t.indexOf(e,n);case"object":if(null===e)return t.indexOf(e,n)}for(;n<t.length;){if(r(t[n],e))return n;n+=1}return-1}},function(t,e,n){var r=n(125),o=n(126),i=n(13),u=n(127),a=n(35),s=n(128);t.exports=function t(e,n,c,f){if(u(e,n))return!0;if(s(e)!==s(n))return!1;if(null==e||null==n)return!1;if("function"==typeof e.equals||"function"==typeof n.equals)return"function"==typeof e.equals&&e.equals(n)&&"function"==typeof n.equals&&n.equals(e);switch(s(e)){case"Arguments":case"Array":case"Object":if("function"==typeof e.constructor&&"Promise"===o(e.constructor))return e===n;break;case"Boolean":case"Number":case"String":if(typeof e!=typeof n||!u(e.valueOf(),n.valueOf()))return!1;break;case"Date":if(!u(e.valueOf(),n.valueOf()))return!1;break;case"Error":return e.name===n.name&&e.message===n.message;case"RegExp":if(e.source!==n.source||e.global!==n.global||e.ignoreCase!==n.ignoreCase||e.multiline!==n.multiline||e.sticky!==n.sticky||e.unicode!==n.unicode)return!1;break;case"Map":case"Set":if(!t(r(e.entries()),r(n.entries()),c,f))return!1;break;case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var l=a(e);if(l.length!==a(n).length)return!1;for(var p=c.length-1;p>=0;){if(c[p]===e)return f[p]===n;p-=1}for(c.push(e),f.push(n),p=l.length-1;p>=0;){var h=l[p];if(!i(h,n)||!t(n[h],e[h],c,f))return!1;p-=1}return c.pop(),f.pop(),!0}},function(t,e){t.exports=function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}},function(t,e){t.exports=function(t){var e=String(t).match(/^function (\w*)/);return null==e?"":e[1]}},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}))},function(t,e,n){var r=n(1);t.exports=r((function(t){return null===t?"Null":void 0===t?"Undefined":Object.prototype.toString.call(t).slice(8,-1)}))},function(t,e,n){var r=n(59),o=n(130);t.exports=o(r)},function(t,e,n){var r=n(10),o=n(0);t.exports=function(t){return o((function(e,n){return r(Math.max(0,e.length-n.length),(function(){return e.apply(this,t(n,arguments))}))}))}},function(t,e,n){var r=n(10),o=n(132),i=n(36),u=n(136);t.exports=function(){if(0===arguments.length)throw new Error("pipe requires at least one argument");return r(arguments[0].length,i(o,arguments[0],u(arguments)))}},function(t,e){t.exports=function(t,e){return function(){return e.call(this,t.apply(this,arguments))}}},function(t,e){t.exports=function(){function t(t){this.f=t}return t.prototype["@@transducer/init"]=function(){throw new Error("init not implemented on XWrap")},t.prototype["@@transducer/result"]=function(t){return t},t.prototype["@@transducer/step"]=function(t,e){return this.f(t,e)},function(e){return new t(e)}}()},function(t,e,n){var r=n(10),o=n(0);t.exports=o((function(t,e){return r(t.length,(function(){return t.apply(e,arguments)}))}))},function(t,e,n){var r=n(1),o=n(21),i=n(60);t.exports=r((function(t){return!!o(t)||!!t&&("object"==typeof t&&(!i(t)&&(1===t.nodeType?!!t.length:0===t.length||t.length>0&&(t.hasOwnProperty(0)&&t.hasOwnProperty(t.length-1)))))}))},function(t,e,n){var r=n(37),o=n(1),i=n(137);t.exports=o(r("tail",i(1,1/0)))},function(t,e,n){var r=n(37),o=n(14);t.exports=o(r("slice",(function(t,e,n){return Array.prototype.slice.call(n,t,e)})))},function(t,e,n){var r=n(37),o=n(0);t.exports=o(r("forEach",(function(t,e){for(var n=e.length,r=0;r<n;)t(e[r]),r+=1;return e})))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){var n={};for(var r in e)n[r]=e[r];return delete n[t],n}))},function(t,e,n){var r=n(141),o=n(0);t.exports=o((function(t,e){return r({},t,e)}))},function(t,e,n){var r=n(142);t.exports="function"==typeof Object.assign?Object.assign:r},function(t,e,n){var r=n(13);t.exports=function(t){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1,o=arguments.length;n<o;){var i=arguments[n];if(null!=i)for(var u in i)r(u,i)&&(e[u]=i[u]);n+=1}return e}},function(t,e,n){var r=n(14),o=n(15);t.exports=r((function(t,e,n){return o(Math.max(t.length,e.length,n.length),(function(){return t.apply(this,arguments)?e.apply(this,arguments):n.apply(this,arguments)}))}))},function(t,e,n){var r=n(10),o=n(19);t.exports=function t(e,n,i){return function(){for(var u=[],a=0,s=e,c=0;c<n.length||a<arguments.length;){var f;c<n.length&&(!o(n[c])||a>=arguments.length)?f=n[c]:(f=arguments[a],a+=1),u[c]=f,o(f)||(s-=1),c+=1}return s<=0?i.apply(this,u):r(s,t(e,u,i))}}},function(t,e,n){var r=n(14);t.exports=r((function(t,e,n){return t(n[e])}))},function(t,e,n){var r=n(14),o=n(63);t.exports=r((function(t,e,n){return o(t,n[e])}))},function(t,e,n){var r=n(0),o=n(13);t.exports=r(o)},function(t,e,n){var r=n(149),o=n(157);t.exports=r(o)},function(t,e,n){var r=n(1),o=n(150);t.exports=r((function(t){return o(t.length,t)}))},function(t,e,n){var r=n(0),o=n(20),i=n(151),u=n(15),a=n(22);t.exports=r((function(t,e){var n=u(t,e);return u(t,(function(){return o(i,a(n,arguments[0]),Array.prototype.slice.call(arguments,1))}))}))},function(t,e,n){var r=n(59),o=n(0),i=n(20),u=n(22);t.exports=o((function(t,e){return"function"==typeof t.ap?t.ap(e):"function"==typeof t?function(n){return t(n)(e(n))}:i((function(t,n){return r(t,u(n,e))}),[],t)}))},function(t,e,n){var r=n(21),o=n(153);t.exports=function(t,e,n){return function(){if(0===arguments.length)return n();var i=Array.prototype.slice.call(arguments,0),u=i.pop();if(!r(u)){for(var a=0;a<t.length;){if("function"==typeof u[t[a]])return u[t[a]].apply(u,i);a+=1}if(o(u)){var s=e.apply(null,i);return s(u)}}return n.apply(this,arguments)}}},function(t,e){t.exports=function(t){return"function"==typeof t["@@transducer/step"]}},function(t,e){t.exports=function(t,e){for(var n=0,r=e.length,o=Array(r);n<r;)o[n]=t(e[n]),n+=1;return o}},function(t,e,n){var r=n(0),o=n(156);t.exports=function(){function t(t,e){this.xf=e,this.f=t}return t.prototype["@@transducer/init"]=o.init,t.prototype["@@transducer/result"]=o.result,t.prototype["@@transducer/step"]=function(t,e){return this.xf["@@transducer/step"](t,this.f(e))},r((function(e,n){return new t(e,n)}))}()},function(t,e){t.exports={init:function(){return this.xf["@@transducer/init"]()},result:function(t){return this.xf["@@transducer/result"](t)}}},function(t,e,n){var r=n(1);t.exports=r((function(t){return!t}))},function(t,e,n){var r=n(1),o=n(159),i=n(57);t.exports=r((function(t){return null!=t&&i(t,o(t))}))},function(t,e,n){var r=n(1),o=n(58),i=n(21),u=n(160),a=n(60);t.exports=r((function(t){return null!=t&&"function"==typeof t.empty?t.empty():null!=t&&null!=t.constructor&&"function"==typeof t.constructor.empty?t.constructor.empty():i(t)?[]:a(t)?"":u(t)?{}:o(t)?function(){return arguments}():void 0}))},function(t,e){t.exports=function(t){return"[object Object]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(1),o=n(15),i=n(64),u=n(162),a=n(36);t.exports=r((function(t){return o(a(i,0,u("length",t)),(function(){for(var e=0,n=t.length;e<n;){if(t[e].apply(this,arguments))return!0;e+=1}return!1}))}))},function(t,e,n){var r=n(0),o=n(22),i=n(61);t.exports=r((function(t,e){return o(i(t),e)}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return t>=e}))},function(t,e,n){var r=n(1),o=n(15);t.exports=r((function(t){return o(t.length,t)}))},function(t,e,n){var r=n(62);t.exports=r(!0)},function(t,e,n){var r=n(1),o=n(167);t.exports=r(o)},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(1);t.exports=r((function(t){return null==t}))},function(t,e,n){var r=n(10),o=n(1),i=n(22),u=n(64),a=n(36);t.exports=o((function(t){var e=a(u,0,i((function(t){return t[0].length}),t));return r(e,(function(){for(var e=0;e<t.length;){if(t[e][0].apply(this,arguments))return t[e][1].apply(this,arguments);e+=1}}))}))},function(t,e,n){t.exports=n(171)},function(t,e,n){"use strict";var r=n(5),o=n(65),i=n(173),u=n(38);function a(t){var e=new i(t),n=o(i.prototype.request,e);return r.extend(n,i.prototype,e),r.extend(n,e),n}var s=a(u);s.Axios=i,s.create=function(t){return a(r.merge(u,t))},s.Cancel=n(69),s.CancelToken=n(187),s.isCancel=n(68),s.all=function(t){return Promise.all(t)},s.spread=n(188),t.exports=s,t.exports.default=s},function(t,e){function n(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}
1
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("turn-shared",[],e):"object"==typeof exports?exports["turn-shared"]=e():t["turn-shared"]=e()}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=303)}([function(t,e,n){var r=n(1),o=n(16);t.exports=function(t){return function e(n,i){switch(arguments.length){case 0:return e;case 1:return o(n)?e:r((function(e){return t(n,e)}));default:return o(n)&&o(i)?e:o(n)?r((function(e){return t(e,i)})):o(i)?r((function(e){return t(n,e)})):t(n,i)}}}},function(t,e,n){var r=n(16);t.exports=function(t){return function e(n){return 0===arguments.length||r(n)?e:t.apply(this,arguments)}}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(70),o="object"==typeof self&&self&&self.Object===Object&&self,i=r||o||Function("return this")();t.exports=i},function(t,e,n){"use strict";var r=n(64),o=n(166),i=Object.prototype.toString;function u(t){return"[object Array]"===i.call(t)}function c(t){return null!==t&&"object"==typeof t}function a(t){return"[object Function]"===i.call(t)}function s(t,e){if(null!=t)if("object"==typeof t||u(t)||(t=[t]),u(t))for(var n=0,r=t.length;n<r;n++)e.call(null,t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.call(null,t[o],o,t)}t.exports={isArray:u,isArrayBuffer:function(t){return"[object ArrayBuffer]"===i.call(t)},isBuffer:o,isFormData:function(t){return"undefined"!=typeof FormData&&t instanceof FormData},isArrayBufferView:function(t){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isObject:c,isUndefined:function(t){return void 0===t},isDate:function(t){return"[object Date]"===i.call(t)},isFile:function(t){return"[object File]"===i.call(t)},isBlob:function(t){return"[object Blob]"===i.call(t)},isFunction:a,isStream:function(t){return c(t)&&a(t.pipe)},isURLSearchParams:function(t){return"undefined"!=typeof URLSearchParams&&t instanceof URLSearchParams},isStandardBrowserEnv:function(){return("undefined"==typeof navigator||"ReactNative"!==navigator.product)&&("undefined"!=typeof window&&"undefined"!=typeof document)},forEach:s,merge:function t(){var e={};function n(n,r){"object"==typeof e[r]&&"object"==typeof n?e[r]=t(e[r],n):e[r]=n}for(var r=0,o=arguments.length;r<o;r++)s(arguments[r],n);return e},extend:function(t,e,n){return s(e,(function(e,o){t[o]=n&&"function"==typeof e?r(e,n):e})),t},trim:function(t){return t.replace(/^\s*/,"").replace(/\s*$/,"")}}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){var r=n(214),o=n(217);t.exports=function(t,e){var n=o(t,e);return r(n)?n:void 0}},function(t,e,n){t.exports=function(){"use strict";var t=6e4,e=36e5,n="millisecond",r="second",o="minute",i="hour",u="day",c="week",a="month",s="quarter",f="year",l="date",p="Invalid Date",d=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,h=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,v={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},y=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},g={s:y,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),o=n%60;return(e<=0?"+":"-")+y(r,2,"0")+":"+y(o,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),o=e.clone().add(r,a),i=n-o<0,u=e.clone().add(r+(i?-1:1),a);return+(-(r+(n-o)/(i?o-u:u-o))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:a,y:f,w:c,d:u,D:l,h:i,m:o,s:r,ms:n,Q:s}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},m="en",b={};b[m]=v;var x="$isDayjsObject",_=function(t){return t instanceof A||!(!t||!t[x])},w=function t(e,n,r){var o;if(!e)return m;if("string"==typeof e){var i=e.toLowerCase();b[i]&&(o=i),n&&(b[i]=n,o=i);var u=e.split("-");if(!o&&u.length>1)return t(u[0])}else{var c=e.name;b[c]=e,o=c}return!r&&o&&(m=o),o||!r&&m},N=function(t,e){if(_(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new A(n)},O=g;O.l=w,O.i=_,O.w=function(t,e){return N(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var A=function(){function v(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[x]=!0}var y=v.prototype;return y.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(d);if(r){var o=r[2]-1||0,i=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)):new Date(r[1],o,r[3]||1,r[4]||0,r[5]||0,r[6]||0,i)}}return new Date(e)}(t),this.init()},y.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},y.$utils=function(){return O},y.isValid=function(){return!(this.$d.toString()===p)},y.isSame=function(t,e){var n=N(t);return this.startOf(e)<=n&&n<=this.endOf(e)},y.isAfter=function(t,e){return N(t)<this.startOf(e)},y.isBefore=function(t,e){return this.endOf(e)<N(t)},y.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},y.unix=function(){return Math.floor(this.valueOf()/1e3)},y.valueOf=function(){return this.$d.getTime()},y.startOf=function(t,e){var n=this,s=!!O.u(e)||e,p=O.p(t),d=function(t,e){var r=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return s?r:r.endOf(u)},h=function(t,e){return O.w(n.toDate()[t].apply(n.toDate("s"),(s?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},v=this.$W,y=this.$M,g=this.$D,m="set"+(this.$u?"UTC":"");switch(p){case f:return s?d(1,0):d(31,11);case a:return s?d(1,y):d(0,y+1);case c:var b=this.$locale().weekStart||0,x=(v<b?v+7:v)-b;return d(s?g-x:g+(6-x),y);case u:case l:return h(m+"Hours",0);case i:return h(m+"Minutes",1);case o:return h(m+"Seconds",2);case r:return h(m+"Milliseconds",3);default:return this.clone()}},y.endOf=function(t){return this.startOf(t,!1)},y.$set=function(t,e){var c,s=O.p(t),p="set"+(this.$u?"UTC":""),d=(c={},c[u]=p+"Date",c[l]=p+"Date",c[a]=p+"Month",c[f]=p+"FullYear",c[i]=p+"Hours",c[o]=p+"Minutes",c[r]=p+"Seconds",c[n]=p+"Milliseconds",c)[s],h=s===u?this.$D+(e-this.$W):e;if(s===a||s===f){var v=this.clone().set(l,1);v.$d[d](h),v.init(),this.$d=v.set(l,Math.min(this.$D,v.daysInMonth())).$d}else d&&this.$d[d](h);return this.init(),this},y.set=function(t,e){return this.clone().$set(t,e)},y.get=function(t){return this[O.p(t)]()},y.add=function(n,s){var l,p=this;n=Number(n);var d=O.p(s),h=function(t){var e=N(p);return O.w(e.date(e.date()+Math.round(t*n)),p)};if(d===a)return this.set(a,this.$M+n);if(d===f)return this.set(f,this.$y+n);if(d===u)return h(1);if(d===c)return h(7);var v=(l={},l[o]=t,l[i]=e,l[r]=1e3,l)[d]||1,y=this.$d.getTime()+n*v;return O.w(y,this)},y.subtract=function(t,e){return this.add(-1*t,e)},y.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||p;var r=t||"YYYY-MM-DDTHH:mm:ssZ",o=O.z(this),i=this.$H,u=this.$m,c=this.$M,a=n.weekdays,s=n.months,f=n.meridiem,l=function(t,n,o,i){return t&&(t[n]||t(e,r))||o[n].slice(0,i)},d=function(t){return O.s(i%12||12,t,"0")},v=f||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(h,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return O.s(e.$y,4,"0");case"M":return c+1;case"MM":return O.s(c+1,2,"0");case"MMM":return l(n.monthsShort,c,s,3);case"MMMM":return l(s,c);case"D":return e.$D;case"DD":return O.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return l(n.weekdaysMin,e.$W,a,2);case"ddd":return l(n.weekdaysShort,e.$W,a,3);case"dddd":return a[e.$W];case"H":return String(i);case"HH":return O.s(i,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return v(i,u,!0);case"A":return v(i,u,!1);case"m":return String(u);case"mm":return O.s(u,2,"0");case"s":return String(e.$s);case"ss":return O.s(e.$s,2,"0");case"SSS":return O.s(e.$ms,3,"0");case"Z":return o}return null}(t)||o.replace(":","")}))},y.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},y.diff=function(n,l,p){var d,h=this,v=O.p(l),y=N(n),g=(y.utcOffset()-this.utcOffset())*t,m=this-y,b=function(){return O.m(h,y)};switch(v){case f:d=b()/12;break;case a:d=b();break;case s:d=b()/3;break;case c:d=(m-g)/6048e5;break;case u:d=(m-g)/864e5;break;case i:d=m/e;break;case o:d=m/t;break;case r:d=m/1e3;break;default:d=m}return p?d:O.a(d)},y.daysInMonth=function(){return this.endOf(a).$D},y.$locale=function(){return b[this.$L]},y.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},y.clone=function(){return O.w(this.$d,this)},y.toDate=function(){return new Date(this.valueOf())},y.toJSON=function(){return this.isValid()?this.toISOString():null},y.toISOString=function(){return this.$d.toISOString()},y.toString=function(){return this.$d.toUTCString()},v}(),$=A.prototype;return N.prototype=$,[["$ms",n],["$s",r],["$m",o],["$H",i],["$W",u],["$M",a],["$y",f],["$D",l]].forEach((function(t){$[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),N.extend=function(t,e){return t.$i||(t(e,A,N),t.$i=!0),N},N.locale=w,N.isDayjs=_,N.unix=function(t){return N(1e3*t)},N.en=b[m],N.Ls=b,N.p={},N}()},function(t,e){t.exports=function(t,e){switch(t){case 0:return function(){return e.apply(this,arguments)};case 1:return function(t){return e.apply(this,arguments)};case 2:return function(t,n){return e.apply(this,arguments)};case 3:return function(t,n,r){return e.apply(this,arguments)};case 4:return function(t,n,r,o){return e.apply(this,arguments)};case 5:return function(t,n,r,o,i){return e.apply(this,arguments)};case 6:return function(t,n,r,o,i,u){return e.apply(this,arguments)};case 7:return function(t,n,r,o,i,u,c){return e.apply(this,arguments)};case 8:return function(t,n,r,o,i,u,c,a){return e.apply(this,arguments)};case 9:return function(t,n,r,o,i,u,c,a,s){return e.apply(this,arguments)};case 10:return function(t,n,r,o,i,u,c,a,s,f){return e.apply(this,arguments)};default:throw new Error("First argument to _arity must be a non-negative integer no greater than ten")}}},function(t,e,n){var r=n(20),o=n(192),i=n(193),u=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":u&&u in Object(t)?o(t):i(t)}},function(t,e,n){var r=n(89);function o(t,e,n){var i=r(t,8,void 0,void 0,void 0,void 0,void 0,e=n?void 0:e);return i.placeholder=o.placeholder,i}o.placeholder={},t.exports=o},function(t,e,n){var r=n(10),o=n(2),i=n(6);t.exports=function(t){return"string"==typeof t||!o(t)&&i(t)&&"[object String]"==r(t)}},function(t,e){t.exports=function(t,e){return Object.prototype.hasOwnProperty.call(e,t)}},function(t,e,n){var r=n(1),o=n(0),i=n(16);t.exports=function(t){return function e(n,u,c){switch(arguments.length){case 0:return e;case 1:return i(n)?e:o((function(e,r){return t(n,e,r)}));case 2:return i(n)&&i(u)?e:i(n)?o((function(e,n){return t(e,u,n)})):i(u)?o((function(e,r){return t(n,e,r)})):r((function(e){return t(n,u,e)}));default:return i(n)&&i(u)&&i(c)?e:i(n)&&i(u)?o((function(e,n){return t(e,n,c)})):i(n)&&i(c)?o((function(e,n){return t(e,u,n)})):i(u)&&i(c)?o((function(e,r){return t(n,e,r)})):i(n)?r((function(e){return t(e,u,c)})):i(u)?r((function(e){return t(n,e,c)})):i(c)?r((function(e){return t(n,u,e)})):t(n,u,c)}}}},function(t,e,n){var r=n(9),o=n(1),i=n(0),u=n(138);t.exports=i((function(t,e){return 1===t?o(e):r(t,u(t,[],e))}))},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t&&!0===t["@@functional/placeholder"]}},function(t,e,n){var r=n(127),o=n(128),i=n(129);t.exports=function(){function t(t,e,n){for(var r=n.next();!r.done;){if((e=t["@@transducer/step"](e,r.value))&&e["@@transducer/reduced"]){e=e["@@transducer/value"];break}r=n.next()}return t["@@transducer/result"](e)}var e="undefined"!=typeof Symbol?Symbol.iterator:"@@iterator";return function(n,u,c){if("function"==typeof n&&(n=r(n)),i(c))return function(t,e,n){for(var r=0,o=n.length;r<o;){if((e=t["@@transducer/step"](e,n[r]))&&e["@@transducer/reduced"]){e=e["@@transducer/value"];break}r+=1}return t["@@transducer/result"](e)}(n,u,c);if("function"==typeof c.reduce)return function(t,e,n){return t["@@transducer/result"](n.reduce(o(t["@@transducer/step"],t),e))}(n,u,c);if(null!=c[e])return t(n,u,c[e]());if("function"==typeof c.next)return t(n,u,c);throw new TypeError("reduce: list must be array or iterable")}}()},function(t,e){t.exports=Array.isArray||function(t){return null!=t&&t.length>=0&&"[object Array]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(0),o=n(146),i=n(148),u=n(17),c=n(149),a=n(15),s=n(35);t.exports=r(o(["map"],c,(function(t,e){switch(Object.prototype.toString.call(e)){case"[object Function]":return a(e.length,(function(){return t.call(this,e.apply(this,arguments))}));case"[object Object]":return u((function(n,r){return n[r]=t(e[r]),n}),{},s(e));default:return i(t,e)}})))},function(t,e,n){var r=n(4).Symbol;t.exports=r},function(t,e){var n=/^(?:0|[1-9]\d*)$/;t.exports=function(t,e){var r=typeof t;return!!(e=null==e?9007199254740991:e)&&("number"==r||"symbol"!=r&&n.test(t))&&t>-1&&t%1==0&&t<e}},function(t,e,n){var r=n(74),o=n(43);t.exports=function(t){return null!=t&&o(t.length)&&!r(t)}},function(t,e,n){var r=n(204),o=n(205),i=n(206),u=n(207),c=n(208);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=o,a.prototype.get=i,a.prototype.has=u,a.prototype.set=c,t.exports=a},function(t,e,n){var r=n(44);t.exports=function(t,e){for(var n=t.length;n--;)if(r(t[n][0],e))return n;return-1}},function(t,e,n){var r=n(7)(Object,"create");t.exports=r},function(t,e,n){var r=n(226);t.exports=function(t,e){var n=t.__data__;return r(e)?n["string"==typeof e?"string":"hash"]:n.map}},function(t,e,n){var r=n(10),o=n(6);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r=n(27);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(48),o=n(3);t.exports=function(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=r(t.prototype),i=t.apply(n,e);return o(i)?i:n}}},function(t,e){t.exports=function(t,e){for(var n=-1,r=t.length,o=0,i=[];++n<r;){var u=t[n];u!==e&&"__lodash_placeholder__"!==u||(t[n]="__lodash_placeholder__",i[o++]=n)}return i}},function(t,e){t.exports={AL:[{regex:/^\d{7,8}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 8"},{regex:/^[A-Z]\d{6,7}$/i,description:"ANNNNNNNN MinLength = 7 MaxLength = 8"}],AK:[{regex:/^\d{7}$/,description:"NNNNNNNN MinLength = 7 MaxLength = 7"}],AZ:[{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],AR:[{regex:/^[0-9]{9}$/,description:"NNNNNNNNN MinLength = 9 MaxLength = 9"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],CA:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"}],CO:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]{1}[0-9]{3,6}$/i,description:"ANNNNNN min length 4 max 7"},{regex:/^[A-Z]{2}[0-9]{1,5}$/i,description:"AANNNNN min length 3 max 7"}],CT:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],DE:[{regex:/^\d{1,7}$/,description:"License must be 1-7 numbers"}],DC:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],FL:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"},{regex:/^[A-Z]\d{11}$/i,description:"ANNNNNNNNNNN MinLength = 12 MaxLength = 12"}],GA:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],GU:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],HI:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],ID:[{regex:/^[A-Z]{2}[0-9]{6}[A-Z]{1}$/i,description:"License must be 2 letters followed by 6 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],IL:[{regex:/^[A-Z]{1}[0-9]{11}$/i,description:"License must be 1 letter followed by 11 numbers"}],IN:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"}],IA:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{2}[0-9]{4}$/i,description:"License must be 3 numbers followed by 2 letters followed by 4 numbers"}],KS:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],KY:[{regex:/^[A-Z]{1}[0-9]{8,9}$/i,description:"License must be 1 letter followed by 8-9 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],LA:[{regex:/^[0-9]{1,9}$/i,description:"License must be 1-9 numbers"}],ME:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[0-9]{7}[A-Z]{1}$/i,description:"License must be 7 numbers followed by 1 letter"},{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],MD:[{regex:/^[A-Z]{1,2}[0-9]{11,12}$/i,description:"License must be 1 or 2 letters followed by 11 or 12 numbers"}],MA:[{regex:/(^[A-Z]{1}[0-9]{8}$|^[A-Z]{2}[0-9]{7}$)/i,description:"License must be 1 letter followed by 8 numbers or 2 letters followed by 7 numbers"}],MI:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MN:[{regex:/^[A-Z]{1}[0-9]{12}$/i,description:"License must be 1 letter followed by 12 numbers"}],MS:[{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],MO:[{regex:/^[A-Z]{1}[0-9]{5,9}$/i,description:"License must be 1 letter followed by 5-9 numbers"},{regex:/^[A-Z]{1}[0-9]{6}[R]{1}$/i,description:'License must be 1 letter followed by 6 numbers followed by "R"'},{regex:/^[0-9]{9}[A-Z]{1}$/i,description:"License must be 9 numbers followed by 1 letter"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[0-9]{3}[A-Z]{1}[0-9]{6}$/i,description:"License must be 3 numbers + 1 alfanumeric + 6 numbers"},{regex:/^[A-Z]\d{5,6}[A-Z]$/i,description:"ANNNNNA MinLength = 7 MaxLength = 7 OR ANNNNNA MinLength = 8 MaxLength = 8"}],MT:[{regex:/^[0-9]{13}$/i,description:"License must be 13 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"},{regex:/^[A-Z]\d(\d|[A-Z])\d{2}[A-Z]{3}\d$/i,description:"ANXNNAAAN MinLength = 9 MaxLength = 9"},{regex:/^[a-z]{3}\d{10}$/i,description:"Three letters and 10 digits"}],NE:[{regex:/^[A-Z]\d{3,8}$/i,description:"ANNNNNNNN MinLength = 4 MaxLength = 9"}],NV:[{regex:/^[0-9]{9,10}$/i,description:"License must be 9-10 numbers"},{regex:/^[0-9]{12}$/i,description:"License must be 12 numbers"},{regex:/^[A-Z]\d{8}$/i,description:"ANNNNNNNN MinLength = 9 MaxLength = 9"}],NH:[{regex:/(^[0-9]{2}[A-Z]{3}[0-9]{5}$|^[A-Z]{3}[0-9]{8}$)/i,description:"License must be 2 numbers followed by 3 letters followed by 5 numbers OR 3 letters followed by 8 numbers"}],NJ:[{regex:/^[A-Z]{1}[0-9]{14}$/i,description:"License must be 1 letter followed by 14 numbers"}],NM:[{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NY:[{regex:/^[A-Z]{1}[0-9]{7}$/i,description:"License must be 1 letter followed by 7 numbers"},{regex:/^[A-Z]{1}[0-9]{17,18}$/i,description:"License must be 1 letter followed by 17-18 numbers"},{regex:/^[0-9]{8,9}$/i,description:"License must be 8-9 numbers"}],NC:[{regex:/^[0-9]{1,12}$/i,description:"License must be 1-12 numbers"}],ND:[{regex:/^[A-Z]{3}[0-9]{6}$/i,description:"License must be 3 letters followed by 6 numbers"},{regex:/^[0-9]{9}$/i,description:"License must be 9 numbers"}],OH:[{regex:/^[A-Z]{2}[0-9]{6}$/i,description:"License must be 2 letters followed by 6 numbers"}],OK:[{regex:/^[A-Z]{1}[0-9]{9}$/i,description:"License must be 1 letter followed by 9 numbers"},{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}],OR:[{regex:/^[0-9]{5,9}$/i,description:"License must be 5-9 numbers"},{regex:/^[A-Z]\d{7}$/i,description:"ANNNNNNN MinLength = 8 MaxLength = 8"},{regex:/^[A-Z0-9]{6,9}$/i,description:"XXXXXXXXX MinLength = 6 MaxLength = 9"}],PA:[{regex:/^[0-9]{8}$/i,description:"License must be 8 numbers"}],RI:[{regex:/^[0-9]{7,8}$/i,description:"License must be 7 or 8 numbers without letters"},{regex:/^[A-Z]{1}[0-9]{6}$/i,description:"License must be 1 letter followed by 6 numbers"}],SC:[{regex:/^[0-9]{6,11}$/i,description:"License must be 6-11 numbers (new: 9, old format: 6-11)"}],SD:[{regex:/^[0-9]{6,9}$/i,description:"License must be 6-9 numbers"}],TN:[{regex:/^[0-9]{7,9}$/i,description:"License must be 7-9 numbers"}],TX:[{regex:/^\d{5,8}$/,description:"NNNNNNNN MinLength = 5 MaxLength = 8"}],UT:[{regex:/^[0-9]{4,10}$/i,description:"License must be 4-10 numbers"}],VT:[{regex:/^[0-9]{7,}$/i,description:"License must be 7-8 numbers"},{regex:/^[0-9]{7}[A]$/i,description:'License must be 7 numbers followed by "A"'},{regex:/^\d{7}[A-Z]?$/i,description:"NNNNNNNA MinLength = 8 MaxLength = 8 OR NNNNNNN MinLength = 7 MaxLength = 7"}],VA:[{regex:/^[A-Z]{1}[0-9]{8}$/i,description:"License must be 1 letter followed by 8 numbers"},{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],VI:[{regex:/^\d{10}$/,description:"NNNNNNNNNN MinLength = 10 MaxLength = 10"}],WA:[{regex:/^(?=.{12}$)[A-Z]{1,7}[A-Z0-9\\*]{4,11}$/i,description:'License must be 1-7 letters followed by any combination of letters, numbers, or "*" for a total of 12 characters'},{regex:/^[A-Z0-9]{12}$/i,description:"XXXXXXXXXXXX MinLength = 12 MaxLength = 12"}],WV:[{regex:/^[0-9]{7}$/i,description:"License must be 7 numbers"},{regex:/^[A-Z]{2}[0-9]{5}$/i,description:"License must be 2 letters followed by 5 numbers"},{regex:/^[A-Z]{1,2}[0-9]{6}$/i,description:"License must be 1-2 letters followed by 6 numbers"},{regex:/^[A-Z]\d{6}$/i,description:"ANNNNNN MinLength = 7 MaxLength = 7"},{regex:/^[A-Z]{2}\d{5,6}$/i,description:"AANNNNN MinLength = 7 MaxLength = 7 OR AANNNNNN MinLength = 8 MaxLength = 8"},{regex:/^\d[A-Z]\d{5}$/i,description:"NANNNNN MinLength = 7 MaxLength = 7"}],WI:[{regex:/^[A-Z]{1}[0-9]{13}$/i,description:"License must be 1 letter followed by 13 numbers"}],WY:[{regex:/^[0-9]{9}$/,description:"License must be 9 numbers"}],PR:[{regex:/^\d{7,9}$/,description:"NNNNNNNNN MinLength = 7 MaxLength = 9"}]}},function(t,e){var n,r,o=t.exports={};function i(){throw new Error("setTimeout has not been defined")}function u(){throw new Error("clearTimeout has not been defined")}function c(t){if(n===setTimeout)return setTimeout(t,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(t){n=i}try{r="function"==typeof clearTimeout?clearTimeout:u}catch(t){r=u}}();var a,s=[],f=!1,l=-1;function p(){f&&a&&(f=!1,a.length?s=a.concat(s):l=-1,s.length&&d())}function d(){if(!f){var t=c(p);f=!0;for(var e=s.length;e;){for(a=s,s=[];++l<e;)a&&a[l].run();l=-1,e=s.length}a=null,f=!1,function(t){if(r===clearTimeout)return clearTimeout(t);if((r===u||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(t);try{r(t)}catch(e){try{return r.call(null,t)}catch(e){return r.call(this,t)}}}(t)}}function h(t,e){this.fun=t,this.array=e}function v(){}o.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];s.push(new h(t,e)),1!==s.length||f||c(d)},h.prototype.run=function(){this.fun.apply(null,this.array)},o.title="browser",o.browser=!0,o.env={},o.argv=[],o.version="",o.versions={},o.on=v,o.addListener=v,o.once=v,o.off=v,o.removeListener=v,o.removeAllListeners=v,o.emit=v,o.prependListener=v,o.prependOnceListener=v,o.listeners=function(t){return[]},o.binding=function(t){throw new Error("process.binding is not supported")},o.cwd=function(){return"/"},o.chdir=function(t){throw new Error("process.chdir is not supported")},o.umask=function(){return 0}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r,o,i,u,c=n(1),a=n(13),s=n(57);t.exports=(r=!{toString:null}.propertyIsEnumerable("toString"),o=["constructor","valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"],i=function(){"use strict";return arguments.propertyIsEnumerable("length")}(),u=function(t,e){for(var n=0;n<t.length;){if(t[n]===e)return!0;n+=1}return!1},"function"!=typeof Object.keys||i?c((function(t){if(Object(t)!==t)return[];var e,n,c=[],f=i&&s(t);for(e in t)!a(e,t)||f&&"length"===e||(c[c.length]=e);if(r)for(n=o.length-1;n>=0;)a(e=o[n],t)&&!u(c,e)&&(c[c.length]=e),n-=1;return c})):c((function(t){return Object(t)!==t?[]:Object.keys(t)})))},function(t,e,n){var r=n(14),o=n(17);t.exports=r(o)},function(t,e,n){var r=n(18);t.exports=function(t,e){return function(){var n=arguments.length;if(0===n)return e();var o=arguments[n-1];return r(o)||"function"!=typeof o[t]?e.apply(this,arguments):o[t].apply(o,Array.prototype.slice.call(arguments,0,n-1))}}},function(t,e,n){"use strict";(function(e){var r=n(5),o=n(168),i={"Content-Type":"application/x-www-form-urlencoded"};function u(t,e){!r.isUndefined(t)&&r.isUndefined(t["Content-Type"])&&(t["Content-Type"]=e)}var c,a={adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==e)&&(c=n(65)),c),transformRequest:[function(t,e){return o(e,"Content-Type"),r.isFormData(t)||r.isArrayBuffer(t)||r.isBuffer(t)||r.isStream(t)||r.isFile(t)||r.isBlob(t)?t:r.isArrayBufferView(t)?t.buffer:r.isURLSearchParams(t)?(u(e,"application/x-www-form-urlencoded;charset=utf-8"),t.toString()):r.isObject(t)?(u(e,"application/json;charset=utf-8"),JSON.stringify(t)):t}],transformResponse:[function(t){if("string"==typeof t)try{t=JSON.parse(t)}catch(t){}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}};a.headers={common:{Accept:"application/json, text/plain, */*"}},r.forEach(["delete","get","head"],(function(t){a.headers[t]={}})),r.forEach(["post","put","patch"],(function(t){a.headers[t]=r.merge(i)})),t.exports=a}).call(this,n(33))},function(t,e,n){var r=n(189),o=n(72),i=n(22);t.exports=function(t){return i(t)?r(t):o(t)}},function(t,e,n){var r=n(191),o=n(6),i=Object.prototype,u=i.hasOwnProperty,c=i.propertyIsEnumerable,a=r(function(){return arguments}())?r:function(t){return o(t)&&u.call(t,"callee")&&!c.call(t,"callee")};t.exports=a},function(t,e,n){(function(t){var r=n(4),o=n(194),i=e&&!e.nodeType&&e,u=i&&"object"==typeof t&&t&&!t.nodeType&&t,c=u&&u.exports===i?r.Buffer:void 0,a=(c?c.isBuffer:void 0)||o;t.exports=a}).call(this,n(71)(t))},function(t,e,n){var r=n(195),o=n(196),i=n(197),u=i&&i.isTypedArray,c=u?o(u):r;t.exports=c},function(t,e){t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(7)(n(4),"Map");t.exports=r},function(t,e,n){var r=n(218),o=n(225),i=n(227),u=n(228),c=n(229);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=o,a.prototype.get=i,a.prototype.has=u,a.prototype.set=c,t.exports=a},function(t,e,n){var r=n(2),o=n(27),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,u=/^\w*$/;t.exports=function(t,e){if(r(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!o(t))||(u.test(t)||!i.test(t)||null!=e&&t in Object(e))}},function(t,e,n){var r=n(3),o=Object.create,i=function(){function t(){}return function(e){if(!r(e))return{};if(o)return o(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=i},function(t,e){t.exports=function(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}},function(t,e,n){var r=n(48),o=n(51);function i(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}i.prototype=r(o.prototype),i.prototype.constructor=i,t.exports=i},function(t,e){t.exports=function(){}},function(t,e){t.exports=function(t){return t.placeholder}},function(t,e,n){var r,o,i;!function(u){"use strict";if(null!=e&&"number"!=typeof e.nodeType)t.exports=u();else if(null!=n(183))o=[],void 0===(i="function"==typeof(r=u)?r.apply(e,o):r)||(t.exports=i);else{var c=u(),a="undefined"!=typeof self?self:$.global;"function"!=typeof a.btoa&&(a.btoa=c.btoa),"function"!=typeof a.atob&&(a.atob=c.atob)}}((function(){"use strict";var t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function e(t){this.message=t}return e.prototype=new Error,e.prototype.name="InvalidCharacterError",{btoa:function(n){for(var r,o,i=String(n),u=0,c=t,a="";i.charAt(0|u)||(c="=",u%1);a+=c.charAt(63&r>>8-u%1*8)){if((o=i.charCodeAt(u+=3/4))>255)throw new e("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");r=r<<8|o}return a},atob:function(n){var r=String(n).replace(/[=]+$/,"");if(r.length%4==1)throw new e("'atob' failed: The string to be decoded is not correctly encoded.");for(var o,i,u=0,c=0,a="";i=r.charAt(c++);~i&&(o=u%4?64*o+i:i,u++%4)?a+=String.fromCharCode(255&o>>(-2*u&6)):0)i=t.indexOf(i);return a}}}))},function(t,e,n){var r=n(289),o=n(89),i=n(52),u=n(31),c=r((function(t,e){var n=u(e,i(c));return o(t,32,void 0,e,n)}));c.placeholder={},t.exports=c},function(t,e,n){var r=n(32),o=n(297),i=n(298),u=n(299);t.exports={driversLicenseRegex:r,isValidUSLicense:o,validateUSDriversLicense:i,supportedStates:u}},function(t,e,n){var r=n(0),o=n(118);t.exports=r((function(t,e){return o(t,e,[],[])}))},function(t,e,n){var r=n(13);t.exports=function(){var t=Object.prototype.toString;return"[object Arguments]"===t.call(arguments)?function(e){return"[object Arguments]"===t.call(e)}:function(t){return r("callee",t)}}()},function(t,e){t.exports=function(t,e){var n;e=e||[];var r=(t=t||[]).length,o=e.length,i=[];for(n=0;n<r;)i[i.length]=t[n],n+=1;for(n=0;n<o;)i[i.length]=e[n],n+=1;return i}},function(t,e){t.exports=function(t){return"[object String]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return e[t]}))},function(t,e,n){var r=n(1);t.exports=r((function(t){return function(){return t}}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return null!=e&&e.constructor===t||e instanceof t}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return e>t?e:t}))},function(t,e,n){"use strict";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},function(t,e,n){"use strict";var r=n(5),o=n(169),i=n(171),u=n(172),c=n(173),a=n(66),s="undefined"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(174);t.exports=function(t){return new Promise((function(e,f){var l=t.data,p=t.headers;r.isFormData(l)&&delete p["Content-Type"];var d=new XMLHttpRequest,h="onreadystatechange",v=!1;if("undefined"==typeof window||!window.XDomainRequest||"withCredentials"in d||c(t.url)||(d=new window.XDomainRequest,h="onload",v=!0,d.onprogress=function(){},d.ontimeout=function(){}),t.auth){var y=t.auth.username||"",g=t.auth.password||"";p.Authorization="Basic "+s(y+":"+g)}if(d.open(t.method.toUpperCase(),i(t.url,t.params,t.paramsSerializer),!0),d.timeout=t.timeout,d[h]=function(){if(d&&(4===d.readyState||v)&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf("file:"))){var n="getAllResponseHeaders"in d?u(d.getAllResponseHeaders()):null,r={data:t.responseType&&"text"!==t.responseType?d.response:d.responseText,status:1223===d.status?204:d.status,statusText:1223===d.status?"No Content":d.statusText,headers:n,config:t,request:d};o(e,f,r),d=null}},d.onerror=function(){f(a("Network Error",t,null,d)),d=null},d.ontimeout=function(){f(a("timeout of "+t.timeout+"ms exceeded",t,"ECONNABORTED",d)),d=null},r.isStandardBrowserEnv()){var m=n(175),b=(t.withCredentials||c(t.url))&&t.xsrfCookieName?m.read(t.xsrfCookieName):void 0;b&&(p[t.xsrfHeaderName]=b)}if("setRequestHeader"in d&&r.forEach(p,(function(t,e){void 0===l&&"content-type"===e.toLowerCase()?delete p[e]:d.setRequestHeader(e,t)})),t.withCredentials&&(d.withCredentials=!0),t.responseType)try{d.responseType=t.responseType}catch(e){if("json"!==t.responseType)throw e}"function"==typeof t.onDownloadProgress&&d.addEventListener("progress",t.onDownloadProgress),"function"==typeof t.onUploadProgress&&d.upload&&d.upload.addEventListener("progress",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then((function(t){d&&(d.abort(),f(t),d=null)})),void 0===l&&(l=null),d.send(l)}))}},function(t,e,n){"use strict";var r=n(170);t.exports=function(t,e,n,o,i){var u=new Error(t);return r(u,e,n,o,i)}},function(t,e,n){"use strict";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,e,n){"use strict";function r(t){this.message=t}r.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},r.prototype.__CANCEL__=!0,t.exports=r},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=0,i=[];++n<r;){var u=t[n];e(u,n,t)&&(i[o++]=u)}return i}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(34))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){var r=n(73),o=n(198),i=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return o(t);var e=[];for(var n in Object(t))i.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},function(t,e,n){var r=n(10),o=n(3);t.exports=function(t){if(!o(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(23),o=n(209),i=n(210),u=n(211),c=n(212),a=n(213);function s(t){var e=this.__data__=new r(t);this.size=e.size}s.prototype.clear=o,s.prototype.delete=i,s.prototype.get=u,s.prototype.has=c,s.prototype.set=a,t.exports=s},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(230),o=n(6);t.exports=function t(e,n,i,u,c){return e===n||(null==e||null==n||!o(e)&&!o(n)?e!=e&&n!=n:r(e,n,i,u,t,c))}},function(t,e,n){var r=n(231),o=n(234),i=n(235);t.exports=function(t,e,n,u,c,a){var s=1&n,f=t.length,l=e.length;if(f!=l&&!(s&&l>f))return!1;var p=a.get(t),d=a.get(e);if(p&&d)return p==e&&d==t;var h=-1,v=!0,y=2&n?new r:void 0;for(a.set(t,e),a.set(e,t);++h<f;){var g=t[h],m=e[h];if(u)var b=s?u(m,g,h,e,t,a):u(g,m,h,t,e,a);if(void 0!==b){if(b)continue;v=!1;break}if(y){if(!o(e,(function(t,e){if(!i(y,e)&&(g===t||c(g,t,n,u,a)))return y.push(e)}))){v=!1;break}}else if(g!==m&&!c(g,m,n,u,a)){v=!1;break}}return a.delete(t),a.delete(e),v}},function(t,e,n){var r=n(246),o=n(45),i=n(247),u=n(248),c=n(80),a=n(10),s=n(76),f=s(r),l=s(o),p=s(i),d=s(u),h=s(c),v=a;(r&&"[object DataView]"!=v(new r(new ArrayBuffer(1)))||o&&"[object Map]"!=v(new o)||i&&"[object Promise]"!=v(i.resolve())||u&&"[object Set]"!=v(new u)||c&&"[object WeakMap]"!=v(new c))&&(v=function(t){var e=a(t),n="[object Object]"==e?t.constructor:void 0,r=n?s(n):"";if(r)switch(r){case f:return"[object DataView]";case l:return"[object Map]";case p:return"[object Promise]";case d:return"[object Set]";case h:return"[object WeakMap]"}return e}),t.exports=v},function(t,e,n){var r=n(7)(n(4),"WeakMap");t.exports=r},function(t,e,n){var r=n(3);t.exports=function(t){return t==t&&!r(t)}},function(t,e){t.exports=function(t,e){return function(n){return null!=n&&(n[t]===e&&(void 0!==e||t in Object(n)))}}},function(t,e,n){var r=n(84),o=n(28);t.exports=function(t,e){for(var n=0,i=(e=r(e,t)).length;null!=t&&n<i;)t=t[o(e[n++])];return n&&n==i?t:void 0}},function(t,e,n){var r=n(2),o=n(47),i=n(252),u=n(85);t.exports=function(t,e){return r(t)?t:o(t,e)?[t]:i(u(t))}},function(t,e,n){var r=n(255);t.exports=function(t){return null==t?"":r(t)}},function(t,e,n){var r=n(263),o=n(264),i=n(265);t.exports=function(t,e,n){return e==e?i(t,e,n):r(t,o,n)}},function(t,e,n){var r=n(88);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var r=n(266);t.exports=function(t){return t?(t=r(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}},function(t,e,n){var r=n(90),o=n(269),i=n(270),u=n(92),c=n(287),a=n(96),s=n(288),f=n(99),l=n(101),p=n(87),d=Math.max;t.exports=function(t,e,n,h,v,y,g,m){var b=2&e;if(!b&&"function"!=typeof t)throw new TypeError("Expected a function");var x=h?h.length:0;if(x||(e&=-97,h=v=void 0),g=void 0===g?g:d(p(g),0),m=void 0===m?m:p(m),x-=v?v.length:0,64&e){var _=h,w=v;h=v=void 0}var N=b?void 0:a(t),O=[t,e,n,h,v,_,w,y,g,m];if(N&&s(O,N),t=O[0],e=O[1],n=O[2],h=O[3],v=O[4],!(m=O[9]=void 0===O[9]?b?0:t.length:d(O[9]-x,0))&&24&e&&(e&=-25),e&&1!=e)A=8==e||16==e?i(t,e,m):32!=e&&33!=e||v.length?u.apply(void 0,O):c(t,e,n,h);else var A=o(t,e,n);return l((N?r:f)(A,O),t,e)}},function(t,e,n){var r=n(29),o=n(91),i=o?function(t,e){return o.set(t,e),t}:r;t.exports=i},function(t,e,n){var r=n(80),o=r&&new r;t.exports=o},function(t,e,n){var r=n(93),o=n(94),i=n(271),u=n(30),c=n(95),a=n(52),s=n(286),f=n(31),l=n(4);t.exports=function t(e,n,p,d,h,v,y,g,m,b){var x=128&n,_=1&n,w=2&n,N=24&n,O=512&n,A=w?void 0:u(e);return function $(){for(var j=arguments.length,R=Array(j),E=j;E--;)R[E]=arguments[E];if(N)var S=a($),L=i(R,S);if(d&&(R=r(R,d,h,N)),v&&(R=o(R,v,y,N)),j-=L,N&&j<b){var T=f(R,S);return c(e,n,t,$.placeholder,p,R,T,g,m,b-j)}var M=_?p:this,C=w?M[e]:e;return j=R.length,g?R=s(R,g):O&&j>1&&R.reverse(),x&&m<j&&(R.length=m),this&&this!==l&&this instanceof $&&(C=A||u(C)),C.apply(M,R)}}},function(t,e){var n=Math.max;t.exports=function(t,e,r,o){for(var i=-1,u=t.length,c=r.length,a=-1,s=e.length,f=n(u-c,0),l=Array(s+f),p=!o;++a<s;)l[a]=e[a];for(;++i<c;)(p||i<u)&&(l[r[i]]=t[i]);for(;f--;)l[a++]=t[i++];return l}},function(t,e){var n=Math.max;t.exports=function(t,e,r,o){for(var i=-1,u=t.length,c=-1,a=r.length,s=-1,f=e.length,l=n(u-a,0),p=Array(l+f),d=!o;++i<l;)p[i]=t[i];for(var h=i;++s<f;)p[h+s]=e[s];for(;++c<a;)(d||i<u)&&(p[h+r[c]]=t[i++]);return p}},function(t,e,n){var r=n(272),o=n(99),i=n(101);t.exports=function(t,e,n,u,c,a,s,f,l,p){var d=8&e;e|=d?32:64,4&(e&=~(d?64:32))||(e&=-4);var h=[t,e,c,d?a:void 0,d?s:void 0,d?void 0:a,d?void 0:s,f,l,p],v=n.apply(void 0,h);return r(t)&&o(v,h),v.placeholder=u,i(v,t,e)}},function(t,e,n){var r=n(91),o=n(273),i=r?function(t){return r.get(t)}:o;t.exports=i},function(t,e,n){var r=n(48),o=n(51);function i(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=void 0}i.prototype=r(o.prototype),i.prototype.constructor=i,t.exports=i},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++n<r;)e[n]=t[n];return e}},function(t,e,n){var r=n(90),o=n(100)(r);t.exports=o},function(t,e){var n=Date.now;t.exports=function(t){var e=0,r=0;return function(){var o=n(),i=16-(o-r);if(r=o,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(278),o=n(279),i=n(102),u=n(283);t.exports=function(t,e,n){var c=e+"";return i(t,o(c,u(r(c),n)))}},function(t,e,n){var r=n(280),o=n(100)(r);t.exports=o},function(t,e){var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");t.exports=function(t){return n.test(t)}},function(t,e,n){"use strict";(function(t,r){function o(t){return t&&"object"==typeof t&&"default"in t?t.default:t}Object.defineProperty(e,"__esModule",{value:!0});var i=o(n(114)),u=o(n(115)),c=o(n(123)),a=o(n(125)),s=o(n(35)),f=o(n(132)),l=o(n(133)),p=o(n(134)),d=o(n(60)),h=o(n(61)),v=o(n(137)),y=o(n(139)),g=o(n(140)),m=o(n(141)),b=o(n(142)),x=o(n(152)),_=o(n(155)),w=o(n(157)),N=o(n(158)),O=o(n(159)),A=o(n(62)),$=o(n(160)),j=o(n(162)),R=o(n(163)),E=o(n(164)),S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},L=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t};Function.prototype.$asyncbind=function e(n,o){function i(){return u.apply(n,arguments)}Function.prototype.$asyncbind||Object.defineProperty(Function.prototype,"$asyncbind",{value:e,enumerable:!1,configurable:!0,writable:!0}),e.trampoline||(e.trampoline=function(t,e,n,r,o){return function i(u){for(;u;){if(u.then)return u=u.then(i,r),o?void 0:u;try{if(u.pop){if(u.length)return u.pop()?e.call(t):u;u=n}else u=u.call(t)}catch(t){return r(t)}}}}),e.LazyThenable||(e.LazyThenable=function(){function t(t){return t&&t instanceof Object&&"function"==typeof t.then}function e(n,r,o){try{var i=o?o(r):r;if(n===i)return n.reject(new TypeError("Promise resolution loop"));t(i)?i.then((function(t){e(n,t)}),(function(t){n.reject(t)})):n.resolve(i)}catch(t){n.reject(t)}}function n(){}function r(t){}function o(r,o){var i=new n;try{this._resolver((function(n){return t(n)?n.then(r,o):e(i,n,r)}),(function(t){e(i,t,o)}))}catch(t){e(i,t,o)}return i}function i(t){this._resolver=t,this.then=o}return n.prototype={resolve:r,reject:r,then:function(t,e){this.resolve=t,this.reject=e}},i.resolve=function(t){return i.isThenable(t)?t:{then:function(e){return e(t)}}},i.isThenable=t,i}(),e.EagerThenable=e.Thenable=(e.EagerThenableFactory=function(e){function n(t){if(t){var e=this;t((function(t){e.resolve(t)}),(function(t){e.reject(t)}))}}function o(t,e){if("function"==typeof t.y)try{var n=t.y.call(void 0,e);t.p.resolve(n)}catch(e){t.p.reject(e)}else t.p.resolve(e)}function i(t,e){if("function"==typeof t.n)try{var n=t.n.call(void 0,e);t.p.resolve(n)}catch(e){t.p.reject(e)}else t.p.reject(e)}e=e||"object"===(void 0===t?"undefined":S(t))&&t.nextTick||"function"==typeof r&&r||function(t){setTimeout(t,0)};var u=function(){function t(){for(;n.length-r;){try{n[r]()}catch(t){}n[r++]=void 0,r===o&&(n.splice(0,o),r=0)}}var n=[],r=0,o=1024;return function(o){n.push(o),n.length-r==1&&e(t)}}();return n.prototype={resolve:function(t){if(void 0===this.state){if(t===this)return this.reject(new TypeError("Attempt to resolve promise with self"));var e=this;if(t&&("function"==typeof t||"object"===(void 0===t?"undefined":S(t))))try{var n=0,r=t.then;if("function"==typeof r)return void r.call(t,(function(t){n++||e.resolve(t)}),(function(t){n++||e.reject(t)}))}catch(t){return void(n||this.reject(t))}this.state=o,this.v=t,e.c&&u((function(){for(var n=0,r=e.c.length;n<r;n++)o(e.c[n],t)}))}},reject:function(t){if(void 0===this.state){this.state=i,this.v=t;var e=this.c;e&&u((function(){for(var n=0,r=e.length;n<r;n++)i(e[n],t)}))}},then:function(t,e){var r=new n,o={y:t,n:e,p:r};if(void 0===this.state)this.c?this.c.push(o):this.c=[o];else{var i=this.state,c=this.v;u((function(){i(o,c)}))}return r}},n.resolve=function(t){if(t&&t instanceof n)return t;var e=new n;return e.resolve(t),e},n.reject=function(t){if(t&&t instanceof n)return t;var e=new n;return e.reject(t),e},n.version="2.3.3-nodent",n})());var u=this;switch(o){case!0:return new e.Thenable(i);case 0:return new e.LazyThenable(i);case void 0:return i.then=i,i;default:return function(){try{return u.apply(n,arguments)}catch(t){return o(t)}}}};var T=R([[j,$],[A(Number),$],[O,function(t){return Number(t)}]]),M=N((function(t,e,n){var r=A(Number);return r(t)&&r(e)&&r(n)&&w(n,t)&&w(e,n)})),C=_([j,x,b(m("baseURL")),b(g(String,"baseURL")),y(x,"baseURL")]),D={Accept:"application/json","Content-Type":"application/json"},I={timeout:0},k=["ECONNABORTED"],P=["ENOTFOUND","ECONNREFUSED","ECONNRESET"],U=M(200,299),Z=M(400,499),F=M(500,599),z=v(j,h(void 0),d("status")),B=function(t){if(C(t))throw new Error("config must have a baseURL");var e=p(D,t.headers||{}),n=p(I,l("headers",t)),r=E.create(n),o=[],d=[],v=[],y=[],g=function(t,n){return e[t]=n,r},m=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return x(p({url:e,params:n,method:t},r))},b=function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{};return x(p({url:e,method:t,data:n},r))},x=function(t){return new Promise(function(n,o){function i(){function e(){return u}return l<v.length?function(t){return!!t&&("object"===(void 0===t?"undefined":S(t))||"function"==typeof t)&&"function"==typeof t.then}(p=v[l](t))?p.then(function(t){return e.call(this)}.$asyncbind(this,o),o):p(t).then(function(t){return e.call(this)}.$asyncbind(this,o),o):[1]}function u(){return l++,i}function s(){return h=a(c(w,[T(new Date)]),_),n(r.request(t).then(h).catch(h))}var l,p,h;return t.headers=L({},e,t.headers),d.length>0&&f((function(e){return e(t)}),d),v.length>0?(l=0,Function.$asyncbind.trampoline(this,(function(){return s.call(this)}),u,o,!0)(i)):s.call(this)}.$asyncbind(this))},_=function(t){return o.forEach((function(e){try{e(t)}catch(t){}})),t},w=function(t,e){var n=T(new Date)-t,r=e instanceof Error||E.isCancel(e),o=r?e.response:e,i=o&&o.status||null,u=r?N(e):A(i),c=U(i),a=e.config||null,s={duration:n,problem:u,ok:c,status:i,headers:o&&o.headers||null,config:a,data:o&&o.data||null};return y.length>0&&f((function(t){return t(s)}),y),s},N=function(t){return"Network Error"===t.message?"NETWORK_ERROR":E.isCancel(t)?"CANCEL_ERROR":R([[j,function(){return A(z(t.response))}],[u(i,k),h("TIMEOUT_ERROR")],[u(i,P),h("CONNECTION_ERROR")],[O,h("UNKNOWN_ERROR")]])(t.code)},A=function(t){return R([[j,h("UNKNOWN_ERROR")],[U,h(null)],[Z,h("CLIENT_ERROR")],[F,h("SERVER_ERROR")],[O,h("UNKNOWN_ERROR")]])(t)};return{axiosInstance:r,monitors:o,addMonitor:function(t){o.push(t)},requestTransforms:d,asyncRequestTransforms:v,responseTransforms:y,addRequestTransform:function(t){return d.push(t)},addAsyncRequestTransform:function(t){return v.push(t)},addResponseTransform:function(t){return y.push(t)},setHeader:g,setHeaders:function(t){return f((function(e){return g(e,t[e])}),s(t)),r},deleteHeader:function(t){return delete e[t],r},headers:e,setBaseURL:function(t){return r.defaults.baseURL=t,r},getBaseURL:function(){return r.defaults.baseURL},get:c(m,["get"]),delete:c(m,["delete"]),head:c(m,["head"]),post:c(b,["post"]),put:c(b,["put"]),patch:c(b,["patch"]),link:c(m,["link"]),unlink:c(m,["unlink"])}},W={DEFAULT_HEADERS:D,NONE:null,CLIENT_ERROR:"CLIENT_ERROR",SERVER_ERROR:"SERVER_ERROR",TIMEOUT_ERROR:"TIMEOUT_ERROR",CONNECTION_ERROR:"CONNECTION_ERROR",NETWORK_ERROR:"NETWORK_ERROR",UNKNOWN_ERROR:"UNKNOWN_ERROR",create:B};e.DEFAULT_HEADERS=D,e.NONE=null,e.CLIENT_ERROR="CLIENT_ERROR",e.SERVER_ERROR="SERVER_ERROR",e.TIMEOUT_ERROR="TIMEOUT_ERROR",e.CONNECTION_ERROR="CONNECTION_ERROR",e.NETWORK_ERROR="NETWORK_ERROR",e.UNKNOWN_ERROR="UNKNOWN_ERROR",e.CANCEL_ERROR="CANCEL_ERROR",e.create=B,e.default=W}).call(this,n(33),n(112).setImmediate)},function(t,e,n){var r=n(69),o=n(184),i=n(201),u=n(2);t.exports=function(t,e){return(u(t)?r:o)(t,i(e,3))}},function(t,e,n){var r=n(86),o=n(87),i=Math.max;t.exports=function(t,e,n){var u=null==t?0:t.length;if(!u)return-1;var c=null==n?0:o(n);return c<0&&(c=i(u+c,0)),r(t,e,c)}},function(t,e,n){var r=n(72),o=n(79),i=n(40),u=n(2),c=n(22),a=n(41),s=n(73),f=n(42),l=Object.prototype.hasOwnProperty;t.exports=function(t){if(null==t)return!0;if(c(t)&&(u(t)||"string"==typeof t||"function"==typeof t.splice||a(t)||f(t)||i(t)))return!t.length;var e=o(t);if("[object Map]"==e||"[object Set]"==e)return!t.size;if(s(t))return!r(t).length;for(var n in t)if(l.call(t,n))return!1;return!0}},function(t,e,n){t.exports=function(){"use strict";return function(t,e,n){t=t||{};var r=e.prototype,o={future:"in %s",past:"%s ago",s:"a few seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function i(t,e,n,o){return r.fromToBase(t,e,n,o)}n.en.relativeTime=o,r.fromToBase=function(e,r,i,u,c){for(var a,s,f,l=i.$locale().relativeTime||o,p=t.thresholds||[{l:"s",r:44,d:"second"},{l:"m",r:89},{l:"mm",r:44,d:"minute"},{l:"h",r:89},{l:"hh",r:21,d:"hour"},{l:"d",r:35},{l:"dd",r:25,d:"day"},{l:"M",r:45},{l:"MM",r:10,d:"month"},{l:"y",r:17},{l:"yy",d:"year"}],d=p.length,h=0;h<d;h+=1){var v=p[h];v.d&&(a=u?n(e).diff(i,v.d,!0):i.diff(e,v.d,!0));var y=(t.rounding||Math.round)(Math.abs(a));if(f=a>0,y<=v.r||!v.r){y<=1&&h>0&&(v=p[h-1]);var g=l[v.l];c&&(y=c(""+y)),s="string"==typeof g?g.replace("%d",y):g(y,r,v.l,f);break}}if(r)return s;var m=f?l.future:l.past;return"function"==typeof m?m(s):m.replace("%s",s)},r.to=function(t,e){return i(t,e,this,!0)},r.from=function(t,e){return i(t,e,this)};var u=function(t){return t.$u?n.utc():n()};r.toNow=function(t){return this.to(u(this),t)},r.fromNow=function(t){return this.from(u(this),t)}}}()},function(t,e,n){t.exports=function(){"use strict";var t="minute",e=/[+-]\d\d(?::?\d\d)?/g,n=/([+-]|\d\d)/g;return function(r,o,i){var u=o.prototype;i.utc=function(t){var e={date:t,utc:!0,args:arguments};return new o(e)},u.utc=function(e){var n=i(this.toDate(),{locale:this.$L,utc:!0});return e?n.add(this.utcOffset(),t):n},u.local=function(){return i(this.toDate(),{locale:this.$L,utc:!1})};var c=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),c.call(this,t)};var a=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else a.call(this)};var s=u.utcOffset;u.utcOffset=function(r,o){var i=this.$utils().u;if(i(r))return this.$u?0:i(this.$offset)?s.call(this):this.$offset;if("string"==typeof r&&null===(r=function(t){void 0===t&&(t="");var r=t.match(e);if(!r)return null;var o=(""+r[0]).match(n)||["-",0,0],i=o[0],u=60*+o[1]+ +o[2];return 0===u?0:"+"===i?u:-u}(r)))return this;var u=Math.abs(r)<=16?60*r:r;if(0===u)return this.utc(o);var c=this.clone();if(o)return c.$offset=u,c.$u=!1,c;var a=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(c=this.local().add(u+a,t)).$offset=u,c.$x.$localOffset=a,c};var f=u.format;u.format=function(t){var e=t||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return f.call(this,e)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return"s"===t&&this.$offset?i(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():l.call(this)};var p=u.diff;u.diff=function(t,e,n){if(t&&this.$u===t.$u)return p.call(this,t,e,n);var r=this.local(),o=i(t).local();return p.call(r,o,e,n)}}}()},function(t,e,n){var r=n(291)("toUpperCase");t.exports=r},function(t,e,n){var r=n(300)();t.exports=r},function(t,e,n){(function(t){var r=void 0!==t&&t||"undefined"!=typeof self&&self||window,o=Function.prototype.apply;function i(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new i(o.call(setTimeout,r,arguments),clearTimeout)},e.setInterval=function(){return new i(o.call(setInterval,r,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(r,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout((function(){t._onTimeout&&t._onTimeout()}),e))},n(113),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(this,n(34))},function(t,e,n){(function(t,e){!function(t,n){"use strict";if(!t.setImmediate){var r,o,i,u,c,a=1,s={},f=!1,l=t.document,p=Object.getPrototypeOf&&Object.getPrototypeOf(t);p=p&&p.setTimeout?p:t,"[object process]"==={}.toString.call(t.process)?r=function(t){e.nextTick((function(){h(t)}))}:!function(){if(t.postMessage&&!t.importScripts){var e=!0,n=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=n,e}}()?t.MessageChannel?((i=new MessageChannel).port1.onmessage=function(t){h(t.data)},r=function(t){i.port2.postMessage(t)}):l&&"onreadystatechange"in l.createElement("script")?(o=l.documentElement,r=function(t){var e=l.createElement("script");e.onreadystatechange=function(){h(t),e.onreadystatechange=null,o.removeChild(e),e=null},o.appendChild(e)}):r=function(t){setTimeout(h,0,t)}:(u="setImmediate$"+Math.random()+"$",c=function(e){e.source===t&&"string"==typeof e.data&&0===e.data.indexOf(u)&&h(+e.data.slice(u.length))},t.addEventListener?t.addEventListener("message",c,!1):t.attachEvent("onmessage",c),r=function(e){t.postMessage(u+e,"*")}),p.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),n=0;n<e.length;n++)e[n]=arguments[n+1];var o={callback:t,args:e};return s[a]=o,r(a),a++},p.clearImmediate=d}function d(t){delete s[t]}function h(t){if(f)setTimeout(h,0,t);else{var e=s[t];if(e){f=!0;try{!function(t){var e=t.callback,n=t.args;switch(n.length){case 0:e();break;case 1:e(n[0]);break;case 2:e(n[0],n[1]);break;case 3:e(n[0],n[1],n[2]);break;default:e.apply(void 0,n)}}(e)}finally{d(t),f=!1}}}}}("undefined"==typeof self?void 0===t?this:t:self)}).call(this,n(34),n(33))},function(t,e){t.exports={"@@functional/placeholder":!0}},function(t,e,n){var r=n(116),o=n(0);t.exports=o(r)},function(t,e,n){var r=n(117);t.exports=function(t,e){return r(e,t,0)>=0}},function(t,e,n){var r=n(56);t.exports=function(t,e,n){var o,i;if("function"==typeof t.indexOf)switch(typeof e){case"number":if(0===e){for(o=1/e;n<t.length;){if(0===(i=t[n])&&1/i===o)return n;n+=1}return-1}if(e!=e){for(;n<t.length;){if("number"==typeof(i=t[n])&&i!=i)return n;n+=1}return-1}return t.indexOf(e,n);case"string":case"boolean":case"function":case"undefined":return t.indexOf(e,n);case"object":if(null===e)return t.indexOf(e,n)}for(;n<t.length;){if(r(t[n],e))return n;n+=1}return-1}},function(t,e,n){var r=n(119),o=n(120),i=n(13),u=n(121),c=n(35),a=n(122);t.exports=function t(e,n,s,f){if(u(e,n))return!0;if(a(e)!==a(n))return!1;if(null==e||null==n)return!1;if("function"==typeof e.equals||"function"==typeof n.equals)return"function"==typeof e.equals&&e.equals(n)&&"function"==typeof n.equals&&n.equals(e);switch(a(e)){case"Arguments":case"Array":case"Object":if("function"==typeof e.constructor&&"Promise"===o(e.constructor))return e===n;break;case"Boolean":case"Number":case"String":if(typeof e!=typeof n||!u(e.valueOf(),n.valueOf()))return!1;break;case"Date":if(!u(e.valueOf(),n.valueOf()))return!1;break;case"Error":return e.name===n.name&&e.message===n.message;case"RegExp":if(e.source!==n.source||e.global!==n.global||e.ignoreCase!==n.ignoreCase||e.multiline!==n.multiline||e.sticky!==n.sticky||e.unicode!==n.unicode)return!1;break;case"Map":case"Set":if(!t(r(e.entries()),r(n.entries()),s,f))return!1;break;case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"ArrayBuffer":break;default:return!1}var l=c(e);if(l.length!==c(n).length)return!1;for(var p=s.length-1;p>=0;){if(s[p]===e)return f[p]===n;p-=1}for(s.push(e),f.push(n),p=l.length-1;p>=0;){var d=l[p];if(!i(d,n)||!t(n[d],e[d],s,f))return!1;p-=1}return s.pop(),f.pop(),!0}},function(t,e){t.exports=function(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}},function(t,e){t.exports=function(t){var e=String(t).match(/^function (\w*)/);return null==e?"":e[1]}},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}))},function(t,e,n){var r=n(1);t.exports=r((function(t){return null===t?"Null":void 0===t?"Undefined":Object.prototype.toString.call(t).slice(8,-1)}))},function(t,e,n){var r=n(58),o=n(124);t.exports=o(r)},function(t,e,n){var r=n(9),o=n(0);t.exports=function(t){return o((function(e,n){return r(Math.max(0,e.length-n.length),(function(){return e.apply(this,t(n,arguments))}))}))}},function(t,e,n){var r=n(9),o=n(126),i=n(36),u=n(130);t.exports=function(){if(0===arguments.length)throw new Error("pipe requires at least one argument");return r(arguments[0].length,i(o,arguments[0],u(arguments)))}},function(t,e){t.exports=function(t,e){return function(){return e.call(this,t.apply(this,arguments))}}},function(t,e){t.exports=function(){function t(t){this.f=t}return t.prototype["@@transducer/init"]=function(){throw new Error("init not implemented on XWrap")},t.prototype["@@transducer/result"]=function(t){return t},t.prototype["@@transducer/step"]=function(t,e){return this.f(t,e)},function(e){return new t(e)}}()},function(t,e,n){var r=n(9),o=n(0);t.exports=o((function(t,e){return r(t.length,(function(){return t.apply(e,arguments)}))}))},function(t,e,n){var r=n(1),o=n(18),i=n(59);t.exports=r((function(t){return!!o(t)||!!t&&("object"==typeof t&&(!i(t)&&(1===t.nodeType?!!t.length:0===t.length||t.length>0&&(t.hasOwnProperty(0)&&t.hasOwnProperty(t.length-1)))))}))},function(t,e,n){var r=n(37),o=n(1),i=n(131);t.exports=o(r("tail",i(1,1/0)))},function(t,e,n){var r=n(37),o=n(14);t.exports=o(r("slice",(function(t,e,n){return Array.prototype.slice.call(n,t,e)})))},function(t,e,n){var r=n(37),o=n(0);t.exports=o(r("forEach",(function(t,e){for(var n=e.length,r=0;r<n;)t(e[r]),r+=1;return e})))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){var n={};for(var r in e)n[r]=e[r];return delete n[t],n}))},function(t,e,n){var r=n(135),o=n(0);t.exports=o((function(t,e){return r({},t,e)}))},function(t,e,n){var r=n(136);t.exports="function"==typeof Object.assign?Object.assign:r},function(t,e,n){var r=n(13);t.exports=function(t){if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1,o=arguments.length;n<o;){var i=arguments[n];if(null!=i)for(var u in i)r(u,i)&&(e[u]=i[u]);n+=1}return e}},function(t,e,n){var r=n(14),o=n(15);t.exports=r((function(t,e,n){return o(Math.max(t.length,e.length,n.length),(function(){return t.apply(this,arguments)?e.apply(this,arguments):n.apply(this,arguments)}))}))},function(t,e,n){var r=n(9),o=n(16);t.exports=function t(e,n,i){return function(){for(var u=[],c=0,a=e,s=0;s<n.length||c<arguments.length;){var f;s<n.length&&(!o(n[s])||c>=arguments.length)?f=n[s]:(f=arguments[c],c+=1),u[s]=f,o(f)||(a-=1),s+=1}return a<=0?i.apply(this,u):r(a,t(e,u,i))}}},function(t,e,n){var r=n(14);t.exports=r((function(t,e,n){return t(n[e])}))},function(t,e,n){var r=n(14),o=n(62);t.exports=r((function(t,e,n){return o(t,n[e])}))},function(t,e,n){var r=n(0),o=n(13);t.exports=r(o)},function(t,e,n){var r=n(143),o=n(151);t.exports=r(o)},function(t,e,n){var r=n(1),o=n(144);t.exports=r((function(t){return o(t.length,t)}))},function(t,e,n){var r=n(0),o=n(17),i=n(145),u=n(15),c=n(19);t.exports=r((function(t,e){var n=u(t,e);return u(t,(function(){return o(i,c(n,arguments[0]),Array.prototype.slice.call(arguments,1))}))}))},function(t,e,n){var r=n(58),o=n(0),i=n(17),u=n(19);t.exports=o((function(t,e){return"function"==typeof t.ap?t.ap(e):"function"==typeof t?function(n){return t(n)(e(n))}:i((function(t,n){return r(t,u(n,e))}),[],t)}))},function(t,e,n){var r=n(18),o=n(147);t.exports=function(t,e,n){return function(){if(0===arguments.length)return n();var i=Array.prototype.slice.call(arguments,0),u=i.pop();if(!r(u)){for(var c=0;c<t.length;){if("function"==typeof u[t[c]])return u[t[c]].apply(u,i);c+=1}if(o(u)){var a=e.apply(null,i);return a(u)}}return n.apply(this,arguments)}}},function(t,e){t.exports=function(t){return"function"==typeof t["@@transducer/step"]}},function(t,e){t.exports=function(t,e){for(var n=0,r=e.length,o=Array(r);n<r;)o[n]=t(e[n]),n+=1;return o}},function(t,e,n){var r=n(0),o=n(150);t.exports=function(){function t(t,e){this.xf=e,this.f=t}return t.prototype["@@transducer/init"]=o.init,t.prototype["@@transducer/result"]=o.result,t.prototype["@@transducer/step"]=function(t,e){return this.xf["@@transducer/step"](t,this.f(e))},r((function(e,n){return new t(e,n)}))}()},function(t,e){t.exports={init:function(){return this.xf["@@transducer/init"]()},result:function(t){return this.xf["@@transducer/result"](t)}}},function(t,e,n){var r=n(1);t.exports=r((function(t){return!t}))},function(t,e,n){var r=n(1),o=n(153),i=n(56);t.exports=r((function(t){return null!=t&&i(t,o(t))}))},function(t,e,n){var r=n(1),o=n(57),i=n(18),u=n(154),c=n(59);t.exports=r((function(t){return null!=t&&"function"==typeof t.empty?t.empty():null!=t&&null!=t.constructor&&"function"==typeof t.constructor.empty?t.constructor.empty():i(t)?[]:c(t)?"":u(t)?{}:o(t)?function(){return arguments}():void 0}))},function(t,e){t.exports=function(t){return"[object Object]"===Object.prototype.toString.call(t)}},function(t,e,n){var r=n(1),o=n(15),i=n(63),u=n(156),c=n(36);t.exports=r((function(t){return o(c(i,0,u("length",t)),(function(){for(var e=0,n=t.length;e<n;){if(t[e].apply(this,arguments))return!0;e+=1}return!1}))}))},function(t,e,n){var r=n(0),o=n(19),i=n(60);t.exports=r((function(t,e){return o(i(t),e)}))},function(t,e,n){var r=n(0);t.exports=r((function(t,e){return t>=e}))},function(t,e,n){var r=n(1),o=n(15);t.exports=r((function(t){return o(t.length,t)}))},function(t,e,n){var r=n(61);t.exports=r(!0)},function(t,e,n){var r=n(1),o=n(161);t.exports=r(o)},function(t,e){t.exports=function(t){return t}},function(t,e,n){var r=n(1);t.exports=r((function(t){return null==t}))},function(t,e,n){var r=n(9),o=n(1),i=n(19),u=n(63),c=n(36);t.exports=o((function(t){var e=c(u,0,i((function(t){return t[0].length}),t));return r(e,(function(){for(var e=0;e<t.length;){if(t[e][0].apply(this,arguments))return t[e][1].apply(this,arguments);e+=1}}))}))},function(t,e,n){t.exports=n(165)},function(t,e,n){"use strict";var r=n(5),o=n(64),i=n(167),u=n(38);function c(t){var e=new i(t),n=o(i.prototype.request,e);return r.extend(n,i.prototype,e),r.extend(n,e),n}var a=c(u);a.Axios=i,a.create=function(t){return c(r.merge(u,t))},a.Cancel=n(68),a.CancelToken=n(181),a.isCancel=n(67),a.all=function(t){return Promise.all(t)},a.spread=n(182),t.exports=a,t.exports.default=a},function(t,e){function n(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}
16
2
  /*!
17
3
  * Determine if an object is a Buffer
18
4
  *
19
5
  * @author Feross Aboukhadijeh <https://feross.org>
20
6
  * @license MIT
21
7
  */
22
- t.exports=function(t){return null!=t&&(n(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&n(t.slice(0,0))}(t)||!!t._isBuffer)}},function(t,e,n){"use strict";var r=n(38),o=n(5),i=n(182),u=n(183),a=n(185),s=n(186);function c(t){this.defaults=t,this.interceptors={request:new i,response:new i}}c.prototype.request=function(t){"string"==typeof t&&(t=o.merge({url:arguments[0]},arguments[1])),(t=o.merge(r,this.defaults,{method:"get"},t)).method=t.method.toLowerCase(),t.baseURL&&!a(t.url)&&(t.url=s(t.baseURL,t.url));var e=[u,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach((function(t){e.unshift(t.fulfilled,t.rejected)})),this.interceptors.response.forEach((function(t){e.push(t.fulfilled,t.rejected)}));e.length;)n=n.then(e.shift(),e.shift());return n},o.forEach(["delete","get","head","options"],(function(t){c.prototype[t]=function(e,n){return this.request(o.merge(n||{},{method:t,url:e}))}})),o.forEach(["post","put","patch"],(function(t){c.prototype[t]=function(e,n,r){return this.request(o.merge(r||{},{method:t,url:e,data:n}))}})),t.exports=c},function(t,e,n){"use strict";var r=n(5);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},function(t,e,n){"use strict";var r=n(67);t.exports=function(t,e,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}},function(t,e,n){"use strict";t.exports=function(t,e,n,r,o){return t.config=e,n&&(t.code=n),t.request=r,t.response=o,t}},function(t,e,n){"use strict";var r=n(5);function o(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else if(r.isURLSearchParams(e))i=e.toString();else{var u=[];r.forEach(e,(function(t,e){null!=t&&(r.isArray(t)&&(e+="[]"),r.isArray(t)||(t=[t]),r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),u.push(o(e)+"="+o(t))})))})),i=u.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},function(t,e,n){"use strict";var r=n(5);t.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),(function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)})),i):i}},function(t,e,n){"use strict";var r=n(5);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=o(window.location.href),function(e){var n=r.isString(e)?o(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},function(t,e,n){"use strict";function r(){this.message="String contains an invalid character"}r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=function(t){for(var e,n,o=String(t),i="",u=0,a="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";o.charAt(0|u)||(a="=",u%1);i+=a.charAt(63&e>>8-u%1*8)){if((n=o.charCodeAt(u+=3/4))>255)throw new r;e=e<<8|n}return i}},function(t,e,n){"use strict";var r=n(5);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,o,i,u){var a=[];a.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&a.push("expires="+new Date(n).toGMTString()),r.isString(o)&&a.push("path="+o),r.isString(i)&&a.push("domain="+i),!0===u&&a.push("secure"),document.cookie=a.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,n){"use strict";var r=n(5);function o(){this.handlers=[]}o.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},o.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},o.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=o},function(t,e,n){"use strict";var r=n(5),o=n(184),i=n(68),u=n(38);function a(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return a(t),t.headers=t.headers||{},t.data=o(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||u.adapter)(t).then((function(e){return a(t),e.data=o(e.data,e.headers,t.transformResponse),e}),(function(e){return i(e)||(a(t),e&&e.response&&(e.response.data=o(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,n){"use strict";var r=n(5);t.exports=function(t,e,n){return r.forEach(n,(function(n){t=n(t,e)})),t}},function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,n){"use strict";var r=n(69);function o(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var t;return{token:new o((function(e){t=e})),cancel:t}},t.exports=o},function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e){(function(e){t.exports=e}).call(this,{})},function(t,e,n){var r=n(191),o=n(248),i=n(85);t.exports=function(t){var e=o(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},function(t,e,n){var r=n(72),o=n(76);t.exports=function(t,e,n,i){var u=n.length,a=u,s=!i;if(null==t)return!a;for(t=Object(t);u--;){var c=n[u];if(s&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++u<a;){var f=(c=n[u])[0],l=t[f],p=c[1];if(s&&c[2]){if(void 0===l&&!(f in t))return!1}else{var h=new r;if(i)var d=i(l,p,f,t,e,h);if(!(void 0===d?o(p,l,3,i,h):d))return!1}}return!0}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(24),o=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():o.call(e,n,1),--this.size,!0)}},function(t,e,n){var r=n(24);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(24);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(24);t.exports=function(t,e){var n=this.__data__,o=r(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}},function(t,e,n){var r=n(23);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(23),o=n(40),i=n(41);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var u=n.__data__;if(!o||u.length<199)return u.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(u)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(73),o=n(205),i=n(3),u=n(75),a=/^\[object .+?Constructor\]$/,s=Function.prototype,c=Object.prototype,f=s.toString,l=c.hasOwnProperty,p=RegExp("^"+f.call(l).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||o(t))&&(r(t)?p:a).test(u(t))}},function(t,e,n){var r=n(25),o=Object.prototype,i=o.hasOwnProperty,u=o.toString,a=r?r.toStringTag:void 0;t.exports=function(t){var e=i.call(t,a),n=t[a];try{t[a]=void 0;var r=!0}catch(t){}var o=u.call(t);return r&&(e?t[a]=n:delete t[a]),o}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r,o=n(206),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!i&&i in t}},function(t,e,n){var r=n(4)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(209),o=n(23),i=n(40);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},function(t,e,n){var r=n(210),o=n(211),i=n(212),u=n(213),a=n(214);function s(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=i,s.prototype.has=u,s.prototype.set=a,t.exports=s},function(t,e,n){var r=n(26);t.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},function(t,e,n){var r=n(26),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(e,t)?e[t]:void 0}},function(t,e,n){var r=n(26),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:o.call(e,t)}},function(t,e,n){var r=n(26);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},function(t,e,n){var r=n(27);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},function(t,e,n){var r=n(27);t.exports=function(t){return r(this,t).get(t)}},function(t,e,n){var r=n(27);t.exports=function(t){return r(this,t).has(t)}},function(t,e,n){var r=n(27);t.exports=function(t,e){var n=r(this,t),o=n.size;return n.set(t,e),this.size+=n.size==o?0:1,this}},function(t,e,n){var r=n(72),o=n(77),i=n(226),u=n(230),a=n(82),s=n(2),c=n(44),f=n(45),l="[object Object]",p=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,h,d,v){var y=s(t),g=s(e),b=y?"[object Array]":a(t),m=g?"[object Array]":a(e),x=(b="[object Arguments]"==b?l:b)==l,w=(m="[object Arguments]"==m?l:m)==l,_=b==m;if(_&&c(t)){if(!c(e))return!1;y=!0,x=!1}if(_&&!x)return v||(v=new r),y||f(t)?o(t,e,n,h,d,v):i(t,e,b,n,h,d,v);if(!(1&n)){var O=x&&p.call(t,"__wrapped__"),A=w&&p.call(e,"__wrapped__");if(O||A){var N=O?t.value():t,S=A?e.value():e;return v||(v=new r),d(N,S,n,h,v)}}return!!_&&(v||(v=new r),u(t,e,n,h,d,v))}},function(t,e,n){var r=n(41),o=n(222),i=n(223);function u(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<n;)this.add(t[e])}u.prototype.add=u.prototype.push=o,u.prototype.has=i,t.exports=u},function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}},function(t,e){t.exports=function(t,e){return t.has(e)}},function(t,e,n){var r=n(25),o=n(227),i=n(39),u=n(77),a=n(228),s=n(229),c=r?r.prototype:void 0,f=c?c.valueOf:void 0;t.exports=function(t,e,n,r,c,l,p){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!l(new o(t),new o(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var h=a;case"[object Set]":var d=1&r;if(h||(h=s),t.size!=e.size&&!d)return!1;var v=p.get(t);if(v)return v==e;r|=2,p.set(t,e);var y=u(h(t),h(e),r,c,l,p);return p.delete(t),y;case"[object Symbol]":if(f)return f.call(t)==f.call(e)}return!1}},function(t,e,n){var r=n(4).Uint8Array;t.exports=r},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},function(t,e,n){var r=n(231),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,i,u,a){var s=1&n,c=r(t),f=c.length;if(f!=r(e).length&&!s)return!1;for(var l=f;l--;){var p=c[l];if(!(s?p in e:o.call(e,p)))return!1}var h=a.get(t),d=a.get(e);if(h&&d)return h==e&&d==t;var v=!0;a.set(t,e),a.set(e,t);for(var y=s;++l<f;){var g=t[p=c[l]],b=e[p];if(i)var m=s?i(b,g,p,e,t,a):i(g,b,p,t,e,a);if(!(void 0===m?g===b||u(g,b,n,i,a):m)){v=!1;break}y||(y="constructor"==p)}if(v&&!y){var x=t.constructor,w=e.constructor;x==w||!("constructor"in t)||!("constructor"in e)||"function"==typeof x&&x instanceof x&&"function"==typeof w&&w instanceof w||(v=!1)}return a.delete(t),a.delete(e),v}},function(t,e,n){var r=n(232),o=n(234),i=n(42);t.exports=function(t){return r(t,i,o)}},function(t,e,n){var r=n(233),o=n(2);t.exports=function(t,e,n){var i=e(t);return o(t)?i:r(i,n(t))}},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,o=t.length;++n<r;)t[o+n]=e[n];return t}},function(t,e,n){var r=n(78),o=n(235),i=Object.prototype.propertyIsEnumerable,u=Object.getOwnPropertySymbols,a=u?function(t){return null==t?[]:(t=Object(t),r(u(t),(function(e){return i.call(t,e)})))}:o;t.exports=a},function(t,e){t.exports=function(){return[]}},function(t,e,n){var r=n(237),o=n(43),i=n(2),u=n(44),a=n(28),s=n(45),c=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=i(t),f=!n&&o(t),l=!n&&!f&&u(t),p=!n&&!f&&!l&&s(t),h=n||f||l||p,d=h?r(t.length,String):[],v=d.length;for(var y in t)!e&&!c.call(t,y)||h&&("length"==y||l&&("offset"==y||"parent"==y)||p&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||a(y,v))||d.push(y);return d}},function(t,e){t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},function(t,e,n){var r=n(11),o=n(8);t.exports=function(t){return o(t)&&"[object Arguments]"==r(t)}},function(t,e){t.exports=function(){return!1}},function(t,e,n){var r=n(11),o=n(46),i=n(8),u={};u["[object Float32Array]"]=u["[object Float64Array]"]=u["[object Int8Array]"]=u["[object Int16Array]"]=u["[object Int32Array]"]=u["[object Uint8Array]"]=u["[object Uint8ClampedArray]"]=u["[object Uint16Array]"]=u["[object Uint32Array]"]=!0,u["[object Arguments]"]=u["[object Array]"]=u["[object ArrayBuffer]"]=u["[object Boolean]"]=u["[object DataView]"]=u["[object Date]"]=u["[object Error]"]=u["[object Function]"]=u["[object Map]"]=u["[object Number]"]=u["[object Object]"]=u["[object RegExp]"]=u["[object Set]"]=u["[object String]"]=u["[object WeakMap]"]=!1,t.exports=function(t){return i(t)&&o(t.length)&&!!u[r(t)]}},function(t,e){t.exports=function(t){return function(e){return t(e)}}},function(t,e,n){(function(t){var r=n(74),o=e&&!e.nodeType&&e,i=o&&"object"==typeof t&&t&&!t.nodeType&&t,u=i&&i.exports===o&&r.process,a=function(){try{var t=i&&i.require&&i.require("util").types;return t||u&&u.binding&&u.binding("util")}catch(t){}}();t.exports=a}).call(this,n(79)(t))},function(t,e,n){var r=n(244)(Object.keys,Object);t.exports=r},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){var r=n(7)(n(4),"DataView");t.exports=r},function(t,e,n){var r=n(7)(n(4),"Promise");t.exports=r},function(t,e,n){var r=n(7)(n(4),"Set");t.exports=r},function(t,e,n){var r=n(84),o=n(42);t.exports=function(t){for(var e=o(t),n=e.length;n--;){var i=e[n],u=t[i];e[n]=[i,u,r(u)]}return e}},function(t,e,n){var r=n(76),o=n(250),i=n(255),u=n(47),a=n(84),s=n(85),c=n(30);t.exports=function(t,e){return u(t)&&a(e)?s(c(t),e):function(n){var u=o(n,t);return void 0===u&&u===e?i(n,t):r(e,u,3)}}},function(t,e,n){var r=n(86);t.exports=function(t,e,n){var o=null==t?void 0:r(t,e);return void 0===o?n:o}},function(t,e,n){var r=n(252),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,u=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(o,(function(t,n,r,o){e.push(r?o.replace(i,"$1"):n||t)})),e}));t.exports=u},function(t,e,n){var r=n(253);t.exports=function(t){var e=r(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},function(t,e,n){var r=n(41);function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var u=t.apply(this,r);return n.cache=i.set(o,u)||i,u};return n.cache=new(o.Cache||r),n}o.Cache=r,t.exports=o},function(t,e,n){var r=n(25),o=n(70),i=n(2),u=n(29),a=r?r.prototype:void 0,s=a?a.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(i(e))return o(e,t)+"";if(u(e))return s?s.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},function(t,e,n){var r=n(256),o=n(257);t.exports=function(t,e){return null!=t&&o(t,e,r)}},function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},function(t,e,n){var r=n(87),o=n(43),i=n(2),u=n(28),a=n(46),s=n(30);t.exports=function(t,e,n){for(var c=-1,f=(e=r(e,t)).length,l=!1;++c<f;){var p=s(e[c]);if(!(l=null!=t&&n(t,p)))break;t=t[p]}return l||++c!=f?l:!!(f=null==t?0:t.length)&&a(f)&&u(p,f)&&(i(t)||o(t))}},function(t,e,n){var r=n(259),o=n(260),i=n(47),u=n(30);t.exports=function(t){return i(t)?r(u(t)):o(t)}},function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},function(t,e,n){var r=n(86);t.exports=function(t){return function(e){return r(e,t)}}},function(t,e,n){var r=n(89),o=n(16);t.exports=function(t,e){var n=-1,i=o(t)?Array(t.length):[];return r(t,(function(t,r,o){i[++n]=e(t,r,o)})),i}},function(t,e,n){var r=n(263),o=n(42);t.exports=function(t,e){return t&&r(t,e,o)}},function(t,e,n){var r=n(264)();t.exports=r},function(t,e){t.exports=function(t){return function(e,n,r){for(var o=-1,i=Object(e),u=r(e),a=u.length;a--;){var s=u[t?a:++o];if(!1===n(i[s],s,i))break}return e}}},function(t,e,n){var r=n(16);t.exports=function(t,e){return function(n,o){if(null==n)return n;if(!r(n))return t(n,o);for(var i=n.length,u=e?i:-1,a=Object(n);(e?u--:++u<i)&&!1!==o(a[u],u,a););return n}}},function(t,e,n){var r=n(89);t.exports=function(t,e){var n=[];return r(t,(function(t,r,o){e(t,r,o)&&n.push(t)})),n}},function(t,e){t.exports=function(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i<o;)if(e(t[i],i,t))return i;return-1}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,o=t.length;++r<o;)if(t[r]===e)return r;return-1}},function(t,e,n){var r=n(271),o=n(3),i=n(29),u=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,s=/^0o[0-7]+$/i,c=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(i(t))return NaN;if(o(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=o(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=r(t);var n=a.test(t);return n||s.test(t)?c(t.slice(2),n?2:8):u.test(t)?NaN:+t}},function(t,e,n){var r=n(272),o=/^\s+/;t.exports=function(t){return t?t.slice(0,r(t)+1).replace(o,""):t}},function(t,e){var n=/\s/;t.exports=function(t){for(var e=t.length;e--&&n.test(t.charAt(e)););return e}},function(t,e,n){var r=n(32),o=n(4);t.exports=function(t,e,n){var i=1&e,u=r(t);return function e(){var r=this&&this!==o&&this instanceof e?u:t;return r.apply(i?n:this,arguments)}}},function(t,e,n){var r=n(49),o=n(32),i=n(96),u=n(99),a=n(52),s=n(33),c=n(4);t.exports=function(t,e,n){var f=o(t);return function o(){for(var l=arguments.length,p=Array(l),h=l,d=a(o);h--;)p[h]=arguments[h];var v=l<3&&p[0]!==d&&p[l-1]!==d?[]:s(p,d);if((l-=v.length)<n)return u(t,e,i,o.placeholder,void 0,p,v,void 0,void 0,n-l);var y=this&&this!==c&&this instanceof o?f:t;return r(y,this,p)}}},function(t,e){t.exports=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}},function(t,e,n){var r=n(50),o=n(100),i=n(278),u=n(280);t.exports=function(t){var e=i(t),n=u[e];if("function"!=typeof n||!(e in r.prototype))return!1;if(t===n)return!0;var a=o(n);return!!a&&t===a[0]}},function(t,e){t.exports=function(){}},function(t,e,n){var r=n(279),o=Object.prototype.hasOwnProperty;t.exports=function(t){for(var e=t.name+"",n=r[e],i=o.call(r,e)?n.length:0;i--;){var u=n[i],a=u.func;if(null==a||a==t)return u.name}return e}},function(t,e){t.exports={}},function(t,e,n){var r=n(50),o=n(101),i=n(51),u=n(2),a=n(8),s=n(281),c=Object.prototype.hasOwnProperty;function f(t){if(a(t)&&!u(t)&&!(t instanceof r)){if(t instanceof o)return t;if(c.call(t,"__wrapped__"))return s(t)}return new o(t)}f.prototype=i.prototype,f.prototype.constructor=f,t.exports=f},function(t,e,n){var r=n(50),o=n(101),i=n(102);t.exports=function(t){if(t instanceof r)return t.clone();var e=new o(t.__wrapped__,t.__chain__);return e.__actions__=i(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}},function(t,e){var n=/\{\n\/\* \[wrapped with (.+)\] \*/,r=/,? & /;t.exports=function(t){var e=t.match(n);return e?e[1].split(r):[]}},function(t,e){var n=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;t.exports=function(t,e){var r=e.length;if(!r)return t;var o=r-1;return e[o]=(r>1?"& ":"")+e[o],e=e.join(r>2?", ":" "),t.replace(n,"{\n/* [wrapped with "+e+"] */\n")}},function(t,e,n){var r=n(285),o=n(286),i=n(31),u=o?function(t,e){return o(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:i;t.exports=u},function(t,e){t.exports=function(t){return function(){return t}}},function(t,e,n){var r=n(7),o=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=o},function(t,e,n){var r=n(288),o=n(289),i=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];t.exports=function(t,e){return r(i,(function(n){var r="_."+n[0];e&n[1]&&!o(t,r)&&t.push(r)})),t.sort()}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},function(t,e,n){var r=n(90);t.exports=function(t,e){return!!(null==t?0:t.length)&&r(t,e,0)>-1}},function(t,e,n){var r=n(102),o=n(28),i=Math.min;t.exports=function(t,e){for(var n=t.length,u=i(e.length,n),a=r(t);u--;){var s=e[u];t[u]=o(s,n)?a[s]:void 0}return t}},function(t,e,n){var r=n(49),o=n(32),i=n(4);t.exports=function(t,e,n,u){var a=1&e,s=o(t);return function e(){for(var o=-1,c=arguments.length,f=-1,l=u.length,p=Array(l+c),h=this&&this!==i&&this instanceof e?s:t;++f<l;)p[f]=u[f];for(;c--;)p[f++]=arguments[++o];return r(h,a?n:this,p)}}},function(t,e,n){var r=n(97),o=n(98),i=n(33),u=Math.min;t.exports=function(t,e){var n=t[1],a=e[1],s=n|a,c=s<131,f=128==a&&8==n||128==a&&256==n&&t[7].length<=e[8]||384==a&&e[7].length<=e[8]&&8==n;if(!c&&!f)return t;1&a&&(t[2]=e[2],s|=1&n?0:4);var l=e[3];if(l){var p=t[3];t[3]=p?r(p,l,e[4]):l,t[4]=p?i(t[3],"__lodash_placeholder__"):e[4]}return(l=e[5])&&(p=t[5],t[5]=p?o(p,l,e[6]):l,t[6]=p?i(t[5],"__lodash_placeholder__"):e[6]),(l=e[7])&&(t[7]=l),128&a&&(t[8]=null==t[8]?e[8]:u(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=s,t}},function(t,e,n){var r=n(31),o=n(294),i=n(106);t.exports=function(t,e){return i(o(t,e,r),t+"")}},function(t,e,n){var r=n(49),o=Math.max;t.exports=function(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){for(var i=arguments,u=-1,a=o(i.length-e,0),s=Array(a);++u<a;)s[u]=i[e+u];u=-1;for(var c=Array(e+1);++u<e;)c[u]=i[u];return c[e]=n(s),r(t,this,c)}}},function(t,e,n){var r=n(296),o=n(107),i=n(298),u=n(88);t.exports=function(t){return function(e){e=u(e);var n=o(e)?i(e):void 0,a=n?n[0]:e.charAt(0),s=n?r(n,1).join(""):e.slice(1);return a[t]()+s}}},function(t,e,n){var r=n(297);t.exports=function(t,e,n){var o=t.length;return n=void 0===n?o:n,!e&&n>=o?t:r(t,e,n)}},function(t,e){t.exports=function(t,e,n){var r=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var i=Array(o);++r<o;)i[r]=t[r+e];return i}},function(t,e,n){var r=n(299),o=n(107),i=n(300);t.exports=function(t){return o(t)?i(t):r(t)}},function(t,e){t.exports=function(t){return t.split("")}},function(t,e){var n="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",i="[^\\ud800-\\udfff]",u="(?:\\ud83c[\\udde6-\\uddff]){2}",a="[\\ud800-\\udbff][\\udc00-\\udfff]",s="(?:"+r+"|"+o+")"+"?",c="[\\ufe0e\\ufe0f]?"+s+("(?:\\u200d(?:"+[i,u,a].join("|")+")[\\ufe0e\\ufe0f]?"+s+")*"),f="(?:"+[i+r+"?",r,u,a,n].join("|")+")",l=RegExp(o+"(?="+o+")|"+f+c,"g");t.exports=function(t){return t.match(l)||[]}},function(t,e,n){var r=n(34);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return!1;var n=r[e];if(!n)return!1;const o=t.replace(/[\s-]/g,"");return n.filter((function(t){return!t.regex.test(o)})).map((function(t){return t.description})).length<n.length}},function(t,e,n){var r=n(34);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return{valid:!1,reasons:["License and State must be Strings"]};var n=r[e];if(!n)return{valid:!1,reasons:["Not a valid US State"]};const o=t.replace(/[\s-]/g,"");var i=n.filter((function(t){return!t.regex.test(o)})).map((function(t){return t.description}));return{valid:i.length<n.length,reasons:i}}},function(t,e,n){var r=n(34);t.exports=Object.keys(r)},function(t,e,n){var r=n(305),o=n(306),i=n(92);t.exports=function(t){return function(e,n,u){return u&&"number"!=typeof u&&o(e,n,u)&&(n=u=void 0),e=i(e),void 0===n?(n=e,e=0):n=i(n),u=void 0===u?e<n?1:-1:i(u),r(e,n,u,t)}}},function(t,e){var n=Math.ceil,r=Math.max;t.exports=function(t,e,o,i){for(var u=-1,a=r(n((e-t)/(o||1)),0),s=Array(a);a--;)s[i?a:++u]=t,t+=o;return s}},function(t,e,n){var r=n(39),o=n(16),i=n(28),u=n(3);t.exports=function(t,e,n){if(!u(n))return!1;var a=typeof e;return!!("number"==a?o(n)&&i(e,n.length):"string"==a&&e in n)&&r(n[e],t)}},function(t,e,n){"use strict";n.r(e),n.d(e,"BaseAPI",(function(){return f})),n.d(e,"colors",(function(){return r})),n.d(e,"formatDate",(function(){return F})),n.d(e,"formatEmail",(function(){return q})),n.d(e,"formatName",(function(){return W})),n.d(e,"formatPhone",(function(){return K})),n.d(e,"formatSSN",(function(){return G})),n.d(e,"formatZipcode",(function(){return Y})),n.d(e,"getRejectMessage",(function(){return X})),n.d(e,"getStatus",(function(){return J})),n.d(e,"isDate",(function(){return Q})),n.d(e,"isObject",(function(){return tt})),n.d(e,"isUrl",(function(){return et})),n.d(e,"maskName",(function(){return ot})),n.d(e,"objectToQuery",(function(){return it})),n.d(e,"prettifyDate",(function(){return vt})),n.d(e,"toRelativeDate",(function(){return ae})),n.d(e,"toRelativeFromISO",(function(){return ue})),n.d(e,"toBoolean",(function(){return Qt})),n.d(e,"Setter",(function(){return Yt})),n.d(e,"renderDetailValue",(function(){return Tt})),n.d(e,"validators",(function(){return i})),n.d(e,"legalReplace",(function(){return rt})),n.d(e,"parsePythonDate",(function(){return Z})),n.d(e,"parseQuery",(function(){return pt})),n.d(e,"pickColor",(function(){return ht})),n.d(e,"pickScoreColor",(function(){return dt})),n.d(e,"selectMasterKey",(function(){return Lt})),n.d(e,"storageMock",(function(){return Xt})),n.d(e,"toSentenceCase",(function(){return fe})),n.d(e,"toTitleCase",(function(){return le})),n.d(e,"translateStatus",(function(){return De})),n.d(e,"availableStatuses",(function(){return o})),n.d(e,"validateDriversLicense",(function(){return Pe})),n.d(e,"currentStates",(function(){return Ie})),n.d(e,"validate_ssn",(function(){return Ze})),n.d(e,"invalidFirstThree",(function(){return ze})),n.d(e,"valueExists",(function(){return jt}));var r={};n.r(r),n.d(r,"primary",(function(){return l})),n.d(r,"secondary",(function(){return p})),n.d(r,"emerald",(function(){return h})),n.d(r,"tartOrange",(function(){return d})),n.d(r,"yellowOrange",(function(){return v})),n.d(r,"slateGray",(function(){return y})),n.d(r,"cadetBlue",(function(){return g})),n.d(r,"periwinkle",(function(){return b})),n.d(r,"aliceBlue",(function(){return m})),n.d(r,"smokeWhite",(function(){return x})),n.d(r,"alert0",(function(){return w})),n.d(r,"alert1",(function(){return _})),n.d(r,"alert2",(function(){return O})),n.d(r,"alert3",(function(){return A})),n.d(r,"ceruleanBlue",(function(){return N})),n.d(r,"peach",(function(){return S})),n.d(r,"babyPink",(function(){return j})),n.d(r,"spanishPink",(function(){return E})),n.d(r,"beauBlue",(function(){return R})),n.d(r,"cultured",(function(){return T})),n.d(r,"blueBell",(function(){return L})),n.d(r,"babyBlueEyes",(function(){return $})),n.d(r,"powderBlue",(function(){return C})),n.d(r,"honeyDew",(function(){return M})),n.d(r,"buff",(function(){return D})),n.d(r,"black",(function(){return k})),n.d(r,"white",(function(){return I})),n.d(r,"noticeMuted",(function(){return P})),n.d(r,"noticeError",(function(){return U})),n.d(r,"noticeWarning",(function(){return V})),n.d(r,"noticeSuccess",(function(){return B})),n.d(r,"noticeInfo",(function(){return z}));var o={};n.r(o),n.d(o,"INITIATED",(function(){return pe})),n.d(o,"PENDING",(function(){return he})),n.d(o,"WITHDRAWN",(function(){return de})),n.d(o,"APPROVED",(function(){return ve})),n.d(o,"REJECTED",(function(){return ye})),n.d(o,"CONSENT",(function(){return ge})),n.d(o,"EMAILED",(function(){return be})),n.d(o,"REVIEW",(function(){return me})),n.d(o,"REVIEWING",(function(){return xe})),n.d(o,"CONSIDER",(function(){return we})),n.d(o,"PROCESSING",(function(){return _e})),n.d(o,"PENDING_DISPUTE",(function(){return Oe})),n.d(o,"PENDING_FIRST_NOTICE",(function(){return Ae})),n.d(o,"PENDING_SECOND_NOTICE",(function(){return Ne})),n.d(o,"FIRST_NOTICE",(function(){return Se})),n.d(o,"SECOND_NOTICE",(function(){return je})),n.d(o,"SSN_TRACE_FAILED",(function(){return Ee})),n.d(o,"MVR_FAILED",(function(){return Re})),n.d(o,"COMPLIANCE",(function(){return Te})),n.d(o,"COMPLIANCE_SO",(function(){return Le})),n.d(o,"VERIFYING",(function(){return $e})),n.d(o,"COMPLIANCEREVIEW",(function(){return Ce})),n.d(o,"STORED",(function(){return Me})),n.d(o,"default",(function(){return De}));var i={};n.r(i),n.d(i,"validateEmail",(function(){return He})),n.d(i,"validatePhone",(function(){return Ke})),n.d(i,"isAlphaNumeric",(function(){return Ge})),n.d(i,"isValidCanadianZipcode",(function(){return Ye})),n.d(i,"validateSSN",(function(){return Xe})),n.d(i,"validateCheck",(function(){return Je})),n.d(i,"containsAtSymbol",(function(){return Qe})),n.d(i,"containsNumber",(function(){return tn})),n.d(i,"validateName",(function(){return en})),n.d(i,"validateAddress",(function(){return nn})),n.d(i,"validateCustomInput",(function(){return rn})),n.d(i,"validateZipcode",(function(){return on})),n.d(i,"validateCanadianZipcode",(function(){return un})),n.d(i,"isArray",(function(){return an})),n.d(i,"validateMVRCheck",(function(){return sn})),n.d(i,"validatePhoneVerification",(function(){return cn})),n.d(i,"disable_check",(function(){return fn})),n.d(i,"validateEmailId",(function(){return ln})),n.d(i,"validateTurnId",(function(){return pn}));var u=n(108),a=n(53);function s(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function c(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var f=function(){function t(e,n){var r=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),c(this,"approveWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/approve"),e)})),c(this,"withdrawWorker",(function(t,e){return r.api.post("/partners/me/workers/".concat(t,"/withdraw"),e)})),c(this,"rejectWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/reject"),e)})),c(this,"getMember",(function(){return r.api.get("/partners/me")})),c(this,"getSettings",(function(){return r.api.get("/partners/settings")})),c(this,"getWorkers",(function(t){return r.api.get("/partners/me/workers?query=".concat(JSON.stringify(t)))})),c(this,"getPendingWorkers",(function(t){return r.api.get("/cohort/candidates?query=".concat(JSON.stringify(t)))})),c(this,"getWorker",(function(t){return r.api.get("/partners/me/workers/".concat(t,"?full=false"))})),c(this,"checkWorker",(function(t){return r.api.post("/partners/workers",t)})),c(this,"validatePhone",(function(t){return r.api.get("PhoneNumbers/".concat(t,"?Type=carrier&CountryCode=US"),null,{headers:{Authorization:"Basic ".concat(Object(a.btoa)(TWILIO_KEY))}})})),c(this,"validateEmail",(function(t){return r.api.get("/verify_email?email=".concat(encodeURIComponent(t)))})),c(this,"validateSSN",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/validate"),{ssn:e})})),c(this,"validateCandidateEmail",(function(t,e){return r.api.get("/candidate_verify_email/".concat(t,"?email=").concat(encodeURIComponent(e)))})),c(this,"getCandidateData",(function(t){return r.api.get("/candidate_consent_email/candidate/".concat(t))})),c(this,"getInterests",(function(){return r.api.get("/interests")})),c(this,"getTransports",(function(){return r.api.get("/transports")})),c(this,"getPaymetMethod",(function(){return r.api.get("/payment_settings/partner_methods")})),c(this,"getBackgroundReport",(function(t,e){return r.api.get("/candidate_consent_email/candidate/".concat(t,"/report?token=").concat(e))})),c(this,"provideCandidateConsent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t),e)})),c(this,"provideCandidateConsentAsync",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/async"),e)})),c(this,"getTrialStatus",(function(){return r.api.get("/organizations/trial_status")})),c(this,"newCandidate",(function(){return r.api.get("/organizations/new_candidate")})),c(this,"getTerms",(function(){return r.api.get("/partners/terms")})),c(this,"consent",(function(t){return r.api.post("/partners/me/consent",t)})),c(this,"apply",(function(t){var e=t.partner_name,n=t.partner_id;return r.api.post("/candidate_consent_email/".concat(e,"/").concat(n),{})})),c(this,"assent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/assent"),e)})),c(this,"getCohortCount",(function(t){return r.api.get("/cohort/count?query=".concat(JSON.stringify(t)))})),c(this,"createCohort",(function(t){return r.api.post("/cohort",t)})),c(this,"requestCohortWorkers",(function(t,e){return r.api.post("/cohort/".concat(t,"/request"),e)})),c(this,"getNotes",(function(t){return r.api.get("partners/me/workers/".concat(t,"/notes"))})),c(this,"saveNote",(function(t,e){return r.api.put("partners/me/workers/".concat(t,"/notes"),e)})),c(this,"resendEmail",(function(t){return r.api.post("partners/me/workers/".concat(t,"/email/consent/resend"))})),c(this,"postSettings",(function(t,e){return r.api.post(t,e)})),c(this,"btoaTest",(function(t){return Object(a.btoa)(t)})),e&&(this.api=Object(u.create)({baseURL:e,headers:{Accept:"application/json"}})),n&&(this.twilioKey=n)}var e,n,r;return e=t,(n=[{key:"setToken",value:function(t){return t?(this.api.setHeaders({Authorization:"Bearer ".concat(t)}),this):this}},{key:"setStatusPreference",value:function(t){return t?(this.api.setHeaders({Prefer:"status=".concat(t)}),this):this}}])&&s(e.prototype,n),r&&s(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}(),l="#2D3047",p="#00D9CD",h="#0ed067",d="#fb4d49",v="#faa73c",y="#5f7d95",g="#9bb1c8",b="#bfcddd",m="#e1e8f3",x="#f7f9fc",w=y,_=h,O=d,A=v,N="#4357ad",S="#f9cb9c",j="#f4cccc",E="#e6b8af",R="#cfe2f3",T="#e3e9ed",L="#b4a7d6",$="#9fc5e8",C="#b7ecec",M="#d9ead3",D="#ffe599",k="#000",I="#fff",P=y,U="#ff6c69",V="#faa03c",B="#13c063",z=y,Z=function(t){if(!isNaN(parseInt(t,10))){var e=new Date(1e3*t),n=e.getTime();if(n){var r=new Date(n+60*e.getTimezoneOffset()*1e3),o=e.getTimezoneOffset()/60,i=e.getHours();return r.setHours(i-o),r}}return null},F=function(t){var e=Z(t);return e?"".concat(e.getMonth()+1,"/").concat(e.getDate(),"/").concat(e.getFullYear()):"N/A"},q=function(t){return"string"!=typeof t?"":t.replace(/\s+/g,"")},W=function(t){return"string"!=typeof t?"":t.replace(/\s\s+/g," ")},H=function(t){var e=t.phone,n=t.encrypted,r=t.areaCode,o=n?"(".concat(e[0],") ").concat(e[1]," ").concat(e[2]).concat(e[3]):"(".concat(e[0],") ").concat(e[1],"-").concat(e[2]).concat(e[3]);return o=r?"".concat(r," ").concat(o):o},K=function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if("string"!=typeof t)return"N/A";var n,r=e?t:t.replace(/\D/g,"").substring(0,11);return r.length<10?r:(r.length>10&&(n=r[0],r=r.substring(1,11)),r=r.match(/.{1,3}/g),H({phone:r,encrypted:e,areaCode:n}))},G=function(t){if("string"!=typeof t)return"N/A";var e=t.replace(/\D/g,"").substring(0,9);return e.length<9?e:"".concat(e.substring(0,3),"-").concat(e.substring(3,5),"-").concat(e.substring(5,9))},Y=function(t){return"string"!=typeof t?"":t.replace(/\D/g,"").substring(0,5)},X=function(t){if(!["RISK_MANAGEMENT","FCRA_E","FCRA_N","FCRA"].includes(t))return"Reject";return{RISK_MANAGEMENT:"Reject",FCRA:"Pre-Adverse Action",FCRA_E:"Pre-Adverse Action",FCRA_N:"Adverse Action"}[t]},J=function(t){return{review:"reviewing",pending:"consider",review__identity:"verifying",review__mvr:"Compliance Review",review__so:"Compliance Review",review__qa:"Compliance Review",initiated:"Stored"}[t]||t},Q=function(t){if(isNaN(parseInt(t,10)))return!1;var e=new Date(1e3*t);return!(e>new Date)&&e.getYear()>100},tt=function(t){return!!t&&t.constructor===Object},et=function(t){return/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(t)},nt=["Turn Technologies Inc.","[COMPANY]"],rt=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if("string"!=typeof t)return"";for(var n=t,r=0;r<nt.length;r++)n=n.replace(nt[r],e);return n},ot=function(t){return"string"==typeof t&&t.length>0?"".concat(t.slice(0,1),"."):t},it=function(t){if(!tt(t))return null;var e=Object.keys(t);if(0===e.length)return null;var n=e.map((function(e){return"".concat(e,"=").concat(t[e])}));return"?".concat(n.join("&"))},ut=n(109),at=n.n(ut),st=n(110),ct=n.n(st),ft=n(6),lt=n.n(ft),pt=function(t){return lt()(t)?ct()(at()(t.slice(1).split("&"),(function(t){var e=t.split("=");return[e[0],decodeURIComponent(e[1])]}))):t},ht=function(t){switch("string"==typeof t?t.toLowerCase():t){case"first_notice":case"second_notice":case"pending":case"consider":return V;case"unverified":case"not_verified":case"fraud":case"not_matched":case"rejected":case"deceased":case"withdrawn":return U;case"verified":case"matched":case"valid":case"ready":case"complete":case"clear":case"fulfilled":case"randomized":case"approved":return B;case"processing":case"reviewing":case"review":case"consent":case"emailed":case"initiated":case"attention":case"verifying":case"review__mvr":case"review__qa":return z;case"none":default:return"gray"}},dt=function(t){var e=parseInt(t,10);return e>89?B:e>69?V:U},vt=function(t){var e=new Date(t),n=e.toUTCString().slice(8,11),r=e.toUTCString().slice(5,7),o=e.toUTCString().slice(12,16);return"".concat(n," ").concat(r,", ").concat(o)},yt=n(111),gt=n.n(yt),bt=n(3),mt=n.n(bt),xt=n(2),wt=n.n(xt),_t=n(112),Ot=n.n(_t),At=n(113),Nt=n.n(At),St=["None","none","N/A"],jt=function(t){return!!t&&(wt()(t)||mt()(t)?!Nt()(t):!(Ot()(St,t)>-1))},Et=function t(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return wt()(e)?n?e.map((function(e){return mt()(e)?Rt(e,n):t(e,n)})):e.join(" / "):mt()(e)?Rt(e,n):e},Rt=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=gt()(t,(function(t){return jt(t)}));return n.map((function(t){return Et(t,e)})).join(" / ")},Tt=Et,Lt=function(t,e){if(!Array.isArray(t)||0===t.length)return"";var n,r=t[0];jt(r[e])?n=e:n=Object.keys(r).find((function(t){return jt(r[t])}));return n},$t=n(12),Ct=n.n($t),Mt=n(54),Dt=n.n(Mt);function kt(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function It(t,e,n){return e&&kt(t.prototype,e),n&&kt(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Pt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Ut(t){return(Ut="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Vt=function(t,e,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r;Ut(o)===t&&(e[n]=o)},Bt=function(t,e,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r,i=Array.isArray(n)?n:t[n];i.includes(o)&&(t[e]=o)},zt=Ct()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Dt()(Vt,t,e,n,r)})),Zt=Ct()((function(t,e){return function(){"boolean"==typeof t[e]&&(t[e]=!t[e])}})),Ft=zt("string"),qt=zt("number"),Wt=zt("boolean"),Ht=Ct()((function(t,e,n){n&&(t[e]=n)})),Kt=Ct()((function(t,e,n){n&&(t[e]=!n)})),Gt=Ct()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Dt()(Bt,t,e,n,r)})),Yt=It((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Pt(this,"setStringFactory",Ft(this)),Pt(this,"setNumberFactory",qt(this)),Pt(this,"setBoolFactory",Wt(this)),Pt(this,"setTruthyFactory",Ht(this)),Pt(this,"setFalsyFactory",Kt(this)),Pt(this,"setOptionFactory",Gt(this)),Pt(this,"toggleBoolFactory",Zt(this))}));var Xt=function(){var t={};return{setItem:function(e,n){t[e]=n||""},getItem:function(e){return e in t?t[e]:null},removeItem:function(e){delete t[e]},get length(){return Object.keys(t).length},key:function(e){return Object.keys(t)[e]||null}}};function Jt(t){return(Jt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Qt=function(t){switch(Jt(t)){case"boolean":return t;case"string":return"true"===t.toLowerCase();case"number":return t>0;case"undefined":return!1;case"object":return!!t&&(Array.isArray(t)?t.length>0:!(0===Object.getOwnPropertyNames(t).length));default:return!1}},te=n(9),ee=n.n(te),ne=n(114),re=n.n(ne),oe=n(115),ie=n.n(oe);ee.a.extend(re.a),ee.a.extend(ie.a);var ue=function(t){if("string"!=typeof t)return"N/A";var e=ee()(t);if(!e.isValid())return"N/A";var n=ee()().utcOffset(e.utcOffset());return n.diff(e,"day")<8?e.from(n):e.format("M/DD/YYYY")},ae=function(t){if("number"!=typeof t)return"N/A";var e=Z(t);if(!e)return"N/A";var n=ee()(e),r=ee()().utcOffset(e.getTimezoneOffset()).subtract(e.getTimezoneOffset()/60,"hour");return r.diff(n,"day")<8?n.from(r):n.format("M/DD/YYYY")},se=n(116),ce=n.n(se),fe=function(t){var e=t.toLowerCase();return[". ","! ","? "].forEach((function(t){e=e.split(t).map(ce.a).join(t)})),e},le=function(t){return("string"==typeof t?t:String(t)).toLowerCase().split(" ").map((function(t){var e=t.charAt(0).toUpperCase(),n=t.slice(1);return"".concat(e).concat(n)})).join(" ")},pe="initiated",he="pending",de="withdrawn",ve="approved",ye="rejected",ge="consent",be="emailed",me="review",xe="reviewing",we="consider",_e="processing",Oe="pending__dispute",Ae="pending__first_notice",Ne="pending__second_notice",Se="first_notice",je="second_notice",Ee="review__identity",Re="review__mvr",Te="review__qa",Le="review__so",$e="verifying",Ce="Compliance Review",Me="Stored",De=function(t,e){switch(t){case ve:return ve;case he:case Oe:return he;case ye:return ye;case Ae:return e?Se:ye;case Ne:return e?je:ye;case ge:return ge;case _e:return _e;case be:return be;case me:return me;case xe:return xe;case de:return de;case pe:return Me;case Ee:return $e;case Re:case Te:case Le:return Ce;default:return he}},ke=n(55),Ie=Object.keys(ke.driversLicenseRegex),Pe=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"string"!=typeof t||"string"!=typeof e?{valid:!1,reasons:"License and State must be Strings"}:Ie.includes(e)?Object(ke.validateUSDriversLicense)(t,e):{valid:!0,reasons:""}},Ue=n(117),Ve=/^(986|(?!000|666|123456789|(\d)\2{8})[0-8][0-9]{2})(?!00)[0-9]{2}(?!0000)[0-9]{4}$/,Be=/^078051120|219099999$/,ze=n.n(Ue)()(900,1e3).map((function(t){return"".concat(t)})).concat(["000","666"]),Ze=function(t){if("string"!=typeof t)return!1;var e=t.replace(/\D/g,"");return!Be.test(e)&&Ve.test(e)},Fe=n(56);function qe(t){return function(t){if(Array.isArray(t))return We(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return We(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return We(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function We(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}var He=function(t){if(!t)return!1;return/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/.test(t)},Ke=function(t){if(!t)return!1;return/^1?\s?\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/.test(t)},Ge=function(t){return null!==t.match(/^([a-z0-9])+/i)},Ye=function(t){return null!==t.match(/^[A-Za-z]\d[A-Za-z]$/)||null!==t.match(/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d/)},Xe=function(t){return"string"==typeof t&&9===t.replace(/\D/g,"").length},Je=function(t){var e="clear"===t?[]:t;return Array.isArray(e)||Object(Fe.a)(e)?qe(e):null},Qe=function(t){return/@/.test(t)},tn=function(t){return/\d/.test(t)},en=function(t){return 0!==t.trim().length&&!Qe(t)&&!tn(t)},nn=function(t){return 0!==t.trim().length&&!Qe(t)},rn=function(t){return!!lt()(t)&&0!==t.trim().length},on=function(t){return lt()(t)&&t.length>=5},un=function(t){return lt()(t)&&Ge(t)&&Ye(t)},an=function(t){return Array.isArray(t)||Object(Fe.a)(t)},sn=function(t){return mt()(t)||"string"==typeof t?t:{}},cn=function(t){switch(t){case"verified":case"True":return"verified";case"unverified":case"False":return"unverified";default:return""}},fn=function(t){return"string"==typeof t&&"true"===t.toLowerCase()},ln=function(t){return lt()(t)&&32===t.length},pn=function(t){return lt()(t)&&/^C{1}[0-9]{10}$/.test(t)}}])}));
23
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90dXJuLXNoYXJlZC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jdXJyeTIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jdXJyeTEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc09iamVjdExpa2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvZGF5anMvZGF5anMubWluLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fYXJpdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9jdXJyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2hhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2N1cnJ5My5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvY3VycnlOLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5TGlrZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faXNQbGFjZWhvbGRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX3JlZHVjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL21hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvS2V5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN0b3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yZXBsYWNlSG9sZGVycy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9AdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZS9zcmMvbGljZW5zZS1yZWdleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMva2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcmVkdWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fY2hlY2tGb3JNZXRob2QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9lcS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xhenlXcmFwcGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUxvZGFzaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEhvbGRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9CYXNlNjQvYmFzZTY0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9wYXJ0aWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9tb2J4L2xpYi9tb2J4Lm1vZHVsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZXF1YWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jb25jYXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcHJvcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvYWx3YXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvbWF4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlNYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXRlcmF0ZWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b1NvdXJjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUZpbHRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VGFnLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUluZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3RvSW50ZWdlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVXcmFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVNldERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tZXRhTWFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlSHlicmlkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29tcG9zZUFyZ3MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJnc1JpZ2h0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUmVjdXJyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldERhdGEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19Mb2Rhc2hXcmFwcGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29weUFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0RGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Nob3J0T3V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0V3JhcFRvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNVbmljb2RlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2FwaXNhdWNlL2Rpc3QvYXBpc2F1Y2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL21hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZnJvbVBhaXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2luZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRW1wdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL3JlbGF0aXZlVGltZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9kYXlqcy9wbHVnaW4vdXRjLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC91cHBlckZpcnN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9yYW5nZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy90aW1lcnMtYnJvd3NlcmlmeS9tYWluLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3NldGltbWVkaWF0ZS9zZXRJbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL19fLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9jb250YWlucy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2NvbnRhaW5zLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faW5kZXhPZi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2VxdWFscy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2FycmF5RnJvbUl0ZXJhdG9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fZnVuY3Rpb25OYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pZGVudGljYWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3R5cGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3BhcnRpYWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jcmVhdGVQYXJ0aWFsQXBwbGljYXRvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcGlwZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX3BpcGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL194d3JhcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvYmluZC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3RhaWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3NsaWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9mb3JFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9kaXNzb2MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL21lcmdlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fYXNzaWduLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fb2JqZWN0QXNzaWduLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pZkVsc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jdXJyeU4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3Byb3BTYXRpc2ZpZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3Byb3BJcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9jb21wbGVtZW50LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9saWZ0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9saWZ0Ti5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19kaXNwYXRjaGFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19pc1RyYW5zZm9ybWVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fbWFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9feG1hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX3hmQmFzZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvbm90LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pc0VtcHR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9lbXB0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2lzT2JqZWN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9hbnlQYXNzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9wbHVjay5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZ3RlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9jdXJyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvVC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaXNOaWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2NvbmQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2lzLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9BeGlvcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9lbmhhbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzVVJMU2FtZU9yaWdpbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idG9hLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2Rpc3BhdGNoUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQWJzb2x1dGVVUkwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvKHdlYnBhY2spL2J1aWxkaW4vYW1kLW9wdGlvbnMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hdGNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVEZWxldGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVTZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0NsZWFyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tEZWxldGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0dldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrSGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tTZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYXRpdmUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTWFza2VkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVDbGVhci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoRGVsZXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoU2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUdldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbERlZXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldENhY2hlQWRkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsQnlUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbE9iamVjdHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUdldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUxpa2VLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hdGNoRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2dldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2hhc0luLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUhhc0luLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzUGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3JPd24uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRm9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmFzZUZvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJhc2VFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbHRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGaW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNOYU4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpY3RJbmRleE9mLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b051bWJlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUcmltLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdHJpbW1lZEVuZEluZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlQmluZC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUN1cnJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY291bnRIb2xkZXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNMYXppYWJsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvbm9vcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEZ1bmNOYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVhbE5hbWVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC93cmFwcGVyTG9kYXNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fd3JhcHBlckNsb25lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0V3JhcERldGFpbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pbnNlcnRXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvY29uc3RhbnQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3VwZGF0ZVdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlJbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jlb3JkZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVQYXJ0aWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWVyZ2VEYXRhLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVJlc3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyUmVzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUNhc2VGaXJzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RTbGljZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VTbGljZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hc2NpaVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL191bmljb2RlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9AdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZS9zcmMvaXMtdmFsaWQtdXMtbGljZW5zZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9AdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZS9zcmMvdmFsaWRhdGUtZHJpdmVycy1saWNlbnNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy9zdXBwb3J0ZWQtc3RhdGVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUmFuZ2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUmFuZ2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0l0ZXJhdGVlQ2FsbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy9zZXJ2aWNlcy9hcGkvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvc3R5bGVzL2NvbnN0YW50cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9wYXJzZS1weXRob24tZGF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtZGF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtZW1haWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LW5hbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LXBob25lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC1zc24uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LXppcGNvZGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZ2V0LXJlamVjdC1tZXNzYWdlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2dldC1zdGF0dXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvaXMtZGF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvaXMtdXJsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2xlZ2FsLXJlcGxhY2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvbWFzay1uYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL29iamVjdC10by1xdWVyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9wYXJzZVF1ZXJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3BpY2stY29sb3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcGljay1zY29yZS1jb2xvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9wcmV0dGlmeS1kYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3ZhbHVlLWV4aXN0cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9yZW5kZXItZGV0YWlsLXZhbHVlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3NlbGVjdC1tYXN0ZXIta2V5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3NldHRlcnMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvc3RvcmFnZS1tb2NrLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3RvLWJvb2xlYW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdG8tcmVsYXRpdmUtZGF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy90by1zZW50ZW5jZS1jYXNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3RvLXRpdGxlLWNhc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdHJhbnNsYXRlLXN0YXR1cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy92YWxpZGF0ZS1kcml2ZXJzLWxpY2Vuc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdmFsaWRhdGUtc3NuLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3ZhbGlkYXRvcnMuanMiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsInRoaXMiLCJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiX2N1cnJ5MSIsIl9pc1BsYWNlaG9sZGVyIiwiZm4iLCJmMiIsImEiLCJiIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiX2IiLCJfYSIsImYxIiwiYXBwbHkiLCJpc0FycmF5IiwiQXJyYXkiLCJ0eXBlIiwiZnJlZUdsb2JhbCIsImZyZWVTZWxmIiwiRnVuY3Rpb24iLCJpc0J1ZmZlciIsInRvU3RyaW5nIiwidmFsIiwiaXNPYmplY3QiLCJpc0Z1bmN0aW9uIiwiZm9yRWFjaCIsIm9iaiIsImlzQXJyYXlCdWZmZXIiLCJpc0Zvcm1EYXRhIiwiRm9ybURhdGEiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiYnVmZmVyIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzVW5kZWZpbmVkIiwiaXNEYXRlIiwiaXNGaWxlIiwiaXNCbG9iIiwiaXNTdHJlYW0iLCJwaXBlIiwiaXNVUkxTZWFyY2hQYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJpc1N0YW5kYXJkQnJvd3NlckVudiIsIm5hdmlnYXRvciIsInByb2R1Y3QiLCJ3aW5kb3ciLCJkb2N1bWVudCIsIm1lcmdlIiwicmVzdWx0IiwiYXNzaWduVmFsdWUiLCJleHRlbmQiLCJ0aGlzQXJnIiwidHJpbSIsInN0ciIsInJlcGxhY2UiLCJiYXNlR2V0VGFnIiwiaXNPYmplY3RMaWtlIiwiYmFzZUlzTmF0aXZlIiwiZ2V0VmFsdWUiLCJ1bmRlZmluZWQiLCJlIiwidSIsImYiLCJoIiwiJCIsInkiLCJNIiwid2Vla2RheXMiLCJzcGxpdCIsIm1vbnRocyIsIm9yZGluYWwiLCJTdHJpbmciLCJqb2luIiwidiIsInoiLCJ1dGNPZmZzZXQiLCJNYXRoIiwiYWJzIiwiZmxvb3IiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwiY2xvbmUiLCJhZGQiLCJjZWlsIiwidyIsIkQiLCJtcyIsIlEiLCJ0b0xvd2VyQ2FzZSIsImciLCJTIiwiXyIsIk8iLCJhcmdzIiwibG9jYWxlIiwiJEwiLCJ1dGMiLCIkdSIsIngiLCIkeCIsIiRvZmZzZXQiLCJwYXJzZSIsIiRkIiwiRGF0ZSIsIk5hTiIsInRlc3QiLCJtYXRjaCIsInN1YnN0cmluZyIsIlVUQyIsImluaXQiLCIkeSIsImdldEZ1bGxZZWFyIiwiJE0iLCJnZXRNb250aCIsIiREIiwiZ2V0RGF0ZSIsIiRXIiwiZ2V0RGF5IiwiJEgiLCJnZXRIb3VycyIsIiRtIiwiZ2V0TWludXRlcyIsIiRzIiwiZ2V0U2Vjb25kcyIsIiRtcyIsImdldE1pbGxpc2Vjb25kcyIsIiR1dGlscyIsImlzVmFsaWQiLCJpc1NhbWUiLCJzdGFydE9mIiwiZW5kT2YiLCJpc0FmdGVyIiwiaXNCZWZvcmUiLCIkZyIsInNldCIsInVuaXgiLCJ2YWx1ZU9mIiwiZ2V0VGltZSIsInRvRGF0ZSIsInNsaWNlIiwiJGxvY2FsZSIsIndlZWtTdGFydCIsIiRzZXQiLCJtaW4iLCJkYXlzSW5Nb250aCIsIk51bWJlciIsInJvdW5kIiwic3VidHJhY3QiLCJmb3JtYXQiLCJpbnZhbGlkRGF0ZSIsIm1lcmlkaWVtIiwibW9udGhzU2hvcnQiLCJ3ZWVrZGF5c01pbiIsIndlZWtkYXlzU2hvcnQiLCJnZXRUaW1lem9uZU9mZnNldCIsImRpZmYiLCJ0b0pTT04iLCJ0b0lTT1N0cmluZyIsInRvVVRDU3RyaW5nIiwiayIsIiRpIiwiaXNEYXlqcyIsImVuIiwiTHMiLCJhMCIsImExIiwiYTIiLCJhMyIsImE0IiwiYTUiLCJhNiIsImE3IiwiYTgiLCJhOSIsIkVycm9yIiwiZ2V0UmF3VGFnIiwib2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImNyZWF0ZVdyYXAiLCJjdXJyeSIsImZ1bmMiLCJhcml0eSIsImd1YXJkIiwicGxhY2Vob2xkZXIiLCJwcm9wIiwiX2N1cnJ5MiIsImYzIiwiX2MiLCJfYXJpdHkiLCJfY3VycnlOIiwiaXNMZW5ndGgiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwicHJvY2VzcyIsImRlZmF1bHRTZXRUaW1vdXQiLCJkZWZhdWx0Q2xlYXJUaW1lb3V0IiwicnVuVGltZW91dCIsImZ1biIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJjdXJyZW50UXVldWUiLCJxdWV1ZSIsImRyYWluaW5nIiwicXVldWVJbmRleCIsImNsZWFuVXBOZXh0VGljayIsImNvbmNhdCIsImRyYWluUXVldWUiLCJ0aW1lb3V0IiwibGVuIiwicnVuIiwibWFya2VyIiwicnVuQ2xlYXJUaW1lb3V0IiwiSXRlbSIsImFycmF5Iiwibm9vcCIsIm5leHRUaWNrIiwicHVzaCIsInRpdGxlIiwiYnJvd3NlciIsImVudiIsImFyZ3YiLCJ2ZXJzaW9uIiwidmVyc2lvbnMiLCJvbiIsImFkZExpc3RlbmVyIiwib25jZSIsIm9mZiIsInJlbW92ZUxpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZW1pdCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJiaW5kaW5nIiwiY3dkIiwiY2hkaXIiLCJkaXIiLCJ1bWFzayIsIl94d3JhcCIsImlzQXJyYXlMaWtlIiwiX2l0ZXJhYmxlUmVkdWNlIiwieGYiLCJhY2MiLCJpdGVyIiwic3RlcCIsIm5leHQiLCJkb25lIiwic3ltSXRlcmF0b3IiLCJpdGVyYXRvciIsImxpc3QiLCJpZHgiLCJfYXJyYXlSZWR1Y2UiLCJyZWR1Y2UiLCJfbWV0aG9kUmVkdWNlIiwiVHlwZUVycm9yIiwiX2Rpc3BhdGNoYWJsZSIsIl9tYXAiLCJfcmVkdWNlIiwiX3htYXAiLCJjdXJyeU4iLCJrZXlzIiwiZnVuY3RvciIsImxpc3RDYWNoZUNsZWFyIiwibGlzdENhY2hlRGVsZXRlIiwibGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwibGlzdENhY2hlU2V0IiwiTGlzdENhY2hlIiwiZW50cmllcyIsImluZGV4IiwiY2xlYXIiLCJlbnRyeSIsImhhcyIsImVxIiwibmF0aXZlQ3JlYXRlIiwiZ2V0TmF0aXZlIiwiaXNLZXlhYmxlIiwibWFwIiwiZGF0YSIsIl9fZGF0YV9fIiwicmVJc1VpbnQiLCJpc1N5bWJvbCIsImJhc2VDcmVhdGUiLCJDdG9yIiwidGhpc0JpbmRpbmciLCJyZXNJbmRleCIsIkFMIiwicmVnZXgiLCJkZXNjcmlwdGlvbiIsIkFLIiwiQVoiLCJBUiIsIkNBIiwiQ08iLCJDVCIsIkRFIiwiREMiLCJGTCIsIkdBIiwiR1UiLCJISSIsIklEIiwiSUwiLCJJTiIsIklBIiwiS1MiLCJLWSIsIkxBIiwiTUUiLCJNRCIsIk1BIiwiTUkiLCJNTiIsIk1TIiwiTU8iLCJNVCIsIk5FIiwiTlYiLCJOSCIsIk5KIiwiTk0iLCJOWSIsIk5DIiwiTkQiLCJPSCIsIk9LIiwiT1IiLCJQQSIsIlJJIiwiU0MiLCJTRCIsIlROIiwiVFgiLCJVVCIsIlZUIiwiVkEiLCJWSSIsIldBIiwiV1YiLCJXSSIsIldZIiwiUFIiLCJoYXNFbnVtQnVnIiwibm9uRW51bWVyYWJsZVByb3BzIiwiaGFzQXJnc0VudW1CdWciLCJjb250YWlucyIsIl9oYXMiLCJfaXNBcmd1bWVudHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIml0ZW0iLCJuSWR4Iiwia3MiLCJjaGVja0FyZ3NMZW5ndGgiLCJfY3VycnkzIiwiX2lzQXJyYXkiLCJtZXRob2RuYW1lIiwidXRpbHMiLCJub3JtYWxpemVIZWFkZXJOYW1lIiwiREVGQVVMVF9DT05URU5UX1RZUEUiLCJzZXRDb250ZW50VHlwZUlmVW5zZXQiLCJoZWFkZXJzIiwiYWRhcHRlciIsImRlZmF1bHRzIiwiWE1MSHR0cFJlcXVlc3QiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiSlNPTiIsInN0cmluZ2lmeSIsInRyYW5zZm9ybVJlc3BvbnNlIiwieHNyZkNvb2tpZU5hbWUiLCJ4c3JmSGVhZGVyTmFtZSIsIm1heENvbnRlbnRMZW5ndGgiLCJ2YWxpZGF0ZVN0YXR1cyIsInN0YXR1cyIsImNvbW1vbiIsIm1ldGhvZCIsIm90aGVyIiwiTWFwIiwibWFwQ2FjaGVDbGVhciIsIm1hcENhY2hlRGVsZXRlIiwibWFwQ2FjaGVHZXQiLCJtYXBDYWNoZUhhcyIsIm1hcENhY2hlU2V0IiwiTWFwQ2FjaGUiLCJhcnJheUxpa2VLZXlzIiwiYmFzZUtleXMiLCJiYXNlSXNBcmd1bWVudHMiLCJvYmplY3RQcm90byIsImlzQXJndW1lbnRzIiwic3R1YkZhbHNlIiwiZnJlZUV4cG9ydHMiLCJub2RlVHlwZSIsImZyZWVNb2R1bGUiLCJCdWZmZXIiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwicmVJc0RlZXBQcm9wIiwicmVJc1BsYWluUHJvcCIsIm9iamVjdENyZWF0ZSIsInByb3RvIiwiYmFzZUxvZGFzaCIsIkxhenlXcmFwcGVyIiwiX193cmFwcGVkX18iLCJfX2FjdGlvbnNfXyIsIl9fZGlyX18iLCJfX2ZpbHRlcmVkX18iLCJfX2l0ZXJhdGVlc19fIiwiX190YWtlQ291bnRfXyIsIl9fdmlld3NfXyIsImNvbnN0cnVjdG9yIiwiYmFzZTY0IiwiZ2xvYmFsIiwiYnRvYSIsImF0b2IiLCJjaGFycyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsIm1lc3NhZ2UiLCJpbnB1dCIsImJsb2NrIiwiY2hhckNvZGUiLCJvdXRwdXQiLCJjaGFyQXQiLCJjaGFyQ29kZUF0IiwiYnMiLCJiYyIsImZyb21DaGFyQ29kZSIsImluZGV4T2YiLCJiYXNlUmVzdCIsImdldEhvbGRlciIsInJlcGxhY2VIb2xkZXJzIiwicGFydGlhbCIsInBhcnRpYWxzIiwiaG9sZGVycyIsImRyaXZlcnNMaWNlbnNlUmVnZXgiLCJpc1ZhbGlkVVNMaWNlbnNlIiwidmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlIiwic3VwcG9ydGVkU3RhdGVzIiwiRU1QVFlfQVJSQVkiLCJmcmVlemUiLCJFTVBUWV9PQkpFQ1QiLCJnZXROZXh0SWQiLCJnbG9iYWxTdGF0ZSIsIm1vYnhHdWlkIiwiZmFpbCIsImludmFyaWFudCIsImNoZWNrIiwiaW52b2tlZCIsImlzUGxhaW5PYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsImFkZEhpZGRlblByb3AiLCJwcm9wTmFtZSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZSIsImNsYXp6IiwiaXNFUzZNYXAiLCJ0aGluZyIsImlzRVM2U2V0IiwiU2V0IiwiZ2V0UGxhaW5PYmplY3RLZXlzIiwiZW51bWVyYWJsZXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJmcm9tIiwic3RyaW5naWZ5S2V5IiwidG9QcmltaXRpdmUiLCJvd25LZXlzIiwiUmVmbGVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCIkbW9ieCIsIkF0b20iLCJpc1BlbmRpbmdVbm9ic2VydmF0aW9uIiwiaXNCZWluZ09ic2VydmVkIiwib2JzZXJ2ZXJzIiwiZGlmZlZhbHVlIiwibGFzdEFjY2Vzc2VkQnkiLCJsb3dlc3RPYnNlcnZlclN0YXRlIiwiSURlcml2YXRpb25TdGF0ZSIsIk5PVF9UUkFDS0lORyIsIm9uQmVjb21lT2JzZXJ2ZWQiLCJvbkJlY29tZU9ic2VydmVkTGlzdGVuZXJzIiwibGlzdGVuZXIiLCJvbkJlY29tZVVub2JzZXJ2ZWQiLCJvbkJlY29tZVVub2JzZXJ2ZWRMaXN0ZW5lcnMiLCJyZXBvcnRPYnNlcnZlZCIsInJlcG9ydENoYW5nZWQiLCJzdGFydEJhdGNoIiwib2JzZXJ2YWJsZSIsIlNUQUxFIiwiZGVwZW5kZW5jaWVzU3RhdGUiLCJVUF9UT19EQVRFIiwiaXNUcmFjaW5nIiwiVHJhY2VNb2RlIiwiTk9ORSIsImxvZ1RyYWNlSW5mbyIsIm9uQmVjb21lU3RhbGUiLCJwcm9wYWdhdGVDaGFuZ2VkIiwiZW5kQmF0Y2giLCJpc0F0b20iLCJjcmVhdGVBdG9tIiwib25CZWNvbWVPYnNlcnZlZEhhbmRsZXIiLCJvbkJlY29tZVVub2JzZXJ2ZWRIYW5kbGVyIiwiYXJnMyIsImF0b20iLCJpbnRlcmNlcHRIb29rIiwiY29tcGFyZXIiLCJpZGVudGl0eSIsInN0cnVjdHVyYWwiLCJkZWVwRXF1YWwiLCJkZWZhdWx0IiwiaXMiLCJzaGFsbG93IiwiZXh0ZW5kU3RhdGljcyIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJfX3ZhbHVlcyIsIl9fcmVhZCIsImFyIiwiZXJyb3IiLCJfX3NwcmVhZCIsIm1vYnhEaWRSdW5MYXp5SW5pdGlhbGl6ZXJzU3ltYm9sIiwibW9ieFBlbmRpbmdEZWNvcmF0b3JzIiwiZW51bWVyYWJsZURlc2NyaXB0b3JDYWNoZSIsIm5vbkVudW1lcmFibGVEZXNjcmlwdG9yQ2FjaGUiLCJjcmVhdGVQcm9wZXJ0eUluaXRpYWxpemVyRGVzY3JpcHRvciIsImNhY2hlIiwiaW5pdGlhbGl6ZUluc3RhbmNlIiwidGFyZ2V0IiwiZV8xIiwiZGVjb3JhdG9ycyIsImtleXNfMSIsImtleXNfMV8xIiwicHJvcGVydHlDcmVhdG9yIiwiZGVzY3JpcHRvciIsImRlY29yYXRvclRhcmdldCIsImRlY29yYXRvckFyZ3VtZW50cyIsImVfMV8xIiwicmV0dXJuIiwiY3JlYXRlUHJvcERlY29yYXRvciIsInByb3BlcnR5SW5pdGlhbGx5RW51bWVyYWJsZSIsImRlY29yYXRvciIsImFwcGx5SW1tZWRpYXRlbHkiLCJpbmhlcml0ZWREZWNvcmF0b3JzIiwicXVhY2tzTGlrZUFEZWNvcmF0b3IiLCJkZWVwRW5oYW5jZXIiLCJpc09ic2VydmFibGUiLCJyZWZlcmVuY2VFbmhhbmNlciIsIm5ld1ZhbHVlIiwiY3JlYXRlRGVjb3JhdG9yRm9yRW5oYW5jZXIiLCJlbmhhbmNlciIsInByb3BlcnR5TmFtZSIsIl9kZWNvcmF0b3JUYXJnZXQiLCJkZWNvcmF0b3JBcmdzIiwiaW5pdGlhbFZhbHVlIiwiaW5pdGlhbGl6ZXIiLCJhc09ic2VydmFibGVPYmplY3QiLCJhZGRPYnNlcnZhYmxlUHJvcCIsInJlcyIsImRlZmF1bHRDcmVhdGVPYnNlcnZhYmxlT3B0aW9ucyIsImRlZXAiLCJkZWZhdWx0RGVjb3JhdG9yIiwicHJveHkiLCJhc0NyZWF0ZU9ic2VydmFibGVPcHRpb25zIiwiZGVlcERlY29yYXRvciIsInNoYWxsb3dEZWNvcmF0b3IiLCJpc09ic2VydmFibGVPYmplY3QiLCJpc09ic2VydmFibGVBcnJheSIsImlzT2JzZXJ2YWJsZU1hcCIsImlzT2JzZXJ2YWJsZVNldCIsInJlZkRlY29yYXRvciIsInJlZlN0cnVjdERlY29yYXRvciIsIm9sZFZhbHVlIiwiZ2V0RW5oYW5jZXJGcm9tT3B0aW9ucyIsIm9wdGlvbnMiLCJvYnNlcnZhYmxlRmFjdG9yaWVzIiwiYm94IiwiaW5jb3JyZWN0bHlVc2VkQXNEZWNvcmF0b3IiLCJPYnNlcnZhYmxlVmFsdWUiLCJlcXVhbHMiLCJpbml0aWFsVmFsdWVzIiwiY3JlYXRlT2JzZXJ2YWJsZUFycmF5IiwiT2JzZXJ2YWJsZU1hcCIsIk9ic2VydmFibGVTZXQiLCJwcm9wcyIsImV4dGVuZE9ic2VydmFibGUiLCJnZXREZWZhdWx0RGVjb3JhdG9yRnJvbU9iamVjdE9wdGlvbnMiLCJiYXNlIiwiY3JlYXRlRHluYW1pY09ic2VydmFibGVPYmplY3QiLCJleHRlbmRPYnNlcnZhYmxlT2JqZWN0V2l0aFByb3BlcnRpZXMiLCJyZWYiLCJzdHJ1Y3QiLCJhcmcyIiwibWV0aG9kTmFtZSIsImNvbXB1dGVkRGVjb3JhdG9yIiwiaW5zdGFuY2UiLCJhZGRDb21wdXRlZFByb3AiLCJjb250ZXh0IiwiQ2F1Z2h0RXhjZXB0aW9uIiwiY2F1c2UiLCJpc0NhdWdodEV4Y2VwdGlvbiIsInNob3VsZENvbXB1dGUiLCJkZXJpdmF0aW9uIiwiUE9TU0lCTFlfU1RBTEUiLCJwcmV2QWxsb3dTdGF0ZVJlYWRzIiwiYWxsb3dTdGF0ZVJlYWRzU3RhcnQiLCJwcmV2VW50cmFja2VkIiwidW50cmFja2VkU3RhcnQiLCJvYnMiLCJvYnNlcnZpbmciLCJpc0NvbXB1dGVkVmFsdWUiLCJkaXNhYmxlRXJyb3JCb3VuZGFyaWVzIiwidW50cmFja2VkRW5kIiwiYWxsb3dTdGF0ZVJlYWRzRW5kIiwiY2hhbmdlRGVwZW5kZW5jaWVzU3RhdGVUbzAiLCJjaGVja0lmU3RhdGVNb2RpZmljYXRpb25zQXJlQWxsb3dlZCIsImhhc09ic2VydmVycyIsInNpemUiLCJjb21wdXRhdGlvbkRlcHRoIiwiYWxsb3dTdGF0ZUNoYW5nZXMiLCJlbmZvcmNlQWN0aW9ucyIsInRyYWNrRGVyaXZlZEZ1bmN0aW9uIiwibmV3T2JzZXJ2aW5nIiwidW5ib3VuZERlcHNDb3VudCIsInJ1bklkIiwicHJldlRyYWNraW5nIiwidHJhY2tpbmdEZXJpdmF0aW9uIiwicHJldk9ic2VydmluZyIsImxvd2VzdE5ld09ic2VydmluZ0Rlcml2YXRpb25TdGF0ZSIsImkwIiwiZGVwIiwicmVtb3ZlT2JzZXJ2ZXIiLCJhZGRPYnNlcnZlciIsImJpbmREZXBlbmRlbmNpZXMiLCJjbGVhck9ic2VydmluZyIsInVudHJhY2tlZCIsImFjdGlvbiIsInByZXYiLCJhbGxvd1N0YXRlUmVhZHMiLCJjdXJyZW50QWN0aW9uSWQiLCJuZXh0QWN0aW9uSWQiLCJmdW5jdGlvbk5hbWVEZXNjcmlwdG9yIiwiY3JlYXRlQWN0aW9uIiwiYWN0aW9uTmFtZSIsImV4ZWN1dGVBY3Rpb24iLCJpc01vYnhBY3Rpb24iLCJzY29wZSIsInJ1bkluZm8iLCJzdGFydFRpbWUiLCJwcmV2RGVyaXZhdGlvbiIsInByZXZBbGxvd1N0YXRlQ2hhbmdlcyIsImFsbG93U3RhdGVDaGFuZ2VzU3RhcnQiLCJub3RpZnlTcHkiLCJhY3Rpb25JZCIsInBhcmVudEFjdGlvbklkIiwiX3N0YXJ0QWN0aW9uIiwiZXJyIiwic3VwcHJlc3NSZWFjdGlvbkVycm9ycyIsImFsbG93U3RhdGVDaGFuZ2VzRW5kIiwiX2VuZEFjdGlvbiIsIl9zdXBlciIsIl90aGlzIiwiaGFzVW5yZXBvcnRlZENoYW5nZSIsIl9fIiwiX19leHRlbmRzIiwiZGVoYW5jZVZhbHVlIiwiZGVoYW5jZXIiLCJwcmVwYXJlTmV3VmFsdWUiLCJVTkNIQU5HRUQiLCJzZXROZXdWYWx1ZSIsImhhc0ludGVyY2VwdG9ycyIsImNoYW5nZSIsImludGVyY2VwdENoYW5nZSIsImhhc0xpc3RlbmVycyIsIm5vdGlmeUxpc3RlbmVycyIsImludGVyY2VwdCIsImhhbmRsZXIiLCJyZWdpc3RlckludGVyY2VwdG9yIiwib2JzZXJ2ZSIsImZpcmVJbW1lZGlhdGVseSIsInJlZ2lzdGVyTGlzdGVuZXIiLCJDb21wdXRlZFZhbHVlIiwiX19tYXBpZCIsImlzQ29tcHV0aW5nIiwiaXNSdW5uaW5nU2V0dGVyIiwic2V0dGVyIiwiY29tcGFyZVN0cnVjdHVyYWwiLCJyZXF1aXJlc1JlYWN0aW9uIiwia2VlcEFsaXZlIiwicHJvcGFnYXRlTWF5YmVDaGFuZ2VkIiwiaW5CYXRjaCIsInRyYWNrQW5kQ29tcHV0ZSIsInByb3BhZ2F0ZUNoYW5nZUNvbmZpcm1lZCIsIndhcm5BYm91dFVudHJhY2tlZFJlYWQiLCJjb21wdXRlVmFsdWUiLCJwZWVrIiwid2FzU3VzcGVuZGVkIiwiY2hhbmdlZCIsInRyYWNrIiwic3VzcGVuZCIsImZpcnN0VGltZSIsInByZXZWYWx1ZSIsImF1dG9ydW4iLCJwcmV2VSIsIk1vYlhHbG9iYWxzIiwicGVuZGluZ1Vub2JzZXJ2YXRpb25zIiwicGVuZGluZ1JlYWN0aW9ucyIsImlzUnVubmluZ1JlYWN0aW9ucyIsInNweUxpc3RlbmVycyIsImdsb2JhbFJlYWN0aW9uRXJyb3JIYW5kbGVycyIsImNvbXB1dGVkUmVxdWlyZXNSZWFjdGlvbiIsInJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlIiwib2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb24iLCJjb21wdXRlZENvbmZpZ3VyYWJsZSIsIm1vY2tHbG9iYWwiLCJnZXRHbG9iYWwiLCJjYW5NZXJnZUdsb2JhbFN0YXRlIiwiaXNvbGF0ZUNhbGxlZCIsIl9fbW9ieEluc3RhbmNlQ291bnQiLCJfX21vYnhHbG9iYWxzIiwibm9kZSIsImRlbGV0ZSIsInF1ZXVlRm9yVW5vYnNlcnZhdGlvbiIsInJ1blJlYWN0aW9ucyIsImNvbnNvbGUiLCJsb2ciLCJCUkVBSyIsImxpbmVzIiwicHJpbnREZXBUcmVlIiwidHJlZSIsImRlcHRoIiwiZGVwZW5kZW5jaWVzIiwiY2hpbGQiLCJub2RlVG9EZXBlbmRlbmN5VHJlZSIsImdldEF0b20iLCJSZWFjdGlvbiIsIm9uSW52YWxpZGF0ZSIsImVycm9ySGFuZGxlciIsInJlcXVpcmVzT2JzZXJ2YWJsZSIsImlzRGlzcG9zZWQiLCJfaXNTY2hlZHVsZWQiLCJfaXNUcmFja1BlbmRpbmciLCJfaXNSdW5uaW5nIiwic2NoZWR1bGUiLCJpc1NjaGVkdWxlZCIsInJ1blJlYWN0aW9uIiwicmVwb3J0RXhjZXB0aW9uSW5EZXJpdmF0aW9uIiwid2FybiIsImRpc3Bvc2UiLCJnZXREaXNwb3NlciIsInRyYWNlIiwiZW50ZXJCcmVha1BvaW50IiwiX2kiLCJwb3AiLCJnZXRBdG9tRnJvbUFyZ3MiLCJMT0ciLCJyZWFjdGlvblNjaGVkdWxlciIsInJ1blJlYWN0aW9uc0hlbHBlciIsImFsbFJlYWN0aW9ucyIsIml0ZXJhdGlvbnMiLCJzcGxpY2UiLCJyZW1haW5pbmdSZWFjdGlvbnMiLCJpc1JlYWN0aW9uIiwiZG9udFJlYXNzaWduRmllbGRzIiwibmFtZWRBY3Rpb25EZWNvcmF0b3IiLCJpbml0aWFsaXplcl8xIiwiYWN0aW9uRmllbGREZWNvcmF0b3IiLCJhcmcxIiwiYXJnNCIsImRlZmluZUJvdW5kQWN0aW9uIiwidmlldyIsIm9wdHMiLCJyZWFjdGlvbiIsInNjaGVkdWxlciIsImRlbGF5IiwicmVhY3Rpb25SdW5uZXIiLCJvbkVycm9yIiwic2NoZWR1bGVyXzEiLCJjcmVhdGVTY2hlZHVsZXJGcm9tT3B0aW9ucyIsImlzU2NoZWR1bGVkXzEiLCJib3VuZCIsImFwcGx5VG9JbnN0YW5jZSIsImhvb2siLCJjYiIsImxpc3RlbmVyc0tleSIsImhvb2tMaXN0ZW5lcnMiLCJwcm9wZXJ0aWVzIiwiZV8yIiwia2V5c18yIiwia2V5c18yXzEiLCJyZXN1bHREZXNjcmlwdG9yIiwiZV8yXzEiLCJGbG93Q2FuY2VsbGF0aW9uRXJyb3IiLCJfaXNPYnNlcnZhYmxlIiwidmFsdWVzIiwidHJhbnNhY3Rpb24iLCJnZXRBZG0iLCJpc1Byb3BlcnR5S2V5Iiwib2JqZWN0UHJveHlUcmFwcyIsImFkbSIsImV4aXN0aW5nT2JzZXJ2YWJsZSIsIndyaXRlIiwiZGVmYXVsdEVuaGFuY2VyIiwicGFyc2VJbnQiLCJ2YWx1ZXNfMSIsImtleV8xIiwiZGVsZXRlUHJvcGVydHkiLCJyZW1vdmUiLCJrZXlzQXRvbSIsInByZXZlbnRFeHRlbnNpb25zIiwiUHJveHkiLCJpbnRlcmNlcHRhYmxlIiwiaW50ZXJjZXB0b3JzIiwibGlzdGVuYWJsZSIsImNoYW5nZUxpc3RlbmVycyIsImFycmF5VHJhcHMiLCJnZXRBcnJheUxlbmd0aCIsImFycmF5RXh0ZW5zaW9ucyIsImlzTmFOIiwic2V0QXJyYXlMZW5ndGgiLCJvd25lZCIsIk9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uIiwic3BsaWNlV2l0aEFycmF5IiwibGFzdEtub3duTGVuZ3RoIiwibmV3ViIsIm9sZFYiLCJkZWhhbmNlVmFsdWVzIiwiYWRkZWQiLCJhZGRlZENvdW50IiwicmVtb3ZlZCIsInJlbW92ZWRDb3VudCIsIm5ld0xlbmd0aCIsImN1cnJlbnRMZW5ndGgiLCJuZXdJdGVtcyIsInVwZGF0ZUFycmF5TGVuZ3RoIiwib2xkTGVuZ3RoIiwiZGVsdGEiLCJkZWxldGVDb3VudCIsIm1heCIsInNwbGljZUl0ZW1zSW50b1ZhbHVlcyIsIm5vdGlmeUFycmF5U3BsaWNlIiwibm90aWZ5QXJyYXlDaGlsZFVwZGF0ZSIsIm5vdGlmeSIsInRvSlMiLCJpdGVtcyIsInNoaWZ0IiwidW5zaGlmdCIsInJldmVyc2UiLCJzb3J0IiwiY29tcGFyZUZuIiwiZnVuY05hbWUiLCJkZWhhbmNlZFZhbHVlcyIsImNhbGxiYWNrIiwiZWxlbWVudCIsImFjY3VtdWxhdG9yIiwiY3VycmVudFZhbHVlIiwiaXNPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbiIsIl9hJDEiLCJPYnNlcnZhYmxlTWFwTWFya2VyIiwiaW5pdGlhbERhdGEiLCJfa2V5c0F0b20iLCJfZGF0YSIsIl9oYXNNYXAiLCJuZXdFbnRyeSIsImhhc0tleSIsIl91cGRhdGVWYWx1ZSIsIl9hZGRWYWx1ZSIsIl91cGRhdGVIYXNNYXBFbnRyeSIsIm1ha2VJdGVyYWJsZSIsIl9kIiwiX2UiLCJlXzMiLCJlXzQiLCJyZXBsYWNlbWVudE1hcCIsImRhdGFTdHJ1Y3R1cmUiLCJjb252ZXJ0VG9NYXAiLCJvcmRlcmVkRGF0YSIsImtleXNSZXBvcnRDaGFuZ2VkQ2FsbGVkIiwiZV8zXzEiLCJfZiIsIl9nIiwiX2giLCJrZXlFeGlzdGVkIiwidmFsdWVfMSIsImVfNF8xIiwiaXRlcjEiLCJpdGVyMiIsIm5leHQxIiwibmV4dDIiLCJ0b1BPSk8iLCJlXzUiLCJlXzVfMSIsIk9ic2VydmFibGVTZXRNYXJrZXIiLCJfYXRvbSIsImNhbGxiYWNrRm4iLCJuZXh0SW5kZXgiLCJvYnNlcnZhYmxlVmFsdWVzIiwiT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uIiwicmVhZCIsInBlbmRpbmdLZXlzIiwiZXhpc3RzIiwib2JzZXJ2YWJsZVByb3BlcnR5Q29uZmlncyIsImdlbmVyYXRlT2JzZXJ2YWJsZVByb3BDb25maWciLCJub3RpZnlQcm9wZXJ0eUFkZGl0aW9uIiwicHJvcGVydHlPd25lciIsImNvbXB1dGVkUHJvcGVydHlDb25maWdzIiwiZ2V0QWRtaW5pc3RyYXRpb25Gb3JDb21wdXRlZFByb3BPd25lciIsImdlbmVyYXRlQ29tcHV0ZWRQcm9wQ29uZmlnIiwib2xkT2JzZXJ2YWJsZSIsImlsbGVnYWxBY2Nlc3MiLCJvd25lciIsImdldEtleXMiLCJpc09ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbiIsImFueVRoaW5nIiwiZ2V0QWRtaW5pc3RyYXRpb24iLCJhU3RhY2siLCJiU3RhY2siLCJjbGFzc05hbWUiLCJ1bndyYXAiLCJhcmVBcnJheXMiLCJhQ3RvciIsImJDdG9yIiwiaGFzJDEiLCJnZXRTZWxmIiwiX19NT0JYX0RFVlRPT0xTX0dMT0JBTF9IT09LX18iLCJpbmplY3RNb2J4Iiwic3B5IiwiZXh0cmFzIiwiZ2V0RGVidWdOYW1lIiwiX2VxdWFscyIsInNldDEiLCJzZXQyIiwibGVuMSIsImxlbjIiLCJzZXR0bGUiLCJidWlsZFVSTCIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsImNyZWF0ZUVycm9yIiwiY29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZXF1ZXN0RGF0YSIsInJlcXVlc3RIZWFkZXJzIiwicmVxdWVzdCIsImxvYWRFdmVudCIsInhEb21haW4iLCJYRG9tYWluUmVxdWVzdCIsInVybCIsIm9ucHJvZ3Jlc3MiLCJvbnRpbWVvdXQiLCJhdXRoIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsIkF1dGhvcml6YXRpb24iLCJvcGVuIiwidG9VcHBlckNhc2UiLCJwYXJhbXMiLCJwYXJhbXNTZXJpYWxpemVyIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VIZWFkZXJzIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwicmVzcG9uc2UiLCJyZXNwb25zZVR5cGUiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib25lcnJvciIsImNvb2tpZXMiLCJ4c3JmVmFsdWUiLCJ3aXRoQ3JlZGVudGlhbHMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwib25Eb3dubG9hZFByb2dyZXNzIiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uVXBsb2FkUHJvZ3Jlc3MiLCJ1cGxvYWQiLCJjYW5jZWxUb2tlbiIsInByb21pc2UiLCJ0aGVuIiwiY2FuY2VsIiwiYWJvcnQiLCJzZW5kIiwiZW5oYW5jZUVycm9yIiwiY29kZSIsIl9fQ0FOQ0VMX18iLCJDYW5jZWwiLCJpdGVyYXRlZSIsImJhc2VNYXRjaGVzIiwiYmFzZU1hdGNoZXNQcm9wZXJ0eSIsInN0YWNrQ2xlYXIiLCJzdGFja0RlbGV0ZSIsInN0YWNrR2V0Iiwic3RhY2tIYXMiLCJzdGFja1NldCIsIlN0YWNrIiwidGFnIiwiZnVuY1RvU3RyaW5nIiwiYmFzZUlzRXF1YWxEZWVwIiwiYmFzZUlzRXF1YWwiLCJiaXRtYXNrIiwiY3VzdG9taXplciIsInN0YWNrIiwiU2V0Q2FjaGUiLCJhcnJheVNvbWUiLCJjYWNoZUhhcyIsImVxdWFsRnVuYyIsImlzUGFydGlhbCIsImFyckxlbmd0aCIsIm90aExlbmd0aCIsImFyclN0YWNrZWQiLCJvdGhTdGFja2VkIiwic2VlbiIsImFyclZhbHVlIiwib3RoVmFsdWUiLCJjb21wYXJlZCIsIm90aEluZGV4IiwicHJlZGljYXRlIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJjaGlsZHJlbiIsImlzUHJvdG90eXBlIiwibmF0aXZlS2V5cyIsIkRhdGFWaWV3IiwiV2Vha01hcCIsInRvU291cmNlIiwiZGF0YVZpZXdDdG9yU3RyaW5nIiwibWFwQ3RvclN0cmluZyIsInByb21pc2VDdG9yU3RyaW5nIiwic2V0Q3RvclN0cmluZyIsIndlYWtNYXBDdG9yU3RyaW5nIiwiZ2V0VGFnIiwiY3RvclN0cmluZyIsInNyY1ZhbHVlIiwiY2FzdFBhdGgiLCJ0b0tleSIsInBhdGgiLCJpc0tleSIsInN0cmluZ1RvUGF0aCIsImJhc2VUb1N0cmluZyIsImJhc2VGb3JPd24iLCJiYXNlRWFjaCIsImNyZWF0ZUJhc2VFYWNoIiwiYmFzZUZpbmRJbmRleCIsImJhc2VJc05hTiIsInN0cmljdEluZGV4T2YiLCJmcm9tSW5kZXgiLCJ0b0Zpbml0ZSIsInJlbWFpbmRlciIsInRvTnVtYmVyIiwiYmFzZVNldERhdGEiLCJjcmVhdGVCaW5kIiwiY3JlYXRlQ3VycnkiLCJjcmVhdGVIeWJyaWQiLCJjcmVhdGVQYXJ0aWFsIiwiZ2V0RGF0YSIsIm1lcmdlRGF0YSIsInNldERhdGEiLCJzZXRXcmFwVG9TdHJpbmciLCJ0b0ludGVnZXIiLCJuYXRpdmVNYXgiLCJhcmdQb3MiLCJhcnkiLCJpc0JpbmRLZXkiLCJwYXJ0aWFsc1JpZ2h0IiwiaG9sZGVyc1JpZ2h0IiwibmV3RGF0YSIsIm1ldGFNYXAiLCJjb21wb3NlQXJncyIsImNvbXBvc2VBcmdzUmlnaHQiLCJjb3VudEhvbGRlcnMiLCJjcmVhdGVDdG9yIiwiY3JlYXRlUmVjdXJyeSIsInJlb3JkZXIiLCJpc0FyeSIsImlzQmluZCIsImlzQ3VycmllZCIsImlzRmxpcCIsIndyYXBwZXIiLCJob2xkZXJzQ291bnQiLCJuZXdIb2xkZXJzIiwiYXJnc0luZGV4IiwiYXJnc0xlbmd0aCIsImhvbGRlcnNMZW5ndGgiLCJsZWZ0SW5kZXgiLCJsZWZ0TGVuZ3RoIiwicmFuZ2VMZW5ndGgiLCJpc1VuY3VycmllZCIsImhvbGRlcnNJbmRleCIsInJpZ2h0SW5kZXgiLCJyaWdodExlbmd0aCIsIm9mZnNldCIsImlzTGF6aWFibGUiLCJ3cmFwRnVuYyIsImlzQ3VycnkiLCJMb2Rhc2hXcmFwcGVyIiwiY2hhaW5BbGwiLCJfX2NoYWluX18iLCJfX2luZGV4X18iLCJfX3ZhbHVlc19fIiwic291cmNlIiwic2hvcnRPdXQiLCJuYXRpdmVOb3ciLCJub3ciLCJjb3VudCIsImxhc3RDYWxsZWQiLCJzdGFtcCIsInJlbWFpbmluZyIsImdldFdyYXBEZXRhaWxzIiwiaW5zZXJ0V3JhcERldGFpbHMiLCJzZXRUb1N0cmluZyIsInVwZGF0ZVdyYXBEZXRhaWxzIiwicmVmZXJlbmNlIiwiYmFzZVNldFRvU3RyaW5nIiwicmVIYXNVbmljb2RlIiwiUmVnRXhwIiwic3RyaW5nIiwiX2ludGVyb3BEZWZhdWx0IiwiX2RlZmF1bHQyNCIsIl9kZWZhdWx0MjMiLCJfZGVmYXVsdDIyIiwiX2RlZmF1bHQyMSIsIl9kZWZhdWx0MjAiLCJfZGVmYXVsdDE5IiwiX2RlZmF1bHQxOCIsIl9kZWZhdWx0MTciLCJfZGVmYXVsdDE2IiwiX2RlZmF1bHQxNSIsIl9kZWZhdWx0MTQiLCJfZGVmYXVsdDEzIiwiX2RlZmF1bHQxMiIsIl9kZWZhdWx0MTEiLCJfZGVmYXVsdDEwIiwiX2RlZmF1bHQ5IiwiX2RlZmF1bHQ4IiwiX2RlZmF1bHQ3IiwiX2RlZmF1bHQ2IiwiX2RlZmF1bHQ1IiwiX2RlZmF1bHQ0IiwiX2RlZmF1bHQzIiwiX2RlZmF1bHQyIiwiX2RlZmF1bHQiLCJheGlvcyIsIl90eXBlb2YiLCJfZXh0ZW5kcyIsIiRhc3luY2JpbmQiLCJ0cmFtcG9saW5lIiwiTGF6eVRoZW5hYmxlIiwiX3Jlc29sdmVyIiwiaXNUaGVuYWJsZSIsIkVhZ2VyVGhlbmFibGUiLCJUaGVuYWJsZSIsIkVhZ2VyVGhlbmFibGVGYWN0b3J5Iiwic2V0SW1tZWRpYXRlIiwic3RhdGUiLCJpc1dpdGhpbiIsImlzSW52YWxpZENvbmZpZyIsIkRFRkFVTFRfSEVBREVSUyIsIkFjY2VwdCIsIkRFRkFVTFRfQ09ORklHIiwiVElNRU9VVF9FUlJPUl9DT0RFUyIsIk5PREVKU19DT05ORUNUSU9OX0VSUk9SX0NPREVTIiwiaW4yMDBzIiwiaW40MDBzIiwiaW41MDBzIiwic3RhdHVzTmlsIiwiUiIsIk4iLCJpc1Byb21pc2UiLCJUIiwiY2F0Y2giLCJpc0NhbmNlbCIsImR1cmF0aW9uIiwicHJvYmxlbSIsIm9rIiwiYXhpb3NJbnN0YW5jZSIsIm1vbml0b3JzIiwiYWRkTW9uaXRvciIsInJlcXVlc3RUcmFuc2Zvcm1zIiwiYXN5bmNSZXF1ZXN0VHJhbnNmb3JtcyIsInJlc3BvbnNlVHJhbnNmb3JtcyIsImFkZFJlcXVlc3RUcmFuc2Zvcm0iLCJhZGRBc3luY1JlcXVlc3RUcmFuc2Zvcm0iLCJhZGRSZXNwb25zZVRyYW5zZm9ybSIsInNldEhlYWRlciIsInNldEhlYWRlcnMiLCJkZWxldGVIZWFkZXIiLCJzZXRCYXNlVVJMIiwiYmFzZVVSTCIsImdldEJhc2VVUkwiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwibGluayIsInVubGluayIsImFwaXNhdWNlIiwiQ0xJRU5UX0VSUk9SIiwiU0VSVkVSX0VSUk9SIiwiVElNRU9VVF9FUlJPUiIsIkNPTk5FQ1RJT05fRVJST1IiLCJORVRXT1JLX0VSUk9SIiwiVU5LTk9XTl9FUlJPUiIsIkNBTkNFTF9FUlJPUiIsImFycmF5TWFwIiwiYmFzZUl0ZXJhdGVlIiwiYmFzZU1hcCIsImNvbGxlY3Rpb24iLCJwYWlycyIsInBhaXIiLCJhcnJheUZpbHRlciIsImJhc2VGaWx0ZXIiLCJiYXNlSW5kZXhPZiIsImZ1dHVyZSIsInBhc3QiLCJtbSIsImhoIiwiZGQiLCJNTSIsInl5IiwiZnJvbVRvQmFzZSIsInJlbGF0aXZlVGltZSIsInRocmVzaG9sZHMiLCJyb3VuZGluZyIsInRvIiwidG9Ob3ciLCJmcm9tTm93IiwibG9jYWwiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0RheSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCIkbG9jYWxPZmZzZXQiLCJpc1VUQyIsInVwcGVyRmlyc3QiLCJjcmVhdGVDYXNlRmlyc3QiLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwiVGltZW91dCIsImlkIiwiY2xlYXJGbiIsIl9pZCIsIl9jbGVhckZuIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiY2xvc2UiLCJ1bnJlZiIsImVucm9sbCIsIm1zZWNzIiwiX2lkbGVUaW1lb3V0SWQiLCJfaWRsZVRpbWVvdXQiLCJ1bmVucm9sbCIsIl91bnJlZkFjdGl2ZSIsImFjdGl2ZSIsIl9vblRpbWVvdXQiLCJjbGVhckltbWVkaWF0ZSIsInJlZ2lzdGVySW1tZWRpYXRlIiwiaHRtbCIsImNoYW5uZWwiLCJtZXNzYWdlUHJlZml4Iiwib25HbG9iYWxNZXNzYWdlIiwibmV4dEhhbmRsZSIsInRhc2tzQnlIYW5kbGUiLCJjdXJyZW50bHlSdW5uaW5nQVRhc2siLCJkb2MiLCJhdHRhY2hUbyIsImhhbmRsZSIsInJ1bklmUHJlc2VudCIsInBvc3RNZXNzYWdlIiwiaW1wb3J0U2NyaXB0cyIsInBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMiLCJvbGRPbk1lc3NhZ2UiLCJvbm1lc3NhZ2UiLCJjYW5Vc2VQb3N0TWVzc2FnZSIsIk1lc3NhZ2VDaGFubmVsIiwicG9ydDEiLCJldmVudCIsInBvcnQyIiwiY3JlYXRlRWxlbWVudCIsImRvY3VtZW50RWxlbWVudCIsInNjcmlwdCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlbW92ZUNoaWxkIiwiYXBwZW5kQ2hpbGQiLCJyYW5kb20iLCJhdHRhY2hFdmVudCIsInRhc2siLCJfY29udGFpbnMiLCJfaW5kZXhPZiIsImluZiIsIl9hcnJheUZyb21JdGVyYXRvciIsIl9mdW5jdGlvbk5hbWUiLCJpZGVudGljYWwiLCJzdGFja0EiLCJzdGFja0IiLCJpZ25vcmVDYXNlIiwibXVsdGlsaW5lIiwic3RpY2t5IiwidW5pY29kZSIsImtleXNBIiwiX2NvbmNhdCIsIl9jcmVhdGVQYXJ0aWFsQXBwbGljYXRvciIsIl9waXBlIiwidGFpbCIsIlhXcmFwIiwidGhpc09iaiIsIl9pc1N0cmluZyIsIl9jaGVja0Zvck1ldGhvZCIsIkluZmluaXR5IiwidG9JbmRleCIsIl9hc3NpZ24iLCJfb2JqZWN0QXNzaWduIiwibmV4dEtleSIsImNvbmRpdGlvbiIsIm9uVHJ1ZSIsIm9uRmFsc2UiLCJyZWNlaXZlZCIsImNvbWJpbmVkIiwiYXJnc0lkeCIsImxlZnQiLCJjb21iaW5lZElkeCIsInByZWQiLCJsaWZ0Iiwibm90IiwibGlmdE4iLCJhcCIsImxpZnRlZCIsImFwcGxpY2F0aXZlIiwiX2lzVHJhbnNmb3JtZXIiLCJtZXRob2ROYW1lcyIsInRyYW5zZHVjZXIiLCJfeGZCYXNlIiwiWE1hcCIsImVtcHR5IiwiX2lzT2JqZWN0IiwicGx1Y2siLCJwcmVkcyIsImFsd2F5cyIsIl9pZGVudGl0eSIsIkF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2VDb25maWciLCJDYW5jZWxUb2tlbiIsImFsbCIsInByb21pc2VzIiwic3ByZWFkIiwicmVhZEZsb2F0TEUiLCJpc1Nsb3dCdWZmZXIiLCJfaXNCdWZmZXIiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJkaXNwYXRjaFJlcXVlc3QiLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJjaGFpbiIsImludGVyY2VwdG9yIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJub3JtYWxpemVkTmFtZSIsImVuY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsInNlcmlhbGl6ZWRQYXJhbXMiLCJwYXJ0cyIsInBhcnNlZCIsImxpbmUiLCJzdWJzdHIiLCJvcmlnaW5VUkwiLCJtc2llIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJyZXNvbHZlVVJMIiwiaHJlZiIsInNldEF0dHJpYnV0ZSIsInByb3RvY29sIiwiaG9zdCIsInNlYXJjaCIsImhhc2giLCJob3N0bmFtZSIsInBvcnQiLCJwYXRobmFtZSIsImxvY2F0aW9uIiwicmVxdWVzdFVSTCIsIkUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwidG9HTVRTdHJpbmciLCJkZWNvZGVVUklDb21wb25lbnQiLCJoYW5kbGVycyIsInVzZSIsImVqZWN0IiwidHJhbnNmb3JtRGF0YSIsInRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQiLCJ0aHJvd0lmUmVxdWVzdGVkIiwicmVhc29uIiwiZm5zIiwicmVsYXRpdmVVUkwiLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwidG9rZW4iLCJhcnIiLCJfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyIsImJhc2VJc01hdGNoIiwiZ2V0TWF0Y2hEYXRhIiwibWF0Y2hlc1N0cmljdENvbXBhcmFibGUiLCJtYXRjaERhdGEiLCJub0N1c3RvbWl6ZXIiLCJvYmpWYWx1ZSIsIkNPTVBBUkVfUEFSVElBTF9GTEFHIiwiYXNzb2NJbmRleE9mIiwiTEFSR0VfQVJSQVlfU0laRSIsImlzTWFza2VkIiwicmVJc0hvc3RDdG9yIiwiZnVuY1Byb3RvIiwicmVJc05hdGl2ZSIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwiaXNPd24iLCJ1bm1hc2tlZCIsInVpZCIsImNvcmVKc0RhdGEiLCJtYXNrU3JjS2V5IiwiZXhlYyIsIklFX1BST1RPIiwiSGFzaCIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJoYXNoR2V0IiwiaGFzaEhhcyIsImhhc2hTZXQiLCJnZXRNYXBEYXRhIiwiZXF1YWxBcnJheXMiLCJlcXVhbEJ5VGFnIiwiZXF1YWxPYmplY3RzIiwib2JqZWN0VGFnIiwib2JqSXNBcnIiLCJvdGhJc0FyciIsIm9ialRhZyIsIm90aFRhZyIsIm9iaklzT2JqIiwib3RoSXNPYmoiLCJpc1NhbWVUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJzZXRDYWNoZUFkZCIsInNldENhY2hlSGFzIiwiVWludDhBcnJheSIsIm1hcFRvQXJyYXkiLCJzZXRUb0FycmF5Iiwic3ltYm9sUHJvdG8iLCJzeW1ib2xWYWx1ZU9mIiwiYnl0ZUxlbmd0aCIsImJ5dGVPZmZzZXQiLCJjb252ZXJ0Iiwic3RhY2tlZCIsImdldEFsbEtleXMiLCJvYmpQcm9wcyIsIm9iakxlbmd0aCIsIm9ialN0YWNrZWQiLCJza2lwQ3RvciIsIm9iakN0b3IiLCJvdGhDdG9yIiwiYmFzZUdldEFsbEtleXMiLCJnZXRTeW1ib2xzIiwiYXJyYXlQdXNoIiwia2V5c0Z1bmMiLCJzeW1ib2xzRnVuYyIsInN0dWJBcnJheSIsIm5hdGl2ZUdldFN5bWJvbHMiLCJzeW1ib2wiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwicmVxdWlyZSIsIm92ZXJBcmciLCJ0cmFuc2Zvcm0iLCJhcmciLCJpc1N0cmljdENvbXBhcmFibGUiLCJoYXNJbiIsImJhc2VHZXQiLCJkZWZhdWx0VmFsdWUiLCJtZW1vaXplQ2FwcGVkIiwicmVQcm9wTmFtZSIsInJlRXNjYXBlQ2hhciIsIm51bWJlciIsInF1b3RlIiwic3ViU3RyaW5nIiwibWVtb2l6ZSIsInJlc29sdmVyIiwibWVtb2l6ZWQiLCJDYWNoZSIsInN5bWJvbFRvU3RyaW5nIiwiYmFzZUhhc0luIiwiaGFzUGF0aCIsImhhc0Z1bmMiLCJiYXNlUHJvcGVydHkiLCJiYXNlUHJvcGVydHlEZWVwIiwiYmFzZUZvciIsImNyZWF0ZUJhc2VGb3IiLCJmcm9tUmlnaHQiLCJpdGVyYWJsZSIsImVhY2hGdW5jIiwiYmFzZVRyaW0iLCJyZUlzQmFkSGV4IiwicmVJc0JpbmFyeSIsInJlSXNPY3RhbCIsImZyZWVQYXJzZUludCIsImlzQmluYXJ5IiwidHJpbW1lZEVuZEluZGV4IiwicmVUcmltU3RhcnQiLCJyZVdoaXRlc3BhY2UiLCJnZXRGdW5jTmFtZSIsImxvZGFzaCIsInJlYWxOYW1lcyIsIm90aGVyRnVuYyIsIndyYXBwZXJDbG9uZSIsImNvcHlBcnJheSIsInJlV3JhcERldGFpbHMiLCJyZVNwbGl0RGV0YWlscyIsInJlV3JhcENvbW1lbnQiLCJkZXRhaWxzIiwibGFzdEluZGV4IiwiY29uc3RhbnQiLCJhcnJheUVhY2giLCJhcnJheUluY2x1ZGVzIiwid3JhcEZsYWdzIiwibmF0aXZlTWluIiwiaW5kZXhlcyIsIm9sZEFycmF5Iiwic3JjQml0bWFzayIsIm5ld0JpdG1hc2siLCJpc0NvbW1vbiIsImlzQ29tYm8iLCJvdmVyUmVzdCIsInN0YXJ0Iiwib3RoZXJBcmdzIiwiY2FzdFNsaWNlIiwiaGFzVW5pY29kZSIsInN0cmluZ1RvQXJyYXkiLCJzdHJTeW1ib2xzIiwiY2hyIiwidHJhaWxpbmciLCJiYXNlU2xpY2UiLCJlbmQiLCJhc2NpaVRvQXJyYXkiLCJ1bmljb2RlVG9BcnJheSIsInJzQXN0cmFsIiwicnNDb21ibyIsInJzRml0eiIsInJzTm9uQXN0cmFsIiwicnNSZWdpb25hbCIsInJzU3VyclBhaXIiLCJyZU9wdE1vZCIsInJzU2VxIiwicnNTeW1ib2wiLCJyZVVuaWNvZGUiLCJsaWNlbnNlIiwidmFsaWRhdG9ycyIsImNsZWFuTGljZW5zZSIsImZpbHRlciIsInZhbGlkIiwicmVhc29ucyIsImJhc2VSYW5nZSIsImlzSXRlcmF0ZWVDYWxsIiwibmF0aXZlQ2VpbCIsIkJhc2VBUEkiLCJ0d2lsaW9LZXkiLCJhcGkiLCJwaG9uZSIsIlRXSUxJT19LRVkiLCJlbWFpbCIsImVtYWlsX2lkIiwic3NuIiwicGFydG5lcl9uYW1lIiwicGFydG5lcl9pZCIsImNvaG9ydF9pZCIsIlByZWZlciIsInByaW1hcnkiLCJzZWNvbmRhcnkiLCJlbWVyYWxkIiwidGFydE9yYW5nZSIsInllbGxvd09yYW5nZSIsInNsYXRlR3JheSIsImNhZGV0Qmx1ZSIsInBlcml3aW5rbGUiLCJhbGljZUJsdWUiLCJzbW9rZVdoaXRlIiwiYWxlcnQwIiwiYWxlcnQxIiwiYWxlcnQyIiwiYWxlcnQzIiwiY2VydWxlYW5CbHVlIiwicGVhY2giLCJiYWJ5UGluayIsInNwYW5pc2hQaW5rIiwiYmVhdUJsdWUiLCJjdWx0dXJlZCIsImJsdWVCZWxsIiwiYmFieUJsdWVFeWVzIiwicG93ZGVyQmx1ZSIsImhvbmV5RGV3IiwiYnVmZiIsImJsYWNrIiwid2hpdGUiLCJub3RpY2VNdXRlZCIsIm5vdGljZUVycm9yIiwibm90aWNlV2FybmluZyIsIm5vdGljZVN1Y2Nlc3MiLCJub3RpY2VJbmZvIiwicGFyc2VQeXRob25EYXRlIiwidGltZSIsIm5ld0RhdGUiLCJob3VycyIsInNldEhvdXJzIiwiZm9ybWF0RGF0ZSIsInBhcnNlZERhdGUiLCJmb3JtYXRFbWFpbCIsImZvcm1hdE5hbWUiLCJyZW5kZXJQaG9uZSIsImVuY3J5cHRlZCIsImFyZWFDb2RlIiwicGhvbmVOdW1iZXIiLCJmb3JtYXRQaG9uZSIsImZvcm1hdFNTTiIsInNzbk51bWJlciIsImZvcm1hdFppcGNvZGUiLCJ6aXBjb2RlIiwiZ2V0UmVqZWN0TWVzc2FnZSIsInBhcnRuZXJfdHlwZSIsImluY2x1ZGVzIiwiUklTS19NQU5BR0VNRU5UIiwiRkNSQSIsIkZDUkFfRSIsIkZDUkFfTiIsImdldFN0YXR1cyIsInJldmlldyIsInBlbmRpbmciLCJpbml0aWF0ZWQiLCJnZXRZZWFyIiwiaXNVcmwiLCJ1cmxTdHJpbmciLCJ0ZXJtcyIsImxlZ2FsUmVwbGFjZSIsIm9yaWdpbmFsIiwicmVwbGFjZW1lbnQiLCJyZXR1cm5WYWwiLCJtYXNrTmFtZSIsIm9iamVjdFRvUXVlcnkiLCJxdWVyeSIsInF1ZXJ5QXJyYXkiLCJwYXJzZVF1ZXJ5IiwicGlja0NvbG9yIiwiY29sb3JzIiwicGlja1Njb3JlQ29sb3IiLCJzY29yZSIsInByZXR0aWZ5RGF0ZSIsImRhdGVTdHJpbmciLCJERCIsIllZWVkiLCJmYWxzeVN0cmluZ3MiLCJ2YWx1ZUV4aXN0cyIsInJlbmRlckRldGFpbFZhbHVlIiwicmVuZGVyTmVzdGVkT2JqZWN0IiwibmVzdGVkIiwic2VsZWN0TWFzdGVyS2V5IiwibWFzdGVyS2V5IiwiYmx1ZXByaW50IiwiZmluZCIsInNldFZhbHVlIiwiZmFsbGJhY2siLCJzZXRPcHRpb24iLCJhbGxvd2VkIiwic2V0dGVyRmFjdG9yeUN1cnJpZWQiLCJ0b2dnbGVCb29sQ3VycmllZCIsInNldFN0cmluZ0ZhY3RvcnkiLCJzZXROdW1iZXJGYWN0b3J5Iiwic2V0Qm9vbEZhY3RvcnkiLCJzZXRUcnV0aHlDdXJyaWVkIiwic2V0RmFsc3lDdXJyaWVkIiwic2V0T3B0aW9uRmFjdG9yeUN1cnJpZWQiLCJTZXR0ZXIiLCJzdG9yYWdlTW9jayIsInN0b3JhZ2UiLCJzZXRJdGVtIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJ0b0Jvb2xlYW4iLCJkYXlqcyIsInRvUmVsYXRpdmVGcm9tSVNPIiwicmVsYXRpdmVEYXRlIiwidG9SZWxhdGl2ZURhdGUiLCJhZGp1c3RlZE5vdyIsInRvU2VudGVuY2VDYXNlIiwic2VudGVuY2UiLCJ0ZXJtaW5hdGlvbiIsInRvVGl0bGVDYXNlIiwid29yZCIsImZpcnN0Q2hhciIsInJlbWFpbmluZ0NoYXJzIiwiSU5JVElBVEVEIiwiUEVORElORyIsIldJVEhEUkFXTiIsIkFQUFJPVkVEIiwiUkVKRUNURUQiLCJDT05TRU5UIiwiRU1BSUxFRCIsIlJFVklFVyIsIlJFVklFV0lORyIsIkNPTlNJREVSIiwiUFJPQ0VTU0lORyIsIlBFTkRJTkdfRElTUFVURSIsIlBFTkRJTkdfRklSU1RfTk9USUNFIiwiUEVORElOR19TRUNPTkRfTk9USUNFIiwiRklSU1RfTk9USUNFIiwiU0VDT05EX05PVElDRSIsIlNTTl9UUkFDRV9GQUlMRUQiLCJNVlJfRkFJTEVEIiwiQ09NUExJQU5DRSIsIkNPTVBMSUFOQ0VfU08iLCJWRVJJRllJTkciLCJDT01QTElBTkNFUkVWSUVXIiwiU1RPUkVEIiwidHJhbnNsYXRlU3RhdHVzIiwiYWR2ZXJzZV9hY3Rpb24iLCJjdXJyZW50U3RhdGVzIiwidmFsaWRhdGVEcml2ZXJzTGljZW5zZSIsInZhbGlkU3NuUmVnZXgiLCJtaXN1c2VkUmVnZXgiLCJpbnZhbGlkRmlyc3RUaHJlZSIsIm51bSIsInZhbGlkYXRlX3NzbiIsIm51bWJlclNTTiIsInZhbGlkYXRlRW1haWwiLCJ2YWxpZGF0ZVBob25lIiwiaXNBbHBoYU51bWVyaWMiLCJjaCIsImlzVmFsaWRDYW5hZGlhblppcGNvZGUiLCJ2YWxpZGF0ZVNTTiIsInZhbGlkYXRlQ2hlY2siLCJ3b3JrZXJfY2hlY2siLCJjb250YWluc0F0U3ltYm9sIiwiY29udGFpbnNOdW1iZXIiLCJ2YWxpZGF0ZU5hbWUiLCJ2YWxpZGF0ZUFkZHJlc3MiLCJhZGRyZXNzIiwidmFsaWRhdGVDdXN0b21JbnB1dCIsInZhbGlkYXRlWmlwY29kZSIsInZhbGlkYXRlQ2FuYWRpYW5aaXBjb2RlIiwidmFsaWRhdGVNVlJDaGVjayIsInZhbGlkYXRlUGhvbmVWZXJpZmljYXRpb24iLCJkaXNhYmxlX2NoZWNrIiwiZW52X3ZhciIsInZhbGlkYXRlRW1haWxJZCIsInZhbGlkYXRlVHVybklkIl0sIm1hcHBpbmdzIjoiQ0FBQSxTQUEyQ0EsRUFBTUMsR0FDMUIsaUJBQVpDLFNBQTBDLGlCQUFYQyxPQUN4Q0EsT0FBT0QsUUFBVUQsSUFDUSxtQkFBWEcsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLGNBQWUsR0FBSUgsR0FDQSxpQkFBWkMsUUFDZEEsUUFBUSxlQUFpQkQsSUFFekJELEVBQUssZUFBaUJDLElBUnhCLENBU21CLG9CQUFUSyxLQUF1QkEsS0FBT0MsTUFBTSxXQUM5QyxPLFlDVEUsSUFBSUMsRUFBbUIsR0FHdkIsU0FBU0MsRUFBb0JDLEdBRzVCLEdBQUdGLEVBQWlCRSxHQUNuQixPQUFPRixFQUFpQkUsR0FBVVIsUUFHbkMsSUFBSUMsRUFBU0ssRUFBaUJFLEdBQVksQ0FDekNDLEVBQUdELEVBQ0hFLEdBQUcsRUFDSFYsUUFBUyxJQVVWLE9BTkFXLEVBQVFILEdBQVVJLEtBQUtYLEVBQU9ELFFBQVND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QUNlLElBQXhCQSxFQUFNbUUsT0FBTzdDLFFBR1Q4dEQsR0FBa0IsU0FBQXhILEdBQU8sT0FDcEMsS0FBV0EsSUFBWUEsRUFBUXRtRCxRQUFVLEdBRTlCK3RELEdBQTBCLFNBQUF6SCxHQUFPLE9BQzVDLEtBQVdBLElBQ040RyxHQUFlNUcsSUFDZjhHLEdBQXVCOUcsSUFFakJqbUQsR0FBVSxTQUFBM0IsR0FBSyxPQUMxQjRCLE1BQU1ELFFBQVEzQixJQUFVMGtCLGFBQWtCMWtCLElBRS9Cc3ZELEdBQW1CLFNBQUF2eUMsR0FBSyxPQUNuQyxLQUFXQSxJQUEyQixpQkFBVkEsRUFBcUJBLEVBQVEsSUFFOUN3eUMsR0FBNEIsU0FBQW4zQyxHQUN2QyxPQUFRQSxHQUNOLElBQUssV0FDTCxJQUFLLE9BQ0gsTUFBTyxXQUNULElBQUssYUFDTCxJQUFLLFFBQ0gsTUFBTyxhQUNULFFBQ0UsTUFBTyxLQUlBbzNDLEdBQWdCLFNBQUFDLEdBQU8sTUFDZixpQkFBWkEsR0FBaUQsU0FBMUJBLEVBQVFqcEQsZUFFM0JrcEQsR0FBa0IsU0FBQTNnQixHQUFFLE9BQUksS0FBV0EsSUFBcUIsS0FBZEEsRUFBR3p0QyxRQUU3Q3F1RCxHQUFpQixTQUFBNWdCLEdBQUUsT0FDOUIsS0FBV0EsSUFBTyxrQkFBa0J0bkMsS0FBS3NuQyIsImZpbGUiOiJ0dXJuLXNoYXJlZC5taW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShcInR1cm4tc2hhcmVkXCIsIFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInR1cm4tc2hhcmVkXCJdID0gZmFjdG9yeSgpO1xuXHRlbHNlXG5cdFx0cm9vdFtcInR1cm4tc2hhcmVkXCJdID0gZmFjdG9yeSgpO1xufSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAzMDcpO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL19jdXJyeTEnKTtcbnZhciBfaXNQbGFjZWhvbGRlciA9IHJlcXVpcmUoJy4vX2lzUGxhY2Vob2xkZXInKTtcblxuXG4vKipcbiAqIE9wdGltaXplZCBpbnRlcm5hbCB0d28tYXJpdHkgY3VycnkgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBjdXJyaWVkIGZ1bmN0aW9uLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9jdXJyeTIoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYyKGEsIGIpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgcmV0dXJuIGYyO1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gX2lzUGxhY2Vob2xkZXIoYSkgPyBmMlxuICAgICAgICAgICAgIDogX2N1cnJ5MShmdW5jdGlvbihfYikgeyByZXR1cm4gZm4oYSwgX2IpOyB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBfaXNQbGFjZWhvbGRlcihhKSAmJiBfaXNQbGFjZWhvbGRlcihiKSA/IGYyXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihhKSA/IF9jdXJyeTEoZnVuY3Rpb24oX2EpIHsgcmV0dXJuIGZuKF9hLCBiKTsgfSlcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGIpID8gX2N1cnJ5MShmdW5jdGlvbihfYikgeyByZXR1cm4gZm4oYSwgX2IpOyB9KVxuICAgICAgICAgICAgIDogZm4oYSwgYik7XG4gICAgfVxuICB9O1xufTtcbiIsInZhciBfaXNQbGFjZWhvbGRlciA9IHJlcXVpcmUoJy4vX2lzUGxhY2Vob2xkZXInKTtcblxuXG4vKipcbiAqIE9wdGltaXplZCBpbnRlcm5hbCBvbmUtYXJpdHkgY3VycnkgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBjdXJyaWVkIGZ1bmN0aW9uLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9jdXJyeTEoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYxKGEpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCB8fCBfaXNQbGFjZWhvbGRlcihhKSkge1xuICAgICAgcmV0dXJuIGYxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH07XG59O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgaXNCdWZmZXIgPSByZXF1aXJlKCdpcy1idWZmZXInKTtcblxuLypnbG9iYWwgdG9TdHJpbmc6dHJ1ZSovXG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXkodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh2YWwpIHtcbiAgcmV0dXJuICh0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnKSAmJiAodmFsIGluc3RhbmNlb2YgRm9ybURhdGEpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmICh2YWwuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ251bWJlcic7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBEYXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNEYXRlKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGaWxlKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGaWxlXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCbG9iLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNCbG9iKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBCbG9iXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyZWFtXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmVhbSh2YWwpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVUkxTZWFyY2hQYXJhbXModmFsKSB7XG4gIHJldHVybiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyAmJiB2YWwgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXM7XG59XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gdHJpbShzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzKi8sICcnKS5yZXBsYWNlKC9cXHMqJC8sICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnByb2R1Y3QgPT09ICdSZWFjdE5hdGl2ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIChcbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCdcbiAgKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnICYmICFpc0FycmF5KG9iaikpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY2VwdHMgdmFyYXJncyBleHBlY3RpbmcgZWFjaCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3QsIHRoZW5cbiAqIGltbXV0YWJseSBtZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBvYmplY3QgYW5kIHJldHVybnMgcmVzdWx0LlxuICpcbiAqIFdoZW4gbXVsdGlwbGUgb2JqZWN0cyBjb250YWluIHRoZSBzYW1lIGtleSB0aGUgbGF0ZXIgb2JqZWN0IGluXG4gKiB0aGUgYXJndW1lbnRzIGxpc3Qgd2lsbCB0YWtlIHByZWNlZGVuY2UuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlc3VsdCA9IG1lcmdlKHtmb286IDEyM30sIHtmb286IDQ1Nn0pO1xuICogY29uc29sZS5sb2cocmVzdWx0LmZvbyk7IC8vIG91dHB1dHMgNDU2XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqMSBPYmplY3QgdG8gbWVyZ2VcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgdmFyIHJlc3VsdCA9IHt9O1xuICBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0eXBlb2YgcmVzdWx0W2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG1lcmdlKHJlc3VsdFtrZXldLCB2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqIEByZXR1cm4ge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5mdW5jdGlvbiBleHRlbmQoYSwgYiwgdGhpc0FyZykge1xuICBmb3JFYWNoKGIsIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHRoaXNBcmcgJiYgdHlwZW9mIHZhbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FycmF5OiBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyOiBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcjogaXNCdWZmZXIsXG4gIGlzRm9ybURhdGE6IGlzRm9ybURhdGEsXG4gIGlzQXJyYXlCdWZmZXJWaWV3OiBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmc6IGlzU3RyaW5nLFxuICBpc051bWJlcjogaXNOdW1iZXIsXG4gIGlzT2JqZWN0OiBpc09iamVjdCxcbiAgaXNVbmRlZmluZWQ6IGlzVW5kZWZpbmVkLFxuICBpc0RhdGU6IGlzRGF0ZSxcbiAgaXNGaWxlOiBpc0ZpbGUsXG4gIGlzQmxvYjogaXNCbG9iLFxuICBpc0Z1bmN0aW9uOiBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbTogaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zOiBpc1VSTFNlYXJjaFBhcmFtcyxcbiAgaXNTdGFuZGFyZEJyb3dzZXJFbnY6IGlzU3RhbmRhcmRCcm93c2VyRW52LFxuICBmb3JFYWNoOiBmb3JFYWNoLFxuICBtZXJnZTogbWVyZ2UsXG4gIGV4dGVuZDogZXh0ZW5kLFxuICB0cmltOiB0cmltXG59O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaW5nO1xuIiwidmFyIGJhc2VJc05hdGl2ZSA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hdGl2ZScpLFxuICAgIGdldFZhbHVlID0gcmVxdWlyZSgnLi9fZ2V0VmFsdWUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBuYXRpdmUgZnVuY3Rpb24gYXQgYGtleWAgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgbWV0aG9kIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBmdW5jdGlvbiBpZiBpdCdzIG5hdGl2ZSwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZ2V0TmF0aXZlKG9iamVjdCwga2V5KSB7XG4gIHZhciB2YWx1ZSA9IGdldFZhbHVlKG9iamVjdCwga2V5KTtcbiAgcmV0dXJuIGJhc2VJc05hdGl2ZSh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROYXRpdmU7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShlKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD0xZTMsZT02ZTQsbj0zNmU1LHI9XCJtaWxsaXNlY29uZFwiLGk9XCJzZWNvbmRcIixzPVwibWludXRlXCIsdT1cImhvdXJcIixhPVwiZGF5XCIsbz1cIndlZWtcIixjPVwibW9udGhcIixmPVwicXVhcnRlclwiLGg9XCJ5ZWFyXCIsZD1cImRhdGVcIixsPVwiSW52YWxpZCBEYXRlXCIsJD0vXihcXGR7NH0pWy0vXT8oXFxkezEsMn0pP1stL10/KFxcZHswLDJ9KVtUdFxcc10qKFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Oj8oXFxkezEsMn0pP1suOl0/KFxcZCspPyQvLHk9L1xcWyhbXlxcXV0rKV18WXsxLDR9fE17MSw0fXxEezEsMn18ZHsxLDR9fEh7MSwyfXxoezEsMn18YXxBfG17MSwyfXxzezEsMn18WnsxLDJ9fFNTUy9nLE09e25hbWU6XCJlblwiLHdlZWtkYXlzOlwiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXlcIi5zcGxpdChcIl9cIiksbW9udGhzOlwiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlclwiLnNwbGl0KFwiX1wiKSxvcmRpbmFsOmZ1bmN0aW9uKHQpe3ZhciBlPVtcInRoXCIsXCJzdFwiLFwibmRcIixcInJkXCJdLG49dCUxMDA7cmV0dXJuXCJbXCIrdCsoZVsobi0yMCklMTBdfHxlW25dfHxlWzBdKStcIl1cIn19LG09ZnVuY3Rpb24odCxlLG4pe3ZhciByPVN0cmluZyh0KTtyZXR1cm4hcnx8ci5sZW5ndGg+PWU/dDpcIlwiK0FycmF5KGUrMS1yLmxlbmd0aCkuam9pbihuKSt0fSx2PXtzOm0sejpmdW5jdGlvbih0KXt2YXIgZT0tdC51dGNPZmZzZXQoKSxuPU1hdGguYWJzKGUpLHI9TWF0aC5mbG9vcihuLzYwKSxpPW4lNjA7cmV0dXJuKGU8PTA/XCIrXCI6XCItXCIpK20ociwyLFwiMFwiKStcIjpcIittKGksMixcIjBcIil9LG06ZnVuY3Rpb24gdChlLG4pe2lmKGUuZGF0ZSgpPG4uZGF0ZSgpKXJldHVybi10KG4sZSk7dmFyIHI9MTIqKG4ueWVhcigpLWUueWVhcigpKSsobi5tb250aCgpLWUubW9udGgoKSksaT1lLmNsb25lKCkuYWRkKHIsYykscz1uLWk8MCx1PWUuY2xvbmUoKS5hZGQocisocz8tMToxKSxjKTtyZXR1cm4rKC0ocisobi1pKS8ocz9pLXU6dS1pKSl8fDApfSxhOmZ1bmN0aW9uKHQpe3JldHVybiB0PDA/TWF0aC5jZWlsKHQpfHwwOk1hdGguZmxvb3IodCl9LHA6ZnVuY3Rpb24odCl7cmV0dXJue006Yyx5OmgsdzpvLGQ6YSxEOmQsaDp1LG06cyxzOmksbXM6cixROmZ9W3RdfHxTdHJpbmcodHx8XCJcIikudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9zJC8sXCJcIil9LHU6ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR9fSxnPVwiZW5cIixEPXt9O0RbZ109TTt2YXIgcD1cIiRpc0RheWpzT2JqZWN0XCIsUz1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIF98fCEoIXR8fCF0W3BdKX0sdz1mdW5jdGlvbiB0KGUsbixyKXt2YXIgaTtpZighZSlyZXR1cm4gZztpZihcInN0cmluZ1wiPT10eXBlb2YgZSl7dmFyIHM9ZS50b0xvd2VyQ2FzZSgpO0Rbc10mJihpPXMpLG4mJihEW3NdPW4saT1zKTt2YXIgdT1lLnNwbGl0KFwiLVwiKTtpZighaSYmdS5sZW5ndGg+MSlyZXR1cm4gdCh1WzBdKX1lbHNle3ZhciBhPWUubmFtZTtEW2FdPWUsaT1hfXJldHVybiFyJiZpJiYoZz1pKSxpfHwhciYmZ30sTz1mdW5jdGlvbih0LGUpe2lmKFModCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZT9lOnt9O3JldHVybiBuLmRhdGU9dCxuLmFyZ3M9YXJndW1lbnRzLG5ldyBfKG4pfSxiPXY7Yi5sPXcsYi5pPVMsYi53PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCx7bG9jYWxlOmUuJEwsdXRjOmUuJHUseDplLiR4LCRvZmZzZXQ6ZS4kb2Zmc2V0fSl9O3ZhciBfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTSh0KXt0aGlzLiRMPXcodC5sb2NhbGUsbnVsbCwhMCksdGhpcy5wYXJzZSh0KSx0aGlzLiR4PXRoaXMuJHh8fHQueHx8e30sdGhpc1twXT0hMH12YXIgbT1NLnByb3RvdHlwZTtyZXR1cm4gbS5wYXJzZT1mdW5jdGlvbih0KXt0aGlzLiRkPWZ1bmN0aW9uKHQpe3ZhciBlPXQuZGF0ZSxuPXQudXRjO2lmKG51bGw9PT1lKXJldHVybiBuZXcgRGF0ZShOYU4pO2lmKGIudShlKSlyZXR1cm4gbmV3IERhdGU7aWYoZSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIG5ldyBEYXRlKGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiYhL1okL2kudGVzdChlKSl7dmFyIHI9ZS5tYXRjaCgkKTtpZihyKXt2YXIgaT1yWzJdLTF8fDAscz0ocls3XXx8XCIwXCIpLnN1YnN0cmluZygwLDMpO3JldHVybiBuP25ldyBEYXRlKERhdGUuVVRDKHJbMV0saSxyWzNdfHwxLHJbNF18fDAscls1XXx8MCxyWzZdfHwwLHMpKTpuZXcgRGF0ZShyWzFdLGksclszXXx8MSxyWzRdfHwwLHJbNV18fDAscls2XXx8MCxzKX19cmV0dXJuIG5ldyBEYXRlKGUpfSh0KSx0aGlzLmluaXQoKX0sbS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kZDt0aGlzLiR5PXQuZ2V0RnVsbFllYXIoKSx0aGlzLiRNPXQuZ2V0TW9udGgoKSx0aGlzLiREPXQuZ2V0RGF0ZSgpLHRoaXMuJFc9dC5nZXREYXkoKSx0aGlzLiRIPXQuZ2V0SG91cnMoKSx0aGlzLiRtPXQuZ2V0TWludXRlcygpLHRoaXMuJHM9dC5nZXRTZWNvbmRzKCksdGhpcy4kbXM9dC5nZXRNaWxsaXNlY29uZHMoKX0sbS4kdXRpbHM9ZnVuY3Rpb24oKXtyZXR1cm4gYn0sbS5pc1ZhbGlkPWZ1bmN0aW9uKCl7cmV0dXJuISh0aGlzLiRkLnRvU3RyaW5nKCk9PT1sKX0sbS5pc1NhbWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1PKHQpO3JldHVybiB0aGlzLnN0YXJ0T2YoZSk8PW4mJm48PXRoaXMuZW5kT2YoZSl9LG0uaXNBZnRlcj1mdW5jdGlvbih0LGUpe3JldHVybiBPKHQpPHRoaXMuc3RhcnRPZihlKX0sbS5pc0JlZm9yZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVuZE9mKGUpPE8odCl9LG0uJGc9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBiLnUodCk/dGhpc1tlXTp0aGlzLnNldChuLHQpfSxtLnVuaXg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKS8xZTMpfSxtLnZhbHVlT2Y9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC5nZXRUaW1lKCl9LG0uc3RhcnRPZj1mdW5jdGlvbih0LGUpe3ZhciBuPXRoaXMscj0hIWIudShlKXx8ZSxmPWIucCh0KSxsPWZ1bmN0aW9uKHQsZSl7dmFyIGk9Yi53KG4uJHU/RGF0ZS5VVEMobi4keSxlLHQpOm5ldyBEYXRlKG4uJHksZSx0KSxuKTtyZXR1cm4gcj9pOmkuZW5kT2YoYSl9LCQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYi53KG4udG9EYXRlKClbdF0uYXBwbHkobi50b0RhdGUoXCJzXCIpLChyP1swLDAsMCwwXTpbMjMsNTksNTksOTk5XSkuc2xpY2UoZSkpLG4pfSx5PXRoaXMuJFcsTT10aGlzLiRNLG09dGhpcy4kRCx2PVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKTtzd2l0Y2goZil7Y2FzZSBoOnJldHVybiByP2woMSwwKTpsKDMxLDExKTtjYXNlIGM6cmV0dXJuIHI/bCgxLE0pOmwoMCxNKzEpO2Nhc2Ugbzp2YXIgZz10aGlzLiRsb2NhbGUoKS53ZWVrU3RhcnR8fDAsRD0oeTxnP3krNzp5KS1nO3JldHVybiBsKHI/bS1EOm0rKDYtRCksTSk7Y2FzZSBhOmNhc2UgZDpyZXR1cm4gJCh2K1wiSG91cnNcIiwwKTtjYXNlIHU6cmV0dXJuICQoditcIk1pbnV0ZXNcIiwxKTtjYXNlIHM6cmV0dXJuICQoditcIlNlY29uZHNcIiwyKTtjYXNlIGk6cmV0dXJuICQoditcIk1pbGxpc2Vjb25kc1wiLDMpO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY2xvbmUoKX19LG0uZW5kT2Y9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3RhcnRPZih0LCExKX0sbS4kc2V0PWZ1bmN0aW9uKHQsZSl7dmFyIG4sbz1iLnAodCksZj1cInNldFwiKyh0aGlzLiR1P1wiVVRDXCI6XCJcIiksbD0obj17fSxuW2FdPWYrXCJEYXRlXCIsbltkXT1mK1wiRGF0ZVwiLG5bY109ZitcIk1vbnRoXCIsbltoXT1mK1wiRnVsbFllYXJcIixuW3VdPWYrXCJIb3Vyc1wiLG5bc109ZitcIk1pbnV0ZXNcIixuW2ldPWYrXCJTZWNvbmRzXCIsbltyXT1mK1wiTWlsbGlzZWNvbmRzXCIsbilbb10sJD1vPT09YT90aGlzLiREKyhlLXRoaXMuJFcpOmU7aWYobz09PWN8fG89PT1oKXt2YXIgeT10aGlzLmNsb25lKCkuc2V0KGQsMSk7eS4kZFtsXSgkKSx5LmluaXQoKSx0aGlzLiRkPXkuc2V0KGQsTWF0aC5taW4odGhpcy4kRCx5LmRheXNJbk1vbnRoKCkpKS4kZH1lbHNlIGwmJnRoaXMuJGRbbF0oJCk7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXN9LG0uc2V0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuY2xvbmUoKS4kc2V0KHQsZSl9LG0uZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzW2IucCh0KV0oKX0sbS5hZGQ9ZnVuY3Rpb24ocixmKXt2YXIgZCxsPXRoaXM7cj1OdW1iZXIocik7dmFyICQ9Yi5wKGYpLHk9ZnVuY3Rpb24odCl7dmFyIGU9TyhsKTtyZXR1cm4gYi53KGUuZGF0ZShlLmRhdGUoKStNYXRoLnJvdW5kKHQqcikpLGwpfTtpZigkPT09YylyZXR1cm4gdGhpcy5zZXQoYyx0aGlzLiRNK3IpO2lmKCQ9PT1oKXJldHVybiB0aGlzLnNldChoLHRoaXMuJHkrcik7aWYoJD09PWEpcmV0dXJuIHkoMSk7aWYoJD09PW8pcmV0dXJuIHkoNyk7dmFyIE09KGQ9e30sZFtzXT1lLGRbdV09bixkW2ldPXQsZClbJF18fDEsbT10aGlzLiRkLmdldFRpbWUoKStyKk07cmV0dXJuIGIudyhtLHRoaXMpfSxtLnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuYWRkKC0xKnQsZSl9LG0uZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMsbj10aGlzLiRsb2NhbGUoKTtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG4uaW52YWxpZERhdGV8fGw7dmFyIHI9dHx8XCJZWVlZLU1NLUREVEhIOm1tOnNzWlwiLGk9Yi56KHRoaXMpLHM9dGhpcy4kSCx1PXRoaXMuJG0sYT10aGlzLiRNLG89bi53ZWVrZGF5cyxjPW4ubW9udGhzLGY9bi5tZXJpZGllbSxoPWZ1bmN0aW9uKHQsbixpLHMpe3JldHVybiB0JiYodFtuXXx8dChlLHIpKXx8aVtuXS5zbGljZSgwLHMpfSxkPWZ1bmN0aW9uKHQpe3JldHVybiBiLnMocyUxMnx8MTIsdCxcIjBcIil9LCQ9Znx8ZnVuY3Rpb24odCxlLG4pe3ZhciByPXQ8MTI/XCJBTVwiOlwiUE1cIjtyZXR1cm4gbj9yLnRvTG93ZXJDYXNlKCk6cn07cmV0dXJuIHIucmVwbGFjZSh5LChmdW5jdGlvbih0LHIpe3JldHVybiByfHxmdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZVwiWVlcIjpyZXR1cm4gU3RyaW5nKGUuJHkpLnNsaWNlKC0yKTtjYXNlXCJZWVlZXCI6cmV0dXJuIGIucyhlLiR5LDQsXCIwXCIpO2Nhc2VcIk1cIjpyZXR1cm4gYSsxO2Nhc2VcIk1NXCI6cmV0dXJuIGIucyhhKzEsMixcIjBcIik7Y2FzZVwiTU1NXCI6cmV0dXJuIGgobi5tb250aHNTaG9ydCxhLGMsMyk7Y2FzZVwiTU1NTVwiOnJldHVybiBoKGMsYSk7Y2FzZVwiRFwiOnJldHVybiBlLiREO2Nhc2VcIkREXCI6cmV0dXJuIGIucyhlLiRELDIsXCIwXCIpO2Nhc2VcImRcIjpyZXR1cm4gU3RyaW5nKGUuJFcpO2Nhc2VcImRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c01pbixlLiRXLG8sMik7Y2FzZVwiZGRkXCI6cmV0dXJuIGgobi53ZWVrZGF5c1Nob3J0LGUuJFcsbywzKTtjYXNlXCJkZGRkXCI6cmV0dXJuIG9bZS4kV107Y2FzZVwiSFwiOnJldHVybiBTdHJpbmcocyk7Y2FzZVwiSEhcIjpyZXR1cm4gYi5zKHMsMixcIjBcIik7Y2FzZVwiaFwiOnJldHVybiBkKDEpO2Nhc2VcImhoXCI6cmV0dXJuIGQoMik7Y2FzZVwiYVwiOnJldHVybiAkKHMsdSwhMCk7Y2FzZVwiQVwiOnJldHVybiAkKHMsdSwhMSk7Y2FzZVwibVwiOnJldHVybiBTdHJpbmcodSk7Y2FzZVwibW1cIjpyZXR1cm4gYi5zKHUsMixcIjBcIik7Y2FzZVwic1wiOnJldHVybiBTdHJpbmcoZS4kcyk7Y2FzZVwic3NcIjpyZXR1cm4gYi5zKGUuJHMsMixcIjBcIik7Y2FzZVwiU1NTXCI6cmV0dXJuIGIucyhlLiRtcywzLFwiMFwiKTtjYXNlXCJaXCI6cmV0dXJuIGl9cmV0dXJuIG51bGx9KHQpfHxpLnJlcGxhY2UoXCI6XCIsXCJcIil9KSl9LG0udXRjT2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuIDE1Ki1NYXRoLnJvdW5kKHRoaXMuJGQuZ2V0VGltZXpvbmVPZmZzZXQoKS8xNSl9LG0uZGlmZj1mdW5jdGlvbihyLGQsbCl7dmFyICQseT10aGlzLE09Yi5wKGQpLG09TyhyKSx2PShtLnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpKmUsZz10aGlzLW0sRD1mdW5jdGlvbigpe3JldHVybiBiLm0oeSxtKX07c3dpdGNoKE0pe2Nhc2UgaDokPUQoKS8xMjticmVhaztjYXNlIGM6JD1EKCk7YnJlYWs7Y2FzZSBmOiQ9RCgpLzM7YnJlYWs7Y2FzZSBvOiQ9KGctdikvNjA0OGU1O2JyZWFrO2Nhc2UgYTokPShnLXYpLzg2NGU1O2JyZWFrO2Nhc2UgdTokPWcvbjticmVhaztjYXNlIHM6JD1nL2U7YnJlYWs7Y2FzZSBpOiQ9Zy90O2JyZWFrO2RlZmF1bHQ6JD1nfXJldHVybiBsPyQ6Yi5hKCQpfSxtLmRheXNJbk1vbnRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kT2YoYykuJER9LG0uJGxvY2FsZT1mdW5jdGlvbigpe3JldHVybiBEW3RoaXMuJExdfSxtLmxvY2FsZT1mdW5jdGlvbih0LGUpe2lmKCF0KXJldHVybiB0aGlzLiRMO3ZhciBuPXRoaXMuY2xvbmUoKSxyPXcodCxlLCEwKTtyZXR1cm4gciYmKG4uJEw9ciksbn0sbS5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBiLncodGhpcy4kZCx0aGlzKX0sbS50b0RhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpfSxtLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzVmFsaWQoKT90aGlzLnRvSVNPU3RyaW5nKCk6bnVsbH0sbS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvSVNPU3RyaW5nKCl9LG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4kZC50b1VUQ1N0cmluZygpfSxNfSgpLGs9Xy5wcm90b3R5cGU7cmV0dXJuIE8ucHJvdG90eXBlPWssW1tcIiRtc1wiLHJdLFtcIiRzXCIsaV0sW1wiJG1cIixzXSxbXCIkSFwiLHVdLFtcIiRXXCIsYV0sW1wiJE1cIixjXSxbXCIkeVwiLGhdLFtcIiREXCIsZF1dLmZvckVhY2goKGZ1bmN0aW9uKHQpe2tbdFsxXV09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuJGcoZSx0WzBdLHRbMV0pfX0pKSxPLmV4dGVuZD1mdW5jdGlvbih0LGUpe3JldHVybiB0LiRpfHwodChlLF8sTyksdC4kaT0hMCksT30sTy5sb2NhbGU9dyxPLmlzRGF5anM9UyxPLnVuaXg9ZnVuY3Rpb24odCl7cmV0dXJuIE8oMWUzKnQpfSxPLmVuPURbZ10sTy5Mcz1ELE8ucD17fSxPfSkpOyIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2FyaXR5KG4sIGZuKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG4gIHN3aXRjaCAobikge1xuICAgIGNhc2UgMDogcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbihhMCkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbihhMCwgYTEpIHsgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24oYTAsIGExLCBhMikgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDQ6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMykgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDU6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQpIHsgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gICAgY2FzZSA2OiByZXR1cm4gZnVuY3Rpb24oYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDc6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNikgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDg6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcpIHsgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gICAgY2FzZSA5OiByZXR1cm4gZnVuY3Rpb24oYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDEwOiByZXR1cm4gZnVuY3Rpb24oYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTkpIHsgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBhcmd1bWVudCB0byBfYXJpdHkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiB0ZW4nKTtcbiAgfVxufTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCJ2YXIgY3JlYXRlV3JhcCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVdyYXAnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9DVVJSWV9GTEFHID0gODtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGFyZ3VtZW50cyBvZiBgZnVuY2AgYW5kIGVpdGhlciBpbnZva2VzXG4gKiBgZnVuY2AgcmV0dXJuaW5nIGl0cyByZXN1bHQsIGlmIGF0IGxlYXN0IGBhcml0eWAgbnVtYmVyIG9mIGFyZ3VtZW50cyBoYXZlXG4gKiBiZWVuIHByb3ZpZGVkLCBvciByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSByZW1haW5pbmcgYGZ1bmNgXG4gKiBhcmd1bWVudHMsIGFuZCBzbyBvbi4gVGhlIGFyaXR5IG9mIGBmdW5jYCBtYXkgYmUgc3BlY2lmaWVkIGlmIGBmdW5jLmxlbmd0aGBcbiAqIGlzIG5vdCBzdWZmaWNpZW50LlxuICpcbiAqIFRoZSBgXy5jdXJyeS5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljIGJ1aWxkcyxcbiAqIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgY3VycmllZCBmdW5jdGlvbnMuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHk9ZnVuYy5sZW5ndGhdIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcGFyYW0tIHtPYmplY3R9IFtndWFyZF0gRW5hYmxlcyB1c2UgYXMgYW4gaXRlcmF0ZWUgZm9yIG1ldGhvZHMgbGlrZSBgXy5tYXBgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY3VycmllZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIGFiYyA9IGZ1bmN0aW9uKGEsIGIsIGMpIHtcbiAqICAgcmV0dXJuIFthLCBiLCBjXTtcbiAqIH07XG4gKlxuICogdmFyIGN1cnJpZWQgPSBfLmN1cnJ5KGFiYyk7XG4gKlxuICogY3VycmllZCgxKSgyKSgzKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIGN1cnJpZWQoMSwgMikoMyk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqXG4gKiBjdXJyaWVkKDEsIDIsIDMpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogLy8gQ3VycmllZCB3aXRoIHBsYWNlaG9sZGVycy5cbiAqIGN1cnJpZWQoMSkoXywgMykoMik7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqL1xuZnVuY3Rpb24gY3VycnkoZnVuYywgYXJpdHksIGd1YXJkKSB7XG4gIGFyaXR5ID0gZ3VhcmQgPyB1bmRlZmluZWQgOiBhcml0eTtcbiAgdmFyIHJlc3VsdCA9IGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9DVVJSWV9GTEFHLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgYXJpdHkpO1xuICByZXN1bHQucGxhY2Vob2xkZXIgPSBjdXJyeS5wbGFjZWhvbGRlcjtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gQXNzaWduIGRlZmF1bHQgcGxhY2Vob2xkZXJzLlxuY3VycnkucGxhY2Vob2xkZXIgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBjdXJyeTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2hhcyhwcm9wLCBvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApO1xufTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9fY3VycnkxJyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vX2N1cnJ5MicpO1xudmFyIF9pc1BsYWNlaG9sZGVyID0gcmVxdWlyZSgnLi9faXNQbGFjZWhvbGRlcicpO1xuXG5cbi8qKlxuICogT3B0aW1pemVkIGludGVybmFsIHRocmVlLWFyaXR5IGN1cnJ5IGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgY3VycmllZCBmdW5jdGlvbi5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY3VycnkzKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmMyhhLCBiLCBjKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBmMztcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIF9pc1BsYWNlaG9sZGVyKGEpID8gZjNcbiAgICAgICAgICAgICA6IF9jdXJyeTIoZnVuY3Rpb24oX2IsIF9jKSB7IHJldHVybiBmbihhLCBfYiwgX2MpOyB9KTtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIF9pc1BsYWNlaG9sZGVyKGEpICYmIF9pc1BsYWNlaG9sZGVyKGIpID8gZjNcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGEpID8gX2N1cnJ5MihmdW5jdGlvbihfYSwgX2MpIHsgcmV0dXJuIGZuKF9hLCBiLCBfYyk7IH0pXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihiKSA/IF9jdXJyeTIoZnVuY3Rpb24oX2IsIF9jKSB7IHJldHVybiBmbihhLCBfYiwgX2MpOyB9KVxuICAgICAgICAgICAgIDogX2N1cnJ5MShmdW5jdGlvbihfYykgeyByZXR1cm4gZm4oYSwgYiwgX2MpOyB9KTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBfaXNQbGFjZWhvbGRlcihhKSAmJiBfaXNQbGFjZWhvbGRlcihiKSAmJiBfaXNQbGFjZWhvbGRlcihjKSA/IGYzXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihhKSAmJiBfaXNQbGFjZWhvbGRlcihiKSA/IF9jdXJyeTIoZnVuY3Rpb24oX2EsIF9iKSB7IHJldHVybiBmbihfYSwgX2IsIGMpOyB9KVxuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYSkgJiYgX2lzUGxhY2Vob2xkZXIoYykgPyBfY3VycnkyKGZ1bmN0aW9uKF9hLCBfYykgeyByZXR1cm4gZm4oX2EsIGIsIF9jKTsgfSlcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGIpICYmIF9pc1BsYWNlaG9sZGVyKGMpID8gX2N1cnJ5MihmdW5jdGlvbihfYiwgX2MpIHsgcmV0dXJuIGZuKGEsIF9iLCBfYyk7IH0pXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihhKSA/IF9jdXJyeTEoZnVuY3Rpb24oX2EpIHsgcmV0dXJuIGZuKF9hLCBiLCBjKTsgfSlcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGIpID8gX2N1cnJ5MShmdW5jdGlvbihfYikgeyByZXR1cm4gZm4oYSwgX2IsIGMpOyB9KVxuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYykgPyBfY3VycnkxKGZ1bmN0aW9uKF9jKSB7IHJldHVybiBmbihhLCBiLCBfYyk7IH0pXG4gICAgICAgICAgICAgOiBmbihhLCBiLCBjKTtcbiAgICB9XG4gIH07XG59O1xuIiwidmFyIF9hcml0eSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2FyaXR5Jyk7XG52YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfY3VycnlOID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnlOJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgY3VycmllZCBlcXVpdmFsZW50IG9mIHRoZSBwcm92aWRlZCBmdW5jdGlvbiwgd2l0aCB0aGUgc3BlY2lmaWVkXG4gKiBhcml0eS4gVGhlIGN1cnJpZWQgZnVuY3Rpb24gaGFzIHR3byB1bnVzdWFsIGNhcGFiaWxpdGllcy4gRmlyc3QsIGl0c1xuICogYXJndW1lbnRzIG5lZWRuJ3QgYmUgcHJvdmlkZWQgb25lIGF0IGEgdGltZS4gSWYgYGdgIGlzIGBSLmN1cnJ5TigzLCBmKWAsIHRoZVxuICogZm9sbG93aW5nIGFyZSBlcXVpdmFsZW50OlxuICpcbiAqICAgLSBgZygxKSgyKSgzKWBcbiAqICAgLSBgZygxKSgyLCAzKWBcbiAqICAgLSBgZygxLCAyKSgzKWBcbiAqICAgLSBgZygxLCAyLCAzKWBcbiAqXG4gKiBTZWNvbmRseSwgdGhlIHNwZWNpYWwgcGxhY2Vob2xkZXIgdmFsdWUgYFIuX19gIG1heSBiZSB1c2VkIHRvIHNwZWNpZnlcbiAqIFwiZ2Fwc1wiLCBhbGxvd2luZyBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMsXG4gKiByZWdhcmRsZXNzIG9mIHRoZWlyIHBvc2l0aW9ucy4gSWYgYGdgIGlzIGFzIGFib3ZlIGFuZCBgX2AgaXMgYFIuX19gLCB0aGVcbiAqIGZvbGxvd2luZyBhcmUgZXF1aXZhbGVudDpcbiAqXG4gKiAgIC0gYGcoMSwgMiwgMylgXG4gKiAgIC0gYGcoXywgMiwgMykoMSlgXG4gKiAgIC0gYGcoXywgXywgMykoMSkoMilgXG4gKiAgIC0gYGcoXywgXywgMykoMSwgMilgXG4gKiAgIC0gYGcoXywgMikoMSkoMylgXG4gKiAgIC0gYGcoXywgMikoMSwgMylgXG4gKiAgIC0gYGcoXywgMikoXywgMykoMSlgXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuNS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgTnVtYmVyIC0+ICgqIC0+IGEpIC0+ICgqIC0+IGEpXG4gKiBAcGFyYW0ge051bWJlcn0gbGVuZ3RoIFRoZSBhcml0eSBmb3IgdGhlIHJldHVybmVkIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgbmV3LCBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQHNlZSBSLmN1cnJ5XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIHN1bUFyZ3MgPSAoLi4uYXJncykgPT4gUi5zdW0oYXJncyk7XG4gKlxuICogICAgICB2YXIgY3VycmllZEFkZEZvdXJOdW1iZXJzID0gUi5jdXJyeU4oNCwgc3VtQXJncyk7XG4gKiAgICAgIHZhciBmID0gY3VycmllZEFkZEZvdXJOdW1iZXJzKDEsIDIpO1xuICogICAgICB2YXIgZyA9IGYoMyk7XG4gKiAgICAgIGcoNCk7IC8vPT4gMTBcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGN1cnJ5TihsZW5ndGgsIGZuKSB7XG4gIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gX2N1cnJ5MShmbik7XG4gIH1cbiAgcmV0dXJuIF9hcml0eShsZW5ndGgsIF9jdXJyeU4obGVuZ3RoLCBbXSwgZm4pKTtcbn0pO1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfaXNQbGFjZWhvbGRlcihhKSB7XG4gIHJldHVybiBhICE9IG51bGwgJiZcbiAgICAgICAgIHR5cGVvZiBhID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgYVsnQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyJ10gPT09IHRydWU7XG59O1xuIiwidmFyIF94d3JhcCA9IHJlcXVpcmUoJy4vX3h3cmFwJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2JpbmQnKTtcbnZhciBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2lzQXJyYXlMaWtlJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIF9hcnJheVJlZHVjZSh4ZiwgYWNjLCBsaXN0KSB7XG4gICAgdmFyIGlkeCA9IDA7XG4gICAgdmFyIGxlbiA9IGxpc3QubGVuZ3RoO1xuICAgIHdoaWxlIChpZHggPCBsZW4pIHtcbiAgICAgIGFjYyA9IHhmWydAQHRyYW5zZHVjZXIvc3RlcCddKGFjYywgbGlzdFtpZHhdKTtcbiAgICAgIGlmIChhY2MgJiYgYWNjWydAQHRyYW5zZHVjZXIvcmVkdWNlZCddKSB7XG4gICAgICAgIGFjYyA9IGFjY1snQEB0cmFuc2R1Y2VyL3ZhbHVlJ107XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaWR4ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiB4ZlsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddKGFjYyk7XG4gIH1cblxuICBmdW5jdGlvbiBfaXRlcmFibGVSZWR1Y2UoeGYsIGFjYywgaXRlcikge1xuICAgIHZhciBzdGVwID0gaXRlci5uZXh0KCk7XG4gICAgd2hpbGUgKCFzdGVwLmRvbmUpIHtcbiAgICAgIGFjYyA9IHhmWydAQHRyYW5zZHVjZXIvc3RlcCddKGFjYywgc3RlcC52YWx1ZSk7XG4gICAgICBpZiAoYWNjICYmIGFjY1snQEB0cmFuc2R1Y2VyL3JlZHVjZWQnXSkge1xuICAgICAgICBhY2MgPSBhY2NbJ0BAdHJhbnNkdWNlci92YWx1ZSddO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHN0ZXAgPSBpdGVyLm5leHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHhmWydAQHRyYW5zZHVjZXIvcmVzdWx0J10oYWNjKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9tZXRob2RSZWR1Y2UoeGYsIGFjYywgb2JqKSB7XG4gICAgcmV0dXJuIHhmWydAQHRyYW5zZHVjZXIvcmVzdWx0J10ob2JqLnJlZHVjZShiaW5kKHhmWydAQHRyYW5zZHVjZXIvc3RlcCddLCB4ZiksIGFjYykpO1xuICB9XG5cbiAgdmFyIHN5bUl0ZXJhdG9yID0gKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnKSA/IFN5bWJvbC5pdGVyYXRvciA6ICdAQGl0ZXJhdG9yJztcbiAgcmV0dXJuIGZ1bmN0aW9uIF9yZWR1Y2UoZm4sIGFjYywgbGlzdCkge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZuID0gX3h3cmFwKGZuKTtcbiAgICB9XG4gICAgaWYgKGlzQXJyYXlMaWtlKGxpc3QpKSB7XG4gICAgICByZXR1cm4gX2FycmF5UmVkdWNlKGZuLCBhY2MsIGxpc3QpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGxpc3QucmVkdWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gX21ldGhvZFJlZHVjZShmbiwgYWNjLCBsaXN0KTtcbiAgICB9XG4gICAgaWYgKGxpc3Rbc3ltSXRlcmF0b3JdICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBfaXRlcmFibGVSZWR1Y2UoZm4sIGFjYywgbGlzdFtzeW1JdGVyYXRvcl0oKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbGlzdC5uZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gX2l0ZXJhYmxlUmVkdWNlKGZuLCBhY2MsIGxpc3QpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWR1Y2U6IGxpc3QgbXVzdCBiZSBhcnJheSBvciBpdGVyYWJsZScpO1xuICB9O1xufSgpKTtcbiIsIi8qKlxuICogVGVzdHMgd2hldGhlciBvciBub3QgYW4gb2JqZWN0IGlzIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgb2JqZWN0IHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYHZhbGAgaXMgYW4gYXJyYXksIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIF9pc0FycmF5KFtdKTsgLy89PiB0cnVlXG4gKiAgICAgIF9pc0FycmF5KG51bGwpOyAvLz0+IGZhbHNlXG4gKiAgICAgIF9pc0FycmF5KHt9KTsgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gX2lzQXJyYXkodmFsKSB7XG4gIHJldHVybiAodmFsICE9IG51bGwgJiZcbiAgICAgICAgICB2YWwubGVuZ3RoID49IDAgJiZcbiAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJyk7XG59O1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfZGlzcGF0Y2hhYmxlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fZGlzcGF0Y2hhYmxlJyk7XG52YXIgX21hcCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX21hcCcpO1xudmFyIF9yZWR1Y2UgPSByZXF1aXJlKCcuL2ludGVybmFsL19yZWR1Y2UnKTtcbnZhciBfeG1hcCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX3htYXAnKTtcbnZhciBjdXJyeU4gPSByZXF1aXJlKCcuL2N1cnJ5TicpO1xudmFyIGtleXMgPSByZXF1aXJlKCcuL2tleXMnKTtcblxuXG4vKipcbiAqIFRha2VzIGEgZnVuY3Rpb24gYW5kXG4gKiBhIFtmdW5jdG9yXShodHRwczovL2dpdGh1Yi5jb20vZmFudGFzeWxhbmQvZmFudGFzeS1sYW5kI2Z1bmN0b3IpLFxuICogYXBwbGllcyB0aGUgZnVuY3Rpb24gdG8gZWFjaCBvZiB0aGUgZnVuY3RvcidzIHZhbHVlcywgYW5kIHJldHVybnNcbiAqIGEgZnVuY3RvciBvZiB0aGUgc2FtZSBzaGFwZS5cbiAqXG4gKiBSYW1kYSBwcm92aWRlcyBzdWl0YWJsZSBgbWFwYCBpbXBsZW1lbnRhdGlvbnMgZm9yIGBBcnJheWAgYW5kIGBPYmplY3RgLFxuICogc28gdGhpcyBmdW5jdGlvbiBtYXkgYmUgYXBwbGllZCB0byBgWzEsIDIsIDNdYCBvciBge3g6IDEsIHk6IDIsIHo6IDN9YC5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgbWFwYCBtZXRob2Qgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgaWYgcHJlc2VudC5cbiAqXG4gKiBBY3RzIGFzIGEgdHJhbnNkdWNlciBpZiBhIHRyYW5zZm9ybWVyIGlzIGdpdmVuIGluIGxpc3QgcG9zaXRpb24uXG4gKlxuICogQWxzbyB0cmVhdHMgZnVuY3Rpb25zIGFzIGZ1bmN0b3JzIGFuZCB3aWxsIGNvbXBvc2UgdGhlbSB0b2dldGhlci5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIEZ1bmN0b3IgZiA9PiAoYSAtPiBiKSAtPiBmIGEgLT4gZiBiXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIGV2ZXJ5IGVsZW1lbnQgb2YgdGhlIGlucHV0IGBsaXN0YC5cbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgVGhlIGxpc3QgdG8gYmUgaXRlcmF0ZWQgb3Zlci5cbiAqIEByZXR1cm4ge0FycmF5fSBUaGUgbmV3IGxpc3QuXG4gKiBAc2VlIFIudHJhbnNkdWNlLCBSLmFkZEluZGV4XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGRvdWJsZSA9IHggPT4geCAqIDI7XG4gKlxuICogICAgICBSLm1hcChkb3VibGUsIFsxLCAyLCAzXSk7IC8vPT4gWzIsIDQsIDZdXG4gKlxuICogICAgICBSLm1hcChkb3VibGUsIHt4OiAxLCB5OiAyLCB6OiAzfSk7IC8vPT4ge3g6IDIsIHk6IDQsIHo6IDZ9XG4gKiBAc3ltYiBSLm1hcChmLCBbYSwgYl0pID0gW2YoYSksIGYoYildXG4gKiBAc3ltYiBSLm1hcChmLCB7IHg6IGEsIHk6IGIgfSkgPSB7IHg6IGYoYSksIHk6IGYoYikgfVxuICogQHN5bWIgUi5tYXAoZiwgZnVuY3Rvcl9vKSA9IGZ1bmN0b3Jfby5tYXAoZilcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKF9kaXNwYXRjaGFibGUoWydtYXAnXSwgX3htYXAsIGZ1bmN0aW9uIG1hcChmbiwgZnVuY3Rvcikge1xuICBzd2l0Y2ggKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmdW5jdG9yKSkge1xuICAgIGNhc2UgJ1tvYmplY3QgRnVuY3Rpb25dJzpcbiAgICAgIHJldHVybiBjdXJyeU4oZnVuY3Rvci5sZW5ndGgsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBmdW5jdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICAgICAgfSk7XG4gICAgY2FzZSAnW29iamVjdCBPYmplY3RdJzpcbiAgICAgIHJldHVybiBfcmVkdWNlKGZ1bmN0aW9uKGFjYywga2V5KSB7XG4gICAgICAgIGFjY1trZXldID0gZm4oZnVuY3RvcltrZXldKTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgIH0sIHt9LCBrZXlzKGZ1bmN0b3IpKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIF9tYXAoZm4sIGZ1bmN0b3IpO1xuICB9XG59KSk7XG4iLCJ2YXIgbGlzdENhY2hlQ2xlYXIgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVDbGVhcicpLFxuICAgIGxpc3RDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZURlbGV0ZScpLFxuICAgIGxpc3RDYWNoZUdldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUdldCcpLFxuICAgIGxpc3RDYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUhhcycpLFxuICAgIGxpc3RDYWNoZVNldCA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZVNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gbGlzdCBjYWNoZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIExpc3RDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBMaXN0Q2FjaGVgLlxuTGlzdENhY2hlLnByb3RvdHlwZS5jbGVhciA9IGxpc3RDYWNoZUNsZWFyO1xuTGlzdENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBsaXN0Q2FjaGVEZWxldGU7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmdldCA9IGxpc3RDYWNoZUdldDtcbkxpc3RDYWNoZS5wcm90b3R5cGUuaGFzID0gbGlzdENhY2hlSGFzO1xuTGlzdENhY2hlLnByb3RvdHlwZS5zZXQgPSBsaXN0Q2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTGlzdENhY2hlO1xuIiwidmFyIGVxID0gcmVxdWlyZSgnLi9lcScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBga2V5YCBpcyBmb3VuZCBpbiBgYXJyYXlgIG9mIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0geyp9IGtleSBUaGUga2V5IHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBhc3NvY0luZGV4T2YoYXJyYXksIGtleSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5KSkge1xuICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFzc29jSW5kZXhPZjtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgdW5zaWduZWQgaW50ZWdlciB2YWx1ZXMuICovXG52YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cXGQqKSQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBpbmRleC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge251bWJlcn0gW2xlbmd0aD1NQVhfU0FGRV9JTlRFR0VSXSBUaGUgdXBwZXIgYm91bmRzIG9mIGEgdmFsaWQgaW5kZXguXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGluZGV4LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzSW5kZXgodmFsdWUsIGxlbmd0aCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgbGVuZ3RoID0gbGVuZ3RoID09IG51bGwgPyBNQVhfU0FGRV9JTlRFR0VSIDogbGVuZ3RoO1xuXG4gIHJldHVybiAhIWxlbmd0aCAmJlxuICAgICh0eXBlID09ICdudW1iZXInIHx8XG4gICAgICAodHlwZSAhPSAnc3ltYm9sJyAmJiByZUlzVWludC50ZXN0KHZhbHVlKSkpICYmXG4gICAgICAgICh2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDwgbGVuZ3RoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0luZGV4O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgU3ltYm9sYCBwcmltaXRpdmUgb3Igb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgc3ltYm9sLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNTeW1ib2woU3ltYm9sLml0ZXJhdG9yKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3ltYm9sKCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ3N5bWJvbCcgfHxcbiAgICAoaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzeW1ib2xUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3ltYm9sO1xuIiwidmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcga2V5IGlmIGl0J3Mgbm90IGEgc3RyaW5nIG9yIHN5bWJvbC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtzdHJpbmd8c3ltYm9sfSBSZXR1cm5zIHRoZSBrZXkuXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0tleTtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBpbnN0YW5jZSBvZiBgQ3RvcmAgcmVnYXJkbGVzcyBvZlxuICogd2hldGhlciBpdCB3YXMgaW52b2tlZCBhcyBwYXJ0IG9mIGEgYG5ld2AgZXhwcmVzc2lvbiBvciBieSBgY2FsbGAgb3IgYGFwcGx5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ3RvciBUaGUgY29uc3RydWN0b3IgdG8gd3JhcC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUN0b3IoQ3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgLy8gVXNlIGEgYHN3aXRjaGAgc3RhdGVtZW50IHRvIHdvcmsgd2l0aCBjbGFzcyBjb25zdHJ1Y3RvcnMuIFNlZVxuICAgIC8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtZnVuY3Rpb24tb2JqZWN0cy1jYWxsLXRoaXNhcmd1bWVudC1hcmd1bWVudHNsaXN0XG4gICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6IHJldHVybiBuZXcgQ3RvcjtcbiAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0pO1xuICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICBjYXNlIDM6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgY2FzZSA1OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICBjYXNlIDY6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdKTtcbiAgICAgIGNhc2UgNzogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0sIGFyZ3NbNl0pO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBiYXNlQ3JlYXRlKEN0b3IucHJvdG90eXBlKSxcbiAgICAgICAgcmVzdWx0ID0gQ3Rvci5hcHBseSh0aGlzQmluZGluZywgYXJncyk7XG5cbiAgICAvLyBNaW1pYyB0aGUgY29uc3RydWN0b3IncyBgcmV0dXJuYCBiZWhhdmlvci5cbiAgICAvLyBTZWUgaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTMuMi4yIGZvciBtb3JlIGRldGFpbHMuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiB0aGlzQmluZGluZztcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVDdG9yO1xuIiwiLyoqIFVzZWQgYXMgdGhlIGludGVybmFsIGFyZ3VtZW50IHBsYWNlaG9sZGVyLiAqL1xudmFyIFBMQUNFSE9MREVSID0gJ19fbG9kYXNoX3BsYWNlaG9sZGVyX18nO1xuXG4vKipcbiAqIFJlcGxhY2VzIGFsbCBgcGxhY2Vob2xkZXJgIGVsZW1lbnRzIGluIGBhcnJheWAgd2l0aCBhbiBpbnRlcm5hbCBwbGFjZWhvbGRlclxuICogYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgdGhlaXIgaW5kZXhlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHJlcGxhY2UuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBwbGFjZWhvbGRlciBpbmRleGVzLlxuICovXG5mdW5jdGlvbiByZXBsYWNlSG9sZGVycyhhcnJheSwgcGxhY2Vob2xkZXIpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAodmFsdWUgPT09IHBsYWNlaG9sZGVyIHx8IHZhbHVlID09PSBQTEFDRUhPTERFUikge1xuICAgICAgYXJyYXlbaW5kZXhdID0gUExBQ0VIT0xERVI7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXBsYWNlSG9sZGVycztcbiIsIi8qKlxuICogTGlzdCBvZiBVUyBEcml2ZXIgbGljZW5zZXMgcmVnZXhcbiAqIEFsbCBjcmVkaXQgZm9yIGNvbXBpbGluZyB0aGlzIGxpc3QgZ29lcyB0byBnaXRodWIgdXNlciBtaWtlbWZsZW1pbmdcbiAqIFlvdSBtYXkgc2VlIGhpcyBvcmlnaW5hbCBDTEkgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSBoZXJlOlxuICogaHR0cHM6Ly9naXRodWIuY29tL21pa2VtZmxlbWluZy9zdGF0ZS1kcml2ZXJzLWxpY2Vuc2UtcmVnZXhcbiAqIEFuZCB0byB0aGUgb3JpZ2luYWwgY29tcGlsZXIgb2YgYWxsIHRoZSByZWdleCwgZ2l0aHViIHVzZXIgYWRhbWJ1bGxtZXJcbiAqIFlvdSBtYXkgc2VlIGhpcyBvcmlnaW5hbCBhcHByb2FjaCB0byB0aGlzIG1vZHVsZSAoaW4gUEhQKSBoZXJlOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2FkYW1idWxsbWVyL1VTRExSZWdleFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBTDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHs3LDh9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJOTk5OTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs2LDd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gOFwiLFxuICAgIH0sXG4gIF0sXG4gIEFLOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezd9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJOTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDdcIixcbiAgICB9LFxuICBdLFxuICBBWjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk5OIE1pbkxlbmd0aCA9IDkgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgQVI6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDkgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTk4gTWluTGVuZ3RoID0gOSBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgXSxcbiAgQ0E6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIENPOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezMsNn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OIG1pbiBsZW5ndGggNCBtYXggN1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXsxLDV9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQUFOTk5OTiBtaW4gbGVuZ3RoIDMgbWF4IDdcIixcbiAgICB9LFxuICBdLFxuICBDVDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIERFOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezEsN30kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxLTcgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIERDOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17N30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBGTDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17MTJ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDEyIG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezExfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTk5OTiBNaW5MZW5ndGggPSAxMiBNYXhMZW5ndGggPSAxMlwiLFxuICAgIH0sXG4gIF0sXG4gIEdBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17Nyw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIEdVOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezEwfSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OTiBNaW5MZW5ndGggPSAxMCBNYXhMZW5ndGggPSAxMFwiLFxuICAgIH0sXG4gIF0sXG4gIEhJOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIElEOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXs2fVtBLVpdezF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTGljZW5zZSBtdXN0IGJlIDIgbGV0dGVycyBmb2xsb3dlZCBieSA2IG51bWJlcnMgZm9sbG93ZWQgYnkgMSBsZXR0ZXJcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIElMOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTEgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIElOOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OSwxMH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOS0xMCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgSUE6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezN9W0EtWl17Mn1bMC05XXs0fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAzIG51bWJlcnMgZm9sbG93ZWQgYnkgMiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDQgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIEtTOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIEtZOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs4LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDgtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBMQTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezEsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS05IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBNRTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17N31bQS1aXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3IG51bWJlcnMgZm9sbG93ZWQgYnkgMSBsZXR0ZXJcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDggbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1EOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MSwyfVswLTldezExLDEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAxIG9yIDIgbGV0dGVycyBmb2xsb3dlZCBieSAxMSBvciAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTUE6IFtcbiAgICB7XG4gICAgICByZWdleDogLyheW0EtWl17MX1bMC05XXs4fSR8XltBLVpdezJ9WzAtOV17N30kKS9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDggbnVtYmVycyBvciAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNyBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTUk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTU46IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTVM6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICAvLyBUT0RPOiBUZXN0IHJlbWFpbmluZyBMaWNlbnNlc1xuICBNTzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17NSw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA1LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs2fVtSXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDYgbnVtYmVycyBmb2xsb3dlZCBieSBcIlJcIicsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fVtBLVpdezF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVycyBmb2xsb3dlZCBieSAxIGxldHRlclwiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXszfVtBLVpdezF9WzAtOV17Nn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMyBudW1iZXJzICsgMSBhbGZhbnVtZXJpYyArIDYgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7NSw2fVtBLVpdJC9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQU5OTk5OQSBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDcgT1IgQU5OTk5OQSBNaW5MZW5ndGggPSA4IE1heExlbmd0aCA9IDhcIixcbiAgICB9LFxuICBdLFxuICBNVDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezEzfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxMyBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkKFxcZHxbQS1aXSlcXGR7Mn1bQS1aXXszfVxcZCQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOWE5OQUFBTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlthLXpdezN9XFxkezEwfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRocmVlIGxldHRlcnMgYW5kIDEwIGRpZ2l0c1wiLFxuICAgIH0sXG4gIF0sXG4gIE5FOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7Myw4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA0IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxuICBOVjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezksMTB9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDktMTAgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17MTJ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEyIG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk5OIE1pbkxlbmd0aCA9IDkgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIE5IOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC8oXlswLTldezJ9W0EtWl17M31bMC05XXs1fSR8XltBLVpdezN9WzAtOV17OH0kKS9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTGljZW5zZSBtdXN0IGJlIDIgbnVtYmVycyBmb2xsb3dlZCBieSAzIGxldHRlcnMgZm9sbG93ZWQgYnkgNSBudW1iZXJzIE9SIDMgbGV0dGVycyBmb2xsb3dlZCBieSA4IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBOSjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17MTR9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDE0IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBOTTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezgsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOC05IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBOWTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17N30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgNyBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezE3LDE4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxNy0xOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDgtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTkM6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXsxLDEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxLTEyIG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBORDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezN9WzAtOV17Nn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMyBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDYgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgT0g6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsyfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDIgbGV0dGVycyBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBPSzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7Nyw5fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIE9SOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17NSw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA1LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7N30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTiBNaW5MZW5ndGggPSA4IE1heExlbmd0aCA9IDhcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVowLTldezYsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJYWFhYWFhYWFggTWluTGVuZ3RoID0gNiBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgXSxcbiAgUEE6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA4IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBSSTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezcsOH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNyBvciA4IG51bWJlcnMgd2l0aG91dCBsZXR0ZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDYgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFNDOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17NiwxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNi0xMSBudW1iZXJzIChuZXc6IDksIG9sZCBmb3JtYXQ6IDYtMTEpXCIsXG4gICAgfSxcbiAgXSxcbiAgU0Q6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs2LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDYtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVE46IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDctOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVFg6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7NSw4fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk4gTWluTGVuZ3RoID0gNSBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgXSxcbiAgVVQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs0LDEwfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA0LTEwIG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBWVDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezcsfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3LTggbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17N31bQV0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogJ0xpY2Vuc2UgbXVzdCBiZSA3IG51bWJlcnMgZm9sbG93ZWQgYnkgXCJBXCInLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezd9W0EtWl0/JC9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiTk5OTk5OTkEgTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4IE9SIE5OTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgXSxcbiAgVkE6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDggbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBWSTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHsxMH0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTk4gTWluTGVuZ3RoID0gMTAgTWF4TGVuZ3RoID0gMTBcIixcbiAgICB9LFxuICBdLFxuICBXQTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXig/PS57MTJ9JClbQS1aXXsxLDd9W0EtWjAtOVxcXFwqXXs0LDExfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAnTGljZW5zZSBtdXN0IGJlIDEtNyBsZXR0ZXJzIGZvbGxvd2VkIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBudW1iZXJzLCBvciBcIipcIiBmb3IgYSB0b3RhbCBvZiAxMiBjaGFyYWN0ZXJzJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVowLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlhYWFhYWFhYWFhYWCBNaW5MZW5ndGggPSAxMiBNYXhMZW5ndGggPSAxMlwiLFxuICAgIH0sXG4gIF0sXG4gIFdWOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17N30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsyfVswLTldezV9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDIgbGV0dGVycyBmb2xsb3dlZCBieSA1IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezEsMn1bMC05XXs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxLTIgbGV0dGVycyBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDdcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezJ9XFxkezUsNn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJBQU5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gNyBPUiBBQU5OTk5OTiBNaW5MZW5ndGggPSA4IE1heExlbmd0aCA9IDhcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZFtBLVpdXFxkezV9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTkFOTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDdcIixcbiAgICB9LFxuICBdLFxuICBXSTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17MTN9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDEzIG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBXWTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgUFI6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7Nyw5fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG59O1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBfaGFzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faGFzJyk7XG52YXIgX2lzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNBcmd1bWVudHMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGFsbCB0aGUgZW51bWVyYWJsZSBvd24gcHJvcGVydGllcyBvZlxuICogdGhlIHN1cHBsaWVkIG9iamVjdC5cbiAqIE5vdGUgdGhhdCB0aGUgb3JkZXIgb2YgdGhlIG91dHB1dCBhcnJheSBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBjb25zaXN0ZW50XG4gKiBhY3Jvc3MgZGlmZmVyZW50IEpTIHBsYXRmb3Jtcy5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBzaWcge2s6IHZ9IC0+IFtrXVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGV4dHJhY3QgcHJvcGVydGllcyBmcm9tXG4gKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgdGhlIG9iamVjdCdzIG93biBwcm9wZXJ0aWVzLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIua2V5cyh7YTogMSwgYjogMiwgYzogM30pOyAvLz0+IFsnYScsICdiJywgJ2MnXVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpIHtcbiAgLy8gY292ZXIgSUUgPCA5IGtleXMgaXNzdWVzXG4gIHZhciBoYXNFbnVtQnVnID0gISh7dG9TdHJpbmc6IG51bGx9KS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgndG9TdHJpbmcnKTtcbiAgdmFyIG5vbkVudW1lcmFibGVQcm9wcyA9IFsnY29uc3RydWN0b3InLCAndmFsdWVPZicsICdpc1Byb3RvdHlwZU9mJywgJ3RvU3RyaW5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydHlJc0VudW1lcmFibGUnLCAnaGFzT3duUHJvcGVydHknLCAndG9Mb2NhbGVTdHJpbmcnXTtcbiAgLy8gU2FmYXJpIGJ1Z1xuICB2YXIgaGFzQXJnc0VudW1CdWcgPSAoZnVuY3Rpb24oKSB7XG4gICAgJ3VzZSBzdHJpY3QnO1xuICAgIHJldHVybiBhcmd1bWVudHMucHJvcGVydHlJc0VudW1lcmFibGUoJ2xlbmd0aCcpO1xuICB9KCkpO1xuXG4gIHZhciBjb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKGxpc3QsIGl0ZW0pIHtcbiAgICB2YXIgaWR4ID0gMDtcbiAgICB3aGlsZSAoaWR4IDwgbGlzdC5sZW5ndGgpIHtcbiAgICAgIGlmIChsaXN0W2lkeF0gPT09IGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZHggKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHJldHVybiB0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgIWhhc0FyZ3NFbnVtQnVnID9cbiAgICBfY3VycnkxKGZ1bmN0aW9uIGtleXMob2JqKSB7XG4gICAgICByZXR1cm4gT2JqZWN0KG9iaikgIT09IG9iaiA/IFtdIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICB9KSA6XG4gICAgX2N1cnJ5MShmdW5jdGlvbiBrZXlzKG9iaikge1xuICAgICAgaWYgKE9iamVjdChvYmopICE9PSBvYmopIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgICAgdmFyIHByb3AsIG5JZHg7XG4gICAgICB2YXIga3MgPSBbXTtcbiAgICAgIHZhciBjaGVja0FyZ3NMZW5ndGggPSBoYXNBcmdzRW51bUJ1ZyAmJiBfaXNBcmd1bWVudHMob2JqKTtcbiAgICAgIGZvciAocHJvcCBpbiBvYmopIHtcbiAgICAgICAgaWYgKF9oYXMocHJvcCwgb2JqKSAmJiAoIWNoZWNrQXJnc0xlbmd0aCB8fCBwcm9wICE9PSAnbGVuZ3RoJykpIHtcbiAgICAgICAgICBrc1trcy5sZW5ndGhdID0gcHJvcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGhhc0VudW1CdWcpIHtcbiAgICAgICAgbklkeCA9IG5vbkVudW1lcmFibGVQcm9wcy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAobklkeCA+PSAwKSB7XG4gICAgICAgICAgcHJvcCA9IG5vbkVudW1lcmFibGVQcm9wc1tuSWR4XTtcbiAgICAgICAgICBpZiAoX2hhcyhwcm9wLCBvYmopICYmICFjb250YWlucyhrcywgcHJvcCkpIHtcbiAgICAgICAgICAgIGtzW2tzLmxlbmd0aF0gPSBwcm9wO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuSWR4IC09IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBrcztcbiAgICB9KTtcbn0oKSk7XG4iLCJ2YXIgX2N1cnJ5MyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MycpO1xudmFyIF9yZWR1Y2UgPSByZXF1aXJlKCcuL2ludGVybmFsL19yZWR1Y2UnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBzaW5nbGUgaXRlbSBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbGlzdCwgc3VjY2Vzc2l2ZWx5IGNhbGxpbmdcbiAqIHRoZSBpdGVyYXRvciBmdW5jdGlvbiBhbmQgcGFzc2luZyBpdCBhbiBhY2N1bXVsYXRvciB2YWx1ZSBhbmQgdGhlIGN1cnJlbnRcbiAqIHZhbHVlIGZyb20gdGhlIGFycmF5LCBhbmQgdGhlbiBwYXNzaW5nIHRoZSByZXN1bHQgdG8gdGhlIG5leHQgY2FsbC5cbiAqXG4gKiBUaGUgaXRlcmF0b3IgZnVuY3Rpb24gcmVjZWl2ZXMgdHdvIHZhbHVlczogKihhY2MsIHZhbHVlKSouIEl0IG1heSB1c2VcbiAqIGBSLnJlZHVjZWRgIHRvIHNob3J0Y3V0IHRoZSBpdGVyYXRpb24uXG4gKlxuICogVGhlIGFyZ3VtZW50cycgb3JkZXIgb2YgYHJlZHVjZVJpZ2h0YCdzIGl0ZXJhdG9yIGZ1bmN0aW9uIGlzICoodmFsdWUsIGFjYykqLlxuICpcbiAqIE5vdGU6IGBSLnJlZHVjZWAgZG9lcyBub3Qgc2tpcCBkZWxldGVkIG9yIHVuYXNzaWduZWQgaW5kaWNlcyAoc3BhcnNlXG4gKiBhcnJheXMpLCB1bmxpa2UgdGhlIG5hdGl2ZSBgQXJyYXkucHJvdG90eXBlLnJlZHVjZWAgbWV0aG9kLiBGb3IgbW9yZSBkZXRhaWxzXG4gKiBvbiB0aGlzIGJlaGF2aW9yLCBzZWU6XG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9yZWR1Y2UjRGVzY3JpcHRpb25cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgcmVkdWNlYCBtZXRob2Qgb2YgdGhlIHRoaXJkIGFyZ3VtZW50LCBpZiBwcmVzZW50LlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IExpc3RcbiAqIEBzaWcgKChhLCBiKSAtPiBhKSAtPiBhIC0+IFtiXSAtPiBhXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgaXRlcmF0b3IgZnVuY3Rpb24uIFJlY2VpdmVzIHR3byB2YWx1ZXMsIHRoZSBhY2N1bXVsYXRvciBhbmQgdGhlXG4gKiAgICAgICAgY3VycmVudCBlbGVtZW50IGZyb20gdGhlIGFycmF5LlxuICogQHBhcmFtIHsqfSBhY2MgVGhlIGFjY3VtdWxhdG9yIHZhbHVlLlxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBUaGUgbGlzdCB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcmV0dXJuIHsqfSBUaGUgZmluYWwsIGFjY3VtdWxhdGVkIHZhbHVlLlxuICogQHNlZSBSLnJlZHVjZWQsIFIuYWRkSW5kZXgsIFIucmVkdWNlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnJlZHVjZShSLnN1YnRyYWN0LCAwLCBbMSwgMiwgMywgNF0pIC8vID0+ICgoKCgwIC0gMSkgLSAyKSAtIDMpIC0gNCkgPSAtMTBcbiAqICAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAtMTBcbiAqICAgICAgICAgICAgICAgLyBcXCAgICAgICAgICAgICAgLyBcXFxuICogICAgICAgICAgICAgIC0gICA0ICAgICAgICAgICAtNiAgIDRcbiAqICAgICAgICAgICAgIC8gXFwgICAgICAgICAgICAgIC8gXFxcbiAqICAgICAgICAgICAgLSAgIDMgICA9PT4gICAgIC0zICAgM1xuICogICAgICAgICAgIC8gXFwgICAgICAgICAgICAgIC8gXFxcbiAqICAgICAgICAgIC0gICAyICAgICAgICAgICAtMSAgIDJcbiAqICAgICAgICAgLyBcXCAgICAgICAgICAgICAgLyBcXFxuICogICAgICAgIDAgICAxICAgICAgICAgICAgMCAgIDFcbiAqXG4gKiBAc3ltYiBSLnJlZHVjZShmLCBhLCBbYiwgYywgZF0pID0gZihmKGYoYSwgYiksIGMpLCBkKVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTMoX3JlZHVjZSk7XG4iLCJ2YXIgX2lzQXJyYXkgPSByZXF1aXJlKCcuL19pc0FycmF5Jyk7XG5cblxuLyoqXG4gKiBUaGlzIGNoZWNrcyB3aGV0aGVyIGEgZnVuY3Rpb24gaGFzIGEgW21ldGhvZG5hbWVdIGZ1bmN0aW9uLiBJZiBpdCBpc24ndCBhblxuICogYXJyYXkgaXQgd2lsbCBleGVjdXRlIHRoYXQgZnVuY3Rpb24gb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byB0aGUgcmFtZGFcbiAqIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiByYW1kYSBpbXBsZW10YXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXRob2RuYW1lIHByb3BlcnR5IHRvIGNoZWNrIGZvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICogQHJldHVybiB7T2JqZWN0fSBXaGF0ZXZlciB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBtZXRob2QgaXMuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2NoZWNrRm9yTWV0aG9kKG1ldGhvZG5hbWUsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZm4oKTtcbiAgICB9XG4gICAgdmFyIG9iaiA9IGFyZ3VtZW50c1tsZW5ndGggLSAxXTtcbiAgICByZXR1cm4gKF9pc0FycmF5KG9iaikgfHwgdHlwZW9mIG9ialttZXRob2RuYW1lXSAhPT0gJ2Z1bmN0aW9uJykgP1xuICAgICAgZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKSA6XG4gICAgICBvYmpbbWV0aG9kbmFtZV0uYXBwbHkob2JqLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAsIGxlbmd0aCAtIDEpKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcblxudmFyIERFRkFVTFRfQ09OVEVOVF9UWVBFID0ge1xuICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCdcbn07XG5cbmZ1bmN0aW9uIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCB2YWx1ZSkge1xuICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnMpICYmIHV0aWxzLmlzVW5kZWZpbmVkKGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddKSkge1xuICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gdmFsdWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVmYXVsdEFkYXB0ZXIoKSB7XG4gIHZhciBhZGFwdGVyO1xuICBpZiAodHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBicm93c2VycyB1c2UgWEhSIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4vYWRhcHRlcnMvaHR0cCcpO1xuICB9XG4gIHJldHVybiBhZGFwdGVyO1xufVxuXG52YXIgZGVmYXVsdHMgPSB7XG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtOCcpO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7IC8qIElnbm9yZSAqLyB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9XG59O1xuXG5kZWZhdWx0cy5oZWFkZXJzID0ge1xuICBjb21tb246IHtcbiAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB7fTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICBkZWZhdWx0cy5oZWFkZXJzW21ldGhvZF0gPSB1dGlscy5tZXJnZShERUZBVUxUX0NPTlRFTlRfVFlQRSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZhdWx0cztcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsIi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgYXJyYXktbGlrZSBsZW5ndGguXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9MZW5ndGhgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2xlbmd0aCkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBsZW5ndGgsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0xlbmd0aCgzKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzTGVuZ3RoKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKEluZmluaXR5KTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aCgnMycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNMZW5ndGgodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJyAmJlxuICAgIHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPD0gTUFYX1NBRkVfSU5URUdFUjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xlbmd0aDtcbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIHByb3BlcnR5IG5hbWVzIHdpdGhpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciByZUlzRGVlcFByb3AgPSAvXFwufFxcWyg/OlteW1xcXV0qfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqP1xcMSlcXF0vLFxuICAgIHJlSXNQbGFpblByb3AgPSAvXlxcdyokLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUgYW5kIG5vdCBhIHByb3BlcnR5IHBhdGguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleSh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZTtcbiAgaWYgKHR5cGUgPT0gJ251bWJlcicgfHwgdHlwZSA9PSAnc3ltYm9sJyB8fCB0eXBlID09ICdib29sZWFuJyB8fFxuICAgICAgdmFsdWUgPT0gbnVsbCB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gcmVJc1BsYWluUHJvcC50ZXN0KHZhbHVlKSB8fCAhcmVJc0RlZXBQcm9wLnRlc3QodmFsdWUpIHx8XG4gICAgKG9iamVjdCAhPSBudWxsICYmIHZhbHVlIGluIE9iamVjdChvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0Q3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5jcmVhdGVgIHdpdGhvdXQgc3VwcG9ydCBmb3IgYXNzaWduaW5nXG4gKiBwcm9wZXJ0aWVzIHRvIHRoZSBjcmVhdGVkIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3RvIFRoZSBvYmplY3QgdG8gaW5oZXJpdCBmcm9tLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbmV3IG9iamVjdC5cbiAqL1xudmFyIGJhc2VDcmVhdGUgPSAoZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIG9iamVjdCgpIHt9XG4gIHJldHVybiBmdW5jdGlvbihwcm90bykge1xuICAgIGlmICghaXNPYmplY3QocHJvdG8pKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGlmIChvYmplY3RDcmVhdGUpIHtcbiAgICAgIHJldHVybiBvYmplY3RDcmVhdGUocHJvdG8pO1xuICAgIH1cbiAgICBvYmplY3QucHJvdG90eXBlID0gcHJvdG87XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBvYmplY3Q7XG4gICAgb2JqZWN0LnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlQ3JlYXRlO1xuIiwiLyoqXG4gKiBBIGZhc3RlciBhbHRlcm5hdGl2ZSB0byBgRnVuY3Rpb24jYXBwbHlgLCB0aGlzIGZ1bmN0aW9uIGludm9rZXMgYGZ1bmNgXG4gKiB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiBgdGhpc0FyZ2AgYW5kIHRoZSBhcmd1bWVudHMgb2YgYGFyZ3NgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIGFyZ3VtZW50cyB0byBpbnZva2UgYGZ1bmNgIHdpdGguXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGBmdW5jYC5cbiAqL1xuZnVuY3Rpb24gYXBwbHkoZnVuYywgdGhpc0FyZywgYXJncykge1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcpO1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICB9XG4gIHJldHVybiBmdW5jLmFwcGx5KHRoaXNBcmcsIGFyZ3MpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFwcGx5O1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgYmFzZUxvZGFzaCA9IHJlcXVpcmUoJy4vX2Jhc2VMb2Rhc2gnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdGhlIG1heGltdW0gbGVuZ3RoIGFuZCBpbmRleCBvZiBhbiBhcnJheS4gKi9cbnZhciBNQVhfQVJSQVlfTEVOR1RIID0gNDI5NDk2NzI5NTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbGF6eSB3cmFwcGVyIG9iamVjdCB3aGljaCB3cmFwcyBgdmFsdWVgIHRvIGVuYWJsZSBsYXp5IGV2YWx1YXRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqL1xuZnVuY3Rpb24gTGF6eVdyYXBwZXIodmFsdWUpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19kaXJfXyA9IDE7XG4gIHRoaXMuX19maWx0ZXJlZF9fID0gZmFsc2U7XG4gIHRoaXMuX19pdGVyYXRlZXNfXyA9IFtdO1xuICB0aGlzLl9fdGFrZUNvdW50X18gPSBNQVhfQVJSQVlfTEVOR1RIO1xuICB0aGlzLl9fdmlld3NfXyA9IFtdO1xufVxuXG4vLyBFbnN1cmUgYExhenlXcmFwcGVyYCBpcyBhbiBpbnN0YW5jZSBvZiBgYmFzZUxvZGFzaGAuXG5MYXp5V3JhcHBlci5wcm90b3R5cGUgPSBiYXNlQ3JlYXRlKGJhc2VMb2Rhc2gucHJvdG90eXBlKTtcbkxhenlXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExhenlXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExhenlXcmFwcGVyO1xuIiwiLyoqXG4gKiBUaGUgZnVuY3Rpb24gd2hvc2UgcHJvdG90eXBlIGNoYWluIHNlcXVlbmNlIHdyYXBwZXJzIGluaGVyaXQgZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBiYXNlTG9kYXNoKCkge1xuICAvLyBObyBvcGVyYXRpb24gcGVyZm9ybWVkLlxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VMb2Rhc2g7XG4iLCIvKipcbiAqIEdldHMgdGhlIGFyZ3VtZW50IHBsYWNlaG9sZGVyIHZhbHVlIGZvciBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGdldEhvbGRlcihmdW5jKSB7XG4gIHZhciBvYmplY3QgPSBmdW5jO1xuICByZXR1cm4gb2JqZWN0LnBsYWNlaG9sZGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEhvbGRlcjtcbiIsIihmdW5jdGlvbihmKSB7XG5cbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgZXhwb3J0cyAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgZXhwb3J0cy5ub2RlVHlwZSAhPT0gJ251bWJlcicpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGYgKCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kICE9IG51bGwpIHtcbiAgICBkZWZpbmUgKFtdLCBmKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgYmFzZTY0ID0gZiAoKTtcbiAgICB2YXIgZ2xvYmFsID0gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6ICQuZ2xvYmFsO1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsLmJ0b2EgIT09ICdmdW5jdGlvbicpIGdsb2JhbC5idG9hID0gYmFzZTY0LmJ0b2E7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuYXRvYiAhPT0gJ2Z1bmN0aW9uJykgZ2xvYmFsLmF0b2IgPSBiYXNlNjQuYXRvYjtcbiAgfVxuXG59IChmdW5jdGlvbigpIHtcblxuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztcblxuICBmdW5jdGlvbiBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gIH1cbiAgSW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvciAoKTtcbiAgSW52YWxpZENoYXJhY3RlckVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcic7XG5cbiAgLy8gZW5jb2RlclxuICAvLyBbaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vOTk5MTY2XSBieSBbaHR0cHM6Ly9naXRodWIuY29tL25pZ25hZ11cbiAgZnVuY3Rpb24gYnRvYShpbnB1dCkge1xuICAgIHZhciBzdHIgPSBTdHJpbmcgKGlucHV0KTtcbiAgICBmb3IgKFxuICAgICAgLy8gaW5pdGlhbGl6ZSByZXN1bHQgYW5kIGNvdW50ZXJcbiAgICAgIHZhciBibG9jaywgY2hhckNvZGUsIGlkeCA9IDAsIG1hcCA9IGNoYXJzLCBvdXRwdXQgPSAnJztcbiAgICAgIC8vIGlmIHRoZSBuZXh0IHN0ciBpbmRleCBkb2VzIG5vdCBleGlzdDpcbiAgICAgIC8vICAgY2hhbmdlIHRoZSBtYXBwaW5nIHRhYmxlIHRvIFwiPVwiXG4gICAgICAvLyAgIGNoZWNrIGlmIGQgaGFzIG5vIGZyYWN0aW9uYWwgZGlnaXRzXG4gICAgICBzdHIuY2hhckF0IChpZHggfCAwKSB8fCAobWFwID0gJz0nLCBpZHggJSAxKTtcbiAgICAgIC8vIFwiOCAtIGlkeCAlIDEgKiA4XCIgZ2VuZXJhdGVzIHRoZSBzZXF1ZW5jZSAyLCA0LCA2LCA4XG4gICAgICBvdXRwdXQgKz0gbWFwLmNoYXJBdCAoNjMgJiBibG9jayA+PiA4IC0gaWR4ICUgMSAqIDgpXG4gICAgKSB7XG4gICAgICBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0IChpZHggKz0gMyAvIDQpO1xuICAgICAgaWYgKGNoYXJDb2RlID4gMHhGRikge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yIChcIididG9hJyBmYWlsZWQ6IFRoZSBzdHJpbmcgdG8gYmUgZW5jb2RlZCBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgb2YgdGhlIExhdGluMSByYW5nZS5cIik7XG4gICAgICB9XG4gICAgICBibG9jayA9IGJsb2NrIDw8IDggfCBjaGFyQ29kZTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIC8vIGRlY29kZXJcbiAgLy8gW2h0dHBzOi8vZ2lzdC5naXRodWIuY29tLzEwMjAzOTZdIGJ5IFtodHRwczovL2dpdGh1Yi5jb20vYXRrXVxuICBmdW5jdGlvbiBhdG9iKGlucHV0KSB7XG4gICAgdmFyIHN0ciA9IChTdHJpbmcgKGlucHV0KSkucmVwbGFjZSAoL1s9XSskLywgJycpOyAvLyAjMzE6IEV4dGVuZFNjcmlwdCBiYWQgcGFyc2Ugb2YgLz1cbiAgICBpZiAoc3RyLmxlbmd0aCAlIDQgPT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgKFwiJ2F0b2InIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC5cIik7XG4gICAgfVxuICAgIGZvciAoXG4gICAgICAvLyBpbml0aWFsaXplIHJlc3VsdCBhbmQgY291bnRlcnNcbiAgICAgIHZhciBiYyA9IDAsIGJzLCBidWZmZXIsIGlkeCA9IDAsIG91dHB1dCA9ICcnO1xuICAgICAgLy8gZ2V0IG5leHQgY2hhcmFjdGVyXG4gICAgICBidWZmZXIgPSBzdHIuY2hhckF0IChpZHgrKyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgICAgIC8vIGNoYXJhY3RlciBmb3VuZCBpbiB0YWJsZT8gaW5pdGlhbGl6ZSBiaXQgc3RvcmFnZSBhbmQgYWRkIGl0cyBhc2NpaSB2YWx1ZTtcbiAgICAgIH5idWZmZXIgJiYgKGJzID0gYmMgJSA0ID8gYnMgKiA2NCArIGJ1ZmZlciA6IGJ1ZmZlcixcbiAgICAgICAgLy8gYW5kIGlmIG5vdCBmaXJzdCBvZiBlYWNoIDQgY2hhcmFjdGVycyxcbiAgICAgICAgLy8gY29udmVydCB0aGUgZmlyc3QgOCBiaXRzIHRvIG9uZSBhc2NpaSBjaGFyYWN0ZXJcbiAgICAgICAgYmMrKyAlIDQpID8gb3V0cHV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUgKDI1NSAmIGJzID4+ICgtMiAqIGJjICYgNikpIDogMFxuICAgICkge1xuICAgICAgLy8gdHJ5IHRvIGZpbmQgY2hhcmFjdGVyIGluIHRhYmxlICgwLTYzLCBub3QgZm91bmQgPT4gLTEpXG4gICAgICBidWZmZXIgPSBjaGFycy5pbmRleE9mIChidWZmZXIpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgcmV0dXJuIHtidG9hOiBidG9hLCBhdG9iOiBhdG9ifTtcblxufSkpO1xuIiwidmFyIGJhc2VSZXN0ID0gcmVxdWlyZSgnLi9fYmFzZVJlc3QnKSxcbiAgICBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGBwYXJ0aWFsc2AgcHJlcGVuZGVkIHRvIHRoZVxuICogYXJndW1lbnRzIGl0IHJlY2VpdmVzLiBUaGlzIG1ldGhvZCBpcyBsaWtlIGBfLmJpbmRgIGV4Y2VwdCBpdCBkb2VzICoqbm90KipcbiAqIGFsdGVyIHRoZSBgdGhpc2AgYmluZGluZy5cbiAqXG4gKiBUaGUgYF8ucGFydGlhbC5wbGFjZWhvbGRlcmAgdmFsdWUsIHdoaWNoIGRlZmF1bHRzIHRvIGBfYCBpbiBtb25vbGl0aGljXG4gKiBidWlsZHMsIG1heSBiZSB1c2VkIGFzIGEgcGxhY2Vob2xkZXIgZm9yIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cy5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgZG9lc24ndCBzZXQgdGhlIFwibGVuZ3RoXCIgcHJvcGVydHkgb2YgcGFydGlhbGx5XG4gKiBhcHBsaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHBhcnRpYWxseSBhcHBseSBhcmd1bWVudHMgdG8uXG4gKiBAcGFyYW0gey4uLip9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBiZSBwYXJ0aWFsbHkgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHBhcnRpYWxseSBhcHBsaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBncmVldChncmVldGluZywgbmFtZSkge1xuICogICByZXR1cm4gZ3JlZXRpbmcgKyAnICcgKyBuYW1lO1xuICogfVxuICpcbiAqIHZhciBzYXlIZWxsb1RvID0gXy5wYXJ0aWFsKGdyZWV0LCAnaGVsbG8nKTtcbiAqIHNheUhlbGxvVG8oJ2ZyZWQnKTtcbiAqIC8vID0+ICdoZWxsbyBmcmVkJ1xuICpcbiAqIC8vIFBhcnRpYWxseSBhcHBsaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICogdmFyIGdyZWV0RnJlZCA9IF8ucGFydGlhbChncmVldCwgXywgJ2ZyZWQnKTtcbiAqIGdyZWV0RnJlZCgnaGknKTtcbiAqIC8vID0+ICdoaSBmcmVkJ1xuICovXG52YXIgcGFydGlhbCA9IGJhc2VSZXN0KGZ1bmN0aW9uKGZ1bmMsIHBhcnRpYWxzKSB7XG4gIHZhciBob2xkZXJzID0gcmVwbGFjZUhvbGRlcnMocGFydGlhbHMsIGdldEhvbGRlcihwYXJ0aWFsKSk7XG4gIHJldHVybiBjcmVhdGVXcmFwKGZ1bmMsIFdSQVBfUEFSVElBTF9GTEFHLCB1bmRlZmluZWQsIHBhcnRpYWxzLCBob2xkZXJzKTtcbn0pO1xuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5wYXJ0aWFsLnBsYWNlaG9sZGVyID0ge307XG5cbm1vZHVsZS5leHBvcnRzID0gcGFydGlhbDtcbiIsInZhciBkcml2ZXJzTGljZW5zZVJlZ2V4ID0gcmVxdWlyZShcIi4vbGljZW5zZS1yZWdleFwiKTtcbnZhciBpc1ZhbGlkVVNMaWNlbnNlID0gcmVxdWlyZShcIi4vaXMtdmFsaWQtdXMtbGljZW5zZVwiKTtcbnZhciB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UgPSByZXF1aXJlKFwiLi92YWxpZGF0ZS1kcml2ZXJzLWxpY2Vuc2VcIik7XG52YXIgc3VwcG9ydGVkU3RhdGVzID0gcmVxdWlyZShcIi4vc3VwcG9ydGVkLXN0YXRlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRyaXZlcnNMaWNlbnNlUmVnZXg6IGRyaXZlcnNMaWNlbnNlUmVnZXgsXG4gIGlzVmFsaWRVU0xpY2Vuc2U6IGlzVmFsaWRVU0xpY2Vuc2UsXG4gIHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZTogdmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlLFxuICBzdXBwb3J0ZWRTdGF0ZXM6IHN1cHBvcnRlZFN0YXRlc1xufTtcbiIsIi8qKiBNb2JYIC0gKGMpIE1pY2hlbCBXZXN0c3RyYXRlIDIwMTUgLSAyMDIwIC0gTUlUIExpY2Vuc2VkICovXG52YXIgT0JGVVNDQVRFRF9FUlJPUiA9IFwiQW4gaW52YXJpYW50IGZhaWxlZCwgaG93ZXZlciB0aGUgZXJyb3IgaXMgb2JmdXNjYXRlZCBiZWNhdXNlIHRoaXMgaXMgYSBwcm9kdWN0aW9uIGJ1aWxkLlwiO1xudmFyIEVNUFRZX0FSUkFZID0gW107XG5PYmplY3QuZnJlZXplKEVNUFRZX0FSUkFZKTtcbnZhciBFTVBUWV9PQkpFQ1QgPSB7fTtcbk9iamVjdC5mcmVlemUoRU1QVFlfT0JKRUNUKTtcbmZ1bmN0aW9uIGdldE5leHRJZCgpIHtcbiAgICByZXR1cm4gKytnbG9iYWxTdGF0ZS5tb2J4R3VpZDtcbn1cbmZ1bmN0aW9uIGZhaWwobWVzc2FnZSkge1xuICAgIGludmFyaWFudChmYWxzZSwgbWVzc2FnZSk7XG4gICAgdGhyb3cgXCJYXCI7IC8vIHVucmVhY2hhYmxlXG59XG5mdW5jdGlvbiBpbnZhcmlhbnQoY2hlY2ssIG1lc3NhZ2UpIHtcbiAgICBpZiAoIWNoZWNrKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbbW9ieF0gXCIgKyAobWVzc2FnZSB8fCBPQkZVU0NBVEVEX0VSUk9SKSk7XG59XG4vKipcbiAqIFByaW50cyBhIGRlcHJlY2F0aW9uIG1lc3NhZ2UsIGJ1dCBvbmx5IG9uZSB0aW1lLlxuICogUmV0dXJucyBmYWxzZSBpZiB0aGUgZGVwcmVjYXRlZCBtZXNzYWdlIHdhcyBhbHJlYWR5IHByaW50ZWQgYmVmb3JlXG4gKi9cbnZhciBkZXByZWNhdGVkTWVzc2FnZXMgPSBbXTtcbmZ1bmN0aW9uIGRlcHJlY2F0ZWQobXNnLCB0aGluZykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAodGhpbmcpIHtcbiAgICAgICAgcmV0dXJuIGRlcHJlY2F0ZWQoXCInXCIgKyBtc2cgKyBcIicsIHVzZSAnXCIgKyB0aGluZyArIFwiJyBpbnN0ZWFkLlwiKTtcbiAgICB9XG4gICAgaWYgKGRlcHJlY2F0ZWRNZXNzYWdlcy5pbmRleE9mKG1zZykgIT09IC0xKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZGVwcmVjYXRlZE1lc3NhZ2VzLnB1c2gobXNnKTtcbiAgICBjb25zb2xlLmVycm9yKFwiW21vYnhdIERlcHJlY2F0ZWQ6IFwiICsgbXNnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogTWFrZXMgc3VyZSB0aGF0IHRoZSBwcm92aWRlZCBmdW5jdGlvbiBpcyBpbnZva2VkIGF0IG1vc3Qgb25jZS5cbiAqL1xuZnVuY3Rpb24gb25jZShmdW5jKSB7XG4gICAgdmFyIGludm9rZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaW52b2tlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaW52b2tlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbn1cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyB9O1xuZnVuY3Rpb24gdW5pcXVlKGxpc3QpIHtcbiAgICB2YXIgcmVzID0gW107XG4gICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIGlmIChyZXMuaW5kZXhPZihpdGVtKSA9PT0gLTEpXG4gICAgICAgICAgICByZXMucHVzaChpdGVtKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiO1xufVxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICAgIHJldHVybiBwcm90byA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBwcm90byA9PT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRUb01hcChkYXRhU3RydWN0dXJlKSB7XG4gICAgaWYgKGlzRVM2TWFwKGRhdGFTdHJ1Y3R1cmUpIHx8IGlzT2JzZXJ2YWJsZU1hcChkYXRhU3RydWN0dXJlKSkge1xuICAgICAgICByZXR1cm4gZGF0YVN0cnVjdHVyZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhU3RydWN0dXJlKSkge1xuICAgICAgICByZXR1cm4gbmV3IE1hcChkYXRhU3RydWN0dXJlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNQbGFpbk9iamVjdChkYXRhU3RydWN0dXJlKSkge1xuICAgICAgICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGF0YVN0cnVjdHVyZSkge1xuICAgICAgICAgICAgbWFwLnNldChrZXksIGRhdGFTdHJ1Y3R1cmVba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWlsKFwiQ2Fubm90IGNvbnZlcnQgdG8gbWFwIGZyb20gJ1wiICsgZGF0YVN0cnVjdHVyZSArIFwiJ1wiKTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRIaWRkZW5Qcm9wKG9iamVjdCwgcHJvcE5hbWUsIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcE5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgIH0pO1xufVxuZnVuY3Rpb24gYWRkSGlkZGVuRmluYWxQcm9wKG9iamVjdCwgcHJvcE5hbWUsIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcE5hbWUsIHtcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGlzUHJvcGVydHlDb25maWd1cmFibGUob2JqZWN0LCBwcm9wKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcCk7XG4gICAgcmV0dXJuICFkZXNjcmlwdG9yIHx8IChkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSAhPT0gZmFsc2UgJiYgZGVzY3JpcHRvci53cml0YWJsZSAhPT0gZmFsc2UpO1xufVxuZnVuY3Rpb24gYXNzZXJ0UHJvcGVydHlDb25maWd1cmFibGUob2JqZWN0LCBwcm9wKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAhaXNQcm9wZXJ0eUNvbmZpZ3VyYWJsZShvYmplY3QsIHByb3ApKVxuICAgICAgICBmYWlsKFwiQ2Fubm90IG1ha2UgcHJvcGVydHkgJ1wiICsgcHJvcC50b1N0cmluZygpICsgXCInIG9ic2VydmFibGUsIGl0IGlzIG5vdCBjb25maWd1cmFibGUgYW5kIHdyaXRhYmxlIGluIHRoZSB0YXJnZXQgb2JqZWN0XCIpO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShuYW1lLCBjbGF6eikge1xuICAgIHZhciBwcm9wTmFtZSA9IFwiaXNNb2JYXCIgKyBuYW1lO1xuICAgIGNsYXp6LnByb3RvdHlwZVtwcm9wTmFtZV0gPSB0cnVlO1xuICAgIHJldHVybiBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoeCkgJiYgeFtwcm9wTmFtZV0gPT09IHRydWU7XG4gICAgfTtcbn1cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSwgZGlzcmVnYXJkaW5nIG9ic2VydmFiaWxpdHkuXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHgpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh4KSB8fCBpc09ic2VydmFibGVBcnJheSh4KTtcbn1cbmZ1bmN0aW9uIGlzRVM2TWFwKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgTWFwO1xufVxuZnVuY3Rpb24gaXNFUzZTZXQodGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiBTZXQ7XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZvbGxvd2luZzogb3duIGtleXMsIHByb3RvdHlwZSBrZXlzICYgb3duIHN5bWJvbCBrZXlzLCBpZiB0aGV5IGFyZSBlbnVtZXJhYmxlLlxuICovXG5mdW5jdGlvbiBnZXRQbGFpbk9iamVjdEtleXMob2JqZWN0KSB7XG4gICAgdmFyIGVudW1lcmFibGVzID0gbmV3IFNldCgpO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpXG4gICAgICAgIGVudW1lcmFibGVzLmFkZChrZXkpOyAvLyAqYWxsKiBlbnVtZXJhYmxlc1xuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgaykuZW51bWVyYWJsZSlcbiAgICAgICAgICAgIGVudW1lcmFibGVzLmFkZChrKTtcbiAgICB9KTsgLy8gKm93biogc3ltYm9sc1xuICAgIC8vIE5vdGU6IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbWlzc2luZyBlbnVtZXJhYmxlLCBpbmhlcml0ZWQsIHN5bWJvbGljIHByb3BlcnR5IG5hbWVzISBUaGF0IHdvdWxkIGhvd2V2ZXIgcHJldHR5IGV4cGVuc2l2ZSB0byBhZGQsXG4gICAgLy8gYXMgdGhlcmUgaXMgbm8gZWZmaWNpZW50IGl0ZXJhdG9yIHRoYXQgcmV0dXJucyAqYWxsKiBwcm9wZXJ0aWVzXG4gICAgcmV0dXJuIEFycmF5LmZyb20oZW51bWVyYWJsZXMpO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5S2V5KGtleSkge1xuICAgIGlmIChrZXkgJiYga2V5LnRvU3RyaW5nKVxuICAgICAgICByZXR1cm4ga2V5LnRvU3RyaW5nKCk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhrZXkpLnRvU3RyaW5nKCk7XG59XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCA/IG51bGwgOiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgPyBcIlwiICsgdmFsdWUgOiB2YWx1ZTtcbn1cbnZhciBvd25LZXlzID0gdHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5vd25LZXlzXG4gICAgPyBSZWZsZWN0Lm93bktleXNcbiAgICA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbiAgICAgICAgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaikpOyB9XG4gICAgICAgIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7XG5cbnZhciAkbW9ieCA9IFN5bWJvbChcIm1vYnggYWRtaW5pc3RyYXRpb25cIik7XG52YXIgQXRvbSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgYXRvbS4gRm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBpdCBpcyByZWNvbW1lbmRlZCB0byBnaXZlIGl0IGEgbmFtZS5cbiAgICAgKiBUaGUgb25CZWNvbWVPYnNlcnZlZCBhbmQgb25CZWNvbWVVbm9ic2VydmVkIGNhbGxiYWNrcyBjYW4gYmUgdXNlZCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBBdG9tKG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gXCJBdG9tQFwiICsgZ2V0TmV4dElkKCk7IH1cbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5pc1BlbmRpbmdVbm9ic2VydmF0aW9uID0gZmFsc2U7IC8vIGZvciBlZmZlY3RpdmUgdW5vYnNlcnZpbmcuIEJhc2VBdG9tIGhhcyB0cnVlLCBmb3IgZXh0cmEgb3B0aW1pemF0aW9uLCBzbyBpdHMgb25CZWNvbWVVbm9ic2VydmVkIG5ldmVyIGdldHMgY2FsbGVkLCBiZWNhdXNlIGl0J3Mgbm90IG5lZWRlZFxuICAgICAgICB0aGlzLmlzQmVpbmdPYnNlcnZlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9ic2VydmVycyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5kaWZmVmFsdWUgPSAwO1xuICAgICAgICB0aGlzLmxhc3RBY2Nlc3NlZEJ5ID0gMDtcbiAgICAgICAgdGhpcy5sb3dlc3RPYnNlcnZlclN0YXRlID0gSURlcml2YXRpb25TdGF0ZS5OT1RfVFJBQ0tJTkc7XG4gICAgfVxuICAgIEF0b20ucHJvdG90eXBlLm9uQmVjb21lT2JzZXJ2ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLm9uQmVjb21lT2JzZXJ2ZWRMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHRoaXMub25CZWNvbWVPYnNlcnZlZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikgeyByZXR1cm4gbGlzdGVuZXIoKTsgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEF0b20ucHJvdG90eXBlLm9uQmVjb21lVW5vYnNlcnZlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMub25CZWNvbWVVbm9ic2VydmVkTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB0aGlzLm9uQmVjb21lVW5vYnNlcnZlZExpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikgeyByZXR1cm4gbGlzdGVuZXIoKTsgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEludm9rZSB0aGlzIG1ldGhvZCB0byBub3RpZnkgbW9ieCB0aGF0IHlvdXIgYXRvbSBoYXMgYmVlbiB1c2VkIHNvbWVob3cuXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHJlYWN0aXZlIGNvbnRleHQuXG4gICAgICovXG4gICAgQXRvbS5wcm90b3R5cGUucmVwb3J0T2JzZXJ2ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByZXBvcnRPYnNlcnZlZCh0aGlzKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEludm9rZSB0aGlzIG1ldGhvZCBfYWZ0ZXJfIHRoaXMgbWV0aG9kIGhhcyBjaGFuZ2VkIHRvIHNpZ25hbCBtb2J4IHRoYXQgYWxsIGl0cyBvYnNlcnZlcnMgc2hvdWxkIGludmFsaWRhdGUuXG4gICAgICovXG4gICAgQXRvbS5wcm90b3R5cGUucmVwb3J0Q2hhbmdlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc3RhcnRCYXRjaCgpO1xuICAgICAgICBwcm9wYWdhdGVDaGFuZ2VkKHRoaXMpO1xuICAgICAgICBlbmRCYXRjaCgpO1xuICAgIH07XG4gICAgQXRvbS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgfTtcbiAgICByZXR1cm4gQXRvbTtcbn0oKSk7XG52YXIgaXNBdG9tID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIkF0b21cIiwgQXRvbSk7XG5mdW5jdGlvbiBjcmVhdGVBdG9tKG5hbWUsIG9uQmVjb21lT2JzZXJ2ZWRIYW5kbGVyLCBvbkJlY29tZVVub2JzZXJ2ZWRIYW5kbGVyKSB7XG4gICAgaWYgKG9uQmVjb21lT2JzZXJ2ZWRIYW5kbGVyID09PSB2b2lkIDApIHsgb25CZWNvbWVPYnNlcnZlZEhhbmRsZXIgPSBub29wOyB9XG4gICAgaWYgKG9uQmVjb21lVW5vYnNlcnZlZEhhbmRsZXIgPT09IHZvaWQgMCkgeyBvbkJlY29tZVVub2JzZXJ2ZWRIYW5kbGVyID0gbm9vcDsgfVxuICAgIHZhciBhdG9tID0gbmV3IEF0b20obmFtZSk7XG4gICAgLy8gZGVmYXVsdCBgbm9vcGAgbGlzdGVuZXIgd2lsbCBub3QgaW5pdGlhbGl6ZSB0aGUgaG9vayBTZXRcbiAgICBpZiAob25CZWNvbWVPYnNlcnZlZEhhbmRsZXIgIT09IG5vb3ApIHtcbiAgICAgICAgb25CZWNvbWVPYnNlcnZlZChhdG9tLCBvbkJlY29tZU9ic2VydmVkSGFuZGxlcik7XG4gICAgfVxuICAgIGlmIChvbkJlY29tZVVub2JzZXJ2ZWRIYW5kbGVyICE9PSBub29wKSB7XG4gICAgICAgIG9uQmVjb21lVW5vYnNlcnZlZChhdG9tLCBvbkJlY29tZVVub2JzZXJ2ZWRIYW5kbGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGF0b207XG59XG5cbmZ1bmN0aW9uIGlkZW50aXR5Q29tcGFyZXIoYSwgYikge1xuICAgIHJldHVybiBhID09PSBiO1xufVxuZnVuY3Rpb24gc3RydWN0dXJhbENvbXBhcmVyKGEsIGIpIHtcbiAgICByZXR1cm4gZGVlcEVxdWFsKGEsIGIpO1xufVxuZnVuY3Rpb24gc2hhbGxvd0NvbXBhcmVyKGEsIGIpIHtcbiAgICByZXR1cm4gZGVlcEVxdWFsKGEsIGIsIDEpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENvbXBhcmVyKGEsIGIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmlzKGEsIGIpO1xufVxudmFyIGNvbXBhcmVyID0ge1xuICAgIGlkZW50aXR5OiBpZGVudGl0eUNvbXBhcmVyLFxuICAgIHN0cnVjdHVyYWw6IHN0cnVjdHVyYWxDb21wYXJlcixcbiAgICBkZWZhdWx0OiBkZWZhdWx0Q29tcGFyZXIsXG4gICAgc2hhbGxvdzogc2hhbGxvd0NvbXBhcmVyXG59O1xuXG4vKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbkxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7IHlvdSBtYXkgbm90IHVzZVxyXG50aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZVxyXG5MaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG5cclxuVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWVxyXG5LSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEXHJcbldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsXHJcbk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuXHJcblxyXG5TZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcclxuYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG52YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxuXG52YXIgbW9ieERpZFJ1bkxhenlJbml0aWFsaXplcnNTeW1ib2wgPSBTeW1ib2woXCJtb2J4IGRpZCBydW4gbGF6eSBpbml0aWFsaXplcnNcIik7XG52YXIgbW9ieFBlbmRpbmdEZWNvcmF0b3JzID0gU3ltYm9sKFwibW9ieCBwZW5kaW5nIGRlY29yYXRvcnNcIik7XG52YXIgZW51bWVyYWJsZURlc2NyaXB0b3JDYWNoZSA9IHt9O1xudmFyIG5vbkVudW1lcmFibGVEZXNjcmlwdG9yQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGNyZWF0ZVByb3BlcnR5SW5pdGlhbGl6ZXJEZXNjcmlwdG9yKHByb3AsIGVudW1lcmFibGUpIHtcbiAgICB2YXIgY2FjaGUgPSBlbnVtZXJhYmxlID8gZW51bWVyYWJsZURlc2NyaXB0b3JDYWNoZSA6IG5vbkVudW1lcmFibGVEZXNjcmlwdG9yQ2FjaGU7XG4gICAgcmV0dXJuIChjYWNoZVtwcm9wXSB8fFxuICAgICAgICAoY2FjaGVbcHJvcF0gPSB7XG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBlbnVtZXJhYmxlLFxuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3Byb3BdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgICAgICAgICAgIHRoaXNbcHJvcF0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xufVxuZnVuY3Rpb24gaW5pdGlhbGl6ZUluc3RhbmNlKHRhcmdldCkge1xuICAgIHZhciBlXzEsIF9hO1xuICAgIGlmICh0YXJnZXRbbW9ieERpZFJ1bkxhenlJbml0aWFsaXplcnNTeW1ib2xdID09PSB0cnVlKVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIGRlY29yYXRvcnMgPSB0YXJnZXRbbW9ieFBlbmRpbmdEZWNvcmF0b3JzXTtcbiAgICBpZiAoZGVjb3JhdG9ycykge1xuICAgICAgICBhZGRIaWRkZW5Qcm9wKHRhcmdldCwgbW9ieERpZFJ1bkxhenlJbml0aWFsaXplcnNTeW1ib2wsIHRydWUpO1xuICAgICAgICAvLyBCdWlsZCBwcm9wZXJ0eSBrZXkgYXJyYXkgZnJvbSBib3RoIHN0cmluZ3MgYW5kIHN5bWJvbHNcbiAgICAgICAgdmFyIGtleXMgPSBfX3NwcmVhZChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRlY29yYXRvcnMpLCBPYmplY3Qua2V5cyhkZWNvcmF0b3JzKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXlzXzEgPSBfX3ZhbHVlcyhrZXlzKSwga2V5c18xXzEgPSBrZXlzXzEubmV4dCgpOyAha2V5c18xXzEuZG9uZTsga2V5c18xXzEgPSBrZXlzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHZhciBkID0gZGVjb3JhdG9yc1trZXldO1xuICAgICAgICAgICAgICAgIGQucHJvcGVydHlDcmVhdG9yKHRhcmdldCwgZC5wcm9wLCBkLmRlc2NyaXB0b3IsIGQuZGVjb3JhdG9yVGFyZ2V0LCBkLmRlY29yYXRvckFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChrZXlzXzFfMSAmJiAha2V5c18xXzEuZG9uZSAmJiAoX2EgPSBrZXlzXzEucmV0dXJuKSkgX2EuY2FsbChrZXlzXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlUHJvcERlY29yYXRvcihwcm9wZXJ0eUluaXRpYWxseUVudW1lcmFibGUsIHByb3BlcnR5Q3JlYXRvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3JGYWN0b3J5KCkge1xuICAgICAgICB2YXIgZGVjb3JhdG9yQXJndW1lbnRzO1xuICAgICAgICB2YXIgZGVjb3JhdG9yID0gZnVuY3Rpb24gZGVjb3JhdGUodGFyZ2V0LCBwcm9wLCBkZXNjcmlwdG9yLCBhcHBseUltbWVkaWF0ZWx5XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIHBhcmFtZXRlciB0byBzaWduYWwgdGhlIGRpcmVjdCBhcHBsaWNhdGlvbiBvZiBhIGRlY29yYXRvciwgYWxsb3cgZXh0ZW5kT2JzZXJ2YWJsZSB0byBza2lwIHRoZSBlbnRpcmUgdHlwZSBkZWNvcmF0aW9uIHBhcnQsXG4gICAgICAgIC8vIGFzIHRoZSBpbnN0YW5jZSB0byBhcHBseSB0aGUgZGVjb3JhdG9yIHRvIGVxdWFscyB0aGUgdGFyZ2V0XG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGFwcGx5SW1tZWRpYXRlbHkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUNyZWF0b3IodGFyZ2V0LCBwcm9wLCBkZXNjcmlwdG9yLCB0YXJnZXQsIGRlY29yYXRvckFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmICFxdWFja3NMaWtlQURlY29yYXRvcihhcmd1bWVudHMpKVxuICAgICAgICAgICAgICAgIGZhaWwoXCJUaGlzIGZ1bmN0aW9uIGlzIGEgZGVjb3JhdG9yLCBidXQgaXQgd2Fzbid0IGludm9rZWQgbGlrZSBhIGRlY29yYXRvclwiKTtcbiAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgbW9ieFBlbmRpbmdEZWNvcmF0b3JzKSkge1xuICAgICAgICAgICAgICAgIHZhciBpbmhlcml0ZWREZWNvcmF0b3JzID0gdGFyZ2V0W21vYnhQZW5kaW5nRGVjb3JhdG9yc107XG4gICAgICAgICAgICAgICAgYWRkSGlkZGVuUHJvcCh0YXJnZXQsIG1vYnhQZW5kaW5nRGVjb3JhdG9ycywgX19hc3NpZ24oe30sIGluaGVyaXRlZERlY29yYXRvcnMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhcmdldFttb2J4UGVuZGluZ0RlY29yYXRvcnNdW3Byb3BdID0ge1xuICAgICAgICAgICAgICAgIHByb3A6IHByb3AsXG4gICAgICAgICAgICAgICAgcHJvcGVydHlDcmVhdG9yOiBwcm9wZXJ0eUNyZWF0b3IsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvcjogZGVzY3JpcHRvcixcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JUYXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgICAgICBkZWNvcmF0b3JBcmd1bWVudHM6IGRlY29yYXRvckFyZ3VtZW50c1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVQcm9wZXJ0eUluaXRpYWxpemVyRGVzY3JpcHRvcihwcm9wLCBwcm9wZXJ0eUluaXRpYWxseUVudW1lcmFibGUpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAocXVhY2tzTGlrZUFEZWNvcmF0b3IoYXJndW1lbnRzKSkge1xuICAgICAgICAgICAgLy8gQGRlY29yYXRvclxuICAgICAgICAgICAgZGVjb3JhdG9yQXJndW1lbnRzID0gRU1QVFlfQVJSQVk7XG4gICAgICAgICAgICByZXR1cm4gZGVjb3JhdG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBAZGVjb3JhdG9yKGFyZ3MpXG4gICAgICAgICAgICBkZWNvcmF0b3JBcmd1bWVudHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgcmV0dXJuIGRlY29yYXRvcjtcbiAgICAgICAgfVxuICAgIH07XG59XG5mdW5jdGlvbiBxdWFja3NMaWtlQURlY29yYXRvcihhcmdzKSB7XG4gICAgcmV0dXJuICgoKGFyZ3MubGVuZ3RoID09PSAyIHx8IGFyZ3MubGVuZ3RoID09PSAzKSAmJlxuICAgICAgICAodHlwZW9mIGFyZ3NbMV0gPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGFyZ3NbMV0gPT09IFwic3ltYm9sXCIpKSB8fFxuICAgICAgICAoYXJncy5sZW5ndGggPT09IDQgJiYgYXJnc1szXSA9PT0gdHJ1ZSkpO1xufVxuXG5mdW5jdGlvbiBkZWVwRW5oYW5jZXIodiwgXywgbmFtZSkge1xuICAgIC8vIGl0IGlzIGFuIG9ic2VydmFibGUgYWxyZWFkeSwgZG9uZVxuICAgIGlmIChpc09ic2VydmFibGUodikpXG4gICAgICAgIHJldHVybiB2O1xuICAgIC8vIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgYW5kIG11dGF0ZWQ/XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodikpXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLmFycmF5KHYsIHsgbmFtZTogbmFtZSB9KTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdCh2KSlcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUub2JqZWN0KHYsIHVuZGVmaW5lZCwgeyBuYW1lOiBuYW1lIH0pO1xuICAgIGlmIChpc0VTNk1hcCh2KSlcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUubWFwKHYsIHsgbmFtZTogbmFtZSB9KTtcbiAgICBpZiAoaXNFUzZTZXQodikpXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnNldCh2LCB7IG5hbWU6IG5hbWUgfSk7XG4gICAgcmV0dXJuIHY7XG59XG5mdW5jdGlvbiBzaGFsbG93RW5oYW5jZXIodiwgXywgbmFtZSkge1xuICAgIGlmICh2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdCh2KSB8fCBpc09ic2VydmFibGVBcnJheSh2KSB8fCBpc09ic2VydmFibGVNYXAodikgfHwgaXNPYnNlcnZhYmxlU2V0KHYpKVxuICAgICAgICByZXR1cm4gdjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2KSlcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuYXJyYXkodiwgeyBuYW1lOiBuYW1lLCBkZWVwOiBmYWxzZSB9KTtcbiAgICBpZiAoaXNQbGFpbk9iamVjdCh2KSlcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUub2JqZWN0KHYsIHVuZGVmaW5lZCwgeyBuYW1lOiBuYW1lLCBkZWVwOiBmYWxzZSB9KTtcbiAgICBpZiAoaXNFUzZNYXAodikpXG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLm1hcCh2LCB7IG5hbWU6IG5hbWUsIGRlZXA6IGZhbHNlIH0pO1xuICAgIGlmIChpc0VTNlNldCh2KSlcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc2V0KHYsIHsgbmFtZTogbmFtZSwgZGVlcDogZmFsc2UgfSk7XG4gICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgIFwiVGhlIHNoYWxsb3cgbW9kaWZpZXIgLyBkZWNvcmF0b3IgY2FuIG9ubHkgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGFycmF5cywgb2JqZWN0cywgbWFwcyBhbmQgc2V0c1wiKTtcbn1cbmZ1bmN0aW9uIHJlZmVyZW5jZUVuaGFuY2VyKG5ld1ZhbHVlKSB7XG4gICAgLy8gbmV2ZXIgdHVybiBpbnRvIGFuIG9ic2VydmFibGVcbiAgICByZXR1cm4gbmV3VmFsdWU7XG59XG5mdW5jdGlvbiByZWZTdHJ1Y3RFbmhhbmNlcih2LCBvbGRWYWx1ZSwgbmFtZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgaXNPYnNlcnZhYmxlKHYpKVxuICAgICAgICB0aHJvdyBcIm9ic2VydmFibGUuc3RydWN0IHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIG9ic2VydmFibGUgdmFsdWVzXCI7XG4gICAgaWYgKGRlZXBFcXVhbCh2LCBvbGRWYWx1ZSkpXG4gICAgICAgIHJldHVybiBvbGRWYWx1ZTtcbiAgICByZXR1cm4gdjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVjb3JhdG9yRm9yRW5oYW5jZXIoZW5oYW5jZXIpIHtcbiAgICBpbnZhcmlhbnQoZW5oYW5jZXIpO1xuICAgIHZhciBkZWNvcmF0b3IgPSBjcmVhdGVQcm9wRGVjb3JhdG9yKHRydWUsIGZ1bmN0aW9uICh0YXJnZXQsIHByb3BlcnR5TmFtZSwgZGVzY3JpcHRvciwgX2RlY29yYXRvclRhcmdldCwgZGVjb3JhdG9yQXJncykge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBpbnZhcmlhbnQoIWRlc2NyaXB0b3IgfHwgIWRlc2NyaXB0b3IuZ2V0LCBcIkBvYnNlcnZhYmxlIGNhbm5vdCBiZSB1c2VkIG9uIGdldHRlciAocHJvcGVydHkgXFxcIlwiICsgc3RyaW5naWZ5S2V5KHByb3BlcnR5TmFtZSkgKyBcIlxcXCIpLCB1c2UgQGNvbXB1dGVkIGluc3RlYWQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbml0aWFsVmFsdWUgPSBkZXNjcmlwdG9yXG4gICAgICAgICAgICA/IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXJcbiAgICAgICAgICAgICAgICA/IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXIuY2FsbCh0YXJnZXQpXG4gICAgICAgICAgICAgICAgOiBkZXNjcmlwdG9yLnZhbHVlXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgYXNPYnNlcnZhYmxlT2JqZWN0KHRhcmdldCkuYWRkT2JzZXJ2YWJsZVByb3AocHJvcGVydHlOYW1lLCBpbml0aWFsVmFsdWUsIGVuaGFuY2VyKTtcbiAgICB9KTtcbiAgICB2YXIgcmVzID0gXG4gICAgLy8gRXh0cmEgcHJvY2VzcyBjaGVja3MsIGFzIHRoaXMgaGFwcGVucyBkdXJpbmcgbW9kdWxlIGluaXRpYWxpemF0aW9uXG4gICAgdHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiXG4gICAgICAgID8gZnVuY3Rpb24gb2JzZXJ2YWJsZURlY29yYXRvcigpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBpcyBqdXN0IHRvIGRldGVjdCBpbGxlZ2FsIGRlY29yYXRvciBpbnZvY2F0aW9ucywgZGVwcmVjYXRlIGluIGEgbmV4dCB2ZXJzaW9uXG4gICAgICAgICAgICAvLyBhbmQgc2ltcGx5IHJldHVybiB0aGUgY3JlYXRlZCBwcm9wIGRlY29yYXRvclxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKFwiSW5jb3JyZWN0IGRlY29yYXRvciBpbnZvY2F0aW9uLiBAb2JzZXJ2YWJsZSBkZWNvcmF0b3IgZG9lc24ndCBleHBlY3QgYW55IGFyZ3VtZW50c1wiKTtcbiAgICAgICAgICAgIHJldHVybiBkZWNvcmF0b3IuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICA6IGRlY29yYXRvcjtcbiAgICByZXMuZW5oYW5jZXIgPSBlbmhhbmNlcjtcbiAgICByZXR1cm4gcmVzO1xufVxuXG4vLyBQcmVkZWZpbmVkIGJhZ3Mgb2YgY3JlYXRlIG9ic2VydmFibGUgb3B0aW9ucywgdG8gYXZvaWQgYWxsb2NhdGluZyB0ZW1wb3JhcmlseSBvcHRpb24gb2JqZWN0c1xuLy8gaW4gdGhlIG1ham9yaXR5IG9mIGNhc2VzXG52YXIgZGVmYXVsdENyZWF0ZU9ic2VydmFibGVPcHRpb25zID0ge1xuICAgIGRlZXA6IHRydWUsXG4gICAgbmFtZTogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHREZWNvcmF0b3I6IHVuZGVmaW5lZCxcbiAgICBwcm94eTogdHJ1ZVxufTtcbk9iamVjdC5mcmVlemUoZGVmYXVsdENyZWF0ZU9ic2VydmFibGVPcHRpb25zKTtcbmZ1bmN0aW9uIGFzc2VydFZhbGlkT3B0aW9uKGtleSkge1xuICAgIGlmICghL14oZGVlcHxuYW1lfGVxdWFsc3xkZWZhdWx0RGVjb3JhdG9yfHByb3h5KSQvLnRlc3Qoa2V5KSlcbiAgICAgICAgZmFpbChcImludmFsaWQgb3B0aW9uIGZvciAoZXh0ZW5kKW9ic2VydmFibGU6IFwiICsga2V5KTtcbn1cbmZ1bmN0aW9uIGFzQ3JlYXRlT2JzZXJ2YWJsZU9wdGlvbnModGhpbmcpIHtcbiAgICBpZiAodGhpbmcgPT09IG51bGwgfHwgdGhpbmcgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRDcmVhdGVPYnNlcnZhYmxlT3B0aW9ucztcbiAgICBpZiAodHlwZW9mIHRoaW5nID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4geyBuYW1lOiB0aGluZywgZGVlcDogdHJ1ZSwgcHJveHk6IHRydWUgfTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpbmcgIT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgICByZXR1cm4gZmFpbChcImV4cGVjdGVkIG9wdGlvbnMgb2JqZWN0XCIpO1xuICAgICAgICBPYmplY3Qua2V5cyh0aGluZykuZm9yRWFjaChhc3NlcnRWYWxpZE9wdGlvbik7XG4gICAgfVxuICAgIHJldHVybiB0aGluZztcbn1cbnZhciBkZWVwRGVjb3JhdG9yID0gY3JlYXRlRGVjb3JhdG9yRm9yRW5oYW5jZXIoZGVlcEVuaGFuY2VyKTtcbnZhciBzaGFsbG93RGVjb3JhdG9yID0gY3JlYXRlRGVjb3JhdG9yRm9yRW5oYW5jZXIoc2hhbGxvd0VuaGFuY2VyKTtcbnZhciByZWZEZWNvcmF0b3IgPSBjcmVhdGVEZWNvcmF0b3JGb3JFbmhhbmNlcihyZWZlcmVuY2VFbmhhbmNlcik7XG52YXIgcmVmU3RydWN0RGVjb3JhdG9yID0gY3JlYXRlRGVjb3JhdG9yRm9yRW5oYW5jZXIocmVmU3RydWN0RW5oYW5jZXIpO1xuZnVuY3Rpb24gZ2V0RW5oYW5jZXJGcm9tT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMuZGVmYXVsdERlY29yYXRvclxuICAgICAgICA/IG9wdGlvbnMuZGVmYXVsdERlY29yYXRvci5lbmhhbmNlclxuICAgICAgICA6IG9wdGlvbnMuZGVlcCA9PT0gZmFsc2VcbiAgICAgICAgICAgID8gcmVmZXJlbmNlRW5oYW5jZXJcbiAgICAgICAgICAgIDogZGVlcEVuaGFuY2VyO1xufVxuLyoqXG4gKiBUdXJucyBhbiBvYmplY3QsIGFycmF5IG9yIGZ1bmN0aW9uIGludG8gYSByZWFjdGl2ZSBzdHJ1Y3R1cmUuXG4gKiBAcGFyYW0gdiB0aGUgdmFsdWUgd2hpY2ggc2hvdWxkIGJlY29tZSBvYnNlcnZhYmxlLlxuICovXG5mdW5jdGlvbiBjcmVhdGVPYnNlcnZhYmxlKHYsIGFyZzIsIGFyZzMpIHtcbiAgICAvLyBAb2JzZXJ2YWJsZSBzb21lUHJvcDtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgYXJndW1lbnRzWzFdID09PSBcInN5bWJvbFwiKSB7XG4gICAgICAgIHJldHVybiBkZWVwRGVjb3JhdG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIC8vIGl0IGlzIGFuIG9ic2VydmFibGUgYWxyZWFkeSwgZG9uZVxuICAgIGlmIChpc09ic2VydmFibGUodikpXG4gICAgICAgIHJldHVybiB2O1xuICAgIC8vIHNvbWV0aGluZyB0aGF0IGNhbiBiZSBjb252ZXJ0ZWQgYW5kIG11dGF0ZWQ/XG4gICAgdmFyIHJlcyA9IGlzUGxhaW5PYmplY3QodilcbiAgICAgICAgPyBvYnNlcnZhYmxlLm9iamVjdCh2LCBhcmcyLCBhcmczKVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkodilcbiAgICAgICAgICAgID8gb2JzZXJ2YWJsZS5hcnJheSh2LCBhcmcyKVxuICAgICAgICAgICAgOiBpc0VTNk1hcCh2KVxuICAgICAgICAgICAgICAgID8gb2JzZXJ2YWJsZS5tYXAodiwgYXJnMilcbiAgICAgICAgICAgICAgICA6IGlzRVM2U2V0KHYpXG4gICAgICAgICAgICAgICAgICAgID8gb2JzZXJ2YWJsZS5zZXQodiwgYXJnMilcbiAgICAgICAgICAgICAgICAgICAgOiB2O1xuICAgIC8vIHRoaXMgdmFsdWUgY291bGQgYmUgY29udmVydGVkIHRvIGEgbmV3IG9ic2VydmFibGUgZGF0YSBzdHJ1Y3R1cmUsIHJldHVybiBpdFxuICAgIGlmIChyZXMgIT09IHYpXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgLy8gb3RoZXJ3aXNlLCBqdXN0IGJveCBpdFxuICAgIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgIFwiVGhlIHByb3ZpZGVkIHZhbHVlIGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgaW50byBhbiBvYnNlcnZhYmxlLiBJZiB5b3Ugd2FudCBqdXN0IGNyZWF0ZSBhbiBvYnNlcnZhYmxlIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IHVzZSAnb2JzZXJ2YWJsZS5ib3godmFsdWUpJ1wiKTtcbn1cbnZhciBvYnNlcnZhYmxlRmFjdG9yaWVzID0ge1xuICAgIGJveDogZnVuY3Rpb24gKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMilcbiAgICAgICAgICAgIGluY29ycmVjdGx5VXNlZEFzRGVjb3JhdG9yKFwiYm94XCIpO1xuICAgICAgICB2YXIgbyA9IGFzQ3JlYXRlT2JzZXJ2YWJsZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZVZhbHVlKHZhbHVlLCBnZXRFbmhhbmNlckZyb21PcHRpb25zKG8pLCBvLm5hbWUsIHRydWUsIG8uZXF1YWxzKTtcbiAgICB9LFxuICAgIGFycmF5OiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlcywgb3B0aW9ucykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDIpXG4gICAgICAgICAgICBpbmNvcnJlY3RseVVzZWRBc0RlY29yYXRvcihcImFycmF5XCIpO1xuICAgICAgICB2YXIgbyA9IGFzQ3JlYXRlT2JzZXJ2YWJsZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVPYnNlcnZhYmxlQXJyYXkoaW5pdGlhbFZhbHVlcywgZ2V0RW5oYW5jZXJGcm9tT3B0aW9ucyhvKSwgby5uYW1lKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZXMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAyKVxuICAgICAgICAgICAgaW5jb3JyZWN0bHlVc2VkQXNEZWNvcmF0b3IoXCJtYXBcIik7XG4gICAgICAgIHZhciBvID0gYXNDcmVhdGVPYnNlcnZhYmxlT3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlTWFwKGluaXRpYWxWYWx1ZXMsIGdldEVuaGFuY2VyRnJvbU9wdGlvbnMobyksIG8ubmFtZSk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWVzLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMilcbiAgICAgICAgICAgIGluY29ycmVjdGx5VXNlZEFzRGVjb3JhdG9yKFwic2V0XCIpO1xuICAgICAgICB2YXIgbyA9IGFzQ3JlYXRlT2JzZXJ2YWJsZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZVNldChpbml0aWFsVmFsdWVzLCBnZXRFbmhhbmNlckZyb21PcHRpb25zKG8pLCBvLm5hbWUpO1xuICAgIH0sXG4gICAgb2JqZWN0OiBmdW5jdGlvbiAocHJvcHMsIGRlY29yYXRvcnMsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMV0gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICBpbmNvcnJlY3RseVVzZWRBc0RlY29yYXRvcihcIm9iamVjdFwiKTtcbiAgICAgICAgdmFyIG8gPSBhc0NyZWF0ZU9ic2VydmFibGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICBpZiAoby5wcm94eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBleHRlbmRPYnNlcnZhYmxlKHt9LCBwcm9wcywgZGVjb3JhdG9ycywgbyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdERlY29yYXRvciA9IGdldERlZmF1bHREZWNvcmF0b3JGcm9tT2JqZWN0T3B0aW9ucyhvKTtcbiAgICAgICAgICAgIHZhciBiYXNlID0gZXh0ZW5kT2JzZXJ2YWJsZSh7fSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG8pO1xuICAgICAgICAgICAgdmFyIHByb3h5ID0gY3JlYXRlRHluYW1pY09ic2VydmFibGVPYmplY3QoYmFzZSk7XG4gICAgICAgICAgICBleHRlbmRPYnNlcnZhYmxlT2JqZWN0V2l0aFByb3BlcnRpZXMocHJveHksIHByb3BzLCBkZWNvcmF0b3JzLCBkZWZhdWx0RGVjb3JhdG9yKTtcbiAgICAgICAgICAgIHJldHVybiBwcm94eTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgcmVmOiByZWZEZWNvcmF0b3IsXG4gICAgc2hhbGxvdzogc2hhbGxvd0RlY29yYXRvcixcbiAgICBkZWVwOiBkZWVwRGVjb3JhdG9yLFxuICAgIHN0cnVjdDogcmVmU3RydWN0RGVjb3JhdG9yXG59O1xudmFyIG9ic2VydmFibGUgPSBjcmVhdGVPYnNlcnZhYmxlO1xuLy8gd2VpcmQgdHJpY2sgdG8ga2VlcCBvdXIgdHlwaW5ncyBuaWNlbHkgd2l0aCBvdXIgZnVuY3MsIGFuZCBzdGlsbCBleHRlbmQgdGhlIG9ic2VydmFibGUgZnVuY3Rpb25cbk9iamVjdC5rZXlzKG9ic2VydmFibGVGYWN0b3JpZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIChvYnNlcnZhYmxlW25hbWVdID0gb2JzZXJ2YWJsZUZhY3Rvcmllc1tuYW1lXSk7IH0pO1xuZnVuY3Rpb24gaW5jb3JyZWN0bHlVc2VkQXNEZWNvcmF0b3IobWV0aG9kTmFtZSkge1xuICAgIGZhaWwoXG4gICAgLy8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgXCJFeHBlY3RlZCBvbmUgb3IgdHdvIGFyZ3VtZW50cyB0byBvYnNlcnZhYmxlLlwiICsgbWV0aG9kTmFtZSArIFwiLiBEaWQgeW91IGFjY2lkZW50YWxseSB0cnkgdG8gdXNlIG9ic2VydmFibGUuXCIgKyBtZXRob2ROYW1lICsgXCIgYXMgZGVjb3JhdG9yP1wiKTtcbn1cblxudmFyIGNvbXB1dGVkRGVjb3JhdG9yID0gY3JlYXRlUHJvcERlY29yYXRvcihmYWxzZSwgZnVuY3Rpb24gKGluc3RhbmNlLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGRlY29yYXRvclRhcmdldCwgZGVjb3JhdG9yQXJncykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaW52YXJpYW50KGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5nZXQsIFwiVHJ5aW5nIHRvIGRlY2xhcmUgYSBjb21wdXRlZCB2YWx1ZSBmb3IgdW5zcGVjaWZpZWQgZ2V0dGVyICdcIiArIHN0cmluZ2lmeUtleShwcm9wZXJ0eU5hbWUpICsgXCInXCIpO1xuICAgIH1cbiAgICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsIHNldCA9IGRlc2NyaXB0b3Iuc2V0OyAvLyBpbml0aWFsVmFsdWUgaXMgdGhlIGRlc2NyaXB0b3IgZm9yIGdldCAvIHNldCBwcm9wc1xuICAgIC8vIE9wdGltaXphdGlvbjogZmFzdGVyIG9uIGRlY29yYXRvciB0YXJnZXQgb3IgaW5zdGFuY2U/IEFzc3VtaW5nIHRhcmdldFxuICAgIC8vIE9wdGltaXphdGlvbjogZmluZCBvdXQgaWYgZGVjbGFyaW5nIG9uIGluc3RhbmNlIGlzbid0IGp1c3QgZmFzdGVyLiAoYWxzbyBtYWtlcyB0aGUgcHJvcGVydHkgZGVzY3JpcHRvciBzaW1wbGVyKS4gQnV0LCBtb3JlIG1lbW9yeSB1c2FnZS4uXG4gICAgLy8gRm9yY2luZyBpbnN0YW5jZSBub3csIGZpeGVzIGhvdCByZWxvYWRpZyBpc3N1ZXMgb24gUmVhY3QgTmF0aXZlOlxuICAgIHZhciBvcHRpb25zID0gZGVjb3JhdG9yQXJnc1swXSB8fCB7fTtcbiAgICBhc09ic2VydmFibGVPYmplY3QoaW5zdGFuY2UpLmFkZENvbXB1dGVkUHJvcChpbnN0YW5jZSwgcHJvcGVydHlOYW1lLCBfX2Fzc2lnbih7IGdldDogZ2V0LFxuICAgICAgICBzZXQ6IHNldCwgY29udGV4dDogaW5zdGFuY2UgfSwgb3B0aW9ucykpO1xufSk7XG52YXIgY29tcHV0ZWRTdHJ1Y3REZWNvcmF0b3IgPSBjb21wdXRlZERlY29yYXRvcih7IGVxdWFsczogY29tcGFyZXIuc3RydWN0dXJhbCB9KTtcbi8qKlxuICogRGVjb3JhdG9yIGZvciBjbGFzcyBwcm9wZXJ0aWVzOiBAY29tcHV0ZWQgZ2V0IHZhbHVlKCkgeyByZXR1cm4gZXhwcjsgfS5cbiAqIEZvciBsZWdhY3kgcHVycG9zZXMgYWxzbyBpbnZva2FibGUgYXMgRVM1IG9ic2VydmFibGUgY3JlYXRlZDogYGNvbXB1dGVkKCgpID0+IGV4cHIpYDtcbiAqL1xudmFyIGNvbXB1dGVkID0gZnVuY3Rpb24gY29tcHV0ZWQoYXJnMSwgYXJnMiwgYXJnMykge1xuICAgIGlmICh0eXBlb2YgYXJnMiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvLyBAY29tcHV0ZWRcbiAgICAgICAgcmV0dXJuIGNvbXB1dGVkRGVjb3JhdG9yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuICAgIGlmIChhcmcxICE9PSBudWxsICYmIHR5cGVvZiBhcmcxID09PSBcIm9iamVjdFwiICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gQGNvbXB1dGVkKHsgb3B0aW9ucyB9KVxuICAgICAgICByZXR1cm4gY29tcHV0ZWREZWNvcmF0b3IuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgLy8gY29tcHV0ZWQoZXhwciwgb3B0aW9ucz8pXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpbnZhcmlhbnQodHlwZW9mIGFyZzEgPT09IFwiZnVuY3Rpb25cIiwgXCJGaXJzdCBhcmd1bWVudCB0byBgY29tcHV0ZWRgIHNob3VsZCBiZSBhbiBleHByZXNzaW9uLlwiKTtcbiAgICAgICAgaW52YXJpYW50KGFyZ3VtZW50cy5sZW5ndGggPCAzLCBcIkNvbXB1dGVkIHRha2VzIG9uZSBvciB0d28gYXJndW1lbnRzIGlmIHVzZWQgYXMgZnVuY3Rpb25cIik7XG4gICAgfVxuICAgIHZhciBvcHRzID0gdHlwZW9mIGFyZzIgPT09IFwib2JqZWN0XCIgPyBhcmcyIDoge307XG4gICAgb3B0cy5nZXQgPSBhcmcxO1xuICAgIG9wdHMuc2V0ID0gdHlwZW9mIGFyZzIgPT09IFwiZnVuY3Rpb25cIiA/IGFyZzIgOiBvcHRzLnNldDtcbiAgICBvcHRzLm5hbWUgPSBvcHRzLm5hbWUgfHwgYXJnMS5uYW1lIHx8IFwiXCI7IC8qIGZvciBnZW5lcmF0ZWQgbmFtZSAqL1xuICAgIHJldHVybiBuZXcgQ29tcHV0ZWRWYWx1ZShvcHRzKTtcbn07XG5jb21wdXRlZC5zdHJ1Y3QgPSBjb21wdXRlZFN0cnVjdERlY29yYXRvcjtcblxudmFyIElEZXJpdmF0aW9uU3RhdGU7XG4oZnVuY3Rpb24gKElEZXJpdmF0aW9uU3RhdGUpIHtcbiAgICAvLyBiZWZvcmUgYmVpbmcgcnVuIG9yIChvdXRzaWRlIGJhdGNoIGFuZCBub3QgYmVpbmcgb2JzZXJ2ZWQpXG4gICAgLy8gYXQgdGhpcyBwb2ludCBkZXJpdmF0aW9uIGlzIG5vdCBob2xkaW5nIGFueSBkYXRhIGFib3V0IGRlcGVuZGVuY3kgdHJlZVxuICAgIElEZXJpdmF0aW9uU3RhdGVbSURlcml2YXRpb25TdGF0ZVtcIk5PVF9UUkFDS0lOR1wiXSA9IC0xXSA9IFwiTk9UX1RSQUNLSU5HXCI7XG4gICAgLy8gbm8gc2hhbGxvdyBkZXBlbmRlbmN5IGNoYW5nZWQgc2luY2UgbGFzdCBjb21wdXRhdGlvblxuICAgIC8vIHdvbid0IHJlY2FsY3VsYXRlIGRlcml2YXRpb25cbiAgICAvLyB0aGlzIGlzIHdoYXQgbWFrZXMgbW9ieCBmYXN0XG4gICAgSURlcml2YXRpb25TdGF0ZVtJRGVyaXZhdGlvblN0YXRlW1wiVVBfVE9fREFURVwiXSA9IDBdID0gXCJVUF9UT19EQVRFXCI7XG4gICAgLy8gc29tZSBkZWVwIGRlcGVuZGVuY3kgY2hhbmdlZCwgYnV0IGRvbid0IGtub3cgaWYgc2hhbGxvdyBkZXBlbmRlbmN5IGNoYW5nZWRcbiAgICAvLyB3aWxsIHJlcXVpcmUgdG8gY2hlY2sgZmlyc3QgaWYgVVBfVE9fREFURSBvciBQT1NTSUJMWV9TVEFMRVxuICAgIC8vIGN1cnJlbnRseSBvbmx5IENvbXB1dGVkVmFsdWUgd2lsbCBwcm9wYWdhdGUgUE9TU0lCTFlfU1RBTEVcbiAgICAvL1xuICAgIC8vIGhhdmluZyB0aGlzIHN0YXRlIGlzIHNlY29uZCBiaWcgb3B0aW1pemF0aW9uOlxuICAgIC8vIGRvbid0IGhhdmUgdG8gcmVjb21wdXRlIG9uIGV2ZXJ5IGRlcGVuZGVuY3kgY2hhbmdlLCBidXQgb25seSB3aGVuIGl0J3MgbmVlZGVkXG4gICAgSURlcml2YXRpb25TdGF0ZVtJRGVyaXZhdGlvblN0YXRlW1wiUE9TU0lCTFlfU1RBTEVcIl0gPSAxXSA9IFwiUE9TU0lCTFlfU1RBTEVcIjtcbiAgICAvLyBBIHNoYWxsb3cgZGVwZW5kZW5jeSBoYXMgY2hhbmdlZCBzaW5jZSBsYXN0IGNvbXB1dGF0aW9uIGFuZCB0aGUgZGVyaXZhdGlvblxuICAgIC8vIHdpbGwgbmVlZCB0byByZWNvbXB1dGUgd2hlbiBpdCdzIG5lZWRlZCBuZXh0LlxuICAgIElEZXJpdmF0aW9uU3RhdGVbSURlcml2YXRpb25TdGF0ZVtcIlNUQUxFXCJdID0gMl0gPSBcIlNUQUxFXCI7XG59KShJRGVyaXZhdGlvblN0YXRlIHx8IChJRGVyaXZhdGlvblN0YXRlID0ge30pKTtcbnZhciBUcmFjZU1vZGU7XG4oZnVuY3Rpb24gKFRyYWNlTW9kZSkge1xuICAgIFRyYWNlTW9kZVtUcmFjZU1vZGVbXCJOT05FXCJdID0gMF0gPSBcIk5PTkVcIjtcbiAgICBUcmFjZU1vZGVbVHJhY2VNb2RlW1wiTE9HXCJdID0gMV0gPSBcIkxPR1wiO1xuICAgIFRyYWNlTW9kZVtUcmFjZU1vZGVbXCJCUkVBS1wiXSA9IDJdID0gXCJCUkVBS1wiO1xufSkoVHJhY2VNb2RlIHx8IChUcmFjZU1vZGUgPSB7fSkpO1xudmFyIENhdWdodEV4Y2VwdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDYXVnaHRFeGNlcHRpb24oY2F1c2UpIHtcbiAgICAgICAgdGhpcy5jYXVzZSA9IGNhdXNlO1xuICAgICAgICAvLyBFbXB0eVxuICAgIH1cbiAgICByZXR1cm4gQ2F1Z2h0RXhjZXB0aW9uO1xufSgpKTtcbmZ1bmN0aW9uIGlzQ2F1Z2h0RXhjZXB0aW9uKGUpIHtcbiAgICByZXR1cm4gZSBpbnN0YW5jZW9mIENhdWdodEV4Y2VwdGlvbjtcbn1cbi8qKlxuICogRmluZHMgb3V0IHdoZXRoZXIgYW55IGRlcGVuZGVuY3kgb2YgdGhlIGRlcml2YXRpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG4gKiBJZiBkZXBlbmRlbmNpZXNTdGF0ZSBpcyAxIHRoZW4gaXQgd2lsbCByZWNhbGN1bGF0ZSBkZXBlbmRlbmNpZXMsXG4gKiBpZiBhbnkgZGVwZW5kZW5jeSBjaGFuZ2VkIGl0IHdpbGwgcHJvcGFnYXRlIGl0IGJ5IGNoYW5naW5nIGRlcGVuZGVuY2llc1N0YXRlIHRvIDIuXG4gKlxuICogQnkgaXRlcmF0aW5nIG92ZXIgdGhlIGRlcGVuZGVuY2llcyBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgd2VyZSByZXBvcnRlZCBhbmRcbiAqIHN0b3BwaW5nIG9uIHRoZSBmaXJzdCBjaGFuZ2UsIGFsbCB0aGUgcmVjYWxjdWxhdGlvbnMgYXJlIG9ubHkgY2FsbGVkIGZvciBDb21wdXRlZFZhbHVlc1xuICogdGhhdCB3aWxsIGJlIHRyYWNrZWQgYnkgZGVyaXZhdGlvbi4gVGhhdCBpcyBiZWNhdXNlIHdlIGFzc3VtZSB0aGF0IGlmIHRoZSBmaXJzdCB4XG4gKiBkZXBlbmRlbmNpZXMgb2YgdGhlIGRlcml2YXRpb24gZG9lc24ndCBjaGFuZ2UgdGhlbiB0aGUgZGVyaXZhdGlvbiBzaG91bGQgcnVuIHRoZSBzYW1lIHdheVxuICogdXAgdW50aWwgYWNjZXNzaW5nIHgtdGggZGVwZW5kZW5jeS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkQ29tcHV0ZShkZXJpdmF0aW9uKSB7XG4gICAgc3dpdGNoIChkZXJpdmF0aW9uLmRlcGVuZGVuY2llc1N0YXRlKSB7XG4gICAgICAgIGNhc2UgSURlcml2YXRpb25TdGF0ZS5VUF9UT19EQVRFOlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjYXNlIElEZXJpdmF0aW9uU3RhdGUuTk9UX1RSQUNLSU5HOlxuICAgICAgICBjYXNlIElEZXJpdmF0aW9uU3RhdGUuU1RBTEU6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSBJRGVyaXZhdGlvblN0YXRlLlBPU1NJQkxZX1NUQUxFOiB7XG4gICAgICAgICAgICAvLyBzdGF0ZSBwcm9wYWdhdGlvbiBjYW4gb2NjdXIgb3V0c2lkZSBvZiBhY3Rpb24vcmVhY3RpdmUgY29udGV4dCAjMjE5NVxuICAgICAgICAgICAgdmFyIHByZXZBbGxvd1N0YXRlUmVhZHMgPSBhbGxvd1N0YXRlUmVhZHNTdGFydCh0cnVlKTtcbiAgICAgICAgICAgIHZhciBwcmV2VW50cmFja2VkID0gdW50cmFja2VkU3RhcnQoKTsgLy8gbm8gbmVlZCBmb3IgdGhvc2UgY29tcHV0ZWRzIHRvIGJlIHJlcG9ydGVkLCB0aGV5IHdpbGwgYmUgcGlja2VkIHVwIGluIHRyYWNrRGVyaXZlZEZ1bmN0aW9uLlxuICAgICAgICAgICAgdmFyIG9icyA9IGRlcml2YXRpb24ub2JzZXJ2aW5nLCBsID0gb2JzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9iaiA9IG9ic1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNDb21wdXRlZFZhbHVlKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFN0YXRlLmRpc2FibGVFcnJvckJvdW5kYXJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai5nZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmdldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgbm90IGludGVyZXN0ZWQgaW4gdGhlIHZhbHVlICpvciogZXhjZXB0aW9uIGF0IHRoaXMgbW9tZW50LCBidXQgaWYgdGhlcmUgaXMgb25lLCBub3RpZnkgYWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW50cmFja2VkRW5kKHByZXZVbnRyYWNrZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93U3RhdGVSZWFkc0VuZChwcmV2QWxsb3dTdGF0ZVJlYWRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBpZiBDb21wdXRlZFZhbHVlIGBvYmpgIGFjdHVhbGx5IGNoYW5nZWQgaXQgd2lsbCBiZSBjb21wdXRlZCBhbmQgcHJvcGFnYXRlZCB0byBpdHMgb2JzZXJ2ZXJzLlxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgYGRlcml2YXRpb25gIGlzIGFuIG9ic2VydmVyIG9mIGBvYmpgXG4gICAgICAgICAgICAgICAgICAgIC8vIGludmFyaWFudFNob3VsZENvbXB1dGUoZGVyaXZhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlcml2YXRpb24uZGVwZW5kZW5jaWVzU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuU1RBTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVudHJhY2tlZEVuZChwcmV2VW50cmFja2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93U3RhdGVSZWFkc0VuZChwcmV2QWxsb3dTdGF0ZVJlYWRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hhbmdlRGVwZW5kZW5jaWVzU3RhdGVUbzAoZGVyaXZhdGlvbik7XG4gICAgICAgICAgICB1bnRyYWNrZWRFbmQocHJldlVudHJhY2tlZCk7XG4gICAgICAgICAgICBhbGxvd1N0YXRlUmVhZHNFbmQocHJldkFsbG93U3RhdGVSZWFkcyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBmdW5jdGlvbiBpbnZhcmlhbnRTaG91bGRDb21wdXRlKGRlcml2YXRpb246IElEZXJpdmF0aW9uKSB7XG4vLyAgICAgY29uc3QgbmV3RGVwU3RhdGUgPSAoZGVyaXZhdGlvbiBhcyBhbnkpLmRlcGVuZGVuY2llc1N0YXRlXG4vLyAgICAgaWYgKFxuLy8gICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIgJiZcbi8vICAgICAgICAgKG5ld0RlcFN0YXRlID09PSBJRGVyaXZhdGlvblN0YXRlLlBPU1NJQkxZX1NUQUxFIHx8XG4vLyAgICAgICAgICAgICBuZXdEZXBTdGF0ZSA9PT0gSURlcml2YXRpb25TdGF0ZS5OT1RfVFJBQ0tJTkcpXG4vLyAgICAgKVxuLy8gICAgICAgICBmYWlsKFwiSWxsZWdhbCBkZXBlbmRlbmN5IHN0YXRlXCIpXG4vLyB9XG5mdW5jdGlvbiBpc0NvbXB1dGluZ0Rlcml2YXRpb24oKSB7XG4gICAgcmV0dXJuIGdsb2JhbFN0YXRlLnRyYWNraW5nRGVyaXZhdGlvbiAhPT0gbnVsbDsgLy8gZmlsdGVyIG91dCBhY3Rpb25zIGluc2lkZSBjb21wdXRhdGlvbnNcbn1cbmZ1bmN0aW9uIGNoZWNrSWZTdGF0ZU1vZGlmaWNhdGlvbnNBcmVBbGxvd2VkKGF0b20pIHtcbiAgICB2YXIgaGFzT2JzZXJ2ZXJzID0gYXRvbS5vYnNlcnZlcnMuc2l6ZSA+IDA7XG4gICAgLy8gU2hvdWxkIG5ldmVyIGJlIHBvc3NpYmxlIHRvIGNoYW5nZSBhbiBvYnNlcnZlZCBvYnNlcnZhYmxlIGZyb20gaW5zaWRlIGNvbXB1dGVkLCBzZWUgIzc5OFxuICAgIGlmIChnbG9iYWxTdGF0ZS5jb21wdXRhdGlvbkRlcHRoID4gMCAmJiBoYXNPYnNlcnZlcnMpXG4gICAgICAgIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICBcIkNvbXB1dGVkIHZhbHVlcyBhcmUgbm90IGFsbG93ZWQgdG8gY2F1c2Ugc2lkZSBlZmZlY3RzIGJ5IGNoYW5naW5nIG9ic2VydmFibGVzIHRoYXQgYXJlIGFscmVhZHkgYmVpbmcgb2JzZXJ2ZWQuIFRyaWVkIHRvIG1vZGlmeTogXCIgKyBhdG9tLm5hbWUpO1xuICAgIC8vIFNob3VsZCBub3QgYmUgcG9zc2libGUgdG8gY2hhbmdlIG9ic2VydmVkIHN0YXRlIG91dHNpZGUgc3RyaWN0IG1vZGUsIGV4Y2VwdCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIHNlZSAjNTYzXG4gICAgaWYgKCFnbG9iYWxTdGF0ZS5hbGxvd1N0YXRlQ2hhbmdlcyAmJiAoaGFzT2JzZXJ2ZXJzIHx8IGdsb2JhbFN0YXRlLmVuZm9yY2VBY3Rpb25zID09PSBcInN0cmljdFwiKSlcbiAgICAgICAgZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgIChnbG9iYWxTdGF0ZS5lbmZvcmNlQWN0aW9uc1xuICAgICAgICAgICAgICAgID8gXCJTaW5jZSBzdHJpY3QtbW9kZSBpcyBlbmFibGVkLCBjaGFuZ2luZyBvYnNlcnZlZCBvYnNlcnZhYmxlIHZhbHVlcyBvdXRzaWRlIGFjdGlvbnMgaXMgbm90IGFsbG93ZWQuIFBsZWFzZSB3cmFwIHRoZSBjb2RlIGluIGFuIGBhY3Rpb25gIGlmIHRoaXMgY2hhbmdlIGlzIGludGVuZGVkLiBUcmllZCB0byBtb2RpZnk6IFwiXG4gICAgICAgICAgICAgICAgOiBcIlNpZGUgZWZmZWN0cyBsaWtlIGNoYW5naW5nIHN0YXRlIGFyZSBub3QgYWxsb3dlZCBhdCB0aGlzIHBvaW50LiBBcmUgeW91IHRyeWluZyB0byBtb2RpZnkgc3RhdGUgZnJvbSwgZm9yIGV4YW1wbGUsIHRoZSByZW5kZXIgZnVuY3Rpb24gb2YgYSBSZWFjdCBjb21wb25lbnQ/IFRyaWVkIHRvIG1vZGlmeTogXCIpICtcbiAgICAgICAgICAgICAgICBhdG9tLm5hbWUpO1xufVxuZnVuY3Rpb24gY2hlY2tJZlN0YXRlUmVhZHNBcmVBbGxvd2VkKG9ic2VydmFibGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICFnbG9iYWxTdGF0ZS5hbGxvd1N0YXRlUmVhZHMgJiZcbiAgICAgICAgZ2xvYmFsU3RhdGUub2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb24pIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW21vYnhdIE9ic2VydmFibGUgXCIgKyBvYnNlcnZhYmxlLm5hbWUgKyBcIiBiZWluZyByZWFkIG91dHNpZGUgYSByZWFjdGl2ZSBjb250ZXh0XCIpO1xuICAgIH1cbn1cbi8qKlxuICogRXhlY3V0ZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIGBmYCBhbmQgdHJhY2tzIHdoaWNoIG9ic2VydmFibGVzIGFyZSBiZWluZyBhY2Nlc3NlZC5cbiAqIFRoZSB0cmFja2luZyBpbmZvcm1hdGlvbiBpcyBzdG9yZWQgb24gdGhlIGBkZXJpdmF0aW9uYCBvYmplY3QgYW5kIHRoZSBkZXJpdmF0aW9uIGlzIHJlZ2lzdGVyZWRcbiAqIGFzIG9ic2VydmVyIG9mIGFueSBvZiB0aGUgYWNjZXNzZWQgb2JzZXJ2YWJsZXMuXG4gKi9cbmZ1bmN0aW9uIHRyYWNrRGVyaXZlZEZ1bmN0aW9uKGRlcml2YXRpb24sIGYsIGNvbnRleHQpIHtcbiAgICB2YXIgcHJldkFsbG93U3RhdGVSZWFkcyA9IGFsbG93U3RhdGVSZWFkc1N0YXJ0KHRydWUpO1xuICAgIC8vIHByZSBhbGxvY2F0ZSBhcnJheSBhbGxvY2F0aW9uICsgcm9vbSBmb3IgdmFyaWF0aW9uIGluIGRlcHNcbiAgICAvLyBhcnJheSB3aWxsIGJlIHRyaW1tZWQgYnkgYmluZERlcGVuZGVuY2llc1xuICAgIGNoYW5nZURlcGVuZGVuY2llc1N0YXRlVG8wKGRlcml2YXRpb24pO1xuICAgIGRlcml2YXRpb24ubmV3T2JzZXJ2aW5nID0gbmV3IEFycmF5KGRlcml2YXRpb24ub2JzZXJ2aW5nLmxlbmd0aCArIDEwMCk7XG4gICAgZGVyaXZhdGlvbi51bmJvdW5kRGVwc0NvdW50ID0gMDtcbiAgICBkZXJpdmF0aW9uLnJ1bklkID0gKytnbG9iYWxTdGF0ZS5ydW5JZDtcbiAgICB2YXIgcHJldlRyYWNraW5nID0gZ2xvYmFsU3RhdGUudHJhY2tpbmdEZXJpdmF0aW9uO1xuICAgIGdsb2JhbFN0YXRlLnRyYWNraW5nRGVyaXZhdGlvbiA9IGRlcml2YXRpb247XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoZ2xvYmFsU3RhdGUuZGlzYWJsZUVycm9yQm91bmRhcmllcyA9PT0gdHJ1ZSkge1xuICAgICAgICByZXN1bHQgPSBmLmNhbGwoY29udGV4dCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gZi5jYWxsKGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgQ2F1Z2h0RXhjZXB0aW9uKGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdsb2JhbFN0YXRlLnRyYWNraW5nRGVyaXZhdGlvbiA9IHByZXZUcmFja2luZztcbiAgICBiaW5kRGVwZW5kZW5jaWVzKGRlcml2YXRpb24pO1xuICAgIHdhcm5BYm91dERlcml2YXRpb25XaXRob3V0RGVwZW5kZW5jaWVzKGRlcml2YXRpb24pO1xuICAgIGFsbG93U3RhdGVSZWFkc0VuZChwcmV2QWxsb3dTdGF0ZVJlYWRzKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gd2FybkFib3V0RGVyaXZhdGlvbldpdGhvdXREZXBlbmRlbmNpZXMoZGVyaXZhdGlvbikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAoZGVyaXZhdGlvbi5vYnNlcnZpbmcubGVuZ3RoICE9PSAwKVxuICAgICAgICByZXR1cm47XG4gICAgaWYgKGdsb2JhbFN0YXRlLnJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlIHx8IGRlcml2YXRpb24ucmVxdWlyZXNPYnNlcnZhYmxlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlttb2J4XSBEZXJpdmF0aW9uIFwiICsgZGVyaXZhdGlvbi5uYW1lICsgXCIgaXMgY3JlYXRlZC91cGRhdGVkIHdpdGhvdXQgcmVhZGluZyBhbnkgb2JzZXJ2YWJsZSB2YWx1ZVwiKTtcbiAgICB9XG59XG4vKipcbiAqIGRpZmZzIG5ld09ic2VydmluZyB3aXRoIG9ic2VydmluZy5cbiAqIHVwZGF0ZSBvYnNlcnZpbmcgdG8gYmUgbmV3T2JzZXJ2aW5nIHdpdGggdW5pcXVlIG9ic2VydmFibGVzXG4gKiBub3RpZnkgb2JzZXJ2ZXJzIHRoYXQgYmVjb21lIG9ic2VydmVkL3Vub2JzZXJ2ZWRcbiAqL1xuZnVuY3Rpb24gYmluZERlcGVuZGVuY2llcyhkZXJpdmF0aW9uKSB7XG4gICAgLy8gaW52YXJpYW50KGRlcml2YXRpb24uZGVwZW5kZW5jaWVzU3RhdGUgIT09IElEZXJpdmF0aW9uU3RhdGUuTk9UX1RSQUNLSU5HLCBcIklOVEVSTkFMIEVSUk9SIGJpbmREZXBlbmRlbmNpZXMgZXhwZWN0cyBkZXJpdmF0aW9uLmRlcGVuZGVuY2llc1N0YXRlICE9PSAtMVwiKTtcbiAgICB2YXIgcHJldk9ic2VydmluZyA9IGRlcml2YXRpb24ub2JzZXJ2aW5nO1xuICAgIHZhciBvYnNlcnZpbmcgPSAoZGVyaXZhdGlvbi5vYnNlcnZpbmcgPSBkZXJpdmF0aW9uLm5ld09ic2VydmluZyk7XG4gICAgdmFyIGxvd2VzdE5ld09ic2VydmluZ0Rlcml2YXRpb25TdGF0ZSA9IElEZXJpdmF0aW9uU3RhdGUuVVBfVE9fREFURTtcbiAgICAvLyBHbyB0aHJvdWdoIGFsbCBuZXcgb2JzZXJ2YWJsZXMgYW5kIGNoZWNrIGRpZmZWYWx1ZTogKHRoaXMgbGlzdCBjYW4gY29udGFpbiBkdXBsaWNhdGVzKTpcbiAgICAvLyAgIDA6IGZpcnN0IG9jY3VycmVuY2UsIGNoYW5nZSB0byAxIGFuZCBrZWVwIGl0XG4gICAgLy8gICAxOiBleHRyYSBvY2N1cnJlbmNlLCBkcm9wIGl0XG4gICAgdmFyIGkwID0gMCwgbCA9IGRlcml2YXRpb24udW5ib3VuZERlcHNDb3VudDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgICB2YXIgZGVwID0gb2JzZXJ2aW5nW2ldO1xuICAgICAgICBpZiAoZGVwLmRpZmZWYWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgZGVwLmRpZmZWYWx1ZSA9IDE7XG4gICAgICAgICAgICBpZiAoaTAgIT09IGkpXG4gICAgICAgICAgICAgICAgb2JzZXJ2aW5nW2kwXSA9IGRlcDtcbiAgICAgICAgICAgIGkwKys7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBjYXN0IGlzICdzYWZlJyBoZXJlLCBiZWNhdXNlIGlmIGRlcCBpcyBJT2JzZXJ2YWJsZSwgYGRlcGVuZGVuY2llc1N0YXRlYCB3aWxsIGJlIHVuZGVmaW5lZCxcbiAgICAgICAgLy8gbm90IGhpdHRpbmcgdGhlIGNvbmRpdGlvblxuICAgICAgICBpZiAoZGVwLmRlcGVuZGVuY2llc1N0YXRlID4gbG93ZXN0TmV3T2JzZXJ2aW5nRGVyaXZhdGlvblN0YXRlKSB7XG4gICAgICAgICAgICBsb3dlc3ROZXdPYnNlcnZpbmdEZXJpdmF0aW9uU3RhdGUgPSBkZXAuZGVwZW5kZW5jaWVzU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb2JzZXJ2aW5nLmxlbmd0aCA9IGkwO1xuICAgIGRlcml2YXRpb24ubmV3T2JzZXJ2aW5nID0gbnVsbDsgLy8gbmV3T2JzZXJ2aW5nIHNob3VsZG4ndCBiZSBuZWVkZWQgb3V0c2lkZSB0cmFja2luZyAoc3RhdGVtZW50IG1vdmVkIGRvd24gdG8gd29yayBhcm91bmQgRkYgYnVnLCBzZWUgIzYxNClcbiAgICAvLyBHbyB0aHJvdWdoIGFsbCBvbGQgb2JzZXJ2YWJsZXMgYW5kIGNoZWNrIGRpZmZWYWx1ZTogKGl0IGlzIHVuaXF1ZSBhZnRlciBsYXN0IGJpbmREZXBlbmRlbmNpZXMpXG4gICAgLy8gICAwOiBpdCdzIG5vdCBpbiBuZXcgb2JzZXJ2YWJsZXMsIHVub2JzZXJ2ZSBpdFxuICAgIC8vICAgMTogaXQga2VlcHMgYmVpbmcgb2JzZXJ2ZWQsIGRvbid0IHdhbnQgdG8gbm90aWZ5IGl0LiBjaGFuZ2UgdG8gMFxuICAgIGwgPSBwcmV2T2JzZXJ2aW5nLmxlbmd0aDtcbiAgICB3aGlsZSAobC0tKSB7XG4gICAgICAgIHZhciBkZXAgPSBwcmV2T2JzZXJ2aW5nW2xdO1xuICAgICAgICBpZiAoZGVwLmRpZmZWYWx1ZSA9PT0gMCkge1xuICAgICAgICAgICAgcmVtb3ZlT2JzZXJ2ZXIoZGVwLCBkZXJpdmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBkZXAuZGlmZlZhbHVlID0gMDtcbiAgICB9XG4gICAgLy8gR28gdGhyb3VnaCBhbGwgbmV3IG9ic2VydmFibGVzIGFuZCBjaGVjayBkaWZmVmFsdWU6IChub3cgaXQgc2hvdWxkIGJlIHVuaXF1ZSlcbiAgICAvLyAgIDA6IGl0IHdhcyBzZXQgdG8gMCBpbiBsYXN0IGxvb3AuIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuXG4gICAgLy8gICAxOiBpdCB3YXNuJ3Qgb2JzZXJ2ZWQsIGxldCdzIG9ic2VydmUgaXQuIHNldCBiYWNrIHRvIDBcbiAgICB3aGlsZSAoaTAtLSkge1xuICAgICAgICB2YXIgZGVwID0gb2JzZXJ2aW5nW2kwXTtcbiAgICAgICAgaWYgKGRlcC5kaWZmVmFsdWUgPT09IDEpIHtcbiAgICAgICAgICAgIGRlcC5kaWZmVmFsdWUgPSAwO1xuICAgICAgICAgICAgYWRkT2JzZXJ2ZXIoZGVwLCBkZXJpdmF0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTb21lIG5ldyBvYnNlcnZlZCBkZXJpdmF0aW9ucyBtYXkgYmVjb21lIHN0YWxlIGR1cmluZyB0aGlzIGRlcml2YXRpb24gY29tcHV0YXRpb25cbiAgICAvLyBzbyB0aGV5IGhhdmUgaGFkIG5vIGNoYW5jZSB0byBwcm9wYWdhdGUgc3RhbGVuZXNzICgjOTE2KVxuICAgIGlmIChsb3dlc3ROZXdPYnNlcnZpbmdEZXJpdmF0aW9uU3RhdGUgIT09IElEZXJpdmF0aW9uU3RhdGUuVVBfVE9fREFURSkge1xuICAgICAgICBkZXJpdmF0aW9uLmRlcGVuZGVuY2llc1N0YXRlID0gbG93ZXN0TmV3T2JzZXJ2aW5nRGVyaXZhdGlvblN0YXRlO1xuICAgICAgICBkZXJpdmF0aW9uLm9uQmVjb21lU3RhbGUoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjbGVhck9ic2VydmluZyhkZXJpdmF0aW9uKSB7XG4gICAgLy8gaW52YXJpYW50KGdsb2JhbFN0YXRlLmluQmF0Y2ggPiAwLCBcIklOVEVSTkFMIEVSUk9SIGNsZWFyT2JzZXJ2aW5nIHNob3VsZCBiZSBjYWxsZWQgb25seSBpbnNpZGUgYmF0Y2hcIik7XG4gICAgdmFyIG9icyA9IGRlcml2YXRpb24ub2JzZXJ2aW5nO1xuICAgIGRlcml2YXRpb24ub2JzZXJ2aW5nID0gW107XG4gICAgdmFyIGkgPSBvYnMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pXG4gICAgICAgIHJlbW92ZU9ic2VydmVyKG9ic1tpXSwgZGVyaXZhdGlvbik7XG4gICAgZGVyaXZhdGlvbi5kZXBlbmRlbmNpZXNTdGF0ZSA9IElEZXJpdmF0aW9uU3RhdGUuTk9UX1RSQUNLSU5HO1xufVxuZnVuY3Rpb24gdW50cmFja2VkKGFjdGlvbikge1xuICAgIHZhciBwcmV2ID0gdW50cmFja2VkU3RhcnQoKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYWN0aW9uKCk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB1bnRyYWNrZWRFbmQocHJldik7XG4gICAgfVxufVxuZnVuY3Rpb24gdW50cmFja2VkU3RhcnQoKSB7XG4gICAgdmFyIHByZXYgPSBnbG9iYWxTdGF0ZS50cmFja2luZ0Rlcml2YXRpb247XG4gICAgZ2xvYmFsU3RhdGUudHJhY2tpbmdEZXJpdmF0aW9uID0gbnVsbDtcbiAgICByZXR1cm4gcHJldjtcbn1cbmZ1bmN0aW9uIHVudHJhY2tlZEVuZChwcmV2KSB7XG4gICAgZ2xvYmFsU3RhdGUudHJhY2tpbmdEZXJpdmF0aW9uID0gcHJldjtcbn1cbmZ1bmN0aW9uIGFsbG93U3RhdGVSZWFkc1N0YXJ0KGFsbG93U3RhdGVSZWFkcykge1xuICAgIHZhciBwcmV2ID0gZ2xvYmFsU3RhdGUuYWxsb3dTdGF0ZVJlYWRzO1xuICAgIGdsb2JhbFN0YXRlLmFsbG93U3RhdGVSZWFkcyA9IGFsbG93U3RhdGVSZWFkcztcbiAgICByZXR1cm4gcHJldjtcbn1cbmZ1bmN0aW9uIGFsbG93U3RhdGVSZWFkc0VuZChwcmV2KSB7XG4gICAgZ2xvYmFsU3RhdGUuYWxsb3dTdGF0ZVJlYWRzID0gcHJldjtcbn1cbi8qKlxuICogbmVlZGVkIHRvIGtlZXAgYGxvd2VzdE9ic2VydmVyU3RhdGVgIGNvcnJlY3QuIHdoZW4gY2hhbmdpbmcgZnJvbSAoMiBvciAxKSB0byAwXG4gKlxuICovXG5mdW5jdGlvbiBjaGFuZ2VEZXBlbmRlbmNpZXNTdGF0ZVRvMChkZXJpdmF0aW9uKSB7XG4gICAgaWYgKGRlcml2YXRpb24uZGVwZW5kZW5jaWVzU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuVVBfVE9fREFURSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGRlcml2YXRpb24uZGVwZW5kZW5jaWVzU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlVQX1RPX0RBVEU7XG4gICAgdmFyIG9icyA9IGRlcml2YXRpb24ub2JzZXJ2aW5nO1xuICAgIHZhciBpID0gb2JzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKVxuICAgICAgICBvYnNbaV0ubG93ZXN0T2JzZXJ2ZXJTdGF0ZSA9IElEZXJpdmF0aW9uU3RhdGUuVVBfVE9fREFURTtcbn1cblxuLy8gd2UgZG9uJ3QgdXNlIGdsb2JhbFN0YXRlIGZvciB0aGVzZSBpbiBvcmRlciB0byBhdm9pZCBwb3NzaWJsZSBpc3N1ZXMgd2l0aCBtdWx0aXBsZVxuLy8gbW9ieCB2ZXJzaW9uc1xudmFyIGN1cnJlbnRBY3Rpb25JZCA9IDA7XG52YXIgbmV4dEFjdGlvbklkID0gMTtcbnZhciBmdW5jdGlvbk5hbWVEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihmdW5jdGlvbiAoKSB7IH0sIFwibmFtZVwiKTtcbnZhciBpc0Z1bmN0aW9uTmFtZUNvbmZpZ3VyYWJsZSA9IGZ1bmN0aW9uTmFtZURlc2NyaXB0b3IgJiYgZnVuY3Rpb25OYW1lRGVzY3JpcHRvci5jb25maWd1cmFibGU7XG5mdW5jdGlvbiBjcmVhdGVBY3Rpb24oYWN0aW9uTmFtZSwgZm4sIHJlZikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaW52YXJpYW50KHR5cGVvZiBmbiA9PT0gXCJmdW5jdGlvblwiLCBcImBhY3Rpb25gIGNhbiBvbmx5IGJlIGludm9rZWQgb24gZnVuY3Rpb25zXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbk5hbWUgIT09IFwic3RyaW5nXCIgfHwgIWFjdGlvbk5hbWUpXG4gICAgICAgICAgICBmYWlsKFwiYWN0aW9ucyBzaG91bGQgaGF2ZSB2YWxpZCBuYW1lcywgZ290OiAnXCIgKyBhY3Rpb25OYW1lICsgXCInXCIpO1xuICAgIH1cbiAgICB2YXIgcmVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZXhlY3V0ZUFjdGlvbihhY3Rpb25OYW1lLCBmbiwgcmVmIHx8IHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgICByZXMuaXNNb2J4QWN0aW9uID0gdHJ1ZTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uTmFtZUNvbmZpZ3VyYWJsZSkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcywgXCJuYW1lXCIsIHsgdmFsdWU6IGFjdGlvbk5hbWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cbmZ1bmN0aW9uIGV4ZWN1dGVBY3Rpb24oYWN0aW9uTmFtZSwgZm4sIHNjb3BlLCBhcmdzKSB7XG4gICAgdmFyIHJ1bkluZm8gPSBfc3RhcnRBY3Rpb24oYWN0aW9uTmFtZSwgc2NvcGUsIGFyZ3MpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShzY29wZSwgYXJncyk7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcnVuSW5mby5lcnJvciA9IGVycjtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgX2VuZEFjdGlvbihydW5JbmZvKTtcbiAgICB9XG59XG5mdW5jdGlvbiBfc3RhcnRBY3Rpb24oYWN0aW9uTmFtZSwgc2NvcGUsIGFyZ3MpIHtcbiAgICB2YXIgbm90aWZ5U3B5ID0gaXNTcHlFbmFibGVkKCkgJiYgISFhY3Rpb25OYW1lO1xuICAgIHZhciBzdGFydFRpbWUgPSAwO1xuICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgICAgIHZhciBsID0gKGFyZ3MgJiYgYXJncy5sZW5ndGgpIHx8IDA7XG4gICAgICAgIHZhciBmbGF0dGVuZEFyZ3MgPSBuZXcgQXJyYXkobCk7XG4gICAgICAgIGlmIChsID4gMClcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKVxuICAgICAgICAgICAgICAgIGZsYXR0ZW5kQXJnc1tpXSA9IGFyZ3NbaV07XG4gICAgICAgIHNweVJlcG9ydFN0YXJ0KHtcbiAgICAgICAgICAgIHR5cGU6IFwiYWN0aW9uXCIsXG4gICAgICAgICAgICBuYW1lOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgb2JqZWN0OiBzY29wZSxcbiAgICAgICAgICAgIGFyZ3VtZW50czogZmxhdHRlbmRBcmdzXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgcHJldkRlcml2YXRpb24gPSB1bnRyYWNrZWRTdGFydCgpO1xuICAgIHN0YXJ0QmF0Y2goKTtcbiAgICB2YXIgcHJldkFsbG93U3RhdGVDaGFuZ2VzID0gYWxsb3dTdGF0ZUNoYW5nZXNTdGFydCh0cnVlKTtcbiAgICB2YXIgcHJldkFsbG93U3RhdGVSZWFkcyA9IGFsbG93U3RhdGVSZWFkc1N0YXJ0KHRydWUpO1xuICAgIHZhciBydW5JbmZvID0ge1xuICAgICAgICBwcmV2RGVyaXZhdGlvbjogcHJldkRlcml2YXRpb24sXG4gICAgICAgIHByZXZBbGxvd1N0YXRlQ2hhbmdlczogcHJldkFsbG93U3RhdGVDaGFuZ2VzLFxuICAgICAgICBwcmV2QWxsb3dTdGF0ZVJlYWRzOiBwcmV2QWxsb3dTdGF0ZVJlYWRzLFxuICAgICAgICBub3RpZnlTcHk6IG5vdGlmeVNweSxcbiAgICAgICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsXG4gICAgICAgIGFjdGlvbklkOiBuZXh0QWN0aW9uSWQrKyxcbiAgICAgICAgcGFyZW50QWN0aW9uSWQ6IGN1cnJlbnRBY3Rpb25JZFxuICAgIH07XG4gICAgY3VycmVudEFjdGlvbklkID0gcnVuSW5mby5hY3Rpb25JZDtcbiAgICByZXR1cm4gcnVuSW5mbztcbn1cbmZ1bmN0aW9uIF9lbmRBY3Rpb24ocnVuSW5mbykge1xuICAgIGlmIChjdXJyZW50QWN0aW9uSWQgIT09IHJ1bkluZm8uYWN0aW9uSWQpIHtcbiAgICAgICAgZmFpbChcImludmFsaWQgYWN0aW9uIHN0YWNrLiBkaWQgeW91IGZvcmdldCB0byBmaW5pc2ggYW4gYWN0aW9uP1wiKTtcbiAgICB9XG4gICAgY3VycmVudEFjdGlvbklkID0gcnVuSW5mby5wYXJlbnRBY3Rpb25JZDtcbiAgICBpZiAocnVuSW5mby5lcnJvciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGdsb2JhbFN0YXRlLnN1cHByZXNzUmVhY3Rpb25FcnJvcnMgPSB0cnVlO1xuICAgIH1cbiAgICBhbGxvd1N0YXRlQ2hhbmdlc0VuZChydW5JbmZvLnByZXZBbGxvd1N0YXRlQ2hhbmdlcyk7XG4gICAgYWxsb3dTdGF0ZVJlYWRzRW5kKHJ1bkluZm8ucHJldkFsbG93U3RhdGVSZWFkcyk7XG4gICAgZW5kQmF0Y2goKTtcbiAgICB1bnRyYWNrZWRFbmQocnVuSW5mby5wcmV2RGVyaXZhdGlvbik7XG4gICAgaWYgKHJ1bkluZm8ubm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBzcHlSZXBvcnRFbmQoeyB0aW1lOiBEYXRlLm5vdygpIC0gcnVuSW5mby5zdGFydFRpbWUgfSk7XG4gICAgfVxuICAgIGdsb2JhbFN0YXRlLnN1cHByZXNzUmVhY3Rpb25FcnJvcnMgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFsbG93U3RhdGVDaGFuZ2VzKGFsbG93U3RhdGVDaGFuZ2VzLCBmdW5jKSB7XG4gICAgdmFyIHByZXYgPSBhbGxvd1N0YXRlQ2hhbmdlc1N0YXJ0KGFsbG93U3RhdGVDaGFuZ2VzKTtcbiAgICB2YXIgcmVzO1xuICAgIHRyeSB7XG4gICAgICAgIHJlcyA9IGZ1bmMoKTtcbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIGFsbG93U3RhdGVDaGFuZ2VzRW5kKHByZXYpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gYWxsb3dTdGF0ZUNoYW5nZXNTdGFydChhbGxvd1N0YXRlQ2hhbmdlcykge1xuICAgIHZhciBwcmV2ID0gZ2xvYmFsU3RhdGUuYWxsb3dTdGF0ZUNoYW5nZXM7XG4gICAgZ2xvYmFsU3RhdGUuYWxsb3dTdGF0ZUNoYW5nZXMgPSBhbGxvd1N0YXRlQ2hhbmdlcztcbiAgICByZXR1cm4gcHJldjtcbn1cbmZ1bmN0aW9uIGFsbG93U3RhdGVDaGFuZ2VzRW5kKHByZXYpIHtcbiAgICBnbG9iYWxTdGF0ZS5hbGxvd1N0YXRlQ2hhbmdlcyA9IHByZXY7XG59XG5mdW5jdGlvbiBhbGxvd1N0YXRlQ2hhbmdlc0luc2lkZUNvbXB1dGVkKGZ1bmMpIHtcbiAgICB2YXIgcHJldiA9IGdsb2JhbFN0YXRlLmNvbXB1dGF0aW9uRGVwdGg7XG4gICAgZ2xvYmFsU3RhdGUuY29tcHV0YXRpb25EZXB0aCA9IDA7XG4gICAgdmFyIHJlcztcbiAgICB0cnkge1xuICAgICAgICByZXMgPSBmdW5jKCk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBnbG9iYWxTdGF0ZS5jb21wdXRhdGlvbkRlcHRoID0gcHJldjtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn1cblxudmFyIE9ic2VydmFibGVWYWx1ZSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT2JzZXJ2YWJsZVZhbHVlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGVWYWx1ZSh2YWx1ZSwgZW5oYW5jZXIsIG5hbWUsIG5vdGlmeVNweSwgZXF1YWxzKSB7XG4gICAgICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9IFwiT2JzZXJ2YWJsZVZhbHVlQFwiICsgZ2V0TmV4dElkKCk7IH1cbiAgICAgICAgaWYgKG5vdGlmeVNweSA9PT0gdm9pZCAwKSB7IG5vdGlmeVNweSA9IHRydWU7IH1cbiAgICAgICAgaWYgKGVxdWFscyA9PT0gdm9pZCAwKSB7IGVxdWFscyA9IGNvbXBhcmVyLmRlZmF1bHQ7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbmFtZSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZW5oYW5jZXIgPSBlbmhhbmNlcjtcbiAgICAgICAgX3RoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIF90aGlzLmVxdWFscyA9IGVxdWFscztcbiAgICAgICAgX3RoaXMuaGFzVW5yZXBvcnRlZENoYW5nZSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy52YWx1ZSA9IGVuaGFuY2VyKHZhbHVlLCB1bmRlZmluZWQsIG5hbWUpO1xuICAgICAgICBpZiAobm90aWZ5U3B5ICYmIGlzU3B5RW5hYmxlZCgpICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgLy8gb25seSBub3RpZnkgc3B5IGlmIHRoaXMgaXMgYSBzdGFuZC1hbG9uZSBvYnNlcnZhYmxlXG4gICAgICAgICAgICBzcHlSZXBvcnQoeyB0eXBlOiBcImNyZWF0ZVwiLCBuYW1lOiBfdGhpcy5uYW1lLCBuZXdWYWx1ZTogXCJcIiArIF90aGlzLnZhbHVlIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JzZXJ2YWJsZVZhbHVlLnByb3RvdHlwZS5kZWhhbmNlVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVoYW5jZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlaGFuY2VyKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZVZhbHVlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLnByZXBhcmVOZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIGlmIChuZXdWYWx1ZSAhPT0gZ2xvYmFsU3RhdGUuVU5DSEFOR0VEKSB7XG4gICAgICAgICAgICB2YXIgbm90aWZ5U3B5ID0gaXNTcHlFbmFibGVkKCk7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHNweVJlcG9ydFN0YXJ0KHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ1cGRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgICAgICBzcHlSZXBvcnRFbmQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZVZhbHVlLnByb3RvdHlwZS5wcmVwYXJlTmV3VmFsdWUgPSBmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgY2hlY2tJZlN0YXRlTW9kaWZpY2F0aW9uc0FyZUFsbG93ZWQodGhpcyk7XG4gICAgICAgIGlmIChoYXNJbnRlcmNlcHRvcnModGhpcykpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBpbnRlcmNlcHRDaGFuZ2UodGhpcywge1xuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsU3RhdGUuVU5DSEFOR0VEO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYXBwbHkgbW9kaWZpZXJcbiAgICAgICAgbmV3VmFsdWUgPSB0aGlzLmVuaGFuY2VyKG5ld1ZhbHVlLCB0aGlzLnZhbHVlLCB0aGlzLm5hbWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5lcXVhbHModGhpcy52YWx1ZSwgbmV3VmFsdWUpID8gZ2xvYmFsU3RhdGUuVU5DSEFOR0VEIDogbmV3VmFsdWU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlVmFsdWUucHJvdG90eXBlLnNldE5ld1ZhbHVlID0gZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgdGhpcy5yZXBvcnRDaGFuZ2VkKCk7XG4gICAgICAgIGlmIChoYXNMaXN0ZW5lcnModGhpcykpIHtcbiAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ1cGRhdGVcIixcbiAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvbGRWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGVWYWx1ZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmRlaGFuY2VWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVWYWx1ZS5wcm90b3R5cGUuaW50ZXJjZXB0ID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVySW50ZXJjZXB0b3IodGhpcywgaGFuZGxlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlVmFsdWUucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAobGlzdGVuZXIsIGZpcmVJbW1lZGlhdGVseSkge1xuICAgICAgICBpZiAoZmlyZUltbWVkaWF0ZWx5KVxuICAgICAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIG9sZFZhbHVlOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJMaXN0ZW5lcih0aGlzLCBsaXN0ZW5lcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlVmFsdWUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlVmFsdWUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgXCJbXCIgKyB0aGlzLnZhbHVlICsgXCJdXCI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlVmFsdWUucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0b1ByaW1pdGl2ZSh0aGlzLmdldCgpKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVWYWx1ZS5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGVWYWx1ZTtcbn0oQXRvbSkpO1xudmFyIGlzT2JzZXJ2YWJsZVZhbHVlID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIk9ic2VydmFibGVWYWx1ZVwiLCBPYnNlcnZhYmxlVmFsdWUpO1xuXG4vKipcbiAqIEEgbm9kZSBpbiB0aGUgc3RhdGUgZGVwZW5kZW5jeSByb290IHRoYXQgb2JzZXJ2ZXMgb3RoZXIgbm9kZXMsIGFuZCBjYW4gYmUgb2JzZXJ2ZWQgaXRzZWxmLlxuICpcbiAqIENvbXB1dGVkVmFsdWUgd2lsbCByZW1lbWJlciB0aGUgcmVzdWx0IG9mIHRoZSBjb21wdXRhdGlvbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBiYXRjaCwgb3JcbiAqIHdoaWxlIGJlaW5nIG9ic2VydmVkLlxuICpcbiAqIER1cmluZyB0aGlzIHRpbWUgaXQgd2lsbCByZWNvbXB1dGUgb25seSB3aGVuIG9uZSBvZiBpdHMgZGlyZWN0IGRlcGVuZGVuY2llcyBjaGFuZ2VkLFxuICogYnV0IG9ubHkgd2hlbiBpdCBpcyBiZWluZyBhY2Nlc3NlZCB3aXRoIGBDb21wdXRlZFZhbHVlLmdldCgpYC5cbiAqXG4gKiBJbXBsZW1lbnRhdGlvbiBkZXNjcmlwdGlvbjpcbiAqIDEuIEZpcnN0IHRpbWUgaXQncyBiZWluZyBhY2Nlc3NlZCBpdCB3aWxsIGNvbXB1dGUgYW5kIHJlbWVtYmVyIHJlc3VsdFxuICogICAgZ2l2ZSBiYWNrIHJlbWVtYmVyZWQgcmVzdWx0IHVudGlsIDIuIGhhcHBlbnNcbiAqIDIuIEZpcnN0IHRpbWUgYW55IGRlZXAgZGVwZW5kZW5jeSBjaGFuZ2UsIHByb3BhZ2F0ZSBQT1NTSUJMWV9TVEFMRSB0byBhbGwgb2JzZXJ2ZXJzLCB3YWl0IGZvciAzLlxuICogMy4gV2hlbiBpdCdzIGJlaW5nIGFjY2Vzc2VkLCByZWNvbXB1dGUgaWYgYW55IHNoYWxsb3cgZGVwZW5kZW5jeSBjaGFuZ2VkLlxuICogICAgaWYgcmVzdWx0IGNoYW5nZWQ6IHByb3BhZ2F0ZSBTVEFMRSB0byBhbGwgb2JzZXJ2ZXJzLCB0aGF0IHdlcmUgUE9TU0lCTFlfU1RBTEUgZnJvbSB0aGUgbGFzdCBzdGVwLlxuICogICAgZ28gdG8gc3RlcCAyLiBlaXRoZXIgd2F5XG4gKlxuICogSWYgYXQgYW55IHBvaW50IGl0J3Mgb3V0c2lkZSBiYXRjaCBhbmQgaXQgaXNuJ3Qgb2JzZXJ2ZWQ6IHJlc2V0IGV2ZXJ5dGhpbmcgYW5kIGdvIHRvIDEuXG4gKi9cbnZhciBDb21wdXRlZFZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIG5ldyBjb21wdXRlZCB2YWx1ZSBiYXNlZCBvbiBhIGZ1bmN0aW9uIGV4cHJlc3Npb24uXG4gICAgICpcbiAgICAgKiBUaGUgYG5hbWVgIHByb3BlcnR5IGlzIGZvciBkZWJ1ZyBwdXJwb3NlcyBvbmx5LlxuICAgICAqXG4gICAgICogVGhlIGBlcXVhbHNgIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgY29tcGFyZXIgZnVuY3Rpb24gdG8gdXNlIHRvIGRldGVybWluZSBpZiBhIG5ld2x5IHByb2R1Y2VkXG4gICAgICogdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBwcmV2aW91cyB2YWx1ZS4gVHdvIGNvbXBhcmVycyBhcmUgcHJvdmlkZWQgaW4gdGhlIGxpYnJhcnk7IGBkZWZhdWx0Q29tcGFyZXJgXG4gICAgICogY29tcGFyZXMgYmFzZWQgb24gaWRlbnRpdHkgY29tcGFyaXNvbiAoPT09KSwgYW5kIGBzdHJ1Y3R1YWxDb21wYXJlcmAgZGVlcGx5IGNvbXBhcmVzIHRoZSBzdHJ1Y3R1cmUuXG4gICAgICogU3RydWN0dXJhbCBjb21wYXJpc29uIGNhbiBiZSBjb252ZW5pZW50IGlmIHlvdSBhbHdheXMgcHJvZHVjZSBhIG5ldyBhZ2dyZWdhdGVkIG9iamVjdCBhbmRcbiAgICAgKiBkb24ndCB3YW50IHRvIG5vdGlmeSBvYnNlcnZlcnMgaWYgaXQgaXMgc3RydWN0dXJhbGx5IHRoZSBzYW1lLlxuICAgICAqIFRoaXMgaXMgdXNlZnVsIGZvciB3b3JraW5nIHdpdGggdmVjdG9ycywgbW91c2UgY29vcmRpbmF0ZXMgZXRjLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIENvbXB1dGVkVmFsdWUob3B0aW9ucykge1xuICAgICAgICB0aGlzLmRlcGVuZGVuY2llc1N0YXRlID0gSURlcml2YXRpb25TdGF0ZS5OT1RfVFJBQ0tJTkc7XG4gICAgICAgIHRoaXMub2JzZXJ2aW5nID0gW107IC8vIG5vZGVzIHdlIGFyZSBsb29raW5nIGF0LiBPdXIgdmFsdWUgZGVwZW5kcyBvbiB0aGVzZSBub2Rlc1xuICAgICAgICB0aGlzLm5ld09ic2VydmluZyA9IG51bGw7IC8vIGR1cmluZyB0cmFja2luZyBpdCdzIGFuIGFycmF5IHdpdGggbmV3IG9ic2VydmVkIG9ic2VydmVyc1xuICAgICAgICB0aGlzLmlzQmVpbmdPYnNlcnZlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUGVuZGluZ1Vub2JzZXJ2YXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vYnNlcnZlcnMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMuZGlmZlZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5ydW5JZCA9IDA7XG4gICAgICAgIHRoaXMubGFzdEFjY2Vzc2VkQnkgPSAwO1xuICAgICAgICB0aGlzLmxvd2VzdE9ic2VydmVyU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlVQX1RPX0RBVEU7XG4gICAgICAgIHRoaXMudW5ib3VuZERlcHNDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuX19tYXBpZCA9IFwiI1wiICsgZ2V0TmV4dElkKCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXcgQ2F1Z2h0RXhjZXB0aW9uKG51bGwpO1xuICAgICAgICB0aGlzLmlzQ29tcHV0aW5nID0gZmFsc2U7IC8vIHRvIGNoZWNrIGZvciBjeWNsZXNcbiAgICAgICAgdGhpcy5pc1J1bm5pbmdTZXR0ZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc1RyYWNpbmcgPSBUcmFjZU1vZGUuTk9ORTtcbiAgICAgICAgaW52YXJpYW50KG9wdGlvbnMuZ2V0LCBcIm1pc3Npbmcgb3B0aW9uIGZvciBjb21wdXRlZDogZ2V0XCIpO1xuICAgICAgICB0aGlzLmRlcml2YXRpb24gPSBvcHRpb25zLmdldDtcbiAgICAgICAgdGhpcy5uYW1lID0gb3B0aW9ucy5uYW1lIHx8IFwiQ29tcHV0ZWRWYWx1ZUBcIiArIGdldE5leHRJZCgpO1xuICAgICAgICBpZiAob3B0aW9ucy5zZXQpXG4gICAgICAgICAgICB0aGlzLnNldHRlciA9IGNyZWF0ZUFjdGlvbih0aGlzLm5hbWUgKyBcIi1zZXR0ZXJcIiwgb3B0aW9ucy5zZXQpO1xuICAgICAgICB0aGlzLmVxdWFscyA9XG4gICAgICAgICAgICBvcHRpb25zLmVxdWFscyB8fFxuICAgICAgICAgICAgICAgIChvcHRpb25zLmNvbXBhcmVTdHJ1Y3R1cmFsIHx8IG9wdGlvbnMuc3RydWN0XG4gICAgICAgICAgICAgICAgICAgID8gY29tcGFyZXIuc3RydWN0dXJhbFxuICAgICAgICAgICAgICAgICAgICA6IGNvbXBhcmVyLmRlZmF1bHQpO1xuICAgICAgICB0aGlzLnNjb3BlID0gb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICB0aGlzLnJlcXVpcmVzUmVhY3Rpb24gPSAhIW9wdGlvbnMucmVxdWlyZXNSZWFjdGlvbjtcbiAgICAgICAgdGhpcy5rZWVwQWxpdmUgPSAhIW9wdGlvbnMua2VlcEFsaXZlO1xuICAgIH1cbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS5vbkJlY29tZVN0YWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBwcm9wYWdhdGVNYXliZUNoYW5nZWQodGhpcyk7XG4gICAgfTtcbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS5vbkJlY29tZU9ic2VydmVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5vbkJlY29tZU9ic2VydmVkTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB0aGlzLm9uQmVjb21lT2JzZXJ2ZWRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHsgcmV0dXJuIGxpc3RlbmVyKCk7IH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS5vbkJlY29tZVVub2JzZXJ2ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLm9uQmVjb21lVW5vYnNlcnZlZExpc3RlbmVycykge1xuICAgICAgICAgICAgdGhpcy5vbkJlY29tZVVub2JzZXJ2ZWRMaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHsgcmV0dXJuIGxpc3RlbmVyKCk7IH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoaXMgY29tcHV0ZWQgdmFsdWUuXG4gICAgICogV2lsbCBldmFsdWF0ZSBpdHMgY29tcHV0YXRpb24gZmlyc3QgaWYgbmVlZGVkLlxuICAgICAqL1xuICAgIENvbXB1dGVkVmFsdWUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wdXRpbmcpXG4gICAgICAgICAgICBmYWlsKFwiQ3ljbGUgZGV0ZWN0ZWQgaW4gY29tcHV0YXRpb24gXCIgKyB0aGlzLm5hbWUgKyBcIjogXCIgKyB0aGlzLmRlcml2YXRpb24pO1xuICAgICAgICBpZiAoZ2xvYmFsU3RhdGUuaW5CYXRjaCA9PT0gMCAmJiB0aGlzLm9ic2VydmVycy5zaXplID09PSAwICYmICF0aGlzLmtlZXBBbGl2ZSkge1xuICAgICAgICAgICAgaWYgKHNob3VsZENvbXB1dGUodGhpcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLndhcm5BYm91dFVudHJhY2tlZFJlYWQoKTtcbiAgICAgICAgICAgICAgICBzdGFydEJhdGNoKCk7IC8vIFNlZSBwZXJmIHRlc3QgJ2NvbXB1dGVkIG1lbW9pemF0aW9uJ1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmNvbXB1dGVWYWx1ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgZW5kQmF0Y2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlcG9ydE9ic2VydmVkKHRoaXMpO1xuICAgICAgICAgICAgaWYgKHNob3VsZENvbXB1dGUodGhpcykpXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhY2tBbmRDb21wdXRlKCkpXG4gICAgICAgICAgICAgICAgICAgIHByb3BhZ2F0ZUNoYW5nZUNvbmZpcm1lZCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy52YWx1ZTtcbiAgICAgICAgaWYgKGlzQ2F1Z2h0RXhjZXB0aW9uKHJlc3VsdCkpXG4gICAgICAgICAgICB0aHJvdyByZXN1bHQuY2F1c2U7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS5wZWVrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzID0gdGhpcy5jb21wdXRlVmFsdWUoZmFsc2UpO1xuICAgICAgICBpZiAoaXNDYXVnaHRFeGNlcHRpb24ocmVzKSlcbiAgICAgICAgICAgIHRocm93IHJlcy5jYXVzZTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIENvbXB1dGVkVmFsdWUucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0ZXIpIHtcbiAgICAgICAgICAgIGludmFyaWFudCghdGhpcy5pc1J1bm5pbmdTZXR0ZXIsIFwiVGhlIHNldHRlciBvZiBjb21wdXRlZCB2YWx1ZSAnXCIgKyB0aGlzLm5hbWUgKyBcIicgaXMgdHJ5aW5nIHRvIHVwZGF0ZSBpdHNlbGYuIERpZCB5b3UgaW50ZW5kIHRvIHVwZGF0ZSBhbiBfb2JzZXJ2YWJsZV8gdmFsdWUsIGluc3RlYWQgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5P1wiKTtcbiAgICAgICAgICAgIHRoaXMuaXNSdW5uaW5nU2V0dGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0ZXIuY2FsbCh0aGlzLnNjb3BlLCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzUnVubmluZ1NldHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGludmFyaWFudChmYWxzZSwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICAgICAgXCJbQ29tcHV0ZWRWYWx1ZSAnXCIgKyB0aGlzLm5hbWUgKyBcIiddIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBhc3NpZ24gYSBuZXcgdmFsdWUgdG8gYSBjb21wdXRlZCB2YWx1ZS5cIik7XG4gICAgfTtcbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS50cmFja0FuZENvbXB1dGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc1NweUVuYWJsZWQoKSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIHNweVJlcG9ydCh7XG4gICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLnNjb3BlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwiY29tcHV0ZVwiLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdmFyIHdhc1N1c3BlbmRlZCA9IFxuICAgICAgICAvKiBzZWUgIzEyMDggKi8gdGhpcy5kZXBlbmRlbmNpZXNTdGF0ZSA9PT0gSURlcml2YXRpb25TdGF0ZS5OT1RfVFJBQ0tJTkc7XG4gICAgICAgIHZhciBuZXdWYWx1ZSA9IHRoaXMuY29tcHV0ZVZhbHVlKHRydWUpO1xuICAgICAgICB2YXIgY2hhbmdlZCA9IHdhc1N1c3BlbmRlZCB8fFxuICAgICAgICAgICAgaXNDYXVnaHRFeGNlcHRpb24ob2xkVmFsdWUpIHx8XG4gICAgICAgICAgICBpc0NhdWdodEV4Y2VwdGlvbihuZXdWYWx1ZSkgfHxcbiAgICAgICAgICAgICF0aGlzLmVxdWFscyhvbGRWYWx1ZSwgbmV3VmFsdWUpO1xuICAgICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGFuZ2VkO1xuICAgIH07XG4gICAgQ29tcHV0ZWRWYWx1ZS5wcm90b3R5cGUuY29tcHV0ZVZhbHVlID0gZnVuY3Rpb24gKHRyYWNrKSB7XG4gICAgICAgIHRoaXMuaXNDb21wdXRpbmcgPSB0cnVlO1xuICAgICAgICBnbG9iYWxTdGF0ZS5jb21wdXRhdGlvbkRlcHRoKys7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIGlmICh0cmFjaykge1xuICAgICAgICAgICAgcmVzID0gdHJhY2tEZXJpdmVkRnVuY3Rpb24odGhpcywgdGhpcy5kZXJpdmF0aW9uLCB0aGlzLnNjb3BlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChnbG9iYWxTdGF0ZS5kaXNhYmxlRXJyb3JCb3VuZGFyaWVzID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdGhpcy5kZXJpdmF0aW9uLmNhbGwodGhpcy5zY29wZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXMgPSB0aGlzLmRlcml2YXRpb24uY2FsbCh0aGlzLnNjb3BlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzID0gbmV3IENhdWdodEV4Y2VwdGlvbihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsU3RhdGUuY29tcHV0YXRpb25EZXB0aC0tO1xuICAgICAgICB0aGlzLmlzQ29tcHV0aW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBDb21wdXRlZFZhbHVlLnByb3RvdHlwZS5zdXNwZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMua2VlcEFsaXZlKSB7XG4gICAgICAgICAgICBjbGVhck9ic2VydmluZyh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7IC8vIGRvbid0IGhvbGQgb24gdG8gY29tcHV0ZWQgdmFsdWUhXG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbXB1dGVkVmFsdWUucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAobGlzdGVuZXIsIGZpcmVJbW1lZGlhdGVseSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcbiAgICAgICAgdmFyIHByZXZWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIGF1dG9ydW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG5ld1ZhbHVlID0gX3RoaXMuZ2V0KCk7XG4gICAgICAgICAgICBpZiAoIWZpcnN0VGltZSB8fCBmaXJlSW1tZWRpYXRlbHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJldlUgPSB1bnRyYWNrZWRTdGFydCgpO1xuICAgICAgICAgICAgICAgIGxpc3RlbmVyKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ1cGRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiBfdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvbGRWYWx1ZTogcHJldlZhbHVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdW50cmFja2VkRW5kKHByZXZVKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJldlZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQ29tcHV0ZWRWYWx1ZS5wcm90b3R5cGUud2FybkFib3V0VW50cmFja2VkUmVhZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMucmVxdWlyZXNSZWFjdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgZmFpbChcIlttb2J4XSBDb21wdXRlZCB2YWx1ZSBcIiArIHRoaXMubmFtZSArIFwiIGlzIHJlYWQgb3V0c2lkZSBhIHJlYWN0aXZlIGNvbnRleHRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNUcmFjaW5nICE9PSBUcmFjZU1vZGUuTk9ORSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJbbW9ieC50cmFjZV0gJ1wiICsgdGhpcy5uYW1lICsgXCInIGlzIGJlaW5nIHJlYWQgb3V0c2lkZSBhIHJlYWN0aXZlIGNvbnRleHQuIERvaW5nIGEgZnVsbCByZWNvbXB1dGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdsb2JhbFN0YXRlLmNvbXB1dGVkUmVxdWlyZXNSZWFjdGlvbikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW21vYnhdIENvbXB1dGVkIHZhbHVlIFwiICsgdGhpcy5uYW1lICsgXCIgaXMgYmVpbmcgcmVhZCBvdXRzaWRlIGEgcmVhY3RpdmUgY29udGV4dC4gRG9pbmcgYSBmdWxsIHJlY29tcHV0ZVwiKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29tcHV0ZWRWYWx1ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoKTtcbiAgICB9O1xuICAgIENvbXB1dGVkVmFsdWUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgXCJbXCIgKyB0aGlzLmRlcml2YXRpb24udG9TdHJpbmcoKSArIFwiXVwiO1xuICAgIH07XG4gICAgQ29tcHV0ZWRWYWx1ZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRvUHJpbWl0aXZlKHRoaXMuZ2V0KCkpO1xuICAgIH07XG4gICAgQ29tcHV0ZWRWYWx1ZS5wcm90b3R5cGVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbXB1dGVkVmFsdWU7XG59KCkpO1xudmFyIGlzQ29tcHV0ZWRWYWx1ZSA9IGNyZWF0ZUluc3RhbmNlb2ZQcmVkaWNhdGUoXCJDb21wdXRlZFZhbHVlXCIsIENvbXB1dGVkVmFsdWUpO1xuXG4vKipcbiAqIFRoZXNlIHZhbHVlcyB3aWxsIHBlcnNpc3QgaWYgZ2xvYmFsIHN0YXRlIGlzIHJlc2V0XG4gKi9cbnZhciBwZXJzaXN0ZW50S2V5cyA9IFtcbiAgICBcIm1vYnhHdWlkXCIsXG4gICAgXCJzcHlMaXN0ZW5lcnNcIixcbiAgICBcImVuZm9yY2VBY3Rpb25zXCIsXG4gICAgXCJjb21wdXRlZFJlcXVpcmVzUmVhY3Rpb25cIixcbiAgICBcInJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlXCIsXG4gICAgXCJvYnNlcnZhYmxlUmVxdWlyZXNSZWFjdGlvblwiLFxuICAgIFwiYWxsb3dTdGF0ZVJlYWRzXCIsXG4gICAgXCJkaXNhYmxlRXJyb3JCb3VuZGFyaWVzXCIsXG4gICAgXCJydW5JZFwiLFxuICAgIFwiVU5DSEFOR0VEXCJcbl07XG52YXIgTW9iWEdsb2JhbHMgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTW9iWEdsb2JhbHMoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNb2JYR2xvYmFscyB2ZXJzaW9uLlxuICAgICAgICAgKiBNb2JYIGNvbXBhdGlibGl0eSB3aXRoIG90aGVyIHZlcnNpb25zIGxvYWRlZCBpbiBtZW1vcnkgYXMgbG9uZyBhcyB0aGlzIHZlcnNpb24gbWF0Y2hlcy5cbiAgICAgICAgICogSXQgaW5kaWNhdGVzIHRoYXQgdGhlIGdsb2JhbCBzdGF0ZSBzdGlsbCBzdG9yZXMgc2ltaWxhciBpbmZvcm1hdGlvblxuICAgICAgICAgKlxuICAgICAgICAgKiBOLkI6IHRoaXMgdmVyc2lvbiBpcyB1bnJlbGF0ZWQgdG8gdGhlIHBhY2thZ2UgdmVyc2lvbiBvZiBNb2JYLCBhbmQgaXMgb25seSB0aGUgdmVyc2lvbiBvZiB0aGVcbiAgICAgICAgICogaW50ZXJuYWwgc3RhdGUgc3RvcmFnZSBvZiBNb2JYLCBhbmQgY2FuIGJlIHRoZSBzYW1lIGFjcm9zcyBtYW55IGRpZmZlcmVudCBwYWNrYWdlIHZlcnNpb25zXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZlcnNpb24gPSA1O1xuICAgICAgICAvKipcbiAgICAgICAgICogZ2xvYmFsbHkgdW5pcXVlIHRva2VuIHRvIHNpZ25hbCB1bmNoYW5nZWRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuVU5DSEFOR0VEID0ge307XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDdXJyZW50bHkgcnVubmluZyBkZXJpdmF0aW9uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRyYWNraW5nRGVyaXZhdGlvbiA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBcmUgd2UgcnVubmluZyBhIGNvbXB1dGF0aW9uIGN1cnJlbnRseT8gKG5vdCBhIHJlYWN0aW9uKVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb21wdXRhdGlvbkRlcHRoID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVhY2ggdGltZSBhIGRlcml2YXRpb24gaXMgdHJhY2tlZCwgaXQgaXMgYXNzaWduZWQgYSB1bmlxdWUgcnVuLWlkXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJ1bklkID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqICdndWlkJyBmb3IgZ2VuZXJhbCBwdXJwb3NlLiBXaWxsIGJlIHBlcnNpc3RlZCBhbW9uZ3N0IHJlc2V0cy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubW9ieEd1aWQgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogQXJlIHdlIGluIGEgYmF0Y2ggYmxvY2s/IChhbmQgaG93IG1hbnkgb2YgdGhlbSlcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5CYXRjaCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBPYnNlcnZhYmxlcyB0aGF0IGRvbid0IGhhdmUgb2JzZXJ2ZXJzIGFueW1vcmUsIGFuZCBhcmUgYWJvdXQgdG8gYmVcbiAgICAgICAgICogc3VzcGVuZGVkLCB1bmxlc3Mgc29tZWJvZHkgZWxzZSBhY2Nlc3NlcyBpdCBpbiB0aGUgc2FtZSBiYXRjaFxuICAgICAgICAgKlxuICAgICAgICAgKiBAdHlwZSB7SU9ic2VydmFibGVbXX1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGVuZGluZ1Vub2JzZXJ2YXRpb25zID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaXN0IG9mIHNjaGVkdWxlZCwgbm90IHlldCBleGVjdXRlZCwgcmVhY3Rpb25zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wZW5kaW5nUmVhY3Rpb25zID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBcmUgd2UgY3VycmVudGx5IHByb2Nlc3NpbmcgcmVhY3Rpb25zP1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc1J1bm5pbmdSZWFjdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElzIGl0IGFsbG93ZWQgdG8gY2hhbmdlIG9ic2VydmFibGVzIGF0IHRoaXMgcG9pbnQ/XG4gICAgICAgICAqIEluIGdlbmVyYWwsIE1vYlggZG9lc24ndCBhbGxvdyB0aGF0IHdoZW4gcnVubmluZyBjb21wdXRhdGlvbnMgYW5kIFJlYWN0LnJlbmRlci5cbiAgICAgICAgICogVG8gZW5zdXJlIHRoYXQgdGhvc2UgZnVuY3Rpb25zIHN0YXkgcHVyZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWxsb3dTdGF0ZUNoYW5nZXMgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogSXMgaXQgYWxsb3dlZCB0byByZWFkIG9ic2VydmFibGVzIGF0IHRoaXMgcG9pbnQ/XG4gICAgICAgICAqIFVzZWQgdG8gaG9sZCB0aGUgc3RhdGUgbmVlZGVkIGZvciBgb2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb25gXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFsbG93U3RhdGVSZWFkcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBzdHJpY3QgbW9kZSBpcyBlbmFibGVkLCBzdGF0ZSBjaGFuZ2VzIGFyZSBieSBkZWZhdWx0IG5vdCBhbGxvd2VkXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmVuZm9yY2VBY3Rpb25zID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcHkgY2FsbGJhY2tzXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNweUxpc3RlbmVycyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogR2xvYmFsbHkgYXR0YWNoZWQgZXJyb3IgaGFuZGxlcnMgdGhhdCByZWFjdCBzcGVjaWZpY2FsbHkgdG8gZXJyb3JzIGluIHJlYWN0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5nbG9iYWxSZWFjdGlvbkVycm9ySGFuZGxlcnMgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdhcm4gaWYgY29tcHV0ZWQgdmFsdWVzIGFyZSBhY2Nlc3NlZCBvdXRzaWRlIGEgcmVhY3RpdmUgY29udGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb21wdXRlZFJlcXVpcmVzUmVhY3Rpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIChFeHBlcmltZW50YWwpXG4gICAgICAgICAqIFdhcm4gaWYgeW91IHRyeSB0byBjcmVhdGUgdG8gZGVyaXZhdGlvbiAvIHJlYWN0aXZlIGNvbnRleHQgd2l0aG91dCBhY2Nlc3NpbmcgYW55IG9ic2VydmFibGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiAoRXhwZXJpbWVudGFsKVxuICAgICAgICAgKiBXYXJuIGlmIG9ic2VydmFibGVzIGFyZSBhY2Nlc3NlZCBvdXRzaWRlIGEgcmVhY3RpdmUgY29udGV4dFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vYnNlcnZhYmxlUmVxdWlyZXNSZWFjdGlvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQWxsb3dzIG92ZXJ3cml0aW5nIG9mIGNvbXB1dGVkIHByb3BlcnRpZXMsIHVzZWZ1bCBpbiB0ZXN0cyBidXQgbm90IHByb2QgYXMgaXQgY2FuIGNhdXNlXG4gICAgICAgICAqIG1lbW9yeSBsZWFrcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2J4anMvbW9ieC9pc3N1ZXMvMTg2N1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb21wdXRlZENvbmZpZ3VyYWJsZSA9IGZhbHNlO1xuICAgICAgICAvKlxuICAgICAgICAgKiBEb24ndCBjYXRjaCBhbmQgcmV0aHJvdyBleGNlcHRpb25zLiBUaGlzIGlzIHVzZWZ1bCBmb3IgaW5zcGVjdGluZyB0aGUgc3RhdGUgb2ZcbiAgICAgICAgICogdGhlIHN0YWNrIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyB3aGlsZSBkZWJ1Z2dpbmcuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRpc2FibGVFcnJvckJvdW5kYXJpZXMgPSBmYWxzZTtcbiAgICAgICAgLypcbiAgICAgICAgICogSWYgdHJ1ZSwgd2UgYXJlIGFscmVhZHkgaGFuZGxpbmcgYW4gZXhjZXB0aW9uIGluIGFuIGFjdGlvbi4gQW55IGVycm9ycyBpbiByZWFjdGlvbnMgc2hvdWxkIGJlIHN1cHByZXNzZWQsIGFzXG4gICAgICAgICAqIHRoZXkgYXJlIG5vdCB0aGUgY2F1c2UsIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL21vYnhqcy9tb2J4L2lzc3Vlcy8xODM2XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN1cHByZXNzUmVhY3Rpb25FcnJvcnMgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIE1vYlhHbG9iYWxzO1xufSgpKTtcbnZhciBtb2NrR2xvYmFsID0ge307XG5mdW5jdGlvbiBnZXRHbG9iYWwoKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcmV0dXJuIGdsb2JhbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH1cbiAgICByZXR1cm4gbW9ja0dsb2JhbDtcbn1cbnZhciBjYW5NZXJnZUdsb2JhbFN0YXRlID0gdHJ1ZTtcbnZhciBpc29sYXRlQ2FsbGVkID0gZmFsc2U7XG52YXIgZ2xvYmFsU3RhdGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBnbG9iYWwgPSBnZXRHbG9iYWwoKTtcbiAgICBpZiAoZ2xvYmFsLl9fbW9ieEluc3RhbmNlQ291bnQgPiAwICYmICFnbG9iYWwuX19tb2J4R2xvYmFscylcbiAgICAgICAgY2FuTWVyZ2VHbG9iYWxTdGF0ZSA9IGZhbHNlO1xuICAgIGlmIChnbG9iYWwuX19tb2J4R2xvYmFscyAmJiBnbG9iYWwuX19tb2J4R2xvYmFscy52ZXJzaW9uICE9PSBuZXcgTW9iWEdsb2JhbHMoKS52ZXJzaW9uKVxuICAgICAgICBjYW5NZXJnZUdsb2JhbFN0YXRlID0gZmFsc2U7XG4gICAgaWYgKCFjYW5NZXJnZUdsb2JhbFN0YXRlKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFpc29sYXRlQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgZmFpbChcIlRoZXJlIGFyZSBtdWx0aXBsZSwgZGlmZmVyZW50IHZlcnNpb25zIG9mIE1vYlggYWN0aXZlLiBNYWtlIHN1cmUgTW9iWCBpcyBsb2FkZWQgb25seSBvbmNlIG9yIHVzZSBgY29uZmlndXJlKHsgaXNvbGF0ZUdsb2JhbFN0YXRlOiB0cnVlIH0pYFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgMSk7XG4gICAgICAgIHJldHVybiBuZXcgTW9iWEdsb2JhbHMoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZ2xvYmFsLl9fbW9ieEdsb2JhbHMpIHtcbiAgICAgICAgZ2xvYmFsLl9fbW9ieEluc3RhbmNlQ291bnQgKz0gMTtcbiAgICAgICAgaWYgKCFnbG9iYWwuX19tb2J4R2xvYmFscy5VTkNIQU5HRUQpXG4gICAgICAgICAgICBnbG9iYWwuX19tb2J4R2xvYmFscy5VTkNIQU5HRUQgPSB7fTsgLy8gbWFrZSBtZXJnZSBiYWNrd2FyZCBjb21wYXRpYmxlXG4gICAgICAgIHJldHVybiBnbG9iYWwuX19tb2J4R2xvYmFscztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdsb2JhbC5fX21vYnhJbnN0YW5jZUNvdW50ID0gMTtcbiAgICAgICAgcmV0dXJuIChnbG9iYWwuX19tb2J4R2xvYmFscyA9IG5ldyBNb2JYR2xvYmFscygpKTtcbiAgICB9XG59KSgpO1xuZnVuY3Rpb24gaXNvbGF0ZUdsb2JhbFN0YXRlKCkge1xuICAgIGlmIChnbG9iYWxTdGF0ZS5wZW5kaW5nUmVhY3Rpb25zLmxlbmd0aCB8fFxuICAgICAgICBnbG9iYWxTdGF0ZS5pbkJhdGNoIHx8XG4gICAgICAgIGdsb2JhbFN0YXRlLmlzUnVubmluZ1JlYWN0aW9ucylcbiAgICAgICAgZmFpbChcImlzb2xhdGVHbG9iYWxTdGF0ZSBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBNb2JYIGlzIHJ1bm5pbmcgYW55IHJlYWN0aW9uc1wiKTtcbiAgICBpc29sYXRlQ2FsbGVkID0gdHJ1ZTtcbiAgICBpZiAoY2FuTWVyZ2VHbG9iYWxTdGF0ZSkge1xuICAgICAgICBpZiAoLS1nZXRHbG9iYWwoKS5fX21vYnhJbnN0YW5jZUNvdW50ID09PSAwKVxuICAgICAgICAgICAgZ2V0R2xvYmFsKCkuX19tb2J4R2xvYmFscyA9IHVuZGVmaW5lZDtcbiAgICAgICAgZ2xvYmFsU3RhdGUgPSBuZXcgTW9iWEdsb2JhbHMoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRHbG9iYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4gZ2xvYmFsU3RhdGU7XG59XG4vKipcbiAqIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHk7IHRoaXMgd2lsbCBicmVhayB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgZXhpc3Rpbmcgb2JzZXJ2YWJsZXMsXG4gKiBidXQgY2FuIGJlIHVzZWQgdG8gZ2V0IGJhY2sgYXQgYSBzdGFibGUgc3RhdGUgYWZ0ZXIgdGhyb3dpbmcgZXJyb3JzXG4gKi9cbmZ1bmN0aW9uIHJlc2V0R2xvYmFsU3RhdGUoKSB7XG4gICAgdmFyIGRlZmF1bHRHbG9iYWxzID0gbmV3IE1vYlhHbG9iYWxzKCk7XG4gICAgZm9yICh2YXIga2V5IGluIGRlZmF1bHRHbG9iYWxzKVxuICAgICAgICBpZiAocGVyc2lzdGVudEtleXMuaW5kZXhPZihrZXkpID09PSAtMSlcbiAgICAgICAgICAgIGdsb2JhbFN0YXRlW2tleV0gPSBkZWZhdWx0R2xvYmFsc1trZXldO1xuICAgIGdsb2JhbFN0YXRlLmFsbG93U3RhdGVDaGFuZ2VzID0gIWdsb2JhbFN0YXRlLmVuZm9yY2VBY3Rpb25zO1xufVxuXG5mdW5jdGlvbiBoYXNPYnNlcnZlcnMob2JzZXJ2YWJsZSkge1xuICAgIHJldHVybiBvYnNlcnZhYmxlLm9ic2VydmVycyAmJiBvYnNlcnZhYmxlLm9ic2VydmVycy5zaXplID4gMDtcbn1cbmZ1bmN0aW9uIGdldE9ic2VydmVycyhvYnNlcnZhYmxlKSB7XG4gICAgcmV0dXJuIG9ic2VydmFibGUub2JzZXJ2ZXJzO1xufVxuLy8gZnVuY3Rpb24gaW52YXJpYW50T2JzZXJ2ZXJzKG9ic2VydmFibGU6IElPYnNlcnZhYmxlKSB7XG4vLyAgICAgY29uc3QgbGlzdCA9IG9ic2VydmFibGUub2JzZXJ2ZXJzXG4vLyAgICAgY29uc3QgbWFwID0gb2JzZXJ2YWJsZS5vYnNlcnZlcnNJbmRleGVzXG4vLyAgICAgY29uc3QgbCA9IGxpc3QubGVuZ3RoXG4vLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbi8vICAgICAgICAgY29uc3QgaWQgPSBsaXN0W2ldLl9fbWFwaWRcbi8vICAgICAgICAgaWYgKGkpIHtcbi8vICAgICAgICAgICAgIGludmFyaWFudChtYXBbaWRdID09PSBpLCBcIklOVEVSTkFMIEVSUk9SIG1hcHMgZGVyaXZhdGlvbi5fX21hcGlkIHRvIGluZGV4IGluIGxpc3RcIikgLy8gZm9yIHBlcmZvcm1hbmNlXG4vLyAgICAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgICAgICBpbnZhcmlhbnQoIShpZCBpbiBtYXApLCBcIklOVEVSTkFMIEVSUk9SIG9ic2VydmVyIG9uIGluZGV4IDAgc2hvdWxkbid0IGJlIGhlbGQgaW4gbWFwLlwiKSAvLyBmb3IgcGVyZm9ybWFuY2Vcbi8vICAgICAgICAgfVxuLy8gICAgIH1cbi8vICAgICBpbnZhcmlhbnQoXG4vLyAgICAgICAgIGxpc3QubGVuZ3RoID09PSAwIHx8IE9iamVjdC5rZXlzKG1hcCkubGVuZ3RoID09PSBsaXN0Lmxlbmd0aCAtIDEsXG4vLyAgICAgICAgIFwiSU5URVJOQUwgRVJST1IgdGhlcmUgaXMgbm8ganVuayBpbiBtYXBcIlxuLy8gICAgIClcbi8vIH1cbmZ1bmN0aW9uIGFkZE9ic2VydmVyKG9ic2VydmFibGUsIG5vZGUpIHtcbiAgICAvLyBpbnZhcmlhbnQobm9kZS5kZXBlbmRlbmNpZXNTdGF0ZSAhPT0gLTEsIFwiSU5URVJOQUwgRVJST1IsIGNhbiBhZGQgb25seSBkZXBlbmRlbmNpZXNTdGF0ZSAhPT0gLTFcIik7XG4gICAgLy8gaW52YXJpYW50KG9ic2VydmFibGUuX29ic2VydmVycy5pbmRleE9mKG5vZGUpID09PSAtMSwgXCJJTlRFUk5BTCBFUlJPUiBhZGQgYWxyZWFkeSBhZGRlZCBub2RlXCIpO1xuICAgIC8vIGludmFyaWFudE9ic2VydmVycyhvYnNlcnZhYmxlKTtcbiAgICBvYnNlcnZhYmxlLm9ic2VydmVycy5hZGQobm9kZSk7XG4gICAgaWYgKG9ic2VydmFibGUubG93ZXN0T2JzZXJ2ZXJTdGF0ZSA+IG5vZGUuZGVwZW5kZW5jaWVzU3RhdGUpXG4gICAgICAgIG9ic2VydmFibGUubG93ZXN0T2JzZXJ2ZXJTdGF0ZSA9IG5vZGUuZGVwZW5kZW5jaWVzU3RhdGU7XG4gICAgLy8gaW52YXJpYW50T2JzZXJ2ZXJzKG9ic2VydmFibGUpO1xuICAgIC8vIGludmFyaWFudChvYnNlcnZhYmxlLl9vYnNlcnZlcnMuaW5kZXhPZihub2RlKSAhPT0gLTEsIFwiSU5URVJOQUwgRVJST1IgZGlkbid0IGFkZCBub2RlXCIpO1xufVxuZnVuY3Rpb24gcmVtb3ZlT2JzZXJ2ZXIob2JzZXJ2YWJsZSwgbm9kZSkge1xuICAgIC8vIGludmFyaWFudChnbG9iYWxTdGF0ZS5pbkJhdGNoID4gMCwgXCJJTlRFUk5BTCBFUlJPUiwgcmVtb3ZlIHNob3VsZCBiZSBjYWxsZWQgb25seSBpbnNpZGUgYmF0Y2hcIik7XG4gICAgLy8gaW52YXJpYW50KG9ic2VydmFibGUuX29ic2VydmVycy5pbmRleE9mKG5vZGUpICE9PSAtMSwgXCJJTlRFUk5BTCBFUlJPUiByZW1vdmUgYWxyZWFkeSByZW1vdmVkIG5vZGVcIik7XG4gICAgLy8gaW52YXJpYW50T2JzZXJ2ZXJzKG9ic2VydmFibGUpO1xuICAgIG9ic2VydmFibGUub2JzZXJ2ZXJzLmRlbGV0ZShub2RlKTtcbiAgICBpZiAob2JzZXJ2YWJsZS5vYnNlcnZlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAvLyBkZWxldGluZyBsYXN0IG9ic2VydmVyXG4gICAgICAgIHF1ZXVlRm9yVW5vYnNlcnZhdGlvbihvYnNlcnZhYmxlKTtcbiAgICB9XG4gICAgLy8gaW52YXJpYW50T2JzZXJ2ZXJzKG9ic2VydmFibGUpO1xuICAgIC8vIGludmFyaWFudChvYnNlcnZhYmxlLl9vYnNlcnZlcnMuaW5kZXhPZihub2RlKSA9PT0gLTEsIFwiSU5URVJOQUwgRVJST1IgcmVtb3ZlIGFscmVhZHkgcmVtb3ZlZCBub2RlMlwiKTtcbn1cbmZ1bmN0aW9uIHF1ZXVlRm9yVW5vYnNlcnZhdGlvbihvYnNlcnZhYmxlKSB7XG4gICAgaWYgKG9ic2VydmFibGUuaXNQZW5kaW5nVW5vYnNlcnZhdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgLy8gaW52YXJpYW50KG9ic2VydmFibGUuX29ic2VydmVycy5sZW5ndGggPT09IDAsIFwiSU5URVJOQUwgRVJST1IsIHNob3VsZCBvbmx5IHF1ZXVlIGZvciB1bm9ic2VydmF0aW9uIHVub2JzZXJ2ZWQgb2JzZXJ2YWJsZXNcIik7XG4gICAgICAgIG9ic2VydmFibGUuaXNQZW5kaW5nVW5vYnNlcnZhdGlvbiA9IHRydWU7XG4gICAgICAgIGdsb2JhbFN0YXRlLnBlbmRpbmdVbm9ic2VydmF0aW9ucy5wdXNoKG9ic2VydmFibGUpO1xuICAgIH1cbn1cbi8qKlxuICogQmF0Y2ggc3RhcnRzIGEgdHJhbnNhY3Rpb24sIGF0IGxlYXN0IGZvciBwdXJwb3NlcyBvZiBtZW1vaXppbmcgQ29tcHV0ZWRWYWx1ZXMgd2hlbiBub3RoaW5nIGVsc2UgZG9lcy5cbiAqIER1cmluZyBhIGJhdGNoIGBvbkJlY29tZVVub2JzZXJ2ZWRgIHdpbGwgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSBwZXIgb2JzZXJ2YWJsZS5cbiAqIEF2b2lkcyB1bm5lY2Vzc2FyeSByZWNhbGN1bGF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gc3RhcnRCYXRjaCgpIHtcbiAgICBnbG9iYWxTdGF0ZS5pbkJhdGNoKys7XG59XG5mdW5jdGlvbiBlbmRCYXRjaCgpIHtcbiAgICBpZiAoLS1nbG9iYWxTdGF0ZS5pbkJhdGNoID09PSAwKSB7XG4gICAgICAgIHJ1blJlYWN0aW9ucygpO1xuICAgICAgICAvLyB0aGUgYmF0Y2ggaXMgYWN0dWFsbHkgYWJvdXQgdG8gZmluaXNoLCBhbGwgdW5vYnNlcnZpbmcgc2hvdWxkIGhhcHBlbiBoZXJlLlxuICAgICAgICB2YXIgbGlzdCA9IGdsb2JhbFN0YXRlLnBlbmRpbmdVbm9ic2VydmF0aW9ucztcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IGxpc3RbaV07XG4gICAgICAgICAgICBvYnNlcnZhYmxlLmlzUGVuZGluZ1Vub2JzZXJ2YXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChvYnNlcnZhYmxlLm9ic2VydmVycy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9ic2VydmFibGUuaXNCZWluZ09ic2VydmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoaXMgb2JzZXJ2YWJsZSBoYWQgcmVhY3RpdmUgb2JzZXJ2ZXJzLCB0cmlnZ2VyIHRoZSBob29rc1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZhYmxlLmlzQmVpbmdPYnNlcnZlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZhYmxlLm9uQmVjb21lVW5vYnNlcnZlZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAob2JzZXJ2YWJsZSBpbnN0YW5jZW9mIENvbXB1dGVkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZWQgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IHRlYXJlZCBkb3duIHdoZW4gdGhlIGxhc3Qgb2JzZXJ2ZXIgbGVhdmVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgcHJvY2VzcyBoYXBwZW5zIHJlY3Vyc2l2ZWx5LCB0aGlzIGNvbXB1dGVkIG1pZ2h0IGJlIHRoZSBsYXN0IG9ic2VydmFibGUgb2YgYW5vdGhlciwgZXRjLi5cbiAgICAgICAgICAgICAgICAgICAgb2JzZXJ2YWJsZS5zdXNwZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdsb2JhbFN0YXRlLnBlbmRpbmdVbm9ic2VydmF0aW9ucyA9IFtdO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHJlcG9ydE9ic2VydmVkKG9ic2VydmFibGUpIHtcbiAgICBjaGVja0lmU3RhdGVSZWFkc0FyZUFsbG93ZWQob2JzZXJ2YWJsZSk7XG4gICAgdmFyIGRlcml2YXRpb24gPSBnbG9iYWxTdGF0ZS50cmFja2luZ0Rlcml2YXRpb247XG4gICAgaWYgKGRlcml2YXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNpbXBsZSBvcHRpbWl6YXRpb24sIGdpdmUgZWFjaCBkZXJpdmF0aW9uIHJ1biBhbiB1bmlxdWUgaWQgKHJ1bklkKVxuICAgICAgICAgKiBDaGVjayBpZiBsYXN0IHRpbWUgdGhpcyBvYnNlcnZhYmxlIHdhcyBhY2Nlc3NlZCB0aGUgc2FtZSBydW5JZCBpcyB1c2VkXG4gICAgICAgICAqIGlmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZSByZWxhdGlvbiBpcyBhbHJlYWR5IGtub3duXG4gICAgICAgICAqL1xuICAgICAgICBpZiAoZGVyaXZhdGlvbi5ydW5JZCAhPT0gb2JzZXJ2YWJsZS5sYXN0QWNjZXNzZWRCeSkge1xuICAgICAgICAgICAgb2JzZXJ2YWJsZS5sYXN0QWNjZXNzZWRCeSA9IGRlcml2YXRpb24ucnVuSWQ7XG4gICAgICAgICAgICAvLyBUcmllZCBzdG9yaW5nIG5ld09ic2VydmluZywgb3Igb2JzZXJ2aW5nLCBvciBib3RoIGFzIFNldCwgYnV0IHBlcmZvcm1hbmNlIGRpZG4ndCBjb21lIGNsb3NlLi4uXG4gICAgICAgICAgICBkZXJpdmF0aW9uLm5ld09ic2VydmluZ1tkZXJpdmF0aW9uLnVuYm91bmREZXBzQ291bnQrK10gPSBvYnNlcnZhYmxlO1xuICAgICAgICAgICAgaWYgKCFvYnNlcnZhYmxlLmlzQmVpbmdPYnNlcnZlZCkge1xuICAgICAgICAgICAgICAgIG9ic2VydmFibGUuaXNCZWluZ09ic2VydmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBvYnNlcnZhYmxlLm9uQmVjb21lT2JzZXJ2ZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAob2JzZXJ2YWJsZS5vYnNlcnZlcnMuc2l6ZSA9PT0gMCAmJiBnbG9iYWxTdGF0ZS5pbkJhdGNoID4gMCkge1xuICAgICAgICBxdWV1ZUZvclVub2JzZXJ2YXRpb24ob2JzZXJ2YWJsZSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbi8vIGZ1bmN0aW9uIGludmFyaWFudExPUyhvYnNlcnZhYmxlOiBJT2JzZXJ2YWJsZSwgbXNnOiBzdHJpbmcpIHtcbi8vICAgICAvLyBpdCdzIGV4cGVuc2l2ZSBzbyBiZXR0ZXIgbm90IHJ1biBpdCBpbiBwcm9kdWNpdG9uLiBidXQgdGVtcG9yYXJpbHkgaGVscGZ1bCBmb3IgdGVzdGluZ1xuLy8gICAgIGNvbnN0IG1pbiA9IGdldE9ic2VydmVycyhvYnNlcnZhYmxlKS5yZWR1Y2UoKGEsIGIpID0+IE1hdGgubWluKGEsIGIuZGVwZW5kZW5jaWVzU3RhdGUpLCAyKVxuLy8gICAgIGlmIChtaW4gPj0gb2JzZXJ2YWJsZS5sb3dlc3RPYnNlcnZlclN0YXRlKSByZXR1cm4gLy8gPC0gdGhlIG9ubHkgYXNzdW1wdGlvbiBhYm91dCBgbG93ZXN0T2JzZXJ2ZXJTdGF0ZWBcbi8vICAgICB0aHJvdyBuZXcgRXJyb3IoXG4vLyAgICAgICAgIFwibG93ZXN0T2JzZXJ2ZXJTdGF0ZSBpcyB3cm9uZyBmb3IgXCIgK1xuLy8gICAgICAgICAgICAgbXNnICtcbi8vICAgICAgICAgICAgIFwiIGJlY2F1c2UgXCIgK1xuLy8gICAgICAgICAgICAgbWluICtcbi8vICAgICAgICAgICAgIFwiIDwgXCIgK1xuLy8gICAgICAgICAgICAgb2JzZXJ2YWJsZS5sb3dlc3RPYnNlcnZlclN0YXRlXG4vLyAgICAgKVxuLy8gfVxuLyoqXG4gKiBOT1RFOiBjdXJyZW50IHByb3BhZ2F0aW9uIG1lY2hhbmlzbSB3aWxsIGluIGNhc2Ugb2Ygc2VsZiByZXJ1bmluZyBhdXRvcnVucyBiZWhhdmUgdW5leHBlY3RlZGx5XG4gKiBJdCB3aWxsIHByb3BhZ2F0ZSBjaGFuZ2VzIHRvIG9ic2VydmVycyBmcm9tIHByZXZpb3VzIHJ1blxuICogSXQncyBoYXJkIG9yIG1heWJlIGltcG9zc2libGUgKHdpdGggcmVhc29uYWJsZSBwZXJmKSB0byBnZXQgaXQgcmlnaHQgd2l0aCBjdXJyZW50IGFwcHJvYWNoXG4gKiBIb3BlZnVsbHkgc2VsZiByZXJ1bmluZyBhdXRvcnVucyBhcmVuJ3QgYSBmZWF0dXJlIHBlb3BsZSBzaG91bGQgZGVwZW5kIG9uXG4gKiBBbHNvIG1vc3QgYmFzaWMgdXNlIGNhc2VzIHNob3VsZCBiZSBva1xuICovXG4vLyBDYWxsZWQgYnkgQXRvbSB3aGVuIGl0cyB2YWx1ZSBjaGFuZ2VzXG5mdW5jdGlvbiBwcm9wYWdhdGVDaGFuZ2VkKG9ic2VydmFibGUpIHtcbiAgICAvLyBpbnZhcmlhbnRMT1Mob2JzZXJ2YWJsZSwgXCJjaGFuZ2VkIHN0YXJ0XCIpO1xuICAgIGlmIChvYnNlcnZhYmxlLmxvd2VzdE9ic2VydmVyU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuU1RBTEUpXG4gICAgICAgIHJldHVybjtcbiAgICBvYnNlcnZhYmxlLmxvd2VzdE9ic2VydmVyU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlNUQUxFO1xuICAgIC8vIElkZWFsbHkgd2UgdXNlIGZvci4ub2YgaGVyZSwgYnV0IHRoZSBkb3duY29tcGlsZWQgdmVyc2lvbiBpcyByZWFsbHkgc2xvdy4uLlxuICAgIG9ic2VydmFibGUub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgaWYgKGQuZGVwZW5kZW5jaWVzU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuVVBfVE9fREFURSkge1xuICAgICAgICAgICAgaWYgKGQuaXNUcmFjaW5nICE9PSBUcmFjZU1vZGUuTk9ORSkge1xuICAgICAgICAgICAgICAgIGxvZ1RyYWNlSW5mbyhkLCBvYnNlcnZhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGQub25CZWNvbWVTdGFsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGQuZGVwZW5kZW5jaWVzU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlNUQUxFO1xuICAgIH0pO1xuICAgIC8vIGludmFyaWFudExPUyhvYnNlcnZhYmxlLCBcImNoYW5nZWQgZW5kXCIpO1xufVxuLy8gQ2FsbGVkIGJ5IENvbXB1dGVkVmFsdWUgd2hlbiBpdCByZWNhbGN1bGF0ZSBhbmQgaXRzIHZhbHVlIGNoYW5nZWRcbmZ1bmN0aW9uIHByb3BhZ2F0ZUNoYW5nZUNvbmZpcm1lZChvYnNlcnZhYmxlKSB7XG4gICAgLy8gaW52YXJpYW50TE9TKG9ic2VydmFibGUsIFwiY29uZmlybWVkIHN0YXJ0XCIpO1xuICAgIGlmIChvYnNlcnZhYmxlLmxvd2VzdE9ic2VydmVyU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuU1RBTEUpXG4gICAgICAgIHJldHVybjtcbiAgICBvYnNlcnZhYmxlLmxvd2VzdE9ic2VydmVyU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlNUQUxFO1xuICAgIG9ic2VydmFibGUub2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgaWYgKGQuZGVwZW5kZW5jaWVzU3RhdGUgPT09IElEZXJpdmF0aW9uU3RhdGUuUE9TU0lCTFlfU1RBTEUpXG4gICAgICAgICAgICBkLmRlcGVuZGVuY2llc1N0YXRlID0gSURlcml2YXRpb25TdGF0ZS5TVEFMRTtcbiAgICAgICAgZWxzZSBpZiAoZC5kZXBlbmRlbmNpZXNTdGF0ZSA9PT0gSURlcml2YXRpb25TdGF0ZS5VUF9UT19EQVRFIC8vIHRoaXMgaGFwcGVucyBkdXJpbmcgY29tcHV0aW5nIG9mIGBkYCwganVzdCBrZWVwIGxvd2VzdE9ic2VydmVyU3RhdGUgdXAgdG8gZGF0ZS5cbiAgICAgICAgKVxuICAgICAgICAgICAgb2JzZXJ2YWJsZS5sb3dlc3RPYnNlcnZlclN0YXRlID0gSURlcml2YXRpb25TdGF0ZS5VUF9UT19EQVRFO1xuICAgIH0pO1xuICAgIC8vIGludmFyaWFudExPUyhvYnNlcnZhYmxlLCBcImNvbmZpcm1lZCBlbmRcIik7XG59XG4vLyBVc2VkIGJ5IGNvbXB1dGVkIHdoZW4gaXRzIGRlcGVuZGVuY3kgY2hhbmdlZCwgYnV0IHdlIGRvbid0IHdhbid0IHRvIGltbWVkaWF0ZWx5IHJlY29tcHV0ZS5cbmZ1bmN0aW9uIHByb3BhZ2F0ZU1heWJlQ2hhbmdlZChvYnNlcnZhYmxlKSB7XG4gICAgLy8gaW52YXJpYW50TE9TKG9ic2VydmFibGUsIFwibWF5YmUgc3RhcnRcIik7XG4gICAgaWYgKG9ic2VydmFibGUubG93ZXN0T2JzZXJ2ZXJTdGF0ZSAhPT0gSURlcml2YXRpb25TdGF0ZS5VUF9UT19EQVRFKVxuICAgICAgICByZXR1cm47XG4gICAgb2JzZXJ2YWJsZS5sb3dlc3RPYnNlcnZlclN0YXRlID0gSURlcml2YXRpb25TdGF0ZS5QT1NTSUJMWV9TVEFMRTtcbiAgICBvYnNlcnZhYmxlLm9ic2VydmVycy5mb3JFYWNoKGZ1bmN0aW9uIChkKSB7XG4gICAgICAgIGlmIChkLmRlcGVuZGVuY2llc1N0YXRlID09PSBJRGVyaXZhdGlvblN0YXRlLlVQX1RPX0RBVEUpIHtcbiAgICAgICAgICAgIGQuZGVwZW5kZW5jaWVzU3RhdGUgPSBJRGVyaXZhdGlvblN0YXRlLlBPU1NJQkxZX1NUQUxFO1xuICAgICAgICAgICAgaWYgKGQuaXNUcmFjaW5nICE9PSBUcmFjZU1vZGUuTk9ORSkge1xuICAgICAgICAgICAgICAgIGxvZ1RyYWNlSW5mbyhkLCBvYnNlcnZhYmxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGQub25CZWNvbWVTdGFsZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gaW52YXJpYW50TE9TKG9ic2VydmFibGUsIFwibWF5YmUgZW5kXCIpO1xufVxuZnVuY3Rpb24gbG9nVHJhY2VJbmZvKGRlcml2YXRpb24sIG9ic2VydmFibGUpIHtcbiAgICBjb25zb2xlLmxvZyhcIlttb2J4LnRyYWNlXSAnXCIgKyBkZXJpdmF0aW9uLm5hbWUgKyBcIicgaXMgaW52YWxpZGF0ZWQgZHVlIHRvIGEgY2hhbmdlIGluOiAnXCIgKyBvYnNlcnZhYmxlLm5hbWUgKyBcIidcIik7XG4gICAgaWYgKGRlcml2YXRpb24uaXNUcmFjaW5nID09PSBUcmFjZU1vZGUuQlJFQUspIHtcbiAgICAgICAgdmFyIGxpbmVzID0gW107XG4gICAgICAgIHByaW50RGVwVHJlZShnZXREZXBlbmRlbmN5VHJlZShkZXJpdmF0aW9uKSwgbGluZXMsIDEpO1xuICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgbmV3IEZ1bmN0aW9uKFwiZGVidWdnZXI7XFxuLypcXG5UcmFjaW5nICdcIiArIGRlcml2YXRpb24ubmFtZSArIFwiJ1xcblxcbllvdSBhcmUgZW50ZXJpbmcgdGhpcyBicmVhayBwb2ludCBiZWNhdXNlIGRlcml2YXRpb24gJ1wiICsgZGVyaXZhdGlvbi5uYW1lICsgXCInIGlzIGJlaW5nIHRyYWNlZCBhbmQgJ1wiICsgb2JzZXJ2YWJsZS5uYW1lICsgXCInIGlzIG5vdyBmb3JjaW5nIGl0IHRvIHVwZGF0ZS5cXG5KdXN0IGZvbGxvdyB0aGUgc3RhY2t0cmFjZSB5b3Ugc2hvdWxkIG5vdyBzZWUgaW4gdGhlIGRldnRvb2xzIHRvIHNlZSBwcmVjaXNlbHkgd2hhdCBwaWVjZSBvZiB5b3VyIGNvZGUgaXMgY2F1c2luZyB0aGlzIHVwZGF0ZVxcblRoZSBzdGFja2ZyYW1lIHlvdSBhcmUgbG9va2luZyBmb3IgaXMgYXQgbGVhc3QgfjYtOCBzdGFjay1mcmFtZXMgdXAuXFxuXFxuXCIgKyAoZGVyaXZhdGlvbiBpbnN0YW5jZW9mIENvbXB1dGVkVmFsdWUgPyBkZXJpdmF0aW9uLmRlcml2YXRpb24udG9TdHJpbmcoKS5yZXBsYWNlKC9bKl1cXC8vZywgXCIvXCIpIDogXCJcIikgKyBcIlxcblxcblRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgZGVyaXZhdGlvbiBhcmU6XFxuXFxuXCIgKyBsaW5lcy5qb2luKFwiXFxuXCIpICsgXCJcXG4qL1xcbiAgICBcIikoKTtcbiAgICB9XG59XG5mdW5jdGlvbiBwcmludERlcFRyZWUodHJlZSwgbGluZXMsIGRlcHRoKSB7XG4gICAgaWYgKGxpbmVzLmxlbmd0aCA+PSAxMDAwKSB7XG4gICAgICAgIGxpbmVzLnB1c2goXCIoYW5kIG1hbnkgbW9yZSlcIik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGluZXMucHVzaChcIlwiICsgbmV3IEFycmF5KGRlcHRoKS5qb2luKFwiXFx0XCIpICsgdHJlZS5uYW1lKTsgLy8gTVdFOiBub3QgdGhlIGZhc3Rlc3QsIGJ1dCB0aGUgZWFzaWVzdCB3YXkgOilcbiAgICBpZiAodHJlZS5kZXBlbmRlbmNpZXMpXG4gICAgICAgIHRyZWUuZGVwZW5kZW5jaWVzLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBwcmludERlcFRyZWUoY2hpbGQsIGxpbmVzLCBkZXB0aCArIDEpOyB9KTtcbn1cblxudmFyIFJlYWN0aW9uID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJlYWN0aW9uKG5hbWUsIG9uSW52YWxpZGF0ZSwgZXJyb3JIYW5kbGVyLCByZXF1aXJlc09ic2VydmFibGUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IHZvaWQgMCkgeyBuYW1lID0gXCJSZWFjdGlvbkBcIiArIGdldE5leHRJZCgpOyB9XG4gICAgICAgIGlmIChyZXF1aXJlc09ic2VydmFibGUgPT09IHZvaWQgMCkgeyByZXF1aXJlc09ic2VydmFibGUgPSBmYWxzZTsgfVxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLm9uSW52YWxpZGF0ZSA9IG9uSW52YWxpZGF0ZTtcbiAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnJvckhhbmRsZXI7XG4gICAgICAgIHRoaXMucmVxdWlyZXNPYnNlcnZhYmxlID0gcmVxdWlyZXNPYnNlcnZhYmxlO1xuICAgICAgICB0aGlzLm9ic2VydmluZyA9IFtdOyAvLyBub2RlcyB3ZSBhcmUgbG9va2luZyBhdC4gT3VyIHZhbHVlIGRlcGVuZHMgb24gdGhlc2Ugbm9kZXNcbiAgICAgICAgdGhpcy5uZXdPYnNlcnZpbmcgPSBbXTtcbiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXNTdGF0ZSA9IElEZXJpdmF0aW9uU3RhdGUuTk9UX1RSQUNLSU5HO1xuICAgICAgICB0aGlzLmRpZmZWYWx1ZSA9IDA7XG4gICAgICAgIHRoaXMucnVuSWQgPSAwO1xuICAgICAgICB0aGlzLnVuYm91bmREZXBzQ291bnQgPSAwO1xuICAgICAgICB0aGlzLl9fbWFwaWQgPSBcIiNcIiArIGdldE5leHRJZCgpO1xuICAgICAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNUcmFja1BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXNSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNUcmFjaW5nID0gVHJhY2VNb2RlLk5PTkU7XG4gICAgfVxuICAgIFJlYWN0aW9uLnByb3RvdHlwZS5vbkJlY29tZVN0YWxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faXNTY2hlZHVsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGdsb2JhbFN0YXRlLnBlbmRpbmdSZWFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgICAgIHJ1blJlYWN0aW9ucygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUuaXNTY2hlZHVsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1NjaGVkdWxlZDtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIGludGVybmFsLCB1c2Ugc2NoZWR1bGUoKSBpZiB5b3UgaW50ZW5kIHRvIGtpY2sgb2ZmIGEgcmVhY3Rpb25cbiAgICAgKi9cbiAgICBSZWFjdGlvbi5wcm90b3R5cGUucnVuUmVhY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICBzdGFydEJhdGNoKCk7XG4gICAgICAgICAgICB0aGlzLl9pc1NjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHNob3VsZENvbXB1dGUodGhpcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc1RyYWNrUGVuZGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkludmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzVHJhY2tQZW5kaW5nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NweUVuYWJsZWQoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvbkludmFsaWRhdGUgZGlkbid0IHRyaWdnZXIgdHJhY2sgcmlnaHQgYXdheS4uXG4gICAgICAgICAgICAgICAgICAgICAgICBzcHlSZXBvcnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNjaGVkdWxlZC1yZWFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydEV4Y2VwdGlvbkluRGVyaXZhdGlvbihlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbmRCYXRjaCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUudHJhY2sgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNEaXNwb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLy8gY29uc29sZS53YXJuKFwiUmVhY3Rpb24gYWxyZWFkeSBkaXNwb3NlZFwiKSAvLyBOb3RlOiBOb3QgYSB3YXJuaW5nIC8gZXJyb3IgaW4gbW9ieCA0IGVpdGhlclxuICAgICAgICB9XG4gICAgICAgIHN0YXJ0QmF0Y2goKTtcbiAgICAgICAgdmFyIG5vdGlmeSA9IGlzU3B5RW5hYmxlZCgpO1xuICAgICAgICB2YXIgc3RhcnRUaW1lO1xuICAgICAgICBpZiAobm90aWZ5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIHNweVJlcG9ydFN0YXJ0KHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJyZWFjdGlvblwiXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc1J1bm5pbmcgPSB0cnVlO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdHJhY2tEZXJpdmVkRnVuY3Rpb24odGhpcywgZm4sIHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuX2lzUnVubmluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9pc1RyYWNrUGVuZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICAvLyBkaXNwb3NlZCBkdXJpbmcgbGFzdCBydW4uIENsZWFuIHVwIGV2ZXJ5dGhpbmcgdGhhdCB3YXMgYm91bmQgYWZ0ZXIgdGhlIGRpc3Bvc2UgY2FsbC5cbiAgICAgICAgICAgIGNsZWFyT2JzZXJ2aW5nKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0NhdWdodEV4Y2VwdGlvbihyZXN1bHQpKVxuICAgICAgICAgICAgdGhpcy5yZXBvcnRFeGNlcHRpb25JbkRlcml2YXRpb24ocmVzdWx0LmNhdXNlKTtcbiAgICAgICAgaWYgKG5vdGlmeSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIHNweVJlcG9ydEVuZCh7XG4gICAgICAgICAgICAgICAgdGltZTogRGF0ZS5ub3coKSAtIHN0YXJ0VGltZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZW5kQmF0Y2goKTtcbiAgICB9O1xuICAgIFJlYWN0aW9uLnByb3RvdHlwZS5yZXBvcnRFeGNlcHRpb25JbkRlcml2YXRpb24gPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlcihlcnJvciwgdGhpcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdsb2JhbFN0YXRlLmRpc2FibGVFcnJvckJvdW5kYXJpZXMpXG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgdmFyIG1lc3NhZ2UgPSBcIlttb2J4XSBFbmNvdW50ZXJlZCBhbiB1bmNhdWdodCBleGNlcHRpb24gdGhhdCB3YXMgdGhyb3duIGJ5IGEgcmVhY3Rpb24gb3Igb2JzZXJ2ZXIgY29tcG9uZW50LCBpbjogJ1wiICsgdGhpcyArIFwiJ1wiO1xuICAgICAgICBpZiAoZ2xvYmFsU3RhdGUuc3VwcHJlc3NSZWFjdGlvbkVycm9ycykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW21vYnhdIChlcnJvciBpbiByZWFjdGlvbiAnXCIgKyB0aGlzLm5hbWUgKyBcIicgc3VwcHJlc3NlZCwgZml4IGVycm9yIG9mIGNhdXNpbmcgYWN0aW9uIGJlbG93KVwiKTsgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UsIGVycm9yKTtcbiAgICAgICAgICAgIC8qKiBJZiBkZWJ1Z2dpbmcgYnJvdWdodCB5b3UgaGVyZSwgcGxlYXNlLCByZWFkIHRoZSBhYm92ZSBtZXNzYWdlIDotKS4gVG54ISAqL1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1NweUVuYWJsZWQoKSkge1xuICAgICAgICAgICAgc3B5UmVwb3J0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgZXJyb3I6IFwiXCIgKyBlcnJvclxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2xvYmFsU3RhdGUuZ2xvYmFsUmVhY3Rpb25FcnJvckhhbmRsZXJzLmZvckVhY2goZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGYoZXJyb3IsIF90aGlzKTsgfSk7XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUuZGlzcG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGlzcG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNwb3NlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzUnVubmluZykge1xuICAgICAgICAgICAgICAgIC8vIGlmIGRpc3Bvc2VkIHdoaWxlIHJ1bm5pbmcsIGNsZWFuIHVwIGxhdGVyLiBNYXliZSBub3Qgb3B0aW1hbCwgYnV0IHJhcmUgY2FzZVxuICAgICAgICAgICAgICAgIHN0YXJ0QmF0Y2goKTtcbiAgICAgICAgICAgICAgICBjbGVhck9ic2VydmluZyh0aGlzKTtcbiAgICAgICAgICAgICAgICBlbmRCYXRjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUuZ2V0RGlzcG9zZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciByID0gdGhpcy5kaXNwb3NlLmJpbmQodGhpcyk7XG4gICAgICAgIHJbJG1vYnhdID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBcIlJlYWN0aW9uW1wiICsgdGhpcy5uYW1lICsgXCJdXCI7XG4gICAgfTtcbiAgICBSZWFjdGlvbi5wcm90b3R5cGUudHJhY2UgPSBmdW5jdGlvbiAoZW50ZXJCcmVha1BvaW50KSB7XG4gICAgICAgIGlmIChlbnRlckJyZWFrUG9pbnQgPT09IHZvaWQgMCkgeyBlbnRlckJyZWFrUG9pbnQgPSBmYWxzZTsgfVxuICAgICAgICB0cmFjZSh0aGlzLCBlbnRlckJyZWFrUG9pbnQpO1xuICAgIH07XG4gICAgcmV0dXJuIFJlYWN0aW9uO1xufSgpKTtcbmZ1bmN0aW9uIG9uUmVhY3Rpb25FcnJvcihoYW5kbGVyKSB7XG4gICAgZ2xvYmFsU3RhdGUuZ2xvYmFsUmVhY3Rpb25FcnJvckhhbmRsZXJzLnB1c2goaGFuZGxlcik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlkeCA9IGdsb2JhbFN0YXRlLmdsb2JhbFJlYWN0aW9uRXJyb3JIYW5kbGVycy5pbmRleE9mKGhhbmRsZXIpO1xuICAgICAgICBpZiAoaWR4ID49IDApXG4gICAgICAgICAgICBnbG9iYWxTdGF0ZS5nbG9iYWxSZWFjdGlvbkVycm9ySGFuZGxlcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfTtcbn1cbi8qKlxuICogTWFnaWMgbnVtYmVyIGFsZXJ0IVxuICogRGVmaW5lcyB3aXRoaW4gaG93IG1hbnkgdGltZXMgYSByZWFjdGlvbiBpcyBhbGxvd2VkIHRvIHJlLXRyaWdnZXIgaXRzZWxmXG4gKiB1bnRpbCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhpcyBpcyBnb25uYSBiZSBhIG5ldmVyIGVuZGluZyBsb29wLi4uXG4gKi9cbnZhciBNQVhfUkVBQ1RJT05fSVRFUkFUSU9OUyA9IDEwMDtcbnZhciByZWFjdGlvblNjaGVkdWxlciA9IGZ1bmN0aW9uIChmKSB7IHJldHVybiBmKCk7IH07XG5mdW5jdGlvbiBydW5SZWFjdGlvbnMoKSB7XG4gICAgLy8gVHJhbXBvbGluaW5nLCBpZiBydW5SZWFjdGlvbnMgYXJlIGFscmVhZHkgcnVubmluZywgbmV3IHJlYWN0aW9ucyB3aWxsIGJlIHBpY2tlZCB1cFxuICAgIGlmIChnbG9iYWxTdGF0ZS5pbkJhdGNoID4gMCB8fCBnbG9iYWxTdGF0ZS5pc1J1bm5pbmdSZWFjdGlvbnMpXG4gICAgICAgIHJldHVybjtcbiAgICByZWFjdGlvblNjaGVkdWxlcihydW5SZWFjdGlvbnNIZWxwZXIpO1xufVxuZnVuY3Rpb24gcnVuUmVhY3Rpb25zSGVscGVyKCkge1xuICAgIGdsb2JhbFN0YXRlLmlzUnVubmluZ1JlYWN0aW9ucyA9IHRydWU7XG4gICAgdmFyIGFsbFJlYWN0aW9ucyA9IGdsb2JhbFN0YXRlLnBlbmRpbmdSZWFjdGlvbnM7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIC8vIFdoaWxlIHJ1bm5pbmcgcmVhY3Rpb25zLCBuZXcgcmVhY3Rpb25zIG1pZ2h0IGJlIHRyaWdnZXJlZC5cbiAgICAvLyBIZW5jZSB3ZSB3b3JrIHdpdGggdHdvIHZhcmlhYmxlcyBhbmQgY2hlY2sgd2hldGhlclxuICAgIC8vIHdlIGNvbnZlcmdlIHRvIG5vIHJlbWFpbmluZyByZWFjdGlvbnMgYWZ0ZXIgYSB3aGlsZS5cbiAgICB3aGlsZSAoYWxsUmVhY3Rpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCsraXRlcmF0aW9ucyA9PT0gTUFYX1JFQUNUSU9OX0lURVJBVElPTlMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZWFjdGlvbiBkb2Vzbid0IGNvbnZlcmdlIHRvIGEgc3RhYmxlIHN0YXRlIGFmdGVyIFwiICsgTUFYX1JFQUNUSU9OX0lURVJBVElPTlMgKyBcIiBpdGVyYXRpb25zLlwiICtcbiAgICAgICAgICAgICAgICAoXCIgUHJvYmFibHkgdGhlcmUgaXMgYSBjeWNsZSBpbiB0aGUgcmVhY3RpdmUgZnVuY3Rpb246IFwiICsgYWxsUmVhY3Rpb25zWzBdKSk7XG4gICAgICAgICAgICBhbGxSZWFjdGlvbnMuc3BsaWNlKDApOyAvLyBjbGVhciByZWFjdGlvbnNcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVtYWluaW5nUmVhY3Rpb25zID0gYWxsUmVhY3Rpb25zLnNwbGljZSgwKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSByZW1haW5pbmdSZWFjdGlvbnMubGVuZ3RoOyBpIDwgbDsgaSsrKVxuICAgICAgICAgICAgcmVtYWluaW5nUmVhY3Rpb25zW2ldLnJ1blJlYWN0aW9uKCk7XG4gICAgfVxuICAgIGdsb2JhbFN0YXRlLmlzUnVubmluZ1JlYWN0aW9ucyA9IGZhbHNlO1xufVxudmFyIGlzUmVhY3Rpb24gPSBjcmVhdGVJbnN0YW5jZW9mUHJlZGljYXRlKFwiUmVhY3Rpb25cIiwgUmVhY3Rpb24pO1xuZnVuY3Rpb24gc2V0UmVhY3Rpb25TY2hlZHVsZXIoZm4pIHtcbiAgICB2YXIgYmFzZVNjaGVkdWxlciA9IHJlYWN0aW9uU2NoZWR1bGVyO1xuICAgIHJlYWN0aW9uU2NoZWR1bGVyID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGZuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJhc2VTY2hlZHVsZXIoZik7IH0pOyB9O1xufVxuXG5mdW5jdGlvbiBpc1NweUVuYWJsZWQoKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiAhIWdsb2JhbFN0YXRlLnNweUxpc3RlbmVycy5sZW5ndGg7XG59XG5mdW5jdGlvbiBzcHlSZXBvcnQoZXZlbnQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICByZXR1cm47IC8vIGRlYWQgY29kZSBlbGltaW5hdGlvbiBjYW4gZG8gdGhlIHJlc3RcbiAgICBpZiAoIWdsb2JhbFN0YXRlLnNweUxpc3RlbmVycy5sZW5ndGgpXG4gICAgICAgIHJldHVybjtcbiAgICB2YXIgbGlzdGVuZXJzID0gZ2xvYmFsU3RhdGUuc3B5TGlzdGVuZXJzO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGw7IGkrKylcbiAgICAgICAgbGlzdGVuZXJzW2ldKGV2ZW50KTtcbn1cbmZ1bmN0aW9uIHNweVJlcG9ydFN0YXJ0KGV2ZW50KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciBjaGFuZ2UgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZXZlbnQpLCB7IHNweVJlcG9ydFN0YXJ0OiB0cnVlIH0pO1xuICAgIHNweVJlcG9ydChjaGFuZ2UpO1xufVxudmFyIEVORF9FVkVOVCA9IHsgc3B5UmVwb3J0RW5kOiB0cnVlIH07XG5mdW5jdGlvbiBzcHlSZXBvcnRFbmQoY2hhbmdlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgcmV0dXJuO1xuICAgIGlmIChjaGFuZ2UpXG4gICAgICAgIHNweVJlcG9ydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBzcHlSZXBvcnRFbmQ6IHRydWUgfSkpO1xuICAgIGVsc2VcbiAgICAgICAgc3B5UmVwb3J0KEVORF9FVkVOVCk7XG59XG5mdW5jdGlvbiBzcHkobGlzdGVuZXIpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlttb2J4LnNweV0gSXMgYSBuby1vcCBpbiBwcm9kdWN0aW9uIGJ1aWxkc1wiKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdsb2JhbFN0YXRlLnNweUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuIG9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZ2xvYmFsU3RhdGUuc3B5TGlzdGVuZXJzID0gZ2xvYmFsU3RhdGUuc3B5TGlzdGVuZXJzLmZpbHRlcihmdW5jdGlvbiAobCkgeyByZXR1cm4gbCAhPT0gbGlzdGVuZXI7IH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRvbnRSZWFzc2lnbkZpZWxkcygpIHtcbiAgICBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBcIkBhY3Rpb24gZmllbGRzIGFyZSBub3QgcmVhc3NpZ25hYmxlXCIpO1xufVxuZnVuY3Rpb24gbmFtZWRBY3Rpb25EZWNvcmF0b3IobmFtZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBwcm9wLCBkZXNjcmlwdG9yKSB7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIGRlc2NyaXB0b3IuZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChcIkBhY3Rpb24gY2Fubm90IGJlIHVzZWQgd2l0aCBnZXR0ZXJzXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYmFiZWwgLyB0eXBlc2NyaXB0XG4gICAgICAgICAgICAvLyBAYWN0aW9uIG1ldGhvZCgpIHsgfVxuICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyB0eXBlc2NyaXB0XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNyZWF0ZUFjdGlvbihuYW1lLCBkZXNjcmlwdG9yLnZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUgLy8gZm9yIHR5cGVzY3JpcHQsIHRoaXMgbXVzdCBiZSB3cml0YWJsZSwgb3RoZXJ3aXNlIGl0IGNhbm5vdCBpbmhlcml0IDovIChzZWUgaW5oZXJpdGFibGUgYWN0aW9ucyB0ZXN0KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBiYWJlbCBvbmx5OiBAYWN0aW9uIG1ldGhvZCA9ICgpID0+IHt9XG4gICAgICAgICAgICB2YXIgaW5pdGlhbGl6ZXJfMSA9IGRlc2NyaXB0b3IuaW5pdGlhbGl6ZXI7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbml0aWFsaXplcjogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBOLkI6IHdlIGNhbid0IGltbWVkaWF0ZWx5IGludm9rZSBpbml0aWFsaXplcjsgdGhpcyB3b3VsZCBiZSB3cm9uZ1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQWN0aW9uKG5hbWUsIGluaXRpYWxpemVyXzEuY2FsbCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBib3VuZCBpbnN0YW5jZSBtZXRob2RzXG4gICAgICAgIHJldHVybiBhY3Rpb25GaWVsZERlY29yYXRvcihuYW1lKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG59XG5mdW5jdGlvbiBhY3Rpb25GaWVsZERlY29yYXRvcihuYW1lKSB7XG4gICAgLy8gU2ltcGxlIHByb3BlcnR5IHRoYXQgd3JpdGVzIG9uIGZpcnN0IGludm9jYXRpb24gdG8gdGhlIGN1cnJlbnQgaW5zdGFuY2VcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwgcHJvcCwgZGVzY3JpcHRvcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wLCB7XG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRIaWRkZW5Qcm9wKHRoaXMsIHByb3AsIGFjdGlvbihuYW1lLCB2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xufVxuZnVuY3Rpb24gYm91bmRBY3Rpb25EZWNvcmF0b3IodGFyZ2V0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IsIGFwcGx5VG9JbnN0YW5jZSkge1xuICAgIGlmIChhcHBseVRvSW5zdGFuY2UgPT09IHRydWUpIHtcbiAgICAgICAgZGVmaW5lQm91bmRBY3Rpb24odGFyZ2V0LCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IudmFsdWUpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgLy8gaWYgKGRlc2NyaXB0b3IudmFsdWUpXG4gICAgICAgIC8vIFR5cGVzY3JpcHQgLyBCYWJlbDogQGFjdGlvbi5ib3VuZCBtZXRob2QoKSB7IH1cbiAgICAgICAgLy8gYWxzbzogYmFiZWwgQGFjdGlvbi5ib3VuZCBtZXRob2QgPSAoKSA9PiB7fVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBkZWZpbmVCb3VuZEFjdGlvbih0aGlzLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3IudmFsdWUgfHwgZGVzY3JpcHRvci5pbml0aWFsaXplci5jYWxsKHRoaXMpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1twcm9wZXJ0eU5hbWVdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZG9udFJlYXNzaWduRmllbGRzXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIGZpZWxkIGRlY29yYXRvciBUeXBlc2NyaXB0IEBhY3Rpb24uYm91bmQgbWV0aG9kID0gKCkgPT4ge31cbiAgICByZXR1cm4ge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICBkZWZpbmVCb3VuZEFjdGlvbih0aGlzLCBwcm9wZXJ0eU5hbWUsIHYpO1xuICAgICAgICB9LFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG52YXIgYWN0aW9uID0gZnVuY3Rpb24gYWN0aW9uKGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpIHtcbiAgICAvLyBhY3Rpb24oZm4oKSB7fSlcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgYXJnMSA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICByZXR1cm4gY3JlYXRlQWN0aW9uKGFyZzEubmFtZSB8fCBcIjx1bm5hbWVkIGFjdGlvbj5cIiwgYXJnMSk7XG4gICAgLy8gYWN0aW9uKFwibmFtZVwiLCBmbigpIHt9KVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyICYmIHR5cGVvZiBhcmcyID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHJldHVybiBjcmVhdGVBY3Rpb24oYXJnMSwgYXJnMik7XG4gICAgLy8gQGFjdGlvbihcIm5hbWVcIikgZm4oKSB7fVxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmcxID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gbmFtZWRBY3Rpb25EZWNvcmF0b3IoYXJnMSk7XG4gICAgLy8gQGFjdGlvbiBmbigpIHt9XG4gICAgaWYgKGFyZzQgPT09IHRydWUpIHtcbiAgICAgICAgLy8gYXBwbHkgdG8gaW5zdGFuY2UgaW1tZWRpYXRlbHlcbiAgICAgICAgYWRkSGlkZGVuUHJvcChhcmcxLCBhcmcyLCBjcmVhdGVBY3Rpb24oYXJnMS5uYW1lIHx8IGFyZzIsIGFyZzMudmFsdWUsIHRoaXMpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuYW1lZEFjdGlvbkRlY29yYXRvcihhcmcyKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cbn07XG5hY3Rpb24uYm91bmQgPSBib3VuZEFjdGlvbkRlY29yYXRvcjtcbmZ1bmN0aW9uIHJ1bkluQWN0aW9uKGFyZzEsIGFyZzIpIHtcbiAgICB2YXIgYWN0aW9uTmFtZSA9IHR5cGVvZiBhcmcxID09PSBcInN0cmluZ1wiID8gYXJnMSA6IGFyZzEubmFtZSB8fCBcIjx1bm5hbWVkIGFjdGlvbj5cIjtcbiAgICB2YXIgZm4gPSB0eXBlb2YgYXJnMSA9PT0gXCJmdW5jdGlvblwiID8gYXJnMSA6IGFyZzI7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpbnZhcmlhbnQodHlwZW9mIGZuID09PSBcImZ1bmN0aW9uXCIgJiYgZm4ubGVuZ3RoID09PSAwLCBcImBydW5JbkFjdGlvbmAgZXhwZWN0cyBhIGZ1bmN0aW9uIHdpdGhvdXQgYXJndW1lbnRzXCIpO1xuICAgICAgICBpZiAodHlwZW9mIGFjdGlvbk5hbWUgIT09IFwic3RyaW5nXCIgfHwgIWFjdGlvbk5hbWUpXG4gICAgICAgICAgICBmYWlsKFwiYWN0aW9ucyBzaG91bGQgaGF2ZSB2YWxpZCBuYW1lcywgZ290OiAnXCIgKyBhY3Rpb25OYW1lICsgXCInXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZXhlY3V0ZUFjdGlvbihhY3Rpb25OYW1lLCBmbiwgdGhpcywgdW5kZWZpbmVkKTtcbn1cbmZ1bmN0aW9uIGlzQWN0aW9uKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gXCJmdW5jdGlvblwiICYmIHRoaW5nLmlzTW9ieEFjdGlvbiA9PT0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGRlZmluZUJvdW5kQWN0aW9uKHRhcmdldCwgcHJvcGVydHlOYW1lLCBmbikge1xuICAgIGFkZEhpZGRlblByb3AodGFyZ2V0LCBwcm9wZXJ0eU5hbWUsIGNyZWF0ZUFjdGlvbihwcm9wZXJ0eU5hbWUsIGZuLmJpbmQodGFyZ2V0KSkpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuYW1lZCByZWFjdGl2ZSB2aWV3IGFuZCBrZWVwcyBpdCBhbGl2ZSwgc28gdGhhdCB0aGUgdmlldyBpcyBhbHdheXNcbiAqIHVwZGF0ZWQgaWYgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlcywgZXZlbiB3aGVuIHRoZSB2aWV3IGlzIG5vdCBmdXJ0aGVyIHVzZWQgYnkgc29tZXRoaW5nIGVsc2UuXG4gKiBAcGFyYW0gdmlldyBUaGUgcmVhY3RpdmUgdmlld1xuICogQHJldHVybnMgZGlzcG9zZXIgZnVuY3Rpb24sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgdGhlIHZpZXcgZnJvbSBiZWluZyB1cGRhdGVkIGluIHRoZSBmdXR1cmUuXG4gKi9cbmZ1bmN0aW9uIGF1dG9ydW4odmlldywgb3B0cykge1xuICAgIGlmIChvcHRzID09PSB2b2lkIDApIHsgb3B0cyA9IEVNUFRZX09CSkVDVDsgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgaW52YXJpYW50KHR5cGVvZiB2aWV3ID09PSBcImZ1bmN0aW9uXCIsIFwiQXV0b3J1biBleHBlY3RzIGEgZnVuY3Rpb24gYXMgZmlyc3QgYXJndW1lbnRcIik7XG4gICAgICAgIGludmFyaWFudChpc0FjdGlvbih2aWV3KSA9PT0gZmFsc2UsIFwiQXV0b3J1biBkb2VzIG5vdCBhY2NlcHQgYWN0aW9ucyBzaW5jZSBhY3Rpb25zIGFyZSB1bnRyYWNrYWJsZVwiKTtcbiAgICB9XG4gICAgdmFyIG5hbWUgPSAob3B0cyAmJiBvcHRzLm5hbWUpIHx8IHZpZXcubmFtZSB8fCBcIkF1dG9ydW5AXCIgKyBnZXROZXh0SWQoKTtcbiAgICB2YXIgcnVuU3luYyA9ICFvcHRzLnNjaGVkdWxlciAmJiAhb3B0cy5kZWxheTtcbiAgICB2YXIgcmVhY3Rpb247XG4gICAgaWYgKHJ1blN5bmMpIHtcbiAgICAgICAgLy8gbm9ybWFsIGF1dG9ydW5cbiAgICAgICAgcmVhY3Rpb24gPSBuZXcgUmVhY3Rpb24obmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy50cmFjayhyZWFjdGlvblJ1bm5lcik7XG4gICAgICAgIH0sIG9wdHMub25FcnJvciwgb3B0cy5yZXF1aXJlc09ic2VydmFibGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHNjaGVkdWxlcl8xID0gY3JlYXRlU2NoZWR1bGVyRnJvbU9wdGlvbnMob3B0cyk7XG4gICAgICAgIC8vIGRlYm91bmNlZCBhdXRvcnVuXG4gICAgICAgIHZhciBpc1NjaGVkdWxlZF8xID0gZmFsc2U7XG4gICAgICAgIHJlYWN0aW9uID0gbmV3IFJlYWN0aW9uKG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghaXNTY2hlZHVsZWRfMSkge1xuICAgICAgICAgICAgICAgIGlzU2NoZWR1bGVkXzEgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlcl8xKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNTY2hlZHVsZWRfMSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlYWN0aW9uLmlzRGlzcG9zZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFjdGlvbi50cmFjayhyZWFjdGlvblJ1bm5lcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIG9wdHMub25FcnJvciwgb3B0cy5yZXF1aXJlc09ic2VydmFibGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFjdGlvblJ1bm5lcigpIHtcbiAgICAgICAgdmlldyhyZWFjdGlvbik7XG4gICAgfVxuICAgIHJlYWN0aW9uLnNjaGVkdWxlKCk7XG4gICAgcmV0dXJuIHJlYWN0aW9uLmdldERpc3Bvc2VyKCk7XG59XG52YXIgcnVuID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGYoKTsgfTtcbmZ1bmN0aW9uIGNyZWF0ZVNjaGVkdWxlckZyb21PcHRpb25zKG9wdHMpIHtcbiAgICByZXR1cm4gb3B0cy5zY2hlZHVsZXJcbiAgICAgICAgPyBvcHRzLnNjaGVkdWxlclxuICAgICAgICA6IG9wdHMuZGVsYXlcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIHNldFRpbWVvdXQoZiwgb3B0cy5kZWxheSk7IH1cbiAgICAgICAgICAgIDogcnVuO1xufVxuZnVuY3Rpb24gcmVhY3Rpb24oZXhwcmVzc2lvbiwgZWZmZWN0LCBvcHRzKSB7XG4gICAgaWYgKG9wdHMgPT09IHZvaWQgMCkgeyBvcHRzID0gRU1QVFlfT0JKRUNUOyB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpbnZhcmlhbnQodHlwZW9mIGV4cHJlc3Npb24gPT09IFwiZnVuY3Rpb25cIiwgXCJGaXJzdCBhcmd1bWVudCB0byByZWFjdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgaW52YXJpYW50KHR5cGVvZiBvcHRzID09PSBcIm9iamVjdFwiLCBcIlRoaXJkIGFyZ3VtZW50IG9mIHJlYWN0aW9ucyBzaG91bGQgYmUgYW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICB2YXIgbmFtZSA9IG9wdHMubmFtZSB8fCBcIlJlYWN0aW9uQFwiICsgZ2V0TmV4dElkKCk7XG4gICAgdmFyIGVmZmVjdEFjdGlvbiA9IGFjdGlvbihuYW1lLCBvcHRzLm9uRXJyb3IgPyB3cmFwRXJyb3JIYW5kbGVyKG9wdHMub25FcnJvciwgZWZmZWN0KSA6IGVmZmVjdCk7XG4gICAgdmFyIHJ1blN5bmMgPSAhb3B0cy5zY2hlZHVsZXIgJiYgIW9wdHMuZGVsYXk7XG4gICAgdmFyIHNjaGVkdWxlciA9IGNyZWF0ZVNjaGVkdWxlckZyb21PcHRpb25zKG9wdHMpO1xuICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuICAgIHZhciBpc1NjaGVkdWxlZCA9IGZhbHNlO1xuICAgIHZhciB2YWx1ZTtcbiAgICB2YXIgZXF1YWxzID0gb3B0cy5jb21wYXJlU3RydWN0dXJhbFxuICAgICAgICA/IGNvbXBhcmVyLnN0cnVjdHVyYWxcbiAgICAgICAgOiBvcHRzLmVxdWFscyB8fCBjb21wYXJlci5kZWZhdWx0O1xuICAgIHZhciByID0gbmV3IFJlYWN0aW9uKG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGZpcnN0VGltZSB8fCBydW5TeW5jKSB7XG4gICAgICAgICAgICByZWFjdGlvblJ1bm5lcigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc1NjaGVkdWxlZCkge1xuICAgICAgICAgICAgaXNTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgICAgICAgc2NoZWR1bGVyKHJlYWN0aW9uUnVubmVyKTtcbiAgICAgICAgfVxuICAgIH0sIG9wdHMub25FcnJvciwgb3B0cy5yZXF1aXJlc09ic2VydmFibGUpO1xuICAgIGZ1bmN0aW9uIHJlYWN0aW9uUnVubmVyKCkge1xuICAgICAgICBpc1NjaGVkdWxlZCA9IGZhbHNlOyAvLyBROiBtb3ZlIGludG8gcmVhY3Rpb24gcnVubmVyP1xuICAgICAgICBpZiAoci5pc0Rpc3Bvc2VkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICByLnRyYWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBuZXh0VmFsdWUgPSBleHByZXNzaW9uKHIpO1xuICAgICAgICAgICAgY2hhbmdlZCA9IGZpcnN0VGltZSB8fCAhZXF1YWxzKHZhbHVlLCBuZXh0VmFsdWUpO1xuICAgICAgICAgICAgdmFsdWUgPSBuZXh0VmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZmlyc3RUaW1lICYmIG9wdHMuZmlyZUltbWVkaWF0ZWx5KVxuICAgICAgICAgICAgZWZmZWN0QWN0aW9uKHZhbHVlLCByKTtcbiAgICAgICAgaWYgKCFmaXJzdFRpbWUgJiYgY2hhbmdlZCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIGVmZmVjdEFjdGlvbih2YWx1ZSwgcik7XG4gICAgICAgIGlmIChmaXJzdFRpbWUpXG4gICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICB9XG4gICAgci5zY2hlZHVsZSgpO1xuICAgIHJldHVybiByLmdldERpc3Bvc2VyKCk7XG59XG5mdW5jdGlvbiB3cmFwRXJyb3JIYW5kbGVyKGVycm9ySGFuZGxlciwgYmFzZUZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlRm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZXJyb3JIYW5kbGVyLmNhbGwodGhpcywgZSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBvbkJlY29tZU9ic2VydmVkKHRoaW5nLCBhcmcyLCBhcmczKSB7XG4gICAgcmV0dXJuIGludGVyY2VwdEhvb2soXCJvbkJlY29tZU9ic2VydmVkXCIsIHRoaW5nLCBhcmcyLCBhcmczKTtcbn1cbmZ1bmN0aW9uIG9uQmVjb21lVW5vYnNlcnZlZCh0aGluZywgYXJnMiwgYXJnMykge1xuICAgIHJldHVybiBpbnRlcmNlcHRIb29rKFwib25CZWNvbWVVbm9ic2VydmVkXCIsIHRoaW5nLCBhcmcyLCBhcmczKTtcbn1cbmZ1bmN0aW9uIGludGVyY2VwdEhvb2soaG9vaywgdGhpbmcsIGFyZzIsIGFyZzMpIHtcbiAgICB2YXIgYXRvbSA9IHR5cGVvZiBhcmczID09PSBcImZ1bmN0aW9uXCIgPyBnZXRBdG9tKHRoaW5nLCBhcmcyKSA6IGdldEF0b20odGhpbmcpO1xuICAgIHZhciBjYiA9IHR5cGVvZiBhcmczID09PSBcImZ1bmN0aW9uXCIgPyBhcmczIDogYXJnMjtcbiAgICB2YXIgbGlzdGVuZXJzS2V5ID0gaG9vayArIFwiTGlzdGVuZXJzXCI7XG4gICAgaWYgKGF0b21bbGlzdGVuZXJzS2V5XSkge1xuICAgICAgICBhdG9tW2xpc3RlbmVyc0tleV0uYWRkKGNiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGF0b21bbGlzdGVuZXJzS2V5XSA9IG5ldyBTZXQoW2NiXSk7XG4gICAgfVxuICAgIHZhciBvcmlnID0gYXRvbVtob29rXTtcbiAgICBpZiAodHlwZW9mIG9yaWcgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFwiTm90IGFuIGF0b20gdGhhdCBjYW4gYmUgKHVuKW9ic2VydmVkXCIpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBob29rTGlzdGVuZXJzID0gYXRvbVtsaXN0ZW5lcnNLZXldO1xuICAgICAgICBpZiAoaG9va0xpc3RlbmVycykge1xuICAgICAgICAgICAgaG9va0xpc3RlbmVycy5kZWxldGUoY2IpO1xuICAgICAgICAgICAgaWYgKGhvb2tMaXN0ZW5lcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBhdG9tW2xpc3RlbmVyc0tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5mdW5jdGlvbiBjb25maWd1cmUob3B0aW9ucykge1xuICAgIHZhciBlbmZvcmNlQWN0aW9ucyA9IG9wdGlvbnMuZW5mb3JjZUFjdGlvbnMsIGNvbXB1dGVkUmVxdWlyZXNSZWFjdGlvbiA9IG9wdGlvbnMuY29tcHV0ZWRSZXF1aXJlc1JlYWN0aW9uLCBjb21wdXRlZENvbmZpZ3VyYWJsZSA9IG9wdGlvbnMuY29tcHV0ZWRDb25maWd1cmFibGUsIGRpc2FibGVFcnJvckJvdW5kYXJpZXMgPSBvcHRpb25zLmRpc2FibGVFcnJvckJvdW5kYXJpZXMsIHJlYWN0aW9uU2NoZWR1bGVyID0gb3B0aW9ucy5yZWFjdGlvblNjaGVkdWxlciwgcmVhY3Rpb25SZXF1aXJlc09ic2VydmFibGUgPSBvcHRpb25zLnJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlLCBvYnNlcnZhYmxlUmVxdWlyZXNSZWFjdGlvbiA9IG9wdGlvbnMub2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb247XG4gICAgaWYgKG9wdGlvbnMuaXNvbGF0ZUdsb2JhbFN0YXRlID09PSB0cnVlKSB7XG4gICAgICAgIGlzb2xhdGVHbG9iYWxTdGF0ZSgpO1xuICAgIH1cbiAgICBpZiAoZW5mb3JjZUFjdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodHlwZW9mIGVuZm9yY2VBY3Rpb25zID09PSBcImJvb2xlYW5cIiB8fCBlbmZvcmNlQWN0aW9ucyA9PT0gXCJzdHJpY3RcIilcbiAgICAgICAgICAgIGRlcHJlY2F0ZWQoXCJEZXByZWNhdGVkIHZhbHVlIGZvciAnZW5mb3JjZUFjdGlvbnMnLCB1c2UgJ2ZhbHNlJyA9PiAnXFxcIm5ldmVyXFxcIicsICd0cnVlJyA9PiAnXFxcIm9ic2VydmVkXFxcIicsICdcXFwic3RyaWN0XFxcIicgPT4gXFxcIidhbHdheXMnXFxcIiBpbnN0ZWFkXCIpO1xuICAgICAgICB2YXIgZWEgPSB2b2lkIDA7XG4gICAgICAgIHN3aXRjaCAoZW5mb3JjZUFjdGlvbnMpIHtcbiAgICAgICAgICAgIGNhc2UgdHJ1ZTpcbiAgICAgICAgICAgIGNhc2UgXCJvYnNlcnZlZFwiOlxuICAgICAgICAgICAgICAgIGVhID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgZmFsc2U6XG4gICAgICAgICAgICBjYXNlIFwibmV2ZXJcIjpcbiAgICAgICAgICAgICAgICBlYSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInN0cmljdFwiOlxuICAgICAgICAgICAgY2FzZSBcImFsd2F5c1wiOlxuICAgICAgICAgICAgICAgIGVhID0gXCJzdHJpY3RcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmFpbChcIkludmFsaWQgdmFsdWUgZm9yICdlbmZvcmNlQWN0aW9ucyc6ICdcIiArIGVuZm9yY2VBY3Rpb25zICsgXCInLCBleHBlY3RlZCAnbmV2ZXInLCAnYWx3YXlzJyBvciAnb2JzZXJ2ZWQnXCIpO1xuICAgICAgICB9XG4gICAgICAgIGdsb2JhbFN0YXRlLmVuZm9yY2VBY3Rpb25zID0gZWE7XG4gICAgICAgIGdsb2JhbFN0YXRlLmFsbG93U3RhdGVDaGFuZ2VzID0gZWEgPT09IHRydWUgfHwgZWEgPT09IFwic3RyaWN0XCIgPyBmYWxzZSA6IHRydWU7XG4gICAgfVxuICAgIGlmIChjb21wdXRlZFJlcXVpcmVzUmVhY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBnbG9iYWxTdGF0ZS5jb21wdXRlZFJlcXVpcmVzUmVhY3Rpb24gPSAhIWNvbXB1dGVkUmVxdWlyZXNSZWFjdGlvbjtcbiAgICB9XG4gICAgaWYgKHJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZ2xvYmFsU3RhdGUucmVhY3Rpb25SZXF1aXJlc09ic2VydmFibGUgPSAhIXJlYWN0aW9uUmVxdWlyZXNPYnNlcnZhYmxlO1xuICAgIH1cbiAgICBpZiAob2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBnbG9iYWxTdGF0ZS5vYnNlcnZhYmxlUmVxdWlyZXNSZWFjdGlvbiA9ICEhb2JzZXJ2YWJsZVJlcXVpcmVzUmVhY3Rpb247XG4gICAgICAgIGdsb2JhbFN0YXRlLmFsbG93U3RhdGVSZWFkcyA9ICFnbG9iYWxTdGF0ZS5vYnNlcnZhYmxlUmVxdWlyZXNSZWFjdGlvbjtcbiAgICB9XG4gICAgaWYgKGNvbXB1dGVkQ29uZmlndXJhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZ2xvYmFsU3RhdGUuY29tcHV0ZWRDb25maWd1cmFibGUgPSAhIWNvbXB1dGVkQ29uZmlndXJhYmxlO1xuICAgIH1cbiAgICBpZiAoZGlzYWJsZUVycm9yQm91bmRhcmllcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChkaXNhYmxlRXJyb3JCb3VuZGFyaWVzID09PSB0cnVlKVxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiV0FSTklORzogRGVidWcgZmVhdHVyZSBvbmx5LiBNb2JYIHdpbGwgTk9UIHJlY292ZXIgZnJvbSBlcnJvcnMgd2hlbiBgZGlzYWJsZUVycm9yQm91bmRhcmllc2AgaXMgZW5hYmxlZC5cIik7XG4gICAgICAgIGdsb2JhbFN0YXRlLmRpc2FibGVFcnJvckJvdW5kYXJpZXMgPSAhIWRpc2FibGVFcnJvckJvdW5kYXJpZXM7XG4gICAgfVxuICAgIGlmIChyZWFjdGlvblNjaGVkdWxlcikge1xuICAgICAgICBzZXRSZWFjdGlvblNjaGVkdWxlcihyZWFjdGlvblNjaGVkdWxlcik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkZWNvcmF0ZSh0aGluZywgZGVjb3JhdG9ycykge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICBpbnZhcmlhbnQoaXNQbGFpbk9iamVjdChkZWNvcmF0b3JzKSwgXCJEZWNvcmF0b3JzIHNob3VsZCBiZSBhIGtleSB2YWx1ZSBtYXBcIik7XG4gICAgdmFyIHRhcmdldCA9IHR5cGVvZiB0aGluZyA9PT0gXCJmdW5jdGlvblwiID8gdGhpbmcucHJvdG90eXBlIDogdGhpbmc7XG4gICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICB2YXIgcHJvcGVydHlEZWNvcmF0b3JzID0gZGVjb3JhdG9yc1twcm9wXTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BlcnR5RGVjb3JhdG9ycykpIHtcbiAgICAgICAgICAgIHByb3BlcnR5RGVjb3JhdG9ycyA9IFtwcm9wZXJ0eURlY29yYXRvcnNdO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgaW52YXJpYW50KHByb3BlcnR5RGVjb3JhdG9ycy5ldmVyeShmdW5jdGlvbiAoZGVjb3JhdG9yKSB7IHJldHVybiB0eXBlb2YgZGVjb3JhdG9yID09PSBcImZ1bmN0aW9uXCI7IH0pLCBcIkRlY29yYXRlOiBleHBlY3RlZCBhIGRlY29yYXRvciBmdW5jdGlvbiBvciBhcnJheSBvZiBkZWNvcmF0b3IgZnVuY3Rpb25zIGZvciAnXCIgKyBwcm9wICsgXCInXCIpO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wKTtcbiAgICAgICAgdmFyIG5ld0Rlc2NyaXB0b3IgPSBwcm9wZXJ0eURlY29yYXRvcnMucmVkdWNlKGZ1bmN0aW9uIChhY2NEZXNjcmlwdG9yLCBkZWNvcmF0b3IpIHsgcmV0dXJuIGRlY29yYXRvcih0YXJnZXQsIHByb3AsIGFjY0Rlc2NyaXB0b3IpOyB9LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgaWYgKG5ld0Rlc2NyaXB0b3IpXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wLCBuZXdEZXNjcmlwdG9yKTtcbiAgICB9O1xuICAgIGZvciAodmFyIHByb3AgaW4gZGVjb3JhdG9ycykge1xuICAgICAgICBfbG9vcF8xKHByb3ApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpbmc7XG59XG5cbmZ1bmN0aW9uIGV4dGVuZE9ic2VydmFibGUodGFyZ2V0LCBwcm9wZXJ0aWVzLCBkZWNvcmF0b3JzLCBvcHRpb25zKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBpbnZhcmlhbnQoYXJndW1lbnRzLmxlbmd0aCA+PSAyICYmIGFyZ3VtZW50cy5sZW5ndGggPD0gNCwgXCInZXh0ZW5kT2JzZXJ2YWJsZScgZXhwZWN0ZWQgMi00IGFyZ3VtZW50c1wiKTtcbiAgICAgICAgaW52YXJpYW50KHR5cGVvZiB0YXJnZXQgPT09IFwib2JqZWN0XCIsIFwiJ2V4dGVuZE9ic2VydmFibGUnIGV4cGVjdHMgYW4gb2JqZWN0IGFzIGZpcnN0IGFyZ3VtZW50XCIpO1xuICAgICAgICBpbnZhcmlhbnQoIWlzT2JzZXJ2YWJsZU1hcCh0YXJnZXQpLCBcIidleHRlbmRPYnNlcnZhYmxlJyBzaG91bGQgbm90IGJlIHVzZWQgb24gbWFwcywgdXNlIG1hcC5tZXJnZSBpbnN0ZWFkXCIpO1xuICAgIH1cbiAgICBvcHRpb25zID0gYXNDcmVhdGVPYnNlcnZhYmxlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB2YXIgZGVmYXVsdERlY29yYXRvciA9IGdldERlZmF1bHREZWNvcmF0b3JGcm9tT2JqZWN0T3B0aW9ucyhvcHRpb25zKTtcbiAgICBpbml0aWFsaXplSW5zdGFuY2UodGFyZ2V0KTsgLy8gRml4ZXMgIzE3NDBcbiAgICBhc09ic2VydmFibGVPYmplY3QodGFyZ2V0LCBvcHRpb25zLm5hbWUsIGRlZmF1bHREZWNvcmF0b3IuZW5oYW5jZXIpOyAvLyBtYWtlIHN1cmUgb2JqZWN0IGlzIG9ic2VydmFibGUsIGV2ZW4gd2l0aG91dCBpbml0aWFsIHByb3BzXG4gICAgaWYgKHByb3BlcnRpZXMpXG4gICAgICAgIGV4dGVuZE9ic2VydmFibGVPYmplY3RXaXRoUHJvcGVydGllcyh0YXJnZXQsIHByb3BlcnRpZXMsIGRlY29yYXRvcnMsIGRlZmF1bHREZWNvcmF0b3IpO1xuICAgIHJldHVybiB0YXJnZXQ7XG59XG5mdW5jdGlvbiBnZXREZWZhdWx0RGVjb3JhdG9yRnJvbU9iamVjdE9wdGlvbnMob3B0aW9ucykge1xuICAgIHJldHVybiBvcHRpb25zLmRlZmF1bHREZWNvcmF0b3IgfHwgKG9wdGlvbnMuZGVlcCA9PT0gZmFsc2UgPyByZWZEZWNvcmF0b3IgOiBkZWVwRGVjb3JhdG9yKTtcbn1cbmZ1bmN0aW9uIGV4dGVuZE9ic2VydmFibGVPYmplY3RXaXRoUHJvcGVydGllcyh0YXJnZXQsIHByb3BlcnRpZXMsIGRlY29yYXRvcnMsIGRlZmF1bHREZWNvcmF0b3IpIHtcbiAgICB2YXIgZV8xLCBfYSwgZV8yLCBfYjtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGludmFyaWFudCghaXNPYnNlcnZhYmxlKHByb3BlcnRpZXMpLCBcIkV4dGVuZGluZyBhbiBvYmplY3Qgd2l0aCBhbm90aGVyIG9ic2VydmFibGUgKG9iamVjdCkgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIGNvbnN0cnVjdCBhbiBleHBsaWNpdCBwcm9wZXJ0eW1hcCwgdXNpbmcgYHRvSlNgIGlmIG5lZWQuIFNlZSBpc3N1ZSAjNTQwXCIpO1xuICAgICAgICBpZiAoZGVjb3JhdG9ycykge1xuICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRQbGFpbk9iamVjdEtleXMoZGVjb3JhdG9ycyk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleXNfMSA9IF9fdmFsdWVzKGtleXMpLCBrZXlzXzFfMSA9IGtleXNfMS5uZXh0KCk7ICFrZXlzXzFfMS5kb25lOyBrZXlzXzFfMSA9IGtleXNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gcHJvcGVydGllcykpXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsKFwiVHJ5aW5nIHRvIGRlY2xhcmUgYSBkZWNvcmF0b3IgZm9yIHVuc3BlY2lmaWVkIHByb3BlcnR5ICdcIiArIHN0cmluZ2lmeUtleShrZXkpICsgXCInXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5c18xXzEgJiYgIWtleXNfMV8xLmRvbmUgJiYgKF9hID0ga2V5c18xLnJldHVybikpIF9hLmNhbGwoa2V5c18xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0QmF0Y2goKTtcbiAgICB0cnkge1xuICAgICAgICB2YXIga2V5cyA9IG93bktleXMocHJvcGVydGllcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXlzXzIgPSBfX3ZhbHVlcyhrZXlzKSwga2V5c18yXzEgPSBrZXlzXzIubmV4dCgpOyAha2V5c18yXzEuZG9uZTsga2V5c18yXzEgPSBrZXlzXzIubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNfMl8xLnZhbHVlO1xuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm9wZXJ0aWVzLCBrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KHByb3BlcnRpZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmFpbChcIidleHRlbmRPYnNlcnZhYmxlJyBvbmx5IGFjY2VwdHMgcGxhaW4gb2JqZWN0cyBhcyBzZWNvbmQgYXJndW1lbnRcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NvbXB1dGVkKGRlc2NyaXB0b3IudmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgZmFpbChcIlBhc3NpbmcgYSAnY29tcHV0ZWQnIGFzIGluaXRpYWwgcHJvcGVydHkgdmFsdWUgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBieSBleHRlbmRPYnNlcnZhYmxlLiBVc2UgYSBnZXR0ZXIgb3IgZGVjb3JhdG9yIGluc3RlYWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBkZWNvcmF0b3IgPSBkZWNvcmF0b3JzICYmIGtleSBpbiBkZWNvcmF0b3JzXG4gICAgICAgICAgICAgICAgICAgID8gZGVjb3JhdG9yc1trZXldXG4gICAgICAgICAgICAgICAgICAgIDogZGVzY3JpcHRvci5nZXRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29tcHV0ZWREZWNvcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdERlY29yYXRvcjtcbiAgICAgICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIHR5cGVvZiBkZWNvcmF0b3IgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgZmFpbChcIk5vdCBhIHZhbGlkIGRlY29yYXRvciBmb3IgJ1wiICsgc3RyaW5naWZ5S2V5KGtleSkgKyBcIicsIGdvdDogXCIgKyBkZWNvcmF0b3IpO1xuICAgICAgICAgICAgICAgIHZhciByZXN1bHREZXNjcmlwdG9yID0gZGVjb3JhdG9yKHRhcmdldCwga2V5LCBkZXNjcmlwdG9yLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0RGVzY3JpcHRvciAvLyBvdGhlcndpc2UsIGFzc3VtZSBhbHJlYWR5IGFwcGxpZWQsIGR1ZSB0byBgYXBwbHlUb0luc3RhbmNlYFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByZXN1bHREZXNjcmlwdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleXNfMl8xICYmICFrZXlzXzJfMS5kb25lICYmIChfYiA9IGtleXNfMi5yZXR1cm4pKSBfYi5jYWxsKGtleXNfMik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIGVuZEJhdGNoKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBnZXREZXBlbmRlbmN5VHJlZSh0aGluZywgcHJvcGVydHkpIHtcbiAgICByZXR1cm4gbm9kZVRvRGVwZW5kZW5jeVRyZWUoZ2V0QXRvbSh0aGluZywgcHJvcGVydHkpKTtcbn1cbmZ1bmN0aW9uIG5vZGVUb0RlcGVuZGVuY3lUcmVlKG5vZGUpIHtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiBub2RlLm5hbWVcbiAgICB9O1xuICAgIGlmIChub2RlLm9ic2VydmluZyAmJiBub2RlLm9ic2VydmluZy5sZW5ndGggPiAwKVxuICAgICAgICByZXN1bHQuZGVwZW5kZW5jaWVzID0gdW5pcXVlKG5vZGUub2JzZXJ2aW5nKS5tYXAobm9kZVRvRGVwZW5kZW5jeVRyZWUpO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRPYnNlcnZlclRyZWUodGhpbmcsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIG5vZGVUb09ic2VydmVyVHJlZShnZXRBdG9tKHRoaW5nLCBwcm9wZXJ0eSkpO1xufVxuZnVuY3Rpb24gbm9kZVRvT2JzZXJ2ZXJUcmVlKG5vZGUpIHtcbiAgICB2YXIgcmVzdWx0ID0ge1xuICAgICAgICBuYW1lOiBub2RlLm5hbWVcbiAgICB9O1xuICAgIGlmIChoYXNPYnNlcnZlcnMobm9kZSkpXG4gICAgICAgIHJlc3VsdC5vYnNlcnZlcnMgPSBBcnJheS5mcm9tKGdldE9ic2VydmVycyhub2RlKSkubWFwKG5vZGVUb09ic2VydmVyVHJlZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxudmFyIGdlbmVyYXRvcklkID0gMDtcbmZ1bmN0aW9uIEZsb3dDYW5jZWxsYXRpb25FcnJvcigpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSBcIkZMT1dfQ0FOQ0VMTEVEXCI7XG59XG5GbG93Q2FuY2VsbGF0aW9uRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuZnVuY3Rpb24gaXNGbG93Q2FuY2VsbGF0aW9uRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBGbG93Q2FuY2VsbGF0aW9uRXJyb3I7XG59XG5mdW5jdGlvbiBmbG93KGdlbmVyYXRvcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAxKVxuICAgICAgICBmYWlsKCEhcHJvY2Vzcy5lbnYuTk9ERV9FTlYgJiYgXCJGbG93IGV4cGVjdHMgMSBhcmd1bWVudCBhbmQgY2Fubm90IGJlIHVzZWQgYXMgZGVjb3JhdG9yXCIpO1xuICAgIHZhciBuYW1lID0gZ2VuZXJhdG9yLm5hbWUgfHwgXCI8dW5uYW1lZCBmbG93PlwiO1xuICAgIC8vIEltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS90ai9jby9ibG9iL21hc3Rlci9pbmRleC5qc1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjdHggPSB0aGlzO1xuICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgdmFyIHJ1bklkID0gKytnZW5lcmF0b3JJZDtcbiAgICAgICAgdmFyIGdlbiA9IGFjdGlvbihuYW1lICsgXCIgLSBydW5pZDogXCIgKyBydW5JZCArIFwiIC0gaW5pdFwiLCBnZW5lcmF0b3IpLmFwcGx5KGN0eCwgYXJncyk7XG4gICAgICAgIHZhciByZWplY3RvcjtcbiAgICAgICAgdmFyIHBlbmRpbmdQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciBzdGVwSWQgPSAwO1xuICAgICAgICAgICAgcmVqZWN0b3IgPSByZWplY3Q7XG4gICAgICAgICAgICBmdW5jdGlvbiBvbkZ1bGZpbGxlZChyZXMpIHtcbiAgICAgICAgICAgICAgICBwZW5kaW5nUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB2YXIgcmV0O1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldCA9IGFjdGlvbihuYW1lICsgXCIgLSBydW5pZDogXCIgKyBydW5JZCArIFwiIC0geWllbGQgXCIgKyBzdGVwSWQrKywgZ2VuLm5leHQpLmNhbGwoZ2VuLCByZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KHJldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBvblJlamVjdGVkKGVycikge1xuICAgICAgICAgICAgICAgIHBlbmRpbmdQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHZhciByZXQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0ID0gYWN0aW9uKG5hbWUgKyBcIiAtIHJ1bmlkOiBcIiArIHJ1bklkICsgXCIgLSB5aWVsZCBcIiArIHN0ZXBJZCsrLCBnZW4udGhyb3cpLmNhbGwoZ2VuLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KHJldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmdW5jdGlvbiBuZXh0KHJldCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXQgJiYgdHlwZW9mIHJldC50aGVuID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYW4gYXN5bmMgaXRlcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgcmV0LnRoZW4obmV4dCwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmV0LmRvbmUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJldC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcGVuZGluZ1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUocmV0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVuZGluZ1Byb21pc2UudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvbkZ1bGZpbGxlZCh1bmRlZmluZWQpOyAvLyBraWNrIG9mZiB0aGUgcHJvY2Vzc1xuICAgICAgICB9KTtcbiAgICAgICAgcHJvbWlzZS5jYW5jZWwgPSBhY3Rpb24obmFtZSArIFwiIC0gcnVuaWQ6IFwiICsgcnVuSWQgKyBcIiAtIGNhbmNlbFwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nUHJvbWlzZSlcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsUHJvbWlzZShwZW5kaW5nUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgLy8gRmluYWxseSBibG9jayBjYW4gcmV0dXJuIChvciB5aWVsZCkgc3R1ZmYuLlxuICAgICAgICAgICAgICAgIHZhciByZXMgPSBnZW4ucmV0dXJuKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgLy8gZWF0IGFueXRoaW5nIHRoYXQgcHJvbWlzZSB3b3VsZCBkbywgaXQncyBjYW5jZWxsZWQhXG4gICAgICAgICAgICAgICAgdmFyIHlpZWxkZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHJlcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgeWllbGRlZFByb21pc2UudGhlbihub29wLCBub29wKTtcbiAgICAgICAgICAgICAgICBjYW5jZWxQcm9taXNlKHlpZWxkZWRQcm9taXNlKTsgLy8gbWF5YmUgaXQgY2FuIGJlIGNhbmNlbGxlZCA6KVxuICAgICAgICAgICAgICAgIC8vIHJlamVjdCBvdXIgb3JpZ2luYWwgcHJvbWlzZVxuICAgICAgICAgICAgICAgIHJlamVjdG9yKG5ldyBGbG93Q2FuY2VsbGF0aW9uRXJyb3IoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdG9yKGUpOyAvLyB0aGVyZSBjb3VsZCBiZSBhIHRocm93aW5nIGZpbmFsbHkgYmxvY2tcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG59XG5mdW5jdGlvbiBjYW5jZWxQcm9taXNlKHByb21pc2UpIHtcbiAgICBpZiAodHlwZW9mIHByb21pc2UuY2FuY2VsID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHByb21pc2UuY2FuY2VsKCk7XG59XG5cbmZ1bmN0aW9uIGludGVyY2VwdFJlYWRzKHRoaW5nLCBwcm9wT3JIYW5kbGVyLCBoYW5kbGVyKSB7XG4gICAgdmFyIHRhcmdldDtcbiAgICBpZiAoaXNPYnNlcnZhYmxlTWFwKHRoaW5nKSB8fCBpc09ic2VydmFibGVBcnJheSh0aGluZykgfHwgaXNPYnNlcnZhYmxlVmFsdWUodGhpbmcpKSB7XG4gICAgICAgIHRhcmdldCA9IGdldEFkbWluaXN0cmF0aW9uKHRoaW5nKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KHRoaW5nKSkge1xuICAgICAgICBpZiAodHlwZW9mIHByb3BPckhhbmRsZXIgIT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgICBcIkludGVyY2VwdFJlYWRzIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBhIHNwZWNpZmljIHByb3BlcnR5LCBub3Qgd2l0aCBhbiBvYmplY3QgaW4gZ2VuZXJhbFwiKTtcbiAgICAgICAgdGFyZ2V0ID0gZ2V0QWRtaW5pc3RyYXRpb24odGhpbmcsIHByb3BPckhhbmRsZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICBcIkV4cGVjdGVkIG9ic2VydmFibGUgbWFwLCBvYmplY3Qgb3IgYXJyYXkgYXMgZmlyc3QgYXJyYXlcIik7XG4gICAgfVxuICAgIGlmICh0YXJnZXQuZGVoYW5jZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFwiQW4gaW50ZXJjZXB0IHJlYWRlciB3YXMgYWxyZWFkeSBlc3RhYmxpc2hlZFwiKTtcbiAgICB0YXJnZXQuZGVoYW5jZXIgPSB0eXBlb2YgcHJvcE9ySGFuZGxlciA9PT0gXCJmdW5jdGlvblwiID8gcHJvcE9ySGFuZGxlciA6IGhhbmRsZXI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGFyZ2V0LmRlaGFuY2VyID0gdW5kZWZpbmVkO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGludGVyY2VwdCh0aGluZywgcHJvcE9ySGFuZGxlciwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICByZXR1cm4gaW50ZXJjZXB0UHJvcGVydHkodGhpbmcsIHByb3BPckhhbmRsZXIsIGhhbmRsZXIpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGludGVyY2VwdEludGVyY2VwdGFibGUodGhpbmcsIHByb3BPckhhbmRsZXIpO1xufVxuZnVuY3Rpb24gaW50ZXJjZXB0SW50ZXJjZXB0YWJsZSh0aGluZywgaGFuZGxlcikge1xuICAgIHJldHVybiBnZXRBZG1pbmlzdHJhdGlvbih0aGluZykuaW50ZXJjZXB0KGhhbmRsZXIpO1xufVxuZnVuY3Rpb24gaW50ZXJjZXB0UHJvcGVydHkodGhpbmcsIHByb3BlcnR5LCBoYW5kbGVyKSB7XG4gICAgcmV0dXJuIGdldEFkbWluaXN0cmF0aW9uKHRoaW5nLCBwcm9wZXJ0eSkuaW50ZXJjZXB0KGhhbmRsZXIpO1xufVxuXG5mdW5jdGlvbiBfaXNDb21wdXRlZCh2YWx1ZSwgcHJvcGVydHkpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChwcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChpc09ic2VydmFibGVPYmplY3QodmFsdWUpID09PSBmYWxzZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCF2YWx1ZVskbW9ieF0udmFsdWVzLmhhcyhwcm9wZXJ0eSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBhdG9tID0gZ2V0QXRvbSh2YWx1ZSwgcHJvcGVydHkpO1xuICAgICAgICByZXR1cm4gaXNDb21wdXRlZFZhbHVlKGF0b20pO1xuICAgIH1cbiAgICByZXR1cm4gaXNDb21wdXRlZFZhbHVlKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzQ29tcHV0ZWQodmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpXG4gICAgICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgXCJpc0NvbXB1dGVkIGV4cGVjdHMgb25seSAxIGFyZ3VtZW50LiBVc2UgaXNPYnNlcnZhYmxlUHJvcCB0byBpbnNwZWN0IHRoZSBvYnNlcnZhYmlsaXR5IG9mIGEgcHJvcGVydHlcIik7XG4gICAgcmV0dXJuIF9pc0NvbXB1dGVkKHZhbHVlKTtcbn1cbmZ1bmN0aW9uIGlzQ29tcHV0ZWRQcm9wKHZhbHVlLCBwcm9wTmFtZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcE5hbWUgIT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgXCJpc0NvbXB1dGVkIGV4cGVjdGVkIGEgcHJvcGVydHkgbmFtZSBhcyBzZWNvbmQgYXJndW1lbnRcIik7XG4gICAgcmV0dXJuIF9pc0NvbXB1dGVkKHZhbHVlLCBwcm9wTmFtZSk7XG59XG5cbmZ1bmN0aW9uIF9pc09ic2VydmFibGUodmFsdWUsIHByb3BlcnR5KSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAocHJvcGVydHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICAoaXNPYnNlcnZhYmxlTWFwKHZhbHVlKSB8fCBpc09ic2VydmFibGVBcnJheSh2YWx1ZSkpKVxuICAgICAgICAgICAgcmV0dXJuIGZhaWwoXCJpc09ic2VydmFibGUob2JqZWN0LCBwcm9wZXJ0eU5hbWUpIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGFycmF5cyBhbmQgbWFwcy4gVXNlIG1hcC5oYXMgb3IgYXJyYXkubGVuZ3RoIGluc3RlYWQuXCIpO1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlWyRtb2J4XS52YWx1ZXMuaGFzKHByb3BlcnR5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEZvciBmaXJzdCBjaGVjaywgc2VlICM3MDFcbiAgICByZXR1cm4gKGlzT2JzZXJ2YWJsZU9iamVjdCh2YWx1ZSkgfHxcbiAgICAgICAgISF2YWx1ZVskbW9ieF0gfHxcbiAgICAgICAgaXNBdG9tKHZhbHVlKSB8fFxuICAgICAgICBpc1JlYWN0aW9uKHZhbHVlKSB8fFxuICAgICAgICBpc0NvbXB1dGVkVmFsdWUodmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGlzT2JzZXJ2YWJsZSh2YWx1ZSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAxKVxuICAgICAgICBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgXCJpc09ic2VydmFibGUgZXhwZWN0cyBvbmx5IDEgYXJndW1lbnQuIFVzZSBpc09ic2VydmFibGVQcm9wIHRvIGluc3BlY3QgdGhlIG9ic2VydmFiaWxpdHkgb2YgYSBwcm9wZXJ0eVwiKTtcbiAgICByZXR1cm4gX2lzT2JzZXJ2YWJsZSh2YWx1ZSk7XG59XG5mdW5jdGlvbiBpc09ic2VydmFibGVQcm9wKHZhbHVlLCBwcm9wTmFtZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcE5hbWUgIT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBcImV4cGVjdGVkIGEgcHJvcGVydHkgbmFtZSBhcyBzZWNvbmQgYXJndW1lbnRcIik7XG4gICAgcmV0dXJuIF9pc09ic2VydmFibGUodmFsdWUsIHByb3BOYW1lKTtcbn1cblxuZnVuY3Rpb24ga2V5cyhvYmopIHtcbiAgICBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9ialskbW9ieF0uZ2V0S2V5cygpO1xuICAgIH1cbiAgICBpZiAoaXNPYnNlcnZhYmxlTWFwKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20ob2JqLmtleXMoKSk7XG4gICAgfVxuICAgIGlmIChpc09ic2VydmFibGVTZXQob2JqKSkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShvYmoua2V5cygpKTtcbiAgICB9XG4gICAgaWYgKGlzT2JzZXJ2YWJsZUFycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iai5tYXAoZnVuY3Rpb24gKF8sIGluZGV4KSB7IHJldHVybiBpbmRleDsgfSk7XG4gICAgfVxuICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICBcIidrZXlzKCknIGNhbiBvbmx5IGJlIHVzZWQgb24gb2JzZXJ2YWJsZSBvYmplY3RzLCBhcnJheXMsIHNldHMgYW5kIG1hcHNcIik7XG59XG5mdW5jdGlvbiB2YWx1ZXMob2JqKSB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdChvYmopKSB7XG4gICAgICAgIHJldHVybiBrZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIG9ialtrZXldOyB9KTtcbiAgICB9XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU1hcChvYmopKSB7XG4gICAgICAgIHJldHVybiBrZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIG9iai5nZXQoa2V5KTsgfSk7XG4gICAgfVxuICAgIGlmIChpc09ic2VydmFibGVTZXQob2JqKSkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShvYmoudmFsdWVzKCkpO1xuICAgIH1cbiAgICBpZiAoaXNPYnNlcnZhYmxlQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICBcIid2YWx1ZXMoKScgY2FuIG9ubHkgYmUgdXNlZCBvbiBvYnNlcnZhYmxlIG9iamVjdHMsIGFycmF5cywgc2V0cyBhbmQgbWFwc1wiKTtcbn1cbmZ1bmN0aW9uIGVudHJpZXMob2JqKSB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdChvYmopKSB7XG4gICAgICAgIHJldHVybiBrZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIFtrZXksIG9ialtrZXldXTsgfSk7XG4gICAgfVxuICAgIGlmIChpc09ic2VydmFibGVNYXAob2JqKSkge1xuICAgICAgICByZXR1cm4ga2V5cyhvYmopLm1hcChmdW5jdGlvbiAoa2V5KSB7IHJldHVybiBba2V5LCBvYmouZ2V0KGtleSldOyB9KTtcbiAgICB9XG4gICAgaWYgKGlzT2JzZXJ2YWJsZVNldChvYmopKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG9iai5lbnRyaWVzKCkpO1xuICAgIH1cbiAgICBpZiAoaXNPYnNlcnZhYmxlQXJyYXkob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqLm1hcChmdW5jdGlvbiAoa2V5LCBpbmRleCkgeyByZXR1cm4gW2luZGV4LCBrZXldOyB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgIFwiJ2VudHJpZXMoKScgY2FuIG9ubHkgYmUgdXNlZCBvbiBvYnNlcnZhYmxlIG9iamVjdHMsIGFycmF5cyBhbmQgbWFwc1wiKTtcbn1cbmZ1bmN0aW9uIHNldChvYmosIGtleSwgdmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMiAmJiAhaXNPYnNlcnZhYmxlU2V0KG9iaikpIHtcbiAgICAgICAgc3RhcnRCYXRjaCgpO1xuICAgICAgICB2YXIgdmFsdWVzXzEgPSBrZXk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXlfMSBpbiB2YWx1ZXNfMSlcbiAgICAgICAgICAgICAgICBzZXQob2JqLCBrZXlfMSwgdmFsdWVzXzFba2V5XzFdKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGVuZEJhdGNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KG9iaikpIHtcbiAgICAgICAgdmFyIGFkbSA9IG9ialskbW9ieF07XG4gICAgICAgIHZhciBleGlzdGluZ09ic2VydmFibGUgPSBhZG0udmFsdWVzLmdldChrZXkpO1xuICAgICAgICBpZiAoZXhpc3RpbmdPYnNlcnZhYmxlKSB7XG4gICAgICAgICAgICBhZG0ud3JpdGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhZG0uYWRkT2JzZXJ2YWJsZVByb3Aoa2V5LCB2YWx1ZSwgYWRtLmRlZmF1bHRFbmhhbmNlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlTWFwKG9iaikpIHtcbiAgICAgICAgb2JqLnNldChrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlU2V0KG9iaikpIHtcbiAgICAgICAgb2JqLmFkZChrZXkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09ic2VydmFibGVBcnJheShvYmopKSB7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSBcIm51bWJlclwiKVxuICAgICAgICAgICAga2V5ID0gcGFyc2VJbnQoa2V5LCAxMCk7XG4gICAgICAgIGludmFyaWFudChrZXkgPj0gMCwgXCJOb3QgYSB2YWxpZCBpbmRleDogJ1wiICsga2V5ICsgXCInXCIpO1xuICAgICAgICBzdGFydEJhdGNoKCk7XG4gICAgICAgIGlmIChrZXkgPj0gb2JqLmxlbmd0aClcbiAgICAgICAgICAgIG9iai5sZW5ndGggPSBrZXkgKyAxO1xuICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgICAgICBlbmRCYXRjaCgpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICBcIidzZXQoKScgY2FuIG9ubHkgYmUgdXNlZCBvbiBvYnNlcnZhYmxlIG9iamVjdHMsIGFycmF5cyBhbmQgbWFwc1wiKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZW1vdmUob2JqLCBrZXkpIHtcbiAgICBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KG9iaikpIHtcbiAgICAgICAgb2JqWyRtb2J4XS5yZW1vdmUoa2V5KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNPYnNlcnZhYmxlTWFwKG9iaikpIHtcbiAgICAgICAgb2JqLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09ic2VydmFibGVTZXQob2JqKSkge1xuICAgICAgICBvYmouZGVsZXRlKGtleSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZUFycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgIT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICBrZXkgPSBwYXJzZUludChrZXksIDEwKTtcbiAgICAgICAgaW52YXJpYW50KGtleSA+PSAwLCBcIk5vdCBhIHZhbGlkIGluZGV4OiAnXCIgKyBrZXkgKyBcIidcIik7XG4gICAgICAgIG9iai5zcGxpY2Uoa2V5LCAxKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgXCIncmVtb3ZlKCknIGNhbiBvbmx5IGJlIHVzZWQgb24gb2JzZXJ2YWJsZSBvYmplY3RzLCBhcnJheXMgYW5kIG1hcHNcIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdChvYmopKSB7XG4gICAgICAgIC8vIHJldHVybiBrZXlzKG9iaikuaW5kZXhPZihrZXkpID49IDBcbiAgICAgICAgdmFyIGFkbSA9IGdldEFkbWluaXN0cmF0aW9uKG9iaik7XG4gICAgICAgIHJldHVybiBhZG0uaGFzKGtleSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZU1hcChvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzKGtleSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZVNldChvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmouaGFzKGtleSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZUFycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIGtleSA+PSAwICYmIGtleSA8IG9iai5sZW5ndGg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgIFwiJ2hhcygpJyBjYW4gb25seSBiZSB1c2VkIG9uIG9ic2VydmFibGUgb2JqZWN0cywgYXJyYXlzIGFuZCBtYXBzXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldChvYmosIGtleSkge1xuICAgIGlmICghaGFzKG9iaiwga2V5KSlcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYnNlcnZhYmxlT2JqZWN0KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9ialtrZXldO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09ic2VydmFibGVNYXAob2JqKSkge1xuICAgICAgICByZXR1cm4gb2JqLmdldChrZXkpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc09ic2VydmFibGVBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBvYmpba2V5XTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgXCInZ2V0KCknIGNhbiBvbmx5IGJlIHVzZWQgb24gb2JzZXJ2YWJsZSBvYmplY3RzLCBhcnJheXMgYW5kIG1hcHNcIik7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBvYnNlcnZlKHRoaW5nLCBwcm9wT3JDYiwgY2JPckZpcmUsIGZpcmVJbW1lZGlhdGVseSkge1xuICAgIGlmICh0eXBlb2YgY2JPckZpcmUgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgcmV0dXJuIG9ic2VydmVPYnNlcnZhYmxlUHJvcGVydHkodGhpbmcsIHByb3BPckNiLCBjYk9yRmlyZSwgZmlyZUltbWVkaWF0ZWx5KTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBvYnNlcnZlT2JzZXJ2YWJsZSh0aGluZywgcHJvcE9yQ2IsIGNiT3JGaXJlKTtcbn1cbmZ1bmN0aW9uIG9ic2VydmVPYnNlcnZhYmxlKHRoaW5nLCBsaXN0ZW5lciwgZmlyZUltbWVkaWF0ZWx5KSB7XG4gICAgcmV0dXJuIGdldEFkbWluaXN0cmF0aW9uKHRoaW5nKS5vYnNlcnZlKGxpc3RlbmVyLCBmaXJlSW1tZWRpYXRlbHkpO1xufVxuZnVuY3Rpb24gb2JzZXJ2ZU9ic2VydmFibGVQcm9wZXJ0eSh0aGluZywgcHJvcGVydHksIGxpc3RlbmVyLCBmaXJlSW1tZWRpYXRlbHkpIHtcbiAgICByZXR1cm4gZ2V0QWRtaW5pc3RyYXRpb24odGhpbmcsIHByb3BlcnR5KS5vYnNlcnZlKGxpc3RlbmVyLCBmaXJlSW1tZWRpYXRlbHkpO1xufVxuXG52YXIgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgZGV0ZWN0Q3ljbGVzOiB0cnVlLFxuICAgIGV4cG9ydE1hcHNBc09iamVjdHM6IHRydWUsXG4gICAgcmVjdXJzZUV2ZXJ5dGhpbmc6IGZhbHNlXG59O1xuZnVuY3Rpb24gY2FjaGUobWFwLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuZGV0ZWN0Q3ljbGVzKVxuICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHRvSlNIZWxwZXIoc291cmNlLCBvcHRpb25zLCBfX2FscmVhZHlTZWVuKSB7XG4gICAgaWYgKCFvcHRpb25zLnJlY3Vyc2VFdmVyeXRoaW5nICYmICFpc09ic2VydmFibGUoc291cmNlKSlcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICBpZiAodHlwZW9mIHNvdXJjZSAhPT0gXCJvYmplY3RcIilcbiAgICAgICAgcmV0dXJuIHNvdXJjZTtcbiAgICAvLyBEaXJlY3RseSByZXR1cm4gbnVsbCBpZiBzb3VyY2UgaXMgbnVsbFxuICAgIGlmIChzb3VyY2UgPT09IG51bGwpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIC8vIERpcmVjdGx5IHJldHVybiB0aGUgRGF0ZSBvYmplY3QgaXRzZWxmIGlmIGNvbnRhaW5lZCBpbiB0aGUgb2JzZXJ2YWJsZVxuICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICByZXR1cm4gc291cmNlO1xuICAgIGlmIChpc09ic2VydmFibGVWYWx1ZShzb3VyY2UpKVxuICAgICAgICByZXR1cm4gdG9KU0hlbHBlcihzb3VyY2UuZ2V0KCksIG9wdGlvbnMsIF9fYWxyZWFkeVNlZW4pO1xuICAgIC8vIG1ha2Ugc3VyZSB3ZSB0cmFjayB0aGUga2V5cyBvZiB0aGUgb2JqZWN0XG4gICAgaWYgKGlzT2JzZXJ2YWJsZShzb3VyY2UpKVxuICAgICAgICBrZXlzKHNvdXJjZSk7XG4gICAgdmFyIGRldGVjdEN5Y2xlcyA9IG9wdGlvbnMuZGV0ZWN0Q3ljbGVzID09PSB0cnVlO1xuICAgIGlmIChkZXRlY3RDeWNsZXMgJiYgc291cmNlICE9PSBudWxsICYmIF9fYWxyZWFkeVNlZW4uaGFzKHNvdXJjZSkpIHtcbiAgICAgICAgcmV0dXJuIF9fYWxyZWFkeVNlZW4uZ2V0KHNvdXJjZSk7XG4gICAgfVxuICAgIGlmIChpc09ic2VydmFibGVBcnJheShzb3VyY2UpIHx8IEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICB2YXIgcmVzXzEgPSBjYWNoZShfX2FscmVhZHlTZWVuLCBzb3VyY2UsIFtdLCBvcHRpb25zKTtcbiAgICAgICAgdmFyIHRvQWRkID0gc291cmNlLm1hcChmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHRvSlNIZWxwZXIodmFsdWUsIG9wdGlvbnMsIF9fYWxyZWFkeVNlZW4pOyB9KTtcbiAgICAgICAgcmVzXzEubGVuZ3RoID0gdG9BZGQubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRvQWRkLmxlbmd0aDsgaSA8IGw7IGkrKylcbiAgICAgICAgICAgIHJlc18xW2ldID0gdG9BZGRbaV07XG4gICAgICAgIHJldHVybiByZXNfMTtcbiAgICB9XG4gICAgaWYgKGlzT2JzZXJ2YWJsZVNldChzb3VyY2UpIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpID09PSBTZXQucHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmV4cG9ydE1hcHNBc09iamVjdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB2YXIgcmVzXzIgPSBjYWNoZShfX2FscmVhZHlTZWVuLCBzb3VyY2UsIG5ldyBTZXQoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXNfMi5hZGQodG9KU0hlbHBlcih2YWx1ZSwgb3B0aW9ucywgX19hbHJlYWR5U2VlbikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzXzI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgcmVzXzMgPSBjYWNoZShfX2FscmVhZHlTZWVuLCBzb3VyY2UsIFtdLCBvcHRpb25zKTtcbiAgICAgICAgICAgIHNvdXJjZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc18zLnB1c2godG9KU0hlbHBlcih2YWx1ZSwgb3B0aW9ucywgX19hbHJlYWR5U2VlbikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzXzM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzT2JzZXJ2YWJsZU1hcChzb3VyY2UpIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2UpID09PSBNYXAucHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmV4cG9ydE1hcHNBc09iamVjdHMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB2YXIgcmVzXzQgPSBjYWNoZShfX2FscmVhZHlTZWVuLCBzb3VyY2UsIG5ldyBNYXAoKSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIHJlc180LnNldChrZXksIHRvSlNIZWxwZXIodmFsdWUsIG9wdGlvbnMsIF9fYWxyZWFkeVNlZW4pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc180O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIHJlc181ID0gY2FjaGUoX19hbHJlYWR5U2Vlbiwgc291cmNlLCB7fSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBzb3VyY2UuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkge1xuICAgICAgICAgICAgICAgIHJlc181W2tleV0gPSB0b0pTSGVscGVyKHZhbHVlLCBvcHRpb25zLCBfX2FscmVhZHlTZWVuKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc181O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBzaXR1YXRpb24gdGhhdCBzb3VyY2UgaXMgYW4gT2JzZXJ2YWJsZU9iamVjdCBvciBhIHBsYWluIG9iamVjdFxuICAgIHZhciByZXMgPSBjYWNoZShfX2FscmVhZHlTZWVuLCBzb3VyY2UsIHt9LCBvcHRpb25zKTtcbiAgICBnZXRQbGFpbk9iamVjdEtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmVzW2tleV0gPSB0b0pTSGVscGVyKHNvdXJjZVtrZXldLCBvcHRpb25zLCBfX2FscmVhZHlTZWVuKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xufVxuZnVuY3Rpb24gdG9KUyhzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcImJvb2xlYW5cIilcbiAgICAgICAgb3B0aW9ucyA9IHsgZGV0ZWN0Q3ljbGVzOiBvcHRpb25zIH07XG4gICAgaWYgKCFvcHRpb25zKVxuICAgICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgb3B0aW9ucy5kZXRlY3RDeWNsZXMgPVxuICAgICAgICBvcHRpb25zLmRldGVjdEN5Y2xlcyA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG9wdGlvbnMucmVjdXJzZUV2ZXJ5dGhpbmcgPT09IHRydWVcbiAgICAgICAgICAgIDogb3B0aW9ucy5kZXRlY3RDeWNsZXMgPT09IHRydWU7XG4gICAgdmFyIF9fYWxyZWFkeVNlZW47XG4gICAgaWYgKG9wdGlvbnMuZGV0ZWN0Q3ljbGVzKVxuICAgICAgICBfX2FscmVhZHlTZWVuID0gbmV3IE1hcCgpO1xuICAgIHJldHVybiB0b0pTSGVscGVyKHNvdXJjZSwgb3B0aW9ucywgX19hbHJlYWR5U2Vlbik7XG59XG5cbmZ1bmN0aW9uIHRyYWNlKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgZW50ZXJCcmVha1BvaW50ID0gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09IFwiYm9vbGVhblwiKVxuICAgICAgICBlbnRlckJyZWFrUG9pbnQgPSBhcmdzLnBvcCgpO1xuICAgIHZhciBkZXJpdmF0aW9uID0gZ2V0QXRvbUZyb21BcmdzKGFyZ3MpO1xuICAgIGlmICghZGVyaXZhdGlvbikge1xuICAgICAgICByZXR1cm4gZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgIFwiJ3RyYWNlKGJyZWFrPyknIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIGEgdHJhY2tlZCBjb21wdXRlZCB2YWx1ZSBvciBhIFJlYWN0aW9uLiBDb25zaWRlciBwYXNzaW5nIGluIHRoZSBjb21wdXRlZCB2YWx1ZSBvciByZWFjdGlvbiBleHBsaWNpdGx5XCIpO1xuICAgIH1cbiAgICBpZiAoZGVyaXZhdGlvbi5pc1RyYWNpbmcgPT09IFRyYWNlTW9kZS5OT05FKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiW21vYngudHJhY2VdICdcIiArIGRlcml2YXRpb24ubmFtZSArIFwiJyB0cmFjaW5nIGVuYWJsZWRcIik7XG4gICAgfVxuICAgIGRlcml2YXRpb24uaXNUcmFjaW5nID0gZW50ZXJCcmVha1BvaW50ID8gVHJhY2VNb2RlLkJSRUFLIDogVHJhY2VNb2RlLkxPRztcbn1cbmZ1bmN0aW9uIGdldEF0b21Gcm9tQXJncyhhcmdzKSB7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsU3RhdGUudHJhY2tpbmdEZXJpdmF0aW9uO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICByZXR1cm4gZ2V0QXRvbShhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIGdldEF0b20oYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgfVxufVxuXG4vKipcbiAqIER1cmluZyBhIHRyYW5zYWN0aW9uIG5vIHZpZXdzIGFyZSB1cGRhdGVkIHVudGlsIHRoZSBlbmQgb2YgdGhlIHRyYW5zYWN0aW9uLlxuICogVGhlIHRyYW5zYWN0aW9uIHdpbGwgYmUgcnVuIHN5bmNocm9ub3VzbHkgbm9uZXRoZWxlc3MuXG4gKlxuICogQHBhcmFtIGFjdGlvbiBhIGZ1bmN0aW9uIHRoYXQgdXBkYXRlcyBzb21lIHJlYWN0aXZlIHN0YXRlXG4gKiBAcmV0dXJucyBhbnkgdmFsdWUgdGhhdCB3YXMgcmV0dXJuZWQgYnkgdGhlICdhY3Rpb24nIHBhcmFtZXRlci5cbiAqL1xuZnVuY3Rpb24gdHJhbnNhY3Rpb24oYWN0aW9uLCB0aGlzQXJnKSB7XG4gICAgaWYgKHRoaXNBcmcgPT09IHZvaWQgMCkgeyB0aGlzQXJnID0gdW5kZWZpbmVkOyB9XG4gICAgc3RhcnRCYXRjaCgpO1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhY3Rpb24uYXBwbHkodGhpc0FyZyk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBlbmRCYXRjaCgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gd2hlbihwcmVkaWNhdGUsIGFyZzEsIGFyZzIpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSB8fCAoYXJnMSAmJiB0eXBlb2YgYXJnMSA9PT0gXCJvYmplY3RcIikpXG4gICAgICAgIHJldHVybiB3aGVuUHJvbWlzZShwcmVkaWNhdGUsIGFyZzEpO1xuICAgIHJldHVybiBfd2hlbihwcmVkaWNhdGUsIGFyZzEsIGFyZzIgfHwge30pO1xufVxuZnVuY3Rpb24gX3doZW4ocHJlZGljYXRlLCBlZmZlY3QsIG9wdHMpIHtcbiAgICB2YXIgdGltZW91dEhhbmRsZTtcbiAgICBpZiAodHlwZW9mIG9wdHMudGltZW91dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB0aW1lb3V0SGFuZGxlID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWRpc3Bvc2VyWyRtb2J4XS5pc0Rpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgZGlzcG9zZXIoKTtcbiAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoXCJXSEVOX1RJTUVPVVRcIik7XG4gICAgICAgICAgICAgICAgaWYgKG9wdHMub25FcnJvcilcbiAgICAgICAgICAgICAgICAgICAgb3B0cy5vbkVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBvcHRzLnRpbWVvdXQpO1xuICAgIH1cbiAgICBvcHRzLm5hbWUgPSBvcHRzLm5hbWUgfHwgXCJXaGVuQFwiICsgZ2V0TmV4dElkKCk7XG4gICAgdmFyIGVmZmVjdEFjdGlvbiA9IGNyZWF0ZUFjdGlvbihvcHRzLm5hbWUgKyBcIi1lZmZlY3RcIiwgZWZmZWN0KTtcbiAgICB2YXIgZGlzcG9zZXIgPSBhdXRvcnVuKGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUoKSkge1xuICAgICAgICAgICAgci5kaXNwb3NlKCk7XG4gICAgICAgICAgICBpZiAodGltZW91dEhhbmRsZSlcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gICAgICAgICAgICBlZmZlY3RBY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH0sIG9wdHMpO1xuICAgIHJldHVybiBkaXNwb3Nlcjtcbn1cbmZ1bmN0aW9uIHdoZW5Qcm9taXNlKHByZWRpY2F0ZSwgb3B0cykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgb3B0cyAmJiBvcHRzLm9uRXJyb3IpXG4gICAgICAgIHJldHVybiBmYWlsKFwidGhlIG9wdGlvbnMgJ29uRXJyb3InIGFuZCAncHJvbWlzZScgY2Fubm90IGJlIGNvbWJpbmVkXCIpO1xuICAgIHZhciBjYW5jZWw7XG4gICAgdmFyIHJlcyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIGRpc3Bvc2VyID0gX3doZW4ocHJlZGljYXRlLCByZXNvbHZlLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0cyksIHsgb25FcnJvcjogcmVqZWN0IH0pKTtcbiAgICAgICAgY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGlzcG9zZXIoKTtcbiAgICAgICAgICAgIHJlamVjdChcIldIRU5fQ0FOQ0VMTEVEXCIpO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIHJlcy5jYW5jZWwgPSBjYW5jZWw7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0QWRtKHRhcmdldCkge1xuICAgIHJldHVybiB0YXJnZXRbJG1vYnhdO1xufVxuZnVuY3Rpb24gaXNQcm9wZXJ0eUtleSh2YWwpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiB2YWwgPT09IFwic3ltYm9sXCI7XG59XG4vLyBPcHRpbWl6YXRpb246IHdlIGRvbid0IG5lZWQgdGhlIGludGVybWVkaWF0ZSBvYmplY3RzIGFuZCBjb3VsZCBoYXZlIGEgY29tcGxldGVseSBjdXN0b20gYWRtaW5pc3RyYXRpb24gZm9yIER5bmFtaWNPYmplY3RzLFxuLy8gYW5kIHNraXAgZWl0aGVyIHRoZSBpbnRlcm5hbCB2YWx1ZXMgbWFwLCBvciB0aGUgYmFzZSBvYmplY3Qgd2l0aCBpdHMgcHJvcGVydHkgZGVzY3JpcHRvcnMhXG52YXIgb2JqZWN0UHJveHlUcmFwcyA9IHtcbiAgICBoYXM6IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICRtb2J4IHx8IG5hbWUgPT09IFwiY29uc3RydWN0b3JcIiB8fCBuYW1lID09PSBtb2J4RGlkUnVuTGF6eUluaXRpYWxpemVyc1N5bWJvbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB2YXIgYWRtID0gZ2V0QWRtKHRhcmdldCk7XG4gICAgICAgIC8vIE1XRTogc2hvdWxkIGBpbmAgb3BlcmF0b3IgYmUgcmVhY3RpdmU/IElmIG5vdCwgYmVsb3cgY29kZSBwYXRoIHdpbGwgYmUgZmFzdGVyIC8gbW9yZSBtZW1vcnkgZWZmaWNpZW50XG4gICAgICAgIC8vIFRPRE86IGNoZWNrIHBlcmZvcm1hbmNlIHN0YXRzIVxuICAgICAgICAvLyBpZiAoYWRtLnZhbHVlcy5nZXQobmFtZSBhcyBzdHJpbmcpKSByZXR1cm4gdHJ1ZVxuICAgICAgICBpZiAoaXNQcm9wZXJ0eUtleShuYW1lKSlcbiAgICAgICAgICAgIHJldHVybiBhZG0uaGFzKG5hbWUpO1xuICAgICAgICByZXR1cm4gbmFtZSBpbiB0YXJnZXQ7XG4gICAgfSxcbiAgICBnZXQ6IGZ1bmN0aW9uICh0YXJnZXQsIG5hbWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09ICRtb2J4IHx8IG5hbWUgPT09IFwiY29uc3RydWN0b3JcIiB8fCBuYW1lID09PSBtb2J4RGlkUnVuTGF6eUluaXRpYWxpemVyc1N5bWJvbClcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRbbmFtZV07XG4gICAgICAgIHZhciBhZG0gPSBnZXRBZG0odGFyZ2V0KTtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBhZG0udmFsdWVzLmdldChuYW1lKTtcbiAgICAgICAgaWYgKG9ic2VydmFibGUgaW5zdGFuY2VvZiBBdG9tKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gb2JzZXJ2YWJsZS5nZXQoKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIFRoaXMgZml4ZXMgIzE3OTYsIGJlY2F1c2UgZGVsZXRpbmcgYSBwcm9wIHRoYXQgaGFzIGFuXG4gICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIHZhbHVlIHdvbid0IHJldHJpZ2dlciBhIG9ic2VydmVyIChubyB2aXNpYmxlIGVmZmVjdCksXG4gICAgICAgICAgICAgICAgLy8gdGhlIGF1dG9ydW4gd291bGRuJ3Qgc3Vic2NyaWJlIHRvIGZ1dHVyZSBrZXkgY2hhbmdlcyAoc2VlIGFsc28gbmV4dCBjb21tZW50KVxuICAgICAgICAgICAgICAgIGFkbS5oYXMobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzdGFydCBsaXN0ZW5pbmcgdG8gZnV0dXJlIGtleXNcbiAgICAgICAgLy8gbm90ZSB0aGF0IHdlIG9ubHkgZG8gdGhpcyBoZXJlIGZvciBvcHRpbWl6YXRpb25cbiAgICAgICAgaWYgKGlzUHJvcGVydHlLZXkobmFtZSkpXG4gICAgICAgICAgICBhZG0uaGFzKG5hbWUpO1xuICAgICAgICByZXR1cm4gdGFyZ2V0W25hbWVdO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodGFyZ2V0LCBuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzUHJvcGVydHlLZXkobmFtZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHNldCh0YXJnZXQsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gKHRhcmdldCwgbmFtZSkge1xuICAgICAgICBpZiAoIWlzUHJvcGVydHlLZXkobmFtZSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBhZG0gPSBnZXRBZG0odGFyZ2V0KTtcbiAgICAgICAgYWRtLnJlbW92ZShuYW1lKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBvd25LZXlzOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIHZhciBhZG0gPSBnZXRBZG0odGFyZ2V0KTtcbiAgICAgICAgYWRtLmtleXNBdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHJldHVybiBSZWZsZWN0Lm93bktleXModGFyZ2V0KTtcbiAgICB9LFxuICAgIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIGZhaWwoXCJEeW5hbWljIG9ic2VydmFibGUgb2JqZWN0cyBjYW5ub3QgYmUgZnJvemVuXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcbmZ1bmN0aW9uIGNyZWF0ZUR5bmFtaWNPYnNlcnZhYmxlT2JqZWN0KGJhc2UpIHtcbiAgICB2YXIgcHJveHkgPSBuZXcgUHJveHkoYmFzZSwgb2JqZWN0UHJveHlUcmFwcyk7XG4gICAgYmFzZVskbW9ieF0ucHJveHkgPSBwcm94eTtcbiAgICByZXR1cm4gcHJveHk7XG59XG5cbmZ1bmN0aW9uIGhhc0ludGVyY2VwdG9ycyhpbnRlcmNlcHRhYmxlKSB7XG4gICAgcmV0dXJuIGludGVyY2VwdGFibGUuaW50ZXJjZXB0b3JzICE9PSB1bmRlZmluZWQgJiYgaW50ZXJjZXB0YWJsZS5pbnRlcmNlcHRvcnMubGVuZ3RoID4gMDtcbn1cbmZ1bmN0aW9uIHJlZ2lzdGVySW50ZXJjZXB0b3IoaW50ZXJjZXB0YWJsZSwgaGFuZGxlcikge1xuICAgIHZhciBpbnRlcmNlcHRvcnMgPSBpbnRlcmNlcHRhYmxlLmludGVyY2VwdG9ycyB8fCAoaW50ZXJjZXB0YWJsZS5pbnRlcmNlcHRvcnMgPSBbXSk7XG4gICAgaW50ZXJjZXB0b3JzLnB1c2goaGFuZGxlcik7XG4gICAgcmV0dXJuIG9uY2UoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaWR4ID0gaW50ZXJjZXB0b3JzLmluZGV4T2YoaGFuZGxlcik7XG4gICAgICAgIGlmIChpZHggIT09IC0xKVxuICAgICAgICAgICAgaW50ZXJjZXB0b3JzLnNwbGljZShpZHgsIDEpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gaW50ZXJjZXB0Q2hhbmdlKGludGVyY2VwdGFibGUsIGNoYW5nZSkge1xuICAgIHZhciBwcmV2VSA9IHVudHJhY2tlZFN0YXJ0KCk7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gSW50ZXJjZXB0b3IgY2FuIG1vZGlmeSB0aGUgYXJyYXksIGNvcHkgaXQgdG8gYXZvaWQgY29uY3VycmVudCBtb2RpZmljYXRpb24sIHNlZSAjMTk1MFxuICAgICAgICB2YXIgaW50ZXJjZXB0b3JzID0gX19zcHJlYWQoKGludGVyY2VwdGFibGUuaW50ZXJjZXB0b3JzIHx8IFtdKSk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gaW50ZXJjZXB0b3JzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgY2hhbmdlID0gaW50ZXJjZXB0b3JzW2ldKGNoYW5nZSk7XG4gICAgICAgICAgICBpbnZhcmlhbnQoIWNoYW5nZSB8fCBjaGFuZ2UudHlwZSwgXCJJbnRlcmNlcHQgaGFuZGxlcnMgc2hvdWxkIHJldHVybiBub3RoaW5nIG9yIGEgY2hhbmdlIG9iamVjdFwiKTtcbiAgICAgICAgICAgIGlmICghY2hhbmdlKVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGFuZ2U7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB1bnRyYWNrZWRFbmQocHJldlUpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gaGFzTGlzdGVuZXJzKGxpc3RlbmFibGUpIHtcbiAgICByZXR1cm4gbGlzdGVuYWJsZS5jaGFuZ2VMaXN0ZW5lcnMgIT09IHVuZGVmaW5lZCAmJiBsaXN0ZW5hYmxlLmNoYW5nZUxpc3RlbmVycy5sZW5ndGggPiAwO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJMaXN0ZW5lcihsaXN0ZW5hYmxlLCBoYW5kbGVyKSB7XG4gICAgdmFyIGxpc3RlbmVycyA9IGxpc3RlbmFibGUuY2hhbmdlTGlzdGVuZXJzIHx8IChsaXN0ZW5hYmxlLmNoYW5nZUxpc3RlbmVycyA9IFtdKTtcbiAgICBsaXN0ZW5lcnMucHVzaChoYW5kbGVyKTtcbiAgICByZXR1cm4gb25jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihoYW5kbGVyKTtcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpXG4gICAgICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBub3RpZnlMaXN0ZW5lcnMobGlzdGVuYWJsZSwgY2hhbmdlKSB7XG4gICAgdmFyIHByZXZVID0gdW50cmFja2VkU3RhcnQoKTtcbiAgICB2YXIgbGlzdGVuZXJzID0gbGlzdGVuYWJsZS5jaGFuZ2VMaXN0ZW5lcnM7XG4gICAgaWYgKCFsaXN0ZW5lcnMpXG4gICAgICAgIHJldHVybjtcbiAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuc2xpY2UoKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgbGlzdGVuZXJzW2ldKGNoYW5nZSk7XG4gICAgfVxuICAgIHVudHJhY2tlZEVuZChwcmV2VSk7XG59XG5cbnZhciBNQVhfU1BMSUNFX1NJWkUgPSAxMDAwMDsgLy8gU2VlIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL21vYnhqcy9tb2J4L2lzc3Vlcy84NTlcbnZhciBhcnJheVRyYXBzID0ge1xuICAgIGdldDogZnVuY3Rpb24gKHRhcmdldCwgbmFtZSkge1xuICAgICAgICBpZiAobmFtZSA9PT0gJG1vYngpXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0WyRtb2J4XTtcbiAgICAgICAgaWYgKG5hbWUgPT09IFwibGVuZ3RoXCIpXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0WyRtb2J4XS5nZXRBcnJheUxlbmd0aCgpO1xuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheUV4dGVuc2lvbnMuZ2V0LmNhbGwodGFyZ2V0LCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgJiYgIWlzTmFOKG5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJyYXlFeHRlbnNpb25zLmdldC5jYWxsKHRhcmdldCwgcGFyc2VJbnQobmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcnJheUV4dGVuc2lvbnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBhcnJheUV4dGVuc2lvbnNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldFtuYW1lXTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG5hbWUgPT09IFwibGVuZ3RoXCIpIHtcbiAgICAgICAgICAgIHRhcmdldFskbW9ieF0uc2V0QXJyYXlMZW5ndGgodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgYXJyYXlFeHRlbnNpb25zLnNldC5jYWxsKHRhcmdldCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIiB8fCBpc05hTihuYW1lKSkge1xuICAgICAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBudW1lcmljIHN0cmluZ1xuICAgICAgICAgICAgYXJyYXlFeHRlbnNpb25zLnNldC5jYWxsKHRhcmdldCwgcGFyc2VJbnQobmFtZSksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIGZhaWwoXCJPYnNlcnZhYmxlIGFycmF5cyBjYW5ub3QgYmUgZnJvemVuXCIpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcbmZ1bmN0aW9uIGNyZWF0ZU9ic2VydmFibGVBcnJheShpbml0aWFsVmFsdWVzLCBlbmhhbmNlciwgbmFtZSwgb3duZWQpIHtcbiAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSBcIk9ic2VydmFibGVBcnJheUBcIiArIGdldE5leHRJZCgpOyB9XG4gICAgaWYgKG93bmVkID09PSB2b2lkIDApIHsgb3duZWQgPSBmYWxzZTsgfVxuICAgIHZhciBhZG0gPSBuZXcgT2JzZXJ2YWJsZUFycmF5QWRtaW5pc3RyYXRpb24obmFtZSwgZW5oYW5jZXIsIG93bmVkKTtcbiAgICBhZGRIaWRkZW5GaW5hbFByb3AoYWRtLnZhbHVlcywgJG1vYngsIGFkbSk7XG4gICAgdmFyIHByb3h5ID0gbmV3IFByb3h5KGFkbS52YWx1ZXMsIGFycmF5VHJhcHMpO1xuICAgIGFkbS5wcm94eSA9IHByb3h5O1xuICAgIGlmIChpbml0aWFsVmFsdWVzICYmIGluaXRpYWxWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBwcmV2ID0gYWxsb3dTdGF0ZUNoYW5nZXNTdGFydCh0cnVlKTtcbiAgICAgICAgYWRtLnNwbGljZVdpdGhBcnJheSgwLCAwLCBpbml0aWFsVmFsdWVzKTtcbiAgICAgICAgYWxsb3dTdGF0ZUNoYW5nZXNFbmQocHJldik7XG4gICAgfVxuICAgIHJldHVybiBwcm94eTtcbn1cbnZhciBPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbihuYW1lLCBlbmhhbmNlciwgb3duZWQpIHtcbiAgICAgICAgdGhpcy5vd25lZCA9IG93bmVkO1xuICAgICAgICB0aGlzLnZhbHVlcyA9IFtdO1xuICAgICAgICB0aGlzLnByb3h5ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLmxhc3RLbm93bkxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuYXRvbSA9IG5ldyBBdG9tKG5hbWUgfHwgXCJPYnNlcnZhYmxlQXJyYXlAXCIgKyBnZXROZXh0SWQoKSk7XG4gICAgICAgIHRoaXMuZW5oYW5jZXIgPSBmdW5jdGlvbiAobmV3Viwgb2xkVikgeyByZXR1cm4gZW5oYW5jZXIobmV3Viwgb2xkViwgbmFtZSArIFwiWy4uXVwiKTsgfTtcbiAgICB9XG4gICAgT2JzZXJ2YWJsZUFycmF5QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLmRlaGFuY2VWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5kZWhhbmNlciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVoYW5jZXIodmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuZGVoYW5jZVZhbHVlcyA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVoYW5jZXIgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZXMubWFwKHRoaXMuZGVoYW5jZXIpO1xuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZUFycmF5QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLmludGVyY2VwdCA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIHJldHVybiByZWdpc3RlckludGVyY2VwdG9yKHRoaXMsIGhhbmRsZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZUFycmF5QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAobGlzdGVuZXIsIGZpcmVJbW1lZGlhdGVseSkge1xuICAgICAgICBpZiAoZmlyZUltbWVkaWF0ZWx5ID09PSB2b2lkIDApIHsgZmlyZUltbWVkaWF0ZWx5ID0gZmFsc2U7IH1cbiAgICAgICAgaWYgKGZpcmVJbW1lZGlhdGVseSkge1xuICAgICAgICAgICAgbGlzdGVuZXIoe1xuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5wcm94eSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwbGljZVwiLFxuICAgICAgICAgICAgICAgIGluZGV4OiAwLFxuICAgICAgICAgICAgICAgIGFkZGVkOiB0aGlzLnZhbHVlcy5zbGljZSgpLFxuICAgICAgICAgICAgICAgIGFkZGVkQ291bnQ6IHRoaXMudmFsdWVzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgICAgICByZW1vdmVkQ291bnQ6IDBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWdpc3Rlckxpc3RlbmVyKHRoaXMsIGxpc3RlbmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5nZXRBcnJheUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5hdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGg7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuc2V0QXJyYXlMZW5ndGggPSBmdW5jdGlvbiAobmV3TGVuZ3RoKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3TGVuZ3RoICE9PSBcIm51bWJlclwiIHx8IG5ld0xlbmd0aCA8IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbbW9ieC5hcnJheV0gT3V0IG9mIHJhbmdlOiBcIiArIG5ld0xlbmd0aCk7XG4gICAgICAgIHZhciBjdXJyZW50TGVuZ3RoID0gdGhpcy52YWx1ZXMubGVuZ3RoO1xuICAgICAgICBpZiAobmV3TGVuZ3RoID09PSBjdXJyZW50TGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBlbHNlIGlmIChuZXdMZW5ndGggPiBjdXJyZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICB2YXIgbmV3SXRlbXMgPSBuZXcgQXJyYXkobmV3TGVuZ3RoIC0gY3VycmVudExlbmd0aCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0xlbmd0aCAtIGN1cnJlbnRMZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBuZXdJdGVtc1tpXSA9IHVuZGVmaW5lZDsgLy8gTm8gQXJyYXkuZmlsbCBldmVyeXdoZXJlLi4uXG4gICAgICAgICAgICB0aGlzLnNwbGljZVdpdGhBcnJheShjdXJyZW50TGVuZ3RoLCAwLCBuZXdJdGVtcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5zcGxpY2VXaXRoQXJyYXkobmV3TGVuZ3RoLCBjdXJyZW50TGVuZ3RoIC0gbmV3TGVuZ3RoKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS51cGRhdGVBcnJheUxlbmd0aCA9IGZ1bmN0aW9uIChvbGRMZW5ndGgsIGRlbHRhKSB7XG4gICAgICAgIGlmIChvbGRMZW5ndGggIT09IHRoaXMubGFzdEtub3duTGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiW21vYnhdIE1vZGlmaWNhdGlvbiBleGNlcHRpb246IHRoZSBpbnRlcm5hbCBzdHJ1Y3R1cmUgb2YgYW4gb2JzZXJ2YWJsZSBhcnJheSB3YXMgY2hhbmdlZC5cIik7XG4gICAgICAgIHRoaXMubGFzdEtub3duTGVuZ3RoICs9IGRlbHRhO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZUFycmF5QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLnNwbGljZVdpdGhBcnJheSA9IGZ1bmN0aW9uIChpbmRleCwgZGVsZXRlQ291bnQsIG5ld0l0ZW1zKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGNoZWNrSWZTdGF0ZU1vZGlmaWNhdGlvbnNBcmVBbGxvd2VkKHRoaXMuYXRvbSk7XG4gICAgICAgIHZhciBsZW5ndGggPSB0aGlzLnZhbHVlcy5sZW5ndGg7XG4gICAgICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgaW5kZXggPSAwO1xuICAgICAgICBlbHNlIGlmIChpbmRleCA+IGxlbmd0aClcbiAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuICAgICAgICBlbHNlIGlmIChpbmRleCA8IDApXG4gICAgICAgICAgICBpbmRleCA9IE1hdGgubWF4KDAsIGxlbmd0aCArIGluZGV4KTtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IGxlbmd0aCAtIGluZGV4O1xuICAgICAgICBlbHNlIGlmIChkZWxldGVDb3VudCA9PT0gdW5kZWZpbmVkIHx8IGRlbGV0ZUNvdW50ID09PSBudWxsKVxuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAwO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGRlbGV0ZUNvdW50LCBsZW5ndGggLSBpbmRleCkpO1xuICAgICAgICBpZiAobmV3SXRlbXMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIG5ld0l0ZW1zID0gRU1QVFlfQVJSQVk7XG4gICAgICAgIGlmIChoYXNJbnRlcmNlcHRvcnModGhpcykpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBpbnRlcmNlcHRDaGFuZ2UodGhpcywge1xuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5wcm94eSxcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNwbGljZVwiLFxuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICByZW1vdmVkQ291bnQ6IGRlbGV0ZUNvdW50LFxuICAgICAgICAgICAgICAgIGFkZGVkOiBuZXdJdGVtc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFlfQVJSQVk7XG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IGNoYW5nZS5yZW1vdmVkQ291bnQ7XG4gICAgICAgICAgICBuZXdJdGVtcyA9IGNoYW5nZS5hZGRlZDtcbiAgICAgICAgfVxuICAgICAgICBuZXdJdGVtcyA9IG5ld0l0ZW1zLmxlbmd0aCA9PT0gMCA/IG5ld0l0ZW1zIDogbmV3SXRlbXMubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBfdGhpcy5lbmhhbmNlcih2LCB1bmRlZmluZWQpOyB9KTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIGxlbmd0aERlbHRhID0gbmV3SXRlbXMubGVuZ3RoIC0gZGVsZXRlQ291bnQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFycmF5TGVuZ3RoKGxlbmd0aCwgbGVuZ3RoRGVsdGEpOyAvLyBjaGVja3MgaWYgaW50ZXJuYWwgYXJyYXkgd2Fzbid0IG1vZGlmaWVkXG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlcyA9IHRoaXMuc3BsaWNlSXRlbXNJbnRvVmFsdWVzKGluZGV4LCBkZWxldGVDb3VudCwgbmV3SXRlbXMpO1xuICAgICAgICBpZiAoZGVsZXRlQ291bnQgIT09IDAgfHwgbmV3SXRlbXMubGVuZ3RoICE9PSAwKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnlBcnJheVNwbGljZShpbmRleCwgbmV3SXRlbXMsIHJlcyk7XG4gICAgICAgIHJldHVybiB0aGlzLmRlaGFuY2VWYWx1ZXMocmVzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5zcGxpY2VJdGVtc0ludG9WYWx1ZXMgPSBmdW5jdGlvbiAoaW5kZXgsIGRlbGV0ZUNvdW50LCBuZXdJdGVtcykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChuZXdJdGVtcy5sZW5ndGggPCBNQVhfU1BMSUNFX1NJWkUpIHtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnZhbHVlcykuc3BsaWNlLmFwcGx5KF9hLCBfX3NwcmVhZChbaW5kZXgsIGRlbGV0ZUNvdW50XSwgbmV3SXRlbXMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciByZXMgPSB0aGlzLnZhbHVlcy5zbGljZShpbmRleCwgaW5kZXggKyBkZWxldGVDb3VudCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyA9IHRoaXMudmFsdWVzXG4gICAgICAgICAgICAgICAgLnNsaWNlKDAsIGluZGV4KVxuICAgICAgICAgICAgICAgIC5jb25jYXQobmV3SXRlbXMsIHRoaXMudmFsdWVzLnNsaWNlKGluZGV4ICsgZGVsZXRlQ291bnQpKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5ub3RpZnlBcnJheUNoaWxkVXBkYXRlID0gZnVuY3Rpb24gKGluZGV4LCBuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgdmFyIG5vdGlmeVNweSA9ICF0aGlzLm93bmVkICYmIGlzU3B5RW5hYmxlZCgpO1xuICAgICAgICB2YXIgbm90aWZ5ID0gaGFzTGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICB2YXIgY2hhbmdlID0gbm90aWZ5IHx8IG5vdGlmeVNweVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLnByb3h5LFxuICAgICAgICAgICAgICAgIHR5cGU6IFwidXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZTogb2xkVmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgLy8gVGhlIHJlYXNvbiB3aHkgdGhpcyBpcyBvbiByaWdodCBoYW5kIHNpZGUgaGVyZSAoYW5kIG5vdCBhYm92ZSksIGlzIHRoaXMgd2F5IHRoZSB1Z2xpZmllciB3aWxsIGRyb3AgaXQsIGJ1dCBpdCB3b24ndFxuICAgICAgICAvLyBjYXVzZSBhbnkgcnVudGltZSBvdmVyaGVhZCBpbiBkZXZlbG9wbWVudCBtb2RlIHdpdGhvdXQgTk9ERV9FTlYgc2V0LCB1bmxlc3Mgc3B5aW5nIGlzIGVuYWJsZWRcbiAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICBzcHlSZXBvcnRTdGFydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBuYW1lOiB0aGlzLmF0b20ubmFtZSB9KSk7XG4gICAgICAgIHRoaXMuYXRvbS5yZXBvcnRDaGFuZ2VkKCk7XG4gICAgICAgIGlmIChub3RpZnkpXG4gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgY2hhbmdlKTtcbiAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICBzcHlSZXBvcnRFbmQoKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5ub3RpZnlBcnJheVNwbGljZSA9IGZ1bmN0aW9uIChpbmRleCwgYWRkZWQsIHJlbW92ZWQpIHtcbiAgICAgICAgdmFyIG5vdGlmeVNweSA9ICF0aGlzLm93bmVkICYmIGlzU3B5RW5hYmxlZCgpO1xuICAgICAgICB2YXIgbm90aWZ5ID0gaGFzTGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICB2YXIgY2hhbmdlID0gbm90aWZ5IHx8IG5vdGlmeVNweVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLnByb3h5LFxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3BsaWNlXCIsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIHJlbW92ZWQ6IHJlbW92ZWQsXG4gICAgICAgICAgICAgICAgYWRkZWQ6IGFkZGVkLFxuICAgICAgICAgICAgICAgIHJlbW92ZWRDb3VudDogcmVtb3ZlZC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgYWRkZWRDb3VudDogYWRkZWQubGVuZ3RoXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICAgICAgc3B5UmVwb3J0U3RhcnQoX19hc3NpZ24oX19hc3NpZ24oe30sIGNoYW5nZSksIHsgbmFtZTogdGhpcy5hdG9tLm5hbWUgfSkpO1xuICAgICAgICB0aGlzLmF0b20ucmVwb3J0Q2hhbmdlZCgpO1xuICAgICAgICAvLyBjb25mb3JtOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9vYnNlcnZlXG4gICAgICAgIGlmIChub3RpZnkpXG4gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgY2hhbmdlKTtcbiAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICBzcHlSZXBvcnRFbmQoKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlQXJyYXlBZG1pbmlzdHJhdGlvbjtcbn0oKSk7XG52YXIgYXJyYXlFeHRlbnNpb25zID0ge1xuICAgIGludGVyY2VwdDogZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbJG1vYnhdLmludGVyY2VwdChoYW5kbGVyKTtcbiAgICB9LFxuICAgIG9ic2VydmU6IGZ1bmN0aW9uIChsaXN0ZW5lciwgZmlyZUltbWVkaWF0ZWx5KSB7XG4gICAgICAgIGlmIChmaXJlSW1tZWRpYXRlbHkgPT09IHZvaWQgMCkgeyBmaXJlSW1tZWRpYXRlbHkgPSBmYWxzZTsgfVxuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIHJldHVybiBhZG0ub2JzZXJ2ZShsaXN0ZW5lciwgZmlyZUltbWVkaWF0ZWx5KTtcbiAgICB9LFxuICAgIGNsZWFyOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNwbGljZSgwKTtcbiAgICB9LFxuICAgIHJlcGxhY2U6IGZ1bmN0aW9uIChuZXdJdGVtcykge1xuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIHJldHVybiBhZG0uc3BsaWNlV2l0aEFycmF5KDAsIGFkbS52YWx1ZXMubGVuZ3RoLCBuZXdJdGVtcyk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyB0aGlzIGFycmF5IGJhY2sgdG8gYSAoc2hhbGxvdykgamF2YXNjcmlwdCBzdHJ1Y3R1cmUuXG4gICAgICogRm9yIGEgZGVlcCBjbG9uZSB1c2UgbW9ieC50b0pTXG4gICAgICovXG4gICAgdG9KUzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zbGljZSgpO1xuICAgIH0sXG4gICAgdG9KU09OOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIFVzZWQgYnkgSlNPTi5zdHJpbmdpZnlcbiAgICAgICAgcmV0dXJuIHRoaXMudG9KUygpO1xuICAgIH0sXG4gICAgLypcbiAgICAgKiBmdW5jdGlvbnMgdGhhdCBkbyBhbHRlciB0aGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIHRoZSBhcnJheSwgKGJhc2VkIG9uIGxpYi5lczYuZC50cylcbiAgICAgKiBzaW5jZSB0aGVzZSBmdW5jdGlvbnMgYWx0ZXIgdGhlIGlubmVyIHN0cnVjdHVyZSBvZiB0aGUgYXJyYXksIHRoZSBoYXZlIHNpZGUgZWZmZWN0cy5cbiAgICAgKiBCZWNhdXNlIHRoZSBoYXZlIHNpZGUgZWZmZWN0cywgdGhleSBzaG91bGQgbm90IGJlIHVzZWQgaW4gY29tcHV0ZWQgZnVuY3Rpb24sXG4gICAgICogYW5kIGZvciB0aGF0IHJlYXNvbiB0aGUgZG8gbm90IGNhbGwgZGVwZW5kZW5jeVN0YXRlLm5vdGlmeU9ic2VydmVkXG4gICAgICovXG4gICAgc3BsaWNlOiBmdW5jdGlvbiAoaW5kZXgsIGRlbGV0ZUNvdW50KSB7XG4gICAgICAgIHZhciBuZXdJdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3SXRlbXNbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFkbSA9IHRoaXNbJG1vYnhdO1xuICAgICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkbS5zcGxpY2VXaXRoQXJyYXkoaW5kZXgpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiBhZG0uc3BsaWNlV2l0aEFycmF5KGluZGV4LCBkZWxldGVDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFkbS5zcGxpY2VXaXRoQXJyYXkoaW5kZXgsIGRlbGV0ZUNvdW50LCBuZXdJdGVtcyk7XG4gICAgfSxcbiAgICBzcGxpY2VXaXRoQXJyYXk6IGZ1bmN0aW9uIChpbmRleCwgZGVsZXRlQ291bnQsIG5ld0l0ZW1zKSB7XG4gICAgICAgIHZhciBhZG0gPSB0aGlzWyRtb2J4XTtcbiAgICAgICAgcmV0dXJuIGFkbS5zcGxpY2VXaXRoQXJyYXkoaW5kZXgsIGRlbGV0ZUNvdW50LCBuZXdJdGVtcyk7XG4gICAgfSxcbiAgICBwdXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpdGVtcyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaXRlbXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIGFkbS5zcGxpY2VXaXRoQXJyYXkoYWRtLnZhbHVlcy5sZW5ndGgsIDAsIGl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIGFkbS52YWx1ZXMubGVuZ3RoO1xuICAgIH0sXG4gICAgcG9wOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNwbGljZShNYXRoLm1heCh0aGlzWyRtb2J4XS52YWx1ZXMubGVuZ3RoIC0gMSwgMCksIDEpWzBdO1xuICAgIH0sXG4gICAgc2hpZnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3BsaWNlKDAsIDEpWzBdO1xuICAgIH0sXG4gICAgdW5zaGlmdDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaXRlbXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGl0ZW1zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFkbSA9IHRoaXNbJG1vYnhdO1xuICAgICAgICBhZG0uc3BsaWNlV2l0aEFycmF5KDAsIDAsIGl0ZW1zKTtcbiAgICAgICAgcmV0dXJuIGFkbS52YWx1ZXMubGVuZ3RoO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyByZXZlcnNlIGJ5IGRlZmF1bHQgbXV0YXRlcyBpbiBwbGFjZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSByZXN1bHRcbiAgICAgICAgLy8gd2hpY2ggbWFrZXMgaXQgYm90aCBhICdkZXJpdmF0aW9uJyBhbmQgYSAnbXV0YXRpb24nLlxuICAgICAgICAvLyBzbyB3ZSBkZXZpYXRlIGZyb20gdGhlIGRlZmF1bHQgYW5kIGp1c3QgbWFrZSBpdCBhbiBkZXJ2aXRhdGlvblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJbbW9ieF0gYG9ic2VydmFibGVBcnJheS5yZXZlcnNlKClgIHdpbGwgbm90IHVwZGF0ZSB0aGUgYXJyYXkgaW4gcGxhY2UuIFVzZSBgb2JzZXJ2YWJsZUFycmF5LnNsaWNlKCkucmV2ZXJzZSgpYCB0byBzdXBwcmVzcyB0aGlzIHdhcm5pbmcgYW5kIHBlcmZvcm0gdGhlIG9wZXJhdGlvbiBvbiBhIGNvcHksIG9yIGBvYnNlcnZhYmxlQXJyYXkucmVwbGFjZShvYnNlcnZhYmxlQXJyYXkuc2xpY2UoKS5yZXZlcnNlKCkpYCB0byByZXZlcnNlICYgdXBkYXRlIGluIHBsYWNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjbG9uZSA9IHRoaXMuc2xpY2UoKTtcbiAgICAgICAgcmV0dXJuIGNsb25lLnJldmVyc2UuYXBwbHkoY2xvbmUsIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiAoY29tcGFyZUZuKSB7XG4gICAgICAgIC8vIHNvcnQgYnkgZGVmYXVsdCBtdXRhdGVzIGluIHBsYWNlIGJlZm9yZSByZXR1cm5pbmcgdGhlIHJlc3VsdFxuICAgICAgICAvLyB3aGljaCBnb2VzIGFnYWluc3QgYWxsIGdvb2QgcHJhY3RpY2VzLiBMZXQncyBub3QgY2hhbmdlIHRoZSBhcnJheSBpbiBwbGFjZSFcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiW21vYnhdIGBvYnNlcnZhYmxlQXJyYXkuc29ydCgpYCB3aWxsIG5vdCB1cGRhdGUgdGhlIGFycmF5IGluIHBsYWNlLiBVc2UgYG9ic2VydmFibGVBcnJheS5zbGljZSgpLnNvcnQoKWAgdG8gc3VwcHJlc3MgdGhpcyB3YXJuaW5nIGFuZCBwZXJmb3JtIHRoZSBvcGVyYXRpb24gb24gYSBjb3B5LCBvciBgb2JzZXJ2YWJsZUFycmF5LnJlcGxhY2Uob2JzZXJ2YWJsZUFycmF5LnNsaWNlKCkuc29ydCgpKWAgdG8gc29ydCAmIHVwZGF0ZSBpbiBwbGFjZVwiKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2xvbmUgPSB0aGlzLnNsaWNlKCk7XG4gICAgICAgIHJldHVybiBjbG9uZS5zb3J0LmFwcGx5KGNsb25lLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGFkbSA9IHRoaXNbJG1vYnhdO1xuICAgICAgICB2YXIgaWR4ID0gYWRtLmRlaGFuY2VWYWx1ZXMoYWRtLnZhbHVlcykuaW5kZXhPZih2YWx1ZSk7XG4gICAgICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHZhciBhZG0gPSB0aGlzWyRtb2J4XTtcbiAgICAgICAgaWYgKGFkbSkge1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgYWRtLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhZG0uYXRvbS5yZXBvcnRPYnNlcnZlZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhZG0uZGVoYW5jZVZhbHVlKGFkbS52YWx1ZXNbaW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlttb2J4LmFycmF5XSBBdHRlbXB0IHRvIHJlYWQgYW4gYXJyYXkgaW5kZXggKFwiICsgaW5kZXggKyBcIikgdGhhdCBpcyBvdXQgb2YgYm91bmRzIChcIiArIGFkbS52YWx1ZXMubGVuZ3RoICsgXCIpLiBQbGVhc2UgY2hlY2sgbGVuZ3RoIGZpcnN0LiBPdXQgb2YgYm91bmQgaW5kaWNlcyB3aWxsIG5vdCBiZSB0cmFja2VkIGJ5IE1vYlhcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gKGluZGV4LCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIHZhciB2YWx1ZXMgPSBhZG0udmFsdWVzO1xuICAgICAgICBpZiAoaW5kZXggPCB2YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgYXQgaW5kZXggaW4gcmFuZ2VcbiAgICAgICAgICAgIGNoZWNrSWZTdGF0ZU1vZGlmaWNhdGlvbnNBcmVBbGxvd2VkKGFkbS5hdG9tKTtcbiAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHZhbHVlc1tpbmRleF07XG4gICAgICAgICAgICBpZiAoaGFzSW50ZXJjZXB0b3JzKGFkbSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hhbmdlID0gaW50ZXJjZXB0Q2hhbmdlKGFkbSwge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IGFkbS5wcm94eSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIWNoYW5nZSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gY2hhbmdlLm5ld1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3VmFsdWUgPSBhZG0uZW5oYW5jZXIobmV3VmFsdWUsIG9sZFZhbHVlKTtcbiAgICAgICAgICAgIHZhciBjaGFuZ2VkID0gbmV3VmFsdWUgIT09IG9sZFZhbHVlO1xuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0gbmV3VmFsdWU7XG4gICAgICAgICAgICAgICAgYWRtLm5vdGlmeUFycmF5Q2hpbGRVcGRhdGUoaW5kZXgsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5kZXggPT09IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGFkZCBhIG5ldyBpdGVtXG4gICAgICAgICAgICBhZG0uc3BsaWNlV2l0aEFycmF5KGluZGV4LCAwLCBbbmV3VmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG91dCBvZiBib3VuZHNcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlttb2J4LmFycmF5XSBJbmRleCBvdXQgb2YgYm91bmRzLCBcIiArIGluZGV4ICsgXCIgaXMgbGFyZ2VyIHRoYW4gXCIgKyB2YWx1ZXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5bXG4gICAgXCJjb25jYXRcIixcbiAgICBcImZsYXRcIixcbiAgICBcImluY2x1ZGVzXCIsXG4gICAgXCJpbmRleE9mXCIsXG4gICAgXCJqb2luXCIsXG4gICAgXCJsYXN0SW5kZXhPZlwiLFxuICAgIFwic2xpY2VcIixcbiAgICBcInRvU3RyaW5nXCIsXG4gICAgXCJ0b0xvY2FsZVN0cmluZ1wiXG5dLmZvckVhY2goZnVuY3Rpb24gKGZ1bmNOYW1lKSB7XG4gICAgLy8gRmVhdHVyZSBkZXRlY3Rpb24gKGVnIGZsYXQgbWF5IG5vdCBiZSBhdmFpbGFibGUpXG4gICAgaWYgKHR5cGVvZiBBcnJheS5wcm90b3R5cGVbZnVuY05hbWVdICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhcnJheUV4dGVuc2lvbnNbZnVuY05hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIGFkbS5hdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHZhciBkZWhhbmNlZFZhbHVlcyA9IGFkbS5kZWhhbmNlVmFsdWVzKGFkbS52YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZGVoYW5jZWRWYWx1ZXNbZnVuY05hbWVdLmFwcGx5KGRlaGFuY2VkVmFsdWVzLCBhcmd1bWVudHMpO1xuICAgIH07XG59KTtcbltcImV2ZXJ5XCIsIFwiZmlsdGVyXCIsIFwiZmluZFwiLCBcImZpbmRJbmRleFwiLCBcImZsYXRNYXBcIiwgXCJmb3JFYWNoXCIsIFwibWFwXCIsIFwic29tZVwiXS5mb3JFYWNoKGZ1bmN0aW9uIChmdW5jTmFtZSkge1xuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIChlZyBmbGF0TWFwIG1heSBub3QgYmUgYXZhaWxhYmxlKVxuICAgIGlmICh0eXBlb2YgQXJyYXkucHJvdG90eXBlW2Z1bmNOYW1lXSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXJyYXlFeHRlbnNpb25zW2Z1bmNOYW1lXSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgdGhpc0FyZykge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIGFkbS5hdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHZhciBkZWhhbmNlZFZhbHVlcyA9IGFkbS5kZWhhbmNlVmFsdWVzKGFkbS52YWx1ZXMpO1xuICAgICAgICByZXR1cm4gZGVoYW5jZWRWYWx1ZXNbZnVuY05hbWVdKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmNhbGwodGhpc0FyZywgZWxlbWVudCwgaW5kZXgsIF90aGlzKTtcbiAgICAgICAgfSwgdGhpc0FyZyk7XG4gICAgfTtcbn0pO1xuW1wicmVkdWNlXCIsIFwicmVkdWNlUmlnaHRcIl0uZm9yRWFjaChmdW5jdGlvbiAoZnVuY05hbWUpIHtcbiAgICBhcnJheUV4dGVuc2lvbnNbZnVuY05hbWVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYWRtID0gdGhpc1skbW9ieF07XG4gICAgICAgIGFkbS5hdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIC8vICMyNDMyIC0gcmVkdWNlIGJlaGF2aW9yIGRlcGVuZHMgb24gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbMF07XG4gICAgICAgIGFyZ3VtZW50c1swXSA9IGZ1bmN0aW9uIChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlLCBpbmRleCkge1xuICAgICAgICAgICAgY3VycmVudFZhbHVlID0gYWRtLmRlaGFuY2VWYWx1ZShjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGFjY3VtdWxhdG9yLCBjdXJyZW50VmFsdWUsIGluZGV4LCBfdGhpcyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBhZG0udmFsdWVzW2Z1bmNOYW1lXS5hcHBseShhZG0udmFsdWVzLCBhcmd1bWVudHMpO1xuICAgIH07XG59KTtcbnZhciBpc09ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIk9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uXCIsIE9ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uKTtcbmZ1bmN0aW9uIGlzT2JzZXJ2YWJsZUFycmF5KHRoaW5nKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHRoaW5nKSAmJiBpc09ic2VydmFibGVBcnJheUFkbWluaXN0cmF0aW9uKHRoaW5nWyRtb2J4XSk7XG59XG5cbnZhciBfYTtcbnZhciBPYnNlcnZhYmxlTWFwTWFya2VyID0ge307XG4vLyBqdXN0IGV4dGVuZCBNYXA/IFNlZSBhbHNvIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL25lc3RoYXJ1cy8xM2I0ZDc0ZjJlZjRhMmY0MzU3ZGJkM2ZjMjNjMWU1NFxuLy8gQnV0OiBodHRwczovL2dpdGh1Yi5jb20vbW9ieGpzL21vYngvaXNzdWVzLzE1NTZcbnZhciBPYnNlcnZhYmxlTWFwID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGVNYXAoaW5pdGlhbERhdGEsIGVuaGFuY2VyLCBuYW1lKSB7XG4gICAgICAgIGlmIChlbmhhbmNlciA9PT0gdm9pZCAwKSB7IGVuaGFuY2VyID0gZGVlcEVuaGFuY2VyOyB9XG4gICAgICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9IFwiT2JzZXJ2YWJsZU1hcEBcIiArIGdldE5leHRJZCgpOyB9XG4gICAgICAgIHRoaXMuZW5oYW5jZXIgPSBlbmhhbmNlcjtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpc1tfYV0gPSBPYnNlcnZhYmxlTWFwTWFya2VyO1xuICAgICAgICB0aGlzLl9rZXlzQXRvbSA9IGNyZWF0ZUF0b20odGhpcy5uYW1lICsgXCIua2V5cygpXCIpO1xuICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIk1hcFwiO1xuICAgICAgICBpZiAodHlwZW9mIE1hcCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtb2J4Lm1hcCByZXF1aXJlcyBNYXAgcG9seWZpbGwgZm9yIHRoZSBjdXJyZW50IGJyb3dzZXIuIENoZWNrIGJhYmVsLXBvbHlmaWxsIG9yIGNvcmUtanMvZXM2L21hcC5qc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLl9oYXNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMubWVyZ2UoaW5pdGlhbERhdGEpO1xuICAgIH1cbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZS5faGFzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5oYXMoa2V5KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKCFnbG9iYWxTdGF0ZS50cmFja2luZ0Rlcml2YXRpb24pXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzKGtleSk7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX2hhc01hcC5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgLy8gdG9kbzogcmVwbGFjZSB3aXRoIGF0b20gKGJyZWFraW5nIGNoYW5nZSlcbiAgICAgICAgICAgIHZhciBuZXdFbnRyeSA9IChlbnRyeSA9IG5ldyBPYnNlcnZhYmxlVmFsdWUodGhpcy5faGFzKGtleSksIHJlZmVyZW5jZUVuaGFuY2VyLCB0aGlzLm5hbWUgKyBcIi5cIiArIHN0cmluZ2lmeUtleShrZXkpICsgXCI/XCIsIGZhbHNlKSk7XG4gICAgICAgICAgICB0aGlzLl9oYXNNYXAuc2V0KGtleSwgbmV3RW50cnkpO1xuICAgICAgICAgICAgb25CZWNvbWVVbm9ic2VydmVkKG5ld0VudHJ5LCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5faGFzTWFwLmRlbGV0ZShrZXkpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW50cnkuZ2V0KCk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgaGFzS2V5ID0gdGhpcy5faGFzKGtleSk7XG4gICAgICAgIGlmIChoYXNJbnRlcmNlcHRvcnModGhpcykpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBpbnRlcmNlcHRDaGFuZ2UodGhpcywge1xuICAgICAgICAgICAgICAgIHR5cGU6IGhhc0tleSA/IFwidXBkYXRlXCIgOiBcImFkZFwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgbmFtZToga2V5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghY2hhbmdlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgdmFsdWUgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0tleSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlVmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRWYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgY2hlY2tJZlN0YXRlTW9kaWZpY2F0aW9uc0FyZUFsbG93ZWQodGhpcy5fa2V5c0F0b20pO1xuICAgICAgICBpZiAoaGFzSW50ZXJjZXB0b3JzKHRoaXMpKSB7XG4gICAgICAgICAgICB2YXIgY2hhbmdlID0gaW50ZXJjZXB0Q2hhbmdlKHRoaXMsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBuYW1lOiBrZXlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9oYXMoa2V5KSkge1xuICAgICAgICAgICAgdmFyIG5vdGlmeVNweSA9IGlzU3B5RW5hYmxlZCgpO1xuICAgICAgICAgICAgdmFyIG5vdGlmeSA9IGhhc0xpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBub3RpZnkgfHwgbm90aWZ5U3B5XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZGVsZXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6IHRoaXMuX2RhdGEuZ2V0KGtleSkudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGtleVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgICAgICBzcHlSZXBvcnRTdGFydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBuYW1lOiB0aGlzLm5hbWUsIGtleToga2V5IH0pKTtcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5fa2V5c0F0b20ucmVwb3J0Q2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgIF90aGlzLl91cGRhdGVIYXNNYXBFbnRyeShrZXksIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IF90aGlzLl9kYXRhLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIG9ic2VydmFibGUuc2V0TmV3VmFsdWUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5fZGF0YS5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG5vdGlmeSlcbiAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgY2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICAgICAgICAgIHNweVJlcG9ydEVuZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUuX3VwZGF0ZUhhc01hcEVudHJ5ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5faGFzTWFwLmdldChrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgIGVudHJ5LnNldE5ld1ZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUuX3VwZGF0ZVZhbHVlID0gZnVuY3Rpb24gKGtleSwgbmV3VmFsdWUpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSB0aGlzLl9kYXRhLmdldChrZXkpO1xuICAgICAgICBuZXdWYWx1ZSA9IG9ic2VydmFibGUucHJlcGFyZU5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgaWYgKG5ld1ZhbHVlICE9PSBnbG9iYWxTdGF0ZS5VTkNIQU5HRUQpIHtcbiAgICAgICAgICAgIHZhciBub3RpZnlTcHkgPSBpc1NweUVuYWJsZWQoKTtcbiAgICAgICAgICAgIHZhciBub3RpZnkgPSBoYXNMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgICAgICB2YXIgY2hhbmdlID0gbm90aWZ5IHx8IG5vdGlmeVNweVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiBvYnNlcnZhYmxlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgICAgICBzcHlSZXBvcnRTdGFydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBuYW1lOiB0aGlzLm5hbWUsIGtleToga2V5IH0pKTtcbiAgICAgICAgICAgIG9ic2VydmFibGUuc2V0TmV3VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeSlcbiAgICAgICAgICAgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgY2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICAgICAgICAgIHNweVJlcG9ydEVuZCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZS5fYWRkVmFsdWUgPSBmdW5jdGlvbiAoa2V5LCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBjaGVja0lmU3RhdGVNb2RpZmljYXRpb25zQXJlQWxsb3dlZCh0aGlzLl9rZXlzQXRvbSk7XG4gICAgICAgIHRyYW5zYWN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGVWYWx1ZShuZXdWYWx1ZSwgX3RoaXMuZW5oYW5jZXIsIF90aGlzLm5hbWUgKyBcIi5cIiArIHN0cmluZ2lmeUtleShrZXkpLCBmYWxzZSk7XG4gICAgICAgICAgICBfdGhpcy5fZGF0YS5zZXQoa2V5LCBvYnNlcnZhYmxlKTtcbiAgICAgICAgICAgIG5ld1ZhbHVlID0gb2JzZXJ2YWJsZS52YWx1ZTsgLy8gdmFsdWUgbWlnaHQgaGF2ZSBiZWVuIGNoYW5nZWRcbiAgICAgICAgICAgIF90aGlzLl91cGRhdGVIYXNNYXBFbnRyeShrZXksIHRydWUpO1xuICAgICAgICAgICAgX3RoaXMuX2tleXNBdG9tLnJlcG9ydENoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBub3RpZnlTcHkgPSBpc1NweUVuYWJsZWQoKTtcbiAgICAgICAgdmFyIG5vdGlmeSA9IGhhc0xpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgdmFyIGNoYW5nZSA9IG5vdGlmeSB8fCBub3RpZnlTcHlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiYWRkXCIsXG4gICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLFxuICAgICAgICAgICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICBzcHlSZXBvcnRTdGFydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBuYW1lOiB0aGlzLm5hbWUsIGtleToga2V5IH0pKTtcbiAgICAgICAgaWYgKG5vdGlmeSlcbiAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBjaGFuZ2UpO1xuICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgIHNweVJlcG9ydEVuZCgpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAodGhpcy5oYXMoa2V5KSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlaGFuY2VWYWx1ZSh0aGlzLl9kYXRhLmdldChrZXkpLmdldCgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVoYW5jZVZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZS5kZWhhbmNlVmFsdWUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVoYW5jZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVoYW5jZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmtleXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2tleXNBdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhLmtleXMoKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cygpO1xuICAgICAgICByZXR1cm4gbWFrZUl0ZXJhYmxlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2IgPSBrZXlzLm5leHQoKSwgZG9uZSA9IF9iLmRvbmUsIHZhbHVlID0gX2IudmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZTogZG9uZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRvbmUgPyB1bmRlZmluZWQgOiBzZWxmLmdldCh2YWx1ZSlcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgdmFyIGtleXMgPSB0aGlzLmtleXMoKTtcbiAgICAgICAgcmV0dXJuIG1ha2VJdGVyYWJsZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9iID0ga2V5cy5uZXh0KCksIGRvbmUgPSBfYi5kb25lLCB2YWx1ZSA9IF9iLnZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmU6IGRvbmUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkb25lID8gdW5kZWZpbmVkIDogW3ZhbHVlLCBzZWxmLmdldCh2YWx1ZSldXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZVsoX2EgPSAkbW9ieCwgU3ltYm9sLml0ZXJhdG9yKV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVudHJpZXMoKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgdmFyIGVfMSwgX2I7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBfYyA9IF9fdmFsdWVzKHRoaXMpLCBfZCA9IF9jLm5leHQoKTsgIV9kLmRvbmU7IF9kID0gX2MubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9lID0gX19yZWFkKF9kLnZhbHVlLCAyKSwga2V5ID0gX2VbMF0sIHZhbHVlID0gX2VbMV07XG4gICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB2YWx1ZSwga2V5LCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKF9kICYmICFfZC5kb25lICYmIChfYiA9IF9jLnJldHVybikpIF9iLmNhbGwoX2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICAvKiogTWVyZ2UgYW5vdGhlciBvYmplY3QgaW50byB0aGlzIG9iamVjdCwgcmV0dXJucyB0aGlzLiAqL1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLm1lcmdlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChpc09ic2VydmFibGVNYXAob3RoZXIpKSB7XG4gICAgICAgICAgICBvdGhlciA9IG90aGVyLnRvSlMoKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2FjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcHJldiA9IGFsbG93U3RhdGVDaGFuZ2VzU3RhcnQodHJ1ZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KG90aGVyKSlcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGxhaW5PYmplY3RLZXlzKG90aGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5zZXQoa2V5LCBvdGhlcltrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvdGhlcikpXG4gICAgICAgICAgICAgICAgICAgIG90aGVyLmZvckVhY2goZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2MgPSBfX3JlYWQoX2IsIDIpLCBrZXkgPSBfY1swXSwgdmFsdWUgPSBfY1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRVM2TWFwKG90aGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAob3RoZXIuY29uc3RydWN0b3IgIT09IE1hcClcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoXCJDYW5ub3QgaW5pdGlhbGl6ZSBmcm9tIGNsYXNzZXMgdGhhdCBpbmhlcml0IGZyb20gTWFwOiBcIiArIG90aGVyLmNvbnN0cnVjdG9yLm5hbWUpOyAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgb3RoZXIuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGtleSkgeyByZXR1cm4gX3RoaXMuc2V0KGtleSwgdmFsdWUpOyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAob3RoZXIgIT09IG51bGwgJiYgb3RoZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgZmFpbChcIkNhbm5vdCBpbml0aWFsaXplIG1hcCBmcm9tIFwiICsgb3RoZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgYWxsb3dTdGF0ZUNoYW5nZXNFbmQocHJldik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0cmFuc2FjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB1bnRyYWNrZWQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBlXzIsIF9iO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9jID0gX192YWx1ZXMoX3RoaXMua2V5cygpKSwgX2QgPSBfYy5uZXh0KCk7ICFfZC5kb25lOyBfZCA9IF9jLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IF9kLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZCAmJiAhX2QuZG9uZSAmJiAoX2IgPSBfYy5yZXR1cm4pKSBfYi5jYWxsKF9jKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUucmVwbGFjZSA9IGZ1bmN0aW9uICh2YWx1ZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgLy8gSW1wbGVtZW50YXRpb24gcmVxdWlyZW1lbnRzOlxuICAgICAgICAvLyAtIHJlc3BlY3Qgb3JkZXJpbmcgb2YgcmVwbGFjZW1lbnQgbWFwXG4gICAgICAgIC8vIC0gYWxsb3cgaW50ZXJjZXB0b3JzIHRvIHJ1biBhbmQgcG90ZW50aWFsbHkgcHJldmVudCBpbmRpdmlkdWFsIG9wZXJhdGlvbnNcbiAgICAgICAgLy8gLSBkb24ndCByZWNyZWF0ZSBvYnNlcnZhYmxlcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gb3JpZ2luYWwgbWFwIChzbyB3ZSBkb24ndCBkZXN0cm95IGV4aXN0aW5nIHN1YnNjcmlwdGlvbnMpXG4gICAgICAgIC8vIC0gZG9uJ3QgX2tleXNBdG9tLnJlcG9ydENoYW5nZWQgaWYgdGhlIGtleXMgb2YgcmVzdWx0aW5nIG1hcCBhcmUgaW5kZW50aWNhbCAob3JkZXIgbWF0dGVycyEpXG4gICAgICAgIC8vIC0gbm90ZSB0aGF0IHJlc3VsdCBtYXAgbWF5IGRpZmZlciBmcm9tIHJlcGxhY2VtZW50IG1hcCBkdWUgdG8gdGhlIGludGVyY2VwdG9yc1xuICAgICAgICB0cmFuc2FjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8zLCBfYiwgZV80LCBfYztcbiAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gbWFwIHNvIHdlIGNhbiBkbyBxdWljayBrZXkgbG9va3Vwc1xuICAgICAgICAgICAgdmFyIHJlcGxhY2VtZW50TWFwID0gY29udmVydFRvTWFwKHZhbHVlcyk7XG4gICAgICAgICAgICB2YXIgb3JkZXJlZERhdGEgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAvLyBVc2VkIGZvciBvcHRpbWl6YXRpb25cbiAgICAgICAgICAgIHZhciBrZXlzUmVwb3J0Q2hhbmdlZENhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBEZWxldGUga2V5cyB0aGF0IGRvbid0IGV4aXN0IGluIHJlcGxhY2VtZW50IG1hcFxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBrZXkgZGVsZXRpb24gaXMgcHJldmVudGVkIGJ5IGludGVyY2VwdG9yXG4gICAgICAgICAgICAgICAgLy8gYWRkIGVudHJ5IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlc3VsdCBtYXBcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfZCA9IF9fdmFsdWVzKF90aGlzLl9kYXRhLmtleXMoKSksIF9lID0gX2QubmV4dCgpOyAhX2UuZG9uZTsgX2UgPSBfZC5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IF9lLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAvLyBDb25jdXJyZW50bHkgaXRlcmF0aW5nL2RlbGV0aW5nIGtleXNcbiAgICAgICAgICAgICAgICAgICAgLy8gaXRlcmF0b3Igc2hvdWxkIGhhbmRsZSB0aGlzIGNvcnJlY3RseVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlcGxhY2VtZW50TWFwLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsZXRlZCA9IF90aGlzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2FzIHRoZSBrZXkgcmVtb3ZlZD9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxldGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gX2tleXNBdG9tLnJlcG9ydENoYW5nZWQoKSB3YXMgYWxyZWFkeSBjYWxsZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzUmVwb3J0Q2hhbmdlZENhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgcHJldmVudGVkIGJ5IGludGVyY2VwdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX3RoaXMuX2RhdGEuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJlZERhdGEuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfM18xKSB7IGVfMyA9IHsgZXJyb3I6IGVfM18xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfZSAmJiAhX2UuZG9uZSAmJiAoX2IgPSBfZC5yZXR1cm4pKSBfYi5jYWxsKF9kKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzMpIHRocm93IGVfMy5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyBNZXJnZSBlbnRyaWVzXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2YgPSBfX3ZhbHVlcyhyZXBsYWNlbWVudE1hcC5lbnRyaWVzKCkpLCBfZyA9IF9mLm5leHQoKTsgIV9nLmRvbmU7IF9nID0gX2YubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfaCA9IF9fcmVhZChfZy52YWx1ZSwgMiksIGtleSA9IF9oWzBdLCB2YWx1ZSA9IF9oWzFdO1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIHdhbnQgdG8ga25vdyB3aGV0aGVyIGEgbmV3IGtleSBpcyBhZGRlZFxuICAgICAgICAgICAgICAgICAgICB2YXIga2V5RXhpc3RlZCA9IF90aGlzLl9kYXRhLmhhcyhrZXkpO1xuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgb3IgdXBkYXRlIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGFkZGl0aW9uIGNvdWxkIGhhdmUgYmVlbiBwcmV2ZW50IGJ5IGludGVyY2VwdG9yXG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5fZGF0YS5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHVwZGF0ZSBjb3VsZCBoYXZlIGJlZW4gcHJldmVudGVkIGJ5IGludGVyY2VwdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgYWxzbyB3ZSB3YW50IHRvIHByZXNlcnZlIGV4aXN0aW5nIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gdXNlIHZhbHVlIGZyb20gX2RhdGEgbWFwIChpbnN0ZWFkIG9mIHJlcGxhY2VtZW50IG1hcClcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZV8xID0gX3RoaXMuX2RhdGEuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmVkRGF0YS5zZXQoa2V5LCB2YWx1ZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdhcyBhIG5ldyBrZXkgYWRkZWQ/XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWtleUV4aXN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBfa2V5c0F0b20ucmVwb3J0Q2hhbmdlZCgpIHdhcyBhbHJlYWR5IGNhbGxlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXNSZXBvcnRDaGFuZ2VkQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzRfMSkgeyBlXzQgPSB7IGVycm9yOiBlXzRfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX2cgJiYgIV9nLmRvbmUgJiYgKF9jID0gX2YucmV0dXJuKSkgX2MuY2FsbChfZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV80KSB0aHJvdyBlXzQuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBwb3NzaWJsZSBrZXkgb3JkZXIgY2hhbmdlXG4gICAgICAgICAgICBpZiAoIWtleXNSZXBvcnRDaGFuZ2VkQ2FsbGVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLl9kYXRhLnNpemUgIT09IG9yZGVyZWREYXRhLnNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgc2l6ZSBkaWZmZXJzLCBrZXlzIGFyZSBkZWZpbml0ZWx5IG1vZGlmaWVkXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLl9rZXlzQXRvbS5yZXBvcnRDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcjEgPSBfdGhpcy5fZGF0YS5rZXlzKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVyMiA9IG9yZGVyZWREYXRhLmtleXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQxID0gaXRlcjEubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dDIgPSBpdGVyMi5uZXh0KCk7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICghbmV4dDEuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQxLnZhbHVlICE9PSBuZXh0Mi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9rZXlzQXRvbS5yZXBvcnRDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0MSA9IGl0ZXIxLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQyID0gaXRlcjIubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXNlIGNvcnJlY3RseSBvcmRlcmVkIG1hcFxuICAgICAgICAgICAgX3RoaXMuX2RhdGEgPSBvcmRlcmVkRGF0YTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9ic2VydmFibGVNYXAucHJvdG90eXBlLCBcInNpemVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMuX2tleXNBdG9tLnJlcG9ydE9ic2VydmVkKCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5zaXplO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcGxhaW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyB0aGlzIG1hcC5cbiAgICAgKiBOb3RlIHRoYXQgYWxsIHRoZSBrZXlzIGJlaW5nIHN0cmluZ2lmaWVkLlxuICAgICAqIElmIHRoZXJlIGFyZSBkdXBsaWNhdGluZyBrZXlzIGFmdGVyIGNvbnZlcnRpbmcgdGhlbSB0byBzdHJpbmdzLCBiZWhhdmlvdXIgaXMgdW5kZXRlcm1pbmVkLlxuICAgICAqL1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLnRvUE9KTyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfNSwgX2I7XG4gICAgICAgIHZhciByZXMgPSB7fTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIF9jID0gX192YWx1ZXModGhpcyksIF9kID0gX2MubmV4dCgpOyAhX2QuZG9uZTsgX2QgPSBfYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2UgPSBfX3JlYWQoX2QudmFsdWUsIDIpLCBrZXkgPSBfZVswXSwgdmFsdWUgPSBfZVsxXTtcbiAgICAgICAgICAgICAgICAvLyBXZSBsaWUgYWJvdXQgc3ltYm9sIGtleSB0eXBlcyBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8xODYzXG4gICAgICAgICAgICAgICAgcmVzW3R5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIgPyBrZXkgOiBzdHJpbmdpZnlLZXkoa2V5KV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV81XzEpIHsgZV81ID0geyBlcnJvcjogZV81XzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKF9kICYmICFfZC5kb25lICYmIChfYiA9IF9jLnJldHVybikpIF9iLmNhbGwoX2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzUpIHRocm93IGVfNS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc2hhbGxvdyBub24gb2JzZXJ2YWJsZSBvYmplY3QgY2xvbmUgb2YgdGhpcyBtYXAuXG4gICAgICogTm90ZSB0aGF0IHRoZSB2YWx1ZXMgbWlndGggc3RpbGwgYmUgb2JzZXJ2YWJsZS4gRm9yIGEgZGVlcCBjbG9uZSB1c2UgbW9ieC50b0pTLlxuICAgICAqL1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLnRvSlMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwKHRoaXMpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBVc2VkIGJ5IEpTT04uc3RyaW5naWZ5XG4gICAgICAgIHJldHVybiB0aGlzLnRvUE9KTygpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU1hcC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHJldHVybiAodGhpcy5uYW1lICtcbiAgICAgICAgICAgIFwiW3sgXCIgK1xuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmtleXMoKSlcbiAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHN0cmluZ2lmeUtleShrZXkpICsgXCI6IFwiICsgKFwiXCIgKyBfdGhpcy5nZXQoa2V5KSk7IH0pXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKSArXG4gICAgICAgICAgICBcIiB9XVwiKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIE9ic2VydmVzIHRoaXMgb2JqZWN0LiBUcmlnZ2VycyBmb3IgdGhlIGV2ZW50cyAnYWRkJywgJ3VwZGF0ZScgYW5kICdkZWxldGUnLlxuICAgICAqIFNlZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L29ic2VydmVcbiAgICAgKiBmb3IgY2FsbGJhY2sgZGV0YWlsc1xuICAgICAqL1xuICAgIE9ic2VydmFibGVNYXAucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAobGlzdGVuZXIsIGZpcmVJbW1lZGlhdGVseSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgIGludmFyaWFudChmaXJlSW1tZWRpYXRlbHkgIT09IHRydWUsIFwiYG9ic2VydmVgIGRvZXNuJ3Qgc3VwcG9ydCBmaXJlSW1tZWRpYXRlbHk9dHJ1ZSBpbiBjb21iaW5hdGlvbiB3aXRoIG1hcHMuXCIpO1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJMaXN0ZW5lcih0aGlzLCBsaXN0ZW5lcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlTWFwLnByb3RvdHlwZS5pbnRlcmNlcHQgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgICByZXR1cm4gcmVnaXN0ZXJJbnRlcmNlcHRvcih0aGlzLCBoYW5kbGVyKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZhYmxlTWFwO1xufSgpKTtcbi8qICd2YXInIGZpeGVzIHNtYWxsLWJ1aWxkIGlzc3VlICovXG52YXIgaXNPYnNlcnZhYmxlTWFwID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIk9ic2VydmFibGVNYXBcIiwgT2JzZXJ2YWJsZU1hcCk7XG5cbnZhciBfYSQxO1xudmFyIE9ic2VydmFibGVTZXRNYXJrZXIgPSB7fTtcbnZhciBPYnNlcnZhYmxlU2V0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGVTZXQoaW5pdGlhbERhdGEsIGVuaGFuY2VyLCBuYW1lKSB7XG4gICAgICAgIGlmIChlbmhhbmNlciA9PT0gdm9pZCAwKSB7IGVuaGFuY2VyID0gZGVlcEVuaGFuY2VyOyB9XG4gICAgICAgIGlmIChuYW1lID09PSB2b2lkIDApIHsgbmFtZSA9IFwiT2JzZXJ2YWJsZVNldEBcIiArIGdldE5leHRJZCgpOyB9XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXNbX2EkMV0gPSBPYnNlcnZhYmxlU2V0TWFya2VyO1xuICAgICAgICB0aGlzLl9kYXRhID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLl9hdG9tID0gY3JlYXRlQXRvbSh0aGlzLm5hbWUpO1xuICAgICAgICB0aGlzW1N5bWJvbC50b1N0cmluZ1RhZ10gPSBcIlNldFwiO1xuICAgICAgICBpZiAodHlwZW9mIFNldCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJtb2J4LnNldCByZXF1aXJlcyBTZXQgcG9seWZpbGwgZm9yIHRoZSBjdXJyZW50IGJyb3dzZXIuIENoZWNrIGJhYmVsLXBvbHlmaWxsIG9yIGNvcmUtanMvZXM2L3NldC5qc1wiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuaGFuY2VyID0gZnVuY3Rpb24gKG5ld1YsIG9sZFYpIHsgcmV0dXJuIGVuaGFuY2VyKG5ld1YsIG9sZFYsIG5hbWUpOyB9O1xuICAgICAgICBpZiAoaW5pdGlhbERhdGEpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZShpbml0aWFsRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JzZXJ2YWJsZVNldC5wcm90b3R5cGUuZGVoYW5jZVZhbHVlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmRlaGFuY2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlaGFuY2VyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdHJhbnNhY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdW50cmFja2VkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgZV8xLCBfYjtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfYyA9IF9fdmFsdWVzKF90aGlzLl9kYXRhLnZhbHVlcygpKSwgX2QgPSBfYy5uZXh0KCk7ICFfZC5kb25lOyBfZCA9IF9jLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX2QudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2QgJiYgIV9kLmRvbmUgJiYgKF9iID0gX2MucmV0dXJuKSkgX2IuY2FsbChfYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVTZXQucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2tGbiwgdGhpc0FyZykge1xuICAgICAgICB2YXIgZV8yLCBfYjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIF9jID0gX192YWx1ZXModGhpcyksIF9kID0gX2MubmV4dCgpOyAhX2QuZG9uZTsgX2QgPSBfYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBfZC52YWx1ZTtcbiAgICAgICAgICAgICAgICBjYWxsYmFja0ZuLmNhbGwodGhpc0FyZywgdmFsdWUsIHZhbHVlLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKF9kICYmICFfZC5kb25lICYmIChfYiA9IF9jLnJldHVybikpIF9iLmNhbGwoX2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JzZXJ2YWJsZVNldC5wcm90b3R5cGUsIFwic2l6ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5fYXRvbS5yZXBvcnRPYnNlcnZlZCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEuc2l6ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgT2JzZXJ2YWJsZVNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGNoZWNrSWZTdGF0ZU1vZGlmaWNhdGlvbnNBcmVBbGxvd2VkKHRoaXMuX2F0b20pO1xuICAgICAgICBpZiAoaGFzSW50ZXJjZXB0b3JzKHRoaXMpKSB7XG4gICAgICAgICAgICB2YXIgY2hhbmdlID0gaW50ZXJjZXB0Q2hhbmdlKHRoaXMsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFkZFwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAvLyBUT0RPOiBpZGVhbGx5LCB2YWx1ZSA9IGNoYW5nZS52YWx1ZSB3b3VsZCBiZSBkb25lIGhlcmUsIHNvIHRoYXQgdmFsdWVzIGNhbiBiZVxuICAgICAgICAgICAgLy8gY2hhbmdlZCBieSBpbnRlcmNlcHRvci4gU2FtZSBhcHBsaWVzIGZvciBvdGhlciBTZXQgYW5kIE1hcCBhcGkncy5cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgdHJhbnNhY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl9kYXRhLmFkZChfdGhpcy5lbmhhbmNlcih2YWx1ZSwgdW5kZWZpbmVkKSk7XG4gICAgICAgICAgICAgICAgX3RoaXMuX2F0b20ucmVwb3J0Q2hhbmdlZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgbm90aWZ5U3B5ID0gaXNTcHlFbmFibGVkKCk7XG4gICAgICAgICAgICB2YXIgbm90aWZ5ID0gaGFzTGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICAgICAgdmFyIGNoYW5nZSA9IG5vdGlmeSB8fCBub3RpZnlTcHlcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhZGRcIixcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgc3B5UmVwb3J0U3RhcnQoY2hhbmdlKTtcbiAgICAgICAgICAgIGlmIChub3RpZnkpXG4gICAgICAgICAgICAgICAgbm90aWZ5TGlzdGVuZXJzKHRoaXMsIGNoYW5nZSk7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgICAgICBzcHlSZXBvcnRFbmQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGVTZXQucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAoaGFzSW50ZXJjZXB0b3JzKHRoaXMpKSB7XG4gICAgICAgICAgICB2YXIgY2hhbmdlID0gaW50ZXJjZXB0Q2hhbmdlKHRoaXMsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcyxcbiAgICAgICAgICAgICAgICBvbGRWYWx1ZTogdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhciBub3RpZnlTcHkgPSBpc1NweUVuYWJsZWQoKTtcbiAgICAgICAgICAgIHZhciBub3RpZnkgPSBoYXNMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgICAgICB2YXIgY2hhbmdlID0gbm90aWZ5IHx8IG5vdGlmeVNweVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImRlbGV0ZVwiLFxuICAgICAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIG9sZFZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAobm90aWZ5U3B5ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIilcbiAgICAgICAgICAgICAgICBzcHlSZXBvcnRTdGFydChfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hhbmdlKSwgeyBuYW1lOiB0aGlzLm5hbWUgfSkpO1xuICAgICAgICAgICAgdHJhbnNhY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl9hdG9tLnJlcG9ydENoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5fZGF0YS5kZWxldGUodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobm90aWZ5KVxuICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBjaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgc3B5UmVwb3J0RW5kKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fYXRvbS5yZXBvcnRPYnNlcnZlZCgpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YS5oYXModGhpcy5kZWhhbmNlVmFsdWUodmFsdWUpKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVTZXQucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXh0SW5kZXggPSAwO1xuICAgICAgICB2YXIga2V5cyA9IEFycmF5LmZyb20odGhpcy5rZXlzKCkpO1xuICAgICAgICB2YXIgdmFsdWVzID0gQXJyYXkuZnJvbSh0aGlzLnZhbHVlcygpKTtcbiAgICAgICAgcmV0dXJuIG1ha2VJdGVyYWJsZSh7XG4gICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICAgICAgICAgIG5leHRJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA8IHZhbHVlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyB7IHZhbHVlOiBba2V5c1tpbmRleF0sIHZhbHVlc1tpbmRleF1dLCBkb25lOiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgICAgIDogeyBkb25lOiB0cnVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZVNldC5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzKCk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2F0b20ucmVwb3J0T2JzZXJ2ZWQoKTtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICB2YXIgbmV4dEluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9ic2VydmFibGVWYWx1ZXMgPSBBcnJheS5mcm9tKHRoaXMuX2RhdGEudmFsdWVzKCkpO1xuICAgICAgICByZXR1cm4gbWFrZUl0ZXJhYmxlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV4dEluZGV4IDwgb2JzZXJ2YWJsZVZhbHVlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgPyB7IHZhbHVlOiBzZWxmLmRlaGFuY2VWYWx1ZShvYnNlcnZhYmxlVmFsdWVzW25leHRJbmRleCsrXSksIGRvbmU6IGZhbHNlIH1cbiAgICAgICAgICAgICAgICAgICAgOiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmIChpc09ic2VydmFibGVTZXQob3RoZXIpKSB7XG4gICAgICAgICAgICBvdGhlciA9IG90aGVyLnRvSlMoKTtcbiAgICAgICAgfVxuICAgICAgICB0cmFuc2FjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcHJldiA9IGFsbG93U3RhdGVDaGFuZ2VzU3RhcnQodHJ1ZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG90aGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICBvdGhlci5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gX3RoaXMuYWRkKHZhbHVlKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRVM2U2V0KG90aGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICBvdGhlci5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gX3RoaXMuYWRkKHZhbHVlKTsgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG90aGVyICE9PSBudWxsICYmIG90aGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbChcIkNhbm5vdCBpbml0aWFsaXplIHNldCBmcm9tIFwiICsgb3RoZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIGFsbG93U3RhdGVDaGFuZ2VzRW5kKHByZXYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24gKGxpc3RlbmVyLCBmaXJlSW1tZWRpYXRlbHkpIHtcbiAgICAgICAgLy8gVE9ETyAnZmlyZUltbWVkaWF0ZWx5JyBjYW4gYmUgdHJ1ZT9cbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICBpbnZhcmlhbnQoZmlyZUltbWVkaWF0ZWx5ICE9PSB0cnVlLCBcImBvYnNlcnZlYCBkb2Vzbid0IHN1cHBvcnQgZmlyZUltbWVkaWF0ZWx5PXRydWUgaW4gY29tYmluYXRpb24gd2l0aCBzZXRzLlwiKTtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyTGlzdGVuZXIodGhpcywgbGlzdGVuZXIpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZVNldC5wcm90b3R5cGUuaW50ZXJjZXB0ID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVySW50ZXJjZXB0b3IodGhpcywgaGFuZGxlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZS50b0pTID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFNldCh0aGlzKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVTZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgXCJbIFwiICsgQXJyYXkuZnJvbSh0aGlzKS5qb2luKFwiLCBcIikgKyBcIiBdXCI7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlU2V0LnByb3RvdHlwZVsoX2EkMSA9ICRtb2J4LCBTeW1ib2wuaXRlcmF0b3IpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZVNldDtcbn0oKSk7XG52YXIgaXNPYnNlcnZhYmxlU2V0ID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIk9ic2VydmFibGVTZXRcIiwgT2JzZXJ2YWJsZVNldCk7XG5cbnZhciBPYnNlcnZhYmxlT2JqZWN0QWRtaW5pc3RyYXRpb24gPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uKHRhcmdldCwgdmFsdWVzLCBuYW1lLCBkZWZhdWx0RW5oYW5jZXIpIHtcbiAgICAgICAgaWYgKHZhbHVlcyA9PT0gdm9pZCAwKSB7IHZhbHVlcyA9IG5ldyBNYXAoKTsgfVxuICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgdGhpcy52YWx1ZXMgPSB2YWx1ZXM7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuZGVmYXVsdEVuaGFuY2VyID0gZGVmYXVsdEVuaGFuY2VyO1xuICAgICAgICB0aGlzLmtleXNBdG9tID0gbmV3IEF0b20obmFtZSArIFwiLmtleXNcIik7XG4gICAgfVxuICAgIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUucmVhZCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzLmdldChrZXkpLmdldCgpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChrZXksIG5ld1ZhbHVlKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMudGFyZ2V0O1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZSA9IHRoaXMudmFsdWVzLmdldChrZXkpO1xuICAgICAgICBpZiAob2JzZXJ2YWJsZSBpbnN0YW5jZW9mIENvbXB1dGVkVmFsdWUpIHtcbiAgICAgICAgICAgIG9ic2VydmFibGUuc2V0KG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbnRlcmNlcHRcbiAgICAgICAgaWYgKGhhc0ludGVyY2VwdG9ycyh0aGlzKSkge1xuICAgICAgICAgICAgdmFyIGNoYW5nZSA9IGludGVyY2VwdENoYW5nZSh0aGlzLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ1cGRhdGVcIixcbiAgICAgICAgICAgICAgICBvYmplY3Q6IHRoaXMucHJveHkgfHwgaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgbmFtZToga2V5LFxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlOiBuZXdWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBuZXdWYWx1ZSA9IGNoYW5nZS5uZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBuZXdWYWx1ZSA9IG9ic2VydmFibGUucHJlcGFyZU5ld1ZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgLy8gbm90aWZ5IHNweSAmIG9ic2VydmVyc1xuICAgICAgICBpZiAobmV3VmFsdWUgIT09IGdsb2JhbFN0YXRlLlVOQ0hBTkdFRCkge1xuICAgICAgICAgICAgdmFyIG5vdGlmeSA9IGhhc0xpc3RlbmVycyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBub3RpZnlTcHkgPSBpc1NweUVuYWJsZWQoKTtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBub3RpZnkgfHwgbm90aWZ5U3B5XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidXBkYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5wcm94eSB8fCBpbnN0YW5jZSxcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6IG9ic2VydmFibGUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICAgICAgICAgIHNweVJlcG9ydFN0YXJ0KF9fYXNzaWduKF9fYXNzaWduKHt9LCBjaGFuZ2UpLCB7IG5hbWU6IHRoaXMubmFtZSwga2V5OiBrZXkgfSkpO1xuICAgICAgICAgICAgb2JzZXJ2YWJsZS5zZXROZXdWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAobm90aWZ5KVxuICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBjaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgc3B5UmVwb3J0RW5kKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuaGFzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgbWFwID0gdGhpcy5wZW5kaW5nS2V5cyB8fCAodGhpcy5wZW5kaW5nS2V5cyA9IG5ldyBNYXAoKSk7XG4gICAgICAgIHZhciBlbnRyeSA9IG1hcC5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KVxuICAgICAgICAgICAgcmV0dXJuIGVudHJ5LmdldCgpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBleGlzdHMgPSAhIXRoaXMudmFsdWVzLmdldChrZXkpO1xuICAgICAgICAgICAgLy8gUG9zc2libGUgb3B0aW1pemF0aW9uOiBEb24ndCBoYXZlIGEgc2VwYXJhdGUgbWFwIGZvciBub24gZXhpc3Rpbmcga2V5cyxcbiAgICAgICAgICAgIC8vIGJ1dCBzdG9yZSB0aGVtIGluIHRoZSB2YWx1ZXMgbWFwIGluc3RlYWQsIHVzaW5nIGEgc3BlY2lhbCBzeW1ib2wgdG8gZGVub3RlIFwibm90IGV4aXN0aW5nXCJcbiAgICAgICAgICAgIGVudHJ5ID0gbmV3IE9ic2VydmFibGVWYWx1ZShleGlzdHMsIHJlZmVyZW5jZUVuaGFuY2VyLCB0aGlzLm5hbWUgKyBcIi5cIiArIHN0cmluZ2lmeUtleShrZXkpICsgXCI/XCIsIGZhbHNlKTtcbiAgICAgICAgICAgIG1hcC5zZXQoa2V5LCBlbnRyeSk7XG4gICAgICAgICAgICByZXR1cm4gZW50cnkuZ2V0KCk7IC8vIHJlYWQgdG8gc3Vic2NyaWJlXG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuYWRkT2JzZXJ2YWJsZVByb3AgPSBmdW5jdGlvbiAocHJvcE5hbWUsIG5ld1ZhbHVlLCBlbmhhbmNlcikge1xuICAgICAgICBpZiAoZW5oYW5jZXIgPT09IHZvaWQgMCkgeyBlbmhhbmNlciA9IHRoaXMuZGVmYXVsdEVuaGFuY2VyOyB9XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcbiAgICAgICAgYXNzZXJ0UHJvcGVydHlDb25maWd1cmFibGUodGFyZ2V0LCBwcm9wTmFtZSk7XG4gICAgICAgIGlmIChoYXNJbnRlcmNlcHRvcnModGhpcykpIHtcbiAgICAgICAgICAgIHZhciBjaGFuZ2UgPSBpbnRlcmNlcHRDaGFuZ2UodGhpcywge1xuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5wcm94eSB8fCB0YXJnZXQsXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvcE5hbWUsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJhZGRcIixcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZTogbmV3VmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgbmV3VmFsdWUgPSBjaGFuZ2UubmV3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZVZhbHVlKG5ld1ZhbHVlLCBlbmhhbmNlciwgdGhpcy5uYW1lICsgXCIuXCIgKyBzdHJpbmdpZnlLZXkocHJvcE5hbWUpLCBmYWxzZSk7XG4gICAgICAgIHRoaXMudmFsdWVzLnNldChwcm9wTmFtZSwgb2JzZXJ2YWJsZSk7XG4gICAgICAgIG5ld1ZhbHVlID0gb2JzZXJ2YWJsZS52YWx1ZTsgLy8gb2JzZXJ2YWJsZVZhbHVlIG1pZ2h0IGhhdmUgY2hhbmdlZCBpdFxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wTmFtZSwgZ2VuZXJhdGVPYnNlcnZhYmxlUHJvcENvbmZpZyhwcm9wTmFtZSkpO1xuICAgICAgICB0aGlzLm5vdGlmeVByb3BlcnR5QWRkaXRpb24ocHJvcE5hbWUsIG5ld1ZhbHVlKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuYWRkQ29tcHV0ZWRQcm9wID0gZnVuY3Rpb24gKHByb3BlcnR5T3duZXIsIC8vIHdoZXJlIGlzIHRoZSBwcm9wZXJ0eSBkZWNsYXJlZD9cbiAgICBwcm9wTmFtZSwgb3B0aW9ucykge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG4gICAgICAgIG9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCB0aGlzLm5hbWUgKyBcIi5cIiArIHN0cmluZ2lmeUtleShwcm9wTmFtZSk7XG4gICAgICAgIHRoaXMudmFsdWVzLnNldChwcm9wTmFtZSwgbmV3IENvbXB1dGVkVmFsdWUob3B0aW9ucykpO1xuICAgICAgICBpZiAocHJvcGVydHlPd25lciA9PT0gdGFyZ2V0IHx8IGlzUHJvcGVydHlDb25maWd1cmFibGUocHJvcGVydHlPd25lciwgcHJvcE5hbWUpKVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BlcnR5T3duZXIsIHByb3BOYW1lLCBnZW5lcmF0ZUNvbXB1dGVkUHJvcENvbmZpZyhwcm9wTmFtZSkpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghdGhpcy52YWx1ZXMuaGFzKGtleSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhcmdldDtcbiAgICAgICAgaWYgKGhhc0ludGVyY2VwdG9ycyh0aGlzKSkge1xuICAgICAgICAgICAgdmFyIGNoYW5nZSA9IGludGVyY2VwdENoYW5nZSh0aGlzLCB7XG4gICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLnByb3h5IHx8IHRhcmdldCxcbiAgICAgICAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgdHlwZTogXCJyZW1vdmVcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0YXJ0QmF0Y2goKTtcbiAgICAgICAgICAgIHZhciBub3RpZnkgPSBoYXNMaXN0ZW5lcnModGhpcyk7XG4gICAgICAgICAgICB2YXIgbm90aWZ5U3B5ID0gaXNTcHlFbmFibGVkKCk7XG4gICAgICAgICAgICB2YXIgb2xkT2JzZXJ2YWJsZSA9IHRoaXMudmFsdWVzLmdldChrZXkpO1xuICAgICAgICAgICAgdmFyIG9sZFZhbHVlID0gb2xkT2JzZXJ2YWJsZSAmJiBvbGRPYnNlcnZhYmxlLmdldCgpO1xuICAgICAgICAgICAgb2xkT2JzZXJ2YWJsZSAmJiBvbGRPYnNlcnZhYmxlLnNldCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgLy8gbm90aWZ5IGtleSBhbmQga2V5c2V0IGxpc3RlbmVyc1xuICAgICAgICAgICAgdGhpcy5rZXlzQXRvbS5yZXBvcnRDaGFuZ2VkKCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdLZXlzKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5wZW5kaW5nS2V5cy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAoZW50cnkpXG4gICAgICAgICAgICAgICAgICAgIGVudHJ5LnNldChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkZWxldGUgdGhlIHByb3BcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRhcmdldFtrZXldO1xuICAgICAgICAgICAgdmFyIGNoYW5nZSA9IG5vdGlmeSB8fCBub3RpZnlTcHlcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyZW1vdmVcIixcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0OiB0aGlzLnByb3h5IHx8IHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWU6IG9sZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBrZXlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgc3B5UmVwb3J0U3RhcnQoX19hc3NpZ24oX19hc3NpZ24oe30sIGNoYW5nZSksIHsgbmFtZTogdGhpcy5uYW1lLCBrZXk6IGtleSB9KSk7XG4gICAgICAgICAgICBpZiAobm90aWZ5KVxuICAgICAgICAgICAgICAgIG5vdGlmeUxpc3RlbmVycyh0aGlzLCBjaGFuZ2UpO1xuICAgICAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICAgICAgc3B5UmVwb3J0RW5kKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBlbmRCYXRjaCgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlT2JqZWN0QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLmlsbGVnYWxBY2Nlc3MgPSBmdW5jdGlvbiAob3duZXIsIHByb3BOYW1lKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGhhcHBlbnMgaWYgYSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBwcm90b3R5cGUgY2hhaW4sIGJ1dCB0aGUgcHJvcGVydHkgd2FzXG4gICAgICAgICAqIGRlY2xhcmVkIGRpcmVjdGx5IGFzIG93biBwcm9wZXJ0eSBvbiB0aGUgcHJvdG90eXBlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBFLmcuOlxuICAgICAgICAgKiBjbGFzcyBBIHtcbiAgICAgICAgICogfVxuICAgICAgICAgKiBleHRlbmRPYnNlcnZhYmxlKEEucHJvdG90eXBlLCB7IHg6IDEgfSlcbiAgICAgICAgICpcbiAgICAgICAgICogY2xhc3NCIGV4dGVucyBBIHtcbiAgICAgICAgICogfVxuICAgICAgICAgKiBjb25zb2xlLmxvZyhuZXcgQigpLngpXG4gICAgICAgICAqXG4gICAgICAgICAqIEl0IGlzIHVuY2xlYXIgd2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgJ3N0YXRpYycgb3IgaW5oZXJpdGVkLlxuICAgICAgICAgKiBFaXRoZXIgdXNlIGBjb25zb2xlLmxvZyhBLngpYFxuICAgICAgICAgKiBvcjogZGVjb3JhdGUoQSwgeyB4OiBvYnNlcnZhYmxlIH0pXG4gICAgICAgICAqXG4gICAgICAgICAqIFdoZW4gdXNpbmcgZGVjb3JhdGUsIHRoZSBwcm9wZXJ0eSB3aWxsIGFsd2F5cyBiZSByZWRlY2xhcmVkIGFzIG93biBwcm9wZXJ0eSBvbiB0aGUgYWN0dWFsIGluc3RhbmNlXG4gICAgICAgICAqL1xuICAgICAgICBjb25zb2xlLndhcm4oXCJQcm9wZXJ0eSAnXCIgKyBwcm9wTmFtZSArIFwiJyBvZiAnXCIgKyBvd25lciArIFwiJyB3YXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgcHJvdG90eXBlIGNoYWluLiBVc2UgJ2RlY29yYXRlJyBpbnN0ZWFkIHRvIGRlY2xhcmUgdGhlIHByb3Agb3IgYWNjZXNzIGl0IHN0YXRpY2FsbHkgdGhyb3VnaCBpdCdzIG93bmVyXCIpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogT2JzZXJ2ZXMgdGhpcyBvYmplY3QuIFRyaWdnZXJzIGZvciB0aGUgZXZlbnRzICdhZGQnLCAndXBkYXRlJyBhbmQgJ2RlbGV0ZScuXG4gICAgICogU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3Qvb2JzZXJ2ZVxuICAgICAqIGZvciBjYWxsYmFjayBkZXRhaWxzXG4gICAgICovXG4gICAgT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5vYnNlcnZlID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBmaXJlSW1tZWRpYXRlbHkpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICBpbnZhcmlhbnQoZmlyZUltbWVkaWF0ZWx5ICE9PSB0cnVlLCBcImBvYnNlcnZlYCBkb2Vzbid0IHN1cHBvcnQgdGhlIGZpcmUgaW1tZWRpYXRlbHkgcHJvcGVydHkgZm9yIG9ic2VydmFibGUgb2JqZWN0cy5cIik7XG4gICAgICAgIHJldHVybiByZWdpc3Rlckxpc3RlbmVyKHRoaXMsIGNhbGxiYWNrKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbi5wcm90b3R5cGUuaW50ZXJjZXB0ID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVySW50ZXJjZXB0b3IodGhpcywgaGFuZGxlcik7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlT2JqZWN0QWRtaW5pc3RyYXRpb24ucHJvdG90eXBlLm5vdGlmeVByb3BlcnR5QWRkaXRpb24gPSBmdW5jdGlvbiAoa2V5LCBuZXdWYWx1ZSkge1xuICAgICAgICB2YXIgbm90aWZ5ID0gaGFzTGlzdGVuZXJzKHRoaXMpO1xuICAgICAgICB2YXIgbm90aWZ5U3B5ID0gaXNTcHlFbmFibGVkKCk7XG4gICAgICAgIHZhciBjaGFuZ2UgPSBub3RpZnkgfHwgbm90aWZ5U3B5XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFkZFwiLFxuICAgICAgICAgICAgICAgIG9iamVjdDogdGhpcy5wcm94eSB8fCB0aGlzLnRhcmdldCxcbiAgICAgICAgICAgICAgICBuYW1lOiBrZXksXG4gICAgICAgICAgICAgICAgbmV3VmFsdWU6IG5ld1ZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIGlmIChub3RpZnlTcHkgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKVxuICAgICAgICAgICAgc3B5UmVwb3J0U3RhcnQoX19hc3NpZ24oX19hc3NpZ24oe30sIGNoYW5nZSksIHsgbmFtZTogdGhpcy5uYW1lLCBrZXk6IGtleSB9KSk7XG4gICAgICAgIGlmIChub3RpZnkpXG4gICAgICAgICAgICBub3RpZnlMaXN0ZW5lcnModGhpcywgY2hhbmdlKTtcbiAgICAgICAgaWYgKG5vdGlmeVNweSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpXG4gICAgICAgICAgICBzcHlSZXBvcnRFbmQoKTtcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0tleXMpIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMucGVuZGluZ0tleXMuZ2V0KGtleSk7XG4gICAgICAgICAgICBpZiAoZW50cnkpXG4gICAgICAgICAgICAgICAgZW50cnkuc2V0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMua2V5c0F0b20ucmVwb3J0Q2hhbmdlZCgpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uLnByb3RvdHlwZS5nZXRLZXlzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdGhpcy5rZXlzQXRvbS5yZXBvcnRPYnNlcnZlZCgpO1xuICAgICAgICAvLyByZXR1cm4gUmVmbGVjdC5vd25LZXlzKHRoaXMudmFsdWVzKSBhcyBhbnlcbiAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyh0aGlzLnZhbHVlcyksIF9jID0gX2IubmV4dCgpOyAhX2MuZG9uZTsgX2MgPSBfYi5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2QgPSBfX3JlYWQoX2MudmFsdWUsIDIpLCBrZXkgPSBfZFswXSwgdmFsdWUgPSBfZFsxXTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBPYnNlcnZhYmxlVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbjtcbn0oKSk7XG5mdW5jdGlvbiBhc09ic2VydmFibGVPYmplY3QodGFyZ2V0LCBuYW1lLCBkZWZhdWx0RW5oYW5jZXIpIHtcbiAgICBpZiAobmFtZSA9PT0gdm9pZCAwKSB7IG5hbWUgPSBcIlwiOyB9XG4gICAgaWYgKGRlZmF1bHRFbmhhbmNlciA9PT0gdm9pZCAwKSB7IGRlZmF1bHRFbmhhbmNlciA9IGRlZXBFbmhhbmNlcjsgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCAkbW9ieCkpXG4gICAgICAgIHJldHVybiB0YXJnZXRbJG1vYnhdO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICBpbnZhcmlhbnQoT2JqZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpLCBcIkNhbm5vdCBtYWtlIHRoZSBkZXNpZ25hdGVkIG9iamVjdCBvYnNlcnZhYmxlOyBpdCBpcyBub3QgZXh0ZW5zaWJsZVwiKTtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3QodGFyZ2V0KSlcbiAgICAgICAgbmFtZSA9ICh0YXJnZXQuY29uc3RydWN0b3IubmFtZSB8fCBcIk9ic2VydmFibGVPYmplY3RcIikgKyBcIkBcIiArIGdldE5leHRJZCgpO1xuICAgIGlmICghbmFtZSlcbiAgICAgICAgbmFtZSA9IFwiT2JzZXJ2YWJsZU9iamVjdEBcIiArIGdldE5leHRJZCgpO1xuICAgIHZhciBhZG0gPSBuZXcgT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uKHRhcmdldCwgbmV3IE1hcCgpLCBzdHJpbmdpZnlLZXkobmFtZSksIGRlZmF1bHRFbmhhbmNlcik7XG4gICAgYWRkSGlkZGVuUHJvcCh0YXJnZXQsICRtb2J4LCBhZG0pO1xuICAgIHJldHVybiBhZG07XG59XG52YXIgb2JzZXJ2YWJsZVByb3BlcnR5Q29uZmlncyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG52YXIgY29tcHV0ZWRQcm9wZXJ0eUNvbmZpZ3MgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gZ2VuZXJhdGVPYnNlcnZhYmxlUHJvcENvbmZpZyhwcm9wTmFtZSkge1xuICAgIHJldHVybiAob2JzZXJ2YWJsZVByb3BlcnR5Q29uZmlnc1twcm9wTmFtZV0gfHxcbiAgICAgICAgKG9ic2VydmFibGVQcm9wZXJ0eUNvbmZpZ3NbcHJvcE5hbWVdID0ge1xuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzWyRtb2J4XS5yZWFkKHByb3BOYW1lKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgdGhpc1skbW9ieF0ud3JpdGUocHJvcE5hbWUsIHYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG59XG5mdW5jdGlvbiBnZXRBZG1pbmlzdHJhdGlvbkZvckNvbXB1dGVkUHJvcE93bmVyKG93bmVyKSB7XG4gICAgdmFyIGFkbSA9IG93bmVyWyRtb2J4XTtcbiAgICBpZiAoIWFkbSkge1xuICAgICAgICAvLyBiZWNhdXNlIGNvbXB1dGVkIHByb3BzIGFyZSBkZWNsYXJlZCBvbiBwcm90eSxcbiAgICAgICAgLy8gdGhlIGN1cnJlbnQgaW5zdGFuY2UgbWlnaHQgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCB5ZXRcbiAgICAgICAgaW5pdGlhbGl6ZUluc3RhbmNlKG93bmVyKTtcbiAgICAgICAgcmV0dXJuIG93bmVyWyRtb2J4XTtcbiAgICB9XG4gICAgcmV0dXJuIGFkbTtcbn1cbmZ1bmN0aW9uIGdlbmVyYXRlQ29tcHV0ZWRQcm9wQ29uZmlnKHByb3BOYW1lKSB7XG4gICAgcmV0dXJuIChjb21wdXRlZFByb3BlcnR5Q29uZmlnc1twcm9wTmFtZV0gfHxcbiAgICAgICAgKGNvbXB1dGVkUHJvcGVydHlDb25maWdzW3Byb3BOYW1lXSA9IHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZ2xvYmFsU3RhdGUuY29tcHV0ZWRDb25maWd1cmFibGUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRBZG1pbmlzdHJhdGlvbkZvckNvbXB1dGVkUHJvcE93bmVyKHRoaXMpLnJlYWQocHJvcE5hbWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICBnZXRBZG1pbmlzdHJhdGlvbkZvckNvbXB1dGVkUHJvcE93bmVyKHRoaXMpLndyaXRlKHByb3BOYW1lLCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xufVxudmFyIGlzT2JzZXJ2YWJsZU9iamVjdEFkbWluaXN0cmF0aW9uID0gY3JlYXRlSW5zdGFuY2VvZlByZWRpY2F0ZShcIk9ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvblwiLCBPYnNlcnZhYmxlT2JqZWN0QWRtaW5pc3RyYXRpb24pO1xuZnVuY3Rpb24gaXNPYnNlcnZhYmxlT2JqZWN0KHRoaW5nKSB7XG4gICAgaWYgKGlzT2JqZWN0KHRoaW5nKSkge1xuICAgICAgICAvLyBJbml0aWFsaXplcnMgcnVuIGxhemlseSB3aGVuIHRyYW5zcGlsaW5nIHRvIGJhYmVsLCBzbyBtYWtlIHN1cmUgdGhleSBhcmUgcnVuLi4uXG4gICAgICAgIGluaXRpYWxpemVJbnN0YW5jZSh0aGluZyk7XG4gICAgICAgIHJldHVybiBpc09ic2VydmFibGVPYmplY3RBZG1pbmlzdHJhdGlvbih0aGluZ1skbW9ieF0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEF0b20odGhpbmcsIHByb3BlcnR5KSB7XG4gICAgaWYgKHR5cGVvZiB0aGluZyA9PT0gXCJvYmplY3RcIiAmJiB0aGluZyAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlQXJyYXkodGhpbmcpKSB7XG4gICAgICAgICAgICBpZiAocHJvcGVydHkgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICAgICAgICAgICAgICBcIkl0IGlzIG5vdCBwb3NzaWJsZSB0byBnZXQgaW5kZXggYXRvbXMgZnJvbSBhcnJheXNcIik7XG4gICAgICAgICAgICByZXR1cm4gdGhpbmdbJG1vYnhdLmF0b207XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZVNldCh0aGluZykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGluZ1skbW9ieF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZU1hcCh0aGluZykpIHtcbiAgICAgICAgICAgIHZhciBhbnlUaGluZyA9IHRoaW5nO1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFueVRoaW5nLl9rZXlzQXRvbTtcbiAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gYW55VGhpbmcuX2RhdGEuZ2V0KHByb3BlcnR5KSB8fCBhbnlUaGluZy5faGFzTWFwLmdldChwcm9wZXJ0eSk7XG4gICAgICAgICAgICBpZiAoIW9ic2VydmFibGUpXG4gICAgICAgICAgICAgICAgZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgICAgICAgICAgICAgXCJ0aGUgZW50cnkgJ1wiICsgcHJvcGVydHkgKyBcIicgZG9lcyBub3QgZXhpc3QgaW4gdGhlIG9ic2VydmFibGUgbWFwICdcIiArIGdldERlYnVnTmFtZSh0aGluZykgKyBcIidcIik7XG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJbml0aWFsaXplcnMgcnVuIGxhemlseSB3aGVuIHRyYW5zcGlsaW5nIHRvIGJhYmVsLCBzbyBtYWtlIHN1cmUgdGhleSBhcmUgcnVuLi4uXG4gICAgICAgIGluaXRpYWxpemVJbnN0YW5jZSh0aGluZyk7XG4gICAgICAgIGlmIChwcm9wZXJ0eSAmJiAhdGhpbmdbJG1vYnhdKVxuICAgICAgICAgICAgdGhpbmdbcHJvcGVydHldOyAvLyBTZWUgIzEwNzJcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdCh0aGluZykpIHtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmIFwicGxlYXNlIHNwZWNpZnkgYSBwcm9wZXJ0eVwiKTtcbiAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gdGhpbmdbJG1vYnhdLnZhbHVlcy5nZXQocHJvcGVydHkpO1xuICAgICAgICAgICAgaWYgKCFvYnNlcnZhYmxlKVxuICAgICAgICAgICAgICAgIGZhaWwocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiICYmXG4gICAgICAgICAgICAgICAgICAgIFwibm8gb2JzZXJ2YWJsZSBwcm9wZXJ0eSAnXCIgKyBwcm9wZXJ0eSArIFwiJyBmb3VuZCBvbiB0aGUgb2JzZXJ2YWJsZSBvYmplY3QgJ1wiICsgZ2V0RGVidWdOYW1lKHRoaW5nKSArIFwiJ1wiKTtcbiAgICAgICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0F0b20odGhpbmcpIHx8IGlzQ29tcHV0ZWRWYWx1ZSh0aGluZykgfHwgaXNSZWFjdGlvbih0aGluZykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgdGhpbmcgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAoaXNSZWFjdGlvbih0aGluZ1skbW9ieF0pKSB7XG4gICAgICAgICAgICAvLyBkaXNwb3NlciBmdW5jdGlvblxuICAgICAgICAgICAgcmV0dXJuIHRoaW5nWyRtb2J4XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFpbChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgXCJDYW5ub3Qgb2J0YWluIGF0b20gZnJvbSBcIiArIHRoaW5nKTtcbn1cbmZ1bmN0aW9uIGdldEFkbWluaXN0cmF0aW9uKHRoaW5nLCBwcm9wZXJ0eSkge1xuICAgIGlmICghdGhpbmcpXG4gICAgICAgIGZhaWwoXCJFeHBlY3Rpbmcgc29tZSBvYmplY3RcIik7XG4gICAgaWYgKHByb3BlcnR5ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBnZXRBZG1pbmlzdHJhdGlvbihnZXRBdG9tKHRoaW5nLCBwcm9wZXJ0eSkpO1xuICAgIGlmIChpc0F0b20odGhpbmcpIHx8IGlzQ29tcHV0ZWRWYWx1ZSh0aGluZykgfHwgaXNSZWFjdGlvbih0aGluZykpXG4gICAgICAgIHJldHVybiB0aGluZztcbiAgICBpZiAoaXNPYnNlcnZhYmxlTWFwKHRoaW5nKSB8fCBpc09ic2VydmFibGVTZXQodGhpbmcpKVxuICAgICAgICByZXR1cm4gdGhpbmc7XG4gICAgLy8gSW5pdGlhbGl6ZXJzIHJ1biBsYXppbHkgd2hlbiB0cmFuc3BpbGluZyB0byBiYWJlbCwgc28gbWFrZSBzdXJlIHRoZXkgYXJlIHJ1bi4uLlxuICAgIGluaXRpYWxpemVJbnN0YW5jZSh0aGluZyk7XG4gICAgaWYgKHRoaW5nWyRtb2J4XSlcbiAgICAgICAgcmV0dXJuIHRoaW5nWyRtb2J4XTtcbiAgICBmYWlsKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJiBcIkNhbm5vdCBvYnRhaW4gYWRtaW5pc3RyYXRpb24gZnJvbSBcIiArIHRoaW5nKTtcbn1cbmZ1bmN0aW9uIGdldERlYnVnTmFtZSh0aGluZywgcHJvcGVydHkpIHtcbiAgICB2YXIgbmFtZWQ7XG4gICAgaWYgKHByb3BlcnR5ICE9PSB1bmRlZmluZWQpXG4gICAgICAgIG5hbWVkID0gZ2V0QXRvbSh0aGluZywgcHJvcGVydHkpO1xuICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZU9iamVjdCh0aGluZykgfHwgaXNPYnNlcnZhYmxlTWFwKHRoaW5nKSB8fCBpc09ic2VydmFibGVTZXQodGhpbmcpKVxuICAgICAgICBuYW1lZCA9IGdldEFkbWluaXN0cmF0aW9uKHRoaW5nKTtcbiAgICBlbHNlXG4gICAgICAgIG5hbWVkID0gZ2V0QXRvbSh0aGluZyk7IC8vIHZhbGlkIGZvciBhcnJheXMgYXMgd2VsbFxuICAgIHJldHVybiBuYW1lZC5uYW1lO1xufVxuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuZnVuY3Rpb24gZGVlcEVxdWFsKGEsIGIsIGRlcHRoKSB7XG4gICAgaWYgKGRlcHRoID09PSB2b2lkIDApIHsgZGVwdGggPSAtMTsgfVxuICAgIHJldHVybiBlcShhLCBiLCBkZXB0aCk7XG59XG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vamFzaGtlbmFzL3VuZGVyc2NvcmUvYmxvYi81YzIzN2E3YzY4MmZiNjhmZDUzNzgyMDNmMGJmMjJkY2UxNjI0ODU0L3VuZGVyc2NvcmUuanMjTDExODYtTDEyODlcbi8vIEludGVybmFsIHJlY3Vyc2l2ZSBjb21wYXJpc29uIGZ1bmN0aW9uIGZvciBgaXNFcXVhbGAuXG5mdW5jdGlvbiBlcShhLCBiLCBkZXB0aCwgYVN0YWNrLCBiU3RhY2spIHtcbiAgICAvLyBJZGVudGljYWwgb2JqZWN0cyBhcmUgZXF1YWwuIGAwID09PSAtMGAsIGJ1dCB0aGV5IGFyZW4ndCBpZGVudGljYWwuXG4gICAgLy8gU2VlIHRoZSBbSGFybW9ueSBgZWdhbGAgcHJvcG9zYWxdKGh0dHA6Ly93aWtpLmVjbWFzY3JpcHQub3JnL2Rva3UucGhwP2lkPWhhcm1vbnk6ZWdhbCkuXG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtcbiAgICAvLyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAgb25seSBlcXVhbCB0byBpdHNlbGYgKHN0cmljdCBjb21wYXJpc29uKS5cbiAgICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGBOYU5gcyBhcmUgZXF1aXZhbGVudCwgYnV0IG5vbi1yZWZsZXhpdmUuXG4gICAgaWYgKGEgIT09IGEpXG4gICAgICAgIHJldHVybiBiICE9PSBiO1xuICAgIC8vIEV4aGF1c3QgcHJpbWl0aXZlIGNoZWNrc1xuICAgIHZhciB0eXBlID0gdHlwZW9mIGE7XG4gICAgaWYgKHR5cGUgIT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBiICE9IFwib2JqZWN0XCIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBDb21wYXJlIGBbW0NsYXNzXV1gIG5hbWVzLlxuICAgIHZhciBjbGFzc05hbWUgPSB0b1N0cmluZy5jYWxsKGEpO1xuICAgIGlmIChjbGFzc05hbWUgIT09IHRvU3RyaW5nLmNhbGwoYikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBzd2l0Y2ggKGNsYXNzTmFtZSkge1xuICAgICAgICAvLyBTdHJpbmdzLCBudW1iZXJzLCByZWd1bGFyIGV4cHJlc3Npb25zLCBkYXRlcywgYW5kIGJvb2xlYW5zIGFyZSBjb21wYXJlZCBieSB2YWx1ZS5cbiAgICAgICAgY2FzZSBcIltvYmplY3QgUmVnRXhwXVwiOlxuICAgICAgICAvLyBSZWdFeHBzIGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MgZm9yIGNvbXBhcmlzb24gKE5vdGU6ICcnICsgL2EvaSA9PT0gJy9hL2knKVxuICAgICAgICBjYXNlIFwiW29iamVjdCBTdHJpbmddXCI6XG4gICAgICAgICAgICAvLyBQcmltaXRpdmVzIGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG9iamVjdCB3cmFwcGVycyBhcmUgZXF1aXZhbGVudDsgdGh1cywgYFwiNVwiYCBpc1xuICAgICAgICAgICAgLy8gZXF1aXZhbGVudCB0byBgbmV3IFN0cmluZyhcIjVcIilgLlxuICAgICAgICAgICAgcmV0dXJuIFwiXCIgKyBhID09PSBcIlwiICsgYjtcbiAgICAgICAgY2FzZSBcIltvYmplY3QgTnVtYmVyXVwiOlxuICAgICAgICAgICAgLy8gYE5hTmBzIGFyZSBlcXVpdmFsZW50LCBidXQgbm9uLXJlZmxleGl2ZS5cbiAgICAgICAgICAgIC8vIE9iamVjdChOYU4pIGlzIGVxdWl2YWxlbnQgdG8gTmFOLlxuICAgICAgICAgICAgaWYgKCthICE9PSArYSlcbiAgICAgICAgICAgICAgICByZXR1cm4gK2IgIT09ICtiO1xuICAgICAgICAgICAgLy8gQW4gYGVnYWxgIGNvbXBhcmlzb24gaXMgcGVyZm9ybWVkIGZvciBvdGhlciBudW1lcmljIHZhbHVlcy5cbiAgICAgICAgICAgIHJldHVybiArYSA9PT0gMCA/IDEgLyArYSA9PT0gMSAvIGIgOiArYSA9PT0gK2I7XG4gICAgICAgIGNhc2UgXCJbb2JqZWN0IERhdGVdXCI6XG4gICAgICAgIGNhc2UgXCJbb2JqZWN0IEJvb2xlYW5dXCI6XG4gICAgICAgICAgICAvLyBDb2VyY2UgZGF0ZXMgYW5kIGJvb2xlYW5zIHRvIG51bWVyaWMgcHJpbWl0aXZlIHZhbHVlcy4gRGF0ZXMgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyXG4gICAgICAgICAgICAvLyBtaWxsaXNlY29uZCByZXByZXNlbnRhdGlvbnMuIE5vdGUgdGhhdCBpbnZhbGlkIGRhdGVzIHdpdGggbWlsbGlzZWNvbmQgcmVwcmVzZW50YXRpb25zXG4gICAgICAgICAgICAvLyBvZiBgTmFOYCBhcmUgbm90IGVxdWl2YWxlbnQuXG4gICAgICAgICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgICAgICBjYXNlIFwiW29iamVjdCBTeW1ib2xdXCI6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLnZhbHVlT2YuY2FsbChhKSA9PT0gU3ltYm9sLnZhbHVlT2YuY2FsbChiKSk7XG4gICAgICAgIGNhc2UgXCJbb2JqZWN0IE1hcF1cIjpcbiAgICAgICAgY2FzZSBcIltvYmplY3QgU2V0XVwiOlxuICAgICAgICAgICAgLy8gTWFwcyBhbmQgU2V0cyBhcmUgdW53cmFwcGVkIHRvIGFycmF5cyBvZiBlbnRyeS1wYWlycywgYWRkaW5nIGFuIGluY2lkZW50YWwgbGV2ZWwuXG4gICAgICAgICAgICAvLyBIaWRlIHRoaXMgZXh0cmEgbGV2ZWwgYnkgaW5jcmVhc2luZyB0aGUgZGVwdGguXG4gICAgICAgICAgICBpZiAoZGVwdGggPj0gMCkge1xuICAgICAgICAgICAgICAgIGRlcHRoKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gVW53cmFwIGFueSB3cmFwcGVkIG9iamVjdHMuXG4gICAgYSA9IHVud3JhcChhKTtcbiAgICBiID0gdW53cmFwKGIpO1xuICAgIHZhciBhcmVBcnJheXMgPSBjbGFzc05hbWUgPT09IFwiW29iamVjdCBBcnJheV1cIjtcbiAgICBpZiAoIWFyZUFycmF5cykge1xuICAgICAgICBpZiAodHlwZW9mIGEgIT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgYiAhPSBcIm9iamVjdFwiKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBPYmplY3RzIHdpdGggZGlmZmVyZW50IGNvbnN0cnVjdG9ycyBhcmUgbm90IGVxdWl2YWxlbnQsIGJ1dCBgT2JqZWN0YHMgb3IgYEFycmF5YHNcbiAgICAgICAgLy8gZnJvbSBkaWZmZXJlbnQgZnJhbWVzIGFyZS5cbiAgICAgICAgdmFyIGFDdG9yID0gYS5jb25zdHJ1Y3RvciwgYkN0b3IgPSBiLmNvbnN0cnVjdG9yO1xuICAgICAgICBpZiAoYUN0b3IgIT09IGJDdG9yICYmXG4gICAgICAgICAgICAhKHR5cGVvZiBhQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgYUN0b3IgaW5zdGFuY2VvZiBhQ3RvciAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBiQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgYkN0b3IgaW5zdGFuY2VvZiBiQ3RvcikgJiZcbiAgICAgICAgICAgIChcImNvbnN0cnVjdG9yXCIgaW4gYSAmJiBcImNvbnN0cnVjdG9yXCIgaW4gYikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChkZXB0aCA8IDApIHtcbiAgICAgICAgZGVwdGggPSAtMTtcbiAgICB9XG4gICAgLy8gQXNzdW1lIGVxdWFsaXR5IGZvciBjeWNsaWMgc3RydWN0dXJlcy4gVGhlIGFsZ29yaXRobSBmb3IgZGV0ZWN0aW5nIGN5Y2xpY1xuICAgIC8vIHN0cnVjdHVyZXMgaXMgYWRhcHRlZCBmcm9tIEVTIDUuMSBzZWN0aW9uIDE1LjEyLjMsIGFic3RyYWN0IG9wZXJhdGlvbiBgSk9gLlxuICAgIC8vIEluaXRpYWxpemluZyBzdGFjayBvZiB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAgICAvLyBJdCdzIGRvbmUgaGVyZSBzaW5jZSB3ZSBvbmx5IG5lZWQgdGhlbSBmb3Igb2JqZWN0cyBhbmQgYXJyYXlzIGNvbXBhcmlzb24uXG4gICAgYVN0YWNrID0gYVN0YWNrIHx8IFtdO1xuICAgIGJTdGFjayA9IGJTdGFjayB8fCBbXTtcbiAgICB2YXIgbGVuZ3RoID0gYVN0YWNrLmxlbmd0aDtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgLy8gTGluZWFyIHNlYXJjaC4gUGVyZm9ybWFuY2UgaXMgaW52ZXJzZWx5IHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mXG4gICAgICAgIC8vIHVuaXF1ZSBuZXN0ZWQgc3RydWN0dXJlcy5cbiAgICAgICAgaWYgKGFTdGFja1tsZW5ndGhdID09PSBhKVxuICAgICAgICAgICAgcmV0dXJuIGJTdGFja1tsZW5ndGhdID09PSBiO1xuICAgIH1cbiAgICAvLyBBZGQgdGhlIGZpcnN0IG9iamVjdCB0byB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnB1c2goYSk7XG4gICAgYlN0YWNrLnB1c2goYik7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAgaWYgKGFyZUFycmF5cykge1xuICAgICAgICAvLyBDb21wYXJlIGFycmF5IGxlbmd0aHMgdG8gZGV0ZXJtaW5lIGlmIGEgZGVlcCBjb21wYXJpc29uIGlzIG5lY2Vzc2FyeS5cbiAgICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBEZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLCBpZ25vcmluZyBub24tbnVtZXJpYyBwcm9wZXJ0aWVzLlxuICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgICAgIGlmICghZXEoYVtsZW5ndGhdLCBiW2xlbmd0aF0sIGRlcHRoIC0gMSwgYVN0YWNrLCBiU3RhY2spKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gRGVlcCBjb21wYXJlIG9iamVjdHMuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIHZhciBrZXkgPSB2b2lkIDA7XG4gICAgICAgIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAvLyBFbnN1cmUgdGhhdCBib3RoIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBudW1iZXIgb2YgcHJvcGVydGllcyBiZWZvcmUgY29tcGFyaW5nIGRlZXAgZXF1YWxpdHkuXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhiKS5sZW5ndGggIT09IGxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgICAgICAvLyBEZWVwIGNvbXBhcmUgZWFjaCBtZW1iZXJcbiAgICAgICAgICAgIGtleSA9IGtleXNbbGVuZ3RoXTtcbiAgICAgICAgICAgIGlmICghKGhhcyQxKGIsIGtleSkgJiYgZXEoYVtrZXldLCBiW2tleV0sIGRlcHRoIC0gMSwgYVN0YWNrLCBiU3RhY2spKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUmVtb3ZlIHRoZSBmaXJzdCBvYmplY3QgZnJvbSB0aGUgc3RhY2sgb2YgdHJhdmVyc2VkIG9iamVjdHMuXG4gICAgYVN0YWNrLnBvcCgpO1xuICAgIGJTdGFjay5wb3AoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHVud3JhcChhKSB7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZUFycmF5KGEpKVxuICAgICAgICByZXR1cm4gYS5zbGljZSgpO1xuICAgIGlmIChpc0VTNk1hcChhKSB8fCBpc09ic2VydmFibGVNYXAoYSkpXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKGEuZW50cmllcygpKTtcbiAgICBpZiAoaXNFUzZTZXQoYSkgfHwgaXNPYnNlcnZhYmxlU2V0KGEpKVxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShhLmVudHJpZXMoKSk7XG4gICAgcmV0dXJuIGE7XG59XG5mdW5jdGlvbiBoYXMkMShhLCBrZXkpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGtleSk7XG59XG5cbmZ1bmN0aW9uIG1ha2VJdGVyYWJsZShpdGVyYXRvcikge1xuICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBnZXRTZWxmO1xuICAgIHJldHVybiBpdGVyYXRvcjtcbn1cbmZ1bmN0aW9uIGdldFNlbGYoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogKGMpIE1pY2hlbCBXZXN0c3RyYXRlIDIwMTUgLSAyMDE4XG4gKiBNSVQgTGljZW5zZWRcbiAqXG4gKiBXZWxjb21lIHRvIHRoZSBtb2J4IHNvdXJjZXMhIFRvIGdldCBhbiBnbG9iYWwgb3ZlcnZpZXcgb2YgaG93IE1vYlggaW50ZXJuYWxseSB3b3JrcyxcbiAqIHRoaXMgaXMgYSBnb29kIHBsYWNlIHRvIHN0YXJ0OlxuICogaHR0cHM6Ly9tZWRpdW0uY29tL0Btd2VzdHN0cmF0ZS9iZWNvbWluZy1mdWxseS1yZWFjdGl2ZS1hbi1pbi1kZXB0aC1leHBsYW5hdGlvbi1vZi1tb2JzZXJ2YWJsZS01NTk5NTI2MmEyNTQjLnh2Ymg2cWQ3NFxuICpcbiAqIFNvdXJjZSBmb2xkZXJzOlxuICogPT09PT09PT09PT09PT09XG4gKlxuICogLSBhcGkvICAgICBNb3N0IG9mIHRoZSBwdWJsaWMgc3RhdGljIG1ldGhvZHMgZXhwb3NlZCBieSB0aGUgbW9kdWxlIGNhbiBiZSBmb3VuZCBoZXJlLlxuICogLSBjb3JlLyAgICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgTW9iWCBhbGdvcml0aG07IGF0b21zLCBkZXJpdmF0aW9ucywgcmVhY3Rpb25zLCBkZXBlbmRlbmN5IHRyZWVzLCBvcHRpbWl6YXRpb25zLiBDb29sIHN0dWZmIGNhbiBiZSBmb3VuZCBoZXJlLlxuICogLSB0eXBlcy8gICBBbGwgdGhlIG1hZ2ljIHRoYXQgaXMgbmVlZCB0byBoYXZlIG9ic2VydmFibGUgb2JqZWN0cywgYXJyYXlzIGFuZCB2YWx1ZXMgaXMgaW4gdGhpcyBmb2xkZXIuIEluY2x1ZGluZyB0aGUgbW9kaWZpZXJzIGxpa2UgYGFzRmxhdGAuXG4gKiAtIHV0aWxzLyAgIFV0aWxpdHkgc3R1ZmYuXG4gKlxuICovXG5pZiAodHlwZW9mIFByb3h5ID09PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbbW9ieF0gTW9iWCA1KyByZXF1aXJlcyBQcm94eSBhbmQgU3ltYm9sIG9iamVjdHMuIElmIHlvdXIgZW52aXJvbm1lbnQgZG9lc24ndCBzdXBwb3J0IFN5bWJvbCBvciBQcm94eSBvYmplY3RzLCBwbGVhc2UgZG93bmdyYWRlIHRvIE1vYlggNC4gRm9yIFJlYWN0IE5hdGl2ZSBBbmRyb2lkLCBjb25zaWRlciB1cGdyYWRpbmcgSlNDb3JlLlwiKTtcbn1cbnRyeSB7XG4gICAgLy8gZGVmaW5lIHByb2Nlc3MuZW52IGlmIG5lZWRlZFxuICAgIC8vIGlmIHRoaXMgaXMgbm90IGEgcHJvZHVjdGlvbiBidWlsZCBpbiB0aGUgZmlyc3QgcGxhY2VcbiAgICAvLyAoaW4gd2hpY2ggY2FzZSB0aGUgZXhwcmVzc2lvbiBiZWxvdyB3b3VsZCBiZSBzdWJzdGl0dXRlZCB3aXRoICdwcm9kdWN0aW9uJylcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOVjtcbn1cbmNhdGNoIChlKSB7XG4gICAgdmFyIGcgPSBnZXRHbG9iYWwoKTtcbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIGcucHJvY2VzcyA9IHt9O1xuICAgIGcucHJvY2Vzcy5lbnYgPSB7fTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gdGVzdENvZGVNaW5pZmljYXRpb24oKSB7IH1cbiAgICBpZiAodGVzdENvZGVNaW5pZmljYXRpb24ubmFtZSAhPT0gXCJ0ZXN0Q29kZU1pbmlmaWNhdGlvblwiICYmXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiAmJlxuICAgICAgICB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5lbnYuSUdOT1JFX01PQlhfTUlOSUZZX1dBUk5JTkcgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIC8vIHRyaWNrIHNvIGl0IGRvZXNuJ3QgZ2V0IHJlcGxhY2VkXG4gICAgICAgIHZhciB2YXJOYW1lID0gW1wicHJvY2Vzc1wiLCBcImVudlwiLCBcIk5PREVfRU5WXCJdLmpvaW4oXCIuXCIpO1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbbW9ieF0geW91IGFyZSBydW5uaW5nIGEgbWluaWZpZWQgYnVpbGQsIGJ1dCAnXCIgKyB2YXJOYW1lICsgXCInIHdhcyBub3Qgc2V0IHRvICdwcm9kdWN0aW9uJyBpbiB5b3VyIGJ1bmRsZXIuIFRoaXMgcmVzdWx0cyBpbiBhbiB1bm5lY2Vzc2FyaWx5IGxhcmdlIGFuZCBzbG93IGJ1bmRsZVwiKTtcbiAgICB9XG59KSgpO1xuaWYgKHR5cGVvZiBfX01PQlhfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gXCJvYmplY3RcIikge1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZHlrb2cvbW9ieC1kZXZ0b29scy9cbiAgICBfX01PQlhfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5pbmplY3RNb2J4KHtcbiAgICAgICAgc3B5OiBzcHksXG4gICAgICAgIGV4dHJhczoge1xuICAgICAgICAgICAgZ2V0RGVidWdOYW1lOiBnZXREZWJ1Z05hbWVcbiAgICAgICAgfSxcbiAgICAgICAgJG1vYng6ICRtb2J4XG4gICAgfSk7XG59XG5cbmV4cG9ydCB7ICRtb2J4LCBGbG93Q2FuY2VsbGF0aW9uRXJyb3IsIElEZXJpdmF0aW9uU3RhdGUsIE9ic2VydmFibGVNYXAsIE9ic2VydmFibGVTZXQsIFJlYWN0aW9uLCBhbGxvd1N0YXRlQ2hhbmdlcyBhcyBfYWxsb3dTdGF0ZUNoYW5nZXMsIGFsbG93U3RhdGVDaGFuZ2VzSW5zaWRlQ29tcHV0ZWQgYXMgX2FsbG93U3RhdGVDaGFuZ2VzSW5zaWRlQ29tcHV0ZWQsIGFsbG93U3RhdGVSZWFkc0VuZCBhcyBfYWxsb3dTdGF0ZVJlYWRzRW5kLCBhbGxvd1N0YXRlUmVhZHNTdGFydCBhcyBfYWxsb3dTdGF0ZVJlYWRzU3RhcnQsIF9lbmRBY3Rpb24sIGdldEFkbWluaXN0cmF0aW9uIGFzIF9nZXRBZG1pbmlzdHJhdGlvbiwgZ2V0R2xvYmFsU3RhdGUgYXMgX2dldEdsb2JhbFN0YXRlLCBpbnRlcmNlcHRSZWFkcyBhcyBfaW50ZXJjZXB0UmVhZHMsIGlzQ29tcHV0aW5nRGVyaXZhdGlvbiBhcyBfaXNDb21wdXRpbmdEZXJpdmF0aW9uLCByZXNldEdsb2JhbFN0YXRlIGFzIF9yZXNldEdsb2JhbFN0YXRlLCBfc3RhcnRBY3Rpb24sIGFjdGlvbiwgYXV0b3J1biwgY29tcGFyZXIsIGNvbXB1dGVkLCBjb25maWd1cmUsIGNyZWF0ZUF0b20sIGRlY29yYXRlLCBlbnRyaWVzLCBleHRlbmRPYnNlcnZhYmxlLCBmbG93LCBnZXQsIGdldEF0b20sIGdldERlYnVnTmFtZSwgZ2V0RGVwZW5kZW5jeVRyZWUsIGdldE9ic2VydmVyVHJlZSwgaGFzLCBpbnRlcmNlcHQsIGlzQWN0aW9uLCBpc0FycmF5TGlrZSwgaXNPYnNlcnZhYmxlVmFsdWUgYXMgaXNCb3hlZE9ic2VydmFibGUsIGlzQ29tcHV0ZWQsIGlzQ29tcHV0ZWRQcm9wLCBpc0Zsb3dDYW5jZWxsYXRpb25FcnJvciwgaXNPYnNlcnZhYmxlLCBpc09ic2VydmFibGVBcnJheSwgaXNPYnNlcnZhYmxlTWFwLCBpc09ic2VydmFibGVPYmplY3QsIGlzT2JzZXJ2YWJsZVByb3AsIGlzT2JzZXJ2YWJsZVNldCwga2V5cywgb2JzZXJ2YWJsZSwgb2JzZXJ2ZSwgb25CZWNvbWVPYnNlcnZlZCwgb25CZWNvbWVVbm9ic2VydmVkLCBvblJlYWN0aW9uRXJyb3IsIHJlYWN0aW9uLCByZW1vdmUsIHJ1bkluQWN0aW9uLCBzZXQsIHNweSwgdG9KUywgdHJhY2UsIHRyYW5zYWN0aW9uLCB1bnRyYWNrZWQsIHZhbHVlcywgd2hlbiB9O1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfZXF1YWxzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fZXF1YWxzJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiBpdHMgYXJndW1lbnRzIGFyZSBlcXVpdmFsZW50LCBgZmFsc2VgIG90aGVyd2lzZS4gSGFuZGxlc1xuICogY3ljbGljYWwgZGF0YSBzdHJ1Y3R1cmVzLlxuICpcbiAqIERpc3BhdGNoZXMgc3ltbWV0cmljYWxseSB0byB0aGUgYGVxdWFsc2AgbWV0aG9kcyBvZiBib3RoIGFyZ3VtZW50cywgaWZcbiAqIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTUuMFxuICogQGNhdGVnb3J5IFJlbGF0aW9uXG4gKiBAc2lnIGEgLT4gYiAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmVxdWFscygxLCAxKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuZXF1YWxzKDEsICcxJyk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5lcXVhbHMoWzEsIDIsIDNdLCBbMSwgMiwgM10pOyAvLz0+IHRydWVcbiAqXG4gKiAgICAgIHZhciBhID0ge307IGEudiA9IGE7XG4gKiAgICAgIHZhciBiID0ge307IGIudiA9IGI7XG4gKiAgICAgIFIuZXF1YWxzKGEsIGIpOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBfZXF1YWxzKGEsIGIsIFtdLCBbXSk7XG59KTtcbiIsInZhciBfaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFyZ3VtZW50cykgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nID9cbiAgICBmdW5jdGlvbiBfaXNBcmd1bWVudHMoeCkgeyByZXR1cm4gdG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7IH0gOlxuICAgIGZ1bmN0aW9uIF9pc0FyZ3VtZW50cyh4KSB7IHJldHVybiBfaGFzKCdjYWxsZWUnLCB4KTsgfTtcbn0oKSk7XG4iLCIvKipcbiAqIFByaXZhdGUgYGNvbmNhdGAgZnVuY3Rpb24gdG8gbWVyZ2UgdHdvIGFycmF5LWxpa2Ugb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxBcmd1bWVudHN9IFtzZXQxPVtdXSBBbiBhcnJheS1saWtlIG9iamVjdC5cbiAqIEBwYXJhbSB7QXJyYXl8QXJndW1lbnRzfSBbc2V0Mj1bXV0gQW4gYXJyYXktbGlrZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheX0gQSBuZXcsIG1lcmdlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBfY29uY2F0KFs0LCA1LCA2XSwgWzEsIDIsIDNdKTsgLy89PiBbNCwgNSwgNiwgMSwgMiwgM11cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY29uY2F0KHNldDEsIHNldDIpIHtcbiAgc2V0MSA9IHNldDEgfHwgW107XG4gIHNldDIgPSBzZXQyIHx8IFtdO1xuICB2YXIgaWR4O1xuICB2YXIgbGVuMSA9IHNldDEubGVuZ3RoO1xuICB2YXIgbGVuMiA9IHNldDIubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gW107XG5cbiAgaWR4ID0gMDtcbiAgd2hpbGUgKGlkeCA8IGxlbjEpIHtcbiAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBzZXQxW2lkeF07XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgaWR4ID0gMDtcbiAgd2hpbGUgKGlkeCA8IGxlbjIpIHtcbiAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBzZXQyW2lkeF07XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9pc1N0cmluZyh4KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IFN0cmluZ10nO1xufTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aGVuIHN1cHBsaWVkIGFuIG9iamVjdCByZXR1cm5zIHRoZSBpbmRpY2F0ZWRcbiAqIHByb3BlcnR5IG9mIHRoYXQgb2JqZWN0LCBpZiBpdCBleGlzdHMuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAc2lnIHMgLT4ge3M6IGF9IC0+IGEgfCBVbmRlZmluZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBwIFRoZSBwcm9wZXJ0eSBuYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcXVlcnlcbiAqIEByZXR1cm4geyp9IFRoZSB2YWx1ZSBhdCBgb2JqLnBgLlxuICogQHNlZSBSLnBhdGhcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnByb3AoJ3gnLCB7eDogMTAwfSk7IC8vPT4gMTAwXG4gKiAgICAgIFIucHJvcCgneCcsIHt9KTsgLy89PiB1bmRlZmluZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIHByb3AocCwgb2JqKSB7IHJldHVybiBvYmpbcF07IH0pO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIHRoZSBnaXZlbiB2YWx1ZS4gTm90ZSB0aGF0IGZvclxuICogbm9uLXByaW1pdGl2ZXMgdGhlIHZhbHVlIHJldHVybmVkIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGtub3duIGFzIGBjb25zdGAsIGBjb25zdGFudGAsIG9yIGBLYCAoZm9yIEsgY29tYmluYXRvcikgaW5cbiAqIG90aGVyIGxhbmd1YWdlcyBhbmQgbGlicmFyaWVzLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnIGEgLT4gKCogLT4gYSlcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgZnVuY3Rpb25cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIEZ1bmN0aW9uIDo6ICogLT4gdmFsLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciB0ID0gUi5hbHdheXMoJ1RlZScpO1xuICogICAgICB0KCk7IC8vPT4gJ1RlZSdcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGFsd2F5cyh2YWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWw7XG4gIH07XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBTZWUgaWYgYW4gb2JqZWN0IChgdmFsYCkgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN1cHBsaWVkIGNvbnN0cnVjdG9yLiBUaGlzXG4gKiBmdW5jdGlvbiB3aWxsIGNoZWNrIHVwIHRoZSBpbmhlcml0YW5jZSBjaGFpbiwgaWYgYW55LlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjMuMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBzaWcgKCogLT4geyp9KSAtPiBhIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjdG9yIEEgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuaXMoT2JqZWN0LCB7fSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKE51bWJlciwgMSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKE9iamVjdCwgMSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pcyhTdHJpbmcsICdzJyk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKFN0cmluZywgbmV3IFN0cmluZygnJykpOyAvLz0+IHRydWVcbiAqICAgICAgUi5pcyhPYmplY3QsIG5ldyBTdHJpbmcoJycpKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaXMoT2JqZWN0LCAncycpOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXMoTnVtYmVyLCB7fSk7IC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGlzKEN0b3IsIHZhbCkge1xuICByZXR1cm4gdmFsICE9IG51bGwgJiYgdmFsLmNvbnN0cnVjdG9yID09PSBDdG9yIHx8IHZhbCBpbnN0YW5jZW9mIEN0b3I7XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXJnZXIgb2YgaXRzIHR3byBhcmd1bWVudHMuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgUmVsYXRpb25cbiAqIEBzaWcgT3JkIGEgPT4gYSAtPiBhIC0+IGFcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHsqfVxuICogQHNlZSBSLm1heEJ5LCBSLm1pblxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIubWF4KDc4OSwgMTIzKTsgLy89PiA3ODlcbiAqICAgICAgUi5tYXgoJ2EnLCAnYicpOyAvLz0+ICdiJ1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gbWF4KGEsIGIpIHsgcmV0dXJuIGIgPiBhID8gYiA6IGE7IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcbnZhciBidG9hID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5idG9hICYmIHdpbmRvdy5idG9hLmJpbmQod2luZG93KSkgfHwgcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J0b2EnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgbG9hZEV2ZW50ID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG4gICAgdmFyIHhEb21haW4gPSBmYWxzZTtcblxuICAgIC8vIEZvciBJRSA4LzkgQ09SUyBzdXBwb3J0XG4gICAgLy8gT25seSBzdXBwb3J0cyBQT1NUIGFuZCBHRVQgY2FsbHMgYW5kIGRvZXNuJ3QgcmV0dXJucyB0aGUgcmVzcG9uc2UgaGVhZGVycy5cbiAgICAvLyBET04nVCBkbyB0aGlzIGZvciB0ZXN0aW5nIGIvYyBYTUxIdHRwUmVxdWVzdCBpcyBtb2NrZWQsIG5vdCBYRG9tYWluUmVxdWVzdC5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiByZXF1ZXN0KSAmJlxuICAgICAgICAhaXNVUkxTYW1lT3JpZ2luKGNvbmZpZy51cmwpKSB7XG4gICAgICByZXF1ZXN0ID0gbmV3IHdpbmRvdy5YRG9tYWluUmVxdWVzdCgpO1xuICAgICAgbG9hZEV2ZW50ID0gJ29ubG9hZCc7XG4gICAgICB4RG9tYWluID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3Qub25wcm9ncmVzcyA9IGZ1bmN0aW9uIGhhbmRsZVByb2dyZXNzKCkge307XG4gICAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7fTtcbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGVcbiAgICByZXF1ZXN0W2xvYWRFdmVudF0gPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IChyZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQgJiYgIXhEb21haW4pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIWNvbmZpZy5yZXNwb25zZVR5cGUgfHwgY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnID8gcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIC8vIElFIHNlbmRzIDEyMjMgaW5zdGVhZCBvZiAyMDQgKGh0dHBzOi8vZ2l0aHViLmNvbS9temFicmlza2llL2F4aW9zL2lzc3Vlcy8yMDEpXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMgPT09IDEyMjMgPyAyMDQgOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXMgPT09IDEyMjMgPyAnTm8gQ29udGVudCcgOiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIHZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcblxuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGNvbmZpZy51cmwpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vZW5oYW5jZUVycm9yJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG1lc3NhZ2UsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBIGBDYW5jZWxgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsKG1lc3NhZ2UpIHtcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbn1cblxuQ2FuY2VsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ0NhbmNlbCcgKyAodGhpcy5tZXNzYWdlID8gJzogJyArIHRoaXMubWVzc2FnZSA6ICcnKTtcbn07XG5cbkNhbmNlbC5wcm90b3R5cGUuX19DQU5DRUxfXyA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsInZhciBiYXNlTWF0Y2hlcyA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzJyksXG4gICAgYmFzZU1hdGNoZXNQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgcHJvcGVydHkgPSByZXF1aXJlKCcuL3Byb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUl0ZXJhdGVlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqXG4gKiBDb252ZXJ0cyBgZnVuY2AgdG8gaXRzIHNvdXJjZSBjb2RlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc291cmNlIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIHRvU291cmNlKGZ1bmMpIHtcbiAgaWYgKGZ1bmMgIT0gbnVsbCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZnVuY1RvU3RyaW5nLmNhbGwoZnVuYyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChmdW5jICsgJycpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU291cmNlO1xuIiwidmFyIGJhc2VJc0VxdWFsRGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsRGVlcCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNFcXVhbGAgd2hpY2ggc3VwcG9ydHMgcGFydGlhbCBjb21wYXJpc29uc1xuICogYW5kIHRyYWNrcyB0cmF2ZXJzZWQgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgMSAtIFVub3JkZXJlZCBjb21wYXJpc29uXG4gKiAgMiAtIFBhcnRpYWwgY29tcGFyaXNvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGB2YWx1ZWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0VxdWFsKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spIHtcbiAgaWYgKHZhbHVlID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IG90aGVyID09IG51bGwgfHwgKCFpc09iamVjdExpa2UodmFsdWUpICYmICFpc09iamVjdExpa2Uob3RoZXIpKSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyO1xuICB9XG4gIHJldHVybiBiYXNlSXNFcXVhbERlZXAodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBiYXNlSXNFcXVhbCwgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsO1xuIiwidmFyIFNldENhY2hlID0gcmVxdWlyZSgnLi9fU2V0Q2FjaGUnKSxcbiAgICBhcnJheVNvbWUgPSByZXF1aXJlKCcuL19hcnJheVNvbWUnKSxcbiAgICBjYWNoZUhhcyA9IHJlcXVpcmUoJy4vX2NhY2hlSGFzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIGFycmF5cyB3aXRoIHN1cHBvcnQgZm9yXG4gKiBwYXJ0aWFsIGRlZXAgY29tcGFyaXNvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtBcnJheX0gb3RoZXIgVGhlIG90aGVyIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBhcnJheWAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJyYXlzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQXJyYXlzKGFycmF5LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHLFxuICAgICAgYXJyTGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgb3RoTGVuZ3RoID0gb3RoZXIubGVuZ3RoO1xuXG4gIGlmIChhcnJMZW5ndGggIT0gb3RoTGVuZ3RoICYmICEoaXNQYXJ0aWFsICYmIG90aExlbmd0aCA+IGFyckxlbmd0aCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgdGhhdCBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgdmFyIGFyclN0YWNrZWQgPSBzdGFjay5nZXQoYXJyYXkpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChhcnJTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gYXJyU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IGFycmF5O1xuICB9XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gdHJ1ZSxcbiAgICAgIHNlZW4gPSAoYml0bWFzayAmIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpID8gbmV3IFNldENhY2hlIDogdW5kZWZpbmVkO1xuXG4gIHN0YWNrLnNldChhcnJheSwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIGFycmF5KTtcblxuICAvLyBJZ25vcmUgbm9uLWluZGV4IHByb3BlcnRpZXMuXG4gIHdoaWxlICgrK2luZGV4IDwgYXJyTGVuZ3RoKSB7XG4gICAgdmFyIGFyclZhbHVlID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2luZGV4XTtcblxuICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICB2YXIgY29tcGFyZWQgPSBpc1BhcnRpYWxcbiAgICAgICAgPyBjdXN0b21pemVyKG90aFZhbHVlLCBhcnJWYWx1ZSwgaW5kZXgsIG90aGVyLCBhcnJheSwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihhcnJWYWx1ZSwgb3RoVmFsdWUsIGluZGV4LCBhcnJheSwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgaWYgKGNvbXBhcmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb21wYXJlZCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIC8vIFJlY3Vyc2l2ZWx5IGNvbXBhcmUgYXJyYXlzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKHNlZW4pIHtcbiAgICAgIGlmICghYXJyYXlTb21lKG90aGVyLCBmdW5jdGlvbihvdGhWYWx1ZSwgb3RoSW5kZXgpIHtcbiAgICAgICAgICAgIGlmICghY2FjaGVIYXMoc2Vlbiwgb3RoSW5kZXgpICYmXG4gICAgICAgICAgICAgICAgKGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBzZWVuLnB1c2gob3RoSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKSB7XG4gICAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCEoXG4gICAgICAgICAgYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8XG4gICAgICAgICAgICBlcXVhbEZ1bmMoYXJyVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgc3RhY2tbJ2RlbGV0ZSddKGFycmF5KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEFycmF5cztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmZpbHRlcmAgZm9yIGFycmF5cyB3aXRob3V0IHN1cHBvcnQgZm9yXG4gKiBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJyYXldIFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheUZpbHRlcihhcnJheSwgcHJlZGljYXRlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXNJbmRleCA9IDAsXG4gICAgICByZXN1bHQgPSBbXTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciB2YWx1ZSA9IGFycmF5W2luZGV4XTtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXN1bHRbcmVzSW5kZXgrK10gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUZpbHRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obW9kdWxlKSB7XG5cdGlmICghbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xuXHRcdG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbigpIHt9O1xuXHRcdG1vZHVsZS5wYXRocyA9IFtdO1xuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXHRcdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcblx0fVxuXHRyZXR1cm4gbW9kdWxlO1xufTtcbiIsInZhciBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgbmF0aXZlS2V5cyA9IHJlcXVpcmUoJy4vX25hdGl2ZUtleXMnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5rZXlzYCB3aGljaCBkb2Vzbid0IHRyZWF0IHNwYXJzZSBhcnJheXMgYXMgZGVuc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VLZXlzKG9iamVjdCkge1xuICBpZiAoIWlzUHJvdG90eXBlKG9iamVjdCkpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyhvYmplY3QpO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIE9iamVjdChvYmplY3QpKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpICYmIGtleSAhPSAnY29uc3RydWN0b3InKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VLZXlzO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYSBwcm90b3R5cGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgcHJvdG90eXBlLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzUHJvdG90eXBlKHZhbHVlKSB7XG4gIHZhciBDdG9yID0gdmFsdWUgJiYgdmFsdWUuY29uc3RydWN0b3IsXG4gICAgICBwcm90byA9ICh0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IucHJvdG90eXBlKSB8fCBvYmplY3RQcm90bztcblxuICByZXR1cm4gdmFsdWUgPT09IHByb3RvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzUHJvdG90eXBlO1xuIiwidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZTtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGJhc2VGb3JPd24gPSByZXF1aXJlKCcuL19iYXNlRm9yT3duJyksXG4gICAgY3JlYXRlQmFzZUVhY2ggPSByZXF1aXJlKCcuL19jcmVhdGVCYXNlRWFjaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvckVhY2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheXxPYmplY3R9IFJldHVybnMgYGNvbGxlY3Rpb25gLlxuICovXG52YXIgYmFzZUVhY2ggPSBjcmVhdGVCYXNlRWFjaChiYXNlRm9yT3duKTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRWFjaDtcbiIsInZhciBiYXNlRmluZEluZGV4ID0gcmVxdWlyZSgnLi9fYmFzZUZpbmRJbmRleCcpLFxuICAgIGJhc2VJc05hTiA9IHJlcXVpcmUoJy4vX2Jhc2VJc05hTicpLFxuICAgIHN0cmljdEluZGV4T2YgPSByZXF1aXJlKCcuL19zdHJpY3RJbmRleE9mJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaW5kZXhPZmAgd2l0aG91dCBgZnJvbUluZGV4YCBib3VuZHMgY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWVcbiAgICA/IHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpXG4gICAgOiBiYXNlRmluZEluZGV4KGFycmF5LCBiYXNlSXNOYU4sIGZyb21JbmRleCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUluZGV4T2Y7XG4iLCJ2YXIgdG9GaW5pdGUgPSByZXF1aXJlKCcuL3RvRmluaXRlJyk7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhbiBpbnRlZ2VyLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvSW50ZWdlcmBdKGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy10b2ludGVnZXIpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIGludGVnZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9JbnRlZ2VyKDMuMik7XG4gKiAvLyA9PiAzXG4gKlxuICogXy50b0ludGVnZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiAwXG4gKlxuICogXy50b0ludGVnZXIoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvSW50ZWdlcignMy4yJyk7XG4gKiAvLyA9PiAzXG4gKi9cbmZ1bmN0aW9uIHRvSW50ZWdlcih2YWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gdG9GaW5pdGUodmFsdWUpLFxuICAgICAgcmVtYWluZGVyID0gcmVzdWx0ICUgMTtcblxuICByZXR1cm4gcmVzdWx0ID09PSByZXN1bHQgPyAocmVtYWluZGVyID8gcmVzdWx0IC0gcmVtYWluZGVyIDogcmVzdWx0KSA6IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9JbnRlZ2VyO1xuIiwidmFyIHRvTnVtYmVyID0gcmVxdWlyZSgnLi90b051bWJlcicpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBJTkZJTklUWSA9IDEgLyAwLFxuICAgIE1BWF9JTlRFR0VSID0gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIGZpbml0ZSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEyLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29udmVydGVkIG51bWJlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0Zpbml0ZSgzLjIpO1xuICogLy8gPT4gMy4yXG4gKlxuICogXy50b0Zpbml0ZShOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDVlLTMyNFxuICpcbiAqIF8udG9GaW5pdGUoSW5maW5pdHkpO1xuICogLy8gPT4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDhcbiAqXG4gKiBfLnRvRmluaXRlKCczLjInKTtcbiAqIC8vID0+IDMuMlxuICovXG5mdW5jdGlvbiB0b0Zpbml0ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSAwID8gdmFsdWUgOiAwO1xuICB9XG4gIHZhbHVlID0gdG9OdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IElORklOSVRZIHx8IHZhbHVlID09PSAtSU5GSU5JVFkpIHtcbiAgICB2YXIgc2lnbiA9ICh2YWx1ZSA8IDAgPyAtMSA6IDEpO1xuICAgIHJldHVybiBzaWduICogTUFYX0lOVEVHRVI7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/IHZhbHVlIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zpbml0ZTtcbiIsInZhciBiYXNlU2V0RGF0YSA9IHJlcXVpcmUoJy4vX2Jhc2VTZXREYXRhJyksXG4gICAgY3JlYXRlQmluZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJpbmQnKSxcbiAgICBjcmVhdGVDdXJyeSA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN1cnJ5JyksXG4gICAgY3JlYXRlSHlicmlkID0gcmVxdWlyZSgnLi9fY3JlYXRlSHlicmlkJyksXG4gICAgY3JlYXRlUGFydGlhbCA9IHJlcXVpcmUoJy4vX2NyZWF0ZVBhcnRpYWwnKSxcbiAgICBnZXREYXRhID0gcmVxdWlyZSgnLi9fZ2V0RGF0YScpLFxuICAgIG1lcmdlRGF0YSA9IHJlcXVpcmUoJy4vX21lcmdlRGF0YScpLFxuICAgIHNldERhdGEgPSByZXF1aXJlKCcuL19zZXREYXRhJyksXG4gICAgc2V0V3JhcFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0V3JhcFRvU3RyaW5nJyksXG4gICAgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi90b0ludGVnZXInKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBlaXRoZXIgY3VycmllcyBvciBpbnZva2VzIGBmdW5jYCB3aXRoIG9wdGlvbmFsXG4gKiBgdGhpc2AgYmluZGluZyBhbmQgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogICAgMSAtIGBfLmJpbmRgXG4gKiAgICAyIC0gYF8uYmluZEtleWBcbiAqICAgIDQgLSBgXy5jdXJyeWAgb3IgYF8uY3VycnlSaWdodGAgb2YgYSBib3VuZCBmdW5jdGlvblxuICogICAgOCAtIGBfLmN1cnJ5YFxuICogICAxNiAtIGBfLmN1cnJ5UmlnaHRgXG4gKiAgIDMyIC0gYF8ucGFydGlhbGBcbiAqICAgNjQgLSBgXy5wYXJ0aWFsUmlnaHRgXG4gKiAgMTI4IC0gYF8ucmVhcmdgXG4gKiAgMjU2IC0gYF8uYXJ5YFxuICogIDUxMiAtIGBfLmZsaXBgXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbYXJnUG9zXSBUaGUgYXJndW1lbnQgcG9zaXRpb25zIG9mIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyeV0gVGhlIGFyaXR5IGNhcCBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyaXR5XSBUaGUgYXJpdHkgb2YgYGZ1bmNgLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgd3JhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV3JhcChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHO1xuICBpZiAoIWlzQmluZEtleSAmJiB0eXBlb2YgZnVuYyAhPSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBsZW5ndGggPSBwYXJ0aWFscyA/IHBhcnRpYWxzLmxlbmd0aCA6IDA7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfUEFSVElBTF9GTEFHIHwgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcpO1xuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICBhcnkgPSBhcnkgPT09IHVuZGVmaW5lZCA/IGFyeSA6IG5hdGl2ZU1heCh0b0ludGVnZXIoYXJ5KSwgMCk7XG4gIGFyaXR5ID0gYXJpdHkgPT09IHVuZGVmaW5lZCA/IGFyaXR5IDogdG9JbnRlZ2VyKGFyaXR5KTtcbiAgbGVuZ3RoIC09IGhvbGRlcnMgPyBob2xkZXJzLmxlbmd0aCA6IDA7XG5cbiAgaWYgKGJpdG1hc2sgJiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRykge1xuICAgIHZhciBwYXJ0aWFsc1JpZ2h0ID0gcGFydGlhbHMsXG4gICAgICAgIGhvbGRlcnNSaWdodCA9IGhvbGRlcnM7XG5cbiAgICBwYXJ0aWFscyA9IGhvbGRlcnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgdmFyIGRhdGEgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBnZXREYXRhKGZ1bmMpO1xuXG4gIHZhciBuZXdEYXRhID0gW1xuICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBwYXJ0aWFsc1JpZ2h0LCBob2xkZXJzUmlnaHQsXG4gICAgYXJnUG9zLCBhcnksIGFyaXR5XG4gIF07XG5cbiAgaWYgKGRhdGEpIHtcbiAgICBtZXJnZURhdGEobmV3RGF0YSwgZGF0YSk7XG4gIH1cbiAgZnVuYyA9IG5ld0RhdGFbMF07XG4gIGJpdG1hc2sgPSBuZXdEYXRhWzFdO1xuICB0aGlzQXJnID0gbmV3RGF0YVsyXTtcbiAgcGFydGlhbHMgPSBuZXdEYXRhWzNdO1xuICBob2xkZXJzID0gbmV3RGF0YVs0XTtcbiAgYXJpdHkgPSBuZXdEYXRhWzldID0gbmV3RGF0YVs5XSA9PT0gdW5kZWZpbmVkXG4gICAgPyAoaXNCaW5kS2V5ID8gMCA6IGZ1bmMubGVuZ3RoKVxuICAgIDogbmF0aXZlTWF4KG5ld0RhdGFbOV0gLSBsZW5ndGgsIDApO1xuXG4gIGlmICghYXJpdHkgJiYgYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpKSB7XG4gICAgYml0bWFzayAmPSB+KFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRyk7XG4gIH1cbiAgaWYgKCFiaXRtYXNrIHx8IGJpdG1hc2sgPT0gV1JBUF9CSU5EX0ZMQUcpIHtcbiAgICB2YXIgcmVzdWx0ID0gY3JlYXRlQmluZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnKTtcbiAgfSBlbHNlIGlmIChiaXRtYXNrID09IFdSQVBfQ1VSUllfRkxBRyB8fCBiaXRtYXNrID09IFdSQVBfQ1VSUllfUklHSFRfRkxBRykge1xuICAgIHJlc3VsdCA9IGNyZWF0ZUN1cnJ5KGZ1bmMsIGJpdG1hc2ssIGFyaXR5KTtcbiAgfSBlbHNlIGlmICgoYml0bWFzayA9PSBXUkFQX1BBUlRJQUxfRkxBRyB8fCBiaXRtYXNrID09IChXUkFQX0JJTkRfRkxBRyB8IFdSQVBfUEFSVElBTF9GTEFHKSkgJiYgIWhvbGRlcnMubGVuZ3RoKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlUGFydGlhbChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscyk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlSHlicmlkLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gIH1cbiAgdmFyIHNldHRlciA9IGRhdGEgPyBiYXNlU2V0RGF0YSA6IHNldERhdGE7XG4gIHJldHVybiBzZXRXcmFwVG9TdHJpbmcoc2V0dGVyKHJlc3VsdCwgbmV3RGF0YSksIGZ1bmMsIGJpdG1hc2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVdyYXA7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgbWV0YU1hcCA9IHJlcXVpcmUoJy4vX21ldGFNYXAnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgc2V0RGF0YWAgd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIGJhc2VTZXREYXRhID0gIW1ldGFNYXAgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIGRhdGEpIHtcbiAgbWV0YU1hcC5zZXQoZnVuYywgZGF0YSk7XG4gIHJldHVybiBmdW5jO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0RGF0YTtcbiIsInZhciBXZWFrTWFwID0gcmVxdWlyZSgnLi9fV2Vha01hcCcpO1xuXG4vKiogVXNlZCB0byBzdG9yZSBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBtZXRhTWFwID0gV2Vha01hcCAmJiBuZXcgV2Vha01hcDtcblxubW9kdWxlLmV4cG9ydHMgPSBtZXRhTWFwO1xuIiwidmFyIGNvbXBvc2VBcmdzID0gcmVxdWlyZSgnLi9fY29tcG9zZUFyZ3MnKSxcbiAgICBjb21wb3NlQXJnc1JpZ2h0ID0gcmVxdWlyZSgnLi9fY29tcG9zZUFyZ3NSaWdodCcpLFxuICAgIGNvdW50SG9sZGVycyA9IHJlcXVpcmUoJy4vX2NvdW50SG9sZGVycycpLFxuICAgIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgY3JlYXRlUmVjdXJyeSA9IHJlcXVpcmUoJy4vX2NyZWF0ZVJlY3VycnknKSxcbiAgICBnZXRIb2xkZXIgPSByZXF1aXJlKCcuL19nZXRIb2xkZXInKSxcbiAgICByZW9yZGVyID0gcmVxdWlyZSgnLi9fcmVvcmRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfQVJZX0ZMQUcgPSAxMjgsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIG9wdGlvbmFsIGB0aGlzYFxuICogYmluZGluZyBvZiBgdGhpc0FyZ2AsIHBhcnRpYWwgYXBwbGljYXRpb24sIGFuZCBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbnxzdHJpbmd9IGZ1bmMgVGhlIGZ1bmN0aW9uIG9yIG1ldGhvZCBuYW1lIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzUmlnaHRdIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkXG4gKiAgdG8gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzUmlnaHRdIFRoZSBgcGFydGlhbHNSaWdodGAgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVIeWJyaWQoZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0FyeSA9IGJpdG1hc2sgJiBXUkFQX0FSWV9GTEFHLFxuICAgICAgaXNCaW5kID0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHLFxuICAgICAgaXNCaW5kS2V5ID0gYml0bWFzayAmIFdSQVBfQklORF9LRVlfRkxBRyxcbiAgICAgIGlzQ3VycmllZCA9IGJpdG1hc2sgJiAoV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSxcbiAgICAgIGlzRmxpcCA9IGJpdG1hc2sgJiBXUkFQX0ZMSVBfRkxBRyxcbiAgICAgIEN0b3IgPSBpc0JpbmRLZXkgPyB1bmRlZmluZWQgOiBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGFyZ3MgPSBBcnJheShsZW5ndGgpLFxuICAgICAgICBpbmRleCA9IGxlbmd0aDtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIGlmIChpc0N1cnJpZWQpIHtcbiAgICAgIHZhciBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKSxcbiAgICAgICAgICBob2xkZXJzQ291bnQgPSBjb3VudEhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHMpIHtcbiAgICAgIGFyZ3MgPSBjb21wb3NlQXJncyhhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKTtcbiAgICB9XG4gICAgaWYgKHBhcnRpYWxzUmlnaHQpIHtcbiAgICAgIGFyZ3MgPSBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCwgaXNDdXJyaWVkKTtcbiAgICB9XG4gICAgbGVuZ3RoIC09IGhvbGRlcnNDb3VudDtcbiAgICBpZiAoaXNDdXJyaWVkICYmIGxlbmd0aCA8IGFyaXR5KSB7XG4gICAgICB2YXIgbmV3SG9sZGVycyA9IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHRoaXNBcmcsXG4gICAgICAgIGFyZ3MsIG5ld0hvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSAtIGxlbmd0aFxuICAgICAgKTtcbiAgICB9XG4gICAgdmFyIHRoaXNCaW5kaW5nID0gaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsXG4gICAgICAgIGZuID0gaXNCaW5kS2V5ID8gdGhpc0JpbmRpbmdbZnVuY10gOiBmdW5jO1xuXG4gICAgbGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgaWYgKGFyZ1Bvcykge1xuICAgICAgYXJncyA9IHJlb3JkZXIoYXJncywgYXJnUG9zKTtcbiAgICB9IGVsc2UgaWYgKGlzRmxpcCAmJiBsZW5ndGggPiAxKSB7XG4gICAgICBhcmdzLnJldmVyc2UoKTtcbiAgICB9XG4gICAgaWYgKGlzQXJ5ICYmIGFyeSA8IGxlbmd0aCkge1xuICAgICAgYXJncy5sZW5ndGggPSBhcnk7XG4gICAgfVxuICAgIGlmICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpIHtcbiAgICAgIGZuID0gQ3RvciB8fCBjcmVhdGVDdG9yKGZuKTtcbiAgICB9XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNCaW5kaW5nLCBhcmdzKTtcbiAgfVxuICByZXR1cm4gd3JhcHBlcjtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVIeWJyaWQ7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSB0aGF0IGlzIHRoZSBjb21wb3NpdGlvbiBvZiBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMsXG4gKiBwbGFjZWhvbGRlcnMsIGFuZCBwcm92aWRlZCBhcmd1bWVudHMgaW50byBhIHNpbmdsZSBhcnJheSBvZiBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGhvbGRlcnMgVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbXMge2Jvb2xlYW59IFtpc0N1cnJpZWRdIFNwZWNpZnkgY29tcG9zaW5nIGZvciBhIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBhcnJheSBvZiBjb21wb3NlZCBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgbGVmdEluZGV4ID0gLTEsXG4gICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgcmFuZ2VMZW5ndGggPSBuYXRpdmVNYXgoYXJnc0xlbmd0aCAtIGhvbGRlcnNMZW5ndGgsIDApLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVmdExlbmd0aCArIHJhbmdlTGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W2hvbGRlcnNbYXJnc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleF07XG4gICAgfVxuICB9XG4gIHdoaWxlIChyYW5nZUxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2xlZnRJbmRleCsrXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcG9zZUFyZ3M7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyBsaWtlIGBjb21wb3NlQXJnc2AgZXhjZXB0IHRoYXQgdGhlIGFyZ3VtZW50cyBjb21wb3NpdGlvblxuICogaXMgdGFpbG9yZWQgZm9yIGBfLnBhcnRpYWxSaWdodGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgVGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gYXBwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3NSaWdodChhcmdzLCBwYXJ0aWFscywgaG9sZGVycywgaXNDdXJyaWVkKSB7XG4gIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgIGFyZ3NMZW5ndGggPSBhcmdzLmxlbmd0aCxcbiAgICAgIGhvbGRlcnNJbmRleCA9IC0xLFxuICAgICAgaG9sZGVyc0xlbmd0aCA9IGhvbGRlcnMubGVuZ3RoLFxuICAgICAgcmlnaHRJbmRleCA9IC0xLFxuICAgICAgcmlnaHRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShyYW5nZUxlbmd0aCArIHJpZ2h0TGVuZ3RoKSxcbiAgICAgIGlzVW5jdXJyaWVkID0gIWlzQ3VycmllZDtcblxuICB3aGlsZSAoKythcmdzSW5kZXggPCByYW5nZUxlbmd0aCkge1xuICAgIHJlc3VsdFthcmdzSW5kZXhdID0gYXJnc1thcmdzSW5kZXhdO1xuICB9XG4gIHZhciBvZmZzZXQgPSBhcmdzSW5kZXg7XG4gIHdoaWxlICgrK3JpZ2h0SW5kZXggPCByaWdodExlbmd0aCkge1xuICAgIHJlc3VsdFtvZmZzZXQgKyByaWdodEluZGV4XSA9IHBhcnRpYWxzW3JpZ2h0SW5kZXhdO1xuICB9XG4gIHdoaWxlICgrK2hvbGRlcnNJbmRleCA8IGhvbGRlcnNMZW5ndGgpIHtcbiAgICBpZiAoaXNVbmN1cnJpZWQgfHwgYXJnc0luZGV4IDwgYXJnc0xlbmd0aCkge1xuICAgICAgcmVzdWx0W29mZnNldCArIGhvbGRlcnNbaG9sZGVyc0luZGV4XV0gPSBhcmdzW2FyZ3NJbmRleCsrXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJnc1JpZ2h0O1xuIiwidmFyIGlzTGF6aWFibGUgPSByZXF1aXJlKCcuL19pc0xhemlhYmxlJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9CT1VORF9GTEFHID0gNCxcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gY29udGludWUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYGZ1bmNgIHdyYXBwZXIuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVSZWN1cnJ5KGZ1bmMsIGJpdG1hc2ssIHdyYXBGdW5jLCBwbGFjZWhvbGRlciwgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIGFyZ1BvcywgYXJ5LCBhcml0eSkge1xuICB2YXIgaXNDdXJyeSA9IGJpdG1hc2sgJiBXUkFQX0NVUlJZX0ZMQUcsXG4gICAgICBuZXdIb2xkZXJzID0gaXNDdXJyeSA/IGhvbGRlcnMgOiB1bmRlZmluZWQsXG4gICAgICBuZXdIb2xkZXJzUmlnaHQgPSBpc0N1cnJ5ID8gdW5kZWZpbmVkIDogaG9sZGVycyxcbiAgICAgIG5ld1BhcnRpYWxzID0gaXNDdXJyeSA/IHBhcnRpYWxzIDogdW5kZWZpbmVkLFxuICAgICAgbmV3UGFydGlhbHNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBwYXJ0aWFscztcblxuICBiaXRtYXNrIHw9IChpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX0ZMQUcgOiBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gIGJpdG1hc2sgJj0gfihpc0N1cnJ5ID8gV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgOiBXUkFQX1BBUlRJQUxfRkxBRyk7XG5cbiAgaWYgKCEoYml0bWFzayAmIFdSQVBfQ1VSUllfQk9VTkRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9CSU5EX0ZMQUcgfCBXUkFQX0JJTkRfS0VZX0ZMQUcpO1xuICB9XG4gIHZhciBuZXdEYXRhID0gW1xuICAgIGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIG5ld1BhcnRpYWxzLCBuZXdIb2xkZXJzLCBuZXdQYXJ0aWFsc1JpZ2h0LFxuICAgIG5ld0hvbGRlcnNSaWdodCwgYXJnUG9zLCBhcnksIGFyaXR5XG4gIF07XG5cbiAgdmFyIHJlc3VsdCA9IHdyYXBGdW5jLmFwcGx5KHVuZGVmaW5lZCwgbmV3RGF0YSk7XG4gIGlmIChpc0xhemlhYmxlKGZ1bmMpKSB7XG4gICAgc2V0RGF0YShyZXN1bHQsIG5ld0RhdGEpO1xuICB9XG4gIHJlc3VsdC5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xuICByZXR1cm4gc2V0V3JhcFRvU3RyaW5nKHJlc3VsdCwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmVjdXJyeTtcbiIsInZhciBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpLFxuICAgIG5vb3AgPSByZXF1aXJlKCcuL25vb3AnKTtcblxuLyoqXG4gKiBHZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKi9cbnZhciBnZXREYXRhID0gIW1ldGFNYXAgPyBub29wIDogZnVuY3Rpb24oZnVuYykge1xuICByZXR1cm4gbWV0YU1hcC5nZXQoZnVuYyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldERhdGE7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyBgbG9kYXNoYCB3cmFwcGVyIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtjaGFpbkFsbF0gRW5hYmxlIGV4cGxpY2l0IG1ldGhvZCBjaGFpbiBzZXF1ZW5jZXMuXG4gKi9cbmZ1bmN0aW9uIExvZGFzaFdyYXBwZXIodmFsdWUsIGNoYWluQWxsKSB7XG4gIHRoaXMuX193cmFwcGVkX18gPSB2YWx1ZTtcbiAgdGhpcy5fX2FjdGlvbnNfXyA9IFtdO1xuICB0aGlzLl9fY2hhaW5fXyA9ICEhY2hhaW5BbGw7XG4gIHRoaXMuX19pbmRleF9fID0gMDtcbiAgdGhpcy5fX3ZhbHVlc19fID0gdW5kZWZpbmVkO1xufVxuXG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTG9kYXNoV3JhcHBlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb2Rhc2hXcmFwcGVyO1xuXG5tb2R1bGUuZXhwb3J0cyA9IExvZGFzaFdyYXBwZXI7XG4iLCIvKipcbiAqIENvcGllcyB0aGUgdmFsdWVzIG9mIGBzb3VyY2VgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgZnJvbS5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheT1bXV0gVGhlIGFycmF5IHRvIGNvcHkgdmFsdWVzIHRvLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIGNvcHlBcnJheShzb3VyY2UsIGFycmF5KSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gc291cmNlLmxlbmd0aDtcblxuICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtpbmRleF0gPSBzb3VyY2VbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb3B5QXJyYXk7XG4iLCJ2YXIgYmFzZVNldERhdGEgPSByZXF1aXJlKCcuL19iYXNlU2V0RGF0YScpLFxuICAgIHNob3J0T3V0ID0gcmVxdWlyZSgnLi9fc2hvcnRPdXQnKTtcblxuLyoqXG4gKiBTZXRzIG1ldGFkYXRhIGZvciBgZnVuY2AuXG4gKlxuICogKipOb3RlOioqIElmIHRoaXMgZnVuY3Rpb24gYmVjb21lcyBob3QsIGkuZS4gaXMgaW52b2tlZCBhIGxvdCBpbiBhIHNob3J0XG4gKiBwZXJpb2Qgb2YgdGltZSwgaXQgd2lsbCB0cmlwIGl0cyBicmVha2VyIGFuZCB0cmFuc2l0aW9uIHRvIGFuIGlkZW50aXR5XG4gKiBmdW5jdGlvbiB0byBhdm9pZCBnYXJiYWdlIGNvbGxlY3Rpb24gcGF1c2VzIGluIFY4LiBTZWVcbiAqIFtWOCBpc3N1ZSAyMDcwXShodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0yMDcwKVxuICogZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXNzb2NpYXRlIG1ldGFkYXRhIHdpdGguXG4gKiBAcGFyYW0geyp9IGRhdGEgVGhlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGBmdW5jYC5cbiAqL1xudmFyIHNldERhdGEgPSBzaG9ydE91dChiYXNlU2V0RGF0YSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0RGF0YTtcbiIsIi8qKiBVc2VkIHRvIGRldGVjdCBob3QgZnVuY3Rpb25zIGJ5IG51bWJlciBvZiBjYWxscyB3aXRoaW4gYSBzcGFuIG9mIG1pbGxpc2Vjb25kcy4gKi9cbnZhciBIT1RfQ09VTlQgPSA4MDAsXG4gICAgSE9UX1NQQU4gPSAxNjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU5vdyA9IERhdGUubm93O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0J2xsIHNob3J0IG91dCBhbmQgaW52b2tlIGBpZGVudGl0eWAgaW5zdGVhZFxuICogb2YgYGZ1bmNgIHdoZW4gaXQncyBjYWxsZWQgYEhPVF9DT1VOVGAgb3IgbW9yZSB0aW1lcyBpbiBgSE9UX1NQQU5gXG4gKiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHJlc3RyaWN0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc2hvcnRhYmxlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBzaG9ydE91dChmdW5jKSB7XG4gIHZhciBjb3VudCA9IDAsXG4gICAgICBsYXN0Q2FsbGVkID0gMDtcblxuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0YW1wID0gbmF0aXZlTm93KCksXG4gICAgICAgIHJlbWFpbmluZyA9IEhPVF9TUEFOIC0gKHN0YW1wIC0gbGFzdENhbGxlZCk7XG5cbiAgICBsYXN0Q2FsbGVkID0gc3RhbXA7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIGlmICgrK2NvdW50ID49IEhPVF9DT1VOVCkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzWzBdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb3VudCA9IDA7XG4gICAgfVxuICAgIHJldHVybiBmdW5jLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG9ydE91dDtcbiIsInZhciBnZXRXcmFwRGV0YWlscyA9IHJlcXVpcmUoJy4vX2dldFdyYXBEZXRhaWxzJyksXG4gICAgaW5zZXJ0V3JhcERldGFpbHMgPSByZXF1aXJlKCcuL19pbnNlcnRXcmFwRGV0YWlscycpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKSxcbiAgICB1cGRhdGVXcmFwRGV0YWlscyA9IHJlcXVpcmUoJy4vX3VwZGF0ZVdyYXBEZXRhaWxzJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYHdyYXBwZXJgIHRvIG1pbWljIHRoZSBzb3VyY2Ugb2YgYHJlZmVyZW5jZWBcbiAqIHdpdGggd3JhcHBlciBkZXRhaWxzIGluIGEgY29tbWVudCBhdCB0aGUgdG9wIG9mIHRoZSBzb3VyY2UgYm9keS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gd3JhcHBlciBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVmZXJlbmNlIFRoZSByZWZlcmVuY2UgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIGB3cmFwcGVyYC5cbiAqL1xuZnVuY3Rpb24gc2V0V3JhcFRvU3RyaW5nKHdyYXBwZXIsIHJlZmVyZW5jZSwgYml0bWFzaykge1xuICB2YXIgc291cmNlID0gKHJlZmVyZW5jZSArICcnKTtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKHdyYXBwZXIsIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgdXBkYXRlV3JhcERldGFpbHMoZ2V0V3JhcERldGFpbHMoc291cmNlKSwgYml0bWFzaykpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRXcmFwVG9TdHJpbmc7XG4iLCJ2YXIgYmFzZVNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fYmFzZVNldFRvU3RyaW5nJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgdGhlIGB0b1N0cmluZ2AgbWV0aG9kIG9mIGBmdW5jYCB0byByZXR1cm4gYHN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHN0cmluZyBUaGUgYHRvU3RyaW5nYCByZXN1bHQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0VG9TdHJpbmcgPSBzaG9ydE91dChiYXNlU2V0VG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRvU3RyaW5nO1xuIiwiLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNoYXJhY3RlciBjbGFzc2VzLiAqL1xudmFyIHJzQXN0cmFsUmFuZ2UgPSAnXFxcXHVkODAwLVxcXFx1ZGZmZicsXG4gICAgcnNDb21ib01hcmtzUmFuZ2UgPSAnXFxcXHUwMzAwLVxcXFx1MDM2ZicsXG4gICAgcmVDb21ib0hhbGZNYXJrc1JhbmdlID0gJ1xcXFx1ZmUyMC1cXFxcdWZlMmYnLFxuICAgIHJzQ29tYm9TeW1ib2xzUmFuZ2UgPSAnXFxcXHUyMGQwLVxcXFx1MjBmZicsXG4gICAgcnNDb21ib1JhbmdlID0gcnNDb21ib01hcmtzUmFuZ2UgKyByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgKyByc0NvbWJvU3ltYm9sc1JhbmdlLFxuICAgIHJzVmFyUmFuZ2UgPSAnXFxcXHVmZTBlXFxcXHVmZTBmJztcblxuLyoqIFVzZWQgdG8gY29tcG9zZSB1bmljb2RlIGNhcHR1cmUgZ3JvdXBzLiAqL1xudmFyIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBzdHJpbmdzIHdpdGggW3plcm8td2lkdGggam9pbmVycyBvciBjb2RlIHBvaW50cyBmcm9tIHRoZSBhc3RyYWwgcGxhbmVzXShodHRwOi8vZWV2LmVlL2Jsb2cvMjAxNS8wOS8xMi9kYXJrLWNvcm5lcnMtb2YtdW5pY29kZS8pLiAqL1xudmFyIHJlSGFzVW5pY29kZSA9IFJlZ0V4cCgnWycgKyByc1pXSiArIHJzQXN0cmFsUmFuZ2UgICsgcnNDb21ib1JhbmdlICsgcnNWYXJSYW5nZSArICddJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBzdHJpbmdgIGNvbnRhaW5zIFVuaWNvZGUgc3ltYm9scy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzeW1ib2wgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzVW5pY29kZShzdHJpbmcpIHtcbiAgcmV0dXJuIHJlSGFzVW5pY29kZS50ZXN0KHN0cmluZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzVW5pY29kZTtcbiIsIlwidXNlIHN0cmljdFwiO2Z1bmN0aW9uIF9pbnRlcm9wRGVmYXVsdChlKXtyZXR1cm4gZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwiZGVmYXVsdFwiaW4gZT9lLmRlZmF1bHQ6ZX1PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cyxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgX2RlZmF1bHQyND1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9fX1wiKSksX2RlZmF1bHQyMz1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9jb250YWluc1wiKSksX2RlZmF1bHQyMj1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9wYXJ0aWFsXCIpKSxfZGVmYXVsdDIxPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL3BpcGVcIikpLF9kZWZhdWx0MjA9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMva2V5c1wiKSksX2RlZmF1bHQxOT1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9mb3JFYWNoXCIpKSxfZGVmYXVsdDE4PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2Rpc3NvY1wiKSksX2RlZmF1bHQxNz1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9tZXJnZVwiKSksX2RlZmF1bHQxNj1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9wcm9wXCIpKSxfZGVmYXVsdDE1PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2Fsd2F5c1wiKSksX2RlZmF1bHQxND1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9pZkVsc2VcIikpLF9kZWZhdWx0MTM9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvcHJvcFNhdGlzZmllc1wiKSksX2RlZmF1bHQxMj1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9wcm9wSXNcIikpLF9kZWZhdWx0MTE9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvaGFzXCIpKSxfZGVmYXVsdDEwPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2NvbXBsZW1lbnRcIikpLF9kZWZhdWx0OT1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9pc0VtcHR5XCIpKSxfZGVmYXVsdDg9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvYW55UGFzc1wiKSksX2RlZmF1bHQ3PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2d0ZVwiKSksX2RlZmF1bHQ2PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2N1cnJ5XCIpKSxfZGVmYXVsdDU9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvVFwiKSksX2RlZmF1bHQ0PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2lzXCIpKSxfZGVmYXVsdDM9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvaWRlbnRpdHlcIikpLF9kZWZhdWx0Mj1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9pc05pbFwiKSksX2RlZmF1bHQ9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvY29uZFwiKSksYXhpb3M9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSksX3R5cGVvZj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJlwic3ltYm9sXCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmXCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT9cInN5bWJvbFwiOnR5cGVvZiBlfSxfZXh0ZW5kcz1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1hcmd1bWVudHNbdF07Zm9yKHZhciBuIGluIHIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsbikmJihlW25dPXJbbl0pfXJldHVybiBlfTtGdW5jdGlvbi5wcm90b3R5cGUuJGFzeW5jYmluZD1mdW5jdGlvbiBlKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBhLmFwcGx5KHQsYXJndW1lbnRzKX1GdW5jdGlvbi5wcm90b3R5cGUuJGFzeW5jYmluZHx8T2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSxcIiRhc3luY2JpbmRcIix7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pLGUudHJhbXBvbGluZXx8KGUudHJhbXBvbGluZT1mdW5jdGlvbihlLHQscixuLGEpe3JldHVybiBmdW5jdGlvbiB1KGkpe2Zvcig7aTspe2lmKGkudGhlbilyZXR1cm4gaT1pLnRoZW4odSxuKSxhP3ZvaWQgMDppO3RyeXtpZihpLnBvcCl7aWYoaS5sZW5ndGgpcmV0dXJuIGkucG9wKCk/dC5jYWxsKGUpOmk7aT1yfWVsc2UgaT1pLmNhbGwoZSl9Y2F0Y2goZSl7cmV0dXJuIG4oZSl9fX19KSxlLkxhenlUaGVuYWJsZXx8KGUuTGF6eVRoZW5hYmxlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4gZSYmZSBpbnN0YW5jZW9mIE9iamVjdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS50aGVufWZ1bmN0aW9uIHQocixuLGEpe3RyeXt2YXIgdT1hP2Eobik6bjtpZihyPT09dSlyZXR1cm4gci5yZWplY3QobmV3IFR5cGVFcnJvcihcIlByb21pc2UgcmVzb2x1dGlvbiBsb29wXCIpKTtlKHUpP3UudGhlbihmdW5jdGlvbihlKXt0KHIsZSl9LGZ1bmN0aW9uKGUpe3IucmVqZWN0KGUpfSk6ci5yZXNvbHZlKHUpfWNhdGNoKGUpe3IucmVqZWN0KGUpfX1mdW5jdGlvbiByKCl7fWZ1bmN0aW9uIG4oZSl7fWZ1bmN0aW9uIGEoZSx0KXt0aGlzLnJlc29sdmU9ZSx0aGlzLnJlamVjdD10fWZ1bmN0aW9uIHUobixhKXt2YXIgdT1uZXcgcjt0cnl7dGhpcy5fcmVzb2x2ZXIoZnVuY3Rpb24ocil7cmV0dXJuIGUocik/ci50aGVuKG4sYSk6dCh1LHIsbil9LGZ1bmN0aW9uKGUpe3QodSxlLGEpfSl9Y2F0Y2goZSl7dCh1LGUsYSl9cmV0dXJuIHV9ZnVuY3Rpb24gaShlKXt0aGlzLl9yZXNvbHZlcj1lLHRoaXMudGhlbj11fXJldHVybiByLnByb3RvdHlwZT17cmVzb2x2ZTpuLHJlamVjdDpuLHRoZW46YX0saS5yZXNvbHZlPWZ1bmN0aW9uKGUpe3JldHVybiBpLmlzVGhlbmFibGUoZSk/ZTp7dGhlbjpmdW5jdGlvbih0KXtyZXR1cm4gdChlKX19fSxpLmlzVGhlbmFibGU9ZSxpfSgpLGUuRWFnZXJUaGVuYWJsZT1lLlRoZW5hYmxlPShlLkVhZ2VyVGhlbmFibGVGYWN0b3J5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aWYoZSl7dmFyIHQ9dGhpcztlKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZShlKX0sZnVuY3Rpb24oZSl7dC5yZWplY3QoZSl9KX19ZnVuY3Rpb24gcihlLHQpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUueSl0cnl7dmFyIHI9ZS55LmNhbGwodm9pZCAwLHQpO2UucC5yZXNvbHZlKHIpfWNhdGNoKHQpe2UucC5yZWplY3QodCl9ZWxzZSBlLnAucmVzb2x2ZSh0KX1mdW5jdGlvbiBuKGUsdCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS5uKXRyeXt2YXIgcj1lLm4uY2FsbCh2b2lkIDAsdCk7ZS5wLnJlc29sdmUocil9Y2F0Y2godCl7ZS5wLnJlamVjdCh0KX1lbHNlIGUucC5yZWplY3QodCl9ZT1lfHxcIm9iamVjdFwiPT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBwcm9jZXNzP1widW5kZWZpbmVkXCI6X3R5cGVvZihwcm9jZXNzKSkmJnByb2Nlc3MubmV4dFRpY2t8fFwiZnVuY3Rpb25cIj09dHlwZW9mIHNldEltbWVkaWF0ZSYmc2V0SW1tZWRpYXRlfHxmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMCl9O3ZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2Zvcig7ci5sZW5ndGgtbjspe3RyeXtyW25dKCl9Y2F0Y2goZSl7fXJbbisrXT12b2lkIDAsbj09PWEmJihyLnNwbGljZSgwLGEpLG49MCl9fXZhciByPVtdLG49MCxhPTEwMjQ7cmV0dXJuIGZ1bmN0aW9uKGEpe3IucHVzaChhKSxyLmxlbmd0aC1uPT09MSYmZSh0KX19KCk7cmV0dXJuIHQucHJvdG90eXBlPXtyZXNvbHZlOmZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PXRoaXMuc3RhdGUpe2lmKGU9PT10aGlzKXJldHVybiB0aGlzLnJlamVjdChuZXcgVHlwZUVycm9yKFwiQXR0ZW1wdCB0byByZXNvbHZlIHByb21pc2Ugd2l0aCBzZWxmXCIpKTt2YXIgdD10aGlzO2lmKGUmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlfHxcIm9iamVjdFwiPT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlP1widW5kZWZpbmVkXCI6X3R5cGVvZihlKSkpKXRyeXt2YXIgbj0wLHU9ZS50aGVuO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHUpcmV0dXJuIHZvaWQgdS5jYWxsKGUsZnVuY3Rpb24oZSl7bisrfHx0LnJlc29sdmUoZSl9LGZ1bmN0aW9uKGUpe24rK3x8dC5yZWplY3QoZSl9KX1jYXRjaChlKXtyZXR1cm4gdm9pZChufHx0aGlzLnJlamVjdChlKSl9dGhpcy5zdGF0ZT1yLHRoaXMudj1lLHQuYyYmYShmdW5jdGlvbigpe2Zvcih2YXIgbj0wLGE9dC5jLmxlbmd0aDtuPGE7bisrKXIodC5jW25dLGUpfSl9fSxyZWplY3Q6ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09dGhpcy5zdGF0ZSl7dGhpcy5zdGF0ZT1uLHRoaXMudj1lO3ZhciB0PXRoaXMuYzt0JiZhKGZ1bmN0aW9uKCl7Zm9yKHZhciByPTAsYT10Lmxlbmd0aDtyPGE7cisrKW4odFtyXSxlKX0pfX0sdGhlbjpmdW5jdGlvbihlLHIpe3ZhciBuPW5ldyB0LHU9e3k6ZSxuOnIscDpufTtpZih2b2lkIDA9PT10aGlzLnN0YXRlKXRoaXMuYz90aGlzLmMucHVzaCh1KTp0aGlzLmM9W3VdO2Vsc2V7dmFyIGk9dGhpcy5zdGF0ZSxvPXRoaXMudjthKGZ1bmN0aW9uKCl7aSh1LG8pfSl9cmV0dXJuIG59fSx0LnJlc29sdmU9ZnVuY3Rpb24oZSl7aWYoZSYmZSBpbnN0YW5jZW9mIHQpcmV0dXJuIGU7dmFyIHI9bmV3IHQ7cmV0dXJuIHIucmVzb2x2ZShlKSxyfSx0LnJlamVjdD1mdW5jdGlvbihlKXtpZihlJiZlIGluc3RhbmNlb2YgdClyZXR1cm4gZTt2YXIgcj1uZXcgdDtyZXR1cm4gci5yZWplY3QoZSkscn0sdC52ZXJzaW9uPVwiMi4zLjMtbm9kZW50XCIsdH0pKCkpO3ZhciBhPXRoaXM7c3dpdGNoKHIpe2Nhc2UhMDpyZXR1cm4gbmV3IGUuVGhlbmFibGUobik7Y2FzZSAwOnJldHVybiBuZXcgZS5MYXp5VGhlbmFibGUobik7Y2FzZSB2b2lkIDA6cmV0dXJuIG4udGhlbj1uLG47ZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGEuYXBwbHkodCxhcmd1bWVudHMpfWNhdGNoKGUpe3JldHVybiByKGUpfX19fTt2YXIgdG9OdW1iZXI9X2RlZmF1bHQoW1tfZGVmYXVsdDIsX2RlZmF1bHQzXSxbX2RlZmF1bHQ0KE51bWJlciksX2RlZmF1bHQzXSxbX2RlZmF1bHQ1LGZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIoZSl9XV0pLGlzV2l0aGluPV9kZWZhdWx0NihmdW5jdGlvbihlLHQscil7dmFyIG49X2RlZmF1bHQ0KE51bWJlcik7cmV0dXJuIG4oZSkmJm4odCkmJm4ocikmJl9kZWZhdWx0NyhyLGUpJiZfZGVmYXVsdDcodCxyKX0pLGlzSW52YWxpZENvbmZpZz1fZGVmYXVsdDgoW19kZWZhdWx0MixfZGVmYXVsdDksX2RlZmF1bHQxMChfZGVmYXVsdDExKFwiYmFzZVVSTFwiKSksX2RlZmF1bHQxMChfZGVmYXVsdDEyKFN0cmluZyxcImJhc2VVUkxcIikpLF9kZWZhdWx0MTMoX2RlZmF1bHQ5LFwiYmFzZVVSTFwiKV0pLGlzUHJvbWlzZT1mdW5jdGlvbihlKXtyZXR1cm4hIWUmJihcIm9iamVjdFwiPT09KFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlP1widW5kZWZpbmVkXCI6X3R5cGVvZihlKSl8fFwiZnVuY3Rpb25cIj09dHlwZW9mIGUpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW59LERFRkFVTFRfSEVBREVSUz17QWNjZXB0OlwiYXBwbGljYXRpb24vanNvblwiLFwiQ29udGVudC1UeXBlXCI6XCJhcHBsaWNhdGlvbi9qc29uXCJ9LERFRkFVTFRfQ09ORklHPXt0aW1lb3V0OjB9LE5PTkU9bnVsbCxDTElFTlRfRVJST1I9XCJDTElFTlRfRVJST1JcIixTRVJWRVJfRVJST1I9XCJTRVJWRVJfRVJST1JcIixUSU1FT1VUX0VSUk9SPVwiVElNRU9VVF9FUlJPUlwiLENPTk5FQ1RJT05fRVJST1I9XCJDT05ORUNUSU9OX0VSUk9SXCIsTkVUV09SS19FUlJPUj1cIk5FVFdPUktfRVJST1JcIixVTktOT1dOX0VSUk9SPVwiVU5LTk9XTl9FUlJPUlwiLENBTkNFTF9FUlJPUj1cIkNBTkNFTF9FUlJPUlwiLFRJTUVPVVRfRVJST1JfQ09ERVM9W1wiRUNPTk5BQk9SVEVEXCJdLE5PREVKU19DT05ORUNUSU9OX0VSUk9SX0NPREVTPVtcIkVOT1RGT1VORFwiLFwiRUNPTk5SRUZVU0VEXCIsXCJFQ09OTlJFU0VUXCJdLGluMjAwcz1pc1dpdGhpbigyMDAsMjk5KSxpbjQwMHM9aXNXaXRoaW4oNDAwLDQ5OSksaW41MDBzPWlzV2l0aGluKDUwMCw1OTkpLHN0YXR1c05pbD1fZGVmYXVsdDE0KF9kZWZhdWx0MixfZGVmYXVsdDE1KHZvaWQgMCksX2RlZmF1bHQxNihcInN0YXR1c1wiKSksY3JlYXRlPWZ1bmN0aW9uKGUpe2lmKGlzSW52YWxpZENvbmZpZyhlKSl0aHJvdyBuZXcgRXJyb3IoXCJjb25maWcgbXVzdCBoYXZlIGEgYmFzZVVSTFwiKTt2YXIgdD1fZGVmYXVsdDE3KERFRkFVTFRfSEVBREVSUyxlLmhlYWRlcnN8fHt9KSxyPV9kZWZhdWx0MTcoREVGQVVMVF9DT05GSUcsX2RlZmF1bHQxOChcImhlYWRlcnNcIixlKSksbj1heGlvcy5jcmVhdGUociksYT1bXSx1PWZ1bmN0aW9uKGUpe2EucHVzaChlKX0saT1bXSxvPVtdLGY9W10scz1mdW5jdGlvbihlKXtyZXR1cm4gaS5wdXNoKGUpfSxsPWZ1bmN0aW9uKGUpe3JldHVybiBvLnB1c2goZSl9LGM9ZnVuY3Rpb24oZSl7cmV0dXJuIGYucHVzaChlKX0sUj1mdW5jdGlvbihlLHIpe3JldHVybiB0W2VdPXIsbn0sZD1mdW5jdGlvbihlKXtyZXR1cm4gX2RlZmF1bHQxOShmdW5jdGlvbih0KXtyZXR1cm4gUih0LGVbdF0pfSxfZGVmYXVsdDIwKGUpKSxufSxfPWZ1bmN0aW9uKGUpe3JldHVybiBkZWxldGUgdFtlXSxufSxFPWZ1bmN0aW9uKGUpe3JldHVybiBuLmRlZmF1bHRzLmJhc2VVUkw9ZSxufSxwPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdHMuYmFzZVVSTH0sTz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fSxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtyZXR1cm4gTihfZGVmYXVsdDE3KHt1cmw6dCxwYXJhbXM6cixtZXRob2Q6ZX0sbikpfSxoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsbj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106e307cmV0dXJuIE4oX2RlZmF1bHQxNyh7dXJsOnQsbWV0aG9kOmUsZGF0YTpyfSxuKSl9LE49ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHIsYSl7ZnVuY3Rpb24gdSgpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZn1yZXR1cm4gYzxvLmxlbmd0aD8oUj1vW2NdKGUpLGlzUHJvbWlzZShSKT9SLnRoZW4oZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzKX0uJGFzeW5jYmluZCh0aGlzLGEpLGEpOlIoZSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMpfS4kYXN5bmNiaW5kKHRoaXMsYSksYSkpOlsxXX1mdW5jdGlvbiBmKCl7cmV0dXJuIGMrKyx1fWZ1bmN0aW9uIHMoKXtyZXR1cm4gbC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGwoKXtyZXR1cm4gZD1fZGVmYXVsdDIxKF9kZWZhdWx0MjIoVCxbdG9OdW1iZXIobmV3IERhdGUpXSkseSkscihuLnJlcXVlc3QoZSkudGhlbihkKS5jYXRjaChkKSl9dmFyIGMsUixkO3JldHVybiBlLmhlYWRlcnM9X2V4dGVuZHMoe30sdCxlLmhlYWRlcnMpLGkubGVuZ3RoPjAmJl9kZWZhdWx0MTkoZnVuY3Rpb24odCl7cmV0dXJuIHQoZSl9LGkpLG8ubGVuZ3RoPjA/KGM9MCxGdW5jdGlvbi4kYXN5bmNiaW5kLnRyYW1wb2xpbmUodGhpcyxzLGYsYSwhMCkodSkpOmwuY2FsbCh0aGlzKX0uJGFzeW5jYmluZCh0aGlzKSl9LHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbih0KXt0cnl7dChlKX1jYXRjaChlKXt9fSksZX0sVD1mdW5jdGlvbihlLHQpe3ZhciByPXRvTnVtYmVyKG5ldyBEYXRlKSxuPXItZSxhPXQgaW5zdGFuY2VvZiBFcnJvcnx8YXhpb3MuaXNDYW5jZWwodCksdT1hP3QucmVzcG9uc2U6dCxpPXUmJnUuc3RhdHVzfHxudWxsLG89YT9tKHQpOnYoaSkscz1pbjIwMHMoaSksbD10LmNvbmZpZ3x8bnVsbCxjPXUmJnUuaGVhZGVyc3x8bnVsbCxSPXUmJnUuZGF0YXx8bnVsbCxkPXtkdXJhdGlvbjpuLHByb2JsZW06byxvazpzLHN0YXR1czppLGhlYWRlcnM6Yyxjb25maWc6bCxkYXRhOlJ9O3JldHVybiBmLmxlbmd0aD4wJiZfZGVmYXVsdDE5KGZ1bmN0aW9uKGUpe3JldHVybiBlKGQpfSxmKSxkfSxtPWZ1bmN0aW9uKGUpe3JldHVyblwiTmV0d29yayBFcnJvclwiPT09ZS5tZXNzYWdlP05FVFdPUktfRVJST1I6YXhpb3MuaXNDYW5jZWwoZSk/Q0FOQ0VMX0VSUk9SOl9kZWZhdWx0KFtbX2RlZmF1bHQyLGZ1bmN0aW9uKCl7cmV0dXJuIHYoc3RhdHVzTmlsKGUucmVzcG9uc2UpKX1dLFtfZGVmYXVsdDIzKF9kZWZhdWx0MjQsVElNRU9VVF9FUlJPUl9DT0RFUyksX2RlZmF1bHQxNShUSU1FT1VUX0VSUk9SKV0sW19kZWZhdWx0MjMoX2RlZmF1bHQyNCxOT0RFSlNfQ09OTkVDVElPTl9FUlJPUl9DT0RFUyksX2RlZmF1bHQxNShDT05ORUNUSU9OX0VSUk9SKV0sW19kZWZhdWx0NSxfZGVmYXVsdDE1KFVOS05PV05fRVJST1IpXV0pKGUuY29kZSl9LHY9ZnVuY3Rpb24oZSl7cmV0dXJuIF9kZWZhdWx0KFtbX2RlZmF1bHQyLF9kZWZhdWx0MTUoVU5LTk9XTl9FUlJPUildLFtpbjIwMHMsX2RlZmF1bHQxNShOT05FKV0sW2luNDAwcyxfZGVmYXVsdDE1KENMSUVOVF9FUlJPUildLFtpbjUwMHMsX2RlZmF1bHQxNShTRVJWRVJfRVJST1IpXSxbX2RlZmF1bHQ1LF9kZWZhdWx0MTUoVU5LTk9XTl9FUlJPUildXSkoZSl9LEQ9e2F4aW9zSW5zdGFuY2U6bixtb25pdG9yczphLGFkZE1vbml0b3I6dSxyZXF1ZXN0VHJhbnNmb3JtczppLGFzeW5jUmVxdWVzdFRyYW5zZm9ybXM6byxyZXNwb25zZVRyYW5zZm9ybXM6ZixhZGRSZXF1ZXN0VHJhbnNmb3JtOnMsYWRkQXN5bmNSZXF1ZXN0VHJhbnNmb3JtOmwsYWRkUmVzcG9uc2VUcmFuc2Zvcm06YyxzZXRIZWFkZXI6UixzZXRIZWFkZXJzOmQsZGVsZXRlSGVhZGVyOl8saGVhZGVyczp0LHNldEJhc2VVUkw6RSxnZXRCYXNlVVJMOnAsZ2V0Ol9kZWZhdWx0MjIoTyxbXCJnZXRcIl0pLGRlbGV0ZTpfZGVmYXVsdDIyKE8sW1wiZGVsZXRlXCJdKSxoZWFkOl9kZWZhdWx0MjIoTyxbXCJoZWFkXCJdKSxwb3N0Ol9kZWZhdWx0MjIoaCxbXCJwb3N0XCJdKSxwdXQ6X2RlZmF1bHQyMihoLFtcInB1dFwiXSkscGF0Y2g6X2RlZmF1bHQyMihoLFtcInBhdGNoXCJdKSxsaW5rOl9kZWZhdWx0MjIoTyxbXCJsaW5rXCJdKSx1bmxpbms6X2RlZmF1bHQyMihPLFtcInVubGlua1wiXSl9O3JldHVybiBEfSxhcGlzYXVjZT17REVGQVVMVF9IRUFERVJTOkRFRkFVTFRfSEVBREVSUyxOT05FOk5PTkUsQ0xJRU5UX0VSUk9SOkNMSUVOVF9FUlJPUixTRVJWRVJfRVJST1I6U0VSVkVSX0VSUk9SLFRJTUVPVVRfRVJST1I6VElNRU9VVF9FUlJPUixDT05ORUNUSU9OX0VSUk9SOkNPTk5FQ1RJT05fRVJST1IsTkVUV09SS19FUlJPUjpORVRXT1JLX0VSUk9SLFVOS05PV05fRVJST1I6VU5LTk9XTl9FUlJPUixjcmVhdGU6Y3JlYXRlfTtleHBvcnRzLkRFRkFVTFRfSEVBREVSUz1ERUZBVUxUX0hFQURFUlMsZXhwb3J0cy5OT05FPU5PTkUsZXhwb3J0cy5DTElFTlRfRVJST1I9Q0xJRU5UX0VSUk9SLGV4cG9ydHMuU0VSVkVSX0VSUk9SPVNFUlZFUl9FUlJPUixleHBvcnRzLlRJTUVPVVRfRVJST1I9VElNRU9VVF9FUlJPUixleHBvcnRzLkNPTk5FQ1RJT05fRVJST1I9Q09OTkVDVElPTl9FUlJPUixleHBvcnRzLk5FVFdPUktfRVJST1I9TkVUV09SS19FUlJPUixleHBvcnRzLlVOS05PV05fRVJST1I9VU5LTk9XTl9FUlJPUixleHBvcnRzLkNBTkNFTF9FUlJPUj1DQU5DRUxfRVJST1IsZXhwb3J0cy5jcmVhdGU9Y3JlYXRlLGV4cG9ydHMuZGVmYXVsdD1hcGlzYXVjZTtcbiIsInZhciBhcnJheU1hcCA9IHJlcXVpcmUoJy4vX2FycmF5TWFwJyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgYmFzZU1hcCA9IHJlcXVpcmUoJy4vX2Jhc2VNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB2YWx1ZXMgYnkgcnVubmluZyBlYWNoIGVsZW1lbnQgaW4gYGNvbGxlY3Rpb25gIHRocnVcbiAqIGBpdGVyYXRlZWAuIFRoZSBpdGVyYXRlZSBpcyBpbnZva2VkIHdpdGggdGhyZWUgYXJndW1lbnRzOlxuICogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIE1hbnkgbG9kYXNoIG1ldGhvZHMgYXJlIGd1YXJkZWQgdG8gd29yayBhcyBpdGVyYXRlZXMgZm9yIG1ldGhvZHMgbGlrZVxuICogYF8uZXZlcnlgLCBgXy5maWx0ZXJgLCBgXy5tYXBgLCBgXy5tYXBWYWx1ZXNgLCBgXy5yZWplY3RgLCBhbmQgYF8uc29tZWAuXG4gKlxuICogVGhlIGd1YXJkZWQgbWV0aG9kcyBhcmU6XG4gKiBgYXJ5YCwgYGNodW5rYCwgYGN1cnJ5YCwgYGN1cnJ5UmlnaHRgLCBgZHJvcGAsIGBkcm9wUmlnaHRgLCBgZXZlcnlgLFxuICogYGZpbGxgLCBgaW52ZXJ0YCwgYHBhcnNlSW50YCwgYHJhbmRvbWAsIGByYW5nZWAsIGByYW5nZVJpZ2h0YCwgYHJlcGVhdGAsXG4gKiBgc2FtcGxlU2l6ZWAsIGBzbGljZWAsIGBzb21lYCwgYHNvcnRCeWAsIGBzcGxpdGAsIGB0YWtlYCwgYHRha2VSaWdodGAsXG4gKiBgdGVtcGxhdGVgLCBgdHJpbWAsIGB0cmltRW5kYCwgYHRyaW1TdGFydGAsIGFuZCBgd29yZHNgXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtpdGVyYXRlZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgbWFwcGVkIGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogXy5tYXAoWzQsIDhdLCBzcXVhcmUpO1xuICogLy8gPT4gWzE2LCA2NF1cbiAqXG4gKiBfLm1hcCh7ICdhJzogNCwgJ2InOiA4IH0sIHNxdWFyZSk7XG4gKiAvLyA9PiBbMTYsIDY0XSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcgfVxuICogXTtcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8ubWFwKHVzZXJzLCAndXNlcicpO1xuICogLy8gPT4gWydiYXJuZXknLCAnZnJlZCddXG4gKi9cbmZ1bmN0aW9uIG1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheU1hcCA6IGJhc2VNYXA7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShpdGVyYXRlZSwgMykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcDtcbiIsIi8qKlxuICogVGhlIGludmVyc2Ugb2YgYF8udG9QYWlyc2A7IHRoaXMgbWV0aG9kIHJldHVybnMgYW4gb2JqZWN0IGNvbXBvc2VkXG4gKiBmcm9tIGtleS12YWx1ZSBgcGFpcnNgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gcGFpcnMgVGhlIGtleS12YWx1ZSBwYWlycy5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBvYmplY3QuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uZnJvbVBhaXJzKFtbJ2EnLCAxXSwgWydiJywgMl1dKTtcbiAqIC8vID0+IHsgJ2EnOiAxLCAnYic6IDIgfVxuICovXG5mdW5jdGlvbiBmcm9tUGFpcnMocGFpcnMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYWlycyA9PSBudWxsID8gMCA6IHBhaXJzLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IHt9O1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHBhaXIgPSBwYWlyc1tpbmRleF07XG4gICAgcmVzdWx0W3BhaXJbMF1dID0gcGFpclsxXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZyb21QYWlycztcbiIsInZhciBhcnJheUZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5RmlsdGVyJyksXG4gICAgYmFzZUZpbHRlciA9IHJlcXVpcmUoJy4vX2Jhc2VGaWx0ZXInKSxcbiAgICBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyBhbiBhcnJheSBvZiBhbGwgZWxlbWVudHNcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqICoqTm90ZToqKiBVbmxpa2UgYF8ucmVtb3ZlYCwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQ29sbGVjdGlvblxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKiBAc2VlIF8ucmVqZWN0XG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciB1c2VycyA9IFtcbiAqICAgeyAndXNlcic6ICdiYXJuZXknLCAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfVxuICogXTtcbiAqXG4gKiBfLmZpbHRlcih1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gIW8uYWN0aXZlOyB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCB7ICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCddXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydiYXJuZXknXVxuICpcbiAqIC8vIENvbWJpbmluZyBzZXZlcmFsIHByZWRpY2F0ZXMgdXNpbmcgYF8ub3ZlckV2ZXJ5YCBvciBgXy5vdmVyU29tZWAuXG4gKiBfLmZpbHRlcih1c2VycywgXy5vdmVyU29tZShbeyAnYWdlJzogMzYgfSwgWydhZ2UnLCA0MF1dKSk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2ZyZWQnLCAnYmFybmV5J11cbiAqL1xuZnVuY3Rpb24gZmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgZnVuYyA9IGlzQXJyYXkoY29sbGVjdGlvbikgPyBhcnJheUZpbHRlciA6IGJhc2VGaWx0ZXI7XG4gIHJldHVybiBmdW5jKGNvbGxlY3Rpb24sIGJhc2VJdGVyYXRlZShwcmVkaWNhdGUsIDMpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaWx0ZXI7XG4iLCJ2YXIgYmFzZUluZGV4T2YgPSByZXF1aXJlKCcuL19iYXNlSW5kZXhPZicpLFxuICAgIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vdG9JbnRlZ2VyJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBgdmFsdWVgIGlzIGZvdW5kIGluIGBhcnJheWBcbiAqIHVzaW5nIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBmb3IgZXF1YWxpdHkgY29tcGFyaXNvbnMuIElmIGBmcm9tSW5kZXhgIGlzIG5lZ2F0aXZlLCBpdCdzIHVzZWQgYXMgdGhlXG4gKiBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIGBhcnJheWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyKTtcbiAqIC8vID0+IDFcbiAqXG4gKiAvLyBTZWFyY2ggZnJvbSB0aGUgYGZyb21JbmRleGAuXG4gKiBfLmluZGV4T2YoWzEsIDIsIDEsIDJdLCAyLCAyKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHZhciBpbmRleCA9IGZyb21JbmRleCA9PSBudWxsID8gMCA6IHRvSW50ZWdlcihmcm9tSW5kZXgpO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgaW5kZXggPSBuYXRpdmVNYXgobGVuZ3RoICsgaW5kZXgsIDApO1xuICB9XG4gIHJldHVybiBiYXNlSW5kZXhPZihhcnJheSwgdmFsdWUsIGluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbmRleE9mO1xuIiwidmFyIGJhc2VLZXlzID0gcmVxdWlyZSgnLi9fYmFzZUtleXMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNQcm90b3R5cGUgPSByZXF1aXJlKCcuL19pc1Byb3RvdHlwZScpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhbiBlbXB0eSBvYmplY3QsIGNvbGxlY3Rpb24sIG1hcCwgb3Igc2V0LlxuICpcbiAqIE9iamVjdHMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIG5vIG93biBlbnVtZXJhYmxlIHN0cmluZyBrZXllZFxuICogcHJvcGVydGllcy5cbiAqXG4gKiBBcnJheS1saWtlIHZhbHVlcyBzdWNoIGFzIGBhcmd1bWVudHNgIG9iamVjdHMsIGFycmF5cywgYnVmZmVycywgc3RyaW5ncywgb3JcbiAqIGpRdWVyeS1saWtlIGNvbGxlY3Rpb25zIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBsZW5ndGhgIG9mIGAwYC5cbiAqIFNpbWlsYXJseSwgbWFwcyBhbmQgc2V0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgYSBgc2l6ZWAgb2YgYDBgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGVtcHR5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNFbXB0eShudWxsKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkodHJ1ZSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KDEpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eShbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzRW1wdHkoeyAnYSc6IDEgfSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzQXJyYXlMaWtlKHZhbHVlKSAmJlxuICAgICAgKGlzQXJyYXkodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUuc3BsaWNlID09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgaXNCdWZmZXIodmFsdWUpIHx8IGlzVHlwZWRBcnJheSh2YWx1ZSkgfHwgaXNBcmd1bWVudHModmFsdWUpKSkge1xuICAgIHJldHVybiAhdmFsdWUubGVuZ3RoO1xuICB9XG4gIHZhciB0YWcgPSBnZXRUYWcodmFsdWUpO1xuICBpZiAodGFnID09IG1hcFRhZyB8fCB0YWcgPT0gc2V0VGFnKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5zaXplO1xuICB9XG4gIGlmIChpc1Byb3RvdHlwZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gIWJhc2VLZXlzKHZhbHVlKS5sZW5ndGg7XG4gIH1cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNFbXB0eTtcbiIsIiFmdW5jdGlvbihyLGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOihyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6cnx8c2VsZikuZGF5anNfcGx1Z2luX3JlbGF0aXZlVGltZT1lKCl9KHRoaXMsKGZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7cmV0dXJuIGZ1bmN0aW9uKHIsZSx0KXtyPXJ8fHt9O3ZhciBuPWUucHJvdG90eXBlLG89e2Z1dHVyZTpcImluICVzXCIscGFzdDpcIiVzIGFnb1wiLHM6XCJhIGZldyBzZWNvbmRzXCIsbTpcImEgbWludXRlXCIsbW06XCIlZCBtaW51dGVzXCIsaDpcImFuIGhvdXJcIixoaDpcIiVkIGhvdXJzXCIsZDpcImEgZGF5XCIsZGQ6XCIlZCBkYXlzXCIsTTpcImEgbW9udGhcIixNTTpcIiVkIG1vbnRoc1wiLHk6XCJhIHllYXJcIix5eTpcIiVkIHllYXJzXCJ9O2Z1bmN0aW9uIGkocixlLHQsbyl7cmV0dXJuIG4uZnJvbVRvQmFzZShyLGUsdCxvKX10LmVuLnJlbGF0aXZlVGltZT1vLG4uZnJvbVRvQmFzZT1mdW5jdGlvbihlLG4saSxkLHUpe2Zvcih2YXIgZixhLHMsbD1pLiRsb2NhbGUoKS5yZWxhdGl2ZVRpbWV8fG8saD1yLnRocmVzaG9sZHN8fFt7bDpcInNcIixyOjQ0LGQ6XCJzZWNvbmRcIn0se2w6XCJtXCIscjo4OX0se2w6XCJtbVwiLHI6NDQsZDpcIm1pbnV0ZVwifSx7bDpcImhcIixyOjg5fSx7bDpcImhoXCIscjoyMSxkOlwiaG91clwifSx7bDpcImRcIixyOjM1fSx7bDpcImRkXCIscjoyNSxkOlwiZGF5XCJ9LHtsOlwiTVwiLHI6NDV9LHtsOlwiTU1cIixyOjEwLGQ6XCJtb250aFwifSx7bDpcInlcIixyOjE3fSx7bDpcInl5XCIsZDpcInllYXJcIn1dLG09aC5sZW5ndGgsYz0wO2M8bTtjKz0xKXt2YXIgeT1oW2NdO3kuZCYmKGY9ZD90KGUpLmRpZmYoaSx5LmQsITApOmkuZGlmZihlLHkuZCwhMCkpO3ZhciBwPShyLnJvdW5kaW5nfHxNYXRoLnJvdW5kKShNYXRoLmFicyhmKSk7aWYocz1mPjAscDw9eS5yfHwheS5yKXtwPD0xJiZjPjAmJih5PWhbYy0xXSk7dmFyIHY9bFt5LmxdO3UmJihwPXUoXCJcIitwKSksYT1cInN0cmluZ1wiPT10eXBlb2Ygdj92LnJlcGxhY2UoXCIlZFwiLHApOnYocCxuLHkubCxzKTticmVha319aWYobilyZXR1cm4gYTt2YXIgTT1zP2wuZnV0dXJlOmwucGFzdDtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBNP00oYSk6TS5yZXBsYWNlKFwiJXNcIixhKX0sbi50bz1mdW5jdGlvbihyLGUpe3JldHVybiBpKHIsZSx0aGlzLCEwKX0sbi5mcm9tPWZ1bmN0aW9uKHIsZSl7cmV0dXJuIGkocixlLHRoaXMpfTt2YXIgZD1mdW5jdGlvbihyKXtyZXR1cm4gci4kdT90LnV0YygpOnQoKX07bi50b05vdz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy50byhkKHRoaXMpLHIpfSxuLmZyb21Ob3c9ZnVuY3Rpb24ocil7cmV0dXJuIHRoaXMuZnJvbShkKHRoaXMpLHIpfX19KSk7IiwiIWZ1bmN0aW9uKHQsaSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9aSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoaSk6KHQ9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczp0fHxzZWxmKS5kYXlqc19wbHVnaW5fdXRjPWkoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjt2YXIgdD1cIm1pbnV0ZVwiLGk9L1srLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2csZT0vKFsrLV18XFxkXFxkKS9nO3JldHVybiBmdW5jdGlvbihzLGYsbil7dmFyIHU9Zi5wcm90b3R5cGU7bi51dGM9ZnVuY3Rpb24odCl7dmFyIGk9e2RhdGU6dCx1dGM6ITAsYXJnczphcmd1bWVudHN9O3JldHVybiBuZXcgZihpKX0sdS51dGM9ZnVuY3Rpb24oaSl7dmFyIGU9bih0aGlzLnRvRGF0ZSgpLHtsb2NhbGU6dGhpcy4kTCx1dGM6ITB9KTtyZXR1cm4gaT9lLmFkZCh0aGlzLnV0Y09mZnNldCgpLHQpOmV9LHUubG9jYWw9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnRvRGF0ZSgpLHtsb2NhbGU6dGhpcy4kTCx1dGM6ITF9KX07dmFyIHI9dS5wYXJzZTt1LnBhcnNlPWZ1bmN0aW9uKHQpe3QudXRjJiYodGhpcy4kdT0hMCksdGhpcy4kdXRpbHMoKS51KHQuJG9mZnNldCl8fCh0aGlzLiRvZmZzZXQ9dC4kb2Zmc2V0KSxyLmNhbGwodGhpcyx0KX07dmFyIG89dS5pbml0O3UuaW5pdD1mdW5jdGlvbigpe2lmKHRoaXMuJHUpe3ZhciB0PXRoaXMuJGQ7dGhpcy4keT10LmdldFVUQ0Z1bGxZZWFyKCksdGhpcy4kTT10LmdldFVUQ01vbnRoKCksdGhpcy4kRD10LmdldFVUQ0RhdGUoKSx0aGlzLiRXPXQuZ2V0VVRDRGF5KCksdGhpcy4kSD10LmdldFVUQ0hvdXJzKCksdGhpcy4kbT10LmdldFVUQ01pbnV0ZXMoKSx0aGlzLiRzPXQuZ2V0VVRDU2Vjb25kcygpLHRoaXMuJG1zPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCl9ZWxzZSBvLmNhbGwodGhpcyl9O3ZhciBhPXUudXRjT2Zmc2V0O3UudXRjT2Zmc2V0PWZ1bmN0aW9uKHMsZil7dmFyIG49dGhpcy4kdXRpbHMoKS51O2lmKG4ocykpcmV0dXJuIHRoaXMuJHU/MDpuKHRoaXMuJG9mZnNldCk/YS5jYWxsKHRoaXMpOnRoaXMuJG9mZnNldDtpZihcInN0cmluZ1wiPT10eXBlb2YgcyYmKHM9ZnVuY3Rpb24odCl7dm9pZCAwPT09dCYmKHQ9XCJcIik7dmFyIHM9dC5tYXRjaChpKTtpZighcylyZXR1cm4gbnVsbDt2YXIgZj0oXCJcIitzWzBdKS5tYXRjaChlKXx8W1wiLVwiLDAsMF0sbj1mWzBdLHU9NjAqK2ZbMV0rICtmWzJdO3JldHVybiAwPT09dT8wOlwiK1wiPT09bj91Oi11fShzKSxudWxsPT09cykpcmV0dXJuIHRoaXM7dmFyIHU9TWF0aC5hYnMocyk8PTE2PzYwKnM6cztpZigwPT09dSlyZXR1cm4gdGhpcy51dGMoZik7dmFyIHI9dGhpcy5jbG9uZSgpO2lmKGYpcmV0dXJuIHIuJG9mZnNldD11LHIuJHU9ITEscjt2YXIgbz10aGlzLiR1P3RoaXMudG9EYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTotMSp0aGlzLnV0Y09mZnNldCgpO3JldHVybihyPXRoaXMubG9jYWwoKS5hZGQodStvLHQpKS4kb2Zmc2V0PXUsci4keC4kbG9jYWxPZmZzZXQ9byxyfTt2YXIgaD11LmZvcm1hdDt1LmZvcm1hdD1mdW5jdGlvbih0KXt2YXIgaT10fHwodGhpcy4kdT9cIllZWVktTU0tRERUSEg6bW06c3NbWl1cIjpcIlwiKTtyZXR1cm4gaC5jYWxsKHRoaXMsaSl9LHUudmFsdWVPZj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuJHV0aWxzKCkudSh0aGlzLiRvZmZzZXQpPzA6dGhpcy4kb2Zmc2V0Kyh0aGlzLiR4LiRsb2NhbE9mZnNldHx8dGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpKTtyZXR1cm4gdGhpcy4kZC52YWx1ZU9mKCktNmU0KnR9LHUuaXNVVEM9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuJHV9LHUudG9JU09TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpfSx1LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9VVENTdHJpbmcoKX07dmFyIGw9dS50b0RhdGU7dS50b0RhdGU9ZnVuY3Rpb24odCl7cmV0dXJuXCJzXCI9PT10JiZ0aGlzLiRvZmZzZXQ/bih0aGlzLmZvcm1hdChcIllZWVktTU0tREQgSEg6bW06c3M6U1NTXCIpKS50b0RhdGUoKTpsLmNhbGwodGhpcyl9O3ZhciBjPXUuZGlmZjt1LmRpZmY9ZnVuY3Rpb24odCxpLGUpe2lmKHQmJnRoaXMuJHU9PT10LiR1KXJldHVybiBjLmNhbGwodGhpcyx0LGksZSk7dmFyIHM9dGhpcy5sb2NhbCgpLGY9bih0KS5sb2NhbCgpO3JldHVybiBjLmNhbGwocyxmLGksZSl9fX0pKTsiLCJ2YXIgY3JlYXRlQ2FzZUZpcnN0ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ2FzZUZpcnN0Jyk7XG5cbi8qKlxuICogQ29udmVydHMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBgc3RyaW5nYCB0byB1cHBlciBjYXNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBTdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyaW5nPScnXSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnVwcGVyRmlyc3QoJ2ZyZWQnKTtcbiAqIC8vID0+ICdGcmVkJ1xuICpcbiAqIF8udXBwZXJGaXJzdCgnRlJFRCcpO1xuICogLy8gPT4gJ0ZSRUQnXG4gKi9cbnZhciB1cHBlckZpcnN0ID0gY3JlYXRlQ2FzZUZpcnN0KCd0b1VwcGVyQ2FzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHVwcGVyRmlyc3Q7XG4iLCJ2YXIgY3JlYXRlUmFuZ2UgPSByZXF1aXJlKCcuL19jcmVhdGVSYW5nZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgbnVtYmVycyAocG9zaXRpdmUgYW5kL29yIG5lZ2F0aXZlKSBwcm9ncmVzc2luZyBmcm9tXG4gKiBgc3RhcnRgIHVwIHRvLCBidXQgbm90IGluY2x1ZGluZywgYGVuZGAuIEEgc3RlcCBvZiBgLTFgIGlzIHVzZWQgaWYgYSBuZWdhdGl2ZVxuICogYHN0YXJ0YCBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbiBgZW5kYCBvciBgc3RlcGAuIElmIGBlbmRgIGlzIG5vdCBzcGVjaWZpZWQsXG4gKiBpdCdzIHNldCB0byBgc3RhcnRgIHdpdGggYHN0YXJ0YCB0aGVuIHNldCB0byBgMGAuXG4gKlxuICogKipOb3RlOioqIEphdmFTY3JpcHQgZm9sbG93cyB0aGUgSUVFRS03NTQgc3RhbmRhcmQgZm9yIHJlc29sdmluZ1xuICogZmxvYXRpbmctcG9pbnQgdmFsdWVzIHdoaWNoIGNhbiBwcm9kdWNlIHVuZXhwZWN0ZWQgcmVzdWx0cy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGFydD0wXSBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcD0xXSBUaGUgdmFsdWUgdG8gaW5jcmVtZW50IG9yIGRlY3JlbWVudCBieS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcmFuZ2Ugb2YgbnVtYmVycy5cbiAqIEBzZWUgXy5pblJhbmdlLCBfLnJhbmdlUmlnaHRcbiAqIEBleGFtcGxlXG4gKlxuICogXy5yYW5nZSg0KTtcbiAqIC8vID0+IFswLCAxLCAyLCAzXVxuICpcbiAqIF8ucmFuZ2UoLTQpO1xuICogLy8gPT4gWzAsIC0xLCAtMiwgLTNdXG4gKlxuICogXy5yYW5nZSgxLCA1KTtcbiAqIC8vID0+IFsxLCAyLCAzLCA0XVxuICpcbiAqIF8ucmFuZ2UoMCwgMjAsIDUpO1xuICogLy8gPT4gWzAsIDUsIDEwLCAxNV1cbiAqXG4gKiBfLnJhbmdlKDAsIC00LCAtMSk7XG4gKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAqXG4gKiBfLnJhbmdlKDEsIDQsIDApO1xuICogLy8gPT4gWzEsIDEsIDFdXG4gKlxuICogXy5yYW5nZSgwKTtcbiAqIC8vID0+IFtdXG4gKi9cbnZhciByYW5nZSA9IGNyZWF0ZVJhbmdlKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmFuZ2U7XG4iLCJ2YXIgc2NvcGUgPSAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwpIHx8XG4gICAgICAgICAgICAodHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgJiYgc2VsZikgfHxcbiAgICAgICAgICAgIHdpbmRvdztcbnZhciBhcHBseSA9IEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseTtcblxuLy8gRE9NIEFQSXMsIGZvciBjb21wbGV0ZW5lc3NcblxuZXhwb3J0cy5zZXRUaW1lb3V0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgVGltZW91dChhcHBseS5jYWxsKHNldFRpbWVvdXQsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhclRpbWVvdXQpO1xufTtcbmV4cG9ydHMuc2V0SW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0SW50ZXJ2YWwsIHNjb3BlLCBhcmd1bWVudHMpLCBjbGVhckludGVydmFsKTtcbn07XG5leHBvcnRzLmNsZWFyVGltZW91dCA9XG5leHBvcnRzLmNsZWFySW50ZXJ2YWwgPSBmdW5jdGlvbih0aW1lb3V0KSB7XG4gIGlmICh0aW1lb3V0KSB7XG4gICAgdGltZW91dC5jbG9zZSgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBUaW1lb3V0KGlkLCBjbGVhckZuKSB7XG4gIHRoaXMuX2lkID0gaWQ7XG4gIHRoaXMuX2NsZWFyRm4gPSBjbGVhckZuO1xufVxuVGltZW91dC5wcm90b3R5cGUudW5yZWYgPSBUaW1lb3V0LnByb3RvdHlwZS5yZWYgPSBmdW5jdGlvbigpIHt9O1xuVGltZW91dC5wcm90b3R5cGUuY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY2xlYXJGbi5jYWxsKHNjb3BlLCB0aGlzLl9pZCk7XG59O1xuXG4vLyBEb2VzIG5vdCBzdGFydCB0aGUgdGltZSwganVzdCBzZXRzIHVwIHRoZSBtZW1iZXJzIG5lZWRlZC5cbmV4cG9ydHMuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSwgbXNlY3MpIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IG1zZWNzO1xufTtcblxuZXhwb3J0cy51bmVucm9sbCA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuICBpdGVtLl9pZGxlVGltZW91dCA9IC0xO1xufTtcblxuZXhwb3J0cy5fdW5yZWZBY3RpdmUgPSBleHBvcnRzLmFjdGl2ZSA9IGZ1bmN0aW9uKGl0ZW0pIHtcbiAgY2xlYXJUaW1lb3V0KGl0ZW0uX2lkbGVUaW1lb3V0SWQpO1xuXG4gIHZhciBtc2VjcyA9IGl0ZW0uX2lkbGVUaW1lb3V0O1xuICBpZiAobXNlY3MgPj0gMCkge1xuICAgIGl0ZW0uX2lkbGVUaW1lb3V0SWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uIG9uVGltZW91dCgpIHtcbiAgICAgIGlmIChpdGVtLl9vblRpbWVvdXQpXG4gICAgICAgIGl0ZW0uX29uVGltZW91dCgpO1xuICAgIH0sIG1zZWNzKTtcbiAgfVxufTtcblxuLy8gc2V0aW1tZWRpYXRlIGF0dGFjaGVzIGl0c2VsZiB0byB0aGUgZ2xvYmFsIG9iamVjdFxucmVxdWlyZShcInNldGltbWVkaWF0ZVwiKTtcbi8vIE9uIHNvbWUgZXhvdGljIGVudmlyb25tZW50cywgaXQncyBub3QgY2xlYXIgd2hpY2ggb2JqZWN0IGBzZXRpbW1lZGlhdGVgIHdhc1xuLy8gYWJsZSB0byBpbnN0YWxsIG9udG8uICBTZWFyY2ggZWFjaCBwb3NzaWJpbGl0eSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGVcbi8vIGBzZXRpbW1lZGlhdGVgIGxpYnJhcnkuXG5leHBvcnRzLnNldEltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLnNldEltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMgJiYgdGhpcy5zZXRJbW1lZGlhdGUpO1xuZXhwb3J0cy5jbGVhckltbWVkaWF0ZSA9ICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbC5jbGVhckltbWVkaWF0ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLmNsZWFySW1tZWRpYXRlKTtcbiIsIihmdW5jdGlvbiAoZ2xvYmFsLCB1bmRlZmluZWQpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgIGlmIChnbG9iYWwuc2V0SW1tZWRpYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbmV4dEhhbmRsZSA9IDE7IC8vIFNwZWMgc2F5cyBncmVhdGVyIHRoYW4gemVyb1xuICAgIHZhciB0YXNrc0J5SGFuZGxlID0ge307XG4gICAgdmFyIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgIHZhciBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gICAgdmFyIHJlZ2lzdGVySW1tZWRpYXRlO1xuXG4gICAgZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBDYWxsYmFjayBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gb3IgYSBzdHJpbmdcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjYWxsYmFjayA9IG5ldyBGdW5jdGlvbihcIlwiICsgY2FsbGJhY2spO1xuICAgICAgfVxuICAgICAgLy8gQ29weSBmdW5jdGlvbiBhcmd1bWVudHNcbiAgICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDFdO1xuICAgICAgfVxuICAgICAgLy8gU3RvcmUgYW5kIHJlZ2lzdGVyIHRoZSB0YXNrXG4gICAgICB2YXIgdGFzayA9IHsgY2FsbGJhY2s6IGNhbGxiYWNrLCBhcmdzOiBhcmdzIH07XG4gICAgICB0YXNrc0J5SGFuZGxlW25leHRIYW5kbGVdID0gdGFzaztcbiAgICAgIHJlZ2lzdGVySW1tZWRpYXRlKG5leHRIYW5kbGUpO1xuICAgICAgcmV0dXJuIG5leHRIYW5kbGUrKztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShoYW5kbGUpIHtcbiAgICAgICAgZGVsZXRlIHRhc2tzQnlIYW5kbGVbaGFuZGxlXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW4odGFzaykge1xuICAgICAgICB2YXIgY2FsbGJhY2sgPSB0YXNrLmNhbGxiYWNrO1xuICAgICAgICB2YXIgYXJncyA9IHRhc2suYXJncztcbiAgICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGNhbGxiYWNrKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjYWxsYmFjay5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBydW5JZlByZXNlbnQoaGFuZGxlKSB7XG4gICAgICAgIC8vIEZyb20gdGhlIHNwZWM6IFwiV2FpdCB1bnRpbCBhbnkgaW52b2NhdGlvbnMgb2YgdGhpcyBhbGdvcml0aG0gc3RhcnRlZCBiZWZvcmUgdGhpcyBvbmUgaGF2ZSBjb21wbGV0ZWQuXCJcbiAgICAgICAgLy8gU28gaWYgd2UncmUgY3VycmVudGx5IHJ1bm5pbmcgYSB0YXNrLCB3ZSdsbCBuZWVkIHRvIGRlbGF5IHRoaXMgaW52b2NhdGlvbi5cbiAgICAgICAgaWYgKGN1cnJlbnRseVJ1bm5pbmdBVGFzaykge1xuICAgICAgICAgICAgLy8gRGVsYXkgYnkgZG9pbmcgYSBzZXRUaW1lb3V0LiBzZXRJbW1lZGlhdGUgd2FzIHRyaWVkIGluc3RlYWQsIGJ1dCBpbiBGaXJlZm94IDcgaXQgZ2VuZXJhdGVkIGFcbiAgICAgICAgICAgIC8vIFwidG9vIG11Y2ggcmVjdXJzaW9uXCIgZXJyb3IuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KHJ1bklmUHJlc2VudCwgMCwgaGFuZGxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0YXNrID0gdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgICAgICAgICAgaWYgKHRhc2spIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bih0YXNrKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckltbWVkaWF0ZShoYW5kbGUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50bHlSdW5uaW5nQVRhc2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkgeyBydW5JZlByZXNlbnQoaGFuZGxlKTsgfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FuVXNlUG9zdE1lc3NhZ2UoKSB7XG4gICAgICAgIC8vIFRoZSB0ZXN0IGFnYWluc3QgYGltcG9ydFNjcmlwdHNgIHByZXZlbnRzIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBiZWluZyBpbnN0YWxsZWQgaW5zaWRlIGEgd2ViIHdvcmtlcixcbiAgICAgICAgLy8gd2hlcmUgYGdsb2JhbC5wb3N0TWVzc2FnZWAgbWVhbnMgc29tZXRoaW5nIGNvbXBsZXRlbHkgZGlmZmVyZW50IGFuZCBjYW4ndCBiZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuXG4gICAgICAgIGlmIChnbG9iYWwucG9zdE1lc3NhZ2UgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICB2YXIgcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cyA9IHRydWU7XG4gICAgICAgICAgICB2YXIgb2xkT25NZXNzYWdlID0gZ2xvYmFsLm9ubWVzc2FnZTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gZmFsc2U7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKFwiXCIsIFwiKlwiKTtcbiAgICAgICAgICAgIGdsb2JhbC5vbm1lc3NhZ2UgPSBvbGRPbk1lc3NhZ2U7XG4gICAgICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2VJc0FzeW5jaHJvbm91cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICAvLyBJbnN0YWxscyBhbiBldmVudCBoYW5kbGVyIG9uIGBnbG9iYWxgIGZvciB0aGUgYG1lc3NhZ2VgIGV2ZW50OiBzZWVcbiAgICAgICAgLy8gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vd2luZG93LnBvc3RNZXNzYWdlXG4gICAgICAgIC8vICogaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvY29tbXMuaHRtbCNjcm9zc0RvY3VtZW50TWVzc2FnZXNcblxuICAgICAgICB2YXIgbWVzc2FnZVByZWZpeCA9IFwic2V0SW1tZWRpYXRlJFwiICsgTWF0aC5yYW5kb20oKSArIFwiJFwiO1xuICAgICAgICB2YXIgb25HbG9iYWxNZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5zb3VyY2UgPT09IGdsb2JhbCAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBldmVudC5kYXRhID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5pbmRleE9mKG1lc3NhZ2VQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcnVuSWZQcmVzZW50KCtldmVudC5kYXRhLnNsaWNlKG1lc3NhZ2VQcmVmaXgubGVuZ3RoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlLCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWwuYXR0YWNoRXZlbnQoXCJvbm1lc3NhZ2VcIiwgb25HbG9iYWxNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UobWVzc2FnZVByZWZpeCArIGhhbmRsZSwgXCIqXCIpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgaGFuZGxlID0gZXZlbnQuZGF0YTtcbiAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgdmFyIGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgPHNjcmlwdD4gZWxlbWVudDsgaXRzIHJlYWR5c3RhdGVjaGFuZ2UgZXZlbnQgd2lsbCBiZSBmaXJlZCBhc3luY2hyb25vdXNseSBvbmNlIGl0IGlzIGluc2VydGVkXG4gICAgICAgICAgICAvLyBpbnRvIHRoZSBkb2N1bWVudC4gRG8gc28sIHRodXMgcXVldWluZyB1cCB0aGUgdGFzay4gUmVtZW1iZXIgdG8gY2xlYW4gdXAgb25jZSBpdCdzIGJlZW4gY2FsbGVkLlxuICAgICAgICAgICAgdmFyIHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoaGFuZGxlKTtcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgc2NyaXB0ID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpIHtcbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIElmIHN1cHBvcnRlZCwgd2Ugc2hvdWxkIGF0dGFjaCB0byB0aGUgcHJvdG90eXBlIG9mIGdsb2JhbCwgc2luY2UgdGhhdCBpcyB3aGVyZSBzZXRUaW1lb3V0IGV0IGFsLiBsaXZlLlxuICAgIHZhciBhdHRhY2hUbyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsKTtcbiAgICBhdHRhY2hUbyA9IGF0dGFjaFRvICYmIGF0dGFjaFRvLnNldFRpbWVvdXQgPyBhdHRhY2hUbyA6IGdsb2JhbDtcblxuICAgIC8vIERvbid0IGdldCBmb29sZWQgYnkgZS5nLiBicm93c2VyaWZ5IGVudmlyb25tZW50cy5cbiAgICBpZiAoe30udG9TdHJpbmcuY2FsbChnbG9iYWwucHJvY2VzcykgPT09IFwiW29iamVjdCBwcm9jZXNzXVwiKSB7XG4gICAgICAgIC8vIEZvciBOb2RlLmpzIGJlZm9yZSAwLjlcbiAgICAgICAgaW5zdGFsbE5leHRUaWNrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoY2FuVXNlUG9zdE1lc3NhZ2UoKSkge1xuICAgICAgICAvLyBGb3Igbm9uLUlFMTAgbW9kZXJuIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxQb3N0TWVzc2FnZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGdsb2JhbC5NZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAvLyBGb3Igd2ViIHdvcmtlcnMsIHdoZXJlIHN1cHBvcnRlZFxuICAgICAgICBpbnN0YWxsTWVzc2FnZUNoYW5uZWxJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChkb2MgJiYgXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiBpbiBkb2MuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKSkge1xuICAgICAgICAvLyBGb3IgSUUgNuKAkzhcbiAgICAgICAgaW5zdGFsbFJlYWR5U3RhdGVDaGFuZ2VJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yIG9sZGVyIGJyb3dzZXJzXG4gICAgICAgIGluc3RhbGxTZXRUaW1lb3V0SW1wbGVtZW50YXRpb24oKTtcbiAgICB9XG5cbiAgICBhdHRhY2hUby5zZXRJbW1lZGlhdGUgPSBzZXRJbW1lZGlhdGU7XG4gICAgYXR0YWNoVG8uY2xlYXJJbW1lZGlhdGUgPSBjbGVhckltbWVkaWF0ZTtcbn0odHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyB0eXBlb2YgZ2xvYmFsID09PSBcInVuZGVmaW5lZFwiID8gdGhpcyA6IGdsb2JhbCA6IHNlbGYpKTtcbiIsIi8qKlxuICogQSBzcGVjaWFsIHBsYWNlaG9sZGVyIHZhbHVlIHVzZWQgdG8gc3BlY2lmeSBcImdhcHNcIiB3aXRoaW4gY3VycmllZCBmdW5jdGlvbnMsXG4gKiBhbGxvd2luZyBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMsIHJlZ2FyZGxlc3Mgb2ZcbiAqIHRoZWlyIHBvc2l0aW9ucy5cbiAqXG4gKiBJZiBgZ2AgaXMgYSBjdXJyaWVkIHRlcm5hcnkgZnVuY3Rpb24gYW5kIGBfYCBpcyBgUi5fX2AsIHRoZSBmb2xsb3dpbmcgYXJlXG4gKiBlcXVpdmFsZW50OlxuICpcbiAqICAgLSBgZygxLCAyLCAzKWBcbiAqICAgLSBgZyhfLCAyLCAzKSgxKWBcbiAqICAgLSBgZyhfLCBfLCAzKSgxKSgyKWBcbiAqICAgLSBgZyhfLCBfLCAzKSgxLCAyKWBcbiAqICAgLSBgZyhfLCAyLCBfKSgxLCAzKWBcbiAqICAgLSBgZyhfLCAyKSgxKSgzKWBcbiAqICAgLSBgZyhfLCAyKSgxLCAzKWBcbiAqICAgLSBgZyhfLCAyKShfLCAzKSgxKWBcbiAqXG4gKiBAY29uc3RhbnRcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuNi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgZ3JlZXQgPSBSLnJlcGxhY2UoJ3tuYW1lfScsIFIuX18sICdIZWxsbywge25hbWV9IScpO1xuICogICAgICBncmVldCgnQWxpY2UnKTsgLy89PiAnSGVsbG8sIEFsaWNlISdcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7J0BAZnVuY3Rpb25hbC9wbGFjZWhvbGRlcic6IHRydWV9O1xuIiwidmFyIF9jb250YWlucyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2NvbnRhaW5zJyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xuXG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNwZWNpZmllZCB2YWx1ZSBpcyBlcXVhbCwgaW4gYFIuZXF1YWxzYCB0ZXJtcywgdG8gYXRcbiAqIGxlYXN0IG9uZSBlbGVtZW50IG9mIHRoZSBnaXZlbiBsaXN0OyBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIGEgLT4gW2FdIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBpdGVtIHRvIGNvbXBhcmUgYWdhaW5zdC5cbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgVGhlIGFycmF5IHRvIGNvbnNpZGVyLlxuICogQHJldHVybiB7Qm9vbGVhbn0gYHRydWVgIGlmIGFuIGVxdWl2YWxlbnQgaXRlbSBpcyBpbiB0aGUgbGlzdCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAc2VlIFIuYW55XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5jb250YWlucygzLCBbMSwgMiwgM10pOyAvLz0+IHRydWVcbiAqICAgICAgUi5jb250YWlucyg0LCBbMSwgMiwgM10pOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuY29udGFpbnMoeyBuYW1lOiAnRnJlZCcgfSwgW3sgbmFtZTogJ0ZyZWQnIH1dKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuY29udGFpbnMoWzQyXSwgW1s0Ml1dKTsgLy89PiB0cnVlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihfY29udGFpbnMpO1xuIiwidmFyIF9pbmRleE9mID0gcmVxdWlyZSgnLi9faW5kZXhPZicpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2NvbnRhaW5zKGEsIGxpc3QpIHtcbiAgcmV0dXJuIF9pbmRleE9mKGxpc3QsIGEsIDApID49IDA7XG59O1xuIiwidmFyIGVxdWFscyA9IHJlcXVpcmUoJy4uL2VxdWFscycpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2luZGV4T2YobGlzdCwgYSwgaWR4KSB7XG4gIHZhciBpbmYsIGl0ZW07XG4gIC8vIEFycmF5LnByb3RvdHlwZS5pbmRleE9mIGRvZXNuJ3QgZXhpc3QgYmVsb3cgSUU5XG4gIGlmICh0eXBlb2YgbGlzdC5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgYSkge1xuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaWYgKGEgPT09IDApIHtcbiAgICAgICAgICAvLyBtYW51YWxseSBjcmF3bCB0aGUgbGlzdCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuICswIGFuZCAtMFxuICAgICAgICAgIGluZiA9IDEgLyBhO1xuICAgICAgICAgIHdoaWxlIChpZHggPCBsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgaXRlbSA9IGxpc3RbaWR4XTtcbiAgICAgICAgICAgIGlmIChpdGVtID09PSAwICYmIDEgLyBpdGVtID09PSBpbmYpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGlkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkeCArPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH0gZWxzZSBpZiAoYSAhPT0gYSkge1xuICAgICAgICAgIC8vIE5hTlxuICAgICAgICAgIHdoaWxlIChpZHggPCBsaXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgaXRlbSA9IGxpc3RbaWR4XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicgJiYgaXRlbSAhPT0gaXRlbSkge1xuICAgICAgICAgICAgICByZXR1cm4gaWR4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWR4ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICAvLyBub24temVybyBudW1iZXJzIGNhbiB1dGlsaXNlIFNldFxuICAgICAgICByZXR1cm4gbGlzdC5pbmRleE9mKGEsIGlkeCk7XG5cbiAgICAgIC8vIGFsbCB0aGVzZSB0eXBlcyBjYW4gdXRpbGlzZSBTZXRcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiBsaXN0LmluZGV4T2YoYSwgaWR4KTtcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKGEgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBudWxsIGNhbiB1dGlsaXNlIFNldFxuICAgICAgICAgIHJldHVybiBsaXN0LmluZGV4T2YoYSwgaWR4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBhbnl0aGluZyBlbHNlIG5vdCBjb3ZlcmVkIGFib3ZlLCBkZWZlciB0byBSLmVxdWFsc1xuICB3aGlsZSAoaWR4IDwgbGlzdC5sZW5ndGgpIHtcbiAgICBpZiAoZXF1YWxzKGxpc3RbaWR4XSwgYSkpIHtcbiAgICAgIHJldHVybiBpZHg7XG4gICAgfVxuICAgIGlkeCArPSAxO1xuICB9XG4gIHJldHVybiAtMTtcbn07XG4iLCJ2YXIgX2FycmF5RnJvbUl0ZXJhdG9yID0gcmVxdWlyZSgnLi9fYXJyYXlGcm9tSXRlcmF0b3InKTtcbnZhciBfZnVuY3Rpb25OYW1lID0gcmVxdWlyZSgnLi9fZnVuY3Rpb25OYW1lJyk7XG52YXIgX2hhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGlkZW50aWNhbCA9IHJlcXVpcmUoJy4uL2lkZW50aWNhbCcpO1xudmFyIGtleXMgPSByZXF1aXJlKCcuLi9rZXlzJyk7XG52YXIgdHlwZSA9IHJlcXVpcmUoJy4uL3R5cGUnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9lcXVhbHMoYSwgYiwgc3RhY2tBLCBzdGFja0IpIHtcbiAgaWYgKGlkZW50aWNhbChhLCBiKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGUoYSkgIT09IHR5cGUoYikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYS5lcXVhbHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGIuZXF1YWxzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJyAmJiBhLmVxdWFscyhiKSAmJlxuICAgICAgICAgICB0eXBlb2YgYi5lcXVhbHMgPT09ICdmdW5jdGlvbicgJiYgYi5lcXVhbHMoYSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUoYSkpIHtcbiAgICBjYXNlICdBcmd1bWVudHMnOlxuICAgIGNhc2UgJ0FycmF5JzpcbiAgICBjYXNlICdPYmplY3QnOlxuICAgICAgaWYgKHR5cGVvZiBhLmNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAgICAgX2Z1bmN0aW9uTmFtZShhLmNvbnN0cnVjdG9yKSA9PT0gJ1Byb21pc2UnKSB7XG4gICAgICAgIHJldHVybiBhID09PSBiO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnQm9vbGVhbic6XG4gICAgY2FzZSAnTnVtYmVyJzpcbiAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgaWYgKCEodHlwZW9mIGEgPT09IHR5cGVvZiBiICYmIGlkZW50aWNhbChhLnZhbHVlT2YoKSwgYi52YWx1ZU9mKCkpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdEYXRlJzpcbiAgICAgIGlmICghaWRlbnRpY2FsKGEudmFsdWVPZigpLCBiLnZhbHVlT2YoKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRXJyb3InOlxuICAgICAgcmV0dXJuIGEubmFtZSA9PT0gYi5uYW1lICYmIGEubWVzc2FnZSA9PT0gYi5tZXNzYWdlO1xuICAgIGNhc2UgJ1JlZ0V4cCc6XG4gICAgICBpZiAoIShhLnNvdXJjZSA9PT0gYi5zb3VyY2UgJiZcbiAgICAgICAgICAgIGEuZ2xvYmFsID09PSBiLmdsb2JhbCAmJlxuICAgICAgICAgICAgYS5pZ25vcmVDYXNlID09PSBiLmlnbm9yZUNhc2UgJiZcbiAgICAgICAgICAgIGEubXVsdGlsaW5lID09PSBiLm11bHRpbGluZSAmJlxuICAgICAgICAgICAgYS5zdGlja3kgPT09IGIuc3RpY2t5ICYmXG4gICAgICAgICAgICBhLnVuaWNvZGUgPT09IGIudW5pY29kZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnTWFwJzpcbiAgICBjYXNlICdTZXQnOlxuICAgICAgaWYgKCFfZXF1YWxzKF9hcnJheUZyb21JdGVyYXRvcihhLmVudHJpZXMoKSksIF9hcnJheUZyb21JdGVyYXRvcihiLmVudHJpZXMoKSksIHN0YWNrQSwgc3RhY2tCKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdJbnQ4QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQ4QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQ4Q2xhbXBlZEFycmF5JzpcbiAgICBjYXNlICdJbnQxNkFycmF5JzpcbiAgICBjYXNlICdVaW50MTZBcnJheSc6XG4gICAgY2FzZSAnSW50MzJBcnJheSc6XG4gICAgY2FzZSAnVWludDMyQXJyYXknOlxuICAgIGNhc2UgJ0Zsb2F0MzJBcnJheSc6XG4gICAgY2FzZSAnRmxvYXQ2NEFycmF5JzpcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzpcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBWYWx1ZXMgb2Ygb3RoZXIgdHlwZXMgYXJlIG9ubHkgZXF1YWwgaWYgaWRlbnRpY2FsLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0ga2V5cyhhKTtcbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5cyhiKS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgaWR4ID0gc3RhY2tBLmxlbmd0aCAtIDE7XG4gIHdoaWxlIChpZHggPj0gMCkge1xuICAgIGlmIChzdGFja0FbaWR4XSA9PT0gYSkge1xuICAgICAgcmV0dXJuIHN0YWNrQltpZHhdID09PSBiO1xuICAgIH1cbiAgICBpZHggLT0gMTtcbiAgfVxuXG4gIHN0YWNrQS5wdXNoKGEpO1xuICBzdGFja0IucHVzaChiKTtcbiAgaWR4ID0ga2V5c0EubGVuZ3RoIC0gMTtcbiAgd2hpbGUgKGlkeCA+PSAwKSB7XG4gICAgdmFyIGtleSA9IGtleXNBW2lkeF07XG4gICAgaWYgKCEoX2hhcyhrZXksIGIpICYmIF9lcXVhbHMoYltrZXldLCBhW2tleV0sIHN0YWNrQSwgc3RhY2tCKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWR4IC09IDE7XG4gIH1cbiAgc3RhY2tBLnBvcCgpO1xuICBzdGFja0IucG9wKCk7XG4gIHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2FycmF5RnJvbUl0ZXJhdG9yKGl0ZXIpIHtcbiAgdmFyIGxpc3QgPSBbXTtcbiAgdmFyIG5leHQ7XG4gIHdoaWxlICghKG5leHQgPSBpdGVyLm5leHQoKSkuZG9uZSkge1xuICAgIGxpc3QucHVzaChuZXh0LnZhbHVlKTtcbiAgfVxuICByZXR1cm4gbGlzdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9mdW5jdGlvbk5hbWUoZikge1xuICAvLyBTdHJpbmcoeCA9PiB4KSBldmFsdWF0ZXMgdG8gXCJ4ID0+IHhcIiwgc28gdGhlIHBhdHRlcm4gbWF5IG5vdCBtYXRjaC5cbiAgdmFyIG1hdGNoID0gU3RyaW5nKGYpLm1hdGNoKC9eZnVuY3Rpb24gKFxcdyopLyk7XG4gIHJldHVybiBtYXRjaCA9PSBudWxsID8gJycgOiBtYXRjaFsxXTtcbn07XG4iLCJ2YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xuXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGl0cyBhcmd1bWVudHMgYXJlIGlkZW50aWNhbCwgZmFsc2Ugb3RoZXJ3aXNlLiBWYWx1ZXMgYXJlXG4gKiBpZGVudGljYWwgaWYgdGhleSByZWZlcmVuY2UgdGhlIHNhbWUgbWVtb3J5LiBgTmFOYCBpcyBpZGVudGljYWwgdG8gYE5hTmA7XG4gKiBgMGAgYW5kIGAtMGAgYXJlIG5vdCBpZGVudGljYWwuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTUuMFxuICogQGNhdGVnb3J5IFJlbGF0aW9uXG4gKiBAc2lnIGEgLT4gYSAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgbyA9IHt9O1xuICogICAgICBSLmlkZW50aWNhbChvLCBvKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaWRlbnRpY2FsKDEsIDEpOyAvLz0+IHRydWVcbiAqICAgICAgUi5pZGVudGljYWwoMSwgJzEnKTsgLy89PiBmYWxzZVxuICogICAgICBSLmlkZW50aWNhbChbXSwgW10pOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaWRlbnRpY2FsKDAsIC0wKTsgLy89PiBmYWxzZVxuICogICAgICBSLmlkZW50aWNhbChOYU4sIE5hTik7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gaWRlbnRpY2FsKGEsIGIpIHtcbiAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICBpZiAoYSA9PT0gYikgeyAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgIHJldHVybiBhICE9PSAwIHx8IDEgLyBhID09PSAxIC8gYjtcbiAgfSBlbHNlIHtcbiAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgIHJldHVybiBhICE9PSBhICYmIGIgIT09IGI7XG4gIH1cbn0pO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcblxuXG4vKipcbiAqIEdpdmVzIGEgc2luZ2xlLXdvcmQgc3RyaW5nIGRlc2NyaXB0aW9uIG9mIHRoZSAobmF0aXZlKSB0eXBlIG9mIGEgdmFsdWUsXG4gKiByZXR1cm5pbmcgc3VjaCBhbnN3ZXJzIGFzICdPYmplY3QnLCAnTnVtYmVyJywgJ0FycmF5Jywgb3IgJ051bGwnLiBEb2VzIG5vdFxuICogYXR0ZW1wdCB0byBkaXN0aW5ndWlzaCB1c2VyIE9iamVjdCB0eXBlcyBhbnkgZnVydGhlciwgcmVwb3J0aW5nIHRoZW0gYWxsIGFzXG4gKiAnT2JqZWN0Jy5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC44LjBcbiAqIEBjYXRlZ29yeSBUeXBlXG4gKiBAc2lnICgqIC0+IHsqfSkgLT4gU3RyaW5nXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIudHlwZSh7fSk7IC8vPT4gXCJPYmplY3RcIlxuICogICAgICBSLnR5cGUoMSk7IC8vPT4gXCJOdW1iZXJcIlxuICogICAgICBSLnR5cGUoZmFsc2UpOyAvLz0+IFwiQm9vbGVhblwiXG4gKiAgICAgIFIudHlwZSgncycpOyAvLz0+IFwiU3RyaW5nXCJcbiAqICAgICAgUi50eXBlKG51bGwpOyAvLz0+IFwiTnVsbFwiXG4gKiAgICAgIFIudHlwZShbXSk7IC8vPT4gXCJBcnJheVwiXG4gKiAgICAgIFIudHlwZSgvW0Etel0vKTsgLy89PiBcIlJlZ0V4cFwiXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MShmdW5jdGlvbiB0eXBlKHZhbCkge1xuICByZXR1cm4gdmFsID09PSBudWxsICAgICAgPyAnTnVsbCcgICAgICA6XG4gICAgICAgICB2YWwgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDpcbiAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpLnNsaWNlKDgsIC0xKTtcbn0pO1xuIiwidmFyIF9jb25jYXQgPSByZXF1aXJlKCcuL2ludGVybmFsL19jb25jYXQnKTtcbnZhciBfY3JlYXRlUGFydGlhbEFwcGxpY2F0b3IgPSByZXF1aXJlKCcuL2ludGVybmFsL19jcmVhdGVQYXJ0aWFsQXBwbGljYXRvcicpO1xuXG5cbi8qKlxuICogVGFrZXMgYSBmdW5jdGlvbiBgZmAgYW5kIGEgbGlzdCBvZiBhcmd1bWVudHMsIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gYGdgLlxuICogV2hlbiBhcHBsaWVkLCBgZ2AgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGBmYCB0byB0aGUgYXJndW1lbnRzXG4gKiBwcm92aWRlZCBpbml0aWFsbHkgZm9sbG93ZWQgYnkgdGhlIGFyZ3VtZW50cyBwcm92aWRlZCB0byBgZ2AuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTAuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnICgoYSwgYiwgYywgLi4uLCBuKSAtPiB4KSAtPiBbYSwgYiwgYywgLi4uXSAtPiAoKGQsIGUsIGYsIC4uLiwgbikgLT4geClcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3NcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQHNlZSBSLnBhcnRpYWxSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBtdWx0aXBseTIgPSAoYSwgYikgPT4gYSAqIGI7XG4gKiAgICAgIHZhciBkb3VibGUgPSBSLnBhcnRpYWwobXVsdGlwbHkyLCBbMl0pO1xuICogICAgICBkb3VibGUoMik7IC8vPT4gNFxuICpcbiAqICAgICAgdmFyIGdyZWV0ID0gKHNhbHV0YXRpb24sIHRpdGxlLCBmaXJzdE5hbWUsIGxhc3ROYW1lKSA9PlxuICogICAgICAgIHNhbHV0YXRpb24gKyAnLCAnICsgdGl0bGUgKyAnICcgKyBmaXJzdE5hbWUgKyAnICcgKyBsYXN0TmFtZSArICchJztcbiAqXG4gKiAgICAgIHZhciBzYXlIZWxsbyA9IFIucGFydGlhbChncmVldCwgWydIZWxsbyddKTtcbiAqICAgICAgdmFyIHNheUhlbGxvVG9NcyA9IFIucGFydGlhbChzYXlIZWxsbywgWydNcy4nXSk7XG4gKiAgICAgIHNheUhlbGxvVG9NcygnSmFuZScsICdKb25lcycpOyAvLz0+ICdIZWxsbywgTXMuIEphbmUgSm9uZXMhJ1xuICogQHN5bWIgUi5wYXJ0aWFsKGYsIFthLCBiXSkoYywgZCkgPSBmKGEsIGIsIGMsIGQpXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2NyZWF0ZVBhcnRpYWxBcHBsaWNhdG9yKF9jb25jYXQpO1xuIiwidmFyIF9hcml0eSA9IHJlcXVpcmUoJy4vX2FyaXR5Jyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vX2N1cnJ5MicpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2NyZWF0ZVBhcnRpYWxBcHBsaWNhdG9yKGNvbmNhdCkge1xuICByZXR1cm4gX2N1cnJ5MihmdW5jdGlvbihmbiwgYXJncykge1xuICAgIHJldHVybiBfYXJpdHkoTWF0aC5tYXgoMCwgZm4ubGVuZ3RoIC0gYXJncy5sZW5ndGgpLCBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBjb25jYXQoYXJncywgYXJndW1lbnRzKSk7XG4gICAgfSk7XG4gIH0pO1xufTtcbiIsInZhciBfYXJpdHkgPSByZXF1aXJlKCcuL2ludGVybmFsL19hcml0eScpO1xudmFyIF9waXBlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fcGlwZScpO1xudmFyIHJlZHVjZSA9IHJlcXVpcmUoJy4vcmVkdWNlJyk7XG52YXIgdGFpbCA9IHJlcXVpcmUoJy4vdGFpbCcpO1xuXG5cbi8qKlxuICogUGVyZm9ybXMgbGVmdC10by1yaWdodCBmdW5jdGlvbiBjb21wb3NpdGlvbi4gVGhlIGxlZnRtb3N0IGZ1bmN0aW9uIG1heSBoYXZlXG4gKiBhbnkgYXJpdHk7IHRoZSByZW1haW5pbmcgZnVuY3Rpb25zIG11c3QgYmUgdW5hcnkuXG4gKlxuICogSW4gc29tZSBsaWJyYXJpZXMgdGhpcyBmdW5jdGlvbiBpcyBuYW1lZCBgc2VxdWVuY2VgLlxuICpcbiAqICoqTm90ZToqKiBUaGUgcmVzdWx0IG9mIHBpcGUgaXMgbm90IGF1dG9tYXRpY2FsbHkgY3VycmllZC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHNpZyAoKChhLCBiLCAuLi4sIG4pIC0+IG8pLCAobyAtPiBwKSwgLi4uLCAoeCAtPiB5KSwgKHkgLT4geikpIC0+ICgoYSwgYiwgLi4uLCBuKSAtPiB6KVxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gZnVuY3Rpb25zXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBzZWUgUi5jb21wb3NlXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGYgPSBSLnBpcGUoTWF0aC5wb3csIFIubmVnYXRlLCBSLmluYyk7XG4gKlxuICogICAgICBmKDMsIDQpOyAvLyAtKDNeNCkgKyAxXG4gKiBAc3ltYiBSLnBpcGUoZiwgZywgaCkoYSwgYikgPSBoKGcoZihhLCBiKSkpXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGlwZSgpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BpcGUgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50Jyk7XG4gIH1cbiAgcmV0dXJuIF9hcml0eShhcmd1bWVudHNbMF0ubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHJlZHVjZShfcGlwZSwgYXJndW1lbnRzWzBdLCB0YWlsKGFyZ3VtZW50cykpKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9waXBlKGYsIGcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBnLmNhbGwodGhpcywgZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gWFdyYXAoZm4pIHtcbiAgICB0aGlzLmYgPSBmbjtcbiAgfVxuICBYV3JhcC5wcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9pbml0J10gPSBmdW5jdGlvbigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2luaXQgbm90IGltcGxlbWVudGVkIG9uIFhXcmFwJyk7XG4gIH07XG4gIFhXcmFwLnByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddID0gZnVuY3Rpb24oYWNjKSB7IHJldHVybiBhY2M7IH07XG4gIFhXcmFwLnByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL3N0ZXAnXSA9IGZ1bmN0aW9uKGFjYywgeCkge1xuICAgIHJldHVybiB0aGlzLmYoYWNjLCB4KTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gX3h3cmFwKGZuKSB7IHJldHVybiBuZXcgWFdyYXAoZm4pOyB9O1xufSgpKTtcbiIsInZhciBfYXJpdHkgPSByZXF1aXJlKCcuL2ludGVybmFsL19hcml0eScpO1xudmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGlzIGJvdW5kIHRvIGEgY29udGV4dC5cbiAqIE5vdGU6IGBSLmJpbmRgIGRvZXMgbm90IHByb3ZpZGUgdGhlIGFkZGl0aW9uYWwgYXJndW1lbnQtYmluZGluZyBjYXBhYmlsaXRpZXMgb2ZcbiAqIFtGdW5jdGlvbi5wcm90b3R5cGUuYmluZF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRnVuY3Rpb24vYmluZCkuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuNi4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBzaWcgKCogLT4gKikgLT4geyp9IC0+ICgqIC0+ICopXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gYmluZCB0byBjb250ZXh0XG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc09iaiBUaGUgY29udGV4dCB0byBiaW5kIGBmbmAgdG9cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBleGVjdXRlIGluIHRoZSBjb250ZXh0IG9mIGB0aGlzT2JqYC5cbiAqIEBzZWUgUi5wYXJ0aWFsXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGxvZyA9IFIuYmluZChjb25zb2xlLmxvZywgY29uc29sZSk7XG4gKiAgICAgIFIucGlwZShSLmFzc29jKCdhJywgMiksIFIudGFwKGxvZyksIFIuYXNzb2MoJ2EnLCAzKSkoe2E6IDF9KTsgLy89PiB7YTogM31cbiAqICAgICAgLy8gbG9ncyB7YTogMn1cbiAqIEBzeW1iIFIuYmluZChmLCBvKShhLCBiKSA9IGYuY2FsbChvLCBhLCBiKVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gYmluZChmbiwgdGhpc09iaikge1xuICByZXR1cm4gX2FyaXR5KGZuLmxlbmd0aCwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNPYmosIGFyZ3VtZW50cyk7XG4gIH0pO1xufSk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIF9pc0FycmF5ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNBcnJheScpO1xudmFyIF9pc1N0cmluZyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2lzU3RyaW5nJyk7XG5cblxuLyoqXG4gKiBUZXN0cyB3aGV0aGVyIG9yIG5vdCBhbiBvYmplY3QgaXMgc2ltaWxhciB0byBhbiBhcnJheS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC41LjBcbiAqIEBjYXRlZ29yeSBUeXBlXG4gKiBAY2F0ZWdvcnkgTGlzdFxuICogQHNpZyAqIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7Kn0geCBUaGUgb2JqZWN0IHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYHhgIGhhcyBhIG51bWVyaWMgbGVuZ3RoIHByb3BlcnR5IGFuZCBleHRyZW1lIGluZGljZXMgZGVmaW5lZDsgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAZGVwcmVjYXRlZCBzaW5jZSB2MC4yMy4wXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5pc0FycmF5TGlrZShbXSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzQXJyYXlMaWtlKHRydWUpOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXNBcnJheUxpa2Uoe30pOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXNBcnJheUxpa2Uoe2xlbmd0aDogMTB9KTsgLy89PiBmYWxzZVxuICogICAgICBSLmlzQXJyYXlMaWtlKHswOiAnemVybycsIDk6ICduaW5lJywgbGVuZ3RoOiAxMH0pOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGlzQXJyYXlMaWtlKHgpIHtcbiAgaWYgKF9pc0FycmF5KHgpKSB7IHJldHVybiB0cnVlOyB9XG4gIGlmICgheCkgeyByZXR1cm4gZmFsc2U7IH1cbiAgaWYgKHR5cGVvZiB4ICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cbiAgaWYgKF9pc1N0cmluZyh4KSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgaWYgKHgubm9kZVR5cGUgPT09IDEpIHsgcmV0dXJuICEheC5sZW5ndGg7IH1cbiAgaWYgKHgubGVuZ3RoID09PSAwKSB7IHJldHVybiB0cnVlOyB9XG4gIGlmICh4Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4geC5oYXNPd25Qcm9wZXJ0eSgwKSAmJiB4Lmhhc093blByb3BlcnR5KHgubGVuZ3RoIC0gMSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSk7XG4iLCJ2YXIgX2NoZWNrRm9yTWV0aG9kID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY2hlY2tGb3JNZXRob2QnKTtcbnZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgc2xpY2UgPSByZXF1aXJlKCcuL3NsaWNlJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGdpdmVuIGxpc3Qgb3Igc3RyaW5nIChvciBvYmplY3RcbiAqIHdpdGggYSBgdGFpbGAgbWV0aG9kKS5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgc2xpY2VgIG1ldGhvZCBvZiB0aGUgZmlyc3QgYXJndW1lbnQsIGlmIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgTGlzdFxuICogQHNpZyBbYV0gLT4gW2FdXG4gKiBAc2lnIFN0cmluZyAtPiBTdHJpbmdcbiAqIEBwYXJhbSB7Kn0gbGlzdFxuICogQHJldHVybiB7Kn1cbiAqIEBzZWUgUi5oZWFkLCBSLmluaXQsIFIubGFzdFxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIudGFpbChbMSwgMiwgM10pOyAgLy89PiBbMiwgM11cbiAqICAgICAgUi50YWlsKFsxLCAyXSk7ICAgICAvLz0+IFsyXVxuICogICAgICBSLnRhaWwoWzFdKTsgICAgICAgIC8vPT4gW11cbiAqICAgICAgUi50YWlsKFtdKTsgICAgICAgICAvLz0+IFtdXG4gKlxuICogICAgICBSLnRhaWwoJ2FiYycpOyAgLy89PiAnYmMnXG4gKiAgICAgIFIudGFpbCgnYWInKTsgICAvLz0+ICdiJ1xuICogICAgICBSLnRhaWwoJ2EnKTsgICAgLy89PiAnJ1xuICogICAgICBSLnRhaWwoJycpOyAgICAgLy89PiAnJ1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoX2NoZWNrRm9yTWV0aG9kKCd0YWlsJywgc2xpY2UoMSwgSW5maW5pdHkpKSk7XG4iLCJ2YXIgX2NoZWNrRm9yTWV0aG9kID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY2hlY2tGb3JNZXRob2QnKTtcbnZhciBfY3VycnkzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkzJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gbGlzdCBvciBzdHJpbmcgKG9yIG9iamVjdCB3aXRoIGEgYHNsaWNlYFxuICogbWV0aG9kKSBmcm9tIGBmcm9tSW5kZXhgIChpbmNsdXNpdmUpIHRvIGB0b0luZGV4YCAoZXhjbHVzaXZlKS5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgc2xpY2VgIG1ldGhvZCBvZiB0aGUgdGhpcmQgYXJndW1lbnQsIGlmIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS40XG4gKiBAY2F0ZWdvcnkgTGlzdFxuICogQHNpZyBOdW1iZXIgLT4gTnVtYmVyIC0+IFthXSAtPiBbYV1cbiAqIEBzaWcgTnVtYmVyIC0+IE51bWJlciAtPiBTdHJpbmcgLT4gU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gZnJvbUluZGV4IFRoZSBzdGFydCBpbmRleCAoaW5jbHVzaXZlKS5cbiAqIEBwYXJhbSB7TnVtYmVyfSB0b0luZGV4IFRoZSBlbmQgaW5kZXggKGV4Y2x1c2l2ZSkuXG4gKiBAcGFyYW0geyp9IGxpc3RcbiAqIEByZXR1cm4geyp9XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5zbGljZSgxLCAzLCBbJ2EnLCAnYicsICdjJywgJ2QnXSk7ICAgICAgICAvLz0+IFsnYicsICdjJ11cbiAqICAgICAgUi5zbGljZSgxLCBJbmZpbml0eSwgWydhJywgJ2InLCAnYycsICdkJ10pOyAvLz0+IFsnYicsICdjJywgJ2QnXVxuICogICAgICBSLnNsaWNlKDAsIC0xLCBbJ2EnLCAnYicsICdjJywgJ2QnXSk7ICAgICAgIC8vPT4gWydhJywgJ2InLCAnYyddXG4gKiAgICAgIFIuc2xpY2UoLTMsIC0xLCBbJ2EnLCAnYicsICdjJywgJ2QnXSk7ICAgICAgLy89PiBbJ2InLCAnYyddXG4gKiAgICAgIFIuc2xpY2UoMCwgMywgJ3JhbWRhJyk7ICAgICAgICAgICAgICAgICAgICAgLy89PiAncmFtJ1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTMoX2NoZWNrRm9yTWV0aG9kKCdzbGljZScsIGZ1bmN0aW9uIHNsaWNlKGZyb21JbmRleCwgdG9JbmRleCwgbGlzdCkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobGlzdCwgZnJvbUluZGV4LCB0b0luZGV4KTtcbn0pKTtcbiIsInZhciBfY2hlY2tGb3JNZXRob2QgPSByZXF1aXJlKCcuL2ludGVybmFsL19jaGVja0Zvck1ldGhvZCcpO1xudmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcblxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBpbnB1dCBgbGlzdGAsIGNhbGxpbmcgYSBwcm92aWRlZCBmdW5jdGlvbiBgZm5gIGZvciBlYWNoXG4gKiBlbGVtZW50IGluIHRoZSBsaXN0LlxuICpcbiAqIGBmbmAgcmVjZWl2ZXMgb25lIGFyZ3VtZW50OiAqKHZhbHVlKSouXG4gKlxuICogTm90ZTogYFIuZm9yRWFjaGAgZG9lcyBub3Qgc2tpcCBkZWxldGVkIG9yIHVuYXNzaWduZWQgaW5kaWNlcyAoc3BhcnNlXG4gKiBhcnJheXMpLCB1bmxpa2UgdGhlIG5hdGl2ZSBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZC4gRm9yIG1vcmVcbiAqIGRldGFpbHMgb24gdGhpcyBiZWhhdmlvciwgc2VlOlxuICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvZm9yRWFjaCNEZXNjcmlwdGlvblxuICpcbiAqIEFsc28gbm90ZSB0aGF0LCB1bmxpa2UgYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCwgUmFtZGEncyBgZm9yRWFjaGAgcmV0dXJuc1xuICogdGhlIG9yaWdpbmFsIGFycmF5LiBJbiBzb21lIGxpYnJhcmllcyB0aGlzIGZ1bmN0aW9uIGlzIG5hbWVkIGBlYWNoYC5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgZm9yRWFjaGAgbWV0aG9kIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGlmIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4xXG4gKiBAY2F0ZWdvcnkgTGlzdFxuICogQHNpZyAoYSAtPiAqKSAtPiBbYV0gLT4gW2FdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gaW52b2tlLiBSZWNlaXZlcyBvbmUgYXJndW1lbnQsIGB2YWx1ZWAuXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IFRoZSBsaXN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm4ge0FycmF5fSBUaGUgb3JpZ2luYWwgbGlzdC5cbiAqIEBzZWUgUi5hZGRJbmRleFxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBwcmludFhQbHVzRml2ZSA9IHggPT4gY29uc29sZS5sb2coeCArIDUpO1xuICogICAgICBSLmZvckVhY2gocHJpbnRYUGx1c0ZpdmUsIFsxLCAyLCAzXSk7IC8vPT4gWzEsIDIsIDNdXG4gKiAgICAgIC8vIGxvZ3MgNlxuICogICAgICAvLyBsb2dzIDdcbiAqICAgICAgLy8gbG9ncyA4XG4gKiBAc3ltYiBSLmZvckVhY2goZiwgW2EsIGIsIGNdKSA9IFthLCBiLCBjXVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoX2NoZWNrRm9yTWV0aG9kKCdmb3JFYWNoJywgZnVuY3Rpb24gZm9yRWFjaChmbiwgbGlzdCkge1xuICB2YXIgbGVuID0gbGlzdC5sZW5ndGg7XG4gIHZhciBpZHggPSAwO1xuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgZm4obGlzdFtpZHhdKTtcbiAgICBpZHggKz0gMTtcbiAgfVxuICByZXR1cm4gbGlzdDtcbn0pKTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IG9iamVjdCB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBgcHJvcGAgcHJvcGVydHkuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHNpZyBTdHJpbmcgLT4ge2s6IHZ9IC0+IHtrOiB2fVxuICogQHBhcmFtIHtTdHJpbmd9IHByb3AgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRpc3NvY2lhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBjbG9uZVxuICogQHJldHVybiB7T2JqZWN0fSBBIG5ldyBvYmplY3QgZXF1aXZhbGVudCB0byB0aGUgb3JpZ2luYWwgYnV0IHdpdGhvdXQgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eVxuICogQHNlZSBSLmFzc29jXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5kaXNzb2MoJ2InLCB7YTogMSwgYjogMiwgYzogM30pOyAvLz0+IHthOiAxLCBjOiAzfVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gZGlzc29jKHByb3AsIG9iaikge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZvciAodmFyIHAgaW4gb2JqKSB7XG4gICAgcmVzdWx0W3BdID0gb2JqW3BdO1xuICB9XG4gIGRlbGV0ZSByZXN1bHRbcHJvcF07XG4gIHJldHVybiByZXN1bHQ7XG59KTtcbiIsInZhciBfYXNzaWduID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fYXNzaWduJyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xuXG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IG9iamVjdCB3aXRoIHRoZSBvd24gcHJvcGVydGllcyBvZiB0aGUgZmlyc3Qgb2JqZWN0IG1lcmdlZCB3aXRoXG4gKiB0aGUgb3duIHByb3BlcnRpZXMgb2YgdGhlIHNlY29uZCBvYmplY3QuIElmIGEga2V5IGV4aXN0cyBpbiBib3RoIG9iamVjdHMsXG4gKiB0aGUgdmFsdWUgZnJvbSB0aGUgc2Vjb25kIG9iamVjdCB3aWxsIGJlIHVzZWQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAc2lnIHtrOiB2fSAtPiB7azogdn0gLT4ge2s6IHZ9XG4gKiBAcGFyYW0ge09iamVjdH0gbFxuICogQHBhcmFtIHtPYmplY3R9IHJcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqIEBzZWUgUi5tZXJnZVdpdGgsIFIubWVyZ2VXaXRoS2V5XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5tZXJnZSh7ICduYW1lJzogJ2ZyZWQnLCAnYWdlJzogMTAgfSwgeyAnYWdlJzogNDAgfSk7XG4gKiAgICAgIC8vPT4geyAnbmFtZSc6ICdmcmVkJywgJ2FnZSc6IDQwIH1cbiAqXG4gKiAgICAgIHZhciByZXNldFRvRGVmYXVsdCA9IFIubWVyZ2UoUi5fXywge3g6IDB9KTtcbiAqICAgICAgcmVzZXRUb0RlZmF1bHQoe3g6IDUsIHk6IDJ9KTsgLy89PiB7eDogMCwgeTogMn1cbiAqIEBzeW1iIFIubWVyZ2UoeyB4OiAxLCB5OiAyIH0sIHsgeTogNSwgejogMyB9KSA9IHsgeDogMSwgeTogNSwgejogMyB9XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBtZXJnZShsLCByKSB7XG4gIHJldHVybiBfYXNzaWduKHt9LCBsLCByKTtcbn0pO1xuIiwidmFyIF9vYmplY3RBc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3RBc3NpZ24nKTtcblxubW9kdWxlLmV4cG9ydHMgPVxuICB0eXBlb2YgT2JqZWN0LmFzc2lnbiA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5hc3NpZ24gOiBfb2JqZWN0QXNzaWduO1xuIiwidmFyIF9oYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvT2JqZWN0L2Fzc2lnblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfb2JqZWN0QXNzaWduKHRhcmdldCkge1xuICBpZiAodGFyZ2V0ID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3QnKTtcbiAgfVxuXG4gIHZhciBvdXRwdXQgPSBPYmplY3QodGFyZ2V0KTtcbiAgdmFyIGlkeCA9IDE7XG4gIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB3aGlsZSAoaWR4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpZHhdO1xuICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgZm9yICh2YXIgbmV4dEtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKF9oYXMobmV4dEtleSwgc291cmNlKSkge1xuICAgICAgICAgIG91dHB1dFtuZXh0S2V5XSA9IHNvdXJjZVtuZXh0S2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZHggKz0gMTtcbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufTtcbiIsInZhciBfY3VycnkzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkzJyk7XG52YXIgY3VycnlOID0gcmVxdWlyZSgnLi9jdXJyeU4nKTtcblxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgcHJvY2VzcyBlaXRoZXIgdGhlIGBvblRydWVgIG9yIHRoZSBgb25GYWxzZWBcbiAqIGZ1bmN0aW9uIGRlcGVuZGluZyB1cG9uIHRoZSByZXN1bHQgb2YgdGhlIGBjb25kaXRpb25gIHByZWRpY2F0ZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC44LjBcbiAqIEBjYXRlZ29yeSBMb2dpY1xuICogQHNpZyAoKi4uLiAtPiBCb29sZWFuKSAtPiAoKi4uLiAtPiAqKSAtPiAoKi4uLiAtPiAqKSAtPiAoKi4uLiAtPiAqKVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY29uZGl0aW9uIEEgcHJlZGljYXRlIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvblRydWUgQSBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiB0aGUgYGNvbmRpdGlvbmAgZXZhbHVhdGVzIHRvIGEgdHJ1dGh5IHZhbHVlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gb25GYWxzZSBBIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIHRoZSBgY29uZGl0aW9uYCBldmFsdWF0ZXMgdG8gYSBmYWxzeSB2YWx1ZS5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIG5ldyB1bmFyeSBmdW5jdGlvbiB0aGF0IHdpbGwgcHJvY2VzcyBlaXRoZXIgdGhlIGBvblRydWVgIG9yIHRoZSBgb25GYWxzZWBcbiAqICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZXBlbmRpbmcgdXBvbiB0aGUgcmVzdWx0IG9mIHRoZSBgY29uZGl0aW9uYCBwcmVkaWNhdGUuXG4gKiBAc2VlIFIudW5sZXNzLCBSLndoZW5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgaW5jQ291bnQgPSBSLmlmRWxzZShcbiAqICAgICAgICBSLmhhcygnY291bnQnKSxcbiAqICAgICAgICBSLm92ZXIoUi5sZW5zUHJvcCgnY291bnQnKSwgUi5pbmMpLFxuICogICAgICAgIFIuYXNzb2MoJ2NvdW50JywgMSlcbiAqICAgICAgKTtcbiAqICAgICAgaW5jQ291bnQoe30pOyAgICAgICAgICAgLy89PiB7IGNvdW50OiAxIH1cbiAqICAgICAgaW5jQ291bnQoeyBjb3VudDogMSB9KTsgLy89PiB7IGNvdW50OiAyIH1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkzKGZ1bmN0aW9uIGlmRWxzZShjb25kaXRpb24sIG9uVHJ1ZSwgb25GYWxzZSkge1xuICByZXR1cm4gY3VycnlOKE1hdGgubWF4KGNvbmRpdGlvbi5sZW5ndGgsIG9uVHJ1ZS5sZW5ndGgsIG9uRmFsc2UubGVuZ3RoKSxcbiAgICBmdW5jdGlvbiBfaWZFbHNlKCkge1xuICAgICAgcmV0dXJuIGNvbmRpdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gb25UcnVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBvbkZhbHNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICApO1xufSk7XG4iLCJ2YXIgX2FyaXR5ID0gcmVxdWlyZSgnLi9fYXJpdHknKTtcbnZhciBfaXNQbGFjZWhvbGRlciA9IHJlcXVpcmUoJy4vX2lzUGxhY2Vob2xkZXInKTtcblxuXG4vKipcbiAqIEludGVybmFsIGN1cnJ5TiBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge051bWJlcn0gbGVuZ3RoIFRoZSBhcml0eSBvZiB0aGUgY3VycmllZCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IHJlY2VpdmVkIEFuIGFycmF5IG9mIGFyZ3VtZW50cyByZWNlaXZlZCB0aHVzIGZhci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgY3VycmllZCBmdW5jdGlvbi5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY3VycnlOKGxlbmd0aCwgcmVjZWl2ZWQsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29tYmluZWQgPSBbXTtcbiAgICB2YXIgYXJnc0lkeCA9IDA7XG4gICAgdmFyIGxlZnQgPSBsZW5ndGg7XG4gICAgdmFyIGNvbWJpbmVkSWR4ID0gMDtcbiAgICB3aGlsZSAoY29tYmluZWRJZHggPCByZWNlaXZlZC5sZW5ndGggfHwgYXJnc0lkeCA8IGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICBpZiAoY29tYmluZWRJZHggPCByZWNlaXZlZC5sZW5ndGggJiZcbiAgICAgICAgICAoIV9pc1BsYWNlaG9sZGVyKHJlY2VpdmVkW2NvbWJpbmVkSWR4XSkgfHxcbiAgICAgICAgICAgYXJnc0lkeCA+PSBhcmd1bWVudHMubGVuZ3RoKSkge1xuICAgICAgICByZXN1bHQgPSByZWNlaXZlZFtjb21iaW5lZElkeF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBhcmd1bWVudHNbYXJnc0lkeF07XG4gICAgICAgIGFyZ3NJZHggKz0gMTtcbiAgICAgIH1cbiAgICAgIGNvbWJpbmVkW2NvbWJpbmVkSWR4XSA9IHJlc3VsdDtcbiAgICAgIGlmICghX2lzUGxhY2Vob2xkZXIocmVzdWx0KSkge1xuICAgICAgICBsZWZ0IC09IDE7XG4gICAgICB9XG4gICAgICBjb21iaW5lZElkeCArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gbGVmdCA8PSAwID8gZm4uYXBwbHkodGhpcywgY29tYmluZWQpXG4gICAgICAgICAgICAgICAgICAgICA6IF9hcml0eShsZWZ0LCBfY3VycnlOKGxlbmd0aCwgY29tYmluZWQsIGZuKSk7XG4gIH07XG59O1xuIiwidmFyIF9jdXJyeTMgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IHByb3BlcnR5IHNhdGlzZmllcyB0aGUgZ2l2ZW5cbiAqIHByZWRpY2F0ZTsgYGZhbHNlYCBvdGhlcndpc2UuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTYuMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnIChhIC0+IEJvb2xlYW4pIC0+IFN0cmluZyAtPiB7U3RyaW5nOiBhfSAtPiBCb29sZWFuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHBhcmFtIHsqfSBvYmpcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAc2VlIFIucHJvcEVxLCBSLnByb3BJc1xuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIucHJvcFNhdGlzZmllcyh4ID0+IHggPiAwLCAneCcsIHt4OiAxLCB5OiAyfSk7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTMoZnVuY3Rpb24gcHJvcFNhdGlzZmllcyhwcmVkLCBuYW1lLCBvYmopIHtcbiAgcmV0dXJuIHByZWQob2JqW25hbWVdKTtcbn0pO1xuIiwidmFyIF9jdXJyeTMgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTMnKTtcbnZhciBpcyA9IHJlcXVpcmUoJy4vaXMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzcGVjaWZpZWQgb2JqZWN0IHByb3BlcnR5IGlzIG9mIHRoZSBnaXZlbiB0eXBlO1xuICogYGZhbHNlYCBvdGhlcndpc2UuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTYuMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBzaWcgVHlwZSAtPiBTdHJpbmcgLT4gT2JqZWN0IC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHR5cGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBzZWUgUi5pcywgUi5wcm9wU2F0aXNmaWVzXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5wcm9wSXMoTnVtYmVyLCAneCcsIHt4OiAxLCB5OiAyfSk7ICAvLz0+IHRydWVcbiAqICAgICAgUi5wcm9wSXMoTnVtYmVyLCAneCcsIHt4OiAnZm9vJ30pOyAgICAvLz0+IGZhbHNlXG4gKiAgICAgIFIucHJvcElzKE51bWJlciwgJ3gnLCB7fSk7ICAgICAgICAgICAgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTMoZnVuY3Rpb24gcHJvcElzKHR5cGUsIG5hbWUsIG9iaikge1xuICByZXR1cm4gaXModHlwZSwgb2JqW25hbWVdKTtcbn0pO1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfaGFzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faGFzJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCBoYXMgYW4gb3duIHByb3BlcnR5IHdpdGggdGhlIHNwZWNpZmllZCBuYW1lXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuNy4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAc2lnIHMgLT4ge3M6IHh9IC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7U3RyaW5nfSBwcm9wIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBjaGVjayBmb3IuXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBleGlzdHMuXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGhhc05hbWUgPSBSLmhhcygnbmFtZScpO1xuICogICAgICBoYXNOYW1lKHtuYW1lOiAnYWxpY2UnfSk7ICAgLy89PiB0cnVlXG4gKiAgICAgIGhhc05hbWUoe25hbWU6ICdib2InfSk7ICAgICAvLz0+IHRydWVcbiAqICAgICAgaGFzTmFtZSh7fSk7ICAgICAgICAgICAgICAgIC8vPT4gZmFsc2VcbiAqXG4gKiAgICAgIHZhciBwb2ludCA9IHt4OiAwLCB5OiAwfTtcbiAqICAgICAgdmFyIHBvaW50SGFzID0gUi5oYXMoUi5fXywgcG9pbnQpO1xuICogICAgICBwb2ludEhhcygneCcpOyAgLy89PiB0cnVlXG4gKiAgICAgIHBvaW50SGFzKCd5Jyk7ICAvLz0+IHRydWVcbiAqICAgICAgcG9pbnRIYXMoJ3onKTsgIC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKF9oYXMpO1xuIiwidmFyIGxpZnQgPSByZXF1aXJlKCcuL2xpZnQnKTtcbnZhciBub3QgPSByZXF1aXJlKCcuL25vdCcpO1xuXG5cbi8qKlxuICogVGFrZXMgYSBmdW5jdGlvbiBgZmAgYW5kIHJldHVybnMgYSBmdW5jdGlvbiBgZ2Agc3VjaCB0aGF0IGlmIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50c1xuICogd2hlbiBgZmAgcmV0dXJucyBhIFwidHJ1dGh5XCIgdmFsdWUsIGBnYCByZXR1cm5zIGBmYWxzZWAgYW5kIHdoZW4gYGZgIHJldHVybnMgYSBcImZhbHN5XCIgdmFsdWUgYGdgIHJldHVybnMgYHRydWVgLlxuICpcbiAqIGBSLmNvbXBsZW1lbnRgIG1heSBiZSBhcHBsaWVkIHRvIGFueSBmdW5jdG9yXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTIuMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnICgqLi4uIC0+ICopIC0+ICgqLi4uIC0+IEJvb2xlYW4pXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqIEBzZWUgUi5ub3RcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgaXNOb3ROaWwgPSBSLmNvbXBsZW1lbnQoUi5pc05pbCk7XG4gKiAgICAgIGlzTmlsKG51bGwpOyAvLz0+IHRydWVcbiAqICAgICAgaXNOb3ROaWwobnVsbCk7IC8vPT4gZmFsc2VcbiAqICAgICAgaXNOaWwoNyk7IC8vPT4gZmFsc2VcbiAqICAgICAgaXNOb3ROaWwoNyk7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGxpZnQobm90KTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgbGlmdE4gPSByZXF1aXJlKCcuL2xpZnROJyk7XG5cblxuLyoqXG4gKiBcImxpZnRzXCIgYSBmdW5jdGlvbiBvZiBhcml0eSA+IDEgc28gdGhhdCBpdCBtYXkgXCJtYXAgb3ZlclwiIGEgbGlzdCwgRnVuY3Rpb24gb3Igb3RoZXJcbiAqIG9iamVjdCB0aGF0IHNhdGlzZmllcyB0aGUgW0ZhbnRhc3lMYW5kIEFwcGx5IHNwZWNdKGh0dHBzOi8vZ2l0aHViLmNvbS9mYW50YXN5bGFuZC9mYW50YXN5LWxhbmQjYXBwbHkpLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjcuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnICgqLi4uIC0+ICopIC0+IChbKl0uLi4gLT4gWypdKVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGxpZnQgaW50byBoaWdoZXIgY29udGV4dFxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBsaWZ0ZWQgZnVuY3Rpb24uXG4gKiBAc2VlIFIubGlmdE5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgbWFkZDMgPSBSLmxpZnQoKGEsIGIsIGMpID0+IGEgKyBiICsgYyk7XG4gKlxuICogICAgICBtYWRkMyhbMSwyLDNdLCBbMSwyLDNdLCBbMV0pOyAvLz0+IFszLCA0LCA1LCA0LCA1LCA2LCA1LCA2LCA3XVxuICpcbiAqICAgICAgdmFyIG1hZGQ1ID0gUi5saWZ0KChhLCBiLCBjLCBkLCBlKSA9PiBhICsgYiArIGMgKyBkICsgZSk7XG4gKlxuICogICAgICBtYWRkNShbMSwyXSwgWzNdLCBbNCwgNV0sIFs2XSwgWzcsIDhdKTsgLy89PiBbMjEsIDIyLCAyMiwgMjMsIDIyLCAyMywgMjMsIDI0XVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gbGlmdChmbikge1xuICByZXR1cm4gbGlmdE4oZm4ubGVuZ3RoLCBmbik7XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG52YXIgX3JlZHVjZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX3JlZHVjZScpO1xudmFyIGFwID0gcmVxdWlyZSgnLi9hcCcpO1xudmFyIGN1cnJ5TiA9IHJlcXVpcmUoJy4vY3VycnlOJyk7XG52YXIgbWFwID0gcmVxdWlyZSgnLi9tYXAnKTtcblxuXG4vKipcbiAqIFwibGlmdHNcIiBhIGZ1bmN0aW9uIHRvIGJlIHRoZSBzcGVjaWZpZWQgYXJpdHksIHNvIHRoYXQgaXQgbWF5IFwibWFwIG92ZXJcIiB0aGF0XG4gKiBtYW55IGxpc3RzLCBGdW5jdGlvbnMgb3Igb3RoZXIgb2JqZWN0cyB0aGF0IHNhdGlzZnkgdGhlIFtGYW50YXN5TGFuZCBBcHBseSBzcGVjXShodHRwczovL2dpdGh1Yi5jb20vZmFudGFzeWxhbmQvZmFudGFzeS1sYW5kI2FwcGx5KS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC43LjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHNpZyBOdW1iZXIgLT4gKCouLi4gLT4gKikgLT4gKFsqXS4uLiAtPiBbKl0pXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbGlmdCBpbnRvIGhpZ2hlciBjb250ZXh0XG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIGxpZnRlZCBmdW5jdGlvbi5cbiAqIEBzZWUgUi5saWZ0LCBSLmFwXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIG1hZGQzID0gUi5saWZ0TigzLCAoLi4uYXJncykgPT4gUi5zdW0oYXJncykpO1xuICogICAgICBtYWRkMyhbMSwyLDNdLCBbMSwyLDNdLCBbMV0pOyAvLz0+IFszLCA0LCA1LCA0LCA1LCA2LCA1LCA2LCA3XVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gbGlmdE4oYXJpdHksIGZuKSB7XG4gIHZhciBsaWZ0ZWQgPSBjdXJyeU4oYXJpdHksIGZuKTtcbiAgcmV0dXJuIGN1cnJ5Tihhcml0eSwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIF9yZWR1Y2UoYXAsIG1hcChsaWZ0ZWQsIGFyZ3VtZW50c1swXSksIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xuICB9KTtcbn0pO1xuIiwidmFyIF9jb25jYXQgPSByZXF1aXJlKCcuL2ludGVybmFsL19jb25jYXQnKTtcbnZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG52YXIgX3JlZHVjZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX3JlZHVjZScpO1xudmFyIG1hcCA9IHJlcXVpcmUoJy4vbWFwJyk7XG5cblxuLyoqXG4gKiBhcCBhcHBsaWVzIGEgbGlzdCBvZiBmdW5jdGlvbnMgdG8gYSBsaXN0IG9mIHZhbHVlcy5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgYXBgIG1ldGhvZCBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LCBpZiBwcmVzZW50LiBBbHNvXG4gKiB0cmVhdHMgY3VycmllZCBmdW5jdGlvbnMgYXMgYXBwbGljYXRpdmVzLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjMuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnIFthIC0+IGJdIC0+IFthXSAtPiBbYl1cbiAqIEBzaWcgQXBwbHkgZiA9PiBmIChhIC0+IGIpIC0+IGYgYSAtPiBmIGJcbiAqIEBwYXJhbSB7QXJyYXl9IGZucyBBbiBhcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IHZzIEFuIGFycmF5IG9mIHZhbHVlc1xuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHJlc3VsdHMgb2YgYXBwbHlpbmcgZWFjaCBvZiBgZm5zYCB0byBhbGwgb2YgYHZzYCBpbiB0dXJuLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuYXAoW1IubXVsdGlwbHkoMiksIFIuYWRkKDMpXSwgWzEsMiwzXSk7IC8vPT4gWzIsIDQsIDYsIDQsIDUsIDZdXG4gKiAgICAgIFIuYXAoW1IuY29uY2F0KCd0YXN0eSAnKSwgUi50b1VwcGVyXSwgWydwaXp6YScsICdzYWxhZCddKTsgLy89PiBbXCJ0YXN0eSBwaXp6YVwiLCBcInRhc3R5IHNhbGFkXCIsIFwiUElaWkFcIiwgXCJTQUxBRFwiXVxuICogQHN5bWIgUi5hcChbZiwgZ10sIFthLCBiXSkgPSBbZihhKSwgZihiKSwgZyhhKSwgZyhiKV1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGFwKGFwcGxpY2F0aXZlLCBmbikge1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBhcHBsaWNhdGl2ZS5hcCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICBhcHBsaWNhdGl2ZS5hcChmbikgOlxuICAgIHR5cGVvZiBhcHBsaWNhdGl2ZSA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICBmdW5jdGlvbih4KSB7IHJldHVybiBhcHBsaWNhdGl2ZSh4KShmbih4KSk7IH0gOlxuICAgIC8vIGVsc2VcbiAgICAgIF9yZWR1Y2UoZnVuY3Rpb24oYWNjLCBmKSB7IHJldHVybiBfY29uY2F0KGFjYywgbWFwKGYsIGZuKSk7IH0sIFtdLCBhcHBsaWNhdGl2ZSlcbiAgKTtcbn0pO1xuIiwidmFyIF9pc0FycmF5ID0gcmVxdWlyZSgnLi9faXNBcnJheScpO1xudmFyIF9pc1RyYW5zZm9ybWVyID0gcmVxdWlyZSgnLi9faXNUcmFuc2Zvcm1lcicpO1xuXG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgZGlzcGF0Y2hlcyB3aXRoIGRpZmZlcmVudCBzdHJhdGVnaWVzIGJhc2VkIG9uIHRoZVxuICogb2JqZWN0IGluIGxpc3QgcG9zaXRpb24gKGxhc3QgYXJndW1lbnQpLiBJZiBpdCBpcyBhbiBhcnJheSwgZXhlY3V0ZXMgW2ZuXS5cbiAqIE90aGVyd2lzZSwgaWYgaXQgaGFzIGEgZnVuY3Rpb24gd2l0aCBvbmUgb2YgdGhlIGdpdmVuIG1ldGhvZCBuYW1lcywgaXQgd2lsbFxuICogZXhlY3V0ZSB0aGF0IGZ1bmN0aW9uIChmdW5jdG9yIGNhc2UpLiBPdGhlcndpc2UsIGlmIGl0IGlzIGEgdHJhbnNmb3JtZXIsXG4gKiB1c2VzIHRyYW5zZHVjZXIgW3hmXSB0byByZXR1cm4gYSBuZXcgdHJhbnNmb3JtZXIgKHRyYW5zZHVjZXIgY2FzZSkuXG4gKiBPdGhlcndpc2UsIGl0IHdpbGwgZGVmYXVsdCB0byBleGVjdXRpbmcgW2ZuXS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gbWV0aG9kTmFtZXMgcHJvcGVydGllcyB0byBjaGVjayBmb3IgYSBjdXN0b20gaW1wbGVtZW50YXRpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHhmIHRyYW5zZHVjZXIgdG8gaW5pdGlhbGl6ZSBpZiBvYmplY3QgaXMgdHJhbnNmb3JtZXJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIGRlZmF1bHQgcmFtZGEgaW1wbGVtZW50YXRpb25cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgZGlzcGF0Y2hlcyBvbiBvYmplY3QgaW4gbGlzdCBwb3NpdGlvblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9kaXNwYXRjaGFibGUobWV0aG9kTmFtZXMsIHhmLCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmbigpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG4gICAgdmFyIG9iaiA9IGFyZ3MucG9wKCk7XG4gICAgaWYgKCFfaXNBcnJheShvYmopKSB7XG4gICAgICB2YXIgaWR4ID0gMDtcbiAgICAgIHdoaWxlIChpZHggPCBtZXRob2ROYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmpbbWV0aG9kTmFtZXNbaWR4XV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb2JqW21ldGhvZE5hbWVzW2lkeF1dLmFwcGx5KG9iaiwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgaWR4ICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAoX2lzVHJhbnNmb3JtZXIob2JqKSkge1xuICAgICAgICB2YXIgdHJhbnNkdWNlciA9IHhmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgICByZXR1cm4gdHJhbnNkdWNlcihvYmopO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9pc1RyYW5zZm9ybWVyKG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9ialsnQEB0cmFuc2R1Y2VyL3N0ZXAnXSA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9tYXAoZm4sIGZ1bmN0b3IpIHtcbiAgdmFyIGlkeCA9IDA7XG4gIHZhciBsZW4gPSBmdW5jdG9yLmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbik7XG4gIHdoaWxlIChpZHggPCBsZW4pIHtcbiAgICByZXN1bHRbaWR4XSA9IGZuKGZ1bmN0b3JbaWR4XSk7XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vX2N1cnJ5MicpO1xudmFyIF94ZkJhc2UgPSByZXF1aXJlKCcuL194ZkJhc2UnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gWE1hcChmLCB4Zikge1xuICAgIHRoaXMueGYgPSB4ZjtcbiAgICB0aGlzLmYgPSBmO1xuICB9XG4gIFhNYXAucHJvdG90eXBlWydAQHRyYW5zZHVjZXIvaW5pdCddID0gX3hmQmFzZS5pbml0O1xuICBYTWFwLnByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddID0gX3hmQmFzZS5yZXN1bHQ7XG4gIFhNYXAucHJvdG90eXBlWydAQHRyYW5zZHVjZXIvc3RlcCddID0gZnVuY3Rpb24ocmVzdWx0LCBpbnB1dCkge1xuICAgIHJldHVybiB0aGlzLnhmWydAQHRyYW5zZHVjZXIvc3RlcCddKHJlc3VsdCwgdGhpcy5mKGlucHV0KSk7XG4gIH07XG5cbiAgcmV0dXJuIF9jdXJyeTIoZnVuY3Rpb24gX3htYXAoZiwgeGYpIHsgcmV0dXJuIG5ldyBYTWFwKGYsIHhmKTsgfSk7XG59KCkpO1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGluaXQ6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnhmWydAQHRyYW5zZHVjZXIvaW5pdCddKCk7XG4gIH0sXG4gIHJlc3VsdDogZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgcmV0dXJuIHRoaXMueGZbJ0BAdHJhbnNkdWNlci9yZXN1bHQnXShyZXN1bHQpO1xuICB9XG59O1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcblxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBgIWAgb2YgaXRzIGFyZ3VtZW50LiBJdCB3aWxsIHJldHVybiBgdHJ1ZWAgd2hlblxuICogcGFzc2VkIGZhbHNlLXkgdmFsdWUsIGFuZCBgZmFsc2VgIHdoZW4gcGFzc2VkIGEgdHJ1dGgteSBvbmUuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgTG9naWNcbiAqIEBzaWcgKiAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IGEgYW55IHZhbHVlXG4gKiBAcmV0dXJuIHtCb29sZWFufSB0aGUgbG9naWNhbCBpbnZlcnNlIG9mIHBhc3NlZCBhcmd1bWVudC5cbiAqIEBzZWUgUi5jb21wbGVtZW50XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5ub3QodHJ1ZSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5ub3QoZmFsc2UpOyAvLz0+IHRydWVcbiAqICAgICAgUi5ub3QoMCk7IC8vPT4gdHJ1ZVxuICogICAgICBSLm5vdCgxKTsgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gbm90KGEpIHtcbiAgcmV0dXJuICFhO1xufSk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIGVtcHR5ID0gcmVxdWlyZSgnLi9lbXB0eScpO1xudmFyIGVxdWFscyA9IHJlcXVpcmUoJy4vZXF1YWxzJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgaXRzIHR5cGUncyBlbXB0eSB2YWx1ZTsgYGZhbHNlYFxuICogb3RoZXJ3aXNlLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnIGEgLT4gQm9vbGVhblxuICogQHBhcmFtIHsqfSB4XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHNlZSBSLmVtcHR5XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5pc0VtcHR5KFsxLCAyLCAzXSk7ICAgLy89PiBmYWxzZVxuICogICAgICBSLmlzRW1wdHkoW10pOyAgICAgICAgICAvLz0+IHRydWVcbiAqICAgICAgUi5pc0VtcHR5KCcnKTsgICAgICAgICAgLy89PiB0cnVlXG4gKiAgICAgIFIuaXNFbXB0eShudWxsKTsgICAgICAgIC8vPT4gZmFsc2VcbiAqICAgICAgUi5pc0VtcHR5KHt9KTsgICAgICAgICAgLy89PiB0cnVlXG4gKiAgICAgIFIuaXNFbXB0eSh7bGVuZ3RoOiAwfSk7IC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGlzRW1wdHkoeCkge1xuICByZXR1cm4geCAhPSBudWxsICYmIGVxdWFscyh4LCBlbXB0eSh4KSk7XG59KTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgX2lzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNBcmd1bWVudHMnKTtcbnZhciBfaXNBcnJheSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2lzQXJyYXknKTtcbnZhciBfaXNPYmplY3QgPSByZXF1aXJlKCcuL2ludGVybmFsL19pc09iamVjdCcpO1xudmFyIF9pc1N0cmluZyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2lzU3RyaW5nJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbXB0eSB2YWx1ZSBvZiBpdHMgYXJndW1lbnQncyB0eXBlLiBSYW1kYSBkZWZpbmVzIHRoZSBlbXB0eVxuICogdmFsdWUgb2YgQXJyYXkgKGBbXWApLCBPYmplY3QgKGB7fWApLCBTdHJpbmcgKGAnJ2ApLCBhbmQgQXJndW1lbnRzLiBPdGhlclxuICogdHlwZXMgYXJlIHN1cHBvcnRlZCBpZiB0aGV5IGRlZmluZSBgPFR5cGU+LmVtcHR5YCBhbmQvb3JcbiAqIGA8VHlwZT4ucHJvdG90eXBlLmVtcHR5YC5cbiAqXG4gKiBEaXNwYXRjaGVzIHRvIHRoZSBgZW1wdHlgIG1ldGhvZCBvZiB0aGUgZmlyc3QgYXJndW1lbnQsIGlmIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMy4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgYSAtPiBhXG4gKiBAcGFyYW0geyp9IHhcbiAqIEByZXR1cm4geyp9XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5lbXB0eShKdXN0KDQyKSk7ICAgICAgLy89PiBOb3RoaW5nKClcbiAqICAgICAgUi5lbXB0eShbMSwgMiwgM10pOyAgICAgLy89PiBbXVxuICogICAgICBSLmVtcHR5KCd1bmljb3JucycpOyAgICAvLz0+ICcnXG4gKiAgICAgIFIuZW1wdHkoe3g6IDEsIHk6IDJ9KTsgIC8vPT4ge31cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGVtcHR5KHgpIHtcbiAgcmV0dXJuIChcbiAgICAoeCAhPSBudWxsICYmIHR5cGVvZiB4LmVtcHR5ID09PSAnZnVuY3Rpb24nKSA/XG4gICAgICB4LmVtcHR5KCkgOlxuICAgICh4ICE9IG51bGwgJiYgeC5jb25zdHJ1Y3RvciAhPSBudWxsICYmIHR5cGVvZiB4LmNvbnN0cnVjdG9yLmVtcHR5ID09PSAnZnVuY3Rpb24nKSA/XG4gICAgICB4LmNvbnN0cnVjdG9yLmVtcHR5KCkgOlxuICAgIF9pc0FycmF5KHgpID9cbiAgICAgIFtdIDpcbiAgICBfaXNTdHJpbmcoeCkgP1xuICAgICAgJycgOlxuICAgIF9pc09iamVjdCh4KSA/XG4gICAgICB7fSA6XG4gICAgX2lzQXJndW1lbnRzKHgpID9cbiAgICAgIChmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA6XG4gICAgLy8gZWxzZVxuICAgICAgdm9pZCAwXG4gICk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2lzT2JqZWN0KHgpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59O1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBjdXJyeU4gPSByZXF1aXJlKCcuL2N1cnJ5TicpO1xudmFyIG1heCA9IHJlcXVpcmUoJy4vbWF4Jyk7XG52YXIgcGx1Y2sgPSByZXF1aXJlKCcuL3BsdWNrJyk7XG52YXIgcmVkdWNlID0gcmVxdWlyZSgnLi9yZWR1Y2UnKTtcblxuXG4vKipcbiAqIFRha2VzIGEgbGlzdCBvZiBwcmVkaWNhdGVzIGFuZCByZXR1cm5zIGEgcHJlZGljYXRlIHRoYXQgcmV0dXJucyB0cnVlIGZvciBhXG4gKiBnaXZlbiBsaXN0IG9mIGFyZ3VtZW50cyBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlIHByb3ZpZGVkIHByZWRpY2F0ZXMgaXNcbiAqIHNhdGlzZmllZCBieSB0aG9zZSBhcmd1bWVudHMuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHJldHVybmVkIGlzIGEgY3VycmllZCBmdW5jdGlvbiB3aG9zZSBhcml0eSBtYXRjaGVzIHRoYXQgb2YgdGhlXG4gKiBoaWdoZXN0LWFyaXR5IHByZWRpY2F0ZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC45LjBcbiAqIEBjYXRlZ29yeSBMb2dpY1xuICogQHNpZyBbKCouLi4gLT4gQm9vbGVhbildIC0+ICgqLi4uIC0+IEJvb2xlYW4pXG4gKiBAcGFyYW0ge0FycmF5fSBwcmVkaWNhdGVzIEFuIGFycmF5IG9mIHByZWRpY2F0ZXMgdG8gY2hlY2tcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgY29tYmluZWQgcHJlZGljYXRlXG4gKiBAc2VlIFIuYWxsUGFzc1xuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBpc0NsdWIgPSBSLnByb3BFcSgnc3VpdCcsICfimaMnKTtcbiAqICAgICAgdmFyIGlzU3BhZGUgPSBSLnByb3BFcSgnc3VpdCcsICfimaAnKTtcbiAqICAgICAgdmFyIGlzQmxhY2tDYXJkID0gUi5hbnlQYXNzKFtpc0NsdWIsIGlzU3BhZGVdKTtcbiAqXG4gKiAgICAgIGlzQmxhY2tDYXJkKHtyYW5rOiAnMTAnLCBzdWl0OiAn4pmjJ30pOyAvLz0+IHRydWVcbiAqICAgICAgaXNCbGFja0NhcmQoe3Jhbms6ICdRJywgc3VpdDogJ+KZoCd9KTsgLy89PiB0cnVlXG4gKiAgICAgIGlzQmxhY2tDYXJkKHtyYW5rOiAnUScsIHN1aXQ6ICfimaYnfSk7IC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGFueVBhc3MocHJlZHMpIHtcbiAgcmV0dXJuIGN1cnJ5TihyZWR1Y2UobWF4LCAwLCBwbHVjaygnbGVuZ3RoJywgcHJlZHMpKSwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGlkeCA9IDA7XG4gICAgdmFyIGxlbiA9IHByZWRzLmxlbmd0aDtcbiAgICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgICBpZiAocHJlZHNbaWR4XS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWR4ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG52YXIgbWFwID0gcmVxdWlyZSgnLi9tYXAnKTtcbnZhciBwcm9wID0gcmVxdWlyZSgnLi9wcm9wJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgbmV3IGxpc3QgYnkgcGx1Y2tpbmcgdGhlIHNhbWUgbmFtZWQgcHJvcGVydHkgb2ZmIGFsbCBvYmplY3RzIGluXG4gKiB0aGUgbGlzdCBzdXBwbGllZC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIGsgLT4gW3trOiB2fV0gLT4gW3ZdXG4gKiBAcGFyYW0ge051bWJlcnxTdHJpbmd9IGtleSBUaGUga2V5IG5hbWUgdG8gcGx1Y2sgb2ZmIG9mIGVhY2ggb2JqZWN0LlxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBUaGUgYXJyYXkgdG8gY29uc2lkZXIuXG4gKiBAcmV0dXJuIHtBcnJheX0gVGhlIGxpc3Qgb2YgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5LlxuICogQHNlZSBSLnByb3BzXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5wbHVjaygnYScpKFt7YTogMX0sIHthOiAyfV0pOyAvLz0+IFsxLCAyXVxuICogICAgICBSLnBsdWNrKDApKFtbMSwgMl0sIFszLCA0XV0pOyAgIC8vPT4gWzEsIDNdXG4gKiBAc3ltYiBSLnBsdWNrKCd4JywgW3t4OiAxLCB5OiAyfSwge3g6IDMsIHk6IDR9LCB7eDogNSwgeTogNn1dKSA9IFsxLCAzLCA1XVxuICogQHN5bWIgUi5wbHVjaygwLCBbWzEsIDJdLCBbMywgNF0sIFs1LCA2XV0pID0gWzEsIDMsIDVdXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBwbHVjayhwLCBsaXN0KSB7XG4gIHJldHVybiBtYXAocHJvcChwKSwgbGlzdCk7XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzZWNvbmQ7XG4gKiBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBSZWxhdGlvblxuICogQHNpZyBPcmQgYSA9PiBhIC0+IGEgLT4gQm9vbGVhblxuICogQHBhcmFtIHtOdW1iZXJ9IGFcbiAqIEBwYXJhbSB7TnVtYmVyfSBiXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHNlZSBSLmx0ZVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuZ3RlKDIsIDEpOyAvLz0+IHRydWVcbiAqICAgICAgUi5ndGUoMiwgMik7IC8vPT4gdHJ1ZVxuICogICAgICBSLmd0ZSgyLCAzKTsgLy89PiBmYWxzZVxuICogICAgICBSLmd0ZSgnYScsICd6Jyk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5ndGUoJ3onLCAnYScpOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGd0ZShhLCBiKSB7IHJldHVybiBhID49IGI7IH0pO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBjdXJyeU4gPSByZXF1aXJlKCcuL2N1cnJ5TicpO1xuXG5cbi8qKlxuICogUmV0dXJucyBhIGN1cnJpZWQgZXF1aXZhbGVudCBvZiB0aGUgcHJvdmlkZWQgZnVuY3Rpb24uIFRoZSBjdXJyaWVkIGZ1bmN0aW9uXG4gKiBoYXMgdHdvIHVudXN1YWwgY2FwYWJpbGl0aWVzLiBGaXJzdCwgaXRzIGFyZ3VtZW50cyBuZWVkbid0IGJlIHByb3ZpZGVkIG9uZVxuICogYXQgYSB0aW1lLiBJZiBgZmAgaXMgYSB0ZXJuYXJ5IGZ1bmN0aW9uIGFuZCBgZ2AgaXMgYFIuY3VycnkoZilgLCB0aGVcbiAqIGZvbGxvd2luZyBhcmUgZXF1aXZhbGVudDpcbiAqXG4gKiAgIC0gYGcoMSkoMikoMylgXG4gKiAgIC0gYGcoMSkoMiwgMylgXG4gKiAgIC0gYGcoMSwgMikoMylgXG4gKiAgIC0gYGcoMSwgMiwgMylgXG4gKlxuICogU2Vjb25kbHksIHRoZSBzcGVjaWFsIHBsYWNlaG9sZGVyIHZhbHVlIGBSLl9fYCBtYXkgYmUgdXNlZCB0byBzcGVjaWZ5XG4gKiBcImdhcHNcIiwgYWxsb3dpbmcgcGFydGlhbCBhcHBsaWNhdGlvbiBvZiBhbnkgY29tYmluYXRpb24gb2YgYXJndW1lbnRzLFxuICogcmVnYXJkbGVzcyBvZiB0aGVpciBwb3NpdGlvbnMuIElmIGBnYCBpcyBhcyBhYm92ZSBhbmQgYF9gIGlzIGBSLl9fYCwgdGhlXG4gKiBmb2xsb3dpbmcgYXJlIGVxdWl2YWxlbnQ6XG4gKlxuICogICAtIGBnKDEsIDIsIDMpYFxuICogICAtIGBnKF8sIDIsIDMpKDEpYFxuICogICAtIGBnKF8sIF8sIDMpKDEpKDIpYFxuICogICAtIGBnKF8sIF8sIDMpKDEsIDIpYFxuICogICAtIGBnKF8sIDIpKDEpKDMpYFxuICogICAtIGBnKF8sIDIpKDEsIDMpYFxuICogICAtIGBnKF8sIDIpKF8sIDMpKDEpYFxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnICgqIC0+IGEpIC0+ICgqIC0+IGEpXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBuZXcsIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAc2VlIFIuY3VycnlOXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGFkZEZvdXJOdW1iZXJzID0gKGEsIGIsIGMsIGQpID0+IGEgKyBiICsgYyArIGQ7XG4gKlxuICogICAgICB2YXIgY3VycmllZEFkZEZvdXJOdW1iZXJzID0gUi5jdXJyeShhZGRGb3VyTnVtYmVycyk7XG4gKiAgICAgIHZhciBmID0gY3VycmllZEFkZEZvdXJOdW1iZXJzKDEsIDIpO1xuICogICAgICB2YXIgZyA9IGYoMyk7XG4gKiAgICAgIGcoNCk7IC8vPT4gMTBcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGN1cnJ5KGZuKSB7XG4gIHJldHVybiBjdXJyeU4oZm4ubGVuZ3RoLCBmbik7XG59KTtcbiIsInZhciBhbHdheXMgPSByZXF1aXJlKCcuL2Fsd2F5cycpO1xuXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIGB0cnVlYC4gQW55IHBhc3NlZCBpbiBwYXJhbWV0ZXJzIGFyZSBpZ25vcmVkLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjkuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnICogLT4gQm9vbGVhblxuICogQHBhcmFtIHsqfVxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBzZWUgUi5hbHdheXMsIFIuRlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuVCgpOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBhbHdheXModHJ1ZSk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIF9pZGVudGl0eSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2lkZW50aXR5Jyk7XG5cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nIGJ1dCByZXR1cm4gdGhlIHBhcmFtZXRlciBzdXBwbGllZCB0byBpdC4gR29vZFxuICogYXMgYSBkZWZhdWx0IG9yIHBsYWNlaG9sZGVyIGZ1bmN0aW9uLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnIGEgLT4gYVxuICogQHBhcmFtIHsqfSB4IFRoZSB2YWx1ZSB0byByZXR1cm4uXG4gKiBAcmV0dXJuIHsqfSBUaGUgaW5wdXQgdmFsdWUsIGB4YC5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmlkZW50aXR5KDEpOyAvLz0+IDFcbiAqXG4gKiAgICAgIHZhciBvYmogPSB7fTtcbiAqICAgICAgUi5pZGVudGl0eShvYmopID09PSBvYmo7IC8vPT4gdHJ1ZVxuICogQHN5bWIgUi5pZGVudGl0eShhKSA9IGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKF9pZGVudGl0eSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9pZGVudGl0eSh4KSB7IHJldHVybiB4OyB9O1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcblxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjkuMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBzaWcgKiAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IHggVGhlIHZhbHVlIHRvIHRlc3QuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYHhgIGlzIGB1bmRlZmluZWRgIG9yIGBudWxsYCwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5pc05pbChudWxsKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaXNOaWwodW5kZWZpbmVkKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaXNOaWwoMCk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pc05pbChbXSk7IC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGlzTmlsKHgpIHsgcmV0dXJuIHggPT0gbnVsbDsgfSk7XG4iLCJ2YXIgX2FyaXR5ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fYXJpdHknKTtcbnZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgbWFwID0gcmVxdWlyZSgnLi9tYXAnKTtcbnZhciBtYXggPSByZXF1aXJlKCcuL21heCcpO1xudmFyIHJlZHVjZSA9IHJlcXVpcmUoJy4vcmVkdWNlJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24sIGBmbmAsIHdoaWNoIGVuY2Fwc3VsYXRlcyBgaWYvZWxzZSwgaWYvZWxzZSwgLi4uYCBsb2dpYy5cbiAqIGBSLmNvbmRgIHRha2VzIGEgbGlzdCBvZiBbcHJlZGljYXRlLCB0cmFuc2Zvcm1lcl0gcGFpcnMuIEFsbCBvZiB0aGUgYXJndW1lbnRzXG4gKiB0byBgZm5gIGFyZSBhcHBsaWVkIHRvIGVhY2ggb2YgdGhlIHByZWRpY2F0ZXMgaW4gdHVybiB1bnRpbCBvbmUgcmV0dXJucyBhXG4gKiBcInRydXRoeVwiIHZhbHVlLCBhdCB3aGljaCBwb2ludCBgZm5gIHJldHVybnMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBpdHNcbiAqIGFyZ3VtZW50cyB0byB0aGUgY29ycmVzcG9uZGluZyB0cmFuc2Zvcm1lci4gSWYgbm9uZSBvZiB0aGUgcHJlZGljYXRlc1xuICogbWF0Y2hlcywgYGZuYCByZXR1cm5zIHVuZGVmaW5lZC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC42LjBcbiAqIEBjYXRlZ29yeSBMb2dpY1xuICogQHNpZyBbWygqLi4uIC0+IEJvb2xlYW4pLCgqLi4uIC0+ICopXV0gLT4gKCouLi4gLT4gKilcbiAqIEBwYXJhbSB7QXJyYXl9IHBhaXJzIEEgbGlzdCBvZiBbcHJlZGljYXRlLCB0cmFuc2Zvcm1lcl1cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBmbiA9IFIuY29uZChbXG4gKiAgICAgICAgW1IuZXF1YWxzKDApLCAgIFIuYWx3YXlzKCd3YXRlciBmcmVlemVzIGF0IDDCsEMnKV0sXG4gKiAgICAgICAgW1IuZXF1YWxzKDEwMCksIFIuYWx3YXlzKCd3YXRlciBib2lscyBhdCAxMDDCsEMnKV0sXG4gKiAgICAgICAgW1IuVCwgICAgICAgICAgIHRlbXAgPT4gJ25vdGhpbmcgc3BlY2lhbCBoYXBwZW5zIGF0ICcgKyB0ZW1wICsgJ8KwQyddXG4gKiAgICAgIF0pO1xuICogICAgICBmbigwKTsgLy89PiAnd2F0ZXIgZnJlZXplcyBhdCAwwrBDJ1xuICogICAgICBmbig1MCk7IC8vPT4gJ25vdGhpbmcgc3BlY2lhbCBoYXBwZW5zIGF0IDUwwrBDJ1xuICogICAgICBmbigxMDApOyAvLz0+ICd3YXRlciBib2lscyBhdCAxMDDCsEMnXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MShmdW5jdGlvbiBjb25kKHBhaXJzKSB7XG4gIHZhciBhcml0eSA9IHJlZHVjZShtYXgsXG4gICAgICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgICAgbWFwKGZ1bmN0aW9uKHBhaXIpIHsgcmV0dXJuIHBhaXJbMF0ubGVuZ3RoOyB9LCBwYWlycykpO1xuICByZXR1cm4gX2FyaXR5KGFyaXR5LCBmdW5jdGlvbigpIHtcbiAgICB2YXIgaWR4ID0gMDtcbiAgICB3aGlsZSAoaWR4IDwgcGFpcnMubGVuZ3RoKSB7XG4gICAgICBpZiAocGFpcnNbaWR4XVswXS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB7XG4gICAgICAgIHJldHVybiBwYWlyc1tpZHhdWzFdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgICBpZHggKz0gMTtcbiAgICB9XG4gIH0pO1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbGliL2F4aW9zJyk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG52YXIgQXhpb3MgPSByZXF1aXJlKCcuL2NvcmUvQXhpb3MnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxudmFyIGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMpO1xuXG4vLyBFeHBvc2UgQXhpb3MgY2xhc3MgdG8gYWxsb3cgY2xhc3MgaW5oZXJpdGFuY2VcbmF4aW9zLkF4aW9zID0gQXhpb3M7XG5cbi8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbmF4aW9zLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICByZXR1cm4gY3JlYXRlSW5zdGFuY2UodXRpbHMubWVyZ2UoZGVmYXVsdHMsIGluc3RhbmNlQ29uZmlnKSk7XG59O1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbCcpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuYXhpb3Muc3ByZWFkID0gcmVxdWlyZSgnLi9oZWxwZXJzL3NwcmVhZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuXG4vLyBBbGxvdyB1c2Ugb2YgZGVmYXVsdCBpbXBvcnQgc3ludGF4IGluIFR5cGVTY3JpcHRcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBheGlvcztcbiIsIi8qIVxuICogRGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBpcyBhIEJ1ZmZlclxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cblxuLy8gVGhlIF9pc0J1ZmZlciBjaGVjayBpcyBmb3IgU2FmYXJpIDUtNyBzdXBwb3J0LCBiZWNhdXNlIGl0J3MgbWlzc2luZ1xuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBvYmogIT0gbnVsbCAmJiAoaXNCdWZmZXIob2JqKSB8fCBpc1Nsb3dCdWZmZXIob2JqKSB8fCAhIW9iai5faXNCdWZmZXIpXG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChvYmopIHtcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcbn1cblxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cbmZ1bmN0aW9uIGlzU2xvd0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqLnJlYWRGbG9hdExFID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouc2xpY2UgPT09ICdmdW5jdGlvbicgJiYgaXNCdWZmZXIob2JqLnNsaWNlKDAsIDApKVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLy4uL2RlZmF1bHRzJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyID0gcmVxdWlyZSgnLi9JbnRlcmNlcHRvck1hbmFnZXInKTtcbnZhciBkaXNwYXRjaFJlcXVlc3QgPSByZXF1aXJlKCcuL2Rpc3BhdGNoUmVxdWVzdCcpO1xudmFyIGlzQWJzb2x1dGVVUkwgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2NvbWJpbmVVUkxzJyk7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEF4aW9zKGluc3RhbmNlQ29uZmlnKSB7XG4gIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAqL1xuQXhpb3MucHJvdG90eXBlLnJlcXVlc3QgPSBmdW5jdGlvbiByZXF1ZXN0KGNvbmZpZykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgLy8gQWxsb3cgZm9yIGF4aW9zKCdleGFtcGxlL3VybCdbLCBjb25maWddKSBhIGxhIGZldGNoIEFQSVxuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSB1dGlscy5tZXJnZSh7XG4gICAgICB1cmw6IGFyZ3VtZW50c1swXVxuICAgIH0sIGFyZ3VtZW50c1sxXSk7XG4gIH1cblxuICBjb25maWcgPSB1dGlscy5tZXJnZShkZWZhdWx0cywgdGhpcy5kZWZhdWx0cywgeyBtZXRob2Q6ICdnZXQnIH0sIGNvbmZpZyk7XG4gIGNvbmZpZy5tZXRob2QgPSBjb25maWcubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG5cbiAgLy8gU3VwcG9ydCBiYXNlVVJMIGNvbmZpZ1xuICBpZiAoY29uZmlnLmJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwoY29uZmlnLnVybCkpIHtcbiAgICBjb25maWcudXJsID0gY29tYmluZVVSTHMoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwpO1xuICB9XG5cbiAgLy8gSG9vayB1cCBpbnRlcmNlcHRvcnMgbWlkZGxld2FyZVxuICB2YXIgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LCB1bmRlZmluZWRdO1xuICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgIGNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4ucHVzaChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgd2hpbGUgKGNoYWluLmxlbmd0aCkge1xuICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW4uc2hpZnQoKSwgY2hhaW4uc2hpZnQoKSk7XG4gIH1cblxuICByZXR1cm4gcHJvbWlzZTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybFxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscy5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdCh1dGlscy5tZXJnZShjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgdXJsOiB1cmwsXG4gICAgICBkYXRhOiBkYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQXhpb3M7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCBub3JtYWxpemVkTmFtZSkge1xuICB1dGlscy5mb3JFYWNoKGhlYWRlcnMsIGZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAobmFtZSAhPT0gbm9ybWFsaXplZE5hbWUgJiYgbmFtZS50b1VwcGVyQ2FzZSgpID09PSBub3JtYWxpemVkTmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgfVxuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4vY3JlYXRlRXJyb3InKTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCByZXNwb25zZSkge1xuICB2YXIgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIC8vIE5vdGU6IHN0YXR1cyBpcyBub3QgZXhwb3NlZCBieSBYRG9tYWluUmVxdWVzdFxuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChjcmVhdGVFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICBudWxsLFxuICAgICAgcmVzcG9uc2UucmVxdWVzdCxcbiAgICAgIHJlc3BvbnNlXG4gICAgKSk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXBkYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcsIGVycm9yIGNvZGUsIGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJvciBUaGUgZXJyb3IgdG8gdXBkYXRlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBlcnJvci5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbmhhbmNlRXJyb3IoZXJyb3IsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgZXJyb3IuY29uZmlnID0gY29uZmlnO1xuICBpZiAoY29kZSkge1xuICAgIGVycm9yLmNvZGUgPSBjb2RlO1xuICB9XG4gIGVycm9yLnJlcXVlc3QgPSByZXF1ZXN0O1xuICBlcnJvci5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICByZXR1cm4gZXJyb3I7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyU0MC9naSwgJ0AnKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgcGFyYW1zU2VyaWFsaXplcikge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIGlmIChwYXJhbXNTZXJpYWxpemVyKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtc1NlcmlhbGl6ZXIocGFyYW1zKTtcbiAgfSBlbHNlIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcmFtcy50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIHZhciBwYXJ0cyA9IFtdO1xuXG4gICAgdXRpbHMuZm9yRWFjaChwYXJhbXMsIGZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWwsIGtleSkge1xuICAgICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAga2V5ID0ga2V5ICsgJ1tdJztcbiAgICAgIH1cblxuICAgICAgaWYgKCF1dGlscy5pc0FycmF5KHZhbCkpIHtcbiAgICAgICAgdmFsID0gW3ZhbF07XG4gICAgICB9XG5cbiAgICAgIHV0aWxzLmZvckVhY2godmFsLCBmdW5jdGlvbiBwYXJzZVZhbHVlKHYpIHtcbiAgICAgICAgaWYgKHV0aWxzLmlzRGF0ZSh2KSkge1xuICAgICAgICAgIHYgPSB2LnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNPYmplY3QodikpIHtcbiAgICAgICAgICB2ID0gSlNPTi5zdHJpbmdpZnkodik7XG4gICAgICAgIH1cbiAgICAgICAgcGFydHMucHVzaChlbmNvZGUoa2V5KSArICc9JyArIGVuY29kZSh2KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHNlcmlhbGl6ZWRQYXJhbXMgPSBwYXJ0cy5qb2luKCcmJyk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zdWJzdHIoMCwgaSkpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cihpICsgMSkpO1xuXG4gICAgaWYgKGtleSkge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgaGF2ZSBmdWxsIHN1cHBvcnQgb2YgdGhlIEFQSXMgbmVlZGVkIHRvIHRlc3RcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCBVUkwgaXMgb2YgdGhlIHNhbWUgb3JpZ2luIGFzIGN1cnJlbnQgbG9jYXRpb24uXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgIHZhciB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICB2YXIgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdCdzIGNvbXBvbmVudHNcbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgICovXG4gICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgIHZhciBocmVmID0gdXJsO1xuXG4gICAgICBpZiAobXNpZSkge1xuICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgIHVybFBhcnNpbmdOb2RlLnNldEF0dHJpYnV0ZSgnaHJlZicsIGhyZWYpO1xuICAgICAgICBocmVmID0gdXJsUGFyc2luZ05vZGUuaHJlZjtcbiAgICAgIH1cblxuICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG5cbiAgICAgIC8vIHVybFBhcnNpbmdOb2RlIHByb3ZpZGVzIHRoZSBVcmxVdGlscyBpbnRlcmZhY2UgLSBodHRwOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsdXRpbHNcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhyZWY6IHVybFBhcnNpbmdOb2RlLmhyZWYsXG4gICAgICAgIHByb3RvY29sOiB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbCA/IHVybFBhcnNpbmdOb2RlLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpIDogJycsXG4gICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgIHNlYXJjaDogdXJsUGFyc2luZ05vZGUuc2VhcmNoID8gdXJsUGFyc2luZ05vZGUuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCAnJykgOiAnJyxcbiAgICAgICAgaGFzaDogdXJsUGFyc2luZ05vZGUuaGFzaCA/IHVybFBhcnNpbmdOb2RlLmhhc2gucmVwbGFjZSgvXiMvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICBwb3J0OiB1cmxQYXJzaW5nTm9kZS5wb3J0LFxuICAgICAgICBwYXRobmFtZTogKHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSA/XG4gICAgICAgICAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgICAgICAgICAnLycgKyB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBvcmlnaW5VUkwgPSByZXNvbHZlVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblxuICAgIC8qKlxuICAgICogRGV0ZXJtaW5lIGlmIGEgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4gYXMgdGhlIGN1cnJlbnQgbG9jYXRpb25cbiAgICAqXG4gICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luLCBvdGhlcndpc2UgZmFsc2VcbiAgICAqL1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgdmFyIHBhcnNlZCA9ICh1dGlscy5pc1N0cmluZyhyZXF1ZXN0VVJMKSkgPyByZXNvbHZlVVJMKHJlcXVlc3RVUkwpIDogcmVxdWVzdFVSTDtcbiAgICAgIHJldHVybiAocGFyc2VkLnByb3RvY29sID09PSBvcmlnaW5VUkwucHJvdG9jb2wgJiZcbiAgICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gYnRvYSBwb2x5ZmlsbCBmb3IgSUU8MTAgY291cnRlc3kgaHR0cHM6Ly9naXRodWIuY29tL2RhdmlkY2hhbWJlcnMvQmFzZTY0LmpzXG5cbnZhciBjaGFycyA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSc7XG5cbmZ1bmN0aW9uIEUoKSB7XG4gIHRoaXMubWVzc2FnZSA9ICdTdHJpbmcgY29udGFpbnMgYW4gaW52YWxpZCBjaGFyYWN0ZXInO1xufVxuRS5wcm90b3R5cGUgPSBuZXcgRXJyb3I7XG5FLnByb3RvdHlwZS5jb2RlID0gNTtcbkUucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblxuZnVuY3Rpb24gYnRvYShpbnB1dCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGlucHV0KTtcbiAgdmFyIG91dHB1dCA9ICcnO1xuICBmb3IgKFxuICAgIC8vIGluaXRpYWxpemUgcmVzdWx0IGFuZCBjb3VudGVyXG4gICAgdmFyIGJsb2NrLCBjaGFyQ29kZSwgaWR4ID0gMCwgbWFwID0gY2hhcnM7XG4gICAgLy8gaWYgdGhlIG5leHQgc3RyIGluZGV4IGRvZXMgbm90IGV4aXN0OlxuICAgIC8vICAgY2hhbmdlIHRoZSBtYXBwaW5nIHRhYmxlIHRvIFwiPVwiXG4gICAgLy8gICBjaGVjayBpZiBkIGhhcyBubyBmcmFjdGlvbmFsIGRpZ2l0c1xuICAgIHN0ci5jaGFyQXQoaWR4IHwgMCkgfHwgKG1hcCA9ICc9JywgaWR4ICUgMSk7XG4gICAgLy8gXCI4IC0gaWR4ICUgMSAqIDhcIiBnZW5lcmF0ZXMgdGhlIHNlcXVlbmNlIDIsIDQsIDYsIDhcbiAgICBvdXRwdXQgKz0gbWFwLmNoYXJBdCg2MyAmIGJsb2NrID4+IDggLSBpZHggJSAxICogOClcbiAgKSB7XG4gICAgY2hhckNvZGUgPSBzdHIuY2hhckNvZGVBdChpZHggKz0gMyAvIDQpO1xuICAgIGlmIChjaGFyQ29kZSA+IDB4RkYpIHtcbiAgICAgIHRocm93IG5ldyBFKCk7XG4gICAgfVxuICAgIGJsb2NrID0gYmxvY2sgPDwgOCB8IGNoYXJDb2RlO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnRvYTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgdXRpbHMuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIChmdW5jdGlvbiBzdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgICAgdmFyIGNvb2tpZSA9IFtdO1xuICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzTnVtYmVyKGV4cGlyZXMpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKHBhdGgpKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3BhdGg9JyArIHBhdGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzU3RyaW5nKGRvbWFpbikpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlY3VyZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdzZWN1cmUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgICAgfSxcblxuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgICB9LFxuXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZShuYW1lKSB7XG4gICAgICAgIHRoaXMud3JpdGUobmFtZSwgJycsIERhdGUubm93KCkgLSA4NjQwMDAwMCk7XG4gICAgICB9XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cml0ZTogZnVuY3Rpb24gd3JpdGUoKSB7fSxcbiAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgIH07XG4gIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAqXG4gKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgZm4oaCk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gSW50ZXJjZXB0b3JNYW5hZ2VyO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgdHJhbnNmb3JtRGF0YSA9IHJlcXVpcmUoJy4vdHJhbnNmb3JtRGF0YScpO1xudmFyIGlzQ2FuY2VsID0gcmVxdWlyZSgnLi4vY2FuY2VsL2lzQ2FuY2VsJyk7XG52YXIgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIC8vIEVuc3VyZSBoZWFkZXJzIGV4aXN0XG4gIGNvbmZpZy5oZWFkZXJzID0gY29uZmlnLmhlYWRlcnMgfHwge307XG5cbiAgLy8gVHJhbnNmb3JtIHJlcXVlc3QgZGF0YVxuICBjb25maWcuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgY29uZmlnLmRhdGEsXG4gICAgY29uZmlnLmhlYWRlcnMsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnMgfHwge31cbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEoXG4gICAgICByZXNwb25zZS5kYXRhLFxuICAgICAgcmVzcG9uc2UuaGVhZGVycyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH0sIGZ1bmN0aW9uIG9uQWRhcHRlclJlamVjdGlvbihyZWFzb24pIHtcbiAgICBpZiAoIWlzQ2FuY2VsKHJlYXNvbikpIHtcbiAgICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICAgIGlmIChyZWFzb24gJiYgcmVhc29uLnJlc3BvbnNlKSB7XG4gICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyxcbiAgICAgICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fFN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBiZSB0cmFuc2Zvcm1lZFxuICogQHBhcmFtIHtBcnJheX0gaGVhZGVycyBUaGUgaGVhZGVycyBmb3IgdGhlIHJlcXVlc3Qgb3IgcmVzcG9uc2VcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGRhdGEsIGhlYWRlcnMsIGZucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgdXRpbHMuZm9yRWFjaChmbnMsIGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIGRhdGEgPSBmbihkYXRhLCBoZWFkZXJzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGRcXCtcXC1cXC5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvKyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBDYW5jZWwgPSByZXF1aXJlKCcuL0NhbmNlbCcpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICB9KTtcblxuICB2YXIgdG9rZW4gPSB0aGlzO1xuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSkge1xuICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWwobWVzc2FnZSk7XG4gICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQgPSBmdW5jdGlvbiB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgfVxufTtcblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gKiBjYW5jZWxzIHRoZSBgQ2FuY2VsVG9rZW5gLlxuICovXG5DYW5jZWxUb2tlbi5zb3VyY2UgPSBmdW5jdGlvbiBzb3VyY2UoKSB7XG4gIHZhciBjYW5jZWw7XG4gIHZhciB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgY2FuY2VsID0gYztcbiAgfSk7XG4gIHJldHVybiB7XG4gICAgdG9rZW46IHRva2VuLFxuICAgIGNhbmNlbDogY2FuY2VsXG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbFRva2VuO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59O1xuIiwiLyogZ2xvYmFscyBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXyAqL1xubW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfYW1kX29wdGlvbnNfXztcbiIsInZhciBiYXNlSXNNYXRjaCA9IHJlcXVpcmUoJy4vX2Jhc2VJc01hdGNoJyksXG4gICAgZ2V0TWF0Y2hEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWF0Y2hEYXRhJyksXG4gICAgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNvdXJjZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlcyhzb3VyY2UpIHtcbiAgdmFyIG1hdGNoRGF0YSA9IGdldE1hdGNoRGF0YShzb3VyY2UpO1xuICBpZiAobWF0Y2hEYXRhLmxlbmd0aCA9PSAxICYmIG1hdGNoRGF0YVswXVsyXSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShtYXRjaERhdGFbMF1bMF0sIG1hdGNoRGF0YVswXVsxXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT09IHNvdXJjZSB8fCBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlcztcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNNYXRjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2UgVGhlIG9iamVjdCBvZiBwcm9wZXJ0eSB2YWx1ZXMgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0FycmF5fSBtYXRjaERhdGEgVGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW2N1c3RvbWl6ZXJdIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYG9iamVjdGAgaXMgYSBtYXRjaCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNNYXRjaChvYmplY3QsIHNvdXJjZSwgbWF0Y2hEYXRhLCBjdXN0b21pemVyKSB7XG4gIHZhciBpbmRleCA9IG1hdGNoRGF0YS5sZW5ndGgsXG4gICAgICBsZW5ndGggPSBpbmRleCxcbiAgICAgIG5vQ3VzdG9taXplciA9ICFjdXN0b21pemVyO1xuXG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiAhbGVuZ3RoO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICB3aGlsZSAoaW5kZXgtLSkge1xuICAgIHZhciBkYXRhID0gbWF0Y2hEYXRhW2luZGV4XTtcbiAgICBpZiAoKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKVxuICAgICAgICAgID8gZGF0YVsxXSAhPT0gb2JqZWN0W2RhdGFbMF1dXG4gICAgICAgICAgOiAhKGRhdGFbMF0gaW4gb2JqZWN0KVxuICAgICAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBkYXRhID0gbWF0Y2hEYXRhW2luZGV4XTtcbiAgICB2YXIga2V5ID0gZGF0YVswXSxcbiAgICAgICAgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgc3JjVmFsdWUgPSBkYXRhWzFdO1xuXG4gICAgaWYgKG5vQ3VzdG9taXplciAmJiBkYXRhWzJdKSB7XG4gICAgICBpZiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhKGtleSBpbiBvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YWNrID0gbmV3IFN0YWNrO1xuICAgICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGN1c3RvbWl6ZXIob2JqVmFsdWUsIHNyY1ZhbHVlLCBrZXksIG9iamVjdCwgc291cmNlLCBzdGFjayk7XG4gICAgICB9XG4gICAgICBpZiAoIShyZXN1bHQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBiYXNlSXNFcXVhbChzcmNWYWx1ZSwgb2JqVmFsdWUsIENPTVBBUkVfUEFSVElBTF9GTEFHIHwgQ09NUEFSRV9VTk9SREVSRURfRkxBRywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICAgICA6IHJlc3VsdFxuICAgICAgICAgICkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNNYXRjaDtcbiIsIi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVDbGVhcjtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gZGF0YS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggPT0gbGFzdEluZGV4KSB7XG4gICAgZGF0YS5wb3AoKTtcbiAgfSBlbHNlIHtcbiAgICBzcGxpY2UuY2FsbChkYXRhLCBpbmRleCwgMSk7XG4gIH1cbiAgLS10aGlzLnNpemU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZURlbGV0ZTtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIHJldHVybiBpbmRleCA8IDAgPyB1bmRlZmluZWQgOiBkYXRhW2luZGV4XVsxXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVHZXQ7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBhc3NvY0luZGV4T2YodGhpcy5fX2RhdGFfXywga2V5KSA+IC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUhhcztcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICArK3RoaXMuc2l6ZTtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZVNldDtcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBTdGFja1xuICovXG5mdW5jdGlvbiBzdGFja0NsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0NsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tEZWxldGUoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIHJlc3VsdCA9IGRhdGFbJ2RlbGV0ZSddKGtleSk7XG5cbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrRGVsZXRlO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBzdGFjayB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBlbnRyeSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tHZXQoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrR2V0O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBzdGFjayB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrSGFzKGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0hhcztcbiIsInZhciBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBzaXplIHRvIGVuYWJsZSBsYXJnZSBhcnJheSBvcHRpbWl6YXRpb25zLiAqL1xudmFyIExBUkdFX0FSUkFZX1NJWkUgPSAyMDA7XG5cbi8qKlxuICogU2V0cyB0aGUgc3RhY2sgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgc3RhY2sgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICBpZiAoZGF0YSBpbnN0YW5jZW9mIExpc3RDYWNoZSkge1xuICAgIHZhciBwYWlycyA9IGRhdGEuX19kYXRhX187XG4gICAgaWYgKCFNYXAgfHwgKHBhaXJzLmxlbmd0aCA8IExBUkdFX0FSUkFZX1NJWkUgLSAxKSkge1xuICAgICAgcGFpcnMucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgdGhpcy5zaXplID0gKytkYXRhLnNpemU7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGUocGFpcnMpO1xuICB9XG4gIGRhdGEuc2V0KGtleSwgdmFsdWUpO1xuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrU2V0O1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc01hc2tlZCA9IHJlcXVpcmUoJy4vX2lzTWFza2VkJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0JyksXG4gICAgdG9Tb3VyY2UgPSByZXF1aXJlKCcuL190b1NvdXJjZScpO1xuXG4vKipcbiAqIFVzZWQgdG8gbWF0Y2ggYFJlZ0V4cGBcbiAqIFtzeW50YXggY2hhcmFjdGVyc10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcGF0dGVybnMpLlxuICovXG52YXIgcmVSZWdFeHBDaGFyID0gL1tcXFxcXiQuKis/KClbXFxde318XS9nO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaG9zdCBjb25zdHJ1Y3RvcnMgKFNhZmFyaSkuICovXG52YXIgcmVJc0hvc3RDdG9yID0gL15cXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXF0kLztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNOYXRpdmVgIHdpdGhvdXQgYmFkIHNoaW0gY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgbmF0aXZlIGZ1bmN0aW9uLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTmF0aXZlKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IGlzTWFza2VkKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgcGF0dGVybiA9IGlzRnVuY3Rpb24odmFsdWUpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hdGl2ZTtcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFJhd1RhZztcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKlxuICogVXNlZCB0byByZXNvbHZlIHRoZVxuICogW2B0b1N0cmluZ1RhZ2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLW9iamVjdC5wcm90b3R5cGUudG9zdHJpbmcpXG4gKiBvZiB2YWx1ZXMuXG4gKi9cbnZhciBuYXRpdmVPYmplY3RUb1N0cmluZyA9IG9iamVjdFByb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBzdHJpbmcgdXNpbmcgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29udmVydGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gb2JqZWN0VG9TdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIG5hdGl2ZU9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9iamVjdFRvU3RyaW5nO1xuIiwidmFyIGNvcmVKc0RhdGEgPSByZXF1aXJlKCcuL19jb3JlSnNEYXRhJyk7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNNYXNrZWQ7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG92ZXJyZWFjaGluZyBjb3JlLWpzIHNoaW1zLiAqL1xudmFyIGNvcmVKc0RhdGEgPSByb290WydfX2NvcmUtanNfc2hhcmVkX18nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBjb3JlSnNEYXRhO1xuIiwiLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmFsdWU7XG4iLCJ2YXIgSGFzaCA9IHJlcXVpcmUoJy4vX0hhc2gnKSxcbiAgICBMaXN0Q2FjaGUgPSByZXF1aXJlKCcuL19MaXN0Q2FjaGUnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlQ2xlYXI7XG4iLCJ2YXIgaGFzaENsZWFyID0gcmVxdWlyZSgnLi9faGFzaENsZWFyJyksXG4gICAgaGFzaERlbGV0ZSA9IHJlcXVpcmUoJy4vX2hhc2hEZWxldGUnKSxcbiAgICBoYXNoR2V0ID0gcmVxdWlyZSgnLi9faGFzaEdldCcpLFxuICAgIGhhc2hIYXMgPSByZXF1aXJlKCcuL19oYXNoSGFzJyksXG4gICAgaGFzaFNldCA9IHJlcXVpcmUoJy4vX2hhc2hTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgaGFzaCBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIEhhc2goZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gSGFzaDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIEhhc2hcbiAqL1xuZnVuY3Rpb24gaGFzaENsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gbmF0aXZlQ3JlYXRlID8gbmF0aXZlQ3JlYXRlKG51bGwpIDoge307XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaENsZWFyO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtPYmplY3R9IGhhc2ggVGhlIGhhc2ggdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSB0aGlzLmhhcyhrZXkpICYmIGRlbGV0ZSB0aGlzLl9fZGF0YV9fW2tleV07XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoRGVsZXRlO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogR2V0cyB0aGUgaGFzaCB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBoYXNoR2V0KGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChuYXRpdmVDcmVhdGUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXldO1xuICAgIHJldHVybiByZXN1bHQgPT09IEhBU0hfVU5ERUZJTkVEID8gdW5kZWZpbmVkIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSkgPyBkYXRhW2tleV0gOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEdldDtcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyAoZGF0YVtrZXldICE9PSB1bmRlZmluZWQpIDogaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hIYXM7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgdGhpcy5zaXplICs9IHRoaXMuaGFzKGtleSkgPyAwIDogMTtcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hTZXQ7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbWFwLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgcmVzdWx0ID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpWydkZWxldGUnXShrZXkpO1xuICB0aGlzLnNpemUgLT0gcmVzdWx0ID8gMSA6IDA7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVEZWxldGU7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciB1c2UgYXMgdW5pcXVlIG9iamVjdCBrZXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gKHR5cGUgPT0gJ3N0cmluZycgfHwgdHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nKVxuICAgID8gKHZhbHVlICE9PSAnX19wcm90b19fJylcbiAgICA6ICh2YWx1ZSA9PT0gbnVsbCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXlhYmxlO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZUdldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIG1hcCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlSGFzO1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbWFwIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG1hcCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IGdldE1hcERhdGEodGhpcywga2V5KSxcbiAgICAgIHNpemUgPSBkYXRhLnNpemU7XG5cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSArPSBkYXRhLnNpemUgPT0gc2l6ZSA/IDAgOiAxO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZVNldDtcbiIsInZhciBTdGFjayA9IHJlcXVpcmUoJy4vX1N0YWNrJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIGVxdWFsQnlUYWcgPSByZXF1aXJlKCcuL19lcXVhbEJ5VGFnJyksXG4gICAgZXF1YWxPYmplY3RzID0gcmVxdWlyZSgnLi9fZXF1YWxPYmplY3RzJyksXG4gICAgZ2V0VGFnID0gcmVxdWlyZSgnLi9fZ2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XSc7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbGAgZm9yIGFycmF5cyBhbmQgb2JqZWN0cyB3aGljaCBwZXJmb3Jtc1xuICogZGVlcCBjb21wYXJpc29ucyBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzIGVuYWJsaW5nIG9iamVjdHMgd2l0aCBjaXJjdWxhclxuICogcmVmZXJlbmNlcyB0byBiZSBjb21wYXJlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gW3N0YWNrXSBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWxEZWVwKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIG9iaklzQXJyID0gaXNBcnJheShvYmplY3QpLFxuICAgICAgb3RoSXNBcnIgPSBpc0FycmF5KG90aGVyKSxcbiAgICAgIG9ialRhZyA9IG9iaklzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob2JqZWN0KSxcbiAgICAgIG90aFRhZyA9IG90aElzQXJyID8gYXJyYXlUYWcgOiBnZXRUYWcob3RoZXIpO1xuXG4gIG9ialRhZyA9IG9ialRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb2JqVGFnO1xuICBvdGhUYWcgPSBvdGhUYWcgPT0gYXJnc1RhZyA/IG9iamVjdFRhZyA6IG90aFRhZztcblxuICB2YXIgb2JqSXNPYmogPSBvYmpUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgb3RoSXNPYmogPSBvdGhUYWcgPT0gb2JqZWN0VGFnLFxuICAgICAgaXNTYW1lVGFnID0gb2JqVGFnID09IG90aFRhZztcblxuICBpZiAoaXNTYW1lVGFnICYmIGlzQnVmZmVyKG9iamVjdCkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKG90aGVyKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvYmpJc0FyciA9IHRydWU7XG4gICAgb2JqSXNPYmogPSBmYWxzZTtcbiAgfVxuICBpZiAoaXNTYW1lVGFnICYmICFvYmpJc09iaikge1xuICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgcmV0dXJuIChvYmpJc0FyciB8fCBpc1R5cGVkQXJyYXkob2JqZWN0KSlcbiAgICAgID8gZXF1YWxBcnJheXMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaylcbiAgICAgIDogZXF1YWxCeVRhZyhvYmplY3QsIG90aGVyLCBvYmpUYWcsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xuICB9XG4gIGlmICghKGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRykpIHtcbiAgICB2YXIgb2JqSXNXcmFwcGVkID0gb2JqSXNPYmogJiYgaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdfX3dyYXBwZWRfXycpLFxuICAgICAgICBvdGhJc1dyYXBwZWQgPSBvdGhJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCAnX193cmFwcGVkX18nKTtcblxuICAgIGlmIChvYmpJc1dyYXBwZWQgfHwgb3RoSXNXcmFwcGVkKSB7XG4gICAgICB2YXIgb2JqVW53cmFwcGVkID0gb2JqSXNXcmFwcGVkID8gb2JqZWN0LnZhbHVlKCkgOiBvYmplY3QsXG4gICAgICAgICAgb3RoVW53cmFwcGVkID0gb3RoSXNXcmFwcGVkID8gb3RoZXIudmFsdWUoKSA6IG90aGVyO1xuXG4gICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICAgICAgcmV0dXJuIGVxdWFsRnVuYyhvYmpVbndyYXBwZWQsIG90aFVud3JhcHBlZCwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spO1xuICAgIH1cbiAgfVxuICBpZiAoIWlzU2FtZVRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2spO1xuICByZXR1cm4gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0VxdWFsRGVlcDtcbiIsInZhciBNYXBDYWNoZSA9IHJlcXVpcmUoJy4vX01hcENhY2hlJyksXG4gICAgc2V0Q2FjaGVBZGQgPSByZXF1aXJlKCcuL19zZXRDYWNoZUFkZCcpLFxuICAgIHNldENhY2hlSGFzID0gcmVxdWlyZSgnLi9fc2V0Q2FjaGVIYXMnKTtcblxuLyoqXG4gKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjYWNoZSBvYmplY3QgdG8gc3RvcmUgdW5pcXVlIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbdmFsdWVzXSBUaGUgdmFsdWVzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTZXRDYWNoZSh2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMgPT0gbnVsbCA/IDAgOiB2YWx1ZXMubGVuZ3RoO1xuXG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTWFwQ2FjaGU7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdGhpcy5hZGQodmFsdWVzW2luZGV4XSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFNldENhY2hlYC5cblNldENhY2hlLnByb3RvdHlwZS5hZGQgPSBTZXRDYWNoZS5wcm90b3R5cGUucHVzaCA9IHNldENhY2hlQWRkO1xuU2V0Q2FjaGUucHJvdG90eXBlLmhhcyA9IHNldENhY2hlSGFzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNldENhY2hlO1xuIiwiLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIEFkZHMgYHZhbHVlYCB0byB0aGUgYXJyYXkgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGFkZFxuICogQG1lbWJlck9mIFNldENhY2hlXG4gKiBAYWxpYXMgcHVzaFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2FjaGUuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVBZGQodmFsdWUpIHtcbiAgdGhpcy5fX2RhdGFfXy5zZXQodmFsdWUsIEhBU0hfVU5ERUZJTkVEKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVBZGQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGluIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHNldENhY2hlSGFzKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0Q2FjaGVIYXM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5zb21lYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IHBhc3NlcyB0aGUgcHJlZGljYXRlIGNoZWNrLFxuICogIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlTb21lKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5U29tZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgYGNhY2hlYCB2YWx1ZSBmb3IgYGtleWAgZXhpc3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gY2FjaGUgVGhlIGNhY2hlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFzKGNhY2hlLCBrZXkpIHtcbiAgcmV0dXJuIGNhY2hlLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhY2hlSGFzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIFVpbnQ4QXJyYXkgPSByZXF1aXJlKCcuL19VaW50OEFycmF5JyksXG4gICAgZXEgPSByZXF1aXJlKCcuL2VxJyksXG4gICAgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuL19lcXVhbEFycmF5cycpLFxuICAgIG1hcFRvQXJyYXkgPSByZXF1aXJlKCcuL19tYXBUb0FycmF5JyksXG4gICAgc2V0VG9BcnJheSA9IHJlcXVpcmUoJy4vX3NldFRvQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgY29tcGFyaW5nIG9iamVjdHMgb2ZcbiAqIHRoZSBzYW1lIGB0b1N0cmluZ1RhZ2AuXG4gKlxuICogKipOb3RlOioqIFRoaXMgZnVuY3Rpb24gb25seSBzdXBwb3J0cyBjb21wYXJpbmcgdmFsdWVzIHdpdGggdGFncyBvZlxuICogYEJvb2xlYW5gLCBgRGF0ZWAsIGBFcnJvcmAsIGBOdW1iZXJgLCBgUmVnRXhwYCwgb3IgYFN0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtPYmplY3R9IG90aGVyIFRoZSBvdGhlciBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIGB0b1N0cmluZ1RhZ2Agb2YgdGhlIG9iamVjdHMgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIHRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgZGF0YVZpZXdUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgKG9iamVjdC5ieXRlT2Zmc2V0ICE9IG90aGVyLmJ5dGVPZmZzZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIG9iamVjdCA9IG9iamVjdC5idWZmZXI7XG4gICAgICBvdGhlciA9IG90aGVyLmJ1ZmZlcjtcblxuICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6XG4gICAgICBpZiAoKG9iamVjdC5ieXRlTGVuZ3RoICE9IG90aGVyLmJ5dGVMZW5ndGgpIHx8XG4gICAgICAgICAgIWVxdWFsRnVuYyhuZXcgVWludDhBcnJheShvYmplY3QpLCBuZXcgVWludDhBcnJheShvdGhlcikpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSBib29sVGFnOlxuICAgIGNhc2UgZGF0ZVRhZzpcbiAgICBjYXNlIG51bWJlclRhZzpcbiAgICAgIC8vIENvZXJjZSBib29sZWFucyB0byBgMWAgb3IgYDBgIGFuZCBkYXRlcyB0byBtaWxsaXNlY29uZHMuXG4gICAgICAvLyBJbnZhbGlkIGRhdGVzIGFyZSBjb2VyY2VkIHRvIGBOYU5gLlxuICAgICAgcmV0dXJuIGVxKCtvYmplY3QsICtvdGhlcik7XG5cbiAgICBjYXNlIGVycm9yVGFnOlxuICAgICAgcmV0dXJuIG9iamVjdC5uYW1lID09IG90aGVyLm5hbWUgJiYgb2JqZWN0Lm1lc3NhZ2UgPT0gb3RoZXIubWVzc2FnZTtcblxuICAgIGNhc2UgcmVnZXhwVGFnOlxuICAgIGNhc2Ugc3RyaW5nVGFnOlxuICAgICAgLy8gQ29lcmNlIHJlZ2V4ZXMgdG8gc3RyaW5ncyBhbmQgdHJlYXQgc3RyaW5ncywgcHJpbWl0aXZlcyBhbmQgb2JqZWN0cyxcbiAgICAgIC8vIGFzIGVxdWFsLiBTZWUgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbiAgICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gb2JqZWN0ID09IChvdGhlciArICcnKTtcblxuICAgIGNhc2UgbWFwVGFnOlxuICAgICAgdmFyIGNvbnZlcnQgPSBtYXBUb0FycmF5O1xuXG4gICAgY2FzZSBzZXRUYWc6XG4gICAgICB2YXIgaXNQYXJ0aWFsID0gYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHO1xuICAgICAgY29udmVydCB8fCAoY29udmVydCA9IHNldFRvQXJyYXkpO1xuXG4gICAgICBpZiAob2JqZWN0LnNpemUgIT0gb3RoZXIuc2l6ZSAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIEFzc3VtZSBjeWNsaWMgdmFsdWVzIGFyZSBlcXVhbC5cbiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gICAgICBpZiAoc3RhY2tlZCkge1xuICAgICAgICByZXR1cm4gc3RhY2tlZCA9PSBvdGhlcjtcbiAgICAgIH1cbiAgICAgIGJpdG1hc2sgfD0gQ09NUEFSRV9VTk9SREVSRURfRkxBRztcblxuICAgICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gICAgICB2YXIgcmVzdWx0ID0gZXF1YWxBcnJheXMoY29udmVydChvYmplY3QpLCBjb252ZXJ0KG90aGVyKSwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gICAgICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG5cbiAgICBjYXNlIHN5bWJvbFRhZzpcbiAgICAgIGlmIChzeW1ib2xWYWx1ZU9mKSB7XG4gICAgICAgIHJldHVybiBzeW1ib2xWYWx1ZU9mLmNhbGwob2JqZWN0KSA9PSBzeW1ib2xWYWx1ZU9mLmNhbGwob3RoZXIpO1xuICAgICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbEJ5VGFnO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFVpbnQ4QXJyYXkgPSByb290LlVpbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gVWludDhBcnJheTtcbiIsIi8qKlxuICogQ29udmVydHMgYG1hcGAgdG8gaXRzIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtleS12YWx1ZSBwYWlycy5cbiAqL1xuZnVuY3Rpb24gbWFwVG9BcnJheShtYXApIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShtYXAuc2l6ZSk7XG5cbiAgbWFwLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IFtrZXksIHZhbHVlXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwVG9BcnJheTtcbiIsIi8qKlxuICogQ29udmVydHMgYHNldGAgdG8gYW4gYXJyYXkgb2YgaXRzIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNldCBUaGUgc2V0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gc2V0VG9BcnJheShzZXQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSBBcnJheShzZXQuc2l6ZSk7XG5cbiAgc2V0LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXN1bHRbKytpbmRleF0gPSB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9BcnJheTtcbiIsInZhciBnZXRBbGxLZXlzID0gcmVxdWlyZSgnLi9fZ2V0QWxsS2V5cycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDE7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBvYmplY3RzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsT2JqZWN0cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBvYmpQcm9wcyA9IGdldEFsbEtleXMob2JqZWN0KSxcbiAgICAgIG9iakxlbmd0aCA9IG9ialByb3BzLmxlbmd0aCxcbiAgICAgIG90aFByb3BzID0gZ2V0QWxsS2V5cyhvdGhlciksXG4gICAgICBvdGhMZW5ndGggPSBvdGhQcm9wcy5sZW5ndGg7XG5cbiAgaWYgKG9iakxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIWlzUGFydGlhbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB2YXIgaW5kZXggPSBvYmpMZW5ndGg7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICBpZiAoIShpc1BhcnRpYWwgPyBrZXkgaW4gb3RoZXIgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG90aGVyLCBrZXkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgb2JqU3RhY2tlZCA9IHN0YWNrLmdldChvYmplY3QpO1xuICB2YXIgb3RoU3RhY2tlZCA9IHN0YWNrLmdldChvdGhlcik7XG4gIGlmIChvYmpTdGFja2VkICYmIG90aFN0YWNrZWQpIHtcbiAgICByZXR1cm4gb2JqU3RhY2tlZCA9PSBvdGhlciAmJiBvdGhTdGFja2VkID09IG9iamVjdDtcbiAgfVxuICB2YXIgcmVzdWx0ID0gdHJ1ZTtcbiAgc3RhY2suc2V0KG9iamVjdCwgb3RoZXIpO1xuICBzdGFjay5zZXQob3RoZXIsIG9iamVjdCk7XG5cbiAgdmFyIHNraXBDdG9yID0gaXNQYXJ0aWFsO1xuICB3aGlsZSAoKytpbmRleCA8IG9iakxlbmd0aCkge1xuICAgIGtleSA9IG9ialByb3BzW2luZGV4XTtcbiAgICB2YXIgb2JqVmFsdWUgPSBvYmplY3Rba2V5XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltrZXldO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIG9ialZhbHVlLCBrZXksIG90aGVyLCBvYmplY3QsIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIob2JqVmFsdWUsIG90aFZhbHVlLCBrZXksIG9iamVjdCwgb3RoZXIsIHN0YWNrKTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBvYmplY3RzIChzdXNjZXB0aWJsZSB0byBjYWxsIHN0YWNrIGxpbWl0cykuXG4gICAgaWYgKCEoY29tcGFyZWQgPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gKG9ialZhbHVlID09PSBvdGhWYWx1ZSB8fCBlcXVhbEZ1bmMob2JqVmFsdWUsIG90aFZhbHVlLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykpXG4gICAgICAgICAgOiBjb21wYXJlZFxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBza2lwQ3RvciB8fCAoc2tpcEN0b3IgPSBrZXkgPT0gJ2NvbnN0cnVjdG9yJyk7XG4gIH1cbiAgaWYgKHJlc3VsdCAmJiAhc2tpcEN0b3IpIHtcbiAgICB2YXIgb2JqQ3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcixcbiAgICAgICAgb3RoQ3RvciA9IG90aGVyLmNvbnN0cnVjdG9yO1xuXG4gICAgLy8gTm9uIGBPYmplY3RgIG9iamVjdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgY29uc3RydWN0b3JzIGFyZSBub3QgZXF1YWwuXG4gICAgaWYgKG9iakN0b3IgIT0gb3RoQ3RvciAmJlxuICAgICAgICAoJ2NvbnN0cnVjdG9yJyBpbiBvYmplY3QgJiYgJ2NvbnN0cnVjdG9yJyBpbiBvdGhlcikgJiZcbiAgICAgICAgISh0eXBlb2Ygb2JqQ3RvciA9PSAnZnVuY3Rpb24nICYmIG9iakN0b3IgaW5zdGFuY2VvZiBvYmpDdG9yICYmXG4gICAgICAgICAgdHlwZW9mIG90aEN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBvdGhDdG9yIGluc3RhbmNlb2Ygb3RoQ3RvcikpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10ob2JqZWN0KTtcbiAgc3RhY2tbJ2RlbGV0ZSddKG90aGVyKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcXVhbE9iamVjdHM7XG4iLCJ2YXIgYmFzZUdldEFsbEtleXMgPSByZXF1aXJlKCcuL19iYXNlR2V0QWxsS2V5cycpLFxuICAgIGdldFN5bWJvbHMgPSByZXF1aXJlKCcuL19nZXRTeW1ib2xzJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2Ygb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7XG4gIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMsIGdldFN5bWJvbHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEFsbEtleXM7XG4iLCJ2YXIgYXJyYXlQdXNoID0gcmVxdWlyZSgnLi9fYXJyYXlQdXNoJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRBbGxLZXlzYCBhbmQgYGdldEFsbEtleXNJbmAgd2hpY2ggdXNlc1xuICogYGtleXNGdW5jYCBhbmQgYHN5bWJvbHNGdW5jYCB0byBnZXQgdGhlIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgYW5kXG4gKiBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3ltYm9sc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGdldCB0aGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgYW5kIHN5bWJvbHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5c0Z1bmMsIHN5bWJvbHNGdW5jKSB7XG4gIHZhciByZXN1bHQgPSBrZXlzRnVuYyhvYmplY3QpO1xuICByZXR1cm4gaXNBcnJheShvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldEFsbEtleXM7XG4iLCIvKipcbiAqIEFwcGVuZHMgdGhlIGVsZW1lbnRzIG9mIGB2YWx1ZXNgIHRvIGBhcnJheWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0FycmF5fSB2YWx1ZXMgVGhlIHZhbHVlcyB0byBhcHBlbmQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLFxuICAgICAgb2Zmc2V0ID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgYXJyYXlbb2Zmc2V0ICsgaW5kZXhdID0gdmFsdWVzW2luZGV4XTtcbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlQdXNoO1xuIiwidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBzdHViQXJyYXkgPSByZXF1aXJlKCcuL3N0dWJBcnJheScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBzeW1ib2xzLlxuICovXG52YXIgZ2V0U3ltYm9scyA9ICFuYXRpdmVHZXRTeW1ib2xzID8gc3R1YkFycmF5IDogZnVuY3Rpb24ob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgcmV0dXJuIGFycmF5RmlsdGVyKG5hdGl2ZUdldFN5bWJvbHMob2JqZWN0KSwgZnVuY3Rpb24oc3ltYm9sKSB7XG4gICAgcmV0dXJuIHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCBzeW1ib2wpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0U3ltYm9scztcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBhIG5ldyBlbXB0eSBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGVtcHR5IGFycmF5LlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYXJyYXlzID0gXy50aW1lcygyLCBfLnN0dWJBcnJheSk7XG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzKTtcbiAqIC8vID0+IFtbXSwgW11dXG4gKlxuICogY29uc29sZS5sb2coYXJyYXlzWzBdID09PSBhcnJheXNbMV0pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gc3R1YkFycmF5KCkge1xuICByZXR1cm4gW107XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkFycmF5O1xuIiwidmFyIGJhc2VUaW1lcyA9IHJlcXVpcmUoJy4vX2Jhc2VUaW1lcycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vaXNUeXBlZEFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBvZiB0aGUgYXJyYXktbGlrZSBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gaW5oZXJpdGVkIFNwZWNpZnkgcmV0dXJuaW5nIGluaGVyaXRlZCBwcm9wZXJ0eSBuYW1lcy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TGlrZUtleXModmFsdWUsIGluaGVyaXRlZCkge1xuICB2YXIgaXNBcnIgPSBpc0FycmF5KHZhbHVlKSxcbiAgICAgIGlzQXJnID0gIWlzQXJyICYmIGlzQXJndW1lbnRzKHZhbHVlKSxcbiAgICAgIGlzQnVmZiA9ICFpc0FyciAmJiAhaXNBcmcgJiYgaXNCdWZmZXIodmFsdWUpLFxuICAgICAgaXNUeXBlID0gIWlzQXJyICYmICFpc0FyZyAmJiAhaXNCdWZmICYmIGlzVHlwZWRBcnJheSh2YWx1ZSksXG4gICAgICBza2lwSW5kZXhlcyA9IGlzQXJyIHx8IGlzQXJnIHx8IGlzQnVmZiB8fCBpc1R5cGUsXG4gICAgICByZXN1bHQgPSBza2lwSW5kZXhlcyA/IGJhc2VUaW1lcyh2YWx1ZS5sZW5ndGgsIFN0cmluZykgOiBbXSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgZm9yICh2YXIga2V5IGluIHZhbHVlKSB7XG4gICAgaWYgKChpbmhlcml0ZWQgfHwgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkgJiZcbiAgICAgICAgIShza2lwSW5kZXhlcyAmJiAoXG4gICAgICAgICAgIC8vIFNhZmFyaSA5IGhhcyBlbnVtZXJhYmxlIGBhcmd1bWVudHMubGVuZ3RoYCBpbiBzdHJpY3QgbW9kZS5cbiAgICAgICAgICAga2V5ID09ICdsZW5ndGgnIHx8XG4gICAgICAgICAgIC8vIE5vZGUuanMgMC4xMCBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiBidWZmZXJzLlxuICAgICAgICAgICAoaXNCdWZmICYmIChrZXkgPT0gJ29mZnNldCcgfHwga2V5ID09ICdwYXJlbnQnKSkgfHxcbiAgICAgICAgICAgLy8gUGhhbnRvbUpTIDIgaGFzIGVudW1lcmFibGUgbm9uLWluZGV4IHByb3BlcnRpZXMgb24gdHlwZWQgYXJyYXlzLlxuICAgICAgICAgICAoaXNUeXBlICYmIChrZXkgPT0gJ2J1ZmZlcicgfHwga2V5ID09ICdieXRlTGVuZ3RoJyB8fCBrZXkgPT0gJ2J5dGVPZmZzZXQnKSkgfHxcbiAgICAgICAgICAgLy8gU2tpcCBpbmRleCBwcm9wZXJ0aWVzLlxuICAgICAgICAgICBpc0luZGV4KGtleSwgbGVuZ3RoKVxuICAgICAgICApKSkge1xuICAgICAgcmVzdWx0LnB1c2goa2V5KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUxpa2VLZXlzO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50aW1lc2Agd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzXG4gKiBvciBtYXggYXJyYXkgbGVuZ3RoIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IG4gVGhlIG51bWJlciBvZiB0aW1lcyB0byBpbnZva2UgYGl0ZXJhdGVlYC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUaW1lcyhuLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbikge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVGltZXM7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzQXJndW1lbnRzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc0FyZ3VtZW50cyh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBhcmdzVGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc0FyZ3VtZW50cztcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyBgZmFsc2VgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50aW1lcygyLCBfLnN0dWJGYWxzZSk7XG4gKiAvLyA9PiBbZmFsc2UsIGZhbHNlXVxuICovXG5mdW5jdGlvbiBzdHViRmFsc2UoKSB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViRmFsc2U7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIG9iamVjdFRhZyA9ICdbb2JqZWN0IE9iamVjdF0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBhcnJheUJ1ZmZlclRhZyA9ICdbb2JqZWN0IEFycmF5QnVmZmVyXScsXG4gICAgZGF0YVZpZXdUYWcgPSAnW29iamVjdCBEYXRhVmlld10nLFxuICAgIGZsb2F0MzJUYWcgPSAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICBmbG9hdDY0VGFnID0gJ1tvYmplY3QgRmxvYXQ2NEFycmF5XScsXG4gICAgaW50OFRhZyA9ICdbb2JqZWN0IEludDhBcnJheV0nLFxuICAgIGludDE2VGFnID0gJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgIGludDMyVGFnID0gJ1tvYmplY3QgSW50MzJBcnJheV0nLFxuICAgIHVpbnQ4VGFnID0gJ1tvYmplY3QgVWludDhBcnJheV0nLFxuICAgIHVpbnQ4Q2xhbXBlZFRhZyA9ICdbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XScsXG4gICAgdWludDE2VGFnID0gJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICB1aW50MzJUYWcgPSAnW29iamVjdCBVaW50MzJBcnJheV0nO1xuXG4vKiogVXNlZCB0byBpZGVudGlmeSBgdG9TdHJpbmdUYWdgIHZhbHVlcyBvZiB0eXBlZCBhcnJheXMuICovXG52YXIgdHlwZWRBcnJheVRhZ3MgPSB7fTtcbnR5cGVkQXJyYXlUYWdzW2Zsb2F0MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbZmxvYXQ2NFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50OFRhZ10gPSB0eXBlZEFycmF5VGFnc1tpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbaW50MzJUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDhUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQ4Q2xhbXBlZFRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW3VpbnQzMlRhZ10gPSB0cnVlO1xudHlwZWRBcnJheVRhZ3NbYXJnc1RhZ10gPSB0eXBlZEFycmF5VGFnc1thcnJheVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbYXJyYXlCdWZmZXJUYWddID0gdHlwZWRBcnJheVRhZ3NbYm9vbFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZGF0YVZpZXdUYWddID0gdHlwZWRBcnJheVRhZ3NbZGF0ZVRhZ10gPVxudHlwZWRBcnJheVRhZ3NbZXJyb3JUYWddID0gdHlwZWRBcnJheVRhZ3NbZnVuY1RhZ10gPVxudHlwZWRBcnJheVRhZ3NbbWFwVGFnXSA9IHR5cGVkQXJyYXlUYWdzW251bWJlclRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbb2JqZWN0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3JlZ2V4cFRhZ10gPVxudHlwZWRBcnJheVRhZ3Nbc2V0VGFnXSA9IHR5cGVkQXJyYXlUYWdzW3N0cmluZ1RhZ10gPVxudHlwZWRBcnJheVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc1R5cGVkQXJyYXlgIHdpdGhvdXQgTm9kZS5qcyBvcHRpbWl6YXRpb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzVHlwZWRBcnJheSh2YWx1ZSkge1xuICByZXR1cm4gaXNPYmplY3RMaWtlKHZhbHVlKSAmJlxuICAgIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgISF0eXBlZEFycmF5VGFnc1tiYXNlR2V0VGFnKHZhbHVlKV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzVHlwZWRBcnJheTtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udW5hcnlgIHdpdGhvdXQgc3VwcG9ydCBmb3Igc3RvcmluZyBtZXRhZGF0YS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FwIGFyZ3VtZW50cyBmb3IuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VVbmFyeShmdW5jKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jKHZhbHVlKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVW5hcnk7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHByb2Nlc3NgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlUHJvY2VzcyA9IG1vZHVsZUV4cG9ydHMgJiYgZnJlZUdsb2JhbC5wcm9jZXNzO1xuXG4vKiogVXNlZCB0byBhY2Nlc3MgZmFzdGVyIE5vZGUuanMgaGVscGVycy4gKi9cbnZhciBub2RlVXRpbCA9IChmdW5jdGlvbigpIHtcbiAgdHJ5IHtcbiAgICAvLyBVc2UgYHV0aWwudHlwZXNgIGZvciBOb2RlLmpzIDEwKy5cbiAgICB2YXIgdHlwZXMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUucmVxdWlyZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUoJ3V0aWwnKS50eXBlcztcblxuICAgIGlmICh0eXBlcykge1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIC8vIExlZ2FjeSBgcHJvY2Vzcy5iaW5kaW5nKCd1dGlsJylgIGZvciBOb2RlLmpzIDwgMTAuXG4gICAgcmV0dXJuIGZyZWVQcm9jZXNzICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcgJiYgZnJlZVByb2Nlc3MuYmluZGluZygndXRpbCcpO1xuICB9IGNhdGNoIChlKSB7fVxufSgpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBub2RlVXRpbDtcbiIsInZhciBvdmVyQXJnID0gcmVxdWlyZSgnLi9fb3ZlckFyZycpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlS2V5cyA9IG92ZXJBcmcoT2JqZWN0LmtleXMsIE9iamVjdCk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlS2V5cztcbiIsIi8qKlxuICogQ3JlYXRlcyBhIHVuYXJ5IGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBgZnVuY2Agd2l0aCBpdHMgYXJndW1lbnQgdHJhbnNmb3JtZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB0cmFuc2Zvcm0gVGhlIGFyZ3VtZW50IHRyYW5zZm9ybS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBvdmVyQXJnKGZ1bmMsIHRyYW5zZm9ybSkge1xuICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtKGFyZykpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJBcmc7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXRjaERhdGE7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpLFxuICAgIGdldCA9IHJlcXVpcmUoJy4vZ2V0JyksXG4gICAgaGFzSW4gPSByZXF1aXJlKCcuL2hhc0luJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlc1Byb3BlcnR5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCJ2YXIgYmFzZUhhc0luID0gcmVxdWlyZSgnLi9fYmFzZUhhc0luJyksXG4gICAgaGFzUGF0aCA9IHJlcXVpcmUoJy4vX2hhc1BhdGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGlzIGEgZGlyZWN0IG9yIGluaGVyaXRlZCBwcm9wZXJ0eSBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSBfLmNyZWF0ZSh7ICdhJzogXy5jcmVhdGUoeyAnYic6IDIgfSkgfSk7XG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdhLmInKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsICdiJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBoYXNJbihvYmplY3QsIHBhdGgpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBiYXNlSGFzSW4pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc0luO1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5oYXNJbmAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBrZXkgVGhlIGtleSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUhhc0luKG9iamVjdCwga2V5KSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBrZXkgaW4gT2JqZWN0KG9iamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUhhc0luO1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNJbmRleCA9IHJlcXVpcmUoJy4vX2lzSW5kZXgnKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBleGlzdHMgb24gYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFzRnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2sgcHJvcGVydGllcy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgcGF0aGAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc1BhdGgob2JqZWN0LCBwYXRoLCBoYXNGdW5jKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBmYWxzZTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBrZXkgPSB0b0tleShwYXRoW2luZGV4XSk7XG4gICAgaWYgKCEocmVzdWx0ID0gb2JqZWN0ICE9IG51bGwgJiYgaGFzRnVuYyhvYmplY3QsIGtleSkpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgb2JqZWN0ID0gb2JqZWN0W2tleV07XG4gIH1cbiAgaWYgKHJlc3VsdCB8fCArK2luZGV4ICE9IGxlbmd0aCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgbGVuZ3RoID0gb2JqZWN0ID09IG51bGwgPyAwIDogb2JqZWN0Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGlzTGVuZ3RoKGxlbmd0aCkgJiYgaXNJbmRleChrZXksIGxlbmd0aCkgJiZcbiAgICAoaXNBcnJheShvYmplY3QpIHx8IGlzQXJndW1lbnRzKG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1BhdGg7XG4iLCJ2YXIgYmFzZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5JyksXG4gICAgYmFzZVByb3BlcnR5RGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eURlZXAnKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFtcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcbiAqICAgeyAnYSc6IHsgJ2InOiAxIH0gfVxuICogXTtcbiAqXG4gKiBfLm1hcChvYmplY3RzLCBfLnByb3BlcnR5KCdhLmInKSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqXG4gKiBfLm1hcChfLnNvcnRCeShvYmplY3RzLCBfLnByb3BlcnR5KFsnYScsICdiJ10pKSwgJ2EuYicpO1xuICogLy8gPT4gWzEsIDJdXG4gKi9cbmZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHtcbiAgcmV0dXJuIGlzS2V5KHBhdGgpID8gYmFzZVByb3BlcnR5KHRvS2V5KHBhdGgpKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvcGVydHk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHlEZWVwO1xuIiwidmFyIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXBgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hcChjb2xsZWN0aW9uLCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IGlzQXJyYXlMaWtlKGNvbGxlY3Rpb24pID8gQXJyYXkoY29sbGVjdGlvbi5sZW5ndGgpIDogW107XG5cbiAgYmFzZUVhY2goY29sbGVjdGlvbiwgZnVuY3Rpb24odmFsdWUsIGtleSwgY29sbGVjdGlvbikge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IGl0ZXJhdGVlKHZhbHVlLCBrZXksIGNvbGxlY3Rpb24pO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWFwO1xuIiwidmFyIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvck93bjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VGb3I7XG4iLCJ2YXIgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBiYXNlRWFjaGAgb3IgYGJhc2VFYWNoUmlnaHRgIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlYWNoRnVuYyBUaGUgZnVuY3Rpb24gdG8gaXRlcmF0ZSBvdmVyIGEgY29sbGVjdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUVhY2goZWFjaEZ1bmMsIGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgaXRlcmF0ZWUpIHtcbiAgICBpZiAoY29sbGVjdGlvbiA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY29sbGVjdGlvbjtcbiAgICB9XG4gICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIGVhY2hGdW5jKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuICAgICAgICBpbmRleCA9IGZyb21SaWdodCA/IGxlbmd0aCA6IC0xLFxuICAgICAgICBpdGVyYWJsZSA9IE9iamVjdChjb2xsZWN0aW9uKTtcblxuICAgIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVbaW5kZXhdLCBpbmRleCwgaXRlcmFibGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmFzZUVhY2g7XG4iLCJ2YXIgYmFzZUVhY2ggPSByZXF1aXJlKCcuL19iYXNlRWFjaCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbHRlcmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGZpbHRlcmVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBiYXNlRmlsdGVyKGNvbGxlY3Rpb24sIHByZWRpY2F0ZSkge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGJhc2VFYWNoKGNvbGxlY3Rpb24sIGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikge1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBjb2xsZWN0aW9uKSkge1xuICAgICAgcmVzdWx0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZpbHRlcjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaW5kSW5kZXg7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpY3RJbmRleE9mO1xuIiwidmFyIGJhc2VUcmltID0gcmVxdWlyZSgnLi9fYmFzZVRyaW0nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9OdW1iZXI7XG4iLCJ2YXIgdHJpbW1lZEVuZEluZGV4ID0gcmVxdWlyZSgnLi9fdHJpbW1lZEVuZEluZGV4Jyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgPyBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4KHN0cmluZykgKyAxKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVHJpbTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xudmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpIHtcbiAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gIHJldHVybiBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmltbWVkRW5kSW5kZXg7XG4iLCJ2YXIgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBvcHRpb25hbCBgdGhpc2BcbiAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpIHtcbiAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gZm4uYXBwbHkoaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmluZDtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtudW1iZXJ9IGFyaXR5IFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSkge1xuICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKTtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICA/IFtdXG4gICAgICA6IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcblxuICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUN1cnJ5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBudW1iZXIgb2YgYHBsYWNlaG9sZGVyYCBvY2N1cnJlbmNlcyBpbiBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAqL1xuZnVuY3Rpb24gY291bnRIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gMDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoYXJyYXlbbGVuZ3RoXSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICsrcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvdW50SG9sZGVycztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgZ2V0RGF0YSA9IHJlcXVpcmUoJy4vX2dldERhdGEnKSxcbiAgICBnZXRGdW5jTmFtZSA9IHJlcXVpcmUoJy4vX2dldEZ1bmNOYW1lJyksXG4gICAgbG9kYXNoID0gcmVxdWlyZSgnLi93cmFwcGVyTG9kYXNoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTGF6aWFibGUoZnVuYykge1xuICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgIG90aGVyID0gbG9kYXNoW2Z1bmNOYW1lXTtcblxuICBpZiAodHlwZW9mIG90aGVyICE9ICdmdW5jdGlvbicgfHwgIShmdW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChmdW5jID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBkYXRhID0gZ2V0RGF0YShvdGhlcik7XG4gIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xhemlhYmxlO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIHJlYWxOYW1lcyA9IHJlcXVpcmUoJy4vX3JlYWxOYW1lcycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRGdW5jTmFtZTtcbiIsIi8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xudmFyIHJlYWxOYW1lcyA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWxOYW1lcztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpLFxuICAgIHdyYXBwZXJDbG9uZSA9IHJlcXVpcmUoJy4vX3dyYXBwZXJDbG9uZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgbG9kYXNoYCBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgaW1wbGljaXQgbWV0aG9kXG4gKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAqIGFuZCBmdW5jdGlvbnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIE1ldGhvZHMgdGhhdCByZXRyaWV2ZSBhIHNpbmdsZSB2YWx1ZVxuICogb3IgbWF5IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiBzZXF1ZW5jZVxuICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICogd2l0aCBgXyN2YWx1ZWAuXG4gKlxuICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gKiBlbmFibGVkIHVzaW5nIGBfLmNoYWluYC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gKiBgXyN2YWx1ZWAgaXMgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNhbGxlZC5cbiAqXG4gKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAqIFNob3J0Y3V0IGZ1c2lvbiBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWVyZ2UgaXRlcmF0ZWUgY2FsbHM7IHRoaXMgYXZvaWRzXG4gKiB0aGUgY3JlYXRpb24gb2YgaW50ZXJtZWRpYXRlIGFycmF5cyBhbmQgY2FuIGdyZWF0bHkgcmVkdWNlIHRoZSBudW1iZXIgb2ZcbiAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpZiB0aGUgc2VjdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGFycmF5IGFuZCBpdGVyYXRlZXMgYWNjZXB0IG9ubHlcbiAqIG9uZSBhcmd1bWVudC4gVGhlIGhldXJpc3RpYyBmb3Igd2hldGhlciBhIHNlY3Rpb24gcXVhbGlmaWVzIGZvciBzaG9ydGN1dFxuICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICpcbiAqIENoYWluaW5nIGlzIHN1cHBvcnRlZCBpbiBjdXN0b20gYnVpbGRzIGFzIGxvbmcgYXMgdGhlIGBfI3ZhbHVlYCBtZXRob2QgaXNcbiAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGxvZGFzaCBtZXRob2RzLCB3cmFwcGVycyBoYXZlIGBBcnJheWAgYW5kIGBTdHJpbmdgIG1ldGhvZHMuXG4gKlxuICogVGhlIHdyYXBwZXIgYEFycmF5YCBtZXRob2RzIGFyZTpcbiAqIGBjb25jYXRgLCBgam9pbmAsIGBwb3BgLCBgcHVzaGAsIGBzaGlmdGAsIGBzb3J0YCwgYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBgU3RyaW5nYCBtZXRob2RzIGFyZTpcbiAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICpcbiAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbiBhcmU6XG4gKiBgYXRgLCBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCwgYGZpbmRgLFxuICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gKiBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBhbmQgYHRvQXJyYXlgXG4gKlxuICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXNzaWduSW5gLCBgYXNzaWduSW5XaXRoYCwgYGFzc2lnbldpdGhgLCBgYXRgLFxuICogYGJlZm9yZWAsIGBiaW5kYCwgYGJpbmRBbGxgLCBgYmluZEtleWAsIGBjYXN0QXJyYXlgLCBgY2hhaW5gLCBgY2h1bmtgLFxuICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gKiBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGRlZmVyYCwgYGRlbGF5YCxcbiAqIGBkaWZmZXJlbmNlYCwgYGRpZmZlcmVuY2VCeWAsIGBkaWZmZXJlbmNlV2l0aGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsXG4gKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAqIGBmbGF0TWFwYCwgYGZsYXRNYXBEZWVwYCwgYGZsYXRNYXBEZXB0aGAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCxcbiAqIGBmbGF0dGVuRGVwdGhgLCBgZmxpcGAsIGBmbG93YCwgYGZsb3dSaWdodGAsIGBmcm9tUGFpcnNgLCBgZnVuY3Rpb25zYCxcbiAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAqIGBpbnRlcnNlY3Rpb25XaXRoYCwgYGludmVydGAsIGBpbnZlcnRCeWAsIGBpbnZva2VNYXBgLCBgaXRlcmF0ZWVgLCBga2V5QnlgLFxuICogYGtleXNgLCBga2V5c0luYCwgYG1hcGAsIGBtYXBLZXlzYCwgYG1hcFZhbHVlc2AsIGBtYXRjaGVzYCwgYG1hdGNoZXNQcm9wZXJ0eWAsXG4gKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gKiBgbnRoQXJnYCwgYG9taXRgLCBgb21pdEJ5YCwgYG9uY2VgLCBgb3JkZXJCeWAsIGBvdmVyYCwgYG92ZXJBcmdzYCxcbiAqIGBvdmVyRXZlcnlgLCBgb3ZlclNvbWVgLCBgcGFydGlhbGAsIGBwYXJ0aWFsUmlnaHRgLCBgcGFydGl0aW9uYCwgYHBpY2tgLFxuICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICogYHB1bGxBbGxXaXRoYCwgYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVhcmdgLCBgcmVqZWN0YCxcbiAqIGByZW1vdmVgLCBgcmVzdGAsIGByZXZlcnNlYCwgYHNhbXBsZVNpemVgLCBgc2V0YCwgYHNldFdpdGhgLCBgc2h1ZmZsZWAsXG4gKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAqIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdG9BcnJheWAsXG4gKiBgdG9QYWlyc2AsIGB0b1BhaXJzSW5gLCBgdG9QYXRoYCwgYHRvUGxhaW5PYmplY3RgLCBgdHJhbnNmb3JtYCwgYHVuYXJ5YCxcbiAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gKiBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdXBkYXRlYCwgYHVwZGF0ZVdpdGhgLCBgdmFsdWVzYCxcbiAqIGB2YWx1ZXNJbmAsIGB3aXRob3V0YCwgYHdyYXBgLCBgeG9yYCwgYHhvckJ5YCwgYHhvcldpdGhgLCBgemlwYCxcbiAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICogYGNsb25lRGVlcGAsIGBjbG9uZURlZXBXaXRoYCwgYGNsb25lV2l0aGAsIGBjb25mb3Jtc1RvYCwgYGRlYnVycmAsXG4gKiBgZGVmYXVsdFRvYCwgYGRpdmlkZWAsIGBlYWNoYCwgYGVhY2hSaWdodGAsIGBlbmRzV2l0aGAsIGBlcWAsIGBlc2NhcGVgLFxuICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAqIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpcnN0YCwgYGZsb29yYCwgYGZvckVhY2hgLCBgZm9yRWFjaFJpZ2h0YCxcbiAqIGBmb3JJbmAsIGBmb3JJblJpZ2h0YCwgYGZvck93bmAsIGBmb3JPd25SaWdodGAsIGBnZXRgLCBgZ3RgLCBgZ3RlYCwgYGhhc2AsXG4gKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAqIGBpc0FyZ3VtZW50c2AsIGBpc0FycmF5YCwgYGlzQXJyYXlCdWZmZXJgLCBgaXNBcnJheUxpa2VgLCBgaXNBcnJheUxpa2VPYmplY3RgLFxuICogYGlzQm9vbGVhbmAsIGBpc0J1ZmZlcmAsIGBpc0RhdGVgLCBgaXNFbGVtZW50YCwgYGlzRW1wdHlgLCBgaXNFcXVhbGAsXG4gKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gKiBgaXNNYXBgLCBgaXNNYXRjaGAsIGBpc01hdGNoV2l0aGAsIGBpc05hTmAsIGBpc05hdGl2ZWAsIGBpc05pbGAsIGBpc051bGxgLFxuICogYGlzTnVtYmVyYCwgYGlzT2JqZWN0YCwgYGlzT2JqZWN0TGlrZWAsIGBpc1BsYWluT2JqZWN0YCwgYGlzUmVnRXhwYCxcbiAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gKiBgaXNXZWFrTWFwYCwgYGlzV2Vha1NldGAsIGBqb2luYCwgYGtlYmFiQ2FzZWAsIGBsYXN0YCwgYGxhc3RJbmRleE9mYCxcbiAqIGBsb3dlckNhc2VgLCBgbG93ZXJGaXJzdGAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1heEJ5YCwgYG1lYW5gLCBgbWVhbkJ5YCxcbiAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAqIGBwYWRFbmRgLCBgcGFkU3RhcnRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLCBgcmVkdWNlUmlnaHRgLFxuICogYHJlcGVhdGAsIGByZXN1bHRgLCBgcm91bmRgLCBgcnVuSW5Db250ZXh0YCwgYHNhbXBsZWAsIGBzaGlmdGAsIGBzaXplYCxcbiAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gKiBgc29ydGVkTGFzdEluZGV4QnlgLCBgc3RhcnRDYXNlYCwgYHN0YXJ0c1dpdGhgLCBgc3R1YkFycmF5YCwgYHN0dWJGYWxzZWAsXG4gKiBgc3R1Yk9iamVjdGAsIGBzdHViU3RyaW5nYCwgYHN0dWJUcnVlYCwgYHN1YnRyYWN0YCwgYHN1bWAsIGBzdW1CeWAsXG4gKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gKiBgdG9Mb3dlcmAsIGB0b051bWJlcmAsIGB0b1NhZmVJbnRlZ2VyYCwgYHRvU3RyaW5nYCwgYHRvVXBwZXJgLCBgdHJpbWAsXG4gKiBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBgdHJ1bmNhdGVgLCBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdXBwZXJDYXNlYCxcbiAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAqXG4gKiBAbmFtZSBfXG4gKiBAY29uc3RydWN0b3JcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gKlxuICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gKiB3cmFwcGVkLnJlZHVjZShfLmFkZCk7XG4gKiAvLyA9PiA2XG4gKlxuICogLy8gUmV0dXJucyBhIHdyYXBwZWQgdmFsdWUuXG4gKiB2YXIgc3F1YXJlcyA9IHdyYXBwZWQubWFwKHNxdWFyZSk7XG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoc3F1YXJlcy52YWx1ZSgpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gbG9kYXNoKHZhbHVlKSB7XG4gIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xufVxuXG4vLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG5sb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG5sb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZGFzaDtcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICovXG5mdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18pO1xuICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gIHJlc3VsdC5fX3ZhbHVlc19fID0gd3JhcHBlci5fX3ZhbHVlc19fO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBwZXJDbG9uZTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xudmFyIHJlV3JhcERldGFpbHMgPSAvXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sXG4gICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvO1xuXG4vKipcbiAqIEV4dHJhY3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2ggPSBzb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFdyYXBEZXRhaWxzO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwQ29tbWVudCA9IC9cXHsoPzpcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoIC4rXFxdIFxcKlxcLyk/XFxuPy87XG5cbi8qKlxuICogSW5zZXJ0cyB3cmFwcGVyIGBkZXRhaWxzYCBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgYHNvdXJjZWAgYm9keS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIG1vZGlmeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBpbnNlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtb2RpZmllZCBzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgZGV0YWlscykge1xuICB2YXIgbGVuZ3RoID0gZGV0YWlscy5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgZGV0YWlsc1tsYXN0SW5kZXhdID0gKGxlbmd0aCA+IDEgPyAnJiAnIDogJycpICsgZGV0YWlsc1tsYXN0SW5kZXhdO1xuICBkZXRhaWxzID0gZGV0YWlscy5qb2luKGxlbmd0aCA+IDIgPyAnLCAnIDogJyAnKTtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKHJlV3JhcENvbW1lbnQsICd7XFxuLyogW3dyYXBwZWQgd2l0aCAnICsgZGV0YWlscyArICddICovXFxuJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0V3JhcERldGFpbHM7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG52YXIgd3JhcEZsYWdzID0gW1xuICBbJ2FyeScsIFdSQVBfQVJZX0ZMQUddLFxuICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gIFsnY3VycnknLCBXUkFQX0NVUlJZX0ZMQUddLFxuICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gIFsncGFydGlhbCcsIFdSQVBfUEFSVElBTF9GTEFHXSxcbiAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG5dO1xuXG4vKipcbiAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsIGJpdG1hc2spIHtcbiAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgIGlmICgoYml0bWFzayAmIHBhaXJbMV0pICYmICFhcnJheUluY2x1ZGVzKGRldGFpbHMsIHZhbHVlKSkge1xuICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlV3JhcERldGFpbHM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwidmFyIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlb3JkZXI7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpLFxuICAgIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAqIG9mIGB0aGlzQXJnYCBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpLFxuICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1srK2FyZ3NJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVBhcnRpYWw7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpO1xuXG4vKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG52YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgZnVuY3Rpb24gbWV0YWRhdGEgb2YgYHNvdXJjZWAgaW50byBgZGF0YWAuXG4gKlxuICogTWVyZ2luZyBtZXRhZGF0YSByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygd3JhcHBlcnMgdXNlZCB0byBpbnZva2UgYSBmdW5jdGlvbi5cbiAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBtZXRob2RzIGxpa2UgYF8uYmluZGAsIGBfLmN1cnJ5YCwgYW5kIGBfLnBhcnRpYWxgXG4gKiBtYXkgYmUgYXBwbGllZCByZWdhcmRsZXNzIG9mIGV4ZWN1dGlvbiBvcmRlci4gTWV0aG9kcyBsaWtlIGBfLmFyeWAgYW5kXG4gKiBgXy5yZWFyZ2AgbW9kaWZ5IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWFraW5nIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZVxuICogZXhlY3V0ZWQgaW1wb3J0YW50LCBwcmV2ZW50aW5nIHRoZSBtZXJnaW5nIG9mIG1ldGFkYXRhLiBIb3dldmVyLCB3ZSBtYWtlXG4gKiBhbiBleGNlcHRpb24gZm9yIGEgc2FmZSBjb21iaW5lZCBjYXNlIHdoZXJlIGN1cnJpZWQgZnVuY3Rpb25zIGhhdmUgYF8uYXJ5YFxuICogYW5kIG9yIGBfLnJlYXJnYCBhcHBsaWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBkZXN0aW5hdGlvbiBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgc291cmNlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkYXRhYC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsIHNvdXJjZSkge1xuICB2YXIgYml0bWFzayA9IGRhdGFbMV0sXG4gICAgICBzcmNCaXRtYXNrID0gc291cmNlWzFdLFxuICAgICAgbmV3Qml0bWFzayA9IGJpdG1hc2sgfCBzcmNCaXRtYXNrLFxuICAgICAgaXNDb21tb24gPSBuZXdCaXRtYXNrIDwgKFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHIHwgV1JBUF9BUllfRkxBRyk7XG5cbiAgdmFyIGlzQ29tYm8gPVxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX1JFQVJHX0ZMQUcpICYmIChkYXRhWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykpICYmIChzb3VyY2VbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSk7XG5cbiAgLy8gRXhpdCBlYXJseSBpZiBtZXRhZGF0YSBjYW4ndCBiZSBtZXJnZWQuXG4gIGlmICghKGlzQ29tbW9uIHx8IGlzQ29tYm8pKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgdGhpc0FyZ2AgaWYgYXZhaWxhYmxlLlxuICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQklORF9GTEFHKSB7XG4gICAgZGF0YVsyXSA9IHNvdXJjZVsyXTtcbiAgICAvLyBTZXQgd2hlbiBjdXJyeWluZyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgIG5ld0JpdG1hc2sgfD0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHID8gMCA6IFdSQVBfQ1VSUllfQk9VTkRfRkxBRztcbiAgfVxuICAvLyBDb21wb3NlIHBhcnRpYWwgYXJndW1lbnRzLlxuICB2YXIgdmFsdWUgPSBzb3VyY2VbM107XG4gIGlmICh2YWx1ZSkge1xuICAgIHZhciBwYXJ0aWFscyA9IGRhdGFbM107XG4gICAgZGF0YVszXSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3MocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNF0pIDogdmFsdWU7XG4gICAgZGF0YVs0XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVszXSwgUExBQ0VIT0xERVIpIDogc291cmNlWzRdO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuXG4gIHZhbHVlID0gc291cmNlWzVdO1xuICBpZiAodmFsdWUpIHtcbiAgICBwYXJ0aWFscyA9IGRhdGFbNV07XG4gICAgZGF0YVs1XSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3NSaWdodChwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs2XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzZdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzVdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNl07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJnUG9zYCBpZiBhdmFpbGFibGUuXG4gIHZhbHVlID0gc291cmNlWzddO1xuICBpZiAodmFsdWUpIHtcbiAgICBkYXRhWzddID0gdmFsdWU7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9BUllfRkxBRykge1xuICAgIGRhdGFbOF0gPSBkYXRhWzhdID09IG51bGwgPyBzb3VyY2VbOF0gOiBuYXRpdmVNaW4oZGF0YVs4XSwgc291cmNlWzhdKTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcml0eWAgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgaWYgKGRhdGFbOV0gPT0gbnVsbCkge1xuICAgIGRhdGFbOV0gPSBzb3VyY2VbOV07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuICBkYXRhWzBdID0gc291cmNlWzBdO1xuICBkYXRhWzFdID0gbmV3Qml0bWFzaztcblxuICByZXR1cm4gZGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZURhdGE7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwidmFyIGNhc3RTbGljZSA9IHJlcXVpcmUoJy4vX2Nhc3RTbGljZScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgc3RyaW5nVG9BcnJheSA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvQXJyYXknKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNhc2VGaXJzdDtcbiIsInZhciBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAqL1xuZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kO1xuICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0U2xpY2U7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwidmFyIGFzY2lpVG9BcnJheSA9IHJlcXVpcmUoJy4vX2FzY2lpVG9BcnJheScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgdW5pY29kZVRvQXJyYXkgPSByZXF1aXJlKCcuL191bmljb2RlVG9BcnJheScpO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgOiBhc2NpaVRvQXJyYXkoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmljb2RlVG9BcnJheTtcbiIsIi8qKlxuICogVmFsaWRhdGVzIGEgVVMgRHJpdmVycyBMaWNlbnNlIGdpdmVuIGEgdHdvIGxldHRlciBhYmJyZXZpYXRpb24gb2YgdGhlIFVTXG4gKiBTdGF0ZSB0byB2YWxpZGF0ZSBpdCBpbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGljZW5zZSBEcml2ZXJzIExpY2Vuc2UgdG8gdmFsaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgVHdvIENoYXJhY3RlciBBYmJyZXZpYXRpb24gZm9yIHRoZSBVUyBTdGF0ZSB0byB2YWxpZGF0ZVxuICogdGhlIGxpY2Vuc2UgaW4uXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGxpY2Vuc2UgaXMgdmFsaWQgb3Igbm90LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IGlzVmFsaWRVU0xpY2Vuc2UgfSA9IHJlcXVpcmUoJ0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlJylcbiAqXG4gKiBjb25zdCB2YWxpZCA9IGlzVmFsaWRVU0xpY2Vuc2UoJzEyMzQ1NjcnLCAnQUwnKVxuICogY29uc29sZS5sb2codmFsaWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBpc1ZhbGlkVVNMaWNlbnNlXG4gKi9cblxudmFyIGRyaXZlcnNMaWNlbnNlUmVnZXggPSByZXF1aXJlKFwiLi9saWNlbnNlLXJlZ2V4XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxpY2Vuc2UsIHN0YXRlKSB7XG4gIGlmICh0eXBlb2YgbGljZW5zZSAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygc3RhdGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgdmFyIHZhbGlkYXRvcnMgPSBkcml2ZXJzTGljZW5zZVJlZ2V4W3N0YXRlXTtcbiAgaWYgKCF2YWxpZGF0b3JzKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNsZWFuTGljZW5zZSA9IGxpY2Vuc2UucmVwbGFjZSgvW1xccy1dL2csICcnKTtcbiAgdmFyIHJlYXNvbnMgPSB2YWxpZGF0b3JzXG4gICAgLmZpbHRlcihmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiAhdmFsLnJlZ2V4LnRlc3QoY2xlYW5MaWNlbnNlKTtcbiAgICB9KVxuICAgIC5tYXAoZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gdmFsLmRlc2NyaXB0aW9uO1xuICAgIH0pO1xuICByZXR1cm4gcmVhc29ucy5sZW5ndGggPCB2YWxpZGF0b3JzLmxlbmd0aDtcbn07XG4iLCIvKipcbiAqIFZhbGlkYXRlcyBhIFVTIERyaXZlcnMgTGljZW5zZSBnaXZlbiBhIHR3byBsZXR0ZXIgYWJicmV2aWF0aW9uIG9mIHRoZSBVU1xuICogU3RhdGUgdG8gdmFsaWRhdGUgaXQgaW4uXG4gKiBTaW1pbGFyIHRvIGlzVmFsaWRVU0xpY2Vuc2UgYnV0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSAndmFsaWQnXG4gKiBib29sZWFuIHByb3BlcnR5IGZvciB0aGUgdmFsaWRhdGlvbiBpdHNlbGYsIGFzIHdlbGwgYXMgYSByZWFzb25zIGFycmF5IHRoYXRcbiAqIGF0dGVtcHRzIHRvIGV4cGxhaW4gdGhlIHJlc3VsdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsaWNlbnNlIERyaXZlcnMgTGljZW5zZSB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSBUd28gQ2hhcmFjdGVyIEFiYnJldmlhdGlvbiBmb3IgdGhlIFVTIFN0YXRlIHRvIHZhbGlkYXRlXG4gKiB0aGUgbGljZW5zZSBpbi5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSB2YWxpZGF0aW9uIGFuZCBhIHJlYXNvbnNcbiAqIGFycmF5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NycsICdBTCcpXG4gKiBjb25zb2xlLmxvZyh2YWxpZExpY2Vuc2UudmFsaWQpIC8vIHRydWVcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NzgnLCAnQUwnKSAvL1xuICogY29uc29sZS5sb2codmFsaWRMaWNlbnNlLnJlYXNvbnMpIC8vIFsnTGljZW5zZSBtdXN0IGJlIDEtNyBudW1iZXJzJ11cbiAqXG4gKiBAbmFtZSB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2VcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGljZW5zZSwgc3RhdGUpIHtcbiAgaWYgKHR5cGVvZiBsaWNlbnNlICE9PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBzdGF0ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgcmVhc29uczogWydMaWNlbnNlIGFuZCBTdGF0ZSBtdXN0IGJlIFN0cmluZ3MnXSB9O1xuICB9XG4gIHZhciB2YWxpZGF0b3JzID0gZHJpdmVyc0xpY2Vuc2VSZWdleFtzdGF0ZV07XG4gIGlmICghdmFsaWRhdG9ycykgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb25zOiBbJ05vdCBhIHZhbGlkIFVTIFN0YXRlJ10gfTtcbiAgY29uc3QgY2xlYW5MaWNlbnNlID0gbGljZW5zZS5yZXBsYWNlKC9bXFxzLV0vZywgJycpO1xuICB2YXIgcmVhc29ucyA9IHZhbGlkYXRvcnNcbiAgICAuZmlsdGVyKGZ1bmN0aW9uKHZhbCkge1xuICAgICAgcmV0dXJuICF2YWwucmVnZXgudGVzdChjbGVhbkxpY2Vuc2UpO1xuICAgIH0pXG4gICAgLm1hcChmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiB2YWwuZGVzY3JpcHRpb247XG4gICAgfSk7XG4gIHJldHVybiB7IHZhbGlkOiByZWFzb25zLmxlbmd0aCA8IHZhbGlkYXRvcnMubGVuZ3RoLCByZWFzb25zIH1cbn07XG4iLCIvKipcbiAqIExpc3Qgb2Ygc3VwcG9ydGVkIFVTIFN0YXRlcyBhcyBhbiBhcnJheVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHN1cHBvcnRlZFN0YXRlcyB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IGlzU3VwcG9ydGVkID0gY3VycmVudFN0YXRlcy5pbmNsdWRlcygnSUwnKVxuICogY29uc29sZS5sb2coaXNTdXBwb3J0ZWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBzdXBwb3J0ZWRTdGF0ZXNcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMoZHJpdmVyc0xpY2Vuc2VSZWdleCk7XG4iLCJ2YXIgYmFzZVJhbmdlID0gcmVxdWlyZSgnLi9fYmFzZVJhbmdlJyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpLFxuICAgIHRvRmluaXRlID0gcmVxdWlyZSgnLi90b0Zpbml0ZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIGlmIChzdGVwICYmIHR5cGVvZiBzdGVwICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0YXJ0LCBlbmQsIHN0ZXApKSB7XG4gICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgdGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICByZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmFuZ2U7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5nZWAgYW5kIGBfLnJhbmdlUmlnaHRgIHdoaWNoIGRvZXNuJ3RcbiAqIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBuYXRpdmVNYXgobmF0aXZlQ2VpbCgoZW5kIC0gc3RhcnQpIC8gKHN0ZXAgfHwgMSkpLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdID0gc3RhcnQ7XG4gICAgc3RhcnQgKz0gc3RlcDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSYW5nZTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJpbXBvcnQgeyBjcmVhdGUgfSBmcm9tIFwiYXBpc2F1Y2VcIjtcbmltcG9ydCB7IGJ0b2EgfSBmcm9tIFwiQmFzZTY0XCI7XG5cbmNsYXNzIEJhc2VBUEkge1xuICBjb25zdHJ1Y3RvcihiYXNlVVJMLCB0d2lsaW9LZXkpIHtcbiAgICBpZiAoYmFzZVVSTCkge1xuICAgICAgdGhpcy5hcGkgPSBjcmVhdGUoe1xuICAgICAgICBiYXNlVVJMLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHR3aWxpb0tleSkgeyB0aGlzLnR3aWxpb0tleSA9IHR3aWxpb0tleTsgfVxuICB9XG4gIHNldFRva2VuKHRva2VuKSB7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5hcGkuc2V0SGVhZGVycyh7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHNldFN0YXR1c1ByZWZlcmVuY2Uoc3RhdHVzKSB7XG4gICAgaWYgKCFzdGF0dXMpIHJldHVybiB0aGlzO1xuICAgIHRoaXMuYXBpLnNldEhlYWRlcnMoeyBQcmVmZXI6IGBzdGF0dXM9JHtzdGF0dXN9YCB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhcHByb3ZlV29ya2VyID0gKGlkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucHV0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9hcHByb3ZlYCwgcGFyYW1zKTtcbiAgd2l0aGRyYXdXb3JrZXIgPSAoaWQsIHBhcmFtcykgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS93aXRoZHJhd2AsIHBhcmFtcyk7XG4gIHJlamVjdFdvcmtlciA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnB1dChgL3BhcnRuZXJzL21lL3dvcmtlcnMvJHtpZH0vcmVqZWN0YCwgcGFyYW1zKTtcbiAgZ2V0TWVtYmVyID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL3BhcnRuZXJzL21lXCIpO1xuICBnZXRTZXR0aW5ncyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9wYXJ0bmVycy9zZXR0aW5nc1wiKTtcbiAgZ2V0V29ya2VycyA9IHBhcmFtcyA9PlxuICAgIHRoaXMuYXBpLmdldChgL3BhcnRuZXJzL21lL3dvcmtlcnM/cXVlcnk9JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfWApO1xuICBnZXRQZW5kaW5nV29ya2VycyA9IHBhcmFtcyA9PlxuICAgIHRoaXMuYXBpLmdldChgL2NvaG9ydC9jYW5kaWRhdGVzP3F1ZXJ5PSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gKTtcbiAgZ2V0V29ya2VyID0gaWQgPT4gdGhpcy5hcGkuZ2V0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfT9mdWxsPWZhbHNlYCk7XG4gIGNoZWNrV29ya2VyID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvcGFydG5lcnMvd29ya2Vyc1wiLCBwYXJhbXMpO1xuICB2YWxpZGF0ZVBob25lID0gcGhvbmUgPT5cbiAgICB0aGlzLmFwaS5nZXQoYFBob25lTnVtYmVycy8ke3Bob25lfT9UeXBlPWNhcnJpZXImQ291bnRyeUNvZGU9VVNgLCBudWxsLCB7XG4gICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGBCYXNpYyAke2J0b2EoVFdJTElPX0tFWSl9YCB9XG4gICAgfSk7XG4gIHZhbGlkYXRlRW1haWwgPSBlbWFpbCA9PlxuICAgIHRoaXMuYXBpLmdldChgL3ZlcmlmeV9lbWFpbD9lbWFpbD0ke2VuY29kZVVSSUNvbXBvbmVudChlbWFpbCl9YCk7XG4gIHZhbGlkYXRlU1NOID0gKGVtYWlsX2lkLCBzc24pID0+XG4gICAgdGhpcy5hcGkucG9zdChgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfS92YWxpZGF0ZWAsIHtcbiAgICAgIHNzblxuICAgIH0pO1xuICB2YWxpZGF0ZUNhbmRpZGF0ZUVtYWlsID0gKGVtYWlsX2lkLCBlbWFpbCkgPT5cbiAgICB0aGlzLmFwaS5nZXQoXG4gICAgICBgL2NhbmRpZGF0ZV92ZXJpZnlfZW1haWwvJHtlbWFpbF9pZH0/ZW1haWw9JHtlbmNvZGVVUklDb21wb25lbnQoZW1haWwpfWBcbiAgICApO1xuICBnZXRDYW5kaWRhdGVEYXRhID0gZW1haWxfaWQgPT5cbiAgICB0aGlzLmFwaS5nZXQoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH1gKTtcbiAgZ2V0SW50ZXJlc3RzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL2ludGVyZXN0c1wiKTtcbiAgZ2V0VHJhbnNwb3J0cyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi90cmFuc3BvcnRzXCIpO1xuICBnZXRQYXltZXRNZXRob2QgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvcGF5bWVudF9zZXR0aW5ncy9wYXJ0bmVyX21ldGhvZHNcIik7XG4gIGdldEJhY2tncm91bmRSZXBvcnQgPSAoZW1haWxfaWQsIHRva2VuKSA9PlxuICAgIHRoaXMuYXBpLmdldChcbiAgICAgIGAvY2FuZGlkYXRlX2NvbnNlbnRfZW1haWwvY2FuZGlkYXRlLyR7ZW1haWxfaWR9L3JlcG9ydD90b2tlbj0ke3Rva2VufWBcbiAgICApO1xuICBwcm92aWRlQ2FuZGlkYXRlQ29uc2VudCA9IChlbWFpbF9pZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH1gLCBwYXJhbXMpO1xuICBwcm92aWRlQ2FuZGlkYXRlQ29uc2VudEFzeW5jID0gKGVtYWlsX2lkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucG9zdChcbiAgICAgIGAvY2FuZGlkYXRlX2NvbnNlbnRfZW1haWwvY2FuZGlkYXRlLyR7ZW1haWxfaWR9L2FzeW5jYCxcbiAgICAgIHBhcmFtc1xuICAgICk7XG4gIGdldFRyaWFsU3RhdHVzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL29yZ2FuaXphdGlvbnMvdHJpYWxfc3RhdHVzXCIpO1xuICBuZXdDYW5kaWRhdGUgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvb3JnYW5pemF0aW9ucy9uZXdfY2FuZGlkYXRlXCIpO1xuICBnZXRUZXJtcyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9wYXJ0bmVycy90ZXJtc1wiKTtcbiAgY29uc2VudCA9IHBhcmFtcyA9PiB0aGlzLmFwaS5wb3N0KFwiL3BhcnRuZXJzL21lL2NvbnNlbnRcIiwgcGFyYW1zKTtcbiAgYXBwbHkgPSAoeyBwYXJ0bmVyX25hbWUsIHBhcnRuZXJfaWR9KSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC8ke3BhcnRuZXJfbmFtZX0vJHtwYXJ0bmVyX2lkfWAsIHt9KTtcbiAgYXNzZW50ID0gKGVtYWlsX2lkLCBkYXRhKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoXG4gICAgICBgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfS9hc3NlbnRgLFxuICAgICAgZGF0YVxuICAgICk7XG4gIGdldENvaG9ydENvdW50ID0gcGFyYW1zID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvY29ob3J0L2NvdW50P3F1ZXJ5PSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gKTtcbiAgY3JlYXRlQ29ob3J0ID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvY29ob3J0XCIsIHBhcmFtcyk7XG4gIHJlcXVlc3RDb2hvcnRXb3JrZXJzID0gKGNvaG9ydF9pZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jb2hvcnQvJHtjb2hvcnRfaWR9L3JlcXVlc3RgLCBwYXJhbXMpO1xuICBnZXROb3RlcyA9IGlkID0+IHRoaXMuYXBpLmdldChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2ApO1xuICBzYXZlTm90ZSA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnB1dChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2AsIHBhcmFtcyk7XG4gIHJlc2VuZEVtYWlsID0gaWQgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGBwYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9L2VtYWlsL2NvbnNlbnQvcmVzZW5kYCk7XG4gIHBvc3RTZXR0aW5ncyA9ICh1cmwsIHBhcmFtcykgPT4gdGhpcy5hcGkucG9zdCh1cmwsIHBhcmFtcyk7XG4gIGJ0b2FUZXN0ID0gc3RyaW5nID0+IGJ0b2Eoc3RyaW5nKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2VBUEk7IiwiLy9UdXJuIFByaW1hcnkgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IHByaW1hcnkgPSBcIiMyRDMwNDdcIjsgLy9Db29sR3JheSBvciBTcGFjZUNhZGV0XG5leHBvcnQgY29uc3Qgc2Vjb25kYXJ5ID0gXCIjMDBEOUNEXCI7IC8vVHVycXVvaXNlXG5leHBvcnQgY29uc3QgZW1lcmFsZCA9IFwiIzBlZDA2N1wiO1xuZXhwb3J0IGNvbnN0IHRhcnRPcmFuZ2UgPSBcIiNmYjRkNDlcIjtcbmV4cG9ydCBjb25zdCB5ZWxsb3dPcmFuZ2UgPSBcIiNmYWE3M2NcIjtcblxuLy9UdXJuIEdyZXkgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IHNsYXRlR3JheSA9IFwiIzVmN2Q5NVwiO1xuZXhwb3J0IGNvbnN0IGNhZGV0Qmx1ZSA9IFwiIzliYjFjOFwiO1xuZXhwb3J0IGNvbnN0IHBlcml3aW5rbGUgPSBcIiNiZmNkZGRcIjtcbmV4cG9ydCBjb25zdCBhbGljZUJsdWUgPSBcIiNlMWU4ZjNcIjtcbmV4cG9ydCBjb25zdCBzbW9rZVdoaXRlID0gXCIjZjdmOWZjXCI7XG5cbi8vVHVybiBBbGVydHMgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IGFsZXJ0MCA9IHNsYXRlR3JheTtcbmV4cG9ydCBjb25zdCBhbGVydDEgPSBlbWVyYWxkO1xuZXhwb3J0IGNvbnN0IGFsZXJ0MiA9IHRhcnRPcmFuZ2U7XG5leHBvcnQgY29uc3QgYWxlcnQzID0geWVsbG93T3JhbmdlO1xuZXhwb3J0IGNvbnN0IGNlcnVsZWFuQmx1ZSA9IFwiIzQzNTdhZFwiO1xuXG4vL1R1cm4gU2Vjb25kYXJ5IFBhbGV0dGUgMVxuZXhwb3J0IGNvbnN0IHBlYWNoID0gXCIjZjljYjljXCI7XG5leHBvcnQgY29uc3QgYmFieVBpbmsgPSBcIiNmNGNjY2NcIjtcbmV4cG9ydCBjb25zdCBzcGFuaXNoUGluayA9IFwiI2U2YjhhZlwiO1xuZXhwb3J0IGNvbnN0IGJlYXVCbHVlID0gXCIjY2ZlMmYzXCI7XG5leHBvcnQgY29uc3QgY3VsdHVyZWQgPSBcIiNlM2U5ZWRcIjtcblxuLy9UdXJuIFNlY29uZGFyeSBQYWxldHRlIDJcbmV4cG9ydCBjb25zdCBibHVlQmVsbCA9IFwiI2I0YTdkNlwiO1xuZXhwb3J0IGNvbnN0IGJhYnlCbHVlRXllcyA9IFwiIzlmYzVlOFwiO1xuZXhwb3J0IGNvbnN0IHBvd2RlckJsdWUgPSBcIiNiN2VjZWNcIjtcbmV4cG9ydCBjb25zdCBob25leURldyA9IFwiI2Q5ZWFkM1wiO1xuZXhwb3J0IGNvbnN0IGJ1ZmYgPSBcIiNmZmU1OTlcIjtcblxuLy9PdGhlcnNcbmV4cG9ydCBjb25zdCBibGFjayA9IFwiIzAwMFwiO1xuZXhwb3J0IGNvbnN0IHdoaXRlID0gXCIjZmZmXCI7XG5cbi8vTm90aWNlIGNvbG9yc1xuZXhwb3J0IGNvbnN0IG5vdGljZU11dGVkID0gc2xhdGVHcmF5O1xuZXhwb3J0IGNvbnN0IG5vdGljZUVycm9yID0gXCIjZmY2YzY5XCI7XG5leHBvcnQgY29uc3Qgbm90aWNlV2FybmluZyA9IFwiI2ZhYTAzY1wiO1xuZXhwb3J0IGNvbnN0IG5vdGljZVN1Y2Nlc3MgPSBcIiMxM2MwNjNcIjtcbmV4cG9ydCBjb25zdCBub3RpY2VJbmZvID0gc2xhdGVHcmF5O1xuIiwiY29uc3QgcGFyc2VQeXRob25EYXRlID0gZGF0ZSA9PiB7XG4gIGlmICghaXNOYU4ocGFyc2VJbnQoZGF0ZSwgMTApKSkge1xuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlICogMTAwMCk7XG4gICAgY29uc3QgdGltZSA9IGQuZ2V0VGltZSgpO1xuICAgIGlmICh0aW1lKSB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGltZSArIGQuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwICogMTAwMCk7XG4gICAgICBjb25zdCBvZmZzZXQgPSBkLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MDtcbiAgICAgIGNvbnN0IGhvdXJzID0gZC5nZXRIb3VycygpO1xuICAgICAgbmV3RGF0ZS5zZXRIb3Vycyhob3VycyAtIG9mZnNldCk7XG4gICAgICByZXR1cm4gbmV3RGF0ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXJzZVB5dGhvbkRhdGU7XG4iLCJpbXBvcnQgcGFyc2VQeXRob25EYXRlIGZyb20gXCIuL3BhcnNlLXB5dGhvbi1kYXRlXCI7XG5cbmNvbnN0IGZvcm1hdERhdGUgPSBkYXRlID0+IHtcbiAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlUHl0aG9uRGF0ZShkYXRlKTtcbiAgaWYgKCFwYXJzZWREYXRlKSByZXR1cm4gXCJOL0FcIjtcbiAgcmV0dXJuIGAke3BhcnNlZERhdGUuZ2V0TW9udGgoKSArXG4gICAgMX0vJHtwYXJzZWREYXRlLmdldERhdGUoKX0vJHtwYXJzZWREYXRlLmdldEZ1bGxZZWFyKCl9YDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREYXRlO1xuIiwiY29uc3QgZm9ybWF0RW1haWwgPSBlbWFpbCA9PiB7XG4gIGlmICh0eXBlb2YgZW1haWwgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gZW1haWwucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdEVtYWlsO1xuIiwiY29uc3QgZm9ybWF0TmFtZSA9IG5hbWUgPT4ge1xuICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdE5hbWU7XG4iLCJjb25zdCBmb3JtYXRQaG9uZSA9IChwaG9uZSwgZW5jcnlwdGVkID0gZmFsc2UpID0+IHtcbiAgaWYgKHR5cGVvZiBwaG9uZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiTi9BXCI7XG4gIGxldCBwaG9uZU51bWJlciA9IGVuY3J5cHRlZFxuICAgID8gcGhvbmVcbiAgICA6IHBob25lLnJlcGxhY2UoL1xcRC9nLCBcIlwiKS5zdWJzdHJpbmcoMCwgMTEpO1xuICBsZXQgYXJlYUNvZGU7XG4gIGlmIChwaG9uZU51bWJlci5sZW5ndGggPCAxMCkgcmV0dXJuIHBob25lTnVtYmVyO1xuICBpZiAocGhvbmVOdW1iZXIubGVuZ3RoID4gMTApIHtcbiAgICBhcmVhQ29kZSA9IHBob25lTnVtYmVyWzBdO1xuICAgIHBob25lTnVtYmVyID0gcGhvbmVOdW1iZXIuc3Vic3RyaW5nKDEsIDExKTtcbiAgfVxuICBwaG9uZU51bWJlciA9IHBob25lTnVtYmVyLm1hdGNoKC8uezEsM30vZyk7XG4gIHJldHVybiByZW5kZXJQaG9uZSh7IHBob25lOiBwaG9uZU51bWJlciwgZW5jcnlwdGVkLCBhcmVhQ29kZSB9KTtcbn07XG5cbmNvbnN0IHJlbmRlclBob25lID0gKHsgcGhvbmUsIGVuY3J5cHRlZCwgYXJlYUNvZGUgfSkgPT4ge1xuICBsZXQgcGhvbmVOdW1iZXIgPSBlbmNyeXB0ZWRcbiAgICA/IGAoJHtwaG9uZVswXX0pICR7cGhvbmVbMV19ICR7cGhvbmVbMl19JHtwaG9uZVszXX1gXG4gICAgOiBgKCR7cGhvbmVbMF19KSAke3Bob25lWzFdfS0ke3Bob25lWzJdfSR7cGhvbmVbM119YDtcbiAgcGhvbmVOdW1iZXIgPSBhcmVhQ29kZSA/IGAke2FyZWFDb2RlfSAke3Bob25lTnVtYmVyfWAgOiBwaG9uZU51bWJlcjtcbiAgcmV0dXJuIHBob25lTnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UGhvbmU7XG4iLCJjb25zdCBmb3JtYXRTU04gPSBzc24gPT4ge1xuICBpZiAodHlwZW9mIHNzbiAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiTi9BXCI7XG4gIGNvbnN0IHNzbk51bWJlciA9IHNzbi5yZXBsYWNlKC9cXEQvZywgXCJcIikuc3Vic3RyaW5nKDAsIDkpO1xuICBpZiAoc3NuTnVtYmVyLmxlbmd0aCA8IDkpIHJldHVybiBzc25OdW1iZXI7XG4gIHJldHVybiBgJHtzc25OdW1iZXIuc3Vic3RyaW5nKDAsIDMpfS0ke3Nzbk51bWJlci5zdWJzdHJpbmcoXG4gICAgMyxcbiAgICA1XG4gICl9LSR7c3NuTnVtYmVyLnN1YnN0cmluZyg1LCA5KX1gO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0U1NOO1xuIiwiY29uc3QgZm9ybWF0WmlwY29kZSA9IHppcGNvZGUgPT4ge1xuICBpZiAodHlwZW9mIHppcGNvZGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gemlwY29kZS5yZXBsYWNlKC9cXEQvZywgXCJcIikuc3Vic3RyaW5nKDAsIDUpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0WmlwY29kZTtcbiIsImNvbnN0IGdldFJlamVjdE1lc3NhZ2UgPSBwYXJ0bmVyX3R5cGUgPT4ge1xuICBpZiAoIVtcIlJJU0tfTUFOQUdFTUVOVFwiLCBcIkZDUkFfRVwiLCBcIkZDUkFfTlwiLCBcIkZDUkFcIl0uaW5jbHVkZXMocGFydG5lcl90eXBlKSlcbiAgICByZXR1cm4gXCJSZWplY3RcIjtcbiAgY29uc3QgcmVqZWN0TWVzc2FnZXMgPSB7XG4gICAgUklTS19NQU5BR0VNRU5UOiBcIlJlamVjdFwiLFxuICAgIEZDUkE6IFwiUHJlLUFkdmVyc2UgQWN0aW9uXCIsXG4gICAgRkNSQV9FOiBcIlByZS1BZHZlcnNlIEFjdGlvblwiLFxuICAgIEZDUkFfTjogXCJBZHZlcnNlIEFjdGlvblwiXG4gIH07XG4gIHJldHVybiByZWplY3RNZXNzYWdlc1twYXJ0bmVyX3R5cGVdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmVqZWN0TWVzc2FnZTtcbiIsImV4cG9ydCBjb25zdCBnZXRTdGF0dXMgPSBzdGF0dXMgPT4ge1xuICBjb25zdCBzdGF0dXNNYXAgPSB7XG4gICAgcmV2aWV3OiBcInJldmlld2luZ1wiLFxuICAgIHBlbmRpbmc6IFwiY29uc2lkZXJcIixcbiAgICBcInJldmlld19faWRlbnRpdHlcIjogXCJ2ZXJpZnlpbmdcIixcbiAgICBcInJldmlld19fbXZyXCI6IFwiQ29tcGxpYW5jZSBSZXZpZXdcIixcbiAgICBcInJldmlld19fc29cIjogXCJDb21wbGlhbmNlIFJldmlld1wiLFxuICAgIFwicmV2aWV3X19xYVwiOiBcIkNvbXBsaWFuY2UgUmV2aWV3XCIsXG4gICAgaW5pdGlhdGVkOiBcIlN0b3JlZFwiXG4gIH07XG5cbiAgcmV0dXJuIHN0YXR1c01hcFtzdGF0dXNdIHx8IHN0YXR1cztcbn07XG4iLCJjb25zdCBpc0RhdGUgPSB2YWx1ZSA9PiB7XG4gIGlmIChpc05hTihwYXJzZUludCh2YWx1ZSwgMTApKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUgKiAxMDAwKTtcbiAgY29uc3QgcmlnaHROb3cgPSBuZXcgRGF0ZSgpO1xuICBpZiAoZGF0ZSA+IHJpZ2h0Tm93KSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBkYXRlLmdldFllYXIoKSA+IDEwMDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGlzRGF0ZTtcbiIsImNvbnN0IGlzT2JqZWN0ID0gZGF0YSA9PiAhIWRhdGEgJiYgZGF0YS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdDtcbiIsImNvbnN0IGlzVXJsID0gdXJsU3RyaW5nID0+IHtcbiAgY29uc3QgcmVnZXhwID0gLyhmdHB8aHR0cHxodHRwcyk6XFwvXFwvKFxcdys6ezAsMX1cXHcqQCk/KFxcUyspKDpbMC05XSspPyhcXC98XFwvKFtcXHcjITouPys9JiVAIVxcLS9dKSk/LztcbiAgcmV0dXJuIHJlZ2V4cC50ZXN0KHVybFN0cmluZyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc1VybDtcbiIsImNvbnN0IHRlcm1zID0gW1wiVHVybiBUZWNobm9sb2dpZXMgSW5jLlwiLCBcIltDT01QQU5ZXVwiXTtcbmNvbnN0IGxlZ2FsUmVwbGFjZSA9IChvcmlnaW5hbCA9IFwiXCIsIHJlcGxhY2VtZW50ID0gXCJcIikgPT4ge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgbGV0IHJldHVyblZhbCA9IG9yaWdpbmFsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wbHVzcGx1c1xuICAgIHJldHVyblZhbCA9IHJldHVyblZhbC5yZXBsYWNlKHRlcm1zW2ldLCByZXBsYWNlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHJldHVyblZhbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxlZ2FsUmVwbGFjZTtcbiIsImNvbnN0IG1hc2tOYW1lID0gbmFtZSA9PlxuICB0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBuYW1lLmxlbmd0aCA+IDAgPyBgJHtuYW1lLnNsaWNlKDAsIDEpfS5gIDogbmFtZTtcblxuZXhwb3J0IGRlZmF1bHQgbWFza05hbWU7XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSBcIi4vaXMtb2JqZWN0XCI7XG5cbmNvbnN0IG9iamVjdFRvUXVlcnkgPSBxdWVyeSA9PiB7XG4gIGlmICghaXNPYmplY3QocXVlcnkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5KTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcXVlcnlBcnJheSA9IGtleXMubWFwKGtleSA9PiBgJHtrZXl9PSR7cXVlcnlba2V5XX1gKTtcbiAgcmV0dXJuIGA/JHtxdWVyeUFycmF5LmpvaW4oXCImXCIpfWA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBvYmplY3RUb1F1ZXJ5O1xuIiwiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG5jb25zdCBwYXJzZVF1ZXJ5ID0gcXVlcnkgPT5cbiAgXy5pc1N0cmluZyhxdWVyeSlcbiAgICA/IF8uZnJvbVBhaXJzKFxuICAgICAgICBfLm1hcChxdWVyeS5zbGljZSgxKS5zcGxpdChcIiZcIiksIGZ1bmN0aW9uKHBhcmFtcykge1xuICAgICAgICAgIHZhciBwID0gcGFyYW1zLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICByZXR1cm4gW3BbMF0sIGRlY29kZVVSSUNvbXBvbmVudChwWzFdKV07XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgOiBxdWVyeTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VRdWVyeTtcbiIsImltcG9ydCAqIGFzIGNvbG9ycyBmcm9tIFwiLi4vc3R5bGVzL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgcGlja0NvbG9yID0gc3RhdHVzID0+IHtcbiAgc3dpdGNoICh0eXBlb2Ygc3RhdHVzID09PSBcInN0cmluZ1wiID8gc3RhdHVzLnRvTG93ZXJDYXNlKCkgOiBzdGF0dXMpIHtcbiAgICBjYXNlIFwiZmlyc3Rfbm90aWNlXCI6XG4gICAgY2FzZSBcInNlY29uZF9ub3RpY2VcIjpcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgIGNhc2UgXCJjb25zaWRlclwiOlxuICAgICAgcmV0dXJuIGNvbG9ycy5ub3RpY2VXYXJuaW5nO1xuICAgIGNhc2UgXCJ1bnZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIm5vdF92ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJmcmF1ZFwiOlxuICAgIGNhc2UgXCJub3RfbWF0Y2hlZFwiOlxuICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgIGNhc2UgXCJkZWNlYXNlZFwiOlxuICAgIGNhc2UgXCJ3aXRoZHJhd25cIjpcbiAgICAgIHJldHVybiBjb2xvcnMubm90aWNlRXJyb3I7XG4gICAgY2FzZSBcInZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIm1hdGNoZWRcIjpcbiAgICBjYXNlIFwidmFsaWRcIjpcbiAgICBjYXNlIFwicmVhZHlcIjpcbiAgICBjYXNlIFwiY29tcGxldGVcIjpcbiAgICBjYXNlIFwiY2xlYXJcIjpcbiAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgY2FzZSBcInJhbmRvbWl6ZWRcIjpcbiAgICBjYXNlIFwiYXBwcm92ZWRcIjpcbiAgICAgIHJldHVybiBjb2xvcnMubm90aWNlU3VjY2VzcztcbiAgICBjYXNlIFwicHJvY2Vzc2luZ1wiOlxuICAgIGNhc2UgXCJyZXZpZXdpbmdcIjpcbiAgICBjYXNlIFwicmV2aWV3XCI6XG4gICAgY2FzZSBcImNvbnNlbnRcIjpcbiAgICBjYXNlIFwiZW1haWxlZFwiOlxuICAgIGNhc2UgXCJpbml0aWF0ZWRcIjpcbiAgICBjYXNlIFwiYXR0ZW50aW9uXCI6XG4gICAgY2FzZSBcInZlcmlmeWluZ1wiOlxuICAgIGNhc2UgXCJyZXZpZXdfX212clwiOlxuICAgIGNhc2UgXCJyZXZpZXdfX3FhXCI6XG4gICAgICByZXR1cm4gY29sb3JzLm5vdGljZUluZm87XG4gICAgY2FzZSBcIm5vbmVcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiZ3JheVwiO1xuICB9XG59O1xuIiwiaW1wb3J0ICogYXMgY29sb3JzIGZyb20gXCIuLi9zdHlsZXMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IHBpY2tTY29yZUNvbG9yID0gc2NvcmUgPT4ge1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHNjb3JlLCAxMCk7XG4gIGlmICh2YWx1ZSA+IDg5KSByZXR1cm4gY29sb3JzLm5vdGljZVN1Y2Nlc3M7XG4gIGlmICh2YWx1ZSA+IDY5KSByZXR1cm4gY29sb3JzLm5vdGljZVdhcm5pbmc7XG4gIHJldHVybiBjb2xvcnMubm90aWNlRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwaWNrU2NvcmVDb2xvcjsiLCJleHBvcnQgY29uc3QgcHJldHRpZnlEYXRlID0gZGF0ZVN0cmluZyA9PiB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgY29uc3QgbW9udGggPSBkLnRvVVRDU3RyaW5nKCkuc2xpY2UoOCwgMTEpO1xuICBjb25zdCBERCA9IGQudG9VVENTdHJpbmcoKS5zbGljZSg1LCA3KTtcbiAgY29uc3QgWVlZWSA9IGQudG9VVENTdHJpbmcoKS5zbGljZSgxMiwgMTYpO1xuICByZXR1cm4gYCR7bW9udGh9ICR7RER9LCAke1lZWVl9YDtcbn07XG4iLCJpbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCBjb25zdCBmYWxzeVN0cmluZ3MgPSBbXCJOb25lXCIsIFwibm9uZVwiLCBcIk4vQVwiXTtcblxuY29uc3QgdmFsdWVFeGlzdHMgPSB2YWx1ZSA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcbiAgaWYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiAhXy5pc0VtcHR5KHZhbHVlKTtcbiAgaWYgKF8uaW5kZXhPZihmYWxzeVN0cmluZ3MsIHZhbHVlKSA+IC0xKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdmFsdWVFeGlzdHM7XG4iLCJpbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgdmFsdWVFeGlzdHMgZnJvbSBcIi4vdmFsdWUtZXhpc3RzXCI7XG5cbmNvbnN0IHJlbmRlckRldGFpbFZhbHVlID0gKHZhbHVlLCBkZWVwID0gZmFsc2UpID0+IHtcbiAgaWYgKF8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAoZGVlcClcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoXG4gICAgICAgIHZhbCA9PlxuICAgICAgICAgIF8uaXNPYmplY3QodmFsKVxuICAgICAgICAgICAgPyByZW5kZXJOZXN0ZWRPYmplY3QodmFsLCBkZWVwKVxuICAgICAgICAgICAgOiByZW5kZXJEZXRhaWxWYWx1ZSh2YWwsIGRlZXApXG4gICAgICApO1xuICAgIHJldHVybiB2YWx1ZS5qb2luKFwiIC8gXCIpO1xuICB9XG4gIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0dXJuIHJlbmRlck5lc3RlZE9iamVjdCh2YWx1ZSwgZGVlcCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmNvbnN0IHJlbmRlck5lc3RlZE9iamVjdCA9IChuZXN0ZWQgPSB7fSwgZGVlcCA9IGZhbHNlKSA9PiB7XG4gIGNvbnN0IHZhbHVlcyA9IF8uZmlsdGVyKG5lc3RlZCwgdmFsdWUgPT4gdmFsdWVFeGlzdHModmFsdWUpKTtcbiAgcmV0dXJuIHZhbHVlcy5tYXAodmFsdWUgPT4gcmVuZGVyRGV0YWlsVmFsdWUodmFsdWUsIGRlZXApKS5qb2luKFwiIC8gXCIpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyRGV0YWlsVmFsdWU7XG4iLCJpbXBvcnQgdmFsdWVFeGlzdHMgZnJvbSBcIi4vdmFsdWUtZXhpc3RzXCI7XG5cbmNvbnN0IHNlbGVjdE1hc3RlcktleSA9IChkYXRhLCBwcm9wZXJ0eSkgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBcIlwiO1xuICBsZXQgbWFzdGVyS2V5O1xuICBjb25zdCBibHVlcHJpbnQgPSBkYXRhWzBdO1xuICBpZiAodmFsdWVFeGlzdHMoYmx1ZXByaW50W3Byb3BlcnR5XSkpIHtcbiAgICBtYXN0ZXJLZXkgPSBwcm9wZXJ0eTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwb3NpYmxlS2V5cyA9IE9iamVjdC5rZXlzKGJsdWVwcmludCk7XG4gICAgbWFzdGVyS2V5ID0gcG9zaWJsZUtleXMuZmluZChrZXkgPT4gdmFsdWVFeGlzdHMoYmx1ZXByaW50W2tleV0pKTtcbiAgfVxuICByZXR1cm4gbWFzdGVyS2V5O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0TWFzdGVyS2V5O1xuIiwiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG4vKiogQG5hbWVzcGFjZSB1dGlsaXR5X2Z1bmN0aW9ucyAqL1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gdGhlIHR5cGVvZiB0aGUgdmFsdWUgc2hvdWxkIGJlIHwgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBmYWxsYmFjayAtIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgdmFsdWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gdXBkYXRlIHRoZSBvYmplY3Qga2V5IHdpdGhcbiAqIEBkZXNjIFNldHMgYSB2YWx1ZSBvZiBhIHNwZWNpZmljIHR5cGUgb24gcHJvdmlkZWQgb2JqZWN0J3Mgc3RpcHVsYXRlZCBwcm9wZXJ0eS9rZXkgd2l0aCBhbiBvcHRpb25hbCBkZWZhdWx0L2ZhbGxiYWNrIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRWYWx1ZSA9ICh0eXBlLCBzZWxmLCBwcm9wZXJ0eSwgZmFsbGJhY2ssIHZhbHVlID0gZmFsbGJhY2spID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZSkgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9IHZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICogQHBhcmFtIHsqfSBmYWxsYmFjayAtIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgdmFsdWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gdXBkYXRlIHRoZSBvYmplY3Qga2V5IHdpdGhcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gZmFjdG9yeSB0byBoYXJkIGJha2UgdGhlIHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkIGFuZCBhIGZhbGxiYWNrIChvcHRpb25hbClcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE9wdGlvbiA9IChcbiAgc2VsZixcbiAgcHJvcGVydHksXG4gIG9wdGlvbnMsXG4gIGZhbGxiYWNrLFxuICB2YWx1ZSA9IGZhbGxiYWNrXG4pID0+IHtcbiAgY29uc3QgYWxsb3dlZCA9IEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBvcHRpb25zIDogc2VsZltvcHRpb25zXTtcbiAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9IHZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB0cnV0aHkgdmFsdWUgdG8gYmUgc2V0XG4gKiBAZGVzYyBXaWxsIHNldCBhIHRydXRoeSB2YWx1ZSBhbmQgaWdub3JlIGFueXRoaW5nIHRoYXQgY2FzdHMgdG8gZmFsc2UgKCEhKVxuICovXG5leHBvcnQgY29uc3Qgc2V0VHJ1dGh5ID0gKHNlbGYsIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICBpZiAoIXZhbHVlKSByZXR1cm47XG4gIHNlbGZbcHJvcGVydHldID0gdmFsdWU7XG59O1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIGZhbHN5IHZhbHVlIHRvIGJlIHNldFxuICogQGRlc2MgV2lsbCBzZXQgYSBmYWxzeSB2YWx1ZSBhbmQgaWdub3JlIGFueXRoaW5nIHRoYXQgY2FzdHMgdG8gdHJ1ZSAoISEhKVxuICovXG5leHBvcnQgY29uc3Qgc2V0RmFsc3kgPSAoc2VsZiwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybjtcbiAgc2VsZltwcm9wZXJ0eV0gPSAhdmFsdWU7XG59O1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAZGVzYyBUb2dnbGVzIGEgYm9vbGVhbiB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlQm9vbCA9IChzZWxmLCBwcm9wZXJ0eSkgPT4gKCkgPT4ge1xuICBpZiAodHlwZW9mIHNlbGZbcHJvcGVydHldICE9PSBcImJvb2xlYW5cIikgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9ICFzZWxmW3Byb3BlcnR5XTtcbn07XG5cbi8qKiBAbmFtZXNwYWNlIGZ1bmN0aW9uX2ZhY3RvcmllcyAqL1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAaW1wbGVtZW50cyB7c2V0VmFsdWV9XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIGJvb2xlYW4sIHN0cmluZywgb2JqZWN0LCBudWxsLCBldGMuXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7c2V0VmFsdWV9IC0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAqIEBkZXNjIEZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgYSB2YWx1ZSBzZXR0ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IHNldHRlckZhY3RvcnkgPSAodHlwZSwgc2VsZiwgcHJvcGVydHksIGZhbGxiYWNrID0gdW5kZWZpbmVkKSA9PlxuICBfLnBhcnRpYWwoc2V0VmFsdWUsIHR5cGUsIHNlbGYsIHByb3BlcnR5LCBmYWxsYmFjayk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBleHRlbmRzIHtzZXR0ZXJGYWN0b3J5fVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBib29sZWFuLCBzdHJpbmcsIG9iamVjdCwgbnVsbCwgZXRjLlxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGEgdmFsdWUgc2V0dGVyIHdpdGggYXBwbGllZCBhcmd1bWVudHNcbiAqIEBkZXNjIEEgY3VycmllZCBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgdmFsdWUgc2V0dGVyXG4gKi9cbmV4cG9ydCBjb25zdCBzZXR0ZXJGYWN0b3J5Q3VycmllZCA9IF8uY3Vycnkoc2V0dGVyRmFjdG9yeSk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBleHRlbmRzIHt0b2dnbGVCb29sfVxuICogQGRlc2MgQSBjdXJyaWVkIGZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgdG9nZ2xlQm9vbCgpIHdpdGggYXBwbGllZCBhcmd1bWVudHNcbiAqIEByZXR1cm5zIHt0b2dnbGVCb29sfSBBIGN1cnJpZWQgdmVyc2lvbiBvZiB0aGUgdG9nZ2xlQm9vbCBmdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlQm9vbEN1cnJpZWQgPSBfLmN1cnJ5KHRvZ2dsZUJvb2wpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gYSB2YWx1ZSBzZXR0ZXIgd2l0aCBwcmUtcG9wdWxhdGVkIGRlcGVuZGVuY2llc1xuICogQGRlc2MgQSBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgc3RyaW5nIHZhbHVlIHNldHRlciwgaWYgdmFsdWUgaXMgbm90IGEgc3RyaW5nIGV4aXRzIHdpdGhvdXQgc2lkZS1lZmZlY3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTdHJpbmdGYWN0b3J5ID0gc2V0dGVyRmFjdG9yeUN1cnJpZWQoXCJzdHJpbmdcIik7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhIHZhbHVlIHNldHRlciB3aXRoIHByZS1wb3B1bGF0ZWQgZGVwZW5kZW5jaWVzXG4gKiBAZGVzYyBBIGZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgYSBudW1iZXIgdmFsdWUgc2V0dGVyLCBpZiB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgZXhpdHMgd2l0aG91dCBzaWRlLWVmZmVjdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE51bWJlckZhY3RvcnkgPSBzZXR0ZXJGYWN0b3J5Q3VycmllZChcIm51bWJlclwiKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGEgdmFsdWUgc2V0dGVyIHdpdGggcHJlLXBvcHVsYXRlZCBkZXBlbmRlbmNpZXNcbiAqIEBkZXNjIEEgZmFjdG9yeSBmb3IgZ2VuZXJhdGluZyBhIGJvb2xlYW4gdmFsdWUgc2V0dGVyLCBpZiB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgZXhpdHMgd2l0aG91dCBzaWRlLWVmZmVjdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEJvb2xGYWN0b3J5ID0gc2V0dGVyRmFjdG9yeUN1cnJpZWQoXCJib29sZWFuXCIpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAZXh0ZW5kcyB7c2V0VHJ1dGh5fVxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdHJ1dGh5IHZhbHVlIHRvIGJlIHNldFxuICovXG5leHBvcnQgY29uc3Qgc2V0VHJ1dGh5Q3VycmllZCA9IF8uY3Vycnkoc2V0VHJ1dGh5KTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQGV4dGVuZHMge3NldFRydXRoeX1cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIGZhbHN5IHZhbHVlIHRvIGJlIHNldFxuICovXG5leHBvcnQgY29uc3Qgc2V0RmFsc3lDdXJyaWVkID0gXy5jdXJyeShzZXRGYWxzeSk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBpbXBsZW1lbnRzIHtzZXRPcHRpb259XG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsoc3RyaW5nfGFycmF5KX0gb3B0aW9ucyAtIHN0cmluZyBrZXkgb2Ygc2VsZiBvYmplY3QgdGhhdCBob2xkcyB0aGUgYXJyYXkgb2YgY2hvaWNlcyBvciBhbiBhcnJheSBvZiBjaG9pY2VzXG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtzZXRPcHRpb259XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPcHRpb25GYWN0b3J5ID0gKFxuICBzZWxmLFxuICBwcm9wZXJ0eSxcbiAgb3B0aW9ucyxcbiAgZmFsbGJhY2sgPSB1bmRlZmluZWRcbikgPT4gXy5wYXJ0aWFsKHNldE9wdGlvbiwgc2VsZiwgcHJvcGVydHksIG9wdGlvbnMsIGZhbGxiYWNrKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQGV4dGVuZHMge3NldE9wdGlvbkZhY3Rvcnl9XG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsoc3RyaW5nfGFycmF5KX0gb3B0aW9ucyAtIHN0cmluZyBrZXkgb2Ygc2VsZiBvYmplY3QgdGhhdCBob2xkcyB0aGUgYXJyYXkgb2YgY2hvaWNlcyBvciBhbiBhcnJheSBvZiBjaG9pY2VzXG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtzZXRPcHRpb259XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPcHRpb25GYWN0b3J5Q3VycmllZCA9IF8uY3Vycnkoc2V0T3B0aW9uRmFjdG9yeSk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZGVzYyBVc2VkIHRvIGNyZWF0ZSBtb2J4IHJlYWR5IG1vZGVscyB3aXRoIHRoZSBtb3N0IGNvbW1vbiBzZXR0ZXJzIGJvb3RzdHJhcHBlZFxuICovXG5leHBvcnQgY2xhc3MgU2V0dGVyIHtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBzdHJpbmcgc2V0dGVyXG4gICAqL1xuICBzZXRTdHJpbmdGYWN0b3J5ID0gc2V0U3RyaW5nRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBudW1iZXIgc2V0dGVyXG4gICAqL1xuICBzZXROdW1iZXJGYWN0b3J5ID0gc2V0TnVtYmVyRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBib29sZWFuIHNldHRlclxuICAgKi9cbiAgc2V0Qm9vbEZhY3RvcnkgPSBzZXRCb29sRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgdHJ1dGh5IHNldHRlclxuICAgXG4gICAqL1xuICBzZXRUcnV0aHlGYWN0b3J5ID0gc2V0VHJ1dGh5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgZmFsc3kgc2V0dGVyXG4gICBcbiAgICovXG4gIHNldEZhbHN5RmFjdG9yeSA9IHNldEZhbHN5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGFuIG9wdGlvbiBzZXR0ZXJcbiAgICovXG4gIHNldE9wdGlvbkZhY3RvcnkgPSBzZXRPcHRpb25GYWN0b3J5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcGFyYW0ge2FycmF5fSBvcHRpb25zIC0gYW4gYXJyYXkgb2YgdGhlIHBvc3NpYmxlIGNob2ljZXMgYWxsb3dlZFxuICAgKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24ncyB2YWx1ZSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgYm9vbGVhbiB0b2dnbGVyXG4gICAqL1xuICB0b2dnbGVCb29sRmFjdG9yeSA9IHRvZ2dsZUJvb2xDdXJyaWVkKHRoaXMpO1xufVxuIiwiZnVuY3Rpb24gc3RvcmFnZU1vY2soKSB7XG4gIGNvbnN0IHN0b3JhZ2UgPSB7fTtcblxuICByZXR1cm4ge1xuICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSkge1xuICAgICAgc3RvcmFnZVtrZXldID0gdmFsdWUgfHwgXCJcIjtcbiAgICB9LFxuICAgIGdldEl0ZW0oa2V5KSB7XG4gICAgICByZXR1cm4ga2V5IGluIHN0b3JhZ2UgPyBzdG9yYWdlW2tleV0gOiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlSXRlbShrZXkpIHtcbiAgICAgIGRlbGV0ZSBzdG9yYWdlW2tleV07XG4gICAgfSxcbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHN0b3JhZ2UpLmxlbmd0aDtcbiAgICB9LFxuICAgIGtleShpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RvcmFnZSk7XG4gICAgICByZXR1cm4ga2V5c1tpXSB8fCBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RvcmFnZU1vY2s7XG4iLCJjb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHZhbHVlID4gMDtcbiAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcbiAgICAgIHJldHVybiAhKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5sZW5ndGggPT09IDApO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRvQm9vbGVhbjtcbiIsImltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCByZWxhdGl2ZVRpbWUgZnJvbSBcImRheWpzL3BsdWdpbi9yZWxhdGl2ZVRpbWVcIjtcbmltcG9ydCB1dGMgZnJvbSBcImRheWpzL3BsdWdpbi91dGNcIjtcbmltcG9ydCBwYXJzZVB5dGhvbkRhdGUgZnJvbSBcIi4vcGFyc2UtcHl0aG9uLWRhdGVcIjtcblxuZGF5anMuZXh0ZW5kKHJlbGF0aXZlVGltZSk7XG5kYXlqcy5leHRlbmQodXRjKTtcblxuY29uc3QgdG9SZWxhdGl2ZURhdGUgPSBkYXRlID0+IHtcbiAgaWYgKHR5cGVvZiBkYXRlICE9PSBcIm51bWJlclwiKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlUHl0aG9uRGF0ZShkYXRlKTtcbiAgaWYgKCFwYXJzZWREYXRlKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3QgcmVsYXRpdmVEYXRlID0gZGF5anMocGFyc2VkRGF0ZSk7XG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjT2Zmc2V0KHBhcnNlZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIGNvbnN0IGFkanVzdGVkTm93ID0gbm93LnN1YnRyYWN0KHBhcnNlZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwLCBcImhvdXJcIik7XG4gIGlmIChhZGp1c3RlZE5vdy5kaWZmKHJlbGF0aXZlRGF0ZSwgXCJkYXlcIikgPCA4KSByZXR1cm4gcmVsYXRpdmVEYXRlLmZyb20oYWRqdXN0ZWROb3cpO1xuICByZXR1cm4gcmVsYXRpdmVEYXRlLmZvcm1hdChcIk0vREQvWVlZWVwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b1JlbGF0aXZlRnJvbUlTTyA9IGRhdGUgPT4ge1xuICBpZiAodHlwZW9mIGRhdGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIk4vQVwiO1xuICBjb25zdCByZWxhdGl2ZURhdGUgPSBkYXlqcyhkYXRlKTtcbiAgaWYgKCFyZWxhdGl2ZURhdGUuaXNWYWxpZCgpKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3Qgbm93ID0gZGF5anMoKS51dGNPZmZzZXQocmVsYXRpdmVEYXRlLnV0Y09mZnNldCgpKTtcbiAgaWYgKG5vdy5kaWZmKHJlbGF0aXZlRGF0ZSwgXCJkYXlcIikgPCA4KSByZXR1cm4gcmVsYXRpdmVEYXRlLmZyb20obm93KTtcbiAgcmV0dXJuIHJlbGF0aXZlRGF0ZS5mb3JtYXQoXCJNL0REL1lZWVlcIik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0b1JlbGF0aXZlRGF0ZTtcbiIsImltcG9ydCB7IHVwcGVyRmlyc3QgfSBmcm9tIFwibG9kYXNoXCI7XG5cbmNvbnN0IHRvU2VudGVuY2VDYXNlID0gc3RyID0+IHtcbiAgbGV0IHNlbnRlbmNlID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHBlcmlvZCA9IFwiLiBcIjtcbiAgY29uc3QgZXhjbGFtYXRpb24gPSBcIiEgXCI7XG4gIGNvbnN0IHF1ZXN0aW9uID0gXCI/IFwiO1xuICBjb25zdCB0ZXJtaW5hdGlvbnMgPSBbcGVyaW9kLCBleGNsYW1hdGlvbiwgcXVlc3Rpb25dO1xuICB0ZXJtaW5hdGlvbnMuZm9yRWFjaCh0ZXJtaW5hdGlvbiA9PiB7XG4gICAgc2VudGVuY2UgPSBzZW50ZW5jZVxuICAgICAgLnNwbGl0KHRlcm1pbmF0aW9uKVxuICAgICAgLm1hcCh1cHBlckZpcnN0KVxuICAgICAgLmpvaW4odGVybWluYXRpb24pO1xuICB9KTtcbiAgcmV0dXJuIHNlbnRlbmNlO1xufTtcbmV4cG9ydCBkZWZhdWx0IHRvU2VudGVuY2VDYXNlO1xuIiwiY29uc3QgdG9UaXRsZUNhc2UgPSBzdHIgPT4ge1xuICBjb25zdCBzdHJpbmcgPSB0eXBlb2Ygc3RyID09PSBcInN0cmluZ1wiID8gc3RyIDogU3RyaW5nKHN0cik7XG4gIGNvbnN0IHN0cl9sb3dlcmNhc2VkID0gc3RyaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHdvcmRzID0gc3RyX2xvd2VyY2FzZWQuc3BsaXQoXCIgXCIpO1xuICBjb25zdCB0aXRsZUNhc2VkTGlzdCA9IHdvcmRzLm1hcCh3b3JkID0+IHtcbiAgICBjb25zdCBmaXJzdENoYXIgPSB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IHJlbWFpbmluZ0NoYXJzID0gd29yZC5zbGljZSgxKTtcbiAgICByZXR1cm4gYCR7Zmlyc3RDaGFyfSR7cmVtYWluaW5nQ2hhcnN9YDtcbiAgfSk7XG4gIHJldHVybiB0aXRsZUNhc2VkTGlzdC5qb2luKFwiIFwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRvVGl0bGVDYXNlO1xuIiwiZXhwb3J0IGNvbnN0IElOSVRJQVRFRCA9IFwiaW5pdGlhdGVkXCI7XG5leHBvcnQgY29uc3QgUEVORElORyA9IFwicGVuZGluZ1wiO1xuZXhwb3J0IGNvbnN0IFdJVEhEUkFXTiA9IFwid2l0aGRyYXduXCI7XG5leHBvcnQgY29uc3QgQVBQUk9WRUQgPSBcImFwcHJvdmVkXCI7XG5leHBvcnQgY29uc3QgUkVKRUNURUQgPSBcInJlamVjdGVkXCI7XG5leHBvcnQgY29uc3QgQ09OU0VOVCA9IFwiY29uc2VudFwiO1xuZXhwb3J0IGNvbnN0IEVNQUlMRUQgPSBcImVtYWlsZWRcIjtcbmV4cG9ydCBjb25zdCBSRVZJRVcgPSBcInJldmlld1wiO1xuZXhwb3J0IGNvbnN0IFJFVklFV0lORyA9IFwicmV2aWV3aW5nXCI7XG5leHBvcnQgY29uc3QgQ09OU0lERVIgPSBcImNvbnNpZGVyXCI7XG5leHBvcnQgY29uc3QgUFJPQ0VTU0lORyA9IFwicHJvY2Vzc2luZ1wiO1xuZXhwb3J0IGNvbnN0IFBFTkRJTkdfRElTUFVURSA9IFwicGVuZGluZ19fZGlzcHV0ZVwiO1xuZXhwb3J0IGNvbnN0IFBFTkRJTkdfRklSU1RfTk9USUNFID0gXCJwZW5kaW5nX19maXJzdF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBQRU5ESU5HX1NFQ09ORF9OT1RJQ0UgPSBcInBlbmRpbmdfX3NlY29uZF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBGSVJTVF9OT1RJQ0UgPSBcImZpcnN0X25vdGljZVwiO1xuZXhwb3J0IGNvbnN0IFNFQ09ORF9OT1RJQ0UgPSBcInNlY29uZF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBTU05fVFJBQ0VfRkFJTEVEID0gXCJyZXZpZXdfX2lkZW50aXR5XCI7XG5leHBvcnQgY29uc3QgTVZSX0ZBSUxFRCA9IFwicmV2aWV3X19tdnJcIjtcbmV4cG9ydCBjb25zdCBDT01QTElBTkNFID0gXCJyZXZpZXdfX3FhXCI7XG5leHBvcnQgY29uc3QgQ09NUExJQU5DRV9TTyA9IFwicmV2aWV3X19zb1wiO1xuZXhwb3J0IGNvbnN0IFZFUklGWUlORyA9IFwidmVyaWZ5aW5nXCI7XG5leHBvcnQgY29uc3QgQ09NUExJQU5DRVJFVklFVyA9IFwiQ29tcGxpYW5jZSBSZXZpZXdcIjtcbmV4cG9ydCBjb25zdCBTVE9SRUQgPSBcIlN0b3JlZFwiO1xuXG5jb25zdCB0cmFuc2xhdGVTdGF0dXMgPSAoc3RhdHVzLCBhZHZlcnNlX2FjdGlvbikgPT4ge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgQVBQUk9WRUQ6XG4gICAgICByZXR1cm4gQVBQUk9WRUQ7XG4gICAgY2FzZSBQRU5ESU5HOlxuICAgIGNhc2UgUEVORElOR19ESVNQVVRFOlxuICAgICAgcmV0dXJuIFBFTkRJTkc7XG4gICAgY2FzZSBSRUpFQ1RFRDpcbiAgICAgIHJldHVybiBSRUpFQ1RFRDtcbiAgICBjYXNlIFBFTkRJTkdfRklSU1RfTk9USUNFOlxuICAgICAgaWYgKGFkdmVyc2VfYWN0aW9uKSByZXR1cm4gRklSU1RfTk9USUNFO1xuICAgICAgZWxzZSByZXR1cm4gUkVKRUNURUQ7XG4gICAgY2FzZSBQRU5ESU5HX1NFQ09ORF9OT1RJQ0U6XG4gICAgICBpZiAoYWR2ZXJzZV9hY3Rpb24pIHJldHVybiBTRUNPTkRfTk9USUNFO1xuICAgICAgZWxzZSByZXR1cm4gUkVKRUNURUQ7XG4gICAgY2FzZSBDT05TRU5UOlxuICAgICAgcmV0dXJuIENPTlNFTlQ7XG4gICAgY2FzZSBQUk9DRVNTSU5HOlxuICAgICAgcmV0dXJuIFBST0NFU1NJTkc7XG4gICAgY2FzZSBFTUFJTEVEOlxuICAgICAgcmV0dXJuIEVNQUlMRUQ7XG4gICAgY2FzZSBSRVZJRVc6XG4gICAgICByZXR1cm4gUkVWSUVXO1xuICAgIGNhc2UgUkVWSUVXSU5HOlxuICAgICAgcmV0dXJuIFJFVklFV0lORztcbiAgICBjYXNlIFdJVEhEUkFXTjpcbiAgICAgIHJldHVybiBXSVRIRFJBV047XG4gICAgY2FzZSBJTklUSUFURUQ6XG4gICAgICByZXR1cm4gU1RPUkVEO1xuICAgIGNhc2UgU1NOX1RSQUNFX0ZBSUxFRDpcbiAgICAgIHJldHVybiBWRVJJRllJTkc7XG4gICAgY2FzZSBNVlJfRkFJTEVEOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgY2FzZSBDT01QTElBTkNFOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgY2FzZSBDT01QTElBTkNFX1NPOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBQRU5ESU5HO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGVTdGF0dXM7XG4iLCJpbXBvcnQge1xuICB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UsXG4gIGRyaXZlcnNMaWNlbnNlUmVnZXhcbn0gZnJvbSBcIkB0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlXCI7XG5cbmV4cG9ydCBjb25zdCBjdXJyZW50U3RhdGVzID0gT2JqZWN0LmtleXMoZHJpdmVyc0xpY2Vuc2VSZWdleCk7XG5cbmNvbnN0IHZhbGlkYXRlRHJpdmVyc0xpY2Vuc2UgPSAobGljZW5zZSwgc3RhdGUgPSBcIlwiKSA9PiB7XG4gIGlmICh0eXBlb2YgbGljZW5zZSAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygc3RhdGUgIT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb25zOiBcIkxpY2Vuc2UgYW5kIFN0YXRlIG11c3QgYmUgU3RyaW5nc1wiIH07XG4gIGlmICghY3VycmVudFN0YXRlcy5pbmNsdWRlcyhzdGF0ZSkpIHJldHVybiB7IHZhbGlkOiB0cnVlLCByZWFzb25zOiBcIlwiIH07XG4gIHJldHVybiB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UobGljZW5zZSwgc3RhdGUpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGVEcml2ZXJzTGljZW5zZTtcbiIsImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcblxuLyoqXG4gKiBCYXNlZCBvbiBPJ1JlaWxseSdzIFJlZ2V4IENvb2tib29rOlxuICogaHR0cHM6Ly93d3cub3JlaWxseS5jb20vbGlicmFyeS92aWV3L3JlZ3VsYXItZXhwcmVzc2lvbnMtY29va2Jvb2svOTc4MTQ0OTMyNzQ1My9jaDA0czEyLmh0bWxcbiAqIFxuICogRXh0cmEgcnVsZXM6XG4gKiAgMTIzNDU2Nzg5IGlzIGFuIGludmFsaWQgU1NOXG4gKiAgUmVwZWF0aW5nIGRpZ2l0cyBhcmUgaW52YWxpZCAoMTExMTExMTExLCAxMTExMTExMTEsIGV0Yy4pXG4gKiAgOTg2IHByZWZpeCBpcyBhbGxvd2VkIChmb3IgVGVzdCBJZGVudGl0aWVzKVxuICovXG5jb25zdCB2YWxpZFNzblJlZ2V4ID0gL14oOTg2fCg/ITAwMHw2NjZ8MTIzNDU2Nzg5fChcXGQpXFwyezh9KVswLThdWzAtOV17Mn0pKD8hMDApWzAtOV17Mn0oPyEwMDAwKVswLTldezR9JC87XG5cbi8qKlxuICogQmFzZWQgb24gU1NBJ3MgbWlzdXNlZCBhcnRpY2xlOlxuICogaHR0cHM6Ly93d3cuc3NhLmdvdi9oaXN0b3J5L3Nzbi9taXN1c2VkLmh0bWxcbiAqKi9cbmNvbnN0IG1pc3VzZWRSZWdleCA9IC9eMDc4MDUxMTIwfDIxOTA5OTk5OSQvO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVfc3NuID0gc3NuID0+IHtcbiAgaWYgKHR5cGVvZiBzc24gIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbnVtYmVyU1NOID0gc3NuLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcbiAgcmV0dXJuICFtaXN1c2VkUmVnZXgudGVzdChudW1iZXJTU04pICYmIHZhbGlkU3NuUmVnZXgudGVzdChudW1iZXJTU04pO1xufTtcblxuZXhwb3J0IGNvbnN0IGludmFsaWRGaXJzdFRocmVlID0gXy5yYW5nZSg5MDAsIDEwMDApXG4gIC5tYXAobnVtID0+IGAke251bX1gKVxuICAuY29uY2F0KFtcIjAwMFwiLCBcIjY2NlwiXSk7XG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZV9zc247XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSovXG5pbXBvcnQgeyBpc09ic2VydmFibGVBcnJheSB9IGZyb20gXCJtb2J4XCI7XG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVtYWlsID0gZW1haWwgPT4ge1xuICBpZiAoIWVtYWlsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlZ2V4ID0gL15bYS16QS1aMC05LiEjJCUmJyorXFwvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrJC87XG4gIHJldHVybiByZWdleC50ZXN0KGVtYWlsKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVBob25lID0gcGhvbmUgPT4ge1xuICBpZiAoIXBob25lKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlZ2V4ID0gL14xP1xccz9cXCg/KFxcZHszfSlcXCk/Wy0gXT8oXFxkezN9KVstIF0/KFxcZHs0fSkkLztcbiAgcmV0dXJuIHJlZ2V4LnRlc3QocGhvbmUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQWxwaGFOdW1lcmljID0gY2ggPT4ge1xuICByZXR1cm4gY2gubWF0Y2goL14oW2EtejAtOV0pKy9pKSAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRDYW5hZGlhblppcGNvZGUgPSB6aXBjb2RlID0+IFxuICB6aXBjb2RlLm1hdGNoKC9eW0EtWmEtel1cXGRbQS1aYS16XSQvKSAhPT0gbnVsbCB8fCB6aXBjb2RlLm1hdGNoKC9eW0EtWmEtel1cXGRbQS1aYS16XVsgLV0/XFxkW0EtWmEtel1cXGQvKSAhPT0gbnVsbFxuXG4vLyBzZWUgdmFsaWRhdGUtc3NuLmpzXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTU04gPSBzc24gPT4ge1xuICBpZiAodHlwZW9mIHNzbiAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBudW1iZXJTU04gPSBzc24ucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xuICByZXR1cm4gbnVtYmVyU1NOLmxlbmd0aCA9PT0gOTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUNoZWNrID0gd29ya2VyX2NoZWNrID0+IHtcbiAgY29uc3QgY2hlY2sgPSB3b3JrZXJfY2hlY2sgPT09IFwiY2xlYXJcIiA/IFtdIDogd29ya2VyX2NoZWNrO1xuICBpZiAoQXJyYXkuaXNBcnJheShjaGVjaykgfHwgaXNPYnNlcnZhYmxlQXJyYXkoY2hlY2spKSByZXR1cm4gWy4uLmNoZWNrXTtcbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgY29udGFpbnNBdFN5bWJvbCA9IHN0ciA9PiAvQC8udGVzdChzdHIpO1xuZXhwb3J0IGNvbnN0IGNvbnRhaW5zTnVtYmVyID0gc3RyID0+IC9cXGQvLnRlc3Qoc3RyKTtcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU5hbWUgPSBuYW1lID0+XG4gIG5hbWUudHJpbSgpLmxlbmd0aCAhPT0gMCAmJiAhY29udGFpbnNBdFN5bWJvbChuYW1lKSAmJiAhY29udGFpbnNOdW1iZXIobmFtZSk7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVBZGRyZXNzID0gYWRkcmVzcyA9PlxuICBhZGRyZXNzLnRyaW0oKS5sZW5ndGggIT09IDAgJiYgIWNvbnRhaW5zQXRTeW1ib2woYWRkcmVzcyk7ICBcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUN1c3RvbUlucHV0ID0gdmFsdWUgPT4ge1xuICBpZiAoIV8uaXNTdHJpbmcodmFsdWUpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB2YWx1ZS50cmltKCkubGVuZ3RoICE9PSAwO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlWmlwY29kZSA9IHppcGNvZGUgPT5cbiAgXy5pc1N0cmluZyh6aXBjb2RlKSAmJiB6aXBjb2RlLmxlbmd0aCA+PSA1O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDYW5hZGlhblppcGNvZGUgPSB6aXBjb2RlID0+XG4gIF8uaXNTdHJpbmcoemlwY29kZSkgXG4gICAgJiYgaXNBbHBoYU51bWVyaWMoemlwY29kZSkgXG4gICAgJiYgaXNWYWxpZENhbmFkaWFuWmlwY29kZSh6aXBjb2RlKTtcblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSB2YWx1ZSA9PlxuICBBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc09ic2VydmFibGVBcnJheSh2YWx1ZSk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1WUkNoZWNrID0gY2hlY2sgPT5cbiAgXy5pc09iamVjdChjaGVjaykgfHwgdHlwZW9mIGNoZWNrID09PSBcInN0cmluZ1wiID8gY2hlY2sgOiB7fTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUGhvbmVWZXJpZmljYXRpb24gPSBzdGF0dXMgPT4ge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgXCJ2ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJUcnVlXCI6XG4gICAgICByZXR1cm4gXCJ2ZXJpZmllZFwiO1xuICAgIGNhc2UgXCJ1bnZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIkZhbHNlXCI6XG4gICAgICByZXR1cm4gXCJ1bnZlcmlmaWVkXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBcIlwiO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGlzYWJsZV9jaGVjayA9IGVudl92YXIgPT5cbiAgdHlwZW9mIGVudl92YXIgPT09IFwic3RyaW5nXCIgPyBlbnZfdmFyLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiIDogZmFsc2U7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVtYWlsSWQgPSBpZCA9PiBfLmlzU3RyaW5nKGlkKSAmJiBpZC5sZW5ndGggPT09IDMyO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUdXJuSWQgPSBpZCA9PlxuICBfLmlzU3RyaW5nKGlkKSAmJiAvXkN7MX1bMC05XXsxMH0kLy50ZXN0KGlkKTtcbiJdLCJzb3VyY2VSb290IjoiIn0=
8
+ t.exports=function(t){return null!=t&&(n(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&n(t.slice(0,0))}(t)||!!t._isBuffer)}},function(t,e,n){"use strict";var r=n(38),o=n(5),i=n(176),u=n(177),c=n(179),a=n(180);function s(t){this.defaults=t,this.interceptors={request:new i,response:new i}}s.prototype.request=function(t){"string"==typeof t&&(t=o.merge({url:arguments[0]},arguments[1])),(t=o.merge(r,this.defaults,{method:"get"},t)).method=t.method.toLowerCase(),t.baseURL&&!c(t.url)&&(t.url=a(t.baseURL,t.url));var e=[u,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach((function(t){e.unshift(t.fulfilled,t.rejected)})),this.interceptors.response.forEach((function(t){e.push(t.fulfilled,t.rejected)}));e.length;)n=n.then(e.shift(),e.shift());return n},o.forEach(["delete","get","head","options"],(function(t){s.prototype[t]=function(e,n){return this.request(o.merge(n||{},{method:t,url:e}))}})),o.forEach(["post","put","patch"],(function(t){s.prototype[t]=function(e,n,r){return this.request(o.merge(r||{},{method:t,url:e,data:n}))}})),t.exports=s},function(t,e,n){"use strict";var r=n(5);t.exports=function(t,e){r.forEach(t,(function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])}))}},function(t,e,n){"use strict";var r=n(66);t.exports=function(t,e,n){var o=n.config.validateStatus;n.status&&o&&!o(n.status)?e(r("Request failed with status code "+n.status,n.config,null,n.request,n)):t(n)}},function(t,e,n){"use strict";t.exports=function(t,e,n,r,o){return t.config=e,n&&(t.code=n),t.request=r,t.response=o,t}},function(t,e,n){"use strict";var r=n(5);function o(t){return encodeURIComponent(t).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}t.exports=function(t,e,n){if(!e)return t;var i;if(n)i=n(e);else if(r.isURLSearchParams(e))i=e.toString();else{var u=[];r.forEach(e,(function(t,e){null!=t&&(r.isArray(t)&&(e+="[]"),r.isArray(t)||(t=[t]),r.forEach(t,(function(t){r.isDate(t)?t=t.toISOString():r.isObject(t)&&(t=JSON.stringify(t)),u.push(o(e)+"="+o(t))})))})),i=u.join("&")}return i&&(t+=(-1===t.indexOf("?")?"?":"&")+i),t}},function(t,e,n){"use strict";var r=n(5);t.exports=function(t){var e,n,o,i={};return t?(r.forEach(t.split("\n"),(function(t){o=t.indexOf(":"),e=r.trim(t.substr(0,o)).toLowerCase(),n=r.trim(t.substr(o+1)),e&&(i[e]=i[e]?i[e]+", "+n:n)})),i):i}},function(t,e,n){"use strict";var r=n(5);t.exports=r.isStandardBrowserEnv()?function(){var t,e=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function o(t){var r=t;return e&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return t=o(window.location.href),function(e){var n=r.isString(e)?o(e):e;return n.protocol===t.protocol&&n.host===t.host}}():function(){return!0}},function(t,e,n){"use strict";function r(){this.message="String contains an invalid character"}r.prototype=new Error,r.prototype.code=5,r.prototype.name="InvalidCharacterError",t.exports=function(t){for(var e,n,o=String(t),i="",u=0,c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";o.charAt(0|u)||(c="=",u%1);i+=c.charAt(63&e>>8-u%1*8)){if((n=o.charCodeAt(u+=3/4))>255)throw new r;e=e<<8|n}return i}},function(t,e,n){"use strict";var r=n(5);t.exports=r.isStandardBrowserEnv()?{write:function(t,e,n,o,i,u){var c=[];c.push(t+"="+encodeURIComponent(e)),r.isNumber(n)&&c.push("expires="+new Date(n).toGMTString()),r.isString(o)&&c.push("path="+o),r.isString(i)&&c.push("domain="+i),!0===u&&c.push("secure"),document.cookie=c.join("; ")},read:function(t){var e=document.cookie.match(new RegExp("(^|;\\s*)("+t+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},function(t,e,n){"use strict";var r=n(5);function o(){this.handlers=[]}o.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},o.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},o.prototype.forEach=function(t){r.forEach(this.handlers,(function(e){null!==e&&t(e)}))},t.exports=o},function(t,e,n){"use strict";var r=n(5),o=n(178),i=n(67),u=n(38);function c(t){t.cancelToken&&t.cancelToken.throwIfRequested()}t.exports=function(t){return c(t),t.headers=t.headers||{},t.data=o(t.data,t.headers,t.transformRequest),t.headers=r.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),r.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete t.headers[e]})),(t.adapter||u.adapter)(t).then((function(e){return c(t),e.data=o(e.data,e.headers,t.transformResponse),e}),(function(e){return i(e)||(c(t),e&&e.response&&(e.response.data=o(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)}))}},function(t,e,n){"use strict";var r=n(5);t.exports=function(t,e,n){return r.forEach(n,(function(n){t=n(t,e)})),t}},function(t,e,n){"use strict";t.exports=function(t){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(t)}},function(t,e,n){"use strict";t.exports=function(t,e){return e?t.replace(/\/+$/,"")+"/"+e.replace(/^\/+/,""):t}},function(t,e,n){"use strict";var r=n(68);function o(t){if("function"!=typeof t)throw new TypeError("executor must be a function.");var e;this.promise=new Promise((function(t){e=t}));var n=this;t((function(t){n.reason||(n.reason=new r(t),e(n.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.source=function(){var t;return{token:new o((function(e){t=e})),cancel:t}},t.exports=o},function(t,e,n){"use strict";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e){(function(e){t.exports=e}).call(this,{})},function(t,e,n){var r=n(185);t.exports=function(t,e){var n=[];return r(t,(function(t,r,o){e(t,r,o)&&n.push(t)})),n}},function(t,e,n){var r=n(186),o=n(200)(r);t.exports=o},function(t,e,n){var r=n(187),o=n(39);t.exports=function(t,e){return t&&r(t,e,o)}},function(t,e,n){var r=n(188)();t.exports=r},function(t,e){t.exports=function(t){return function(e,n,r){for(var o=-1,i=Object(e),u=r(e),c=u.length;c--;){var a=u[t?c:++o];if(!1===n(i[a],a,i))break}return e}}},function(t,e,n){var r=n(190),o=n(40),i=n(2),u=n(41),c=n(21),a=n(42),s=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=i(t),f=!n&&o(t),l=!n&&!f&&u(t),p=!n&&!f&&!l&&a(t),d=n||f||l||p,h=d?r(t.length,String):[],v=h.length;for(var y in t)!e&&!s.call(t,y)||d&&("length"==y||l&&("offset"==y||"parent"==y)||p&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||c(y,v))||h.push(y);return h}},function(t,e){t.exports=function(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}},function(t,e,n){var r=n(10),o=n(6);t.exports=function(t){return o(t)&&"[object Arguments]"==r(t)}},function(t,e,n){var r=n(20),o=Object.prototype,i=o.hasOwnProperty,u=o.toString,c=r?r.toStringTag:void 0;t.exports=function(t){var e=i.call(t,c),n=t[c];try{t[c]=void 0;var r=!0}catch(t){}var o=u.call(t);return r&&(e?t[c]=n:delete t[c]),o}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e){t.exports=function(){return!1}},function(t,e,n){var r=n(10),o=n(43),i=n(6),u={};u["[object Float32Array]"]=u["[object Float64Array]"]=u["[object Int8Array]"]=u["[object Int16Array]"]=u["[object Int32Array]"]=u["[object Uint8Array]"]=u["[object Uint8ClampedArray]"]=u["[object Uint16Array]"]=u["[object Uint32Array]"]=!0,u["[object Arguments]"]=u["[object Array]"]=u["[object ArrayBuffer]"]=u["[object Boolean]"]=u["[object DataView]"]=u["[object Date]"]=u["[object Error]"]=u["[object Function]"]=u["[object Map]"]=u["[object Number]"]=u["[object Object]"]=u["[object RegExp]"]=u["[object Set]"]=u["[object String]"]=u["[object WeakMap]"]=!1,t.exports=function(t){return i(t)&&o(t.length)&&!!u[r(t)]}},function(t,e){t.exports=function(t){return function(e){return t(e)}}},function(t,e,n){(function(t){var r=n(70),o=e&&!e.nodeType&&e,i=o&&"object"==typeof t&&t&&!t.nodeType&&t,u=i&&i.exports===o&&r.process,c=function(){try{var t=i&&i.require&&i.require("util").types;return t||u&&u.binding&&u.binding("util")}catch(t){}}();t.exports=c}).call(this,n(71)(t))},function(t,e,n){var r=n(199)(Object.keys,Object);t.exports=r},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){var r=n(22);t.exports=function(t,e){return function(n,o){if(null==n)return n;if(!r(n))return t(n,o);for(var i=n.length,u=e?i:-1,c=Object(n);(e?u--:++u<i)&&!1!==o(c[u],u,c););return n}}},function(t,e,n){var r=n(202),o=n(250),i=n(29),u=n(2),c=n(260);t.exports=function(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?u(t)?o(t[0],t[1]):r(t):c(t)}},function(t,e,n){var r=n(203),o=n(249),i=n(82);t.exports=function(t){var e=o(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(n){return n===t||r(n,t,e)}}},function(t,e,n){var r=n(75),o=n(77);t.exports=function(t,e,n,i){var u=n.length,c=u,a=!i;if(null==t)return!c;for(t=Object(t);u--;){var s=n[u];if(a&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++u<c;){var f=(s=n[u])[0],l=t[f],p=s[1];if(a&&s[2]){if(void 0===l&&!(f in t))return!1}else{var d=new r;if(i)var h=i(l,p,f,t,e,d);if(!(void 0===h?o(p,l,3,i,d):h))return!1}}return!0}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(24),o=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():o.call(e,n,1),--this.size,!0)}},function(t,e,n){var r=n(24);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(24);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(24);t.exports=function(t,e){var n=this.__data__,o=r(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}},function(t,e,n){var r=n(23);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(23),o=n(45),i=n(46);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var u=n.__data__;if(!o||u.length<199)return u.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(u)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(74),o=n(215),i=n(3),u=n(76),c=/^\[object .+?Constructor\]$/,a=Function.prototype,s=Object.prototype,f=a.toString,l=s.hasOwnProperty,p=RegExp("^"+f.call(l).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||o(t))&&(r(t)?p:c).test(u(t))}},function(t,e,n){var r,o=n(216),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!i&&i in t}},function(t,e,n){var r=n(4)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(219),o=n(23),i=n(45);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},function(t,e,n){var r=n(220),o=n(221),i=n(222),u=n(223),c=n(224);function a(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}a.prototype.clear=r,a.prototype.delete=o,a.prototype.get=i,a.prototype.has=u,a.prototype.set=c,t.exports=a},function(t,e,n){var r=n(25);t.exports=function(){this.__data__=r?r(null):{},this.size=0}},function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},function(t,e,n){var r=n(25),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(r){var n=e[t];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(e,t)?e[t]:void 0}},function(t,e,n){var r=n(25),o=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return r?void 0!==e[t]:o.call(e,t)}},function(t,e,n){var r=n(25);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=r&&void 0===e?"__lodash_hash_undefined__":e,this}},function(t,e,n){var r=n(26);t.exports=function(t){var e=r(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},function(t,e,n){var r=n(26);t.exports=function(t){return r(this,t).get(t)}},function(t,e,n){var r=n(26);t.exports=function(t){return r(this,t).has(t)}},function(t,e,n){var r=n(26);t.exports=function(t,e){var n=r(this,t),o=n.size;return n.set(t,e),this.size+=n.size==o?0:1,this}},function(t,e,n){var r=n(75),o=n(78),i=n(236),u=n(240),c=n(79),a=n(2),s=n(41),f=n(42),l="[object Object]",p=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,d,h,v){var y=a(t),g=a(e),m=y?"[object Array]":c(t),b=g?"[object Array]":c(e),x=(m="[object Arguments]"==m?l:m)==l,_=(b="[object Arguments]"==b?l:b)==l,w=m==b;if(w&&s(t)){if(!s(e))return!1;y=!0,x=!1}if(w&&!x)return v||(v=new r),y||f(t)?o(t,e,n,d,h,v):i(t,e,m,n,d,h,v);if(!(1&n)){var N=x&&p.call(t,"__wrapped__"),O=_&&p.call(e,"__wrapped__");if(N||O){var A=N?t.value():t,$=O?e.value():e;return v||(v=new r),h(A,$,n,d,v)}}return!!w&&(v||(v=new r),u(t,e,n,d,h,v))}},function(t,e,n){var r=n(46),o=n(232),i=n(233);function u(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<n;)this.add(t[e])}u.prototype.add=u.prototype.push=o,u.prototype.has=i,t.exports=u},function(t,e){t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}},function(t,e){t.exports=function(t,e){return t.has(e)}},function(t,e,n){var r=n(20),o=n(237),i=n(44),u=n(78),c=n(238),a=n(239),s=r?r.prototype:void 0,f=s?s.valueOf:void 0;t.exports=function(t,e,n,r,s,l,p){switch(n){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!l(new o(t),new o(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var d=c;case"[object Set]":var h=1&r;if(d||(d=a),t.size!=e.size&&!h)return!1;var v=p.get(t);if(v)return v==e;r|=2,p.set(t,e);var y=u(d(t),d(e),r,s,l,p);return p.delete(t),y;case"[object Symbol]":if(f)return f.call(t)==f.call(e)}return!1}},function(t,e,n){var r=n(4).Uint8Array;t.exports=r},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t,r){n[++e]=[r,t]})),n}},function(t,e){t.exports=function(t){var e=-1,n=Array(t.size);return t.forEach((function(t){n[++e]=t})),n}},function(t,e,n){var r=n(241),o=Object.prototype.hasOwnProperty;t.exports=function(t,e,n,i,u,c){var a=1&n,s=r(t),f=s.length;if(f!=r(e).length&&!a)return!1;for(var l=f;l--;){var p=s[l];if(!(a?p in e:o.call(e,p)))return!1}var d=c.get(t),h=c.get(e);if(d&&h)return d==e&&h==t;var v=!0;c.set(t,e),c.set(e,t);for(var y=a;++l<f;){var g=t[p=s[l]],m=e[p];if(i)var b=a?i(m,g,p,e,t,c):i(g,m,p,t,e,c);if(!(void 0===b?g===m||u(g,m,n,i,c):b)){v=!1;break}y||(y="constructor"==p)}if(v&&!y){var x=t.constructor,_=e.constructor;x==_||!("constructor"in t)||!("constructor"in e)||"function"==typeof x&&x instanceof x&&"function"==typeof _&&_ instanceof _||(v=!1)}return c.delete(t),c.delete(e),v}},function(t,e,n){var r=n(242),o=n(244),i=n(39);t.exports=function(t){return r(t,i,o)}},function(t,e,n){var r=n(243),o=n(2);t.exports=function(t,e,n){var i=e(t);return o(t)?i:r(i,n(t))}},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,o=t.length;++n<r;)t[o+n]=e[n];return t}},function(t,e,n){var r=n(69),o=n(245),i=Object.prototype.propertyIsEnumerable,u=Object.getOwnPropertySymbols,c=u?function(t){return null==t?[]:(t=Object(t),r(u(t),(function(e){return i.call(t,e)})))}:o;t.exports=c},function(t,e){t.exports=function(){return[]}},function(t,e,n){var r=n(7)(n(4),"DataView");t.exports=r},function(t,e,n){var r=n(7)(n(4),"Promise");t.exports=r},function(t,e,n){var r=n(7)(n(4),"Set");t.exports=r},function(t,e,n){var r=n(81),o=n(39);t.exports=function(t){for(var e=o(t),n=e.length;n--;){var i=e[n],u=t[i];e[n]=[i,u,r(u)]}return e}},function(t,e,n){var r=n(77),o=n(251),i=n(257),u=n(47),c=n(81),a=n(82),s=n(28);t.exports=function(t,e){return u(t)&&c(e)?a(s(t),e):function(n){var u=o(n,t);return void 0===u&&u===e?i(n,t):r(e,u,3)}}},function(t,e,n){var r=n(83);t.exports=function(t,e,n){var o=null==t?void 0:r(t,e);return void 0===o?n:o}},function(t,e,n){var r=n(253),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g,u=r((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(o,(function(t,n,r,o){e.push(r?o.replace(i,"$1"):n||t)})),e}));t.exports=u},function(t,e,n){var r=n(254);t.exports=function(t){var e=r(t,(function(t){return 500===n.size&&n.clear(),t})),n=e.cache;return e}},function(t,e,n){var r=n(46);function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=e?e.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var u=t.apply(this,r);return n.cache=i.set(o,u)||i,u};return n.cache=new(o.Cache||r),n}o.Cache=r,t.exports=o},function(t,e,n){var r=n(20),o=n(256),i=n(2),u=n(27),c=r?r.prototype:void 0,a=c?c.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(i(e))return o(e,t)+"";if(u(e))return a?a.call(e):"";var n=e+"";return"0"==n&&1/e==-1/0?"-0":n}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length,o=Array(r);++n<r;)o[n]=e(t[n],n,t);return o}},function(t,e,n){var r=n(258),o=n(259);t.exports=function(t,e){return null!=t&&o(t,e,r)}},function(t,e){t.exports=function(t,e){return null!=t&&e in Object(t)}},function(t,e,n){var r=n(84),o=n(40),i=n(2),u=n(21),c=n(43),a=n(28);t.exports=function(t,e,n){for(var s=-1,f=(e=r(e,t)).length,l=!1;++s<f;){var p=a(e[s]);if(!(l=null!=t&&n(t,p)))break;t=t[p]}return l||++s!=f?l:!!(f=null==t?0:t.length)&&c(f)&&u(p,f)&&(i(t)||o(t))}},function(t,e,n){var r=n(261),o=n(262),i=n(47),u=n(28);t.exports=function(t){return i(t)?r(u(t)):o(t)}},function(t,e){t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},function(t,e,n){var r=n(83);t.exports=function(t){return function(e){return r(e,t)}}},function(t,e){t.exports=function(t,e,n,r){for(var o=t.length,i=n+(r?1:-1);r?i--:++i<o;)if(e(t[i],i,t))return i;return-1}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,o=t.length;++r<o;)if(t[r]===e)return r;return-1}},function(t,e,n){var r=n(267),o=n(3),i=n(27),u=/^[-+]0x[0-9a-f]+$/i,c=/^0b[01]+$/i,a=/^0o[0-7]+$/i,s=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(i(t))return NaN;if(o(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=o(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=r(t);var n=c.test(t);return n||a.test(t)?s(t.slice(2),n?2:8):u.test(t)?NaN:+t}},function(t,e,n){var r=n(268),o=/^\s+/;t.exports=function(t){return t?t.slice(0,r(t)+1).replace(o,""):t}},function(t,e){var n=/\s/;t.exports=function(t){for(var e=t.length;e--&&n.test(t.charAt(e)););return e}},function(t,e,n){var r=n(30),o=n(4);t.exports=function(t,e,n){var i=1&e,u=r(t);return function e(){var r=this&&this!==o&&this instanceof e?u:t;return r.apply(i?n:this,arguments)}}},function(t,e,n){var r=n(49),o=n(30),i=n(92),u=n(95),c=n(52),a=n(31),s=n(4);t.exports=function(t,e,n){var f=o(t);return function o(){for(var l=arguments.length,p=Array(l),d=l,h=c(o);d--;)p[d]=arguments[d];var v=l<3&&p[0]!==h&&p[l-1]!==h?[]:a(p,h);if((l-=v.length)<n)return u(t,e,i,o.placeholder,void 0,p,v,void 0,void 0,n-l);var y=this&&this!==s&&this instanceof o?f:t;return r(y,this,p)}}},function(t,e){t.exports=function(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}},function(t,e,n){var r=n(50),o=n(96),i=n(274),u=n(276);t.exports=function(t){var e=i(t),n=u[e];if("function"!=typeof n||!(e in r.prototype))return!1;if(t===n)return!0;var c=o(n);return!!c&&t===c[0]}},function(t,e){t.exports=function(){}},function(t,e,n){var r=n(275),o=Object.prototype.hasOwnProperty;t.exports=function(t){for(var e=t.name+"",n=r[e],i=o.call(r,e)?n.length:0;i--;){var u=n[i],c=u.func;if(null==c||c==t)return u.name}return e}},function(t,e){t.exports={}},function(t,e,n){var r=n(50),o=n(97),i=n(51),u=n(2),c=n(6),a=n(277),s=Object.prototype.hasOwnProperty;function f(t){if(c(t)&&!u(t)&&!(t instanceof r)){if(t instanceof o)return t;if(s.call(t,"__wrapped__"))return a(t)}return new o(t)}f.prototype=i.prototype,f.prototype.constructor=f,t.exports=f},function(t,e,n){var r=n(50),o=n(97),i=n(98);t.exports=function(t){if(t instanceof r)return t.clone();var e=new o(t.__wrapped__,t.__chain__);return e.__actions__=i(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}},function(t,e){var n=/\{\n\/\* \[wrapped with (.+)\] \*/,r=/,? & /;t.exports=function(t){var e=t.match(n);return e?e[1].split(r):[]}},function(t,e){var n=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/;t.exports=function(t,e){var r=e.length;if(!r)return t;var o=r-1;return e[o]=(r>1?"& ":"")+e[o],e=e.join(r>2?", ":" "),t.replace(n,"{\n/* [wrapped with "+e+"] */\n")}},function(t,e,n){var r=n(281),o=n(282),i=n(29),u=o?function(t,e){return o(t,"toString",{configurable:!0,enumerable:!1,value:r(e),writable:!0})}:i;t.exports=u},function(t,e){t.exports=function(t){return function(){return t}}},function(t,e,n){var r=n(7),o=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=o},function(t,e,n){var r=n(284),o=n(285),i=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]];t.exports=function(t,e){return r(i,(function(n){var r="_."+n[0];e&n[1]&&!o(t,r)&&t.push(r)})),t.sort()}},function(t,e){t.exports=function(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}},function(t,e,n){var r=n(86);t.exports=function(t,e){return!!(null==t?0:t.length)&&r(t,e,0)>-1}},function(t,e,n){var r=n(98),o=n(21),i=Math.min;t.exports=function(t,e){for(var n=t.length,u=i(e.length,n),c=r(t);u--;){var a=e[u];t[u]=o(a,n)?c[a]:void 0}return t}},function(t,e,n){var r=n(49),o=n(30),i=n(4);t.exports=function(t,e,n,u){var c=1&e,a=o(t);return function e(){for(var o=-1,s=arguments.length,f=-1,l=u.length,p=Array(l+s),d=this&&this!==i&&this instanceof e?a:t;++f<l;)p[f]=u[f];for(;s--;)p[f++]=arguments[++o];return r(d,c?n:this,p)}}},function(t,e,n){var r=n(93),o=n(94),i=n(31),u=Math.min;t.exports=function(t,e){var n=t[1],c=e[1],a=n|c,s=a<131,f=128==c&&8==n||128==c&&256==n&&t[7].length<=e[8]||384==c&&e[7].length<=e[8]&&8==n;if(!s&&!f)return t;1&c&&(t[2]=e[2],a|=1&n?0:4);var l=e[3];if(l){var p=t[3];t[3]=p?r(p,l,e[4]):l,t[4]=p?i(t[3],"__lodash_placeholder__"):e[4]}return(l=e[5])&&(p=t[5],t[5]=p?o(p,l,e[6]):l,t[6]=p?i(t[5],"__lodash_placeholder__"):e[6]),(l=e[7])&&(t[7]=l),128&c&&(t[8]=null==t[8]?e[8]:u(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=a,t}},function(t,e,n){var r=n(29),o=n(290),i=n(102);t.exports=function(t,e){return i(o(t,e,r),t+"")}},function(t,e,n){var r=n(49),o=Math.max;t.exports=function(t,e,n){return e=o(void 0===e?t.length-1:e,0),function(){for(var i=arguments,u=-1,c=o(i.length-e,0),a=Array(c);++u<c;)a[u]=i[e+u];u=-1;for(var s=Array(e+1);++u<e;)s[u]=i[u];return s[e]=n(a),r(t,this,s)}}},function(t,e,n){var r=n(292),o=n(103),i=n(294),u=n(85);t.exports=function(t){return function(e){e=u(e);var n=o(e)?i(e):void 0,c=n?n[0]:e.charAt(0),a=n?r(n,1).join(""):e.slice(1);return c[t]()+a}}},function(t,e,n){var r=n(293);t.exports=function(t,e,n){var o=t.length;return n=void 0===n?o:n,!e&&n>=o?t:r(t,e,n)}},function(t,e){t.exports=function(t,e,n){var r=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(n=n>o?o:n)<0&&(n+=o),o=e>n?0:n-e>>>0,e>>>=0;for(var i=Array(o);++r<o;)i[r]=t[r+e];return i}},function(t,e,n){var r=n(295),o=n(103),i=n(296);t.exports=function(t){return o(t)?i(t):r(t)}},function(t,e){t.exports=function(t){return t.split("")}},function(t,e){var n="[\\ud800-\\udfff]",r="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",o="\\ud83c[\\udffb-\\udfff]",i="[^\\ud800-\\udfff]",u="(?:\\ud83c[\\udde6-\\uddff]){2}",c="[\\ud800-\\udbff][\\udc00-\\udfff]",a="(?:"+r+"|"+o+")"+"?",s="[\\ufe0e\\ufe0f]?"+a+("(?:\\u200d(?:"+[i,u,c].join("|")+")[\\ufe0e\\ufe0f]?"+a+")*"),f="(?:"+[i+r+"?",r,u,c,n].join("|")+")",l=RegExp(o+"(?="+o+")|"+f+s,"g");t.exports=function(t){return t.match(l)||[]}},function(t,e,n){var r=n(32);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return!1;var n=r[e];if(!n)return!1;const o=t.replace(/[\s-]/g,"");return n.filter((function(t){return!t.regex.test(o)})).map((function(t){return t.description})).length<n.length}},function(t,e,n){var r=n(32);t.exports=function(t,e){if("string"!=typeof t||"string"!=typeof e)return{valid:!1,reasons:["License and State must be Strings"]};var n=r[e];if(!n)return{valid:!1,reasons:["Not a valid US State"]};const o=t.replace(/[\s-]/g,"");var i=n.filter((function(t){return!t.regex.test(o)})).map((function(t){return t.description}));return{valid:i.length<n.length,reasons:i}}},function(t,e,n){var r=n(32);t.exports=Object.keys(r)},function(t,e,n){var r=n(301),o=n(302),i=n(88);t.exports=function(t){return function(e,n,u){return u&&"number"!=typeof u&&o(e,n,u)&&(n=u=void 0),e=i(e),void 0===n?(n=e,e=0):n=i(n),u=void 0===u?e<n?1:-1:i(u),r(e,n,u,t)}}},function(t,e){var n=Math.ceil,r=Math.max;t.exports=function(t,e,o,i){for(var u=-1,c=r(n((e-t)/(o||1)),0),a=Array(c);c--;)a[i?c:++u]=t,t+=o;return a}},function(t,e,n){var r=n(44),o=n(22),i=n(21),u=n(3);t.exports=function(t,e,n){if(!u(n))return!1;var c=typeof e;return!!("number"==c?o(n)&&i(e,n.length):"string"==c&&e in n)&&r(n[e],t)}},function(t,e,n){"use strict";n.r(e),n.d(e,"BaseAPI",(function(){return f})),n.d(e,"colors",(function(){return r})),n.d(e,"formatDate",(function(){return W})),n.d(e,"formatEmail",(function(){return q})),n.d(e,"formatName",(function(){return H})),n.d(e,"formatPhone",(function(){return V})),n.d(e,"formatSSN",(function(){return X})),n.d(e,"formatZipcode",(function(){return K})),n.d(e,"getRejectMessage",(function(){return G})),n.d(e,"getStatus",(function(){return J})),n.d(e,"isDate",(function(){return Q})),n.d(e,"isObject",(function(){return tt})),n.d(e,"isUrl",(function(){return et})),n.d(e,"maskName",(function(){return ot})),n.d(e,"objectToQuery",(function(){return it})),n.d(e,"prettifyDate",(function(){return st})),n.d(e,"toRelativeDate",(function(){return ee})),n.d(e,"toRelativeFromISO",(function(){return te})),n.d(e,"toBoolean",(function(){return Yt})),n.d(e,"Setter",(function(){return Wt})),n.d(e,"renderDetailValue",(function(){return Ot})),n.d(e,"validators",(function(){return i})),n.d(e,"legalReplace",(function(){return rt})),n.d(e,"parsePythonDate",(function(){return B})),n.d(e,"parseQuery",(function(){return ut})),n.d(e,"pickColor",(function(){return ct})),n.d(e,"pickScoreColor",(function(){return at})),n.d(e,"selectMasterKey",(function(){return At})),n.d(e,"storageMock",(function(){return qt})),n.d(e,"toSentenceCase",(function(){return oe})),n.d(e,"toTitleCase",(function(){return ie})),n.d(e,"translateStatus",(function(){return Ee})),n.d(e,"availableStatuses",(function(){return o})),n.d(e,"validateDriversLicense",(function(){return Te})),n.d(e,"currentStates",(function(){return Le})),n.d(e,"validate_ssn",(function(){return ke})),n.d(e,"invalidFirstThree",(function(){return Ie})),n.d(e,"valueExists",(function(){return _t}));var r={};n.r(r),n.d(r,"primary",(function(){return l})),n.d(r,"secondary",(function(){return p})),n.d(r,"emerald",(function(){return d})),n.d(r,"tartOrange",(function(){return h})),n.d(r,"yellowOrange",(function(){return v})),n.d(r,"slateGray",(function(){return y})),n.d(r,"cadetBlue",(function(){return g})),n.d(r,"periwinkle",(function(){return m})),n.d(r,"aliceBlue",(function(){return b})),n.d(r,"smokeWhite",(function(){return x})),n.d(r,"alert0",(function(){return _})),n.d(r,"alert1",(function(){return w})),n.d(r,"alert2",(function(){return N})),n.d(r,"alert3",(function(){return O})),n.d(r,"ceruleanBlue",(function(){return A})),n.d(r,"peach",(function(){return $})),n.d(r,"babyPink",(function(){return j})),n.d(r,"spanishPink",(function(){return R})),n.d(r,"beauBlue",(function(){return E})),n.d(r,"cultured",(function(){return S})),n.d(r,"blueBell",(function(){return L})),n.d(r,"babyBlueEyes",(function(){return T})),n.d(r,"powderBlue",(function(){return M})),n.d(r,"honeyDew",(function(){return C})),n.d(r,"buff",(function(){return D})),n.d(r,"black",(function(){return I})),n.d(r,"white",(function(){return k})),n.d(r,"noticeMuted",(function(){return P})),n.d(r,"noticeError",(function(){return U})),n.d(r,"noticeWarning",(function(){return Z})),n.d(r,"noticeSuccess",(function(){return F})),n.d(r,"noticeInfo",(function(){return z}));var o={};n.r(o),n.d(o,"INITIATED",(function(){return ue})),n.d(o,"PENDING",(function(){return ce})),n.d(o,"WITHDRAWN",(function(){return ae})),n.d(o,"APPROVED",(function(){return se})),n.d(o,"REJECTED",(function(){return fe})),n.d(o,"CONSENT",(function(){return le})),n.d(o,"EMAILED",(function(){return pe})),n.d(o,"REVIEW",(function(){return de})),n.d(o,"REVIEWING",(function(){return he})),n.d(o,"CONSIDER",(function(){return ve})),n.d(o,"PROCESSING",(function(){return ye})),n.d(o,"PENDING_DISPUTE",(function(){return ge})),n.d(o,"PENDING_FIRST_NOTICE",(function(){return me})),n.d(o,"PENDING_SECOND_NOTICE",(function(){return be})),n.d(o,"FIRST_NOTICE",(function(){return xe})),n.d(o,"SECOND_NOTICE",(function(){return _e})),n.d(o,"SSN_TRACE_FAILED",(function(){return we})),n.d(o,"MVR_FAILED",(function(){return Ne})),n.d(o,"COMPLIANCE",(function(){return Oe})),n.d(o,"COMPLIANCE_SO",(function(){return Ae})),n.d(o,"VERIFYING",(function(){return $e})),n.d(o,"COMPLIANCEREVIEW",(function(){return je})),n.d(o,"STORED",(function(){return Re})),n.d(o,"default",(function(){return Ee}));var i={};n.r(i),n.d(i,"validateEmail",(function(){return We})),n.d(i,"validatePhone",(function(){return qe})),n.d(i,"isAlphaNumeric",(function(){return He})),n.d(i,"isValidCanadianZipcode",(function(){return Ye})),n.d(i,"validateSSN",(function(){return Ve})),n.d(i,"validateCheck",(function(){return Xe})),n.d(i,"containsAtSymbol",(function(){return Ke})),n.d(i,"containsNumber",(function(){return Ge})),n.d(i,"validateName",(function(){return Je})),n.d(i,"validateAddress",(function(){return Qe})),n.d(i,"validateCustomInput",(function(){return tn})),n.d(i,"validateZipcode",(function(){return en})),n.d(i,"validateCanadianZipcode",(function(){return nn})),n.d(i,"isArray",(function(){return rn})),n.d(i,"validateMVRCheck",(function(){return on})),n.d(i,"validatePhoneVerification",(function(){return un})),n.d(i,"disable_check",(function(){return cn})),n.d(i,"validateEmailId",(function(){return an})),n.d(i,"validateTurnId",(function(){return sn}));var u=n(104),c=n(53);function a(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function s(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var f=function(){function t(e,n){var r=this;!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),s(this,"approveWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/approve"),e)})),s(this,"withdrawWorker",(function(t,e){return r.api.post("/partners/me/workers/".concat(t,"/withdraw"),e)})),s(this,"rejectWorker",(function(t,e){return r.api.put("/partners/me/workers/".concat(t,"/reject"),e)})),s(this,"getMember",(function(){return r.api.get("/partners/me")})),s(this,"getSettings",(function(){return r.api.get("/partners/settings")})),s(this,"getWorkers",(function(t){return r.api.get("/partners/me/workers?query=".concat(JSON.stringify(t)))})),s(this,"getPendingWorkers",(function(t){return r.api.get("/cohort/candidates?query=".concat(JSON.stringify(t)))})),s(this,"getWorker",(function(t){return r.api.get("/partners/me/workers/".concat(t,"?full=false"))})),s(this,"checkWorker",(function(t){return r.api.post("/partners/workers",t)})),s(this,"validatePhone",(function(t){return r.api.get("PhoneNumbers/".concat(t,"?Type=carrier&CountryCode=US"),null,{headers:{Authorization:"Basic ".concat(Object(c.btoa)(TWILIO_KEY))}})})),s(this,"validateEmail",(function(t){return r.api.get("/verify_email?email=".concat(encodeURIComponent(t)))})),s(this,"validateSSN",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/validate"),{ssn:e})})),s(this,"validateCandidateEmail",(function(t,e){return r.api.get("/candidate_verify_email/".concat(t,"?email=").concat(encodeURIComponent(e)))})),s(this,"getCandidateData",(function(t){return r.api.get("/candidate_consent_email/candidate/".concat(t))})),s(this,"getInterests",(function(){return r.api.get("/interests")})),s(this,"getTransports",(function(){return r.api.get("/transports")})),s(this,"getPaymetMethod",(function(){return r.api.get("/payment_settings/partner_methods")})),s(this,"getBackgroundReport",(function(t,e){return r.api.get("/candidate_consent_email/candidate/".concat(t,"/report?token=").concat(e))})),s(this,"provideCandidateConsent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t),e)})),s(this,"provideCandidateConsentAsync",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/async"),e)})),s(this,"getTrialStatus",(function(){return r.api.get("/organizations/trial_status")})),s(this,"newCandidate",(function(){return r.api.get("/organizations/new_candidate")})),s(this,"getTerms",(function(){return r.api.get("/partners/terms")})),s(this,"consent",(function(t){return r.api.post("/partners/me/consent",t)})),s(this,"apply",(function(t){var e=t.partner_name,n=t.partner_id;return r.api.post("/candidate_consent_email/".concat(e,"/").concat(n),{})})),s(this,"assent",(function(t,e){return r.api.post("/candidate_consent_email/candidate/".concat(t,"/assent"),e)})),s(this,"getCohortCount",(function(t){return r.api.get("/cohort/count?query=".concat(JSON.stringify(t)))})),s(this,"createCohort",(function(t){return r.api.post("/cohort",t)})),s(this,"requestCohortWorkers",(function(t,e){return r.api.post("/cohort/".concat(t,"/request"),e)})),s(this,"getNotes",(function(t){return r.api.get("partners/me/workers/".concat(t,"/notes"))})),s(this,"saveNote",(function(t,e){return r.api.put("partners/me/workers/".concat(t,"/notes"),e)})),s(this,"resendEmail",(function(t){return r.api.post("partners/me/workers/".concat(t,"/email/consent/resend"))})),s(this,"postSettings",(function(t,e){return r.api.post(t,e)})),s(this,"btoaTest",(function(t){return Object(c.btoa)(t)})),e&&(this.api=Object(u.create)({baseURL:e,headers:{Accept:"application/json"}})),n&&(this.twilioKey=n)}var e,n,r;return e=t,(n=[{key:"setToken",value:function(t){return t?(this.api.setHeaders({Authorization:"Bearer ".concat(t)}),this):this}},{key:"setStatusPreference",value:function(t){return t?(this.api.setHeaders({Prefer:"status=".concat(t)}),this):this}}])&&a(e.prototype,n),r&&a(e,r),Object.defineProperty(e,"prototype",{writable:!1}),t}(),l="#2D3047",p="#00D9CD",d="#0ed067",h="#fb4d49",v="#faa73c",y="#5f7d95",g="#9bb1c8",m="#bfcddd",b="#e1e8f3",x="#f7f9fc",_=y,w=d,N=h,O=v,A="#4357ad",$="#f9cb9c",j="#f4cccc",R="#e6b8af",E="#cfe2f3",S="#e3e9ed",L="#b4a7d6",T="#9fc5e8",M="#b7ecec",C="#d9ead3",D="#ffe599",I="#000",k="#fff",P=y,U="#ff6c69",Z="#faa03c",F="#13c063",z=y,B=function(t){if(!isNaN(parseInt(t,10))){var e=new Date(1e3*t),n=e.getTime();if(n){var r=new Date(n+60*e.getTimezoneOffset()*1e3),o=e.getTimezoneOffset()/60,i=e.getHours();return r.setHours(i-o),r}}return null},W=function(t){var e=B(t);return e?"".concat(e.getMonth()+1,"/").concat(e.getDate(),"/").concat(e.getFullYear()):"N/A"},q=function(t){return"string"!=typeof t?"":t.replace(/\s+/g,"")},H=function(t){return"string"!=typeof t?"":t.replace(/\s\s+/g," ")},Y=function(t){var e=t.phone,n=t.encrypted,r=t.areaCode,o=n?"(".concat(e[0],") ").concat(e[1]," ").concat(e[2]).concat(e[3]):"(".concat(e[0],") ").concat(e[1],"-").concat(e[2]).concat(e[3]);return o=r?"".concat(r," ").concat(o):o},V=function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if("string"!=typeof t)return"N/A";var n,r=e?t:t.replace(/\D/g,"").substring(0,11);return r.length<10?r:(r.length>10&&(n=r[0],r=r.substring(1,11)),r=r.match(/.{1,3}/g),Y({phone:r,encrypted:e,areaCode:n}))},X=function(t){if("string"!=typeof t)return"N/A";var e=t.replace(/\D/g,"").substring(0,9);return e.length<9?e:"".concat(e.substring(0,3),"-").concat(e.substring(3,5),"-").concat(e.substring(5,9))},K=function(t){return"string"!=typeof t?"":t.replace(/\D/g,"").substring(0,5)},G=function(t){if(!["RISK_MANAGEMENT","FCRA_E","FCRA_N","FCRA"].includes(t))return"Reject";return{RISK_MANAGEMENT:"Reject",FCRA:"Pre-Adverse Action",FCRA_E:"Pre-Adverse Action",FCRA_N:"Adverse Action"}[t]},J=function(t){return{review:"reviewing",pending:"consider",review__identity:"verifying",review__mvr:"Compliance Review",review__so:"Compliance Review",review__qa:"Compliance Review",initiated:"Stored"}[t]||t},Q=function(t){if(isNaN(parseInt(t,10)))return!1;var e=new Date(1e3*t);return!(e>new Date)&&e.getYear()>100},tt=function(t){return!!t&&t.constructor===Object},et=function(t){return/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-/]))?/.test(t)},nt=["Turn Technologies Inc.","[COMPANY]"],rt=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if("string"!=typeof t)return"";for(var n=t,r=0;r<nt.length;r++)n=n.replace(nt[r],e);return n},ot=function(t){return"string"==typeof t&&t.length>0?"".concat(t.slice(0,1),"."):t},it=function(t){if(!tt(t))return null;var e=Object.keys(t);if(0===e.length)return null;var n=e.map((function(e){return"".concat(e,"=").concat(t[e])}));return"?".concat(n.join("&"))},ut=function(t){if("string"!=typeof t)return t;var e=new URLSearchParams(t.startsWith("?")?t.slice(1):t),n={};return e.forEach((function(t,e){n[e]=t})),n},ct=function(t){switch("string"==typeof t?t.toLowerCase():t){case"first_notice":case"second_notice":case"pending":case"consider":return Z;case"unverified":case"not_verified":case"fraud":case"not_matched":case"rejected":case"deceased":case"withdrawn":return U;case"verified":case"matched":case"valid":case"ready":case"complete":case"clear":case"fulfilled":case"randomized":case"approved":return F;case"processing":case"reviewing":case"review":case"consent":case"emailed":case"initiated":case"attention":case"verifying":case"review__mvr":case"review__qa":return z;case"none":default:return"gray"}},at=function(t){var e=parseInt(t,10);return e>89?F:e>69?Z:U},st=function(t){var e=new Date(t),n=e.toUTCString().slice(8,11),r=e.toUTCString().slice(5,7),o=e.toUTCString().slice(12,16);return"".concat(n," ").concat(r,", ").concat(o)},ft=n(105),lt=n.n(ft),pt=n(3),dt=n.n(pt),ht=n(2),vt=n.n(ht),yt=n(106),gt=n.n(yt),mt=n(107),bt=n.n(mt),xt=["None","none","N/A"],_t=function(t){return!!t&&(vt()(t)||dt()(t)?!bt()(t):!(gt()(xt,t)>-1))},wt=function t(e){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return vt()(e)?n?e.map((function(e){return dt()(e)?Nt(e,n):t(e,n)})):e.join(" / "):dt()(e)?Nt(e,n):e},Nt=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=lt()(t,(function(t){return _t(t)}));return n.map((function(t){return wt(t,e)})).join(" / ")},Ot=wt,At=function(t,e){if(!Array.isArray(t)||0===t.length)return"";var n,r=t[0];_t(r[e])?n=e:n=Object.keys(r).find((function(t){return _t(r[t])}));return n},$t=n(11),jt=n.n($t),Rt=n(54),Et=n.n(Rt);function St(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function Lt(t,e,n){return e&&St(t.prototype,e),n&&St(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t}function Tt(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Mt(t){return(Mt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Ct=function(t,e,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r;Mt(o)===t&&(e[n]=o)},Dt=function(t,e,n,r){var o=arguments.length>4&&void 0!==arguments[4]?arguments[4]:r,i=Array.isArray(n)?n:t[n];i.includes(o)&&(t[e]=o)},It=jt()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Et()(Ct,t,e,n,r)})),kt=jt()((function(t,e){return function(){"boolean"==typeof t[e]&&(t[e]=!t[e])}})),Pt=It("string"),Ut=It("number"),Zt=It("boolean"),Ft=jt()((function(t,e,n){n&&(t[e]=n)})),zt=jt()((function(t,e,n){n&&(t[e]=!n)})),Bt=jt()((function(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:void 0;return Et()(Dt,t,e,n,r)})),Wt=Lt((function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),Tt(this,"setStringFactory",Pt(this)),Tt(this,"setNumberFactory",Ut(this)),Tt(this,"setBoolFactory",Zt(this)),Tt(this,"setTruthyFactory",Ft(this)),Tt(this,"setFalsyFactory",zt(this)),Tt(this,"setOptionFactory",Bt(this)),Tt(this,"toggleBoolFactory",kt(this))}));var qt=function(){var t={};return{setItem:function(e,n){t[e]=n||""},getItem:function(e){return e in t?t[e]:null},removeItem:function(e){delete t[e]},get length(){return Object.keys(t).length},key:function(e){return Object.keys(t)[e]||null}}};function Ht(t){return(Ht="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Yt=function(t){switch(Ht(t)){case"boolean":return t;case"string":return"true"===t.toLowerCase();case"number":return t>0;case"undefined":return!1;case"object":return!!t&&(Array.isArray(t)?t.length>0:!(0===Object.getOwnPropertyNames(t).length));default:return!1}},Vt=n(8),Xt=n.n(Vt),Kt=n(108),Gt=n.n(Kt),Jt=n(109),Qt=n.n(Jt);Xt.a.extend(Gt.a),Xt.a.extend(Qt.a);var te=function(t){if("string"!=typeof t)return"N/A";var e=Xt()(t);if(!e.isValid())return"N/A";var n=Xt()().utcOffset(e.utcOffset());return n.diff(e,"day")<8?e.from(n):e.format("M/DD/YYYY")},ee=function(t){if("number"!=typeof t)return"N/A";var e=B(t);if(!e)return"N/A";var n=Xt()(e),r=Xt()().utcOffset(e.getTimezoneOffset()).subtract(e.getTimezoneOffset()/60,"hour");return r.diff(n,"day")<8?n.from(r):n.format("M/DD/YYYY")},ne=n(110),re=n.n(ne),oe=function(t){var e=t.toLowerCase();return[". ","! ","? "].forEach((function(t){e=e.split(t).map(re.a).join(t)})),e},ie=function(t){return("string"==typeof t?t:String(t)).toLowerCase().split(" ").map((function(t){var e=t.charAt(0).toUpperCase(),n=t.slice(1);return"".concat(e).concat(n)})).join(" ")},ue="initiated",ce="pending",ae="withdrawn",se="approved",fe="rejected",le="consent",pe="emailed",de="review",he="reviewing",ve="consider",ye="processing",ge="pending__dispute",me="pending__first_notice",be="pending__second_notice",xe="first_notice",_e="second_notice",we="review__identity",Ne="review__mvr",Oe="review__qa",Ae="review__so",$e="verifying",je="Compliance Review",Re="Stored",Ee=function(t,e){switch(t){case se:return se;case ce:case ge:return ce;case fe:return fe;case me:return e?xe:fe;case be:return e?_e:fe;case le:return le;case ye:return ye;case pe:return pe;case de:return de;case he:return he;case ae:return ae;case ue:return Re;case we:return $e;case Ne:case Oe:case Ae:return je;default:return ce}},Se=n(55),Le=Object.keys(Se.driversLicenseRegex),Te=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return"string"!=typeof t||"string"!=typeof e?{valid:!1,reasons:"License and State must be Strings"}:Le.includes(e)?Object(Se.validateUSDriversLicense)(t,e):{valid:!0,reasons:""}},Me=n(111),Ce=/^(986|(?!000|666|123456789|(\d)\2{8})[0-8][0-9]{2})(?!00)[0-9]{2}(?!0000)[0-9]{4}$/,De=/^078051120|219099999$/,Ie=n.n(Me)()(900,1e3).map((function(t){return"".concat(t)})).concat(["000","666"]),ke=function(t){if("string"!=typeof t)return!1;var e=t.replace(/\D/g,"");return!De.test(e)&&Ce.test(e)},Pe=n(12),Ue=n.n(Pe);function Ze(t){return function(t){if(Array.isArray(t))return Fe(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t,e){if(!t)return;if("string"==typeof t)return Fe(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);"Object"===n&&t.constructor&&(n=t.constructor.name);if("Map"===n||"Set"===n)return Array.from(t);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Fe(t,e)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Fe(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function ze(t){return(ze="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var Be=function(t){return Array.isArray(t)||!(!t||"object"!==ze(t)||"number"!=typeof t.length||"function"!=typeof t.slice)},We=function(t){if(!t)return!1;return/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/.test(t)},qe=function(t){if(!t)return!1;return/^1?\s?\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/.test(t)},He=function(t){return null!==t.match(/^([a-z0-9])+/i)},Ye=function(t){return null!==t.match(/^[A-Za-z]\d[A-Za-z]$/)||null!==t.match(/^[A-Za-z]\d[A-Za-z][ -]?\d[A-Za-z]\d/)},Ve=function(t){return"string"==typeof t&&9===t.replace(/\D/g,"").length},Xe=function(t){var e="clear"===t?[]:t;return Be(e)?Ze(e):null},Ke=function(t){return/@/.test(t)},Ge=function(t){return/\d/.test(t)},Je=function(t){return 0!==t.trim().length&&!Ke(t)&&!Ge(t)},Qe=function(t){return 0!==t.trim().length&&!Ke(t)},tn=function(t){return!!Ue()(t)&&0!==t.trim().length},en=function(t){return Ue()(t)&&t.length>=5},nn=function(t){return Ue()(t)&&He(t)&&Ye(t)},rn=function(t){return Be(t)},on=function(t){return dt()(t)||"string"==typeof t?t:{}},un=function(t){switch(t){case"verified":case"True":return"verified";case"unverified":case"False":return"unverified";default:return""}},cn=function(t){return"string"==typeof t&&"true"===t.toLowerCase()},an=function(t){return Ue()(t)&&32===t.length},sn=function(t){return Ue()(t)&&/^C{1}[0-9]{10}$/.test(t)}}])}));
9
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90dXJuLXNoYXJlZC93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jdXJyeTIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jdXJyeTEuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcm9vdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0TGlrZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE5hdGl2ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9kYXlqcy9kYXlqcy5taW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19hcml0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2N1cnJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2hhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2N1cnJ5My5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvY3VycnlOLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faXNQbGFjZWhvbGRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX3JlZHVjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2lzQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL21hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzSW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTGlzdENhY2hlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbmF0aXZlQ3JlYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL190b0tleS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVDdG9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fcmVwbGFjZUhvbGRlcnMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2Uvc3JjL2xpY2Vuc2UtcmVnZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcHJvY2Vzcy9icm93c2VyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMva2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcmVkdWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fY2hlY2tGb3JNZXRob2QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9rZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fTWFwQ2FjaGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcHBseS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xhenlXcmFwcGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUxvZGFzaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEhvbGRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9CYXNlNjQvYmFzZTY0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9wYXJ0aWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlL3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZXF1YWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jb25jYXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19pc1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcHJvcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvYWx3YXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvbWF4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL3hoci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9jcmVhdGVFcnJvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlGaWx0ZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19mcmVlR2xvYmFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLyh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19TdGFjay5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEFycmF5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19pc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0UGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9JbnRlZ2VyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC90b0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVdyYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2V0RGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21ldGFNYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVIeWJyaWQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb21wb3NlQXJncy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvbXBvc2VBcmdzUmlnaHQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVSZWN1cnJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0RGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xvZGFzaFdyYXBwZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3B5QXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXREYXRhLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2hvcnRPdXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRXcmFwVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1VuaWNvZGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXBpc2F1Y2UvZGlzdC9hcGlzYXVjZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmlsdGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pbmRleE9mLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0VtcHR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2RheWpzL3BsdWdpbi9yZWxhdGl2ZVRpbWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL3V0Yy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdXBwZXJGaXJzdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvdGltZXJzLWJyb3dzZXJpZnkvbWFpbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9zZXRpbW1lZGlhdGUvc2V0SW1tZWRpYXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9fXy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvY29udGFpbnMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19jb250YWlucy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2luZGV4T2YuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19lcXVhbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19hcnJheUZyb21JdGVyYXRvci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2Z1bmN0aW9uTmFtZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaWRlbnRpY2FsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy90eXBlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9wYXJ0aWFsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fY3JlYXRlUGFydGlhbEFwcGxpY2F0b3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL3BpcGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19waXBlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9feHdyYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2JpbmQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy90YWlsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9zbGljZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZm9yRWFjaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZGlzc29jLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9tZXJnZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX2Fzc2lnbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX29iamVjdEFzc2lnbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaWZFbHNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fY3VycnlOLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9wcm9wU2F0aXNmaWVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9wcm9wSXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2hhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvY29tcGxlbWVudC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvbGlmdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvbGlmdE4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2FwLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9fZGlzcGF0Y2hhYmxlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faXNUcmFuc2Zvcm1lci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX21hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaW50ZXJuYWwvX3htYXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL194ZkJhc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL25vdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvaXNFbXB0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvZW1wdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2ludGVybmFsL19pc09iamVjdC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvYW55UGFzcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvcGx1Y2suanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2d0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9yYW1kYS9zcmMvY3VycnkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL1QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2lkZW50aXR5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9pbnRlcm5hbC9faWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvcmFtZGEvc3JjL2lzTmlsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL3JhbWRhL3NyYy9jb25kLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9pcy1idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9zZXR0bGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvZW5oYW5jZUVycm9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2J1aWxkVVJMLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnRvYS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc0Fic29sdXRlVVJMLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvc3ByZWFkLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLyh3ZWJwYWNrKS9idWlsZGluL2FtZC1vcHRpb25zLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbHRlci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZvck93bi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGb3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVCYXNlRm9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViRmFsc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbm9kZVV0aWwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlckFyZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJhc2VFYWNoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUl0ZXJhdGVlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXRjaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUNsZWFyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlSGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrRGVsZXRlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrU2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jb3JlSnNEYXRhLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fSGFzaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoR2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZURlbGV0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5YWJsZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVIYXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldENhY2hlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5U29tZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1VpbnQ4QXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2VxdWFsT2JqZWN0cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5UHVzaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJBcnJheS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hdGNoRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2dldC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lbW9pemVDYXBwZWQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheU1hcC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzSW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSGFzSW4uanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNQYXRoLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eURlZXAuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlRmluZEluZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmFOLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaWN0SW5kZXhPZi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVHJpbS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RyaW1tZWRFbmRJbmRleC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUJpbmQuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVDdXJyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvdW50SG9sZGVycy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzTGF6aWFibGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL25vb3AuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRGdW5jTmFtZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3JlYWxOYW1lcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvd3JhcHBlckxvZGFzaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3dyYXBwZXJDbG9uZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFdyYXBEZXRhaWxzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faW5zZXJ0V3JhcERldGFpbHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2V0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL2NvbnN0YW50LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fZGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL191cGRhdGVXcmFwRGV0YWlscy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RWFjaC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5SW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19yZW9yZGVyLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlUGFydGlhbC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21lcmdlRGF0YS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VSZXN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fb3ZlclJlc3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jcmVhdGVDYXNlRmlyc3QuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19jYXN0U2xpY2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlU2xpY2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvbG9kYXNoL19zdHJpbmdUb0FycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNjaWlUb0FycmF5LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fdW5pY29kZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2Uvc3JjL2lzLXZhbGlkLXVzLWxpY2Vuc2UuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9ub2RlX21vZHVsZXMvQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2Uvc3JjL3ZhbGlkYXRlLWRyaXZlcnMtbGljZW5zZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9AdHVybmFpL3ZhbGlkYXRlLXVzLWRyaXZlcnMtbGljZW5zZS9zcmMvc3VwcG9ydGVkLXN0YXRlcy5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZVJhbmdlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVJhbmdlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJdGVyYXRlZUNhbGwuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvc2VydmljZXMvYXBpL2luZGV4LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3N0eWxlcy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcGFyc2UtcHl0aG9uLWRhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LWRhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvZm9ybWF0LWVtYWlsLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC1uYW1lLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC1waG9uZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9mb3JtYXQtc3NuLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2Zvcm1hdC16aXBjb2RlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2dldC1yZWplY3QtbWVzc2FnZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9nZXQtc3RhdHVzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2lzLWRhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvaXMtb2JqZWN0LmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL2lzLXVybC5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9sZWdhbC1yZXBsYWNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL21hc2stbmFtZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9vYmplY3QtdG8tcXVlcnkuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcGFyc2VRdWVyeS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9waWNrLWNvbG9yLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3BpY2stc2NvcmUtY29sb3IuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcHJldHRpZnktZGF0ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy92YWx1ZS1leGlzdHMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvcmVuZGVyLWRldGFpbC12YWx1ZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9zZWxlY3QtbWFzdGVyLWtleS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy9zZXR0ZXJzLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3N0b3JhZ2UtbW9jay5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy90by1ib29sZWFuLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3RvLXJlbGF0aXZlLWRhdGUuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdG8tc2VudGVuY2UtY2FzZS5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy90by10aXRsZS1jYXNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3RyYW5zbGF0ZS1zdGF0dXMuanMiLCJ3ZWJwYWNrOi8vdHVybi1zaGFyZWQvLi9zcmMvdXRpbHMvdmFsaWRhdGUtZHJpdmVycy1saWNlbnNlLmpzIiwid2VicGFjazovL3R1cm4tc2hhcmVkLy4vc3JjL3V0aWxzL3ZhbGlkYXRlLXNzbi5qcyIsIndlYnBhY2s6Ly90dXJuLXNoYXJlZC8uL3NyYy91dGlscy92YWxpZGF0b3JzLmpzIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsImRlZmluZSIsImFtZCIsInNlbGYiLCJ0aGlzIiwiaW5zdGFsbGVkTW9kdWxlcyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsIl9jdXJyeTEiLCJfaXNQbGFjZWhvbGRlciIsImZuIiwiZjIiLCJhIiwiYiIsImFyZ3VtZW50cyIsImxlbmd0aCIsIl9iIiwiX2EiLCJmMSIsImFwcGx5IiwiaXNBcnJheSIsIkFycmF5IiwidHlwZSIsImZyZWVHbG9iYWwiLCJmcmVlU2VsZiIsIkZ1bmN0aW9uIiwiaXNCdWZmZXIiLCJ0b1N0cmluZyIsInZhbCIsImlzT2JqZWN0IiwiaXNGdW5jdGlvbiIsImZvckVhY2giLCJvYmoiLCJpc0FycmF5QnVmZmVyIiwiaXNGb3JtRGF0YSIsIkZvcm1EYXRhIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsImJ1ZmZlciIsImlzU3RyaW5nIiwiaXNOdW1iZXIiLCJpc1VuZGVmaW5lZCIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzU3RyZWFtIiwicGlwZSIsImlzVVJMU2VhcmNoUGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiaXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJuYXZpZ2F0b3IiLCJwcm9kdWN0Iiwid2luZG93IiwiZG9jdW1lbnQiLCJtZXJnZSIsInJlc3VsdCIsImFzc2lnblZhbHVlIiwiZXh0ZW5kIiwidGhpc0FyZyIsInRyaW0iLCJzdHIiLCJyZXBsYWNlIiwiYmFzZUlzTmF0aXZlIiwiZ2V0VmFsdWUiLCJ1bmRlZmluZWQiLCJlIiwidSIsImYiLCJoIiwiJCIsInkiLCJNIiwid2Vla2RheXMiLCJzcGxpdCIsIm1vbnRocyIsIm9yZGluYWwiLCJTdHJpbmciLCJqb2luIiwidiIsInoiLCJ1dGNPZmZzZXQiLCJNYXRoIiwiYWJzIiwiZmxvb3IiLCJkYXRlIiwieWVhciIsIm1vbnRoIiwiY2xvbmUiLCJhZGQiLCJjZWlsIiwidyIsIkQiLCJtcyIsIlEiLCJ0b0xvd2VyQ2FzZSIsImciLCJTIiwiXyIsIk8iLCJhcmdzIiwibG9jYWxlIiwiJEwiLCJ1dGMiLCIkdSIsIngiLCIkeCIsIiRvZmZzZXQiLCJwYXJzZSIsIiRkIiwiRGF0ZSIsIk5hTiIsInRlc3QiLCJtYXRjaCIsInN1YnN0cmluZyIsIlVUQyIsImluaXQiLCIkeSIsImdldEZ1bGxZZWFyIiwiJE0iLCJnZXRNb250aCIsIiREIiwiZ2V0RGF0ZSIsIiRXIiwiZ2V0RGF5IiwiJEgiLCJnZXRIb3VycyIsIiRtIiwiZ2V0TWludXRlcyIsIiRzIiwiZ2V0U2Vjb25kcyIsIiRtcyIsImdldE1pbGxpc2Vjb25kcyIsIiR1dGlscyIsImlzVmFsaWQiLCJpc1NhbWUiLCJzdGFydE9mIiwiZW5kT2YiLCJpc0FmdGVyIiwiaXNCZWZvcmUiLCIkZyIsInNldCIsInVuaXgiLCJ2YWx1ZU9mIiwiZ2V0VGltZSIsInRvRGF0ZSIsInNsaWNlIiwiJGxvY2FsZSIsIndlZWtTdGFydCIsIiRzZXQiLCJtaW4iLCJkYXlzSW5Nb250aCIsIk51bWJlciIsInJvdW5kIiwic3VidHJhY3QiLCJmb3JtYXQiLCJpbnZhbGlkRGF0ZSIsIm1lcmlkaWVtIiwibW9udGhzU2hvcnQiLCJ3ZWVrZGF5c01pbiIsIndlZWtkYXlzU2hvcnQiLCJnZXRUaW1lem9uZU9mZnNldCIsImRpZmYiLCJ0b0pTT04iLCJ0b0lTT1N0cmluZyIsInRvVVRDU3RyaW5nIiwiayIsIiRpIiwiaXNEYXlqcyIsImVuIiwiTHMiLCJhMCIsImExIiwiYTIiLCJhMyIsImE0IiwiYTUiLCJhNiIsImE3IiwiYTgiLCJhOSIsIkVycm9yIiwiZ2V0UmF3VGFnIiwib2JqZWN0VG9TdHJpbmciLCJzeW1Ub1N0cmluZ1RhZyIsImNyZWF0ZVdyYXAiLCJjdXJyeSIsImZ1bmMiLCJhcml0eSIsImd1YXJkIiwicGxhY2Vob2xkZXIiLCJiYXNlR2V0VGFnIiwiaXNPYmplY3RMaWtlIiwicHJvcCIsIl9jdXJyeTIiLCJmMyIsIl9jIiwiX2FyaXR5IiwiX2N1cnJ5TiIsIl94d3JhcCIsImlzQXJyYXlMaWtlIiwiX2l0ZXJhYmxlUmVkdWNlIiwieGYiLCJhY2MiLCJpdGVyIiwic3RlcCIsIm5leHQiLCJkb25lIiwic3ltSXRlcmF0b3IiLCJpdGVyYXRvciIsImxpc3QiLCJpZHgiLCJsZW4iLCJfYXJyYXlSZWR1Y2UiLCJyZWR1Y2UiLCJfbWV0aG9kUmVkdWNlIiwiVHlwZUVycm9yIiwiX2Rpc3BhdGNoYWJsZSIsIl9tYXAiLCJfcmVkdWNlIiwiX3htYXAiLCJjdXJyeU4iLCJrZXlzIiwiZnVuY3RvciIsInJlSXNVaW50IiwiaXNMZW5ndGgiLCJsaXN0Q2FjaGVDbGVhciIsImxpc3RDYWNoZURlbGV0ZSIsImxpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsIkxpc3RDYWNoZSIsImVudHJpZXMiLCJpbmRleCIsImNsZWFyIiwiZW50cnkiLCJoYXMiLCJlcSIsImFycmF5IiwibmF0aXZlQ3JlYXRlIiwiZ2V0TmF0aXZlIiwiaXNLZXlhYmxlIiwibWFwIiwiZGF0YSIsIl9fZGF0YV9fIiwiaXNTeW1ib2wiLCJiYXNlQ3JlYXRlIiwiQ3RvciIsInRoaXNCaW5kaW5nIiwicmVzSW5kZXgiLCJBTCIsInJlZ2V4IiwiZGVzY3JpcHRpb24iLCJBSyIsIkFaIiwiQVIiLCJDQSIsIkNPIiwiQ1QiLCJERSIsIkRDIiwiRkwiLCJHQSIsIkdVIiwiSEkiLCJJRCIsIklMIiwiSU4iLCJJQSIsIktTIiwiS1kiLCJMQSIsIk1FIiwiTUQiLCJNQSIsIk1JIiwiTU4iLCJNUyIsIk1PIiwiTVQiLCJORSIsIk5WIiwiTkgiLCJOSiIsIk5NIiwiTlkiLCJOQyIsIk5EIiwiT0giLCJPSyIsIk9SIiwiUEEiLCJSSSIsIlNDIiwiU0QiLCJUTiIsIlRYIiwiVVQiLCJWVCIsIlZBIiwiVkkiLCJXQSIsIldWIiwiV0kiLCJXWSIsIlBSIiwiY2FjaGVkU2V0VGltZW91dCIsImNhY2hlZENsZWFyVGltZW91dCIsInByb2Nlc3MiLCJkZWZhdWx0U2V0VGltb3V0IiwiZGVmYXVsdENsZWFyVGltZW91dCIsInJ1blRpbWVvdXQiLCJmdW4iLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwiY3VycmVudFF1ZXVlIiwicXVldWUiLCJkcmFpbmluZyIsInF1ZXVlSW5kZXgiLCJjbGVhblVwTmV4dFRpY2siLCJjb25jYXQiLCJkcmFpblF1ZXVlIiwidGltZW91dCIsInJ1biIsIm1hcmtlciIsInJ1bkNsZWFyVGltZW91dCIsIkl0ZW0iLCJub29wIiwibmV4dFRpY2siLCJwdXNoIiwidGl0bGUiLCJicm93c2VyIiwiZW52IiwiYXJndiIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsIm9uIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsImxpc3RlbmVycyIsImJpbmRpbmciLCJjd2QiLCJjaGRpciIsImRpciIsInVtYXNrIiwiaGFzRW51bUJ1ZyIsIm5vbkVudW1lcmFibGVQcm9wcyIsImhhc0FyZ3NFbnVtQnVnIiwiY29udGFpbnMiLCJfaGFzIiwiX2lzQXJndW1lbnRzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJpdGVtIiwibklkeCIsImtzIiwiY2hlY2tBcmdzTGVuZ3RoIiwiX2N1cnJ5MyIsIl9pc0FycmF5IiwibWV0aG9kbmFtZSIsInV0aWxzIiwibm9ybWFsaXplSGVhZGVyTmFtZSIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwiaGVhZGVycyIsImFkYXB0ZXIiLCJkZWZhdWx0cyIsIlhNTEh0dHBSZXF1ZXN0IiwidHJhbnNmb3JtUmVxdWVzdCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0cmFuc2Zvcm1SZXNwb25zZSIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJtYXhDb250ZW50TGVuZ3RoIiwidmFsaWRhdGVTdGF0dXMiLCJzdGF0dXMiLCJjb21tb24iLCJtZXRob2QiLCJhcnJheUxpa2VLZXlzIiwiYmFzZUtleXMiLCJiYXNlSXNBcmd1bWVudHMiLCJvYmplY3RQcm90byIsImlzQXJndW1lbnRzIiwic3R1YkZhbHNlIiwiZnJlZUV4cG9ydHMiLCJub2RlVHlwZSIsImZyZWVNb2R1bGUiLCJCdWZmZXIiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5Iiwib3RoZXIiLCJNYXAiLCJtYXBDYWNoZUNsZWFyIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsInJlSXNEZWVwUHJvcCIsInJlSXNQbGFpblByb3AiLCJvYmplY3RDcmVhdGUiLCJwcm90byIsImJhc2VMb2Rhc2giLCJMYXp5V3JhcHBlciIsIl9fd3JhcHBlZF9fIiwiX19hY3Rpb25zX18iLCJfX2Rpcl9fIiwiX19maWx0ZXJlZF9fIiwiX19pdGVyYXRlZXNfXyIsIl9fdGFrZUNvdW50X18iLCJfX3ZpZXdzX18iLCJjb25zdHJ1Y3RvciIsImJhc2U2NCIsImdsb2JhbCIsImJ0b2EiLCJhdG9iIiwiY2hhcnMiLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJtZXNzYWdlIiwiaW5wdXQiLCJibG9jayIsImNoYXJDb2RlIiwib3V0cHV0IiwiY2hhckF0IiwiY2hhckNvZGVBdCIsImJzIiwiYmMiLCJmcm9tQ2hhckNvZGUiLCJpbmRleE9mIiwiYmFzZVJlc3QiLCJnZXRIb2xkZXIiLCJyZXBsYWNlSG9sZGVycyIsInBhcnRpYWwiLCJwYXJ0aWFscyIsImhvbGRlcnMiLCJkcml2ZXJzTGljZW5zZVJlZ2V4IiwiaXNWYWxpZFVTTGljZW5zZSIsInZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSIsInN1cHBvcnRlZFN0YXRlcyIsIl9lcXVhbHMiLCJzZXQxIiwic2V0MiIsImxlbjEiLCJsZW4yIiwic2V0dGxlIiwiYnVpbGRVUkwiLCJwYXJzZUhlYWRlcnMiLCJpc1VSTFNhbWVPcmlnaW4iLCJjcmVhdGVFcnJvciIsImNvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwicmVxdWVzdERhdGEiLCJyZXF1ZXN0SGVhZGVycyIsInJlcXVlc3QiLCJsb2FkRXZlbnQiLCJ4RG9tYWluIiwiWERvbWFpblJlcXVlc3QiLCJ1cmwiLCJvbnByb2dyZXNzIiwib250aW1lb3V0IiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJBdXRob3JpemF0aW9uIiwib3BlbiIsInRvVXBwZXJDYXNlIiwicGFyYW1zIiwicGFyYW1zU2VyaWFsaXplciIsInJlYWR5U3RhdGUiLCJyZXNwb25zZVVSTCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIm9uZXJyb3IiLCJjb29raWVzIiwieHNyZlZhbHVlIiwid2l0aENyZWRlbnRpYWxzIiwicmVhZCIsInNldFJlcXVlc3RIZWFkZXIiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJhZGRFdmVudExpc3RlbmVyIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImNhbmNlbFRva2VuIiwicHJvbWlzZSIsInRoZW4iLCJjYW5jZWwiLCJhYm9ydCIsInNlbmQiLCJlbmhhbmNlRXJyb3IiLCJjb2RlIiwiZXJyb3IiLCJfX0NBTkNFTF9fIiwiQ2FuY2VsIiwicHJlZGljYXRlIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJjaGlsZHJlbiIsImlzUHJvdG90eXBlIiwibmF0aXZlS2V5cyIsInRhZyIsInN0YWNrQ2xlYXIiLCJzdGFja0RlbGV0ZSIsInN0YWNrR2V0Iiwic3RhY2tIYXMiLCJzdGFja1NldCIsIlN0YWNrIiwic2l6ZSIsImZ1bmNUb1N0cmluZyIsImJhc2VJc0VxdWFsRGVlcCIsImJhc2VJc0VxdWFsIiwiYml0bWFzayIsImN1c3RvbWl6ZXIiLCJzdGFjayIsIlNldENhY2hlIiwiYXJyYXlTb21lIiwiY2FjaGVIYXMiLCJlcXVhbEZ1bmMiLCJpc1BhcnRpYWwiLCJhcnJMZW5ndGgiLCJvdGhMZW5ndGgiLCJhcnJTdGFja2VkIiwib3RoU3RhY2tlZCIsInNlZW4iLCJhcnJWYWx1ZSIsIm90aFZhbHVlIiwiY29tcGFyZWQiLCJvdGhJbmRleCIsIkRhdGFWaWV3IiwiU2V0IiwiV2Vha01hcCIsInRvU291cmNlIiwiZGF0YVZpZXdDdG9yU3RyaW5nIiwibWFwQ3RvclN0cmluZyIsInByb21pc2VDdG9yU3RyaW5nIiwic2V0Q3RvclN0cmluZyIsIndlYWtNYXBDdG9yU3RyaW5nIiwiZ2V0VGFnIiwiY3RvclN0cmluZyIsInNyY1ZhbHVlIiwiY2FzdFBhdGgiLCJ0b0tleSIsInBhdGgiLCJpc0tleSIsInN0cmluZ1RvUGF0aCIsImJhc2VUb1N0cmluZyIsImJhc2VGaW5kSW5kZXgiLCJiYXNlSXNOYU4iLCJzdHJpY3RJbmRleE9mIiwiZnJvbUluZGV4IiwidG9GaW5pdGUiLCJyZW1haW5kZXIiLCJ0b051bWJlciIsImJhc2VTZXREYXRhIiwiY3JlYXRlQmluZCIsImNyZWF0ZUN1cnJ5IiwiY3JlYXRlSHlicmlkIiwiY3JlYXRlUGFydGlhbCIsImdldERhdGEiLCJtZXJnZURhdGEiLCJzZXREYXRhIiwic2V0V3JhcFRvU3RyaW5nIiwidG9JbnRlZ2VyIiwibmF0aXZlTWF4IiwibWF4IiwiYXJnUG9zIiwiYXJ5IiwiaXNCaW5kS2V5IiwicGFydGlhbHNSaWdodCIsImhvbGRlcnNSaWdodCIsIm5ld0RhdGEiLCJpZGVudGl0eSIsIm1ldGFNYXAiLCJjb21wb3NlQXJncyIsImNvbXBvc2VBcmdzUmlnaHQiLCJjb3VudEhvbGRlcnMiLCJjcmVhdGVDdG9yIiwiY3JlYXRlUmVjdXJyeSIsInJlb3JkZXIiLCJpc0FyeSIsImlzQmluZCIsImlzQ3VycmllZCIsImlzRmxpcCIsIndyYXBwZXIiLCJob2xkZXJzQ291bnQiLCJuZXdIb2xkZXJzIiwicmV2ZXJzZSIsImFyZ3NJbmRleCIsImFyZ3NMZW5ndGgiLCJob2xkZXJzTGVuZ3RoIiwibGVmdEluZGV4IiwibGVmdExlbmd0aCIsInJhbmdlTGVuZ3RoIiwiaXNVbmN1cnJpZWQiLCJob2xkZXJzSW5kZXgiLCJyaWdodEluZGV4IiwicmlnaHRMZW5ndGgiLCJvZmZzZXQiLCJpc0xhemlhYmxlIiwid3JhcEZ1bmMiLCJpc0N1cnJ5IiwiTG9kYXNoV3JhcHBlciIsImNoYWluQWxsIiwiX19jaGFpbl9fIiwiX19pbmRleF9fIiwiX192YWx1ZXNfXyIsInNvdXJjZSIsInNob3J0T3V0IiwibmF0aXZlTm93Iiwibm93IiwiY291bnQiLCJsYXN0Q2FsbGVkIiwic3RhbXAiLCJyZW1haW5pbmciLCJnZXRXcmFwRGV0YWlscyIsImluc2VydFdyYXBEZXRhaWxzIiwic2V0VG9TdHJpbmciLCJ1cGRhdGVXcmFwRGV0YWlscyIsInJlZmVyZW5jZSIsImJhc2VTZXRUb1N0cmluZyIsInJlSGFzVW5pY29kZSIsIlJlZ0V4cCIsInN0cmluZyIsIl9pbnRlcm9wRGVmYXVsdCIsImRlZmF1bHQiLCJfZGVmYXVsdDI0IiwiX2RlZmF1bHQyMyIsIl9kZWZhdWx0MjIiLCJfZGVmYXVsdDIxIiwiX2RlZmF1bHQyMCIsIl9kZWZhdWx0MTkiLCJfZGVmYXVsdDE4IiwiX2RlZmF1bHQxNyIsIl9kZWZhdWx0MTYiLCJfZGVmYXVsdDE1IiwiX2RlZmF1bHQxNCIsIl9kZWZhdWx0MTMiLCJfZGVmYXVsdDEyIiwiX2RlZmF1bHQxMSIsIl9kZWZhdWx0MTAiLCJfZGVmYXVsdDkiLCJfZGVmYXVsdDgiLCJfZGVmYXVsdDciLCJfZGVmYXVsdDYiLCJfZGVmYXVsdDUiLCJfZGVmYXVsdDQiLCJfZGVmYXVsdDMiLCJfZGVmYXVsdDIiLCJfZGVmYXVsdCIsImF4aW9zIiwiX3R5cGVvZiIsIl9leHRlbmRzIiwiYXNzaWduIiwiJGFzeW5jYmluZCIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwidHJhbXBvbGluZSIsInBvcCIsIkxhenlUaGVuYWJsZSIsIl9yZXNvbHZlciIsImlzVGhlbmFibGUiLCJFYWdlclRoZW5hYmxlIiwiVGhlbmFibGUiLCJFYWdlclRoZW5hYmxlRmFjdG9yeSIsInNldEltbWVkaWF0ZSIsInNwbGljZSIsInN0YXRlIiwiaXNXaXRoaW4iLCJpc0ludmFsaWRDb25maWciLCJERUZBVUxUX0hFQURFUlMiLCJBY2NlcHQiLCJERUZBVUxUX0NPTkZJRyIsIlRJTUVPVVRfRVJST1JfQ09ERVMiLCJOT0RFSlNfQ09OTkVDVElPTl9FUlJPUl9DT0RFUyIsImluMjAwcyIsImluNDAwcyIsImluNTAwcyIsInN0YXR1c05pbCIsIlIiLCJOIiwiaXNQcm9taXNlIiwiVCIsImNhdGNoIiwiaXNDYW5jZWwiLCJkdXJhdGlvbiIsInByb2JsZW0iLCJvayIsImF4aW9zSW5zdGFuY2UiLCJtb25pdG9ycyIsImFkZE1vbml0b3IiLCJyZXF1ZXN0VHJhbnNmb3JtcyIsImFzeW5jUmVxdWVzdFRyYW5zZm9ybXMiLCJyZXNwb25zZVRyYW5zZm9ybXMiLCJhZGRSZXF1ZXN0VHJhbnNmb3JtIiwiYWRkQXN5bmNSZXF1ZXN0VHJhbnNmb3JtIiwiYWRkUmVzcG9uc2VUcmFuc2Zvcm0iLCJzZXRIZWFkZXIiLCJzZXRIZWFkZXJzIiwiZGVsZXRlSGVhZGVyIiwic2V0QmFzZVVSTCIsImJhc2VVUkwiLCJnZXRCYXNlVVJMIiwiZGVsZXRlIiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImxpbmsiLCJ1bmxpbmsiLCJhcGlzYXVjZSIsIk5PTkUiLCJDTElFTlRfRVJST1IiLCJTRVJWRVJfRVJST1IiLCJUSU1FT1VUX0VSUk9SIiwiQ09OTkVDVElPTl9FUlJPUiIsIk5FVFdPUktfRVJST1IiLCJVTktOT1dOX0VSUk9SIiwiQ0FOQ0VMX0VSUk9SIiwiYXJyYXlGaWx0ZXIiLCJiYXNlRmlsdGVyIiwiYmFzZUl0ZXJhdGVlIiwiY29sbGVjdGlvbiIsImJhc2VJbmRleE9mIiwiZnV0dXJlIiwicGFzdCIsIm1tIiwiaGgiLCJkZCIsIk1NIiwieXkiLCJmcm9tVG9CYXNlIiwicmVsYXRpdmVUaW1lIiwidGhyZXNob2xkcyIsInJvdW5kaW5nIiwidG8iLCJmcm9tIiwidG9Ob3ciLCJmcm9tTm93IiwibG9jYWwiLCJnZXRVVENGdWxsWWVhciIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0RheSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCIkbG9jYWxPZmZzZXQiLCJpc1VUQyIsInVwcGVyRmlyc3QiLCJjcmVhdGVDYXNlRmlyc3QiLCJyYW5nZSIsImNyZWF0ZVJhbmdlIiwiVGltZW91dCIsImlkIiwiY2xlYXJGbiIsIl9pZCIsIl9jbGVhckZuIiwic2NvcGUiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJjbG9zZSIsInVucmVmIiwicmVmIiwiZW5yb2xsIiwibXNlY3MiLCJfaWRsZVRpbWVvdXRJZCIsIl9pZGxlVGltZW91dCIsInVuZW5yb2xsIiwiX3VucmVmQWN0aXZlIiwiYWN0aXZlIiwiX29uVGltZW91dCIsImNsZWFySW1tZWRpYXRlIiwicmVnaXN0ZXJJbW1lZGlhdGUiLCJodG1sIiwiY2hhbm5lbCIsIm1lc3NhZ2VQcmVmaXgiLCJvbkdsb2JhbE1lc3NhZ2UiLCJuZXh0SGFuZGxlIiwidGFza3NCeUhhbmRsZSIsImN1cnJlbnRseVJ1bm5pbmdBVGFzayIsImRvYyIsImF0dGFjaFRvIiwiZ2V0UHJvdG90eXBlT2YiLCJoYW5kbGUiLCJydW5JZlByZXNlbnQiLCJwb3N0TWVzc2FnZSIsImltcG9ydFNjcmlwdHMiLCJwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzIiwib2xkT25NZXNzYWdlIiwib25tZXNzYWdlIiwiY2FuVXNlUG9zdE1lc3NhZ2UiLCJNZXNzYWdlQ2hhbm5lbCIsInBvcnQxIiwiZXZlbnQiLCJwb3J0MiIsImNyZWF0ZUVsZW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJzY3JpcHQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZW1vdmVDaGlsZCIsImFwcGVuZENoaWxkIiwicmFuZG9tIiwiYXR0YWNoRXZlbnQiLCJjYWxsYmFjayIsInRhc2siLCJfY29udGFpbnMiLCJfaW5kZXhPZiIsImVxdWFscyIsImluZiIsIl9hcnJheUZyb21JdGVyYXRvciIsIl9mdW5jdGlvbk5hbWUiLCJpZGVudGljYWwiLCJzdGFja0EiLCJzdGFja0IiLCJpZ25vcmVDYXNlIiwibXVsdGlsaW5lIiwic3RpY2t5IiwidW5pY29kZSIsImtleXNBIiwiX2NvbmNhdCIsIl9jcmVhdGVQYXJ0aWFsQXBwbGljYXRvciIsIl9waXBlIiwidGFpbCIsIlhXcmFwIiwidGhpc09iaiIsIl9pc1N0cmluZyIsIl9jaGVja0Zvck1ldGhvZCIsIkluZmluaXR5IiwidG9JbmRleCIsIl9hc3NpZ24iLCJfb2JqZWN0QXNzaWduIiwidGFyZ2V0IiwibmV4dEtleSIsImNvbmRpdGlvbiIsIm9uVHJ1ZSIsIm9uRmFsc2UiLCJyZWNlaXZlZCIsImNvbWJpbmVkIiwiYXJnc0lkeCIsImxlZnQiLCJjb21iaW5lZElkeCIsInByZWQiLCJpcyIsImxpZnQiLCJub3QiLCJsaWZ0TiIsImFwIiwibGlmdGVkIiwiYXBwbGljYXRpdmUiLCJfaXNUcmFuc2Zvcm1lciIsIm1ldGhvZE5hbWVzIiwidHJhbnNkdWNlciIsIl94ZkJhc2UiLCJYTWFwIiwiZW1wdHkiLCJfaXNPYmplY3QiLCJwbHVjayIsInByZWRzIiwiYWx3YXlzIiwiX2lkZW50aXR5IiwicGFpcnMiLCJwYWlyIiwiQXhpb3MiLCJjcmVhdGVJbnN0YW5jZSIsImRlZmF1bHRDb25maWciLCJjb250ZXh0IiwiaW5zdGFuY2UiLCJpbnN0YW5jZUNvbmZpZyIsIkNhbmNlbFRva2VuIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJyZWFkRmxvYXRMRSIsImlzU2xvd0J1ZmZlciIsIl9pc0J1ZmZlciIsIkludGVyY2VwdG9yTWFuYWdlciIsImRpc3BhdGNoUmVxdWVzdCIsImlzQWJzb2x1dGVVUkwiLCJjb21iaW5lVVJMcyIsImludGVyY2VwdG9ycyIsImNoYWluIiwiaW50ZXJjZXB0b3IiLCJ1bnNoaWZ0IiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJzaGlmdCIsIm5vcm1hbGl6ZWROYW1lIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic2VyaWFsaXplZFBhcmFtcyIsInBhcnRzIiwicGFyc2VkIiwibGluZSIsInN1YnN0ciIsIm9yaWdpblVSTCIsIm1zaWUiLCJ1c2VyQWdlbnQiLCJ1cmxQYXJzaW5nTm9kZSIsInJlc29sdmVVUkwiLCJocmVmIiwic2V0QXR0cmlidXRlIiwicHJvdG9jb2wiLCJob3N0Iiwic2VhcmNoIiwiaGFzaCIsImhvc3RuYW1lIiwicG9ydCIsInBhdGhuYW1lIiwibG9jYXRpb24iLCJyZXF1ZXN0VVJMIiwiRSIsIndyaXRlIiwiZXhwaXJlcyIsImRvbWFpbiIsInNlY3VyZSIsImNvb2tpZSIsInRvR01UU3RyaW5nIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwiaGFuZGxlcnMiLCJ1c2UiLCJlamVjdCIsInRyYW5zZm9ybURhdGEiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidGhyb3dJZlJlcXVlc3RlZCIsInJlYXNvbiIsImZucyIsInJlbGF0aXZlVVJMIiwiZXhlY3V0b3IiLCJyZXNvbHZlUHJvbWlzZSIsInRva2VuIiwiYXJyIiwiX193ZWJwYWNrX2FtZF9vcHRpb25zX18iLCJiYXNlRWFjaCIsImJhc2VGb3JPd24iLCJjcmVhdGVCYXNlRWFjaCIsImJhc2VGb3IiLCJpdGVyYXRlZSIsImNyZWF0ZUJhc2VGb3IiLCJmcm9tUmlnaHQiLCJrZXlzRnVuYyIsIml0ZXJhYmxlIiwicHJvcHMiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJpc093biIsInVubWFza2VkIiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInR5cGVzIiwicmVxdWlyZSIsIm92ZXJBcmciLCJ0cmFuc2Zvcm0iLCJhcmciLCJlYWNoRnVuYyIsImJhc2VNYXRjaGVzIiwiYmFzZU1hdGNoZXNQcm9wZXJ0eSIsImJhc2VJc01hdGNoIiwiZ2V0TWF0Y2hEYXRhIiwibWF0Y2hlc1N0cmljdENvbXBhcmFibGUiLCJtYXRjaERhdGEiLCJub0N1c3RvbWl6ZXIiLCJvYmpWYWx1ZSIsIkNPTVBBUkVfUEFSVElBTF9GTEFHIiwiYXNzb2NJbmRleE9mIiwiTEFSR0VfQVJSQVlfU0laRSIsImlzTWFza2VkIiwicmVJc0hvc3RDdG9yIiwiZnVuY1Byb3RvIiwicmVJc05hdGl2ZSIsInVpZCIsImNvcmVKc0RhdGEiLCJtYXNrU3JjS2V5IiwiZXhlYyIsIklFX1BST1RPIiwiSGFzaCIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJoYXNoR2V0IiwiaGFzaEhhcyIsImhhc2hTZXQiLCJnZXRNYXBEYXRhIiwiZXF1YWxBcnJheXMiLCJlcXVhbEJ5VGFnIiwiZXF1YWxPYmplY3RzIiwib2JqZWN0VGFnIiwib2JqSXNBcnIiLCJvdGhJc0FyciIsIm9ialRhZyIsIm90aFRhZyIsIm9iaklzT2JqIiwib3RoSXNPYmoiLCJpc1NhbWVUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJzZXRDYWNoZUFkZCIsInNldENhY2hlSGFzIiwidmFsdWVzIiwiY2FjaGUiLCJVaW50OEFycmF5IiwibWFwVG9BcnJheSIsInNldFRvQXJyYXkiLCJzeW1ib2xQcm90byIsInN5bWJvbFZhbHVlT2YiLCJieXRlTGVuZ3RoIiwiYnl0ZU9mZnNldCIsImNvbnZlcnQiLCJzdGFja2VkIiwiZ2V0QWxsS2V5cyIsIm9ialByb3BzIiwib2JqTGVuZ3RoIiwib2JqU3RhY2tlZCIsInNraXBDdG9yIiwib2JqQ3RvciIsIm90aEN0b3IiLCJiYXNlR2V0QWxsS2V5cyIsImdldFN5bWJvbHMiLCJhcnJheVB1c2giLCJzeW1ib2xzRnVuYyIsInN0dWJBcnJheSIsIm5hdGl2ZUdldFN5bWJvbHMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2wiLCJpc1N0cmljdENvbXBhcmFibGUiLCJoYXNJbiIsImJhc2VHZXQiLCJkZWZhdWx0VmFsdWUiLCJtZW1vaXplQ2FwcGVkIiwicmVQcm9wTmFtZSIsInJlRXNjYXBlQ2hhciIsIm51bWJlciIsInF1b3RlIiwic3ViU3RyaW5nIiwibWVtb2l6ZSIsInJlc29sdmVyIiwibWVtb2l6ZWQiLCJDYWNoZSIsImFycmF5TWFwIiwic3ltYm9sVG9TdHJpbmciLCJiYXNlSGFzSW4iLCJoYXNQYXRoIiwiaGFzRnVuYyIsImJhc2VQcm9wZXJ0eSIsImJhc2VQcm9wZXJ0eURlZXAiLCJiYXNlVHJpbSIsInJlSXNCYWRIZXgiLCJyZUlzQmluYXJ5IiwicmVJc09jdGFsIiwiZnJlZVBhcnNlSW50IiwicGFyc2VJbnQiLCJpc0JpbmFyeSIsInRyaW1tZWRFbmRJbmRleCIsInJlVHJpbVN0YXJ0IiwicmVXaGl0ZXNwYWNlIiwiZ2V0RnVuY05hbWUiLCJsb2Rhc2giLCJmdW5jTmFtZSIsInJlYWxOYW1lcyIsIm90aGVyRnVuYyIsIndyYXBwZXJDbG9uZSIsImNvcHlBcnJheSIsInJlV3JhcERldGFpbHMiLCJyZVNwbGl0RGV0YWlscyIsInJlV3JhcENvbW1lbnQiLCJkZXRhaWxzIiwibGFzdEluZGV4IiwiY29uc3RhbnQiLCJhcnJheUVhY2giLCJhcnJheUluY2x1ZGVzIiwid3JhcEZsYWdzIiwic29ydCIsIm5hdGl2ZU1pbiIsImluZGV4ZXMiLCJvbGRBcnJheSIsInNyY0JpdG1hc2siLCJuZXdCaXRtYXNrIiwiaXNDb21tb24iLCJpc0NvbWJvIiwib3ZlclJlc3QiLCJzdGFydCIsIm90aGVyQXJncyIsImNhc3RTbGljZSIsImhhc1VuaWNvZGUiLCJzdHJpbmdUb0FycmF5IiwibWV0aG9kTmFtZSIsInN0clN5bWJvbHMiLCJjaHIiLCJ0cmFpbGluZyIsImJhc2VTbGljZSIsImVuZCIsImFzY2lpVG9BcnJheSIsInVuaWNvZGVUb0FycmF5IiwicnNBc3RyYWwiLCJyc0NvbWJvIiwicnNGaXR6IiwicnNOb25Bc3RyYWwiLCJyc1JlZ2lvbmFsIiwicnNTdXJyUGFpciIsInJlT3B0TW9kIiwicnNTZXEiLCJyc1N5bWJvbCIsInJlVW5pY29kZSIsImxpY2Vuc2UiLCJ2YWxpZGF0b3JzIiwiY2xlYW5MaWNlbnNlIiwiZmlsdGVyIiwidmFsaWQiLCJyZWFzb25zIiwiYmFzZVJhbmdlIiwiaXNJdGVyYXRlZUNhbGwiLCJuYXRpdmVDZWlsIiwiQmFzZUFQSSIsInR3aWxpb0tleSIsImFwaSIsInBob25lIiwiVFdJTElPX0tFWSIsImVtYWlsIiwiZW1haWxfaWQiLCJzc24iLCJwYXJ0bmVyX25hbWUiLCJwYXJ0bmVyX2lkIiwiY29ob3J0X2lkIiwiUHJlZmVyIiwicHJpbWFyeSIsInNlY29uZGFyeSIsImVtZXJhbGQiLCJ0YXJ0T3JhbmdlIiwieWVsbG93T3JhbmdlIiwic2xhdGVHcmF5IiwiY2FkZXRCbHVlIiwicGVyaXdpbmtsZSIsImFsaWNlQmx1ZSIsInNtb2tlV2hpdGUiLCJhbGVydDAiLCJhbGVydDEiLCJhbGVydDIiLCJhbGVydDMiLCJjZXJ1bGVhbkJsdWUiLCJwZWFjaCIsImJhYnlQaW5rIiwic3BhbmlzaFBpbmsiLCJiZWF1Qmx1ZSIsImN1bHR1cmVkIiwiYmx1ZUJlbGwiLCJiYWJ5Qmx1ZUV5ZXMiLCJwb3dkZXJCbHVlIiwiaG9uZXlEZXciLCJidWZmIiwiYmxhY2siLCJ3aGl0ZSIsIm5vdGljZU11dGVkIiwibm90aWNlRXJyb3IiLCJub3RpY2VXYXJuaW5nIiwibm90aWNlU3VjY2VzcyIsIm5vdGljZUluZm8iLCJwYXJzZVB5dGhvbkRhdGUiLCJpc05hTiIsInRpbWUiLCJuZXdEYXRlIiwiaG91cnMiLCJzZXRIb3VycyIsImZvcm1hdERhdGUiLCJwYXJzZWREYXRlIiwiZm9ybWF0RW1haWwiLCJmb3JtYXROYW1lIiwicmVuZGVyUGhvbmUiLCJlbmNyeXB0ZWQiLCJhcmVhQ29kZSIsInBob25lTnVtYmVyIiwiZm9ybWF0UGhvbmUiLCJmb3JtYXRTU04iLCJzc25OdW1iZXIiLCJmb3JtYXRaaXBjb2RlIiwiemlwY29kZSIsImdldFJlamVjdE1lc3NhZ2UiLCJwYXJ0bmVyX3R5cGUiLCJpbmNsdWRlcyIsIlJJU0tfTUFOQUdFTUVOVCIsIkZDUkEiLCJGQ1JBX0UiLCJGQ1JBX04iLCJnZXRTdGF0dXMiLCJyZXZpZXciLCJwZW5kaW5nIiwiaW5pdGlhdGVkIiwiZ2V0WWVhciIsImlzVXJsIiwidXJsU3RyaW5nIiwidGVybXMiLCJsZWdhbFJlcGxhY2UiLCJvcmlnaW5hbCIsInJlcGxhY2VtZW50IiwicmV0dXJuVmFsIiwibWFza05hbWUiLCJvYmplY3RUb1F1ZXJ5IiwicXVlcnkiLCJxdWVyeUFycmF5IiwicGFyc2VRdWVyeSIsInN0YXJ0c1dpdGgiLCJwaWNrQ29sb3IiLCJjb2xvcnMiLCJwaWNrU2NvcmVDb2xvciIsInNjb3JlIiwicHJldHRpZnlEYXRlIiwiZGF0ZVN0cmluZyIsIkREIiwiWVlZWSIsImZhbHN5U3RyaW5ncyIsInZhbHVlRXhpc3RzIiwicmVuZGVyRGV0YWlsVmFsdWUiLCJkZWVwIiwicmVuZGVyTmVzdGVkT2JqZWN0IiwibmVzdGVkIiwic2VsZWN0TWFzdGVyS2V5IiwibWFzdGVyS2V5IiwiYmx1ZXByaW50IiwiZmluZCIsInNldFZhbHVlIiwiZmFsbGJhY2siLCJzZXRPcHRpb24iLCJvcHRpb25zIiwiYWxsb3dlZCIsInNldHRlckZhY3RvcnlDdXJyaWVkIiwidG9nZ2xlQm9vbEN1cnJpZWQiLCJzZXRTdHJpbmdGYWN0b3J5Iiwic2V0TnVtYmVyRmFjdG9yeSIsInNldEJvb2xGYWN0b3J5Iiwic2V0VHJ1dGh5Q3VycmllZCIsInNldEZhbHN5Q3VycmllZCIsInNldE9wdGlvbkZhY3RvcnlDdXJyaWVkIiwiU2V0dGVyIiwic3RvcmFnZU1vY2siLCJzdG9yYWdlIiwic2V0SXRlbSIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwidG9Cb29sZWFuIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImRheWpzIiwidG9SZWxhdGl2ZUZyb21JU08iLCJyZWxhdGl2ZURhdGUiLCJ0b1JlbGF0aXZlRGF0ZSIsImFkanVzdGVkTm93IiwidG9TZW50ZW5jZUNhc2UiLCJzZW50ZW5jZSIsInRlcm1pbmF0aW9uIiwidG9UaXRsZUNhc2UiLCJ3b3JkIiwiZmlyc3RDaGFyIiwicmVtYWluaW5nQ2hhcnMiLCJJTklUSUFURUQiLCJQRU5ESU5HIiwiV0lUSERSQVdOIiwiQVBQUk9WRUQiLCJSRUpFQ1RFRCIsIkNPTlNFTlQiLCJFTUFJTEVEIiwiUkVWSUVXIiwiUkVWSUVXSU5HIiwiQ09OU0lERVIiLCJQUk9DRVNTSU5HIiwiUEVORElOR19ESVNQVVRFIiwiUEVORElOR19GSVJTVF9OT1RJQ0UiLCJQRU5ESU5HX1NFQ09ORF9OT1RJQ0UiLCJGSVJTVF9OT1RJQ0UiLCJTRUNPTkRfTk9USUNFIiwiU1NOX1RSQUNFX0ZBSUxFRCIsIk1WUl9GQUlMRUQiLCJDT01QTElBTkNFIiwiQ09NUExJQU5DRV9TTyIsIlZFUklGWUlORyIsIkNPTVBMSUFOQ0VSRVZJRVciLCJTVE9SRUQiLCJ0cmFuc2xhdGVTdGF0dXMiLCJhZHZlcnNlX2FjdGlvbiIsImN1cnJlbnRTdGF0ZXMiLCJ2YWxpZGF0ZURyaXZlcnNMaWNlbnNlIiwidmFsaWRTc25SZWdleCIsIm1pc3VzZWRSZWdleCIsImludmFsaWRGaXJzdFRocmVlIiwibnVtIiwidmFsaWRhdGVfc3NuIiwibnVtYmVyU1NOIiwiaXNBcnJheU9yT2JzZXJ2YWJsZUFycmF5IiwidmFsaWRhdGVFbWFpbCIsInZhbGlkYXRlUGhvbmUiLCJpc0FscGhhTnVtZXJpYyIsImNoIiwiaXNWYWxpZENhbmFkaWFuWmlwY29kZSIsInZhbGlkYXRlU1NOIiwidmFsaWRhdGVDaGVjayIsIndvcmtlcl9jaGVjayIsImNoZWNrIiwiY29udGFpbnNBdFN5bWJvbCIsImNvbnRhaW5zTnVtYmVyIiwidmFsaWRhdGVOYW1lIiwidmFsaWRhdGVBZGRyZXNzIiwiYWRkcmVzcyIsInZhbGlkYXRlQ3VzdG9tSW5wdXQiLCJ2YWxpZGF0ZVppcGNvZGUiLCJ2YWxpZGF0ZUNhbmFkaWFuWmlwY29kZSIsInZhbGlkYXRlTVZSQ2hlY2siLCJ2YWxpZGF0ZVBob25lVmVyaWZpY2F0aW9uIiwiZGlzYWJsZV9jaGVjayIsImVudl92YXIiLCJ2YWxpZGF0ZUVtYWlsSWQiLCJ2YWxpZGF0ZVR1cm5JZCJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELElBQ1EsbUJBQVhHLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxjQUFlLEdBQUlILEdBQ0EsaUJBQVpDLFFBQ2RBLFFBQVEsZUFBaUJELElBRXpCRCxFQUFLLGVBQWlCQyxJQVJ4QixDQVNtQixvQkFBVEssS0FBdUJBLEtBQU9DLE1BQU0sV0FDOUMsTyxZQ1RFLElBQUlDLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVSLFFBR25DLElBQUlDLEVBQVNLLEVBQWlCRSxHQUFZ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T0FBSSxLQUFXQSxJQUFxQixLQUFkQSxFQUFHbHZCLFFBRTdDb3lDLEdBQWlCLFNBQUFsakIsR0FBRSxPQUM5QixLQUFXQSxJQUFPLGtCQUFrQmpwQixLQUFLaXBCIiwiZmlsZSI6InR1cm4tc2hhcmVkLm1pbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFwidHVybi1zaGFyZWRcIiwgW10sIGZhY3RvcnkpO1xuXHRlbHNlIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jylcblx0XHRleHBvcnRzW1widHVybi1zaGFyZWRcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1widHVybi1zaGFyZWRcIl0gPSBmYWN0b3J5KCk7XG59KSh0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogdGhpcywgZnVuY3Rpb24oKSB7XG5yZXR1cm4gIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDMwMyk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vX2N1cnJ5MScpO1xudmFyIF9pc1BsYWNlaG9sZGVyID0gcmVxdWlyZSgnLi9faXNQbGFjZWhvbGRlcicpO1xuXG5cbi8qKlxuICogT3B0aW1pemVkIGludGVybmFsIHR3by1hcml0eSBjdXJyeSBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIGN1cnJpZWQgZnVuY3Rpb24uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2N1cnJ5Mihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gZjIoYSwgYikge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gZjI7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfaXNQbGFjZWhvbGRlcihhKSA/IGYyXG4gICAgICAgICAgICAgOiBfY3VycnkxKGZ1bmN0aW9uKF9iKSB7IHJldHVybiBmbihhLCBfYik7IH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIF9pc1BsYWNlaG9sZGVyKGEpICYmIF9pc1BsYWNlaG9sZGVyKGIpID8gZjJcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGEpID8gX2N1cnJ5MShmdW5jdGlvbihfYSkgeyByZXR1cm4gZm4oX2EsIGIpOyB9KVxuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYikgPyBfY3VycnkxKGZ1bmN0aW9uKF9iKSB7IHJldHVybiBmbihhLCBfYik7IH0pXG4gICAgICAgICAgICAgOiBmbihhLCBiKTtcbiAgICB9XG4gIH07XG59O1xuIiwidmFyIF9pc1BsYWNlaG9sZGVyID0gcmVxdWlyZSgnLi9faXNQbGFjZWhvbGRlcicpO1xuXG5cbi8qKlxuICogT3B0aW1pemVkIGludGVybmFsIG9uZS1hcml0eSBjdXJyeSBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIGN1cnJpZWQgZnVuY3Rpb24uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2N1cnJ5MShmbikge1xuICByZXR1cm4gZnVuY3Rpb24gZjEoYSkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwIHx8IF9pc1BsYWNlaG9sZGVyKGEpKSB7XG4gICAgICByZXR1cm4gZjE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfTtcbn07XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYW4gYEFycmF5YCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5KGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc0FycmF5O1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgZnJlZUdsb2JhbCA9IHJlcXVpcmUoJy4vX2ZyZWVHbG9iYWwnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBzZWxmYC4gKi9cbnZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICdvYmplY3QnICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmO1xuXG4vKiogVXNlZCBhcyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdC4gKi9cbnZhciByb290ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJvb3Q7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBpc0J1ZmZlciA9IHJlcXVpcmUoJ2lzLWJ1ZmZlcicpO1xuXG4vKmdsb2JhbCB0b1N0cmluZzp0cnVlKi9cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Zvcm1EYXRhKHZhbCkge1xuICByZXR1cm4gKHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcpICYmICh2YWwgaW5zdGFuY2VvZiBGb3JtRGF0YSk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKHZhbC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmluZ1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnc3RyaW5nJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIE51bWJlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAnbnVtYmVyJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyB1bmRlZmluZWRcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNVbmRlZmluZWQodmFsKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsID09PSAndW5kZWZpbmVkJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdCh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0ZpbGUodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZpbGVdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Jsb2IodmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEJsb2JdJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGdW5jdGlvbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmVhbSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzU3RyZWFtKHZhbCkge1xuICByZXR1cm4gaXNPYmplY3QodmFsKSAmJiBpc0Z1bmN0aW9uKHZhbC5waXBlKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VSTFNlYXJjaFBhcmFtcyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMgIT09ICd1bmRlZmluZWQnICYmIHZhbCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcztcbn1cblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiB0cmltKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMqLywgJycpLnJlcGxhY2UoL1xccyokLywgJycpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqL1xuZnVuY3Rpb24gaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gJ1JlYWN0TmF0aXZlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ1xuICApO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbikge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgJiYgIWlzQXJyYXkob2JqKSkge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKHR5cGVvZiByZXN1bHRba2V5XSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gbWVyZ2UocmVzdWx0W2tleV0sIHZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFtrZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGZvckVhY2goYXJndW1lbnRzW2ldLCBhc3NpZ25WYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBFeHRlbmRzIG9iamVjdCBhIGJ5IG11dGFibHkgYWRkaW5nIHRvIGl0IHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhIFRoZSBvYmplY3QgdG8gYmUgZXh0ZW5kZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBiIFRoZSBvYmplY3QgdG8gY29weSBwcm9wZXJ0aWVzIGZyb21cbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzQXJnIFRoZSBvYmplY3QgdG8gYmluZCBmdW5jdGlvbiB0b1xuICogQHJldHVybiB7T2JqZWN0fSBUaGUgcmVzdWx0aW5nIHZhbHVlIG9mIG9iamVjdCBhXG4gKi9cbmZ1bmN0aW9uIGV4dGVuZChhLCBiLCB0aGlzQXJnKSB7XG4gIGZvckVhY2goYiwgZnVuY3Rpb24gYXNzaWduVmFsdWUodmFsLCBrZXkpIHtcbiAgICBpZiAodGhpc0FyZyAmJiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQXJyYXk6IGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXI6IGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YTogaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXc6IGlzQXJyYXlCdWZmZXJWaWV3LFxuICBpc1N0cmluZzogaXNTdHJpbmcsXG4gIGlzTnVtYmVyOiBpc051bWJlcixcbiAgaXNPYmplY3Q6IGlzT2JqZWN0LFxuICBpc1VuZGVmaW5lZDogaXNVbmRlZmluZWQsXG4gIGlzRGF0ZTogaXNEYXRlLFxuICBpc0ZpbGU6IGlzRmlsZSxcbiAgaXNCbG9iOiBpc0Jsb2IsXG4gIGlzRnVuY3Rpb246IGlzRnVuY3Rpb24sXG4gIGlzU3RyZWFtOiBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXM6IGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1N0YW5kYXJkQnJvd3NlckVudjogaXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIGZvckVhY2g6IGZvckVhY2gsXG4gIG1lcmdlOiBtZXJnZSxcbiAgZXh0ZW5kOiBleHRlbmQsXG4gIHRyaW06IHRyaW1cbn07XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsIiFmdW5jdGlvbih0LGUpe1wib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcInVuZGVmaW5lZFwiIT10eXBlb2YgbW9kdWxlP21vZHVsZS5leHBvcnRzPWUoKTpcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKGUpOih0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6dHx8c2VsZikuZGF5anM9ZSgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PTFlMyxlPTZlNCxuPTM2ZTUscj1cIm1pbGxpc2Vjb25kXCIsaT1cInNlY29uZFwiLHM9XCJtaW51dGVcIix1PVwiaG91clwiLGE9XCJkYXlcIixvPVwid2Vla1wiLGM9XCJtb250aFwiLGY9XCJxdWFydGVyXCIsaD1cInllYXJcIixkPVwiZGF0ZVwiLGw9XCJJbnZhbGlkIERhdGVcIiwkPS9eKFxcZHs0fSlbLS9dPyhcXGR7MSwyfSk/Wy0vXT8oXFxkezAsMn0pW1R0XFxzXSooXFxkezEsMn0pPzo/KFxcZHsxLDJ9KT86PyhcXGR7MSwyfSk/Wy46XT8oXFxkKyk/JC8seT0vXFxbKFteXFxdXSspXXxZezEsNH18TXsxLDR9fER7MSwyfXxkezEsNH18SHsxLDJ9fGh7MSwyfXxhfEF8bXsxLDJ9fHN7MSwyfXxaezEsMn18U1NTL2csTT17bmFtZTpcImVuXCIsd2Vla2RheXM6XCJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheVwiLnNwbGl0KFwiX1wiKSxtb250aHM6XCJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyXCIuc3BsaXQoXCJfXCIpLG9yZGluYWw6ZnVuY3Rpb24odCl7dmFyIGU9W1widGhcIixcInN0XCIsXCJuZFwiLFwicmRcIl0sbj10JTEwMDtyZXR1cm5cIltcIit0KyhlWyhuLTIwKSUxMF18fGVbbl18fGVbMF0pK1wiXVwifX0sbT1mdW5jdGlvbih0LGUsbil7dmFyIHI9U3RyaW5nKHQpO3JldHVybiFyfHxyLmxlbmd0aD49ZT90OlwiXCIrQXJyYXkoZSsxLXIubGVuZ3RoKS5qb2luKG4pK3R9LHY9e3M6bSx6OmZ1bmN0aW9uKHQpe3ZhciBlPS10LnV0Y09mZnNldCgpLG49TWF0aC5hYnMoZSkscj1NYXRoLmZsb29yKG4vNjApLGk9biU2MDtyZXR1cm4oZTw9MD9cIitcIjpcIi1cIikrbShyLDIsXCIwXCIpK1wiOlwiK20oaSwyLFwiMFwiKX0sbTpmdW5jdGlvbiB0KGUsbil7aWYoZS5kYXRlKCk8bi5kYXRlKCkpcmV0dXJuLXQobixlKTt2YXIgcj0xMioobi55ZWFyKCktZS55ZWFyKCkpKyhuLm1vbnRoKCktZS5tb250aCgpKSxpPWUuY2xvbmUoKS5hZGQocixjKSxzPW4taTwwLHU9ZS5jbG9uZSgpLmFkZChyKyhzPy0xOjEpLGMpO3JldHVybisoLShyKyhuLWkpLyhzP2ktdTp1LWkpKXx8MCl9LGE6ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD9NYXRoLmNlaWwodCl8fDA6TWF0aC5mbG9vcih0KX0scDpmdW5jdGlvbih0KXtyZXR1cm57TTpjLHk6aCx3Om8sZDphLEQ6ZCxoOnUsbTpzLHM6aSxtczpyLFE6Zn1bdF18fFN0cmluZyh0fHxcIlwiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL3MkLyxcIlwiKX0sdTpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dH19LGc9XCJlblwiLEQ9e307RFtnXT1NO3ZhciBwPVwiJGlzRGF5anNPYmplY3RcIixTPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgX3x8ISghdHx8IXRbcF0pfSx3PWZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBpO2lmKCFlKXJldHVybiBnO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXt2YXIgcz1lLnRvTG93ZXJDYXNlKCk7RFtzXSYmKGk9cyksbiYmKERbc109bixpPXMpO3ZhciB1PWUuc3BsaXQoXCItXCIpO2lmKCFpJiZ1Lmxlbmd0aD4xKXJldHVybiB0KHVbMF0pfWVsc2V7dmFyIGE9ZS5uYW1lO0RbYV09ZSxpPWF9cmV0dXJuIXImJmkmJihnPWkpLGl8fCFyJiZnfSxPPWZ1bmN0aW9uKHQsZSl7aWYoUyh0KSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBuPVwib2JqZWN0XCI9PXR5cGVvZiBlP2U6e307cmV0dXJuIG4uZGF0ZT10LG4uYXJncz1hcmd1bWVudHMsbmV3IF8obil9LGI9djtiLmw9dyxiLmk9UyxiLnc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gTyh0LHtsb2NhbGU6ZS4kTCx1dGM6ZS4kdSx4OmUuJHgsJG9mZnNldDplLiRvZmZzZXR9KX07dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBNKHQpe3RoaXMuJEw9dyh0LmxvY2FsZSxudWxsLCEwKSx0aGlzLnBhcnNlKHQpLHRoaXMuJHg9dGhpcy4keHx8dC54fHx7fSx0aGlzW3BdPSEwfXZhciBtPU0ucHJvdG90eXBlO3JldHVybiBtLnBhcnNlPWZ1bmN0aW9uKHQpe3RoaXMuJGQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5kYXRlLG49dC51dGM7aWYobnVsbD09PWUpcmV0dXJuIG5ldyBEYXRlKE5hTik7aWYoYi51KGUpKXJldHVybiBuZXcgRGF0ZTtpZihlIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoZSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJiEvWiQvaS50ZXN0KGUpKXt2YXIgcj1lLm1hdGNoKCQpO2lmKHIpe3ZhciBpPXJbMl0tMXx8MCxzPShyWzddfHxcIjBcIikuc3Vic3RyaW5nKDAsMyk7cmV0dXJuIG4/bmV3IERhdGUoRGF0ZS5VVEMoclsxXSxpLHJbM118fDEscls0XXx8MCxyWzVdfHwwLHJbNl18fDAscykpOm5ldyBEYXRlKHJbMV0saSxyWzNdfHwxLHJbNF18fDAscls1XXx8MCxyWzZdfHwwLHMpfX1yZXR1cm4gbmV3IERhdGUoZSl9KHQpLHRoaXMuaW5pdCgpfSxtLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLiRkO3RoaXMuJHk9dC5nZXRGdWxsWWVhcigpLHRoaXMuJE09dC5nZXRNb250aCgpLHRoaXMuJEQ9dC5nZXREYXRlKCksdGhpcy4kVz10LmdldERheSgpLHRoaXMuJEg9dC5nZXRIb3VycygpLHRoaXMuJG09dC5nZXRNaW51dGVzKCksdGhpcy4kcz10LmdldFNlY29uZHMoKSx0aGlzLiRtcz10LmdldE1pbGxpc2Vjb25kcygpfSxtLiR1dGlscz1mdW5jdGlvbigpe3JldHVybiBifSxtLmlzVmFsaWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKHRoaXMuJGQudG9TdHJpbmcoKT09PWwpfSxtLmlzU2FtZT1mdW5jdGlvbih0LGUpe3ZhciBuPU8odCk7cmV0dXJuIHRoaXMuc3RhcnRPZihlKTw9biYmbjw9dGhpcy5lbmRPZihlKX0sbS5pc0FmdGVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE8odCk8dGhpcy5zdGFydE9mKGUpfSxtLmlzQmVmb3JlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZW5kT2YoZSk8Tyh0KX0sbS4kZz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGIudSh0KT90aGlzW2VdOnRoaXMuc2V0KG4sdCl9LG0udW5peD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpLzFlMyl9LG0udmFsdWVPZj1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLmdldFRpbWUoKX0sbS5zdGFydE9mPWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPSEhYi51KGUpfHxlLGY9Yi5wKHQpLGw9ZnVuY3Rpb24odCxlKXt2YXIgaT1iLncobi4kdT9EYXRlLlVUQyhuLiR5LGUsdCk6bmV3IERhdGUobi4keSxlLHQpLG4pO3JldHVybiByP2k6aS5lbmRPZihhKX0sJD1mdW5jdGlvbih0LGUpe3JldHVybiBiLncobi50b0RhdGUoKVt0XS5hcHBseShuLnRvRGF0ZShcInNcIiksKHI/WzAsMCwwLDBdOlsyMyw1OSw1OSw5OTldKS5zbGljZShlKSksbil9LHk9dGhpcy4kVyxNPXRoaXMuJE0sbT10aGlzLiRELHY9XCJzZXRcIisodGhpcy4kdT9cIlVUQ1wiOlwiXCIpO3N3aXRjaChmKXtjYXNlIGg6cmV0dXJuIHI/bCgxLDApOmwoMzEsMTEpO2Nhc2UgYzpyZXR1cm4gcj9sKDEsTSk6bCgwLE0rMSk7Y2FzZSBvOnZhciBnPXRoaXMuJGxvY2FsZSgpLndlZWtTdGFydHx8MCxEPSh5PGc/eSs3OnkpLWc7cmV0dXJuIGwocj9tLUQ6bSsoNi1EKSxNKTtjYXNlIGE6Y2FzZSBkOnJldHVybiAkKHYrXCJIb3Vyc1wiLDApO2Nhc2UgdTpyZXR1cm4gJCh2K1wiTWludXRlc1wiLDEpO2Nhc2UgczpyZXR1cm4gJCh2K1wiU2Vjb25kc1wiLDIpO2Nhc2UgaTpyZXR1cm4gJCh2K1wiTWlsbGlzZWNvbmRzXCIsMyk7ZGVmYXVsdDpyZXR1cm4gdGhpcy5jbG9uZSgpfX0sbS5lbmRPZj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5zdGFydE9mKHQsITEpfSxtLiRzZXQ9ZnVuY3Rpb24odCxlKXt2YXIgbixvPWIucCh0KSxmPVwic2V0XCIrKHRoaXMuJHU/XCJVVENcIjpcIlwiKSxsPShuPXt9LG5bYV09ZitcIkRhdGVcIixuW2RdPWYrXCJEYXRlXCIsbltjXT1mK1wiTW9udGhcIixuW2hdPWYrXCJGdWxsWWVhclwiLG5bdV09ZitcIkhvdXJzXCIsbltzXT1mK1wiTWludXRlc1wiLG5baV09ZitcIlNlY29uZHNcIixuW3JdPWYrXCJNaWxsaXNlY29uZHNcIixuKVtvXSwkPW89PT1hP3RoaXMuJEQrKGUtdGhpcy4kVyk6ZTtpZihvPT09Y3x8bz09PWgpe3ZhciB5PXRoaXMuY2xvbmUoKS5zZXQoZCwxKTt5LiRkW2xdKCQpLHkuaW5pdCgpLHRoaXMuJGQ9eS5zZXQoZCxNYXRoLm1pbih0aGlzLiRELHkuZGF5c0luTW9udGgoKSkpLiRkfWVsc2UgbCYmdGhpcy4kZFtsXSgkKTtyZXR1cm4gdGhpcy5pbml0KCksdGhpc30sbS5zZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5jbG9uZSgpLiRzZXQodCxlKX0sbS5nZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXNbYi5wKHQpXSgpfSxtLmFkZD1mdW5jdGlvbihyLGYpe3ZhciBkLGw9dGhpcztyPU51bWJlcihyKTt2YXIgJD1iLnAoZikseT1mdW5jdGlvbih0KXt2YXIgZT1PKGwpO3JldHVybiBiLncoZS5kYXRlKGUuZGF0ZSgpK01hdGgucm91bmQodCpyKSksbCl9O2lmKCQ9PT1jKXJldHVybiB0aGlzLnNldChjLHRoaXMuJE0rcik7aWYoJD09PWgpcmV0dXJuIHRoaXMuc2V0KGgsdGhpcy4keStyKTtpZigkPT09YSlyZXR1cm4geSgxKTtpZigkPT09bylyZXR1cm4geSg3KTt2YXIgTT0oZD17fSxkW3NdPWUsZFt1XT1uLGRbaV09dCxkKVskXXx8MSxtPXRoaXMuJGQuZ2V0VGltZSgpK3IqTTtyZXR1cm4gYi53KG0sdGhpcyl9LG0uc3VidHJhY3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5hZGQoLTEqdCxlKX0sbS5mb3JtYXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxuPXRoaXMuJGxvY2FsZSgpO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbi5pbnZhbGlkRGF0ZXx8bDt2YXIgcj10fHxcIllZWVktTU0tRERUSEg6bW06c3NaXCIsaT1iLnoodGhpcykscz10aGlzLiRILHU9dGhpcy4kbSxhPXRoaXMuJE0sbz1uLndlZWtkYXlzLGM9bi5tb250aHMsZj1uLm1lcmlkaWVtLGg9ZnVuY3Rpb24odCxuLGkscyl7cmV0dXJuIHQmJih0W25dfHx0KGUscikpfHxpW25dLnNsaWNlKDAscyl9LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIGIucyhzJTEyfHwxMix0LFwiMFwiKX0sJD1mfHxmdW5jdGlvbih0LGUsbil7dmFyIHI9dDwxMj9cIkFNXCI6XCJQTVwiO3JldHVybiBuP3IudG9Mb3dlckNhc2UoKTpyfTtyZXR1cm4gci5yZXBsYWNlKHksKGZ1bmN0aW9uKHQscil7cmV0dXJuIHJ8fGZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlXCJZWVwiOnJldHVybiBTdHJpbmcoZS4keSkuc2xpY2UoLTIpO2Nhc2VcIllZWVlcIjpyZXR1cm4gYi5zKGUuJHksNCxcIjBcIik7Y2FzZVwiTVwiOnJldHVybiBhKzE7Y2FzZVwiTU1cIjpyZXR1cm4gYi5zKGErMSwyLFwiMFwiKTtjYXNlXCJNTU1cIjpyZXR1cm4gaChuLm1vbnRoc1Nob3J0LGEsYywzKTtjYXNlXCJNTU1NXCI6cmV0dXJuIGgoYyxhKTtjYXNlXCJEXCI6cmV0dXJuIGUuJEQ7Y2FzZVwiRERcIjpyZXR1cm4gYi5zKGUuJEQsMixcIjBcIik7Y2FzZVwiZFwiOnJldHVybiBTdHJpbmcoZS4kVyk7Y2FzZVwiZGRcIjpyZXR1cm4gaChuLndlZWtkYXlzTWluLGUuJFcsbywyKTtjYXNlXCJkZGRcIjpyZXR1cm4gaChuLndlZWtkYXlzU2hvcnQsZS4kVyxvLDMpO2Nhc2VcImRkZGRcIjpyZXR1cm4gb1tlLiRXXTtjYXNlXCJIXCI6cmV0dXJuIFN0cmluZyhzKTtjYXNlXCJISFwiOnJldHVybiBiLnMocywyLFwiMFwiKTtjYXNlXCJoXCI6cmV0dXJuIGQoMSk7Y2FzZVwiaGhcIjpyZXR1cm4gZCgyKTtjYXNlXCJhXCI6cmV0dXJuICQocyx1LCEwKTtjYXNlXCJBXCI6cmV0dXJuICQocyx1LCExKTtjYXNlXCJtXCI6cmV0dXJuIFN0cmluZyh1KTtjYXNlXCJtbVwiOnJldHVybiBiLnModSwyLFwiMFwiKTtjYXNlXCJzXCI6cmV0dXJuIFN0cmluZyhlLiRzKTtjYXNlXCJzc1wiOnJldHVybiBiLnMoZS4kcywyLFwiMFwiKTtjYXNlXCJTU1NcIjpyZXR1cm4gYi5zKGUuJG1zLDMsXCIwXCIpO2Nhc2VcIlpcIjpyZXR1cm4gaX1yZXR1cm4gbnVsbH0odCl8fGkucmVwbGFjZShcIjpcIixcIlwiKX0pKX0sbS51dGNPZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gMTUqLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpLzE1KX0sbS5kaWZmPWZ1bmN0aW9uKHIsZCxsKXt2YXIgJCx5PXRoaXMsTT1iLnAoZCksbT1PKHIpLHY9KG0udXRjT2Zmc2V0KCktdGhpcy51dGNPZmZzZXQoKSkqZSxnPXRoaXMtbSxEPWZ1bmN0aW9uKCl7cmV0dXJuIGIubSh5LG0pfTtzd2l0Y2goTSl7Y2FzZSBoOiQ9RCgpLzEyO2JyZWFrO2Nhc2UgYzokPUQoKTticmVhaztjYXNlIGY6JD1EKCkvMzticmVhaztjYXNlIG86JD0oZy12KS82MDQ4ZTU7YnJlYWs7Y2FzZSBhOiQ9KGctdikvODY0ZTU7YnJlYWs7Y2FzZSB1OiQ9Zy9uO2JyZWFrO2Nhc2UgczokPWcvZTticmVhaztjYXNlIGk6JD1nL3Q7YnJlYWs7ZGVmYXVsdDokPWd9cmV0dXJuIGw/JDpiLmEoJCl9LG0uZGF5c0luTW9udGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmRPZihjKS4kRH0sbS4kbG9jYWxlPWZ1bmN0aW9uKCl7cmV0dXJuIERbdGhpcy4kTF19LG0ubG9jYWxlPWZ1bmN0aW9uKHQsZSl7aWYoIXQpcmV0dXJuIHRoaXMuJEw7dmFyIG49dGhpcy5jbG9uZSgpLHI9dyh0LGUsITApO3JldHVybiByJiYobi4kTD1yKSxufSxtLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIGIudyh0aGlzLiRkLHRoaXMpfSxtLnRvRGF0ZT1mdW5jdGlvbigpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LG0udG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmcoKTpudWxsfSxtLnRvSVNPU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKX0sbS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLiRkLnRvVVRDU3RyaW5nKCl9LE19KCksaz1fLnByb3RvdHlwZTtyZXR1cm4gTy5wcm90b3R5cGU9ayxbW1wiJG1zXCIscl0sW1wiJHNcIixpXSxbXCIkbVwiLHNdLFtcIiRIXCIsdV0sW1wiJFdcIixhXSxbXCIkTVwiLGNdLFtcIiR5XCIsaF0sW1wiJERcIixkXV0uZm9yRWFjaCgoZnVuY3Rpb24odCl7a1t0WzFdXT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy4kZyhlLHRbMF0sdFsxXSl9fSkpLE8uZXh0ZW5kPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuJGl8fCh0KGUsXyxPKSx0LiRpPSEwKSxPfSxPLmxvY2FsZT13LE8uaXNEYXlqcz1TLE8udW5peD1mdW5jdGlvbih0KXtyZXR1cm4gTygxZTMqdCl9LE8uZW49RFtnXSxPLkxzPUQsTy5wPXt9LE99KSk7IiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfYXJpdHkobiwgZm4pIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgc3dpdGNoIChuKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKGEwKSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uKGEwLCBhMSkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyKSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgNDogcmV0dXJuIGZ1bmN0aW9uKGEwLCBhMSwgYTIsIGEzKSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgNTogcmV0dXJuIGZ1bmN0aW9uKGEwLCBhMSwgYTIsIGEzLCBhNCkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDY6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQsIGE1KSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgNzogcmV0dXJuIGZ1bmN0aW9uKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2KSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgODogcmV0dXJuIGZ1bmN0aW9uKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNykgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBjYXNlIDk6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4KSB7IHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICAgIGNhc2UgMTA6IHJldHVybiBmdW5jdGlvbihhMCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSkgeyByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgICBkZWZhdWx0OiB0aHJvdyBuZXcgRXJyb3IoJ0ZpcnN0IGFyZ3VtZW50IHRvIF9hcml0eSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgbm8gZ3JlYXRlciB0aGFuIHRlbicpO1xuICB9XG59O1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGdldFJhd1RhZyA9IHJlcXVpcmUoJy4vX2dldFJhd1RhZycpLFxuICAgIG9iamVjdFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fb2JqZWN0VG9TdHJpbmcnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldFRhZztcbiIsInZhciBjcmVhdGVXcmFwID0gcmVxdWlyZSgnLi9fY3JlYXRlV3JhcCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0NVUlJZX0ZMQUcgPSA4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgYXJndW1lbnRzIG9mIGBmdW5jYCBhbmQgZWl0aGVyIGludm9rZXNcbiAqIGBmdW5jYCByZXR1cm5pbmcgaXRzIHJlc3VsdCwgaWYgYXQgbGVhc3QgYGFyaXR5YCBudW1iZXIgb2YgYXJndW1lbnRzIGhhdmVcbiAqIGJlZW4gcHJvdmlkZWQsIG9yIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIHJlbWFpbmluZyBgZnVuY2BcbiAqIGFyZ3VtZW50cywgYW5kIHNvIG9uLiBUaGUgYXJpdHkgb2YgYGZ1bmNgIG1heSBiZSBzcGVjaWZpZWQgaWYgYGZ1bmMubGVuZ3RoYFxuICogaXMgbm90IHN1ZmZpY2llbnQuXG4gKlxuICogVGhlIGBfLmN1cnJ5LnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWMgYnVpbGRzLFxuICogbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcHJvdmlkZWQgYXJndW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBjdXJyaWVkIGZ1bmN0aW9ucy5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eT1mdW5jLmxlbmd0aF0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEBwYXJhbS0ge09iamVjdH0gW2d1YXJkXSBFbmFibGVzIHVzZSBhcyBhbiBpdGVyYXRlZSBmb3IgbWV0aG9kcyBsaWtlIGBfLm1hcGAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgYWJjID0gZnVuY3Rpb24oYSwgYiwgYykge1xuICogICByZXR1cm4gW2EsIGIsIGNdO1xuICogfTtcbiAqXG4gKiB2YXIgY3VycmllZCA9IF8uY3VycnkoYWJjKTtcbiAqXG4gKiBjdXJyaWVkKDEpKDIpKDMpO1xuICogLy8gPT4gWzEsIDIsIDNdXG4gKlxuICogY3VycmllZCgxLCAyKSgzKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICpcbiAqIGN1cnJpZWQoMSwgMiwgMyk7XG4gKiAvLyA9PiBbMSwgMiwgM11cbiAqXG4gKiAvLyBDdXJyaWVkIHdpdGggcGxhY2Vob2xkZXJzLlxuICogY3VycmllZCgxKShfLCAzKSgyKTtcbiAqIC8vID0+IFsxLCAyLCAzXVxuICovXG5mdW5jdGlvbiBjdXJyeShmdW5jLCBhcml0eSwgZ3VhcmQpIHtcbiAgYXJpdHkgPSBndWFyZCA/IHVuZGVmaW5lZCA6IGFyaXR5O1xuICB2YXIgcmVzdWx0ID0gY3JlYXRlV3JhcChmdW5jLCBXUkFQX0NVUlJZX0ZMQUcsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBhcml0eSk7XG4gIHJlc3VsdC5wbGFjZWhvbGRlciA9IGN1cnJ5LnBsYWNlaG9sZGVyO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBBc3NpZ24gZGVmYXVsdCBwbGFjZWhvbGRlcnMuXG5jdXJyeS5wbGFjZWhvbGRlciA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGN1cnJ5O1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN0cmluZ2AgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBtZW1iZXJPZiBfXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN0cmluZywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3RyaW5nKCdhYmMnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzU3RyaW5nKDEpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fFxuICAgICghaXNBcnJheSh2YWx1ZSkgJiYgaXNPYmplY3RMaWtlKHZhbHVlKSAmJiBiYXNlR2V0VGFnKHZhbHVlKSA9PSBzdHJpbmdUYWcpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaW5nO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfaGFzKHByb3AsIG9iaikge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCk7XG59O1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL19jdXJyeTEnKTtcbnZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9fY3VycnkyJyk7XG52YXIgX2lzUGxhY2Vob2xkZXIgPSByZXF1aXJlKCcuL19pc1BsYWNlaG9sZGVyJyk7XG5cblxuLyoqXG4gKiBPcHRpbWl6ZWQgaW50ZXJuYWwgdGhyZWUtYXJpdHkgY3VycnkgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBjdXJyaWVkIGZ1bmN0aW9uLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9jdXJyeTMoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGYzKGEsIGIsIGMpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgcmV0dXJuIGYzO1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gX2lzUGxhY2Vob2xkZXIoYSkgPyBmM1xuICAgICAgICAgICAgIDogX2N1cnJ5MihmdW5jdGlvbihfYiwgX2MpIHsgcmV0dXJuIGZuKGEsIF9iLCBfYyk7IH0pO1xuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gX2lzUGxhY2Vob2xkZXIoYSkgJiYgX2lzUGxhY2Vob2xkZXIoYikgPyBmM1xuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYSkgPyBfY3VycnkyKGZ1bmN0aW9uKF9hLCBfYykgeyByZXR1cm4gZm4oX2EsIGIsIF9jKTsgfSlcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGIpID8gX2N1cnJ5MihmdW5jdGlvbihfYiwgX2MpIHsgcmV0dXJuIGZuKGEsIF9iLCBfYyk7IH0pXG4gICAgICAgICAgICAgOiBfY3VycnkxKGZ1bmN0aW9uKF9jKSB7IHJldHVybiBmbihhLCBiLCBfYyk7IH0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIF9pc1BsYWNlaG9sZGVyKGEpICYmIF9pc1BsYWNlaG9sZGVyKGIpICYmIF9pc1BsYWNlaG9sZGVyKGMpID8gZjNcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGEpICYmIF9pc1BsYWNlaG9sZGVyKGIpID8gX2N1cnJ5MihmdW5jdGlvbihfYSwgX2IpIHsgcmV0dXJuIGZuKF9hLCBfYiwgYyk7IH0pXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihhKSAmJiBfaXNQbGFjZWhvbGRlcihjKSA/IF9jdXJyeTIoZnVuY3Rpb24oX2EsIF9jKSB7IHJldHVybiBmbihfYSwgYiwgX2MpOyB9KVxuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYikgJiYgX2lzUGxhY2Vob2xkZXIoYykgPyBfY3VycnkyKGZ1bmN0aW9uKF9iLCBfYykgeyByZXR1cm4gZm4oYSwgX2IsIF9jKTsgfSlcbiAgICAgICAgICAgICA6IF9pc1BsYWNlaG9sZGVyKGEpID8gX2N1cnJ5MShmdW5jdGlvbihfYSkgeyByZXR1cm4gZm4oX2EsIGIsIGMpOyB9KVxuICAgICAgICAgICAgIDogX2lzUGxhY2Vob2xkZXIoYikgPyBfY3VycnkxKGZ1bmN0aW9uKF9iKSB7IHJldHVybiBmbihhLCBfYiwgYyk7IH0pXG4gICAgICAgICAgICAgOiBfaXNQbGFjZWhvbGRlcihjKSA/IF9jdXJyeTEoZnVuY3Rpb24oX2MpIHsgcmV0dXJuIGZuKGEsIGIsIF9jKTsgfSlcbiAgICAgICAgICAgICA6IGZuKGEsIGIsIGMpO1xuICAgIH1cbiAgfTtcbn07XG4iLCJ2YXIgX2FyaXR5ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fYXJpdHknKTtcbnZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xudmFyIF9jdXJyeU4gPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeU4nKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBjdXJyaWVkIGVxdWl2YWxlbnQgb2YgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uLCB3aXRoIHRoZSBzcGVjaWZpZWRcbiAqIGFyaXR5LiBUaGUgY3VycmllZCBmdW5jdGlvbiBoYXMgdHdvIHVudXN1YWwgY2FwYWJpbGl0aWVzLiBGaXJzdCwgaXRzXG4gKiBhcmd1bWVudHMgbmVlZG4ndCBiZSBwcm92aWRlZCBvbmUgYXQgYSB0aW1lLiBJZiBgZ2AgaXMgYFIuY3VycnlOKDMsIGYpYCwgdGhlXG4gKiBmb2xsb3dpbmcgYXJlIGVxdWl2YWxlbnQ6XG4gKlxuICogICAtIGBnKDEpKDIpKDMpYFxuICogICAtIGBnKDEpKDIsIDMpYFxuICogICAtIGBnKDEsIDIpKDMpYFxuICogICAtIGBnKDEsIDIsIDMpYFxuICpcbiAqIFNlY29uZGx5LCB0aGUgc3BlY2lhbCBwbGFjZWhvbGRlciB2YWx1ZSBgUi5fX2AgbWF5IGJlIHVzZWQgdG8gc3BlY2lmeVxuICogXCJnYXBzXCIsIGFsbG93aW5nIHBhcnRpYWwgYXBwbGljYXRpb24gb2YgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyxcbiAqIHJlZ2FyZGxlc3Mgb2YgdGhlaXIgcG9zaXRpb25zLiBJZiBgZ2AgaXMgYXMgYWJvdmUgYW5kIGBfYCBpcyBgUi5fX2AsIHRoZVxuICogZm9sbG93aW5nIGFyZSBlcXVpdmFsZW50OlxuICpcbiAqICAgLSBgZygxLCAyLCAzKWBcbiAqICAgLSBgZyhfLCAyLCAzKSgxKWBcbiAqICAgLSBgZyhfLCBfLCAzKSgxKSgyKWBcbiAqICAgLSBgZyhfLCBfLCAzKSgxLCAyKWBcbiAqICAgLSBgZyhfLCAyKSgxKSgzKWBcbiAqICAgLSBgZyhfLCAyKSgxLCAzKWBcbiAqICAgLSBgZyhfLCAyKShfLCAzKSgxKWBcbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC41LjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHNpZyBOdW1iZXIgLT4gKCogLT4gYSkgLT4gKCogLT4gYSlcbiAqIEBwYXJhbSB7TnVtYmVyfSBsZW5ndGggVGhlIGFyaXR5IGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY3VycnkuXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBuZXcsIGN1cnJpZWQgZnVuY3Rpb24uXG4gKiBAc2VlIFIuY3VycnlcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgc3VtQXJncyA9ICguLi5hcmdzKSA9PiBSLnN1bShhcmdzKTtcbiAqXG4gKiAgICAgIHZhciBjdXJyaWVkQWRkRm91ck51bWJlcnMgPSBSLmN1cnJ5Tig0LCBzdW1BcmdzKTtcbiAqICAgICAgdmFyIGYgPSBjdXJyaWVkQWRkRm91ck51bWJlcnMoMSwgMik7XG4gKiAgICAgIHZhciBnID0gZigzKTtcbiAqICAgICAgZyg0KTsgLy89PiAxMFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gY3VycnlOKGxlbmd0aCwgZm4pIHtcbiAgaWYgKGxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBfY3VycnkxKGZuKTtcbiAgfVxuICByZXR1cm4gX2FyaXR5KGxlbmd0aCwgX2N1cnJ5TihsZW5ndGgsIFtdLCBmbikpO1xufSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9pc1BsYWNlaG9sZGVyKGEpIHtcbiAgcmV0dXJuIGEgIT0gbnVsbCAmJlxuICAgICAgICAgdHlwZW9mIGEgPT09ICdvYmplY3QnICYmXG4gICAgICAgICBhWydAQGZ1bmN0aW9uYWwvcGxhY2Vob2xkZXInXSA9PT0gdHJ1ZTtcbn07XG4iLCJ2YXIgX3h3cmFwID0gcmVxdWlyZSgnLi9feHdyYXAnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vYmluZCcpO1xudmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaXNBcnJheUxpa2UnKTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gX2FycmF5UmVkdWNlKHhmLCBhY2MsIGxpc3QpIHtcbiAgICB2YXIgaWR4ID0gMDtcbiAgICB2YXIgbGVuID0gbGlzdC5sZW5ndGg7XG4gICAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgICAgYWNjID0geGZbJ0BAdHJhbnNkdWNlci9zdGVwJ10oYWNjLCBsaXN0W2lkeF0pO1xuICAgICAgaWYgKGFjYyAmJiBhY2NbJ0BAdHJhbnNkdWNlci9yZWR1Y2VkJ10pIHtcbiAgICAgICAgYWNjID0gYWNjWydAQHRyYW5zZHVjZXIvdmFsdWUnXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBpZHggKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHhmWydAQHRyYW5zZHVjZXIvcmVzdWx0J10oYWNjKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pdGVyYWJsZVJlZHVjZSh4ZiwgYWNjLCBpdGVyKSB7XG4gICAgdmFyIHN0ZXAgPSBpdGVyLm5leHQoKTtcbiAgICB3aGlsZSAoIXN0ZXAuZG9uZSkge1xuICAgICAgYWNjID0geGZbJ0BAdHJhbnNkdWNlci9zdGVwJ10oYWNjLCBzdGVwLnZhbHVlKTtcbiAgICAgIGlmIChhY2MgJiYgYWNjWydAQHRyYW5zZHVjZXIvcmVkdWNlZCddKSB7XG4gICAgICAgIGFjYyA9IGFjY1snQEB0cmFuc2R1Y2VyL3ZhbHVlJ107XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgc3RlcCA9IGl0ZXIubmV4dCgpO1xuICAgIH1cbiAgICByZXR1cm4geGZbJ0BAdHJhbnNkdWNlci9yZXN1bHQnXShhY2MpO1xuICB9XG5cbiAgZnVuY3Rpb24gX21ldGhvZFJlZHVjZSh4ZiwgYWNjLCBvYmopIHtcbiAgICByZXR1cm4geGZbJ0BAdHJhbnNkdWNlci9yZXN1bHQnXShvYmoucmVkdWNlKGJpbmQoeGZbJ0BAdHJhbnNkdWNlci9zdGVwJ10sIHhmKSwgYWNjKSk7XG4gIH1cblxuICB2YXIgc3ltSXRlcmF0b3IgPSAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcpID8gU3ltYm9sLml0ZXJhdG9yIDogJ0BAaXRlcmF0b3InO1xuICByZXR1cm4gZnVuY3Rpb24gX3JlZHVjZShmbiwgYWNjLCBsaXN0KSB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZm4gPSBfeHdyYXAoZm4pO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheUxpa2UobGlzdCkpIHtcbiAgICAgIHJldHVybiBfYXJyYXlSZWR1Y2UoZm4sIGFjYywgbGlzdCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgbGlzdC5yZWR1Y2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfbWV0aG9kUmVkdWNlKGZuLCBhY2MsIGxpc3QpO1xuICAgIH1cbiAgICBpZiAobGlzdFtzeW1JdGVyYXRvcl0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIF9pdGVyYWJsZVJlZHVjZShmbiwgYWNjLCBsaXN0W3N5bUl0ZXJhdG9yXSgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBsaXN0Lm5leHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBfaXRlcmFibGVSZWR1Y2UoZm4sIGFjYywgbGlzdCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3JlZHVjZTogbGlzdCBtdXN0IGJlIGFycmF5IG9yIGl0ZXJhYmxlJyk7XG4gIH07XG59KCkpO1xuIiwiLyoqXG4gKiBUZXN0cyB3aGV0aGVyIG9yIG5vdCBhbiBvYmplY3QgaXMgYW4gYXJyYXkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSBvYmplY3QgdG8gdGVzdC5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiBgdmFsYCBpcyBhbiBhcnJheSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgX2lzQXJyYXkoW10pOyAvLz0+IHRydWVcbiAqICAgICAgX2lzQXJyYXkobnVsbCk7IC8vPT4gZmFsc2VcbiAqICAgICAgX2lzQXJyYXkoe30pOyAvLz0+IGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBfaXNBcnJheSh2YWwpIHtcbiAgcmV0dXJuICh2YWwgIT0gbnVsbCAmJlxuICAgICAgICAgIHZhbC5sZW5ndGggPj0gMCAmJlxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWwpID09PSAnW29iamVjdCBBcnJheV0nKTtcbn07XG4iLCJ2YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xudmFyIF9kaXNwYXRjaGFibGUgPSByZXF1aXJlKCcuL2ludGVybmFsL19kaXNwYXRjaGFibGUnKTtcbnZhciBfbWFwID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fbWFwJyk7XG52YXIgX3JlZHVjZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX3JlZHVjZScpO1xudmFyIF94bWFwID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9feG1hcCcpO1xudmFyIGN1cnJ5TiA9IHJlcXVpcmUoJy4vY3VycnlOJyk7XG52YXIga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG5cbi8qKlxuICogVGFrZXMgYSBmdW5jdGlvbiBhbmRcbiAqIGEgW2Z1bmN0b3JdKGh0dHBzOi8vZ2l0aHViLmNvbS9mYW50YXN5bGFuZC9mYW50YXN5LWxhbmQjZnVuY3RvciksXG4gKiBhcHBsaWVzIHRoZSBmdW5jdGlvbiB0byBlYWNoIG9mIHRoZSBmdW5jdG9yJ3MgdmFsdWVzLCBhbmQgcmV0dXJuc1xuICogYSBmdW5jdG9yIG9mIHRoZSBzYW1lIHNoYXBlLlxuICpcbiAqIFJhbWRhIHByb3ZpZGVzIHN1aXRhYmxlIGBtYXBgIGltcGxlbWVudGF0aW9ucyBmb3IgYEFycmF5YCBhbmQgYE9iamVjdGAsXG4gKiBzbyB0aGlzIGZ1bmN0aW9uIG1heSBiZSBhcHBsaWVkIHRvIGBbMSwgMiwgM11gIG9yIGB7eDogMSwgeTogMiwgejogM31gLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBtYXBgIG1ldGhvZCBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LCBpZiBwcmVzZW50LlxuICpcbiAqIEFjdHMgYXMgYSB0cmFuc2R1Y2VyIGlmIGEgdHJhbnNmb3JtZXIgaXMgZ2l2ZW4gaW4gbGlzdCBwb3NpdGlvbi5cbiAqXG4gKiBBbHNvIHRyZWF0cyBmdW5jdGlvbnMgYXMgZnVuY3RvcnMgYW5kIHdpbGwgY29tcG9zZSB0aGVtIHRvZ2V0aGVyLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IExpc3RcbiAqIEBzaWcgRnVuY3RvciBmID0+IChhIC0+IGIpIC0+IGYgYSAtPiBmIGJcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gZXZlcnkgZWxlbWVudCBvZiB0aGUgaW5wdXQgYGxpc3RgLlxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBUaGUgbGlzdCB0byBiZSBpdGVyYXRlZCBvdmVyLlxuICogQHJldHVybiB7QXJyYXl9IFRoZSBuZXcgbGlzdC5cbiAqIEBzZWUgUi50cmFuc2R1Y2UsIFIuYWRkSW5kZXhcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgZG91YmxlID0geCA9PiB4ICogMjtcbiAqXG4gKiAgICAgIFIubWFwKGRvdWJsZSwgWzEsIDIsIDNdKTsgLy89PiBbMiwgNCwgNl1cbiAqXG4gKiAgICAgIFIubWFwKGRvdWJsZSwge3g6IDEsIHk6IDIsIHo6IDN9KTsgLy89PiB7eDogMiwgeTogNCwgejogNn1cbiAqIEBzeW1iIFIubWFwKGYsIFthLCBiXSkgPSBbZihhKSwgZihiKV1cbiAqIEBzeW1iIFIubWFwKGYsIHsgeDogYSwgeTogYiB9KSA9IHsgeDogZihhKSwgeTogZihiKSB9XG4gKiBAc3ltYiBSLm1hcChmLCBmdW5jdG9yX28pID0gZnVuY3Rvcl9vLm1hcChmKVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoX2Rpc3BhdGNoYWJsZShbJ21hcCddLCBfeG1hcCwgZnVuY3Rpb24gbWFwKGZuLCBmdW5jdG9yKSB7XG4gIHN3aXRjaCAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGZ1bmN0b3IpKSB7XG4gICAgY2FzZSAnW29iamVjdCBGdW5jdGlvbl0nOlxuICAgICAgcmV0dXJuIGN1cnJ5TihmdW5jdG9yLmxlbmd0aCwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGZ1bmN0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICB9KTtcbiAgICBjYXNlICdbb2JqZWN0IE9iamVjdF0nOlxuICAgICAgcmV0dXJuIF9yZWR1Y2UoZnVuY3Rpb24oYWNjLCBrZXkpIHtcbiAgICAgICAgYWNjW2tleV0gPSBmbihmdW5jdG9yW2tleV0pO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSwge30sIGtleXMoZnVuY3RvcikpO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gX21hcChmbiwgZnVuY3Rvcik7XG4gIH1cbn0pKTtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW1ib2w7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGZpcnN0IGFyZ3VtZW50IGl0IHJlY2VpdmVzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0geyp9IHZhbHVlIEFueSB2YWx1ZS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIGB2YWx1ZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICpcbiAqIGNvbnNvbGUubG9nKF8uaWRlbnRpdHkob2JqZWN0KSA9PT0gb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlkZW50aXR5O1xuIiwidmFyIGJhc2VDcmVhdGUgPSByZXF1aXJlKCcuL19iYXNlQ3JlYXRlJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gaW5zdGFuY2Ugb2YgYEN0b3JgIHJlZ2FyZGxlc3Mgb2ZcbiAqIHdoZXRoZXIgaXQgd2FzIGludm9rZWQgYXMgcGFydCBvZiBhIGBuZXdgIGV4cHJlc3Npb24gb3IgYnkgYGNhbGxgIG9yIGBhcHBseWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IEN0b3IgVGhlIGNvbnN0cnVjdG9yIHRvIHdyYXAuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdG9yKEN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIC8vIFVzZSBhIGBzd2l0Y2hgIHN0YXRlbWVudCB0byB3b3JrIHdpdGggY2xhc3MgY29uc3RydWN0b3JzLiBTZWVcbiAgICAvLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1lY21hc2NyaXB0LWZ1bmN0aW9uLW9iamVjdHMtY2FsbC10aGlzYXJndW1lbnQtYXJndW1lbnRzbGlzdFxuICAgIC8vIGZvciBtb3JlIGRldGFpbHMuXG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEN0b3I7XG4gICAgICBjYXNlIDE6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdKTtcbiAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICBjYXNlIDQ6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIGNhc2UgNTogcmV0dXJuIG5ldyBDdG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0pO1xuICAgICAgY2FzZSA2OiByZXR1cm4gbmV3IEN0b3IoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICBjYXNlIDc6IHJldHVybiBuZXcgQ3RvcihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdLCBhcmdzWzRdLCBhcmdzWzVdLCBhcmdzWzZdKTtcbiAgICB9XG4gICAgdmFyIHRoaXNCaW5kaW5nID0gYmFzZUNyZWF0ZShDdG9yLnByb3RvdHlwZSksXG4gICAgICAgIHJlc3VsdCA9IEN0b3IuYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuXG4gICAgLy8gTWltaWMgdGhlIGNvbnN0cnVjdG9yJ3MgYHJldHVybmAgYmVoYXZpb3IuXG4gICAgLy8gU2VlIGh0dHBzOi8vZXM1LmdpdGh1Yi5pby8jeDEzLjIuMiBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogdGhpc0JpbmRpbmc7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQ3RvcjtcbiIsIi8qKiBVc2VkIGFzIHRoZSBpbnRlcm5hbCBhcmd1bWVudCBwbGFjZWhvbGRlci4gKi9cbnZhciBQTEFDRUhPTERFUiA9ICdfX2xvZGFzaF9wbGFjZWhvbGRlcl9fJztcblxuLyoqXG4gKiBSZXBsYWNlcyBhbGwgYHBsYWNlaG9sZGVyYCBlbGVtZW50cyBpbiBgYXJyYXlgIHdpdGggYW4gaW50ZXJuYWwgcGxhY2Vob2xkZXJcbiAqIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHRoZWlyIGluZGV4ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBtb2RpZnkuXG4gKiBAcGFyYW0geyp9IHBsYWNlaG9sZGVyIFRoZSBwbGFjZWhvbGRlciB0byByZXBsYWNlLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqL1xuZnVuY3Rpb24gcmVwbGFjZUhvbGRlcnMoYXJyYXksIHBsYWNlaG9sZGVyKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzSW5kZXggPSAwLFxuICAgICAgcmVzdWx0ID0gW107XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpbmRleF07XG4gICAgaWYgKHZhbHVlID09PSBwbGFjZWhvbGRlciB8fCB2YWx1ZSA9PT0gUExBQ0VIT0xERVIpIHtcbiAgICAgIGFycmF5W2luZGV4XSA9IFBMQUNFSE9MREVSO1xuICAgICAgcmVzdWx0W3Jlc0luZGV4KytdID0gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVwbGFjZUhvbGRlcnM7XG4iLCIvKipcbiAqIExpc3Qgb2YgVVMgRHJpdmVyIGxpY2Vuc2VzIHJlZ2V4XG4gKiBBbGwgY3JlZGl0IGZvciBjb21waWxpbmcgdGhpcyBsaXN0IGdvZXMgdG8gZ2l0aHViIHVzZXIgbWlrZW1mbGVtaW5nXG4gKiBZb3UgbWF5IHNlZSBoaXMgb3JpZ2luYWwgQ0xJIHZlcnNpb24gb2YgdGhpcyBtb2R1bGUgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9taWtlbWZsZW1pbmcvc3RhdGUtZHJpdmVycy1saWNlbnNlLXJlZ2V4XG4gKiBBbmQgdG8gdGhlIG9yaWdpbmFsIGNvbXBpbGVyIG9mIGFsbCB0aGUgcmVnZXgsIGdpdGh1YiB1c2VyIGFkYW1idWxsbWVyXG4gKiBZb3UgbWF5IHNlZSBoaXMgb3JpZ2luYWwgYXBwcm9hY2ggdG8gdGhpcyBtb2R1bGUgKGluIFBIUCkgaGVyZTpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hZGFtYnVsbG1lci9VU0RMUmVnZXhcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUw6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7Nyw4fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gOFwiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl1cXGR7Niw3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDhcIixcbiAgICB9LFxuICBdLFxuICBBSzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHs3fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTk5OTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgXSxcbiAgQVo6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIEFSOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk5OIE1pbkxlbmd0aCA9IDkgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIENBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA3IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBDTzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXszLDZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTiBtaW4gbGVuZ3RoIDQgbWF4IDdcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezJ9WzAtOV17MSw1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFBTk5OTk4gbWluIGxlbmd0aCAzIG1heCA3XCIsXG4gICAgfSxcbiAgXSxcbiAgQ1Q6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBERTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHsxLDd9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS03IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBEQzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgRkw6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHsxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTk5OTk4gTWluTGVuZ3RoID0gMTIgTWF4TGVuZ3RoID0gMTJcIixcbiAgICB9LFxuICBdLFxuICBHQTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezcsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNy05IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBHVTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHsxMH0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTk4gTWluTGVuZ3RoID0gMTAgTWF4TGVuZ3RoID0gMTBcIixcbiAgICB9LFxuICBdLFxuICBISTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJRDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezJ9WzAtOV17Nn1bQS1aXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzIGZvbGxvd2VkIGJ5IDEgbGV0dGVyXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJTDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17MTF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDExIG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBJTjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezksMTB9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDktMTAgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIElBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXszfVtBLVpdezJ9WzAtOV17NH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJMaWNlbnNlIG11c3QgYmUgMyBudW1iZXJzIGZvbGxvd2VkIGJ5IDIgbGV0dGVycyBmb2xsb3dlZCBieSA0IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBLUzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBLWTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17OCw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTEE6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXsxLDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTUU6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9W0EtWl17MX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzIGZvbGxvd2VkIGJ5IDEgbGV0dGVyXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA4IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBNRDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezEsMn1bMC05XXsxMSwxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgXCJMaWNlbnNlIG11c3QgYmUgMSBvciAyIGxldHRlcnMgZm9sbG93ZWQgYnkgMTEgb3IgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1BOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC8oXltBLVpdezF9WzAtOV17OH0kfF5bQS1aXXsyfVswLTldezd9JCkvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnMgb3IgMiBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1JOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1OOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTIgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE1TOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgLy8gVE9ETzogVGVzdCByZW1haW5pbmcgTGljZW5zZXNcbiAgTU86IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezUsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgNS05IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdezF9WzAtOV17Nn1bUl17MX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0xpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA2IG51bWJlcnMgZm9sbG93ZWQgYnkgXCJSXCInLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX1bQS1aXXsxfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5IG51bWJlcnMgZm9sbG93ZWQgYnkgMSBsZXR0ZXJcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17M31bQS1aXXsxfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDMgbnVtYmVycyArIDEgYWxmYW51bWVyaWMgKyA2IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezUsNn1bQS1aXSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkFOTk5OTkEgTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3IE9SIEFOTk5OTkEgTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgXSxcbiAgTVQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXsxM30kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMTMgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZChcXGR8W0EtWl0pXFxkezJ9W0EtWl17M31cXGQkL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTlhOTkFBQU4gTWluTGVuZ3RoID0gOSBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bYS16XXszfVxcZHsxMH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaHJlZSBsZXR0ZXJzIGFuZCAxMCBkaWdpdHNcIixcbiAgICB9LFxuICBdLFxuICBORTogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezMsOH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJBTk5OTk5OTk4gTWluTGVuZ3RoID0gNCBNYXhMZW5ndGggPSA5XCIsXG4gICAgfSxcbiAgXSxcbiAgTlY6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5LDEwfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA5LTEwIG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezEyfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk5OTiBNaW5MZW5ndGggPSA5IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxuICBOSDogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvKF5bMC05XXsyfVtBLVpdezN9WzAtOV17NX0kfF5bQS1aXXszfVswLTldezh9JCkvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIkxpY2Vuc2UgbXVzdCBiZSAyIG51bWJlcnMgZm9sbG93ZWQgYnkgMyBsZXR0ZXJzIGZvbGxvd2VkIGJ5IDUgbnVtYmVycyBPUiAzIGxldHRlcnMgZm9sbG93ZWQgYnkgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTko6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezE0fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxNCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTk06IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs4LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDgtOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTlk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXsxNywxOH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMSBsZXR0ZXIgZm9sbG93ZWQgYnkgMTctMTggbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OCw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA4LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE5DOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17MSwxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS0xMiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgTkQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXszfVswLTldezZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDMgbGV0dGVycyBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIE9IOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgT0s6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDEgbGV0dGVyIGZvbGxvd2VkIGJ5IDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezcsOX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxuICBPUjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezUsOX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNS05IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXltBLVpdXFxkezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiQU5OTk5OTk4gTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aMC05XXs2LDl9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiWFhYWFhYWFhYIE1pbkxlbmd0aCA9IDYgTWF4TGVuZ3RoID0gOVwiLFxuICAgIH0sXG4gIF0sXG4gIFBBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17OH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgUkk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3LDh9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgb3IgOCBudW1iZXJzIHdpdGhvdXQgbGV0dGVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA2IG51bWJlcnNcIixcbiAgICB9LFxuICBdLFxuICBTQzogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezYsMTF9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDYtMTEgbnVtYmVycyAobmV3OiA5LCBvbGQgZm9ybWF0OiA2LTExKVwiLFxuICAgIH0sXG4gIF0sXG4gIFNEOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17Niw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA2LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFROOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17Nyw5fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSA3LTkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFRYOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezUsOH0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OIE1pbkxlbmd0aCA9IDUgTWF4TGVuZ3RoID0gOFwiLFxuICAgIH0sXG4gIF0sXG4gIFVUOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eWzAtOV17NCwxMH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNC0xMCBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVlQ6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs3LH0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgNy04IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9W0FdJC9pLFxuICAgICAgZGVzY3JpcHRpb246ICdMaWNlbnNlIG11c3QgYmUgNyBudW1iZXJzIGZvbGxvd2VkIGJ5IFwiQVwiJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlxcZHs3fVtBLVpdPyQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICBcIk5OTk5OTk5BIE1pbkxlbmd0aCA9IDggTWF4TGVuZ3RoID0gOCBPUiBOTk5OTk5OIE1pbkxlbmd0aCA9IDcgTWF4TGVuZ3RoID0gN1wiLFxuICAgIH0sXG4gIF0sXG4gIFZBOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17MX1bMC05XXs4fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSA4IG51bWJlcnNcIixcbiAgICB9LFxuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezl9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgOSBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgVkk6IFtcbiAgICB7XG4gICAgICByZWdleDogL15cXGR7MTB9JC8sXG4gICAgICBkZXNjcmlwdGlvbjogXCJOTk5OTk5OTk5OIE1pbkxlbmd0aCA9IDEwIE1heExlbmd0aCA9IDEwXCIsXG4gICAgfSxcbiAgXSxcbiAgV0E6IFtcbiAgICB7XG4gICAgICByZWdleDogL14oPz0uezEyfSQpW0EtWl17MSw3fVtBLVowLTlcXFxcKl17NCwxMX0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgJ0xpY2Vuc2UgbXVzdCBiZSAxLTcgbGV0dGVycyBmb2xsb3dlZCBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgbnVtYmVycywgb3IgXCIqXCIgZm9yIGEgdG90YWwgb2YgMTIgY2hhcmFjdGVycycsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aMC05XXsxMn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJYWFhYWFhYWFhYWFggTWluTGVuZ3RoID0gMTIgTWF4TGVuZ3RoID0gMTJcIixcbiAgICB9LFxuICBdLFxuICBXVjogW1xuICAgIHtcbiAgICAgIHJlZ2V4OiAvXlswLTldezd9JC9pLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDcgbnVtYmVyc1wiLFxuICAgIH0sXG4gICAge1xuICAgICAgcmVnZXg6IC9eW0EtWl17Mn1bMC05XXs1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAyIGxldHRlcnMgZm9sbG93ZWQgYnkgNSBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxLDJ9WzAtOV17Nn0kL2ksXG4gICAgICBkZXNjcmlwdGlvbjogXCJMaWNlbnNlIG11c3QgYmUgMS0yIGxldHRlcnMgZm9sbG93ZWQgYnkgNiBudW1iZXJzXCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXVxcZHs2fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkFOTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsyfVxcZHs1LDZ9JC9pLFxuICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgIFwiQUFOTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDcgT1IgQUFOTk5OTk4gTWluTGVuZ3RoID0gOCBNYXhMZW5ndGggPSA4XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICByZWdleDogL15cXGRbQS1aXVxcZHs1fSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5BTk5OTk4gTWluTGVuZ3RoID0gNyBNYXhMZW5ndGggPSA3XCIsXG4gICAgfSxcbiAgXSxcbiAgV0k6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bQS1aXXsxfVswLTldezEzfSQvaSxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkxpY2Vuc2UgbXVzdCBiZSAxIGxldHRlciBmb2xsb3dlZCBieSAxMyBudW1iZXJzXCIsXG4gICAgfSxcbiAgXSxcbiAgV1k6IFtcbiAgICB7XG4gICAgICByZWdleDogL15bMC05XXs5fSQvLFxuICAgICAgZGVzY3JpcHRpb246IFwiTGljZW5zZSBtdXN0IGJlIDkgbnVtYmVyc1wiLFxuICAgIH0sXG4gIF0sXG4gIFBSOiBbXG4gICAge1xuICAgICAgcmVnZXg6IC9eXFxkezcsOX0kLyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk5OTk5OTk5OTiBNaW5MZW5ndGggPSA3IE1heExlbmd0aCA9IDlcIixcbiAgICB9LFxuICBdLFxufTtcbiIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIF9oYXMgPSByZXF1aXJlKCcuL2ludGVybmFsL19oYXMnKTtcbnZhciBfaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2ludGVybmFsL19pc0FyZ3VtZW50cycpO1xuXG5cbi8qKlxuICogUmV0dXJucyBhIGxpc3QgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgYWxsIHRoZSBlbnVtZXJhYmxlIG93biBwcm9wZXJ0aWVzIG9mXG4gKiB0aGUgc3VwcGxpZWQgb2JqZWN0LlxuICogTm90ZSB0aGF0IHRoZSBvcmRlciBvZiB0aGUgb3V0cHV0IGFycmF5IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGNvbnNpc3RlbnRcbiAqIGFjcm9zcyBkaWZmZXJlbnQgSlMgcGxhdGZvcm1zLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHNpZyB7azogdn0gLT4gW2tdXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gZXh0cmFjdCBwcm9wZXJ0aWVzIGZyb21cbiAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiB0aGUgb2JqZWN0J3Mgb3duIHByb3BlcnRpZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5rZXlzKHthOiAxLCBiOiAyLCBjOiAzfSk7IC8vPT4gWydhJywgJ2InLCAnYyddXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uKCkge1xuICAvLyBjb3ZlciBJRSA8IDkga2V5cyBpc3N1ZXNcbiAgdmFyIGhhc0VudW1CdWcgPSAhKHt0b1N0cmluZzogbnVsbH0pLnByb3BlcnR5SXNFbnVtZXJhYmxlKCd0b1N0cmluZycpO1xuICB2YXIgbm9uRW51bWVyYWJsZVByb3BzID0gWydjb25zdHJ1Y3RvcicsICd2YWx1ZU9mJywgJ2lzUHJvdG90eXBlT2YnLCAndG9TdHJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICdoYXNPd25Qcm9wZXJ0eScsICd0b0xvY2FsZVN0cmluZyddO1xuICAvLyBTYWZhcmkgYnVnXG4gIHZhciBoYXNBcmdzRW51bUJ1ZyA9IChmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5wcm9wZXJ0eUlzRW51bWVyYWJsZSgnbGVuZ3RoJyk7XG4gIH0oKSk7XG5cbiAgdmFyIGNvbnRhaW5zID0gZnVuY3Rpb24gY29udGFpbnMobGlzdCwgaXRlbSkge1xuICAgIHZhciBpZHggPSAwO1xuICAgIHdoaWxlIChpZHggPCBsaXN0Lmxlbmd0aCkge1xuICAgICAgaWYgKGxpc3RbaWR4XSA9PT0gaXRlbSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlkeCArPSAxO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgcmV0dXJuIHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiAhaGFzQXJnc0VudW1CdWcgP1xuICAgIF9jdXJyeTEoZnVuY3Rpb24ga2V5cyhvYmopIHtcbiAgICAgIHJldHVybiBPYmplY3Qob2JqKSAhPT0gb2JqID8gW10gOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIH0pIDpcbiAgICBfY3VycnkxKGZ1bmN0aW9uIGtleXMob2JqKSB7XG4gICAgICBpZiAoT2JqZWN0KG9iaikgIT09IG9iaikge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICB2YXIgcHJvcCwgbklkeDtcbiAgICAgIHZhciBrcyA9IFtdO1xuICAgICAgdmFyIGNoZWNrQXJnc0xlbmd0aCA9IGhhc0FyZ3NFbnVtQnVnICYmIF9pc0FyZ3VtZW50cyhvYmopO1xuICAgICAgZm9yIChwcm9wIGluIG9iaikge1xuICAgICAgICBpZiAoX2hhcyhwcm9wLCBvYmopICYmICghY2hlY2tBcmdzTGVuZ3RoIHx8IHByb3AgIT09ICdsZW5ndGgnKSkge1xuICAgICAgICAgIGtzW2tzLmxlbmd0aF0gPSBwcm9wO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaGFzRW51bUJ1Zykge1xuICAgICAgICBuSWR4ID0gbm9uRW51bWVyYWJsZVByb3BzLmxlbmd0aCAtIDE7XG4gICAgICAgIHdoaWxlIChuSWR4ID49IDApIHtcbiAgICAgICAgICBwcm9wID0gbm9uRW51bWVyYWJsZVByb3BzW25JZHhdO1xuICAgICAgICAgIGlmIChfaGFzKHByb3AsIG9iaikgJiYgIWNvbnRhaW5zKGtzLCBwcm9wKSkge1xuICAgICAgICAgICAga3Nba3MubGVuZ3RoXSA9IHByb3A7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5JZHggLT0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGtzO1xuICAgIH0pO1xufSgpKTtcbiIsInZhciBfY3VycnkzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkzJyk7XG52YXIgX3JlZHVjZSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX3JlZHVjZScpO1xuXG5cbi8qKlxuICogUmV0dXJucyBhIHNpbmdsZSBpdGVtIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBsaXN0LCBzdWNjZXNzaXZlbHkgY2FsbGluZ1xuICogdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uIGFuZCBwYXNzaW5nIGl0IGFuIGFjY3VtdWxhdG9yIHZhbHVlIGFuZCB0aGUgY3VycmVudFxuICogdmFsdWUgZnJvbSB0aGUgYXJyYXksIGFuZCB0aGVuIHBhc3NpbmcgdGhlIHJlc3VsdCB0byB0aGUgbmV4dCBjYWxsLlxuICpcbiAqIFRoZSBpdGVyYXRvciBmdW5jdGlvbiByZWNlaXZlcyB0d28gdmFsdWVzOiAqKGFjYywgdmFsdWUpKi4gSXQgbWF5IHVzZVxuICogYFIucmVkdWNlZGAgdG8gc2hvcnRjdXQgdGhlIGl0ZXJhdGlvbi5cbiAqXG4gKiBUaGUgYXJndW1lbnRzJyBvcmRlciBvZiBgcmVkdWNlUmlnaHRgJ3MgaXRlcmF0b3IgZnVuY3Rpb24gaXMgKih2YWx1ZSwgYWNjKSouXG4gKlxuICogTm90ZTogYFIucmVkdWNlYCBkb2VzIG5vdCBza2lwIGRlbGV0ZWQgb3IgdW5hc3NpZ25lZCBpbmRpY2VzIChzcGFyc2VcbiAqIGFycmF5cyksIHVubGlrZSB0aGUgbmF0aXZlIGBBcnJheS5wcm90b3R5cGUucmVkdWNlYCBtZXRob2QuIEZvciBtb3JlIGRldGFpbHNcbiAqIG9uIHRoaXMgYmVoYXZpb3IsIHNlZTpcbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L3JlZHVjZSNEZXNjcmlwdGlvblxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGByZWR1Y2VgIG1ldGhvZCBvZiB0aGUgdGhpcmQgYXJndW1lbnQsIGlmIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgTGlzdFxuICogQHNpZyAoKGEsIGIpIC0+IGEpIC0+IGEgLT4gW2JdIC0+IGFcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBpdGVyYXRvciBmdW5jdGlvbi4gUmVjZWl2ZXMgdHdvIHZhbHVlcywgdGhlIGFjY3VtdWxhdG9yIGFuZCB0aGVcbiAqICAgICAgICBjdXJyZW50IGVsZW1lbnQgZnJvbSB0aGUgYXJyYXkuXG4gKiBAcGFyYW0geyp9IGFjYyBUaGUgYWNjdW11bGF0b3IgdmFsdWUuXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IFRoZSBsaXN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEByZXR1cm4geyp9IFRoZSBmaW5hbCwgYWNjdW11bGF0ZWQgdmFsdWUuXG4gKiBAc2VlIFIucmVkdWNlZCwgUi5hZGRJbmRleCwgUi5yZWR1Y2VSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIucmVkdWNlKFIuc3VidHJhY3QsIDAsIFsxLCAyLCAzLCA0XSkgLy8gPT4gKCgoKDAgLSAxKSAtIDIpIC0gMykgLSA0KSA9IC0xMFxuICogICAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgIC0xMFxuICogICAgICAgICAgICAgICAvIFxcICAgICAgICAgICAgICAvIFxcXG4gKiAgICAgICAgICAgICAgLSAgIDQgICAgICAgICAgIC02ICAgNFxuICogICAgICAgICAgICAgLyBcXCAgICAgICAgICAgICAgLyBcXFxuICogICAgICAgICAgICAtICAgMyAgID09PiAgICAgLTMgICAzXG4gKiAgICAgICAgICAgLyBcXCAgICAgICAgICAgICAgLyBcXFxuICogICAgICAgICAgLSAgIDIgICAgICAgICAgIC0xICAgMlxuICogICAgICAgICAvIFxcICAgICAgICAgICAgICAvIFxcXG4gKiAgICAgICAgMCAgIDEgICAgICAgICAgICAwICAgMVxuICpcbiAqIEBzeW1iIFIucmVkdWNlKGYsIGEsIFtiLCBjLCBkXSkgPSBmKGYoZihhLCBiKSwgYyksIGQpXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MyhfcmVkdWNlKTtcbiIsInZhciBfaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzQXJyYXknKTtcblxuXG4vKipcbiAqIFRoaXMgY2hlY2tzIHdoZXRoZXIgYSBmdW5jdGlvbiBoYXMgYSBbbWV0aG9kbmFtZV0gZnVuY3Rpb24uIElmIGl0IGlzbid0IGFuXG4gKiBhcnJheSBpdCB3aWxsIGV4ZWN1dGUgdGhhdCBmdW5jdGlvbiBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIHRoZSByYW1kYVxuICogaW1wbGVtZW50YXRpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIHJhbWRhIGltcGxlbXRhdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IG1ldGhvZG5hbWUgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uXG4gKiBAcmV0dXJuIHtPYmplY3R9IFdoYXRldmVyIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1ldGhvZCBpcy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY2hlY2tGb3JNZXRob2QobWV0aG9kbmFtZSwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmbigpO1xuICAgIH1cbiAgICB2YXIgb2JqID0gYXJndW1lbnRzW2xlbmd0aCAtIDFdO1xuICAgIHJldHVybiAoX2lzQXJyYXkob2JqKSB8fCB0eXBlb2Ygb2JqW21ldGhvZG5hbWVdICE9PSAnZnVuY3Rpb24nKSA/XG4gICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDpcbiAgICAgIG9ialttZXRob2RuYW1lXS5hcHBseShvYmosIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgbGVuZ3RoIC0gMSkpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuL2hlbHBlcnMvbm9ybWFsaXplSGVhZGVyTmFtZScpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuL2FkYXB0ZXJzL3hocicpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIEZvciBub2RlIHVzZSBIVFRQIGFkYXB0ZXJcbiAgICBhZGFwdGVyID0gcmVxdWlyZSgnLi9hZGFwdGVycy9odHRwJyk7XG4gIH1cbiAgcmV0dXJuIGFkYXB0ZXI7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgYWRhcHRlcjogZ2V0RGVmYXVsdEFkYXB0ZXIoKSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgbm9ybWFsaXplSGVhZGVyTmFtZShoZWFkZXJzLCAnQ29udGVudC1UeXBlJyk7XG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQXJyYXlCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNGaWxlKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0Jsb2IoZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlclZpZXcoZGF0YSkpIHtcbiAgICAgIHJldHVybiBkYXRhLmJ1ZmZlcjtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBzZXRDb250ZW50VHlwZUlmVW5zZXQoaGVhZGVycywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04Jyk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgLyogSWdub3JlICovIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH1cbn07XG5cbmRlZmF1bHRzLmhlYWRlcnMgPSB7XG4gIGNvbW1vbjoge1xuICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJ1xuICB9XG59O1xuXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHV0aWxzLm1lcmdlKERFRkFVTFRfQ09OVEVOVF9UWVBFKTtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmF1bHRzO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwidmFyIGJhc2VJc1R5cGVkQXJyYXkgPSByZXF1aXJlKCcuL19iYXNlSXNUeXBlZEFycmF5JyksXG4gICAgYmFzZVVuYXJ5ID0gcmVxdWlyZSgnLi9fYmFzZVVuYXJ5JyksXG4gICAgbm9kZVV0aWwgPSByZXF1aXJlKCcuL19ub2RlVXRpbCcpO1xuXG4vKiBOb2RlLmpzIGhlbHBlciByZWZlcmVuY2VzLiAqL1xudmFyIG5vZGVJc1R5cGVkQXJyYXkgPSBub2RlVXRpbCAmJiBub2RlVXRpbC5pc1R5cGVkQXJyYXk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIHR5cGVkIGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdHlwZWQgYXJyYXksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkobmV3IFVpbnQ4QXJyYXkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KFtdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc1R5cGVkQXJyYXkgPSBub2RlSXNUeXBlZEFycmF5ID8gYmFzZVVuYXJ5KG5vZGVJc1R5cGVkQXJyYXkpIDogYmFzZUlzVHlwZWRBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBpc1R5cGVkQXJyYXk7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmNyZWF0ZWAgd2l0aG91dCBzdXBwb3J0IGZvciBhc3NpZ25pbmdcbiAqIHByb3BlcnRpZXMgdG8gdGhlIGNyZWF0ZWQgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvdG8gVGhlIG9iamVjdCB0byBpbmhlcml0IGZyb20uXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBuZXcgb2JqZWN0LlxuICovXG52YXIgYmFzZUNyZWF0ZSA9IChmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gb2JqZWN0KCkge31cbiAgcmV0dXJuIGZ1bmN0aW9uKHByb3RvKSB7XG4gICAgaWYgKCFpc09iamVjdChwcm90bykpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKG9iamVjdENyZWF0ZSkge1xuICAgICAgcmV0dXJuIG9iamVjdENyZWF0ZShwcm90byk7XG4gICAgfVxuICAgIG9iamVjdC5wcm90b3R5cGUgPSBwcm90bztcbiAgICB2YXIgcmVzdWx0ID0gbmV3IG9iamVjdDtcbiAgICBvYmplY3QucHJvdG90eXBlID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VDcmVhdGU7XG4iLCIvKipcbiAqIEEgZmFzdGVyIGFsdGVybmF0aXZlIHRvIGBGdW5jdGlvbiNhcHBseWAsIHRoaXMgZnVuY3Rpb24gaW52b2tlcyBgZnVuY2BcbiAqIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIGB0aGlzQXJnYCBhbmQgdGhlIGFyZ3VtZW50cyBvZiBgYXJnc2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZS5cbiAqIEBwYXJhbSB7Kn0gdGhpc0FyZyBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgYXJndW1lbnRzIHRvIGludm9rZSBgZnVuY2Agd2l0aC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYGZ1bmNgLlxuICovXG5mdW5jdGlvbiBhcHBseShmdW5jLCB0aGlzQXJnLCBhcmdzKSB7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZyk7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuYy5jYWxsKHRoaXNBcmcsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmMuY2FsbCh0aGlzQXJnLCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jLmNhbGwodGhpc0FyZywgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmMuYXBwbHkodGhpc0FyZywgYXJncyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXBwbHk7XG4iLCJ2YXIgYmFzZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX2Jhc2VDcmVhdGUnKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB0aGUgbWF4aW11bSBsZW5ndGggYW5kIGluZGV4IG9mIGFuIGFycmF5LiAqL1xudmFyIE1BWF9BUlJBWV9MRU5HVEggPSA0Mjk0OTY3Mjk1O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBsYXp5IHdyYXBwZXIgb2JqZWN0IHdoaWNoIHdyYXBzIGB2YWx1ZWAgdG8gZW5hYmxlIGxhenkgZXZhbHVhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byB3cmFwLlxuICovXG5mdW5jdGlvbiBMYXp5V3JhcHBlcih2YWx1ZSkge1xuICB0aGlzLl9fd3JhcHBlZF9fID0gdmFsdWU7XG4gIHRoaXMuX19hY3Rpb25zX18gPSBbXTtcbiAgdGhpcy5fX2Rpcl9fID0gMTtcbiAgdGhpcy5fX2ZpbHRlcmVkX18gPSBmYWxzZTtcbiAgdGhpcy5fX2l0ZXJhdGVlc19fID0gW107XG4gIHRoaXMuX190YWtlQ291bnRfXyA9IE1BWF9BUlJBWV9MRU5HVEg7XG4gIHRoaXMuX192aWV3c19fID0gW107XG59XG5cbi8vIEVuc3VyZSBgTGF6eVdyYXBwZXJgIGlzIGFuIGluc3RhbmNlIG9mIGBiYXNlTG9kYXNoYC5cbkxhenlXcmFwcGVyLnByb3RvdHlwZSA9IGJhc2VDcmVhdGUoYmFzZUxvZGFzaC5wcm90b3R5cGUpO1xuTGF6eVdyYXBwZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGF6eVdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTGF6eVdyYXBwZXI7XG4iLCIvKipcbiAqIFRoZSBmdW5jdGlvbiB3aG9zZSBwcm90b3R5cGUgY2hhaW4gc2VxdWVuY2Ugd3JhcHBlcnMgaW5oZXJpdCBmcm9tLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJhc2VMb2Rhc2goKSB7XG4gIC8vIE5vIG9wZXJhdGlvbiBwZXJmb3JtZWQuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUxvZGFzaDtcbiIsIi8qKlxuICogR2V0cyB0aGUgYXJndW1lbnQgcGxhY2Vob2xkZXIgdmFsdWUgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9sZGVyKGZ1bmMpIHtcbiAgdmFyIG9iamVjdCA9IGZ1bmM7XG4gIHJldHVybiBvYmplY3QucGxhY2Vob2xkZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0SG9sZGVyO1xuIiwiKGZ1bmN0aW9uKGYpIHtcblxuICAndXNlIHN0cmljdCc7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiBleHBvcnRzICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiBleHBvcnRzLm5vZGVUeXBlICE9PSAnbnVtYmVyJykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZiAoKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgIT0gbnVsbCkge1xuICAgIGRlZmluZSAoW10sIGYpO1xuICB9IGVsc2Uge1xuICAgIHZhciBiYXNlNjQgPSBmICgpO1xuICAgIHZhciBnbG9iYWwgPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyBzZWxmIDogJC5nbG9iYWw7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWwuYnRvYSAhPT0gJ2Z1bmN0aW9uJykgZ2xvYmFsLmJ0b2EgPSBiYXNlNjQuYnRvYTtcbiAgICBpZiAodHlwZW9mIGdsb2JhbC5hdG9iICE9PSAnZnVuY3Rpb24nKSBnbG9iYWwuYXRvYiA9IGJhc2U2NC5hdG9iO1xuICB9XG5cbn0gKGZ1bmN0aW9uKCkge1xuXG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuXG4gIGZ1bmN0aW9uIEludmFsaWRDaGFyYWN0ZXJFcnJvcihtZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgfVxuICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yICgpO1xuICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW52YWxpZENoYXJhY3RlckVycm9yJztcblxuICAvLyBlbmNvZGVyXG4gIC8vIFtodHRwczovL2dpc3QuZ2l0aHViLmNvbS85OTkxNjZdIGJ5IFtodHRwczovL2dpdGh1Yi5jb20vbmlnbmFnXVxuICBmdW5jdGlvbiBidG9hKGlucHV0KSB7XG4gICAgdmFyIHN0ciA9IFN0cmluZyAoaW5wdXQpO1xuICAgIGZvciAoXG4gICAgICAvLyBpbml0aWFsaXplIHJlc3VsdCBhbmQgY291bnRlclxuICAgICAgdmFyIGJsb2NrLCBjaGFyQ29kZSwgaWR4ID0gMCwgbWFwID0gY2hhcnMsIG91dHB1dCA9ICcnO1xuICAgICAgLy8gaWYgdGhlIG5leHQgc3RyIGluZGV4IGRvZXMgbm90IGV4aXN0OlxuICAgICAgLy8gICBjaGFuZ2UgdGhlIG1hcHBpbmcgdGFibGUgdG8gXCI9XCJcbiAgICAgIC8vICAgY2hlY2sgaWYgZCBoYXMgbm8gZnJhY3Rpb25hbCBkaWdpdHNcbiAgICAgIHN0ci5jaGFyQXQgKGlkeCB8IDApIHx8IChtYXAgPSAnPScsIGlkeCAlIDEpO1xuICAgICAgLy8gXCI4IC0gaWR4ICUgMSAqIDhcIiBnZW5lcmF0ZXMgdGhlIHNlcXVlbmNlIDIsIDQsIDYsIDhcbiAgICAgIG91dHB1dCArPSBtYXAuY2hhckF0ICg2MyAmIGJsb2NrID4+IDggLSBpZHggJSAxICogOClcbiAgICApIHtcbiAgICAgIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQgKGlkeCArPSAzIC8gNCk7XG4gICAgICBpZiAoY2hhckNvZGUgPiAweEZGKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IgKFwiJ2J0b2EnIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBlbmNvZGVkIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3V0c2lkZSBvZiB0aGUgTGF0aW4xIHJhbmdlLlwiKTtcbiAgICAgIH1cbiAgICAgIGJsb2NrID0gYmxvY2sgPDwgOCB8IGNoYXJDb2RlO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgLy8gZGVjb2RlclxuICAvLyBbaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vMTAyMDM5Nl0gYnkgW2h0dHBzOi8vZ2l0aHViLmNvbS9hdGtdXG4gIGZ1bmN0aW9uIGF0b2IoaW5wdXQpIHtcbiAgICB2YXIgc3RyID0gKFN0cmluZyAoaW5wdXQpKS5yZXBsYWNlICgvWz1dKyQvLCAnJyk7IC8vICMzMTogRXh0ZW5kU2NyaXB0IGJhZCBwYXJzZSBvZiAvPVxuICAgIGlmIChzdHIubGVuZ3RoICUgNCA9PT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvciAoXCInYXRvYicgZmFpbGVkOiBUaGUgc3RyaW5nIHRvIGJlIGRlY29kZWQgaXMgbm90IGNvcnJlY3RseSBlbmNvZGVkLlwiKTtcbiAgICB9XG4gICAgZm9yIChcbiAgICAgIC8vIGluaXRpYWxpemUgcmVzdWx0IGFuZCBjb3VudGVyc1xuICAgICAgdmFyIGJjID0gMCwgYnMsIGJ1ZmZlciwgaWR4ID0gMCwgb3V0cHV0ID0gJyc7XG4gICAgICAvLyBnZXQgbmV4dCBjaGFyYWN0ZXJcbiAgICAgIGJ1ZmZlciA9IHN0ci5jaGFyQXQgKGlkeCsrKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25kLWFzc2lnblxuICAgICAgLy8gY2hhcmFjdGVyIGZvdW5kIGluIHRhYmxlPyBpbml0aWFsaXplIGJpdCBzdG9yYWdlIGFuZCBhZGQgaXRzIGFzY2lpIHZhbHVlO1xuICAgICAgfmJ1ZmZlciAmJiAoYnMgPSBiYyAlIDQgPyBicyAqIDY0ICsgYnVmZmVyIDogYnVmZmVyLFxuICAgICAgICAvLyBhbmQgaWYgbm90IGZpcnN0IG9mIGVhY2ggNCBjaGFyYWN0ZXJzLFxuICAgICAgICAvLyBjb252ZXJ0IHRoZSBmaXJzdCA4IGJpdHMgdG8gb25lIGFzY2lpIGNoYXJhY3RlclxuICAgICAgICBiYysrICUgNCkgPyBvdXRwdXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSAoMjU1ICYgYnMgPj4gKC0yICogYmMgJiA2KSkgOiAwXG4gICAgKSB7XG4gICAgICAvLyB0cnkgdG8gZmluZCBjaGFyYWN0ZXIgaW4gdGFibGUgKDAtNjMsIG5vdCBmb3VuZCA9PiAtMSlcbiAgICAgIGJ1ZmZlciA9IGNoYXJzLmluZGV4T2YgKGJ1ZmZlcik7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICByZXR1cm4ge2J0b2E6IGJ0b2EsIGF0b2I6IGF0b2J9O1xuXG59KSk7XG4iLCJ2YXIgYmFzZVJlc3QgPSByZXF1aXJlKCcuL19iYXNlUmVzdCcpLFxuICAgIGNyZWF0ZVdyYXAgPSByZXF1aXJlKCcuL19jcmVhdGVXcmFwJyksXG4gICAgZ2V0SG9sZGVyID0gcmVxdWlyZSgnLi9fZ2V0SG9sZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlXG4gKiBhcmd1bWVudHMgaXQgcmVjZWl2ZXMuIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uYmluZGAgZXhjZXB0IGl0IGRvZXMgKipub3QqKlxuICogYWx0ZXIgdGhlIGB0aGlzYCBiaW5kaW5nLlxuICpcbiAqIFRoZSBgXy5wYXJ0aWFsLnBsYWNlaG9sZGVyYCB2YWx1ZSwgd2hpY2ggZGVmYXVsdHMgdG8gYF9gIGluIG1vbm9saXRoaWNcbiAqIGJ1aWxkcywgbWF5IGJlIHVzZWQgYXMgYSBwbGFjZWhvbGRlciBmb3IgcGFydGlhbGx5IGFwcGxpZWQgYXJndW1lbnRzLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBkb2Vzbid0IHNldCB0aGUgXCJsZW5ndGhcIiBwcm9wZXJ0eSBvZiBwYXJ0aWFsbHlcbiAqIGFwcGxpZWQgZnVuY3Rpb25zLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4yLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcGFydGlhbGx5IGFwcGx5IGFyZ3VtZW50cyB0by5cbiAqIEBwYXJhbSB7Li4uKn0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIGJlIHBhcnRpYWxseSBhcHBsaWVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcGFydGlhbGx5IGFwcGxpZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIGdyZWV0KGdyZWV0aW5nLCBuYW1lKSB7XG4gKiAgIHJldHVybiBncmVldGluZyArICcgJyArIG5hbWU7XG4gKiB9XG4gKlxuICogdmFyIHNheUhlbGxvVG8gPSBfLnBhcnRpYWwoZ3JlZXQsICdoZWxsbycpO1xuICogc2F5SGVsbG9UbygnZnJlZCcpO1xuICogLy8gPT4gJ2hlbGxvIGZyZWQnXG4gKlxuICogLy8gUGFydGlhbGx5IGFwcGxpZWQgd2l0aCBwbGFjZWhvbGRlcnMuXG4gKiB2YXIgZ3JlZXRGcmVkID0gXy5wYXJ0aWFsKGdyZWV0LCBfLCAnZnJlZCcpO1xuICogZ3JlZXRGcmVkKCdoaScpO1xuICogLy8gPT4gJ2hpIGZyZWQnXG4gKi9cbnZhciBwYXJ0aWFsID0gYmFzZVJlc3QoZnVuY3Rpb24oZnVuYywgcGFydGlhbHMpIHtcbiAgdmFyIGhvbGRlcnMgPSByZXBsYWNlSG9sZGVycyhwYXJ0aWFscywgZ2V0SG9sZGVyKHBhcnRpYWwpKTtcbiAgcmV0dXJuIGNyZWF0ZVdyYXAoZnVuYywgV1JBUF9QQVJUSUFMX0ZMQUcsIHVuZGVmaW5lZCwgcGFydGlhbHMsIGhvbGRlcnMpO1xufSk7XG5cbi8vIEFzc2lnbiBkZWZhdWx0IHBsYWNlaG9sZGVycy5cbnBhcnRpYWwucGxhY2Vob2xkZXIgPSB7fTtcblxubW9kdWxlLmV4cG9ydHMgPSBwYXJ0aWFsO1xuIiwidmFyIGRyaXZlcnNMaWNlbnNlUmVnZXggPSByZXF1aXJlKFwiLi9saWNlbnNlLXJlZ2V4XCIpO1xudmFyIGlzVmFsaWRVU0xpY2Vuc2UgPSByZXF1aXJlKFwiLi9pcy12YWxpZC11cy1saWNlbnNlXCIpO1xudmFyIHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlLWRyaXZlcnMtbGljZW5zZVwiKTtcbnZhciBzdXBwb3J0ZWRTdGF0ZXMgPSByZXF1aXJlKFwiLi9zdXBwb3J0ZWQtc3RhdGVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZHJpdmVyc0xpY2Vuc2VSZWdleDogZHJpdmVyc0xpY2Vuc2VSZWdleCxcbiAgaXNWYWxpZFVTTGljZW5zZTogaXNWYWxpZFVTTGljZW5zZSxcbiAgdmFsaWRhdGVVU0RyaXZlcnNMaWNlbnNlOiB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UsXG4gIHN1cHBvcnRlZFN0YXRlczogc3VwcG9ydGVkU3RhdGVzXG59O1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfZXF1YWxzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fZXF1YWxzJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiBpdHMgYXJndW1lbnRzIGFyZSBlcXVpdmFsZW50LCBgZmFsc2VgIG90aGVyd2lzZS4gSGFuZGxlc1xuICogY3ljbGljYWwgZGF0YSBzdHJ1Y3R1cmVzLlxuICpcbiAqIERpc3BhdGNoZXMgc3ltbWV0cmljYWxseSB0byB0aGUgYGVxdWFsc2AgbWV0aG9kcyBvZiBib3RoIGFyZ3VtZW50cywgaWZcbiAqIHByZXNlbnQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMTUuMFxuICogQGNhdGVnb3J5IFJlbGF0aW9uXG4gKiBAc2lnIGEgLT4gYiAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IGFcbiAqIEBwYXJhbSB7Kn0gYlxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmVxdWFscygxLCAxKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuZXF1YWxzKDEsICcxJyk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5lcXVhbHMoWzEsIDIsIDNdLCBbMSwgMiwgM10pOyAvLz0+IHRydWVcbiAqXG4gKiAgICAgIHZhciBhID0ge307IGEudiA9IGE7XG4gKiAgICAgIHZhciBiID0ge307IGIudiA9IGI7XG4gKiAgICAgIFIuZXF1YWxzKGEsIGIpOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGVxdWFscyhhLCBiKSB7XG4gIHJldHVybiBfZXF1YWxzKGEsIGIsIFtdLCBbXSk7XG59KTtcbiIsInZhciBfaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSAoZnVuY3Rpb24oKSB7XG4gIHZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFyZ3VtZW50cykgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nID9cbiAgICBmdW5jdGlvbiBfaXNBcmd1bWVudHMoeCkgeyByZXR1cm4gdG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7IH0gOlxuICAgIGZ1bmN0aW9uIF9pc0FyZ3VtZW50cyh4KSB7IHJldHVybiBfaGFzKCdjYWxsZWUnLCB4KTsgfTtcbn0oKSk7XG4iLCIvKipcbiAqIFByaXZhdGUgYGNvbmNhdGAgZnVuY3Rpb24gdG8gbWVyZ2UgdHdvIGFycmF5LWxpa2Ugb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxBcmd1bWVudHN9IFtzZXQxPVtdXSBBbiBhcnJheS1saWtlIG9iamVjdC5cbiAqIEBwYXJhbSB7QXJyYXl8QXJndW1lbnRzfSBbc2V0Mj1bXV0gQW4gYXJyYXktbGlrZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheX0gQSBuZXcsIG1lcmdlZCBhcnJheS5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBfY29uY2F0KFs0LCA1LCA2XSwgWzEsIDIsIDNdKTsgLy89PiBbNCwgNSwgNiwgMSwgMiwgM11cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY29uY2F0KHNldDEsIHNldDIpIHtcbiAgc2V0MSA9IHNldDEgfHwgW107XG4gIHNldDIgPSBzZXQyIHx8IFtdO1xuICB2YXIgaWR4O1xuICB2YXIgbGVuMSA9IHNldDEubGVuZ3RoO1xuICB2YXIgbGVuMiA9IHNldDIubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gW107XG5cbiAgaWR4ID0gMDtcbiAgd2hpbGUgKGlkeCA8IGxlbjEpIHtcbiAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBzZXQxW2lkeF07XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgaWR4ID0gMDtcbiAgd2hpbGUgKGlkeCA8IGxlbjIpIHtcbiAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBzZXQyW2lkeF07XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9pc1N0cmluZyh4KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IFN0cmluZ10nO1xufTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aGVuIHN1cHBsaWVkIGFuIG9iamVjdCByZXR1cm5zIHRoZSBpbmRpY2F0ZWRcbiAqIHByb3BlcnR5IG9mIHRoYXQgb2JqZWN0LCBpZiBpdCBleGlzdHMuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAc2lnIHMgLT4ge3M6IGF9IC0+IGEgfCBVbmRlZmluZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBwIFRoZSBwcm9wZXJ0eSBuYW1lXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIFRoZSBvYmplY3QgdG8gcXVlcnlcbiAqIEByZXR1cm4geyp9IFRoZSB2YWx1ZSBhdCBgb2JqLnBgLlxuICogQHNlZSBSLnBhdGhcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnByb3AoJ3gnLCB7eDogMTAwfSk7IC8vPT4gMTAwXG4gKiAgICAgIFIucHJvcCgneCcsIHt9KTsgLy89PiB1bmRlZmluZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIHByb3AocCwgb2JqKSB7IHJldHVybiBvYmpbcF07IH0pO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIHRoZSBnaXZlbiB2YWx1ZS4gTm90ZSB0aGF0IGZvclxuICogbm9uLXByaW1pdGl2ZXMgdGhlIHZhbHVlIHJldHVybmVkIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZS5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGtub3duIGFzIGBjb25zdGAsIGBjb25zdGFudGAsIG9yIGBLYCAoZm9yIEsgY29tYmluYXRvcikgaW5cbiAqIG90aGVyIGxhbmd1YWdlcyBhbmQgbGlicmFyaWVzLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnIGEgLT4gKCogLT4gYSlcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB3cmFwIGluIGEgZnVuY3Rpb25cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIEZ1bmN0aW9uIDo6ICogLT4gdmFsLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciB0ID0gUi5hbHdheXMoJ1RlZScpO1xuICogICAgICB0KCk7IC8vPT4gJ1RlZSdcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGFsd2F5cyh2YWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWw7XG4gIH07XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBTZWUgaWYgYW4gb2JqZWN0IChgdmFsYCkgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIHN1cHBsaWVkIGNvbnN0cnVjdG9yLiBUaGlzXG4gKiBmdW5jdGlvbiB3aWxsIGNoZWNrIHVwIHRoZSBpbmhlcml0YW5jZSBjaGFpbiwgaWYgYW55LlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjMuMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBzaWcgKCogLT4geyp9KSAtPiBhIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7T2JqZWN0fSBjdG9yIEEgY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuaXMoT2JqZWN0LCB7fSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKE51bWJlciwgMSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKE9iamVjdCwgMSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pcyhTdHJpbmcsICdzJyk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlzKFN0cmluZywgbmV3IFN0cmluZygnJykpOyAvLz0+IHRydWVcbiAqICAgICAgUi5pcyhPYmplY3QsIG5ldyBTdHJpbmcoJycpKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaXMoT2JqZWN0LCAncycpOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXMoTnVtYmVyLCB7fSk7IC8vPT4gZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIGlzKEN0b3IsIHZhbCkge1xuICByZXR1cm4gdmFsICE9IG51bGwgJiYgdmFsLmNvbnN0cnVjdG9yID09PSBDdG9yIHx8IHZhbCBpbnN0YW5jZW9mIEN0b3I7XG59KTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBsYXJnZXIgb2YgaXRzIHR3byBhcmd1bWVudHMuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgUmVsYXRpb25cbiAqIEBzaWcgT3JkIGEgPT4gYSAtPiBhIC0+IGFcbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHsqfVxuICogQHNlZSBSLm1heEJ5LCBSLm1pblxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIubWF4KDc4OSwgMTIzKTsgLy89PiA3ODlcbiAqICAgICAgUi5tYXgoJ2EnLCAnYicpOyAvLz0+ICdiJ1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gbWF4KGEsIGIpIHsgcmV0dXJuIGIgPiBhID8gYiA6IGE7IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJncyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgcGFyc2VIZWFkZXJzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL3BhcnNlSGVhZGVycycpO1xudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc1VSTFNhbWVPcmlnaW4nKTtcbnZhciBjcmVhdGVFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvY3JlYXRlRXJyb3InKTtcbnZhciBidG9hID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5idG9hICYmIHdpbmRvdy5idG9hLmJpbmQod2luZG93KSkgfHwgcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J0b2EnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpKSB7XG4gICAgICBkZWxldGUgcmVxdWVzdEhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddOyAvLyBMZXQgdGhlIGJyb3dzZXIgc2V0IGl0XG4gICAgfVxuXG4gICAgdmFyIHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB2YXIgbG9hZEV2ZW50ID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG4gICAgdmFyIHhEb21haW4gPSBmYWxzZTtcblxuICAgIC8vIEZvciBJRSA4LzkgQ09SUyBzdXBwb3J0XG4gICAgLy8gT25seSBzdXBwb3J0cyBQT1NUIGFuZCBHRVQgY2FsbHMgYW5kIGRvZXNuJ3QgcmV0dXJucyB0aGUgcmVzcG9uc2UgaGVhZGVycy5cbiAgICAvLyBET04nVCBkbyB0aGlzIGZvciB0ZXN0aW5nIGIvYyBYTUxIdHRwUmVxdWVzdCBpcyBtb2NrZWQsIG5vdCBYRG9tYWluUmVxdWVzdC5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB3aW5kb3cuWERvbWFpblJlcXVlc3QgJiYgISgnd2l0aENyZWRlbnRpYWxzJyBpbiByZXF1ZXN0KSAmJlxuICAgICAgICAhaXNVUkxTYW1lT3JpZ2luKGNvbmZpZy51cmwpKSB7XG4gICAgICByZXF1ZXN0ID0gbmV3IHdpbmRvdy5YRG9tYWluUmVxdWVzdCgpO1xuICAgICAgbG9hZEV2ZW50ID0gJ29ubG9hZCc7XG4gICAgICB4RG9tYWluID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3Qub25wcm9ncmVzcyA9IGZ1bmN0aW9uIGhhbmRsZVByb2dyZXNzKCkge307XG4gICAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7fTtcbiAgICB9XG5cbiAgICAvLyBIVFRQIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgaWYgKGNvbmZpZy5hdXRoKSB7XG4gICAgICB2YXIgdXNlcm5hbWUgPSBjb25maWcuYXV0aC51c2VybmFtZSB8fCAnJztcbiAgICAgIHZhciBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgcmVxdWVzdEhlYWRlcnMuQXV0aG9yaXphdGlvbiA9ICdCYXNpYyAnICsgYnRvYSh1c2VybmFtZSArICc6JyArIHBhc3N3b3JkKTtcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChjb25maWcudXJsLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplciksIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBjb25maWcudGltZW91dDtcblxuICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGVcbiAgICByZXF1ZXN0W2xvYWRFdmVudF0gPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0IHx8IChyZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQgJiYgIXhEb21haW4pKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICB2YXIgcmVzcG9uc2VIZWFkZXJzID0gJ2dldEFsbFJlc3BvbnNlSGVhZGVycycgaW4gcmVxdWVzdCA/IHBhcnNlSGVhZGVycyhyZXF1ZXN0LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSA6IG51bGw7XG4gICAgICB2YXIgcmVzcG9uc2VEYXRhID0gIWNvbmZpZy5yZXNwb25zZVR5cGUgfHwgY29uZmlnLnJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnID8gcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgdmFyIHJlc3BvbnNlID0ge1xuICAgICAgICBkYXRhOiByZXNwb25zZURhdGEsXG4gICAgICAgIC8vIElFIHNlbmRzIDEyMjMgaW5zdGVhZCBvZiAyMDQgKGh0dHBzOi8vZ2l0aHViLmNvbS9temFicmlza2llL2F4aW9zL2lzc3Vlcy8yMDEpXG4gICAgICAgIHN0YXR1czogcmVxdWVzdC5zdGF0dXMgPT09IDEyMjMgPyAyMDQgOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXMgPT09IDEyMjMgPyAnTm8gQ29udGVudCcgOiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QoY3JlYXRlRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBjb25maWcsIG51bGwsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgcmVqZWN0KGNyZWF0ZUVycm9yKCd0aW1lb3V0IG9mICcgKyBjb25maWcudGltZW91dCArICdtcyBleGNlZWRlZCcsIGNvbmZpZywgJ0VDT05OQUJPUlRFRCcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIHZhciBjb29raWVzID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2Nvb2tpZXMnKTtcblxuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICB2YXIgeHNyZlZhbHVlID0gKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMgfHwgaXNVUkxTYW1lT3JpZ2luKGNvbmZpZy51cmwpKSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgP1xuICAgICAgICAgIGNvb2tpZXMucmVhZChjb25maWcueHNyZkNvb2tpZU5hbWUpIDpcbiAgICAgICAgICB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbY29uZmlnLnhzcmZIZWFkZXJOYW1lXSA9IHhzcmZWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycywgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3REYXRhID09PSAndW5kZWZpbmVkJyAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZScpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgICAgICAgZGVsZXRlIHJlcXVlc3RIZWFkZXJzW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gT3RoZXJ3aXNlIGFkZCBoZWFkZXIgdG8gdGhlIHJlcXVlc3RcbiAgICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBBZGQgcmVzcG9uc2VUeXBlIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKGNvbmZpZy5yZXNwb25zZVR5cGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gY29uZmlnLnJlc3BvbnNlVHlwZTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gRXhwZWN0ZWQgRE9NRXhjZXB0aW9uIHRocm93biBieSBicm93c2VycyBub3QgY29tcGF0aWJsZSBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLlxuICAgICAgICAvLyBCdXQsIHRoaXMgY2FuIGJlIHN1cHByZXNzZWQgZm9yICdqc29uJyB0eXBlIGFzIGl0IGNhbiBiZSBwYXJzZWQgYnkgZGVmYXVsdCAndHJhbnNmb3JtUmVzcG9uc2UnIGZ1bmN0aW9uLlxuICAgICAgICBpZiAoY29uZmlnLnJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25Eb3dubG9hZFByb2dyZXNzKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MgPT09ICdmdW5jdGlvbicgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgY29uZmlnLm9uVXBsb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgIC8vIEhhbmRsZSBjYW5jZWxsYXRpb25cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5wcm9taXNlLnRoZW4oZnVuY3Rpb24gb25DYW5jZWxlZChjYW5jZWwpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZWplY3QoY2FuY2VsKTtcbiAgICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0RGF0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0RGF0YSA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGVuaGFuY2VFcnJvciA9IHJlcXVpcmUoJy4vZW5oYW5jZUVycm9yJyk7XG5cbi8qKlxuICogQ3JlYXRlIGFuIEVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLCBjb25maWcsIGVycm9yIGNvZGUsIHJlcXVlc3QgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtzdHJpbmd9IFtjb2RlXSBUaGUgZXJyb3IgY29kZSAoZm9yIGV4YW1wbGUsICdFQ09OTkFCT1JURUQnKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBjcmVhdGVkIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG1lc3NhZ2UsIGNvbmZpZywgY29kZSwgcmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZW5oYW5jZUVycm9yKGVycm9yLCBjb25maWcsIGNvZGUsIHJlcXVlc3QsIHJlc3BvbnNlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBBIGBDYW5jZWxgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7c3RyaW5nPX0gbWVzc2FnZSBUaGUgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsKG1lc3NhZ2UpIHtcbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbn1cblxuQ2FuY2VsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gJ0NhbmNlbCcgKyAodGhpcy5tZXNzYWdlID8gJzogJyArIHRoaXMubWVzc2FnZSA6ICcnKTtcbn07XG5cbkNhbmNlbC5wcm90b3R5cGUuX19DQU5DRUxfXyA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwiLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBnbG9iYWxgIGZyb20gTm9kZS5qcy4gKi9cbnZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAnb2JqZWN0JyAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmcmVlR2xvYmFsO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFzeW5jVGFnID0gJ1tvYmplY3QgQXN5bmNGdW5jdGlvbl0nLFxuICAgIGZ1bmNUYWcgPSAnW29iamVjdCBGdW5jdGlvbl0nLFxuICAgIGdlblRhZyA9ICdbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXScsXG4gICAgcHJveHlUYWcgPSAnW29iamVjdCBQcm94eV0nO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDkgd2hpY2ggcmV0dXJucyAnb2JqZWN0JyBmb3IgdHlwZWQgYXJyYXlzIGFuZCBvdGhlciBjb25zdHJ1Y3RvcnMuXG4gIHZhciB0YWcgPSBiYXNlR2V0VGFnKHZhbHVlKTtcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWcgfHwgdGFnID09IGFzeW5jVGFnIHx8IHRhZyA9PSBwcm94eVRhZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0Z1bmN0aW9uO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlmIHN1aXRhYmxlIGZvciBzdHJpY3RcbiAqICBlcXVhbGl0eSBjb21wYXJpc29ucywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSAmJiAhaXNPYmplY3QodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzU3RyaWN0Q29tcGFyYWJsZTtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBtYXRjaGVzUHJvcGVydHlgIGZvciBzb3VyY2UgdmFsdWVzIHN1aXRhYmxlXG4gKiBmb3Igc3RyaWN0IGVxdWFsaXR5IGNvbXBhcmlzb25zLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUoa2V5LCBzcmNWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Rba2V5XSA9PT0gc3JjVmFsdWUgJiZcbiAgICAgIChzcmNWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8IChrZXkgaW4gT2JqZWN0KG9iamVjdCkpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZTtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmdldGAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWZhdWx0IHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXNvbHZlZCB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHBhdGgpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gMCxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoO1xuXG4gIHdoaWxlIChvYmplY3QgIT0gbnVsbCAmJiBpbmRleCA8IGxlbmd0aCkge1xuICAgIG9iamVjdCA9IG9iamVjdFt0b0tleShwYXRoW2luZGV4KytdKV07XG4gIH1cbiAgcmV0dXJuIChpbmRleCAmJiBpbmRleCA9PSBsZW5ndGgpID8gb2JqZWN0IDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXQ7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzS2V5ID0gcmVxdWlyZSgnLi9faXNLZXknKSxcbiAgICBzdHJpbmdUb1BhdGggPSByZXF1aXJlKCcuL19zdHJpbmdUb1BhdGgnKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDYXN0cyBgdmFsdWVgIHRvIGEgcGF0aCBhcnJheSBpZiBpdCdzIG5vdCBvbmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBjYXN0IHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGNhc3RQYXRoKHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHJldHVybiBpc0tleSh2YWx1ZSwgb2JqZWN0KSA/IFt2YWx1ZV0gOiBzdHJpbmdUb1BhdGgodG9TdHJpbmcodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0UGF0aDtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIGJhc2VGaW5kSW5kZXggPSByZXF1aXJlKCcuL19iYXNlRmluZEluZGV4JyksXG4gICAgYmFzZUlzTmFOID0gcmVxdWlyZSgnLi9fYmFzZUlzTmFOJyksXG4gICAgc3RyaWN0SW5kZXhPZiA9IHJlcXVpcmUoJy4vX3N0cmljdEluZGV4T2YnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pbmRleE9mYCB3aXRob3V0IGBmcm9tSW5kZXhgIGJvdW5kcyBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZVxuICAgID8gc3RyaWN0SW5kZXhPZihhcnJheSwgdmFsdWUsIGZyb21JbmRleClcbiAgICA6IGJhc2VGaW5kSW5kZXgoYXJyYXksIGJhc2VJc05hTiwgZnJvbUluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSW5kZXhPZjtcbiIsInZhciB0b0Zpbml0ZSA9IHJlcXVpcmUoJy4vdG9GaW5pdGUnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGFuIGludGVnZXIuXG4gKlxuICogKipOb3RlOioqIFRoaXMgbWV0aG9kIGlzIGxvb3NlbHkgYmFzZWQgb25cbiAqIFtgVG9JbnRlZ2VyYF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvaW50ZWdlcikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgaW50ZWdlci5cbiAqIEBleGFtcGxlXG4gKlxuICogXy50b0ludGVnZXIoMy4yKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLnRvSW50ZWdlcihOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IDBcbiAqXG4gKiBfLnRvSW50ZWdlcihJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9JbnRlZ2VyKCczLjInKTtcbiAqIC8vID0+IDNcbiAqL1xuZnVuY3Rpb24gdG9JbnRlZ2VyKHZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSB0b0Zpbml0ZSh2YWx1ZSksXG4gICAgICByZW1haW5kZXIgPSByZXN1bHQgJSAxO1xuXG4gIHJldHVybiByZXN1bHQgPT09IHJlc3VsdCA/IChyZW1haW5kZXIgPyByZXN1bHQgLSByZW1haW5kZXIgOiByZXN1bHQpIDogMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0ludGVnZXI7XG4iLCJ2YXIgdG9OdW1iZXIgPSByZXF1aXJlKCcuL3RvTnVtYmVyJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDAsXG4gICAgTUFYX0lOVEVHRVIgPSAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgZmluaXRlIG51bWJlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTIuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvRmluaXRlKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvRmluaXRlKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b0Zpbml0ZShJbmZpbml0eSk7XG4gKiAvLyA9PiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFxuICpcbiAqIF8udG9GaW5pdGUoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvRmluaXRlKHZhbHVlKSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6IDA7XG4gIH1cbiAgdmFsdWUgPSB0b051bWJlcih2YWx1ZSk7XG4gIGlmICh2YWx1ZSA9PT0gSU5GSU5JVFkgfHwgdmFsdWUgPT09IC1JTkZJTklUWSkge1xuICAgIHZhciBzaWduID0gKHZhbHVlIDwgMCA/IC0xIDogMSk7XG4gICAgcmV0dXJuIHNpZ24gKiBNQVhfSU5URUdFUjtcbiAgfVxuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gdmFsdWUgOiAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvRmluaXRlO1xuIiwidmFyIGJhc2VTZXREYXRhID0gcmVxdWlyZSgnLi9fYmFzZVNldERhdGEnKSxcbiAgICBjcmVhdGVCaW5kID0gcmVxdWlyZSgnLi9fY3JlYXRlQmluZCcpLFxuICAgIGNyZWF0ZUN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlQ3VycnknKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVQYXJ0aWFsID0gcmVxdWlyZSgnLi9fY3JlYXRlUGFydGlhbCcpLFxuICAgIGdldERhdGEgPSByZXF1aXJlKCcuL19nZXREYXRhJyksXG4gICAgbWVyZ2VEYXRhID0gcmVxdWlyZSgnLi9fbWVyZ2VEYXRhJyksXG4gICAgc2V0RGF0YSA9IHJlcXVpcmUoJy4vX3NldERhdGEnKSxcbiAgICBzZXRXcmFwVG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRXcmFwVG9TdHJpbmcnKSxcbiAgICB0b0ludGVnZXIgPSByZXF1aXJlKCcuL3RvSW50ZWdlcicpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0ZMQUcgPSA4LFxuICAgIFdSQVBfQ1VSUllfUklHSFRfRkxBRyA9IDE2LFxuICAgIFdSQVBfUEFSVElBTF9GTEFHID0gMzIsXG4gICAgV1JBUF9QQVJUSUFMX1JJR0hUX0ZMQUcgPSA2NDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGVpdGhlciBjdXJyaWVzIG9yIGludm9rZXMgYGZ1bmNgIHdpdGggb3B0aW9uYWxcbiAqIGB0aGlzYCBiaW5kaW5nIGFuZCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb258c3RyaW5nfSBmdW5jIFRoZSBmdW5jdGlvbiBvciBtZXRob2QgbmFtZSB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuXG4gKiAgICAxIC0gYF8uYmluZGBcbiAqICAgIDIgLSBgXy5iaW5kS2V5YFxuICogICAgNCAtIGBfLmN1cnJ5YCBvciBgXy5jdXJyeVJpZ2h0YCBvZiBhIGJvdW5kIGZ1bmN0aW9uXG4gKiAgICA4IC0gYF8uY3VycnlgXG4gKiAgIDE2IC0gYF8uY3VycnlSaWdodGBcbiAqICAgMzIgLSBgXy5wYXJ0aWFsYFxuICogICA2NCAtIGBfLnBhcnRpYWxSaWdodGBcbiAqICAxMjggLSBgXy5yZWFyZ2BcbiAqICAyNTYgLSBgXy5hcnlgXG4gKiAgNTEyIC0gYF8uZmxpcGBcbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNdIFRoZSBhcmd1bWVudHMgdG8gYmUgcGFydGlhbGx5IGFwcGxpZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBbaG9sZGVyc10gVGhlIGBwYXJ0aWFsc2AgcGxhY2Vob2xkZXIgaW5kZXhlcy5cbiAqIEBwYXJhbSB7QXJyYXl9IFthcmdQb3NdIFRoZSBhcmd1bWVudCBwb3NpdGlvbnMgb2YgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJ5XSBUaGUgYXJpdHkgY2FwIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJpdHldIFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVXcmFwKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzLCBob2xkZXJzLCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQmluZEtleSA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfS0VZX0ZMQUc7XG4gIGlmICghaXNCaW5kS2V5ICYmIHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIGxlbmd0aCA9IHBhcnRpYWxzID8gcGFydGlhbHMubGVuZ3RoIDogMDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9QQVJUSUFMX0ZMQUcgfCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyk7XG4gICAgcGFydGlhbHMgPSBob2xkZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIGFyeSA9IGFyeSA9PT0gdW5kZWZpbmVkID8gYXJ5IDogbmF0aXZlTWF4KHRvSW50ZWdlcihhcnkpLCAwKTtcbiAgYXJpdHkgPSBhcml0eSA9PT0gdW5kZWZpbmVkID8gYXJpdHkgOiB0b0ludGVnZXIoYXJpdHkpO1xuICBsZW5ndGggLT0gaG9sZGVycyA/IGhvbGRlcnMubGVuZ3RoIDogMDtcblxuICBpZiAoYml0bWFzayAmIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKSB7XG4gICAgdmFyIHBhcnRpYWxzUmlnaHQgPSBwYXJ0aWFscyxcbiAgICAgICAgaG9sZGVyc1JpZ2h0ID0gaG9sZGVycztcblxuICAgIHBhcnRpYWxzID0gaG9sZGVycyA9IHVuZGVmaW5lZDtcbiAgfVxuICB2YXIgZGF0YSA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGdldERhdGEoZnVuYyk7XG5cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgcGFydGlhbHMsIGhvbGRlcnMsIHBhcnRpYWxzUmlnaHQsIGhvbGRlcnNSaWdodCxcbiAgICBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICBpZiAoZGF0YSkge1xuICAgIG1lcmdlRGF0YShuZXdEYXRhLCBkYXRhKTtcbiAgfVxuICBmdW5jID0gbmV3RGF0YVswXTtcbiAgYml0bWFzayA9IG5ld0RhdGFbMV07XG4gIHRoaXNBcmcgPSBuZXdEYXRhWzJdO1xuICBwYXJ0aWFscyA9IG5ld0RhdGFbM107XG4gIGhvbGRlcnMgPSBuZXdEYXRhWzRdO1xuICBhcml0eSA9IG5ld0RhdGFbOV0gPSBuZXdEYXRhWzldID09PSB1bmRlZmluZWRcbiAgICA/IChpc0JpbmRLZXkgPyAwIDogZnVuYy5sZW5ndGgpXG4gICAgOiBuYXRpdmVNYXgobmV3RGF0YVs5XSAtIGxlbmd0aCwgMCk7XG5cbiAgaWYgKCFhcml0eSAmJiBiaXRtYXNrICYgKFdSQVBfQ1VSUllfRkxBRyB8IFdSQVBfQ1VSUllfUklHSFRfRkxBRykpIHtcbiAgICBiaXRtYXNrICY9IH4oV1JBUF9DVVJSWV9GTEFHIHwgV1JBUF9DVVJSWV9SSUdIVF9GTEFHKTtcbiAgfVxuICBpZiAoIWJpdG1hc2sgfHwgYml0bWFzayA9PSBXUkFQX0JJTkRfRkxBRykge1xuICAgIHZhciByZXN1bHQgPSBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpO1xuICB9IGVsc2UgaWYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHIHx8IGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9SSUdIVF9GTEFHKSB7XG4gICAgcmVzdWx0ID0gY3JlYXRlQ3VycnkoZnVuYywgYml0bWFzaywgYXJpdHkpO1xuICB9IGVsc2UgaWYgKChiaXRtYXNrID09IFdSQVBfUEFSVElBTF9GTEFHIHx8IGJpdG1hc2sgPT0gKFdSQVBfQklORF9GTEFHIHwgV1JBUF9QQVJUSUFMX0ZMQUcpKSAmJiAhaG9sZGVycy5sZW5ndGgpIHtcbiAgICByZXN1bHQgPSBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBjcmVhdGVIeWJyaWQuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgfVxuICB2YXIgc2V0dGVyID0gZGF0YSA/IGJhc2VTZXREYXRhIDogc2V0RGF0YTtcbiAgcmV0dXJuIHNldFdyYXBUb1N0cmluZyhzZXR0ZXIocmVzdWx0LCBuZXdEYXRhKSwgZnVuYywgYml0bWFzayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlV3JhcDtcbiIsInZhciBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBtZXRhTWFwID0gcmVxdWlyZSgnLi9fbWV0YU1hcCcpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXREYXRhYCB3aXRob3V0IHN1cHBvcnQgZm9yIGhvdCBsb29wIHNob3J0aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgYmFzZVNldERhdGEgPSAhbWV0YU1hcCA/IGlkZW50aXR5IDogZnVuY3Rpb24oZnVuYywgZGF0YSkge1xuICBtZXRhTWFwLnNldChmdW5jLCBkYXRhKTtcbiAgcmV0dXJuIGZ1bmM7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VTZXREYXRhO1xuIiwidmFyIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyk7XG5cbi8qKiBVc2VkIHRvIHN0b3JlIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIG1ldGFNYXAgPSBXZWFrTWFwICYmIG5ldyBXZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1ldGFNYXA7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgY291bnRIb2xkZXJzID0gcmVxdWlyZSgnLi9fY291bnRIb2xkZXJzJyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlb3JkZXIgPSByZXF1aXJlKCcuL19yZW9yZGVyJyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9DVVJSWV9SSUdIVF9GTEFHID0gMTYsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX0ZMSVBfRkxBRyA9IDUxMjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3cmFwcyBgZnVuY2AgdG8gaW52b2tlIGl0IHdpdGggb3B0aW9uYWwgYHRoaXNgXG4gKiBiaW5kaW5nIG9mIGB0aGlzQXJnYCwgcGFydGlhbCBhcHBsaWNhdGlvbiwgYW5kIGN1cnJ5aW5nLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufHN0cmluZ30gZnVuYyBUaGUgZnVuY3Rpb24gb3IgbWV0aG9kIG5hbWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IFt0aGlzQXJnXSBUaGUgYHRoaXNgIGJpbmRpbmcgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtBcnJheX0gW3BhcnRpYWxzXSBUaGUgYXJndW1lbnRzIHRvIHByZXBlbmQgdG8gdGhvc2UgcHJvdmlkZWQgdG9cbiAqICB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNdIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW0ge0FycmF5fSBbcGFydGlhbHNSaWdodF0gVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWRcbiAqICB0byB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gW2hvbGRlcnNSaWdodF0gVGhlIGBwYXJ0aWFsc1JpZ2h0YCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUh5YnJpZChmdW5jLCBiaXRtYXNrLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHkpIHtcbiAgdmFyIGlzQXJ5ID0gYml0bWFzayAmIFdSQVBfQVJZX0ZMQUcsXG4gICAgICBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBpc0JpbmRLZXkgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0tFWV9GTEFHLFxuICAgICAgaXNDdXJyaWVkID0gYml0bWFzayAmIChXUkFQX0NVUlJZX0ZMQUcgfCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcpLFxuICAgICAgaXNGbGlwID0gYml0bWFzayAmIFdSQVBfRkxJUF9GTEFHLFxuICAgICAgQ3RvciA9IGlzQmluZEtleSA/IHVuZGVmaW5lZCA6IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoO1xuXG4gICAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICAgIGFyZ3NbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4XTtcbiAgICB9XG4gICAgaWYgKGlzQ3VycmllZCkge1xuICAgICAgdmFyIHBsYWNlaG9sZGVyID0gZ2V0SG9sZGVyKHdyYXBwZXIpLFxuICAgICAgICAgIGhvbGRlcnNDb3VudCA9IGNvdW50SG9sZGVycyhhcmdzLCBwbGFjZWhvbGRlcik7XG4gICAgfVxuICAgIGlmIChwYXJ0aWFscykge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzKGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBpZiAocGFydGlhbHNSaWdodCkge1xuICAgICAgYXJncyA9IGNvbXBvc2VBcmdzUmlnaHQoYXJncywgcGFydGlhbHNSaWdodCwgaG9sZGVyc1JpZ2h0LCBpc0N1cnJpZWQpO1xuICAgIH1cbiAgICBsZW5ndGggLT0gaG9sZGVyc0NvdW50O1xuICAgIGlmIChpc0N1cnJpZWQgJiYgbGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHZhciBuZXdIb2xkZXJzID0gcmVwbGFjZUhvbGRlcnMoYXJncywgcGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlY3VycnkoXG4gICAgICAgIGZ1bmMsIGJpdG1hc2ssIGNyZWF0ZUh5YnJpZCwgd3JhcHBlci5wbGFjZWhvbGRlciwgdGhpc0FyZyxcbiAgICAgICAgYXJncywgbmV3SG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5IC0gbGVuZ3RoXG4gICAgICApO1xuICAgIH1cbiAgICB2YXIgdGhpc0JpbmRpbmcgPSBpc0JpbmQgPyB0aGlzQXJnIDogdGhpcyxcbiAgICAgICAgZm4gPSBpc0JpbmRLZXkgPyB0aGlzQmluZGluZ1tmdW5jXSA6IGZ1bmM7XG5cbiAgICBsZW5ndGggPSBhcmdzLmxlbmd0aDtcbiAgICBpZiAoYXJnUG9zKSB7XG4gICAgICBhcmdzID0gcmVvcmRlcihhcmdzLCBhcmdQb3MpO1xuICAgIH0gZWxzZSBpZiAoaXNGbGlwICYmIGxlbmd0aCA+IDEpIHtcbiAgICAgIGFyZ3MucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBpZiAoaXNBcnkgJiYgYXJ5IDwgbGVuZ3RoKSB7XG4gICAgICBhcmdzLmxlbmd0aCA9IGFyeTtcbiAgICB9XG4gICAgaWYgKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikge1xuICAgICAgZm4gPSBDdG9yIHx8IGNyZWF0ZUN0b3IoZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0JpbmRpbmcsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUh5YnJpZDtcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IHRoYXQgaXMgdGhlIGNvbXBvc2l0aW9uIG9mIHBhcnRpYWxseSBhcHBsaWVkIGFyZ3VtZW50cyxcbiAqIHBsYWNlaG9sZGVycywgYW5kIHByb3ZpZGVkIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGFycmF5IG9mIGFyZ3VtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkLlxuICogQHBhcmFtIHtBcnJheX0gaG9sZGVycyBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtcyB7Ym9vbGVhbn0gW2lzQ3VycmllZF0gU3BlY2lmeSBjb21wb3NpbmcgZm9yIGEgY3VycmllZCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IGFycmF5IG9mIGNvbXBvc2VkIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gY29tcG9zZUFyZ3MoYXJncywgcGFydGlhbHMsIGhvbGRlcnMsIGlzQ3VycmllZCkge1xuICB2YXIgYXJnc0luZGV4ID0gLTEsXG4gICAgICBhcmdzTGVuZ3RoID0gYXJncy5sZW5ndGgsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICBsZWZ0SW5kZXggPSAtMSxcbiAgICAgIGxlZnRMZW5ndGggPSBwYXJ0aWFscy5sZW5ndGgsXG4gICAgICByYW5nZUxlbmd0aCA9IG5hdGl2ZU1heChhcmdzTGVuZ3RoIC0gaG9sZGVyc0xlbmd0aCwgMCksXG4gICAgICByZXN1bHQgPSBBcnJheShsZWZ0TGVuZ3RoICsgcmFuZ2VMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2xlZnRJbmRleCA8IGxlZnRMZW5ndGgpIHtcbiAgICByZXN1bHRbbGVmdEluZGV4XSA9IHBhcnRpYWxzW2xlZnRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsrYXJnc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbaG9sZGVyc1thcmdzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4XTtcbiAgICB9XG4gIH1cbiAgd2hpbGUgKHJhbmdlTGVuZ3RoLS0pIHtcbiAgICByZXN1bHRbbGVmdEluZGV4KytdID0gYXJnc1thcmdzSW5kZXgrK107XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb21wb3NlQXJncztcbiIsIi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2UgYGNvbXBvc2VBcmdzYCBleGNlcHQgdGhhdCB0aGUgYXJndW1lbnRzIGNvbXBvc2l0aW9uXG4gKiBpcyB0YWlsb3JlZCBmb3IgYF8ucGFydGlhbFJpZ2h0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJncyBUaGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICogQHBhcmFtIHtBcnJheX0gcGFydGlhbHMgVGhlIGFyZ3VtZW50cyB0byBhcHBlbmQgdG8gdGhvc2UgcHJvdmlkZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBob2xkZXJzIFRoZSBgcGFydGlhbHNgIHBsYWNlaG9sZGVyIGluZGV4ZXMuXG4gKiBAcGFyYW1zIHtib29sZWFufSBbaXNDdXJyaWVkXSBTcGVjaWZ5IGNvbXBvc2luZyBmb3IgYSBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgYXJyYXkgb2YgY29tcG9zZWQgYXJndW1lbnRzLlxuICovXG5mdW5jdGlvbiBjb21wb3NlQXJnc1JpZ2h0KGFyZ3MsIHBhcnRpYWxzLCBob2xkZXJzLCBpc0N1cnJpZWQpIHtcbiAgdmFyIGFyZ3NJbmRleCA9IC0xLFxuICAgICAgYXJnc0xlbmd0aCA9IGFyZ3MubGVuZ3RoLFxuICAgICAgaG9sZGVyc0luZGV4ID0gLTEsXG4gICAgICBob2xkZXJzTGVuZ3RoID0gaG9sZGVycy5sZW5ndGgsXG4gICAgICByaWdodEluZGV4ID0gLTEsXG4gICAgICByaWdodExlbmd0aCA9IHBhcnRpYWxzLmxlbmd0aCxcbiAgICAgIHJhbmdlTGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3NMZW5ndGggLSBob2xkZXJzTGVuZ3RoLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHJhbmdlTGVuZ3RoICsgcmlnaHRMZW5ndGgpLFxuICAgICAgaXNVbmN1cnJpZWQgPSAhaXNDdXJyaWVkO1xuXG4gIHdoaWxlICgrK2FyZ3NJbmRleCA8IHJhbmdlTGVuZ3RoKSB7XG4gICAgcmVzdWx0W2FyZ3NJbmRleF0gPSBhcmdzW2FyZ3NJbmRleF07XG4gIH1cbiAgdmFyIG9mZnNldCA9IGFyZ3NJbmRleDtcbiAgd2hpbGUgKCsrcmlnaHRJbmRleCA8IHJpZ2h0TGVuZ3RoKSB7XG4gICAgcmVzdWx0W29mZnNldCArIHJpZ2h0SW5kZXhdID0gcGFydGlhbHNbcmlnaHRJbmRleF07XG4gIH1cbiAgd2hpbGUgKCsraG9sZGVyc0luZGV4IDwgaG9sZGVyc0xlbmd0aCkge1xuICAgIGlmIChpc1VuY3VycmllZCB8fCBhcmdzSW5kZXggPCBhcmdzTGVuZ3RoKSB7XG4gICAgICByZXN1bHRbb2Zmc2V0ICsgaG9sZGVyc1tob2xkZXJzSW5kZXhdXSA9IGFyZ3NbYXJnc0luZGV4KytdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBvc2VBcmdzUmlnaHQ7XG4iLCJ2YXIgaXNMYXppYWJsZSA9IHJlcXVpcmUoJy4vX2lzTGF6aWFibGUnKSxcbiAgICBzZXREYXRhID0gcmVxdWlyZSgnLi9fc2V0RGF0YScpLFxuICAgIHNldFdyYXBUb1N0cmluZyA9IHJlcXVpcmUoJy4vX3NldFdyYXBUb1N0cmluZycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDEsXG4gICAgV1JBUF9CSU5EX0tFWV9GTEFHID0gMixcbiAgICBXUkFQX0NVUlJZX0JPVU5EX0ZMQUcgPSA0LFxuICAgIFdSQVBfQ1VSUllfRkxBRyA9IDgsXG4gICAgV1JBUF9QQVJUSUFMX0ZMQUcgPSAzMixcbiAgICBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA9IDY0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBjb250aW51ZSBjdXJyeWluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwRnVuYyBUaGUgZnVuY3Rpb24gdG8gY3JlYXRlIHRoZSBgZnVuY2Agd3JhcHBlci5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHZhbHVlLlxuICogQHBhcmFtIHsqfSBbdGhpc0FyZ10gVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0aWFsc10gVGhlIGFyZ3VtZW50cyB0byBwcmVwZW5kIHRvIHRob3NlIHByb3ZpZGVkIHRvXG4gKiAgdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7QXJyYXl9IFtob2xkZXJzXSBUaGUgYHBhcnRpYWxzYCBwbGFjZWhvbGRlciBpbmRleGVzLlxuICogQHBhcmFtIHtBcnJheX0gW2FyZ1Bvc10gVGhlIGFyZ3VtZW50IHBvc2l0aW9ucyBvZiB0aGUgbmV3IGZ1bmN0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcnldIFRoZSBhcml0eSBjYXAgb2YgYGZ1bmNgLlxuICogQHBhcmFtIHtudW1iZXJ9IFthcml0eV0gVGhlIGFyaXR5IG9mIGBmdW5jYC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHdyYXBwZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJlY3VycnkoZnVuYywgYml0bWFzaywgd3JhcEZ1bmMsIHBsYWNlaG9sZGVyLCB0aGlzQXJnLCBwYXJ0aWFscywgaG9sZGVycywgYXJnUG9zLCBhcnksIGFyaXR5KSB7XG4gIHZhciBpc0N1cnJ5ID0gYml0bWFzayAmIFdSQVBfQ1VSUllfRkxBRyxcbiAgICAgIG5ld0hvbGRlcnMgPSBpc0N1cnJ5ID8gaG9sZGVycyA6IHVuZGVmaW5lZCxcbiAgICAgIG5ld0hvbGRlcnNSaWdodCA9IGlzQ3VycnkgPyB1bmRlZmluZWQgOiBob2xkZXJzLFxuICAgICAgbmV3UGFydGlhbHMgPSBpc0N1cnJ5ID8gcGFydGlhbHMgOiB1bmRlZmluZWQsXG4gICAgICBuZXdQYXJ0aWFsc1JpZ2h0ID0gaXNDdXJyeSA/IHVuZGVmaW5lZCA6IHBhcnRpYWxzO1xuXG4gIGJpdG1hc2sgfD0gKGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfRkxBRyA6IFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHKTtcbiAgYml0bWFzayAmPSB+KGlzQ3VycnkgPyBXUkFQX1BBUlRJQUxfUklHSFRfRkxBRyA6IFdSQVBfUEFSVElBTF9GTEFHKTtcblxuICBpZiAoIShiaXRtYXNrICYgV1JBUF9DVVJSWV9CT1VORF9GTEFHKSkge1xuICAgIGJpdG1hc2sgJj0gfihXUkFQX0JJTkRfRkxBRyB8IFdSQVBfQklORF9LRVlfRkxBRyk7XG4gIH1cbiAgdmFyIG5ld0RhdGEgPSBbXG4gICAgZnVuYywgYml0bWFzaywgdGhpc0FyZywgbmV3UGFydGlhbHMsIG5ld0hvbGRlcnMsIG5ld1BhcnRpYWxzUmlnaHQsXG4gICAgbmV3SG9sZGVyc1JpZ2h0LCBhcmdQb3MsIGFyeSwgYXJpdHlcbiAgXTtcblxuICB2YXIgcmVzdWx0ID0gd3JhcEZ1bmMuYXBwbHkodW5kZWZpbmVkLCBuZXdEYXRhKTtcbiAgaWYgKGlzTGF6aWFibGUoZnVuYykpIHtcbiAgICBzZXREYXRhKHJlc3VsdCwgbmV3RGF0YSk7XG4gIH1cbiAgcmVzdWx0LnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXI7XG4gIHJldHVybiBzZXRXcmFwVG9TdHJpbmcocmVzdWx0LCBmdW5jLCBiaXRtYXNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWN1cnJ5O1xuIiwidmFyIG1ldGFNYXAgPSByZXF1aXJlKCcuL19tZXRhTWFwJyksXG4gICAgbm9vcCA9IHJlcXVpcmUoJy4vbm9vcCcpO1xuXG4vKipcbiAqIEdldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqL1xudmFyIGdldERhdGEgPSAhbWV0YU1hcCA/IG5vb3AgOiBmdW5jdGlvbihmdW5jKSB7XG4gIHJldHVybiBtZXRhTWFwLmdldChmdW5jKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RGF0YTtcbiIsInZhciBiYXNlQ3JlYXRlID0gcmVxdWlyZSgnLi9fYmFzZUNyZWF0ZScpLFxuICAgIGJhc2VMb2Rhc2ggPSByZXF1aXJlKCcuL19iYXNlTG9kYXNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGBsb2Rhc2hgIHdyYXBwZXIgb2JqZWN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gd3JhcC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NoYWluQWxsXSBFbmFibGUgZXhwbGljaXQgbWV0aG9kIGNoYWluIHNlcXVlbmNlcy5cbiAqL1xuZnVuY3Rpb24gTG9kYXNoV3JhcHBlcih2YWx1ZSwgY2hhaW5BbGwpIHtcbiAgdGhpcy5fX3dyYXBwZWRfXyA9IHZhbHVlO1xuICB0aGlzLl9fYWN0aW9uc19fID0gW107XG4gIHRoaXMuX19jaGFpbl9fID0gISFjaGFpbkFsbDtcbiAgdGhpcy5fX2luZGV4X18gPSAwO1xuICB0aGlzLl9fdmFsdWVzX18gPSB1bmRlZmluZWQ7XG59XG5cbkxvZGFzaFdyYXBwZXIucHJvdG90eXBlID0gYmFzZUNyZWF0ZShiYXNlTG9kYXNoLnByb3RvdHlwZSk7XG5Mb2Rhc2hXcmFwcGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvZGFzaFdyYXBwZXI7XG5cbm1vZHVsZS5leHBvcnRzID0gTG9kYXNoV3JhcHBlcjtcbiIsIi8qKlxuICogQ29waWVzIHRoZSB2YWx1ZXMgb2YgYHNvdXJjZWAgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gc291cmNlIFRoZSBhcnJheSB0byBjb3B5IHZhbHVlcyBmcm9tLlxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5PVtdXSBUaGUgYXJyYXkgdG8gY29weSB2YWx1ZXMgdG8uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuXG4gIGFycmF5IHx8IChhcnJheSA9IEFycmF5KGxlbmd0aCkpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGFycmF5W2luZGV4XSA9IHNvdXJjZVtpbmRleF07XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcHlBcnJheTtcbiIsInZhciBiYXNlU2V0RGF0YSA9IHJlcXVpcmUoJy4vX2Jhc2VTZXREYXRhJyksXG4gICAgc2hvcnRPdXQgPSByZXF1aXJlKCcuL19zaG9ydE91dCcpO1xuXG4vKipcbiAqIFNldHMgbWV0YWRhdGEgZm9yIGBmdW5jYC5cbiAqXG4gKiAqKk5vdGU6KiogSWYgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIGhvdCwgaS5lLiBpcyBpbnZva2VkIGEgbG90IGluIGEgc2hvcnRcbiAqIHBlcmlvZCBvZiB0aW1lLCBpdCB3aWxsIHRyaXAgaXRzIGJyZWFrZXIgYW5kIHRyYW5zaXRpb24gdG8gYW4gaWRlbnRpdHlcbiAqIGZ1bmN0aW9uIHRvIGF2b2lkIGdhcmJhZ2UgY29sbGVjdGlvbiBwYXVzZXMgaW4gVjguIFNlZVxuICogW1Y4IGlzc3VlIDIwNzBdKGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTIwNzApXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBhc3NvY2lhdGUgbWV0YWRhdGEgd2l0aC5cbiAqIEBwYXJhbSB7Kn0gZGF0YSBUaGUgbWV0YWRhdGEuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYGZ1bmNgLlxuICovXG52YXIgc2V0RGF0YSA9IHNob3J0T3V0KGJhc2VTZXREYXRhKTtcblxubW9kdWxlLmV4cG9ydHMgPSBzZXREYXRhO1xuIiwiLyoqIFVzZWQgdG8gZGV0ZWN0IGhvdCBmdW5jdGlvbnMgYnkgbnVtYmVyIG9mIGNhbGxzIHdpdGhpbiBhIHNwYW4gb2YgbWlsbGlzZWNvbmRzLiAqL1xudmFyIEhPVF9DT1VOVCA9IDgwMCxcbiAgICBIT1RfU1BBTiA9IDE2O1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTm93ID0gRGF0ZS5ub3c7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQnbGwgc2hvcnQgb3V0IGFuZCBpbnZva2UgYGlkZW50aXR5YCBpbnN0ZWFkXG4gKiBvZiBgZnVuY2Agd2hlbiBpdCdzIGNhbGxlZCBgSE9UX0NPVU5UYCBvciBtb3JlIHRpbWVzIGluIGBIT1RfU1BBTmBcbiAqIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcmVzdHJpY3QuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzaG9ydGFibGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIHNob3J0T3V0KGZ1bmMpIHtcbiAgdmFyIGNvdW50ID0gMCxcbiAgICAgIGxhc3RDYWxsZWQgPSAwO1xuXG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RhbXAgPSBuYXRpdmVOb3coKSxcbiAgICAgICAgcmVtYWluaW5nID0gSE9UX1NQQU4gLSAoc3RhbXAgLSBsYXN0Q2FsbGVkKTtcblxuICAgIGxhc3RDYWxsZWQgPSBzdGFtcDtcbiAgICBpZiAocmVtYWluaW5nID4gMCkge1xuICAgICAgaWYgKCsrY291bnQgPj0gSE9UX0NPVU5UKSB7XG4gICAgICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmMuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3J0T3V0O1xuIiwidmFyIGdldFdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fZ2V0V3JhcERldGFpbHMnKSxcbiAgICBpbnNlcnRXcmFwRGV0YWlscyA9IHJlcXVpcmUoJy4vX2luc2VydFdyYXBEZXRhaWxzJyksXG4gICAgc2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19zZXRUb1N0cmluZycpLFxuICAgIHVwZGF0ZVdyYXBEZXRhaWxzID0gcmVxdWlyZSgnLi9fdXBkYXRlV3JhcERldGFpbHMnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBvZiBgd3JhcHBlcmAgdG8gbWltaWMgdGhlIHNvdXJjZSBvZiBgcmVmZXJlbmNlYFxuICogd2l0aCB3cmFwcGVyIGRldGFpbHMgaW4gYSBjb21tZW50IGF0IHRoZSB0b3Agb2YgdGhlIHNvdXJjZSBib2R5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSB3cmFwcGVyIFRoZSBmdW5jdGlvbiB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWZlcmVuY2UgVGhlIHJlZmVyZW5jZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgYHdyYXBwZXJgLlxuICovXG5mdW5jdGlvbiBzZXRXcmFwVG9TdHJpbmcod3JhcHBlciwgcmVmZXJlbmNlLCBiaXRtYXNrKSB7XG4gIHZhciBzb3VyY2UgPSAocmVmZXJlbmNlICsgJycpO1xuICByZXR1cm4gc2V0VG9TdHJpbmcod3JhcHBlciwgaW5zZXJ0V3JhcERldGFpbHMoc291cmNlLCB1cGRhdGVXcmFwRGV0YWlscyhnZXRXcmFwRGV0YWlscyhzb3VyY2UpLCBiaXRtYXNrKSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFdyYXBUb1N0cmluZztcbiIsInZhciBiYXNlU2V0VG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlU2V0VG9TdHJpbmcnKSxcbiAgICBzaG9ydE91dCA9IHJlcXVpcmUoJy4vX3Nob3J0T3V0Jyk7XG5cbi8qKlxuICogU2V0cyB0aGUgYHRvU3RyaW5nYCBtZXRob2Qgb2YgYGZ1bmNgIHRvIHJldHVybiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBzZXRUb1N0cmluZyA9IHNob3J0T3V0KGJhc2VTZXRUb1N0cmluZyk7XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0VG9TdHJpbmc7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNaV0ogPSAnXFxcXHUyMDBkJztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHN0cmluZ3Mgd2l0aCBbemVyby13aWR0aCBqb2luZXJzIG9yIGNvZGUgcG9pbnRzIGZyb20gdGhlIGFzdHJhbCBwbGFuZXNdKGh0dHA6Ly9lZXYuZWUvYmxvZy8yMDE1LzA5LzEyL2RhcmstY29ybmVycy1vZi11bmljb2RlLykuICovXG52YXIgcmVIYXNVbmljb2RlID0gUmVnRXhwKCdbJyArIHJzWldKICsgcnNBc3RyYWxSYW5nZSAgKyByc0NvbWJvUmFuZ2UgKyByc1ZhclJhbmdlICsgJ10nKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHN0cmluZ2AgY29udGFpbnMgVW5pY29kZSBzeW1ib2xzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhIHN5bWJvbCBpcyBmb3VuZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNVbmljb2RlKHN0cmluZykge1xuICByZXR1cm4gcmVIYXNVbmljb2RlLnRlc3Qoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNVbmljb2RlO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0KGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2UuZGVmYXVsdDplfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBfZGVmYXVsdDI0PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL19fXCIpKSxfZGVmYXVsdDIzPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2NvbnRhaW5zXCIpKSxfZGVmYXVsdDIyPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL3BhcnRpYWxcIikpLF9kZWZhdWx0MjE9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvcGlwZVwiKSksX2RlZmF1bHQyMD1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9rZXlzXCIpKSxfZGVmYXVsdDE5PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2ZvckVhY2hcIikpLF9kZWZhdWx0MTg9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvZGlzc29jXCIpKSxfZGVmYXVsdDE3PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL21lcmdlXCIpKSxfZGVmYXVsdDE2PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL3Byb3BcIikpLF9kZWZhdWx0MTU9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvYWx3YXlzXCIpKSxfZGVmYXVsdDE0PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2lmRWxzZVwiKSksX2RlZmF1bHQxMz1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9wcm9wU2F0aXNmaWVzXCIpKSxfZGVmYXVsdDEyPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL3Byb3BJc1wiKSksX2RlZmF1bHQxMT1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9oYXNcIikpLF9kZWZhdWx0MTA9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvY29tcGxlbWVudFwiKSksX2RlZmF1bHQ5PV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2lzRW1wdHlcIikpLF9kZWZhdWx0OD1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9hbnlQYXNzXCIpKSxfZGVmYXVsdDc9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvZ3RlXCIpKSxfZGVmYXVsdDY9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvY3VycnlcIikpLF9kZWZhdWx0NT1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9UXCIpKSxfZGVmYXVsdDQ9X2ludGVyb3BEZWZhdWx0KHJlcXVpcmUoXCJyYW1kYS9zcmMvaXNcIikpLF9kZWZhdWx0Mz1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9pZGVudGl0eVwiKSksX2RlZmF1bHQyPV9pbnRlcm9wRGVmYXVsdChyZXF1aXJlKFwicmFtZGEvc3JjL2lzTmlsXCIpKSxfZGVmYXVsdD1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcInJhbWRhL3NyYy9jb25kXCIpKSxheGlvcz1faW50ZXJvcERlZmF1bHQocmVxdWlyZShcImF4aW9zXCIpKSxfdHlwZW9mPVwiZnVuY3Rpb25cIj09dHlwZW9mIFN5bWJvbCYmXCJzeW1ib2xcIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlP1wic3ltYm9sXCI6dHlwZW9mIGV9LF9leHRlbmRzPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9O0Z1bmN0aW9uLnByb3RvdHlwZS4kYXN5bmNiaW5kPWZ1bmN0aW9uIGUodCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIGEuYXBwbHkodCxhcmd1bWVudHMpfUZ1bmN0aW9uLnByb3RvdHlwZS4kYXN5bmNiaW5kfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24ucHJvdG90eXBlLFwiJGFzeW5jYmluZFwiLHt2YWx1ZTplLGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSksZS50cmFtcG9saW5lfHwoZS50cmFtcG9saW5lPWZ1bmN0aW9uKGUsdCxyLG4sYSl7cmV0dXJuIGZ1bmN0aW9uIHUoaSl7Zm9yKDtpOyl7aWYoaS50aGVuKXJldHVybiBpPWkudGhlbih1LG4pLGE/dm9pZCAwOmk7dHJ5e2lmKGkucG9wKXtpZihpLmxlbmd0aClyZXR1cm4gaS5wb3AoKT90LmNhbGwoZSk6aTtpPXJ9ZWxzZSBpPWkuY2FsbChlKX1jYXRjaChlKXtyZXR1cm4gbihlKX19fX0pLGUuTGF6eVRoZW5hYmxlfHwoZS5MYXp5VGhlbmFibGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybiBlJiZlIGluc3RhbmNlb2YgT2JqZWN0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLnRoZW59ZnVuY3Rpb24gdChyLG4sYSl7dHJ5e3ZhciB1PWE/YShuKTpuO2lmKHI9PT11KXJldHVybiByLnJlamVjdChuZXcgVHlwZUVycm9yKFwiUHJvbWlzZSByZXNvbHV0aW9uIGxvb3BcIikpO2UodSk/dS50aGVuKGZ1bmN0aW9uKGUpe3QocixlKX0sZnVuY3Rpb24oZSl7ci5yZWplY3QoZSl9KTpyLnJlc29sdmUodSl9Y2F0Y2goZSl7ci5yZWplY3QoZSl9fWZ1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gbihlKXt9ZnVuY3Rpb24gYShlLHQpe3RoaXMucmVzb2x2ZT1lLHRoaXMucmVqZWN0PXR9ZnVuY3Rpb24gdShuLGEpe3ZhciB1PW5ldyByO3RyeXt0aGlzLl9yZXNvbHZlcihmdW5jdGlvbihyKXtyZXR1cm4gZShyKT9yLnRoZW4obixhKTp0KHUscixuKX0sZnVuY3Rpb24oZSl7dCh1LGUsYSl9KX1jYXRjaChlKXt0KHUsZSxhKX1yZXR1cm4gdX1mdW5jdGlvbiBpKGUpe3RoaXMuX3Jlc29sdmVyPWUsdGhpcy50aGVuPXV9cmV0dXJuIHIucHJvdG90eXBlPXtyZXNvbHZlOm4scmVqZWN0Om4sdGhlbjphfSxpLnJlc29sdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGkuaXNUaGVuYWJsZShlKT9lOnt0aGVuOmZ1bmN0aW9uKHQpe3JldHVybiB0KGUpfX19LGkuaXNUaGVuYWJsZT1lLGl9KCksZS5FYWdlclRoZW5hYmxlPWUuVGhlbmFibGU9KGUuRWFnZXJUaGVuYWJsZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtpZihlKXt2YXIgdD10aGlzO2UoZnVuY3Rpb24oZSl7dC5yZXNvbHZlKGUpfSxmdW5jdGlvbihlKXt0LnJlamVjdChlKX0pfX1mdW5jdGlvbiByKGUsdCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZS55KXRyeXt2YXIgcj1lLnkuY2FsbCh2b2lkIDAsdCk7ZS5wLnJlc29sdmUocil9Y2F0Y2godCl7ZS5wLnJlamVjdCh0KX1lbHNlIGUucC5yZXNvbHZlKHQpfWZ1bmN0aW9uIG4oZSx0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLm4pdHJ5e3ZhciByPWUubi5jYWxsKHZvaWQgMCx0KTtlLnAucmVzb2x2ZShyKX1jYXRjaCh0KXtlLnAucmVqZWN0KHQpfWVsc2UgZS5wLnJlamVjdCh0KX1lPWV8fFwib2JqZWN0XCI9PT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHByb2Nlc3M/XCJ1bmRlZmluZWRcIjpfdHlwZW9mKHByb2Nlc3MpKSYmcHJvY2Vzcy5uZXh0VGlja3x8XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0SW1tZWRpYXRlJiZzZXRJbW1lZGlhdGV8fGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZSwwKX07dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7Zm9yKDtyLmxlbmd0aC1uOyl7dHJ5e3Jbbl0oKX1jYXRjaChlKXt9cltuKytdPXZvaWQgMCxuPT09YSYmKHIuc3BsaWNlKDAsYSksbj0wKX19dmFyIHI9W10sbj0wLGE9MTAyNDtyZXR1cm4gZnVuY3Rpb24oYSl7ci5wdXNoKGEpLHIubGVuZ3RoLW49PT0xJiZlKHQpfX0oKTtyZXR1cm4gdC5wcm90b3R5cGU9e3Jlc29sdmU6ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09dGhpcy5zdGF0ZSl7aWYoZT09PXRoaXMpcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoXCJBdHRlbXB0IHRvIHJlc29sdmUgcHJvbWlzZSB3aXRoIHNlbGZcIikpO3ZhciB0PXRoaXM7aWYoZSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGV8fFwib2JqZWN0XCI9PT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIGU/XCJ1bmRlZmluZWRcIjpfdHlwZW9mKGUpKSkpdHJ5e3ZhciBuPTAsdT1lLnRoZW47aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgdSlyZXR1cm4gdm9pZCB1LmNhbGwoZSxmdW5jdGlvbihlKXtuKyt8fHQucmVzb2x2ZShlKX0sZnVuY3Rpb24oZSl7bisrfHx0LnJlamVjdChlKX0pfWNhdGNoKGUpe3JldHVybiB2b2lkKG58fHRoaXMucmVqZWN0KGUpKX10aGlzLnN0YXRlPXIsdGhpcy52PWUsdC5jJiZhKGZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsYT10LmMubGVuZ3RoO248YTtuKyspcih0LmNbbl0sZSl9KX19LHJlamVjdDpmdW5jdGlvbihlKXtpZih2b2lkIDA9PT10aGlzLnN0YXRlKXt0aGlzLnN0YXRlPW4sdGhpcy52PWU7dmFyIHQ9dGhpcy5jO3QmJmEoZnVuY3Rpb24oKXtmb3IodmFyIHI9MCxhPXQubGVuZ3RoO3I8YTtyKyspbih0W3JdLGUpfSl9fSx0aGVuOmZ1bmN0aW9uKGUscil7dmFyIG49bmV3IHQsdT17eTplLG46cixwOm59O2lmKHZvaWQgMD09PXRoaXMuc3RhdGUpdGhpcy5jP3RoaXMuYy5wdXNoKHUpOnRoaXMuYz1bdV07ZWxzZXt2YXIgaT10aGlzLnN0YXRlLG89dGhpcy52O2EoZnVuY3Rpb24oKXtpKHUsbyl9KX1yZXR1cm4gbn19LHQucmVzb2x2ZT1mdW5jdGlvbihlKXtpZihlJiZlIGluc3RhbmNlb2YgdClyZXR1cm4gZTt2YXIgcj1uZXcgdDtyZXR1cm4gci5yZXNvbHZlKGUpLHJ9LHQucmVqZWN0PWZ1bmN0aW9uKGUpe2lmKGUmJmUgaW5zdGFuY2VvZiB0KXJldHVybiBlO3ZhciByPW5ldyB0O3JldHVybiByLnJlamVjdChlKSxyfSx0LnZlcnNpb249XCIyLjMuMy1ub2RlbnRcIix0fSkoKSk7dmFyIGE9dGhpcztzd2l0Y2gocil7Y2FzZSEwOnJldHVybiBuZXcgZS5UaGVuYWJsZShuKTtjYXNlIDA6cmV0dXJuIG5ldyBlLkxhenlUaGVuYWJsZShuKTtjYXNlIHZvaWQgMDpyZXR1cm4gbi50aGVuPW4sbjtkZWZhdWx0OnJldHVybiBmdW5jdGlvbigpe3RyeXtyZXR1cm4gYS5hcHBseSh0LGFyZ3VtZW50cyl9Y2F0Y2goZSl7cmV0dXJuIHIoZSl9fX19O3ZhciB0b051bWJlcj1fZGVmYXVsdChbW19kZWZhdWx0MixfZGVmYXVsdDNdLFtfZGVmYXVsdDQoTnVtYmVyKSxfZGVmYXVsdDNdLFtfZGVmYXVsdDUsZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlcihlKX1dXSksaXNXaXRoaW49X2RlZmF1bHQ2KGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1fZGVmYXVsdDQoTnVtYmVyKTtyZXR1cm4gbihlKSYmbih0KSYmbihyKSYmX2RlZmF1bHQ3KHIsZSkmJl9kZWZhdWx0Nyh0LHIpfSksaXNJbnZhbGlkQ29uZmlnPV9kZWZhdWx0OChbX2RlZmF1bHQyLF9kZWZhdWx0OSxfZGVmYXVsdDEwKF9kZWZhdWx0MTEoXCJiYXNlVVJMXCIpKSxfZGVmYXVsdDEwKF9kZWZhdWx0MTIoU3RyaW5nLFwiYmFzZVVSTFwiKSksX2RlZmF1bHQxMyhfZGVmYXVsdDksXCJiYXNlVVJMXCIpXSksaXNQcm9taXNlPWZ1bmN0aW9uKGUpe3JldHVybiEhZSYmKFwib2JqZWN0XCI9PT0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIGU/XCJ1bmRlZmluZWRcIjpfdHlwZW9mKGUpKXx8XCJmdW5jdGlvblwiPT10eXBlb2YgZSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUudGhlbn0sREVGQVVMVF9IRUFERVJTPXtBY2NlcHQ6XCJhcHBsaWNhdGlvbi9qc29uXCIsXCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL2pzb25cIn0sREVGQVVMVF9DT05GSUc9e3RpbWVvdXQ6MH0sTk9ORT1udWxsLENMSUVOVF9FUlJPUj1cIkNMSUVOVF9FUlJPUlwiLFNFUlZFUl9FUlJPUj1cIlNFUlZFUl9FUlJPUlwiLFRJTUVPVVRfRVJST1I9XCJUSU1FT1VUX0VSUk9SXCIsQ09OTkVDVElPTl9FUlJPUj1cIkNPTk5FQ1RJT05fRVJST1JcIixORVRXT1JLX0VSUk9SPVwiTkVUV09SS19FUlJPUlwiLFVOS05PV05fRVJST1I9XCJVTktOT1dOX0VSUk9SXCIsQ0FOQ0VMX0VSUk9SPVwiQ0FOQ0VMX0VSUk9SXCIsVElNRU9VVF9FUlJPUl9DT0RFUz1bXCJFQ09OTkFCT1JURURcIl0sTk9ERUpTX0NPTk5FQ1RJT05fRVJST1JfQ09ERVM9W1wiRU5PVEZPVU5EXCIsXCJFQ09OTlJFRlVTRURcIixcIkVDT05OUkVTRVRcIl0saW4yMDBzPWlzV2l0aGluKDIwMCwyOTkpLGluNDAwcz1pc1dpdGhpbig0MDAsNDk5KSxpbjUwMHM9aXNXaXRoaW4oNTAwLDU5OSksc3RhdHVzTmlsPV9kZWZhdWx0MTQoX2RlZmF1bHQyLF9kZWZhdWx0MTUodm9pZCAwKSxfZGVmYXVsdDE2KFwic3RhdHVzXCIpKSxjcmVhdGU9ZnVuY3Rpb24oZSl7aWYoaXNJbnZhbGlkQ29uZmlnKGUpKXRocm93IG5ldyBFcnJvcihcImNvbmZpZyBtdXN0IGhhdmUgYSBiYXNlVVJMXCIpO3ZhciB0PV9kZWZhdWx0MTcoREVGQVVMVF9IRUFERVJTLGUuaGVhZGVyc3x8e30pLHI9X2RlZmF1bHQxNyhERUZBVUxUX0NPTkZJRyxfZGVmYXVsdDE4KFwiaGVhZGVyc1wiLGUpKSxuPWF4aW9zLmNyZWF0ZShyKSxhPVtdLHU9ZnVuY3Rpb24oZSl7YS5wdXNoKGUpfSxpPVtdLG89W10sZj1bXSxzPWZ1bmN0aW9uKGUpe3JldHVybiBpLnB1c2goZSl9LGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG8ucHVzaChlKX0sYz1mdW5jdGlvbihlKXtyZXR1cm4gZi5wdXNoKGUpfSxSPWZ1bmN0aW9uKGUscil7cmV0dXJuIHRbZV09cixufSxkPWZ1bmN0aW9uKGUpe3JldHVybiBfZGVmYXVsdDE5KGZ1bmN0aW9uKHQpe3JldHVybiBSKHQsZVt0XSl9LF9kZWZhdWx0MjAoZSkpLG59LF89ZnVuY3Rpb24oZSl7cmV0dXJuIGRlbGV0ZSB0W2VdLG59LEU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uZGVmYXVsdHMuYmFzZVVSTD1lLG59LHA9ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0cy5iYXNlVVJMfSxPPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9LG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOnt9O3JldHVybiBOKF9kZWZhdWx0MTcoe3VybDp0LHBhcmFtczpyLG1ldGhvZDplfSxuKSl9LGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTp7fTtyZXR1cm4gTihfZGVmYXVsdDE3KHt1cmw6dCxtZXRob2Q6ZSxkYXRhOnJ9LG4pKX0sTj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocixhKXtmdW5jdGlvbiB1KCl7ZnVuY3Rpb24gdCgpe3JldHVybiBmfXJldHVybiBjPG8ubGVuZ3RoPyhSPW9bY10oZSksaXNQcm9taXNlKFIpP1IudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMpfS4kYXN5bmNiaW5kKHRoaXMsYSksYSk6UihlKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNhbGwodGhpcyl9LiRhc3luY2JpbmQodGhpcyxhKSxhKSk6WzFdfWZ1bmN0aW9uIGYoKXtyZXR1cm4gYysrLHV9ZnVuY3Rpb24gcygpe3JldHVybiBsLmNhbGwodGhpcyl9ZnVuY3Rpb24gbCgpe3JldHVybiBkPV9kZWZhdWx0MjEoX2RlZmF1bHQyMihULFt0b051bWJlcihuZXcgRGF0ZSldKSx5KSxyKG4ucmVxdWVzdChlKS50aGVuKGQpLmNhdGNoKGQpKX12YXIgYyxSLGQ7cmV0dXJuIGUuaGVhZGVycz1fZXh0ZW5kcyh7fSx0LGUuaGVhZGVycyksaS5sZW5ndGg+MCYmX2RlZmF1bHQxOShmdW5jdGlvbih0KXtyZXR1cm4gdChlKX0saSksby5sZW5ndGg+MD8oYz0wLEZ1bmN0aW9uLiRhc3luY2JpbmQudHJhbXBvbGluZSh0aGlzLHMsZixhLCEwKSh1KSk6bC5jYWxsKHRoaXMpfS4kYXN5bmNiaW5kKHRoaXMpKX0seT1mdW5jdGlvbihlKXtyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3RyeXt0KGUpfWNhdGNoKGUpe319KSxlfSxUPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dG9OdW1iZXIobmV3IERhdGUpLG49ci1lLGE9dCBpbnN0YW5jZW9mIEVycm9yfHxheGlvcy5pc0NhbmNlbCh0KSx1PWE/dC5yZXNwb25zZTp0LGk9dSYmdS5zdGF0dXN8fG51bGwsbz1hP20odCk6dihpKSxzPWluMjAwcyhpKSxsPXQuY29uZmlnfHxudWxsLGM9dSYmdS5oZWFkZXJzfHxudWxsLFI9dSYmdS5kYXRhfHxudWxsLGQ9e2R1cmF0aW9uOm4scHJvYmxlbTpvLG9rOnMsc3RhdHVzOmksaGVhZGVyczpjLGNvbmZpZzpsLGRhdGE6Un07cmV0dXJuIGYubGVuZ3RoPjAmJl9kZWZhdWx0MTkoZnVuY3Rpb24oZSl7cmV0dXJuIGUoZCl9LGYpLGR9LG09ZnVuY3Rpb24oZSl7cmV0dXJuXCJOZXR3b3JrIEVycm9yXCI9PT1lLm1lc3NhZ2U/TkVUV09SS19FUlJPUjpheGlvcy5pc0NhbmNlbChlKT9DQU5DRUxfRVJST1I6X2RlZmF1bHQoW1tfZGVmYXVsdDIsZnVuY3Rpb24oKXtyZXR1cm4gdihzdGF0dXNOaWwoZS5yZXNwb25zZSkpfV0sW19kZWZhdWx0MjMoX2RlZmF1bHQyNCxUSU1FT1VUX0VSUk9SX0NPREVTKSxfZGVmYXVsdDE1KFRJTUVPVVRfRVJST1IpXSxbX2RlZmF1bHQyMyhfZGVmYXVsdDI0LE5PREVKU19DT05ORUNUSU9OX0VSUk9SX0NPREVTKSxfZGVmYXVsdDE1KENPTk5FQ1RJT05fRVJST1IpXSxbX2RlZmF1bHQ1LF9kZWZhdWx0MTUoVU5LTk9XTl9FUlJPUildXSkoZS5jb2RlKX0sdj1mdW5jdGlvbihlKXtyZXR1cm4gX2RlZmF1bHQoW1tfZGVmYXVsdDIsX2RlZmF1bHQxNShVTktOT1dOX0VSUk9SKV0sW2luMjAwcyxfZGVmYXVsdDE1KE5PTkUpXSxbaW40MDBzLF9kZWZhdWx0MTUoQ0xJRU5UX0VSUk9SKV0sW2luNTAwcyxfZGVmYXVsdDE1KFNFUlZFUl9FUlJPUildLFtfZGVmYXVsdDUsX2RlZmF1bHQxNShVTktOT1dOX0VSUk9SKV1dKShlKX0sRD17YXhpb3NJbnN0YW5jZTpuLG1vbml0b3JzOmEsYWRkTW9uaXRvcjp1LHJlcXVlc3RUcmFuc2Zvcm1zOmksYXN5bmNSZXF1ZXN0VHJhbnNmb3JtczpvLHJlc3BvbnNlVHJhbnNmb3JtczpmLGFkZFJlcXVlc3RUcmFuc2Zvcm06cyxhZGRBc3luY1JlcXVlc3RUcmFuc2Zvcm06bCxhZGRSZXNwb25zZVRyYW5zZm9ybTpjLHNldEhlYWRlcjpSLHNldEhlYWRlcnM6ZCxkZWxldGVIZWFkZXI6XyxoZWFkZXJzOnQsc2V0QmFzZVVSTDpFLGdldEJhc2VVUkw6cCxnZXQ6X2RlZmF1bHQyMihPLFtcImdldFwiXSksZGVsZXRlOl9kZWZhdWx0MjIoTyxbXCJkZWxldGVcIl0pLGhlYWQ6X2RlZmF1bHQyMihPLFtcImhlYWRcIl0pLHBvc3Q6X2RlZmF1bHQyMihoLFtcInBvc3RcIl0pLHB1dDpfZGVmYXVsdDIyKGgsW1wicHV0XCJdKSxwYXRjaDpfZGVmYXVsdDIyKGgsW1wicGF0Y2hcIl0pLGxpbms6X2RlZmF1bHQyMihPLFtcImxpbmtcIl0pLHVubGluazpfZGVmYXVsdDIyKE8sW1widW5saW5rXCJdKX07cmV0dXJuIER9LGFwaXNhdWNlPXtERUZBVUxUX0hFQURFUlM6REVGQVVMVF9IRUFERVJTLE5PTkU6Tk9ORSxDTElFTlRfRVJST1I6Q0xJRU5UX0VSUk9SLFNFUlZFUl9FUlJPUjpTRVJWRVJfRVJST1IsVElNRU9VVF9FUlJPUjpUSU1FT1VUX0VSUk9SLENPTk5FQ1RJT05fRVJST1I6Q09OTkVDVElPTl9FUlJPUixORVRXT1JLX0VSUk9SOk5FVFdPUktfRVJST1IsVU5LTk9XTl9FUlJPUjpVTktOT1dOX0VSUk9SLGNyZWF0ZTpjcmVhdGV9O2V4cG9ydHMuREVGQVVMVF9IRUFERVJTPURFRkFVTFRfSEVBREVSUyxleHBvcnRzLk5PTkU9Tk9ORSxleHBvcnRzLkNMSUVOVF9FUlJPUj1DTElFTlRfRVJST1IsZXhwb3J0cy5TRVJWRVJfRVJST1I9U0VSVkVSX0VSUk9SLGV4cG9ydHMuVElNRU9VVF9FUlJPUj1USU1FT1VUX0VSUk9SLGV4cG9ydHMuQ09OTkVDVElPTl9FUlJPUj1DT05ORUNUSU9OX0VSUk9SLGV4cG9ydHMuTkVUV09SS19FUlJPUj1ORVRXT1JLX0VSUk9SLGV4cG9ydHMuVU5LTk9XTl9FUlJPUj1VTktOT1dOX0VSUk9SLGV4cG9ydHMuQ0FOQ0VMX0VSUk9SPUNBTkNFTF9FUlJPUixleHBvcnRzLmNyZWF0ZT1jcmVhdGUsZXhwb3J0cy5kZWZhdWx0PWFwaXNhdWNlO1xuIiwidmFyIGFycmF5RmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXlGaWx0ZXInKSxcbiAgICBiYXNlRmlsdGVyID0gcmVxdWlyZSgnLi9fYmFzZUZpbHRlcicpLFxuICAgIGJhc2VJdGVyYXRlZSA9IHJlcXVpcmUoJy4vX2Jhc2VJdGVyYXRlZScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKTtcblxuLyoqXG4gKiBJdGVyYXRlcyBvdmVyIGVsZW1lbnRzIG9mIGBjb2xsZWN0aW9uYCwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGFsbCBlbGVtZW50c1xuICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICogYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogKipOb3RlOioqIFVubGlrZSBgXy5yZW1vdmVgLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqIEBzZWUgXy5yZWplY3RcbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAnYWdlJzogNDAsICdhY3RpdmUnOiBmYWxzZSB9XG4gKiBdO1xuICpcbiAqIF8uZmlsdGVyKHVzZXJzLCBmdW5jdGlvbihvKSB7IHJldHVybiAhby5hY3RpdmU7IH0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc2AgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maWx0ZXIodXNlcnMsIHsgJ2FnZSc6IDM2LCAnYWN0aXZlJzogdHJ1ZSB9KTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnYmFybmV5J11cbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbHRlcih1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gb2JqZWN0cyBmb3IgWydmcmVkJ11cbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmlsdGVyKHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiBvYmplY3RzIGZvciBbJ2Jhcm5leSddXG4gKlxuICogLy8gQ29tYmluaW5nIHNldmVyYWwgcHJlZGljYXRlcyB1c2luZyBgXy5vdmVyRXZlcnlgIG9yIGBfLm92ZXJTb21lYC5cbiAqIF8uZmlsdGVyKHVzZXJzLCBfLm92ZXJTb21lKFt7ICdhZ2UnOiAzNiB9LCBbJ2FnZScsIDQwXV0pKTtcbiAqIC8vID0+IG9iamVjdHMgZm9yIFsnZnJlZCcsICdiYXJuZXknXVxuICovXG5mdW5jdGlvbiBmaWx0ZXIoY29sbGVjdGlvbiwgcHJlZGljYXRlKSB7XG4gIHZhciBmdW5jID0gaXNBcnJheShjb2xsZWN0aW9uKSA/IGFycmF5RmlsdGVyIDogYmFzZUZpbHRlcjtcbiAgcmV0dXJuIGZ1bmMoY29sbGVjdGlvbiwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZpbHRlcjtcbiIsInZhciBiYXNlSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Jhc2VJbmRleE9mJyksXG4gICAgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi90b0ludGVnZXInKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIEdldHMgdGhlIGluZGV4IGF0IHdoaWNoIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIGB2YWx1ZWAgaXMgZm91bmQgaW4gYGFycmF5YFxuICogdXNpbmcgW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGZvciBlcXVhbGl0eSBjb21wYXJpc29ucy4gSWYgYGZyb21JbmRleGAgaXMgbmVnYXRpdmUsIGl0J3MgdXNlZCBhcyB0aGVcbiAqIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZnJvbUluZGV4PTBdIFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIpO1xuICogLy8gPT4gMVxuICpcbiAqIC8vIFNlYXJjaCBmcm9tIHRoZSBgZnJvbUluZGV4YC5cbiAqIF8uaW5kZXhPZihbMSwgMiwgMSwgMl0sIDIsIDIpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSwgZnJvbUluZGV4KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgaWYgKCFsZW5ndGgpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4ID09IG51bGwgPyAwIDogdG9JbnRlZ2VyKGZyb21JbmRleCk7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBpbmRleCA9IG5hdGl2ZU1heChsZW5ndGggKyBpbmRleCwgMCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgaW5kZXgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluZGV4T2Y7XG4iLCJ2YXIgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGdldFRhZyA9IHJlcXVpcmUoJy4vX2dldFRhZycpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0J1ZmZlciA9IHJlcXVpcmUoJy4vaXNCdWZmZXInKSxcbiAgICBpc1Byb3RvdHlwZSA9IHJlcXVpcmUoJy4vX2lzUHJvdG90eXBlJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGFuIGVtcHR5IG9iamVjdCwgY29sbGVjdGlvbiwgbWFwLCBvciBzZXQuXG4gKlxuICogT2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlbXB0eSBpZiB0aGV5IGhhdmUgbm8gb3duIGVudW1lcmFibGUgc3RyaW5nIGtleWVkXG4gKiBwcm9wZXJ0aWVzLlxuICpcbiAqIEFycmF5LWxpa2UgdmFsdWVzIHN1Y2ggYXMgYGFyZ3VtZW50c2Agb2JqZWN0cywgYXJyYXlzLCBidWZmZXJzLCBzdHJpbmdzLCBvclxuICogalF1ZXJ5LWxpa2UgY29sbGVjdGlvbnMgYXJlIGNvbnNpZGVyZWQgZW1wdHkgaWYgdGhleSBoYXZlIGEgYGxlbmd0aGAgb2YgYDBgLlxuICogU2ltaWxhcmx5LCBtYXBzIGFuZCBzZXRzIGFyZSBjb25zaWRlcmVkIGVtcHR5IGlmIHRoZXkgaGF2ZSBhIGBzaXplYCBvZiBgMGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZW1wdHksIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0VtcHR5KG51bGwpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNFbXB0eSh0cnVlKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRW1wdHkoMSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0VtcHR5KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNFbXB0eSh7ICdhJzogMSB9KTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoaXNBcnJheUxpa2UodmFsdWUpICYmXG4gICAgICAoaXNBcnJheSh2YWx1ZSkgfHwgdHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZS5zcGxpY2UgPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICBpc0J1ZmZlcih2YWx1ZSkgfHwgaXNUeXBlZEFycmF5KHZhbHVlKSB8fCBpc0FyZ3VtZW50cyh2YWx1ZSkpKSB7XG4gICAgcmV0dXJuICF2YWx1ZS5sZW5ndGg7XG4gIH1cbiAgdmFyIHRhZyA9IGdldFRhZyh2YWx1ZSk7XG4gIGlmICh0YWcgPT0gbWFwVGFnIHx8IHRhZyA9PSBzZXRUYWcpIHtcbiAgICByZXR1cm4gIXZhbHVlLnNpemU7XG4gIH1cbiAgaWYgKGlzUHJvdG90eXBlKHZhbHVlKSkge1xuICAgIHJldHVybiAhYmFzZUtleXModmFsdWUpLmxlbmd0aDtcbiAgfVxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0VtcHR5O1xuIiwiIWZ1bmN0aW9uKHIsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoZSk6KHI9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIGdsb2JhbFRoaXM/Z2xvYmFsVGhpczpyfHxzZWxmKS5kYXlqc19wbHVnaW5fcmVsYXRpdmVUaW1lPWUoKX0odGhpcywoZnVuY3Rpb24oKXtcInVzZSBzdHJpY3RcIjtyZXR1cm4gZnVuY3Rpb24ocixlLHQpe3I9cnx8e307dmFyIG49ZS5wcm90b3R5cGUsbz17ZnV0dXJlOlwiaW4gJXNcIixwYXN0OlwiJXMgYWdvXCIsczpcImEgZmV3IHNlY29uZHNcIixtOlwiYSBtaW51dGVcIixtbTpcIiVkIG1pbnV0ZXNcIixoOlwiYW4gaG91clwiLGhoOlwiJWQgaG91cnNcIixkOlwiYSBkYXlcIixkZDpcIiVkIGRheXNcIixNOlwiYSBtb250aFwiLE1NOlwiJWQgbW9udGhzXCIseTpcImEgeWVhclwiLHl5OlwiJWQgeWVhcnNcIn07ZnVuY3Rpb24gaShyLGUsdCxvKXtyZXR1cm4gbi5mcm9tVG9CYXNlKHIsZSx0LG8pfXQuZW4ucmVsYXRpdmVUaW1lPW8sbi5mcm9tVG9CYXNlPWZ1bmN0aW9uKGUsbixpLGQsdSl7Zm9yKHZhciBmLGEscyxsPWkuJGxvY2FsZSgpLnJlbGF0aXZlVGltZXx8byxoPXIudGhyZXNob2xkc3x8W3tsOlwic1wiLHI6NDQsZDpcInNlY29uZFwifSx7bDpcIm1cIixyOjg5fSx7bDpcIm1tXCIscjo0NCxkOlwibWludXRlXCJ9LHtsOlwiaFwiLHI6ODl9LHtsOlwiaGhcIixyOjIxLGQ6XCJob3VyXCJ9LHtsOlwiZFwiLHI6MzV9LHtsOlwiZGRcIixyOjI1LGQ6XCJkYXlcIn0se2w6XCJNXCIscjo0NX0se2w6XCJNTVwiLHI6MTAsZDpcIm1vbnRoXCJ9LHtsOlwieVwiLHI6MTd9LHtsOlwieXlcIixkOlwieWVhclwifV0sbT1oLmxlbmd0aCxjPTA7YzxtO2MrPTEpe3ZhciB5PWhbY107eS5kJiYoZj1kP3QoZSkuZGlmZihpLHkuZCwhMCk6aS5kaWZmKGUseS5kLCEwKSk7dmFyIHA9KHIucm91bmRpbmd8fE1hdGgucm91bmQpKE1hdGguYWJzKGYpKTtpZihzPWY+MCxwPD15LnJ8fCF5LnIpe3A8PTEmJmM+MCYmKHk9aFtjLTFdKTt2YXIgdj1sW3kubF07dSYmKHA9dShcIlwiK3ApKSxhPVwic3RyaW5nXCI9PXR5cGVvZiB2P3YucmVwbGFjZShcIiVkXCIscCk6dihwLG4seS5sLHMpO2JyZWFrfX1pZihuKXJldHVybiBhO3ZhciBNPXM/bC5mdXR1cmU6bC5wYXN0O3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIE0/TShhKTpNLnJlcGxhY2UoXCIlc1wiLGEpfSxuLnRvPWZ1bmN0aW9uKHIsZSl7cmV0dXJuIGkocixlLHRoaXMsITApfSxuLmZyb209ZnVuY3Rpb24ocixlKXtyZXR1cm4gaShyLGUsdGhpcyl9O3ZhciBkPWZ1bmN0aW9uKHIpe3JldHVybiByLiR1P3QudXRjKCk6dCgpfTtuLnRvTm93PWZ1bmN0aW9uKHIpe3JldHVybiB0aGlzLnRvKGQodGhpcykscil9LG4uZnJvbU5vdz1mdW5jdGlvbihyKXtyZXR1cm4gdGhpcy5mcm9tKGQodGhpcykscil9fX0pKTsiLCIhZnVuY3Rpb24odCxpKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1pKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShpKToodD1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOnR8fHNlbGYpLmRheWpzX3BsdWdpbl91dGM9aSgpfSh0aGlzLChmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO3ZhciB0PVwibWludXRlXCIsaT0vWystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZyxlPS8oWystXXxcXGRcXGQpL2c7cmV0dXJuIGZ1bmN0aW9uKHMsZixuKXt2YXIgdT1mLnByb3RvdHlwZTtuLnV0Yz1mdW5jdGlvbih0KXt2YXIgaT17ZGF0ZTp0LHV0YzohMCxhcmdzOmFyZ3VtZW50c307cmV0dXJuIG5ldyBmKGkpfSx1LnV0Yz1mdW5jdGlvbihpKXt2YXIgZT1uKHRoaXMudG9EYXRlKCkse2xvY2FsZTp0aGlzLiRMLHV0YzohMH0pO3JldHVybiBpP2UuYWRkKHRoaXMudXRjT2Zmc2V0KCksdCk6ZX0sdS5sb2NhbD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMudG9EYXRlKCkse2xvY2FsZTp0aGlzLiRMLHV0YzohMX0pfTt2YXIgcj11LnBhcnNlO3UucGFyc2U9ZnVuY3Rpb24odCl7dC51dGMmJih0aGlzLiR1PSEwKSx0aGlzLiR1dGlscygpLnUodC4kb2Zmc2V0KXx8KHRoaXMuJG9mZnNldD10LiRvZmZzZXQpLHIuY2FsbCh0aGlzLHQpfTt2YXIgbz11LmluaXQ7dS5pbml0PWZ1bmN0aW9uKCl7aWYodGhpcy4kdSl7dmFyIHQ9dGhpcy4kZDt0aGlzLiR5PXQuZ2V0VVRDRnVsbFllYXIoKSx0aGlzLiRNPXQuZ2V0VVRDTW9udGgoKSx0aGlzLiREPXQuZ2V0VVRDRGF0ZSgpLHRoaXMuJFc9dC5nZXRVVENEYXkoKSx0aGlzLiRIPXQuZ2V0VVRDSG91cnMoKSx0aGlzLiRtPXQuZ2V0VVRDTWludXRlcygpLHRoaXMuJHM9dC5nZXRVVENTZWNvbmRzKCksdGhpcy4kbXM9dC5nZXRVVENNaWxsaXNlY29uZHMoKX1lbHNlIG8uY2FsbCh0aGlzKX07dmFyIGE9dS51dGNPZmZzZXQ7dS51dGNPZmZzZXQ9ZnVuY3Rpb24ocyxmKXt2YXIgbj10aGlzLiR1dGlscygpLnU7aWYobihzKSlyZXR1cm4gdGhpcy4kdT8wOm4odGhpcy4kb2Zmc2V0KT9hLmNhbGwodGhpcyk6dGhpcy4kb2Zmc2V0O2lmKFwic3RyaW5nXCI9PXR5cGVvZiBzJiYocz1mdW5jdGlvbih0KXt2b2lkIDA9PT10JiYodD1cIlwiKTt2YXIgcz10Lm1hdGNoKGkpO2lmKCFzKXJldHVybiBudWxsO3ZhciBmPShcIlwiK3NbMF0pLm1hdGNoKGUpfHxbXCItXCIsMCwwXSxuPWZbMF0sdT02MCorZlsxXSsgK2ZbMl07cmV0dXJuIDA9PT11PzA6XCIrXCI9PT1uP3U6LXV9KHMpLG51bGw9PT1zKSlyZXR1cm4gdGhpczt2YXIgdT1NYXRoLmFicyhzKTw9MTY/NjAqczpzO2lmKDA9PT11KXJldHVybiB0aGlzLnV0YyhmKTt2YXIgcj10aGlzLmNsb25lKCk7aWYoZilyZXR1cm4gci4kb2Zmc2V0PXUsci4kdT0hMSxyO3ZhciBvPXRoaXMuJHU/dGhpcy50b0RhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpOi0xKnRoaXMudXRjT2Zmc2V0KCk7cmV0dXJuKHI9dGhpcy5sb2NhbCgpLmFkZCh1K28sdCkpLiRvZmZzZXQ9dSxyLiR4LiRsb2NhbE9mZnNldD1vLHJ9O3ZhciBoPXUuZm9ybWF0O3UuZm9ybWF0PWZ1bmN0aW9uKHQpe3ZhciBpPXR8fCh0aGlzLiR1P1wiWVlZWS1NTS1ERFRISDptbTpzc1taXVwiOlwiXCIpO3JldHVybiBoLmNhbGwodGhpcyxpKX0sdS52YWx1ZU9mPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy4kdXRpbHMoKS51KHRoaXMuJG9mZnNldCk/MDp0aGlzLiRvZmZzZXQrKHRoaXMuJHguJGxvY2FsT2Zmc2V0fHx0aGlzLiRkLmdldFRpbWV6b25lT2Zmc2V0KCkpO3JldHVybiB0aGlzLiRkLnZhbHVlT2YoKS02ZTQqdH0sdS5pc1VUQz1mdW5jdGlvbigpe3JldHVybiEhdGhpcy4kdX0sdS50b0lTT1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCl9LHUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b0RhdGUoKS50b1VUQ1N0cmluZygpfTt2YXIgbD11LnRvRGF0ZTt1LnRvRGF0ZT1mdW5jdGlvbih0KXtyZXR1cm5cInNcIj09PXQmJnRoaXMuJG9mZnNldD9uKHRoaXMuZm9ybWF0KFwiWVlZWS1NTS1ERCBISDptbTpzczpTU1NcIikpLnRvRGF0ZSgpOmwuY2FsbCh0aGlzKX07dmFyIGM9dS5kaWZmO3UuZGlmZj1mdW5jdGlvbih0LGksZSl7aWYodCYmdGhpcy4kdT09PXQuJHUpcmV0dXJuIGMuY2FsbCh0aGlzLHQsaSxlKTt2YXIgcz10aGlzLmxvY2FsKCksZj1uKHQpLmxvY2FsKCk7cmV0dXJuIGMuY2FsbChzLGYsaSxlKX19fSkpOyIsInZhciBjcmVhdGVDYXNlRmlyc3QgPSByZXF1aXJlKCcuL19jcmVhdGVDYXNlRmlyc3QnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzdHJpbmdgIHRvIHVwcGVyIGNhc2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IFN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtzdHJpbmc9JyddIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udXBwZXJGaXJzdCgnZnJlZCcpO1xuICogLy8gPT4gJ0ZyZWQnXG4gKlxuICogXy51cHBlckZpcnN0KCdGUkVEJyk7XG4gKiAvLyA9PiAnRlJFRCdcbiAqL1xudmFyIHVwcGVyRmlyc3QgPSBjcmVhdGVDYXNlRmlyc3QoJ3RvVXBwZXJDYXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdXBwZXJGaXJzdDtcbiIsInZhciBjcmVhdGVSYW5nZSA9IHJlcXVpcmUoJy4vX2NyZWF0ZVJhbmdlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBudW1iZXJzIChwb3NpdGl2ZSBhbmQvb3IgbmVnYXRpdmUpIHByb2dyZXNzaW5nIGZyb21cbiAqIGBzdGFydGAgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCBgZW5kYC4gQSBzdGVwIG9mIGAtMWAgaXMgdXNlZCBpZiBhIG5lZ2F0aXZlXG4gKiBgc3RhcnRgIGlzIHNwZWNpZmllZCB3aXRob3V0IGFuIGBlbmRgIG9yIGBzdGVwYC4gSWYgYGVuZGAgaXMgbm90IHNwZWNpZmllZCxcbiAqIGl0J3Mgc2V0IHRvIGBzdGFydGAgd2l0aCBgc3RhcnRgIHRoZW4gc2V0IHRvIGAwYC5cbiAqXG4gKiAqKk5vdGU6KiogSmF2YVNjcmlwdCBmb2xsb3dzIHRoZSBJRUVFLTc1NCBzdGFuZGFyZCBmb3IgcmVzb2x2aW5nXG4gKiBmbG9hdGluZy1wb2ludCB2YWx1ZXMgd2hpY2ggY2FuIHByb2R1Y2UgdW5leHBlY3RlZCByZXN1bHRzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PTBdIFRoZSBzdGFydCBvZiB0aGUgcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kIFRoZSBlbmQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IFtzdGVwPTFdIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSByYW5nZSBvZiBudW1iZXJzLlxuICogQHNlZSBfLmluUmFuZ2UsIF8ucmFuZ2VSaWdodFxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnJhbmdlKDQpO1xuICogLy8gPT4gWzAsIDEsIDIsIDNdXG4gKlxuICogXy5yYW5nZSgtNCk7XG4gKiAvLyA9PiBbMCwgLTEsIC0yLCAtM11cbiAqXG4gKiBfLnJhbmdlKDEsIDUpO1xuICogLy8gPT4gWzEsIDIsIDMsIDRdXG4gKlxuICogXy5yYW5nZSgwLCAyMCwgNSk7XG4gKiAvLyA9PiBbMCwgNSwgMTAsIDE1XVxuICpcbiAqIF8ucmFuZ2UoMCwgLTQsIC0xKTtcbiAqIC8vID0+IFswLCAtMSwgLTIsIC0zXVxuICpcbiAqIF8ucmFuZ2UoMSwgNCwgMCk7XG4gKiAvLyA9PiBbMSwgMSwgMV1cbiAqXG4gKiBfLnJhbmdlKDApO1xuICogLy8gPT4gW11cbiAqL1xudmFyIHJhbmdlID0gY3JlYXRlUmFuZ2UoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByYW5nZTtcbiIsInZhciBzY29wZSA9ICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiICYmIGdsb2JhbCkgfHxcbiAgICAgICAgICAgICh0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBzZWxmKSB8fFxuICAgICAgICAgICAgd2luZG93O1xudmFyIGFwcGx5ID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuXG4vLyBET00gQVBJcywgZm9yIGNvbXBsZXRlbmVzc1xuXG5leHBvcnRzLnNldFRpbWVvdXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBUaW1lb3V0KGFwcGx5LmNhbGwoc2V0VGltZW91dCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFyVGltZW91dCk7XG59O1xuZXhwb3J0cy5zZXRJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFRpbWVvdXQoYXBwbHkuY2FsbChzZXRJbnRlcnZhbCwgc2NvcGUsIGFyZ3VtZW50cyksIGNsZWFySW50ZXJ2YWwpO1xufTtcbmV4cG9ydHMuY2xlYXJUaW1lb3V0ID1cbmV4cG9ydHMuY2xlYXJJbnRlcnZhbCA9IGZ1bmN0aW9uKHRpbWVvdXQpIHtcbiAgaWYgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsb3NlKCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFRpbWVvdXQoaWQsIGNsZWFyRm4pIHtcbiAgdGhpcy5faWQgPSBpZDtcbiAgdGhpcy5fY2xlYXJGbiA9IGNsZWFyRm47XG59XG5UaW1lb3V0LnByb3RvdHlwZS51bnJlZiA9IFRpbWVvdXQucHJvdG90eXBlLnJlZiA9IGZ1bmN0aW9uKCkge307XG5UaW1lb3V0LnByb3RvdHlwZS5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9jbGVhckZuLmNhbGwoc2NvcGUsIHRoaXMuX2lkKTtcbn07XG5cbi8vIERvZXMgbm90IHN0YXJ0IHRoZSB0aW1lLCBqdXN0IHNldHMgdXAgdGhlIG1lbWJlcnMgbmVlZGVkLlxuZXhwb3J0cy5lbnJvbGwgPSBmdW5jdGlvbihpdGVtLCBtc2Vjcykge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gbXNlY3M7XG59O1xuXG5leHBvcnRzLnVuZW5yb2xsID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG4gIGl0ZW0uX2lkbGVUaW1lb3V0ID0gLTE7XG59O1xuXG5leHBvcnRzLl91bnJlZkFjdGl2ZSA9IGV4cG9ydHMuYWN0aXZlID0gZnVuY3Rpb24oaXRlbSkge1xuICBjbGVhclRpbWVvdXQoaXRlbS5faWRsZVRpbWVvdXRJZCk7XG5cbiAgdmFyIG1zZWNzID0gaXRlbS5faWRsZVRpbWVvdXQ7XG4gIGlmIChtc2VjcyA+PSAwKSB7XG4gICAgaXRlbS5faWRsZVRpbWVvdXRJZCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gb25UaW1lb3V0KCkge1xuICAgICAgaWYgKGl0ZW0uX29uVGltZW91dClcbiAgICAgICAgaXRlbS5fb25UaW1lb3V0KCk7XG4gICAgfSwgbXNlY3MpO1xuICB9XG59O1xuXG4vLyBzZXRpbW1lZGlhdGUgYXR0YWNoZXMgaXRzZWxmIHRvIHRoZSBnbG9iYWwgb2JqZWN0XG5yZXF1aXJlKFwic2V0aW1tZWRpYXRlXCIpO1xuLy8gT24gc29tZSBleG90aWMgZW52aXJvbm1lbnRzLCBpdCdzIG5vdCBjbGVhciB3aGljaCBvYmplY3QgYHNldGltbWVkaWF0ZWAgd2FzXG4vLyBhYmxlIHRvIGluc3RhbGwgb250by4gIFNlYXJjaCBlYWNoIHBvc3NpYmlsaXR5IGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZVxuLy8gYHNldGltbWVkaWF0ZWAgbGlicmFyeS5cbmV4cG9ydHMuc2V0SW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBnbG9iYWwuc2V0SW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAodGhpcyAmJiB0aGlzLnNldEltbWVkaWF0ZSk7XG5leHBvcnRzLmNsZWFySW1tZWRpYXRlID0gKHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiICYmIHNlbGYuY2xlYXJJbW1lZGlhdGUpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgJiYgZ2xvYmFsLmNsZWFySW1tZWRpYXRlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzICYmIHRoaXMuY2xlYXJJbW1lZGlhdGUpO1xuIiwiKGZ1bmN0aW9uIChnbG9iYWwsIHVuZGVmaW5lZCkge1xuICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgaWYgKGdsb2JhbC5zZXRJbW1lZGlhdGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBuZXh0SGFuZGxlID0gMTsgLy8gU3BlYyBzYXlzIGdyZWF0ZXIgdGhhbiB6ZXJvXG4gICAgdmFyIHRhc2tzQnlIYW5kbGUgPSB7fTtcbiAgICB2YXIgY3VycmVudGx5UnVubmluZ0FUYXNrID0gZmFsc2U7XG4gICAgdmFyIGRvYyA9IGdsb2JhbC5kb2N1bWVudDtcbiAgICB2YXIgcmVnaXN0ZXJJbW1lZGlhdGU7XG5cbiAgICBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoY2FsbGJhY2spIHtcbiAgICAgIC8vIENhbGxiYWNrIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiBvciBhIHN0cmluZ1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNhbGxiYWNrID0gbmV3IEZ1bmN0aW9uKFwiXCIgKyBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgICAvLyBDb3B5IGZ1bmN0aW9uIGFyZ3VtZW50c1xuICAgICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpICsgMV07XG4gICAgICB9XG4gICAgICAvLyBTdG9yZSBhbmQgcmVnaXN0ZXIgdGhlIHRhc2tcbiAgICAgIHZhciB0YXNrID0geyBjYWxsYmFjazogY2FsbGJhY2ssIGFyZ3M6IGFyZ3MgfTtcbiAgICAgIHRhc2tzQnlIYW5kbGVbbmV4dEhhbmRsZV0gPSB0YXNrO1xuICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUobmV4dEhhbmRsZSk7XG4gICAgICByZXR1cm4gbmV4dEhhbmRsZSsrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGhhbmRsZSkge1xuICAgICAgICBkZWxldGUgdGFza3NCeUhhbmRsZVtoYW5kbGVdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bih0YXNrKSB7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHRhc2suY2FsbGJhY2s7XG4gICAgICAgIHZhciBhcmdzID0gdGFzay5hcmdzO1xuICAgICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgY2FsbGJhY2soYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJ1bklmUHJlc2VudChoYW5kbGUpIHtcbiAgICAgICAgLy8gRnJvbSB0aGUgc3BlYzogXCJXYWl0IHVudGlsIGFueSBpbnZvY2F0aW9ucyBvZiB0aGlzIGFsZ29yaXRobSBzdGFydGVkIGJlZm9yZSB0aGlzIG9uZSBoYXZlIGNvbXBsZXRlZC5cIlxuICAgICAgICAvLyBTbyBpZiB3ZSdyZSBjdXJyZW50bHkgcnVubmluZyBhIHRhc2ssIHdlJ2xsIG5lZWQgdG8gZGVsYXkgdGhpcyBpbnZvY2F0aW9uLlxuICAgICAgICBpZiAoY3VycmVudGx5UnVubmluZ0FUYXNrKSB7XG4gICAgICAgICAgICAvLyBEZWxheSBieSBkb2luZyBhIHNldFRpbWVvdXQuIHNldEltbWVkaWF0ZSB3YXMgdHJpZWQgaW5zdGVhZCwgYnV0IGluIEZpcmVmb3ggNyBpdCBnZW5lcmF0ZWQgYVxuICAgICAgICAgICAgLy8gXCJ0b28gbXVjaCByZWN1cnNpb25cIiBlcnJvci5cbiAgICAgICAgICAgIHNldFRpbWVvdXQocnVuSWZQcmVzZW50LCAwLCBoYW5kbGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHRhc2sgPSB0YXNrc0J5SGFuZGxlW2hhbmRsZV07XG4gICAgICAgICAgICBpZiAodGFzaykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IHRydWU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcnVuKHRhc2spO1xuICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW1tZWRpYXRlKGhhbmRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRseVJ1bm5pbmdBVGFzayA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGluc3RhbGxOZXh0VGlja0ltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7IHJ1bklmUHJlc2VudChoYW5kbGUpOyB9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5Vc2VQb3N0TWVzc2FnZSgpIHtcbiAgICAgICAgLy8gVGhlIHRlc3QgYWdhaW5zdCBgaW1wb3J0U2NyaXB0c2AgcHJldmVudHMgdGhpcyBpbXBsZW1lbnRhdGlvbiBmcm9tIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSB3ZWIgd29ya2VyLFxuICAgICAgICAvLyB3aGVyZSBgZ2xvYmFsLnBvc3RNZXNzYWdlYCBtZWFucyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgYW5kIGNhbid0IGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgICAgaWYgKGdsb2JhbC5wb3N0TWVzc2FnZSAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICAgICAgICAgIHZhciBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvbGRPbk1lc3NhZ2UgPSBnbG9iYWwub25tZXNzYWdlO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHBvc3RNZXNzYWdlSXNBc3luY2hyb25vdXMgPSBmYWxzZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoXCJcIiwgXCIqXCIpO1xuICAgICAgICAgICAgZ2xvYmFsLm9ubWVzc2FnZSA9IG9sZE9uTWVzc2FnZTtcbiAgICAgICAgICAgIHJldHVybiBwb3N0TWVzc2FnZUlzQXN5bmNocm9ub3VzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIC8vIEluc3RhbGxzIGFuIGV2ZW50IGhhbmRsZXIgb24gYGdsb2JhbGAgZm9yIHRoZSBgbWVzc2FnZWAgZXZlbnQ6IHNlZVxuICAgICAgICAvLyAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS93aW5kb3cucG9zdE1lc3NhZ2VcbiAgICAgICAgLy8gKiBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS9jb21tcy5odG1sI2Nyb3NzRG9jdW1lbnRNZXNzYWdlc1xuXG4gICAgICAgIHZhciBtZXNzYWdlUHJlZml4ID0gXCJzZXRJbW1lZGlhdGUkXCIgKyBNYXRoLnJhbmRvbSgpICsgXCIkXCI7XG4gICAgICAgIHZhciBvbkdsb2JhbE1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PT0gZ2xvYmFsICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGV2ZW50LmRhdGEgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhLmluZGV4T2YobWVzc2FnZVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBydW5JZlByZXNlbnQoK2V2ZW50LmRhdGEuc2xpY2UobWVzc2FnZVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UsIGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdsb2JhbC5hdHRhY2hFdmVudChcIm9ubWVzc2FnZVwiLCBvbkdsb2JhbE1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShtZXNzYWdlUHJlZml4ICsgaGFuZGxlLCBcIipcIik7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zdGFsbE1lc3NhZ2VDaGFubmVsSW1wbGVtZW50YXRpb24oKSB7XG4gICAgICAgIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgICAgIHZhciBoYW5kbGUgPSBldmVudC5kYXRhO1xuICAgICAgICAgICAgcnVuSWZQcmVzZW50KGhhbmRsZSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVnaXN0ZXJJbW1lZGlhdGUgPSBmdW5jdGlvbihoYW5kbGUpIHtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoaGFuZGxlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICB2YXIgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIHJlZ2lzdGVySW1tZWRpYXRlID0gZnVuY3Rpb24oaGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSA8c2NyaXB0PiBlbGVtZW50OyBpdHMgcmVhZHlzdGF0ZWNoYW5nZSBldmVudCB3aWxsIGJlIGZpcmVkIGFzeW5jaHJvbm91c2x5IG9uY2UgaXQgaXMgaW5zZXJ0ZWRcbiAgICAgICAgICAgIC8vIGludG8gdGhlIGRvY3VtZW50LiBEbyBzbywgdGh1cyBxdWV1aW5nIHVwIHRoZSB0YXNrLiBSZW1lbWJlciB0byBjbGVhbiB1cCBvbmNlIGl0J3MgYmVlbiBjYWxsZWQuXG4gICAgICAgICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJ1bklmUHJlc2VudChoYW5kbGUpO1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgICAgICAgICBzY3JpcHQgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnN0YWxsU2V0VGltZW91dEltcGxlbWVudGF0aW9uKCkge1xuICAgICAgICByZWdpc3RlckltbWVkaWF0ZSA9IGZ1bmN0aW9uKGhhbmRsZSkge1xuICAgICAgICAgICAgc2V0VGltZW91dChydW5JZlByZXNlbnQsIDAsIGhhbmRsZSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSWYgc3VwcG9ydGVkLCB3ZSBzaG91bGQgYXR0YWNoIHRvIHRoZSBwcm90b3R5cGUgb2YgZ2xvYmFsLCBzaW5jZSB0aGF0IGlzIHdoZXJlIHNldFRpbWVvdXQgZXQgYWwuIGxpdmUuXG4gICAgdmFyIGF0dGFjaFRvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihnbG9iYWwpO1xuICAgIGF0dGFjaFRvID0gYXR0YWNoVG8gJiYgYXR0YWNoVG8uc2V0VGltZW91dCA/IGF0dGFjaFRvIDogZ2xvYmFsO1xuXG4gICAgLy8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBlLmcuIGJyb3dzZXJpZnkgZW52aXJvbm1lbnRzLlxuICAgIGlmICh7fS50b1N0cmluZy5jYWxsKGdsb2JhbC5wcm9jZXNzKSA9PT0gXCJbb2JqZWN0IHByb2Nlc3NdXCIpIHtcbiAgICAgICAgLy8gRm9yIE5vZGUuanMgYmVmb3JlIDAuOVxuICAgICAgICBpbnN0YWxsTmV4dFRpY2tJbXBsZW1lbnRhdGlvbigpO1xuXG4gICAgfSBlbHNlIGlmIChjYW5Vc2VQb3N0TWVzc2FnZSgpKSB7XG4gICAgICAgIC8vIEZvciBub24tSUUxMCBtb2Rlcm4gYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFBvc3RNZXNzYWdlSW1wbGVtZW50YXRpb24oKTtcblxuICAgIH0gZWxzZSBpZiAoZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKSB7XG4gICAgICAgIC8vIEZvciB3ZWIgd29ya2Vycywgd2hlcmUgc3VwcG9ydGVkXG4gICAgICAgIGluc3RhbGxNZXNzYWdlQ2hhbm5lbEltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2UgaWYgKGRvYyAmJiBcIm9ucmVhZHlzdGF0ZWNoYW5nZVwiIGluIGRvYy5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpKSB7XG4gICAgICAgIC8vIEZvciBJRSA24oCTOFxuICAgICAgICBpbnN0YWxsUmVhZHlTdGF0ZUNoYW5nZUltcGxlbWVudGF0aW9uKCk7XG5cbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3Igb2xkZXIgYnJvd3NlcnNcbiAgICAgICAgaW5zdGFsbFNldFRpbWVvdXRJbXBsZW1lbnRhdGlvbigpO1xuICAgIH1cblxuICAgIGF0dGFjaFRvLnNldEltbWVkaWF0ZSA9IHNldEltbWVkaWF0ZTtcbiAgICBhdHRhY2hUby5jbGVhckltbWVkaWF0ZSA9IGNsZWFySW1tZWRpYXRlO1xufSh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IHR5cGVvZiBnbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogZ2xvYmFsIDogc2VsZikpO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWwgcGxhY2Vob2xkZXIgdmFsdWUgdXNlZCB0byBzcGVjaWZ5IFwiZ2Fwc1wiIHdpdGhpbiBjdXJyaWVkIGZ1bmN0aW9ucyxcbiAqIGFsbG93aW5nIHBhcnRpYWwgYXBwbGljYXRpb24gb2YgYW55IGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cywgcmVnYXJkbGVzcyBvZlxuICogdGhlaXIgcG9zaXRpb25zLlxuICpcbiAqIElmIGBnYCBpcyBhIGN1cnJpZWQgdGVybmFyeSBmdW5jdGlvbiBhbmQgYF9gIGlzIGBSLl9fYCwgdGhlIGZvbGxvd2luZyBhcmVcbiAqIGVxdWl2YWxlbnQ6XG4gKlxuICogICAtIGBnKDEsIDIsIDMpYFxuICogICAtIGBnKF8sIDIsIDMpKDEpYFxuICogICAtIGBnKF8sIF8sIDMpKDEpKDIpYFxuICogICAtIGBnKF8sIF8sIDMpKDEsIDIpYFxuICogICAtIGBnKF8sIDIsIF8pKDEsIDMpYFxuICogICAtIGBnKF8sIDIpKDEpKDMpYFxuICogICAtIGBnKF8sIDIpKDEsIDMpYFxuICogICAtIGBnKF8sIDIpKF8sIDMpKDEpYFxuICpcbiAqIEBjb25zdGFudFxuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC42LjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBncmVldCA9IFIucmVwbGFjZSgne25hbWV9JywgUi5fXywgJ0hlbGxvLCB7bmFtZX0hJyk7XG4gKiAgICAgIGdyZWV0KCdBbGljZScpOyAvLz0+ICdIZWxsbywgQWxpY2UhJ1xuICovXG5tb2R1bGUuZXhwb3J0cyA9IHsnQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyJzogdHJ1ZX07XG4iLCJ2YXIgX2NvbnRhaW5zID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY29udGFpbnMnKTtcbnZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGlzIGVxdWFsLCBpbiBgUi5lcXVhbHNgIHRlcm1zLCB0byBhdFxuICogbGVhc3Qgb25lIGVsZW1lbnQgb2YgdGhlIGdpdmVuIGxpc3Q7IGBmYWxzZWAgb3RoZXJ3aXNlLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IExpc3RcbiAqIEBzaWcgYSAtPiBbYV0gLT4gQm9vbGVhblxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIGl0ZW0gdG8gY29tcGFyZSBhZ2FpbnN0LlxuICogQHBhcmFtIHtBcnJheX0gbGlzdCBUaGUgYXJyYXkgdG8gY29uc2lkZXIuXG4gKiBAcmV0dXJuIHtCb29sZWFufSBgdHJ1ZWAgaWYgYW4gZXF1aXZhbGVudCBpdGVtIGlzIGluIHRoZSBsaXN0LCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEBzZWUgUi5hbnlcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmNvbnRhaW5zKDMsIFsxLCAyLCAzXSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmNvbnRhaW5zKDQsIFsxLCAyLCAzXSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5jb250YWlucyh7IG5hbWU6ICdGcmVkJyB9LCBbeyBuYW1lOiAnRnJlZCcgfV0pOyAvLz0+IHRydWVcbiAqICAgICAgUi5jb250YWlucyhbNDJdLCBbWzQyXV0pOyAvLz0+IHRydWVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKF9jb250YWlucyk7XG4iLCJ2YXIgX2luZGV4T2YgPSByZXF1aXJlKCcuL19pbmRleE9mJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY29udGFpbnMoYSwgbGlzdCkge1xuICByZXR1cm4gX2luZGV4T2YobGlzdCwgYSwgMCkgPj0gMDtcbn07XG4iLCJ2YXIgZXF1YWxzID0gcmVxdWlyZSgnLi4vZXF1YWxzJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfaW5kZXhPZihsaXN0LCBhLCBpZHgpIHtcbiAgdmFyIGluZiwgaXRlbTtcbiAgLy8gQXJyYXkucHJvdG90eXBlLmluZGV4T2YgZG9lc24ndCBleGlzdCBiZWxvdyBJRTlcbiAgaWYgKHR5cGVvZiBsaXN0LmluZGV4T2YgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBhKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICBpZiAoYSA9PT0gMCkge1xuICAgICAgICAgIC8vIG1hbnVhbGx5IGNyYXdsIHRoZSBsaXN0IHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gKzAgYW5kIC0wXG4gICAgICAgICAgaW5mID0gMSAvIGE7XG4gICAgICAgICAgd2hpbGUgKGlkeCA8IGxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVtID0gbGlzdFtpZHhdO1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IDAgJiYgMSAvIGl0ZW0gPT09IGluZikge1xuICAgICAgICAgICAgICByZXR1cm4gaWR4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWR4ICs9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfSBlbHNlIGlmIChhICE9PSBhKSB7XG4gICAgICAgICAgLy8gTmFOXG4gICAgICAgICAgd2hpbGUgKGlkeCA8IGxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICBpdGVtID0gbGlzdFtpZHhdO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyAmJiBpdGVtICE9PSBpdGVtKSB7XG4gICAgICAgICAgICAgIHJldHVybiBpZHg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZHggKz0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vbi16ZXJvIG51bWJlcnMgY2FuIHV0aWxpc2UgU2V0XG4gICAgICAgIHJldHVybiBsaXN0LmluZGV4T2YoYSwgaWR4KTtcblxuICAgICAgLy8gYWxsIHRoZXNlIHR5cGVzIGNhbiB1dGlsaXNlIFNldFxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIGxpc3QuaW5kZXhPZihhLCBpZHgpO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoYSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIG51bGwgY2FuIHV0aWxpc2UgU2V0XG4gICAgICAgICAgcmV0dXJuIGxpc3QuaW5kZXhPZihhLCBpZHgpO1xuICAgICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGFueXRoaW5nIGVsc2Ugbm90IGNvdmVyZWQgYWJvdmUsIGRlZmVyIHRvIFIuZXF1YWxzXG4gIHdoaWxlIChpZHggPCBsaXN0Lmxlbmd0aCkge1xuICAgIGlmIChlcXVhbHMobGlzdFtpZHhdLCBhKSkge1xuICAgICAgcmV0dXJuIGlkeDtcbiAgICB9XG4gICAgaWR4ICs9IDE7XG4gIH1cbiAgcmV0dXJuIC0xO1xufTtcbiIsInZhciBfYXJyYXlGcm9tSXRlcmF0b3IgPSByZXF1aXJlKCcuL19hcnJheUZyb21JdGVyYXRvcicpO1xudmFyIF9mdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuL19mdW5jdGlvbk5hbWUnKTtcbnZhciBfaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgaWRlbnRpY2FsID0gcmVxdWlyZSgnLi4vaWRlbnRpY2FsJyk7XG52YXIga2V5cyA9IHJlcXVpcmUoJy4uL2tleXMnKTtcbnZhciB0eXBlID0gcmVxdWlyZSgnLi4vdHlwZScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2VxdWFscyhhLCBiLCBzdGFja0EsIHN0YWNrQikge1xuICBpZiAoaWRlbnRpY2FsKGEsIGIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZShhKSAhPT0gdHlwZShiKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgYi5lcXVhbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZW9mIGEuZXF1YWxzID09PSAnZnVuY3Rpb24nICYmIGEuZXF1YWxzKGIpICYmXG4gICAgICAgICAgIHR5cGVvZiBiLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJyAmJiBiLmVxdWFscyhhKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZShhKSkge1xuICAgIGNhc2UgJ0FyZ3VtZW50cyc6XG4gICAgY2FzZSAnQXJyYXknOlxuICAgIGNhc2UgJ09iamVjdCc6XG4gICAgICBpZiAodHlwZW9mIGEuY29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgICAgICBfZnVuY3Rpb25OYW1lKGEuY29uc3RydWN0b3IpID09PSAnUHJvbWlzZScpIHtcbiAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdCb29sZWFuJzpcbiAgICBjYXNlICdOdW1iZXInOlxuICAgIGNhc2UgJ1N0cmluZyc6XG4gICAgICBpZiAoISh0eXBlb2YgYSA9PT0gdHlwZW9mIGIgJiYgaWRlbnRpY2FsKGEudmFsdWVPZigpLCBiLnZhbHVlT2YoKSkpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0RhdGUnOlxuICAgICAgaWYgKCFpZGVudGljYWwoYS52YWx1ZU9mKCksIGIudmFsdWVPZigpKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdFcnJvcic6XG4gICAgICByZXR1cm4gYS5uYW1lID09PSBiLm5hbWUgJiYgYS5tZXNzYWdlID09PSBiLm1lc3NhZ2U7XG4gICAgY2FzZSAnUmVnRXhwJzpcbiAgICAgIGlmICghKGEuc291cmNlID09PSBiLnNvdXJjZSAmJlxuICAgICAgICAgICAgYS5nbG9iYWwgPT09IGIuZ2xvYmFsICYmXG4gICAgICAgICAgICBhLmlnbm9yZUNhc2UgPT09IGIuaWdub3JlQ2FzZSAmJlxuICAgICAgICAgICAgYS5tdWx0aWxpbmUgPT09IGIubXVsdGlsaW5lICYmXG4gICAgICAgICAgICBhLnN0aWNreSA9PT0gYi5zdGlja3kgJiZcbiAgICAgICAgICAgIGEudW5pY29kZSA9PT0gYi51bmljb2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdNYXAnOlxuICAgIGNhc2UgJ1NldCc6XG4gICAgICBpZiAoIV9lcXVhbHMoX2FycmF5RnJvbUl0ZXJhdG9yKGEuZW50cmllcygpKSwgX2FycmF5RnJvbUl0ZXJhdG9yKGIuZW50cmllcygpKSwgc3RhY2tBLCBzdGFja0IpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0ludDhBcnJheSc6XG4gICAgY2FzZSAnVWludDhBcnJheSc6XG4gICAgY2FzZSAnVWludDhDbGFtcGVkQXJyYXknOlxuICAgIGNhc2UgJ0ludDE2QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQxNkFycmF5JzpcbiAgICBjYXNlICdJbnQzMkFycmF5JzpcbiAgICBjYXNlICdVaW50MzJBcnJheSc6XG4gICAgY2FzZSAnRmxvYXQzMkFycmF5JzpcbiAgICBjYXNlICdGbG9hdDY0QXJyYXknOlxuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOlxuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFZhbHVlcyBvZiBvdGhlciB0eXBlcyBhcmUgb25seSBlcXVhbCBpZiBpZGVudGljYWwuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBrZXlzKGEpO1xuICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzKGIpLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBpZHggPSBzdGFja0EubGVuZ3RoIC0gMTtcbiAgd2hpbGUgKGlkeCA+PSAwKSB7XG4gICAgaWYgKHN0YWNrQVtpZHhdID09PSBhKSB7XG4gICAgICByZXR1cm4gc3RhY2tCW2lkeF0gPT09IGI7XG4gICAgfVxuICAgIGlkeCAtPSAxO1xuICB9XG5cbiAgc3RhY2tBLnB1c2goYSk7XG4gIHN0YWNrQi5wdXNoKGIpO1xuICBpZHggPSBrZXlzQS5sZW5ndGggLSAxO1xuICB3aGlsZSAoaWR4ID49IDApIHtcbiAgICB2YXIga2V5ID0ga2V5c0FbaWR4XTtcbiAgICBpZiAoIShfaGFzKGtleSwgYikgJiYgX2VxdWFscyhiW2tleV0sIGFba2V5XSwgc3RhY2tBLCBzdGFja0IpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZHggLT0gMTtcbiAgfVxuICBzdGFja0EucG9wKCk7XG4gIHN0YWNrQi5wb3AoKTtcbiAgcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfYXJyYXlGcm9tSXRlcmF0b3IoaXRlcikge1xuICB2YXIgbGlzdCA9IFtdO1xuICB2YXIgbmV4dDtcbiAgd2hpbGUgKCEobmV4dCA9IGl0ZXIubmV4dCgpKS5kb25lKSB7XG4gICAgbGlzdC5wdXNoKG5leHQudmFsdWUpO1xuICB9XG4gIHJldHVybiBsaXN0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2Z1bmN0aW9uTmFtZShmKSB7XG4gIC8vIFN0cmluZyh4ID0+IHgpIGV2YWx1YXRlcyB0byBcInggPT4geFwiLCBzbyB0aGUgcGF0dGVybiBtYXkgbm90IG1hdGNoLlxuICB2YXIgbWF0Y2ggPSBTdHJpbmcoZikubWF0Y2goL15mdW5jdGlvbiAoXFx3KikvKTtcbiAgcmV0dXJuIG1hdGNoID09IG51bGwgPyAnJyA6IG1hdGNoWzFdO1xufTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgaXRzIGFyZ3VtZW50cyBhcmUgaWRlbnRpY2FsLCBmYWxzZSBvdGhlcndpc2UuIFZhbHVlcyBhcmVcbiAqIGlkZW50aWNhbCBpZiB0aGV5IHJlZmVyZW5jZSB0aGUgc2FtZSBtZW1vcnkuIGBOYU5gIGlzIGlkZW50aWNhbCB0byBgTmFOYDtcbiAqIGAwYCBhbmQgYC0wYCBhcmUgbm90IGlkZW50aWNhbC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xNS4wXG4gKiBAY2F0ZWdvcnkgUmVsYXRpb25cbiAqIEBzaWcgYSAtPiBhIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7Kn0gYVxuICogQHBhcmFtIHsqfSBiXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBvID0ge307XG4gKiAgICAgIFIuaWRlbnRpY2FsKG8sIG8pOyAvLz0+IHRydWVcbiAqICAgICAgUi5pZGVudGljYWwoMSwgMSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmlkZW50aWNhbCgxLCAnMScpOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaWRlbnRpY2FsKFtdLCBbXSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pZGVudGljYWwoMCwgLTApOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaWRlbnRpY2FsKE5hTiwgTmFOKTsgLy89PiB0cnVlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBpZGVudGljYWwoYSwgYikge1xuICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gIGlmIChhID09PSBiKSB7IC8vIFN0ZXBzIDEtNSwgNy0xMFxuICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgcmV0dXJuIGEgIT09IDAgfHwgMSAvIGEgPT09IDEgLyBiO1xuICB9IGVsc2Uge1xuICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgcmV0dXJuIGEgIT09IGEgJiYgYiAhPT0gYjtcbiAgfVxufSk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xuXG5cbi8qKlxuICogR2l2ZXMgYSBzaW5nbGUtd29yZCBzdHJpbmcgZGVzY3JpcHRpb24gb2YgdGhlIChuYXRpdmUpIHR5cGUgb2YgYSB2YWx1ZSxcbiAqIHJldHVybmluZyBzdWNoIGFuc3dlcnMgYXMgJ09iamVjdCcsICdOdW1iZXInLCAnQXJyYXknLCBvciAnTnVsbCcuIERvZXMgbm90XG4gKiBhdHRlbXB0IHRvIGRpc3Rpbmd1aXNoIHVzZXIgT2JqZWN0IHR5cGVzIGFueSBmdXJ0aGVyLCByZXBvcnRpbmcgdGhlbSBhbGwgYXNcbiAqICdPYmplY3QnLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjguMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBzaWcgKCogLT4geyp9KSAtPiBTdHJpbmdcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi50eXBlKHt9KTsgLy89PiBcIk9iamVjdFwiXG4gKiAgICAgIFIudHlwZSgxKTsgLy89PiBcIk51bWJlclwiXG4gKiAgICAgIFIudHlwZShmYWxzZSk7IC8vPT4gXCJCb29sZWFuXCJcbiAqICAgICAgUi50eXBlKCdzJyk7IC8vPT4gXCJTdHJpbmdcIlxuICogICAgICBSLnR5cGUobnVsbCk7IC8vPT4gXCJOdWxsXCJcbiAqICAgICAgUi50eXBlKFtdKTsgLy89PiBcIkFycmF5XCJcbiAqICAgICAgUi50eXBlKC9bQS16XS8pOyAvLz0+IFwiUmVnRXhwXCJcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIHR5cGUodmFsKSB7XG4gIHJldHVybiB2YWwgPT09IG51bGwgICAgICA/ICdOdWxsJyAgICAgIDpcbiAgICAgICAgIHZhbCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOlxuICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkuc2xpY2UoOCwgLTEpO1xufSk7XG4iLCJ2YXIgX2NvbmNhdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2NvbmNhdCcpO1xudmFyIF9jcmVhdGVQYXJ0aWFsQXBwbGljYXRvciA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2NyZWF0ZVBhcnRpYWxBcHBsaWNhdG9yJyk7XG5cblxuLyoqXG4gKiBUYWtlcyBhIGZ1bmN0aW9uIGBmYCBhbmQgYSBsaXN0IG9mIGFyZ3VtZW50cywgYW5kIHJldHVybnMgYSBmdW5jdGlvbiBgZ2AuXG4gKiBXaGVuIGFwcGxpZWQsIGBnYCByZXR1cm5zIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgYGZgIHRvIHRoZSBhcmd1bWVudHNcbiAqIHByb3ZpZGVkIGluaXRpYWxseSBmb2xsb3dlZCBieSB0aGUgYXJndW1lbnRzIHByb3ZpZGVkIHRvIGBnYC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xMC4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgKChhLCBiLCBjLCAuLi4sIG4pIC0+IHgpIC0+IFthLCBiLCBjLCAuLi5dIC0+ICgoZCwgZSwgZiwgLi4uLCBuKSAtPiB4KVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZlxuICogQHBhcmFtIHtBcnJheX0gYXJnc1xuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAc2VlIFIucGFydGlhbFJpZ2h0XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIG11bHRpcGx5MiA9IChhLCBiKSA9PiBhICogYjtcbiAqICAgICAgdmFyIGRvdWJsZSA9IFIucGFydGlhbChtdWx0aXBseTIsIFsyXSk7XG4gKiAgICAgIGRvdWJsZSgyKTsgLy89PiA0XG4gKlxuICogICAgICB2YXIgZ3JlZXQgPSAoc2FsdXRhdGlvbiwgdGl0bGUsIGZpcnN0TmFtZSwgbGFzdE5hbWUpID0+XG4gKiAgICAgICAgc2FsdXRhdGlvbiArICcsICcgKyB0aXRsZSArICcgJyArIGZpcnN0TmFtZSArICcgJyArIGxhc3ROYW1lICsgJyEnO1xuICpcbiAqICAgICAgdmFyIHNheUhlbGxvID0gUi5wYXJ0aWFsKGdyZWV0LCBbJ0hlbGxvJ10pO1xuICogICAgICB2YXIgc2F5SGVsbG9Ub01zID0gUi5wYXJ0aWFsKHNheUhlbGxvLCBbJ01zLiddKTtcbiAqICAgICAgc2F5SGVsbG9Ub01zKCdKYW5lJywgJ0pvbmVzJyk7IC8vPT4gJ0hlbGxvLCBNcy4gSmFuZSBKb25lcyEnXG4gKiBAc3ltYiBSLnBhcnRpYWwoZiwgW2EsIGJdKShjLCBkKSA9IGYoYSwgYiwgYywgZClcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlUGFydGlhbEFwcGxpY2F0b3IoX2NvbmNhdCk7XG4iLCJ2YXIgX2FyaXR5ID0gcmVxdWlyZSgnLi9fYXJpdHknKTtcbnZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9fY3VycnkyJyk7XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfY3JlYXRlUGFydGlhbEFwcGxpY2F0b3IoY29uY2F0KSB7XG4gIHJldHVybiBfY3VycnkyKGZ1bmN0aW9uKGZuLCBhcmdzKSB7XG4gICAgcmV0dXJuIF9hcml0eShNYXRoLm1heCgwLCBmbi5sZW5ndGggLSBhcmdzLmxlbmd0aCksIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGNvbmNhdChhcmdzLCBhcmd1bWVudHMpKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuIiwidmFyIF9hcml0eSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2FyaXR5Jyk7XG52YXIgX3BpcGUgPSByZXF1aXJlKCcuL2ludGVybmFsL19waXBlJyk7XG52YXIgcmVkdWNlID0gcmVxdWlyZSgnLi9yZWR1Y2UnKTtcbnZhciB0YWlsID0gcmVxdWlyZSgnLi90YWlsJyk7XG5cblxuLyoqXG4gKiBQZXJmb3JtcyBsZWZ0LXRvLXJpZ2h0IGZ1bmN0aW9uIGNvbXBvc2l0aW9uLiBUaGUgbGVmdG1vc3QgZnVuY3Rpb24gbWF5IGhhdmVcbiAqIGFueSBhcml0eTsgdGhlIHJlbWFpbmluZyBmdW5jdGlvbnMgbXVzdCBiZSB1bmFyeS5cbiAqXG4gKiBJbiBzb21lIGxpYnJhcmllcyB0aGlzIGZ1bmN0aW9uIGlzIG5hbWVkIGBzZXF1ZW5jZWAuXG4gKlxuICogKipOb3RlOioqIFRoZSByZXN1bHQgb2YgcGlwZSBpcyBub3QgYXV0b21hdGljYWxseSBjdXJyaWVkLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnICgoKGEsIGIsIC4uLiwgbikgLT4gbyksIChvIC0+IHApLCAuLi4sICh4IC0+IHkpLCAoeSAtPiB6KSkgLT4gKChhLCBiLCAuLi4sIG4pIC0+IHopXG4gKiBAcGFyYW0gey4uLkZ1bmN0aW9ufSBmdW5jdGlvbnNcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQHNlZSBSLmNvbXBvc2VcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgZiA9IFIucGlwZShNYXRoLnBvdywgUi5uZWdhdGUsIFIuaW5jKTtcbiAqXG4gKiAgICAgIGYoMywgNCk7IC8vIC0oM140KSArIDFcbiAqIEBzeW1iIFIucGlwZShmLCBnLCBoKShhLCBiKSA9IGgoZyhmKGEsIGIpKSlcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwaXBlKCkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcigncGlwZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQnKTtcbiAgfVxuICByZXR1cm4gX2FyaXR5KGFyZ3VtZW50c1swXS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgcmVkdWNlKF9waXBlLCBhcmd1bWVudHNbMF0sIHRhaWwoYXJndW1lbnRzKSkpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX3BpcGUoZiwgZykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGcuY2FsbCh0aGlzLCBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBYV3JhcChmbikge1xuICAgIHRoaXMuZiA9IGZuO1xuICB9XG4gIFhXcmFwLnByb3RvdHlwZVsnQEB0cmFuc2R1Y2VyL2luaXQnXSA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5pdCBub3QgaW1wbGVtZW50ZWQgb24gWFdyYXAnKTtcbiAgfTtcbiAgWFdyYXAucHJvdG90eXBlWydAQHRyYW5zZHVjZXIvcmVzdWx0J10gPSBmdW5jdGlvbihhY2MpIHsgcmV0dXJuIGFjYzsgfTtcbiAgWFdyYXAucHJvdG90eXBlWydAQHRyYW5zZHVjZXIvc3RlcCddID0gZnVuY3Rpb24oYWNjLCB4KSB7XG4gICAgcmV0dXJuIHRoaXMuZihhY2MsIHgpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiBfeHdyYXAoZm4pIHsgcmV0dXJuIG5ldyBYV3JhcChmbik7IH07XG59KCkpO1xuIiwidmFyIF9hcml0eSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2FyaXR5Jyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgYm91bmQgdG8gYSBjb250ZXh0LlxuICogTm90ZTogYFIuYmluZGAgZG9lcyBub3QgcHJvdmlkZSB0aGUgYWRkaXRpb25hbCBhcmd1bWVudC1iaW5kaW5nIGNhcGFiaWxpdGllcyBvZlxuICogW0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9iaW5kKS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC42LjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHNpZyAoKiAtPiAqKSAtPiB7Kn0gLT4gKCogLT4gKilcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBiaW5kIHRvIGNvbnRleHRcbiAqIEBwYXJhbSB7T2JqZWN0fSB0aGlzT2JqIFRoZSBjb250ZXh0IHRvIGJpbmQgYGZuYCB0b1xuICogQHJldHVybiB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCB3aWxsIGV4ZWN1dGUgaW4gdGhlIGNvbnRleHQgb2YgYHRoaXNPYmpgLlxuICogQHNlZSBSLnBhcnRpYWxcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgbG9nID0gUi5iaW5kKGNvbnNvbGUubG9nLCBjb25zb2xlKTtcbiAqICAgICAgUi5waXBlKFIuYXNzb2MoJ2EnLCAyKSwgUi50YXAobG9nKSwgUi5hc3NvYygnYScsIDMpKSh7YTogMX0pOyAvLz0+IHthOiAzfVxuICogICAgICAvLyBsb2dzIHthOiAyfVxuICogQHN5bWIgUi5iaW5kKGYsIG8pKGEsIGIpID0gZi5jYWxsKG8sIGEsIGIpXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBiaW5kKGZuLCB0aGlzT2JqKSB7XG4gIHJldHVybiBfYXJpdHkoZm4ubGVuZ3RoLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc09iaiwgYXJndW1lbnRzKTtcbiAgfSk7XG59KTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgX2lzQXJyYXkgPSByZXF1aXJlKCcuL2ludGVybmFsL19pc0FycmF5Jyk7XG52YXIgX2lzU3RyaW5nID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNTdHJpbmcnKTtcblxuXG4vKipcbiAqIFRlc3RzIHdoZXRoZXIgb3Igbm90IGFuIG9iamVjdCBpcyBzaW1pbGFyIHRvIGFuIGFycmF5LlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjUuMFxuICogQGNhdGVnb3J5IFR5cGVcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnICogLT4gQm9vbGVhblxuICogQHBhcmFtIHsqfSB4IFRoZSBvYmplY3QgdG8gdGVzdC5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiBgeGAgaGFzIGEgbnVtZXJpYyBsZW5ndGggcHJvcGVydHkgYW5kIGV4dHJlbWUgaW5kaWNlcyBkZWZpbmVkOyBgZmFsc2VgIG90aGVyd2lzZS5cbiAqIEBkZXByZWNhdGVkIHNpbmNlIHYwLjIzLjBcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmlzQXJyYXlMaWtlKFtdKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuaXNBcnJheUxpa2UodHJ1ZSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pc0FycmF5TGlrZSh7fSk7IC8vPT4gZmFsc2VcbiAqICAgICAgUi5pc0FycmF5TGlrZSh7bGVuZ3RoOiAxMH0pOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXNBcnJheUxpa2UoezA6ICd6ZXJvJywgOTogJ25pbmUnLCBsZW5ndGg6IDEwfSk7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gaXNBcnJheUxpa2UoeCkge1xuICBpZiAoX2lzQXJyYXkoeCkpIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKCF4KSB7IHJldHVybiBmYWxzZTsgfVxuICBpZiAodHlwZW9mIHggIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuICBpZiAoX2lzU3RyaW5nKHgpKSB7IHJldHVybiBmYWxzZTsgfVxuICBpZiAoeC5ub2RlVHlwZSA9PT0gMSkgeyByZXR1cm4gISF4Lmxlbmd0aDsgfVxuICBpZiAoeC5sZW5ndGggPT09IDApIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKHgubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB4Lmhhc093blByb3BlcnR5KDApICYmIHguaGFzT3duUHJvcGVydHkoeC5sZW5ndGggLSAxKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59KTtcbiIsInZhciBfY2hlY2tGb3JNZXRob2QgPSByZXF1aXJlKCcuL2ludGVybmFsL19jaGVja0Zvck1ldGhvZCcpO1xudmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBzbGljZSA9IHJlcXVpcmUoJy4vc2xpY2UnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYWxsIGJ1dCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gbGlzdCBvciBzdHJpbmcgKG9yIG9iamVjdFxuICogd2l0aCBhIGB0YWlsYCBtZXRob2QpLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBzbGljZWAgbWV0aG9kIG9mIHRoZSBmaXJzdCBhcmd1bWVudCwgaWYgcHJlc2VudC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIFthXSAtPiBbYV1cbiAqIEBzaWcgU3RyaW5nIC0+IFN0cmluZ1xuICogQHBhcmFtIHsqfSBsaXN0XG4gKiBAcmV0dXJuIHsqfVxuICogQHNlZSBSLmhlYWQsIFIuaW5pdCwgUi5sYXN0XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi50YWlsKFsxLCAyLCAzXSk7ICAvLz0+IFsyLCAzXVxuICogICAgICBSLnRhaWwoWzEsIDJdKTsgICAgIC8vPT4gWzJdXG4gKiAgICAgIFIudGFpbChbMV0pOyAgICAgICAgLy89PiBbXVxuICogICAgICBSLnRhaWwoW10pOyAgICAgICAgIC8vPT4gW11cbiAqXG4gKiAgICAgIFIudGFpbCgnYWJjJyk7ICAvLz0+ICdiYydcbiAqICAgICAgUi50YWlsKCdhYicpOyAgIC8vPT4gJ2InXG4gKiAgICAgIFIudGFpbCgnYScpOyAgICAvLz0+ICcnXG4gKiAgICAgIFIudGFpbCgnJyk7ICAgICAvLz0+ICcnXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MShfY2hlY2tGb3JNZXRob2QoJ3RhaWwnLCBzbGljZSgxLCBJbmZpbml0eSkpKTtcbiIsInZhciBfY2hlY2tGb3JNZXRob2QgPSByZXF1aXJlKCcuL2ludGVybmFsL19jaGVja0Zvck1ldGhvZCcpO1xudmFyIF9jdXJyeTMgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVsZW1lbnRzIG9mIHRoZSBnaXZlbiBsaXN0IG9yIHN0cmluZyAob3Igb2JqZWN0IHdpdGggYSBgc2xpY2VgXG4gKiBtZXRob2QpIGZyb20gYGZyb21JbmRleGAgKGluY2x1c2l2ZSkgdG8gYHRvSW5kZXhgIChleGNsdXNpdmUpLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBzbGljZWAgbWV0aG9kIG9mIHRoZSB0aGlyZCBhcmd1bWVudCwgaWYgcHJlc2VudC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjRcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIE51bWJlciAtPiBOdW1iZXIgLT4gW2FdIC0+IFthXVxuICogQHNpZyBOdW1iZXIgLT4gTnVtYmVyIC0+IFN0cmluZyAtPiBTdHJpbmdcbiAqIEBwYXJhbSB7TnVtYmVyfSBmcm9tSW5kZXggVGhlIHN0YXJ0IGluZGV4IChpbmNsdXNpdmUpLlxuICogQHBhcmFtIHtOdW1iZXJ9IHRvSW5kZXggVGhlIGVuZCBpbmRleCAoZXhjbHVzaXZlKS5cbiAqIEBwYXJhbSB7Kn0gbGlzdFxuICogQHJldHVybiB7Kn1cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnNsaWNlKDEsIDMsIFsnYScsICdiJywgJ2MnLCAnZCddKTsgICAgICAgIC8vPT4gWydiJywgJ2MnXVxuICogICAgICBSLnNsaWNlKDEsIEluZmluaXR5LCBbJ2EnLCAnYicsICdjJywgJ2QnXSk7IC8vPT4gWydiJywgJ2MnLCAnZCddXG4gKiAgICAgIFIuc2xpY2UoMCwgLTEsIFsnYScsICdiJywgJ2MnLCAnZCddKTsgICAgICAgLy89PiBbJ2EnLCAnYicsICdjJ11cbiAqICAgICAgUi5zbGljZSgtMywgLTEsIFsnYScsICdiJywgJ2MnLCAnZCddKTsgICAgICAvLz0+IFsnYicsICdjJ11cbiAqICAgICAgUi5zbGljZSgwLCAzLCAncmFtZGEnKTsgICAgICAgICAgICAgICAgICAgICAvLz0+ICdyYW0nXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MyhfY2hlY2tGb3JNZXRob2QoJ3NsaWNlJywgZnVuY3Rpb24gc2xpY2UoZnJvbUluZGV4LCB0b0luZGV4LCBsaXN0KSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChsaXN0LCBmcm9tSW5kZXgsIHRvSW5kZXgpO1xufSkpO1xuIiwidmFyIF9jaGVja0Zvck1ldGhvZCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2NoZWNrRm9yTWV0aG9kJyk7XG52YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xuXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIGlucHV0IGBsaXN0YCwgY2FsbGluZyBhIHByb3ZpZGVkIGZ1bmN0aW9uIGBmbmAgZm9yIGVhY2hcbiAqIGVsZW1lbnQgaW4gdGhlIGxpc3QuXG4gKlxuICogYGZuYCByZWNlaXZlcyBvbmUgYXJndW1lbnQ6ICoodmFsdWUpKi5cbiAqXG4gKiBOb3RlOiBgUi5mb3JFYWNoYCBkb2VzIG5vdCBza2lwIGRlbGV0ZWQgb3IgdW5hc3NpZ25lZCBpbmRpY2VzIChzcGFyc2VcbiAqIGFycmF5cyksIHVubGlrZSB0aGUgbmF0aXZlIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kLiBGb3IgbW9yZVxuICogZGV0YWlscyBvbiB0aGlzIGJlaGF2aW9yLCBzZWU6XG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9mb3JFYWNoI0Rlc2NyaXB0aW9uXG4gKlxuICogQWxzbyBub3RlIHRoYXQsIHVubGlrZSBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgLCBSYW1kYSdzIGBmb3JFYWNoYCByZXR1cm5zXG4gKiB0aGUgb3JpZ2luYWwgYXJyYXkuIEluIHNvbWUgbGlicmFyaWVzIHRoaXMgZnVuY3Rpb24gaXMgbmFtZWQgYGVhY2hgLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBmb3JFYWNoYCBtZXRob2Qgb2YgdGhlIHNlY29uZCBhcmd1bWVudCwgaWYgcHJlc2VudC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjFcbiAqIEBjYXRlZ29yeSBMaXN0XG4gKiBAc2lnIChhIC0+ICopIC0+IFthXSAtPiBbYV1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBpbnZva2UuIFJlY2VpdmVzIG9uZSBhcmd1bWVudCwgYHZhbHVlYC5cbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgVGhlIGxpc3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHJldHVybiB7QXJyYXl9IFRoZSBvcmlnaW5hbCBsaXN0LlxuICogQHNlZSBSLmFkZEluZGV4XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIHByaW50WFBsdXNGaXZlID0geCA9PiBjb25zb2xlLmxvZyh4ICsgNSk7XG4gKiAgICAgIFIuZm9yRWFjaChwcmludFhQbHVzRml2ZSwgWzEsIDIsIDNdKTsgLy89PiBbMSwgMiwgM11cbiAqICAgICAgLy8gbG9ncyA2XG4gKiAgICAgIC8vIGxvZ3MgN1xuICogICAgICAvLyBsb2dzIDhcbiAqIEBzeW1iIFIuZm9yRWFjaChmLCBbYSwgYiwgY10pID0gW2EsIGIsIGNdXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihfY2hlY2tGb3JNZXRob2QoJ2ZvckVhY2gnLCBmdW5jdGlvbiBmb3JFYWNoKGZuLCBsaXN0KSB7XG4gIHZhciBsZW4gPSBsaXN0Lmxlbmd0aDtcbiAgdmFyIGlkeCA9IDA7XG4gIHdoaWxlIChpZHggPCBsZW4pIHtcbiAgICBmbihsaXN0W2lkeF0pO1xuICAgIGlkeCArPSAxO1xuICB9XG4gIHJldHVybiBsaXN0O1xufSkpO1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgb2JqZWN0IHRoYXQgZG9lcyBub3QgY29udGFpbiBhIGBwcm9wYCBwcm9wZXJ0eS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xMC4wXG4gKiBAY2F0ZWdvcnkgT2JqZWN0XG4gKiBAc2lnIFN0cmluZyAtPiB7azogdn0gLT4ge2s6IHZ9XG4gKiBAcGFyYW0ge1N0cmluZ30gcHJvcCBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gZGlzc29jaWF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBUaGUgb2JqZWN0IHRvIGNsb25lXG4gKiBAcmV0dXJuIHtPYmplY3R9IEEgbmV3IG9iamVjdCBlcXVpdmFsZW50IHRvIHRoZSBvcmlnaW5hbCBidXQgd2l0aG91dCB0aGUgc3BlY2lmaWVkIHByb3BlcnR5XG4gKiBAc2VlIFIuYXNzb2NcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmRpc3NvYygnYicsIHthOiAxLCBiOiAyLCBjOiAzfSk7IC8vPT4ge2E6IDEsIGM6IDN9XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBkaXNzb2MocHJvcCwgb2JqKSB7XG4gIHZhciByZXN1bHQgPSB7fTtcbiAgZm9yICh2YXIgcCBpbiBvYmopIHtcbiAgICByZXN1bHRbcF0gPSBvYmpbcF07XG4gIH1cbiAgZGVsZXRlIHJlc3VsdFtwcm9wXTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuIiwidmFyIF9hc3NpZ24gPSByZXF1aXJlKCcuL2ludGVybmFsL19hc3NpZ24nKTtcbnZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkyJyk7XG5cblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgb2JqZWN0IHdpdGggdGhlIG93biBwcm9wZXJ0aWVzIG9mIHRoZSBmaXJzdCBvYmplY3QgbWVyZ2VkIHdpdGhcbiAqIHRoZSBvd24gcHJvcGVydGllcyBvZiB0aGUgc2Vjb25kIG9iamVjdC4gSWYgYSBrZXkgZXhpc3RzIGluIGJvdGggb2JqZWN0cyxcbiAqIHRoZSB2YWx1ZSBmcm9tIHRoZSBzZWNvbmQgb2JqZWN0IHdpbGwgYmUgdXNlZC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBzaWcge2s6IHZ9IC0+IHtrOiB2fSAtPiB7azogdn1cbiAqIEBwYXJhbSB7T2JqZWN0fSBsXG4gKiBAcGFyYW0ge09iamVjdH0gclxuICogQHJldHVybiB7T2JqZWN0fVxuICogQHNlZSBSLm1lcmdlV2l0aCwgUi5tZXJnZVdpdGhLZXlcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLm1lcmdlKHsgJ25hbWUnOiAnZnJlZCcsICdhZ2UnOiAxMCB9LCB7ICdhZ2UnOiA0MCB9KTtcbiAqICAgICAgLy89PiB7ICduYW1lJzogJ2ZyZWQnLCAnYWdlJzogNDAgfVxuICpcbiAqICAgICAgdmFyIHJlc2V0VG9EZWZhdWx0ID0gUi5tZXJnZShSLl9fLCB7eDogMH0pO1xuICogICAgICByZXNldFRvRGVmYXVsdCh7eDogNSwgeTogMn0pOyAvLz0+IHt4OiAwLCB5OiAyfVxuICogQHN5bWIgUi5tZXJnZSh7IHg6IDEsIHk6IDIgfSwgeyB5OiA1LCB6OiAzIH0pID0geyB4OiAxLCB5OiA1LCB6OiAzIH1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIG1lcmdlKGwsIHIpIHtcbiAgcmV0dXJuIF9hc3NpZ24oe30sIGwsIHIpO1xufSk7XG4iLCJ2YXIgX29iamVjdEFzc2lnbiA9IHJlcXVpcmUoJy4vX29iamVjdEFzc2lnbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG4gIHR5cGVvZiBPYmplY3QuYXNzaWduID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmFzc2lnbiA6IF9vYmplY3RBc3NpZ247XG4iLCJ2YXIgX2hhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuXG4vLyBCYXNlZCBvbiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvYXNzaWduXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9vYmplY3RBc3NpZ24odGFyZ2V0KSB7XG4gIGlmICh0YXJnZXQgPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICB9XG5cbiAgdmFyIG91dHB1dCA9IE9iamVjdCh0YXJnZXQpO1xuICB2YXIgaWR4ID0gMTtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHdoaWxlIChpZHggPCBsZW5ndGgpIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2lkeF07XG4gICAgaWYgKHNvdXJjZSAhPSBudWxsKSB7XG4gICAgICBmb3IgKHZhciBuZXh0S2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoX2hhcyhuZXh0S2V5LCBzb3VyY2UpKSB7XG4gICAgICAgICAgb3V0cHV0W25leHRLZXldID0gc291cmNlW25leHRLZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlkeCArPSAxO1xuICB9XG4gIHJldHVybiBvdXRwdXQ7XG59O1xuIiwidmFyIF9jdXJyeTMgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTMnKTtcbnZhciBjdXJyeU4gPSByZXF1aXJlKCcuL2N1cnJ5TicpO1xuXG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBwcm9jZXNzIGVpdGhlciB0aGUgYG9uVHJ1ZWAgb3IgdGhlIGBvbkZhbHNlYFxuICogZnVuY3Rpb24gZGVwZW5kaW5nIHVwb24gdGhlIHJlc3VsdCBvZiB0aGUgYGNvbmRpdGlvbmAgcHJlZGljYXRlLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjguMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnICgqLi4uIC0+IEJvb2xlYW4pIC0+ICgqLi4uIC0+ICopIC0+ICgqLi4uIC0+ICopIC0+ICgqLi4uIC0+ICopXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjb25kaXRpb24gQSBwcmVkaWNhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG9uVHJ1ZSBBIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIHRoZSBgY29uZGl0aW9uYCBldmFsdWF0ZXMgdG8gYSB0cnV0aHkgdmFsdWUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBvbkZhbHNlIEEgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdGhlIGBjb25kaXRpb25gIGV2YWx1YXRlcyB0byBhIGZhbHN5IHZhbHVlLlxuICogQHJldHVybiB7RnVuY3Rpb259IEEgbmV3IHVuYXJ5IGZ1bmN0aW9uIHRoYXQgd2lsbCBwcm9jZXNzIGVpdGhlciB0aGUgYG9uVHJ1ZWAgb3IgdGhlIGBvbkZhbHNlYFxuICogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlcGVuZGluZyB1cG9uIHRoZSByZXN1bHQgb2YgdGhlIGBjb25kaXRpb25gIHByZWRpY2F0ZS5cbiAqIEBzZWUgUi51bmxlc3MsIFIud2hlblxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBpbmNDb3VudCA9IFIuaWZFbHNlKFxuICogICAgICAgIFIuaGFzKCdjb3VudCcpLFxuICogICAgICAgIFIub3ZlcihSLmxlbnNQcm9wKCdjb3VudCcpLCBSLmluYyksXG4gKiAgICAgICAgUi5hc3NvYygnY291bnQnLCAxKVxuICogICAgICApO1xuICogICAgICBpbmNDb3VudCh7fSk7ICAgICAgICAgICAvLz0+IHsgY291bnQ6IDEgfVxuICogICAgICBpbmNDb3VudCh7IGNvdW50OiAxIH0pOyAvLz0+IHsgY291bnQ6IDIgfVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTMoZnVuY3Rpb24gaWZFbHNlKGNvbmRpdGlvbiwgb25UcnVlLCBvbkZhbHNlKSB7XG4gIHJldHVybiBjdXJyeU4oTWF0aC5tYXgoY29uZGl0aW9uLmxlbmd0aCwgb25UcnVlLmxlbmd0aCwgb25GYWxzZS5sZW5ndGgpLFxuICAgIGZ1bmN0aW9uIF9pZkVsc2UoKSB7XG4gICAgICByZXR1cm4gY29uZGl0aW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgPyBvblRydWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA6IG9uRmFsc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gICk7XG59KTtcbiIsInZhciBfYXJpdHkgPSByZXF1aXJlKCcuL19hcml0eScpO1xudmFyIF9pc1BsYWNlaG9sZGVyID0gcmVxdWlyZSgnLi9faXNQbGFjZWhvbGRlcicpO1xuXG5cbi8qKlxuICogSW50ZXJuYWwgY3VycnlOIGZ1bmN0aW9uLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBwYXJhbSB7TnVtYmVyfSBsZW5ndGggVGhlIGFyaXR5IG9mIHRoZSBjdXJyaWVkIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtBcnJheX0gcmVjZWl2ZWQgQW4gYXJyYXkgb2YgYXJndW1lbnRzIHJlY2VpdmVkIHRodXMgZmFyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGN1cnJ5LlxuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBjdXJyaWVkIGZ1bmN0aW9uLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIF9jdXJyeU4obGVuZ3RoLCByZWNlaXZlZCwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBjb21iaW5lZCA9IFtdO1xuICAgIHZhciBhcmdzSWR4ID0gMDtcbiAgICB2YXIgbGVmdCA9IGxlbmd0aDtcbiAgICB2YXIgY29tYmluZWRJZHggPSAwO1xuICAgIHdoaWxlIChjb21iaW5lZElkeCA8IHJlY2VpdmVkLmxlbmd0aCB8fCBhcmdzSWR4IDwgYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIGlmIChjb21iaW5lZElkeCA8IHJlY2VpdmVkLmxlbmd0aCAmJlxuICAgICAgICAgICghX2lzUGxhY2Vob2xkZXIocmVjZWl2ZWRbY29tYmluZWRJZHhdKSB8fFxuICAgICAgICAgICBhcmdzSWR4ID49IGFyZ3VtZW50cy5sZW5ndGgpKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlY2VpdmVkW2NvbWJpbmVkSWR4XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGFyZ3VtZW50c1thcmdzSWR4XTtcbiAgICAgICAgYXJnc0lkeCArPSAxO1xuICAgICAgfVxuICAgICAgY29tYmluZWRbY29tYmluZWRJZHhdID0gcmVzdWx0O1xuICAgICAgaWYgKCFfaXNQbGFjZWhvbGRlcihyZXN1bHQpKSB7XG4gICAgICAgIGxlZnQgLT0gMTtcbiAgICAgIH1cbiAgICAgIGNvbWJpbmVkSWR4ICs9IDE7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0IDw9IDAgPyBmbi5hcHBseSh0aGlzLCBjb21iaW5lZClcbiAgICAgICAgICAgICAgICAgICAgIDogX2FyaXR5KGxlZnQsIF9jdXJyeU4obGVuZ3RoLCBjb21iaW5lZCwgZm4pKTtcbiAgfTtcbn07XG4iLCJ2YXIgX2N1cnJ5MyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MycpO1xuXG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNwZWNpZmllZCBvYmplY3QgcHJvcGVydHkgc2F0aXNmaWVzIHRoZSBnaXZlblxuICogcHJlZGljYXRlOyBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xNi4wXG4gKiBAY2F0ZWdvcnkgTG9naWNcbiAqIEBzaWcgKGEgLT4gQm9vbGVhbikgLT4gU3RyaW5nIC0+IHtTdHJpbmc6IGF9IC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBzZWUgUi5wcm9wRXEsIFIucHJvcElzXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5wcm9wU2F0aXNmaWVzKHggPT4geCA+IDAsICd4Jywge3g6IDEsIHk6IDJ9KTsgLy89PiB0cnVlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MyhmdW5jdGlvbiBwcm9wU2F0aXNmaWVzKHByZWQsIG5hbWUsIG9iaikge1xuICByZXR1cm4gcHJlZChvYmpbbmFtZV0pO1xufSk7XG4iLCJ2YXIgX2N1cnJ5MyA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MycpO1xudmFyIGlzID0gcmVxdWlyZSgnLi9pcycpO1xuXG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNwZWNpZmllZCBvYmplY3QgcHJvcGVydHkgaXMgb2YgdGhlIGdpdmVuIHR5cGU7XG4gKiBgZmFsc2VgIG90aGVyd2lzZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xNi4wXG4gKiBAY2F0ZWdvcnkgVHlwZVxuICogQHNpZyBUeXBlIC0+IFN0cmluZyAtPiBPYmplY3QgLT4gQm9vbGVhblxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHlwZVxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHNlZSBSLmlzLCBSLnByb3BTYXRpc2ZpZXNcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnByb3BJcyhOdW1iZXIsICd4Jywge3g6IDEsIHk6IDJ9KTsgIC8vPT4gdHJ1ZVxuICogICAgICBSLnByb3BJcyhOdW1iZXIsICd4Jywge3g6ICdmb28nfSk7ICAgIC8vPT4gZmFsc2VcbiAqICAgICAgUi5wcm9wSXMoTnVtYmVyLCAneCcsIHt9KTsgICAgICAgICAgICAvLz0+IGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MyhmdW5jdGlvbiBwcm9wSXModHlwZSwgbmFtZSwgb2JqKSB7XG4gIHJldHVybiBpcyh0eXBlLCBvYmpbbmFtZV0pO1xufSk7XG4iLCJ2YXIgX2N1cnJ5MiA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MicpO1xudmFyIF9oYXMgPSByZXF1aXJlKCcuL2ludGVybmFsL19oYXMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgd2hldGhlciBvciBub3QgYW4gb2JqZWN0IGhhcyBhbiBvd24gcHJvcGVydHkgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWVcbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBzaWcgcyAtPiB7czogeH0gLT4gQm9vbGVhblxuICogQHBhcmFtIHtTdHJpbmd9IHByb3AgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNoZWNrIGZvci5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IFdoZXRoZXIgdGhlIHByb3BlcnR5IGV4aXN0cy5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgaGFzTmFtZSA9IFIuaGFzKCduYW1lJyk7XG4gKiAgICAgIGhhc05hbWUoe25hbWU6ICdhbGljZSd9KTsgICAvLz0+IHRydWVcbiAqICAgICAgaGFzTmFtZSh7bmFtZTogJ2JvYid9KTsgICAgIC8vPT4gdHJ1ZVxuICogICAgICBoYXNOYW1lKHt9KTsgICAgICAgICAgICAgICAgLy89PiBmYWxzZVxuICpcbiAqICAgICAgdmFyIHBvaW50ID0ge3g6IDAsIHk6IDB9O1xuICogICAgICB2YXIgcG9pbnRIYXMgPSBSLmhhcyhSLl9fLCBwb2ludCk7XG4gKiAgICAgIHBvaW50SGFzKCd4Jyk7ICAvLz0+IHRydWVcbiAqICAgICAgcG9pbnRIYXMoJ3knKTsgIC8vPT4gdHJ1ZVxuICogICAgICBwb2ludEhhcygneicpOyAgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoX2hhcyk7XG4iLCJ2YXIgbGlmdCA9IHJlcXVpcmUoJy4vbGlmdCcpO1xudmFyIG5vdCA9IHJlcXVpcmUoJy4vbm90Jyk7XG5cblxuLyoqXG4gKiBUYWtlcyBhIGZ1bmN0aW9uIGBmYCBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIGBnYCBzdWNoIHRoYXQgaWYgY2FsbGVkIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzXG4gKiB3aGVuIGBmYCByZXR1cm5zIGEgXCJ0cnV0aHlcIiB2YWx1ZSwgYGdgIHJldHVybnMgYGZhbHNlYCBhbmQgd2hlbiBgZmAgcmV0dXJucyBhIFwiZmFsc3lcIiB2YWx1ZSBgZ2AgcmV0dXJucyBgdHJ1ZWAuXG4gKlxuICogYFIuY29tcGxlbWVudGAgbWF5IGJlIGFwcGxpZWQgdG8gYW55IGZ1bmN0b3JcbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xMi4wXG4gKiBAY2F0ZWdvcnkgTG9naWNcbiAqIEBzaWcgKCouLi4gLT4gKikgLT4gKCouLi4gLT4gQm9vbGVhbilcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICogQHNlZSBSLm5vdFxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBpc05vdE5pbCA9IFIuY29tcGxlbWVudChSLmlzTmlsKTtcbiAqICAgICAgaXNOaWwobnVsbCk7IC8vPT4gdHJ1ZVxuICogICAgICBpc05vdE5pbChudWxsKTsgLy89PiBmYWxzZVxuICogICAgICBpc05pbCg3KTsgLy89PiBmYWxzZVxuICogICAgICBpc05vdE5pbCg3KTsgLy89PiB0cnVlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gbGlmdChub3QpO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBsaWZ0TiA9IHJlcXVpcmUoJy4vbGlmdE4nKTtcblxuXG4vKipcbiAqIFwibGlmdHNcIiBhIGZ1bmN0aW9uIG9mIGFyaXR5ID4gMSBzbyB0aGF0IGl0IG1heSBcIm1hcCBvdmVyXCIgYSBsaXN0LCBGdW5jdGlvbiBvciBvdGhlclxuICogb2JqZWN0IHRoYXQgc2F0aXNmaWVzIHRoZSBbRmFudGFzeUxhbmQgQXBwbHkgc3BlY10oaHR0cHM6Ly9naXRodWIuY29tL2ZhbnRhc3lsYW5kL2ZhbnRhc3ktbGFuZCNhcHBseSkuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuNy4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgKCouLi4gLT4gKikgLT4gKFsqXS4uLiAtPiBbKl0pXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbGlmdCBpbnRvIGhpZ2hlciBjb250ZXh0XG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIGxpZnRlZCBmdW5jdGlvbi5cbiAqIEBzZWUgUi5saWZ0TlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIHZhciBtYWRkMyA9IFIubGlmdCgoYSwgYiwgYykgPT4gYSArIGIgKyBjKTtcbiAqXG4gKiAgICAgIG1hZGQzKFsxLDIsM10sIFsxLDIsM10sIFsxXSk7IC8vPT4gWzMsIDQsIDUsIDQsIDUsIDYsIDUsIDYsIDddXG4gKlxuICogICAgICB2YXIgbWFkZDUgPSBSLmxpZnQoKGEsIGIsIGMsIGQsIGUpID0+IGEgKyBiICsgYyArIGQgKyBlKTtcbiAqXG4gKiAgICAgIG1hZGQ1KFsxLDJdLCBbM10sIFs0LCA1XSwgWzZdLCBbNywgOF0pOyAvLz0+IFsyMSwgMjIsIDIyLCAyMywgMjIsIDIzLCAyMywgMjRdXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MShmdW5jdGlvbiBsaWZ0KGZuKSB7XG4gIHJldHVybiBsaWZ0Tihmbi5sZW5ndGgsIGZuKTtcbn0pO1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfcmVkdWNlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fcmVkdWNlJyk7XG52YXIgYXAgPSByZXF1aXJlKCcuL2FwJyk7XG52YXIgY3VycnlOID0gcmVxdWlyZSgnLi9jdXJyeU4nKTtcbnZhciBtYXAgPSByZXF1aXJlKCcuL21hcCcpO1xuXG5cbi8qKlxuICogXCJsaWZ0c1wiIGEgZnVuY3Rpb24gdG8gYmUgdGhlIHNwZWNpZmllZCBhcml0eSwgc28gdGhhdCBpdCBtYXkgXCJtYXAgb3ZlclwiIHRoYXRcbiAqIG1hbnkgbGlzdHMsIEZ1bmN0aW9ucyBvciBvdGhlciBvYmplY3RzIHRoYXQgc2F0aXNmeSB0aGUgW0ZhbnRhc3lMYW5kIEFwcGx5IHNwZWNdKGh0dHBzOi8vZ2l0aHViLmNvbS9mYW50YXN5bGFuZC9mYW50YXN5LWxhbmQjYXBwbHkpLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjcuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAc2lnIE51bWJlciAtPiAoKi4uLiAtPiAqKSAtPiAoWypdLi4uIC0+IFsqXSlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBsaWZ0IGludG8gaGlnaGVyIGNvbnRleHRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgbGlmdGVkIGZ1bmN0aW9uLlxuICogQHNlZSBSLmxpZnQsIFIuYXBcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgbWFkZDMgPSBSLmxpZnROKDMsICguLi5hcmdzKSA9PiBSLnN1bShhcmdzKSk7XG4gKiAgICAgIG1hZGQzKFsxLDIsM10sIFsxLDIsM10sIFsxXSk7IC8vPT4gWzMsIDQsIDUsIDQsIDUsIDYsIDUsIDYsIDddXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MihmdW5jdGlvbiBsaWZ0Tihhcml0eSwgZm4pIHtcbiAgdmFyIGxpZnRlZCA9IGN1cnJ5Tihhcml0eSwgZm4pO1xuICByZXR1cm4gY3VycnlOKGFyaXR5LCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gX3JlZHVjZShhcCwgbWFwKGxpZnRlZCwgYXJndW1lbnRzWzBdKSwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7XG4gIH0pO1xufSk7XG4iLCJ2YXIgX2NvbmNhdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2NvbmNhdCcpO1xudmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBfcmVkdWNlID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fcmVkdWNlJyk7XG52YXIgbWFwID0gcmVxdWlyZSgnLi9tYXAnKTtcblxuXG4vKipcbiAqIGFwIGFwcGxpZXMgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0byBhIGxpc3Qgb2YgdmFsdWVzLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBhcGAgbWV0aG9kIG9mIHRoZSBzZWNvbmQgYXJndW1lbnQsIGlmIHByZXNlbnQuIEFsc29cbiAqIHRyZWF0cyBjdXJyaWVkIGZ1bmN0aW9ucyBhcyBhcHBsaWNhdGl2ZXMuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMy4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgW2EgLT4gYl0gLT4gW2FdIC0+IFtiXVxuICogQHNpZyBBcHBseSBmID0+IGYgKGEgLT4gYikgLT4gZiBhIC0+IGYgYlxuICogQHBhcmFtIHtBcnJheX0gZm5zIEFuIGFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtBcnJheX0gdnMgQW4gYXJyYXkgb2YgdmFsdWVzXG4gKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgcmVzdWx0cyBvZiBhcHBseWluZyBlYWNoIG9mIGBmbnNgIHRvIGFsbCBvZiBgdnNgIGluIHR1cm4uXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5hcChbUi5tdWx0aXBseSgyKSwgUi5hZGQoMyldLCBbMSwyLDNdKTsgLy89PiBbMiwgNCwgNiwgNCwgNSwgNl1cbiAqICAgICAgUi5hcChbUi5jb25jYXQoJ3Rhc3R5ICcpLCBSLnRvVXBwZXJdLCBbJ3BpenphJywgJ3NhbGFkJ10pOyAvLz0+IFtcInRhc3R5IHBpenphXCIsIFwidGFzdHkgc2FsYWRcIiwgXCJQSVpaQVwiLCBcIlNBTEFEXCJdXG4gKiBAc3ltYiBSLmFwKFtmLCBnXSwgW2EsIGJdKSA9IFtmKGEpLCBmKGIpLCBnKGEpLCBnKGIpXVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gYXAoYXBwbGljYXRpdmUsIGZuKSB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIGFwcGxpY2F0aXZlLmFwID09PSAnZnVuY3Rpb24nID9cbiAgICAgIGFwcGxpY2F0aXZlLmFwKGZuKSA6XG4gICAgdHlwZW9mIGFwcGxpY2F0aXZlID09PSAnZnVuY3Rpb24nID9cbiAgICAgIGZ1bmN0aW9uKHgpIHsgcmV0dXJuIGFwcGxpY2F0aXZlKHgpKGZuKHgpKTsgfSA6XG4gICAgLy8gZWxzZVxuICAgICAgX3JlZHVjZShmdW5jdGlvbihhY2MsIGYpIHsgcmV0dXJuIF9jb25jYXQoYWNjLCBtYXAoZiwgZm4pKTsgfSwgW10sIGFwcGxpY2F0aXZlKVxuICApO1xufSk7XG4iLCJ2YXIgX2lzQXJyYXkgPSByZXF1aXJlKCcuL19pc0FycmF5Jyk7XG52YXIgX2lzVHJhbnNmb3JtZXIgPSByZXF1aXJlKCcuL19pc1RyYW5zZm9ybWVyJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBkaXNwYXRjaGVzIHdpdGggZGlmZmVyZW50IHN0cmF0ZWdpZXMgYmFzZWQgb24gdGhlXG4gKiBvYmplY3QgaW4gbGlzdCBwb3NpdGlvbiAobGFzdCBhcmd1bWVudCkuIElmIGl0IGlzIGFuIGFycmF5LCBleGVjdXRlcyBbZm5dLlxuICogT3RoZXJ3aXNlLCBpZiBpdCBoYXMgYSBmdW5jdGlvbiB3aXRoIG9uZSBvZiB0aGUgZ2l2ZW4gbWV0aG9kIG5hbWVzLCBpdCB3aWxsXG4gKiBleGVjdXRlIHRoYXQgZnVuY3Rpb24gKGZ1bmN0b3IgY2FzZSkuIE90aGVyd2lzZSwgaWYgaXQgaXMgYSB0cmFuc2Zvcm1lcixcbiAqIHVzZXMgdHJhbnNkdWNlciBbeGZdIHRvIHJldHVybiBhIG5ldyB0cmFuc2Zvcm1lciAodHJhbnNkdWNlciBjYXNlKS5cbiAqIE90aGVyd2lzZSwgaXQgd2lsbCBkZWZhdWx0IHRvIGV4ZWN1dGluZyBbZm5dLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBtZXRob2ROYW1lcyBwcm9wZXJ0aWVzIHRvIGNoZWNrIGZvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0geGYgdHJhbnNkdWNlciB0byBpbml0aWFsaXplIGlmIG9iamVjdCBpcyB0cmFuc2Zvcm1lclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gZGVmYXVsdCByYW1kYSBpbXBsZW1lbnRhdGlvblxuICogQHJldHVybiB7RnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCBkaXNwYXRjaGVzIG9uIG9iamVjdCBpbiBsaXN0IHBvc2l0aW9uXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2Rpc3BhdGNoYWJsZShtZXRob2ROYW1lcywgeGYsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZuKCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICB2YXIgb2JqID0gYXJncy5wb3AoKTtcbiAgICBpZiAoIV9pc0FycmF5KG9iaikpIHtcbiAgICAgIHZhciBpZHggPSAwO1xuICAgICAgd2hpbGUgKGlkeCA8IG1ldGhvZE5hbWVzLmxlbmd0aCkge1xuICAgICAgICBpZiAodHlwZW9mIG9ialttZXRob2ROYW1lc1tpZHhdXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBvYmpbbWV0aG9kTmFtZXNbaWR4XV0uYXBwbHkob2JqLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBpZHggKz0gMTtcbiAgICAgIH1cbiAgICAgIGlmIChfaXNUcmFuc2Zvcm1lcihvYmopKSB7XG4gICAgICAgIHZhciB0cmFuc2R1Y2VyID0geGYuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIHJldHVybiB0cmFuc2R1Y2VyKG9iaik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2lzVHJhbnNmb3JtZXIob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqWydAQHRyYW5zZHVjZXIvc3RlcCddID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX21hcChmbiwgZnVuY3Rvcikge1xuICB2YXIgaWR4ID0gMDtcbiAgdmFyIGxlbiA9IGZ1bmN0b3IubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gQXJyYXkobGVuKTtcbiAgd2hpbGUgKGlkeCA8IGxlbikge1xuICAgIHJlc3VsdFtpZHhdID0gZm4oZnVuY3RvcltpZHhdKTtcbiAgICBpZHggKz0gMTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBfY3VycnkyID0gcmVxdWlyZSgnLi9fY3VycnkyJyk7XG52YXIgX3hmQmFzZSA9IHJlcXVpcmUoJy4vX3hmQmFzZScpO1xuXG5cbm1vZHVsZS5leHBvcnRzID0gKGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBYTWFwKGYsIHhmKSB7XG4gICAgdGhpcy54ZiA9IHhmO1xuICAgIHRoaXMuZiA9IGY7XG4gIH1cbiAgWE1hcC5wcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9pbml0J10gPSBfeGZCYXNlLmluaXQ7XG4gIFhNYXAucHJvdG90eXBlWydAQHRyYW5zZHVjZXIvcmVzdWx0J10gPSBfeGZCYXNlLnJlc3VsdDtcbiAgWE1hcC5wcm90b3R5cGVbJ0BAdHJhbnNkdWNlci9zdGVwJ10gPSBmdW5jdGlvbihyZXN1bHQsIGlucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMueGZbJ0BAdHJhbnNkdWNlci9zdGVwJ10ocmVzdWx0LCB0aGlzLmYoaW5wdXQpKTtcbiAgfTtcblxuICByZXR1cm4gX2N1cnJ5MihmdW5jdGlvbiBfeG1hcChmLCB4ZikgeyByZXR1cm4gbmV3IFhNYXAoZiwgeGYpOyB9KTtcbn0oKSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcbiAgaW5pdDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMueGZbJ0BAdHJhbnNkdWNlci9pbml0J10oKTtcbiAgfSxcbiAgcmVzdWx0OiBmdW5jdGlvbihyZXN1bHQpIHtcbiAgICByZXR1cm4gdGhpcy54ZlsnQEB0cmFuc2R1Y2VyL3Jlc3VsdCddKHJlc3VsdCk7XG4gIH1cbn07XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xuXG5cbi8qKlxuICogQSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGAhYCBvZiBpdHMgYXJndW1lbnQuIEl0IHdpbGwgcmV0dXJuIGB0cnVlYCB3aGVuXG4gKiBwYXNzZWQgZmFsc2UteSB2YWx1ZSwgYW5kIGBmYWxzZWAgd2hlbiBwYXNzZWQgYSB0cnV0aC15IG9uZS5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4xLjBcbiAqIEBjYXRlZ29yeSBMb2dpY1xuICogQHNpZyAqIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7Kn0gYSBhbnkgdmFsdWVcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHRoZSBsb2dpY2FsIGludmVyc2Ugb2YgcGFzc2VkIGFyZ3VtZW50LlxuICogQHNlZSBSLmNvbXBsZW1lbnRcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLm5vdCh0cnVlKTsgLy89PiBmYWxzZVxuICogICAgICBSLm5vdChmYWxzZSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLm5vdCgwKTsgLy89PiB0cnVlXG4gKiAgICAgIFIubm90KDEpOyAvLz0+IGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gX2N1cnJ5MShmdW5jdGlvbiBub3QoYSkge1xuICByZXR1cm4gIWE7XG59KTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgZW1wdHkgPSByZXF1aXJlKCcuL2VtcHR5Jyk7XG52YXIgZXF1YWxzID0gcmVxdWlyZSgnLi9lcXVhbHMnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBpdHMgdHlwZSdzIGVtcHR5IHZhbHVlOyBgZmFsc2VgXG4gKiBvdGhlcndpc2UuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgTG9naWNcbiAqIEBzaWcgYSAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9IHhcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAc2VlIFIuZW1wdHlcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmlzRW1wdHkoWzEsIDIsIDNdKTsgICAvLz0+IGZhbHNlXG4gKiAgICAgIFIuaXNFbXB0eShbXSk7ICAgICAgICAgIC8vPT4gdHJ1ZVxuICogICAgICBSLmlzRW1wdHkoJycpOyAgICAgICAgICAvLz0+IHRydWVcbiAqICAgICAgUi5pc0VtcHR5KG51bGwpOyAgICAgICAgLy89PiBmYWxzZVxuICogICAgICBSLmlzRW1wdHkoe30pOyAgICAgICAgICAvLz0+IHRydWVcbiAqICAgICAgUi5pc0VtcHR5KHtsZW5ndGg6IDB9KTsgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gaXNFbXB0eSh4KSB7XG4gIHJldHVybiB4ICE9IG51bGwgJiYgZXF1YWxzKHgsIGVtcHR5KHgpKTtcbn0pO1xuIiwidmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBfaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2ludGVybmFsL19pc0FyZ3VtZW50cycpO1xudmFyIF9pc0FycmF5ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNBcnJheScpO1xudmFyIF9pc09iamVjdCA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2lzT2JqZWN0Jyk7XG52YXIgX2lzU3RyaW5nID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faXNTdHJpbmcnKTtcblxuXG4vKipcbiAqIFJldHVybnMgdGhlIGVtcHR5IHZhbHVlIG9mIGl0cyBhcmd1bWVudCdzIHR5cGUuIFJhbWRhIGRlZmluZXMgdGhlIGVtcHR5XG4gKiB2YWx1ZSBvZiBBcnJheSAoYFtdYCksIE9iamVjdCAoYHt9YCksIFN0cmluZyAoYCcnYCksIGFuZCBBcmd1bWVudHMuIE90aGVyXG4gKiB0eXBlcyBhcmUgc3VwcG9ydGVkIGlmIHRoZXkgZGVmaW5lIGA8VHlwZT4uZW1wdHlgIGFuZC9vclxuICogYDxUeXBlPi5wcm90b3R5cGUuZW1wdHlgLlxuICpcbiAqIERpc3BhdGNoZXMgdG8gdGhlIGBlbXB0eWAgbWV0aG9kIG9mIHRoZSBmaXJzdCBhcmd1bWVudCwgaWYgcHJlc2VudC5cbiAqXG4gKiBAZnVuY1xuICogQG1lbWJlck9mIFJcbiAqIEBzaW5jZSB2MC4zLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHNpZyBhIC0+IGFcbiAqIEBwYXJhbSB7Kn0geFxuICogQHJldHVybiB7Kn1cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmVtcHR5KEp1c3QoNDIpKTsgICAgICAvLz0+IE5vdGhpbmcoKVxuICogICAgICBSLmVtcHR5KFsxLCAyLCAzXSk7ICAgICAvLz0+IFtdXG4gKiAgICAgIFIuZW1wdHkoJ3VuaWNvcm5zJyk7ICAgIC8vPT4gJydcbiAqICAgICAgUi5lbXB0eSh7eDogMSwgeTogMn0pOyAgLy89PiB7fVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gZW1wdHkoeCkge1xuICByZXR1cm4gKFxuICAgICh4ICE9IG51bGwgJiYgdHlwZW9mIHguZW1wdHkgPT09ICdmdW5jdGlvbicpID9cbiAgICAgIHguZW1wdHkoKSA6XG4gICAgKHggIT0gbnVsbCAmJiB4LmNvbnN0cnVjdG9yICE9IG51bGwgJiYgdHlwZW9mIHguY29uc3RydWN0b3IuZW1wdHkgPT09ICdmdW5jdGlvbicpID9cbiAgICAgIHguY29uc3RydWN0b3IuZW1wdHkoKSA6XG4gICAgX2lzQXJyYXkoeCkgP1xuICAgICAgW10gOlxuICAgIF9pc1N0cmluZyh4KSA/XG4gICAgICAnJyA6XG4gICAgX2lzT2JqZWN0KHgpID9cbiAgICAgIHt9IDpcbiAgICBfaXNBcmd1bWVudHMoeCkgP1xuICAgICAgKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpIDpcbiAgICAvLyBlbHNlXG4gICAgICB2b2lkIDBcbiAgKTtcbn0pO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBfaXNPYmplY3QoeCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHgpID09PSAnW29iamVjdCBPYmplY3RdJztcbn07XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIGN1cnJ5TiA9IHJlcXVpcmUoJy4vY3VycnlOJyk7XG52YXIgbWF4ID0gcmVxdWlyZSgnLi9tYXgnKTtcbnZhciBwbHVjayA9IHJlcXVpcmUoJy4vcGx1Y2snKTtcbnZhciByZWR1Y2UgPSByZXF1aXJlKCcuL3JlZHVjZScpO1xuXG5cbi8qKlxuICogVGFrZXMgYSBsaXN0IG9mIHByZWRpY2F0ZXMgYW5kIHJldHVybnMgYSBwcmVkaWNhdGUgdGhhdCByZXR1cm5zIHRydWUgZm9yIGFcbiAqIGdpdmVuIGxpc3Qgb2YgYXJndW1lbnRzIGlmIGF0IGxlYXN0IG9uZSBvZiB0aGUgcHJvdmlkZWQgcHJlZGljYXRlcyBpc1xuICogc2F0aXNmaWVkIGJ5IHRob3NlIGFyZ3VtZW50cy5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gcmV0dXJuZWQgaXMgYSBjdXJyaWVkIGZ1bmN0aW9uIHdob3NlIGFyaXR5IG1hdGNoZXMgdGhhdCBvZiB0aGVcbiAqIGhpZ2hlc3QtYXJpdHkgcHJlZGljYXRlLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjkuMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnIFsoKi4uLiAtPiBCb29sZWFuKV0gLT4gKCouLi4gLT4gQm9vbGVhbilcbiAqIEBwYXJhbSB7QXJyYXl9IHByZWRpY2F0ZXMgQW4gYXJyYXkgb2YgcHJlZGljYXRlcyB0byBjaGVja1xuICogQHJldHVybiB7RnVuY3Rpb259IFRoZSBjb21iaW5lZCBwcmVkaWNhdGVcbiAqIEBzZWUgUi5hbGxQYXNzXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGlzQ2x1YiA9IFIucHJvcEVxKCdzdWl0JywgJ+KZoycpO1xuICogICAgICB2YXIgaXNTcGFkZSA9IFIucHJvcEVxKCdzdWl0JywgJ+KZoCcpO1xuICogICAgICB2YXIgaXNCbGFja0NhcmQgPSBSLmFueVBhc3MoW2lzQ2x1YiwgaXNTcGFkZV0pO1xuICpcbiAqICAgICAgaXNCbGFja0NhcmQoe3Jhbms6ICcxMCcsIHN1aXQ6ICfimaMnfSk7IC8vPT4gdHJ1ZVxuICogICAgICBpc0JsYWNrQ2FyZCh7cmFuazogJ1EnLCBzdWl0OiAn4pmgJ30pOyAvLz0+IHRydWVcbiAqICAgICAgaXNCbGFja0NhcmQoe3Jhbms6ICdRJywgc3VpdDogJ+KZpid9KTsgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gYW55UGFzcyhwcmVkcykge1xuICByZXR1cm4gY3VycnlOKHJlZHVjZShtYXgsIDAsIHBsdWNrKCdsZW5ndGgnLCBwcmVkcykpLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgaWR4ID0gMDtcbiAgICB2YXIgbGVuID0gcHJlZHMubGVuZ3RoO1xuICAgIHdoaWxlIChpZHggPCBsZW4pIHtcbiAgICAgIGlmIChwcmVkc1tpZHhdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZHggKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn0pO1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcbnZhciBtYXAgPSByZXF1aXJlKCcuL21hcCcpO1xudmFyIHByb3AgPSByZXF1aXJlKCcuL3Byb3AnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBuZXcgbGlzdCBieSBwbHVja2luZyB0aGUgc2FtZSBuYW1lZCBwcm9wZXJ0eSBvZmYgYWxsIG9iamVjdHMgaW5cbiAqIHRoZSBsaXN0IHN1cHBsaWVkLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IExpc3RcbiAqIEBzaWcgayAtPiBbe2s6IHZ9XSAtPiBbdl1cbiAqIEBwYXJhbSB7TnVtYmVyfFN0cmluZ30ga2V5IFRoZSBrZXkgbmFtZSB0byBwbHVjayBvZmYgb2YgZWFjaCBvYmplY3QuXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IFRoZSBhcnJheSB0byBjb25zaWRlci5cbiAqIEByZXR1cm4ge0FycmF5fSBUaGUgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoZSBnaXZlbiBrZXkuXG4gKiBAc2VlIFIucHJvcHNcbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLnBsdWNrKCdhJykoW3thOiAxfSwge2E6IDJ9XSk7IC8vPT4gWzEsIDJdXG4gKiAgICAgIFIucGx1Y2soMCkoW1sxLCAyXSwgWzMsIDRdXSk7ICAgLy89PiBbMSwgM11cbiAqIEBzeW1iIFIucGx1Y2soJ3gnLCBbe3g6IDEsIHk6IDJ9LCB7eDogMywgeTogNH0sIHt4OiA1LCB5OiA2fV0pID0gWzEsIDMsIDVdXG4gKiBAc3ltYiBSLnBsdWNrKDAsIFtbMSwgMl0sIFszLCA0XSwgWzUsIDZdXSkgPSBbMSwgMywgNV1cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkyKGZ1bmN0aW9uIHBsdWNrKHAsIGxpc3QpIHtcbiAgcmV0dXJuIG1hcChwcm9wKHApLCBsaXN0KTtcbn0pO1xuIiwidmFyIF9jdXJyeTIgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTInKTtcblxuXG4vKipcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlY29uZDtcbiAqIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjEuMFxuICogQGNhdGVnb3J5IFJlbGF0aW9uXG4gKiBAc2lnIE9yZCBhID0+IGEgLT4gYSAtPiBCb29sZWFuXG4gKiBAcGFyYW0ge051bWJlcn0gYVxuICogQHBhcmFtIHtOdW1iZXJ9IGJcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKiBAc2VlIFIubHRlXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5ndGUoMiwgMSk7IC8vPT4gdHJ1ZVxuICogICAgICBSLmd0ZSgyLCAyKTsgLy89PiB0cnVlXG4gKiAgICAgIFIuZ3RlKDIsIDMpOyAvLz0+IGZhbHNlXG4gKiAgICAgIFIuZ3RlKCdhJywgJ3onKTsgLy89PiBmYWxzZVxuICogICAgICBSLmd0ZSgneicsICdhJyk7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTIoZnVuY3Rpb24gZ3RlKGEsIGIpIHsgcmV0dXJuIGEgPj0gYjsgfSk7XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xudmFyIGN1cnJ5TiA9IHJlcXVpcmUoJy4vY3VycnlOJyk7XG5cblxuLyoqXG4gKiBSZXR1cm5zIGEgY3VycmllZCBlcXVpdmFsZW50IG9mIHRoZSBwcm92aWRlZCBmdW5jdGlvbi4gVGhlIGN1cnJpZWQgZnVuY3Rpb25cbiAqIGhhcyB0d28gdW51c3VhbCBjYXBhYmlsaXRpZXMuIEZpcnN0LCBpdHMgYXJndW1lbnRzIG5lZWRuJ3QgYmUgcHJvdmlkZWQgb25lXG4gKiBhdCBhIHRpbWUuIElmIGBmYCBpcyBhIHRlcm5hcnkgZnVuY3Rpb24gYW5kIGBnYCBpcyBgUi5jdXJyeShmKWAsIHRoZVxuICogZm9sbG93aW5nIGFyZSBlcXVpdmFsZW50OlxuICpcbiAqICAgLSBgZygxKSgyKSgzKWBcbiAqICAgLSBgZygxKSgyLCAzKWBcbiAqICAgLSBgZygxLCAyKSgzKWBcbiAqICAgLSBgZygxLCAyLCAzKWBcbiAqXG4gKiBTZWNvbmRseSwgdGhlIHNwZWNpYWwgcGxhY2Vob2xkZXIgdmFsdWUgYFIuX19gIG1heSBiZSB1c2VkIHRvIHNwZWNpZnlcbiAqIFwiZ2Fwc1wiLCBhbGxvd2luZyBwYXJ0aWFsIGFwcGxpY2F0aW9uIG9mIGFueSBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMsXG4gKiByZWdhcmRsZXNzIG9mIHRoZWlyIHBvc2l0aW9ucy4gSWYgYGdgIGlzIGFzIGFib3ZlIGFuZCBgX2AgaXMgYFIuX19gLCB0aGVcbiAqIGZvbGxvd2luZyBhcmUgZXF1aXZhbGVudDpcbiAqXG4gKiAgIC0gYGcoMSwgMiwgMylgXG4gKiAgIC0gYGcoXywgMiwgMykoMSlgXG4gKiAgIC0gYGcoXywgXywgMykoMSkoMilgXG4gKiAgIC0gYGcoXywgXywgMykoMSwgMilgXG4gKiAgIC0gYGcoXywgMikoMSkoMylgXG4gKiAgIC0gYGcoXywgMikoMSwgMylgXG4gKiAgIC0gYGcoXywgMikoXywgMykoMSlgXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgKCogLT4gYSkgLT4gKCogLT4gYSlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjdXJyeS5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIG5ldywgY3VycmllZCBmdW5jdGlvbi5cbiAqIEBzZWUgUi5jdXJyeU5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICB2YXIgYWRkRm91ck51bWJlcnMgPSAoYSwgYiwgYywgZCkgPT4gYSArIGIgKyBjICsgZDtcbiAqXG4gKiAgICAgIHZhciBjdXJyaWVkQWRkRm91ck51bWJlcnMgPSBSLmN1cnJ5KGFkZEZvdXJOdW1iZXJzKTtcbiAqICAgICAgdmFyIGYgPSBjdXJyaWVkQWRkRm91ck51bWJlcnMoMSwgMik7XG4gKiAgICAgIHZhciBnID0gZigzKTtcbiAqICAgICAgZyg0KTsgLy89PiAxMFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gY3VycnkoZm4pIHtcbiAgcmV0dXJuIGN1cnJ5Tihmbi5sZW5ndGgsIGZuKTtcbn0pO1xuIiwidmFyIGFsd2F5cyA9IHJlcXVpcmUoJy4vYWx3YXlzJyk7XG5cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgYHRydWVgLiBBbnkgcGFzc2VkIGluIHBhcmFtZXRlcnMgYXJlIGlnbm9yZWQuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuOS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgKiAtPiBCb29sZWFuXG4gKiBAcGFyYW0geyp9XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQHNlZSBSLmFsd2F5cywgUi5GXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgUi5UKCk7IC8vPT4gdHJ1ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGFsd2F5cyh0cnVlKTtcbiIsInZhciBfY3VycnkxID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9fY3VycnkxJyk7XG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9faWRlbnRpdHknKTtcblxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcgYnV0IHJldHVybiB0aGUgcGFyYW1ldGVyIHN1cHBsaWVkIHRvIGl0LiBHb29kXG4gKiBhcyBhIGRlZmF1bHQgb3IgcGxhY2Vob2xkZXIgZnVuY3Rpb24uXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuMS4wXG4gKiBAY2F0ZWdvcnkgRnVuY3Rpb25cbiAqIEBzaWcgYSAtPiBhXG4gKiBAcGFyYW0geyp9IHggVGhlIHZhbHVlIHRvIHJldHVybi5cbiAqIEByZXR1cm4geyp9IFRoZSBpbnB1dCB2YWx1ZSwgYHhgLlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICAgIFIuaWRlbnRpdHkoMSk7IC8vPT4gMVxuICpcbiAqICAgICAgdmFyIG9iaiA9IHt9O1xuICogICAgICBSLmlkZW50aXR5KG9iaikgPT09IG9iajsgLy89PiB0cnVlXG4gKiBAc3ltYiBSLmlkZW50aXR5KGEpID0gYVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoX2lkZW50aXR5KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gX2lkZW50aXR5KHgpIHsgcmV0dXJuIHg7IH07XG4iLCJ2YXIgX2N1cnJ5MSA9IHJlcXVpcmUoJy4vaW50ZXJuYWwvX2N1cnJ5MScpO1xuXG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBpbnB1dCB2YWx1ZSBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJPZiBSXG4gKiBAc2luY2UgdjAuOS4wXG4gKiBAY2F0ZWdvcnkgVHlwZVxuICogQHNpZyAqIC0+IEJvb2xlYW5cbiAqIEBwYXJhbSB7Kn0geCBUaGUgdmFsdWUgdG8gdGVzdC5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IGB0cnVlYCBpZiBgeGAgaXMgYHVuZGVmaW5lZGAgb3IgYG51bGxgLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogICAgICBSLmlzTmlsKG51bGwpOyAvLz0+IHRydWVcbiAqICAgICAgUi5pc05pbCh1bmRlZmluZWQpOyAvLz0+IHRydWVcbiAqICAgICAgUi5pc05pbCgwKTsgLy89PiBmYWxzZVxuICogICAgICBSLmlzTmlsKFtdKTsgLy89PiBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IF9jdXJyeTEoZnVuY3Rpb24gaXNOaWwoeCkgeyByZXR1cm4geCA9PSBudWxsOyB9KTtcbiIsInZhciBfYXJpdHkgPSByZXF1aXJlKCcuL2ludGVybmFsL19hcml0eScpO1xudmFyIF9jdXJyeTEgPSByZXF1aXJlKCcuL2ludGVybmFsL19jdXJyeTEnKTtcbnZhciBtYXAgPSByZXF1aXJlKCcuL21hcCcpO1xudmFyIG1heCA9IHJlcXVpcmUoJy4vbWF4Jyk7XG52YXIgcmVkdWNlID0gcmVxdWlyZSgnLi9yZWR1Y2UnKTtcblxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiwgYGZuYCwgd2hpY2ggZW5jYXBzdWxhdGVzIGBpZi9lbHNlLCBpZi9lbHNlLCAuLi5gIGxvZ2ljLlxuICogYFIuY29uZGAgdGFrZXMgYSBsaXN0IG9mIFtwcmVkaWNhdGUsIHRyYW5zZm9ybWVyXSBwYWlycy4gQWxsIG9mIHRoZSBhcmd1bWVudHNcbiAqIHRvIGBmbmAgYXJlIGFwcGxpZWQgdG8gZWFjaCBvZiB0aGUgcHJlZGljYXRlcyBpbiB0dXJuIHVudGlsIG9uZSByZXR1cm5zIGFcbiAqIFwidHJ1dGh5XCIgdmFsdWUsIGF0IHdoaWNoIHBvaW50IGBmbmAgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGl0c1xuICogYXJndW1lbnRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRyYW5zZm9ybWVyLiBJZiBub25lIG9mIHRoZSBwcmVkaWNhdGVzXG4gKiBtYXRjaGVzLCBgZm5gIHJldHVybnMgdW5kZWZpbmVkLlxuICpcbiAqIEBmdW5jXG4gKiBAbWVtYmVyT2YgUlxuICogQHNpbmNlIHYwLjYuMFxuICogQGNhdGVnb3J5IExvZ2ljXG4gKiBAc2lnIFtbKCouLi4gLT4gQm9vbGVhbiksKCouLi4gLT4gKildXSAtPiAoKi4uLiAtPiAqKVxuICogQHBhcmFtIHtBcnJheX0gcGFpcnMgQSBsaXN0IG9mIFtwcmVkaWNhdGUsIHRyYW5zZm9ybWVyXVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKiBAZXhhbXBsZVxuICpcbiAqICAgICAgdmFyIGZuID0gUi5jb25kKFtcbiAqICAgICAgICBbUi5lcXVhbHMoMCksICAgUi5hbHdheXMoJ3dhdGVyIGZyZWV6ZXMgYXQgMMKwQycpXSxcbiAqICAgICAgICBbUi5lcXVhbHMoMTAwKSwgUi5hbHdheXMoJ3dhdGVyIGJvaWxzIGF0IDEwMMKwQycpXSxcbiAqICAgICAgICBbUi5ULCAgICAgICAgICAgdGVtcCA9PiAnbm90aGluZyBzcGVjaWFsIGhhcHBlbnMgYXQgJyArIHRlbXAgKyAnwrBDJ11cbiAqICAgICAgXSk7XG4gKiAgICAgIGZuKDApOyAvLz0+ICd3YXRlciBmcmVlemVzIGF0IDDCsEMnXG4gKiAgICAgIGZuKDUwKTsgLy89PiAnbm90aGluZyBzcGVjaWFsIGhhcHBlbnMgYXQgNTDCsEMnXG4gKiAgICAgIGZuKDEwMCk7IC8vPT4gJ3dhdGVyIGJvaWxzIGF0IDEwMMKwQydcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBfY3VycnkxKGZ1bmN0aW9uIGNvbmQocGFpcnMpIHtcbiAgdmFyIGFyaXR5ID0gcmVkdWNlKG1heCxcbiAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICBtYXAoZnVuY3Rpb24ocGFpcikgeyByZXR1cm4gcGFpclswXS5sZW5ndGg7IH0sIHBhaXJzKSk7XG4gIHJldHVybiBfYXJpdHkoYXJpdHksIGZ1bmN0aW9uKCkge1xuICAgIHZhciBpZHggPSAwO1xuICAgIHdoaWxlIChpZHggPCBwYWlycy5sZW5ndGgpIHtcbiAgICAgIGlmIChwYWlyc1tpZHhdWzBdLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHtcbiAgICAgICAgcmV0dXJuIHBhaXJzW2lkeF1bMV0uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIGlkeCArPSAxO1xuICAgIH1cbiAgfSk7XG59KTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvYXhpb3MnKTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9oZWxwZXJzL2JpbmQnKTtcbnZhciBBeGlvcyA9IHJlcXVpcmUoJy4vY29yZS9BeGlvcycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi9kZWZhdWx0cycpO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKiBAcmV0dXJuIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICB2YXIgY29udGV4dCA9IG5ldyBBeGlvcyhkZWZhdWx0Q29uZmlnKTtcbiAgdmFyIGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgY29udGV4dCB0byBpbnN0YW5jZVxuICB1dGlscy5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQpO1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuYXhpb3MuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gIHJldHVybiBjcmVhdGVJbnN0YW5jZSh1dGlscy5tZXJnZShkZWZhdWx0cywgaW5zdGFuY2VDb25maWcpKTtcbn07XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsJyk7XG5heGlvcy5DYW5jZWxUb2tlbiA9IHJlcXVpcmUoJy4vY2FuY2VsL0NhbmNlbFRva2VuJyk7XG5heGlvcy5pc0NhbmNlbCA9IHJlcXVpcmUoJy4vY2FuY2VsL2lzQ2FuY2VsJyk7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5heGlvcy5zcHJlYWQgPSByZXF1aXJlKCcuL2hlbHBlcnMvc3ByZWFkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiLyohXG4gKiBEZXRlcm1pbmUgaWYgYW4gb2JqZWN0IGlzIGEgQnVmZmVyXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuXG4vLyBUaGUgX2lzQnVmZmVyIGNoZWNrIGlzIGZvciBTYWZhcmkgNS03IHN1cHBvcnQsIGJlY2F1c2UgaXQncyBtaXNzaW5nXG4vLyBPYmplY3QucHJvdG90eXBlLmNvbnN0cnVjdG9yLiBSZW1vdmUgdGhpcyBldmVudHVhbGx5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPSBudWxsICYmIChpc0J1ZmZlcihvYmopIHx8IGlzU2xvd0J1ZmZlcihvYmopIHx8ICEhb2JqLl9pc0J1ZmZlcilcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKG9iaikge1xuICByZXR1cm4gISFvYmouY29uc3RydWN0b3IgJiYgdHlwZW9mIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciA9PT0gJ2Z1bmN0aW9uJyAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKVxufVxuXG4vLyBGb3IgTm9kZSB2MC4xMCBzdXBwb3J0LiBSZW1vdmUgdGhpcyBldmVudHVhbGx5LlxuZnVuY3Rpb24gaXNTbG93QnVmZmVyIChvYmopIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmoucmVhZEZsb2F0TEUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zbGljZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpc0J1ZmZlcihvYmouc2xpY2UoMCwgMCkpXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vLi4vZGVmYXVsdHMnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciBJbnRlcmNlcHRvck1hbmFnZXIgPSByZXF1aXJlKCcuL0ludGVyY2VwdG9yTWFuYWdlcicpO1xudmFyIGRpc3BhdGNoUmVxdWVzdCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hSZXF1ZXN0Jyk7XG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9pc0Fic29sdXRlVVJMJyk7XG52YXIgY29tYmluZVVSTHMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29tYmluZVVSTHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gaW5zdGFuY2VDb25maWcgVGhlIGRlZmF1bHQgY29uZmlnIGZvciB0aGUgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gQXhpb3MoaW5zdGFuY2VDb25maWcpIHtcbiAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICB0aGlzLmludGVyY2VwdG9ycyA9IHtcbiAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKCksXG4gICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICB9O1xufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICovXG5BeGlvcy5wcm90b3R5cGUucmVxdWVzdCA9IGZ1bmN0aW9uIHJlcXVlc3QoY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgIGNvbmZpZyA9IHV0aWxzLm1lcmdlKHtcbiAgICAgIHVybDogYXJndW1lbnRzWzBdXG4gICAgfSwgYXJndW1lbnRzWzFdKTtcbiAgfVxuXG4gIGNvbmZpZyA9IHV0aWxzLm1lcmdlKGRlZmF1bHRzLCB0aGlzLmRlZmF1bHRzLCB7IG1ldGhvZDogJ2dldCcgfSwgY29uZmlnKTtcbiAgY29uZmlnLm1ldGhvZCA9IGNvbmZpZy5tZXRob2QudG9Mb3dlckNhc2UoKTtcblxuICAvLyBTdXBwb3J0IGJhc2VVUkwgY29uZmlnXG4gIGlmIChjb25maWcuYmFzZVVSTCAmJiAhaXNBYnNvbHV0ZVVSTChjb25maWcudXJsKSkge1xuICAgIGNvbmZpZy51cmwgPSBjb21iaW5lVVJMcyhjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gIH1cblxuICAvLyBIb29rIHVwIGludGVyY2VwdG9ycyBtaWRkbGV3YXJlXG4gIHZhciBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QsIHVuZGVmaW5lZF07XG4gIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgY2hhaW4udW5zaGlmdChpbnRlcmNlcHRvci5mdWxmaWxsZWQsIGludGVyY2VwdG9yLnJlamVjdGVkKTtcbiAgfSk7XG5cbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICBjaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbi5zaGlmdCgpLCBjaGFpbi5zaGlmdCgpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QodXRpbHMubWVyZ2UoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHVybDogdXJsXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KHV0aWxzLm1lcmdlKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IGRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBub3JtYWxpemVIZWFkZXJOYW1lKGhlYWRlcnMsIG5vcm1hbGl6ZWROYW1lKSB7XG4gIHV0aWxzLmZvckVhY2goaGVhZGVycywgZnVuY3Rpb24gcHJvY2Vzc0hlYWRlcih2YWx1ZSwgbmFtZSkge1xuICAgIGlmIChuYW1lICE9PSBub3JtYWxpemVkTmFtZSAmJiBuYW1lLnRvVXBwZXJDYXNlKCkgPT09IG5vcm1hbGl6ZWROYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaGVhZGVyc1tuYW1lXTtcbiAgICB9XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNyZWF0ZUVycm9yID0gcmVxdWlyZSgnLi9jcmVhdGVFcnJvcicpO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIHZhciB2YWxpZGF0ZVN0YXR1cyA9IHJlc3BvbnNlLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztcbiAgLy8gTm90ZTogc3RhdHVzIGlzIG5vdCBleHBvc2VkIGJ5IFhEb21haW5SZXF1ZXN0XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KGNyZWF0ZUVycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIG51bGwsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVcGRhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZywgZXJyb3IgY29kZSwgYW5kIHJlc3BvbnNlLlxuICpcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yIFRoZSBlcnJvciB0byB1cGRhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXF1ZXN0XSBUaGUgcmVxdWVzdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVzcG9uc2VdIFRoZSByZXNwb25zZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGVycm9yLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVuaGFuY2VFcnJvcihlcnJvciwgY29uZmlnLCBjb2RlLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBlcnJvci5jb25maWcgPSBjb25maWc7XG4gIGlmIChjb2RlKSB7XG4gICAgZXJyb3IuY29kZSA9IGNvZGU7XG4gIH1cbiAgZXJyb3IucmVxdWVzdCA9IHJlcXVlc3Q7XG4gIGVycm9yLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gIHJldHVybiBlcnJvcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHZhbCkge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbCkuXG4gICAgcmVwbGFjZSgvJTQwL2dpLCAnQCcpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkVVJMKHVybCwgcGFyYW1zLCBwYXJhbXNTZXJpYWxpemVyKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICBpZiAoIXBhcmFtcykge1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICB2YXIgc2VyaWFsaXplZFBhcmFtcztcbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zU2VyaWFsaXplcihwYXJhbXMpO1xuICB9IGVsc2UgaWYgKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykpIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcnRzID0gW107XG5cbiAgICB1dGlscy5mb3JFYWNoKHBhcmFtcywgZnVuY3Rpb24gc2VyaWFsaXplKHZhbCwga2V5KSB7XG4gICAgICBpZiAodmFsID09PSBudWxsIHx8IHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICBrZXkgPSBrZXkgKyAnW10nO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXV0aWxzLmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXTtcbiAgICAgIH1cblxuICAgICAgdXRpbHMuZm9yRWFjaCh2YWwsIGZ1bmN0aW9uIHBhcnNlVmFsdWUodikge1xuICAgICAgICBpZiAodXRpbHMuaXNEYXRlKHYpKSB7XG4gICAgICAgICAgdiA9IHYudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIGlmICh1dGlscy5pc09iamVjdCh2KSkge1xuICAgICAgICAgIHYgPSBKU09OLnN0cmluZ2lmeSh2KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJ0cy5wdXNoKGVuY29kZShrZXkpICsgJz0nICsgZW5jb2RlKHYpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHBhcnRzLmpvaW4oJyYnKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGhlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICogQHJldHVybnMge09iamVjdH0gSGVhZGVycyBwYXJzZWQgaW50byBhbiBvYmplY3RcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZUhlYWRlcnMoaGVhZGVycykge1xuICB2YXIgcGFyc2VkID0ge307XG4gIHZhciBrZXk7XG4gIHZhciB2YWw7XG4gIHZhciBpO1xuXG4gIGlmICghaGVhZGVycykgeyByZXR1cm4gcGFyc2VkOyB9XG5cbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLnNwbGl0KCdcXG4nKSwgZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gdXRpbHMudHJpbShsaW5lLnN1YnN0cigwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc3Vic3RyKGkgKyAxKSk7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICB2YXIgbXNpZSA9IC8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIHZhciBvcmlnaW5VUkw7XG5cbiAgICAvKipcbiAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICAgICAgICAgIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lIDpcbiAgICAgICAgICAgICAgICAgICcvJyArIHVybFBhcnNpbmdOb2RlLnBhdGhuYW1lXG4gICAgICB9O1xuICAgIH1cblxuICAgIG9yaWdpblVSTCA9IHJlc29sdmVVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuXG4gICAgLyoqXG4gICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSByZXF1ZXN0VVJMIFRoZSBVUkwgdG8gdGVzdFxuICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICovXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlzVVJMU2FtZU9yaWdpbihyZXF1ZXN0VVJMKSB7XG4gICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgICAgcGFyc2VkLmhvc3QgPT09IG9yaWdpblVSTC5ob3N0KTtcbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnZzICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBidG9hIHBvbHlmaWxsIGZvciBJRTwxMCBjb3VydGVzeSBodHRwczovL2dpdGh1Yi5jb20vZGF2aWRjaGFtYmVycy9CYXNlNjQuanNcblxudmFyIGNoYXJzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztcblxuZnVuY3Rpb24gRSgpIHtcbiAgdGhpcy5tZXNzYWdlID0gJ1N0cmluZyBjb250YWlucyBhbiBpbnZhbGlkIGNoYXJhY3Rlcic7XG59XG5FLnByb3RvdHlwZSA9IG5ldyBFcnJvcjtcbkUucHJvdG90eXBlLmNvZGUgPSA1O1xuRS5wcm90b3R5cGUubmFtZSA9ICdJbnZhbGlkQ2hhcmFjdGVyRXJyb3InO1xuXG5mdW5jdGlvbiBidG9hKGlucHV0KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoaW5wdXQpO1xuICB2YXIgb3V0cHV0ID0gJyc7XG4gIGZvciAoXG4gICAgLy8gaW5pdGlhbGl6ZSByZXN1bHQgYW5kIGNvdW50ZXJcbiAgICB2YXIgYmxvY2ssIGNoYXJDb2RlLCBpZHggPSAwLCBtYXAgPSBjaGFycztcbiAgICAvLyBpZiB0aGUgbmV4dCBzdHIgaW5kZXggZG9lcyBub3QgZXhpc3Q6XG4gICAgLy8gICBjaGFuZ2UgdGhlIG1hcHBpbmcgdGFibGUgdG8gXCI9XCJcbiAgICAvLyAgIGNoZWNrIGlmIGQgaGFzIG5vIGZyYWN0aW9uYWwgZGlnaXRzXG4gICAgc3RyLmNoYXJBdChpZHggfCAwKSB8fCAobWFwID0gJz0nLCBpZHggJSAxKTtcbiAgICAvLyBcIjggLSBpZHggJSAxICogOFwiIGdlbmVyYXRlcyB0aGUgc2VxdWVuY2UgMiwgNCwgNiwgOFxuICAgIG91dHB1dCArPSBtYXAuY2hhckF0KDYzICYgYmxvY2sgPj4gOCAtIGlkeCAlIDEgKiA4KVxuICApIHtcbiAgICBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGlkeCArPSAzIC8gNCk7XG4gICAgaWYgKGNoYXJDb2RlID4gMHhGRikge1xuICAgICAgdGhyb3cgbmV3IEUoKTtcbiAgICB9XG4gICAgYmxvY2sgPSBibG9jayA8PCA4IHwgY2hhckNvZGU7XG4gIH1cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBidG9hO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICB2YXIgY29va2llID0gW107XG4gICAgICAgIGNvb2tpZS5wdXNoKG5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpKTtcblxuICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgY29va2llLnB1c2goJ3NlY3VyZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICB9LFxuXG4gICAgICByZWFkOiBmdW5jdGlvbiByZWFkKG5hbWUpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgcmV0dXJuIChtYXRjaCA/IGRlY29kZVVSSUNvbXBvbmVudChtYXRjaFszXSkgOiBudWxsKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KSgpIDpcblxuICAvLyBOb24gc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIChmdW5jdGlvbiBub25TdGFuZGFyZEJyb3dzZXJFbnYoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiBmdW5jdGlvbiB3cml0ZSgpIHt9LFxuICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHsgcmV0dXJuIG51bGw7IH0sXG4gICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgfTtcbiAgfSkoKVxuKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG5mdW5jdGlvbiBJbnRlcmNlcHRvck1hbmFnZXIoKSB7XG4gIHRoaXMuaGFuZGxlcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUudXNlID0gZnVuY3Rpb24gdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpIHtcbiAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICBmdWxmaWxsZWQ6IGZ1bGZpbGxlZCxcbiAgICByZWplY3RlZDogcmVqZWN0ZWRcbiAgfSk7XG4gIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG59O1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAqL1xuSW50ZXJjZXB0b3JNYW5hZ2VyLnByb3RvdHlwZS5lamVjdCA9IGZ1bmN0aW9uIGVqZWN0KGlkKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgfVxufTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICpcbiAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gIHV0aWxzLmZvckVhY2godGhpcy5oYW5kbGVycywgZnVuY3Rpb24gZm9yRWFjaEhhbmRsZXIoaCkge1xuICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICBmbihoKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcbnZhciB0cmFuc2Zvcm1EYXRhID0gcmVxdWlyZSgnLi90cmFuc2Zvcm1EYXRhJyk7XG52YXIgaXNDYW5jZWwgPSByZXF1aXJlKCcuLi9jYW5jZWwvaXNDYW5jZWwnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4uL2RlZmF1bHRzJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgLy8gRW5zdXJlIGhlYWRlcnMgZXhpc3RcbiAgY29uZmlnLmhlYWRlcnMgPSBjb25maWcuaGVhZGVycyB8fCB7fTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICBjb25maWcuZGF0YSxcbiAgICBjb25maWcuaGVhZGVycyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICBjb25maWcuaGVhZGVycyA9IHV0aWxzLm1lcmdlKFxuICAgIGNvbmZpZy5oZWFkZXJzLmNvbW1vbiB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVyc1tjb25maWcubWV0aG9kXSB8fCB7fSxcbiAgICBjb25maWcuaGVhZGVycyB8fCB7fVxuICApO1xuXG4gIHV0aWxzLmZvckVhY2goXG4gICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgZnVuY3Rpb24gY2xlYW5IZWFkZXJDb25maWcobWV0aG9kKSB7XG4gICAgICBkZWxldGUgY29uZmlnLmhlYWRlcnNbbWV0aG9kXTtcbiAgICB9XG4gICk7XG5cbiAgdmFyIGFkYXB0ZXIgPSBjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyO1xuXG4gIHJldHVybiBhZGFwdGVyKGNvbmZpZykudGhlbihmdW5jdGlvbiBvbkFkYXB0ZXJSZXNvbHV0aW9uKHJlc3BvbnNlKSB7XG4gICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgLy8gVHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcbiAgICByZXNwb25zZS5kYXRhID0gdHJhbnNmb3JtRGF0YShcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhKFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRyYW5zZm9ybURhdGEoZGF0YSwgaGVhZGVycywgZm5zKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuKGRhdGEsIGhlYWRlcnMpO1xuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZFxcK1xcLVxcLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8rJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIENhbmNlbCA9IHJlcXVpcmUoJy4vQ2FuY2VsJyk7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAY2xhc3NcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsVG9rZW4oZXhlY3V0b3IpIHtcbiAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgfVxuXG4gIHZhciByZXNvbHZlUHJvbWlzZTtcbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG4gIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlKSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbChtZXNzYWdlKTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICovXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZCA9IGZ1bmN0aW9uIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIHRocm93IHRoaXMucmVhc29uO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn07XG4iLCIvKiBnbG9iYWxzIF9fd2VicGFja19hbWRfb3B0aW9uc19fICovXG5tb2R1bGUuZXhwb3J0cyA9IF9fd2VicGFja19hbWRfb3B0aW9uc19fO1xuIiwidmFyIGJhc2VFYWNoID0gcmVxdWlyZSgnLi9fYmFzZUVhY2gnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5maWx0ZXJgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IGNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBmaWx0ZXJlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbHRlcihjb2xsZWN0aW9uLCBwcmVkaWNhdGUpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBiYXNlRWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbih2YWx1ZSwgaW5kZXgsIGNvbGxlY3Rpb24pIHtcbiAgICBpZiAocHJlZGljYXRlKHZhbHVlLCBpbmRleCwgY29sbGVjdGlvbikpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaWx0ZXI7XG4iLCJ2YXIgYmFzZUZvck93biA9IHJlcXVpcmUoJy4vX2Jhc2VGb3JPd24nKSxcbiAgICBjcmVhdGVCYXNlRWFjaCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUJhc2VFYWNoJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZm9yRWFjaGAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBpdGVyYXRlZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fE9iamVjdH0gUmV0dXJucyBgY29sbGVjdGlvbmAuXG4gKi9cbnZhciBiYXNlRWFjaCA9IGNyZWF0ZUJhc2VFYWNoKGJhc2VGb3JPd24pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VFYWNoO1xuIiwidmFyIGJhc2VGb3IgPSByZXF1aXJlKCcuL19iYXNlRm9yJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZvck93bmAgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZSBzaG9ydGhhbmRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VGb3JPd24ob2JqZWN0LCBpdGVyYXRlZSkge1xuICByZXR1cm4gb2JqZWN0ICYmIGJhc2VGb3Iob2JqZWN0LCBpdGVyYXRlZSwga2V5cyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvck93bjtcbiIsInZhciBjcmVhdGVCYXNlRm9yID0gcmVxdWlyZSgnLi9fY3JlYXRlQmFzZUZvcicpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBiYXNlRm9yT3duYCB3aGljaCBpdGVyYXRlcyBvdmVyIGBvYmplY3RgXG4gKiBwcm9wZXJ0aWVzIHJldHVybmVkIGJ5IGBrZXlzRnVuY2AgYW5kIGludm9rZXMgYGl0ZXJhdGVlYCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqIEl0ZXJhdGVlIGZ1bmN0aW9ucyBtYXkgZXhpdCBpdGVyYXRpb24gZWFybHkgYnkgZXhwbGljaXRseSByZXR1cm5pbmcgYGZhbHNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBrZXlzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBrZXlzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBgb2JqZWN0YC5cbiAqL1xudmFyIGJhc2VGb3IgPSBjcmVhdGVCYXNlRm9yKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUZvcjtcbiIsIi8qKlxuICogQ3JlYXRlcyBhIGJhc2UgZnVuY3Rpb24gZm9yIG1ldGhvZHMgbGlrZSBgXy5mb3JJbmAgYW5kIGBfLmZvck93bmAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYmFzZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQmFzZUZvcihmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgaXRlcmF0ZWUsIGtleXNGdW5jKSB7XG4gICAgdmFyIGluZGV4ID0gLTEsXG4gICAgICAgIGl0ZXJhYmxlID0gT2JqZWN0KG9iamVjdCksXG4gICAgICAgIHByb3BzID0ga2V5c0Z1bmMob2JqZWN0KSxcbiAgICAgICAgbGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcHNbZnJvbVJpZ2h0ID8gbGVuZ3RoIDogKytpbmRleF07XG4gICAgICBpZiAoaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VGb3I7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCIvKipcbiAqIFRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMTMuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5zdHViRmFsc2UpO1xuICogLy8gPT4gW2ZhbHNlLCBmYWxzZV1cbiAqL1xuZnVuY3Rpb24gc3R1YkZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3R1YkZhbHNlO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIGFyZ3NUYWcgPSAnW29iamVjdCBBcmd1bWVudHNdJyxcbiAgICBhcnJheVRhZyA9ICdbb2JqZWN0IEFycmF5XScsXG4gICAgYm9vbFRhZyA9ICdbb2JqZWN0IEJvb2xlYW5dJyxcbiAgICBkYXRlVGFnID0gJ1tvYmplY3QgRGF0ZV0nLFxuICAgIGVycm9yVGFnID0gJ1tvYmplY3QgRXJyb3JdJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBudW1iZXJUYWcgPSAnW29iamVjdCBOdW1iZXJdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICByZWdleHBUYWcgPSAnW29iamVjdCBSZWdFeHBdJyxcbiAgICBzZXRUYWcgPSAnW29iamVjdCBTZXRdJyxcbiAgICBzdHJpbmdUYWcgPSAnW29iamVjdCBTdHJpbmddJyxcbiAgICB3ZWFrTWFwVGFnID0gJ1tvYmplY3QgV2Vha01hcF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJyxcbiAgICBmbG9hdDMyVGFnID0gJ1tvYmplY3QgRmxvYXQzMkFycmF5XScsXG4gICAgZmxvYXQ2NFRhZyA9ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nLFxuICAgIGludDhUYWcgPSAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICBpbnQxNlRhZyA9ICdbb2JqZWN0IEludDE2QXJyYXldJyxcbiAgICBpbnQzMlRhZyA9ICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICB1aW50OFRhZyA9ICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICB1aW50OENsYW1wZWRUYWcgPSAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgIHVpbnQxNlRhZyA9ICdbb2JqZWN0IFVpbnQxNkFycmF5XScsXG4gICAgdWludDMyVGFnID0gJ1tvYmplY3QgVWludDMyQXJyYXldJztcblxuLyoqIFVzZWQgdG8gaWRlbnRpZnkgYHRvU3RyaW5nVGFnYCB2YWx1ZXMgb2YgdHlwZWQgYXJyYXlzLiAqL1xudmFyIHR5cGVkQXJyYXlUYWdzID0ge307XG50eXBlZEFycmF5VGFnc1tmbG9hdDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Zsb2F0NjRUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDhUYWddID0gdHlwZWRBcnJheVRhZ3NbaW50MTZUYWddID1cbnR5cGVkQXJyYXlUYWdzW2ludDMyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQ4VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50OENsYW1wZWRUYWddID0gdHlwZWRBcnJheVRhZ3NbdWludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1t1aW50MzJUYWddID0gdHJ1ZTtcbnR5cGVkQXJyYXlUYWdzW2FyZ3NUYWddID0gdHlwZWRBcnJheVRhZ3NbYXJyYXlUYWddID1cbnR5cGVkQXJyYXlUYWdzW2FycmF5QnVmZmVyVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Jvb2xUYWddID1cbnR5cGVkQXJyYXlUYWdzW2RhdGFWaWV3VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2RhdGVUYWddID1cbnR5cGVkQXJyYXlUYWdzW2Vycm9yVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2Z1bmNUYWddID1cbnR5cGVkQXJyYXlUYWdzW21hcFRhZ10gPSB0eXBlZEFycmF5VGFnc1tudW1iZXJUYWddID1cbnR5cGVkQXJyYXlUYWdzW29iamVjdFRhZ10gPSB0eXBlZEFycmF5VGFnc1tyZWdleHBUYWddID1cbnR5cGVkQXJyYXlUYWdzW3NldFRhZ10gPSB0eXBlZEFycmF5VGFnc1tzdHJpbmdUYWddID1cbnR5cGVkQXJyYXlUYWdzW3dlYWtNYXBUYWddID0gZmFsc2U7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNUeXBlZEFycmF5YCB3aXRob3V0IE5vZGUuanMgb3B0aW1pemF0aW9ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc1R5cGVkQXJyYXkodmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiZcbiAgICBpc0xlbmd0aCh2YWx1ZS5sZW5ndGgpICYmICEhdHlwZWRBcnJheVRhZ3NbYmFzZUdldFRhZyh2YWx1ZSldO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc1R5cGVkQXJyYXk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnVuYXJ5YCB3aXRob3V0IHN1cHBvcnQgZm9yIHN0b3JpbmcgbWV0YWRhdGEuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhcCBhcmd1bWVudHMgZm9yLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgY2FwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlVW5hcnkoZnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuYyh2YWx1ZSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVVuYXJ5O1xuIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZXhwb3J0c2AuICovXG52YXIgZnJlZUV4cG9ydHMgPSB0eXBlb2YgZXhwb3J0cyA9PSAnb2JqZWN0JyAmJiBleHBvcnRzICYmICFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgbW9kdWxlYC4gKi9cbnZhciBmcmVlTW9kdWxlID0gZnJlZUV4cG9ydHMgJiYgdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgIW1vZHVsZS5ub2RlVHlwZSAmJiBtb2R1bGU7XG5cbi8qKiBEZXRlY3QgdGhlIHBvcHVsYXIgQ29tbW9uSlMgZXh0ZW5zaW9uIGBtb2R1bGUuZXhwb3J0c2AuICovXG52YXIgbW9kdWxlRXhwb3J0cyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5leHBvcnRzID09PSBmcmVlRXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBwcm9jZXNzYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZVByb2Nlc3MgPSBtb2R1bGVFeHBvcnRzICYmIGZyZWVHbG9iYWwucHJvY2VzcztcblxuLyoqIFVzZWQgdG8gYWNjZXNzIGZhc3RlciBOb2RlLmpzIGhlbHBlcnMuICovXG52YXIgbm9kZVV0aWwgPSAoZnVuY3Rpb24oKSB7XG4gIHRyeSB7XG4gICAgLy8gVXNlIGB1dGlsLnR5cGVzYCBmb3IgTm9kZS5qcyAxMCsuXG4gICAgdmFyIHR5cGVzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLnJlcXVpcmUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlKCd1dGlsJykudHlwZXM7XG5cbiAgICBpZiAodHlwZXMpIHtcbiAgICAgIHJldHVybiB0eXBlcztcbiAgICB9XG5cbiAgICAvLyBMZWdhY3kgYHByb2Nlc3MuYmluZGluZygndXRpbCcpYCBmb3IgTm9kZS5qcyA8IDEwLlxuICAgIHJldHVybiBmcmVlUHJvY2VzcyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nICYmIGZyZWVQcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKTtcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gbm9kZVV0aWw7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgYmFzZUVhY2hgIG9yIGBiYXNlRWFjaFJpZ2h0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZWFjaEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciBhIGNvbGxlY3Rpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtmcm9tUmlnaHRdIFNwZWNpZnkgaXRlcmF0aW5nIGZyb20gcmlnaHQgdG8gbGVmdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGJhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJhc2VFYWNoKGVhY2hGdW5jLCBmcm9tUmlnaHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNvbGxlY3Rpb24sIGl0ZXJhdGVlKSB7XG4gICAgaWYgKGNvbGxlY3Rpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuICAgIGlmICghaXNBcnJheUxpa2UoY29sbGVjdGlvbikpIHtcbiAgICAgIHJldHVybiBlYWNoRnVuYyhjb2xsZWN0aW9uLCBpdGVyYXRlZSk7XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aCxcbiAgICAgICAgaW5kZXggPSBmcm9tUmlnaHQgPyBsZW5ndGggOiAtMSxcbiAgICAgICAgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG5cbiAgICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgICAgaWYgKGl0ZXJhdGVlKGl0ZXJhYmxlW2luZGV4XSwgaW5kZXgsIGl0ZXJhYmxlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2xsZWN0aW9uO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUJhc2VFYWNoO1xuIiwidmFyIGJhc2VNYXRjaGVzID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXMnKSxcbiAgICBiYXNlTWF0Y2hlc1Byb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBwcm9wZXJ0eSA9IHJlcXVpcmUoJy4vcHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXRlcmF0ZWU7XG4iLCJ2YXIgYmFzZUlzTWF0Y2ggPSByZXF1aXJlKCcuL19iYXNlSXNNYXRjaCcpLFxuICAgIGdldE1hdGNoRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hdGNoRGF0YScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzYCB3aGljaCBkb2Vzbid0IGNsb25lIGBzb3VyY2VgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXMoc291cmNlKSB7XG4gIHZhciBtYXRjaERhdGEgPSBnZXRNYXRjaERhdGEoc291cmNlKTtcbiAgaWYgKG1hdGNoRGF0YS5sZW5ndGggPT0gMSAmJiBtYXRjaERhdGFbMF1bMl0pIHtcbiAgICByZXR1cm4gbWF0Y2hlc1N0cmljdENvbXBhcmFibGUobWF0Y2hEYXRhWzBdWzBdLCBtYXRjaERhdGFbMF1bMV0pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09PSBzb3VyY2UgfHwgYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZU1hdGNoZXM7XG4iLCJ2YXIgU3RhY2sgPSByZXF1aXJlKCcuL19TdGFjaycpLFxuICAgIGJhc2VJc0VxdWFsID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWwnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTWF0Y2hgIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlIFRoZSBvYmplY3Qgb2YgcHJvcGVydHkgdmFsdWVzIHRvIG1hdGNoLlxuICogQHBhcmFtIHtBcnJheX0gbWF0Y2hEYXRhIFRoZSBwcm9wZXJ0eSBuYW1lcywgdmFsdWVzLCBhbmQgY29tcGFyZSBmbGFncyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBvYmplY3RgIGlzIGEgbWF0Y2gsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzTWF0Y2gob2JqZWN0LCBzb3VyY2UsIG1hdGNoRGF0YSwgY3VzdG9taXplcikge1xuICB2YXIgaW5kZXggPSBtYXRjaERhdGEubGVuZ3RoLFxuICAgICAgbGVuZ3RoID0gaW5kZXgsXG4gICAgICBub0N1c3RvbWl6ZXIgPSAhY3VzdG9taXplcjtcblxuICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm4gIWxlbmd0aDtcbiAgfVxuICBvYmplY3QgPSBPYmplY3Qob2JqZWN0KTtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgaWYgKChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSlcbiAgICAgICAgICA/IGRhdGFbMV0gIT09IG9iamVjdFtkYXRhWzBdXVxuICAgICAgICAgIDogIShkYXRhWzBdIGluIG9iamVjdClcbiAgICAgICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgZGF0YSA9IG1hdGNoRGF0YVtpbmRleF07XG4gICAgdmFyIGtleSA9IGRhdGFbMF0sXG4gICAgICAgIG9ialZhbHVlID0gb2JqZWN0W2tleV0sXG4gICAgICAgIHNyY1ZhbHVlID0gZGF0YVsxXTtcblxuICAgIGlmIChub0N1c3RvbWl6ZXIgJiYgZGF0YVsyXSkge1xuICAgICAgaWYgKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgIShrZXkgaW4gb2JqZWN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBzdGFjayA9IG5ldyBTdGFjaztcbiAgICAgIGlmIChjdXN0b21pemVyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjdXN0b21pemVyKG9ialZhbHVlLCBzcmNWYWx1ZSwga2V5LCBvYmplY3QsIHNvdXJjZSwgc3RhY2spO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzdWx0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcsIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICAgICAgOiByZXN1bHRcbiAgICAgICAgICApKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTWF0Y2g7XG4iLCIvKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkge1xuICB0aGlzLl9fZGF0YV9fID0gW107XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlQ2xlYXI7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzcGxpY2UgPSBhcnJheVByb3RvLnNwbGljZTtcblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIC0tdGhpcy5zaXplO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVEZWxldGU7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBjYWNoZSB2YWx1ZSBmb3IgYGtleWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGdldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUdldChrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICByZXR1cm4gaW5kZXggPCAwID8gdW5kZWZpbmVkIDogZGF0YVtpbmRleF1bMV07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlR2V0O1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVIYXM7XG4iLCJ2YXIgYXNzb2NJbmRleE9mID0gcmVxdWlyZSgnLi9fYXNzb2NJbmRleE9mJyk7XG5cbi8qKlxuICogU2V0cyB0aGUgbGlzdCBjYWNoZSBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbGlzdCBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgKyt0aGlzLnNpemU7XG4gICAgZGF0YS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0gZWxzZSB7XG4gICAgZGF0YVtpbmRleF1bMV0gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBsaXN0Q2FjaGVTZXQ7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyk7XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgc3RhY2suXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqL1xuZnVuY3Rpb24gc3RhY2tDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGU7XG4gIHRoaXMuc2l6ZSA9IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tDbGVhcjtcbiIsIi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICByZXN1bHQgPSBkYXRhWydkZWxldGUnXShrZXkpO1xuXG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0RlbGV0ZTtcbiIsIi8qKlxuICogR2V0cyB0aGUgc3RhY2sgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHN0YWNrR2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja0dldDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGEgc3RhY2sgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0hhcyhrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tIYXM7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgTWFwID0gcmVxdWlyZSgnLi9fTWFwJyksXG4gICAgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogVXNlZCBhcyB0aGUgc2l6ZSB0byBlbmFibGUgbGFyZ2UgYXJyYXkgb3B0aW1pemF0aW9ucy4gKi9cbnZhciBMQVJHRV9BUlJBWV9TSVpFID0gMjAwO1xuXG4vKipcbiAqIFNldHMgdGhlIHN0YWNrIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIHN0YWNrIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzdGFja1NldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHtcbiAgICB2YXIgcGFpcnMgPSBkYXRhLl9fZGF0YV9fO1xuICAgIGlmICghTWFwIHx8IChwYWlycy5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkpIHtcbiAgICAgIHBhaXJzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgICAgIHRoaXMuc2l6ZSA9ICsrZGF0YS5zaXplO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IE1hcENhY2hlKHBhaXJzKTtcbiAgfVxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdGFja1NldDtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNNYXNrZWQgPSByZXF1aXJlKCcuL19pc01hc2tlZCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIHRvU291cmNlID0gcmVxdWlyZSgnLi9fdG9Tb3VyY2UnKTtcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsXG4gICAgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKiogVXNlZCB0byBkZXRlY3QgaWYgYSBtZXRob2QgaXMgbmF0aXZlLiAqL1xudmFyIHJlSXNOYXRpdmUgPSBSZWdFeHAoJ14nICtcbiAgZnVuY1RvU3RyaW5nLmNhbGwoaGFzT3duUHJvcGVydHkpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAnXFxcXCQmJylcbiAgLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFxcXFwoKXwgZm9yIC4rPyg/PVxcXFxcXF0pL2csICckMS4qPycpICsgJyQnXG4pO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmF0aXZlYCB3aXRob3V0IGJhZCBzaGltIGNoZWNrcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIG5hdGl2ZSBmdW5jdGlvbixcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0KHZhbHVlKSB8fCBpc01hc2tlZCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHBhdHRlcm4gPSBpc0Z1bmN0aW9uKHZhbHVlKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7XG4gIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNOYXRpdmU7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIERhdGFWaWV3ID0gZ2V0TmF0aXZlKHJvb3QsICdEYXRhVmlldycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGFWaWV3O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBQcm9taXNlID0gZ2V0TmF0aXZlKHJvb3QsICdQcm9taXNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbWlzZTtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgU2V0ID0gZ2V0TmF0aXZlKHJvb3QsICdTZXQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTZXQ7XG4iLCJ2YXIgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAga2V5cyA9IHJlcXVpcmUoJy4va2V5cycpO1xuXG4vKipcbiAqIEdldHMgdGhlIHByb3BlcnR5IG5hbWVzLCB2YWx1ZXMsIGFuZCBjb21wYXJlIGZsYWdzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG1hdGNoIGRhdGEgb2YgYG9iamVjdGAuXG4gKi9cbmZ1bmN0aW9uIGdldE1hdGNoRGF0YShvYmplY3QpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXMob2JqZWN0KSxcbiAgICAgIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgdmFyIGtleSA9IHJlc3VsdFtsZW5ndGhdLFxuICAgICAgICB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgcmVzdWx0W2xlbmd0aF0gPSBba2V5LCB2YWx1ZSwgaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKV07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRNYXRjaERhdGE7XG4iLCJ2YXIgYmFzZUlzRXF1YWwgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbCcpLFxuICAgIGdldCA9IHJlcXVpcmUoJy4vZ2V0JyksXG4gICAgaGFzSW4gPSByZXF1aXJlKCcuL2hhc0luJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIGlzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX2lzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5tYXRjaGVzUHJvcGVydHlgIHdoaWNoIGRvZXNuJ3QgY2xvbmUgYHNyY1ZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gc3JjVmFsdWUgVGhlIHZhbHVlIHRvIG1hdGNoLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgc3BlYyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZU1hdGNoZXNQcm9wZXJ0eShwYXRoLCBzcmNWYWx1ZSkge1xuICBpZiAoaXNLZXkocGF0aCkgJiYgaXNTdHJpY3RDb21wYXJhYmxlKHNyY1ZhbHVlKSkge1xuICAgIHJldHVybiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSh0b0tleShwYXRoKSwgc3JjVmFsdWUpO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIgb2JqVmFsdWUgPSBnZXQob2JqZWN0LCBwYXRoKTtcbiAgICByZXR1cm4gKG9ialZhbHVlID09PSB1bmRlZmluZWQgJiYgb2JqVmFsdWUgPT09IHNyY1ZhbHVlKVxuICAgICAgPyBoYXNJbihvYmplY3QsIHBhdGgpXG4gICAgICA6IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlTWF0Y2hlc1Byb3BlcnR5O1xuIiwidmFyIGJhc2VHZXQgPSByZXF1aXJlKCcuL19iYXNlR2V0Jyk7XG5cbi8qKlxuICogR2V0cyB0aGUgdmFsdWUgYXQgYHBhdGhgIG9mIGBvYmplY3RgLiBJZiB0aGUgcmVzb2x2ZWQgdmFsdWUgaXNcbiAqIGB1bmRlZmluZWRgLCB0aGUgYGRlZmF1bHRWYWx1ZWAgaXMgcmV0dXJuZWQgaW4gaXRzIHBsYWNlLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMy43LjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdIFRoZSB2YWx1ZSByZXR1cm5lZCBmb3IgYHVuZGVmaW5lZGAgcmVzb2x2ZWQgdmFsdWVzLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IFt7ICdiJzogeyAnYyc6IDMgfSB9XSB9O1xuICpcbiAqIF8uZ2V0KG9iamVjdCwgJ2FbMF0uYi5jJyk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCBbJ2EnLCAnMCcsICdiJywgJ2MnXSk7XG4gKiAvLyA9PiAzXG4gKlxuICogXy5nZXQob2JqZWN0LCAnYS5iLmMnLCAnZGVmYXVsdCcpO1xuICogLy8gPT4gJ2RlZmF1bHQnXG4gKi9cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgsIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIHJldHVybiByZXN1bHQgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXQ7XG4iLCJ2YXIgbWVtb2l6ZUNhcHBlZCA9IHJlcXVpcmUoJy4vX21lbW9pemVDYXBwZWQnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14uW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpL2c7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGEgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHByb3BlcnR5IHBhdGggYXJyYXkuXG4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBtZW1vaXplQ2FwcGVkKGZ1bmN0aW9uKHN0cmluZykge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDYgLyogLiAqLykge1xuICAgIHJlc3VsdC5wdXNoKCcnKTtcbiAgfVxuICBzdHJpbmcucmVwbGFjZShyZVByb3BOYW1lLCBmdW5jdGlvbihtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG4gICAgcmVzdWx0LnB1c2gocXVvdGUgPyBzdWJTdHJpbmcucmVwbGFjZShyZUVzY2FwZUNoYXIsICckMScpIDogKG51bWJlciB8fCBtYXRjaCkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0cmluZ1RvUGF0aDtcbiIsInZhciBtZW1vaXplID0gcmVxdWlyZSgnLi9tZW1vaXplJyk7XG5cbi8qKiBVc2VkIGFzIHRoZSBtYXhpbXVtIG1lbW9pemUgY2FjaGUgc2l6ZS4gKi9cbnZhciBNQVhfTUVNT0laRV9TSVpFID0gNTAwO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tZW1vaXplYCB3aGljaCBjbGVhcnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uJ3NcbiAqIGNhY2hlIHdoZW4gaXQgZXhjZWVkcyBgTUFYX01FTU9JWkVfU0laRWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGhhdmUgaXRzIG91dHB1dCBtZW1vaXplZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IG1lbW9pemVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtZW1vaXplQ2FwcGVkKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IG1lbW9pemUoZnVuYywgZnVuY3Rpb24oa2V5KSB7XG4gICAgaWYgKGNhY2hlLnNpemUgPT09IE1BWF9NRU1PSVpFX1NJWkUpIHtcbiAgICAgIGNhY2hlLmNsZWFyKCk7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH0pO1xuXG4gIHZhciBjYWNoZSA9IHJlc3VsdC5jYWNoZTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZW1vaXplQ2FwcGVkO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIEVycm9yIG1lc3NhZ2UgY29uc3RhbnRzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICogcHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGNsZWFyYCwgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICE9IG51bGwgJiYgdHlwZW9mIHJlc29sdmVyICE9ICdmdW5jdGlvbicpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihGVU5DX0VSUk9SX1RFWFQpO1xuICB9XG4gIHZhciBtZW1vaXplZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gYXJndW1lbnRzLFxuICAgICAgICBrZXkgPSByZXNvbHZlciA/IHJlc29sdmVyLmFwcGx5KHRoaXMsIGFyZ3MpIDogYXJnc1swXSxcbiAgICAgICAgY2FjaGUgPSBtZW1vaXplZC5jYWNoZTtcblxuICAgIGlmIChjYWNoZS5oYXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gZnVuYy5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICBtZW1vaXplZC5jYWNoZSA9IGNhY2hlLnNldChrZXksIHJlc3VsdCkgfHwgY2FjaGU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgbWVtb2l6ZWQuY2FjaGUgPSBuZXcgKG1lbW9pemUuQ2FjaGUgfHwgTWFwQ2FjaGUpO1xuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbi8vIEV4cG9zZSBgTWFwQ2FjaGVgLlxubWVtb2l6ZS5DYWNoZSA9IE1hcENhY2hlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgYXJyYXlNYXAgPSByZXF1aXJlKCcuL19hcnJheU1hcCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFRvU3RyaW5nID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by50b1N0cmluZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50b1N0cmluZ2Agd2hpY2ggZG9lc24ndCBjb252ZXJ0IG51bGxpc2hcbiAqIHZhbHVlcyB0byBlbXB0eSBzdHJpbmdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBiYXNlVG9TdHJpbmcodmFsdWUpIHtcbiAgLy8gRXhpdCBlYXJseSBmb3Igc3RyaW5ncyB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIGhpdCBpbiBzb21lIGVudmlyb25tZW50cy5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAvLyBSZWN1cnNpdmVseSBjb252ZXJ0IHZhbHVlcyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIHJldHVybiBhcnJheU1hcCh2YWx1ZSwgYmFzZVRvU3RyaW5nKSArICcnO1xuICB9XG4gIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcgPyBzeW1ib2xUb1N0cmluZy5jYWxsKHZhbHVlKSA6ICcnO1xuICB9XG4gIHZhciByZXN1bHQgPSAodmFsdWUgKyAnJyk7XG4gIHJldHVybiAocmVzdWx0ID09ICcwJyAmJiAoMSAvIHZhbHVlKSA9PSAtSU5GSU5JVFkpID8gJy0wJyA6IHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVG9TdHJpbmc7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5tYXBgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbmV3IG1hcHBlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlNYXAoYXJyYXksIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gYXJyYXkgPT0gbnVsbCA/IDAgOiBhcnJheS5sZW5ndGgsXG4gICAgICByZXN1bHQgPSBBcnJheShsZW5ndGgpO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TWFwO1xuIiwidmFyIGJhc2VIYXNJbiA9IHJlcXVpcmUoJy4vX2Jhc2VIYXNJbicpLFxuICAgIGhhc1BhdGggPSByZXF1aXJlKCcuL19oYXNQYXRoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBwYXRoYCBpcyBhIGRpcmVjdCBvciBpbmhlcml0ZWQgcHJvcGVydHkgb2YgYG9iamVjdGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0gXy5jcmVhdGUoeyAnYSc6IF8uY3JlYXRlKHsgJ2InOiAyIH0pIH0pO1xuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYScpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYS5iJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5oYXNJbihvYmplY3QsIFsnYScsICdiJ10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCAnYicpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaGFzSW4ob2JqZWN0LCBwYXRoKSB7XG4gIHJldHVybiBvYmplY3QgIT0gbnVsbCAmJiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgYmFzZUhhc0luKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNJbjtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaGFzSW5gIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30ga2V5IFRoZSBrZXkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VIYXNJbihvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYga2V5IGluIE9iamVjdChvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VIYXNJbjtcbiIsInZhciBjYXN0UGF0aCA9IHJlcXVpcmUoJy4vX2Nhc3RQYXRoJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgZXhpc3RzIG9uIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCB0byBjaGVjay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhc0Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNoZWNrIHByb3BlcnRpZXMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHBhdGhgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNQYXRoKG9iamVjdCwgcGF0aCwgaGFzRnVuYykge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHBhdGgubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIga2V5ID0gdG9LZXkocGF0aFtpbmRleF0pO1xuICAgIGlmICghKHJlc3VsdCA9IG9iamVjdCAhPSBudWxsICYmIGhhc0Z1bmMob2JqZWN0LCBrZXkpKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICB9XG4gIGlmIChyZXN1bHQgfHwgKytpbmRleCAhPSBsZW5ndGgpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGxlbmd0aCA9IG9iamVjdCA9PSBudWxsID8gMCA6IG9iamVjdC5sZW5ndGg7XG4gIHJldHVybiAhIWxlbmd0aCAmJiBpc0xlbmd0aChsZW5ndGgpICYmIGlzSW5kZXgoa2V5LCBsZW5ndGgpICYmXG4gICAgKGlzQXJyYXkob2JqZWN0KSB8fCBpc0FyZ3VtZW50cyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNQYXRoO1xuIiwidmFyIGJhc2VQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eScpLFxuICAgIGJhc2VQcm9wZXJ0eURlZXAgPSByZXF1aXJlKCcuL19iYXNlUHJvcGVydHlEZWVwJyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYSBnaXZlbiBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAyLjQuMFxuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBhY2Nlc3NvciBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdHMgPSBbXG4gKiAgIHsgJ2EnOiB7ICdiJzogMiB9IH0sXG4gKiAgIHsgJ2EnOiB7ICdiJzogMSB9IH1cbiAqIF07XG4gKlxuICogXy5tYXAob2JqZWN0cywgXy5wcm9wZXJ0eSgnYS5iJykpO1xuICogLy8gPT4gWzIsIDFdXG4gKlxuICogXy5tYXAoXy5zb3J0Qnkob2JqZWN0cywgXy5wcm9wZXJ0eShbJ2EnLCAnYiddKSksICdhLmInKTtcbiAqIC8vID0+IFsxLCAyXVxuICovXG5mdW5jdGlvbiBwcm9wZXJ0eShwYXRoKSB7XG4gIHJldHVybiBpc0tleShwYXRoKSA/IGJhc2VQcm9wZXJ0eSh0b0tleShwYXRoKSkgOiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHByb3BlcnR5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5wcm9wZXJ0eWAgd2l0aG91dCBzdXBwb3J0IGZvciBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHk7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VQcm9wZXJ0eWAgd2hpY2ggc3VwcG9ydHMgZGVlcCBwYXRocy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlUHJvcGVydHlEZWVwKHBhdGgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBiYXNlR2V0KG9iamVjdCwgcGF0aCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVByb3BlcnR5RGVlcDtcbiIsIi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZmluZEluZGV4YCBhbmQgYF8uZmluZExhc3RJbmRleGAgd2l0aG91dFxuICogc3VwcG9ydCBmb3IgaXRlcmF0ZWUgc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwcmVkaWNhdGUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCB2YWx1ZSwgZWxzZSBgLTFgLlxuICovXG5mdW5jdGlvbiBiYXNlRmluZEluZGV4KGFycmF5LCBwcmVkaWNhdGUsIGZyb21JbmRleCwgZnJvbVJpZ2h0KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBpbmRleCA9IGZyb21JbmRleCArIChmcm9tUmlnaHQgPyAxIDogLTEpO1xuXG4gIHdoaWxlICgoZnJvbVJpZ2h0ID8gaW5kZXgtLSA6ICsraW5kZXggPCBsZW5ndGgpKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VGaW5kSW5kZXg7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzTmFOYCB3aXRob3V0IHN1cHBvcnQgZm9yIG51bWJlciBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGBOYU5gLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc05hTih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc05hTjtcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLmluZGV4T2ZgIHdoaWNoIHBlcmZvcm1zIHN0cmljdCBlcXVhbGl0eVxuICogY29tcGFyaXNvbnMgb2YgdmFsdWVzLCBpLmUuIGA9PT1gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIHN0cmljdEluZGV4T2YoYXJyYXksIHZhbHVlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGluZGV4ID0gZnJvbUluZGV4IC0gMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGlmIChhcnJheVtpbmRleF0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpY3RJbmRleE9mO1xuIiwidmFyIGJhc2VUcmltID0gcmVxdWlyZSgnLi9fYmFzZVRyaW0nKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTkFOID0gMCAvIDA7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiYWQgc2lnbmVkIGhleGFkZWNpbWFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JhZEhleCA9IC9eWy0rXTB4WzAtOWEtZl0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3QgYmluYXJ5IHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc0JpbmFyeSA9IC9eMGJbMDFdKyQvaTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG9jdGFsIHN0cmluZyB2YWx1ZXMuICovXG52YXIgcmVJc09jdGFsID0gL14wb1swLTddKyQvaTtcblxuLyoqIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHdpdGhvdXQgYSBkZXBlbmRlbmN5IG9uIGByb290YC4gKi9cbnZhciBmcmVlUGFyc2VJbnQgPSBwYXJzZUludDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBwcm9jZXNzLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbnVtYmVyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvTnVtYmVyKDMuMik7XG4gKiAvLyA9PiAzLjJcbiAqXG4gKiBfLnRvTnVtYmVyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gNWUtMzI0XG4gKlxuICogXy50b051bWJlcihJbmZpbml0eSk7XG4gKiAvLyA9PiBJbmZpbml0eVxuICpcbiAqIF8udG9OdW1iZXIoJzMuMicpO1xuICogLy8gPT4gMy4yXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiBOQU47XG4gIH1cbiAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgIHZhciBvdGhlciA9IHR5cGVvZiB2YWx1ZS52YWx1ZU9mID09ICdmdW5jdGlvbicgPyB2YWx1ZS52YWx1ZU9mKCkgOiB2YWx1ZTtcbiAgICB2YWx1ZSA9IGlzT2JqZWN0KG90aGVyKSA/IChvdGhlciArICcnKSA6IG90aGVyO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IDAgPyB2YWx1ZSA6ICt2YWx1ZTtcbiAgfVxuICB2YWx1ZSA9IGJhc2VUcmltKHZhbHVlKTtcbiAgdmFyIGlzQmluYXJ5ID0gcmVJc0JpbmFyeS50ZXN0KHZhbHVlKTtcbiAgcmV0dXJuIChpc0JpbmFyeSB8fCByZUlzT2N0YWwudGVzdCh2YWx1ZSkpXG4gICAgPyBmcmVlUGFyc2VJbnQodmFsdWUuc2xpY2UoMiksIGlzQmluYXJ5ID8gMiA6IDgpXG4gICAgOiAocmVJc0JhZEhleC50ZXN0KHZhbHVlKSA/IE5BTiA6ICt2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9OdW1iZXI7XG4iLCJ2YXIgdHJpbW1lZEVuZEluZGV4ID0gcmVxdWlyZSgnLi9fdHJpbW1lZEVuZEluZGV4Jyk7XG5cbi8qKiBVc2VkIHRvIG1hdGNoIGxlYWRpbmcgd2hpdGVzcGFjZS4gKi9cbnZhciByZVRyaW1TdGFydCA9IC9eXFxzKy87XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udHJpbWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byB0cmltLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgdHJpbW1lZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGJhc2VUcmltKHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nXG4gICAgPyBzdHJpbmcuc2xpY2UoMCwgdHJpbW1lZEVuZEluZGV4KHN0cmluZykgKyAxKS5yZXBsYWNlKHJlVHJpbVN0YXJ0LCAnJylcbiAgICA6IHN0cmluZztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlVHJpbTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIGEgc2luZ2xlIHdoaXRlc3BhY2UgY2hhcmFjdGVyLiAqL1xudmFyIHJlV2hpdGVzcGFjZSA9IC9cXHMvO1xuXG4vKipcbiAqIFVzZWQgYnkgYF8udHJpbWAgYW5kIGBfLnRyaW1FbmRgIHRvIGdldCB0aGUgaW5kZXggb2YgdGhlIGxhc3Qgbm9uLXdoaXRlc3BhY2VcbiAqIGNoYXJhY3RlciBvZiBgc3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIuXG4gKi9cbmZ1bmN0aW9uIHRyaW1tZWRFbmRJbmRleChzdHJpbmcpIHtcbiAgdmFyIGluZGV4ID0gc3RyaW5nLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXgtLSAmJiByZVdoaXRlc3BhY2UudGVzdChzdHJpbmcuY2hhckF0KGluZGV4KSkpIHt9XG4gIHJldHVybiBpbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmltbWVkRW5kSW5kZXg7XG4iLCJ2YXIgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciBmdW5jdGlvbiBtZXRhZGF0YS4gKi9cbnZhciBXUkFQX0JJTkRfRkxBRyA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgd3JhcHMgYGZ1bmNgIHRvIGludm9rZSBpdCB3aXRoIHRoZSBvcHRpb25hbCBgdGhpc2BcbiAqIGJpbmRpbmcgb2YgYHRoaXNBcmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7Kn0gW3RoaXNBcmddIFRoZSBgdGhpc2AgYmluZGluZyBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVCaW5kKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcpIHtcbiAgdmFyIGlzQmluZCA9IGJpdG1hc2sgJiBXUkFQX0JJTkRfRkxBRyxcbiAgICAgIEN0b3IgPSBjcmVhdGVDdG9yKGZ1bmMpO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gZm4uYXBwbHkoaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cbiAgcmV0dXJuIHdyYXBwZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlQmluZDtcbiIsInZhciBhcHBseSA9IHJlcXVpcmUoJy4vX2FwcGx5JyksXG4gICAgY3JlYXRlQ3RvciA9IHJlcXVpcmUoJy4vX2NyZWF0ZUN0b3InKSxcbiAgICBjcmVhdGVIeWJyaWQgPSByZXF1aXJlKCcuL19jcmVhdGVIeWJyaWQnKSxcbiAgICBjcmVhdGVSZWN1cnJ5ID0gcmVxdWlyZSgnLi9fY3JlYXRlUmVjdXJyeScpLFxuICAgIGdldEhvbGRlciA9IHJlcXVpcmUoJy4vX2dldEhvbGRlcicpLFxuICAgIHJlcGxhY2VIb2xkZXJzID0gcmVxdWlyZSgnLi9fcmVwbGFjZUhvbGRlcnMnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBlbmFibGUgY3VycnlpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIHdyYXAuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBjcmVhdGVXcmFwYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtudW1iZXJ9IGFyaXR5IFRoZSBhcml0eSBvZiBgZnVuY2AuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVDdXJyeShmdW5jLCBiaXRtYXNrLCBhcml0eSkge1xuICB2YXIgQ3RvciA9IGNyZWF0ZUN0b3IoZnVuYyk7XG5cbiAgZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgYXJncyA9IEFycmF5KGxlbmd0aCksXG4gICAgICAgIGluZGV4ID0gbGVuZ3RoLFxuICAgICAgICBwbGFjZWhvbGRlciA9IGdldEhvbGRlcih3cmFwcGVyKTtcblxuICAgIHdoaWxlIChpbmRleC0tKSB7XG4gICAgICBhcmdzW2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleF07XG4gICAgfVxuICAgIHZhciBob2xkZXJzID0gKGxlbmd0aCA8IDMgJiYgYXJnc1swXSAhPT0gcGxhY2Vob2xkZXIgJiYgYXJnc1tsZW5ndGggLSAxXSAhPT0gcGxhY2Vob2xkZXIpXG4gICAgICA/IFtdXG4gICAgICA6IHJlcGxhY2VIb2xkZXJzKGFyZ3MsIHBsYWNlaG9sZGVyKTtcblxuICAgIGxlbmd0aCAtPSBob2xkZXJzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoIDwgYXJpdHkpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSZWN1cnJ5KFxuICAgICAgICBmdW5jLCBiaXRtYXNrLCBjcmVhdGVIeWJyaWQsIHdyYXBwZXIucGxhY2Vob2xkZXIsIHVuZGVmaW5lZCxcbiAgICAgICAgYXJncywgaG9sZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFyaXR5IC0gbGVuZ3RoKTtcbiAgICB9XG4gICAgdmFyIGZuID0gKHRoaXMgJiYgdGhpcyAhPT0gcm9vdCAmJiB0aGlzIGluc3RhbmNlb2Ygd3JhcHBlcikgPyBDdG9yIDogZnVuYztcbiAgICByZXR1cm4gYXBwbHkoZm4sIHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUN1cnJ5O1xuIiwiLyoqXG4gKiBHZXRzIHRoZSBudW1iZXIgb2YgYHBsYWNlaG9sZGVyYCBvY2N1cnJlbmNlcyBpbiBgYXJyYXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gcGxhY2Vob2xkZXIgVGhlIHBsYWNlaG9sZGVyIHRvIHNlYXJjaCBmb3IuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBwbGFjZWhvbGRlciBjb3VudC5cbiAqL1xuZnVuY3Rpb24gY291bnRIb2xkZXJzKGFycmF5LCBwbGFjZWhvbGRlcikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gMDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICBpZiAoYXJyYXlbbGVuZ3RoXSA9PT0gcGxhY2Vob2xkZXIpIHtcbiAgICAgICsrcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvdW50SG9sZGVycztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgZ2V0RGF0YSA9IHJlcXVpcmUoJy4vX2dldERhdGEnKSxcbiAgICBnZXRGdW5jTmFtZSA9IHJlcXVpcmUoJy4vX2dldEZ1bmNOYW1lJyksXG4gICAgbG9kYXNoID0gcmVxdWlyZSgnLi93cmFwcGVyTG9kYXNoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGBmdW5jYCBoYXMgYSBsYXp5IGNvdW50ZXJwYXJ0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaGFzIGEgbGF6eSBjb3VudGVycGFydCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTGF6aWFibGUoZnVuYykge1xuICB2YXIgZnVuY05hbWUgPSBnZXRGdW5jTmFtZShmdW5jKSxcbiAgICAgIG90aGVyID0gbG9kYXNoW2Z1bmNOYW1lXTtcblxuICBpZiAodHlwZW9mIG90aGVyICE9ICdmdW5jdGlvbicgfHwgIShmdW5jTmFtZSBpbiBMYXp5V3JhcHBlci5wcm90b3R5cGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChmdW5jID09PSBvdGhlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBkYXRhID0gZ2V0RGF0YShvdGhlcik7XG4gIHJldHVybiAhIWRhdGEgJiYgZnVuYyA9PT0gZGF0YVswXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0xhemlhYmxlO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGB1bmRlZmluZWRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMi4zLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udGltZXMoMiwgXy5ub29wKTtcbiAqIC8vID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZF1cbiAqL1xuZnVuY3Rpb24gbm9vcCgpIHtcbiAgLy8gTm8gb3BlcmF0aW9uIHBlcmZvcm1lZC5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBub29wO1xuIiwidmFyIHJlYWxOYW1lcyA9IHJlcXVpcmUoJy4vX3JlYWxOYW1lcycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIEdldHMgdGhlIG5hbWUgb2YgYGZ1bmNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGZ1bmN0aW9uIG5hbWUuXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bmNOYW1lKGZ1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IChmdW5jLm5hbWUgKyAnJyksXG4gICAgICBhcnJheSA9IHJlYWxOYW1lc1tyZXN1bHRdLFxuICAgICAgbGVuZ3RoID0gaGFzT3duUHJvcGVydHkuY2FsbChyZWFsTmFtZXMsIHJlc3VsdCkgPyBhcnJheS5sZW5ndGggOiAwO1xuXG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIHZhciBkYXRhID0gYXJyYXlbbGVuZ3RoXSxcbiAgICAgICAgb3RoZXJGdW5jID0gZGF0YS5mdW5jO1xuICAgIGlmIChvdGhlckZ1bmMgPT0gbnVsbCB8fCBvdGhlckZ1bmMgPT0gZnVuYykge1xuICAgICAgcmV0dXJuIGRhdGEubmFtZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRGdW5jTmFtZTtcbiIsIi8qKiBVc2VkIHRvIGxvb2t1cCB1bm1pbmlmaWVkIGZ1bmN0aW9uIG5hbWVzLiAqL1xudmFyIHJlYWxOYW1lcyA9IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlYWxOYW1lcztcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBiYXNlTG9kYXNoID0gcmVxdWlyZSgnLi9fYmFzZUxvZGFzaCcpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpLFxuICAgIHdyYXBwZXJDbG9uZSA9IHJlcXVpcmUoJy4vX3dyYXBwZXJDbG9uZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgbG9kYXNoYCBvYmplY3Qgd2hpY2ggd3JhcHMgYHZhbHVlYCB0byBlbmFibGUgaW1wbGljaXQgbWV0aG9kXG4gKiBjaGFpbiBzZXF1ZW5jZXMuIE1ldGhvZHMgdGhhdCBvcGVyYXRlIG9uIGFuZCByZXR1cm4gYXJyYXlzLCBjb2xsZWN0aW9ucyxcbiAqIGFuZCBmdW5jdGlvbnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIE1ldGhvZHMgdGhhdCByZXRyaWV2ZSBhIHNpbmdsZSB2YWx1ZVxuICogb3IgbWF5IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZSB3aWxsIGF1dG9tYXRpY2FsbHkgZW5kIHRoZSBjaGFpbiBzZXF1ZW5jZVxuICogYW5kIHJldHVybiB0aGUgdW53cmFwcGVkIHZhbHVlLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBtdXN0IGJlIHVud3JhcHBlZFxuICogd2l0aCBgXyN2YWx1ZWAuXG4gKlxuICogRXhwbGljaXQgY2hhaW4gc2VxdWVuY2VzLCB3aGljaCBtdXN0IGJlIHVud3JhcHBlZCB3aXRoIGBfI3ZhbHVlYCwgbWF5IGJlXG4gKiBlbmFibGVkIHVzaW5nIGBfLmNoYWluYC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIG9mIGNoYWluZWQgbWV0aG9kcyBpcyBsYXp5LCB0aGF0IGlzLCBpdCdzIGRlZmVycmVkIHVudGlsXG4gKiBgXyN2YWx1ZWAgaXMgaW1wbGljaXRseSBvciBleHBsaWNpdGx5IGNhbGxlZC5cbiAqXG4gKiBMYXp5IGV2YWx1YXRpb24gYWxsb3dzIHNldmVyYWwgbWV0aG9kcyB0byBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbi5cbiAqIFNob3J0Y3V0IGZ1c2lvbiBpcyBhbiBvcHRpbWl6YXRpb24gdG8gbWVyZ2UgaXRlcmF0ZWUgY2FsbHM7IHRoaXMgYXZvaWRzXG4gKiB0aGUgY3JlYXRpb24gb2YgaW50ZXJtZWRpYXRlIGFycmF5cyBhbmQgY2FuIGdyZWF0bHkgcmVkdWNlIHRoZSBudW1iZXIgb2ZcbiAqIGl0ZXJhdGVlIGV4ZWN1dGlvbnMuIFNlY3Rpb25zIG9mIGEgY2hhaW4gc2VxdWVuY2UgcXVhbGlmeSBmb3Igc2hvcnRjdXRcbiAqIGZ1c2lvbiBpZiB0aGUgc2VjdGlvbiBpcyBhcHBsaWVkIHRvIGFuIGFycmF5IGFuZCBpdGVyYXRlZXMgYWNjZXB0IG9ubHlcbiAqIG9uZSBhcmd1bWVudC4gVGhlIGhldXJpc3RpYyBmb3Igd2hldGhlciBhIHNlY3Rpb24gcXVhbGlmaWVzIGZvciBzaG9ydGN1dFxuICogZnVzaW9uIGlzIHN1YmplY3QgdG8gY2hhbmdlLlxuICpcbiAqIENoYWluaW5nIGlzIHN1cHBvcnRlZCBpbiBjdXN0b20gYnVpbGRzIGFzIGxvbmcgYXMgdGhlIGBfI3ZhbHVlYCBtZXRob2QgaXNcbiAqIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLlxuICpcbiAqIEluIGFkZGl0aW9uIHRvIGxvZGFzaCBtZXRob2RzLCB3cmFwcGVycyBoYXZlIGBBcnJheWAgYW5kIGBTdHJpbmdgIG1ldGhvZHMuXG4gKlxuICogVGhlIHdyYXBwZXIgYEFycmF5YCBtZXRob2RzIGFyZTpcbiAqIGBjb25jYXRgLCBgam9pbmAsIGBwb3BgLCBgcHVzaGAsIGBzaGlmdGAsIGBzb3J0YCwgYHNwbGljZWAsIGFuZCBgdW5zaGlmdGBcbiAqXG4gKiBUaGUgd3JhcHBlciBgU3RyaW5nYCBtZXRob2RzIGFyZTpcbiAqIGByZXBsYWNlYCBhbmQgYHNwbGl0YFxuICpcbiAqIFRoZSB3cmFwcGVyIG1ldGhvZHMgdGhhdCBzdXBwb3J0IHNob3J0Y3V0IGZ1c2lvbiBhcmU6XG4gKiBgYXRgLCBgY29tcGFjdGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsIGBkcm9wV2hpbGVgLCBgZmlsdGVyYCwgYGZpbmRgLFxuICogYGZpbmRMYXN0YCwgYGhlYWRgLCBgaW5pdGlhbGAsIGBsYXN0YCwgYG1hcGAsIGByZWplY3RgLCBgcmV2ZXJzZWAsIGBzbGljZWAsXG4gKiBgdGFpbGAsIGB0YWtlYCwgYHRha2VSaWdodGAsIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBhbmQgYHRvQXJyYXlgXG4gKlxuICogVGhlIGNoYWluYWJsZSB3cmFwcGVyIG1ldGhvZHMgYXJlOlxuICogYGFmdGVyYCwgYGFyeWAsIGBhc3NpZ25gLCBgYXNzaWduSW5gLCBgYXNzaWduSW5XaXRoYCwgYGFzc2lnbldpdGhgLCBgYXRgLFxuICogYGJlZm9yZWAsIGBiaW5kYCwgYGJpbmRBbGxgLCBgYmluZEtleWAsIGBjYXN0QXJyYXlgLCBgY2hhaW5gLCBgY2h1bmtgLFxuICogYGNvbW1pdGAsIGBjb21wYWN0YCwgYGNvbmNhdGAsIGBjb25mb3Jtc2AsIGBjb25zdGFudGAsIGBjb3VudEJ5YCwgYGNyZWF0ZWAsXG4gKiBgY3VycnlgLCBgZGVib3VuY2VgLCBgZGVmYXVsdHNgLCBgZGVmYXVsdHNEZWVwYCwgYGRlZmVyYCwgYGRlbGF5YCxcbiAqIGBkaWZmZXJlbmNlYCwgYGRpZmZlcmVuY2VCeWAsIGBkaWZmZXJlbmNlV2l0aGAsIGBkcm9wYCwgYGRyb3BSaWdodGAsXG4gKiBgZHJvcFJpZ2h0V2hpbGVgLCBgZHJvcFdoaWxlYCwgYGV4dGVuZGAsIGBleHRlbmRXaXRoYCwgYGZpbGxgLCBgZmlsdGVyYCxcbiAqIGBmbGF0TWFwYCwgYGZsYXRNYXBEZWVwYCwgYGZsYXRNYXBEZXB0aGAsIGBmbGF0dGVuYCwgYGZsYXR0ZW5EZWVwYCxcbiAqIGBmbGF0dGVuRGVwdGhgLCBgZmxpcGAsIGBmbG93YCwgYGZsb3dSaWdodGAsIGBmcm9tUGFpcnNgLCBgZnVuY3Rpb25zYCxcbiAqIGBmdW5jdGlvbnNJbmAsIGBncm91cEJ5YCwgYGluaXRpYWxgLCBgaW50ZXJzZWN0aW9uYCwgYGludGVyc2VjdGlvbkJ5YCxcbiAqIGBpbnRlcnNlY3Rpb25XaXRoYCwgYGludmVydGAsIGBpbnZlcnRCeWAsIGBpbnZva2VNYXBgLCBgaXRlcmF0ZWVgLCBga2V5QnlgLFxuICogYGtleXNgLCBga2V5c0luYCwgYG1hcGAsIGBtYXBLZXlzYCwgYG1hcFZhbHVlc2AsIGBtYXRjaGVzYCwgYG1hdGNoZXNQcm9wZXJ0eWAsXG4gKiBgbWVtb2l6ZWAsIGBtZXJnZWAsIGBtZXJnZVdpdGhgLCBgbWV0aG9kYCwgYG1ldGhvZE9mYCwgYG1peGluYCwgYG5lZ2F0ZWAsXG4gKiBgbnRoQXJnYCwgYG9taXRgLCBgb21pdEJ5YCwgYG9uY2VgLCBgb3JkZXJCeWAsIGBvdmVyYCwgYG92ZXJBcmdzYCxcbiAqIGBvdmVyRXZlcnlgLCBgb3ZlclNvbWVgLCBgcGFydGlhbGAsIGBwYXJ0aWFsUmlnaHRgLCBgcGFydGl0aW9uYCwgYHBpY2tgLFxuICogYHBpY2tCeWAsIGBwbGFudGAsIGBwcm9wZXJ0eWAsIGBwcm9wZXJ0eU9mYCwgYHB1bGxgLCBgcHVsbEFsbGAsIGBwdWxsQWxsQnlgLFxuICogYHB1bGxBbGxXaXRoYCwgYHB1bGxBdGAsIGBwdXNoYCwgYHJhbmdlYCwgYHJhbmdlUmlnaHRgLCBgcmVhcmdgLCBgcmVqZWN0YCxcbiAqIGByZW1vdmVgLCBgcmVzdGAsIGByZXZlcnNlYCwgYHNhbXBsZVNpemVgLCBgc2V0YCwgYHNldFdpdGhgLCBgc2h1ZmZsZWAsXG4gKiBgc2xpY2VgLCBgc29ydGAsIGBzb3J0QnlgLCBgc3BsaWNlYCwgYHNwcmVhZGAsIGB0YWlsYCwgYHRha2VgLCBgdGFrZVJpZ2h0YCxcbiAqIGB0YWtlUmlnaHRXaGlsZWAsIGB0YWtlV2hpbGVgLCBgdGFwYCwgYHRocm90dGxlYCwgYHRocnVgLCBgdG9BcnJheWAsXG4gKiBgdG9QYWlyc2AsIGB0b1BhaXJzSW5gLCBgdG9QYXRoYCwgYHRvUGxhaW5PYmplY3RgLCBgdHJhbnNmb3JtYCwgYHVuYXJ5YCxcbiAqIGB1bmlvbmAsIGB1bmlvbkJ5YCwgYHVuaW9uV2l0aGAsIGB1bmlxYCwgYHVuaXFCeWAsIGB1bmlxV2l0aGAsIGB1bnNldGAsXG4gKiBgdW5zaGlmdGAsIGB1bnppcGAsIGB1bnppcFdpdGhgLCBgdXBkYXRlYCwgYHVwZGF0ZVdpdGhgLCBgdmFsdWVzYCxcbiAqIGB2YWx1ZXNJbmAsIGB3aXRob3V0YCwgYHdyYXBgLCBgeG9yYCwgYHhvckJ5YCwgYHhvcldpdGhgLCBgemlwYCxcbiAqIGB6aXBPYmplY3RgLCBgemlwT2JqZWN0RGVlcGAsIGFuZCBgemlwV2l0aGBcbiAqXG4gKiBUaGUgd3JhcHBlciBtZXRob2RzIHRoYXQgYXJlICoqbm90KiogY2hhaW5hYmxlIGJ5IGRlZmF1bHQgYXJlOlxuICogYGFkZGAsIGBhdHRlbXB0YCwgYGNhbWVsQ2FzZWAsIGBjYXBpdGFsaXplYCwgYGNlaWxgLCBgY2xhbXBgLCBgY2xvbmVgLFxuICogYGNsb25lRGVlcGAsIGBjbG9uZURlZXBXaXRoYCwgYGNsb25lV2l0aGAsIGBjb25mb3Jtc1RvYCwgYGRlYnVycmAsXG4gKiBgZGVmYXVsdFRvYCwgYGRpdmlkZWAsIGBlYWNoYCwgYGVhY2hSaWdodGAsIGBlbmRzV2l0aGAsIGBlcWAsIGBlc2NhcGVgLFxuICogYGVzY2FwZVJlZ0V4cGAsIGBldmVyeWAsIGBmaW5kYCwgYGZpbmRJbmRleGAsIGBmaW5kS2V5YCwgYGZpbmRMYXN0YCxcbiAqIGBmaW5kTGFzdEluZGV4YCwgYGZpbmRMYXN0S2V5YCwgYGZpcnN0YCwgYGZsb29yYCwgYGZvckVhY2hgLCBgZm9yRWFjaFJpZ2h0YCxcbiAqIGBmb3JJbmAsIGBmb3JJblJpZ2h0YCwgYGZvck93bmAsIGBmb3JPd25SaWdodGAsIGBnZXRgLCBgZ3RgLCBgZ3RlYCwgYGhhc2AsXG4gKiBgaGFzSW5gLCBgaGVhZGAsIGBpZGVudGl0eWAsIGBpbmNsdWRlc2AsIGBpbmRleE9mYCwgYGluUmFuZ2VgLCBgaW52b2tlYCxcbiAqIGBpc0FyZ3VtZW50c2AsIGBpc0FycmF5YCwgYGlzQXJyYXlCdWZmZXJgLCBgaXNBcnJheUxpa2VgLCBgaXNBcnJheUxpa2VPYmplY3RgLFxuICogYGlzQm9vbGVhbmAsIGBpc0J1ZmZlcmAsIGBpc0RhdGVgLCBgaXNFbGVtZW50YCwgYGlzRW1wdHlgLCBgaXNFcXVhbGAsXG4gKiBgaXNFcXVhbFdpdGhgLCBgaXNFcnJvcmAsIGBpc0Zpbml0ZWAsIGBpc0Z1bmN0aW9uYCwgYGlzSW50ZWdlcmAsIGBpc0xlbmd0aGAsXG4gKiBgaXNNYXBgLCBgaXNNYXRjaGAsIGBpc01hdGNoV2l0aGAsIGBpc05hTmAsIGBpc05hdGl2ZWAsIGBpc05pbGAsIGBpc051bGxgLFxuICogYGlzTnVtYmVyYCwgYGlzT2JqZWN0YCwgYGlzT2JqZWN0TGlrZWAsIGBpc1BsYWluT2JqZWN0YCwgYGlzUmVnRXhwYCxcbiAqIGBpc1NhZmVJbnRlZ2VyYCwgYGlzU2V0YCwgYGlzU3RyaW5nYCwgYGlzVW5kZWZpbmVkYCwgYGlzVHlwZWRBcnJheWAsXG4gKiBgaXNXZWFrTWFwYCwgYGlzV2Vha1NldGAsIGBqb2luYCwgYGtlYmFiQ2FzZWAsIGBsYXN0YCwgYGxhc3RJbmRleE9mYCxcbiAqIGBsb3dlckNhc2VgLCBgbG93ZXJGaXJzdGAsIGBsdGAsIGBsdGVgLCBgbWF4YCwgYG1heEJ5YCwgYG1lYW5gLCBgbWVhbkJ5YCxcbiAqIGBtaW5gLCBgbWluQnlgLCBgbXVsdGlwbHlgLCBgbm9Db25mbGljdGAsIGBub29wYCwgYG5vd2AsIGBudGhgLCBgcGFkYCxcbiAqIGBwYWRFbmRgLCBgcGFkU3RhcnRgLCBgcGFyc2VJbnRgLCBgcG9wYCwgYHJhbmRvbWAsIGByZWR1Y2VgLCBgcmVkdWNlUmlnaHRgLFxuICogYHJlcGVhdGAsIGByZXN1bHRgLCBgcm91bmRgLCBgcnVuSW5Db250ZXh0YCwgYHNhbXBsZWAsIGBzaGlmdGAsIGBzaXplYCxcbiAqIGBzbmFrZUNhc2VgLCBgc29tZWAsIGBzb3J0ZWRJbmRleGAsIGBzb3J0ZWRJbmRleEJ5YCwgYHNvcnRlZExhc3RJbmRleGAsXG4gKiBgc29ydGVkTGFzdEluZGV4QnlgLCBgc3RhcnRDYXNlYCwgYHN0YXJ0c1dpdGhgLCBgc3R1YkFycmF5YCwgYHN0dWJGYWxzZWAsXG4gKiBgc3R1Yk9iamVjdGAsIGBzdHViU3RyaW5nYCwgYHN0dWJUcnVlYCwgYHN1YnRyYWN0YCwgYHN1bWAsIGBzdW1CeWAsXG4gKiBgdGVtcGxhdGVgLCBgdGltZXNgLCBgdG9GaW5pdGVgLCBgdG9JbnRlZ2VyYCwgYHRvSlNPTmAsIGB0b0xlbmd0aGAsXG4gKiBgdG9Mb3dlcmAsIGB0b051bWJlcmAsIGB0b1NhZmVJbnRlZ2VyYCwgYHRvU3RyaW5nYCwgYHRvVXBwZXJgLCBgdHJpbWAsXG4gKiBgdHJpbUVuZGAsIGB0cmltU3RhcnRgLCBgdHJ1bmNhdGVgLCBgdW5lc2NhcGVgLCBgdW5pcXVlSWRgLCBgdXBwZXJDYXNlYCxcbiAqIGB1cHBlckZpcnN0YCwgYHZhbHVlYCwgYW5kIGB3b3Jkc2BcbiAqXG4gKiBAbmFtZSBfXG4gKiBAY29uc3RydWN0b3JcbiAqIEBjYXRlZ29yeSBTZXFcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHdyYXAgaW4gYSBgbG9kYXNoYCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIG5ldyBgbG9kYXNoYCB3cmFwcGVyIGluc3RhbmNlLlxuICogQGV4YW1wbGVcbiAqXG4gKiBmdW5jdGlvbiBzcXVhcmUobikge1xuICogICByZXR1cm4gbiAqIG47XG4gKiB9XG4gKlxuICogdmFyIHdyYXBwZWQgPSBfKFsxLCAyLCAzXSk7XG4gKlxuICogLy8gUmV0dXJucyBhbiB1bndyYXBwZWQgdmFsdWUuXG4gKiB3cmFwcGVkLnJlZHVjZShfLmFkZCk7XG4gKiAvLyA9PiA2XG4gKlxuICogLy8gUmV0dXJucyBhIHdyYXBwZWQgdmFsdWUuXG4gKiB2YXIgc3F1YXJlcyA9IHdyYXBwZWQubWFwKHNxdWFyZSk7XG4gKlxuICogXy5pc0FycmF5KHNxdWFyZXMpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzQXJyYXkoc3F1YXJlcy52YWx1ZSgpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gbG9kYXNoKHZhbHVlKSB7XG4gIGlmIChpc09iamVjdExpa2UodmFsdWUpICYmICFpc0FycmF5KHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgTGF6eVdyYXBwZXIpKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgTG9kYXNoV3JhcHBlcikge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ19fd3JhcHBlZF9fJykpIHtcbiAgICAgIHJldHVybiB3cmFwcGVyQ2xvbmUodmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbmV3IExvZGFzaFdyYXBwZXIodmFsdWUpO1xufVxuXG4vLyBFbnN1cmUgd3JhcHBlcnMgYXJlIGluc3RhbmNlcyBvZiBgYmFzZUxvZGFzaGAuXG5sb2Rhc2gucHJvdG90eXBlID0gYmFzZUxvZGFzaC5wcm90b3R5cGU7XG5sb2Rhc2gucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbG9kYXNoO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGxvZGFzaDtcbiIsInZhciBMYXp5V3JhcHBlciA9IHJlcXVpcmUoJy4vX0xhenlXcmFwcGVyJyksXG4gICAgTG9kYXNoV3JhcHBlciA9IHJlcXVpcmUoJy4vX0xvZGFzaFdyYXBwZXInKSxcbiAgICBjb3B5QXJyYXkgPSByZXF1aXJlKCcuL19jb3B5QXJyYXknKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY2xvbmUgb2YgYHdyYXBwZXJgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gd3JhcHBlciBUaGUgd3JhcHBlciB0byBjbG9uZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNsb25lZCB3cmFwcGVyLlxuICovXG5mdW5jdGlvbiB3cmFwcGVyQ2xvbmUod3JhcHBlcikge1xuICBpZiAod3JhcHBlciBpbnN0YW5jZW9mIExhenlXcmFwcGVyKSB7XG4gICAgcmV0dXJuIHdyYXBwZXIuY2xvbmUoKTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gbmV3IExvZGFzaFdyYXBwZXIod3JhcHBlci5fX3dyYXBwZWRfXywgd3JhcHBlci5fX2NoYWluX18pO1xuICByZXN1bHQuX19hY3Rpb25zX18gPSBjb3B5QXJyYXkod3JhcHBlci5fX2FjdGlvbnNfXyk7XG4gIHJlc3VsdC5fX2luZGV4X18gID0gd3JhcHBlci5fX2luZGV4X187XG4gIHJlc3VsdC5fX3ZhbHVlc19fID0gd3JhcHBlci5fX3ZhbHVlc19fO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdyYXBwZXJDbG9uZTtcbiIsIi8qKiBVc2VkIHRvIG1hdGNoIHdyYXAgZGV0YWlsIGNvbW1lbnRzLiAqL1xudmFyIHJlV3JhcERldGFpbHMgPSAvXFx7XFxuXFwvXFwqIFxcW3dyYXBwZWQgd2l0aCAoLispXFxdIFxcKi8sXG4gICAgcmVTcGxpdERldGFpbHMgPSAvLD8gJiAvO1xuXG4vKipcbiAqIEV4dHJhY3RzIHdyYXBwZXIgZGV0YWlscyBmcm9tIHRoZSBgc291cmNlYCBib2R5IGNvbW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgVGhlIHNvdXJjZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSB3cmFwcGVyIGRldGFpbHMuXG4gKi9cbmZ1bmN0aW9uIGdldFdyYXBEZXRhaWxzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2ggPSBzb3VyY2UubWF0Y2gocmVXcmFwRGV0YWlscyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnNwbGl0KHJlU3BsaXREZXRhaWxzKSA6IFtdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldFdyYXBEZXRhaWxzO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggd3JhcCBkZXRhaWwgY29tbWVudHMuICovXG52YXIgcmVXcmFwQ29tbWVudCA9IC9cXHsoPzpcXG5cXC9cXCogXFxbd3JhcHBlZCB3aXRoIC4rXFxdIFxcKlxcLyk/XFxuPy87XG5cbi8qKlxuICogSW5zZXJ0cyB3cmFwcGVyIGBkZXRhaWxzYCBpbiBhIGNvbW1lbnQgYXQgdGhlIHRvcCBvZiB0aGUgYHNvdXJjZWAgYm9keS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSBUaGUgc291cmNlIHRvIG1vZGlmeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gZGV0YWlscyBUaGUgZGV0YWlscyB0byBpbnNlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBtb2RpZmllZCBzb3VyY2UuXG4gKi9cbmZ1bmN0aW9uIGluc2VydFdyYXBEZXRhaWxzKHNvdXJjZSwgZGV0YWlscykge1xuICB2YXIgbGVuZ3RoID0gZGV0YWlscy5sZW5ndGg7XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuICB2YXIgbGFzdEluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgZGV0YWlsc1tsYXN0SW5kZXhdID0gKGxlbmd0aCA+IDEgPyAnJiAnIDogJycpICsgZGV0YWlsc1tsYXN0SW5kZXhdO1xuICBkZXRhaWxzID0gZGV0YWlscy5qb2luKGxlbmd0aCA+IDIgPyAnLCAnIDogJyAnKTtcbiAgcmV0dXJuIHNvdXJjZS5yZXBsYWNlKHJlV3JhcENvbW1lbnQsICd7XFxuLyogW3dyYXBwZWQgd2l0aCAnICsgZGV0YWlscyArICddICovXFxuJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0V3JhcERldGFpbHM7XG4iLCJ2YXIgY29uc3RhbnQgPSByZXF1aXJlKCcuL2NvbnN0YW50JyksXG4gICAgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19kZWZpbmVQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBzZXRUb1N0cmluZ2Agd2l0aG91dCBzdXBwb3J0IGZvciBob3QgbG9vcCBzaG9ydGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gc3RyaW5nIFRoZSBgdG9TdHJpbmdgIHJlc3VsdC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyBgZnVuY2AuXG4gKi9cbnZhciBiYXNlU2V0VG9TdHJpbmcgPSAhZGVmaW5lUHJvcGVydHkgPyBpZGVudGl0eSA6IGZ1bmN0aW9uKGZ1bmMsIHN0cmluZykge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHkoZnVuYywgJ3RvU3RyaW5nJywge1xuICAgICdjb25maWd1cmFibGUnOiB0cnVlLFxuICAgICdlbnVtZXJhYmxlJzogZmFsc2UsXG4gICAgJ3ZhbHVlJzogY29uc3RhbnQoc3RyaW5nKSxcbiAgICAnd3JpdGFibGUnOiB0cnVlXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlU2V0VG9TdHJpbmc7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHZhbHVlYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20gdGhlIG5ldyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNvbnN0YW50IGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IF8udGltZXMoMiwgXy5jb25zdGFudCh7ICdhJzogMSB9KSk7XG4gKlxuICogY29uc29sZS5sb2cob2JqZWN0cyk7XG4gKiAvLyA9PiBbeyAnYSc6IDEgfSwgeyAnYSc6IDEgfV1cbiAqXG4gKiBjb25zb2xlLmxvZyhvYmplY3RzWzBdID09PSBvYmplY3RzWzFdKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gY29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25zdGFudDtcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIHZhciBmdW5jID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2RlZmluZVByb3BlcnR5Jyk7XG4gICAgZnVuYyh7fSwgJycsIHt9KTtcbiAgICByZXR1cm4gZnVuYztcbiAgfSBjYXRjaCAoZSkge31cbn0oKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydHk7XG4iLCJ2YXIgYXJyYXlFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXlFYWNoJyksXG4gICAgYXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5SW5jbHVkZXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxLFxuICAgIFdSQVBfQklORF9LRVlfRkxBRyA9IDIsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0NVUlJZX1JJR0hUX0ZMQUcgPSAxNixcbiAgICBXUkFQX1BBUlRJQUxfRkxBRyA9IDMyLFxuICAgIFdSQVBfUEFSVElBTF9SSUdIVF9GTEFHID0gNjQsXG4gICAgV1JBUF9BUllfRkxBRyA9IDEyOCxcbiAgICBXUkFQX1JFQVJHX0ZMQUcgPSAyNTYsXG4gICAgV1JBUF9GTElQX0ZMQUcgPSA1MTI7XG5cbi8qKiBVc2VkIHRvIGFzc29jaWF0ZSB3cmFwIG1ldGhvZHMgd2l0aCB0aGVpciBiaXQgZmxhZ3MuICovXG52YXIgd3JhcEZsYWdzID0gW1xuICBbJ2FyeScsIFdSQVBfQVJZX0ZMQUddLFxuICBbJ2JpbmQnLCBXUkFQX0JJTkRfRkxBR10sXG4gIFsnYmluZEtleScsIFdSQVBfQklORF9LRVlfRkxBR10sXG4gIFsnY3VycnknLCBXUkFQX0NVUlJZX0ZMQUddLFxuICBbJ2N1cnJ5UmlnaHQnLCBXUkFQX0NVUlJZX1JJR0hUX0ZMQUddLFxuICBbJ2ZsaXAnLCBXUkFQX0ZMSVBfRkxBR10sXG4gIFsncGFydGlhbCcsIFdSQVBfUEFSVElBTF9GTEFHXSxcbiAgWydwYXJ0aWFsUmlnaHQnLCBXUkFQX1BBUlRJQUxfUklHSFRfRkxBR10sXG4gIFsncmVhcmcnLCBXUkFQX1JFQVJHX0ZMQUddXG5dO1xuXG4vKipcbiAqIFVwZGF0ZXMgd3JhcHBlciBgZGV0YWlsc2AgYmFzZWQgb24gYGJpdG1hc2tgIGZsYWdzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcmV0dXJucyB7QXJyYXl9IGRldGFpbHMgVGhlIGRldGFpbHMgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgY3JlYXRlV3JhcGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgZGV0YWlsc2AuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBEZXRhaWxzKGRldGFpbHMsIGJpdG1hc2spIHtcbiAgYXJyYXlFYWNoKHdyYXBGbGFncywgZnVuY3Rpb24ocGFpcikge1xuICAgIHZhciB2YWx1ZSA9ICdfLicgKyBwYWlyWzBdO1xuICAgIGlmICgoYml0bWFzayAmIHBhaXJbMV0pICYmICFhcnJheUluY2x1ZGVzKGRldGFpbHMsIHZhbHVlKSkge1xuICAgICAgZGV0YWlscy5wdXNoKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGV0YWlscy5zb3J0KCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBkYXRlV3JhcERldGFpbHM7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgXy5mb3JFYWNoYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgYGFycmF5YC5cbiAqL1xuZnVuY3Rpb24gYXJyYXlFYWNoKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKGl0ZXJhdGVlKGFycmF5W2luZGV4XSwgaW5kZXgsIGFycmF5KSA9PT0gZmFsc2UpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlFYWNoO1xuIiwidmFyIGJhc2VJbmRleE9mID0gcmVxdWlyZSgnLi9fYmFzZUluZGV4T2YnKTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uaW5jbHVkZXNgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvclxuICogc3BlY2lmeWluZyBhbiBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0gdGFyZ2V0IFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB0YXJnZXRgIGlzIGZvdW5kLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGFycmF5SW5jbHVkZXMoYXJyYXksIHZhbHVlKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aDtcbiAgcmV0dXJuICEhbGVuZ3RoICYmIGJhc2VJbmRleE9mKGFycmF5LCB2YWx1ZSwgMCkgPiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheUluY2x1ZGVzO1xuIiwidmFyIGNvcHlBcnJheSA9IHJlcXVpcmUoJy4vX2NvcHlBcnJheScpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVNaW4gPSBNYXRoLm1pbjtcblxuLyoqXG4gKiBSZW9yZGVyIGBhcnJheWAgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgaW5kZXhlcyB3aGVyZSB0aGUgZWxlbWVudCBhdFxuICogdGhlIGZpcnN0IGluZGV4IGlzIGFzc2lnbmVkIGFzIHRoZSBmaXJzdCBlbGVtZW50LCB0aGUgZWxlbWVudCBhdFxuICogdGhlIHNlY29uZCBpbmRleCBpcyBhc3NpZ25lZCBhcyB0aGUgc2Vjb25kIGVsZW1lbnQsIGFuZCBzbyBvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHJlb3JkZXIuXG4gKiBAcGFyYW0ge0FycmF5fSBpbmRleGVzIFRoZSBhcnJhbmdlZCBhcnJheSBpbmRleGVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBhcnJheWAuXG4gKi9cbmZ1bmN0aW9uIHJlb3JkZXIoYXJyYXksIGluZGV4ZXMpIHtcbiAgdmFyIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IG5hdGl2ZU1pbihpbmRleGVzLmxlbmd0aCwgYXJyTGVuZ3RoKSxcbiAgICAgIG9sZEFycmF5ID0gY29weUFycmF5KGFycmF5KTtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIgaW5kZXggPSBpbmRleGVzW2xlbmd0aF07XG4gICAgYXJyYXlbbGVuZ3RoXSA9IGlzSW5kZXgoaW5kZXgsIGFyckxlbmd0aCkgPyBvbGRBcnJheVtpbmRleF0gOiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlb3JkZXI7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpLFxuICAgIGNyZWF0ZUN0b3IgPSByZXF1aXJlKCcuL19jcmVhdGVDdG9yJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgZnVuY3Rpb24gbWV0YWRhdGEuICovXG52YXIgV1JBUF9CSU5EX0ZMQUcgPSAxO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdyYXBzIGBmdW5jYCB0byBpbnZva2UgaXQgd2l0aCB0aGUgYHRoaXNgIGJpbmRpbmdcbiAqIG9mIGB0aGlzQXJnYCBhbmQgYHBhcnRpYWxzYCBwcmVwZW5kZWQgdG8gdGhlIGFyZ3VtZW50cyBpdCByZWNlaXZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGNyZWF0ZVdyYXBgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0geyp9IHRoaXNBcmcgVGhlIGB0aGlzYCBiaW5kaW5nIG9mIGBmdW5jYC5cbiAqIEBwYXJhbSB7QXJyYXl9IHBhcnRpYWxzIFRoZSBhcmd1bWVudHMgdG8gcHJlcGVuZCB0byB0aG9zZSBwcm92aWRlZCB0b1xuICogIHRoZSBuZXcgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyB3cmFwcGVkIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKGZ1bmMsIGJpdG1hc2ssIHRoaXNBcmcsIHBhcnRpYWxzKSB7XG4gIHZhciBpc0JpbmQgPSBiaXRtYXNrICYgV1JBUF9CSU5EX0ZMQUcsXG4gICAgICBDdG9yID0gY3JlYXRlQ3RvcihmdW5jKTtcblxuICBmdW5jdGlvbiB3cmFwcGVyKCkge1xuICAgIHZhciBhcmdzSW5kZXggPSAtMSxcbiAgICAgICAgYXJnc0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgIGxlZnRJbmRleCA9IC0xLFxuICAgICAgICBsZWZ0TGVuZ3RoID0gcGFydGlhbHMubGVuZ3RoLFxuICAgICAgICBhcmdzID0gQXJyYXkobGVmdExlbmd0aCArIGFyZ3NMZW5ndGgpLFxuICAgICAgICBmbiA9ICh0aGlzICYmIHRoaXMgIT09IHJvb3QgJiYgdGhpcyBpbnN0YW5jZW9mIHdyYXBwZXIpID8gQ3RvciA6IGZ1bmM7XG5cbiAgICB3aGlsZSAoKytsZWZ0SW5kZXggPCBsZWZ0TGVuZ3RoKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleF0gPSBwYXJ0aWFsc1tsZWZ0SW5kZXhdO1xuICAgIH1cbiAgICB3aGlsZSAoYXJnc0xlbmd0aC0tKSB7XG4gICAgICBhcmdzW2xlZnRJbmRleCsrXSA9IGFyZ3VtZW50c1srK2FyZ3NJbmRleF07XG4gICAgfVxuICAgIHJldHVybiBhcHBseShmbiwgaXNCaW5kID8gdGhpc0FyZyA6IHRoaXMsIGFyZ3MpO1xuICB9XG4gIHJldHVybiB3cmFwcGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVBhcnRpYWw7XG4iLCJ2YXIgY29tcG9zZUFyZ3MgPSByZXF1aXJlKCcuL19jb21wb3NlQXJncycpLFxuICAgIGNvbXBvc2VBcmdzUmlnaHQgPSByZXF1aXJlKCcuL19jb21wb3NlQXJnc1JpZ2h0JyksXG4gICAgcmVwbGFjZUhvbGRlcnMgPSByZXF1aXJlKCcuL19yZXBsYWNlSG9sZGVycycpO1xuXG4vKiogVXNlZCBhcyB0aGUgaW50ZXJuYWwgYXJndW1lbnQgcGxhY2Vob2xkZXIuICovXG52YXIgUExBQ0VIT0xERVIgPSAnX19sb2Rhc2hfcGxhY2Vob2xkZXJfXyc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIGZ1bmN0aW9uIG1ldGFkYXRhLiAqL1xudmFyIFdSQVBfQklORF9GTEFHID0gMSxcbiAgICBXUkFQX0JJTkRfS0VZX0ZMQUcgPSAyLFxuICAgIFdSQVBfQ1VSUllfQk9VTkRfRkxBRyA9IDQsXG4gICAgV1JBUF9DVVJSWV9GTEFHID0gOCxcbiAgICBXUkFQX0FSWV9GTEFHID0gMTI4LFxuICAgIFdSQVBfUkVBUkdfRkxBRyA9IDI1NjtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1pbiA9IE1hdGgubWluO1xuXG4vKipcbiAqIE1lcmdlcyB0aGUgZnVuY3Rpb24gbWV0YWRhdGEgb2YgYHNvdXJjZWAgaW50byBgZGF0YWAuXG4gKlxuICogTWVyZ2luZyBtZXRhZGF0YSByZWR1Y2VzIHRoZSBudW1iZXIgb2Ygd3JhcHBlcnMgdXNlZCB0byBpbnZva2UgYSBmdW5jdGlvbi5cbiAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBtZXRob2RzIGxpa2UgYF8uYmluZGAsIGBfLmN1cnJ5YCwgYW5kIGBfLnBhcnRpYWxgXG4gKiBtYXkgYmUgYXBwbGllZCByZWdhcmRsZXNzIG9mIGV4ZWN1dGlvbiBvcmRlci4gTWV0aG9kcyBsaWtlIGBfLmFyeWAgYW5kXG4gKiBgXy5yZWFyZ2AgbW9kaWZ5IGZ1bmN0aW9uIGFyZ3VtZW50cywgbWFraW5nIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZVxuICogZXhlY3V0ZWQgaW1wb3J0YW50LCBwcmV2ZW50aW5nIHRoZSBtZXJnaW5nIG9mIG1ldGFkYXRhLiBIb3dldmVyLCB3ZSBtYWtlXG4gKiBhbiBleGNlcHRpb24gZm9yIGEgc2FmZSBjb21iaW5lZCBjYXNlIHdoZXJlIGN1cnJpZWQgZnVuY3Rpb25zIGhhdmUgYF8uYXJ5YFxuICogYW5kIG9yIGBfLnJlYXJnYCBhcHBsaWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBkYXRhIFRoZSBkZXN0aW5hdGlvbiBtZXRhZGF0YS5cbiAqIEBwYXJhbSB7QXJyYXl9IHNvdXJjZSBUaGUgc291cmNlIG1ldGFkYXRhLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGBkYXRhYC5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhKGRhdGEsIHNvdXJjZSkge1xuICB2YXIgYml0bWFzayA9IGRhdGFbMV0sXG4gICAgICBzcmNCaXRtYXNrID0gc291cmNlWzFdLFxuICAgICAgbmV3Qml0bWFzayA9IGJpdG1hc2sgfCBzcmNCaXRtYXNrLFxuICAgICAgaXNDb21tb24gPSBuZXdCaXRtYXNrIDwgKFdSQVBfQklORF9GTEFHIHwgV1JBUF9CSU5EX0tFWV9GTEFHIHwgV1JBUF9BUllfRkxBRyk7XG5cbiAgdmFyIGlzQ29tYm8gPVxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX0NVUlJZX0ZMQUcpKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSBXUkFQX0FSWV9GTEFHKSAmJiAoYml0bWFzayA9PSBXUkFQX1JFQVJHX0ZMQUcpICYmIChkYXRhWzddLmxlbmd0aCA8PSBzb3VyY2VbOF0pKSB8fFxuICAgICgoc3JjQml0bWFzayA9PSAoV1JBUF9BUllfRkxBRyB8IFdSQVBfUkVBUkdfRkxBRykpICYmIChzb3VyY2VbN10ubGVuZ3RoIDw9IHNvdXJjZVs4XSkgJiYgKGJpdG1hc2sgPT0gV1JBUF9DVVJSWV9GTEFHKSk7XG5cbiAgLy8gRXhpdCBlYXJseSBpZiBtZXRhZGF0YSBjYW4ndCBiZSBtZXJnZWQuXG4gIGlmICghKGlzQ29tbW9uIHx8IGlzQ29tYm8pKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgdGhpc0FyZ2AgaWYgYXZhaWxhYmxlLlxuICBpZiAoc3JjQml0bWFzayAmIFdSQVBfQklORF9GTEFHKSB7XG4gICAgZGF0YVsyXSA9IHNvdXJjZVsyXTtcbiAgICAvLyBTZXQgd2hlbiBjdXJyeWluZyBhIGJvdW5kIGZ1bmN0aW9uLlxuICAgIG5ld0JpdG1hc2sgfD0gYml0bWFzayAmIFdSQVBfQklORF9GTEFHID8gMCA6IFdSQVBfQ1VSUllfQk9VTkRfRkxBRztcbiAgfVxuICAvLyBDb21wb3NlIHBhcnRpYWwgYXJndW1lbnRzLlxuICB2YXIgdmFsdWUgPSBzb3VyY2VbM107XG4gIGlmICh2YWx1ZSkge1xuICAgIHZhciBwYXJ0aWFscyA9IGRhdGFbM107XG4gICAgZGF0YVszXSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3MocGFydGlhbHMsIHZhbHVlLCBzb3VyY2VbNF0pIDogdmFsdWU7XG4gICAgZGF0YVs0XSA9IHBhcnRpYWxzID8gcmVwbGFjZUhvbGRlcnMoZGF0YVszXSwgUExBQ0VIT0xERVIpIDogc291cmNlWzRdO1xuICB9XG4gIC8vIENvbXBvc2UgcGFydGlhbCByaWdodCBhcmd1bWVudHMuXG4gIHZhbHVlID0gc291cmNlWzVdO1xuICBpZiAodmFsdWUpIHtcbiAgICBwYXJ0aWFscyA9IGRhdGFbNV07XG4gICAgZGF0YVs1XSA9IHBhcnRpYWxzID8gY29tcG9zZUFyZ3NSaWdodChwYXJ0aWFscywgdmFsdWUsIHNvdXJjZVs2XSkgOiB2YWx1ZTtcbiAgICBkYXRhWzZdID0gcGFydGlhbHMgPyByZXBsYWNlSG9sZGVycyhkYXRhWzVdLCBQTEFDRUhPTERFUikgOiBzb3VyY2VbNl07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJnUG9zYCBpZiBhdmFpbGFibGUuXG4gIHZhbHVlID0gc291cmNlWzddO1xuICBpZiAodmFsdWUpIHtcbiAgICBkYXRhWzddID0gdmFsdWU7XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgYXJ5YCBpZiBpdCdzIHNtYWxsZXIuXG4gIGlmIChzcmNCaXRtYXNrICYgV1JBUF9BUllfRkxBRykge1xuICAgIGRhdGFbOF0gPSBkYXRhWzhdID09IG51bGwgPyBzb3VyY2VbOF0gOiBuYXRpdmVNaW4oZGF0YVs4XSwgc291cmNlWzhdKTtcbiAgfVxuICAvLyBVc2Ugc291cmNlIGBhcml0eWAgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgaWYgKGRhdGFbOV0gPT0gbnVsbCkge1xuICAgIGRhdGFbOV0gPSBzb3VyY2VbOV07XG4gIH1cbiAgLy8gVXNlIHNvdXJjZSBgZnVuY2AgYW5kIG1lcmdlIGJpdG1hc2tzLlxuICBkYXRhWzBdID0gc291cmNlWzBdO1xuICBkYXRhWzFdID0gbmV3Qml0bWFzaztcblxuICByZXR1cm4gZGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtZXJnZURhdGE7XG4iLCJ2YXIgaWRlbnRpdHkgPSByZXF1aXJlKCcuL2lkZW50aXR5JyksXG4gICAgb3ZlclJlc3QgPSByZXF1aXJlKCcuL19vdmVyUmVzdCcpLFxuICAgIHNldFRvU3RyaW5nID0gcmVxdWlyZSgnLi9fc2V0VG9TdHJpbmcnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yZXN0YCB3aGljaCBkb2Vzbid0IHZhbGlkYXRlIG9yIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGFwcGx5IGEgcmVzdCBwYXJhbWV0ZXIgdG8uXG4gKiBAcGFyYW0ge251bWJlcn0gW3N0YXJ0PWZ1bmMubGVuZ3RoLTFdIFRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgcmVzdCBwYXJhbWV0ZXIuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVJlc3QoZnVuYywgc3RhcnQpIHtcbiAgcmV0dXJuIHNldFRvU3RyaW5nKG92ZXJSZXN0KGZ1bmMsIHN0YXJ0LCBpZGVudGl0eSksIGZ1bmMgKyAnJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVJlc3Q7XG4iLCJ2YXIgYXBwbHkgPSByZXF1aXJlKCcuL19hcHBseScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlTWF4ID0gTWF0aC5tYXg7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlUmVzdGAgd2hpY2ggdHJhbnNmb3JtcyB0aGUgcmVzdCBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gYXBwbHkgYSByZXN0IHBhcmFtZXRlciB0by5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9ZnVuYy5sZW5ndGgtMV0gVGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSByZXN0IHBhcmFtZXRlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgcmVzdCBhcnJheSB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlclJlc3QoZnVuYywgc3RhcnQsIHRyYW5zZm9ybSkge1xuICBzdGFydCA9IG5hdGl2ZU1heChzdGFydCA9PT0gdW5kZWZpbmVkID8gKGZ1bmMubGVuZ3RoIC0gMSkgOiBzdGFydCwgMCk7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAgaW5kZXggPSAtMSxcbiAgICAgICAgbGVuZ3RoID0gbmF0aXZlTWF4KGFyZ3MubGVuZ3RoIC0gc3RhcnQsIDApLFxuICAgICAgICBhcnJheSA9IEFycmF5KGxlbmd0aCk7XG5cbiAgICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgICAgYXJyYXlbaW5kZXhdID0gYXJnc1tzdGFydCArIGluZGV4XTtcbiAgICB9XG4gICAgaW5kZXggPSAtMTtcbiAgICB2YXIgb3RoZXJBcmdzID0gQXJyYXkoc3RhcnQgKyAxKTtcbiAgICB3aGlsZSAoKytpbmRleCA8IHN0YXJ0KSB7XG4gICAgICBvdGhlckFyZ3NbaW5kZXhdID0gYXJnc1tpbmRleF07XG4gICAgfVxuICAgIG90aGVyQXJnc1tzdGFydF0gPSB0cmFuc2Zvcm0oYXJyYXkpO1xuICAgIHJldHVybiBhcHBseShmdW5jLCB0aGlzLCBvdGhlckFyZ3MpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG92ZXJSZXN0O1xuIiwidmFyIGNhc3RTbGljZSA9IHJlcXVpcmUoJy4vX2Nhc3RTbGljZScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgc3RyaW5nVG9BcnJheSA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvQXJyYXknKSxcbiAgICB0b1N0cmluZyA9IHJlcXVpcmUoJy4vdG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gbGlrZSBgXy5sb3dlckZpcnN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZE5hbWUgVGhlIG5hbWUgb2YgdGhlIGBTdHJpbmdgIGNhc2UgbWV0aG9kIHRvIHVzZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhc2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhc2VGaXJzdChtZXRob2ROYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICBzdHJpbmcgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgdmFyIHN0clN5bWJvbHMgPSBoYXNVbmljb2RlKHN0cmluZylcbiAgICAgID8gc3RyaW5nVG9BcnJheShzdHJpbmcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIHZhciBjaHIgPSBzdHJTeW1ib2xzXG4gICAgICA/IHN0clN5bWJvbHNbMF1cbiAgICAgIDogc3RyaW5nLmNoYXJBdCgwKTtcblxuICAgIHZhciB0cmFpbGluZyA9IHN0clN5bWJvbHNcbiAgICAgID8gY2FzdFNsaWNlKHN0clN5bWJvbHMsIDEpLmpvaW4oJycpXG4gICAgICA6IHN0cmluZy5zbGljZSgxKTtcblxuICAgIHJldHVybiBjaHJbbWV0aG9kTmFtZV0oKSArIHRyYWlsaW5nO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUNhc2VGaXJzdDtcbiIsInZhciBiYXNlU2xpY2UgPSByZXF1aXJlKCcuL19iYXNlU2xpY2UnKTtcblxuLyoqXG4gKiBDYXN0cyBgYXJyYXlgIHRvIGEgc2xpY2UgaWYgaXQncyBuZWVkZWQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0IFRoZSBzdGFydCBwb3NpdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kPWFycmF5Lmxlbmd0aF0gVGhlIGVuZCBwb3NpdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBzbGljZS5cbiAqL1xuZnVuY3Rpb24gY2FzdFNsaWNlKGFycmF5LCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogZW5kO1xuICByZXR1cm4gKCFzdGFydCAmJiBlbmQgPj0gbGVuZ3RoKSA/IGFycmF5IDogYmFzZVNsaWNlKGFycmF5LCBzdGFydCwgZW5kKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0U2xpY2U7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnNsaWNlYCB3aXRob3V0IGFuIGl0ZXJhdGVlIGNhbGwgZ3VhcmQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBzbGljZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc3RhcnQ9MF0gVGhlIHN0YXJ0IHBvc2l0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtlbmQ9YXJyYXkubGVuZ3RoXSBUaGUgZW5kIHBvc2l0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBzbGljZSBvZiBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBiYXNlU2xpY2UoYXJyYXksIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gLXN0YXJ0ID4gbGVuZ3RoID8gMCA6IChsZW5ndGggKyBzdGFydCk7XG4gIH1cbiAgZW5kID0gZW5kID4gbGVuZ3RoID8gbGVuZ3RoIDogZW5kO1xuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5ndGg7XG4gIH1cbiAgbGVuZ3RoID0gc3RhcnQgPiBlbmQgPyAwIDogKChlbmQgLSBzdGFydCkgPj4+IDApO1xuICBzdGFydCA+Pj49IDA7XG5cbiAgdmFyIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGFycmF5W2luZGV4ICsgc3RhcnRdO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVNsaWNlO1xuIiwidmFyIGFzY2lpVG9BcnJheSA9IHJlcXVpcmUoJy4vX2FzY2lpVG9BcnJheScpLFxuICAgIGhhc1VuaWNvZGUgPSByZXF1aXJlKCcuL19oYXNVbmljb2RlJyksXG4gICAgdW5pY29kZVRvQXJyYXkgPSByZXF1aXJlKCcuL191bmljb2RlVG9BcnJheScpO1xuXG4vKipcbiAqIENvbnZlcnRzIGBzdHJpbmdgIHRvIGFuIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY29udmVydGVkIGFycmF5LlxuICovXG5mdW5jdGlvbiBzdHJpbmdUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gaGFzVW5pY29kZShzdHJpbmcpXG4gICAgPyB1bmljb2RlVG9BcnJheShzdHJpbmcpXG4gICAgOiBhc2NpaVRvQXJyYXkoc3RyaW5nKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJpbmdUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBhbiBBU0NJSSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXNjaWlUb0FycmF5KHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnNwbGl0KCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc2NpaVRvQXJyYXk7XG4iLCIvKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2hhcmFjdGVyIGNsYXNzZXMuICovXG52YXIgcnNBc3RyYWxSYW5nZSA9ICdcXFxcdWQ4MDAtXFxcXHVkZmZmJyxcbiAgICByc0NvbWJvTWFya3NSYW5nZSA9ICdcXFxcdTAzMDAtXFxcXHUwMzZmJyxcbiAgICByZUNvbWJvSGFsZk1hcmtzUmFuZ2UgPSAnXFxcXHVmZTIwLVxcXFx1ZmUyZicsXG4gICAgcnNDb21ib1N5bWJvbHNSYW5nZSA9ICdcXFxcdTIwZDAtXFxcXHUyMGZmJyxcbiAgICByc0NvbWJvUmFuZ2UgPSByc0NvbWJvTWFya3NSYW5nZSArIHJlQ29tYm9IYWxmTWFya3NSYW5nZSArIHJzQ29tYm9TeW1ib2xzUmFuZ2UsXG4gICAgcnNWYXJSYW5nZSA9ICdcXFxcdWZlMGVcXFxcdWZlMGYnO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIHVuaWNvZGUgY2FwdHVyZSBncm91cHMuICovXG52YXIgcnNBc3RyYWwgPSAnWycgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzQ29tYm8gPSAnWycgKyByc0NvbWJvUmFuZ2UgKyAnXScsXG4gICAgcnNGaXR6ID0gJ1xcXFx1ZDgzY1tcXFxcdWRmZmItXFxcXHVkZmZmXScsXG4gICAgcnNNb2RpZmllciA9ICcoPzonICsgcnNDb21ibyArICd8JyArIHJzRml0eiArICcpJyxcbiAgICByc05vbkFzdHJhbCA9ICdbXicgKyByc0FzdHJhbFJhbmdlICsgJ10nLFxuICAgIHJzUmVnaW9uYWwgPSAnKD86XFxcXHVkODNjW1xcXFx1ZGRlNi1cXFxcdWRkZmZdKXsyfScsXG4gICAgcnNTdXJyUGFpciA9ICdbXFxcXHVkODAwLVxcXFx1ZGJmZl1bXFxcXHVkYzAwLVxcXFx1ZGZmZl0nLFxuICAgIHJzWldKID0gJ1xcXFx1MjAwZCc7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgdW5pY29kZSByZWdleGVzLiAqL1xudmFyIHJlT3B0TW9kID0gcnNNb2RpZmllciArICc/JyxcbiAgICByc09wdFZhciA9ICdbJyArIHJzVmFyUmFuZ2UgKyAnXT8nLFxuICAgIHJzT3B0Sm9pbiA9ICcoPzonICsgcnNaV0ogKyAnKD86JyArIFtyc05vbkFzdHJhbCwgcnNSZWdpb25hbCwgcnNTdXJyUGFpcl0uam9pbignfCcpICsgJyknICsgcnNPcHRWYXIgKyByZU9wdE1vZCArICcpKicsXG4gICAgcnNTZXEgPSByc09wdFZhciArIHJlT3B0TW9kICsgcnNPcHRKb2luLFxuICAgIHJzU3ltYm9sID0gJyg/OicgKyBbcnNOb25Bc3RyYWwgKyByc0NvbWJvICsgJz8nLCByc0NvbWJvLCByc1JlZ2lvbmFsLCByc1N1cnJQYWlyLCByc0FzdHJhbF0uam9pbignfCcpICsgJyknO1xuXG4vKiogVXNlZCB0byBtYXRjaCBbc3RyaW5nIHN5bWJvbHNdKGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LXVuaWNvZGUpLiAqL1xudmFyIHJlVW5pY29kZSA9IFJlZ0V4cChyc0ZpdHogKyAnKD89JyArIHJzRml0eiArICcpfCcgKyByc1N5bWJvbCArIHJzU2VxLCAnZycpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBgc3RyaW5nYCB0byBhbiBhcnJheS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gdW5pY29kZVRvQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcubWF0Y2gocmVVbmljb2RlKSB8fCBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1bmljb2RlVG9BcnJheTtcbiIsIi8qKlxuICogVmFsaWRhdGVzIGEgVVMgRHJpdmVycyBMaWNlbnNlIGdpdmVuIGEgdHdvIGxldHRlciBhYmJyZXZpYXRpb24gb2YgdGhlIFVTXG4gKiBTdGF0ZSB0byB2YWxpZGF0ZSBpdCBpbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGljZW5zZSBEcml2ZXJzIExpY2Vuc2UgdG8gdmFsaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RhdGUgVHdvIENoYXJhY3RlciBBYmJyZXZpYXRpb24gZm9yIHRoZSBVUyBTdGF0ZSB0byB2YWxpZGF0ZVxuICogdGhlIGxpY2Vuc2UgaW4uXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGxpY2Vuc2UgaXMgdmFsaWQgb3Igbm90LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IGlzVmFsaWRVU0xpY2Vuc2UgfSA9IHJlcXVpcmUoJ0B0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlJylcbiAqXG4gKiBjb25zdCB2YWxpZCA9IGlzVmFsaWRVU0xpY2Vuc2UoJzEyMzQ1NjcnLCAnQUwnKVxuICogY29uc29sZS5sb2codmFsaWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBpc1ZhbGlkVVNMaWNlbnNlXG4gKi9cblxudmFyIGRyaXZlcnNMaWNlbnNlUmVnZXggPSByZXF1aXJlKFwiLi9saWNlbnNlLXJlZ2V4XCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGxpY2Vuc2UsIHN0YXRlKSB7XG4gIGlmICh0eXBlb2YgbGljZW5zZSAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygc3RhdGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgdmFyIHZhbGlkYXRvcnMgPSBkcml2ZXJzTGljZW5zZVJlZ2V4W3N0YXRlXTtcbiAgaWYgKCF2YWxpZGF0b3JzKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGNsZWFuTGljZW5zZSA9IGxpY2Vuc2UucmVwbGFjZSgvW1xccy1dL2csICcnKTtcbiAgdmFyIHJlYXNvbnMgPSB2YWxpZGF0b3JzXG4gICAgLmZpbHRlcihmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiAhdmFsLnJlZ2V4LnRlc3QoY2xlYW5MaWNlbnNlKTtcbiAgICB9KVxuICAgIC5tYXAoZnVuY3Rpb24odmFsKSB7XG4gICAgICByZXR1cm4gdmFsLmRlc2NyaXB0aW9uO1xuICAgIH0pO1xuICByZXR1cm4gcmVhc29ucy5sZW5ndGggPCB2YWxpZGF0b3JzLmxlbmd0aDtcbn07XG4iLCIvKipcbiAqIFZhbGlkYXRlcyBhIFVTIERyaXZlcnMgTGljZW5zZSBnaXZlbiBhIHR3byBsZXR0ZXIgYWJicmV2aWF0aW9uIG9mIHRoZSBVU1xuICogU3RhdGUgdG8gdmFsaWRhdGUgaXQgaW4uXG4gKiBTaW1pbGFyIHRvIGlzVmFsaWRVU0xpY2Vuc2UgYnV0IHJldHVybnMgYW4gb2JqZWN0IHdpdGggYSAndmFsaWQnXG4gKiBib29sZWFuIHByb3BlcnR5IGZvciB0aGUgdmFsaWRhdGlvbiBpdHNlbGYsIGFzIHdlbGwgYXMgYSByZWFzb25zIGFycmF5IHRoYXRcbiAqIGF0dGVtcHRzIHRvIGV4cGxhaW4gdGhlIHJlc3VsdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsaWNlbnNlIERyaXZlcnMgTGljZW5zZSB0byB2YWxpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdGF0ZSBUd28gQ2hhcmFjdGVyIEFiYnJldmlhdGlvbiBmb3IgdGhlIFVTIFN0YXRlIHRvIHZhbGlkYXRlXG4gKiB0aGUgbGljZW5zZSBpbi5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIHRoZSB2YWxpZGF0aW9uIGFuZCBhIHJlYXNvbnNcbiAqIGFycmF5LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NycsICdBTCcpXG4gKiBjb25zb2xlLmxvZyh2YWxpZExpY2Vuc2UudmFsaWQpIC8vIHRydWVcbiAqIGNvbnN0IHZhbGlkTGljZW5zZSA9IHZhbGlkYXRlVVNEcml2ZXJzTGljZW5zZSgnMTIzNDU2NzgnLCAnQUwnKSAvL1xuICogY29uc29sZS5sb2codmFsaWRMaWNlbnNlLnJlYXNvbnMpIC8vIFsnTGljZW5zZSBtdXN0IGJlIDEtNyBudW1iZXJzJ11cbiAqXG4gKiBAbmFtZSB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2VcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGljZW5zZSwgc3RhdGUpIHtcbiAgaWYgKHR5cGVvZiBsaWNlbnNlICE9PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBzdGF0ZSAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgcmVhc29uczogWydMaWNlbnNlIGFuZCBTdGF0ZSBtdXN0IGJlIFN0cmluZ3MnXSB9O1xuICB9XG4gIHZhciB2YWxpZGF0b3JzID0gZHJpdmVyc0xpY2Vuc2VSZWdleFtzdGF0ZV07XG4gIGlmICghdmFsaWRhdG9ycykgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb25zOiBbJ05vdCBhIHZhbGlkIFVTIFN0YXRlJ10gfTtcbiAgY29uc3QgY2xlYW5MaWNlbnNlID0gbGljZW5zZS5yZXBsYWNlKC9bXFxzLV0vZywgJycpO1xuICB2YXIgcmVhc29ucyA9IHZhbGlkYXRvcnNcbiAgICAuZmlsdGVyKGZ1bmN0aW9uKHZhbCkge1xuICAgICAgcmV0dXJuICF2YWwucmVnZXgudGVzdChjbGVhbkxpY2Vuc2UpO1xuICAgIH0pXG4gICAgLm1hcChmdW5jdGlvbih2YWwpIHtcbiAgICAgIHJldHVybiB2YWwuZGVzY3JpcHRpb247XG4gICAgfSk7XG4gIHJldHVybiB7IHZhbGlkOiByZWFzb25zLmxlbmd0aCA8IHZhbGlkYXRvcnMubGVuZ3RoLCByZWFzb25zIH1cbn07XG4iLCIvKipcbiAqIExpc3Qgb2Ygc3VwcG9ydGVkIFVTIFN0YXRlcyBhcyBhbiBhcnJheVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCB7IHN1cHBvcnRlZFN0YXRlcyB9ID0gcmVxdWlyZSgnQHR1cm5haS92YWxpZGF0ZS11cy1kcml2ZXJzLWxpY2Vuc2UnKVxuICpcbiAqIGNvbnN0IGlzU3VwcG9ydGVkID0gY3VycmVudFN0YXRlcy5pbmNsdWRlcygnSUwnKVxuICogY29uc29sZS5sb2coaXNTdXBwb3J0ZWQpIC8vIHRydWVcbiAqXG4gKiBAbmFtZSBzdXBwb3J0ZWRTdGF0ZXNcbiAqL1xuXG52YXIgZHJpdmVyc0xpY2Vuc2VSZWdleCA9IHJlcXVpcmUoXCIuL2xpY2Vuc2UtcmVnZXhcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMoZHJpdmVyc0xpY2Vuc2VSZWdleCk7XG4iLCJ2YXIgYmFzZVJhbmdlID0gcmVxdWlyZSgnLi9fYmFzZVJhbmdlJyksXG4gICAgaXNJdGVyYXRlZUNhbGwgPSByZXF1aXJlKCcuL19pc0l0ZXJhdGVlQ2FsbCcpLFxuICAgIHRvRmluaXRlID0gcmVxdWlyZSgnLi90b0Zpbml0ZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBgXy5yYW5nZWAgb3IgYF8ucmFuZ2VSaWdodGAgZnVuY3Rpb24uXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgcmFuZ2UgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVJhbmdlKGZyb21SaWdodCkge1xuICByZXR1cm4gZnVuY3Rpb24oc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIGlmIChzdGVwICYmIHR5cGVvZiBzdGVwICE9ICdudW1iZXInICYmIGlzSXRlcmF0ZWVDYWxsKHN0YXJ0LCBlbmQsIHN0ZXApKSB7XG4gICAgICBlbmQgPSBzdGVwID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBFbnN1cmUgdGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gICAgc3RhcnQgPSB0b0Zpbml0ZShzdGFydCk7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICAgIHN0YXJ0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5kID0gdG9GaW5pdGUoZW5kKTtcbiAgICB9XG4gICAgc3RlcCA9IHN0ZXAgPT09IHVuZGVmaW5lZCA/IChzdGFydCA8IGVuZCA/IDEgOiAtMSkgOiB0b0Zpbml0ZShzdGVwKTtcbiAgICByZXR1cm4gYmFzZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXAsIGZyb21SaWdodCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmFuZ2U7XG4iLCIvKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyBmb3IgdGhvc2Ugd2l0aCB0aGUgc2FtZSBuYW1lIGFzIG90aGVyIGBsb2Rhc2hgIG1ldGhvZHMuICovXG52YXIgbmF0aXZlQ2VpbCA9IE1hdGguY2VpbCxcbiAgICBuYXRpdmVNYXggPSBNYXRoLm1heDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5yYW5nZWAgYW5kIGBfLnJhbmdlUmlnaHRgIHdoaWNoIGRvZXNuJ3RcbiAqIGNvZXJjZSBhcmd1bWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBUaGUgc3RhcnQgb2YgdGhlIHJhbmdlLlxuICogQHBhcmFtIHtudW1iZXJ9IGVuZCBUaGUgZW5kIG9mIHRoZSByYW5nZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGVwIFRoZSB2YWx1ZSB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGJ5LlxuICogQHBhcmFtIHtib29sZWFufSBbZnJvbVJpZ2h0XSBTcGVjaWZ5IGl0ZXJhdGluZyBmcm9tIHJpZ2h0IHRvIGxlZnQuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIHJhbmdlIG9mIG51bWJlcnMuXG4gKi9cbmZ1bmN0aW9uIGJhc2VSYW5nZShzdGFydCwgZW5kLCBzdGVwLCBmcm9tUmlnaHQpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBuYXRpdmVNYXgobmF0aXZlQ2VpbCgoZW5kIC0gc3RhcnQpIC8gKHN0ZXAgfHwgMSkpLCAwKSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KGxlbmd0aCk7XG5cbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgcmVzdWx0W2Zyb21SaWdodCA/IGxlbmd0aCA6ICsraW5kZXhdID0gc3RhcnQ7XG4gICAgc3RhcnQgKz0gc3RlcDtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VSYW5nZTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHBvdGVudGlhbCBpdGVyYXRlZSB2YWx1ZSBhcmd1bWVudC5cbiAqIEBwYXJhbSB7Kn0gaW5kZXggVGhlIHBvdGVudGlhbCBpdGVyYXRlZSBpbmRleCBvciBrZXkgYXJndW1lbnQuXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgcG90ZW50aWFsIGl0ZXJhdGVlIG9iamVjdCBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgYXJndW1lbnRzIGFyZSBmcm9tIGFuIGl0ZXJhdGVlIGNhbGwsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0l0ZXJhdGVlQ2FsbCh2YWx1ZSwgaW5kZXgsIG9iamVjdCkge1xuICBpZiAoIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgaW5kZXg7XG4gIGlmICh0eXBlID09ICdudW1iZXInXG4gICAgICAgID8gKGlzQXJyYXlMaWtlKG9iamVjdCkgJiYgaXNJbmRleChpbmRleCwgb2JqZWN0Lmxlbmd0aCkpXG4gICAgICAgIDogKHR5cGUgPT0gJ3N0cmluZycgJiYgaW5kZXggaW4gb2JqZWN0KVxuICAgICAgKSB7XG4gICAgcmV0dXJuIGVxKG9iamVjdFtpbmRleF0sIHZhbHVlKTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJdGVyYXRlZUNhbGw7XG4iLCJpbXBvcnQgeyBjcmVhdGUgfSBmcm9tIFwiYXBpc2F1Y2VcIjtcbmltcG9ydCB7IGJ0b2EgfSBmcm9tIFwiQmFzZTY0XCI7XG5cbmNsYXNzIEJhc2VBUEkge1xuICBjb25zdHJ1Y3RvcihiYXNlVVJMLCB0d2lsaW9LZXkpIHtcbiAgICBpZiAoYmFzZVVSTCkge1xuICAgICAgdGhpcy5hcGkgPSBjcmVhdGUoe1xuICAgICAgICBiYXNlVVJMLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHR3aWxpb0tleSkgeyB0aGlzLnR3aWxpb0tleSA9IHR3aWxpb0tleTsgfVxuICB9XG4gIHNldFRva2VuKHRva2VuKSB7XG4gICAgaWYgKCF0b2tlbikgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5hcGkuc2V0SGVhZGVycyh7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHNldFN0YXR1c1ByZWZlcmVuY2Uoc3RhdHVzKSB7XG4gICAgaWYgKCFzdGF0dXMpIHJldHVybiB0aGlzO1xuICAgIHRoaXMuYXBpLnNldEhlYWRlcnMoeyBQcmVmZXI6IGBzdGF0dXM9JHtzdGF0dXN9YCB9KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICBhcHByb3ZlV29ya2VyID0gKGlkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucHV0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9hcHByb3ZlYCwgcGFyYW1zKTtcbiAgd2l0aGRyYXdXb3JrZXIgPSAoaWQsIHBhcmFtcykgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS93aXRoZHJhd2AsIHBhcmFtcyk7XG4gIHJlamVjdFdvcmtlciA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnB1dChgL3BhcnRuZXJzL21lL3dvcmtlcnMvJHtpZH0vcmVqZWN0YCwgcGFyYW1zKTtcbiAgZ2V0TWVtYmVyID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL3BhcnRuZXJzL21lXCIpO1xuICBnZXRTZXR0aW5ncyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9wYXJ0bmVycy9zZXR0aW5nc1wiKTtcbiAgZ2V0V29ya2VycyA9IHBhcmFtcyA9PlxuICAgIHRoaXMuYXBpLmdldChgL3BhcnRuZXJzL21lL3dvcmtlcnM/cXVlcnk9JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfWApO1xuICBnZXRQZW5kaW5nV29ya2VycyA9IHBhcmFtcyA9PlxuICAgIHRoaXMuYXBpLmdldChgL2NvaG9ydC9jYW5kaWRhdGVzP3F1ZXJ5PSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gKTtcbiAgZ2V0V29ya2VyID0gaWQgPT4gdGhpcy5hcGkuZ2V0KGAvcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfT9mdWxsPWZhbHNlYCk7XG4gIGNoZWNrV29ya2VyID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvcGFydG5lcnMvd29ya2Vyc1wiLCBwYXJhbXMpO1xuICB2YWxpZGF0ZVBob25lID0gcGhvbmUgPT5cbiAgICB0aGlzLmFwaS5nZXQoYFBob25lTnVtYmVycy8ke3Bob25lfT9UeXBlPWNhcnJpZXImQ291bnRyeUNvZGU9VVNgLCBudWxsLCB7XG4gICAgICBoZWFkZXJzOiB7IEF1dGhvcml6YXRpb246IGBCYXNpYyAke2J0b2EoVFdJTElPX0tFWSl9YCB9XG4gICAgfSk7XG4gIHZhbGlkYXRlRW1haWwgPSBlbWFpbCA9PlxuICAgIHRoaXMuYXBpLmdldChgL3ZlcmlmeV9lbWFpbD9lbWFpbD0ke2VuY29kZVVSSUNvbXBvbmVudChlbWFpbCl9YCk7XG4gIHZhbGlkYXRlU1NOID0gKGVtYWlsX2lkLCBzc24pID0+XG4gICAgdGhpcy5hcGkucG9zdChgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfS92YWxpZGF0ZWAsIHtcbiAgICAgIHNzblxuICAgIH0pO1xuICB2YWxpZGF0ZUNhbmRpZGF0ZUVtYWlsID0gKGVtYWlsX2lkLCBlbWFpbCkgPT5cbiAgICB0aGlzLmFwaS5nZXQoXG4gICAgICBgL2NhbmRpZGF0ZV92ZXJpZnlfZW1haWwvJHtlbWFpbF9pZH0/ZW1haWw9JHtlbmNvZGVVUklDb21wb25lbnQoZW1haWwpfWBcbiAgICApO1xuICBnZXRDYW5kaWRhdGVEYXRhID0gZW1haWxfaWQgPT5cbiAgICB0aGlzLmFwaS5nZXQoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH1gKTtcbiAgZ2V0SW50ZXJlc3RzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL2ludGVyZXN0c1wiKTtcbiAgZ2V0VHJhbnNwb3J0cyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi90cmFuc3BvcnRzXCIpO1xuICBnZXRQYXltZXRNZXRob2QgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvcGF5bWVudF9zZXR0aW5ncy9wYXJ0bmVyX21ldGhvZHNcIik7XG4gIGdldEJhY2tncm91bmRSZXBvcnQgPSAoZW1haWxfaWQsIHRva2VuKSA9PlxuICAgIHRoaXMuYXBpLmdldChcbiAgICAgIGAvY2FuZGlkYXRlX2NvbnNlbnRfZW1haWwvY2FuZGlkYXRlLyR7ZW1haWxfaWR9L3JlcG9ydD90b2tlbj0ke3Rva2VufWBcbiAgICApO1xuICBwcm92aWRlQ2FuZGlkYXRlQ29uc2VudCA9IChlbWFpbF9pZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC9jYW5kaWRhdGUvJHtlbWFpbF9pZH1gLCBwYXJhbXMpO1xuICBwcm92aWRlQ2FuZGlkYXRlQ29uc2VudEFzeW5jID0gKGVtYWlsX2lkLCBwYXJhbXMpID0+XG4gICAgdGhpcy5hcGkucG9zdChcbiAgICAgIGAvY2FuZGlkYXRlX2NvbnNlbnRfZW1haWwvY2FuZGlkYXRlLyR7ZW1haWxfaWR9L2FzeW5jYCxcbiAgICAgIHBhcmFtc1xuICAgICk7XG4gIGdldFRyaWFsU3RhdHVzID0gKCkgPT4gdGhpcy5hcGkuZ2V0KFwiL29yZ2FuaXphdGlvbnMvdHJpYWxfc3RhdHVzXCIpO1xuICBuZXdDYW5kaWRhdGUgPSAoKSA9PiB0aGlzLmFwaS5nZXQoXCIvb3JnYW5pemF0aW9ucy9uZXdfY2FuZGlkYXRlXCIpO1xuICBnZXRUZXJtcyA9ICgpID0+IHRoaXMuYXBpLmdldChcIi9wYXJ0bmVycy90ZXJtc1wiKTtcbiAgY29uc2VudCA9IHBhcmFtcyA9PiB0aGlzLmFwaS5wb3N0KFwiL3BhcnRuZXJzL21lL2NvbnNlbnRcIiwgcGFyYW1zKTtcbiAgYXBwbHkgPSAoeyBwYXJ0bmVyX25hbWUsIHBhcnRuZXJfaWR9KSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jYW5kaWRhdGVfY29uc2VudF9lbWFpbC8ke3BhcnRuZXJfbmFtZX0vJHtwYXJ0bmVyX2lkfWAsIHt9KTtcbiAgYXNzZW50ID0gKGVtYWlsX2lkLCBkYXRhKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoXG4gICAgICBgL2NhbmRpZGF0ZV9jb25zZW50X2VtYWlsL2NhbmRpZGF0ZS8ke2VtYWlsX2lkfS9hc3NlbnRgLFxuICAgICAgZGF0YVxuICAgICk7XG4gIGdldENvaG9ydENvdW50ID0gcGFyYW1zID0+XG4gICAgdGhpcy5hcGkuZ2V0KGAvY29ob3J0L2NvdW50P3F1ZXJ5PSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gKTtcbiAgY3JlYXRlQ29ob3J0ID0gcGFyYW1zID0+IHRoaXMuYXBpLnBvc3QoXCIvY29ob3J0XCIsIHBhcmFtcyk7XG4gIHJlcXVlc3RDb2hvcnRXb3JrZXJzID0gKGNvaG9ydF9pZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnBvc3QoYC9jb2hvcnQvJHtjb2hvcnRfaWR9L3JlcXVlc3RgLCBwYXJhbXMpO1xuICBnZXROb3RlcyA9IGlkID0+IHRoaXMuYXBpLmdldChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2ApO1xuICBzYXZlTm90ZSA9IChpZCwgcGFyYW1zKSA9PlxuICAgIHRoaXMuYXBpLnB1dChgcGFydG5lcnMvbWUvd29ya2Vycy8ke2lkfS9ub3Rlc2AsIHBhcmFtcyk7XG4gIHJlc2VuZEVtYWlsID0gaWQgPT5cbiAgICB0aGlzLmFwaS5wb3N0KGBwYXJ0bmVycy9tZS93b3JrZXJzLyR7aWR9L2VtYWlsL2NvbnNlbnQvcmVzZW5kYCk7XG4gIHBvc3RTZXR0aW5ncyA9ICh1cmwsIHBhcmFtcykgPT4gdGhpcy5hcGkucG9zdCh1cmwsIHBhcmFtcyk7XG4gIGJ0b2FUZXN0ID0gc3RyaW5nID0+IGJ0b2Eoc3RyaW5nKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2VBUEk7IiwiLy9UdXJuIFByaW1hcnkgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IHByaW1hcnkgPSBcIiMyRDMwNDdcIjsgLy9Db29sR3JheSBvciBTcGFjZUNhZGV0XG5leHBvcnQgY29uc3Qgc2Vjb25kYXJ5ID0gXCIjMDBEOUNEXCI7IC8vVHVycXVvaXNlXG5leHBvcnQgY29uc3QgZW1lcmFsZCA9IFwiIzBlZDA2N1wiO1xuZXhwb3J0IGNvbnN0IHRhcnRPcmFuZ2UgPSBcIiNmYjRkNDlcIjtcbmV4cG9ydCBjb25zdCB5ZWxsb3dPcmFuZ2UgPSBcIiNmYWE3M2NcIjtcblxuLy9UdXJuIEdyZXkgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IHNsYXRlR3JheSA9IFwiIzVmN2Q5NVwiO1xuZXhwb3J0IGNvbnN0IGNhZGV0Qmx1ZSA9IFwiIzliYjFjOFwiO1xuZXhwb3J0IGNvbnN0IHBlcml3aW5rbGUgPSBcIiNiZmNkZGRcIjtcbmV4cG9ydCBjb25zdCBhbGljZUJsdWUgPSBcIiNlMWU4ZjNcIjtcbmV4cG9ydCBjb25zdCBzbW9rZVdoaXRlID0gXCIjZjdmOWZjXCI7XG5cbi8vVHVybiBBbGVydHMgUGFsZXR0ZVxuZXhwb3J0IGNvbnN0IGFsZXJ0MCA9IHNsYXRlR3JheTtcbmV4cG9ydCBjb25zdCBhbGVydDEgPSBlbWVyYWxkO1xuZXhwb3J0IGNvbnN0IGFsZXJ0MiA9IHRhcnRPcmFuZ2U7XG5leHBvcnQgY29uc3QgYWxlcnQzID0geWVsbG93T3JhbmdlO1xuZXhwb3J0IGNvbnN0IGNlcnVsZWFuQmx1ZSA9IFwiIzQzNTdhZFwiO1xuXG4vL1R1cm4gU2Vjb25kYXJ5IFBhbGV0dGUgMVxuZXhwb3J0IGNvbnN0IHBlYWNoID0gXCIjZjljYjljXCI7XG5leHBvcnQgY29uc3QgYmFieVBpbmsgPSBcIiNmNGNjY2NcIjtcbmV4cG9ydCBjb25zdCBzcGFuaXNoUGluayA9IFwiI2U2YjhhZlwiO1xuZXhwb3J0IGNvbnN0IGJlYXVCbHVlID0gXCIjY2ZlMmYzXCI7XG5leHBvcnQgY29uc3QgY3VsdHVyZWQgPSBcIiNlM2U5ZWRcIjtcblxuLy9UdXJuIFNlY29uZGFyeSBQYWxldHRlIDJcbmV4cG9ydCBjb25zdCBibHVlQmVsbCA9IFwiI2I0YTdkNlwiO1xuZXhwb3J0IGNvbnN0IGJhYnlCbHVlRXllcyA9IFwiIzlmYzVlOFwiO1xuZXhwb3J0IGNvbnN0IHBvd2RlckJsdWUgPSBcIiNiN2VjZWNcIjtcbmV4cG9ydCBjb25zdCBob25leURldyA9IFwiI2Q5ZWFkM1wiO1xuZXhwb3J0IGNvbnN0IGJ1ZmYgPSBcIiNmZmU1OTlcIjtcblxuLy9PdGhlcnNcbmV4cG9ydCBjb25zdCBibGFjayA9IFwiIzAwMFwiO1xuZXhwb3J0IGNvbnN0IHdoaXRlID0gXCIjZmZmXCI7XG5cbi8vTm90aWNlIGNvbG9yc1xuZXhwb3J0IGNvbnN0IG5vdGljZU11dGVkID0gc2xhdGVHcmF5O1xuZXhwb3J0IGNvbnN0IG5vdGljZUVycm9yID0gXCIjZmY2YzY5XCI7XG5leHBvcnQgY29uc3Qgbm90aWNlV2FybmluZyA9IFwiI2ZhYTAzY1wiO1xuZXhwb3J0IGNvbnN0IG5vdGljZVN1Y2Nlc3MgPSBcIiMxM2MwNjNcIjtcbmV4cG9ydCBjb25zdCBub3RpY2VJbmZvID0gc2xhdGVHcmF5O1xuIiwiY29uc3QgcGFyc2VQeXRob25EYXRlID0gZGF0ZSA9PiB7XG4gIGlmICghaXNOYU4ocGFyc2VJbnQoZGF0ZSwgMTApKSkge1xuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlICogMTAwMCk7XG4gICAgY29uc3QgdGltZSA9IGQuZ2V0VGltZSgpO1xuICAgIGlmICh0aW1lKSB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGltZSArIGQuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwICogMTAwMCk7XG4gICAgICBjb25zdCBvZmZzZXQgPSBkLmdldFRpbWV6b25lT2Zmc2V0KCkgLyA2MDtcbiAgICAgIGNvbnN0IGhvdXJzID0gZC5nZXRIb3VycygpO1xuICAgICAgbmV3RGF0ZS5zZXRIb3Vycyhob3VycyAtIG9mZnNldCk7XG4gICAgICByZXR1cm4gbmV3RGF0ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwYXJzZVB5dGhvbkRhdGU7XG4iLCJpbXBvcnQgcGFyc2VQeXRob25EYXRlIGZyb20gXCIuL3BhcnNlLXB5dGhvbi1kYXRlXCI7XG5cbmNvbnN0IGZvcm1hdERhdGUgPSBkYXRlID0+IHtcbiAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlUHl0aG9uRGF0ZShkYXRlKTtcbiAgaWYgKCFwYXJzZWREYXRlKSByZXR1cm4gXCJOL0FcIjtcbiAgcmV0dXJuIGAke3BhcnNlZERhdGUuZ2V0TW9udGgoKSArXG4gICAgMX0vJHtwYXJzZWREYXRlLmdldERhdGUoKX0vJHtwYXJzZWREYXRlLmdldEZ1bGxZZWFyKCl9YDtcbn07XG5leHBvcnQgZGVmYXVsdCBmb3JtYXREYXRlO1xuIiwiY29uc3QgZm9ybWF0RW1haWwgPSBlbWFpbCA9PiB7XG4gIGlmICh0eXBlb2YgZW1haWwgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gZW1haWwucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdEVtYWlsO1xuIiwiY29uc3QgZm9ybWF0TmFtZSA9IG5hbWUgPT4ge1xuICBpZiAodHlwZW9mIG5hbWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKC9cXHNcXHMrL2csIFwiIFwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1hdE5hbWU7XG4iLCJjb25zdCBmb3JtYXRQaG9uZSA9IChwaG9uZSwgZW5jcnlwdGVkID0gZmFsc2UpID0+IHtcbiAgaWYgKHR5cGVvZiBwaG9uZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiTi9BXCI7XG4gIGxldCBwaG9uZU51bWJlciA9IGVuY3J5cHRlZFxuICAgID8gcGhvbmVcbiAgICA6IHBob25lLnJlcGxhY2UoL1xcRC9nLCBcIlwiKS5zdWJzdHJpbmcoMCwgMTEpO1xuICBsZXQgYXJlYUNvZGU7XG4gIGlmIChwaG9uZU51bWJlci5sZW5ndGggPCAxMCkgcmV0dXJuIHBob25lTnVtYmVyO1xuICBpZiAocGhvbmVOdW1iZXIubGVuZ3RoID4gMTApIHtcbiAgICBhcmVhQ29kZSA9IHBob25lTnVtYmVyWzBdO1xuICAgIHBob25lTnVtYmVyID0gcGhvbmVOdW1iZXIuc3Vic3RyaW5nKDEsIDExKTtcbiAgfVxuICBwaG9uZU51bWJlciA9IHBob25lTnVtYmVyLm1hdGNoKC8uezEsM30vZyk7XG4gIHJldHVybiByZW5kZXJQaG9uZSh7IHBob25lOiBwaG9uZU51bWJlciwgZW5jcnlwdGVkLCBhcmVhQ29kZSB9KTtcbn07XG5cbmNvbnN0IHJlbmRlclBob25lID0gKHsgcGhvbmUsIGVuY3J5cHRlZCwgYXJlYUNvZGUgfSkgPT4ge1xuICBsZXQgcGhvbmVOdW1iZXIgPSBlbmNyeXB0ZWRcbiAgICA/IGAoJHtwaG9uZVswXX0pICR7cGhvbmVbMV19ICR7cGhvbmVbMl19JHtwaG9uZVszXX1gXG4gICAgOiBgKCR7cGhvbmVbMF19KSAke3Bob25lWzFdfS0ke3Bob25lWzJdfSR7cGhvbmVbM119YDtcbiAgcGhvbmVOdW1iZXIgPSBhcmVhQ29kZSA/IGAke2FyZWFDb2RlfSAke3Bob25lTnVtYmVyfWAgOiBwaG9uZU51bWJlcjtcbiAgcmV0dXJuIHBob25lTnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0UGhvbmU7XG4iLCJjb25zdCBmb3JtYXRTU04gPSBzc24gPT4ge1xuICBpZiAodHlwZW9mIHNzbiAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIFwiTi9BXCI7XG4gIGNvbnN0IHNzbk51bWJlciA9IHNzbi5yZXBsYWNlKC9cXEQvZywgXCJcIikuc3Vic3RyaW5nKDAsIDkpO1xuICBpZiAoc3NuTnVtYmVyLmxlbmd0aCA8IDkpIHJldHVybiBzc25OdW1iZXI7XG4gIHJldHVybiBgJHtzc25OdW1iZXIuc3Vic3RyaW5nKDAsIDMpfS0ke3Nzbk51bWJlci5zdWJzdHJpbmcoXG4gICAgMyxcbiAgICA1XG4gICl9LSR7c3NuTnVtYmVyLnN1YnN0cmluZyg1LCA5KX1gO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0U1NOO1xuIiwiY29uc3QgZm9ybWF0WmlwY29kZSA9IHppcGNvZGUgPT4ge1xuICBpZiAodHlwZW9mIHppcGNvZGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIlwiO1xuICByZXR1cm4gemlwY29kZS5yZXBsYWNlKC9cXEQvZywgXCJcIikuc3Vic3RyaW5nKDAsIDUpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZm9ybWF0WmlwY29kZTtcbiIsImNvbnN0IGdldFJlamVjdE1lc3NhZ2UgPSBwYXJ0bmVyX3R5cGUgPT4ge1xuICBpZiAoIVtcIlJJU0tfTUFOQUdFTUVOVFwiLCBcIkZDUkFfRVwiLCBcIkZDUkFfTlwiLCBcIkZDUkFcIl0uaW5jbHVkZXMocGFydG5lcl90eXBlKSlcbiAgICByZXR1cm4gXCJSZWplY3RcIjtcbiAgY29uc3QgcmVqZWN0TWVzc2FnZXMgPSB7XG4gICAgUklTS19NQU5BR0VNRU5UOiBcIlJlamVjdFwiLFxuICAgIEZDUkE6IFwiUHJlLUFkdmVyc2UgQWN0aW9uXCIsXG4gICAgRkNSQV9FOiBcIlByZS1BZHZlcnNlIEFjdGlvblwiLFxuICAgIEZDUkFfTjogXCJBZHZlcnNlIEFjdGlvblwiXG4gIH07XG4gIHJldHVybiByZWplY3RNZXNzYWdlc1twYXJ0bmVyX3R5cGVdO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UmVqZWN0TWVzc2FnZTtcbiIsImV4cG9ydCBjb25zdCBnZXRTdGF0dXMgPSBzdGF0dXMgPT4ge1xuICBjb25zdCBzdGF0dXNNYXAgPSB7XG4gICAgcmV2aWV3OiBcInJldmlld2luZ1wiLFxuICAgIHBlbmRpbmc6IFwiY29uc2lkZXJcIixcbiAgICBcInJldmlld19faWRlbnRpdHlcIjogXCJ2ZXJpZnlpbmdcIixcbiAgICBcInJldmlld19fbXZyXCI6IFwiQ29tcGxpYW5jZSBSZXZpZXdcIixcbiAgICBcInJldmlld19fc29cIjogXCJDb21wbGlhbmNlIFJldmlld1wiLFxuICAgIFwicmV2aWV3X19xYVwiOiBcIkNvbXBsaWFuY2UgUmV2aWV3XCIsXG4gICAgaW5pdGlhdGVkOiBcIlN0b3JlZFwiXG4gIH07XG5cbiAgcmV0dXJuIHN0YXR1c01hcFtzdGF0dXNdIHx8IHN0YXR1cztcbn07XG4iLCJjb25zdCBpc0RhdGUgPSB2YWx1ZSA9PiB7XG4gIGlmIChpc05hTihwYXJzZUludCh2YWx1ZSwgMTApKSkgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUgKiAxMDAwKTtcbiAgY29uc3QgcmlnaHROb3cgPSBuZXcgRGF0ZSgpO1xuICBpZiAoZGF0ZSA+IHJpZ2h0Tm93KSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBkYXRlLmdldFllYXIoKSA+IDEwMDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGlzRGF0ZTtcbiIsImNvbnN0IGlzT2JqZWN0ID0gZGF0YSA9PiAhIWRhdGEgJiYgZGF0YS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdDtcbiIsImNvbnN0IGlzVXJsID0gdXJsU3RyaW5nID0+IHtcbiAgY29uc3QgcmVnZXhwID0gLyhmdHB8aHR0cHxodHRwcyk6XFwvXFwvKFxcdys6ezAsMX1cXHcqQCk/KFxcUyspKDpbMC05XSspPyhcXC98XFwvKFtcXHcjITouPys9JiVAIVxcLS9dKSk/LztcbiAgcmV0dXJuIHJlZ2V4cC50ZXN0KHVybFN0cmluZyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBpc1VybDtcbiIsImNvbnN0IHRlcm1zID0gW1wiVHVybiBUZWNobm9sb2dpZXMgSW5jLlwiLCBcIltDT01QQU5ZXVwiXTtcbmNvbnN0IGxlZ2FsUmVwbGFjZSA9IChvcmlnaW5hbCA9IFwiXCIsIHJlcGxhY2VtZW50ID0gXCJcIikgPT4ge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsICE9PSBcInN0cmluZ1wiKSByZXR1cm4gXCJcIjtcbiAgbGV0IHJldHVyblZhbCA9IG9yaWdpbmFsO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRlcm1zLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wbHVzcGx1c1xuICAgIHJldHVyblZhbCA9IHJldHVyblZhbC5yZXBsYWNlKHRlcm1zW2ldLCByZXBsYWNlbWVudCk7XG4gIH1cbiAgcmV0dXJuIHJldHVyblZhbDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxlZ2FsUmVwbGFjZTtcbiIsImNvbnN0IG1hc2tOYW1lID0gbmFtZSA9PlxuICB0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBuYW1lLmxlbmd0aCA+IDAgPyBgJHtuYW1lLnNsaWNlKDAsIDEpfS5gIDogbmFtZTtcblxuZXhwb3J0IGRlZmF1bHQgbWFza05hbWU7XG4iLCJpbXBvcnQgaXNPYmplY3QgZnJvbSBcIi4vaXMtb2JqZWN0XCI7XG5cbmNvbnN0IG9iamVjdFRvUXVlcnkgPSBxdWVyeSA9PiB7XG4gIGlmICghaXNPYmplY3QocXVlcnkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHF1ZXJ5KTtcbiAgaWYgKGtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgcXVlcnlBcnJheSA9IGtleXMubWFwKGtleSA9PiBgJHtrZXl9PSR7cXVlcnlba2V5XX1gKTtcbiAgcmV0dXJuIGA/JHtxdWVyeUFycmF5LmpvaW4oXCImXCIpfWA7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBvYmplY3RUb1F1ZXJ5O1xuIiwiY29uc3QgcGFyc2VRdWVyeSA9IHF1ZXJ5ID0+IHtcbiAgaWYgKHR5cGVvZiBxdWVyeSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHF1ZXJ5O1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHF1ZXJ5LnN0YXJ0c1dpdGgoXCI/XCIpID8gcXVlcnkuc2xpY2UoMSkgOiBxdWVyeSk7XG4gIGNvbnN0IG9iaiA9IHt9O1xuICBwYXJhbXMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgIG9ialtrZXldID0gdmFsdWU7XG4gIH0pO1xuICByZXR1cm4gb2JqO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcGFyc2VRdWVyeTtcbiIsImltcG9ydCAqIGFzIGNvbG9ycyBmcm9tIFwiLi4vc3R5bGVzL2NvbnN0YW50c1wiO1xuXG5leHBvcnQgY29uc3QgcGlja0NvbG9yID0gc3RhdHVzID0+IHtcbiAgc3dpdGNoICh0eXBlb2Ygc3RhdHVzID09PSBcInN0cmluZ1wiID8gc3RhdHVzLnRvTG93ZXJDYXNlKCkgOiBzdGF0dXMpIHtcbiAgICBjYXNlIFwiZmlyc3Rfbm90aWNlXCI6XG4gICAgY2FzZSBcInNlY29uZF9ub3RpY2VcIjpcbiAgICBjYXNlIFwicGVuZGluZ1wiOlxuICAgIGNhc2UgXCJjb25zaWRlclwiOlxuICAgICAgcmV0dXJuIGNvbG9ycy5ub3RpY2VXYXJuaW5nO1xuICAgIGNhc2UgXCJ1bnZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIm5vdF92ZXJpZmllZFwiOlxuICAgIGNhc2UgXCJmcmF1ZFwiOlxuICAgIGNhc2UgXCJub3RfbWF0Y2hlZFwiOlxuICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgIGNhc2UgXCJkZWNlYXNlZFwiOlxuICAgIGNhc2UgXCJ3aXRoZHJhd25cIjpcbiAgICAgIHJldHVybiBjb2xvcnMubm90aWNlRXJyb3I7XG4gICAgY2FzZSBcInZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIm1hdGNoZWRcIjpcbiAgICBjYXNlIFwidmFsaWRcIjpcbiAgICBjYXNlIFwicmVhZHlcIjpcbiAgICBjYXNlIFwiY29tcGxldGVcIjpcbiAgICBjYXNlIFwiY2xlYXJcIjpcbiAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgY2FzZSBcInJhbmRvbWl6ZWRcIjpcbiAgICBjYXNlIFwiYXBwcm92ZWRcIjpcbiAgICAgIHJldHVybiBjb2xvcnMubm90aWNlU3VjY2VzcztcbiAgICBjYXNlIFwicHJvY2Vzc2luZ1wiOlxuICAgIGNhc2UgXCJyZXZpZXdpbmdcIjpcbiAgICBjYXNlIFwicmV2aWV3XCI6XG4gICAgY2FzZSBcImNvbnNlbnRcIjpcbiAgICBjYXNlIFwiZW1haWxlZFwiOlxuICAgIGNhc2UgXCJpbml0aWF0ZWRcIjpcbiAgICBjYXNlIFwiYXR0ZW50aW9uXCI6XG4gICAgY2FzZSBcInZlcmlmeWluZ1wiOlxuICAgIGNhc2UgXCJyZXZpZXdfX212clwiOlxuICAgIGNhc2UgXCJyZXZpZXdfX3FhXCI6XG4gICAgICByZXR1cm4gY29sb3JzLm5vdGljZUluZm87XG4gICAgY2FzZSBcIm5vbmVcIjpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiZ3JheVwiO1xuICB9XG59O1xuIiwiaW1wb3J0ICogYXMgY29sb3JzIGZyb20gXCIuLi9zdHlsZXMvY29uc3RhbnRzXCI7XG5cbmNvbnN0IHBpY2tTY29yZUNvbG9yID0gc2NvcmUgPT4ge1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KHNjb3JlLCAxMCk7XG4gIGlmICh2YWx1ZSA+IDg5KSByZXR1cm4gY29sb3JzLm5vdGljZVN1Y2Nlc3M7XG4gIGlmICh2YWx1ZSA+IDY5KSByZXR1cm4gY29sb3JzLm5vdGljZVdhcm5pbmc7XG4gIHJldHVybiBjb2xvcnMubm90aWNlRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBwaWNrU2NvcmVDb2xvcjsiLCJleHBvcnQgY29uc3QgcHJldHRpZnlEYXRlID0gZGF0ZVN0cmluZyA9PiB7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgY29uc3QgbW9udGggPSBkLnRvVVRDU3RyaW5nKCkuc2xpY2UoOCwgMTEpO1xuICBjb25zdCBERCA9IGQudG9VVENTdHJpbmcoKS5zbGljZSg1LCA3KTtcbiAgY29uc3QgWVlZWSA9IGQudG9VVENTdHJpbmcoKS5zbGljZSgxMiwgMTYpO1xuICByZXR1cm4gYCR7bW9udGh9ICR7RER9LCAke1lZWVl9YDtcbn07XG4iLCJpbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbmV4cG9ydCBjb25zdCBmYWxzeVN0cmluZ3MgPSBbXCJOb25lXCIsIFwibm9uZVwiLCBcIk4vQVwiXTtcblxuY29uc3QgdmFsdWVFeGlzdHMgPSB2YWx1ZSA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybiBmYWxzZTtcbiAgaWYgKF8uaXNBcnJheSh2YWx1ZSkgfHwgXy5pc09iamVjdCh2YWx1ZSkpIHJldHVybiAhXy5pc0VtcHR5KHZhbHVlKTtcbiAgaWYgKF8uaW5kZXhPZihmYWxzeVN0cmluZ3MsIHZhbHVlKSA+IC0xKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdmFsdWVFeGlzdHM7XG4iLCJpbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgdmFsdWVFeGlzdHMgZnJvbSBcIi4vdmFsdWUtZXhpc3RzXCI7XG5cbmNvbnN0IHJlbmRlckRldGFpbFZhbHVlID0gKHZhbHVlLCBkZWVwID0gZmFsc2UpID0+IHtcbiAgaWYgKF8uaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAoZGVlcClcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoXG4gICAgICAgIHZhbCA9PlxuICAgICAgICAgIF8uaXNPYmplY3QodmFsKVxuICAgICAgICAgICAgPyByZW5kZXJOZXN0ZWRPYmplY3QodmFsLCBkZWVwKVxuICAgICAgICAgICAgOiByZW5kZXJEZXRhaWxWYWx1ZSh2YWwsIGRlZXApXG4gICAgICApO1xuICAgIHJldHVybiB2YWx1ZS5qb2luKFwiIC8gXCIpO1xuICB9XG4gIGlmIChfLmlzT2JqZWN0KHZhbHVlKSkgcmV0dXJuIHJlbmRlck5lc3RlZE9iamVjdCh2YWx1ZSwgZGVlcCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmNvbnN0IHJlbmRlck5lc3RlZE9iamVjdCA9IChuZXN0ZWQgPSB7fSwgZGVlcCA9IGZhbHNlKSA9PiB7XG4gIGNvbnN0IHZhbHVlcyA9IF8uZmlsdGVyKG5lc3RlZCwgdmFsdWUgPT4gdmFsdWVFeGlzdHModmFsdWUpKTtcbiAgcmV0dXJuIHZhbHVlcy5tYXAodmFsdWUgPT4gcmVuZGVyRGV0YWlsVmFsdWUodmFsdWUsIGRlZXApKS5qb2luKFwiIC8gXCIpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgcmVuZGVyRGV0YWlsVmFsdWU7XG4iLCJpbXBvcnQgdmFsdWVFeGlzdHMgZnJvbSBcIi4vdmFsdWUtZXhpc3RzXCI7XG5cbmNvbnN0IHNlbGVjdE1hc3RlcktleSA9IChkYXRhLCBwcm9wZXJ0eSkgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkgfHwgZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBcIlwiO1xuICBsZXQgbWFzdGVyS2V5O1xuICBjb25zdCBibHVlcHJpbnQgPSBkYXRhWzBdO1xuICBpZiAodmFsdWVFeGlzdHMoYmx1ZXByaW50W3Byb3BlcnR5XSkpIHtcbiAgICBtYXN0ZXJLZXkgPSBwcm9wZXJ0eTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwb3NpYmxlS2V5cyA9IE9iamVjdC5rZXlzKGJsdWVwcmludCk7XG4gICAgbWFzdGVyS2V5ID0gcG9zaWJsZUtleXMuZmluZChrZXkgPT4gdmFsdWVFeGlzdHMoYmx1ZXByaW50W2tleV0pKTtcbiAgfVxuICByZXR1cm4gbWFzdGVyS2V5O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0TWFzdGVyS2V5O1xuIiwiaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuXG4vKiogQG5hbWVzcGFjZSB1dGlsaXR5X2Z1bmN0aW9ucyAqL1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIC0gdGhlIHR5cGVvZiB0aGUgdmFsdWUgc2hvdWxkIGJlIHwgc3RyaW5nLCBudW1iZXIsIGJvb2xlYW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBmYWxsYmFjayAtIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgdmFsdWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gdXBkYXRlIHRoZSBvYmplY3Qga2V5IHdpdGhcbiAqIEBkZXNjIFNldHMgYSB2YWx1ZSBvZiBhIHNwZWNpZmljIHR5cGUgb24gcHJvdmlkZWQgb2JqZWN0J3Mgc3RpcHVsYXRlZCBwcm9wZXJ0eS9rZXkgd2l0aCBhbiBvcHRpb25hbCBkZWZhdWx0L2ZhbGxiYWNrIHZhbHVlXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRWYWx1ZSA9ICh0eXBlLCBzZWxmLCBwcm9wZXJ0eSwgZmFsbGJhY2ssIHZhbHVlID0gZmFsbGJhY2spID0+IHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gdHlwZSkgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9IHZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gdGhlIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICogQHBhcmFtIHsqfSBmYWxsYmFjayAtIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgdmFsdWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdmFsdWUgdG8gdXBkYXRlIHRoZSBvYmplY3Qga2V5IHdpdGhcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gZmFjdG9yeSB0byBoYXJkIGJha2UgdGhlIHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkIGFuZCBhIGZhbGxiYWNrIChvcHRpb25hbClcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE9wdGlvbiA9IChcbiAgc2VsZixcbiAgcHJvcGVydHksXG4gIG9wdGlvbnMsXG4gIGZhbGxiYWNrLFxuICB2YWx1ZSA9IGZhbGxiYWNrXG4pID0+IHtcbiAgY29uc3QgYWxsb3dlZCA9IEFycmF5LmlzQXJyYXkob3B0aW9ucykgPyBvcHRpb25zIDogc2VsZltvcHRpb25zXTtcbiAgaWYgKCFhbGxvd2VkLmluY2x1ZGVzKHZhbHVlKSkgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9IHZhbHVlO1xufTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIHV0aWxpdHlfZnVuY3Rpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSB2YWx1ZSAtIHRoZSB0cnV0aHkgdmFsdWUgdG8gYmUgc2V0XG4gKiBAZGVzYyBXaWxsIHNldCBhIHRydXRoeSB2YWx1ZSBhbmQgaWdub3JlIGFueXRoaW5nIHRoYXQgY2FzdHMgdG8gZmFsc2UgKCEhKVxuICovXG5leHBvcnQgY29uc3Qgc2V0VHJ1dGh5ID0gKHNlbGYsIHByb3BlcnR5LCB2YWx1ZSkgPT4ge1xuICBpZiAoIXZhbHVlKSByZXR1cm47XG4gIHNlbGZbcHJvcGVydHldID0gdmFsdWU7XG59O1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIGZhbHN5IHZhbHVlIHRvIGJlIHNldFxuICogQGRlc2MgV2lsbCBzZXQgYSBmYWxzeSB2YWx1ZSBhbmQgaWdub3JlIGFueXRoaW5nIHRoYXQgY2FzdHMgdG8gdHJ1ZSAoISEhKVxuICovXG5leHBvcnQgY29uc3Qgc2V0RmFsc3kgPSAoc2VsZiwgcHJvcGVydHksIHZhbHVlKSA9PiB7XG4gIGlmICghdmFsdWUpIHJldHVybjtcbiAgc2VsZltwcm9wZXJ0eV0gPSAhdmFsdWU7XG59O1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgdXRpbGl0eV9mdW5jdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAZGVzYyBUb2dnbGVzIGEgYm9vbGVhbiB2YWx1ZVxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlQm9vbCA9IChzZWxmLCBwcm9wZXJ0eSkgPT4gKCkgPT4ge1xuICBpZiAodHlwZW9mIHNlbGZbcHJvcGVydHldICE9PSBcImJvb2xlYW5cIikgcmV0dXJuO1xuICBzZWxmW3Byb3BlcnR5XSA9ICFzZWxmW3Byb3BlcnR5XTtcbn07XG5cbi8qKiBAbmFtZXNwYWNlIGZ1bmN0aW9uX2ZhY3RvcmllcyAqL1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAaW1wbGVtZW50cyB7c2V0VmFsdWV9XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIGJvb2xlYW4sIHN0cmluZywgb2JqZWN0LCBudWxsLCBldGMuXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7c2V0VmFsdWV9IC0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAqIEBkZXNjIEZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgYSB2YWx1ZSBzZXR0ZXJcbiAqL1xuZXhwb3J0IGNvbnN0IHNldHRlckZhY3RvcnkgPSAodHlwZSwgc2VsZiwgcHJvcGVydHksIGZhbGxiYWNrID0gdW5kZWZpbmVkKSA9PlxuICBfLnBhcnRpYWwoc2V0VmFsdWUsIHR5cGUsIHNlbGYsIHByb3BlcnR5LCBmYWxsYmFjayk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBleHRlbmRzIHtzZXR0ZXJGYWN0b3J5fVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBib29sZWFuLCBzdHJpbmcsIG9iamVjdCwgbnVsbCwgZXRjLlxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGEgdmFsdWUgc2V0dGVyIHdpdGggYXBwbGllZCBhcmd1bWVudHNcbiAqIEBkZXNjIEEgY3VycmllZCBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgdmFsdWUgc2V0dGVyXG4gKi9cbmV4cG9ydCBjb25zdCBzZXR0ZXJGYWN0b3J5Q3VycmllZCA9IF8uY3Vycnkoc2V0dGVyRmFjdG9yeSk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBleHRlbmRzIHt0b2dnbGVCb29sfVxuICogQGRlc2MgQSBjdXJyaWVkIGZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgdG9nZ2xlQm9vbCgpIHdpdGggYXBwbGllZCBhcmd1bWVudHNcbiAqIEByZXR1cm5zIHt0b2dnbGVCb29sfSBBIGN1cnJpZWQgdmVyc2lvbiBvZiB0aGUgdG9nZ2xlQm9vbCBmdW5jdGlvblxuICovXG5leHBvcnQgY29uc3QgdG9nZ2xlQm9vbEN1cnJpZWQgPSBfLmN1cnJ5KHRvZ2dsZUJvb2wpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsqfSBbZmFsbGJhY2tdIC0gYSBkZWZhdWx0IHZhbHVlIHRvIGJlIHVzZWQgaW4gbGlldSBvZiBhIGZpbmFsIHZhbHVlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gYSB2YWx1ZSBzZXR0ZXIgd2l0aCBwcmUtcG9wdWxhdGVkIGRlcGVuZGVuY2llc1xuICogQGRlc2MgQSBmYWN0b3J5IGZvciBnZW5lcmF0aW5nIGEgc3RyaW5nIHZhbHVlIHNldHRlciwgaWYgdmFsdWUgaXMgbm90IGEgc3RyaW5nIGV4aXRzIHdpdGhvdXQgc2lkZS1lZmZlY3RzXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTdHJpbmdGYWN0b3J5ID0gc2V0dGVyRmFjdG9yeUN1cnJpZWQoXCJzdHJpbmdcIik7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBhIHZhbHVlIHNldHRlciB3aXRoIHByZS1wb3B1bGF0ZWQgZGVwZW5kZW5jaWVzXG4gKiBAZGVzYyBBIGZhY3RvcnkgZm9yIGdlbmVyYXRpbmcgYSBudW1iZXIgdmFsdWUgc2V0dGVyLCBpZiB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgZXhpdHMgd2l0aG91dCBzaWRlLWVmZmVjdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldE51bWJlckZhY3RvcnkgPSBzZXR0ZXJGYWN0b3J5Q3VycmllZChcIm51bWJlclwiKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGEgZGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VkIGluIGxpZXUgb2YgYSBmaW5hbCB2YWx1ZVxuICogQHJldHVybnMge2Z1bmN0aW9ufSAtIGEgdmFsdWUgc2V0dGVyIHdpdGggcHJlLXBvcHVsYXRlZCBkZXBlbmRlbmNpZXNcbiAqIEBkZXNjIEEgZmFjdG9yeSBmb3IgZ2VuZXJhdGluZyBhIGJvb2xlYW4gdmFsdWUgc2V0dGVyLCBpZiB2YWx1ZSBpcyBub3QgYSBzdHJpbmcgZXhpdHMgd2l0aG91dCBzaWRlLWVmZmVjdHNcbiAqL1xuZXhwb3J0IGNvbnN0IHNldEJvb2xGYWN0b3J5ID0gc2V0dGVyRmFjdG9yeUN1cnJpZWQoXCJib29sZWFuXCIpO1xuXG4vKipcbiAqIEBmdW5jXG4gKiBAbWVtYmVyb2YgZnVuY3Rpb25fZmFjdG9yaWVzXG4gKiBAZXh0ZW5kcyB7c2V0VHJ1dGh5fVxuICogQHBhcmFtIHtvYmplY3R9IHNlbGYgLSB0aGUgb2JqZWN0IG9uIHdoaWNoIHRvIGFwcGx5IHRoZSB2YWx1ZSBjaGFuZ2UgdG9cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIG9iamVjdCBrZXlcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgLSB0aGUgdHJ1dGh5IHZhbHVlIHRvIGJlIHNldFxuICovXG5leHBvcnQgY29uc3Qgc2V0VHJ1dGh5Q3VycmllZCA9IF8uY3Vycnkoc2V0VHJ1dGh5KTtcblxuLyoqXG4gKiBAZnVuY1xuICogQG1lbWJlcm9mIGZ1bmN0aW9uX2ZhY3Rvcmllc1xuICogQGV4dGVuZHMge3NldFRydXRoeX1cbiAqIEBwYXJhbSB7b2JqZWN0fSBzZWxmIC0gdGhlIG9iamVjdCBvbiB3aGljaCB0byBhcHBseSB0aGUgdmFsdWUgY2hhbmdlIHRvXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSBvYmplY3Qga2V5XG4gKiBAcGFyYW0geyp9IHZhbHVlIC0gdGhlIGZhbHN5IHZhbHVlIHRvIGJlIHNldFxuICovXG5leHBvcnQgY29uc3Qgc2V0RmFsc3lDdXJyaWVkID0gXy5jdXJyeShzZXRGYWxzeSk7XG5cbi8qKlxuICogQGZ1bmNcbiAqIEBtZW1iZXJvZiBmdW5jdGlvbl9mYWN0b3JpZXNcbiAqIEBpbXBsZW1lbnRzIHtzZXRPcHRpb259XG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsoc3RyaW5nfGFycmF5KX0gb3B0aW9ucyAtIHN0cmluZyBrZXkgb2Ygc2VsZiBvYmplY3QgdGhhdCBob2xkcyB0aGUgYXJyYXkgb2YgY2hvaWNlcyBvciBhbiBhcnJheSBvZiBjaG9pY2VzXG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtzZXRPcHRpb259XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPcHRpb25GYWN0b3J5ID0gKFxuICBzZWxmLFxuICBwcm9wZXJ0eSxcbiAgb3B0aW9ucyxcbiAgZmFsbGJhY2sgPSB1bmRlZmluZWRcbikgPT4gXy5wYXJ0aWFsKHNldE9wdGlvbiwgc2VsZiwgcHJvcGVydHksIG9wdGlvbnMsIGZhbGxiYWNrKTtcblxuLyoqXG4gKiBAZnVuY1xuICogQGV4dGVuZHMge3NldE9wdGlvbkZhY3Rvcnl9XG4gKiBAcGFyYW0ge29iamVjdH0gc2VsZiAtIHRoZSBvYmplY3Qgb24gd2hpY2ggdG8gYXBwbHkgdGhlIHZhbHVlIGNoYW5nZSB0b1xuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gb2JqZWN0IGtleVxuICogQHBhcmFtIHsoc3RyaW5nfGFycmF5KX0gb3B0aW9ucyAtIHN0cmluZyBrZXkgb2Ygc2VsZiBvYmplY3QgdGhhdCBob2xkcyB0aGUgYXJyYXkgb2YgY2hvaWNlcyBvciBhbiBhcnJheSBvZiBjaG9pY2VzXG4gKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBhIGRlZmF1bHQgdmFsdWUgdG8gYmUgdXNlZCBpbiBsaWV1IG9mIGEgZmluYWwgdmFsdWVcbiAqIEByZXR1cm5zIHtzZXRPcHRpb259XG4gKi9cbmV4cG9ydCBjb25zdCBzZXRPcHRpb25GYWN0b3J5Q3VycmllZCA9IF8uY3Vycnkoc2V0T3B0aW9uRmFjdG9yeSk7XG5cbi8qKlxuICogQGNsYXNzXG4gKiBAZGVzYyBVc2VkIHRvIGNyZWF0ZSBtb2J4IHJlYWR5IG1vZGVscyB3aXRoIHRoZSBtb3N0IGNvbW1vbiBzZXR0ZXJzIGJvb3RzdHJhcHBlZFxuICovXG5leHBvcnQgY2xhc3MgU2V0dGVyIHtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBzdHJpbmcgc2V0dGVyXG4gICAqL1xuICBzZXRTdHJpbmdGYWN0b3J5ID0gc2V0U3RyaW5nRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBudW1iZXIgc2V0dGVyXG4gICAqL1xuICBzZXROdW1iZXJGYWN0b3J5ID0gc2V0TnVtYmVyRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7Kn0gW2ZhbGxiYWNrXSAtIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSByZXR1cm5lZCBmdW5jdGlvbidzIHZhbHVlIGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzZXRWYWx1ZX0gc2V0VmFsdWUgZnVuY3Rpb24gd2l0aCBwYXJ0aWFsbHkgYXBwbGllZCBhcmd1bWVudHNcbiAgICogQGRlc2MgZmFjdG9yeSB0byByZXR1cm4gYSBib29sZWFuIHNldHRlclxuICAgKi9cbiAgc2V0Qm9vbEZhY3RvcnkgPSBzZXRCb29sRmFjdG9yeSh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgdHJ1dGh5IHNldHRlclxuICAgXG4gICAqL1xuICBzZXRUcnV0aHlGYWN0b3J5ID0gc2V0VHJ1dGh5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgZmFsc3kgc2V0dGVyXG4gICBcbiAgICovXG4gIHNldEZhbHN5RmFjdG9yeSA9IHNldEZhbHN5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IHRvIGJlIG1vZGlmaWVkXG4gICAqIEBwYXJhbSB7KHN0cmluZ3xhcnJheSl9IG9wdGlvbnMgLSBzdHJpbmcga2V5IG9mIHNlbGYgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYW4gYXJyYXkgb2YgY2hvaWNlc1xuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGFuIG9wdGlvbiBzZXR0ZXJcbiAgICovXG4gIHNldE9wdGlvbkZhY3RvcnkgPSBzZXRPcHRpb25GYWN0b3J5Q3VycmllZCh0aGlzKTtcbiAgLyoqXG4gICAqIEBmdW5jXG4gICAqIEBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcGVydHkgLSB0aGUgb2JqZWN0IHByb3BlcnR5IChib29sKSB0byBiZSBpbnZlcnRlZFxuICAgKiBAcGFyYW0ge2FycmF5fSBvcHRpb25zIC0gYW4gYXJyYXkgb2YgdGhlIHBvc3NpYmxlIGNob2ljZXMgYWxsb3dlZFxuICAgKiBAcGFyYW0geyp9IFtmYWxsYmFja10gLSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcmV0dXJuZWQgZnVuY3Rpb24ncyB2YWx1ZSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7ZnVuY3Rpb259IGZ1bmN0aW9uIHdoaWNoIGFjY2VwdHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgYW5kIGFwcGxpZWQgdG8gdGhlIHByb3BlcnR5XG4gICAqIEBkZXNjIGZhY3RvcnkgdG8gcmV0dXJuIGEgYm9vbGVhbiB0b2dnbGVyXG4gICAqL1xuICB0b2dnbGVCb29sRmFjdG9yeSA9IHRvZ2dsZUJvb2xDdXJyaWVkKHRoaXMpO1xufVxuIiwiZnVuY3Rpb24gc3RvcmFnZU1vY2soKSB7XG4gIGNvbnN0IHN0b3JhZ2UgPSB7fTtcblxuICByZXR1cm4ge1xuICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSkge1xuICAgICAgc3RvcmFnZVtrZXldID0gdmFsdWUgfHwgXCJcIjtcbiAgICB9LFxuICAgIGdldEl0ZW0oa2V5KSB7XG4gICAgICByZXR1cm4ga2V5IGluIHN0b3JhZ2UgPyBzdG9yYWdlW2tleV0gOiBudWxsO1xuICAgIH0sXG4gICAgcmVtb3ZlSXRlbShrZXkpIHtcbiAgICAgIGRlbGV0ZSBzdG9yYWdlW2tleV07XG4gICAgfSxcbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHN0b3JhZ2UpLmxlbmd0aDtcbiAgICB9LFxuICAgIGtleShpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RvcmFnZSk7XG4gICAgICByZXR1cm4ga2V5c1tpXSB8fCBudWxsO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgc3RvcmFnZU1vY2s7XG4iLCJjb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiB7XG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIHZhbHVlID4gMDtcbiAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubGVuZ3RoID4gMDtcbiAgICAgIHJldHVybiAhKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKS5sZW5ndGggPT09IDApO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRvQm9vbGVhbjtcbiIsImltcG9ydCBkYXlqcyBmcm9tIFwiZGF5anNcIjtcbmltcG9ydCByZWxhdGl2ZVRpbWUgZnJvbSBcImRheWpzL3BsdWdpbi9yZWxhdGl2ZVRpbWVcIjtcbmltcG9ydCB1dGMgZnJvbSBcImRheWpzL3BsdWdpbi91dGNcIjtcbmltcG9ydCBwYXJzZVB5dGhvbkRhdGUgZnJvbSBcIi4vcGFyc2UtcHl0aG9uLWRhdGVcIjtcblxuZGF5anMuZXh0ZW5kKHJlbGF0aXZlVGltZSk7XG5kYXlqcy5leHRlbmQodXRjKTtcblxuY29uc3QgdG9SZWxhdGl2ZURhdGUgPSBkYXRlID0+IHtcbiAgaWYgKHR5cGVvZiBkYXRlICE9PSBcIm51bWJlclwiKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3QgcGFyc2VkRGF0ZSA9IHBhcnNlUHl0aG9uRGF0ZShkYXRlKTtcbiAgaWYgKCFwYXJzZWREYXRlKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3QgcmVsYXRpdmVEYXRlID0gZGF5anMocGFyc2VkRGF0ZSk7XG4gIGNvbnN0IG5vdyA9IGRheWpzKCkudXRjT2Zmc2V0KHBhcnNlZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gIGNvbnN0IGFkanVzdGVkTm93ID0gbm93LnN1YnRyYWN0KHBhcnNlZERhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwLCBcImhvdXJcIik7XG4gIGlmIChhZGp1c3RlZE5vdy5kaWZmKHJlbGF0aXZlRGF0ZSwgXCJkYXlcIikgPCA4KSByZXR1cm4gcmVsYXRpdmVEYXRlLmZyb20oYWRqdXN0ZWROb3cpO1xuICByZXR1cm4gcmVsYXRpdmVEYXRlLmZvcm1hdChcIk0vREQvWVlZWVwiKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b1JlbGF0aXZlRnJvbUlTTyA9IGRhdGUgPT4ge1xuICBpZiAodHlwZW9mIGRhdGUgIT09IFwic3RyaW5nXCIpIHJldHVybiBcIk4vQVwiO1xuICBjb25zdCByZWxhdGl2ZURhdGUgPSBkYXlqcyhkYXRlKTtcbiAgaWYgKCFyZWxhdGl2ZURhdGUuaXNWYWxpZCgpKSByZXR1cm4gXCJOL0FcIjtcbiAgY29uc3Qgbm93ID0gZGF5anMoKS51dGNPZmZzZXQocmVsYXRpdmVEYXRlLnV0Y09mZnNldCgpKTtcbiAgaWYgKG5vdy5kaWZmKHJlbGF0aXZlRGF0ZSwgXCJkYXlcIikgPCA4KSByZXR1cm4gcmVsYXRpdmVEYXRlLmZyb20obm93KTtcbiAgcmV0dXJuIHJlbGF0aXZlRGF0ZS5mb3JtYXQoXCJNL0REL1lZWVlcIik7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0b1JlbGF0aXZlRGF0ZTtcbiIsImltcG9ydCB7IHVwcGVyRmlyc3QgfSBmcm9tIFwibG9kYXNoXCI7XG5cbmNvbnN0IHRvU2VudGVuY2VDYXNlID0gc3RyID0+IHtcbiAgbGV0IHNlbnRlbmNlID0gc3RyLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHBlcmlvZCA9IFwiLiBcIjtcbiAgY29uc3QgZXhjbGFtYXRpb24gPSBcIiEgXCI7XG4gIGNvbnN0IHF1ZXN0aW9uID0gXCI/IFwiO1xuICBjb25zdCB0ZXJtaW5hdGlvbnMgPSBbcGVyaW9kLCBleGNsYW1hdGlvbiwgcXVlc3Rpb25dO1xuICB0ZXJtaW5hdGlvbnMuZm9yRWFjaCh0ZXJtaW5hdGlvbiA9PiB7XG4gICAgc2VudGVuY2UgPSBzZW50ZW5jZVxuICAgICAgLnNwbGl0KHRlcm1pbmF0aW9uKVxuICAgICAgLm1hcCh1cHBlckZpcnN0KVxuICAgICAgLmpvaW4odGVybWluYXRpb24pO1xuICB9KTtcbiAgcmV0dXJuIHNlbnRlbmNlO1xufTtcbmV4cG9ydCBkZWZhdWx0IHRvU2VudGVuY2VDYXNlO1xuIiwiY29uc3QgdG9UaXRsZUNhc2UgPSBzdHIgPT4ge1xuICBjb25zdCBzdHJpbmcgPSB0eXBlb2Ygc3RyID09PSBcInN0cmluZ1wiID8gc3RyIDogU3RyaW5nKHN0cik7XG4gIGNvbnN0IHN0cl9sb3dlcmNhc2VkID0gc3RyaW5nLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IHdvcmRzID0gc3RyX2xvd2VyY2FzZWQuc3BsaXQoXCIgXCIpO1xuICBjb25zdCB0aXRsZUNhc2VkTGlzdCA9IHdvcmRzLm1hcCh3b3JkID0+IHtcbiAgICBjb25zdCBmaXJzdENoYXIgPSB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IHJlbWFpbmluZ0NoYXJzID0gd29yZC5zbGljZSgxKTtcbiAgICByZXR1cm4gYCR7Zmlyc3RDaGFyfSR7cmVtYWluaW5nQ2hhcnN9YDtcbiAgfSk7XG4gIHJldHVybiB0aXRsZUNhc2VkTGlzdC5qb2luKFwiIFwiKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRvVGl0bGVDYXNlO1xuIiwiZXhwb3J0IGNvbnN0IElOSVRJQVRFRCA9IFwiaW5pdGlhdGVkXCI7XG5leHBvcnQgY29uc3QgUEVORElORyA9IFwicGVuZGluZ1wiO1xuZXhwb3J0IGNvbnN0IFdJVEhEUkFXTiA9IFwid2l0aGRyYXduXCI7XG5leHBvcnQgY29uc3QgQVBQUk9WRUQgPSBcImFwcHJvdmVkXCI7XG5leHBvcnQgY29uc3QgUkVKRUNURUQgPSBcInJlamVjdGVkXCI7XG5leHBvcnQgY29uc3QgQ09OU0VOVCA9IFwiY29uc2VudFwiO1xuZXhwb3J0IGNvbnN0IEVNQUlMRUQgPSBcImVtYWlsZWRcIjtcbmV4cG9ydCBjb25zdCBSRVZJRVcgPSBcInJldmlld1wiO1xuZXhwb3J0IGNvbnN0IFJFVklFV0lORyA9IFwicmV2aWV3aW5nXCI7XG5leHBvcnQgY29uc3QgQ09OU0lERVIgPSBcImNvbnNpZGVyXCI7XG5leHBvcnQgY29uc3QgUFJPQ0VTU0lORyA9IFwicHJvY2Vzc2luZ1wiO1xuZXhwb3J0IGNvbnN0IFBFTkRJTkdfRElTUFVURSA9IFwicGVuZGluZ19fZGlzcHV0ZVwiO1xuZXhwb3J0IGNvbnN0IFBFTkRJTkdfRklSU1RfTk9USUNFID0gXCJwZW5kaW5nX19maXJzdF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBQRU5ESU5HX1NFQ09ORF9OT1RJQ0UgPSBcInBlbmRpbmdfX3NlY29uZF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBGSVJTVF9OT1RJQ0UgPSBcImZpcnN0X25vdGljZVwiO1xuZXhwb3J0IGNvbnN0IFNFQ09ORF9OT1RJQ0UgPSBcInNlY29uZF9ub3RpY2VcIjtcbmV4cG9ydCBjb25zdCBTU05fVFJBQ0VfRkFJTEVEID0gXCJyZXZpZXdfX2lkZW50aXR5XCI7XG5leHBvcnQgY29uc3QgTVZSX0ZBSUxFRCA9IFwicmV2aWV3X19tdnJcIjtcbmV4cG9ydCBjb25zdCBDT01QTElBTkNFID0gXCJyZXZpZXdfX3FhXCI7XG5leHBvcnQgY29uc3QgQ09NUExJQU5DRV9TTyA9IFwicmV2aWV3X19zb1wiO1xuZXhwb3J0IGNvbnN0IFZFUklGWUlORyA9IFwidmVyaWZ5aW5nXCI7XG5leHBvcnQgY29uc3QgQ09NUExJQU5DRVJFVklFVyA9IFwiQ29tcGxpYW5jZSBSZXZpZXdcIjtcbmV4cG9ydCBjb25zdCBTVE9SRUQgPSBcIlN0b3JlZFwiO1xuXG5jb25zdCB0cmFuc2xhdGVTdGF0dXMgPSAoc3RhdHVzLCBhZHZlcnNlX2FjdGlvbikgPT4ge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgQVBQUk9WRUQ6XG4gICAgICByZXR1cm4gQVBQUk9WRUQ7XG4gICAgY2FzZSBQRU5ESU5HOlxuICAgIGNhc2UgUEVORElOR19ESVNQVVRFOlxuICAgICAgcmV0dXJuIFBFTkRJTkc7XG4gICAgY2FzZSBSRUpFQ1RFRDpcbiAgICAgIHJldHVybiBSRUpFQ1RFRDtcbiAgICBjYXNlIFBFTkRJTkdfRklSU1RfTk9USUNFOlxuICAgICAgaWYgKGFkdmVyc2VfYWN0aW9uKSByZXR1cm4gRklSU1RfTk9USUNFO1xuICAgICAgZWxzZSByZXR1cm4gUkVKRUNURUQ7XG4gICAgY2FzZSBQRU5ESU5HX1NFQ09ORF9OT1RJQ0U6XG4gICAgICBpZiAoYWR2ZXJzZV9hY3Rpb24pIHJldHVybiBTRUNPTkRfTk9USUNFO1xuICAgICAgZWxzZSByZXR1cm4gUkVKRUNURUQ7XG4gICAgY2FzZSBDT05TRU5UOlxuICAgICAgcmV0dXJuIENPTlNFTlQ7XG4gICAgY2FzZSBQUk9DRVNTSU5HOlxuICAgICAgcmV0dXJuIFBST0NFU1NJTkc7XG4gICAgY2FzZSBFTUFJTEVEOlxuICAgICAgcmV0dXJuIEVNQUlMRUQ7XG4gICAgY2FzZSBSRVZJRVc6XG4gICAgICByZXR1cm4gUkVWSUVXO1xuICAgIGNhc2UgUkVWSUVXSU5HOlxuICAgICAgcmV0dXJuIFJFVklFV0lORztcbiAgICBjYXNlIFdJVEhEUkFXTjpcbiAgICAgIHJldHVybiBXSVRIRFJBV047XG4gICAgY2FzZSBJTklUSUFURUQ6XG4gICAgICByZXR1cm4gU1RPUkVEO1xuICAgIGNhc2UgU1NOX1RSQUNFX0ZBSUxFRDpcbiAgICAgIHJldHVybiBWRVJJRllJTkc7XG4gICAgY2FzZSBNVlJfRkFJTEVEOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgY2FzZSBDT01QTElBTkNFOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgY2FzZSBDT01QTElBTkNFX1NPOlxuICAgICAgcmV0dXJuIENPTVBMSUFOQ0VSRVZJRVc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBQRU5ESU5HO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGVTdGF0dXM7XG4iLCJpbXBvcnQge1xuICB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UsXG4gIGRyaXZlcnNMaWNlbnNlUmVnZXhcbn0gZnJvbSBcIkB0dXJuYWkvdmFsaWRhdGUtdXMtZHJpdmVycy1saWNlbnNlXCI7XG5cbmV4cG9ydCBjb25zdCBjdXJyZW50U3RhdGVzID0gT2JqZWN0LmtleXMoZHJpdmVyc0xpY2Vuc2VSZWdleCk7XG5cbmNvbnN0IHZhbGlkYXRlRHJpdmVyc0xpY2Vuc2UgPSAobGljZW5zZSwgc3RhdGUgPSBcIlwiKSA9PiB7XG4gIGlmICh0eXBlb2YgbGljZW5zZSAhPT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygc3RhdGUgIT09IFwic3RyaW5nXCIpXG4gICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb25zOiBcIkxpY2Vuc2UgYW5kIFN0YXRlIG11c3QgYmUgU3RyaW5nc1wiIH07XG4gIGlmICghY3VycmVudFN0YXRlcy5pbmNsdWRlcyhzdGF0ZSkpIHJldHVybiB7IHZhbGlkOiB0cnVlLCByZWFzb25zOiBcIlwiIH07XG4gIHJldHVybiB2YWxpZGF0ZVVTRHJpdmVyc0xpY2Vuc2UobGljZW5zZSwgc3RhdGUpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRhdGVEcml2ZXJzTGljZW5zZTtcbiIsImltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcblxuLyoqXG4gKiBCYXNlZCBvbiBPJ1JlaWxseSdzIFJlZ2V4IENvb2tib29rOlxuICogaHR0cHM6Ly93d3cub3JlaWxseS5jb20vbGlicmFyeS92aWV3L3JlZ3VsYXItZXhwcmVzc2lvbnMtY29va2Jvb2svOTc4MTQ0OTMyNzQ1My9jaDA0czEyLmh0bWxcbiAqIFxuICogRXh0cmEgcnVsZXM6XG4gKiAgMTIzNDU2Nzg5IGlzIGFuIGludmFsaWQgU1NOXG4gKiAgUmVwZWF0aW5nIGRpZ2l0cyBhcmUgaW52YWxpZCAoMTExMTExMTExLCAxMTExMTExMTEsIGV0Yy4pXG4gKiAgOTg2IHByZWZpeCBpcyBhbGxvd2VkIChmb3IgVGVzdCBJZGVudGl0aWVzKVxuICovXG5jb25zdCB2YWxpZFNzblJlZ2V4ID0gL14oOTg2fCg/ITAwMHw2NjZ8MTIzNDU2Nzg5fChcXGQpXFwyezh9KVswLThdWzAtOV17Mn0pKD8hMDApWzAtOV17Mn0oPyEwMDAwKVswLTldezR9JC87XG5cbi8qKlxuICogQmFzZWQgb24gU1NBJ3MgbWlzdXNlZCBhcnRpY2xlOlxuICogaHR0cHM6Ly93d3cuc3NhLmdvdi9oaXN0b3J5L3Nzbi9taXN1c2VkLmh0bWxcbiAqKi9cbmNvbnN0IG1pc3VzZWRSZWdleCA9IC9eMDc4MDUxMTIwfDIxOTA5OTk5OSQvO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVfc3NuID0gc3NuID0+IHtcbiAgaWYgKHR5cGVvZiBzc24gIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgbnVtYmVyU1NOID0gc3NuLnJlcGxhY2UoL1xcRC9nLCBcIlwiKTtcbiAgcmV0dXJuICFtaXN1c2VkUmVnZXgudGVzdChudW1iZXJTU04pICYmIHZhbGlkU3NuUmVnZXgudGVzdChudW1iZXJTU04pO1xufTtcblxuZXhwb3J0IGNvbnN0IGludmFsaWRGaXJzdFRocmVlID0gXy5yYW5nZSg5MDAsIDEwMDApXG4gIC5tYXAobnVtID0+IGAke251bX1gKVxuICAuY29uY2F0KFtcIjAwMFwiLCBcIjY2NlwiXSk7XG5leHBvcnQgZGVmYXVsdCB2YWxpZGF0ZV9zc247XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby11c2VsZXNzLWVzY2FwZSovXG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5cbi8vIER1Y2sgY2hlY2sgZm9yIGFycmF5IG9yIE1vYlggb2JzZXJ2YWJsZSBhcnJheSAoYXZvaWRzIGJ1bmRsaW5nIG1vYngpXG5jb25zdCBpc0FycmF5T3JPYnNlcnZhYmxlQXJyYXkgPSB2YWx1ZSA9PlxuICBBcnJheS5pc0FycmF5KHZhbHVlKSB8fFxuICAhISh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdmFsdWUuc2xpY2UgPT09IFwiZnVuY3Rpb25cIik7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUVtYWlsID0gZW1haWwgPT4ge1xuICBpZiAoIWVtYWlsKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlZ2V4ID0gL15bYS16QS1aMC05LiEjJCUmJyorXFwvPT9eX2B7fH1+LV0rQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPyg/OlxcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrJC87XG4gIHJldHVybiByZWdleC50ZXN0KGVtYWlsKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVBob25lID0gcGhvbmUgPT4ge1xuICBpZiAoIXBob25lKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHJlZ2V4ID0gL14xP1xccz9cXCg/KFxcZHszfSlcXCk/Wy0gXT8oXFxkezN9KVstIF0/KFxcZHs0fSkkLztcbiAgcmV0dXJuIHJlZ2V4LnRlc3QocGhvbmUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQWxwaGFOdW1lcmljID0gY2ggPT4ge1xuICByZXR1cm4gY2gubWF0Y2goL14oW2EtejAtOV0pKy9pKSAhPT0gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRDYW5hZGlhblppcGNvZGUgPSB6aXBjb2RlID0+IFxuICB6aXBjb2RlLm1hdGNoKC9eW0EtWmEtel1cXGRbQS1aYS16XSQvKSAhPT0gbnVsbCB8fCB6aXBjb2RlLm1hdGNoKC9eW0EtWmEtel1cXGRbQS1aYS16XVsgLV0/XFxkW0EtWmEtel1cXGQvKSAhPT0gbnVsbFxuXG4vLyBzZWUgdmFsaWRhdGUtc3NuLmpzXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTU04gPSBzc24gPT4ge1xuICBpZiAodHlwZW9mIHNzbiAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBudW1iZXJTU04gPSBzc24ucmVwbGFjZSgvXFxEL2csIFwiXCIpO1xuICByZXR1cm4gbnVtYmVyU1NOLmxlbmd0aCA9PT0gOTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUNoZWNrID0gd29ya2VyX2NoZWNrID0+IHtcbiAgY29uc3QgY2hlY2sgPSB3b3JrZXJfY2hlY2sgPT09IFwiY2xlYXJcIiA/IFtdIDogd29ya2VyX2NoZWNrO1xuICBpZiAoaXNBcnJheU9yT2JzZXJ2YWJsZUFycmF5KGNoZWNrKSkgcmV0dXJuIFsuLi5jaGVja107XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGNvbnRhaW5zQXRTeW1ib2wgPSBzdHIgPT4gL0AvLnRlc3Qoc3RyKTtcbmV4cG9ydCBjb25zdCBjb250YWluc051bWJlciA9IHN0ciA9PiAvXFxkLy50ZXN0KHN0cik7XG5leHBvcnQgY29uc3QgdmFsaWRhdGVOYW1lID0gbmFtZSA9PlxuICBuYW1lLnRyaW0oKS5sZW5ndGggIT09IDAgJiYgIWNvbnRhaW5zQXRTeW1ib2wobmFtZSkgJiYgIWNvbnRhaW5zTnVtYmVyKG5hbWUpO1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWRkcmVzcyA9IGFkZHJlc3MgPT5cbiAgYWRkcmVzcy50cmltKCkubGVuZ3RoICE9PSAwICYmICFjb250YWluc0F0U3ltYm9sKGFkZHJlc3MpOyAgXG5leHBvcnQgY29uc3QgdmFsaWRhdGVDdXN0b21JbnB1dCA9IHZhbHVlID0+IHtcbiAgaWYgKCFfLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCAhPT0gMDtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVppcGNvZGUgPSB6aXBjb2RlID0+XG4gIF8uaXNTdHJpbmcoemlwY29kZSkgJiYgemlwY29kZS5sZW5ndGggPj0gNTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQ2FuYWRpYW5aaXBjb2RlID0gemlwY29kZSA9PlxuICBfLmlzU3RyaW5nKHppcGNvZGUpIFxuICAgICYmIGlzQWxwaGFOdW1lcmljKHppcGNvZGUpIFxuICAgICYmIGlzVmFsaWRDYW5hZGlhblppcGNvZGUoemlwY29kZSk7XG5cbmV4cG9ydCBjb25zdCBpc0FycmF5ID0gdmFsdWUgPT5cbiAgaXNBcnJheU9yT2JzZXJ2YWJsZUFycmF5KHZhbHVlKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTVZSQ2hlY2sgPSBjaGVjayA9PlxuICBfLmlzT2JqZWN0KGNoZWNrKSB8fCB0eXBlb2YgY2hlY2sgPT09IFwic3RyaW5nXCIgPyBjaGVjayA6IHt9O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVQaG9uZVZlcmlmaWNhdGlvbiA9IHN0YXR1cyA9PiB7XG4gIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgY2FzZSBcInZlcmlmaWVkXCI6XG4gICAgY2FzZSBcIlRydWVcIjpcbiAgICAgIHJldHVybiBcInZlcmlmaWVkXCI7XG4gICAgY2FzZSBcInVudmVyaWZpZWRcIjpcbiAgICBjYXNlIFwiRmFsc2VcIjpcbiAgICAgIHJldHVybiBcInVudmVyaWZpZWRcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFwiXCI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkaXNhYmxlX2NoZWNrID0gZW52X3ZhciA9PlxuICB0eXBlb2YgZW52X3ZhciA9PT0gXCJzdHJpbmdcIiA/IGVudl92YXIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIgOiBmYWxzZTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRW1haWxJZCA9IGlkID0+IF8uaXNTdHJpbmcoaWQpICYmIGlkLmxlbmd0aCA9PT0gMzI7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVR1cm5JZCA9IGlkID0+XG4gIF8uaXNTdHJpbmcoaWQpICYmIC9eQ3sxfVswLTldezEwfSQvLnRlc3QoaWQpO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==