landxml/bundles/landxml.browser.js

3 lines
2.4 MiB
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*! For license information please see landxml.browser.js.LICENSE.txt */
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.landxml=e():t.landxml=e()}(self,(function(){return(()=>{var t={8899:(t,e,r)=>{"use strict";var n=r(5266),i=6378137;function o(t){var e=0;if(t&&t.length>0){e+=Math.abs(s(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(s(t[r]))}return e}function s(t){var e,r,n,o,s,h,u=0,c=t.length;if(c>2){for(h=0;h<c;h++)h===c-2?(n=c-2,o=c-1,s=0):h===c-1?(n=c-1,o=0,s=1):(n=h,o=h+1,s=h+2),e=t[n],r=t[o],u+=(a(t[s][0])-a(e[0]))*Math.sin(a(r[1]));u=u*i*i/2}return u}function a(t){return t*Math.PI/180}e.Z=function(t){return n.geomReduce(t,(function(t,e){return t+function(t){var e,r=0;switch(t.type){case"Polygon":return o(t.coordinates);case"MultiPolygon":for(e=0;e<t.coordinates.length;e++)r+=o(t.coordinates[e]);return r;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0}return 0}(e)}),0)}},3470:(t,e)=>{"use strict";function r(t){var e={type:"Feature"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"properties":case"geometry":return;default:e[r]=t[r]}})),e.properties=n(t.properties),e.geometry=i(t.geometry),e}function n(t){var e={};return t?(Object.keys(t).forEach((function(r){var i=t[r];"object"==typeof i?null===i?e[r]=null:Array.isArray(i)?e[r]=i.map((function(t){return t})):e[r]=n(i):e[r]=i})),e):e}function i(t){var e={type:t.type};return t.bbox&&(e.bbox=t.bbox),"GeometryCollection"===t.type?(e.geometries=t.geometries.map((function(t){return i(t)})),e):(e.coordinates=o(t.coordinates),e)}function o(t){var e=t;return"object"!=typeof e[0]?e.slice():e.map((function(t){return o(t)}))}e.Z=function(t){if(!t)throw new Error("geojson is required");switch(t.type){case"Feature":return r(t);case"FeatureCollection":return function(t){var e={type:"FeatureCollection"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"features":return;default:e[r]=t[r]}})),e.features=t.features.map((function(t){return r(t)})),e}(t);case"Point":case"LineString":case"Polygon":case"MultiPoint":case"MultiLineString":case"MultiPolygon":case"GeometryCollection":return i(t);default:throw new Error("unknown GeoJSON type")}}},1257:(t,e)=>{"use strict";function r(t,e,r){void 0===r&&(r={});var n={type:"Feature"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function n(t,e,n){return void 0===n&&(n={}),r({type:"Point",coordinates:t},e,n)}function i(t,e,n){void 0===n&&(n={});for(var i=0,o=t;i<o.length;i++){var s=o[i];if(s.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");for(var a=0;a<s[s.length-1].length;a++)if(s[s.length-1][a]!==s[0][a])throw new Error("First and last Position are not equivalent.")}return r({type:"Polygon",coordinates:t},e,n)}function o(t,e,n){if(void 0===n&&(n={}),t.length<2)throw new Error("coordinates must be an array of two or more positions");return r({type:"LineString",coordinates:t},e,n)}function s(t,e){void 0===e&&(e={});var r={type:"FeatureCollection"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function a(t,e,n){return void 0===n&&(n={}),r({type:"MultiLineString",coordinates:t},e,n)}function h(t,e,n){return void 0===n&&(n={}),r({type:"MultiPoint",coordinates:t},e,n)}function u(t,e,n){return void 0===n&&(n={}),r({type:"MultiPolygon",coordinates:t},e,n)}function c(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t*n}function l(t,r){void 0===r&&(r="kilometers");var n=e.factors[r];if(!n)throw new Error(r+" units is invalid");return t/n}function f(t){return t%(2*Math.PI)*180/Math.PI}function p(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)&&!/^\s*$/.test(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.earthRadius=6371008.8,e.factors={centimeters:100*e.earthRadius,centimetres:100*e.earthRadius,degrees:e.earthRadius/111325,feet:3.28084*e.earthRadius,inches:39.37*e.earthRadius,kilometers:e.earthRadius/1e3,kilometres:e.earthRadius/1e3,meters:e.earthRadius,metres:e.earthRadius,miles:e.earthRadius/1609.344,millimeters:1e3*e.earthRadius,millimetres:1e3*e.earthRadius,nauticalmiles:e.earthRadius/1852,radians:1,yards:e.earthRadius/1.0936},e.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/e.earthRadius,yards:1/1.0936},e.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},e.feature=r,e.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case"Point":return n(e).geometry;case"LineString":return o(e).geometry;case"Polygon":return i(e).geometry;case"MultiPoint":return h(e).geometry;case"MultiLineString":return a(e).geometry;case"MultiPolygon":return u(e).geometry;default:throw new Error(t+" is invalid")}},e.point=n,e.points=function(t,e,r){return void 0===r&&(r={}),s(t.map((function(t){return n(t,e)})),r)},e.polygon=i,e.polygons=function(t,e,r){return void 0===r&&(r={}),s(t.map((function(t){return i(t,e)})),r)},e.lineString=o,e.lineStrings=function(t,e,r){return void 0===r&&(r={}),s(t.map((function(t){return o(t,e)})),r)},e.featureCollection=s,e.multiLineString=a,e.multiPoint=h,e.multiPolygon=u,e.geometryCollection=function(t,e,n){return void 0===n&&(n={}),r({type:"GeometryCollection",geometries:t},e,n)},e.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error("precision must be a positive number");var r=Math.pow(10,e||0);return Math.round(t*r)/r},e.radiansToLength=c,e.lengthToRadians=l,e.lengthToDegrees=function(t,e){return f(l(t,e))},e.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},e.radiansToDegrees=f,e.degreesToRadians=function(t){return t%360*Math.PI/180},e.convertLength=function(t,e,r){if(void 0===e&&(e="kilometers"),void 0===r&&(r="kilometers"),!(t>=0))throw new Error("length must be a positive number");return c(l(t,e),r)},e.convertArea=function(t,r,n){if(void 0===r&&(r="meters"),void 0===n&&(n="kilometers"),!(t>=0))throw new Error("area must be a positive number");var i=e.areaFactors[r];if(!i)throw new Error("invalid original units");var o=e.areaFactors[n];if(!o)throw new Error("invalid final units");return t/i*o},e.isNumber=p,e.isObject=function(t){return!!t&&t.constructor===Object},e.validateBBox=function(t){if(!t)throw new Error("bbox is required");if(!Array.isArray(t))throw new Error("bbox must be an Array");if(4!==t.length&&6!==t.length)throw new Error("bbox must be an Array of 4 or 6 numbers");t.forEach((function(t){if(!p(t))throw new Error("bbox must only contain numbers")}))},e.validateId=function(t){if(!t)throw new Error("id is required");if(-1===["string","number"].indexOf(typeof t))throw new Error("id must be a number or a string")},e.radians2degrees=function(){throw new Error("method has been renamed to `radiansToDegrees`")},e.degrees2radians=function(){throw new Error("method has been renamed to `degreesToRadians`")},e.distanceToDegrees=function(){throw new Error("method has been renamed to `lengthToDegrees`")},e.distanceToRadians=function(){throw new Error("method has been renamed to `lengthToRadians`")},e.radiansToDistance=function(){throw new Error("method has been renamed to `radiansToLength`")},e.bearingToAngle=function(){throw new Error("method has been renamed to `bearingToAzimuth`")},e.convertDistance=function(){throw new Error("method has been renamed to `convertLength`")}},5266:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(1257);function i(t,e,r){if(null!==t)for(var n,o,s,a,h,u,c,l,f=0,p=0,d=t.type,y="FeatureCollection"===d,g="Feature"===d,m=y?t.features.length:1,v=0;v<m;v++){h=(l=!!(c=y?t.features[v].geometry:g?t.geometry:t)&&"GeometryCollection"===c.type)?c.geometries.length:1;for(var w=0;w<h;w++){var b=0,M=0;if(null!==(a=l?c.geometries[w]:c)){u=a.coordinates;var _=a.type;switch(f=!r||"Polygon"!==_&&"MultiPolygon"!==_?0:1,_){case null:break;case"Point":if(!1===e(u,p,v,b,M))return!1;p++,b++;break;case"LineString":case"MultiPoint":for(n=0;n<u.length;n++){if(!1===e(u[n],p,v,b,M))return!1;p++,"MultiPoint"===_&&b++}"LineString"===_&&b++;break;case"Polygon":case"MultiLineString":for(n=0;n<u.length;n++){for(o=0;o<u[n].length-f;o++){if(!1===e(u[n][o],p,v,b,M))return!1;p++}"MultiLineString"===_&&b++,"Polygon"===_&&M++}"Polygon"===_&&b++;break;case"MultiPolygon":for(n=0;n<u.length;n++){for(M=0,o=0;o<u[n].length;o++){for(s=0;s<u[n][o].length-f;s++){if(!1===e(u[n][o][s],p,v,b,M))return!1;p++}M++}b++}break;case"GeometryCollection":for(n=0;n<a.geometries.length;n++)if(!1===i(a.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function o(t,e){var r;switch(t.type){case"FeatureCollection":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case"Feature":e(t.properties,0)}}function s(t,e){if("Feature"===t.type)e(t,0);else if("FeatureCollection"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function a(t,e){var r,n,i,o,s,a,h,u,c,l,f=0,p="FeatureCollection"===t.type,d="Feature"===t.type,y=p?t.features.length:1;for(r=0;r<y;r++){for(a=p?t.features[r].geometry:d?t.geometry:t,u=p?t.features[r].properties:d?t.properties:{},c=p?t.features[r].bbox:d?t.bbox:void 0,l=p?t.features[r].id:d?t.id:void 0,s=(h=!!a&&"GeometryCollection"===a.type)?a.geometries.length:1,i=0;i<s;i++)if(null!==(o=h?a.geometries[i]:a))switch(o.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===e(o,f,u,c,l))return!1;break;case"GeometryCollection":for(n=0;n<o.geometries.length;n++)if(!1===e(o.geometries[n],f,u,c,l))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===e(null,f,u,c,l))return!1;f++}}function h(t,e){a(t,(function(t,r,i,o,s){var a,h=null===t?null:t.type;switch(h){case null:case"Point":case"LineString":case"Polygon":return!1!==e(n.feature(t,i,{bbox:o,id:s}),r,0)&&void 0}switch(h){case"MultiPoint":a="Point";break;case"MultiLineString":a="LineString";break;case"MultiPolygon":a="Polygon"}for(var u=0;u<t.coordinates.length;u++){var c={type:a,coordinates:t.coordinates[u]};if(!1===e(n.feature(c,i),r,u))return!1}}))}function u(t,e){h(t,(function(t,r,o){var s=0;if(t.geometry){var a=t.geometry.type;if("Point"!==a&&"MultiPoint"!==a){var h,u=0,c=0,l=0;return!1!==i(t,(function(i,a,f,p,d){if(void 0===h||r>u||p>c||d>l)return h=i,u=r,c=p,l=d,void(s=0);var y=n.lineString([h,i],t.properties);if(!1===e(y,r,o,d,s))return!1;s++,h=i}))&&void 0}}}))}function c(t,e){if(!t)throw new Error("geojson is required");h(t,(function(t,r,i){if(null!==t.geometry){var o=t.geometry.type,s=t.geometry.coordinates;switch(o){case"LineString":if(!1===e(t,r,i,0,0))return!1;break;case"Polygon":for(var a=0;a<s.length;a++)if(!1===e(n.lineString(s[a],t.properties),r,i,a))return!1}}}))}e.coordEach=i,e.coordReduce=function(t,e,r,n){var o=r;return i(t,(function(t,n,i,s,a){o=0===n&&void 0===r?t:e(o,t,n,i,s,a)}),n),o},e.propEach=o,e.propReduce=function(t,e,r){var n=r;return o(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.featureEach=s,e.featureReduce=function(t,e,r){var n=r;return s(t,(function(t,i){n=0===i&&void 0===r?t:e(n,t,i)})),n},e.coordAll=function(t){var e=[];return i(t,(function(t){e.push(t)})),e},e.geomEach=a,e.geomReduce=function(t,e,r){var n=r;return a(t,(function(t,i,o,s,a){n=0===i&&void 0===r?t:e(n,t,i,o,s,a)})),n},e.flattenEach=h,e.flattenReduce=function(t,e,r){var n=r;return h(t,(function(t,i,o){n=0===i&&0===o&&void 0===r?t:e(n,t,i,o)})),n},e.segmentEach=u,e.segmentReduce=function(t,e,r){var n=r,i=!1;return u(t,(function(t,o,s,a,h){n=!1===i&&void 0===r?t:e(n,t,o,s,a,h),i=!0})),n},e.lineEach=c,e.lineReduce=function(t,e,r){var n=r;return c(t,(function(t,i,o,s){n=0===i&&void 0===r?t:e(n,t,i,o,s)})),n},e.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,o=e.multiFeatureIndex||0,s=e.geometryIndex||0,a=e.segmentIndex||0,h=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),h=h||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":h=h||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":case"MultiPoint":return null;case"LineString":return a<0&&(a=u.length+a-1),n.lineString([u[a],u[a+1]],h,e);case"Polygon":return s<0&&(s=u.length+s),a<0&&(a=u[s].length+a-1),n.lineString([u[s][a],u[s][a+1]],h,e);case"MultiLineString":return o<0&&(o=u.length+o),a<0&&(a=u[o].length+a-1),n.lineString([u[o][a],u[o][a+1]],h,e);case"MultiPolygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),a<0&&(a=u[o][s].length-a-1),n.lineString([u[o][s][a],u[o][s][a+1]],h,e)}throw new Error("geojson is invalid")},e.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,i=e.featureIndex||0,o=e.multiFeatureIndex||0,s=e.geometryIndex||0,a=e.coordIndex||0,h=e.properties;switch(t.type){case"FeatureCollection":i<0&&(i=t.features.length+i),h=h||t.features[i].properties,r=t.features[i].geometry;break;case"Feature":h=h||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var u=r.coordinates;switch(r.type){case"Point":return n.point(u,h,e);case"MultiPoint":return o<0&&(o=u.length+o),n.point(u[o],h,e);case"LineString":return a<0&&(a=u.length+a),n.point(u[a],h,e);case"Polygon":return s<0&&(s=u.length+s),a<0&&(a=u[s].length+a),n.point(u[s][a],h,e);case"MultiLineString":return o<0&&(o=u.length+o),a<0&&(a=u[o].length+a),n.point(u[o][a],h,e);case"MultiPolygon":return o<0&&(o=u.length+o),s<0&&(s=u[o].length+s),a<0&&(a=u[o][s].length-a),n.point(u[o][s][a],h,e)}throw new Error("geojson is invalid")}},4650:(t,e,r)=>{"use strict";var n=r(9209),i=r(99),o=r(1257);e.Z=function(t,e,r){void 0===r&&(r={});var s=i.getGeom(t).coordinates,a=i.getGeom(e).coordinates,h=n.union(s,a);return 0===h.length?null:1===h.length?o.polygon(h[0],r.properties):o.multiPolygon(h,r.properties)}},99:(t,e,r)=>{"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=r(1257);e.getCoord=function(t){if(!t)throw new Error("coord is required");if(!Array.isArray(t)){if("Feature"===t.type&&null!==t.geometry&&"Point"===t.geometry.type)return t.geometry.coordinates;if("Point"===t.type)return t.coordinates}if(Array.isArray(t)&&t.length>=2&&!Array.isArray(t[0])&&!Array.isArray(t[1]))return t;throw new Error("coord must be GeoJSON Point or an Array of numbers")},e.getCoords=function(t){if(Array.isArray(t))return t;if("Feature"===t.type){if(null!==t.geometry)return t.geometry.coordinates}else if(t.coordinates)return t.coordinates;throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")},e.containsNumber=function t(e){if(e.length>1&&n.isNumber(e[0])&&n.isNumber(e[1]))return!0;if(Array.isArray(e[0])&&e[0].length)return t(e[0]);throw new Error("coordinates must only contain numbers")},e.geojsonType=function(t,e,r){if(!e||!r)throw new Error("type and name required");if(!t||t.type!==e)throw new Error("Invalid input to "+r+": must be a "+e+", given "+t.type)},e.featureOf=function(t,e,r){if(!t)throw new Error("No feature passed");if(!r)throw new Error(".featureOf() requires a name");if(!t||"Feature"!==t.type||!t.geometry)throw new Error("Invalid input to "+r+", Feature with geometry required");if(!t.geometry||t.geometry.type!==e)throw new Error("Invalid input to "+r+": must be a "+e+", given "+t.geometry.type)},e.collectionOf=function(t,e,r){if(!t)throw new Error("No featureCollection passed");if(!r)throw new Error(".collectionOf() requires a name");if(!t||"FeatureCollection"!==t.type)throw new Error("Invalid input to "+r+", FeatureCollection required");for(var n=0,i=t.features;n<i.length;n++){var o=i[n];if(!o||"Feature"!==o.type||!o.geometry)throw new Error("Invalid input to "+r+", Feature with geometry required");if(!o.geometry||o.geometry.type!==e)throw new Error("Invalid input to "+r+": must be a "+e+", given "+o.geometry.type)}},e.getGeom=function(t){return"Feature"===t.type?t.geometry:t},e.getType=function(t,e){return"FeatureCollection"===t.type?"FeatureCollection":"GeometryCollection"===t.type?"GeometryCollection":"Feature"===t.type&&null!==t.geometry?t.geometry.type:t.type}},6124:(t,e,r)=>{"use strict";if(r(1934),r(5654),r(7694),r.g._babelPolyfill)throw new Error("only one instance of babel-polyfill is allowed");function n(t,e,r){t[e]||Object.defineProperty(t,e,{writable:!0,configurable:!0,value:r})}r.g._babelPolyfill=!0,n(String.prototype,"padLeft","".padStart),n(String.prototype,"padRight","".padEnd),"pop,reverse,shift,keys,values,entries,indexOf,every,some,forEach,map,filter,find,findIndex,includes,join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill".split(",").forEach((function(t){[][t]&&n(Array,t,Function.call.bind([][t]))}))},5654:function(t,e,r){!function(e){"use strict";var r,n=Object.prototype,i=n.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",h=o.toStringTag||"@@toStringTag",u=e.regeneratorRuntime;if(u)t.exports=u;else{(u=e.regeneratorRuntime=t.exports).wrap=w;var c="suspendedStart",l="suspendedYield",f="executing",p="completed",d={},y={};y[s]=function(){return this};var g=Object.getPrototypeOf,m=g&&g(g(P([])));m&&m!==n&&i.call(m,s)&&(y=m);var v=x.prototype=M.prototype=Object.create(y);_.prototype=v.constructor=x,x.constructor=_,x[h]=_.displayName="GeneratorFunction",u.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===_||"GeneratorFunction"===(e.displayName||e.name))},u.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,x):(t.__proto__=x,h in t||(t[h]="GeneratorFunction")),t.prototype=Object.create(v),t},u.awrap=function(t){return{__await:t}},E(S.prototype),S.prototype[a]=function(){return this},u.AsyncIterator=S,u.async=function(t,e,r,n){var i=new S(w(t,e,r,n));return u.isGeneratorFunction(e)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},E(v),v[h]="Generator",v[s]=function(){return this},v.toString=function(){return"[object Generator]"},u.keys=function(t){var e=[];for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var n=e.pop();if(n in t)return r.value=n,r.done=!1,r}return r.done=!0,r}},u.values=P,N.prototype={constructor:N,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=r,this.done=!1,this.delegate=null,this.method="next",this.arg=r,this.tryEntries.forEach(I),!t)for(var e in this)"t"===e.charAt(0)&&i.call(this,e)&&!isNaN(+e.slice(1))&&(this[e]=r)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var e=this;function n(n,i){return a.type="throw",a.arg=t,e.next=n,i&&(e.method="next",e.arg=r),!!i}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return n("end");if(s.tryLoc<=this.prev){var h=i.call(s,"catchLoc"),u=i.call(s,"finallyLoc");if(h&&u){if(this.prev<s.catchLoc)return n(s.catchLoc,!0);if(this.prev<s.finallyLoc)return n(s.finallyLoc)}else if(h){if(this.prev<s.catchLoc)return n(s.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return n(s.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev<n.finallyLoc){var o=n;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=t,s.arg=e,o?(this.method="next",this.next=o.finallyLoc,d):this.complete(s)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),d},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),I(r),d}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;I(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:P(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),d}}}function w(t,e,r,n){var i=e&&e.prototype instanceof M?e:M,o=Object.create(i.prototype),s=new N(n||[]);return o._invoke=function(t,e,r){var n=c;return function(i,o){if(n===f)throw new Error("Generator is already running");if(n===p){if("throw"===i)throw o;return A()}for(r.method=i,r.arg=o;;){var s=r.delegate;if(s){var a=O(s,r);if(a){if(a===d)continue;return a}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===c)throw n=p,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=f;var h=b(t,e,r);if("normal"===h.type){if(n=r.done?p:l,h.arg===d)continue;return{value:h.arg,done:r.done}}"throw"===h.type&&(n=p,r.method="throw",r.arg=h.arg)}}}(t,r,s),o}function b(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function M(){}function _(){}function x(){}function E(t){["next","throw","return"].forEach((function(e){t[e]=function(t){return this._invoke(e,t)}}))}function S(t){function r(e,n,o,s){var a=b(t[e],t,n);if("throw"!==a.type){var h=a.arg,u=h.value;return u&&"object"==typeof u&&i.call(u,"__await")?Promise.resolve(u.__await).then((function(t){r("next",t,o,s)}),(function(t){r("throw",t,o,s)})):Promise.resolve(u).then((function(t){h.value=t,o(h)}),s)}s(a.arg)}var n;"object"==typeof e.process&&e.process.domain&&(r=e.process.domain.bind(r)),this._invoke=function(t,e){function i(){return new Promise((function(n,i){r(t,e,n,i)}))}return n=n?n.then(i,i):i()}}function O(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,O(t,e),"throw"===e.method))return d;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return d}var i=b(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,d;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,d):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,d)}function T(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function I(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function N(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(T,this),this.reset(!0)}function P(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n<t.length;)if(i.call(t,n))return e.value=t[n],e.done=!1,e;return e.value=r,e.done=!0,e};return o.next=o}}return{next:A}}function A(){return{value:r,done:!0}}}("object"==typeof r.g?r.g:"object"==typeof window?window:"object"==typeof self?self:this)},9742:(t,e)=>{"use strict";e.byteLength=function(t){var e=h(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,o=h(t),s=o[0],a=o[1],u=new i(function(t,e,r){return 3*(e+r)/4-r}(0,s,a)),c=0,l=a>0?s-4:s;for(r=0;r<l;r+=4)e=n[t.charCodeAt(r)]<<18|n[t.charCodeAt(r+1)]<<12|n[t.charCodeAt(r+2)]<<6|n[t.charCodeAt(r+3)],u[c++]=e>>16&255,u[c++]=e>>8&255,u[c++]=255&e;return 2===a&&(e=n[t.charCodeAt(r)]<<2|n[t.charCodeAt(r+1)]>>4,u[c++]=255&e),1===a&&(e=n[t.charCodeAt(r)]<<10|n[t.charCodeAt(r+1)]<<4|n[t.charCodeAt(r+2)]>>2,u[c++]=e>>8&255,u[c++]=255&e),u},e.fromByteArray=function(t){for(var e,n=t.length,i=n%3,o=[],s=16383,a=0,h=n-i;a<h;a+=s)o.push(u(t,a,a+s>h?h:a+s));return 1===i?(e=t[n-1],o.push(r[e>>2]+r[e<<4&63]+"==")):2===i&&(e=(t[n-2]<<8)+t[n-1],o.push(r[e>>10]+r[e>>4&63]+r[e<<2&63]+"=")),o.join("")};for(var r=[],n=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,a=o.length;s<a;++s)r[s]=o[s],n[o.charCodeAt(s)]=s;function h(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function u(t,e,n){for(var i,o,s=[],a=e;a<n;a+=3)i=(t[a]<<16&16711680)+(t[a+1]<<8&65280)+(255&t[a+2]),s.push(r[(o=i)>>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return s.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},8764:(t,e,r)=>{"use strict";var n=r(9742),i=r(645);e.Buffer=a,e.SlowBuffer=function(t){return+t!=t&&(t=0),a.alloc(+t)},e.INSPECT_MAX_BYTES=50;var o=2147483647;function s(t){if(t>o)throw new RangeError("Invalid typed array length");var e=new Uint8Array(t);return e.__proto__=a.prototype,e}function a(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return c(t)}return h(t,e,r)}function h(t,e,r){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return B(t)?function(t,e,r){if(e<0||t.byteLength<e)throw new RangeError("'offset' is out of bounds");if(t.byteLength<e+(r||0))throw new RangeError("'length' is out of bounds");var n;return(n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r)).__proto__=a.prototype,n}(t,e,r):"string"==typeof t?function(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!a.isEncoding(e))throw new TypeError('"encoding" must be a valid string encoding');var r=0|p(t,e),n=s(r),i=n.write(t,e);return i!==r&&(n=n.slice(0,i)),n}(t,e):function(t){if(a.isBuffer(t)){var e=0|f(t.length),r=s(e);return 0===r.length||t.copy(r,0,0,e),r}if(t){if(U(t)||"length"in t)return"number"!=typeof t.length||q(t.length)?s(0):l(t);if("Buffer"===t.type&&Array.isArray(t.data))return l(t.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(t)}function u(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function c(t){return u(t),s(t<0?0:0|f(t))}function l(t){for(var e=t.length<0?0:0|f(t.length),r=s(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function f(t){if(t>=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|t}function p(t,e){if(a.isBuffer(t))return t.length;if(U(t)||B(t))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return R(t).length;default:if(n)return F(t).length;e=(""+e).toLowerCase(),n=!0}}function d(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return N(this,e,r);case"utf8":case"utf-8":return S(this,e,r);case"ascii":return T(this,e,r);case"latin1":case"binary":return I(this,e,r);case"base64":return E(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return P(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function y(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function g(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),q(r=+r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=a.from(e,n)),a.isBuffer(e))return 0===e.length?-1:m(t,e,r,n,i);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function m(t,e,r,n,i){var o,s=1,a=t.length,h=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,a/=2,h/=2,r/=2}function u(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var c=-1;for(o=r;o<a;o++)if(u(t,o)===u(e,-1===c?0:o-c)){if(-1===c&&(c=o),o-c+1===h)return c*s}else-1!==c&&(o-=o-c),c=-1}else for(r+h>a&&(r=a-h),o=r;o>=0;o--){for(var l=!0,f=0;f<h;f++)if(u(t,o+f)!==u(e,f)){l=!1;break}if(l)return o}return-1}function v(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var o=e.length;if(o%2!=0)throw new TypeError("Invalid hex string");n>o/2&&(n=o/2);for(var s=0;s<n;++s){var a=parseInt(e.substr(2*s,2),16);if(q(a))return s;t[r+s]=a}return s}function w(t,e,r,n){return G(F(e,t.length-r),t,r,n)}function b(t,e,r,n){return G(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function M(t,e,r,n){return b(t,e,r,n)}function _(t,e,r,n){return G(R(e),t,r,n)}function x(t,e,r,n){return G(function(t,e){for(var r,n,i,o=[],s=0;s<t.length&&!((e-=2)<0);++s)n=(r=t.charCodeAt(s))>>8,i=r%256,o.push(i),o.push(n);return o}(e,t.length-r),t,r,n)}function E(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function S(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var o,s,a,h,u=t[i],c=null,l=u>239?4:u>223?3:u>191?2:1;if(i+l<=r)switch(l){case 1:u<128&&(c=u);break;case 2:128==(192&(o=t[i+1]))&&(h=(31&u)<<6|63&o)>127&&(c=h);break;case 3:o=t[i+1],s=t[i+2],128==(192&o)&&128==(192&s)&&(h=(15&u)<<12|(63&o)<<6|63&s)>2047&&(h<55296||h>57343)&&(c=h);break;case 4:o=t[i+1],s=t[i+2],a=t[i+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(h=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&h<1114112&&(c=h)}null===c?(c=65533,l=1):c>65535&&(c-=65536,n.push(c>>>10&1023|55296),c=56320|1023&c),n.push(c),i+=l}return function(t){var e=t.length;if(e<=O)return String.fromCharCode.apply(String,t);for(var r="",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=O));return r}(n)}e.kMaxLength=o,a.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()}catch(t){return!1}}(),a.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),"undefined"!=typeof Symbol&&Symbol.species&&a[Symbol.species]===a&&Object.defineProperty(a,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),a.poolSize=8192,a.from=function(t,e,r){return h(t,e,r)},a.prototype.__proto__=Uint8Array.prototype,a.__proto__=Uint8Array,a.alloc=function(t,e,r){return function(t,e,r){return u(t),t<=0?s(t):void 0!==e?"string"==typeof r?s(t).fill(e,r):s(t).fill(e):s(t)}(t,e,r)},a.allocUnsafe=function(t){return c(t)},a.allocUnsafeSlow=function(t){return c(t)},a.isBuffer=function(t){return null!=t&&!0===t._isBuffer},a.compare=function(t,e){if(!a.isBuffer(t)||!a.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var r=t.length,n=e.length,i=0,o=Math.min(r,n);i<o;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0},a.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},a.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return a.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=a.allocUnsafe(e),i=0;for(r=0;r<t.length;++r){var o=t[r];if(!a.isBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,i),i+=o.length}return n},a.byteLength=p,a.prototype._isBuffer=!0,a.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)y(this,e,e+1);return this},a.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)y(this,e,e+3),y(this,e+1,e+2);return this},a.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)y(this,e,e+7),y(this,e+1,e+6),y(this,e+2,e+5),y(this,e+3,e+4);return this},a.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?S(this,0,t):d.apply(this,arguments)},a.prototype.equals=function(t){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===a.compare(this,t)},a.prototype.inspect=function(){var t="",r=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),"<Buffer "+t+">"},a.prototype.compare=function(t,e,r,n,i){if(!a.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(n>>>=0),s=(r>>>=0)-(e>>>=0),h=Math.min(o,s),u=this.slice(n,i),c=t.slice(e,r),l=0;l<h;++l)if(u[l]!==c[l]){o=u[l],s=c[l];break}return o<s?-1:s<o?1:0},a.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},a.prototype.indexOf=function(t,e,r){return g(this,t,e,r,!0)},a.prototype.lastIndexOf=function(t,e,r){return g(this,t,e,r,!1)},a.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var o=!1;;)switch(n){case"hex":return v(this,t,e,r);case"utf8":case"utf-8":return w(this,t,e,r);case"ascii":return b(this,t,e,r);case"latin1":case"binary":return M(this,t,e,r);case"base64":return _(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,t,e,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var O=4096;function T(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function I(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function N(t,e,r){var n,i=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>i)&&(r=i);for(var o="",s=e;s<r;++s)o+=(n=t[s])<16?"0"+n.toString(16):n.toString(16);return o}function P(t,e,r){for(var n=t.slice(e,r),i="",o=0;o<n.length;o+=2)i+=String.fromCharCode(n[o]+256*n[o+1]);return i}function A(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function C(t,e,r,n,i,o){if(!a.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||e<o)throw new RangeError('"value" argument is out of bounds');if(r+n>t.length)throw new RangeError("Index out of range")}function D(t,e,r,n,i,o){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function k(t,e,r,n,o){return e=+e,r>>>=0,o||D(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function L(t,e,r,n,o){return e=+e,r>>>=0,o||D(t,0,r,8),i.write(t,e,r,n,52,8),r+8}a.prototype.slice=function(t,e){var r=this.length;(t=~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),(e=void 0===e?r:~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return n.__proto__=a.prototype,n},a.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return n},a.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},a.prototype.readUInt8=function(t,e){return t>>>=0,e||A(t,1,this.length),this[t]},a.prototype.readUInt16LE=function(t,e){return t>>>=0,e||A(t,2,this.length),this[t]|this[t+1]<<8},a.prototype.readUInt16BE=function(t,e){return t>>>=0,e||A(t,2,this.length),this[t]<<8|this[t+1]},a.prototype.readUInt32LE=function(t,e){return t>>>=0,e||A(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},a.prototype.readUInt32BE=function(t,e){return t>>>=0,e||A(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},a.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=this[t],i=1,o=0;++o<e&&(i*=256);)n+=this[t+o]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*e)),n},a.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||A(t,e,this.length);for(var n=e,i=1,o=this[t+--n];n>0&&(i*=256);)o+=this[t+--n]*i;return o>=(i*=128)&&(o-=Math.pow(2,8*e)),o},a.prototype.readInt8=function(t,e){return t>>>=0,e||A(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE=function(t,e){t>>>=0,e||A(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt16BE=function(t,e){t>>>=0,e||A(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},a.prototype.readInt32LE=function(t,e){return t>>>=0,e||A(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},a.prototype.readInt32BE=function(t,e){return t>>>=0,e||A(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},a.prototype.readFloatLE=function(t,e){return t>>>=0,e||A(t,4,this.length),i.read(this,t,!0,23,4)},a.prototype.readFloatBE=function(t,e){return t>>>=0,e||A(t,4,this.length),i.read(this,t,!1,23,4)},a.prototype.readDoubleLE=function(t,e){return t>>>=0,e||A(t,8,this.length),i.read(this,t,!0,52,8)},a.prototype.readDoubleBE=function(t,e){return t>>>=0,e||A(t,8,this.length),i.read(this,t,!1,52,8)},a.prototype.writeUIntLE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||C(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,o=0;for(this[e]=255&t;++o<r&&(i*=256);)this[e+o]=t/i&255;return e+r},a.prototype.writeUIntBE=function(t,e,r,n){t=+t,e>>>=0,r>>>=0,n||C(this,t,e,r,Math.pow(2,8*r)-1,0);var i=r-1,o=1;for(this[e+i]=255&t;--i>=0&&(o*=256);)this[e+i]=t/o&255;return e+r},a.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,1,255,0),this[e]=255&t,e+1},a.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},a.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);C(this,t,e,r,i-1,-i)}var o=0,s=1,a=0;for(this[e]=255&t;++o<r&&(s*=256);)t<0&&0===a&&0!==this[e+o-1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},a.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);C(this,t,e,r,i-1,-i)}var o=r-1,s=1,a=0;for(this[e+o]=255&t;--o>=0&&(s*=256);)t<0&&0===a&&0!==this[e+o+1]&&(a=1),this[e+o]=(t/s>>0)-a&255;return e+r},a.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},a.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},a.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},a.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},a.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||C(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},a.prototype.writeFloatLE=function(t,e,r){return k(this,t,e,!0,r)},a.prototype.writeFloatBE=function(t,e,r){return k(this,t,e,!1,r)},a.prototype.writeDoubleLE=function(t,e,r){return L(this,t,e,!0,r)},a.prototype.writeDoubleBE=function(t,e,r){return L(this,t,e,!1,r)},a.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i,o=n-r;if(this===t&&r<e&&e<n)for(i=o-1;i>=0;--i)t[i+e]=this[i+r];else if(o<1e3)for(i=0;i<o;++i)t[i+e]=this[i+r];else Uint8Array.prototype.set.call(t,this.subarray(r,r+o),e);return o},a.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),1===t.length){var i=t.charCodeAt(0);i<256&&(t=i)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!a.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;var o;if(e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(o=e;o<r;++o)this[o]=t;else{var s=a.isBuffer(t)?t:new a(t,n),h=s.length;for(o=0;o<r-e;++o)this[o+e]=s[o%h]}return this};var j=/[^+/0-9A-Za-z-_]/g;function F(t,e){var r;e=e||1/0;for(var n=t.length,i=null,o=[],s=0;s<n;++s){if((r=t.charCodeAt(s))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&o.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&o.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&o.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&o.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;o.push(r)}else if(r<2048){if((e-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function R(t){return n.toByteArray(function(t){if((t=t.trim().replace(j,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function G(t,e,r,n){for(var i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function B(t){return t instanceof ArrayBuffer||null!=t&&null!=t.constructor&&"ArrayBuffer"===t.constructor.name&&"number"==typeof t.byteLength}function U(t){return"function"==typeof ArrayBuffer.isView&&ArrayBuffer.isView(t)}function q(t){return t!=t}},7694:(t,e,r)=>{r(1761),t.exports=r(5645).RegExp.escape},4963:t=>{t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},3365:(t,e,r)=>{var n=r(2032);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(e);return+t}},7722:(t,e,r)=>{var n=r(6314)("unscopables"),i=Array.prototype;null==i[n]&&r(7728)(i,n,{}),t.exports=function(t){i[n][t]=!0}},6793:(t,e,r)=>{"use strict";var n=r(4496)(!0);t.exports=function(t,e,r){return e+(r?n(t,e).length:1)}},3328:t=>{t.exports=function(t,e,r,n){if(!(t instanceof e)||void 0!==n&&n in t)throw TypeError(r+": incorrect invocation!");return t}},7007:(t,e,r)=>{var n=r(5286);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},5216:(t,e,r)=>{"use strict";var n=r(508),i=r(2337),o=r(875);t.exports=[].copyWithin||function(t,e){var r=n(this),s=o(r.length),a=i(t,s),h=i(e,s),u=arguments.length>2?arguments[2]:void 0,c=Math.min((void 0===u?s:i(u,s))-h,s-a),l=1;for(h<a&&a<h+c&&(l=-1,h+=c-1,a+=c-1);c-- >0;)h in r?r[a]=r[h]:delete r[a],a+=l,h+=l;return r}},6852:(t,e,r)=>{"use strict";var n=r(508),i=r(2337),o=r(875);t.exports=function(t){for(var e=n(this),r=o(e.length),s=arguments.length,a=i(s>1?arguments[1]:void 0,r),h=s>2?arguments[2]:void 0,u=void 0===h?r:i(h,r);u>a;)e[a++]=t;return e}},9490:(t,e,r)=>{var n=r(3531);t.exports=function(t,e){var r=[];return n(t,!1,r.push,r,e),r}},9315:(t,e,r)=>{var n=r(2110),i=r(875),o=r(2337);t.exports=function(t){return function(e,r,s){var a,h=n(e),u=i(h.length),c=o(s,u);if(t&&r!=r){for(;u>c;)if((a=h[c++])!=a)return!0}else for(;u>c;c++)if((t||c in h)&&h[c]===r)return t||c||0;return!t&&-1}}},50:(t,e,r)=>{var n=r(741),i=r(9797),o=r(508),s=r(875),a=r(6886);t.exports=function(t,e){var r=1==t,h=2==t,u=3==t,c=4==t,l=6==t,f=5==t||l,p=e||a;return function(e,a,d){for(var y,g,m=o(e),v=i(m),w=n(a,d,3),b=s(v.length),M=0,_=r?p(e,b):h?p(e,0):void 0;b>M;M++)if((f||M in v)&&(g=w(y=v[M],M,m),t))if(r)_[M]=g;else if(g)switch(t){case 3:return!0;case 5:return y;case 6:return M;case 2:_.push(y)}else if(c)return!1;return l?-1:u||c?c:_}}},7628:(t,e,r)=>{var n=r(4963),i=r(508),o=r(9797),s=r(875);t.exports=function(t,e,r,a,h){n(e);var u=i(t),c=o(u),l=s(u.length),f=h?l-1:0,p=h?-1:1;if(r<2)for(;;){if(f in c){a=c[f],f+=p;break}if(f+=p,h?f<0:l<=f)throw TypeError("Reduce of empty array with no initial value")}for(;h?f>=0:l>f;f+=p)f in c&&(a=e(a,c[f],f,u));return a}},2736:(t,e,r)=>{var n=r(5286),i=r(4302),o=r(6314)("species");t.exports=function(t){var e;return i(t)&&("function"!=typeof(e=t.constructor)||e!==Array&&!i(e.prototype)||(e=void 0),n(e)&&null===(e=e[o])&&(e=void 0)),void 0===e?Array:e}},6886:(t,e,r)=>{var n=r(2736);t.exports=function(t,e){return new(n(t))(e)}},4398:(t,e,r)=>{"use strict";var n=r(4963),i=r(5286),o=r(7242),s=[].slice,a={},h=function(t,e,r){if(!(e in a)){for(var n=[],i=0;i<e;i++)n[i]="a["+i+"]";a[e]=Function("F,a","return new F("+n.join(",")+")")}return a[e](t,r)};t.exports=Function.bind||function(t){var e=n(this),r=s.call(arguments,1),a=function(){var n=r.concat(s.call(arguments));return this instanceof a?h(e,n.length,n):o(e,n,t)};return i(e.prototype)&&(a.prototype=e.prototype),a}},1488:(t,e,r)=>{var n=r(2032),i=r(6314)("toStringTag"),o="Arguments"==n(function(){return arguments}());t.exports=function(t){var e,r,s;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(r=function(t,e){try{return t[e]}catch(t){}}(e=Object(t),i))?r:o?n(e):"Object"==(s=n(e))&&"function"==typeof e.callee?"Arguments":s}},2032:t=>{var e={}.toString;t.exports=function(t){return e.call(t).slice(8,-1)}},9824:(t,e,r)=>{"use strict";var n=r(9275).f,i=r(2503),o=r(4408),s=r(741),a=r(3328),h=r(3531),u=r(2923),c=r(5436),l=r(2974),f=r(7057),p=r(4728).fastKey,d=r(1616),y=f?"_s":"size",g=function(t,e){var r,n=p(e);if("F"!==n)return t._i[n];for(r=t._f;r;r=r.n)if(r.k==e)return r};t.exports={getConstructor:function(t,e,r,u){var c=t((function(t,n){a(t,c,e,"_i"),t._t=e,t._i=i(null),t._f=void 0,t._l=void 0,t[y]=0,null!=n&&h(n,r,t[u],t)}));return o(c.prototype,{clear:function(){for(var t=d(this,e),r=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete r[n.i];t._f=t._l=void 0,t[y]=0},delete:function(t){var r=d(this,e),n=g(r,t);if(n){var i=n.n,o=n.p;delete r._i[n.i],n.r=!0,o&&(o.n=i),i&&(i.p=o),r._f==n&&(r._f=i),r._l==n&&(r._l=o),r[y]--}return!!n},forEach:function(t){d(this,e);for(var r,n=s(t,arguments.length>1?arguments[1]:void 0,3);r=r?r.n:this._f;)for(n(r.v,r.k,this);r&&r.r;)r=r.p},has:function(t){return!!g(d(this,e),t)}}),f&&n(c.prototype,"size",{get:function(){return d(this,e)[y]}}),c},def:function(t,e,r){var n,i,o=g(t,e);return o?o.v=r:(t._l=o={i:i=p(e,!0),k:e,v:r,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[y]++,"F"!==i&&(t._i[i]=o)),t},getEntry:g,setStrong:function(t,e,r){u(t,e,(function(t,r){this._t=d(t,e),this._k=r,this._l=void 0}),(function(){for(var t=this,e=t._k,r=t._l;r&&r.r;)r=r.p;return t._t&&(t._l=r=r?r.n:t._t._f)?c(0,"keys"==e?r.k:"values"==e?r.v:[r.k,r.v]):(t._t=void 0,c(1))}),r?"entries":"values",!r,!0),l(e)}}},6132:(t,e,r)=>{var n=r(1488),i=r(9490);t.exports=function(t){return function(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},3657:(t,e,r)=>{"use strict";var n=r(4408),i=r(4728).getWeak,o=r(7007),s=r(5286),a=r(3328),h=r(3531),u=r(50),c=r(9181),l=r(1616),f=u(5),p=u(6),d=0,y=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},m=function(t,e){return f(t.a,(function(t){return t[0]===e}))};g.prototype={get:function(t){var e=m(this,t);if(e)return e[1]},has:function(t){return!!m(this,t)},set:function(t,e){var r=m(this,t);r?r[1]=e:this.a.push([t,e])},delete:function(t){var e=p(this.a,(function(e){return e[0]===t}));return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,r,o){var u=t((function(t,n){a(t,u,e,"_i"),t._t=e,t._i=d++,t._l=void 0,null!=n&&h(n,r,t[o],t)}));return n(u.prototype,{delete:function(t){if(!s(t))return!1;var r=i(t);return!0===r?y(l(this,e)).delete(t):r&&c(r,this._i)&&delete r[this._i]},has:function(t){if(!s(t))return!1;var r=i(t);return!0===r?y(l(this,e)).has(t):r&&c(r,this._i)}}),u},def:function(t,e,r){var n=i(o(e),!0);return!0===n?y(t).set(e,r):n[t._i]=r,t},ufstore:y}},5795:(t,e,r)=>{"use strict";var n=r(3816),i=r(2985),o=r(7234),s=r(4408),a=r(4728),h=r(3531),u=r(3328),c=r(5286),l=r(4253),f=r(7462),p=r(2943),d=r(266);t.exports=function(t,e,r,y,g,m){var v=n[t],w=v,b=g?"set":"add",M=w&&w.prototype,_={},x=function(t){var e=M[t];o(M,t,"delete"==t||"has"==t?function(t){return!(m&&!c(t))&&e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,r){return e.call(this,0===t?0:t,r),this})};if("function"==typeof w&&(m||M.forEach&&!l((function(){(new w).entries().next()})))){var E=new w,S=E[b](m?{}:-0,1)!=E,O=l((function(){E.has(1)})),T=f((function(t){new w(t)})),I=!m&&l((function(){for(var t=new w,e=5;e--;)t[b](e,e);return!t.has(-0)}));T||((w=e((function(e,r){u(e,w,t);var n=d(new v,e,w);return null!=r&&h(r,g,n[b],n),n}))).prototype=M,M.constructor=w),(O||I)&&(x("delete"),x("has"),g&&x("get")),(I||S)&&x(b),m&&M.clear&&delete M.clear}else w=y.getConstructor(e,t,g,b),s(w.prototype,r),a.NEED=!0;return p(w,t),_[t]=w,i(i.G+i.W+i.F*(w!=v),_),m||y.setStrong(w,t,g),w}},5645:t=>{var e=t.exports={version:"2.6.12"};"number"==typeof __e&&(__e=e)},2811:(t,e,r)=>{"use strict";var n=r(9275),i=r(681);t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},741:(t,e,r)=>{var n=r(4963);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},3537:(t,e,r)=>{"use strict";var n=r(4253),i=Date.prototype.getTime,o=Date.prototype.toISOString,s=function(t){return t>9?t:"0"+t};t.exports=n((function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-50000000000001))}))||!n((function(){o.call(new Date(NaN))}))?function(){if(!isFinite(i.call(this)))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),r=t.getUTCMilliseconds(),n=e<0?"-":e>9999?"+":"";return n+("00000"+Math.abs(e)).slice(n?-6:-4)+"-"+s(t.getUTCMonth()+1)+"-"+s(t.getUTCDate())+"T"+s(t.getUTCHours())+":"+s(t.getUTCMinutes())+":"+s(t.getUTCSeconds())+"."+(r>99?r:"0"+s(r))+"Z"}:o},870:(t,e,r)=>{"use strict";var n=r(7007),i=r(1689),o="number";t.exports=function(t){if("string"!==t&&t!==o&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),t!=o)}},1355:t=>{t.exports=function(t){if(null==t)throw TypeError("Can't call method on "+t);return t}},7057:(t,e,r)=>{t.exports=!r(4253)((function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}))},2457:(t,e,r)=>{var n=r(5286),i=r(3816).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},4430:t=>{t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},5541:(t,e,r)=>{var n=r(7184),i=r(4548),o=r(4682);t.exports=function(t){var e=n(t),r=i.f;if(r)for(var s,a=r(t),h=o.f,u=0;a.length>u;)h.call(t,s=a[u++])&&e.push(s);return e}},2985:(t,e,r)=>{var n=r(3816),i=r(5645),o=r(7728),s=r(7234),a=r(741),h=function(t,e,r){var u,c,l,f,p=t&h.F,d=t&h.G,y=t&h.S,g=t&h.P,m=t&h.B,v=d?n:y?n[e]||(n[e]={}):(n[e]||{}).prototype,w=d?i:i[e]||(i[e]={}),b=w.prototype||(w.prototype={});for(u in d&&(r=e),r)l=((c=!p&&v&&void 0!==v[u])?v:r)[u],f=m&&c?a(l,n):g&&"function"==typeof l?a(Function.call,l):l,v&&s(v,u,l,t&h.U),w[u]!=l&&o(w,u,f),g&&b[u]!=l&&(b[u]=l)};n.core=i,h.F=1,h.G=2,h.S=4,h.P=8,h.B=16,h.W=32,h.U=64,h.R=128,t.exports=h},8852:(t,e,r)=>{var n=r(6314)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,!"/./"[t](e)}catch(t){}}return!0}},4253:t=>{t.exports=function(t){try{return!!t()}catch(t){return!0}}},8082:(t,e,r)=>{"use strict";r(8269);var n=r(7234),i=r(7728),o=r(4253),s=r(1355),a=r(6314),h=r(1165),u=a("species"),c=!o((function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$<a>")})),l=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2===r.length&&"a"===r[0]&&"b"===r[1]}();t.exports=function(t,e,r){var f=a(t),p=!o((function(){var e={};return e[f]=function(){return 7},7!=""[t](e)})),d=p?!o((function(){var e=!1,r=/a/;return r.exec=function(){return e=!0,null},"split"===t&&(r.constructor={},r.constructor[u]=function(){return r}),r[f](""),!e})):void 0;if(!p||!d||"replace"===t&&!c||"split"===t&&!l){var y=/./[f],g=r(s,f,""[t],(function(t,e,r,n,i){return e.exec===h?p&&!i?{done:!0,value:y.call(e,r,n)}:{done:!0,value:t.call(r,e,n)}:{done:!1}})),m=g[0],v=g[1];n(String.prototype,t,m),i(RegExp.prototype,f,2==e?function(t,e){return v.call(t,this,e)}:function(t){return v.call(t,this)})}}},3218:(t,e,r)=>{"use strict";var n=r(7007);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},3325:(t,e,r)=>{"use strict";var n=r(4302),i=r(5286),o=r(875),s=r(741),a=r(6314)("isConcatSpreadable");t.exports=function t(e,r,h,u,c,l,f,p){for(var d,y,g=c,m=0,v=!!f&&s(f,p,3);m<u;){if(m in h){if(d=v?v(h[m],m,r):h[m],y=!1,i(d)&&(y=void 0!==(y=d[a])?!!y:n(d)),y&&l>0)g=t(e,r,d,o(d.length),g,l-1)-1;else{if(g>=9007199254740991)throw TypeError();e[g]=d}g++}m++}return g}},3531:(t,e,r)=>{var n=r(741),i=r(8851),o=r(6555),s=r(7007),a=r(875),h=r(9002),u={},c={},l=t.exports=function(t,e,r,l,f){var p,d,y,g,m=f?function(){return t}:h(t),v=n(r,l,e?2:1),w=0;if("function"!=typeof m)throw TypeError(t+" is not iterable!");if(o(m)){for(p=a(t.length);p>w;w++)if((g=e?v(s(d=t[w])[0],d[1]):v(t[w]))===u||g===c)return g}else for(y=m.call(t);!(d=y.next()).done;)if((g=i(y,v,d.value,e))===u||g===c)return g};l.BREAK=u,l.RETURN=c},18:(t,e,r)=>{t.exports=r(3825)("native-function-to-string",Function.toString)},3816:t=>{var e=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=e)},9181:t=>{var e={}.hasOwnProperty;t.exports=function(t,r){return e.call(t,r)}},7728:(t,e,r)=>{var n=r(9275),i=r(681);t.exports=r(7057)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},639:(t,e,r)=>{var n=r(3816).document;t.exports=n&&n.documentElement},1734:(t,e,r)=>{t.exports=!r(7057)&&!r(4253)((function(){return 7!=Object.defineProperty(r(2457)("div"),"a",{get:function(){return 7}}).a}))},266:(t,e,r)=>{var n=r(5286),i=r(7375).set;t.exports=function(t,e,r){var o,s=e.constructor;return s!==r&&"function"==typeof s&&(o=s.prototype)!==r.prototype&&n(o)&&i&&i(t,o),t}},7242:t=>{t.exports=function(t,e,r){var n=void 0===r;switch(e.length){case 0:return n?t():t.call(r);case 1:return n?t(e[0]):t.call(r,e[0]);case 2:return n?t(e[0],e[1]):t.call(r,e[0],e[1]);case 3:return n?t(e[0],e[1],e[2]):t.call(r,e[0],e[1],e[2]);case 4:return n?t(e[0],e[1],e[2],e[3]):t.call(r,e[0],e[1],e[2],e[3])}return t.apply(r,e)}},9797:(t,e,r)=>{var n=r(2032);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},6555:(t,e,r)=>{var n=r(2803),i=r(6314)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},4302:(t,e,r)=>{var n=r(2032);t.exports=Array.isArray||function(t){return"Array"==n(t)}},8367:(t,e,r)=>{var n=r(5286),i=Math.floor;t.exports=function(t){return!n(t)&&isFinite(t)&&i(t)===t}},5286:t=>{t.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},5364:(t,e,r)=>{var n=r(5286),i=r(2032),o=r(6314)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},8851:(t,e,r)=>{var n=r(7007);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&n(o.call(t)),e}}},9988:(t,e,r)=>{"use strict";var n=r(2503),i=r(681),o=r(2943),s={};r(7728)(s,r(6314)("iterator"),(function(){return this})),t.exports=function(t,e,r){t.prototype=n(s,{next:i(1,r)}),o(t,e+" Iterator")}},2923:(t,e,r)=>{"use strict";var n=r(4461),i=r(2985),o=r(7234),s=r(7728),a=r(2803),h=r(9988),u=r(2943),c=r(468),l=r(6314)("iterator"),f=!([].keys&&"next"in[].keys()),p="keys",d="values",y=function(){return this};t.exports=function(t,e,r,g,m,v,w){h(r,e,g);var b,M,_,x=function(t){if(!f&&t in T)return T[t];switch(t){case p:case d:return function(){return new r(this,t)}}return function(){return new r(this,t)}},E=e+" Iterator",S=m==d,O=!1,T=t.prototype,I=T[l]||T["@@iterator"]||m&&T[m],N=I||x(m),P=m?S?x("entries"):N:void 0,A="Array"==e&&T.entries||I;if(A&&(_=c(A.call(new t)))!==Object.prototype&&_.next&&(u(_,E,!0),n||"function"==typeof _[l]||s(_,l,y)),S&&I&&I.name!==d&&(O=!0,N=function(){return I.call(this)}),n&&!w||!f&&!O&&T[l]||s(T,l,N),a[e]=N,a[E]=y,m)if(b={values:S?N:x(d),keys:v?N:x(p),entries:P},w)for(M in b)M in T||o(T,M,b[M]);else i(i.P+i.F*(f||O),e,b);return b}},7462:(t,e,r)=>{var n=r(6314)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,(function(){throw 2}))}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var o=[7],s=o[n]();s.next=function(){return{done:r=!0}},o[n]=function(){return s},t(o)}catch(t){}return r}},5436:t=>{t.exports=function(t,e){return{value:e,done:!!t}}},2803:t=>{t.exports={}},4461:t=>{t.exports=!1},3086:t=>{var e=Math.expm1;t.exports=!e||e(10)>22025.465794806718||e(10)<22025.465794806718||-2e-17!=e(-2e-17)?function(t){return 0==(t=+t)?t:t>-1e-6&&t<1e-6?t+t*t/2:Math.exp(t)-1}:e},4934:(t,e,r)=>{var n=r(1801),i=Math.pow,o=i(2,-52),s=i(2,-23),a=i(2,127)*(2-s),h=i(2,-126);t.exports=Math.fround||function(t){var e,r,i=Math.abs(t),u=n(t);return i<h?u*(i/h/s+1/o-1/o)*h*s:(r=(e=(1+s/o)*i)-(e-i))>a||r!=r?u*(1/0):u*r}},6206:t=>{t.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&t<1e-8?t-t*t/2:Math.log(1+t)}},8757:t=>{t.exports=Math.scale||function(t,e,r,n,i){return 0===arguments.length||t!=t||e!=e||r!=r||n!=n||i!=i?NaN:t===1/0||t===-1/0?t:(t-e)*(i-n)/(r-e)+n}},1801:t=>{t.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:t<0?-1:1}},4728:(t,e,r)=>{var n=r(3953)("meta"),i=r(5286),o=r(9181),s=r(9275).f,a=0,h=Object.isExtensible||function(){return!0},u=!r(4253)((function(){return h(Object.preventExtensions({}))})),c=function(t){s(t,n,{value:{i:"O"+ ++a,w:{}}})},l=t.exports={KEY:n,NEED:!1,fastKey:function(t,e){if(!i(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!o(t,n)){if(!h(t))return"F";if(!e)return"E";c(t)}return t[n].i},getWeak:function(t,e){if(!o(t,n)){if(!h(t))return!0;if(!e)return!1;c(t)}return t[n].w},onFreeze:function(t){return u&&l.NEED&&h(t)&&!o(t,n)&&c(t),t}}},133:(t,e,r)=>{var n=r(8416),i=r(2985),o=r(3825)("metadata"),s=o.store||(o.store=new(r(147))),a=function(t,e,r){var i=s.get(t);if(!i){if(!r)return;s.set(t,i=new n)}var o=i.get(e);if(!o){if(!r)return;i.set(e,o=new n)}return o};t.exports={store:s,map:a,has:function(t,e,r){var n=a(e,r,!1);return void 0!==n&&n.has(t)},get:function(t,e,r){var n=a(e,r,!1);return void 0===n?void 0:n.get(t)},set:function(t,e,r,n){a(r,n,!0).set(t,e)},keys:function(t,e){var r=a(t,e,!1),n=[];return r&&r.forEach((function(t,e){n.push(e)})),n},key:function(t){return void 0===t||"symbol"==typeof t?t:String(t)},exp:function(t){i(i.S,"Reflect",t)}}},4351:(t,e,r)=>{var n=r(3816),i=r(4193).set,o=n.MutationObserver||n.WebKitMutationObserver,s=n.process,a=n.Promise,h="process"==r(2032)(s);t.exports=function(){var t,e,r,u=function(){var n,i;for(h&&(n=s.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?r():e=void 0,n}}e=void 0,n&&n.enter()};if(h)r=function(){s.nextTick(u)};else if(!o||n.navigator&&n.navigator.standalone)if(a&&a.resolve){var c=a.resolve(void 0);r=function(){c.then(u)}}else r=function(){i.call(n,u)};else{var l=!0,f=document.createTextNode("");new o(u).observe(f,{characterData:!0}),r=function(){f.data=l=!l}}return function(n){var i={fn:n,next:void 0};e&&(e.next=i),t||(t=i,r()),e=i}}},3499:(t,e,r)=>{"use strict";var n=r(4963);function i(t){var e,r;this.promise=new t((function(t,n){if(void 0!==e||void 0!==r)throw TypeError("Bad Promise constructor");e=t,r=n})),this.resolve=n(e),this.reject=n(r)}t.exports.f=function(t){return new i(t)}},5345:(t,e,r)=>{"use strict";var n=r(7057),i=r(7184),o=r(4548),s=r(4682),a=r(508),h=r(9797),u=Object.assign;t.exports=!u||r(4253)((function(){var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach((function(t){e[t]=t})),7!=u({},t)[r]||Object.keys(u({},e)).join("")!=n}))?function(t,e){for(var r=a(t),u=arguments.length,c=1,l=o.f,f=s.f;u>c;)for(var p,d=h(arguments[c++]),y=l?i(d).concat(l(d)):i(d),g=y.length,m=0;g>m;)p=y[m++],n&&!f.call(d,p)||(r[p]=d[p]);return r}:u},2503:(t,e,r)=>{var n=r(7007),i=r(5588),o=r(4430),s=r(9335)("IE_PROTO"),a=function(){},h=function(){var t,e=r(2457)("iframe"),n=o.length;for(e.style.display="none",r(639).appendChild(e),e.src="javascript:",(t=e.contentWindow.document).open(),t.write("<script>document.F=Object<\/script>"),t.close(),h=t.F;n--;)delete h.prototype[o[n]];return h()};t.exports=Object.create||function(t,e){var r;return null!==t?(a.prototype=n(t),r=new a,a.prototype=null,r[s]=t):r=h(),void 0===e?r:i(r,e)}},9275:(t,e,r)=>{var n=r(7007),i=r(1734),o=r(1689),s=Object.defineProperty;e.f=r(7057)?Object.defineProperty:function(t,e,r){if(n(t),e=o(e,!0),n(r),i)try{return s(t,e,r)}catch(t){}if("get"in r||"set"in r)throw TypeError("Accessors not supported!");return"value"in r&&(t[e]=r.value),t}},5588:(t,e,r)=>{var n=r(9275),i=r(7007),o=r(7184);t.exports=r(7057)?Object.defineProperties:function(t,e){i(t);for(var r,s=o(e),a=s.length,h=0;a>h;)n.f(t,r=s[h++],e[r]);return t}},1670:(t,e,r)=>{"use strict";t.exports=r(4461)||!r(4253)((function(){var t=Math.random();__defineSetter__.call(null,t,(function(){})),delete r(3816)[t]}))},8693:(t,e,r)=>{var n=r(4682),i=r(681),o=r(2110),s=r(1689),a=r(9181),h=r(1734),u=Object.getOwnPropertyDescriptor;e.f=r(7057)?u:function(t,e){if(t=o(t),e=s(e,!0),h)try{return u(t,e)}catch(t){}if(a(t,e))return i(!n.f.call(t,e),t[e])}},9327:(t,e,r)=>{var n=r(2110),i=r(616).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function(t){return s&&"[object Window]"==o.call(t)?function(t){try{return i(t)}catch(t){return s.slice()}}(t):i(n(t))}},616:(t,e,r)=>{var n=r(189),i=r(4430).concat("length","prototype");e.f=Object.getOwnPropertyNames||function(t){return n(t,i)}},4548:(t,e)=>{e.f=Object.getOwnPropertySymbols},468:(t,e,r)=>{var n=r(9181),i=r(508),o=r(9335)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},189:(t,e,r)=>{var n=r(9181),i=r(2110),o=r(9315)(!1),s=r(9335)("IE_PROTO");t.exports=function(t,e){var r,a=i(t),h=0,u=[];for(r in a)r!=s&&n(a,r)&&u.push(r);for(;e.length>h;)n(a,r=e[h++])&&(~o(u,r)||u.push(r));return u}},7184:(t,e,r)=>{var n=r(189),i=r(4430);t.exports=Object.keys||function(t){return n(t,i)}},4682:(t,e)=>{e.f={}.propertyIsEnumerable},3160:(t,e,r)=>{var n=r(2985),i=r(5645),o=r(4253);t.exports=function(t,e){var r=(i.Object||{})[t]||Object[t],s={};s[t]=e(r),n(n.S+n.F*o((function(){r(1)})),"Object",s)}},1131:(t,e,r)=>{var n=r(7057),i=r(7184),o=r(2110),s=r(4682).f;t.exports=function(t){return function(e){for(var r,a=o(e),h=i(a),u=h.length,c=0,l=[];u>c;)r=h[c++],n&&!s.call(a,r)||l.push(t?[r,a[r]]:a[r]);return l}}},7643:(t,e,r)=>{var n=r(616),i=r(4548),o=r(7007),s=r(3816).Reflect;t.exports=s&&s.ownKeys||function(t){var e=n.f(o(t)),r=i.f;return r?e.concat(r(t)):e}},7743:(t,e,r)=>{var n=r(3816).parseFloat,i=r(9599).trim;t.exports=1/n(r(4644)+"-0")!=-1/0?function(t){var e=i(String(t),3),r=n(e);return 0===r&&"-"==e.charAt(0)?-0:r}:n},5960:(t,e,r)=>{var n=r(3816).parseInt,i=r(9599).trim,o=r(4644),s=/^[-+]?0[xX]/;t.exports=8!==n(o+"08")||22!==n(o+"0x16")?function(t,e){var r=i(String(t),3);return n(r,e>>>0||(s.test(r)?16:10))}:n},188:t=>{t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},94:(t,e,r)=>{var n=r(7007),i=r(5286),o=r(3499);t.exports=function(t,e){if(n(t),i(e)&&e.constructor===t)return e;var r=o.f(t);return(0,r.resolve)(e),r.promise}},681:t=>{t.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},4408:(t,e,r)=>{var n=r(7234);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},7234:(t,e,r)=>{var n=r(3816),i=r(7728),o=r(9181),s=r(3953)("src"),a=r(18),h="toString",u=(""+a).split(h);r(5645).inspectSource=function(t){return a.call(t)},(t.exports=function(t,e,r,a){var h="function"==typeof r;h&&(o(r,"name")||i(r,"name",e)),t[e]!==r&&(h&&(o(r,s)||i(r,s,t[e]?""+t[e]:u.join(String(e)))),t===n?t[e]=r:a?t[e]?t[e]=r:i(t,e,r):(delete t[e],i(t,e,r)))})(Function.prototype,h,(function(){return"function"==typeof this&&this[s]||a.call(this)}))},7787:(t,e,r)=>{"use strict";var n=r(1488),i=RegExp.prototype.exec;t.exports=function(t,e){var r=t.exec;if("function"==typeof r){var o=r.call(t,e);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==n(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},1165:(t,e,r)=>{"use strict";var n,i,o=r(3218),s=RegExp.prototype.exec,a=String.prototype.replace,h=s,u=(n=/a/,i=/b*/g,s.call(n,"a"),s.call(i,"a"),0!==n.lastIndex||0!==i.lastIndex),c=void 0!==/()??/.exec("")[1];(u||c)&&(h=function(t){var e,r,n,i,h=this;return c&&(r=new RegExp("^"+h.source+"$(?!\\s)",o.call(h))),u&&(e=h.lastIndex),n=s.call(h,t),u&&n&&(h.lastIndex=h.global?n.index+n[0].length:e),c&&n&&n.length>1&&a.call(n[0],r,(function(){for(i=1;i<arguments.length-2;i++)void 0===arguments[i]&&(n[i]=void 0)})),n}),t.exports=h},5496:t=>{t.exports=function(t,e){var r=e===Object(e)?function(t){return e[t]}:e;return function(e){return String(e).replace(t,r)}}},7195:t=>{t.exports=Object.is||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}},1024:(t,e,r)=>{"use strict";var n=r(2985),i=r(4963),o=r(741),s=r(3531);t.exports=function(t){n(n.S,t,{from:function(t){var e,r,n,a,h=arguments[1];return i(this),(e=void 0!==h)&&i(h),null==t?new this:(r=[],e?(n=0,a=o(h,arguments[2],2),s(t,!1,(function(t){r.push(a(t,n++))}))):s(t,!1,r.push,r),new this(r))}})}},4881:(t,e,r)=>{"use strict";var n=r(2985);t.exports=function(t){n(n.S,t,{of:function(){for(var t=arguments.length,e=new Array(t);t--;)e[t]=arguments[t];return new this(e)}})}},7375:(t,e,r)=>{var n=r(5286),i=r(7007),o=function(t,e){if(i(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{(n=r(741)(Function.call,r(8693).f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function(t,r){return o(t,r),e?t.__proto__=r:n(t,r),t}}({},!1):void 0),check:o}},2974:(t,e,r)=>{"use strict";var n=r(3816),i=r(9275),o=r(7057),s=r(6314)("species");t.exports=function(t){var e=n[t];o&&e&&!e[s]&&i.f(e,s,{configurable:!0,get:function(){return this}})}},2943:(t,e,r)=>{var n=r(9275).f,i=r(9181),o=r(6314)("toStringTag");t.exports=function(t,e,r){t&&!i(t=r?t:t.prototype,o)&&n(t,o,{configurable:!0,value:e})}},9335:(t,e,r)=>{var n=r(3825)("keys"),i=r(3953);t.exports=function(t){return n[t]||(n[t]=i(t))}},3825:(t,e,r)=>{var n=r(5645),i=r(3816),o="__core-js_shared__",s=i[o]||(i[o]={});(t.exports=function(t,e){return s[t]||(s[t]=void 0!==e?e:{})})("versions",[]).push({version:n.version,mode:r(4461)?"pure":"global",copyright:"© 2020 Denis Pushkarev (zloirock.ru)"})},8364:(t,e,r)=>{var n=r(7007),i=r(4963),o=r(6314)("species");t.exports=function(t,e){var r,s=n(t).constructor;return void 0===s||null==(r=n(s)[o])?e:i(r)}},7717:(t,e,r)=>{"use strict";var n=r(4253);t.exports=function(t,e){return!!t&&n((function(){e?t.call(null,(function(){}),1):t.call(null)}))}},4496:(t,e,r)=>{var n=r(1467),i=r(1355);t.exports=function(t){return function(e,r){var o,s,a=String(i(e)),h=n(r),u=a.length;return h<0||h>=u?t?"":void 0:(o=a.charCodeAt(h))<55296||o>56319||h+1===u||(s=a.charCodeAt(h+1))<56320||s>57343?t?a.charAt(h):o:t?a.slice(h,h+2):s-56320+(o-55296<<10)+65536}}},2094:(t,e,r)=>{var n=r(5364),i=r(1355);t.exports=function(t,e,r){if(n(e))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},9395:(t,e,r)=>{var n=r(2985),i=r(4253),o=r(1355),s=/"/g,a=function(t,e,r,n){var i=String(o(t)),a="<"+e;return""!==r&&(a+=" "+r+'="'+String(n).replace(s,"&quot;")+'"'),a+">"+i+"</"+e+">"};t.exports=function(t,e){var r={};r[t]=e(a),n(n.P+n.F*i((function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3})),"String",r)}},5442:(t,e,r)=>{var n=r(875),i=r(8595),o=r(1355);t.exports=function(t,e,r,s){var a=String(o(t)),h=a.length,u=void 0===r?" ":String(r),c=n(e);if(c<=h||""==u)return a;var l=c-h,f=i.call(u,Math.ceil(l/u.length));return f.length>l&&(f=f.slice(0,l)),s?f+a:a+f}},8595:(t,e,r)=>{"use strict";var n=r(1467),i=r(1355);t.exports=function(t){var e=String(i(this)),r="",o=n(t);if(o<0||o==1/0)throw RangeError("Count can't be negative");for(;o>0;(o>>>=1)&&(e+=e))1&o&&(r+=e);return r}},9599:(t,e,r)=>{var n=r(2985),i=r(1355),o=r(4253),s=r(4644),a="["+s+"]",h=RegExp("^"+a+a+"*"),u=RegExp(a+a+"*$"),c=function(t,e,r){var i={},a=o((function(){return!!s[t]()||"…"!="…"[t]()})),h=i[t]=a?e(l):s[t];r&&(i[r]=h),n(n.P+n.F*a,"String",i)},l=c.trim=function(t,e){return t=String(i(t)),1&e&&(t=t.replace(h,"")),2&e&&(t=t.replace(u,"")),t};t.exports=c},4644:t=>{t.exports="\t\n\v\f\r    \u2028\u2029\ufeff"},4193:(t,e,r)=>{var n,i,o,s=r(741),a=r(7242),h=r(639),u=r(2457),c=r(3816),l=c.process,f=c.setImmediate,p=c.clearImmediate,d=c.MessageChannel,y=c.Dispatch,g=0,m={},v=function(){var t=+this;if(m.hasOwnProperty(t)){var e=m[t];delete m[t],e()}},w=function(t){v.call(t.data)};f&&p||(f=function(t){for(var e=[],r=1;arguments.length>r;)e.push(arguments[r++]);return m[++g]=function(){a("function"==typeof t?t:Function(t),e)},n(g),g},p=function(t){delete m[t]},"process"==r(2032)(l)?n=function(t){l.nextTick(s(v,t,1))}:y&&y.now?n=function(t){y.now(s(v,t,1))}:d?(o=(i=new d).port2,i.port1.onmessage=w,n=s(o.postMessage,o,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(n=function(t){c.postMessage(t+"","*")},c.addEventListener("message",w,!1)):n="onreadystatechange"in u("script")?function(t){h.appendChild(u("script")).onreadystatechange=function(){h.removeChild(this),v.call(t)}}:function(t){setTimeout(s(v,t,1),0)}),t.exports={set:f,clear:p}},2337:(t,e,r)=>{var n=r(1467),i=Math.max,o=Math.min;t.exports=function(t,e){return(t=n(t))<0?i(t+e,0):o(t,e)}},4843:(t,e,r)=>{var n=r(1467),i=r(875);t.exports=function(t){if(void 0===t)return 0;var e=n(t),r=i(e);if(e!==r)throw RangeError("Wrong length!");return r}},1467:t=>{var e=Math.ceil,r=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?r:e)(t)}},2110:(t,e,r)=>{var n=r(9797),i=r(1355);t.exports=function(t){return n(i(t))}},875:(t,e,r)=>{var n=r(1467),i=Math.min;t.exports=function(t){return t>0?i(n(t),9007199254740991):0}},508:(t,e,r)=>{var n=r(1355);t.exports=function(t){return Object(n(t))}},1689:(t,e,r)=>{var n=r(5286);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},8440:(t,e,r)=>{"use strict";if(r(7057)){var n=r(4461),i=r(3816),o=r(4253),s=r(2985),a=r(9383),h=r(1125),u=r(741),c=r(3328),l=r(681),f=r(7728),p=r(4408),d=r(1467),y=r(875),g=r(4843),m=r(2337),v=r(1689),w=r(9181),b=r(1488),M=r(5286),_=r(508),x=r(6555),E=r(2503),S=r(468),O=r(616).f,T=r(9002),I=r(3953),N=r(6314),P=r(50),A=r(9315),C=r(8364),D=r(6997),k=r(2803),L=r(7462),j=r(2974),F=r(6852),R=r(5216),G=r(9275),B=r(8693),U=G.f,q=B.f,z=i.RangeError,V=i.TypeError,W=i.Uint8Array,X="ArrayBuffer",$="SharedArrayBuffer",Y="BYTES_PER_ELEMENT",Q=Array.prototype,K=h.ArrayBuffer,H=h.DataView,J=P(0),Z=P(2),tt=P(3),et=P(4),rt=P(5),nt=P(6),it=A(!0),ot=A(!1),st=D.values,at=D.keys,ht=D.entries,ut=Q.lastIndexOf,ct=Q.reduce,lt=Q.reduceRight,ft=Q.join,pt=Q.sort,dt=Q.slice,yt=Q.toString,gt=Q.toLocaleString,mt=N("iterator"),vt=N("toStringTag"),wt=I("typed_constructor"),bt=I("def_constructor"),Mt=a.CONSTR,_t=a.TYPED,xt=a.VIEW,Et="Wrong length!",St=P(1,(function(t,e){return Pt(C(t,t[bt]),e)})),Ot=o((function(){return 1===new W(new Uint16Array([1]).buffer)[0]})),Tt=!!W&&!!W.prototype.set&&o((function(){new W(1).set({})})),It=function(t,e){var r=d(t);if(r<0||r%e)throw z("Wrong offset!");return r},Nt=function(t){if(M(t)&&_t in t)return t;throw V(t+" is not a typed array!")},Pt=function(t,e){if(!M(t)||!(wt in t))throw V("It is not a typed array constructor!");return new t(e)},At=function(t,e){return Ct(C(t,t[bt]),e)},Ct=function(t,e){for(var r=0,n=e.length,i=Pt(t,n);n>r;)i[r]=e[r++];return i},Dt=function(t,e,r){U(t,e,{get:function(){return this._d[r]}})},kt=function(t){var e,r,n,i,o,s,a=_(t),h=arguments.length,c=h>1?arguments[1]:void 0,l=void 0!==c,f=T(a);if(null!=f&&!x(f)){for(s=f.call(a),n=[],e=0;!(o=s.next()).done;e++)n.push(o.value);a=n}for(l&&h>2&&(c=u(c,arguments[2],2)),e=0,r=y(a.length),i=Pt(this,r);r>e;e++)i[e]=l?c(a[e],e):a[e];return i},Lt=function(){for(var t=0,e=arguments.length,r=Pt(this,e);e>t;)r[t]=arguments[t++];return r},jt=!!W&&o((function(){gt.call(new W(1))})),Ft=function(){return gt.apply(jt?dt.call(Nt(this)):Nt(this),arguments)},Rt={copyWithin:function(t,e){return R.call(Nt(this),t,e,arguments.length>2?arguments[2]:void 0)},every:function(t){return et(Nt(this),t,arguments.length>1?arguments[1]:void 0)},fill:function(t){return F.apply(Nt(this),arguments)},filter:function(t){return At(this,Z(Nt(this),t,arguments.length>1?arguments[1]:void 0))},find:function(t){return rt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},findIndex:function(t){return nt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},forEach:function(t){J(Nt(this),t,arguments.length>1?arguments[1]:void 0)},indexOf:function(t){return ot(Nt(this),t,arguments.length>1?arguments[1]:void 0)},includes:function(t){return it(Nt(this),t,arguments.length>1?arguments[1]:void 0)},join:function(t){return ft.apply(Nt(this),arguments)},lastIndexOf:function(t){return ut.apply(Nt(this),arguments)},map:function(t){return St(Nt(this),t,arguments.length>1?arguments[1]:void 0)},reduce:function(t){return ct.apply(Nt(this),arguments)},reduceRight:function(t){return lt.apply(Nt(this),arguments)},reverse:function(){for(var t,e=this,r=Nt(e).length,n=Math.floor(r/2),i=0;i<n;)t=e[i],e[i++]=e[--r],e[r]=t;return e},some:function(t){return tt(Nt(this),t,arguments.length>1?arguments[1]:void 0)},sort:function(t){return pt.call(Nt(this),t)},subarray:function(t,e){var r=Nt(this),n=r.length,i=m(t,n);return new(C(r,r[bt]))(r.buffer,r.byteOffset+i*r.BYTES_PER_ELEMENT,y((void 0===e?n:m(e,n))-i))}},Gt=function(t,e){return At(this,dt.call(Nt(this),t,e))},Bt=function(t){Nt(this);var e=It(arguments[1],1),r=this.length,n=_(t),i=y(n.length),o=0;if(i+e>r)throw z(Et);for(;o<i;)this[e+o]=n[o++]},Ut={entries:function(){return ht.call(Nt(this))},keys:function(){return at.call(Nt(this))},values:function(){return st.call(Nt(this))}},qt=function(t,e){return M(t)&&t[_t]&&"symbol"!=typeof e&&e in t&&String(+e)==String(e)},zt=function(t,e){return qt(t,e=v(e,!0))?l(2,t[e]):q(t,e)},Vt=function(t,e,r){return!(qt(t,e=v(e,!0))&&M(r)&&w(r,"value"))||w(r,"get")||w(r,"set")||r.configurable||w(r,"writable")&&!r.writable||w(r,"enumerable")&&!r.enumerable?U(t,e,r):(t[e]=r.value,t)};Mt||(B.f=zt,G.f=Vt),s(s.S+s.F*!Mt,"Object",{getOwnPropertyDescriptor:zt,defineProperty:Vt}),o((function(){yt.call({})}))&&(yt=gt=function(){return ft.call(this)});var Wt=p({},Rt);p(Wt,Ut),f(Wt,mt,Ut.values),p(Wt,{slice:Gt,set:Bt,constructor:function(){},toString:yt,toLocaleString:Ft}),Dt(Wt,"buffer","b"),Dt(Wt,"byteOffset","o"),Dt(Wt,"byteLength","l"),Dt(Wt,"length","e"),U(Wt,vt,{get:function(){return this[_t]}}),t.exports=function(t,e,r,h){var u=t+((h=!!h)?"Clamped":"")+"Array",l="get"+t,p="set"+t,d=i[u],m=d||{},v=d&&S(d),w=!d||!a.ABV,_={},x=d&&d.prototype,T=function(t,r){U(t,r,{get:function(){return function(t,r){var n=t._d;return n.v[l](r*e+n.o,Ot)}(this,r)},set:function(t){return function(t,r,n){var i=t._d;h&&(n=(n=Math.round(n))<0?0:n>255?255:255&n),i.v[p](r*e+i.o,n,Ot)}(this,r,t)},enumerable:!0})};w?(d=r((function(t,r,n,i){c(t,d,u,"_d");var o,s,a,h,l=0,p=0;if(M(r)){if(!(r instanceof K||(h=b(r))==X||h==$))return _t in r?Ct(d,r):kt.call(d,r);o=r,p=It(n,e);var m=r.byteLength;if(void 0===i){if(m%e)throw z(Et);if((s=m-p)<0)throw z(Et)}else if((s=y(i)*e)+p>m)throw z(Et);a=s/e}else a=g(r),o=new K(s=a*e);for(f(t,"_d",{b:o,o:p,l:s,e:a,v:new H(o)});l<a;)T(t,l++)})),x=d.prototype=E(Wt),f(x,"constructor",d)):o((function(){d(1)}))&&o((function(){new d(-1)}))&&L((function(t){new d,new d(null),new d(1.5),new d(t)}),!0)||(d=r((function(t,r,n,i){var o;return c(t,d,u),M(r)?r instanceof K||(o=b(r))==X||o==$?void 0!==i?new m(r,It(n,e),i):void 0!==n?new m(r,It(n,e)):new m(r):_t in r?Ct(d,r):kt.call(d,r):new m(g(r))})),J(v!==Function.prototype?O(m).concat(O(v)):O(m),(function(t){t in d||f(d,t,m[t])})),d.prototype=x,n||(x.constructor=d));var I=x[mt],N=!!I&&("values"==I.name||null==I.name),P=Ut.values;f(d,wt,!0),f(x,_t,u),f(x,xt,!0),f(x,bt,d),(h?new d(1)[vt]==u:vt in x)||U(x,vt,{get:function(){return u}}),_[u]=d,s(s.G+s.W+s.F*(d!=m),_),s(s.S,u,{BYTES_PER_ELEMENT:e}),s(s.S+s.F*o((function(){m.of.call(d,1)})),u,{from:kt,of:Lt}),Y in x||f(x,Y,e),s(s.P,u,Rt),j(u),s(s.P+s.F*Tt,u,{set:Bt}),s(s.P+s.F*!N,u,Ut),n||x.toString==yt||(x.toString=yt),s(s.P+s.F*o((function(){new d(1).slice()})),u,{slice:Gt}),s(s.P+s.F*(o((function(){return[1,2].toLocaleString()!=new d([1,2]).toLocaleString()}))||!o((function(){x.toLocaleString.call([1,2])}))),u,{toLocaleString:Ft}),k[u]=N?I:P,n||N||f(x,mt,P)}}else t.exports=function(){}},1125:(t,e,r)=>{"use strict";var n=r(3816),i=r(7057),o=r(4461),s=r(9383),a=r(7728),h=r(4408),u=r(4253),c=r(3328),l=r(1467),f=r(875),p=r(4843),d=r(616).f,y=r(9275).f,g=r(6852),m=r(2943),v="ArrayBuffer",w="DataView",b="Wrong index!",M=n.ArrayBuffer,_=n.DataView,x=n.Math,E=n.RangeError,S=n.Infinity,O=M,T=x.abs,I=x.pow,N=x.floor,P=x.log,A=x.LN2,C="buffer",D="byteLength",k="byteOffset",L=i?"_b":C,j=i?"_l":D,F=i?"_o":k;function R(t,e,r){var n,i,o,s=new Array(r),a=8*r-e-1,h=(1<<a)-1,u=h>>1,c=23===e?I(2,-24)-I(2,-77):0,l=0,f=t<0||0===t&&1/t<0?1:0;for((t=T(t))!=t||t===S?(i=t!=t?1:0,n=h):(n=N(P(t)/A),t*(o=I(2,-n))<1&&(n--,o*=2),(t+=n+u>=1?c/o:c*I(2,1-u))*o>=2&&(n++,o/=2),n+u>=h?(i=0,n=h):n+u>=1?(i=(t*o-1)*I(2,e),n+=u):(i=t*I(2,u-1)*I(2,e),n=0));e>=8;s[l++]=255&i,i/=256,e-=8);for(n=n<<e|i,a+=e;a>0;s[l++]=255&n,n/=256,a-=8);return s[--l]|=128*f,s}function G(t,e,r){var n,i=8*r-e-1,o=(1<<i)-1,s=o>>1,a=i-7,h=r-1,u=t[h--],c=127&u;for(u>>=7;a>0;c=256*c+t[h],h--,a-=8);for(n=c&(1<<-a)-1,c>>=-a,a+=e;a>0;n=256*n+t[h],h--,a-=8);if(0===c)c=1-s;else{if(c===o)return n?NaN:u?-S:S;n+=I(2,e),c-=s}return(u?-1:1)*n*I(2,c-e)}function B(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function U(t){return[255&t]}function q(t){return[255&t,t>>8&255]}function z(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function V(t){return R(t,52,8)}function W(t){return R(t,23,4)}function X(t,e,r){y(t.prototype,e,{get:function(){return this[r]}})}function $(t,e,r,n){var i=p(+r);if(i+e>t[j])throw E(b);var o=t[L]._b,s=i+t[F],a=o.slice(s,s+e);return n?a:a.reverse()}function Y(t,e,r,n,i,o){var s=p(+r);if(s+e>t[j])throw E(b);for(var a=t[L]._b,h=s+t[F],u=n(+i),c=0;c<e;c++)a[h+c]=u[o?c:e-c-1]}if(s.ABV){if(!u((function(){M(1)}))||!u((function(){new M(-1)}))||u((function(){return new M,new M(1.5),new M(NaN),M.name!=v}))){for(var Q,K=(M=function(t){return c(this,M),new O(p(t))}).prototype=O.prototype,H=d(O),J=0;H.length>J;)(Q=H[J++])in M||a(M,Q,O[Q]);o||(K.constructor=M)}var Z=new _(new M(2)),tt=_.prototype.setInt8;Z.setInt8(0,2147483648),Z.setInt8(1,2147483649),!Z.getInt8(0)&&Z.getInt8(1)||h(_.prototype,{setInt8:function(t,e){tt.call(this,t,e<<24>>24)},setUint8:function(t,e){tt.call(this,t,e<<24>>24)}},!0)}else M=function(t){c(this,M,v);var e=p(t);this._b=g.call(new Array(e),0),this[j]=e},_=function(t,e,r){c(this,_,w),c(t,M,w);var n=t[j],i=l(e);if(i<0||i>n)throw E("Wrong offset!");if(i+(r=void 0===r?n-i:f(r))>n)throw E("Wrong length!");this[L]=t,this[F]=i,this[j]=r},i&&(X(M,D,"_l"),X(_,C,"_b"),X(_,D,"_l"),X(_,k,"_o")),h(_.prototype,{getInt8:function(t){return $(this,1,t)[0]<<24>>24},getUint8:function(t){return $(this,1,t)[0]},getInt16:function(t){var e=$(this,2,t,arguments[1]);return(e[1]<<8|e[0])<<16>>16},getUint16:function(t){var e=$(this,2,t,arguments[1]);return e[1]<<8|e[0]},getInt32:function(t){return B($(this,4,t,arguments[1]))},getUint32:function(t){return B($(this,4,t,arguments[1]))>>>0},getFloat32:function(t){return G($(this,4,t,arguments[1]),23,4)},getFloat64:function(t){return G($(this,8,t,arguments[1]),52,8)},setInt8:function(t,e){Y(this,1,t,U,e)},setUint8:function(t,e){Y(this,1,t,U,e)},setInt16:function(t,e){Y(this,2,t,q,e,arguments[2])},setUint16:function(t,e){Y(this,2,t,q,e,arguments[2])},setInt32:function(t,e){Y(this,4,t,z,e,arguments[2])},setUint32:function(t,e){Y(this,4,t,z,e,arguments[2])},setFloat32:function(t,e){Y(this,4,t,W,e,arguments[2])},setFloat64:function(t,e){Y(this,8,t,V,e,arguments[2])}});m(M,v),m(_,w),a(_.prototype,s.VIEW,!0),e.ArrayBuffer=M,e.DataView=_},9383:(t,e,r)=>{for(var n,i=r(3816),o=r(7728),s=r(3953),a=s("typed_array"),h=s("view"),u=!(!i.ArrayBuffer||!i.DataView),c=u,l=0,f="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");l<9;)(n=i[f[l++]])?(o(n.prototype,a,!0),o(n.prototype,h,!0)):c=!1;t.exports={ABV:u,CONSTR:c,TYPED:a,VIEW:h}},3953:t=>{var e=0,r=Math.random();t.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++e+r).toString(36))}},575:(t,e,r)=>{var n=r(3816).navigator;t.exports=n&&n.userAgent||""},1616:(t,e,r)=>{var n=r(5286);t.exports=function(t,e){if(!n(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},6074:(t,e,r)=>{var n=r(3816),i=r(5645),o=r(4461),s=r(8787),a=r(9275).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},8787:(t,e,r)=>{e.f=r(6314)},6314:(t,e,r)=>{var n=r(3825)("wks"),i=r(3953),o=r(3816).Symbol,s="function"==typeof o;(t.exports=function(t){return n[t]||(n[t]=s&&o[t]||(s?o:i)("Symbol."+t))}).store=n},9002:(t,e,r)=>{var n=r(1488),i=r(6314)("iterator"),o=r(2803);t.exports=r(5645).getIteratorMethod=function(t){if(null!=t)return t[i]||t["@@iterator"]||o[n(t)]}},1761:(t,e,r)=>{var n=r(2985),i=r(5496)(/[\\^$*+?.()|[\]{}]/g,"\\$&");n(n.S,"RegExp",{escape:function(t){return i(t)}})},2e3:(t,e,r)=>{var n=r(2985);n(n.P,"Array",{copyWithin:r(5216)}),r(7722)("copyWithin")},5745:(t,e,r)=>{"use strict";var n=r(2985),i=r(50)(4);n(n.P+n.F*!r(7717)([].every,!0),"Array",{every:function(t){return i(this,t,arguments[1])}})},8977:(t,e,r)=>{var n=r(2985);n(n.P,"Array",{fill:r(6852)}),r(7722)("fill")},8837:(t,e,r)=>{"use strict";var n=r(2985),i=r(50)(2);n(n.P+n.F*!r(7717)([].filter,!0),"Array",{filter:function(t){return i(this,t,arguments[1])}})},4899:(t,e,r)=>{"use strict";var n=r(2985),i=r(50)(6),o="findIndex",s=!0;o in[]&&Array(1)[o]((function(){s=!1})),n(n.P+n.F*s,"Array",{findIndex:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(7722)(o)},2310:(t,e,r)=>{"use strict";var n=r(2985),i=r(50)(5),o="find",s=!0;o in[]&&Array(1).find((function(){s=!1})),n(n.P+n.F*s,"Array",{find:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(7722)(o)},4336:(t,e,r)=>{"use strict";var n=r(2985),i=r(50)(0),o=r(7717)([].forEach,!0);n(n.P+n.F*!o,"Array",{forEach:function(t){return i(this,t,arguments[1])}})},522:(t,e,r)=>{"use strict";var n=r(741),i=r(2985),o=r(508),s=r(8851),a=r(6555),h=r(875),u=r(2811),c=r(9002);i(i.S+i.F*!r(7462)((function(t){Array.from(t)})),"Array",{from:function(t){var e,r,i,l,f=o(t),p="function"==typeof this?this:Array,d=arguments.length,y=d>1?arguments[1]:void 0,g=void 0!==y,m=0,v=c(f);if(g&&(y=n(y,d>2?arguments[2]:void 0,2)),null==v||p==Array&&a(v))for(r=new p(e=h(f.length));e>m;m++)u(r,m,g?y(f[m],m):f[m]);else for(l=v.call(f),r=new p;!(i=l.next()).done;m++)u(r,m,g?s(l,y,[i.value,m],!0):i.value);return r.length=m,r}})},3369:(t,e,r)=>{"use strict";var n=r(2985),i=r(9315)(!1),o=[].indexOf,s=!!o&&1/[1].indexOf(1,-0)<0;n(n.P+n.F*(s||!r(7717)(o)),"Array",{indexOf:function(t){return s?o.apply(this,arguments)||0:i(this,t,arguments[1])}})},774:(t,e,r)=>{var n=r(2985);n(n.S,"Array",{isArray:r(4302)})},6997:(t,e,r)=>{"use strict";var n=r(7722),i=r(5436),o=r(2803),s=r(2110);t.exports=r(2923)(Array,"Array",(function(t,e){this._t=s(t),this._i=0,this._k=e}),(function(){var t=this._t,e=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?r:"values"==e?t[r]:[r,t[r]])}),"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},7842:(t,e,r)=>{"use strict";var n=r(2985),i=r(2110),o=[].join;n(n.P+n.F*(r(9797)!=Object||!r(7717)(o)),"Array",{join:function(t){return o.call(i(this),void 0===t?",":t)}})},9564:(t,e,r)=>{"use strict";var n=r(2985),i=r(2110),o=r(1467),s=r(875),a=[].lastIndexOf,h=!!a&&1/[1].lastIndexOf(1,-0)<0;n(n.P+n.F*(h||!r(7717)(a)),"Array",{lastIndexOf:function(t){if(h)return a.apply(this,arguments)||0;var e=i(this),r=s(e.length),n=r-1;for(arguments.length>1&&(n=Math.min(n,o(arguments[1]))),n<0&&(n=r+n);n>=0;n--)if(n in e&&e[n]===t)return n||0;return-1}})},1802:(t,e,r)=>{"use strict";var n=r(2985),i=r(50)(1);n(n.P+n.F*!r(7717)([].map,!0),"Array",{map:function(t){return i(this,t,arguments[1])}})},8295:(t,e,r)=>{"use strict";var n=r(2985),i=r(2811);n(n.S+n.F*r(4253)((function(){function t(){}return!(Array.of.call(t)instanceof t)})),"Array",{of:function(){for(var t=0,e=arguments.length,r=new("function"==typeof this?this:Array)(e);e>t;)i(r,t,arguments[t++]);return r.length=e,r}})},3750:(t,e,r)=>{"use strict";var n=r(2985),i=r(7628);n(n.P+n.F*!r(7717)([].reduceRight,!0),"Array",{reduceRight:function(t){return i(this,t,arguments.length,arguments[1],!0)}})},3057:(t,e,r)=>{"use strict";var n=r(2985),i=r(7628);n(n.P+n.F*!r(7717)([].reduce,!0),"Array",{reduce:function(t){return i(this,t,arguments.length,arguments[1],!1)}})},110:(t,e,r)=>{"use strict";var n=r(2985),i=r(639),o=r(2032),s=r(2337),a=r(875),h=[].slice;n(n.P+n.F*r(4253)((function(){i&&h.call(i)})),"Array",{slice:function(t,e){var r=a(this.length),n=o(this);if(e=void 0===e?r:e,"Array"==n)return h.call(this,t,e);for(var i=s(t,r),u=s(e,r),c=a(u-i),l=new Array(c),f=0;f<c;f++)l[f]="String"==n?this.charAt(i+f):this[i+f];return l}})},6773:(t,e,r)=>{"use strict";var n=r(2985),i=r(50)(3);n(n.P+n.F*!r(7717)([].some,!0),"Array",{some:function(t){return i(this,t,arguments[1])}})},75:(t,e,r)=>{"use strict";var n=r(2985),i=r(4963),o=r(508),s=r(4253),a=[].sort,h=[1,2,3];n(n.P+n.F*(s((function(){h.sort(void 0)}))||!s((function(){h.sort(null)}))||!r(7717)(a)),"Array",{sort:function(t){return void 0===t?a.call(o(this)):a.call(o(this),i(t))}})},1842:(t,e,r)=>{r(2974)("Array")},1822:(t,e,r)=>{var n=r(2985);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},1031:(t,e,r)=>{var n=r(2985),i=r(3537);n(n.P+n.F*(Date.prototype.toISOString!==i),"Date",{toISOString:i})},9977:(t,e,r)=>{"use strict";var n=r(2985),i=r(508),o=r(1689);n(n.P+n.F*r(4253)((function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})})),"Date",{toJSON:function(t){var e=i(this),r=o(e);return"number"!=typeof r||isFinite(r)?e.toISOString():null}})},1560:(t,e,r)=>{var n=r(6314)("toPrimitive"),i=Date.prototype;n in i||r(7728)(i,n,r(870))},6331:(t,e,r)=>{var n=Date.prototype,i="Invalid Date",o=n.toString,s=n.getTime;new Date(NaN)+""!=i&&r(7234)(n,"toString",(function(){var t=s.call(this);return t==t?o.call(this):i}))},9730:(t,e,r)=>{var n=r(2985);n(n.P,"Function",{bind:r(4398)})},8377:(t,e,r)=>{"use strict";var n=r(5286),i=r(468),o=r(6314)("hasInstance"),s=Function.prototype;o in s||r(9275).f(s,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},6059:(t,e,r)=>{var n=r(9275).f,i=Function.prototype,o=/^\s*function ([^ (]*)/,s="name";s in i||r(7057)&&n(i,s,{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},8416:(t,e,r)=>{"use strict";var n=r(9824),i=r(1616),o="Map";t.exports=r(5795)(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{get:function(t){var e=n.getEntry(i(this,o),t);return e&&e.v},set:function(t,e){return n.def(i(this,o),0===t?0:t,e)}},n,!0)},6503:(t,e,r)=>{var n=r(2985),i=r(6206),o=Math.sqrt,s=Math.acosh;n(n.S+n.F*!(s&&710==Math.floor(s(Number.MAX_VALUE))&&s(1/0)==1/0),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:i(t-1+o(t-1)*o(t+1))}})},6786:(t,e,r)=>{var n=r(2985),i=Math.asinh;n(n.S+n.F*!(i&&1/i(0)>0),"Math",{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):Math.log(e+Math.sqrt(e*e+1)):e}})},932:(t,e,r)=>{var n=r(2985),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},7526:(t,e,r)=>{var n=r(2985),i=r(1801);n(n.S,"Math",{cbrt:function(t){return i(t=+t)*Math.pow(Math.abs(t),1/3)}})},1591:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},9073:(t,e,r)=>{var n=r(2985),i=Math.exp;n(n.S,"Math",{cosh:function(t){return(i(t=+t)+i(-t))/2}})},347:(t,e,r)=>{var n=r(2985),i=r(3086);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},579:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{fround:r(4934)})},4669:(t,e,r)=>{var n=r(2985),i=Math.abs;n(n.S,"Math",{hypot:function(t,e){for(var r,n,o=0,s=0,a=arguments.length,h=0;s<a;)h<(r=i(arguments[s++]))?(o=o*(n=h/r)*n+1,h=r):o+=r>0?(n=r/h)*n:r;return h===1/0?1/0:h*Math.sqrt(o)}})},7710:(t,e,r)=>{var n=r(2985),i=Math.imul;n(n.S+n.F*r(4253)((function(){return-5!=i(4294967295,5)||2!=i.length})),"Math",{imul:function(t,e){var r=65535,n=+t,i=+e,o=r&n,s=r&i;return 0|o*s+((r&n>>>16)*s+o*(r&i>>>16)<<16>>>0)}})},5789:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{log10:function(t){return Math.log(t)*Math.LOG10E}})},3514:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{log1p:r(6206)})},9978:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},8472:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{sign:r(1801)})},6946:(t,e,r)=>{var n=r(2985),i=r(3086),o=Math.exp;n(n.S+n.F*r(4253)((function(){return-2e-17!=!Math.sinh(-2e-17)})),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(i(t)-i(-t))/2:(o(t-1)-o(-t-1))*(Math.E/2)}})},5068:(t,e,r)=>{var n=r(2985),i=r(3086),o=Math.exp;n(n.S,"Math",{tanh:function(t){var e=i(t=+t),r=i(-t);return e==1/0?1:r==1/0?-1:(e-r)/(o(t)+o(-t))}})},413:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},1246:(t,e,r)=>{"use strict";var n=r(3816),i=r(9181),o=r(2032),s=r(266),a=r(1689),h=r(4253),u=r(616).f,c=r(8693).f,l=r(9275).f,f=r(9599).trim,p="Number",d=n.Number,y=d,g=d.prototype,m=o(r(2503)(g))==p,v="trim"in String.prototype,w=function(t){var e=a(t,!1);if("string"==typeof e&&e.length>2){var r,n,i,o=(e=v?e.trim():f(e,3)).charCodeAt(0);if(43===o||45===o){if(88===(r=e.charCodeAt(2))||120===r)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+e}for(var s,h=e.slice(2),u=0,c=h.length;u<c;u++)if((s=h.charCodeAt(u))<48||s>i)return NaN;return parseInt(h,n)}}return+e};if(!d(" 0o1")||!d("0b1")||d("+0x1")){d=function(t){var e=arguments.length<1?0:t,r=this;return r instanceof d&&(m?h((function(){g.valueOf.call(r)})):o(r)!=p)?s(new y(w(e)),r,d):w(e)};for(var b,M=r(7057)?u(y):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),_=0;M.length>_;_++)i(y,b=M[_])&&!i(d,b)&&l(d,b,c(y,b));d.prototype=g,g.constructor=d,r(7234)(n,p,d)}},5972:(t,e,r)=>{var n=r(2985);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},3403:(t,e,r)=>{var n=r(2985),i=r(3816).isFinite;n(n.S,"Number",{isFinite:function(t){return"number"==typeof t&&i(t)}})},2516:(t,e,r)=>{var n=r(2985);n(n.S,"Number",{isInteger:r(8367)})},9371:(t,e,r)=>{var n=r(2985);n(n.S,"Number",{isNaN:function(t){return t!=t}})},6479:(t,e,r)=>{var n=r(2985),i=r(8367),o=Math.abs;n(n.S,"Number",{isSafeInteger:function(t){return i(t)&&o(t)<=9007199254740991}})},1736:(t,e,r)=>{var n=r(2985);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},1889:(t,e,r)=>{var n=r(2985);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},5177:(t,e,r)=>{var n=r(2985),i=r(7743);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},6943:(t,e,r)=>{var n=r(2985),i=r(5960);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},726:(t,e,r)=>{"use strict";var n=r(2985),i=r(1467),o=r(3365),s=r(8595),a=1..toFixed,h=Math.floor,u=[0,0,0,0,0,0],c="Number.toFixed: incorrect invocation!",l="0",f=function(t,e){for(var r=-1,n=e;++r<6;)n+=t*u[r],u[r]=n%1e7,n=h(n/1e7)},p=function(t){for(var e=6,r=0;--e>=0;)r+=u[e],u[e]=h(r/t),r=r%t*1e7},d=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==u[t]){var r=String(u[t]);e=""===e?r:e+s.call(l,7-r.length)+r}return e},y=function(t,e,r){return 0===e?r:e%2==1?y(t,e-1,r*t):y(t*t,e/2,r)};n(n.P+n.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(4253)((function(){a.call({})}))),"Number",{toFixed:function(t){var e,r,n,a,h=o(this,c),u=i(t),g="",m=l;if(u<0||u>20)throw RangeError(c);if(h!=h)return"NaN";if(h<=-1e21||h>=1e21)return String(h);if(h<0&&(g="-",h=-h),h>1e-21)if(r=(e=function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e}(h*y(2,69,1))-69)<0?h*y(2,-e,1):h/y(2,e,1),r*=4503599627370496,(e=52-e)>0){for(f(0,r),n=u;n>=7;)f(1e7,0),n-=7;for(f(y(10,n,1),0),n=e-1;n>=23;)p(1<<23),n-=23;p(1<<n),f(1,1),p(2),m=d()}else f(0,r),f(1<<-e,0),m=d()+s.call(l,u);return u>0?g+((a=m.length)<=u?"0."+s.call(l,u-a)+m:m.slice(0,a-u)+"."+m.slice(a-u)):g+m}})},1901:(t,e,r)=>{"use strict";var n=r(2985),i=r(4253),o=r(3365),s=1..toPrecision;n(n.P+n.F*(i((function(){return"1"!==s.call(1,void 0)}))||!i((function(){s.call({})}))),"Number",{toPrecision:function(t){var e=o(this,"Number#toPrecision: incorrect invocation!");return void 0===t?s.call(e):s.call(e,t)}})},5115:(t,e,r)=>{var n=r(2985);n(n.S+n.F,"Object",{assign:r(5345)})},8132:(t,e,r)=>{var n=r(2985);n(n.S,"Object",{create:r(2503)})},7470:(t,e,r)=>{var n=r(2985);n(n.S+n.F*!r(7057),"Object",{defineProperties:r(5588)})},8388:(t,e,r)=>{var n=r(2985);n(n.S+n.F*!r(7057),"Object",{defineProperty:r(9275).f})},9375:(t,e,r)=>{var n=r(5286),i=r(4728).onFreeze;r(3160)("freeze",(function(t){return function(e){return t&&n(e)?t(i(e)):e}}))},4882:(t,e,r)=>{var n=r(2110),i=r(8693).f;r(3160)("getOwnPropertyDescriptor",(function(){return function(t,e){return i(n(t),e)}}))},9622:(t,e,r)=>{r(3160)("getOwnPropertyNames",(function(){return r(9327).f}))},1520:(t,e,r)=>{var n=r(508),i=r(468);r(3160)("getPrototypeOf",(function(){return function(t){return i(n(t))}}))},9892:(t,e,r)=>{var n=r(5286);r(3160)("isExtensible",(function(t){return function(e){return!!n(e)&&(!t||t(e))}}))},4157:(t,e,r)=>{var n=r(5286);r(3160)("isFrozen",(function(t){return function(e){return!n(e)||!!t&&t(e)}}))},5095:(t,e,r)=>{var n=r(5286);r(3160)("isSealed",(function(t){return function(e){return!n(e)||!!t&&t(e)}}))},9176:(t,e,r)=>{var n=r(2985);n(n.S,"Object",{is:r(7195)})},7476:(t,e,r)=>{var n=r(508),i=r(7184);r(3160)("keys",(function(){return function(t){return i(n(t))}}))},4672:(t,e,r)=>{var n=r(5286),i=r(4728).onFreeze;r(3160)("preventExtensions",(function(t){return function(e){return t&&n(e)?t(i(e)):e}}))},3533:(t,e,r)=>{var n=r(5286),i=r(4728).onFreeze;r(3160)("seal",(function(t){return function(e){return t&&n(e)?t(i(e)):e}}))},8838:(t,e,r)=>{var n=r(2985);n(n.S,"Object",{setPrototypeOf:r(7375).set})},6253:(t,e,r)=>{"use strict";var n=r(1488),i={};i[r(6314)("toStringTag")]="z",i+""!="[object z]"&&r(7234)(Object.prototype,"toString",(function(){return"[object "+n(this)+"]"}),!0)},4299:(t,e,r)=>{var n=r(2985),i=r(7743);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},1084:(t,e,r)=>{var n=r(2985),i=r(5960);n(n.G+n.F*(parseInt!=i),{parseInt:i})},851:(t,e,r)=>{"use strict";var n,i,o,s,a=r(4461),h=r(3816),u=r(741),c=r(1488),l=r(2985),f=r(5286),p=r(4963),d=r(3328),y=r(3531),g=r(8364),m=r(4193).set,v=r(4351)(),w=r(3499),b=r(188),M=r(575),_=r(94),x="Promise",E=h.TypeError,S=h.process,O=S&&S.versions,T=O&&O.v8||"",I=h.Promise,N="process"==c(S),P=function(){},A=i=w.f,C=!!function(){try{var t=I.resolve(1),e=(t.constructor={})[r(6314)("species")]=function(t){t(P,P)};return(N||"function"==typeof PromiseRejectionEvent)&&t.then(P)instanceof e&&0!==T.indexOf("6.6")&&-1===M.indexOf("Chrome/66")}catch(t){}}(),D=function(t){var e;return!(!f(t)||"function"!=typeof(e=t.then))&&e},k=function(t,e){if(!t._n){t._n=!0;var r=t._c;v((function(){for(var n=t._v,i=1==t._s,o=0,s=function(e){var r,o,s,a=i?e.ok:e.fail,h=e.resolve,u=e.reject,c=e.domain;try{a?(i||(2==t._h&&F(t),t._h=1),!0===a?r=n:(c&&c.enter(),r=a(n),c&&(c.exit(),s=!0)),r===e.promise?u(E("Promise-chain cycle")):(o=D(r))?o.call(r,h,u):h(r)):u(n)}catch(t){c&&!s&&c.exit(),u(t)}};r.length>o;)s(r[o++]);t._c=[],t._n=!1,e&&!t._h&&L(t)}))}},L=function(t){m.call(h,(function(){var e,r,n,i=t._v,o=j(t);if(o&&(e=b((function(){N?S.emit("unhandledRejection",i,t):(r=h.onunhandledrejection)?r({promise:t,reason:i}):(n=h.console)&&n.error&&n.error("Unhandled promise rejection",i)})),t._h=N||j(t)?2:1),t._a=void 0,o&&e.e)throw e.v}))},j=function(t){return 1!==t._h&&0===(t._a||t._c).length},F=function(t){m.call(h,(function(){var e;N?S.emit("rejectionHandled",t):(e=h.onrejectionhandled)&&e({promise:t,reason:t._v})}))},R=function(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),k(e,!0))},G=function(t){var e,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw E("Promise can't be resolved itself");(e=D(t))?v((function(){var n={_w:r,_d:!1};try{e.call(t,u(G,n,1),u(R,n,1))}catch(t){R.call(n,t)}})):(r._v=t,r._s=1,k(r,!1))}catch(t){R.call({_w:r,_d:!1},t)}}};C||(I=function(t){d(this,I,x,"_h"),p(t),n.call(this);try{t(u(G,this,1),u(R,this,1))}catch(t){R.call(this,t)}},(n=function(t){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=r(4408)(I.prototype,{then:function(t,e){var r=A(g(this,I));return r.ok="function"!=typeof t||t,r.fail="function"==typeof e&&e,r.domain=N?S.domain:void 0,this._c.push(r),this._a&&this._a.push(r),this._s&&k(this,!1),r.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new n;this.promise=t,this.resolve=u(G,t,1),this.reject=u(R,t,1)},w.f=A=function(t){return t===I||t===s?new o(t):i(t)}),l(l.G+l.W+l.F*!C,{Promise:I}),r(2943)(I,x),r(2974)(x),s=r(5645).Promise,l(l.S+l.F*!C,x,{reject:function(t){var e=A(this);return(0,e.reject)(t),e.promise}}),l(l.S+l.F*(a||!C),x,{resolve:function(t){return _(a&&this===s?I:this,t)}}),l(l.S+l.F*!(C&&r(7462)((function(t){I.all(t).catch(P)}))),x,{all:function(t){var e=this,r=A(e),n=r.resolve,i=r.reject,o=b((function(){var r=[],o=0,s=1;y(t,!1,(function(t){var a=o++,h=!1;r.push(void 0),s++,e.resolve(t).then((function(t){h||(h=!0,r[a]=t,--s||n(r))}),i)})),--s||n(r)}));return o.e&&i(o.v),r.promise},race:function(t){var e=this,r=A(e),n=r.reject,i=b((function(){y(t,!1,(function(t){e.resolve(t).then(r.resolve,n)}))}));return i.e&&n(i.v),r.promise}})},1572:(t,e,r)=>{var n=r(2985),i=r(4963),o=r(7007),s=(r(3816).Reflect||{}).apply,a=Function.apply;n(n.S+n.F*!r(4253)((function(){s((function(){}))})),"Reflect",{apply:function(t,e,r){var n=i(t),h=o(r);return s?s(n,e,h):a.call(n,e,h)}})},2139:(t,e,r)=>{var n=r(2985),i=r(2503),o=r(4963),s=r(7007),a=r(5286),h=r(4253),u=r(4398),c=(r(3816).Reflect||{}).construct,l=h((function(){function t(){}return!(c((function(){}),[],t)instanceof t)})),f=!h((function(){c((function(){}))}));n(n.S+n.F*(l||f),"Reflect",{construct:function(t,e){o(t),s(e);var r=arguments.length<3?t:o(arguments[2]);if(f&&!l)return c(t,e,r);if(t==r){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])}var n=[null];return n.push.apply(n,e),new(u.apply(t,n))}var h=r.prototype,p=i(a(h)?h:Object.prototype),d=Function.apply.call(t,p,e);return a(d)?d:p}})},685:(t,e,r)=>{var n=r(9275),i=r(2985),o=r(7007),s=r(1689);i(i.S+i.F*r(4253)((function(){Reflect.defineProperty(n.f({},1,{value:1}),1,{value:2})})),"Reflect",{defineProperty:function(t,e,r){o(t),e=s(e,!0),o(r);try{return n.f(t,e,r),!0}catch(t){return!1}}})},5535:(t,e,r)=>{var n=r(2985),i=r(8693).f,o=r(7007);n(n.S,"Reflect",{deleteProperty:function(t,e){var r=i(o(t),e);return!(r&&!r.configurable)&&delete t[e]}})},7347:(t,e,r)=>{"use strict";var n=r(2985),i=r(7007),o=function(t){this._t=i(t),this._i=0;var e,r=this._k=[];for(e in t)r.push(e)};r(9988)(o,"Object",(function(){var t,e=this,r=e._k;do{if(e._i>=r.length)return{value:void 0,done:!0}}while(!((t=r[e._i++])in e._t));return{value:t,done:!1}})),n(n.S,"Reflect",{enumerate:function(t){return new o(t)}})},6633:(t,e,r)=>{var n=r(8693),i=r(2985),o=r(7007);i(i.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return n.f(o(t),e)}})},8989:(t,e,r)=>{var n=r(2985),i=r(468),o=r(7007);n(n.S,"Reflect",{getPrototypeOf:function(t){return i(o(t))}})},3049:(t,e,r)=>{var n=r(8693),i=r(468),o=r(9181),s=r(2985),a=r(5286),h=r(7007);s(s.S,"Reflect",{get:function t(e,r){var s,u,c=arguments.length<3?e:arguments[2];return h(e)===c?e[r]:(s=n.f(e,r))?o(s,"value")?s.value:void 0!==s.get?s.get.call(c):void 0:a(u=i(e))?t(u,r,c):void 0}})},8270:(t,e,r)=>{var n=r(2985);n(n.S,"Reflect",{has:function(t,e){return e in t}})},4510:(t,e,r)=>{var n=r(2985),i=r(7007),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function(t){return i(t),!o||o(t)}})},3984:(t,e,r)=>{var n=r(2985);n(n.S,"Reflect",{ownKeys:r(7643)})},5769:(t,e,r)=>{var n=r(2985),i=r(7007),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function(t){i(t);try{return o&&o(t),!0}catch(t){return!1}}})},6014:(t,e,r)=>{var n=r(2985),i=r(7375);i&&n(n.S,"Reflect",{setPrototypeOf:function(t,e){i.check(t,e);try{return i.set(t,e),!0}catch(t){return!1}}})},55:(t,e,r)=>{var n=r(9275),i=r(8693),o=r(468),s=r(9181),a=r(2985),h=r(681),u=r(7007),c=r(5286);a(a.S,"Reflect",{set:function t(e,r,a){var l,f,p=arguments.length<4?e:arguments[3],d=i.f(u(e),r);if(!d){if(c(f=o(e)))return t(f,r,a,p);d=h(0)}if(s(d,"value")){if(!1===d.writable||!c(p))return!1;if(l=i.f(p,r)){if(l.get||l.set||!1===l.writable)return!1;l.value=a,n.f(p,r,l)}else n.f(p,r,h(0,a));return!0}return void 0!==d.set&&(d.set.call(p,a),!0)}})},3946:(t,e,r)=>{var n=r(3816),i=r(266),o=r(9275).f,s=r(616).f,a=r(5364),h=r(3218),u=n.RegExp,c=u,l=u.prototype,f=/a/g,p=/a/g,d=new u(f)!==f;if(r(7057)&&(!d||r(4253)((function(){return p[r(6314)("match")]=!1,u(f)!=f||u(p)==p||"/a/i"!=u(f,"i")})))){u=function(t,e){var r=this instanceof u,n=a(t),o=void 0===e;return!r&&n&&t.constructor===u&&o?t:i(d?new c(n&&!o?t.source:t,e):c((n=t instanceof u)?t.source:t,n&&o?h.call(t):e),r?this:l,u)};for(var y=function(t){t in u||o(u,t,{configurable:!0,get:function(){return c[t]},set:function(e){c[t]=e}})},g=s(c),m=0;g.length>m;)y(g[m++]);l.constructor=u,u.prototype=l,r(7234)(n,"RegExp",u)}r(2974)("RegExp")},8269:(t,e,r)=>{"use strict";var n=r(1165);r(2985)({target:"RegExp",proto:!0,forced:n!==/./.exec},{exec:n})},6774:(t,e,r)=>{r(7057)&&"g"!=/./g.flags&&r(9275).f(RegExp.prototype,"flags",{configurable:!0,get:r(3218)})},1466:(t,e,r)=>{"use strict";var n=r(7007),i=r(875),o=r(6793),s=r(7787);r(8082)("match",1,(function(t,e,r,a){return[function(r){var n=t(this),i=null==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=a(r,t,this);if(e.done)return e.value;var h=n(t),u=String(this);if(!h.global)return s(h,u);var c=h.unicode;h.lastIndex=0;for(var l,f=[],p=0;null!==(l=s(h,u));){var d=String(l[0]);f[p]=d,""===d&&(h.lastIndex=o(u,i(h.lastIndex),c)),p++}return 0===p?null:f}]}))},9357:(t,e,r)=>{"use strict";var n=r(7007),i=r(508),o=r(875),s=r(1467),a=r(6793),h=r(7787),u=Math.max,c=Math.min,l=Math.floor,f=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g;r(8082)("replace",2,(function(t,e,r,d){return[function(n,i){var o=t(this),s=null==n?void 0:n[e];return void 0!==s?s.call(n,o,i):r.call(String(o),n,i)},function(t,e){var i=d(r,t,this,e);if(i.done)return i.value;var l=n(t),f=String(this),p="function"==typeof e;p||(e=String(e));var g=l.global;if(g){var m=l.unicode;l.lastIndex=0}for(var v=[];;){var w=h(l,f);if(null===w)break;if(v.push(w),!g)break;""===String(w[0])&&(l.lastIndex=a(f,o(l.lastIndex),m))}for(var b,M="",_=0,x=0;x<v.length;x++){w=v[x];for(var E=String(w[0]),S=u(c(s(w.index),f.length),0),O=[],T=1;T<w.length;T++)O.push(void 0===(b=w[T])?b:String(b));var I=w.groups;if(p){var N=[E].concat(O,S,f);void 0!==I&&N.push(I);var P=String(e.apply(void 0,N))}else P=y(E,f,S,O,I,e);S>=_&&(M+=f.slice(_,S)+P,_=S+E.length)}return M+f.slice(_)}];function y(t,e,n,o,s,a){var h=n+t.length,u=o.length,c=p;return void 0!==s&&(s=i(s),c=f),r.call(a,c,(function(r,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(h);case"<":a=s[i.slice(1,-1)];break;default:var c=+i;if(0===c)return r;if(c>u){var f=l(c/10);return 0===f?r:f<=u?void 0===o[f-1]?i.charAt(1):o[f-1]+i.charAt(1):r}a=o[c-1]}return void 0===a?"":a}))}}))},6142:(t,e,r)=>{"use strict";var n=r(7007),i=r(7195),o=r(7787);r(8082)("search",1,(function(t,e,r,s){return[function(r){var n=t(this),i=null==r?void 0:r[e];return void 0!==i?i.call(r,n):new RegExp(r)[e](String(n))},function(t){var e=s(r,t,this);if(e.done)return e.value;var a=n(t),h=String(this),u=a.lastIndex;i(u,0)||(a.lastIndex=0);var c=o(a,h);return i(a.lastIndex,u)||(a.lastIndex=u),null===c?-1:c.index}]}))},1876:(t,e,r)=>{"use strict";var n=r(5364),i=r(7007),o=r(8364),s=r(6793),a=r(875),h=r(7787),u=r(1165),c=r(4253),l=Math.min,f=[].push,p=4294967295,d=!c((function(){RegExp(p,"y")}));r(8082)("split",2,(function(t,e,r,c){var y;return y="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!n(t))return r.call(i,t,e);for(var o,s,a,h=[],c=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),l=0,d=void 0===e?p:e>>>0,y=new RegExp(t.source,c+"g");(o=u.call(y,i))&&!((s=y.lastIndex)>l&&(h.push(i.slice(l,o.index)),o.length>1&&o.index<i.length&&f.apply(h,o.slice(1)),a=o[0].length,l=s,h.length>=d));)y.lastIndex===o.index&&y.lastIndex++;return l===i.length?!a&&y.test("")||h.push(""):h.push(i.slice(l)),h.length>d?h.slice(0,d):h}:"0".split(void 0,0).length?function(t,e){return void 0===t&&0===e?[]:r.call(this,t,e)}:r,[function(r,n){var i=t(this),o=null==r?void 0:r[e];return void 0!==o?o.call(r,i,n):y.call(String(i),r,n)},function(t,e){var n=c(y,t,this,e,y!==r);if(n.done)return n.value;var u=i(t),f=String(this),g=o(u,RegExp),m=u.unicode,v=(u.ignoreCase?"i":"")+(u.multiline?"m":"")+(u.unicode?"u":"")+(d?"y":"g"),w=new g(d?u:"^(?:"+u.source+")",v),b=void 0===e?p:e>>>0;if(0===b)return[];if(0===f.length)return null===h(w,f)?[f]:[];for(var M=0,_=0,x=[];_<f.length;){w.lastIndex=d?_:0;var E,S=h(w,d?f:f.slice(_));if(null===S||(E=l(a(w.lastIndex+(d?0:_)),f.length))===M)_=s(f,_,m);else{if(x.push(f.slice(M,_)),x.length===b)return x;for(var O=1;O<=S.length-1;O++)if(x.push(S[O]),x.length===b)return x;_=M=E}}return x.push(f.slice(M)),x}]}))},6108:(t,e,r)=>{"use strict";r(6774);var n=r(7007),i=r(3218),o=r(7057),s="toString",a=/./.toString,h=function(t){r(7234)(RegExp.prototype,s,t,!0)};r(4253)((function(){return"/a/b"!=a.call({source:"a",flags:"b"})}))?h((function(){var t=n(this);return"/".concat(t.source,"/","flags"in t?t.flags:!o&&t instanceof RegExp?i.call(t):void 0)})):a.name!=s&&h((function(){return a.call(this)}))},8184:(t,e,r)=>{"use strict";var n=r(9824),i=r(1616);t.exports=r(5795)("Set",(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return n.def(i(this,"Set"),t=0===t?0:t,t)}},n)},856:(t,e,r)=>{"use strict";r(9395)("anchor",(function(t){return function(e){return t(this,"a","name",e)}}))},703:(t,e,r)=>{"use strict";r(9395)("big",(function(t){return function(){return t(this,"big","","")}}))},1539:(t,e,r)=>{"use strict";r(9395)("blink",(function(t){return function(){return t(this,"blink","","")}}))},5292:(t,e,r)=>{"use strict";r(9395)("bold",(function(t){return function(){return t(this,"b","","")}}))},9539:(t,e,r)=>{"use strict";var n=r(2985),i=r(4496)(!1);n(n.P,"String",{codePointAt:function(t){return i(this,t)}})},6620:(t,e,r)=>{"use strict";var n=r(2985),i=r(875),o=r(2094),s="endsWith",a="".endsWith;n(n.P+n.F*r(8852)(s),"String",{endsWith:function(t){var e=o(this,t,s),r=arguments.length>1?arguments[1]:void 0,n=i(e.length),h=void 0===r?n:Math.min(i(r),n),u=String(t);return a?a.call(e,u,h):e.slice(h-u.length,h)===u}})},6629:(t,e,r)=>{"use strict";r(9395)("fixed",(function(t){return function(){return t(this,"tt","","")}}))},3694:(t,e,r)=>{"use strict";r(9395)("fontcolor",(function(t){return function(e){return t(this,"font","color",e)}}))},7648:(t,e,r)=>{"use strict";r(9395)("fontsize",(function(t){return function(e){return t(this,"font","size",e)}}))},191:(t,e,r)=>{var n=r(2985),i=r(2337),o=String.fromCharCode,s=String.fromCodePoint;n(n.S+n.F*(!!s&&1!=s.length),"String",{fromCodePoint:function(t){for(var e,r=[],n=arguments.length,s=0;n>s;){if(e=+arguments[s++],i(e,1114111)!==e)throw RangeError(e+" is not a valid code point");r.push(e<65536?o(e):o(55296+((e-=65536)>>10),e%1024+56320))}return r.join("")}})},2850:(t,e,r)=>{"use strict";var n=r(2985),i=r(2094),o="includes";n(n.P+n.F*r(8852)(o),"String",{includes:function(t){return!!~i(this,t,o).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},7795:(t,e,r)=>{"use strict";r(9395)("italics",(function(t){return function(){return t(this,"i","","")}}))},9115:(t,e,r)=>{"use strict";var n=r(4496)(!0);r(2923)(String,"String",(function(t){this._t=String(t),this._i=0}),(function(){var t,e=this._t,r=this._i;return r>=e.length?{value:void 0,done:!0}:(t=n(e,r),this._i+=t.length,{value:t,done:!1})}))},4531:(t,e,r)=>{"use strict";r(9395)("link",(function(t){return function(e){return t(this,"a","href",e)}}))},8306:(t,e,r)=>{var n=r(2985),i=r(2110),o=r(875);n(n.S,"String",{raw:function(t){for(var e=i(t.raw),r=o(e.length),n=arguments.length,s=[],a=0;r>a;)s.push(String(e[a++])),a<n&&s.push(String(arguments[a]));return s.join("")}})},823:(t,e,r)=>{var n=r(2985);n(n.P,"String",{repeat:r(8595)})},3605:(t,e,r)=>{"use strict";r(9395)("small",(function(t){return function(){return t(this,"small","","")}}))},7732:(t,e,r)=>{"use strict";var n=r(2985),i=r(875),o=r(2094),s="startsWith",a="".startsWith;n(n.P+n.F*r(8852)(s),"String",{startsWith:function(t){var e=o(this,t,s),r=i(Math.min(arguments.length>1?arguments[1]:void 0,e.length)),n=String(t);return a?a.call(e,n,r):e.slice(r,r+n.length)===n}})},6780:(t,e,r)=>{"use strict";r(9395)("strike",(function(t){return function(){return t(this,"strike","","")}}))},9937:(t,e,r)=>{"use strict";r(9395)("sub",(function(t){return function(){return t(this,"sub","","")}}))},511:(t,e,r)=>{"use strict";r(9395)("sup",(function(t){return function(){return t(this,"sup","","")}}))},4564:(t,e,r)=>{"use strict";r(9599)("trim",(function(t){return function(){return t(this,3)}}))},5767:(t,e,r)=>{"use strict";var n=r(3816),i=r(9181),o=r(7057),s=r(2985),a=r(7234),h=r(4728).KEY,u=r(4253),c=r(3825),l=r(2943),f=r(3953),p=r(6314),d=r(8787),y=r(6074),g=r(5541),m=r(4302),v=r(7007),w=r(5286),b=r(508),M=r(2110),_=r(1689),x=r(681),E=r(2503),S=r(9327),O=r(8693),T=r(4548),I=r(9275),N=r(7184),P=O.f,A=I.f,C=S.f,D=n.Symbol,k=n.JSON,L=k&&k.stringify,j=p("_hidden"),F=p("toPrimitive"),R={}.propertyIsEnumerable,G=c("symbol-registry"),B=c("symbols"),U=c("op-symbols"),q=Object.prototype,z="function"==typeof D&&!!T.f,V=n.QObject,W=!V||!V.prototype||!V.prototype.findChild,X=o&&u((function(){return 7!=E(A({},"a",{get:function(){return A(this,"a",{value:7}).a}})).a}))?function(t,e,r){var n=P(q,e);n&&delete q[e],A(t,e,r),n&&t!==q&&A(q,e,n)}:A,$=function(t){var e=B[t]=E(D.prototype);return e._k=t,e},Y=z&&"symbol"==typeof D.iterator?function(t){return"symbol"==typeof t}:function(t){return t instanceof D},Q=function(t,e,r){return t===q&&Q(U,e,r),v(t),e=_(e,!0),v(r),i(B,e)?(r.enumerable?(i(t,j)&&t[j][e]&&(t[j][e]=!1),r=E(r,{enumerable:x(0,!1)})):(i(t,j)||A(t,j,x(1,{})),t[j][e]=!0),X(t,e,r)):A(t,e,r)},K=function(t,e){v(t);for(var r,n=g(e=M(e)),i=0,o=n.length;o>i;)Q(t,r=n[i++],e[r]);return t},H=function(t){var e=R.call(this,t=_(t,!0));return!(this===q&&i(B,t)&&!i(U,t))&&(!(e||!i(this,t)||!i(B,t)||i(this,j)&&this[j][t])||e)},J=function(t,e){if(t=M(t),e=_(e,!0),t!==q||!i(B,e)||i(U,e)){var r=P(t,e);return!r||!i(B,e)||i(t,j)&&t[j][e]||(r.enumerable=!0),r}},Z=function(t){for(var e,r=C(M(t)),n=[],o=0;r.length>o;)i(B,e=r[o++])||e==j||e==h||n.push(e);return n},tt=function(t){for(var e,r=t===q,n=C(r?U:M(t)),o=[],s=0;n.length>s;)!i(B,e=n[s++])||r&&!i(q,e)||o.push(B[e]);return o};z||(a((D=function(){if(this instanceof D)throw TypeError("Symbol is not a constructor!");var t=f(arguments.length>0?arguments[0]:void 0),e=function(r){this===q&&e.call(U,r),i(this,j)&&i(this[j],t)&&(this[j][t]=!1),X(this,t,x(1,r))};return o&&W&&X(q,t,{configurable:!0,set:e}),$(t)}).prototype,"toString",(function(){return this._k})),O.f=J,I.f=Q,r(616).f=S.f=Z,r(4682).f=H,T.f=tt,o&&!r(4461)&&a(q,"propertyIsEnumerable",H,!0),d.f=function(t){return $(p(t))}),s(s.G+s.W+s.F*!z,{Symbol:D});for(var et="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),rt=0;et.length>rt;)p(et[rt++]);for(var nt=N(p.store),it=0;nt.length>it;)y(nt[it++]);s(s.S+s.F*!z,"Symbol",{for:function(t){return i(G,t+="")?G[t]:G[t]=D(t)},keyFor:function(t){if(!Y(t))throw TypeError(t+" is not a symbol!");for(var e in G)if(G[e]===t)return e},useSetter:function(){W=!0},useSimple:function(){W=!1}}),s(s.S+s.F*!z,"Object",{create:function(t,e){return void 0===e?E(t):K(E(t),e)},defineProperty:Q,defineProperties:K,getOwnPropertyDescriptor:J,getOwnPropertyNames:Z,getOwnPropertySymbols:tt});var ot=u((function(){T.f(1)}));s(s.S+s.F*ot,"Object",{getOwnPropertySymbols:function(t){return T.f(b(t))}}),k&&s(s.S+s.F*(!z||u((function(){var t=D();return"[null]"!=L([t])||"{}"!=L({a:t})||"{}"!=L(Object(t))}))),"JSON",{stringify:function(t){for(var e,r,n=[t],i=1;arguments.length>i;)n.push(arguments[i++]);if(r=e=n[1],(w(e)||void 0!==t)&&!Y(t))return m(e)||(e=function(t,e){if("function"==typeof r&&(e=r.call(this,t,e)),!Y(e))return e}),n[1]=e,L.apply(k,n)}}),D.prototype[F]||r(7728)(D.prototype,F,D.prototype.valueOf),l(D,"Symbol"),l(Math,"Math",!0),l(n.JSON,"JSON",!0)},142:(t,e,r)=>{"use strict";var n=r(2985),i=r(9383),o=r(1125),s=r(7007),a=r(2337),h=r(875),u=r(5286),c=r(3816).ArrayBuffer,l=r(8364),f=o.ArrayBuffer,p=o.DataView,d=i.ABV&&c.isView,y=f.prototype.slice,g=i.VIEW,m="ArrayBuffer";n(n.G+n.W+n.F*(c!==f),{ArrayBuffer:f}),n(n.S+n.F*!i.CONSTR,m,{isView:function(t){return d&&d(t)||u(t)&&g in t}}),n(n.P+n.U+n.F*r(4253)((function(){return!new f(2).slice(1,void 0).byteLength})),m,{slice:function(t,e){if(void 0!==y&&void 0===e)return y.call(s(this),t);for(var r=s(this).byteLength,n=a(t,r),i=a(void 0===e?r:e,r),o=new(l(this,f))(h(i-n)),u=new p(this),c=new p(o),d=0;n<i;)c.setUint8(d++,u.getUint8(n++));return o}}),r(2974)(m)},1786:(t,e,r)=>{var n=r(2985);n(n.G+n.W+n.F*!r(9383).ABV,{DataView:r(1125).DataView})},162:(t,e,r)=>{r(8440)("Float32",4,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},3834:(t,e,r)=>{r(8440)("Float64",8,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},4821:(t,e,r)=>{r(8440)("Int16",2,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},1303:(t,e,r)=>{r(8440)("Int32",4,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},5368:(t,e,r)=>{r(8440)("Int8",1,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},9103:(t,e,r)=>{r(8440)("Uint16",2,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},3318:(t,e,r)=>{r(8440)("Uint32",4,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},6964:(t,e,r)=>{r(8440)("Uint8",1,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},2152:(t,e,r)=>{r(8440)("Uint8",1,(function(t){return function(e,r,n){return t(this,e,r,n)}}),!0)},147:(t,e,r)=>{"use strict";var n,i=r(3816),o=r(50)(0),s=r(7234),a=r(4728),h=r(5345),u=r(3657),c=r(5286),l=r(1616),f=r(1616),p=!i.ActiveXObject&&"ActiveXObject"in i,d="WeakMap",y=a.getWeak,g=Object.isExtensible,m=u.ufstore,v=function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},w={get:function(t){if(c(t)){var e=y(t);return!0===e?m(l(this,d)).get(t):e?e[this._i]:void 0}},set:function(t,e){return u.def(l(this,d),t,e)}},b=t.exports=r(5795)(d,v,w,u,!0,!0);f&&p&&(h((n=u.getConstructor(v,d)).prototype,w),a.NEED=!0,o(["delete","has","get","set"],(function(t){var e=b.prototype,r=e[t];s(e,t,(function(e,i){if(c(e)&&!g(e)){this._f||(this._f=new n);var o=this._f[t](e,i);return"set"==t?this:o}return r.call(this,e,i)}))})))},9192:(t,e,r)=>{"use strict";var n=r(3657),i=r(1616),o="WeakSet";r(5795)(o,(function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}}),{add:function(t){return n.def(i(this,o),t,!0)}},n,!1,!0)},1268:(t,e,r)=>{"use strict";var n=r(2985),i=r(3325),o=r(508),s=r(875),a=r(4963),h=r(6886);n(n.P,"Array",{flatMap:function(t){var e,r,n=o(this);return a(t),e=s(n.length),r=h(n,0),i(r,n,n,e,0,1,t,arguments[1]),r}}),r(7722)("flatMap")},4692:(t,e,r)=>{"use strict";var n=r(2985),i=r(3325),o=r(508),s=r(875),a=r(1467),h=r(6886);n(n.P,"Array",{flatten:function(){var t=arguments[0],e=o(this),r=s(e.length),n=h(e,0);return i(n,e,e,r,0,void 0===t?1:a(t)),n}}),r(7722)("flatten")},2773:(t,e,r)=>{"use strict";var n=r(2985),i=r(9315)(!0);n(n.P,"Array",{includes:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0)}}),r(7722)("includes")},8267:(t,e,r)=>{var n=r(2985),i=r(4351)(),o=r(3816).process,s="process"==r(2032)(o);n(n.G,{asap:function(t){var e=s&&o.domain;i(e?e.bind(t):t)}})},2559:(t,e,r)=>{var n=r(2985),i=r(2032);n(n.S,"Error",{isError:function(t){return"Error"===i(t)}})},5575:(t,e,r)=>{var n=r(2985);n(n.G,{global:r(3816)})},525:(t,e,r)=>{r(1024)("Map")},8211:(t,e,r)=>{r(4881)("Map")},7698:(t,e,r)=>{var n=r(2985);n(n.P+n.R,"Map",{toJSON:r(6132)("Map")})},8865:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{clamp:function(t,e,r){return Math.min(r,Math.max(e,t))}})},368:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{DEG_PER_RAD:Math.PI/180})},6427:(t,e,r)=>{var n=r(2985),i=180/Math.PI;n(n.S,"Math",{degrees:function(t){return t*i}})},286:(t,e,r)=>{var n=r(2985),i=r(8757),o=r(4934);n(n.S,"Math",{fscale:function(t,e,r,n,s){return o(i(t,e,r,n,s))}})},2816:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{iaddh:function(t,e,r,n){var i=t>>>0,o=r>>>0;return(e>>>0)+(n>>>0)+((i&o|(i|o)&~(i+o>>>0))>>>31)|0}})},2082:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{imulh:function(t,e){var r=65535,n=+t,i=+e,o=n&r,s=i&r,a=n>>16,h=i>>16,u=(a*s>>>0)+(o*s>>>16);return a*h+(u>>16)+((o*h>>>0)+(u&r)>>16)}})},5986:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{isubh:function(t,e,r,n){var i=t>>>0,o=r>>>0;return(e>>>0)-(n>>>0)-((~i&o|~(i^o)&i-o>>>0)>>>31)|0}})},6308:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{RAD_PER_DEG:180/Math.PI})},9221:(t,e,r)=>{var n=r(2985),i=Math.PI/180;n(n.S,"Math",{radians:function(t){return t*i}})},3570:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{scale:r(8757)})},3776:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{signbit:function(t){return(t=+t)!=t?t:0==t?1/t==1/0:t>0}})},6754:(t,e,r)=>{var n=r(2985);n(n.S,"Math",{umulh:function(t,e){var r=65535,n=+t,i=+e,o=n&r,s=i&r,a=n>>>16,h=i>>>16,u=(a*s>>>0)+(o*s>>>16);return a*h+(u>>>16)+((o*h>>>0)+(u&r)>>>16)}})},8646:(t,e,r)=>{"use strict";var n=r(2985),i=r(508),o=r(4963),s=r(9275);r(7057)&&n(n.P+r(1670),"Object",{__defineGetter__:function(t,e){s.f(i(this),t,{get:o(e),enumerable:!0,configurable:!0})}})},2658:(t,e,r)=>{"use strict";var n=r(2985),i=r(508),o=r(4963),s=r(9275);r(7057)&&n(n.P+r(1670),"Object",{__defineSetter__:function(t,e){s.f(i(this),t,{set:o(e),enumerable:!0,configurable:!0})}})},3276:(t,e,r)=>{var n=r(2985),i=r(1131)(!0);n(n.S,"Object",{entries:function(t){return i(t)}})},8351:(t,e,r)=>{var n=r(2985),i=r(7643),o=r(2110),s=r(8693),a=r(2811);n(n.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,r,n=o(t),h=s.f,u=i(n),c={},l=0;u.length>l;)void 0!==(r=h(n,e=u[l++]))&&a(c,e,r);return c}})},6917:(t,e,r)=>{"use strict";var n=r(2985),i=r(508),o=r(1689),s=r(468),a=r(8693).f;r(7057)&&n(n.P+r(1670),"Object",{__lookupGetter__:function(t){var e,r=i(this),n=o(t,!0);do{if(e=a(r,n))return e.get}while(r=s(r))}})},372:(t,e,r)=>{"use strict";var n=r(2985),i=r(508),o=r(1689),s=r(468),a=r(8693).f;r(7057)&&n(n.P+r(1670),"Object",{__lookupSetter__:function(t){var e,r=i(this),n=o(t,!0);do{if(e=a(r,n))return e.set}while(r=s(r))}})},6409:(t,e,r)=>{var n=r(2985),i=r(1131)(!1);n(n.S,"Object",{values:function(t){return i(t)}})},6534:(t,e,r)=>{"use strict";var n=r(2985),i=r(3816),o=r(5645),s=r(4351)(),a=r(6314)("observable"),h=r(4963),u=r(7007),c=r(3328),l=r(4408),f=r(7728),p=r(3531),d=p.RETURN,y=function(t){return null==t?void 0:h(t)},g=function(t){var e=t._c;e&&(t._c=void 0,e())},m=function(t){return void 0===t._o},v=function(t){m(t)||(t._o=void 0,g(t))},w=function(t,e){u(t),this._c=void 0,this._o=t,t=new b(this);try{var r=e(t),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:h(r),this._c=r)}catch(e){return void t.error(e)}m(this)&&g(this)};w.prototype=l({},{unsubscribe:function(){v(this)}});var b=function(t){this._s=t};b.prototype=l({},{next:function(t){var e=this._s;if(!m(e)){var r=e._o;try{var n=y(r.next);if(n)return n.call(r,t)}catch(t){try{v(e)}finally{throw t}}}},error:function(t){var e=this._s;if(m(e))throw t;var r=e._o;e._o=void 0;try{var n=y(r.error);if(!n)throw t;t=n.call(r,t)}catch(t){try{g(e)}finally{throw t}}return g(e),t},complete:function(t){var e=this._s;if(!m(e)){var r=e._o;e._o=void 0;try{var n=y(r.complete);t=n?n.call(r,t):void 0}catch(t){try{g(e)}finally{throw t}}return g(e),t}}});var M=function(t){c(this,M,"Observable","_f")._f=h(t)};l(M.prototype,{subscribe:function(t){return new w(t,this._f)},forEach:function(t){var e=this;return new(o.Promise||i.Promise)((function(r,n){h(t);var i=e.subscribe({next:function(e){try{return t(e)}catch(t){n(t),i.unsubscribe()}},error:n,complete:r})}))}}),l(M,{from:function(t){var e="function"==typeof this?this:M,r=y(u(t)[a]);if(r){var n=u(r.call(t));return n.constructor===e?n:new e((function(t){return n.subscribe(t)}))}return new e((function(e){var r=!1;return s((function(){if(!r){try{if(p(t,!1,(function(t){if(e.next(t),r)return d}))===d)return}catch(t){if(r)throw t;return void e.error(t)}e.complete()}})),function(){r=!0}}))},of:function(){for(var t=0,e=arguments.length,r=new Array(e);t<e;)r[t]=arguments[t++];return new("function"==typeof this?this:M)((function(t){var e=!1;return s((function(){if(!e){for(var n=0;n<r.length;++n)if(t.next(r[n]),e)return;t.complete()}})),function(){e=!0}}))}}),f(M.prototype,a,(function(){return this})),n(n.G,{Observable:M}),r(2974)("Observable")},9865:(t,e,r)=>{"use strict";var n=r(2985),i=r(5645),o=r(3816),s=r(8364),a=r(94);n(n.P+n.R,"Promise",{finally:function(t){var e=s(this,i.Promise||o.Promise),r="function"==typeof t;return this.then(r?function(r){return a(e,t()).then((function(){return r}))}:t,r?function(r){return a(e,t()).then((function(){throw r}))}:t)}})},1898:(t,e,r)=>{"use strict";var n=r(2985),i=r(3499),o=r(188);n(n.S,"Promise",{try:function(t){var e=i.f(this),r=o(t);return(r.e?e.reject:e.resolve)(r.v),e.promise}})},3364:(t,e,r)=>{var n=r(133),i=r(7007),o=n.key,s=n.set;n.exp({defineMetadata:function(t,e,r,n){s(t,e,i(r),o(n))}})},1432:(t,e,r)=>{var n=r(133),i=r(7007),o=n.key,s=n.map,a=n.store;n.exp({deleteMetadata:function(t,e){var r=arguments.length<3?void 0:o(arguments[2]),n=s(i(e),r,!1);if(void 0===n||!n.delete(t))return!1;if(n.size)return!0;var h=a.get(e);return h.delete(r),!!h.size||a.delete(e)}})},4416:(t,e,r)=>{var n=r(8184),i=r(9490),o=r(133),s=r(7007),a=r(468),h=o.keys,u=o.key,c=function(t,e){var r=h(t,e),o=a(t);if(null===o)return r;var s=c(o,e);return s.length?r.length?i(new n(r.concat(s))):s:r};o.exp({getMetadataKeys:function(t){return c(s(t),arguments.length<2?void 0:u(arguments[1]))}})},6562:(t,e,r)=>{var n=r(133),i=r(7007),o=r(468),s=n.has,a=n.get,h=n.key,u=function(t,e,r){if(s(t,e,r))return a(t,e,r);var n=o(e);return null!==n?u(t,n,r):void 0};n.exp({getMetadata:function(t,e){return u(t,i(e),arguments.length<3?void 0:h(arguments[2]))}})},2213:(t,e,r)=>{var n=r(133),i=r(7007),o=n.keys,s=n.key;n.exp({getOwnMetadataKeys:function(t){return o(i(t),arguments.length<2?void 0:s(arguments[1]))}})},8681:(t,e,r)=>{var n=r(133),i=r(7007),o=n.get,s=n.key;n.exp({getOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},3471:(t,e,r)=>{var n=r(133),i=r(7007),o=r(468),s=n.has,a=n.key,h=function(t,e,r){if(s(t,e,r))return!0;var n=o(e);return null!==n&&h(t,n,r)};n.exp({hasMetadata:function(t,e){return h(t,i(e),arguments.length<3?void 0:a(arguments[2]))}})},4329:(t,e,r)=>{var n=r(133),i=r(7007),o=n.has,s=n.key;n.exp({hasOwnMetadata:function(t,e){return o(t,i(e),arguments.length<3?void 0:s(arguments[2]))}})},5159:(t,e,r)=>{var n=r(133),i=r(7007),o=r(4963),s=n.key,a=n.set;n.exp({metadata:function(t,e){return function(r,n){a(t,e,(void 0!==n?i:o)(r),s(n))}}})},9467:(t,e,r)=>{r(1024)("Set")},4837:(t,e,r)=>{r(4881)("Set")},8739:(t,e,r)=>{var n=r(2985);n(n.P+n.R,"Set",{toJSON:r(6132)("Set")})},7220:(t,e,r)=>{"use strict";var n=r(2985),i=r(4496)(!0),o=r(4253)((function(){return"𠮷"!=="𠮷".at(0)}));n(n.P+n.F*o,"String",{at:function(t){return i(this,t)}})},4208:(t,e,r)=>{"use strict";var n=r(2985),i=r(1355),o=r(875),s=r(5364),a=r(3218),h=RegExp.prototype,u=function(t,e){this._r=t,this._s=e};r(9988)(u,"RegExp String",(function(){var t=this._r.exec(this._s);return{value:t,done:null===t}})),n(n.P,"String",{matchAll:function(t){if(i(this),!s(t))throw TypeError(t+" is not a regexp!");var e=String(this),r="flags"in h?String(t.flags):a.call(t),n=new RegExp(t.source,~r.indexOf("g")?r:"g"+r);return n.lastIndex=o(t.lastIndex),new u(n,e)}})},2770:(t,e,r)=>{"use strict";var n=r(2985),i=r(5442),o=r(575),s=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);n(n.P+n.F*s,"String",{padEnd:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},1784:(t,e,r)=>{"use strict";var n=r(2985),i=r(5442),o=r(575),s=/Version\/10\.\d+(\.\d+)?( Mobile\/\w+)? Safari\//.test(o);n(n.P+n.F*s,"String",{padStart:function(t){return i(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},5869:(t,e,r)=>{"use strict";r(9599)("trimLeft",(function(t){return function(){return t(this,1)}}),"trimStart")},4325:(t,e,r)=>{"use strict";r(9599)("trimRight",(function(t){return function(){return t(this,2)}}),"trimEnd")},9665:(t,e,r)=>{r(6074)("asyncIterator")},9593:(t,e,r)=>{r(6074)("observable")},8967:(t,e,r)=>{var n=r(2985);n(n.S,"System",{global:r(3816)})},4188:(t,e,r)=>{r(1024)("WeakMap")},7594:(t,e,r)=>{r(4881)("WeakMap")},3495:(t,e,r)=>{r(1024)("WeakSet")},9550:(t,e,r)=>{r(4881)("WeakSet")},1181:(t,e,r)=>{for(var n=r(6997),i=r(7184),o=r(7234),s=r(3816),a=r(7728),h=r(2803),u=r(6314),c=u("iterator"),l=u("toStringTag"),f=h.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=i(p),y=0;y<d.length;y++){var g,m=d[y],v=p[m],w=s[m],b=w&&w.prototype;if(b&&(b[c]||a(b,c,f),b[l]||a(b,l,m),h[m]=f,v))for(g in n)b[g]||o(b,g,n[g],!0)}},4633:(t,e,r)=>{var n=r(2985),i=r(4193);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},2564:(t,e,r)=>{var n=r(3816),i=r(2985),o=r(575),s=[].slice,a=/MSIE .\./.test(o),h=function(t){return function(e,r){var n=arguments.length>2,i=!!n&&s.call(arguments,2);return t(n?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,r)}};i(i.G+i.B+i.F*a,{setTimeout:h(n.setTimeout),setInterval:h(n.setInterval)})},1934:(t,e,r)=>{r(5767),r(8132),r(8388),r(7470),r(4882),r(1520),r(7476),r(9622),r(9375),r(3533),r(4672),r(4157),r(5095),r(9892),r(5115),r(9176),r(8838),r(6253),r(9730),r(6059),r(8377),r(1084),r(4299),r(1246),r(726),r(1901),r(5972),r(3403),r(2516),r(9371),r(6479),r(1736),r(1889),r(5177),r(6943),r(6503),r(6786),r(932),r(7526),r(1591),r(9073),r(347),r(579),r(4669),r(7710),r(5789),r(3514),r(9978),r(8472),r(6946),r(5068),r(413),r(191),r(8306),r(4564),r(9115),r(9539),r(6620),r(2850),r(823),r(7732),r(856),r(703),r(1539),r(5292),r(6629),r(3694),r(7648),r(7795),r(4531),r(3605),r(6780),r(9937),r(511),r(1822),r(9977),r(1031),r(6331),r(1560),r(774),r(522),r(8295),r(7842),r(110),r(75),r(4336),r(1802),r(8837),r(6773),r(5745),r(3057),r(3750),r(3369),r(9564),r(2e3),r(8977),r(2310),r(4899),r(1842),r(6997),r(3946),r(8269),r(6108),r(6774),r(1466),r(9357),r(6142),r(1876),r(851),r(8416),r(8184),r(147),r(9192),r(142),r(1786),r(5368),r(6964),r(2152),r(4821),r(9103),r(1303),r(3318),r(162),r(3834),r(1572),r(2139),r(685),r(5535),r(7347),r(3049),r(6633),r(8989),r(8270),r(4510),r(3984),r(5769),r(55),r(6014),r(2773),r(1268),r(4692),r(7220),r(1784),r(2770),r(5869),r(4325),r(4208),r(9665),r(9593),r(8351),r(6409),r(3276),r(8646),r(2658),r(6917),r(372),r(7698),r(8739),r(8211),r(4837),r(7594),r(9550),r(525),r(9467),r(4188),r(3495),r(5575),r(8967),r(2559),r(8865),r(368),r(6427),r(286),r(2816),r(5986),r(2082),r(6308),r(9221),r(3570),r(6754),r(3776),r(9865),r(1898),r(3364),r(1432),r(6562),r(4416),r(8681),r(2213),r(3471),r(4329),r(5159),r(8267),r(6534),r(2564),r(4633),r(1181),t.exports=r(5645)},624:t=>{function e(t){if(t)return function(t){for(var r in e.prototype)t[r]=e.prototype[r];return t}(t)}t.exports=e,e.prototype.on=e.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},e.prototype.once=function(t,e){var r=this;function n(){r.off(t,n),e.apply(this,arguments)}return this._callbacks=this._callbacks||{},n.fn=e,this.on(t,n),this},e.prototype.off=e.prototype.removeListener=e.prototype.removeAllListeners=e.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var r,n=this._callbacks[t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var i=0;i<n.length;i++)if((r=n[i])===e||r.fn===e){n.splice(i,1);break}return this},e.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),r=this._callbacks[t];if(r)for(var n=0,i=(r=r.slice(0)).length;n<i;++n)r[n].apply(this,e);return this},e.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},e.prototype.hasListeners=function(t){return!!this.listeners(t).length}},7187:t=>{function e(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(t){return"function"==typeof t}function n(t){return"object"==typeof t&&null!==t}function i(t){return void 0===t}t.exports=e,e.EventEmitter=e,e.prototype._events=void 0,e.prototype._maxListeners=void 0,e.defaultMaxListeners=10,e.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},e.prototype.emit=function(t){var e,o,s,a,h,u;if(this._events||(this._events={}),"error"===t&&(!this._events.error||n(this._events.error)&&!this._events.error.length)){if((e=arguments[1])instanceof Error)throw e;var c=new Error('Uncaught, unspecified "error" event. ('+e+")");throw c.context=e,c}if(i(o=this._events[t]))return!1;if(r(o))switch(arguments.length){case 1:o.call(this);break;case 2:o.call(this,arguments[1]);break;case 3:o.call(this,arguments[1],arguments[2]);break;default:a=Array.prototype.slice.call(arguments,1),o.apply(this,a)}else if(n(o))for(a=Array.prototype.slice.call(arguments,1),s=(u=o.slice()).length,h=0;h<s;h++)u[h].apply(this,a);return!0},e.prototype.addListener=function(t,o){var s;if(!r(o))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",t,r(o.listener)?o.listener:o),this._events[t]?n(this._events[t])?this._events[t].push(o):this._events[t]=[this._events[t],o]:this._events[t]=o,n(this._events[t])&&!this._events[t].warned&&(s=i(this._maxListeners)?e.defaultMaxListeners:this._maxListeners)&&s>0&&this._events[t].length>s&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()),this},e.prototype.on=e.prototype.addListener,e.prototype.once=function(t,e){if(!r(e))throw TypeError("listener must be a function");var n=!1;function i(){this.removeListener(t,i),n||(n=!0,e.apply(this,arguments))}return i.listener=e,this.on(t,i),this},e.prototype.removeListener=function(t,e){var i,o,s,a;if(!r(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(s=(i=this._events[t]).length,o=-1,i===e||r(i.listener)&&i.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(n(i)){for(a=s;a-- >0;)if(i[a]===e||i[a].listener&&i[a].listener===e){o=a;break}if(o<0)return this;1===i.length?(i.length=0,delete this._events[t]):i.splice(o,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},e.prototype.removeAllListeners=function(t){var e,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(r(n=this._events[t]))this.removeListener(t,n);else if(n)for(;n.length;)this.removeListener(t,n[n.length-1]);return delete this._events[t],this},e.prototype.listeners=function(t){return this._events&&this._events[t]?r(this._events[t])?[this._events[t]]:this._events[t].slice():[]},e.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(r(e))return 1;if(e)return e.length}return 0},e.listenerCount=function(t,e){return t.listenerCount(e)}},645:(t,e)=>{e.read=function(t,e,r,n,i){var o,s,a=8*i-n-1,h=(1<<a)-1,u=h>>1,c=-7,l=r?i-1:0,f=r?-1:1,p=t[e+l];for(l+=f,o=p&(1<<-c)-1,p>>=-c,c+=a;c>0;o=256*o+t[e+l],l+=f,c-=8);for(s=o&(1<<-c)-1,o>>=-c,c+=n;c>0;s=256*s+t[e+l],l+=f,c-=8);if(0===o)o=1-u;else{if(o===h)return s?NaN:1/0*(p?-1:1);s+=Math.pow(2,n),o-=u}return(p?-1:1)*s*Math.pow(2,o-n)},e.write=function(t,e,r,n,i,o){var s,a,h,u=8*o-i-1,c=(1<<u)-1,l=c>>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,y=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=c):(s=Math.floor(Math.log(e)/Math.LN2),e*(h=Math.pow(2,-s))<1&&(s--,h*=2),(e+=s+l>=1?f/h:f*Math.pow(2,1-l))*h>=2&&(s++,h/=2),s+l>=c?(a=0,s=c):s+l>=1?(a=(e*h-1)*Math.pow(2,i),s+=l):(a=e*Math.pow(2,l-1)*Math.pow(2,i),s=0));i>=8;t[r+p]=255&a,p+=d,a/=256,i-=8);for(s=s<<i|a,u+=i;u>0;t[r+p]=255&s,p+=d,s/=256,u-=8);t[r+p-d]|=128*y}},9209:function(t,e){!function(t){"use strict";function e(t,e){return t>e?1:t<e?-1:0}var r=function(t,r){void 0===t&&(t=e),void 0===r&&(r=!1),this._compare=t,this._root=null,this._size=0,this._noDuplicates=!!r},n={size:{configurable:!0}};function i(t,e,r,n,o){var s=o-n;if(s>0){var a=n+Math.floor(s/2),h={key:e[a],data:r[a],parent:t};return h.left=i(h,e,r,n,a),h.right=i(h,e,r,a+1,o),h}return null}function o(t,e,r,n,i){if(!(r>=n)){for(var s=t[r+n>>1],a=r-1,h=n+1;;){do{a++}while(i(t[a],s)<0);do{h--}while(i(t[h],s)>0);if(a>=h)break;var u=t[a];t[a]=t[h],t[h]=u,u=e[a],e[a]=e[h],e[h]=u}o(t,e,r,h,i),o(t,e,h+1,n,i)}}r.prototype.rotateLeft=function(t){var e=t.right;e&&(t.right=e.left,e.left&&(e.left.parent=t),e.parent=t.parent),t.parent?t===t.parent.left?t.parent.left=e:t.parent.right=e:this._root=e,e&&(e.left=t),t.parent=e},r.prototype.rotateRight=function(t){var e=t.left;e&&(t.left=e.right,e.right&&(e.right.parent=t),e.parent=t.parent),t.parent?t===t.parent.left?t.parent.left=e:t.parent.right=e:this._root=e,e&&(e.right=t),t.parent=e},r.prototype._splay=function(t){for(var e=this;t.parent;){var r=t.parent;r.parent?r.left===t&&r.parent.left===r?(e.rotateRight(r.parent),e.rotateRight(r)):r.right===t&&r.parent.right===r?(e.rotateLeft(r.parent),e.rotateLeft(r)):r.left===t&&r.parent.right===r?(e.rotateRight(r),e.rotateLeft(r)):(e.rotateLeft(r),e.rotateRight(r)):r.left===t?e.rotateRight(r):e.rotateLeft(r)}},r.prototype.splay=function(t){for(var e,r,n,i,o;t.parent;)(r=(e=t.parent).parent)&&r.parent?((n=r.parent).left===r?n.left=t:n.right=t,t.parent=n):(t.parent=null,this._root=t),i=t.left,o=t.right,t===e.left?(r&&(r.left===e?(e.right?(r.left=e.right,r.left.parent=r):r.left=null,e.right=r,r.parent=e):(i?(r.right=i,i.parent=r):r.right=null,t.left=r,r.parent=t)),o?(e.left=o,o.parent=e):e.left=null,t.right=e,e.parent=t):(r&&(r.right===e?(e.left?(r.right=e.left,r.right.parent=r):r.right=null,e.left=r,r.parent=e):(o?(r.left=o,o.parent=r):r.left=null,t.right=r,r.parent=t)),i?(e.right=i,i.parent=e):e.right=null,t.left=e,e.parent=t)},r.prototype.replace=function(t,e){t.parent?t===t.parent.left?t.parent.left=e:t.parent.right=e:this._root=e,e&&(e.parent=t.parent)},r.prototype.minNode=function(t){if(void 0===t&&(t=this._root),t)for(;t.left;)t=t.left;return t},r.prototype.maxNode=function(t){if(void 0===t&&(t=this._root),t)for(;t.right;)t=t.right;return t},r.prototype.insert=function(t,e){var r=this._root,n=null,i=this._compare;if(this._noDuplicates)for(;r;){if(n=r,0===i(r.key,t))return;r=i(r.key,t)<0?r.right:r.left}else for(;r;)n=r,r=i(r.key,t)<0?r.right:r.left;return r={key:t,data:e,left:null,right:null,parent:n},n?i(n.key,r.key)<0?n.right=r:n.left=r:this._root=r,this.splay(r),this._size++,r},r.prototype.find=function(t){for(var e=this._root,r=this._compare;e;){var n=r(e.key,t);if(n<0)e=e.right;else{if(!(n>0))return e;e=e.left}}return null},r.prototype.contains=function(t){for(var e=this._root,r=this._compare;e;){var n=r(t,e.key);if(0===n)return!0;e=n<0?e.left:e.right}return!1},r.prototype.remove=function(t){var e=this.find(t);if(!e)return!1;if(this.splay(e),e.left)if(e.right){var r=this.minNode(e.right);r.parent!==e&&(this.replace(r,r.right),r.right=e.right,r.right.parent=r),this.replace(e,r),r.left=e.left,r.left.parent=r}else this.replace(e,e.left);else this.replace(e,e.right);return this._size--,!0},r.prototype.removeNode=function(t){if(!t)return!1;if(this.splay(t),t.left)if(t.right){var e=this.minNode(t.right);e.parent!==t&&(this.replace(e,e.right),e.right=t.right,e.right.parent=e),this.replace(t,e),e.left=t.left,e.left.parent=e}else this.replace(t,t.left);else this.replace(t,t.right);return this._size--,!0},r.prototype.erase=function(t){var e=this.find(t);if(e){this.splay(e);var r=e.left,n=e.right,i=null;r&&(r.parent=null,i=this.maxNode(r),this.splay(i),this._root=i),n&&(r?i.right=n:this._root=n,n.parent=i),this._size--}},r.prototype.pop=function(){var t=this._root,e=null;if(t){for(;t.left;)t=t.left;e={key:t.key,data:t.data},this.remove(t.key)}return e},r.prototype.next=function(t){var e=t;if(e)if(e.right)for(e=e.right;e&&e.left;)e=e.left;else for(e=t.parent;e&&e.right===t;)t=e,e=e.parent;return e},r.prototype.prev=function(t){var e=t;if(e)if(e.left)for(e=e.left;e&&e.right;)e=e.right;else for(e=t.parent;e&&e.left===t;)t=e,e=e.parent;return e},r.prototype.forEach=function(t){for(var e=this._root,r=[],n=!1,i=0;!n;)e?(r.push(e),e=e.left):r.length>0?(t(e=r.pop(),i++),e=e.right):n=!0;return this},r.prototype.range=function(t,e,r,n){for(var i=[],o=this._compare,s=this._root;0!==i.length||s;)if(s)i.push(s),s=s.left;else{if(o((s=i.pop()).key,e)>0)break;if(o(s.key,t)>=0&&r.call(n,s))return this;s=s.right}return this},r.prototype.keys=function(){for(var t=this._root,e=[],r=[],n=!1;!n;)t?(e.push(t),t=t.left):e.length>0?(t=e.pop(),r.push(t.key),t=t.right):n=!0;return r},r.prototype.values=function(){for(var t=this._root,e=[],r=[],n=!1;!n;)t?(e.push(t),t=t.left):e.length>0?(t=e.pop(),r.push(t.data),t=t.right):n=!0;return r},r.prototype.at=function(t){for(var e=this._root,r=[],n=!1,i=0;!n;)if(e)r.push(e),e=e.left;else if(r.length>0){if(e=r.pop(),i===t)return e;i++,e=e.right}else n=!0;return null},r.prototype.load=function(t,e,r){if(void 0===t&&(t=[]),void 0===e&&(e=[]),void 0===r&&(r=!1),0!==this._size)throw new Error("bulk-load: tree is not empty");var n=t.length;return r&&o(t,e,0,n-1,this._compare),this._root=i(null,t,e,0,n),this._size=n,this},r.prototype.min=function(){var t=this.minNode(this._root);return t?t.key:null},r.prototype.max=function(){var t=this.maxNode(this._root);return t?t.key:null},r.prototype.isEmpty=function(){return null===this._root},n.size.get=function(){return this._size},r.createTree=function(t,e,n,i,o){return new r(n,o).load(t,e,i)},Object.defineProperties(r.prototype,n);function s(t,e,r){null===e?(t.inOut=!1,t.otherInOut=!0):(t.isSubject===e.isSubject?(t.inOut=!e.inOut,t.otherInOut=e.otherInOut):(t.inOut=!e.otherInOut,t.otherInOut=e.isVertical()?!e.inOut:e.inOut),e&&(t.prevInResult=!a(e,r)||e.isVertical()?e.prevInResult:e)),t.inResult=a(t,r)}function a(t,e){switch(t.type){case 0:switch(e){case 0:return!t.otherInOut;case 1:return t.otherInOut;case 2:return t.isSubject&&t.otherInOut||!t.isSubject&&!t.otherInOut;case 3:return!0}break;case 2:return 0===e||1===e;case 3:return 2===e;case 1:return!1}return!1}var h=function(t,e,r,n,i){this.left=e,this.point=t,this.otherEvent=r,this.isSubject=n,this.type=i||0,this.inOut=!1,this.otherInOut=!1,this.prevInResult=null,this.inResult=!1,this.resultInOut=!1,this.isExteriorRing=!0};function u(t,e){return t[0]===e[0]&&t[1]===e[1]}function c(t,e,r){return(t[0]-r[0])*(e[1]-r[1])-(e[0]-r[0])*(t[1]-r[1])}function l(t,e){var r=t.point,n=e.point;return r[0]>n[0]?1:r[0]<n[0]?-1:r[1]!==n[1]?r[1]>n[1]?1:-1:function(t,e,r,n){return t.left!==e.left?t.left?1:-1:0!==c(r,t.otherEvent.point,e.otherEvent.point)?t.isBelow(e.otherEvent.point)?-1:1:!t.isSubject&&e.isSubject?1:-1}(t,e,r)}function f(t,e,r){var n=new h(e,!1,t,t.isSubject),i=new h(e,!0,t.otherEvent,t.isSubject);return u(t.point,t.otherEvent.point)&&console.warn("what is that, a collapsed segment?",t),n.contourId=i.contourId=t.contourId,l(i,t.otherEvent)>0&&(t.otherEvent.left=!0,i.left=!1),t.otherEvent.otherEvent=i,t.otherEvent=n,r.push(i),r.push(n),r}function p(t,e){return t[0]*e[1]-t[1]*e[0]}function d(t,e){return t[0]*e[0]+t[1]*e[1]}function y(t,e,r){var n=function(t,e,r,n,i){var o=[e[0]-t[0],e[1]-t[1]],s=[n[0]-r[0],n[1]-r[1]];function a(t,e,r){return[t[0]+e*r[0],t[1]+e*r[1]]}var h=[r[0]-t[0],r[1]-t[1]],u=p(o,s),c=u*u,l=d(o,o);if(c>0){var f=p(h,s)/u;if(f<0||f>1)return null;var y=p(h,o)/u;return y<0||y>1?null:0===f||1===f?i?null:[a(t,f,o)]:0===y||1===y?i?null:[a(r,y,s)]:[a(t,f,o)]}if((c=(u=p(h,o))*u)>0)return null;var g=d(o,h)/l,m=g+d(o,s)/l,v=Math.min(g,m),w=Math.max(g,m);return v<=1&&w>=0?1===v?i?null:[a(t,v>0?v:0,o)]:0===w?i?null:[a(t,w<1?w:1,o)]:i&&0===v&&1===w?null:[a(t,v>0?v:0,o),a(t,w<1?w:1,o)]:null}(t.point,t.otherEvent.point,e.point,e.otherEvent.point),i=n?n.length:0;if(0===i)return 0;if(1===i&&(u(t.point,e.point)||u(t.otherEvent.point,e.otherEvent.point)))return 0;if(2===i&&t.isSubject===e.isSubject)return 0;if(1===i)return u(t.point,n[0])||u(t.otherEvent.point,n[0])||f(t,n[0],r),u(e.point,n[0])||u(e.otherEvent.point,n[0])||f(e,n[0],r),1;var o=[],s=!1,a=!1;return u(t.point,e.point)?s=!0:1===l(t,e)?o.push(e,t):o.push(t,e),u(t.otherEvent.point,e.otherEvent.point)?a=!0:1===l(t.otherEvent,e.otherEvent)?o.push(e.otherEvent,t.otherEvent):o.push(t.otherEvent,e.otherEvent),s&&a||s?(e.type=1,t.type=e.inOut===t.inOut?2:3,s&&!a&&f(o[1].otherEvent,o[0].point,r),2):a?(f(o[0],o[1].point,r),3):o[0]!==o[3].otherEvent?(f(o[0],o[1].point,r),f(o[1],o[2].point,r),3):(f(o[0],o[1].point,r),f(o[3].otherEvent,o[2].point,r),3)}function g(t,e){if(t===e)return 0;if(0!==c(t.point,t.otherEvent.point,e.point)||0!==c(t.point,t.otherEvent.point,e.otherEvent.point))return u(t.point,e.point)?t.isBelow(e.otherEvent.point)?-1:1:t.point[0]===e.point[0]?t.point[1]<e.point[1]?-1:1:1===l(t,e)?e.isAbove(t.point)?-1:1:t.isBelow(e.point)?-1:1;if(t.isSubject!==e.isSubject)return t.isSubject?-1:1;var r=t.point,n=e.point;return r[0]===n[0]&&r[1]===n[1]?(r=t.otherEvent.point,n=e.otherEvent.point,r[0]===n[0]&&r[1]===n[1]?0:t.contourId>e.contourId?1:-1):1===l(t,e)?1:-1}function m(t,e,r,n){var i=t+1,o=e.length;if(i>o-1)return t-1;for(var s=e[t].point,a=e[i].point;i<o&&a[0]===s[0]&&a[1]===s[1];){if(!r[i])return i;a=e[++i].point}for(i=t-1;r[i]&&i>=n;)i--;return i}function v(t,e){var r,n,i,o=function(t){var e,r,n,i,o=[];for(r=0,n=t.length;r<n;r++)((e=t[r]).left&&e.inResult||!e.left&&e.otherEvent.inResult)&&o.push(e);for(var s=!1;!s;)for(s=!0,r=0,n=o.length;r<n;r++)r+1<n&&1===l(o[r],o[r+1])&&(i=o[r],o[r]=o[r+1],o[r+1]=i,s=!1);for(r=0,n=o.length;r<n;r++)(e=o[r]).pos=r;for(r=0,n=o.length;r<n;r++)(e=o[r]).left||(i=e.pos,e.pos=e.otherEvent.pos,e.otherEvent.pos=i);return o}(t),s={},a=[];for(r=0,n=o.length;r<n;r++)if(!s[r]){var h=[[]];o[r].isExteriorRing?2===e&&!o[r].isSubject&&a.length>1?a[a.length-1].push(h[0]):a.push(h):2!==e||o[r].isSubject||0!==a.length?0===a.length?a.push([[h]]):a[a.length-1].push(h[0]):a.push(h);var u=a.length-1,c=r,f=o[r].point;for(h[0].push(f);c>=r;)i=o[c],s[c]=!0,i.left?(i.resultInOut=!1,i.contourId=u):(i.otherEvent.resultInOut=!0,i.otherEvent.contourId=u),s[c=i.pos]=!0,h[0].push(o[c].point),c=m(c,o,s,r);i=o[c=-1===c?r:c],s[c]=s[i.pos]=!0,i.otherEvent.resultInOut=!0,i.otherEvent.contourId=u}return a}h.prototype.isBelow=function(t){var e=this.point,r=this.otherEvent.point;return this.left?(e[0]-t[0])*(r[1]-t[1])-(r[0]-t[0])*(e[1]-t[1])>0:(r[0]-t[0])*(e[1]-t[1])-(e[0]-t[0])*(r[1]-t[1])>0},h.prototype.isAbove=function(t){return!this.isBelow(t)},h.prototype.isVertical=function(){return this.point[0]===this.otherEvent.point[0]},h.prototype.clone=function(){var t=new h(this.point,this.left,this.otherEvent,this.isSubject,this.type);return t.inResult=this.inResult,t.prevInResult=this.prevInResult,t.isExteriorRing=this.isExteriorRing,t.inOut=this.inOut,t.otherInOut=this.otherInOut,t};var w=M,b=M;function M(t,e){if(!(this instanceof M))return new M(t,e);if(this.data=t||[],this.length=this.data.length,this.compare=e||_,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)}function _(t,e){return t<e?-1:t>e?1:0}M.prototype={push:function(t){this.data.push(t),this.length++,this._up(this.length-1)},pop:function(){if(0!==this.length){var t=this.data[0];return this.length--,this.length>0&&(this.data[0]=this.data[this.length],this._down(0)),this.data.pop(),t}},peek:function(){return this.data[0]},_up:function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var i=t-1>>1,o=e[i];if(r(n,o)>=0)break;e[t]=o,t=i}e[t]=n},_down:function(t){for(var e=this.data,r=this.compare,n=this.length>>1,i=e[t];t<n;){var o=1+(t<<1),s=o+1,a=e[o];if(s<this.length&&r(e[s],a)<0&&(o=s,a=e[s]),r(a,i)>=0)break;e[t]=a,t=o}e[t]=i}},w.default=b;var x=Math.max,E=Math.min,S=0;function O(t,e,r,n,i,o){var s,a,u,c,f,p;for(s=0,a=t.length-1;s<a;s++)if(u=t[s],c=t[s+1],f=new h(u,!1,void 0,e),p=new h(c,!1,f,e),f.otherEvent=p,u[0]!==c[0]||u[1]!==c[1]){f.contourId=p.contourId=r,o||(f.isExteriorRing=!1,p.isExteriorRing=!1),l(f,p)>0?p.left=!0:f.left=!0;var d=u[0],y=u[1];i[0]=E(i[0],d),i[1]=E(i[1],y),i[2]=x(i[2],d),i[3]=x(i[3],y),n.push(f),n.push(p)}}var T=[];function I(t,e,n){"number"==typeof t[0][0][0]&&(t=[t]),"number"==typeof e[0][0][0]&&(e=[e]);var i=function(t,e,r){var n=null;return t.length*e.length==0&&(0===r?n=T:2===r?n=t:1!==r&&3!==r||(n=0===t.length?e:t)),n}(t,e,n);if(i)return i===T?null:i;var o=[1/0,1/0,-1/0,-1/0],a=[1/0,1/0,-1/0,-1/0],h=function(t,e,r,n,i){var o,s,a,h,u,c,f=new w(null,l);for(a=0,h=t.length;a<h;a++)for(u=0,c=(o=t[a]).length;u<c;u++)(s=0===u)&&S++,O(o[u],!0,S,f,r,s);for(a=0,h=e.length;a<h;a++)for(u=0,c=(o=e[a]).length;u<c;u++)s=0===u,2===i&&(s=!1),s&&S++,O(o[u],!1,S,f,n,s);return f}(t,e,o,a,n);return(i=function(t,e,r,n,i){var o=null;return(r[0]>n[2]||n[0]>r[2]||r[1]>n[3]||n[1]>r[3])&&(0===i?o=T:2===i?o=t:1!==i&&3!==i||(o=t.concat(e))),o}(t,e,o,a,n))?i===T?null:i:v(function(t,e,n,i,o,a){for(var h,u,c,l=new r(g),f=[],p=Math.min(i[2],o[2]);0!==t.length;){var d=t.pop();if(f.push(d),0===a&&d.point[0]>p||2===a&&d.point[0]>i[2])break;if(d.left){u=h=l.insert(d),h=h!==(c=l.minNode())?l.prev(h):null,u=l.next(u);var m=h?h.key:null;if(s(d,m,a),u&&2===y(d,u.key,t)&&(s(d,m,a),s(d,u.key,a)),h&&2===y(h.key,d,t)){var v=h;s(m,(v=v!==c?l.prev(v):null)?v.key:null,a),s(d,m,a)}}else d=d.otherEvent,u=h=l.find(d),h&&u&&(h=h!==c?l.prev(h):null,u=l.next(u),l.remove(d),u&&h&&y(h.key,u.key,t))}return f}(h,0,0,o,a,n),n)}var N={UNION:1,DIFFERENCE:2,INTERSECTION:0,XOR:3};t.union=function(t,e){return I(t,e,1)},t.diff=function(t,e){return I(t,e,2)},t.xor=function(t,e){return I(t,e,3)},t.intersection=function(t,e){return I(t,e,0)},t.operations=N,Object.defineProperty(t,"__esModule",{value:!0})}(e)},2023:function(t,e,r){var n;t=r.nmd(t),n=function(){var t=null,e={};u("monochrome",null,[[0,0],[100,0]]),u("red",[-26,18],[[20,100],[30,92],[40,89],[50,85],[60,78],[70,70],[80,60],[90,55],[100,50]]),u("orange",[18,46],[[20,100],[30,93],[40,88],[50,86],[60,85],[70,70],[100,70]]),u("yellow",[46,62],[[25,100],[40,94],[50,89],[60,86],[70,84],[80,82],[90,80],[100,75]]),u("green",[62,178],[[30,100],[40,90],[50,85],[60,81],[70,74],[80,64],[90,50],[100,40]]),u("blue",[178,257],[[20,100],[30,86],[40,80],[50,74],[60,60],[70,52],[80,44],[90,39],[100,35]]),u("purple",[257,282],[[20,100],[30,87],[40,79],[50,70],[60,65],[70,59],[80,52],[90,45],[100,42]]),u("pink",[282,334],[[20,100],[30,90],[40,86],[60,84],[80,80],[90,75],[100,73]]);var r=[],n=function(e){if(void 0!==(e=e||{}).seed&&null!==e.seed&&e.seed===parseInt(e.seed,10))t=e.seed;else if("string"==typeof e.seed)t=function(t){for(var e=0,r=0;r!==t.length&&!(e>=Number.MAX_SAFE_INTEGER);r++)e+=t.charCodeAt(r);return e}(e.seed);else{if(void 0!==e.seed&&null!==e.seed)throw new TypeError("The seed value must be an integer or string");t=null}var a,h;if(null!==e.count&&void 0!==e.count){for(var u=e.count,l=[],p=0;p<e.count;p++)r.push(!1);for(e.count=null;u>l.length;){var d=n(e);null!==t&&(e.seed=t),l.push(d)}return e.count=u,l}return function(t,e){switch(e.format){case"hsvArray":return t;case"hslArray":return f(t);case"hsl":var r=f(t);return"hsl("+r[0]+", "+r[1]+"%, "+r[2]+"%)";case"hsla":var n=f(t),i=e.alpha||Math.random();return"hsla("+n[0]+", "+n[1]+"%, "+n[2]+"%, "+i+")";case"rgbArray":return c(t);case"rgb":return"rgb("+c(t).join(", ")+")";case"rgba":var o=c(t);return i=e.alpha||Math.random(),"rgba("+o.join(", ")+", "+i+")";default:return function(t){var e=c(t);function r(t){var e=t.toString(16);return 1==e.length?"0"+e:e}return"#"+r(e[0])+r(e[1])+r(e[2])}(t)}}([a=i(e),h=o(a,e),s(a,h,e)],e)};function i(t){if(r.length>0){var n=h(s=function(t){if(isNaN(t)){if("string"==typeof t)if(e[t]){var r=e[t];if(r.hueRange)return r.hueRange}else if(t.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i))return a(l(t)[0]).hueRange}else{var n=parseInt(t);if(n<360&&n>0)return a(t).hueRange}return[0,360]}(t.hue)),i=(s[1]-s[0])/r.length,o=parseInt((n-s[0])/i);return!0===r[o]?o=(o+2)%r.length:r[o]=!0,(n=h(s=[(s[0]+o*i)%359,(s[0]+(o+1)*i)%359]))<0&&(n=360+n),n}var s;return(n=h(s=function(t){if("number"==typeof parseInt(t)){var r=parseInt(t);if(r<360&&r>0)return[r,r]}if("string"==typeof t)if(e[t]){var n=e[t];if(n.hueRange)return n.hueRange}else if(t.match(/^#?([0-9A-F]{3}|[0-9A-F]{6})$/i)){var i=l(t)[0];return[i,i]}return[0,360]}(t.hue)))<0&&(n=360+n),n}function o(t,e){if("monochrome"===e.hue)return 0;if("random"===e.luminosity)return h([0,100]);var r=function(t){return a(t).saturationRange}(t),n=r[0],i=r[1];switch(e.luminosity){case"bright":n=55;break;case"dark":n=i-10;break;case"light":i=55}return h([n,i])}function s(t,e,r){var n=function(t,e){for(var r=a(t).lowerBounds,n=0;n<r.length-1;n++){var i=r[n][0],o=r[n][1],s=r[n+1][0],h=r[n+1][1];if(e>=i&&e<=s){var u=(h-o)/(s-i);return u*e+(o-u*i)}}return 0}(t,e),i=100;switch(r.luminosity){case"dark":i=n+20;break;case"light":n=(i+n)/2;break;case"random":n=0,i=100}return h([n,i])}function a(t){for(var r in t>=334&&t<=360&&(t-=360),e){var n=e[r];if(n.hueRange&&t>=n.hueRange[0]&&t<=n.hueRange[1])return e[r]}return"Color not found"}function h(e){if(null===t){var r=Math.random();return r+=.618033988749895,r%=1,Math.floor(e[0]+r*(e[1]+1-e[0]))}var n=e[1]||1,i=e[0]||0,o=(t=(9301*t+49297)%233280)/233280;return Math.floor(i+o*(n-i))}function u(t,r,n){var i=n[0][0],o=n[n.length-1][0],s=n[n.length-1][1],a=n[0][1];e[t]={hueRange:r,lowerBounds:n,saturationRange:[i,o],brightnessRange:[s,a]}}function c(t){var e=t[0];0===e&&(e=1),360===e&&(e=359),e/=360;var r=t[1]/100,n=t[2]/100,i=Math.floor(6*e),o=6*e-i,s=n*(1-r),a=n*(1-o*r),h=n*(1-(1-o)*r),u=256,c=256,l=256;switch(i){case 0:u=n,c=h,l=s;break;case 1:u=a,c=n,l=s;break;case 2:u=s,c=n,l=h;break;case 3:u=s,c=a,l=n;break;case 4:u=h,c=s,l=n;break;case 5:u=n,c=s,l=a}return[Math.floor(255*u),Math.floor(255*c),Math.floor(255*l)]}function l(t){t=3===(t=t.replace(/^#/,"")).length?t.replace(/(.)/g,"$1$1"):t;var e=parseInt(t.substr(0,2),16)/255,r=parseInt(t.substr(2,2),16)/255,n=parseInt(t.substr(4,2),16)/255,i=Math.max(e,r,n),o=i-Math.min(e,r,n),s=i?o/i:0;switch(i){case e:return[(r-n)/o%6*60||0,s,i];case r:return[60*((n-e)/o+2)||0,s,i];case n:return[60*((e-r)/o+4)||0,s,i]}}function f(t){var e=t[0],r=t[1]/100,n=t[2]/100,i=(2-r)*n;return[e,Math.round(r*n/(i<1?i:2-i)*1e4)/100,i/2*100]}return n}(),t&&t.exports&&(e=t.exports=n),e.randomColor=n},6099:(t,e,r)=>{!function(t){t.parser=function(t,e){return new n(t,e)},t.SAXParser=n,t.SAXStream=s,t.createStream=function(t,e){return new s(t,e)},t.MAX_BUFFER_LENGTH=65536;var e=["comment","sgmlDecl","textNode","tagName","doctype","procInstName","procInstBody","entity","attribName","attribValue","cdata","script"];function n(r,i){if(!(this instanceof n))return new n(r,i);var o=this;!function(t){for(var r=0,n=e.length;r<n;r++)t[e[r]]=""}(o),o.q=o.c="",o.bufferCheckPosition=t.MAX_BUFFER_LENGTH,o.opt=i||{},o.opt.lowercase=o.opt.lowercase||o.opt.lowercasetags,o.looseCase=o.opt.lowercase?"toLowerCase":"toUpperCase",o.tags=[],o.closed=o.closedRoot=o.sawRoot=!1,o.tag=o.error=null,o.strict=!!r,o.noscript=!(!r&&!o.opt.noscript),o.state=E.BEGIN,o.ENTITIES=Object.create(t.ENTITIES),o.attribList=[],o.opt.xmlns&&(o.ns=Object.create(y)),o.trackPosition=!1!==o.opt.position,o.trackPosition&&(o.position=o.line=o.column=0),S(o,"onready")}t.EVENTS=["text","processinginstruction","sgmldeclaration","doctype","comment","attribute","opentag","closetag","opencdata","cdata","closecdata","error","end","ready","script","opennamespace","closenamespace"],Object.create||(Object.create=function(t){function e(){this.__proto__=t}return e.prototype=t,new e}),Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__}),Object.keys||(Object.keys=function(t){var e=[];for(var r in t)t.hasOwnProperty(r)&&e.push(r);return e}),n.prototype={end:function(){P(this)},write:function(r){var n=this;if(this.error)throw this.error;if(n.closed)return N(n,"Cannot write after close. Assign an onready handler.");if(null===r)return P(n);for(var i=0,o="";n.c=o=r.charAt(i++);)switch(n.trackPosition&&(n.position++,"\n"===o?(n.line++,n.column=0):n.column++),n.state){case E.BEGIN:"<"===o?(n.state=E.OPEN_WAKA,n.startTagPosition=n.position):b(a,o)&&(A(n,"Non-whitespace before first tag."),n.textNode=o,n.state=E.TEXT);continue;case E.TEXT:if(n.sawRoot&&!n.closedRoot){for(var s=i-1;o&&"<"!==o&&"&"!==o;)(o=r.charAt(i++))&&n.trackPosition&&(n.position++,"\n"===o?(n.line++,n.column=0):n.column++);n.textNode+=r.substring(s,i-1)}"<"===o?(n.state=E.OPEN_WAKA,n.startTagPosition=n.position):(!b(a,o)||n.sawRoot&&!n.closedRoot||A(n,"Text data outside of root node."),"&"===o?n.state=E.TEXT_ENTITY:n.textNode+=o);continue;case E.SCRIPT:"<"===o?n.state=E.SCRIPT_ENDING:n.script+=o;continue;case E.SCRIPT_ENDING:"/"===o?n.state=E.CLOSE_TAG:(n.script+="<"+o,n.state=E.SCRIPT);continue;case E.OPEN_WAKA:if("!"===o)n.state=E.SGML_DECL,n.sgmlDecl="";else if(w(a,o));else if(w(g,o))n.state=E.OPEN_TAG,n.tagName=o;else if("/"===o)n.state=E.CLOSE_TAG,n.tagName="";else if("?"===o)n.state=E.PROC_INST,n.procInstName=n.procInstBody="";else{if(A(n,"Unencoded <"),n.startTagPosition+1<n.position){var h=n.position-n.startTagPosition;o=new Array(h).join(" ")+o}n.textNode+="<"+o,n.state=E.TEXT}continue;case E.SGML_DECL:"[CDATA["===(n.sgmlDecl+o).toUpperCase()?(O(n,"onopencdata"),n.state=E.CDATA,n.sgmlDecl="",n.cdata=""):n.sgmlDecl+o==="--"?(n.state=E.COMMENT,n.comment="",n.sgmlDecl=""):"DOCTYPE"===(n.sgmlDecl+o).toUpperCase()?(n.state=E.DOCTYPE,(n.doctype||n.sawRoot)&&A(n,"Inappropriately located doctype declaration"),n.doctype="",n.sgmlDecl=""):">"===o?(O(n,"onsgmldeclaration",n.sgmlDecl),n.sgmlDecl="",n.state=E.TEXT):w(c,o)?(n.state=E.SGML_DECL_QUOTED,n.sgmlDecl+=o):n.sgmlDecl+=o;continue;case E.SGML_DECL_QUOTED:o===n.q&&(n.state=E.SGML_DECL,n.q=""),n.sgmlDecl+=o;continue;case E.DOCTYPE:">"===o?(n.state=E.TEXT,O(n,"ondoctype",n.doctype),n.doctype=!0):(n.doctype+=o,"["===o?n.state=E.DOCTYPE_DTD:w(c,o)&&(n.state=E.DOCTYPE_QUOTED,n.q=o));continue;case E.DOCTYPE_QUOTED:n.doctype+=o,o===n.q&&(n.q="",n.state=E.DOCTYPE);continue;case E.DOCTYPE_DTD:n.doctype+=o,"]"===o?n.state=E.DOCTYPE:w(c,o)&&(n.state=E.DOCTYPE_DTD_QUOTED,n.q=o);continue;case E.DOCTYPE_DTD_QUOTED:n.doctype+=o,o===n.q&&(n.state=E.DOCTYPE_DTD,n.q="");continue;case E.COMMENT:"-"===o?n.state=E.COMMENT_ENDING:n.comment+=o;continue;case E.COMMENT_ENDING:"-"===o?(n.state=E.COMMENT_ENDED,n.comment=I(n.opt,n.comment),n.comment&&O(n,"oncomment",n.comment),n.comment=""):(n.comment+="-"+o,n.state=E.COMMENT);continue;case E.COMMENT_ENDED:">"!==o?(A(n,"Malformed comment"),n.comment+="--"+o,n.state=E.COMMENT):n.state=E.TEXT;continue;case E.CDATA:"]"===o?n.state=E.CDATA_ENDING:n.cdata+=o;continue;case E.CDATA_ENDING:"]"===o?n.state=E.CDATA_ENDING_2:(n.cdata+="]"+o,n.state=E.CDATA);continue;case E.CDATA_ENDING_2:">"===o?(n.cdata&&O(n,"oncdata",n.cdata),O(n,"onclosecdata"),n.cdata="",n.state=E.TEXT):"]"===o?n.cdata+="]":(n.cdata+="]]"+o,n.state=E.CDATA);continue;case E.PROC_INST:"?"===o?n.state=E.PROC_INST_ENDING:w(a,o)?n.state=E.PROC_INST_BODY:n.procInstName+=o;continue;case E.PROC_INST_BODY:if(!n.procInstBody&&w(a,o))continue;"?"===o?n.state=E.PROC_INST_ENDING:n.procInstBody+=o;continue;case E.PROC_INST_ENDING:">"===o?(O(n,"onprocessinginstruction",{name:n.procInstName,body:n.procInstBody}),n.procInstName=n.procInstBody="",n.state=E.TEXT):(n.procInstBody+="?"+o,n.state=E.PROC_INST_BODY);continue;case E.OPEN_TAG:w(m,o)?n.tagName+=o:(C(n),">"===o?L(n):"/"===o?n.state=E.OPEN_TAG_SLASH:(b(a,o)&&A(n,"Invalid character in tag name"),n.state=E.ATTRIB));continue;case E.OPEN_TAG_SLASH:">"===o?(L(n,!0),j(n)):(A(n,"Forward-slash in opening tag not followed by >"),n.state=E.ATTRIB);continue;case E.ATTRIB:if(w(a,o))continue;">"===o?L(n):"/"===o?n.state=E.OPEN_TAG_SLASH:w(g,o)?(n.attribName=o,n.attribValue="",n.state=E.ATTRIB_NAME):A(n,"Invalid attribute name");continue;case E.ATTRIB_NAME:"="===o?n.state=E.ATTRIB_VALUE:">"===o?(A(n,"Attribute without value"),n.attribValue=n.attribName,k(n),L(n)):w(a,o)?n.state=E.ATTRIB_NAME_SAW_WHITE:w(m,o)?n.attribName+=o:A(n,"Invalid attribute name");continue;case E.ATTRIB_NAME_SAW_WHITE:if("="===o)n.state=E.ATTRIB_VALUE;else{if(w(a,o))continue;A(n,"Attribute without value"),n.tag.attributes[n.attribName]="",n.attribValue="",O(n,"onattribute",{name:n.attribName,value:""}),n.attribName="",">"===o?L(n):w(g,o)?(n.attribName=o,n.state=E.ATTRIB_NAME):(A(n,"Invalid attribute name"),n.state=E.ATTRIB)}continue;case E.ATTRIB_VALUE:if(w(a,o))continue;w(c,o)?(n.q=o,n.state=E.ATTRIB_VALUE_QUOTED):(A(n,"Unquoted attribute value"),n.state=E.ATTRIB_VALUE_UNQUOTED,n.attribValue=o);continue;case E.ATTRIB_VALUE_QUOTED:if(o!==n.q){"&"===o?n.state=E.ATTRIB_VALUE_ENTITY_Q:n.attribValue+=o;continue}k(n),n.q="",n.state=E.ATTRIB_VALUE_CLOSED;continue;case E.ATTRIB_VALUE_CLOSED:w(a,o)?n.state=E.ATTRIB:">"===o?L(n):"/"===o?n.state=E.OPEN_TAG_SLASH:w(g,o)?(A(n,"No whitespace between attributes"),n.attribName=o,n.attribValue="",n.state=E.ATTRIB_NAME):A(n,"Invalid attribute name");continue;case E.ATTRIB_VALUE_UNQUOTED:if(b(f,o)){"&"===o?n.state=E.ATTRIB_VALUE_ENTITY_U:n.attribValue+=o;continue}k(n),">"===o?L(n):n.state=E.ATTRIB;continue;case E.CLOSE_TAG:if(n.tagName)">"===o?j(n):w(m,o)?n.tagName+=o:n.script?(n.script+="</"+n.tagName,n.tagName="",n.state=E.SCRIPT):(b(a,o)&&A(n,"Invalid tagname in closing tag"),n.state=E.CLOSE_TAG_SAW_WHITE);else{if(w(a,o))continue;b(g,o)?n.script?(n.script+="</"+o,n.state=E.SCRIPT):A(n,"Invalid tagname in closing tag."):n.tagName=o}continue;case E.CLOSE_TAG_SAW_WHITE:if(w(a,o))continue;">"===o?j(n):A(n,"Invalid characters in closing tag");continue;case E.TEXT_ENTITY:case E.ATTRIB_VALUE_ENTITY_Q:case E.ATTRIB_VALUE_ENTITY_U:switch(n.state){case E.TEXT_ENTITY:var u=E.TEXT,p="textNode";break;case E.ATTRIB_VALUE_ENTITY_Q:u=E.ATTRIB_VALUE_QUOTED,p="attribValue";break;case E.ATTRIB_VALUE_ENTITY_U:u=E.ATTRIB_VALUE_UNQUOTED,p="attribValue"}";"===o?(n[p]+=F(n),n.entity="",n.state=u):w(l,o)?n.entity+=o:(A(n,"Invalid character entity"),n[p]+="&"+n.entity+o,n.entity="",n.state=u);continue;default:throw new Error(n,"Unknown state: "+n.state)}return n.position>=n.bufferCheckPosition&&function(r){for(var n=Math.max(t.MAX_BUFFER_LENGTH,10),i=0,o=0,s=e.length;o<s;o++){var a=r[e[o]].length;if(a>n)switch(e[o]){case"textNode":T(r);break;case"cdata":O(r,"oncdata",r.cdata),r.cdata="";break;case"script":O(r,"onscript",r.script),r.script="";break;default:N(r,"Max buffer length exceeded: "+e[o])}i=Math.max(i,a)}r.bufferCheckPosition=t.MAX_BUFFER_LENGTH-i+r.position}(n),n},resume:function(){return this.error=null,this},close:function(){return this.write(null)},flush:function(){var t;T(t=this),""!==t.cdata&&(O(t,"oncdata",t.cdata),t.cdata=""),""!==t.script&&(O(t,"onscript",t.script),t.script="")}};try{var i=r(7923).Stream}catch(t){i=function(){}}var o=t.EVENTS.filter((function(t){return"error"!==t&&"end"!==t}));function s(t,e){if(!(this instanceof s))return new s(t,e);i.apply(this),this._parser=new n(t,e),this.writable=!0,this.readable=!0;var r=this;this._parser.onend=function(){r.emit("end")},this._parser.onerror=function(t){r.emit("error",t),r._parser.error=null},this._decoder=null,o.forEach((function(t){Object.defineProperty(r,"on"+t,{get:function(){return r._parser["on"+t]},set:function(e){if(!e)return r.removeAllListeners(t),r._parser["on"+t]=e;r.on(t,e)},enumerable:!0,configurable:!1})}))}s.prototype=Object.create(i.prototype,{constructor:{value:s}}),s.prototype.write=function(t){if("function"==typeof Buffer&&"function"==typeof Buffer.isBuffer&&Buffer.isBuffer(t)){if(!this._decoder){var e=r(2553).s;this._decoder=new e("utf8")}t=this._decoder.write(t)}return this._parser.write(t.toString()),this.emit("data",t),!0},s.prototype.end=function(t){return t&&t.length&&this.write(t),this._parser.end(),!0},s.prototype.on=function(t,e){var r=this;return r._parser["on"+t]||-1===o.indexOf(t)||(r._parser["on"+t]=function(){var e=1===arguments.length?[arguments[0]]:Array.apply(null,arguments);e.splice(0,0,t),r.emit.apply(r,e)}),i.prototype.on.call(r,t,e)};var a="\r\n\t ",h="0124356789",u="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ",c="'\"",l=h+u+"#",f=a+">",p="http://www.w3.org/XML/1998/namespace",d="http://www.w3.org/2000/xmlns/",y={xml:p,xmlns:d};a=v(a),h=v(h),u=v(u);var g=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,m=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/;function v(t){return t.split("").reduce((function(t,e){return t[e]=!0,t}),{})}function w(t,e){return function(t){return"[object RegExp]"===Object.prototype.toString.call(t)}(t)?!!e.match(t):t[e]}function b(t,e){return!w(t,e)}c=v(c),l=v(l),f=v(f);var M,_,x,E=0;for(var E in t.STATE={BEGIN:E++,TEXT:E++,TEXT_ENTITY:E++,OPEN_WAKA:E++,SGML_DECL:E++,SGML_DECL_QUOTED:E++,DOCTYPE:E++,DOCTYPE_QUOTED:E++,DOCTYPE_DTD:E++,DOCTYPE_DTD_QUOTED:E++,COMMENT_STARTING:E++,COMMENT:E++,COMMENT_ENDING:E++,COMMENT_ENDED:E++,CDATA:E++,CDATA_ENDING:E++,CDATA_ENDING_2:E++,PROC_INST:E++,PROC_INST_BODY:E++,PROC_INST_ENDING:E++,OPEN_TAG:E++,OPEN_TAG_SLASH:E++,ATTRIB:E++,ATTRIB_NAME:E++,ATTRIB_NAME_SAW_WHITE:E++,ATTRIB_VALUE:E++,ATTRIB_VALUE_QUOTED:E++,ATTRIB_VALUE_CLOSED:E++,ATTRIB_VALUE_UNQUOTED:E++,ATTRIB_VALUE_ENTITY_Q:E++,ATTRIB_VALUE_ENTITY_U:E++,CLOSE_TAG:E++,CLOSE_TAG_SAW_WHITE:E++,SCRIPT:E++,SCRIPT_ENDING:E++},t.ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},Object.keys(t.ENTITIES).forEach((function(e){var r=t.ENTITIES[e],n="number"==typeof r?String.fromCharCode(r):r;t.ENTITIES[e]=n})),t.STATE)t.STATE[t.STATE[E]]=E;function S(t,e,r){t[e]&&t[e](r)}function O(t,e,r){t.textNode&&T(t),S(t,e,r)}function T(t){t.textNode=I(t.opt,t.textNode),t.textNode&&S(t,"ontext",t.textNode),t.textNode=""}function I(t,e){return t.trim&&(e=e.trim()),t.normalize&&(e=e.replace(/\s+/g," ")),e}function N(t,e){return T(t),t.trackPosition&&(e+="\nLine: "+t.line+"\nColumn: "+t.column+"\nChar: "+t.c),e=new Error(e),t.error=e,S(t,"onerror",e),t}function P(t){return t.closedRoot||A(t,"Unclosed root tag"),t.state!==E.BEGIN&&t.state!==E.TEXT&&N(t,"Unexpected end"),T(t),t.c="",t.closed=!0,S(t,"onend"),n.call(t,t.strict,t.opt),t}function A(t,e){if("object"!=typeof t||!(t instanceof n))throw new Error("bad call to strictFail");t.strict&&N(t,e)}function C(t){t.strict||(t.tagName=t.tagName[t.looseCase]());var e=t.tags[t.tags.length-1]||t,r=t.tag={name:t.tagName,attributes:{}};t.opt.xmlns&&(r.ns=e.ns),t.attribList.length=0}function D(t,e){var r=t.indexOf(":")<0?["",t]:t.split(":"),n=r[0],i=r[1];return e&&"xmlns"===t&&(n="xmlns",i=""),{prefix:n,local:i}}function k(t){if(t.strict||(t.attribName=t.attribName[t.looseCase]()),-1!==t.attribList.indexOf(t.attribName)||t.tag.attributes.hasOwnProperty(t.attribName))return t.attribName=t.attribValue="";if(t.opt.xmlns){var e=D(t.attribName,!0),r=e.prefix,n=e.local;if("xmlns"===r)if("xml"===n&&t.attribValue!==p)A(t,"xml: prefix must be bound to "+p+"\nActual: "+t.attribValue);else if("xmlns"===n&&t.attribValue!==d)A(t,"xmlns: prefix must be bound to "+d+"\nActual: "+t.attribValue);else{var i=t.tag,o=t.tags[t.tags.length-1]||t;i.ns===o.ns&&(i.ns=Object.create(o.ns)),i.ns[n]=t.attribValue}t.attribList.push([t.attribName,t.attribValue])}else t.tag.attributes[t.attribName]=t.attribValue,O(t,"onattribute",{name:t.attribName,value:t.attribValue});t.attribName=t.attribValue=""}function L(t,e){if(t.opt.xmlns){var r=t.tag,n=D(t.tagName);r.prefix=n.prefix,r.local=n.local,r.uri=r.ns[n.prefix]||"",r.prefix&&!r.uri&&(A(t,"Unbound namespace prefix: "+JSON.stringify(t.tagName)),r.uri=n.prefix);var i=t.tags[t.tags.length-1]||t;r.ns&&i.ns!==r.ns&&Object.keys(r.ns).forEach((function(e){O(t,"onopennamespace",{prefix:e,uri:r.ns[e]})}));for(var o=0,s=t.attribList.length;o<s;o++){var a=t.attribList[o],h=a[0],u=a[1],c=D(h,!0),l=c.prefix,f=c.local,p=""==l?"":r.ns[l]||"",d={name:h,value:u,prefix:l,local:f,uri:p};l&&"xmlns"!=l&&!p&&(A(t,"Unbound namespace prefix: "+JSON.stringify(l)),d.uri=l),t.tag.attributes[h]=d,O(t,"onattribute",d)}t.attribList.length=0}t.tag.isSelfClosing=!!e,t.sawRoot=!0,t.tags.push(t.tag),O(t,"onopentag",t.tag),e||(t.noscript||"script"!==t.tagName.toLowerCase()?t.state=E.TEXT:t.state=E.SCRIPT,t.tag=null,t.tagName=""),t.attribName=t.attribValue="",t.attribList.length=0}function j(t){if(!t.tagName)return A(t,"Weird empty close tag."),t.textNode+="</>",void(t.state=E.TEXT);if(t.script){if("script"!==t.tagName)return t.script+="</"+t.tagName+">",t.tagName="",void(t.state=E.SCRIPT);O(t,"onscript",t.script),t.script=""}var e=t.tags.length,r=t.tagName;t.strict||(r=r[t.looseCase]());for(var n=r;e--&&t.tags[e].name!==n;)A(t,"Unexpected close tag");if(e<0)return A(t,"Unmatched closing tag: "+t.tagName),t.textNode+="</"+t.tagName+">",void(t.state=E.TEXT);t.tagName=r;for(var i=t.tags.length;i-- >e;){var o=t.tag=t.tags.pop();t.tagName=t.tag.name,O(t,"onclosetag",t.tagName);var s={};for(var a in o.ns)s[a]=o.ns[a];var h=t.tags[t.tags.length-1]||t;t.opt.xmlns&&o.ns!==h.ns&&Object.keys(o.ns).forEach((function(e){var r=o.ns[e];O(t,"onclosenamespace",{prefix:e,uri:r})}))}0===e&&(t.closedRoot=!0),t.tagName=t.attribValue=t.attribName="",t.attribList.length=0,t.state=E.TEXT}function F(t){var e,r=t.entity,n=r.toLowerCase(),i="";return t.ENTITIES[r]?t.ENTITIES[r]:t.ENTITIES[n]?t.ENTITIES[n]:("#"===(r=n).charAt(0)&&("x"===r.charAt(1)?(r=r.slice(2),i=(e=parseInt(r,16)).toString(16)):(r=r.slice(1),i=(e=parseInt(r,10)).toString(10))),r=r.replace(/^0+/,""),i.toLowerCase()!==r?(A(t,"Invalid character entity"),"&"+t.entity+";"):String.fromCodePoint(e))}E=t.STATE,String.fromCodePoint||(M=String.fromCharCode,_=Math.floor,x=function(){var t,e,r=16384,n=[],i=-1,o=arguments.length;if(!o)return"";for(var s="";++i<o;){var a=Number(arguments[i]);if(!isFinite(a)||a<0||a>1114111||_(a)!=a)throw RangeError("Invalid code point: "+a);a<=65535?n.push(a):(t=55296+((a-=65536)>>10),e=a%1024+56320,n.push(t,e)),(i+1==o||n.length>r)&&(s+=M.apply(null,n),n.length=0)}return s},Object.defineProperty?Object.defineProperty(String,"fromCodePoint",{value:x,configurable:!0,writable:!0}):String.fromCodePoint=x)}(e)},7923:(t,e,r)=>{var n=r(624);function i(){n.call(this)}i.prototype=new n,t.exports=i,i.Stream=i,i.prototype.pipe=function(t,e){var r=this;function n(e){t.writable&&!1===t.write(e)&&r.pause&&r.pause()}function i(){r.readable&&r.resume&&r.resume()}r.on("data",n),t.on("drain",i),t._isStdio||e&&!1===e.end||(r.on("end",s),r.on("close",a));var o=!1;function s(){o||(o=!0,t.end())}function a(){o||(o=!0,"function"==typeof t.destroy&&t.destroy())}function h(t){if(u(),!this.hasListeners("error"))throw t}function u(){r.off("data",n),t.off("drain",i),r.off("end",s),r.off("close",a),r.off("error",h),t.off("error",h),r.off("end",u),r.off("close",u),t.off("end",u),t.off("close",u)}return r.on("error",h),t.on("error",h),r.on("end",u),r.on("close",u),t.on("end",u),t.on("close",u),t.emit("pipe",r),t}},2553:(t,e,r)=>{"use strict";var n=r(396).Buffer,i=n.isEncoding||function(t){switch((t=""+t)&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function o(t){var e;switch(this.encoding=function(t){var e=function(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0}}(t);if("string"!=typeof e&&(n.isEncoding===i||!i(t)))throw new Error("Unknown encoding: "+t);return e||t}(t),this.encoding){case"utf16le":this.text=h,this.end=u,e=4;break;case"utf8":this.fillLast=a,e=4;break;case"base64":this.text=c,this.end=l,e=3;break;default:return this.write=f,void(this.end=p)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(e)}function s(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2}function a(t){var e=this.lastTotal-this.lastNeed,r=function(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,"<22>";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"<22>";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"<22>"}}(this,t);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length))}function h(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1)}function u(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r)}return e}function c(t,e){var r=(t.length-e)%3;return 0===r?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r))}function l(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e}function f(t){return t.toString(this.encoding)}function p(t){return t&&t.length?this.write(t):""}e.s=o,o.prototype.write=function(t){if(0===t.length)return"";var e,r;if(this.lastNeed){if(void 0===(e=this.fillLast(t)))return"";r=this.lastNeed,this.lastNeed=0}else r=0;return r<t.length?e?e+this.text(t,r):this.text(t,r):e||""},o.prototype.end=function(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"<22>":e},o.prototype.text=function(t,e){var r=function(t,e,r){var n=e.length-1;if(n<r)return 0;var i=s(e[n]);return i>=0?(i>0&&(t.lastNeed=i-1),i):--n<r||-2===i?0:(i=s(e[n]))>=0?(i>0&&(t.lastNeed=i-2),i):--n<r||-2===i?0:(i=s(e[n]))>=0?(i>0&&(2===i?i=0:t.lastNeed=i-3),i):0}(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var n=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,n),t.toString("utf8",e,n)},o.prototype.fillLast=function(t){if(this.lastNeed<=t.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-=t.length}},396:(t,e,r)=>{var n=r(8764),i=n.Buffer;function o(t,e){for(var r in t)e[r]=t[r]}function s(t,e,r){return i(t,e,r)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?t.exports=n:(o(n,e),e.Buffer=s),o(i,s),s.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return i(t,e,r)},s.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var n=i(t);return void 0!==e?"string"==typeof r?n.fill(e,r):n.fill(e):n.fill(0),n},s.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return i(t)},s.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return n.SlowBuffer(t)}},5663:(t,e)=>{var r={millisecond:1,second:1e3,minute:6e4,hour:36e5,day:864e5};for(var n in r)"millisecond"===n?r.ms=r[n]:r[n.charAt(0)]=r[n],r[n+"s"]=r[n];function i(t){this.count=0;var e=function(t){var e=t.match(o);return e&&r[e[2]]?e.slice(1):null}(t);e&&(this.time=Number(e[0])*r[e[1]],this.type=e[1])}i.prototype.do=function(t){this.time&&(this.interval=setInterval((function(){e.count++,t.call(e)}),this.time));var e=this;return this},i.prototype.stop=function(){return this.interval&&(clearInterval(this.interval),delete this.interval),this};var o=/^\s*(\d+(?:\.\d+)?)\s*([a-z]+)\s*$/},300:(t,e,r)=>{"use strict";r.r(e),r.d(e,{Converter:()=>hr});var n=r(5055),i=r.n(n),o=r(1257),s=r(8899),a=484813681109536e-20,h=Math.PI/2,u=1e-10,c=.017453292519943295,l=57.29577951308232,f=Math.PI/4,p=2*Math.PI,d=3.14159265359,y={greenwich:0,lisbon:-9.131906111111,paris:2.337229166667,bogota:-74.080916666667,madrid:-3.687938888889,rome:12.452333333333,bern:7.439583333333,jakarta:106.807719444444,ferro:-17.666666666667,brussels:4.367975,stockholm:18.058277777778,athens:23.7163375,oslo:10.722916666667};const g={ft:{to_meter:.3048},"us-ft":{to_meter:1200/3937}};var m=/[\s_\-\/\(\)]/g;function v(t,e){if(t[e])return t[e];for(var r,n=Object.keys(t),i=e.toLowerCase().replace(m,""),o=-1;++o<n.length;)if((r=n[o]).toLowerCase().replace(m,"")===i)return t[r]}function w(t){var e,r,n,i={},o=t.split("+").map((function(t){return t.trim()})).filter((function(t){return t})).reduce((function(t,e){var r=e.split("=");return r.push(!0),t[r[0].toLowerCase()]=r[1],t}),{}),s={proj:"projName",datum:"datumCode",rf:function(t){i.rf=parseFloat(t)},lat_0:function(t){i.lat0=t*c},lat_1:function(t){i.lat1=t*c},lat_2:function(t){i.lat2=t*c},lat_ts:function(t){i.lat_ts=t*c},lon_0:function(t){i.long0=t*c},lon_1:function(t){i.long1=t*c},lon_2:function(t){i.long2=t*c},alpha:function(t){i.alpha=parseFloat(t)*c},lonc:function(t){i.longc=t*c},x_0:function(t){i.x0=parseFloat(t)},y_0:function(t){i.y0=parseFloat(t)},k_0:function(t){i.k0=parseFloat(t)},k:function(t){i.k0=parseFloat(t)},a:function(t){i.a=parseFloat(t)},b:function(t){i.b=parseFloat(t)},r_a:function(){i.R_A=!0},zone:function(t){i.zone=parseInt(t,10)},south:function(){i.utmSouth=!0},towgs84:function(t){i.datum_params=t.split(",").map((function(t){return parseFloat(t)}))},to_meter:function(t){i.to_meter=parseFloat(t)},units:function(t){i.units=t;var e=v(g,t);e&&(i.to_meter=e.to_meter)},from_greenwich:function(t){i.from_greenwich=t*c},pm:function(t){var e=v(y,t);i.from_greenwich=(e||parseFloat(t))*c},nadgrids:function(t){"@null"===t?i.datumCode="none":i.nadgrids=t},axis:function(t){var e="ewnsud";3===t.length&&-1!==e.indexOf(t.substr(0,1))&&-1!==e.indexOf(t.substr(1,1))&&-1!==e.indexOf(t.substr(2,1))&&(i.axis=t)}};for(e in o)r=o[e],e in s?"function"==typeof(n=s[e])?n(r):i[n]=r:i[e]=r;return"string"==typeof i.datumCode&&"WGS84"!==i.datumCode&&(i.datumCode=i.datumCode.toLowerCase()),i}var b=/\s/,M=/[A-Za-z]/,_=/[A-Za-z84]/,x=/[,\]]/,E=/[\d\.E\-\+]/;function S(t){if("string"!=typeof t)throw new Error("not a string");this.text=t.trim(),this.level=0,this.place=0,this.root=null,this.stack=[],this.currentObject=null,this.state=1}function O(t,e,r){Array.isArray(e)&&(r.unshift(e),e=null);var n=e?{}:t,i=r.reduce((function(t,e){return T(e,t),t}),n);e&&(t[e]=i)}function T(t,e){if(Array.isArray(t)){var r=t.shift();if("PARAMETER"===r&&(r=t.shift()),1===t.length)return Array.isArray(t[0])?(e[r]={},void T(t[0],e[r])):void(e[r]=t[0]);if(t.length)if("TOWGS84"!==r){if("AXIS"===r)return r in e||(e[r]=[]),void e[r].push(t);var n;switch(Array.isArray(r)||(e[r]={}),r){case"UNIT":case"PRIMEM":case"VERT_DATUM":return e[r]={name:t[0].toLowerCase(),convert:t[1]},void(3===t.length&&T(t[2],e[r]));case"SPHEROID":case"ELLIPSOID":return e[r]={name:t[0],a:t[1],rf:t[2]},void(4===t.length&&T(t[3],e[r]));case"PROJECTEDCRS":case"PROJCRS":case"GEOGCS":case"GEOCCS":case"PROJCS":case"LOCAL_CS":case"GEODCRS":case"GEODETICCRS":case"GEODETICDATUM":case"EDATUM":case"ENGINEERINGDATUM":case"VERT_CS":case"VERTCRS":case"VERTICALCRS":case"COMPD_CS":case"COMPOUNDCRS":case"ENGINEERINGCRS":case"ENGCRS":case"FITTED_CS":case"LOCAL_DATUM":case"DATUM":return t[0]=["name",t[0]],void O(e,r,t);default:for(n=-1;++n<t.length;)if(!Array.isArray(t[n]))return T(t,e[r]);return O(e,r,t)}}else e[r]=t;else e[r]=!0}else e[t]=!0}function I(t){return.017453292519943295*t}function N(t){var e=new S(t).output(),r=e.shift(),n=e.shift();e.unshift(["name",n]),e.unshift(["type",r]);var i={};return T(e,i),function(t){if("GEOGCS"===t.type?t.projName="longlat":"LOCAL_CS"===t.type?(t.projName="identity",t.local=!0):"object"==typeof t.PROJECTION?t.projName=Object.keys(t.PROJECTION)[0]:t.projName=t.PROJECTION,t.AXIS){for(var e="",r=0,n=t.AXIS.length;r<n;++r){var i=t.AXIS[r][0].toLowerCase();-1!==i.indexOf("north")?e+="n":-1!==i.indexOf("south")?e+="s":-1!==i.indexOf("east")?e+="e":-1!==i.indexOf("west")&&(e+="w")}2===e.length&&(e+="u"),3===e.length&&(t.axis=e)}t.UNIT&&(t.units=t.UNIT.name.toLowerCase(),"metre"===t.units&&(t.units="meter"),t.UNIT.convert&&("GEOGCS"===t.type?t.DATUM&&t.DATUM.SPHEROID&&(t.to_meter=t.UNIT.convert*t.DATUM.SPHEROID.a):t.to_meter=t.UNIT.convert));var o=t.GEOGCS;function s(e){return e*(t.to_meter||1)}"GEOGCS"===t.type&&(o=t),o&&(o.DATUM?t.datumCode=o.DATUM.name.toLowerCase():t.datumCode=o.name.toLowerCase(),"d_"===t.datumCode.slice(0,2)&&(t.datumCode=t.datumCode.slice(2)),"new_zealand_geodetic_datum_1949"!==t.datumCode&&"new_zealand_1949"!==t.datumCode||(t.datumCode="nzgd49"),"wgs_1984"!==t.datumCode&&"world_geodetic_system_1984"!==t.datumCode||("Mercator_Auxiliary_Sphere"===t.PROJECTION&&(t.sphere=!0),t.datumCode="wgs84"),"_ferro"===t.datumCode.slice(-6)&&(t.datumCode=t.datumCode.slice(0,-6)),"_jakarta"===t.datumCode.slice(-8)&&(t.datumCode=t.datumCode.slice(0,-8)),~t.datumCode.indexOf("belge")&&(t.datumCode="rnb72"),o.DATUM&&o.DATUM.SPHEROID&&(t.ellps=o.DATUM.SPHEROID.name.replace("_19","").replace(/[Cc]larke\_18/,"clrk"),"international"===t.ellps.toLowerCase().slice(0,13)&&(t.ellps="intl"),t.a=o.DATUM.SPHEROID.a,t.rf=parseFloat(o.DATUM.SPHEROID.rf,10)),o.DATUM&&o.DATUM.TOWGS84&&(t.datum_params=o.DATUM.TOWGS84),~t.datumCode.indexOf("osgb_1936")&&(t.datumCode="osgb36"),~t.datumCode.indexOf("osni_1952")&&(t.datumCode="osni52"),(~t.datumCode.indexOf("tm65")||~t.datumCode.indexOf("geodetic_datum_of_1965"))&&(t.datumCode="ire65"),"ch1903+"===t.datumCode&&(t.datumCode="ch1903"),~t.datumCode.indexOf("israel")&&(t.datumCode="isr93")),t.b&&!isFinite(t.b)&&(t.b=t.a),[["standard_parallel_1","Standard_Parallel_1"],["standard_parallel_2","Standard_Parallel_2"],["false_easting","False_Easting"],["false_northing","False_Northing"],["central_meridian","Central_Meridian"],["latitude_of_origin","Latitude_Of_Origin"],["latitude_of_origin","Central_Parallel"],["scale_factor","Scale_Factor"],["k0","scale_factor"],["latitude_of_center","Latitude_Of_Center"],["latitude_of_center","Latitude_of_center"],["lat0","latitude_of_center",I],["longitude_of_center","Longitude_Of_Center"],["longitude_of_center","Longitude_of_center"],["longc","longitude_of_center",I],["x0","false_easting",s],["y0","false_northing",s],["long0","central_meridian",I],["lat0","latitude_of_origin",I],["lat0","standard_parallel_1",I],["lat1","standard_parallel_1",I],["lat2","standard_parallel_2",I],["azimuth","Azimuth"],["alpha","azimuth",I],["srsCode","name"]].forEach((function(e){return function(t,e){var r=e[0],n=e[1];!(r in t)&&n in t&&(t[r]=t[n],3===e.length&&(t[r]=e[2](t[r])))}(t,e)})),t.long0||!t.longc||"Albers_Conic_Equal_Area"!==t.projName&&"Lambert_Azimuthal_Equal_Area"!==t.projName||(t.long0=t.longc),t.lat_ts||!t.lat1||"Stereographic_South_Pole"!==t.projName&&"Polar Stereographic (variant B)"!==t.projName||(t.lat0=I(t.lat1>0?90:-90),t.lat_ts=t.lat1)}(i),i}function P(t){var e=this;if(2===arguments.length){var r=arguments[1];"string"==typeof r?"+"===r.charAt(0)?P[t]=w(arguments[1]):P[t]=N(arguments[1]):P[t]=r}else if(1===arguments.length){if(Array.isArray(t))return t.map((function(t){Array.isArray(t)?P.apply(e,t):P(t)}));if("string"==typeof t){if(t in P)return P[t]}else"EPSG"in t?P["EPSG:"+t.EPSG]=t:"ESRI"in t?P["ESRI:"+t.ESRI]=t:"IAU2000"in t?P["IAU2000:"+t.IAU2000]=t:console.log(t);return}}S.prototype.readCharicter=function(){var t=this.text[this.place++];if(4!==this.state)for(;b.test(t);){if(this.place>=this.text.length)return;t=this.text[this.place++]}switch(this.state){case 1:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},S.prototype.afterquote=function(t){if('"'===t)return this.word+='"',void(this.state=4);if(x.test(t))return this.word=this.word.trim(),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in afterquote yet, index '+this.place)},S.prototype.afterItem=function(t){return","===t?(null!==this.word&&this.currentObject.push(this.word),this.word=null,void(this.state=1)):"]"===t?(this.level--,null!==this.word&&(this.currentObject.push(this.word),this.word=null),this.state=1,this.currentObject=this.stack.pop(),void(this.currentObject||(this.state=-1))):void 0},S.prototype.number=function(t){if(!E.test(t)){if(x.test(t))return this.word=parseFloat(this.word),void this.afterItem(t);throw new Error("havn't handled \""+t+'" in number yet, index '+this.place)}this.word+=t},S.prototype.quoted=function(t){'"'!==t?this.word+=t:this.state=5},S.prototype.keyword=function(t){if(_.test(t))this.word+=t;else{if("["===t){var e=[];return e.push(this.word),this.level++,null===this.root?this.root=e:this.currentObject.push(e),this.stack.push(this.currentObject),this.currentObject=e,void(this.state=1)}if(!x.test(t))throw new Error("havn't handled \""+t+'" in keyword yet, index '+this.place);this.afterItem(t)}},S.prototype.neutral=function(t){if(M.test(t))return this.word=t,void(this.state=2);if('"'===t)return this.word="",void(this.state=4);if(E.test(t))return this.word=t,void(this.state=3);if(!x.test(t))throw new Error("havn't handled \""+t+'" in neutral yet, index '+this.place);this.afterItem(t)},S.prototype.output=function(){for(;this.place<this.text.length;)this.readCharicter();if(-1===this.state)return this.root;throw new Error('unable to parse string "'+this.text+'". State is '+this.state)},function(t){t("EPSG:4326","+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"),t("EPSG:4269","+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"),t("EPSG:3857","+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"),t.WGS84=t["EPSG:4326"],t["EPSG:3785"]=t["EPSG:3857"],t.GOOGLE=t["EPSG:3857"],t["EPSG:900913"]=t["EPSG:3857"],t["EPSG:102113"]=t["EPSG:3857"]}(P);const A=P;var C=["PROJECTEDCRS","PROJCRS","GEOGCS","GEOCCS","PROJCS","LOCAL_CS","GEODCRS","GEODETICCRS","GEODETICDATUM","ENGCRS","ENGINEERINGCRS"],D=["3857","900913","3785","102113"];function k(t,e){var r,n;if(t=t||{},!e)return t;for(n in e)void 0!==(r=e[n])&&(t[n]=r);return t}function L(t,e,r){var n=t*e;return r/Math.sqrt(1-n*n)}function j(t){return t<0?-1:1}function F(t){return Math.abs(t)<=d?t:t-j(t)*p}function R(t,e,r){var n=t*r,i=.5*t;return n=Math.pow((1-n)/(1+n),i),Math.tan(.5*(h-e))/n}function G(t,e){for(var r,n,i=.5*t,o=h-2*Math.atan(e),s=0;s<=15;s++)if(r=t*Math.sin(o),o+=n=h-2*Math.atan(e*Math.pow((1-r)/(1+r),i))-o,Math.abs(n)<=1e-10)return o;return-9999}function B(t){return t}var U=[{init:function(){var t=this.b/this.a;this.es=1-t*t,"x0"in this||(this.x0=0),"y0"in this||(this.y0=0),this.e=Math.sqrt(this.es),this.lat_ts?this.sphere?this.k0=Math.cos(this.lat_ts):this.k0=L(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0=this.k:this.k0=1)},forward:function(t){var e,r,n=t.x,i=t.y;if(i*l>90&&i*l<-90&&n*l>180&&n*l<-180)return null;if(Math.abs(Math.abs(i)-h)<=u)return null;if(this.sphere)e=this.x0+this.a*this.k0*F(n-this.long0),r=this.y0+this.a*this.k0*Math.log(Math.tan(f+.5*i));else{var o=Math.sin(i),s=R(this.e,i,o);e=this.x0+this.a*this.k0*F(n-this.long0),r=this.y0-this.a*this.k0*Math.log(s)}return t.x=e,t.y=r,t},inverse:function(t){var e,r,n=t.x-this.x0,i=t.y-this.y0;if(this.sphere)r=h-2*Math.atan(Math.exp(-i/(this.a*this.k0)));else{var o=Math.exp(-i/(this.a*this.k0));if(-9999===(r=G(this.e,o)))return null}return e=F(this.long0+n/(this.a*this.k0)),t.x=e,t.y=r,t},names:["Mercator","Popular Visualisation Pseudo Mercator","Mercator_1SP","Mercator_Auxiliary_Sphere","merc"]},{init:function(){},forward:B,inverse:B,names:["longlat","identity"]}],q={},z=[];function V(t,e){var r=z.length;return t.names?(z[r]=t,t.names.forEach((function(t){q[t.toLowerCase()]=r})),this):(console.log(e),!0)}const W={start:function(){U.forEach(V)},add:V,get:function(t){if(!t)return!1;var e=t.toLowerCase();return void 0!==q[e]&&z[q[e]]?z[q[e]]:void 0}};var X={MERIT:{a:6378137,rf:298.257,ellipseName:"MERIT 1983"},SGS85:{a:6378136,rf:298.257,ellipseName:"Soviet Geodetic System 85"},GRS80:{a:6378137,rf:298.257222101,ellipseName:"GRS 1980(IUGG, 1980)"},IAU76:{a:6378140,rf:298.257,ellipseName:"IAU 1976"},airy:{a:6377563.396,b:6356256.91,ellipseName:"Airy 1830"},APL4:{a:6378137,rf:298.25,ellipseName:"Appl. Physics. 1965"},NWL9D:{a:6378145,rf:298.25,ellipseName:"Naval Weapons Lab., 1965"},mod_airy:{a:6377340.189,b:6356034.446,ellipseName:"Modified Airy"},andrae:{a:6377104.43,rf:300,ellipseName:"Andrae 1876 (Den., Iclnd.)"},aust_SA:{a:6378160,rf:298.25,ellipseName:"Australian Natl & S. Amer. 1969"},GRS67:{a:6378160,rf:298.247167427,ellipseName:"GRS 67(IUGG 1967)"},bessel:{a:6377397.155,rf:299.1528128,ellipseName:"Bessel 1841"},bess_nam:{a:6377483.865,rf:299.1528128,ellipseName:"Bessel 1841 (Namibia)"},clrk66:{a:6378206.4,b:6356583.8,ellipseName:"Clarke 1866"},clrk80:{a:6378249.145,rf:293.4663,ellipseName:"Clarke 1880 mod."},clrk58:{a:6378293.645208759,rf:294.2606763692654,ellipseName:"Clarke 1858"},CPM:{a:6375738.7,rf:334.29,ellipseName:"Comm. des Poids et Mesures 1799"},delmbr:{a:6376428,rf:311.5,ellipseName:"Delambre 1810 (Belgium)"},engelis:{a:6378136.05,rf:298.2566,ellipseName:"Engelis 1985"},evrst30:{a:6377276.345,rf:300.8017,ellipseName:"Everest 1830"},evrst48:{a:6377304.063,rf:300.8017,ellipseName:"Everest 1948"},evrst56:{a:6377301.243,rf:300.8017,ellipseName:"Everest 1956"},evrst69:{a:6377295.664,rf:300.8017,ellipseName:"Everest 1969"},evrstSS:{a:6377298.556,rf:300.8017,ellipseName:"Everest (Sabah & Sarawak)"},fschr60:{a:6378166,rf:298.3,ellipseName:"Fischer (Mercury Datum) 1960"},fschr60m:{a:6378155,rf:298.3,ellipseName:"Fischer 1960"},fschr68:{a:6378150,rf:298.3,ellipseName:"Fischer 1968"},helmert:{a:6378200,rf:298.3,ellipseName:"Helmert 1906"},hough:{a:6378270,rf:297,ellipseName:"Hough"},intl:{a:6378388,rf:297,ellipseName:"International 1909 (Hayford)"},kaula:{a:6378163,rf:298.24,ellipseName:"Kaula 1961"},lerch:{a:6378139,rf:298.257,ellipseName:"Lerch 1979"},mprts:{a:6397300,rf:191,ellipseName:"Maupertius 1738"},new_intl:{a:6378157.5,b:6356772.2,ellipseName:"New International 1967"},plessis:{a:6376523,rf:6355863,ellipseName:"Plessis 1817 (France)"},krass:{a:6378245,rf:298.3,ellipseName:"Krassovsky, 1942"},SEasia:{a:6378155,b:6356773.3205,ellipseName:"Southeast Asia"},walbeck:{a:6376896,b:6355834.8467,ellipseName:"Walbeck"},WGS60:{a:6378165,rf:298.3,ellipseName:"WGS 60"},WGS66:{a:6378145,rf:298.25,ellipseName:"WGS 66"},WGS7:{a:6378135,rf:298.26,ellipseName:"WGS 72"}},$=X.WGS84={a:6378137,rf:298.257223563,ellipseName:"WGS 84"};X.sphere={a:6370997,b:6370997,ellipseName:"Normal Sphere (r=6370997)"};var Y={wgs84:{towgs84:"0,0,0",ellipse:"WGS84",datumName:"WGS84"},ch1903:{towgs84:"674.374,15.056,405.346",ellipse:"bessel",datumName:"swiss"},ggrs87:{towgs84:"-199.87,74.79,246.62",ellipse:"GRS80",datumName:"Greek_Geodetic_Reference_System_1987"},nad83:{towgs84:"0,0,0",ellipse:"GRS80",datumName:"North_American_Datum_1983"},nad27:{nadgrids:"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat",ellipse:"clrk66",datumName:"North_American_Datum_1927"},potsdam:{towgs84:"606.0,23.0,413.0",ellipse:"bessel",datumName:"Potsdam Rauenberg 1950 DHDN"},carthage:{towgs84:"-263.0,6.0,431.0",ellipse:"clark80",datumName:"Carthage 1934 Tunisia"},hermannskogel:{towgs84:"653.0,-212.0,449.0",ellipse:"bessel",datumName:"Hermannskogel"},osni52:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"airy",datumName:"Irish National"},ire65:{towgs84:"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15",ellipse:"mod_airy",datumName:"Ireland 1965"},rassadiran:{towgs84:"-133.63,-157.5,-158.62",ellipse:"intl",datumName:"Rassadiran"},nzgd49:{towgs84:"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993",ellipse:"intl",datumName:"New Zealand Geodetic Datum 1949"},osgb36:{towgs84:"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894",ellipse:"airy",datumName:"Airy 1830"},s_jtsk:{towgs84:"589,76,480",ellipse:"bessel",datumName:"S-JTSK (Ferro)"},beduaram:{towgs84:"-106,-87,188",ellipse:"clrk80",datumName:"Beduaram"},gunung_segara:{towgs84:"-403,684,41",ellipse:"bessel",datumName:"Gunung Segara Jakarta"},rnb72:{towgs84:"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1",ellipse:"intl",datumName:"Reseau National Belge 1972"}};function Q(t,e){if(!(this instanceof Q))return new Q(t);e=e||function(t){if(t)throw t};var r=function(t){if(!function(t){return"string"==typeof t}(t))return t;if(function(t){return t in A}(t))return A[t];if(function(t){return C.some((function(e){return t.indexOf(e)>-1}))}(t)){var e=N(t);if(function(t){var e=v(t,"authority");if(e){var r=v(e,"epsg");return r&&D.indexOf(r)>-1}}(e))return A["EPSG:3857"];var r=function(t){var e=v(t,"extension");if(e)return v(e,"proj4")}(e);return r?w(r):e}return function(t){return"+"===t[0]}(t)?w(t):void 0}(t);if("object"==typeof r){var n=Q.projections.get(r.projName);if(n){if(r.datumCode&&"none"!==r.datumCode){var i=v(Y,r.datumCode);i&&(r.datum_params=i.towgs84?i.towgs84.split(","):null,r.ellps=i.ellipse,r.datumName=i.datumName?i.datumName:r.datumCode)}r.k0=r.k0||1,r.axis=r.axis||"enu",r.ellps=r.ellps||"wgs84";var o,s,h,c,l,f,p=function(t,e,r,n,i){if(!t){var o=v(X,n);o||(o=$),t=o.a,e=o.b,r=o.rf}return r&&!e&&(e=(1-1/r)*t),(0===r||Math.abs(t-e)<u)&&(i=!0,e=t),{a:t,b:e,rf:r,sphere:i}}(r.a,r.b,r.rf,r.ellps,r.sphere),d=(o=p.a,s=p.b,p.rf,l=((h=o*o)-(c=s*s))/h,f=0,r.R_A?(h=(o*=1-l*(.16666666666666666+l*(.04722222222222222+.022156084656084655*l)))*o,l=0):f=Math.sqrt(l),{es:l,e:f,ep2:(h-c)/c}),y=r.datum||function(t,e,r,n,i,o){var s={};return s.datum_type=void 0===t||"none"===t?5:4,e&&(s.datum_params=e.map(parseFloat),0===s.datum_params[0]&&0===s.datum_params[1]&&0===s.datum_params[2]||(s.datum_type=1),s.datum_params.length>3&&(0===s.datum_params[3]&&0===s.datum_params[4]&&0===s.datum_params[5]&&0===s.datum_params[6]||(s.datum_type=2,s.datum_params[3]*=a,s.datum_params[4]*=a,s.datum_params[5]*=a,s.datum_params[6]=s.datum_params[6]/1e6+1))),s.a=r,s.b=n,s.es=i,s.ep2=o,s}(r.datumCode,r.datum_params,p.a,p.b,d.es,d.ep2);k(this,r),k(this,n),this.a=p.a,this.b=p.b,this.rf=p.rf,this.sphere=p.sphere,this.es=d.es,this.e=d.e,this.ep2=d.ep2,this.datum=y,this.init(),e(null,this)}else e(t)}else e(t)}Q.projections=W,Q.projections.start();const K=Q;function H(t,e,r){var n,i,o,s,a=t.x,u=t.y,c=t.z?t.z:0;if(u<-h&&u>-1.001*h)u=-h;else if(u>h&&u<1.001*h)u=h;else{if(u<-h)return{x:-1/0,y:-1/0,z:t.z};if(u>h)return{x:1/0,y:1/0,z:t.z}}return a>Math.PI&&(a-=2*Math.PI),i=Math.sin(u),s=Math.cos(u),o=i*i,{x:((n=r/Math.sqrt(1-e*o))+c)*s*Math.cos(a),y:(n+c)*s*Math.sin(a),z:(n*(1-e)+c)*i}}function J(t,e,r,n){var i,o,s,a,h,u,c,l,f,p,d,y,g,m,v,w=t.x,b=t.y,M=t.z?t.z:0;if(i=Math.sqrt(w*w+b*b),o=Math.sqrt(w*w+b*b+M*M),i/r<1e-12){if(m=0,o/r<1e-12)return v=-n,{x:t.x,y:t.y,z:t.z}}else m=Math.atan2(b,w);s=M/o,l=(a=i/o)*(1-e)*(h=1/Math.sqrt(1-e*(2-e)*a*a)),f=s*h,g=0;do{g++,u=e*(c=r/Math.sqrt(1-e*f*f))/(c+(v=i*l+M*f-c*(1-e*f*f))),y=(d=s*(h=1/Math.sqrt(1-u*(2-u)*a*a)))*l-(p=a*(1-u)*h)*f,l=p,f=d}while(y*y>1e-24&&g<30);return{x:m,y:Math.atan(d/Math.abs(p)),z:v}}function Z(t){return 1===t||2===t}function tt(t,e,r){var n,i,o,s=r.x,a=r.y,h=r.z||0,u={};for(o=0;o<3;o++)if(!e||2!==o||void 0!==r.z)switch(0===o?(n=s,i=-1!=="ew".indexOf(t.axis[o])?"x":"y"):1===o?(n=a,i=-1!=="ns".indexOf(t.axis[o])?"y":"x"):(n=h,i="z"),t.axis[o]){case"e":u[i]=n;break;case"w":u[i]=-n;break;case"n":u[i]=n;break;case"s":u[i]=-n;break;case"u":void 0!==r[i]&&(u.z=n);break;case"d":void 0!==r[i]&&(u.z=-n);break;default:return null}return u}function et(t){var e={x:t[0],y:t[1]};return t.length>2&&(e.z=t[2]),t.length>3&&(e.m=t[3]),e}function rt(t){if("function"==typeof Number.isFinite){if(Number.isFinite(t))return;throw new TypeError("coordinates must be finite numbers")}if("number"!=typeof t||t!=t||!isFinite(t))throw new TypeError("coordinates must be finite numbers")}function nt(t,e,r){var n;if(Array.isArray(r)&&(r=et(r)),function(t){rt(t.x),rt(t.y)}(r),t.datum&&e.datum&&function(t,e){return(1===t.datum.datum_type||2===t.datum.datum_type)&&"WGS84"!==e.datumCode||(1===e.datum.datum_type||2===e.datum.datum_type)&&"WGS84"!==t.datumCode}(t,e)&&(r=nt(t,n=new K("WGS84"),r),t=n),"enu"!==t.axis&&(r=tt(t,!1,r)),"longlat"===t.projName)r={x:r.x*c,y:r.y*c,z:r.z||0};else if(t.to_meter&&(r={x:r.x*t.to_meter,y:r.y*t.to_meter,z:r.z||0}),!(r=t.inverse(r)))return;return t.from_greenwich&&(r.x+=t.from_greenwich),r=function(t,e,r){return function(t,e){return t.datum_type===e.datum_type&&!(t.a!==e.a||Math.abs(t.es-e.es)>5e-11)&&(1===t.datum_type?t.datum_params[0]===e.datum_params[0]&&t.datum_params[1]===e.datum_params[1]&&t.datum_params[2]===e.datum_params[2]:2!==t.datum_type||t.datum_params[0]===e.datum_params[0]&&t.datum_params[1]===e.datum_params[1]&&t.datum_params[2]===e.datum_params[2]&&t.datum_params[3]===e.datum_params[3]&&t.datum_params[4]===e.datum_params[4]&&t.datum_params[5]===e.datum_params[5]&&t.datum_params[6]===e.datum_params[6])}(t,e)||5===t.datum_type||5===e.datum_type?r:t.es!==e.es||t.a!==e.a||Z(t.datum_type)||Z(e.datum_type)?(r=H(r,t.es,t.a),Z(t.datum_type)&&(r=function(t,e,r){if(1===e)return{x:t.x+r[0],y:t.y+r[1],z:t.z+r[2]};if(2===e){var n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],h=r[5],u=r[6];return{x:u*(t.x-h*t.y+a*t.z)+n,y:u*(h*t.x+t.y-s*t.z)+i,z:u*(-a*t.x+s*t.y+t.z)+o}}}(r,t.datum_type,t.datum_params)),Z(e.datum_type)&&(r=function(t,e,r){if(1===e)return{x:t.x-r[0],y:t.y-r[1],z:t.z-r[2]};if(2===e){var n=r[0],i=r[1],o=r[2],s=r[3],a=r[4],h=r[5],u=r[6],c=(t.x-n)/u,l=(t.y-i)/u,f=(t.z-o)/u;return{x:c+h*l-a*f,y:-h*c+l+s*f,z:a*c-s*l+f}}}(r,e.datum_type,e.datum_params)),J(r,e.es,e.a,e.b)):r}(t.datum,e.datum,r),e.from_greenwich&&(r={x:r.x-e.from_greenwich,y:r.y,z:r.z||0}),"longlat"===e.projName?r={x:r.x*l,y:r.y*l,z:r.z||0}:(r=e.forward(r),e.to_meter&&(r={x:r.x/e.to_meter,y:r.y/e.to_meter,z:r.z||0})),"enu"!==e.axis?tt(e,!0,r):r}var it=K("WGS84");function ot(t,e,r){var n,i,o;return Array.isArray(r)?(n=nt(t,e,r)||{x:NaN,y:NaN},r.length>2?void 0!==t.name&&"geocent"===t.name||void 0!==e.name&&"geocent"===e.name?"number"==typeof n.z?[n.x,n.y,n.z].concat(r.splice(3)):[n.x,n.y,r[2]].concat(r.splice(3)):[n.x,n.y].concat(r.splice(2)):[n.x,n.y]):(i=nt(t,e,r),2===(o=Object.keys(r)).length||o.forEach((function(n){if(void 0!==t.name&&"geocent"===t.name||void 0!==e.name&&"geocent"===e.name){if("x"===n||"y"===n||"z"===n)return}else if("x"===n||"y"===n)return;i[n]=r[n]})),i)}function st(t){return t instanceof K?t:t.oProj?t.oProj:K(t)}const at=function(t,e,r){t=st(t);var n,i=!1;return void 0===e?(e=t,t=it,i=!0):(void 0!==e.x||Array.isArray(e))&&(r=e,e=t,t=it,i=!0),e=st(e),r?ot(t,e,r):(n={forward:function(r){return ot(t,e,r)},inverse:function(r){return ot(e,t,r)}},i&&(n.oProj=e),n)};var ht="AJSAJS",ut="AFAFAF",ct=65,lt=73,ft=79;const pt={forward:dt,inverse:function(t){var e=vt(bt(t.toUpperCase()));return e.lat&&e.lon?[e.lon,e.lat,e.lon,e.lat]:[e.left,e.bottom,e.right,e.top]},toPoint:yt};function dt(t,e){return e=e||5,function(t,e){var r,n,i,o,s,a,h,u,c,l,f,p="00000"+t.easting,d="00000"+t.northing;return t.zoneNumber+t.zoneLetter+(c=t.easting,l=t.northing,f=wt(t.zoneNumber),r=Math.floor(c/1e5),n=Math.floor(l/1e5)%20,o=ht.charCodeAt(i=f-1),s=ut.charCodeAt(i),u=!1,(a=o+r-1)>90&&(a=a-90+ct-1,u=!0),(a===lt||o<lt&&a>lt||(a>lt||o<lt)&&u)&&a++,(a===ft||o<ft&&a>ft||(a>ft||o<ft)&&u)&&++a===lt&&a++,a>90&&(a=a-90+ct-1),(h=s+n)>86?(h=h-86+ct-1,u=!0):u=!1,(h===lt||s<lt&&h>lt||(h>lt||s<lt)&&u)&&h++,(h===ft||s<ft&&h>ft||(h>ft||s<ft)&&u)&&++h===lt&&h++,h>86&&(h=h-86+ct-1),String.fromCharCode(a)+String.fromCharCode(h))+p.substr(p.length-5,e)+d.substr(d.length-5,e)}(function(t){var e,r,n,i,o,s,a,h=t.lat,u=t.lon,c=6378137,l=.00669438,f=.9996,p=gt(h),d=gt(u);a=Math.floor((u+180)/6)+1,180===u&&(a=60),h>=56&&h<64&&u>=3&&u<12&&(a=32),h>=72&&h<84&&(u>=0&&u<9?a=31:u>=9&&u<21?a=33:u>=21&&u<33?a=35:u>=33&&u<42&&(a=37)),s=gt(6*(a-1)-180+3),e=.006739496752268451,r=c/Math.sqrt(1-l*Math.sin(p)*Math.sin(p)),n=Math.tan(p)*Math.tan(p),i=e*Math.cos(p)*Math.cos(p);var y,g,m=f*r*((o=Math.cos(p)*(d-s))+(1-n+i)*o*o*o/6+(5-18*n+n*n+72*i-58*e)*o*o*o*o*o/120)+5e5,v=f*(c*(.9983242984503243*p-.002514607064228144*Math.sin(2*p)+2639046602129982e-21*Math.sin(4*p)-3.418046101696858e-9*Math.sin(6*p))+r*Math.tan(p)*(o*o/2+(5-n+9*i+4*i*i)*o*o*o*o/24+(61-58*n+n*n+600*i-2.2240339282485886)*o*o*o*o*o*o/720));return h<0&&(v+=1e7),{northing:Math.round(v),easting:Math.round(m),zoneNumber:a,zoneLetter:(y=h,g="Z",84>=y&&y>=72?g="X":72>y&&y>=64?g="W":64>y&&y>=56?g="V":56>y&&y>=48?g="U":48>y&&y>=40?g="T":40>y&&y>=32?g="S":32>y&&y>=24?g="R":24>y&&y>=16?g="Q":16>y&&y>=8?g="P":8>y&&y>=0?g="N":0>y&&y>=-8?g="M":-8>y&&y>=-16?g="L":-16>y&&y>=-24?g="K":-24>y&&y>=-32?g="J":-32>y&&y>=-40?g="H":-40>y&&y>=-48?g="G":-48>y&&y>=-56?g="F":-56>y&&y>=-64?g="E":-64>y&&y>=-72?g="D":-72>y&&y>=-80&&(g="C"),g)}}({lat:t[1],lon:t[0]}),e)}function yt(t){var e=vt(bt(t.toUpperCase()));return e.lat&&e.lon?[e.lon,e.lat]:[(e.left+e.right)/2,(e.top+e.bottom)/2]}function gt(t){return t*(Math.PI/180)}function mt(t){return t/Math.PI*180}function vt(t){var e=t.northing,r=t.easting,n=t.zoneLetter,i=t.zoneNumber;if(i<0||i>60)return null;var o,s,a,h,u,c,l,f,p,d=.9996,y=6378137,g=.00669438,m=(1-Math.sqrt(.99330562))/(1+Math.sqrt(.99330562)),v=r-5e5,w=e;n<"N"&&(w-=1e7),l=6*(i-1)-180+3,o=.006739496752268451,p=(f=w/d/6367449.145945056)+(3*m/2-27*m*m*m/32)*Math.sin(2*f)+(21*m*m/16-55*m*m*m*m/32)*Math.sin(4*f)+151*m*m*m/96*Math.sin(6*f),s=y/Math.sqrt(1-g*Math.sin(p)*Math.sin(p)),a=Math.tan(p)*Math.tan(p),h=o*Math.cos(p)*Math.cos(p),u=.99330562*y/Math.pow(1-g*Math.sin(p)*Math.sin(p),1.5),c=v/(s*d);var b=p-s*Math.tan(p)/u*(c*c/2-(5+3*a+10*h-4*h*h-9*o)*c*c*c*c/24+(61+90*a+298*h+45*a*a-1.6983531815716497-3*h*h)*c*c*c*c*c*c/720);b=mt(b);var M,_=(c-(1+2*a+h)*c*c*c/6+(5-2*h+28*a-3*h*h+8*o+24*a*a)*c*c*c*c*c/120)/Math.cos(p);if(_=l+mt(_),t.accuracy){var x=vt({northing:t.northing+t.accuracy,easting:t.easting+t.accuracy,zoneLetter:t.zoneLetter,zoneNumber:t.zoneNumber});M={top:x.lat,right:x.lon,bottom:b,left:_}}else M={lat:b,lon:_};return M}function wt(t){var e=t%6;return 0===e&&(e=6),e}function bt(t){if(t&&0===t.length)throw"MGRSPoint coverting from nothing";for(var e,r=t.length,n=null,i="",o=0;!/[A-Z]/.test(e=t.charAt(o));){if(o>=2)throw"MGRSPoint bad conversion from: "+t;i+=e,o++}var s=parseInt(i,10);if(0===o||o+3>r)throw"MGRSPoint bad conversion from: "+t;var a=t.charAt(o++);if(a<="A"||"B"===a||"Y"===a||a>="Z"||"I"===a||"O"===a)throw"MGRSPoint zone letter "+a+" not handled: "+t;n=t.substring(o,o+=2);for(var h=wt(s),u=function(t,e){for(var r=ht.charCodeAt(e-1),n=1e5,i=!1;r!==t.charCodeAt(0);){if(++r===lt&&r++,r===ft&&r++,r>90){if(i)throw"Bad character: "+t;r=ct,i=!0}n+=1e5}return n}(n.charAt(0),h),c=function(t,e){if(t>"V")throw"MGRSPoint given invalid Northing "+t;for(var r=ut.charCodeAt(e-1),n=0,i=!1;r!==t.charCodeAt(0);){if(++r===lt&&r++,r===ft&&r++,r>86){if(i)throw"Bad character: "+t;r=ct,i=!0}n+=1e5}return n}(n.charAt(1),h);c<Mt(a);)c+=2e6;var l=r-o;if(l%2!=0)throw"MGRSPoint has to have an even number \nof digits after the zone letter and two 100km letters - front \nhalf for easting meters, second half for \nnorthing meters"+t;var f,p,d,y=l/2,g=0,m=0;return y>0&&(f=1e5/Math.pow(10,y),p=t.substring(o,o+y),g=parseFloat(p)*f,d=t.substring(o+y),m=parseFloat(d)*f),{easting:g+u,northing:m+c,zoneLetter:a,zoneNumber:s,accuracy:f}}function Mt(t){var e;switch(t){case"C":e=11e5;break;case"D":e=2e6;break;case"E":e=28e5;break;case"F":e=37e5;break;case"G":e=46e5;break;case"H":e=55e5;break;case"J":e=64e5;break;case"K":e=73e5;break;case"L":e=82e5;break;case"M":e=91e5;break;case"N":e=0;break;case"P":e=8e5;break;case"Q":e=17e5;break;case"R":e=26e5;break;case"S":e=35e5;break;case"T":e=44e5;break;case"U":e=53e5;break;case"V":e=62e5;break;case"W":e=7e6;break;case"X":e=79e5;break;default:e=-1}if(e>=0)return e;throw"Invalid zone letter: "+t}function _t(t,e,r){if(!(this instanceof _t))return new _t(t,e,r);if(Array.isArray(t))this.x=t[0],this.y=t[1],this.z=t[2]||0;else if("object"==typeof t)this.x=t.x,this.y=t.y,this.z=t.z||0;else if("string"==typeof t&&void 0===e){var n=t.split(",");this.x=parseFloat(n[0],10),this.y=parseFloat(n[1],10),this.z=parseFloat(n[2],10)||0}else this.x=t,this.y=e,this.z=r||0;console.warn("proj4.Point will be removed in version 3, use proj4.toPoint")}_t.fromMGRS=function(t){return new _t(yt(t))},_t.prototype.toMGRS=function(t){return dt([this.x,this.y],t)};const xt=_t;var Et=.046875,St=.01953125,Ot=.01068115234375;function Tt(t){var e=[];e[0]=1-t*(.25+t*(Et+t*(St+t*Ot))),e[1]=t*(.75-t*(Et+t*(St+t*Ot)));var r=t*t;return e[2]=r*(.46875-t*(.013020833333333334+.007120768229166667*t)),r*=t,e[3]=r*(.3645833333333333-.005696614583333333*t),e[4]=r*t*.3076171875,e}function It(t,e,r,n){return r*=e,e*=e,n[0]*t-r*(n[1]+e*(n[2]+e*(n[3]+e*n[4])))}function Nt(t,e,r){for(var n=1/(1-e),i=t,o=20;o;--o){var s=Math.sin(i),a=1-e*s*s;if(i-=a=(It(i,s,Math.cos(i),r)-t)*(a*Math.sqrt(a))*n,Math.abs(a)<u)return i}return i}const Pt={init:function(){this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.es&&(this.en=Tt(this.es),this.ml0=It(this.lat0,Math.sin(this.lat0),Math.cos(this.lat0),this.en))},forward:function(t){var e,r,n,i=t.x,o=t.y,s=F(i-this.long0),a=Math.sin(o),h=Math.cos(o);if(this.es){var c=h*s,l=Math.pow(c,2),f=this.ep2*Math.pow(h,2),p=Math.pow(f,2),d=Math.abs(h)>u?Math.tan(o):0,y=Math.pow(d,2),g=Math.pow(y,2);e=1-this.es*Math.pow(a,2),c/=Math.sqrt(e);var m=It(o,a,h,this.en);r=this.a*(this.k0*c*(1+l/6*(1-y+f+l/20*(5-18*y+g+14*f-58*y*f+l/42*(61+179*g-g*y-479*y)))))+this.x0,n=this.a*(this.k0*(m-this.ml0+a*s*c/2*(1+l/12*(5-y+9*f+4*p+l/30*(61+g-58*y+270*f-330*y*f+l/56*(1385+543*g-g*y-3111*y))))))+this.y0}else{var v=h*Math.sin(s);if(Math.abs(Math.abs(v)-1)<u)return 93;if(r=.5*this.a*this.k0*Math.log((1+v)/(1-v))+this.x0,n=h*Math.cos(s)/Math.sqrt(1-Math.pow(v,2)),(v=Math.abs(n))>=1){if(v-1>u)return 93;n=0}else n=Math.acos(n);o<0&&(n=-n),n=this.a*this.k0*(n-this.lat0)+this.y0}return t.x=r,t.y=n,t},inverse:function(t){var e,r,n,i,o=(t.x-this.x0)*(1/this.a),s=(t.y-this.y0)*(1/this.a);if(this.es)if(r=Nt(e=this.ml0+s/this.k0,this.es,this.en),Math.abs(r)<h){var a=Math.sin(r),c=Math.cos(r),l=Math.abs(c)>u?Math.tan(r):0,f=this.ep2*Math.pow(c,2),p=Math.pow(f,2),d=Math.pow(l,2),y=Math.pow(d,2);e=1-this.es*Math.pow(a,2);var g=o*Math.sqrt(e)/this.k0,m=Math.pow(g,2);n=r-(e*=l)*m/(1-this.es)*.5*(1-m/12*(5+3*d-9*f*d+f-4*p-m/30*(61+90*d-252*f*d+45*y+46*f-m/56*(1385+3633*d+4095*y+1574*y*d)))),i=F(this.long0+g*(1-m/6*(1+2*d+f-m/20*(5+28*d+24*y+8*f*d+6*f-m/42*(61+662*d+1320*y+720*y*d))))/c)}else n=h*j(s),i=0;else{var v=Math.exp(o/this.k0),w=.5*(v-1/v),b=this.lat0+s/this.k0,M=Math.cos(b);e=Math.sqrt((1-Math.pow(M,2))/(1+Math.pow(w,2))),n=Math.asin(e),s<0&&(n=-n),i=0===w&&0===M?0:F(Math.atan2(w,M)+this.long0)}return t.x=i,t.y=n,t},names:["Transverse_Mercator","Transverse Mercator","tmerc"]};function At(t){var e=Math.exp(t);return(e-1/e)/2}function Ct(t,e){t=Math.abs(t),e=Math.abs(e);var r=Math.max(t,e),n=Math.min(t,e)/(r||1);return r*Math.sqrt(1+Math.pow(n,2))}function Dt(t,e){for(var r,n=2*Math.cos(2*e),i=t.length-1,o=t[i],s=0;--i>=0;)r=n*o-s+t[i],s=o,o=r;return e+r*Math.sin(2*e)}function kt(t,e,r){for(var n,i,o=Math.sin(e),s=Math.cos(e),a=At(r),h=function(t){var e=Math.exp(t);return(e+1/e)/2}(r),u=2*s*h,c=-2*o*a,l=t.length-1,f=t[l],p=0,d=0,y=0;--l>=0;)n=d,i=p,f=u*(d=f)-n-c*(p=y)+t[l],y=c*d-i+u*p;return[(u=o*h)*f-(c=s*a)*y,u*y+c*f]}const Lt={init:function(){if(void 0===this.es||this.es<=0)throw new Error("incorrect elliptical usage");this.x0=void 0!==this.x0?this.x0:0,this.y0=void 0!==this.y0?this.y0:0,this.long0=void 0!==this.long0?this.long0:0,this.lat0=void 0!==this.lat0?this.lat0:0,this.cgb=[],this.cbg=[],this.utg=[],this.gtu=[];var t=this.es/(1+Math.sqrt(1-this.es)),e=t/(2-t),r=e;this.cgb[0]=e*(2+e*(-2/3+e*(e*(116/45+e*(26/45+e*(-2854/675)))-2))),this.cbg[0]=e*(e*(2/3+e*(4/3+e*(-82/45+e*(32/45+e*(4642/4725)))))-2),r*=e,this.cgb[1]=r*(7/3+e*(e*(-227/45+e*(2704/315+e*(2323/945)))-1.6)),this.cbg[1]=r*(5/3+e*(-16/15+e*(-13/9+e*(904/315+e*(-1522/945))))),r*=e,this.cgb[2]=r*(56/15+e*(-136/35+e*(-1262/105+e*(73814/2835)))),this.cbg[2]=r*(-26/15+e*(34/21+e*(1.6+e*(-12686/2835)))),r*=e,this.cgb[3]=r*(4279/630+e*(-332/35+e*(-399572/14175))),this.cbg[3]=r*(1237/630+e*(e*(-24832/14175)-2.4)),r*=e,this.cgb[4]=r*(4174/315+e*(-144838/6237)),this.cbg[4]=r*(-734/315+e*(109598/31185)),r*=e,this.cgb[5]=r*(601676/22275),this.cbg[5]=r*(444337/155925),r=Math.pow(e,2),this.Qn=this.k0/(1+e)*(1+r*(1/4+r*(1/64+r/256))),this.utg[0]=e*(e*(2/3+e*(-37/96+e*(1/360+e*(81/512+e*(-96199/604800)))))-.5),this.gtu[0]=e*(.5+e*(-2/3+e*(5/16+e*(41/180+e*(-127/288+e*(7891/37800)))))),this.utg[1]=r*(-1/48+e*(-1/15+e*(437/1440+e*(-46/105+e*(1118711/3870720))))),this.gtu[1]=r*(13/48+e*(e*(557/1440+e*(281/630+e*(-1983433/1935360)))-.6)),r*=e,this.utg[2]=r*(-17/480+e*(37/840+e*(209/4480+e*(-5569/90720)))),this.gtu[2]=r*(61/240+e*(-103/140+e*(15061/26880+e*(167603/181440)))),r*=e,this.utg[3]=r*(-4397/161280+e*(11/504+e*(830251/7257600))),this.gtu[3]=r*(49561/161280+e*(-179/168+e*(6601661/7257600))),r*=e,this.utg[4]=r*(-4583/161280+e*(108847/3991680)),this.gtu[4]=r*(34729/80640+e*(-3418889/1995840)),r*=e,this.utg[5]=r*(-20648693/638668800),this.gtu[5]=.6650675310896665*r;var n=Dt(this.cbg,this.lat0);this.Zb=-this.Qn*(n+function(t,e){for(var r,n=2*Math.cos(e),i=t.length-1,o=t[i],s=0;--i>=0;)r=n*o-s+t[i],s=o,o=r;return Math.sin(e)*r}(this.gtu,2*n))},forward:function(t){var e=F(t.x-this.long0),r=t.y;r=Dt(this.cbg,r);var n=Math.sin(r),i=Math.cos(r),o=Math.sin(e),s=Math.cos(e);r=Math.atan2(n,s*i),e=Math.atan2(o*i,Ct(n,i*s)),e=function(t){var e=Math.abs(t);return e=function(t){var e=1+t,r=e-1;return 0===r?t:t*Math.log(e)/r}(e*(1+e/(Ct(1,e)+1))),t<0?-e:e}(Math.tan(e));var a,h,u=kt(this.gtu,2*r,2*e);return r+=u[0],e+=u[1],Math.abs(e)<=2.623395162778?(a=this.a*(this.Qn*e)+this.x0,h=this.a*(this.Qn*r+this.Zb)+this.y0):(a=1/0,h=1/0),t.x=a,t.y=h,t},inverse:function(t){var e,r,n=(t.x-this.x0)*(1/this.a),i=(t.y-this.y0)*(1/this.a);if(i=(i-this.Zb)/this.Qn,n/=this.Qn,Math.abs(n)<=2.623395162778){var o=kt(this.utg,2*i,2*n);i+=o[0],n+=o[1],n=Math.atan(At(n));var s=Math.sin(i),a=Math.cos(i),h=Math.sin(n),u=Math.cos(n);i=Math.atan2(s*u,Ct(h,u*a)),e=F((n=Math.atan2(h,u*a))+this.long0),r=Dt(this.cgb,i)}else e=1/0,r=1/0;return t.x=e,t.y=r,t},names:["Extended_Transverse_Mercator","Extended Transverse Mercator","etmerc"]},jt={init:function(){var t=function(t,e){if(void 0===t){if((t=Math.floor(30*(F(e)+Math.PI)/Math.PI)+1)<0)return 0;if(t>60)return 60}return t}(this.zone,this.long0);if(void 0===t)throw new Error("unknown utm zone");this.lat0=0,this.long0=(6*Math.abs(t)-183)*c,this.x0=5e5,this.y0=this.utmSouth?1e7:0,this.k0=.9996,Lt.init.apply(this),this.forward=Lt.forward,this.inverse=Lt.inverse},names:["Universal Transverse Mercator System","utm"],dependsOn:"etmerc"};function Ft(t,e){return Math.pow((1-t)/(1+t),e)}const Rt={init:function(){var t=Math.sin(this.lat0),e=Math.cos(this.lat0);e*=e,this.rc=Math.sqrt(1-this.es)/(1-this.es*t*t),this.C=Math.sqrt(1+this.es*e*e/(1-this.es)),this.phic0=Math.asin(t/this.C),this.ratexp=.5*this.C*this.e,this.K=Math.tan(.5*this.phic0+f)/(Math.pow(Math.tan(.5*this.lat0+f),this.C)*Ft(this.e*t,this.ratexp))},forward:function(t){var e=t.x,r=t.y;return t.y=2*Math.atan(this.K*Math.pow(Math.tan(.5*r+f),this.C)*Ft(this.e*Math.sin(r),this.ratexp))-h,t.x=this.C*e,t},inverse:function(t){for(var e=t.x/this.C,r=t.y,n=Math.pow(Math.tan(.5*r+f)/this.K,1/this.C),i=20;i>0&&(r=2*Math.atan(n*Ft(this.e*Math.sin(t.y),-.5*this.e))-h,!(Math.abs(r-t.y)<1e-14));--i)t.y=r;return i?(t.x=e,t.y=r,t):null},names:["gauss"]},Gt={init:function(){Rt.init.apply(this),this.rc&&(this.sinc0=Math.sin(this.phic0),this.cosc0=Math.cos(this.phic0),this.R2=2*this.rc,this.title||(this.title="Oblique Stereographic Alternative"))},forward:function(t){var e,r,n,i;return t.x=F(t.x-this.long0),Rt.forward.apply(this,[t]),e=Math.sin(t.y),r=Math.cos(t.y),n=Math.cos(t.x),i=this.k0*this.R2/(1+this.sinc0*e+this.cosc0*r*n),t.x=i*r*Math.sin(t.x),t.y=i*(this.cosc0*e-this.sinc0*r*n),t.x=this.a*t.x+this.x0,t.y=this.a*t.y+this.y0,t},inverse:function(t){var e,r,n,i,o;if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,o=Math.sqrt(t.x*t.x+t.y*t.y)){var s=2*Math.atan2(o,this.R2);e=Math.sin(s),r=Math.cos(s),i=Math.asin(r*this.sinc0+t.y*e*this.cosc0/o),n=Math.atan2(t.x*e,o*this.cosc0*r-t.y*this.sinc0*e)}else i=this.phic0,n=0;return t.x=n,t.y=i,Rt.inverse.apply(this,[t]),t.x=F(t.x+this.long0),t},names:["Stereographic_North_Pole","Oblique_Stereographic","Polar_Stereographic","sterea","Oblique Stereographic Alternative","Double_Stereographic"]},Bt={init:function(){this.coslat0=Math.cos(this.lat0),this.sinlat0=Math.sin(this.lat0),this.sphere?1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=u&&(this.k0=.5*(1+j(this.lat0)*Math.sin(this.lat_ts))):(Math.abs(this.coslat0)<=u&&(this.lat0>0?this.con=1:this.con=-1),this.cons=Math.sqrt(Math.pow(1+this.e,1+this.e)*Math.pow(1-this.e,1-this.e)),1===this.k0&&!isNaN(this.lat_ts)&&Math.abs(this.coslat0)<=u&&(this.k0=.5*this.cons*L(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts))/R(this.e,this.con*this.lat_ts,this.con*Math.sin(this.lat_ts))),this.ms1=L(this.e,this.sinlat0,this.coslat0),this.X0=2*Math.atan(this.ssfn_(this.lat0,this.sinlat0,this.e))-h,this.cosX0=Math.cos(this.X0),this.sinX0=Math.sin(this.X0))},forward:function(t){var e,r,n,i,o,s,a=t.x,c=t.y,l=Math.sin(c),f=Math.cos(c),p=F(a-this.long0);return Math.abs(Math.abs(a-this.long0)-Math.PI)<=u&&Math.abs(c+this.lat0)<=u?(t.x=NaN,t.y=NaN,t):this.sphere?(e=2*this.k0/(1+this.sinlat0*l+this.coslat0*f*Math.cos(p)),t.x=this.a*e*f*Math.sin(p)+this.x0,t.y=this.a*e*(this.coslat0*l-this.sinlat0*f*Math.cos(p))+this.y0,t):(r=2*Math.atan(this.ssfn_(c,l,this.e))-h,i=Math.cos(r),n=Math.sin(r),Math.abs(this.coslat0)<=u?(o=R(this.e,c*this.con,this.con*l),s=2*this.a*this.k0*o/this.cons,t.x=this.x0+s*Math.sin(a-this.long0),t.y=this.y0-this.con*s*Math.cos(a-this.long0),t):(Math.abs(this.sinlat0)<u?(e=2*this.a*this.k0/(1+i*Math.cos(p)),t.y=e*n):(e=2*this.a*this.k0*this.ms1/(this.cosX0*(1+this.sinX0*n+this.cosX0*i*Math.cos(p))),t.y=e*(this.cosX0*n-this.sinX0*i*Math.cos(p))+this.y0),t.x=e*i*Math.sin(p)+this.x0,t))},inverse:function(t){var e,r,n,i,o;t.x-=this.x0,t.y-=this.y0;var s=Math.sqrt(t.x*t.x+t.y*t.y);if(this.sphere){var a=2*Math.atan(s/(2*this.a*this.k0));return e=this.long0,r=this.lat0,s<=u?(t.x=e,t.y=r,t):(r=Math.asin(Math.cos(a)*this.sinlat0+t.y*Math.sin(a)*this.coslat0/s),e=Math.abs(this.coslat0)<u?this.lat0>0?F(this.long0+Math.atan2(t.x,-1*t.y)):F(this.long0+Math.atan2(t.x,t.y)):F(this.long0+Math.atan2(t.x*Math.sin(a),s*this.coslat0*Math.cos(a)-t.y*this.sinlat0*Math.sin(a))),t.x=e,t.y=r,t)}if(Math.abs(this.coslat0)<=u){if(s<=u)return r=this.lat0,e=this.long0,t.x=e,t.y=r,t;t.x*=this.con,t.y*=this.con,n=s*this.cons/(2*this.a*this.k0),r=this.con*G(this.e,n),e=this.con*F(this.con*this.long0+Math.atan2(t.x,-1*t.y))}else i=2*Math.atan(s*this.cosX0/(2*this.a*this.k0*this.ms1)),e=this.long0,s<=u?o=this.X0:(o=Math.asin(Math.cos(i)*this.sinX0+t.y*Math.sin(i)*this.cosX0/s),e=F(this.long0+Math.atan2(t.x*Math.sin(i),s*this.cosX0*Math.cos(i)-t.y*this.sinX0*Math.sin(i)))),r=-1*G(this.e,Math.tan(.5*(h+o)));return t.x=e,t.y=r,t},names:["stere","Stereographic_South_Pole","Polar Stereographic (variant B)"],ssfn_:function(t,e,r){return e*=r,Math.tan(.5*(h+t))*Math.pow((1-e)/(1+e),.5*r)}},Ut={init:function(){var t=this.lat0;this.lambda0=this.long0;var e=Math.sin(t),r=this.a,n=1/this.rf,i=2*n-Math.pow(n,2),o=this.e=Math.sqrt(i);this.R=this.k0*r*Math.sqrt(1-i)/(1-i*Math.pow(e,2)),this.alpha=Math.sqrt(1+i/(1-i)*Math.pow(Math.cos(t),4)),this.b0=Math.asin(e/this.alpha);var s=Math.log(Math.tan(Math.PI/4+this.b0/2)),a=Math.log(Math.tan(Math.PI/4+t/2)),h=Math.log((1+o*e)/(1-o*e));this.K=s-this.alpha*a+this.alpha*o/2*h},forward:function(t){var e=Math.log(Math.tan(Math.PI/4-t.y/2)),r=this.e/2*Math.log((1+this.e*Math.sin(t.y))/(1-this.e*Math.sin(t.y))),n=-this.alpha*(e+r)+this.K,i=2*(Math.atan(Math.exp(n))-Math.PI/4),o=this.alpha*(t.x-this.lambda0),s=Math.atan(Math.sin(o)/(Math.sin(this.b0)*Math.tan(i)+Math.cos(this.b0)*Math.cos(o))),a=Math.asin(Math.cos(this.b0)*Math.sin(i)-Math.sin(this.b0)*Math.cos(i)*Math.cos(o));return t.y=this.R/2*Math.log((1+Math.sin(a))/(1-Math.sin(a)))+this.y0,t.x=this.R*s+this.x0,t},inverse:function(t){for(var e=t.x-this.x0,r=t.y-this.y0,n=e/this.R,i=2*(Math.atan(Math.exp(r/this.R))-Math.PI/4),o=Math.asin(Math.cos(this.b0)*Math.sin(i)+Math.sin(this.b0)*Math.cos(i)*Math.cos(n)),s=Math.atan(Math.sin(n)/(Math.cos(this.b0)*Math.cos(n)-Math.sin(this.b0)*Math.tan(i))),a=this.lambda0+s/this.alpha,h=0,u=o,c=-1e3,l=0;Math.abs(u-c)>1e-7;){if(++l>20)return;h=1/this.alpha*(Math.log(Math.tan(Math.PI/4+o/2))-this.K)+this.e*Math.log(Math.tan(Math.PI/4+Math.asin(this.e*Math.sin(u))/2)),c=u,u=2*Math.atan(Math.exp(h))-Math.PI/2}return t.x=a,t.y=u,t},names:["somerc"]},qt={init:function(){this.no_off=this.no_off||!1,this.no_rot=this.no_rot||!1,isNaN(this.k0)&&(this.k0=1);var t=Math.sin(this.lat0),e=Math.cos(this.lat0),r=this.e*t;this.bl=Math.sqrt(1+this.es/(1-this.es)*Math.pow(e,4)),this.al=this.a*this.bl*this.k0*Math.sqrt(1-this.es)/(1-r*r);var n,i,o=R(this.e,this.lat0,t),s=this.bl/e*Math.sqrt((1-this.es)/(1-r*r));if(s*s<1&&(s=1),isNaN(this.longc)){var a=R(this.e,this.lat1,Math.sin(this.lat1)),h=R(this.e,this.lat2,Math.sin(this.lat2));this.lat0>=0?this.el=(s+Math.sqrt(s*s-1))*Math.pow(o,this.bl):this.el=(s-Math.sqrt(s*s-1))*Math.pow(o,this.bl);var u=Math.pow(a,this.bl),c=Math.pow(h,this.bl);i=.5*((n=this.el/u)-1/n);var l=(this.el*this.el-c*u)/(this.el*this.el+c*u),f=(c-u)/(c+u),p=F(this.long1-this.long2);this.long0=.5*(this.long1+this.long2)-Math.atan(l*Math.tan(.5*this.bl*p)/f)/this.bl,this.long0=F(this.long0);var d=F(this.long1-this.long0);this.gamma0=Math.atan(Math.sin(this.bl*d)/i),this.alpha=Math.asin(s*Math.sin(this.gamma0))}else n=this.lat0>=0?s+Math.sqrt(s*s-1):s-Math.sqrt(s*s-1),this.el=n*Math.pow(o,this.bl),i=.5*(n-1/n),this.gamma0=Math.asin(Math.sin(this.alpha)/s),this.long0=this.longc-Math.asin(i*Math.tan(this.gamma0))/this.bl;this.no_off?this.uc=0:this.lat0>=0?this.uc=this.al/this.bl*Math.atan2(Math.sqrt(s*s-1),Math.cos(this.alpha)):this.uc=-1*this.al/this.bl*Math.atan2(Math.sqrt(s*s-1),Math.cos(this.alpha))},forward:function(t){var e,r,n,i=t.x,o=t.y,s=F(i-this.long0);if(Math.abs(Math.abs(o)-h)<=u)n=o>0?-1:1,r=this.al/this.bl*Math.log(Math.tan(f+n*this.gamma0*.5)),e=-1*n*h*this.al/this.bl;else{var a=R(this.e,o,Math.sin(o)),c=this.el/Math.pow(a,this.bl),l=.5*(c-1/c),p=.5*(c+1/c),d=Math.sin(this.bl*s),y=(l*Math.sin(this.gamma0)-d*Math.cos(this.gamma0))/p;r=Math.abs(Math.abs(y)-1)<=u?Number.POSITIVE_INFINITY:.5*this.al*Math.log((1-y)/(1+y))/this.bl,e=Math.abs(Math.cos(this.bl*s))<=u?this.al*this.bl*s:this.al*Math.atan2(l*Math.cos(this.gamma0)+d*Math.sin(this.gamma0),Math.cos(this.bl*s))/this.bl}return this.no_rot?(t.x=this.x0+e,t.y=this.y0+r):(e-=this.uc,t.x=this.x0+r*Math.cos(this.alpha)+e*Math.sin(this.alpha),t.y=this.y0+e*Math.cos(this.alpha)-r*Math.sin(this.alpha)),t},inverse:function(t){var e,r;this.no_rot?(r=t.y-this.y0,e=t.x-this.x0):(r=(t.x-this.x0)*Math.cos(this.alpha)-(t.y-this.y0)*Math.sin(this.alpha),e=(t.y-this.y0)*Math.cos(this.alpha)+(t.x-this.x0)*Math.sin(this.alpha),e+=this.uc);var n=Math.exp(-1*this.bl*r/this.al),i=.5*(n-1/n),o=.5*(n+1/n),s=Math.sin(this.bl*e/this.al),a=(s*Math.cos(this.gamma0)+i*Math.sin(this.gamma0))/o,c=Math.pow(this.el/Math.sqrt((1+a)/(1-a)),1/this.bl);return Math.abs(a-1)<u?(t.x=this.long0,t.y=h):Math.abs(a+1)<u?(t.x=this.long0,t.y=-1*h):(t.y=G(this.e,c),t.x=F(this.long0-Math.atan2(i*Math.cos(this.gamma0)-s*Math.sin(this.gamma0),Math.cos(this.bl*e/this.al))/this.bl)),t},names:["Hotine_Oblique_Mercator","Hotine Oblique Mercator","Hotine_Oblique_Mercator_Azimuth_Natural_Origin","Hotine_Oblique_Mercator_Azimuth_Center","omerc"]},zt={init:function(){if(this.lat2||(this.lat2=this.lat1),this.k0||(this.k0=1),this.x0=this.x0||0,this.y0=this.y0||0,!(Math.abs(this.lat1+this.lat2)<u)){var t=this.b/this.a;this.e=Math.sqrt(1-t*t);var e=Math.sin(this.lat1),r=Math.cos(this.lat1),n=L(this.e,e,r),i=R(this.e,this.lat1,e),o=Math.sin(this.lat2),s=Math.cos(this.lat2),a=L(this.e,o,s),h=R(this.e,this.lat2,o),c=R(this.e,this.lat0,Math.sin(this.lat0));Math.abs(this.lat1-this.lat2)>u?this.ns=Math.log(n/a)/Math.log(i/h):this.ns=e,isNaN(this.ns)&&(this.ns=e),this.f0=n/(this.ns*Math.pow(i,this.ns)),this.rh=this.a*this.f0*Math.pow(c,this.ns),this.title||(this.title="Lambert Conformal Conic")}},forward:function(t){var e=t.x,r=t.y;Math.abs(2*Math.abs(r)-Math.PI)<=u&&(r=j(r)*(h-2e-10));var n,i,o=Math.abs(Math.abs(r)-h);if(o>u)n=R(this.e,r,Math.sin(r)),i=this.a*this.f0*Math.pow(n,this.ns);else{if((o=r*this.ns)<=0)return null;i=0}var s=this.ns*F(e-this.long0);return t.x=this.k0*(i*Math.sin(s))+this.x0,t.y=this.k0*(this.rh-i*Math.cos(s))+this.y0,t},inverse:function(t){var e,r,n,i,o,s=(t.x-this.x0)/this.k0,a=this.rh-(t.y-this.y0)/this.k0;this.ns>0?(e=Math.sqrt(s*s+a*a),r=1):(e=-Math.sqrt(s*s+a*a),r=-1);var u=0;if(0!==e&&(u=Math.atan2(r*s,r*a)),0!==e||this.ns>0){if(r=1/this.ns,n=Math.pow(e/(this.a*this.f0),r),-9999===(i=G(this.e,n)))return null}else i=-h;return o=F(u/this.ns+this.long0),t.x=o,t.y=i,t},names:["Lambert Tangential Conformal Conic Projection","Lambert_Conformal_Conic","Lambert_Conformal_Conic_2SP","lcc"]},Vt={init:function(){this.a=6377397.155,this.es=.006674372230614,this.e=Math.sqrt(this.es),this.lat0||(this.lat0=.863937979737193),this.long0||(this.long0=.4334234309119251),this.k0||(this.k0=.9999),this.s45=.785398163397448,this.s90=2*this.s45,this.fi0=this.lat0,this.e2=this.es,this.e=Math.sqrt(this.e2),this.alfa=Math.sqrt(1+this.e2*Math.pow(Math.cos(this.fi0),4)/(1-this.e2)),this.uq=1.04216856380474,this.u0=Math.asin(Math.sin(this.fi0)/this.alfa),this.g=Math.pow((1+this.e*Math.sin(this.fi0))/(1-this.e*Math.sin(this.fi0)),this.alfa*this.e/2),this.k=Math.tan(this.u0/2+this.s45)/Math.pow(Math.tan(this.fi0/2+this.s45),this.alfa)*this.g,this.k1=this.k0,this.n0=this.a*Math.sqrt(1-this.e2)/(1-this.e2*Math.pow(Math.sin(this.fi0),2)),this.s0=1.37008346281555,this.n=Math.sin(this.s0),this.ro0=this.k1*this.n0/Math.tan(this.s0),this.ad=this.s90-this.uq},forward:function(t){var e,r,n,i,o,s,a,h=t.x,u=t.y,c=F(h-this.long0);return e=Math.pow((1+this.e*Math.sin(u))/(1-this.e*Math.sin(u)),this.alfa*this.e/2),r=2*(Math.atan(this.k*Math.pow(Math.tan(u/2+this.s45),this.alfa)/e)-this.s45),n=-c*this.alfa,i=Math.asin(Math.cos(this.ad)*Math.sin(r)+Math.sin(this.ad)*Math.cos(r)*Math.cos(n)),o=Math.asin(Math.cos(r)*Math.sin(n)/Math.cos(i)),s=this.n*o,a=this.ro0*Math.pow(Math.tan(this.s0/2+this.s45),this.n)/Math.pow(Math.tan(i/2+this.s45),this.n),t.y=a*Math.cos(s)/1,t.x=a*Math.sin(s)/1,this.czech||(t.y*=-1,t.x*=-1),t},inverse:function(t){var e,r,n,i,o,s,a,h=t.x;t.x=t.y,t.y=h,this.czech||(t.y*=-1,t.x*=-1),o=Math.sqrt(t.x*t.x+t.y*t.y),i=Math.atan2(t.y,t.x)/Math.sin(this.s0),n=2*(Math.atan(Math.pow(this.ro0/o,1/this.n)*Math.tan(this.s0/2+this.s45))-this.s45),e=Math.asin(Math.cos(this.ad)*Math.sin(n)-Math.sin(this.ad)*Math.cos(n)*Math.cos(i)),r=Math.asin(Math.cos(n)*Math.sin(i)/Math.cos(e)),t.x=this.long0-r/this.alfa,s=e,a=0;var u=0;do{t.y=2*(Math.atan(Math.pow(this.k,-1/this.alfa)*Math.pow(Math.tan(e/2+this.s45),1/this.alfa)*Math.pow((1+this.e*Math.sin(s))/(1-this.e*Math.sin(s)),this.e/2))-this.s45),Math.abs(s-t.y)<1e-10&&(a=1),s=t.y,u+=1}while(0===a&&u<15);return u>=15?null:t},names:["Krovak","krovak"]};function Wt(t,e,r,n,i){return t*i-e*Math.sin(2*i)+r*Math.sin(4*i)-n*Math.sin(6*i)}function Xt(t){return 1-.25*t*(1+t/16*(3+1.25*t))}function $t(t){return.375*t*(1+.25*t*(1+.46875*t))}function Yt(t){return.05859375*t*t*(1+.75*t)}function Qt(t){return t*t*t*(35/3072)}function Kt(t,e,r){var n=e*r;return t/Math.sqrt(1-n*n)}function Ht(t){return Math.abs(t)<h?t:t-j(t)*Math.PI}function Jt(t,e,r,n,i){var o,s;o=t/e;for(var a=0;a<15;a++)if(o+=s=(t-(e*o-r*Math.sin(2*o)+n*Math.sin(4*o)-i*Math.sin(6*o)))/(e-2*r*Math.cos(2*o)+4*n*Math.cos(4*o)-6*i*Math.cos(6*o)),Math.abs(s)<=1e-10)return o;return NaN}const Zt={init:function(){this.sphere||(this.e0=Xt(this.es),this.e1=$t(this.es),this.e2=Yt(this.es),this.e3=Qt(this.es),this.ml0=this.a*Wt(this.e0,this.e1,this.e2,this.e3,this.lat0))},forward:function(t){var e,r,n=t.x,i=t.y;if(n=F(n-this.long0),this.sphere)e=this.a*Math.asin(Math.cos(i)*Math.sin(n)),r=this.a*(Math.atan2(Math.tan(i),Math.cos(n))-this.lat0);else{var o=Math.sin(i),s=Math.cos(i),a=Kt(this.a,this.e,o),h=Math.tan(i)*Math.tan(i),u=n*Math.cos(i),c=u*u,l=this.es*s*s/(1-this.es);e=a*u*(1-c*h*(1/6-(8-h+8*l)*c/120)),r=this.a*Wt(this.e0,this.e1,this.e2,this.e3,i)-this.ml0+a*o/s*c*(.5+(5-h+6*l)*c/24)}return t.x=e+this.x0,t.y=r+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var e,r,n=t.x/this.a,i=t.y/this.a;if(this.sphere){var o=i+this.lat0;e=Math.asin(Math.sin(o)*Math.cos(n)),r=Math.atan2(Math.tan(n),Math.cos(o))}else{var s=Jt(this.ml0/this.a+i,this.e0,this.e1,this.e2,this.e3);if(Math.abs(Math.abs(s)-h)<=u)return t.x=this.long0,t.y=h,i<0&&(t.y*=-1),t;var a=Kt(this.a,this.e,Math.sin(s)),c=a*a*a/this.a/this.a*(1-this.es),l=Math.pow(Math.tan(s),2),f=n*this.a/a,p=f*f;e=s-a*Math.tan(s)/c*f*f*(.5-(1+3*l)*f*f/24),r=f*(1-p*(l/3+(1+3*l)*l*p/15))/Math.cos(s)}return t.x=F(r+this.long0),t.y=Ht(e),t},names:["Cassini","Cassini_Soldner","cass"]};function te(t,e){var r;return t>1e-7?(1-t*t)*(e/(1-(r=t*e)*r)-.5/t*Math.log((1-r)/(1+r))):2*e}const ee={init:function(){var t,e=Math.abs(this.lat0);if(Math.abs(e-h)<u?this.mode=this.lat0<0?this.S_POLE:this.N_POLE:Math.abs(e)<u?this.mode=this.EQUIT:this.mode=this.OBLIQ,this.es>0)switch(this.qp=te(this.e,1),this.mmf=.5/(1-this.es),this.apa=function(t){var e,r=[];return r[0]=.3333333333333333*t,e=t*t,r[0]+=.17222222222222222*e,r[1]=.06388888888888888*e,e*=t,r[0]+=.10257936507936508*e,r[1]+=.0664021164021164*e,r[2]=.016415012942191543*e,r}(this.es),this.mode){case this.N_POLE:case this.S_POLE:this.dd=1;break;case this.EQUIT:this.rq=Math.sqrt(.5*this.qp),this.dd=1/this.rq,this.xmf=1,this.ymf=.5*this.qp;break;case this.OBLIQ:this.rq=Math.sqrt(.5*this.qp),t=Math.sin(this.lat0),this.sinb1=te(this.e,t)/this.qp,this.cosb1=Math.sqrt(1-this.sinb1*this.sinb1),this.dd=Math.cos(this.lat0)/(Math.sqrt(1-this.es*t*t)*this.rq*this.cosb1),this.ymf=(this.xmf=this.rq)/this.dd,this.xmf*=this.dd}else this.mode===this.OBLIQ&&(this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0))},forward:function(t){var e,r,n,i,o,s,a,c,l,p,d=t.x,y=t.y;if(d=F(d-this.long0),this.sphere){if(o=Math.sin(y),p=Math.cos(y),n=Math.cos(d),this.mode===this.OBLIQ||this.mode===this.EQUIT){if((r=this.mode===this.EQUIT?1+p*n:1+this.sinph0*o+this.cosph0*p*n)<=u)return null;e=(r=Math.sqrt(2/r))*p*Math.sin(d),r*=this.mode===this.EQUIT?o:this.cosph0*o-this.sinph0*p*n}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(n=-n),Math.abs(y+this.lat0)<u)return null;r=f-.5*y,e=(r=2*(this.mode===this.S_POLE?Math.cos(r):Math.sin(r)))*Math.sin(d),r*=n}}else{switch(a=0,c=0,l=0,n=Math.cos(d),i=Math.sin(d),o=Math.sin(y),s=te(this.e,o),this.mode!==this.OBLIQ&&this.mode!==this.EQUIT||(a=s/this.qp,c=Math.sqrt(1-a*a)),this.mode){case this.OBLIQ:l=1+this.sinb1*a+this.cosb1*c*n;break;case this.EQUIT:l=1+c*n;break;case this.N_POLE:l=h+y,s=this.qp-s;break;case this.S_POLE:l=y-h,s=this.qp+s}if(Math.abs(l)<u)return null;switch(this.mode){case this.OBLIQ:case this.EQUIT:l=Math.sqrt(2/l),r=this.mode===this.OBLIQ?this.ymf*l*(this.cosb1*a-this.sinb1*c*n):(l=Math.sqrt(2/(1+c*n)))*a*this.ymf,e=this.xmf*l*c*i;break;case this.N_POLE:case this.S_POLE:s>=0?(e=(l=Math.sqrt(s))*i,r=n*(this.mode===this.S_POLE?l:-l)):e=r=0}}return t.x=this.a*e+this.x0,t.y=this.a*r+this.y0,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var e,r,n,i,o,s,a,c,l,f,p=t.x/this.a,d=t.y/this.a;if(this.sphere){var y,g=0,m=0;if((r=.5*(y=Math.sqrt(p*p+d*d)))>1)return null;switch(r=2*Math.asin(r),this.mode!==this.OBLIQ&&this.mode!==this.EQUIT||(m=Math.sin(r),g=Math.cos(r)),this.mode){case this.EQUIT:r=Math.abs(y)<=u?0:Math.asin(d*m/y),p*=m,d=g*y;break;case this.OBLIQ:r=Math.abs(y)<=u?this.lat0:Math.asin(g*this.sinph0+d*m*this.cosph0/y),p*=m*this.cosph0,d=(g-Math.sin(r)*this.sinph0)*y;break;case this.N_POLE:d=-d,r=h-r;break;case this.S_POLE:r-=h}e=0!==d||this.mode!==this.EQUIT&&this.mode!==this.OBLIQ?Math.atan2(p,d):0}else{if(a=0,this.mode===this.OBLIQ||this.mode===this.EQUIT){if(p/=this.dd,d*=this.dd,(s=Math.sqrt(p*p+d*d))<u)return t.x=this.long0,t.y=this.lat0,t;i=2*Math.asin(.5*s/this.rq),n=Math.cos(i),p*=i=Math.sin(i),this.mode===this.OBLIQ?(a=n*this.sinb1+d*i*this.cosb1/s,o=this.qp*a,d=s*this.cosb1*n-d*this.sinb1*i):(a=d*i/s,o=this.qp*a,d=s*n)}else if(this.mode===this.N_POLE||this.mode===this.S_POLE){if(this.mode===this.N_POLE&&(d=-d),!(o=p*p+d*d))return t.x=this.long0,t.y=this.lat0,t;a=1-o/this.qp,this.mode===this.S_POLE&&(a=-a)}e=Math.atan2(p,d),f=(c=Math.asin(a))+c,r=c+(l=this.apa)[0]*Math.sin(f)+l[1]*Math.sin(f+f)+l[2]*Math.sin(f+f+f)}return t.x=F(this.long0+e),t.y=r,t},names:["Lambert Azimuthal Equal Area","Lambert_Azimuthal_Equal_Area","laea"],S_POLE:1,N_POLE:2,EQUIT:3,OBLIQ:4};function re(t){return Math.abs(t)>1&&(t=t>1?1:-1),Math.asin(t)}const ne={init:function(){Math.abs(this.lat1+this.lat2)<u||(this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e3=Math.sqrt(this.es),this.sin_po=Math.sin(this.lat1),this.cos_po=Math.cos(this.lat1),this.t1=this.sin_po,this.con=this.sin_po,this.ms1=L(this.e3,this.sin_po,this.cos_po),this.qs1=te(this.e3,this.sin_po,this.cos_po),this.sin_po=Math.sin(this.lat2),this.cos_po=Math.cos(this.lat2),this.t2=this.sin_po,this.ms2=L(this.e3,this.sin_po,this.cos_po),this.qs2=te(this.e3,this.sin_po,this.cos_po),this.sin_po=Math.sin(this.lat0),this.cos_po=Math.cos(this.lat0),this.t3=this.sin_po,this.qs0=te(this.e3,this.sin_po,this.cos_po),Math.abs(this.lat1-this.lat2)>u?this.ns0=(this.ms1*this.ms1-this.ms2*this.ms2)/(this.qs2-this.qs1):this.ns0=this.con,this.c=this.ms1*this.ms1+this.ns0*this.qs1,this.rh=this.a*Math.sqrt(this.c-this.ns0*this.qs0)/this.ns0)},forward:function(t){var e=t.x,r=t.y;this.sin_phi=Math.sin(r),this.cos_phi=Math.cos(r);var n=te(this.e3,this.sin_phi,this.cos_phi),i=this.a*Math.sqrt(this.c-this.ns0*n)/this.ns0,o=this.ns0*F(e-this.long0),s=i*Math.sin(o)+this.x0,a=this.rh-i*Math.cos(o)+this.y0;return t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s;return t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns0>=0?(e=Math.sqrt(t.x*t.x+t.y*t.y),n=1):(e=-Math.sqrt(t.x*t.x+t.y*t.y),n=-1),i=0,0!==e&&(i=Math.atan2(n*t.x,n*t.y)),n=e*this.ns0/this.a,this.sphere?s=Math.asin((this.c-n*n)/(2*this.ns0)):(r=(this.c-n*n)/this.ns0,s=this.phi1z(this.e3,r)),o=F(i/this.ns0+this.long0),t.x=o,t.y=s,t},names:["Albers_Conic_Equal_Area","Albers","aea"],phi1z:function(t,e){var r,n,i,o,s=re(.5*e);if(t<u)return s;for(var a=t*t,h=1;h<=25;h++)if(s+=o=.5*(i=1-(n=t*(r=Math.sin(s)))*n)*i/Math.cos(s)*(e/(1-a)-r/i+.5/t*Math.log((1-n)/(1+n))),Math.abs(o)<=1e-7)return s;return null}},ie={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0),this.infinity_dist=1e3*this.a,this.rc=1},forward:function(t){var e,r,n,i,o,s,a,h=t.x,c=t.y;return n=F(h-this.long0),e=Math.sin(c),r=Math.cos(c),i=Math.cos(n),(o=this.sin_p14*e+this.cos_p14*r*i)>0||Math.abs(o)<=u?(s=this.x0+1*this.a*r*Math.sin(n)/o,a=this.y0+1*this.a*(this.cos_p14*e-this.sin_p14*r*i)/o):(s=this.x0+this.infinity_dist*r*Math.sin(n),a=this.y0+this.infinity_dist*(this.cos_p14*e-this.sin_p14*r*i)),t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s;return t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,t.x/=this.k0,t.y/=this.k0,(e=Math.sqrt(t.x*t.x+t.y*t.y))?(i=Math.atan2(e,this.rc),r=Math.sin(i),s=re((n=Math.cos(i))*this.sin_p14+t.y*r*this.cos_p14/e),o=Math.atan2(t.x*r,e*this.cos_p14*n-t.y*this.sin_p14*r),o=F(this.long0+o)):(s=this.phic0,o=0),t.x=o,t.y=s,t},names:["gnom"]},oe={init:function(){this.sphere||(this.k0=L(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)))},forward:function(t){var e,r,n=t.x,i=t.y,o=F(n-this.long0);if(this.sphere)e=this.x0+this.a*o*Math.cos(this.lat_ts),r=this.y0+this.a*Math.sin(i)/Math.cos(this.lat_ts);else{var s=te(this.e,Math.sin(i));e=this.x0+this.a*this.k0*o,r=this.y0+this.a*s*.5/this.k0}return t.x=e,t.y=r,t},inverse:function(t){var e,r;return t.x-=this.x0,t.y-=this.y0,this.sphere?(e=F(this.long0+t.x/this.a/Math.cos(this.lat_ts)),r=Math.asin(t.y/this.a*Math.cos(this.lat_ts))):(r=function(t,e){var r=1-(1-t*t)/(2*t)*Math.log((1-t)/(1+t));if(Math.abs(Math.abs(e)-r)<1e-6)return e<0?-1*h:h;for(var n,i,o,s,a=Math.asin(.5*e),u=0;u<30;u++)if(i=Math.sin(a),o=Math.cos(a),s=t*i,a+=n=Math.pow(1-s*s,2)/(2*o)*(e/(1-t*t)-i/(1-s*s)+.5/t*Math.log((1-s)/(1+s))),Math.abs(n)<=1e-10)return a;return NaN}(this.e,2*t.y*this.k0/this.a),e=F(this.long0+t.x/(this.a*this.k0))),t.x=e,t.y=r,t},names:["cea"]},se={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Equidistant Cylindrical (Plate Carre)",this.rc=Math.cos(this.lat_ts)},forward:function(t){var e=t.x,r=t.y,n=F(e-this.long0),i=Ht(r-this.lat0);return t.x=this.x0+this.a*n*this.rc,t.y=this.y0+this.a*i,t},inverse:function(t){var e=t.x,r=t.y;return t.x=F(this.long0+(e-this.x0)/(this.a*this.rc)),t.y=Ht(this.lat0+(r-this.y0)/this.a),t},names:["Equirectangular","Equidistant_Cylindrical","eqc"]},ae={init:function(){this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Xt(this.es),this.e1=$t(this.es),this.e2=Yt(this.es),this.e3=Qt(this.es),this.ml0=this.a*Wt(this.e0,this.e1,this.e2,this.e3,this.lat0)},forward:function(t){var e,r,n,i=t.x,o=t.y,s=F(i-this.long0);if(n=s*Math.sin(o),this.sphere)Math.abs(o)<=u?(e=this.a*s,r=-1*this.a*this.lat0):(e=this.a*Math.sin(n)/Math.tan(o),r=this.a*(Ht(o-this.lat0)+(1-Math.cos(n))/Math.tan(o)));else if(Math.abs(o)<=u)e=this.a*s,r=-1*this.ml0;else{var a=Kt(this.a,this.e,Math.sin(o))/Math.tan(o);e=a*Math.sin(n),r=this.a*Wt(this.e0,this.e1,this.e2,this.e3,o)-this.ml0+a*(1-Math.cos(n))}return t.x=e+this.x0,t.y=r+this.y0,t},inverse:function(t){var e,r,n,i,o,s,a,h,c;if(n=t.x-this.x0,i=t.y-this.y0,this.sphere)if(Math.abs(i+this.a*this.lat0)<=u)e=F(n/this.a+this.long0),r=0;else{var l;for(s=this.lat0+i/this.a,a=n*n/this.a/this.a+s*s,h=s,o=20;o;--o)if(h+=c=-1*(s*(h*(l=Math.tan(h))+1)-h-.5*(h*h+a)*l)/((h-s)/l-1),Math.abs(c)<=u){r=h;break}e=F(this.long0+Math.asin(n*Math.tan(h)/this.a)/Math.sin(r))}else if(Math.abs(i+this.ml0)<=u)r=0,e=F(this.long0+n/this.a);else{var f,p,d,y,g;for(s=(this.ml0+i)/this.a,a=n*n/this.a/this.a+s*s,h=s,o=20;o;--o)if(g=this.e*Math.sin(h),f=Math.sqrt(1-g*g)*Math.tan(h),p=this.a*Wt(this.e0,this.e1,this.e2,this.e3,h),d=this.e0-2*this.e1*Math.cos(2*h)+4*this.e2*Math.cos(4*h)-6*this.e3*Math.cos(6*h),h-=c=(s*(f*(y=p/this.a)+1)-y-.5*f*(y*y+a))/(this.es*Math.sin(2*h)*(y*y+a-2*s*y)/(4*f)+(s-y)*(f*d-2/Math.sin(2*h))-d),Math.abs(c)<=u){r=h;break}f=Math.sqrt(1-this.es*Math.pow(Math.sin(r),2))*Math.tan(r),e=F(this.long0+Math.asin(n*f/this.a)/Math.sin(r))}return t.x=e,t.y=r,t},names:["Polyconic","poly"]},he={init:function(){this.A=[],this.A[1]=.6399175073,this.A[2]=-.1358797613,this.A[3]=.063294409,this.A[4]=-.02526853,this.A[5]=.0117879,this.A[6]=-.0055161,this.A[7]=.0026906,this.A[8]=-.001333,this.A[9]=67e-5,this.A[10]=-34e-5,this.B_re=[],this.B_im=[],this.B_re[1]=.7557853228,this.B_im[1]=0,this.B_re[2]=.249204646,this.B_im[2]=.003371507,this.B_re[3]=-.001541739,this.B_im[3]=.04105856,this.B_re[4]=-.10162907,this.B_im[4]=.01727609,this.B_re[5]=-.26623489,this.B_im[5]=-.36249218,this.B_re[6]=-.6870983,this.B_im[6]=-1.1651967,this.C_re=[],this.C_im=[],this.C_re[1]=1.3231270439,this.C_im[1]=0,this.C_re[2]=-.577245789,this.C_im[2]=-.007809598,this.C_re[3]=.508307513,this.C_im[3]=-.112208952,this.C_re[4]=-.15094762,this.C_im[4]=.18200602,this.C_re[5]=1.01418179,this.C_im[5]=1.64497696,this.C_re[6]=1.9660549,this.C_im[6]=2.5127645,this.D=[],this.D[1]=1.5627014243,this.D[2]=.5185406398,this.D[3]=-.03333098,this.D[4]=-.1052906,this.D[5]=-.0368594,this.D[6]=.007317,this.D[7]=.0122,this.D[8]=.00394,this.D[9]=-.0013},forward:function(t){var e,r=t.x,n=t.y-this.lat0,i=r-this.long0,o=n/a*1e-5,s=i,h=1,u=0;for(e=1;e<=10;e++)h*=o,u+=this.A[e]*h;var c,l=u,f=s,p=1,d=0,y=0,g=0;for(e=1;e<=6;e++)c=d*l+p*f,p=p*l-d*f,d=c,y=y+this.B_re[e]*p-this.B_im[e]*d,g=g+this.B_im[e]*p+this.B_re[e]*d;return t.x=g*this.a+this.x0,t.y=y*this.a+this.y0,t},inverse:function(t){var e,r,n=t.x,i=t.y,o=n-this.x0,s=(i-this.y0)/this.a,h=o/this.a,u=1,c=0,l=0,f=0;for(e=1;e<=6;e++)r=c*s+u*h,u=u*s-c*h,c=r,l=l+this.C_re[e]*u-this.C_im[e]*c,f=f+this.C_im[e]*u+this.C_re[e]*c;for(var p=0;p<this.iterations;p++){var d,y=l,g=f,m=s,v=h;for(e=2;e<=6;e++)d=g*l+y*f,y=y*l-g*f,g=d,m+=(e-1)*(this.B_re[e]*y-this.B_im[e]*g),v+=(e-1)*(this.B_im[e]*y+this.B_re[e]*g);y=1,g=0;var w=this.B_re[1],b=this.B_im[1];for(e=2;e<=6;e++)d=g*l+y*f,y=y*l-g*f,g=d,w+=e*(this.B_re[e]*y-this.B_im[e]*g),b+=e*(this.B_im[e]*y+this.B_re[e]*g);var M=w*w+b*b;l=(m*w+v*b)/M,f=(v*w-m*b)/M}var _=l,x=f,E=1,S=0;for(e=1;e<=9;e++)E*=_,S+=this.D[e]*E;var O=this.lat0+S*a*1e5,T=this.long0+x;return t.x=T,t.y=O,t},names:["New_Zealand_Map_Grid","nzmg"]},ue={init:function(){},forward:function(t){var e=t.x,r=t.y,n=F(e-this.long0),i=this.x0+this.a*n,o=this.y0+this.a*Math.log(Math.tan(Math.PI/4+r/2.5))*1.25;return t.x=i,t.y=o,t},inverse:function(t){t.x-=this.x0,t.y-=this.y0;var e=F(this.long0+t.x/this.a),r=2.5*(Math.atan(Math.exp(.8*t.y/this.a))-Math.PI/4);return t.x=e,t.y=r,t},names:["Miller_Cylindrical","mill"]},ce={init:function(){this.sphere?(this.n=1,this.m=0,this.es=0,this.C_y=Math.sqrt((this.m+1)/this.n),this.C_x=this.C_y/(this.m+1)):this.en=Tt(this.es)},forward:function(t){var e,r,n=t.x,i=t.y;if(n=F(n-this.long0),this.sphere){if(this.m)for(var o=this.n*Math.sin(i),s=20;s;--s){var a=(this.m*i+Math.sin(i)-o)/(this.m+Math.cos(i));if(i-=a,Math.abs(a)<u)break}else i=1!==this.n?Math.asin(this.n*Math.sin(i)):i;e=this.a*this.C_x*n*(this.m+Math.cos(i)),r=this.a*this.C_y*i}else{var h=Math.sin(i),c=Math.cos(i);r=this.a*It(i,h,c,this.en),e=this.a*n*c/Math.sqrt(1-this.es*h*h)}return t.x=e,t.y=r,t},inverse:function(t){var e,r,n;return t.x-=this.x0,r=t.x/this.a,t.y-=this.y0,e=t.y/this.a,this.sphere?(e/=this.C_y,r/=this.C_x*(this.m+Math.cos(e)),this.m?e=re((this.m*e+Math.sin(e))/this.n):1!==this.n&&(e=re(Math.sin(e)/this.n)),r=F(r+this.long0),e=Ht(e)):(e=Nt(t.y/this.a,this.es,this.en),(n=Math.abs(e))<h?(n=Math.sin(e),r=F(this.long0+t.x*Math.sqrt(1-this.es*n*n)/(this.a*Math.cos(e)))):n-u<h&&(r=this.long0)),t.x=r,t.y=e,t},names:["Sinusoidal","sinu"]},le={init:function(){},forward:function(t){for(var e=t.x,r=t.y,n=F(e-this.long0),i=r,o=Math.PI*Math.sin(r);;){var s=-(i+Math.sin(i)-o)/(1+Math.cos(i));if(i+=s,Math.abs(s)<u)break}i/=2,Math.PI/2-Math.abs(r)<u&&(n=0);var a=.900316316158*this.a*n*Math.cos(i)+this.x0,h=1.4142135623731*this.a*Math.sin(i)+this.y0;return t.x=a,t.y=h,t},inverse:function(t){var e,r;t.x-=this.x0,t.y-=this.y0,r=t.y/(1.4142135623731*this.a),Math.abs(r)>.999999999999&&(r=.999999999999),e=Math.asin(r);var n=F(this.long0+t.x/(.900316316158*this.a*Math.cos(e)));n<-Math.PI&&(n=-Math.PI),n>Math.PI&&(n=Math.PI),r=(2*e+Math.sin(2*e))/Math.PI,Math.abs(r)>1&&(r=1);var i=Math.asin(r);return t.x=n,t.y=i,t},names:["Mollweide","moll"]},fe={init:function(){Math.abs(this.lat1+this.lat2)<u||(this.lat2=this.lat2||this.lat1,this.temp=this.b/this.a,this.es=1-Math.pow(this.temp,2),this.e=Math.sqrt(this.es),this.e0=Xt(this.es),this.e1=$t(this.es),this.e2=Yt(this.es),this.e3=Qt(this.es),this.sinphi=Math.sin(this.lat1),this.cosphi=Math.cos(this.lat1),this.ms1=L(this.e,this.sinphi,this.cosphi),this.ml1=Wt(this.e0,this.e1,this.e2,this.e3,this.lat1),Math.abs(this.lat1-this.lat2)<u?this.ns=this.sinphi:(this.sinphi=Math.sin(this.lat2),this.cosphi=Math.cos(this.lat2),this.ms2=L(this.e,this.sinphi,this.cosphi),this.ml2=Wt(this.e0,this.e1,this.e2,this.e3,this.lat2),this.ns=(this.ms1-this.ms2)/(this.ml2-this.ml1)),this.g=this.ml1+this.ms1/this.ns,this.ml0=Wt(this.e0,this.e1,this.e2,this.e3,this.lat0),this.rh=this.a*(this.g-this.ml0))},forward:function(t){var e,r=t.x,n=t.y;if(this.sphere)e=this.a*(this.g-n);else{var i=Wt(this.e0,this.e1,this.e2,this.e3,n);e=this.a*(this.g-i)}var o=this.ns*F(r-this.long0),s=this.x0+e*Math.sin(o),a=this.y0+this.rh-e*Math.cos(o);return t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i;t.x-=this.x0,t.y=this.rh-t.y+this.y0,this.ns>=0?(r=Math.sqrt(t.x*t.x+t.y*t.y),e=1):(r=-Math.sqrt(t.x*t.x+t.y*t.y),e=-1);var o=0;return 0!==r&&(o=Math.atan2(e*t.x,e*t.y)),this.sphere?(i=F(this.long0+o/this.ns),n=Ht(this.g-r/this.a),t.x=i,t.y=n,t):(n=Jt(this.g-r/this.a,this.e0,this.e1,this.e2,this.e3),i=F(this.long0+o/this.ns),t.x=i,t.y=n,t)},names:["Equidistant_Conic","eqdc"]},pe={init:function(){this.R=this.a},forward:function(t){var e,r,n=t.x,i=t.y,o=F(n-this.long0);Math.abs(i)<=u&&(e=this.x0+this.R*o,r=this.y0);var s=re(2*Math.abs(i/Math.PI));(Math.abs(o)<=u||Math.abs(Math.abs(i)-h)<=u)&&(e=this.x0,r=i>=0?this.y0+Math.PI*this.R*Math.tan(.5*s):this.y0+Math.PI*this.R*-Math.tan(.5*s));var a=.5*Math.abs(Math.PI/o-o/Math.PI),c=a*a,l=Math.sin(s),f=Math.cos(s),p=f/(l+f-1),d=p*p,y=p*(2/l-1),g=y*y,m=Math.PI*this.R*(a*(p-g)+Math.sqrt(c*(p-g)*(p-g)-(g+c)*(d-g)))/(g+c);o<0&&(m=-m),e=this.x0+m;var v=c+p;return m=Math.PI*this.R*(y*v-a*Math.sqrt((g+c)*(c+1)-v*v))/(g+c),r=i>=0?this.y0+m:this.y0-m,t.x=e,t.y=r,t},inverse:function(t){var e,r,n,i,o,s,a,h,c,l,f,p;return t.x-=this.x0,t.y-=this.y0,f=Math.PI*this.R,o=(n=t.x/f)*n+(i=t.y/f)*i,f=3*(i*i/(h=-2*(s=-Math.abs(i)*(1+o))+1+2*i*i+o*o)+(2*(a=s-2*i*i+n*n)*a*a/h/h/h-9*s*a/h/h)/27)/(c=(s-a*a/3/h)/h)/(l=2*Math.sqrt(-c/3)),Math.abs(f)>1&&(f=f>=0?1:-1),p=Math.acos(f)/3,r=t.y>=0?(-l*Math.cos(p+Math.PI/3)-a/3/h)*Math.PI:-(-l*Math.cos(p+Math.PI/3)-a/3/h)*Math.PI,e=Math.abs(n)<u?this.long0:F(this.long0+Math.PI*(o-1+Math.sqrt(1+2*(n*n-i*i)+o*o))/2/n),t.x=e,t.y=r,t},names:["Van_der_Grinten_I","VanDerGrinten","vandg"]},de={init:function(){this.sin_p12=Math.sin(this.lat0),this.cos_p12=Math.cos(this.lat0)},forward:function(t){var e,r,n,i,o,s,a,c,l,f,p,d,y,g,m,v,w,b,M,_,x,E,S=t.x,O=t.y,T=Math.sin(t.y),I=Math.cos(t.y),N=F(S-this.long0);return this.sphere?Math.abs(this.sin_p12-1)<=u?(t.x=this.x0+this.a*(h-O)*Math.sin(N),t.y=this.y0-this.a*(h-O)*Math.cos(N),t):Math.abs(this.sin_p12+1)<=u?(t.x=this.x0+this.a*(h+O)*Math.sin(N),t.y=this.y0+this.a*(h+O)*Math.cos(N),t):(b=this.sin_p12*T+this.cos_p12*I*Math.cos(N),w=(v=Math.acos(b))?v/Math.sin(v):1,t.x=this.x0+this.a*w*I*Math.sin(N),t.y=this.y0+this.a*w*(this.cos_p12*T-this.sin_p12*I*Math.cos(N)),t):(e=Xt(this.es),r=$t(this.es),n=Yt(this.es),i=Qt(this.es),Math.abs(this.sin_p12-1)<=u?(o=this.a*Wt(e,r,n,i,h),s=this.a*Wt(e,r,n,i,O),t.x=this.x0+(o-s)*Math.sin(N),t.y=this.y0-(o-s)*Math.cos(N),t):Math.abs(this.sin_p12+1)<=u?(o=this.a*Wt(e,r,n,i,h),s=this.a*Wt(e,r,n,i,O),t.x=this.x0+(o+s)*Math.sin(N),t.y=this.y0+(o+s)*Math.cos(N),t):(a=T/I,c=Kt(this.a,this.e,this.sin_p12),l=Kt(this.a,this.e,T),f=Math.atan((1-this.es)*a+this.es*c*this.sin_p12/(l*I)),M=0===(p=Math.atan2(Math.sin(N),this.cos_p12*Math.tan(f)-this.sin_p12*Math.cos(N)))?Math.asin(this.cos_p12*Math.sin(f)-this.sin_p12*Math.cos(f)):Math.abs(Math.abs(p)-Math.PI)<=u?-Math.asin(this.cos_p12*Math.sin(f)-this.sin_p12*Math.cos(f)):Math.asin(Math.sin(N)*Math.cos(f)/Math.sin(p)),d=this.e*this.sin_p12/Math.sqrt(1-this.es),v=c*M*(1-(_=M*M)*(m=(y=this.e*this.cos_p12*Math.cos(p)/Math.sqrt(1-this.es))*y)*(1-m)/6+(x=_*M)/8*(g=d*y)*(1-2*m)+(E=x*M)/120*(m*(4-7*m)-3*d*d*(1-7*m))-E*M/48*g),t.x=this.x0+v*Math.sin(p),t.y=this.y0+v*Math.cos(p),t))},inverse:function(t){var e,r,n,i,o,s,a,c,l,f,p,d,y,g,m,v,w,b,M,_,x,E,S;if(t.x-=this.x0,t.y-=this.y0,this.sphere){if((e=Math.sqrt(t.x*t.x+t.y*t.y))>2*h*this.a)return;return r=e/this.a,n=Math.sin(r),i=Math.cos(r),o=this.long0,Math.abs(e)<=u?s=this.lat0:(s=re(i*this.sin_p12+t.y*n*this.cos_p12/e),a=Math.abs(this.lat0)-h,o=Math.abs(a)<=u?this.lat0>=0?F(this.long0+Math.atan2(t.x,-t.y)):F(this.long0-Math.atan2(-t.x,t.y)):F(this.long0+Math.atan2(t.x*n,e*this.cos_p12*i-t.y*this.sin_p12*n))),t.x=o,t.y=s,t}return c=Xt(this.es),l=$t(this.es),f=Yt(this.es),p=Qt(this.es),Math.abs(this.sin_p12-1)<=u?(s=Jt(((d=this.a*Wt(c,l,f,p,h))-(e=Math.sqrt(t.x*t.x+t.y*t.y)))/this.a,c,l,f,p),o=F(this.long0+Math.atan2(t.x,-1*t.y)),t.x=o,t.y=s,t):Math.abs(this.sin_p12+1)<=u?(d=this.a*Wt(c,l,f,p,h),s=Jt(((e=Math.sqrt(t.x*t.x+t.y*t.y))-d)/this.a,c,l,f,p),o=F(this.long0+Math.atan2(t.x,t.y)),t.x=o,t.y=s,t):(e=Math.sqrt(t.x*t.x+t.y*t.y),m=Math.atan2(t.x,t.y),y=Kt(this.a,this.e,this.sin_p12),v=Math.cos(m),b=-(w=this.e*this.cos_p12*v)*w/(1-this.es),M=3*this.es*(1-b)*this.sin_p12*this.cos_p12*v/(1-this.es),E=1-b*(x=(_=e/y)-b*(1+b)*Math.pow(_,3)/6-M*(1+3*b)*Math.pow(_,4)/24)*x/2-_*x*x*x/6,g=Math.asin(this.sin_p12*Math.cos(x)+this.cos_p12*Math.sin(x)*v),o=F(this.long0+Math.asin(Math.sin(m)*Math.sin(x)/Math.cos(g))),S=Math.sin(g),s=Math.atan2((S-this.es*E*this.sin_p12)*Math.tan(g),S*(1-this.es)),t.x=o,t.y=s,t)},names:["Azimuthal_Equidistant","aeqd"]},ye={init:function(){this.sin_p14=Math.sin(this.lat0),this.cos_p14=Math.cos(this.lat0)},forward:function(t){var e,r,n,i,o,s,a,h=t.x,c=t.y;return n=F(h-this.long0),e=Math.sin(c),r=Math.cos(c),i=Math.cos(n),((o=this.sin_p14*e+this.cos_p14*r*i)>0||Math.abs(o)<=u)&&(s=1*this.a*r*Math.sin(n),a=this.y0+1*this.a*(this.cos_p14*e-this.sin_p14*r*i)),t.x=s,t.y=a,t},inverse:function(t){var e,r,n,i,o,s,a;return t.x-=this.x0,t.y-=this.y0,r=re((e=Math.sqrt(t.x*t.x+t.y*t.y))/this.a),n=Math.sin(r),i=Math.cos(r),s=this.long0,Math.abs(e)<=u?(a=this.lat0,t.x=s,t.y=a,t):(a=re(i*this.sin_p14+t.y*n*this.cos_p14/e),o=Math.abs(this.lat0)-h,Math.abs(o)<=u?(s=this.lat0>=0?F(this.long0+Math.atan2(t.x,-t.y)):F(this.long0-Math.atan2(-t.x,t.y)),t.x=s,t.y=a,t):(s=F(this.long0+Math.atan2(t.x*n,e*this.cos_p14*i-t.y*this.sin_p14*n)),t.x=s,t.y=a,t))},names:["ortho"]};function ge(t,e,r,n){var i;return t<u?(n.value=1,i=0):(i=Math.atan2(e,r),Math.abs(i)<=f?n.value=1:i>f&&i<=h+f?(n.value=2,i-=h):i>h+f||i<=-(h+f)?(n.value=3,i=i>=0?i-d:i+d):(n.value=4,i+=h)),i}function me(t,e){var r=t+e;return r<-d?r+=p:r>+d&&(r-=p),r}const ve={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.lat0=this.lat0||0,this.long0=this.long0||0,this.lat_ts=this.lat_ts||0,this.title=this.title||"Quadrilateralized Spherical Cube",this.lat0>=h-f/2?this.face=5:this.lat0<=-(h-f/2)?this.face=6:Math.abs(this.long0)<=f?this.face=1:Math.abs(this.long0)<=h+f?this.face=this.long0>0?2:4:this.face=3,0!==this.es&&(this.one_minus_f=1-(this.a-this.b)/this.a,this.one_minus_f_squared=this.one_minus_f*this.one_minus_f)},forward:function(t){var e,r,n,i,o,s,a={x:0,y:0},u={value:0};if(t.x-=this.long0,e=0!==this.es?Math.atan(this.one_minus_f_squared*Math.tan(t.y)):t.y,r=t.x,5===this.face)i=h-e,r>=f&&r<=h+f?(u.value=1,n=r-h):r>h+f||r<=-(h+f)?(u.value=2,n=r>0?r-d:r+d):r>-(h+f)&&r<=-f?(u.value=3,n=r+h):(u.value=4,n=r);else if(6===this.face)i=h+e,r>=f&&r<=h+f?(u.value=1,n=-r+h):r<f&&r>=-f?(u.value=2,n=-r):r<-f&&r>=-(h+f)?(u.value=3,n=-r-h):(u.value=4,n=r>0?-r+d:-r-d);else{var c,l,p,y,g,m;2===this.face?r=me(r,+h):3===this.face?r=me(r,+d):4===this.face&&(r=me(r,-h)),y=Math.sin(e),g=Math.cos(e),m=Math.sin(r),c=g*Math.cos(r),l=g*m,p=y,1===this.face?n=ge(i=Math.acos(c),p,l,u):2===this.face?n=ge(i=Math.acos(l),p,-c,u):3===this.face?n=ge(i=Math.acos(-c),p,-l,u):4===this.face?n=ge(i=Math.acos(-l),p,c,u):(i=n=0,u.value=1)}return s=Math.atan(12/d*(n+Math.acos(Math.sin(n)*Math.cos(f))-h)),o=Math.sqrt((1-Math.cos(i))/(Math.cos(s)*Math.cos(s))/(1-Math.cos(Math.atan(1/Math.cos(n))))),2===u.value?s+=h:3===u.value?s+=d:4===u.value&&(s+=1.5*d),a.x=o*Math.cos(s),a.y=o*Math.sin(s),a.x=a.x*this.a+this.x0,a.y=a.y*this.a+this.y0,t.x=a.x,t.y=a.y,t},inverse:function(t){var e,r,n,i,o,s,a,u,c,l,f,p,y={lam:0,phi:0},g={value:0};if(t.x=(t.x-this.x0)/this.a,t.y=(t.y-this.y0)/this.a,r=Math.atan(Math.sqrt(t.x*t.x+t.y*t.y)),e=Math.atan2(t.y,t.x),t.x>=0&&t.x>=Math.abs(t.y)?g.value=1:t.y>=0&&t.y>=Math.abs(t.x)?(g.value=2,e-=h):t.x<0&&-t.x>=Math.abs(t.y)?(g.value=3,e=e<0?e+d:e-d):(g.value=4,e+=h),c=d/12*Math.tan(e),o=Math.sin(c)/(Math.cos(c)-1/Math.sqrt(2)),s=Math.atan(o),(a=1-(n=Math.cos(e))*n*(i=Math.tan(r))*i*(1-Math.cos(Math.atan(1/Math.cos(s)))))<-1?a=-1:a>1&&(a=1),5===this.face)u=Math.acos(a),y.phi=h-u,1===g.value?y.lam=s+h:2===g.value?y.lam=s<0?s+d:s-d:3===g.value?y.lam=s-h:y.lam=s;else if(6===this.face)u=Math.acos(a),y.phi=u-h,1===g.value?y.lam=-s+h:2===g.value?y.lam=-s:3===g.value?y.lam=-s-h:y.lam=s<0?-s-d:-s+d;else{var m,v,w;c=(m=a)*m,v=(c+=(w=c>=1?0:Math.sqrt(1-c)*Math.sin(s))*w)>=1?0:Math.sqrt(1-c),2===g.value?(c=v,v=-w,w=c):3===g.value?(v=-v,w=-w):4===g.value&&(c=v,v=w,w=-c),2===this.face?(c=m,m=-v,v=c):3===this.face?(m=-m,v=-v):4===this.face&&(c=m,m=v,v=-c),y.phi=Math.acos(-w)-h,y.lam=Math.atan2(v,m),2===this.face?y.lam=me(y.lam,-h):3===this.face?y.lam=me(y.lam,-d):4===this.face&&(y.lam=me(y.lam,+h))}return 0!==this.es&&(l=y.phi<0?1:0,f=Math.tan(y.phi),p=this.b/Math.sqrt(f*f+this.one_minus_f_squared),y.phi=Math.atan(Math.sqrt(this.a*this.a-p*p)/(this.one_minus_f*p)),l&&(y.phi=-y.phi)),y.lam+=this.long0,t.x=y.lam,t.y=y.phi,t},names:["Quadrilateralized Spherical Cube","Quadrilateralized_Spherical_Cube","qsc"]};var we=[[1,22199e-21,-715515e-10,31103e-10],[.9986,-482243e-9,-24897e-9,-13309e-10],[.9954,-83103e-8,-448605e-10,-9.86701e-7],[.99,-.00135364,-59661e-9,36777e-10],[.9822,-.00167442,-449547e-11,-572411e-11],[.973,-.00214868,-903571e-10,1.8736e-8],[.96,-.00305085,-900761e-10,164917e-11],[.9427,-.00382792,-653386e-10,-26154e-10],[.9216,-.00467746,-10457e-8,481243e-11],[.8962,-.00536223,-323831e-10,-543432e-11],[.8679,-.00609363,-113898e-9,332484e-11],[.835,-.00698325,-640253e-10,9.34959e-7],[.7986,-.00755338,-500009e-10,9.35324e-7],[.7597,-.00798324,-35971e-9,-227626e-11],[.7186,-.00851367,-701149e-10,-86303e-10],[.6732,-.00986209,-199569e-9,191974e-10],[.6213,-.010418,883923e-10,624051e-11],[.5722,-.00906601,182e-6,624051e-11],[.5322,-.00677797,275608e-9,624051e-11]],be=[[-520417e-23,.0124,121431e-23,-845284e-16],[.062,.0124,-1.26793e-9,4.22642e-10],[.124,.0124,5.07171e-9,-1.60604e-9],[.186,.0123999,-1.90189e-8,6.00152e-9],[.248,.0124002,7.10039e-8,-2.24e-8],[.31,.0123992,-2.64997e-7,8.35986e-8],[.372,.0124029,9.88983e-7,-3.11994e-7],[.434,.0123893,-369093e-11,-4.35621e-7],[.4958,.0123198,-102252e-10,-3.45523e-7],[.5571,.0121916,-154081e-10,-5.82288e-7],[.6176,.0119938,-241424e-10,-5.25327e-7],[.6769,.011713,-320223e-10,-5.16405e-7],[.7346,.0113541,-397684e-10,-6.09052e-7],[.7903,.0109107,-489042e-10,-104739e-11],[.8435,.0103431,-64615e-9,-1.40374e-9],[.8936,.00969686,-64636e-9,-8547e-9],[.9394,.00840947,-192841e-9,-42106e-10],[.9761,.00616527,-256e-6,-42106e-10],[1,.00328947,-319159e-9,-42106e-10]],Me=.8487,_e=1.3523,xe=function(t,e){return t[0]+e*(t[1]+e*(t[2]+e*t[3]))};const Ee={init:function(){this.x0=this.x0||0,this.y0=this.y0||0,this.long0=this.long0||0,this.es=0,this.title=this.title||"Robinson"},forward:function(t){var e=F(t.x-this.long0),r=Math.abs(t.y),n=Math.floor(11.459155902616464*r);n<0?n=0:n>=18&&(n=17);var i={x:xe(we[n],r=l*(r-.08726646259971647*n))*e,y:xe(be[n],r)};return t.y<0&&(i.y=-i.y),i.x=i.x*this.a*Me+this.x0,i.y=i.y*this.a*_e+this.y0,i},inverse:function(t){var e={x:(t.x-this.x0)/(this.a*Me),y:Math.abs(t.y-this.y0)/(this.a*_e)};if(e.y>=1)e.x/=we[18][0],e.y=t.y<0?-h:h;else{var r=Math.floor(18*e.y);for(r<0?r=0:r>=18&&(r=17);;)if(be[r][0]>e.y)--r;else{if(!(be[r+1][0]<=e.y))break;++r}var n=be[r],i=5*(e.y-n[0])/(be[r+1][0]-n[0]);i=function(t,e,r,n){for(var i=e;n;--n){var o=t(i);if(i-=o,Math.abs(o)<1e-10)break}return i}((function(t){return(xe(n,t)-e.y)/function(t,e){return t[1]+e*(2*t[2]+3*e*t[3])}(n,t)}),i,0,100),e.x/=xe(we[r],i),e.y=(5*r+i)*c,t.y<0&&(e.y=-e.y)}return e.x=F(e.x+this.long0),e},names:["Robinson","robin"]},Se={init:function(){this.name="geocent"},forward:function(t){return H(t,this.es,this.a)},inverse:function(t){return J(t,this.es,this.a,this.b)},names:["Geocentric","geocentric","geocent","Geocent"]};var Oe={h:{def:1e5,num:!0},azi:{def:0,num:!0,degrees:!0},tilt:{def:0,num:!0,degrees:!0},long0:{def:0,num:!0},lat0:{def:0,num:!0}};const Te={init:function(){if(Object.keys(Oe).forEach(function(t){if(void 0===this[t])this[t]=Oe[t].def;else{if(Oe[t].num&&isNaN(this[t]))throw new Error("Invalid parameter value, must be numeric "+t+" = "+this[t]);Oe[t].num&&(this[t]=parseFloat(this[t]))}Oe[t].degrees&&(this[t]=this[t]*c)}.bind(this)),Math.abs(Math.abs(this.lat0)-h)<u?this.mode=this.lat0<0?1:0:Math.abs(this.lat0)<u?this.mode=2:(this.mode=3,this.sinph0=Math.sin(this.lat0),this.cosph0=Math.cos(this.lat0)),this.pn1=this.h/this.a,this.pn1<=0||this.pn1>1e10)throw new Error("Invalid height");this.p=1+this.pn1,this.rp=1/this.p,this.h1=1/this.pn1,this.pfact=(this.p+1)*this.h1,this.es=0;var t=this.tilt,e=this.azi;this.cg=Math.cos(e),this.sg=Math.sin(e),this.cw=Math.cos(t),this.sw=Math.sin(t)},forward:function(t){t.x-=this.long0;var e,r,n,i,o=Math.sin(t.y),s=Math.cos(t.y),a=Math.cos(t.x);switch(this.mode){case 3:r=this.sinph0*o+this.cosph0*s*a;break;case 2:r=s*a;break;case 1:r=-o;break;case 0:r=o}switch(e=(r=this.pn1/(this.p-r))*s*Math.sin(t.x),this.mode){case 3:r*=this.cosph0*o-this.sinph0*s*a;break;case 2:r*=o;break;case 0:r*=-s*a;break;case 1:r*=s*a}return i=1/((n=r*this.cg+e*this.sg)*this.sw*this.h1+this.cw),e=(e*this.cg-r*this.sg)*this.cw*i,r=n*i,t.x=e*this.a,t.y=r*this.a,t},inverse:function(t){t.x/=this.a,t.y/=this.a;var e,r,n,i={x:t.x,y:t.y};n=1/(this.pn1-t.y*this.sw),e=this.pn1*t.x*n,r=this.pn1*t.y*this.cw*n,t.x=e*this.cg+r*this.sg,t.y=r*this.cg-e*this.sg;var o=Ct(t.x,t.y);if(Math.abs(o)<u)i.x=0,i.y=t.y;else{var s,a;switch(a=1-o*o*this.pfact,a=(this.p-Math.sqrt(a))/(this.pn1/o+o/this.pn1),s=Math.sqrt(1-a*a),this.mode){case 3:i.y=Math.asin(s*this.sinph0+t.y*a*this.cosph0/o),t.y=(s-this.sinph0*Math.sin(i.y))*o,t.x*=a*this.cosph0;break;case 2:i.y=Math.asin(t.y*a/o),t.y=s*o,t.x*=a;break;case 0:i.y=Math.asin(s),t.y=-t.y;break;case 1:i.y=-Math.asin(s)}i.x=Math.atan2(t.x,t.y)}return t.x=i.x+this.long0,t.y=i.y,t},names:["Tilted_Perspective","tpers"]};var Ie;at.defaultDatum="WGS84",at.Proj=K,at.WGS84=new at.Proj("WGS84"),at.Point=xt,at.toPoint=et,at.defs=A,at.transform=nt,at.mgrs=pt,at.version="__VERSION__",(Ie=at).Proj.projections.add(Pt),Ie.Proj.projections.add(Lt),Ie.Proj.projections.add(jt),Ie.Proj.projections.add(Gt),Ie.Proj.projections.add(Bt),Ie.Proj.projections.add(Ut),Ie.Proj.projections.add(qt),Ie.Proj.projections.add(zt),Ie.Proj.projections.add(Vt),Ie.Proj.projections.add(Zt),Ie.Proj.projections.add(ee),Ie.Proj.projections.add(ne),Ie.Proj.projections.add(ie),Ie.Proj.projections.add(oe),Ie.Proj.projections.add(se),Ie.Proj.projections.add(ae),Ie.Proj.projections.add(he),Ie.Proj.projections.add(ue),Ie.Proj.projections.add(ce),Ie.Proj.projections.add(le),Ie.Proj.projections.add(fe),Ie.Proj.projections.add(pe),Ie.Proj.projections.add(de),Ie.Proj.projections.add(ye),Ie.Proj.projections.add(ve),Ie.Proj.projections.add(Ee),Ie.Proj.projections.add(Se),Ie.Proj.projections.add(Te);const Ne=at,Pe=[{title:"RGF93 (Lambert-93)",url:"http://spatialreference.org/ref/epsg/rgf93-lambert-93/",code:"EPSG:2154",proj4:"+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC50)",code:"EPSG:3950",url:"http://spatialreference.org/ref/epsg/3950/",proj4:"+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC49)",code:"EPSG:3949",url:"http://spatialreference.org/ref/epsg/3949/",proj4:"+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC48)",code:"EPSG:3948",url:"http://spatialreference.org/ref/epsg/3948/",proj4:"+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC47)",code:"EPSG:3947",url:"http://spatialreference.org/ref/epsg/3947/",proj4:"+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC46)",code:"EPSG:3946",url:"http://spatialreference.org/ref/epsg/3946/",proj4:"+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC45)",code:"EPSG:3945",url:"http://spatialreference.org/ref/epsg/3945/",proj4:"+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC44)",code:"EPSG:3944",url:"http://spatialreference.org/ref/epsg/3944/",proj4:"+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC43)",code:"EPSG:3943",url:"http://spatialreference.org/ref/epsg/3943/",proj4:"+proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"RGF93 (CC42)",code:"EPSG:3942",url:"http://spatialreference.org/ref/epsg/3942/",proj4:"+proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"},{title:"NTF (Lambert II)",code:"EPSG:27572",url:"http://spatialreference.org/ref/epsg/27572/",proj4:"+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},{title:"NTF (Lambert III)",code:"EPSG:27573",url:"http://spatialreference.org/ref/epsg/27573/",proj4:"+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs"},{title:"NTF",code:"EPSG:4275",url:"http://spatialreference.org/ref/epsg/4275/",proj4:"+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs"},{title:"WGS84",code:"EPSG:4326",url:"https://epsg.io/4326",proj4:"+proj=longlat +datum=WGS84 +no_defs"}].map((t=>[t.code,t.proj4]));Ne.defs(Pe),function(t,e){const r=6356752.314245179,n=t*t,i=r*r;Math.sqrt((n-i)/n),Math.sqrt((n-i)/i)}(6378137);var Ae=r(2023),Ce=r.n(Ae);function De(t,...e){if(0===e.length)throw new Error("You must at least provide one property.");const r=e.shift(),n=t.hasOwnProperty(r);return 0===e.length?n?t[r]:void 0:void 0!==t[r]?De(t[r],...e):void 0}function ke(t){return t.replace(/\r?\n?\t?/g,"").split(" ")}const Le={};function je(t,e){if(t in Le)return Le[t];const r=Ce()(e);return Le[t]=r,r}function Fe(t){return t*Math.PI/180}function Re(t){return 180*t/Math.PI}function Ge(t,e,r){const n=Fe(t[1]),i=Fe(t[0]),o=e/6378137,s=Math.asin(Math.sin(n)*Math.cos(o)+Math.cos(n)*Math.sin(o)*Math.cos(r));return[Re(i+Math.atan2(Math.sin(r)*Math.sin(o)*Math.cos(n),Math.cos(o)-Math.sin(n)*Math.sin(s))),Re(s)]}var Be=r(4650);function Ue(t,e,r){if(null!==t)for(var n,i,o,s,a,h,u,c,l=0,f=0,p=t.type,d="FeatureCollection"===p,y="Feature"===p,g=d?t.features.length:1,m=0;m<g;m++){a=(c=!!(u=d?t.features[m].geometry:y?t.geometry:t)&&"GeometryCollection"===u.type)?u.geometries.length:1;for(var v=0;v<a;v++){var w=0,b=0;if(null!==(s=c?u.geometries[v]:u)){h=s.coordinates;var M=s.type;switch(l=!r||"Polygon"!==M&&"MultiPolygon"!==M?0:1,M){case null:break;case"Point":if(!1===e(h,f,m,w,b))return!1;f++,w++;break;case"LineString":case"MultiPoint":for(n=0;n<h.length;n++){if(!1===e(h[n],f,m,w,b))return!1;f++,"MultiPoint"===M&&w++}"LineString"===M&&w++;break;case"Polygon":case"MultiLineString":for(n=0;n<h.length;n++){for(i=0;i<h[n].length-l;i++){if(!1===e(h[n][i],f,m,w,b))return!1;f++}"MultiLineString"===M&&w++,"Polygon"===M&&b++}"Polygon"===M&&w++;break;case"MultiPolygon":for(n=0;n<h.length;n++){for("MultiPolygon"===M&&(b=0),i=0;i<h[n].length;i++){for(o=0;o<h[n][i].length-l;o++){if(!1===e(h[n][i][o],f,m,w,b))return!1;f++}b++}w++}break;case"GeometryCollection":for(n=0;n<s.geometries.length;n++)if(!1===Ue(s.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function qe(t){var e={type:"Feature"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"properties":case"geometry":return;default:e[r]=t[r]}})),e.properties=ze(t.properties),e.geometry=Ve(t.geometry),e}function ze(t){var e={};return t?(Object.keys(t).forEach((function(r){var n=t[r];"object"==typeof n?null===n?e[r]=null:n.length?e[r]=n.map((function(t){return t})):e[r]=ze(n):e[r]=n})),e):e}function Ve(t){var e={type:t.type};return t.bbox&&(e.bbox=t.bbox),"GeometryCollection"===t.type?(e.geometries=t.geometries.map((function(t){return Ve(t)})),e):(e.coordinates=We(t.coordinates),e)}function We(t){return"object"!=typeof t[0]?t.slice():t.map((function(t){return We(t)}))}var Xe=6371008.8,$e={meters:Xe,metres:Xe,millimeters:6371008800,millimetres:6371008800,centimeters:637100880,centimetres:637100880,kilometers:6371.0088,kilometres:6371.0088,miles:3958.761333810546,nauticalmiles:3440.069546436285,inches:250826616.45599997,yards:5825721.287490856,feet:20902260.511392,radians:1,degrees:57.22891354143274};function Ye(t,e,r){if(!Je(r=r||{}))throw new Error("options is invalid");var n=r.bbox,i=r.id;if(void 0===t)throw new Error("geometry is required");if(e&&e.constructor!==Object)throw new Error("properties must be an Object");n&&function(t){if(!t)throw new Error("bbox is required");if(!Array.isArray(t))throw new Error("bbox must be an Array");if(4!==t.length&&6!==t.length)throw new Error("bbox must be an Array of 4 or 6 numbers");t.forEach((function(t){if(!He(t))throw new Error("bbox must only contain numbers")}))}(n),i&&function(t){if(!t)throw new Error("id is required");if(-1===["string","number"].indexOf(typeof t))throw new Error("id must be a number or a string")}(i);var o={type:"Feature"};return i&&(o.id=i),n&&(o.bbox=n),o.properties=e||{},o.geometry=t,o}function Qe(t){if(null==t)throw new Error("degrees is required");return t%360*Math.PI/180}function Ke(t,e,r){if(null==t)throw new Error("length is required");if(!(t>=0))throw new Error("length must be a positive number");return function(t,e){if(null==t)throw new Error("radians is required");if(e&&"string"!=typeof e)throw new Error("units must be a string");var r=$e[e||"kilometers"];if(!r)throw new Error(e+" units is invalid");return t*r}(function(t,e){if(null==t)throw new Error("distance is required");if(e&&"string"!=typeof e)throw new Error("units must be a string");var r=$e[e||"kilometers"];if(!r)throw new Error(e+" units is invalid");return t/r}(t,e),r||"kilometers")}function He(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)}function Je(t){return!!t&&t.constructor===Object}const Ze=function(t,e,r,n){if(!Je(n=n||{}))throw new Error("options is invalid");var i=n.units,o=n.properties;if(!t)throw new Error("origin is required");if(null==e)throw new Error("distance is required");if(null==r)throw new Error("bearing is required");if(!(e>=0))throw new Error("distance must be greater than 0");var s=Ke(e,i,"meters"),a=function(t){if(!t)throw new Error("coord is required");if("Feature"===t.type&&null!==t.geometry&&"Point"===t.geometry.type)return t.geometry.coordinates;if("Point"===t.type)return t.coordinates;if(Array.isArray(t)&&t.length>=2&&void 0===t[0].length&&void 0===t[1].length)return t;throw new Error("coord must be GeoJSON Point or an Array of numbers")}(t),h=function(t,e,r,n){var i=e/(n=void 0===n?Xe:Number(n)),o=t[0]*Math.PI/180,s=Qe(t[1]),a=Qe(r),h=i*Math.cos(a),u=s+h;Math.abs(u)>Math.PI/2&&(u=u>0?Math.PI-u:-Math.PI-u);var c=Math.log(Math.tan(u/2+Math.PI/4)/Math.tan(s/2+Math.PI/4)),l=Math.abs(c)>1e-11?h/c:Math.cos(s);return[(180*(o+i*Math.sin(a)/l)/Math.PI+540)%360-180,180*u/Math.PI]}(a,s,r);return h[0]+=h[0]-a[0]>180?-360:a[0]-h[0]>180?360:0,function(t,e,r){if(!t)throw new Error("coordinates is required");if(!Array.isArray(t))throw new Error("coordinates must be an Array");if(t.length<2)throw new Error("coordinates must be at least 2 numbers long");if(!He(t[0])||!He(t[1]))throw new Error("coordinates must contain numbers");return Ye({type:"Point",coordinates:t},e,r)}(h,o)},tr=function(t,e,r,n){if(!(i=n=n||{})||i.constructor!==Object)throw new Error("options is invalid");var i,o=n.units,s=n.zTranslation,a=n.mutate;if(!t)throw new Error("geojson is required");if(null==e||isNaN(e))throw new Error("distance is required");if(s&&"number"!=typeof s&&isNaN(s))throw new Error("zTranslation is not a number");if(s=void 0!==s?s:0,0===e&&0===s)return t;if(null==r||isNaN(r))throw new Error("direction is required");return e<0&&(e=-e,r=-r),!1!==a&&void 0!==a||(t=function(t){if(!t)throw new Error("geojson is required");switch(t.type){case"Feature":return qe(t);case"FeatureCollection":return function(t){var e={type:"FeatureCollection"};return Object.keys(t).forEach((function(r){switch(r){case"type":case"features":return;default:e[r]=t[r]}})),e.features=t.features.map((function(t){return qe(t)})),e}(t);case"Point":case"LineString":case"Polygon":case"MultiPoint":case"MultiLineString":case"MultiPolygon":case"GeometryCollection":return Ve(t);default:throw new Error("unknown GeoJSON type")}}(t)),Ue(t,(function(t){var n=function(t){if(!t)throw new Error("coords is required");if("Feature"===t.type&&null!==t.geometry)return t.geometry.coordinates;if(t.coordinates)return t.coordinates;if(Array.isArray(t))return t;throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")}(Ze(t,e,r,{units:o}));t[0]=n[0],t[1]=n[1],s&&3===t.length&&(t[2]+=s)})),t};var er=r(3470);const rr="auto_detect",nr="surfaces",ir="parcels",or="pipe_networks",sr="cg_points",ar={[ir]:function(t,e,r){const n=De(t,"LandXML","CgPoints",0,"CgPoint"),i=De(t,"LandXML","Parcels",0,"Parcel"),s={},a=[];for(let t in n){const r=n[t],i=r.$.name.replace(/ /g,"");let o=ke(r._).map((t=>parseFloat(t)));o=[o[1],o[0],o[2]],o=Ne(e,"WGS84",o),s[i]=o}for(let t in i){var h=i[t];if(void 0!==h.CoordGeom){let t=[];var u=null,c=h.CoordGeom[0].Line;for(let e in c){var l=c[e].Start[0].$.pntRef;c[e].End[0].$.pntRef,s[l]&&(t.push(s[l]),u||(u=s[l]))}if(t.length>2){t.push(u),t=[t];var f={name:h.$.name,landxmlClass:h.$.class,landxmlState:h.$.state,landxmlParcelType:h.$.parcelType,landxmlType:"parcel",landxmlColor:je(`parcel-${name}`,r.colorOpts)};a.push((0,o.polygon)(t,f))}}}return a},[nr]:function(t,e,r){const n=[],i=De(t,"LandXML","Surfaces");return i?(i.forEach((t=>{const i=t.$||{},s=i.name||"",a=i.desc,h=De(t,"Surface");Array.isArray(h)&&h.forEach((t=>{const i=s?s+" - "+t.$.name:t.$.name,h={name:i,description:a?a+" - "+t.$.desc:t.$.desc,landxmlType:"surface",landxmlColor:je(`surface-${i}`,r.colorOpts)};let u=function(t,e,r,n){const i=De(t,"SourceData",0,"Boundaries",0,"Boundary");if(!i)return[];const s=[];return i.forEach((t=>{const n=ke(De(t,"PntList3D",0)).map((t=>parseFloat(t))),i=[];for(let t=0;t<n.length;t+=3){let r=[n[t+1],n[t]];r=Ne(e,"WGS84",r),i.push(r)}i.push(i[0]),s.push((0,o.polygon)([i],r))})),s}(t,e,h);if(0!==u.length)n.push(...u);else{u=function(t,e,r,n){const i=De(t,"Definition",0,"Pnts",0,"P"),s=De(t,"Definition",0,"Faces",0,"F"),a={};i.forEach((t=>{let r=ke(t._).map((t=>parseFloat(t)));r=[r[1],r[0],r[2]],r=Ne(e,"WGS84",r);const n=t.$.id;a[n]={name:t.$.name,coords:r}}));const h=[];return s.forEach((t=>{const e=ke(t),n=[];e.forEach((t=>{const e=a[t];n.push(e.coords)})),n.push(a[e[0]].coords),h.push((0,o.polygon)([n],r))})),[...h]}(t,e,h);let r=u[0];console.error("Applying union to %s faces (%d faces to merge)",r.properties.name,u.length);for(let t=1;t<u.length-1;t++){const e=u[t+1];if(!e)return;try{r=(0,Be.Z)(r,e)}catch(r){console.error("--\x3e Could not apply union to %s (#%d)",e.properties.name,t+1)}}r.properties=h,n.push(r)}}))})),n):n},[or]:function(t,e,r){const n=[],i=De(t,"LandXML","PipeNetworks");return i?(i.forEach((t=>{const i=De(t,"PipeNetwork");if(!Array.isArray(i))return;let s={};i.forEach((t=>{const i={name:t.$.name,description:t.$.desc},a=function(t,e,r,n){const i={},s=De(t,"Structs",0,"Struct");if(Array.isArray(s))return s.forEach((t=>{const s=De(t,"Center",0),a=De(t,"RectStruct",0),h=De(t,"CircStruct",0),u=De(t,"InletStruct",0),c=De(t,"OutletStruct",0),l=De(t,"Connection",0),f=void 0!==a?"rect":void 0!==h?"circ":void 0!==u?"inlet":void 0!==c?"outlet":void 0!==l?"connection":null,p=r.name?r.name+" - "+t.$.name:t.$.name,d=Object.assign({},r,{name:p,description:r.description?r.description+" - "+t.$.desc:t.$.desc,landxmlType:"pipe_network_struct",landxmlStruct:f,landxmlElevRim:"elevRim"in t.$?parseFloat(t.$.elevRim):void 0,landxmlElevSump:"elevSump"in t.$?parseFloat(t.$.elevSump):void 0,landxmlColor:je(`pipe-network-struct-${p}`,n.colorOpts)});if(void 0!==h){const t=h.$;"diameter"in t&&(d.landxmlDiameter=parseFloat(t.diameter)),"thickness"in t&&(d.landxmlThickness=parseFloat(t.thickness))}if(void 0!==a){const t=a.$;"thickness"in t&&(d.landxmlThickness=parseFloat(t.thickness)),"length"in t&&(d.landxmlLength=parseFloat(t.length)),"width"in t&&(d.landxmlWidth=parseFloat(t.width))}const y=ke(s).map((t=>parseFloat(t)));let g,m=[y[1],y[0],y[2]];if(m=Ne(e,"WGS84",m),d.landxmlCenterLongitude=m[0],d.landxmlCenterLatitude=m[1],d.landxmlCenterAltitude=m[2],g=a?function(t,e,r,n,i){const s=(0,o.point)(t),a=(0,er.Z)(s);tr(a,r/2,270,{units:n,mutate:!0}),tr(a,e/2,0,{units:n,mutate:!0});const h=(0,er.Z)(s);tr(h,r/2,90,{units:n,mutate:!0}),tr(h,e/2,0,{units:n,mutate:!0});const u=(0,er.Z)(s);tr(u,r/2,90,{units:n,mutate:!0}),tr(u,e/2,180,{units:n,mutate:!0});const c=(0,er.Z)(s);tr(c,r/2,270,{units:n,mutate:!0}),tr(c,e/2,180,{units:n,mutate:!0});const l=[a.geometry.coordinates,h.geometry.coordinates,u.geometry.coordinates,c.geometry.coordinates,a.geometry.coordinates];return(0,o.polygon)([l],i)}(m,d.length?d.length:1,d.width?d.width:1,"meters",d):function(t,e,r,n){const i=[],s=[];for(var a=0;a<128;++a)i.push(...Ge(t,e,2*Math.PI*a/128));i.push(i[0],i[1]);for(let t=0,e=0;e<i.length;e+=2)s[t++]=i.slice(e,e+2);return(0,o.polygon)([s.reverse()],n)}(m,(d.landxmlDiameter?d.landxmlDiameter:1)/2,0,d),!g)throw new Error("Unsupported struct type");i[t.$.name]={geometry:g,center:m}})),i}(t,e,i,r);n.push(...Object.values(a).map((t=>t.geometry))),Object.assign(s,a)})),i.forEach((t=>{const e={name:t.$.name,description:t.$.desc,landxmlType:"pipe_network_pipe"},i=function(t,e,r,n,i){const s=[],a=De(t,"Pipes",0,"Pipe");if(Array.isArray(a))return a.forEach((t=>{const r=De(t,"CircPipe",0),a=n.name?n.name+" - "+t.$.name:t.$.name,h=Object.assign({},n,{name:a,description:n.description?n.description+" - "+t.$.desc:t.$.desc,landxmlColor:je(`pipe-network-pipe-${a}`,i.colorOpts)});if(void 0!==r){const t=r.$;"diameter"in t&&(h.landxmlDiameter=parseFloat(t.diameter)),"thickness"in t&&(h.landxmlThickness=parseFloat(t.thickness)),"material"in t&&(h.landxmlMaterial=t.material)}const u=e[t.$.refStart],c=e[t.$.refEnd];if(!u)throw new Error(`Cannot find pipe "${h.name}" refStart "${t.$.refStart}" !`);if(!c)throw new Error(`Cannot find pipe "${h.name}" refEnd "${t.$.refEnd}" !`);const l=(0,o.lineString)([u.center,c.center],h);s.push(l)})),s}(t,s,0,e,r);n.push(...i)}))})),n):n},[sr]:function(t,e,r){const n=[],i=De(t,"LandXML","CgPoints");return i?(i.forEach((t=>{const i=t.$||{},o=i.name||"",s=i.description||"",a=De(t,"CgPoint");Array.isArray(a)&&a.forEach((t=>{const i=o?o+" - "+t.$.name:t.$.name,a={name:i,description:s?s+" - "+t.$.desc:t.$.desc,landxmlType:"cg_point",landxmlColor:je(`point-${i}`,r.colorOpts)},h=function(t,e,r){let n=ke(t._).map((t=>parseFloat(t)));return n=[n[1],n[0],n[2]],n=Ne(e,"WGS84",n),{type:"Feature",geometry:{type:"Point",coordinates:[...n]},properties:{...r,landxmlAltitude:n[2]}}}(t,e,a);n.push(h)}))})),n):n}};class hr{constructor(){this.defaultOptions={projection:rr,enabledConverters:[nr,ir,or,sr],parser:{normalize:!0},proj4Defs:[["EPSG:28355","+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"],...Pe],featureMapper:(t,e)=>t,colorOpts:{hue:"blue",luminosity:"dark",seed:1}}}toGeoJSON(t,e={}){const r=Object.assign({},this.defaultOptions.parser,e.parser),n=new(i().Parser)(r);return this.configureProj4(e.proj4Defs),new Promise(((r,i)=>{n.parseString(t,((t,n)=>{if(t)return i(t);let o;try{o=this.convertToGeoJSON(n,e)}catch(t){return i(t)}return r(o)}))}))}convertToGeoJSON(t,e={}){const r=Object.assign({},this.defaultOptions,e),n=this.getLandXMLProjection(t,r.projection||this.defaultOptions.projection);if(!n)throw new Error("Source projection can not be found !");const i=Array.isArray(e.enabledConverters)?e.enabledConverters:this.defaultOptions.enabledConverters;let a=[];return i.forEach((e=>{if(!(e in ar))return;console.log("Executing convert '%s'...",e);const i=ar[e](t,n,r);a.push(...i)})),"function"==typeof r.featureMapper&&(a=a.map((t=>r.featureMapper(t,r)))),a.sort(((t,e)=>(0,s.Z)(t)>(0,s.Z)(e)?-1:(0,s.Z)(t)<(0,s.Z)(e)?1:0)),(0,o.featureCollection)(a)}configureProj4(t){const e=this.defaultOptions.proj4Defs.slice(0);Array.isArray(t)&&e.push(...t),Ne.defs(e)}getLandXMLProjection(t,e){if(e!==rr)return e;let r=null;return r||(r=this.findUTMProjection(t)),r}findUTMProjection(t){const e=De(t,"LandXML","CoordinateSystem",0,"$","datum"),r=De(t,"LandXML","CgPoints",0,"$","zoneNumber");let n=null;return e&&r&&(n=`+proj=utm +zone=${r} +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs `),n}}},306:function(t,e){(function(){"use strict";e.stripBOM=function(t){return"\ufeff"===t[0]?t.substring(1):t}}).call(this)},4096:function(t,e,r){(function(){"use strict";var t,n,i,o,s,a={}.hasOwnProperty;t=r(9374),n=r(8381).defaults,o=function(t){return"string"==typeof t&&(t.indexOf("&")>=0||t.indexOf(">")>=0||t.indexOf("<")>=0)},s=function(t){return"<![CDATA["+i(t)+"]]>"},i=function(t){return t.replace("]]>","]]]]><![CDATA[>")},e.Builder=function(){function e(t){var e,r,i;for(e in this.options={},r=n[.2])a.call(r,e)&&(i=r[e],this.options[e]=i);for(e in t)a.call(t,e)&&(i=t[e],this.options[e]=i)}return e.prototype.buildObject=function(e){var r,i,h,u,c,l;return r=this.options.attrkey,i=this.options.charkey,1===Object.keys(e).length&&this.options.rootName===n[.2].rootName?e=e[c=Object.keys(e)[0]]:c=this.options.rootName,l=this,h=function(t,e){var n,u,c,f,p,d;if("object"!=typeof e)l.options.cdata&&o(e)?t.raw(s(e)):t.txt(e);else if(Array.isArray(e)){for(f in e)if(a.call(e,f))for(p in u=e[f])c=u[p],t=h(t.ele(p),c).up()}else for(p in e)if(a.call(e,p))if(u=e[p],p===r){if("object"==typeof u)for(n in u)d=u[n],t=t.att(n,d)}else if(p===i)t=l.options.cdata&&o(u)?t.raw(s(u)):t.txt(u);else if(Array.isArray(u))for(f in u)a.call(u,f)&&(t="string"==typeof(c=u[f])?l.options.cdata&&o(c)?t.ele(p).raw(s(c)).up():t.ele(p,c).up():h(t.ele(p),c).up());else"object"==typeof u?t=h(t.ele(p),u).up():"string"==typeof u&&l.options.cdata&&o(u)?t=t.ele(p).raw(s(u)).up():(null==u&&(u=""),t=t.ele(p,u.toString()).up());return t},u=t.create(c,this.options.xmldec,this.options.doctype,{headless:this.options.headless,allowSurrogateChars:this.options.allowSurrogateChars}),h(u,e).end(this.options.renderOpts)},e}()}).call(this)},8381:function(t,e){(function(){e.defaults={.1:{explicitCharkey:!1,trim:!0,normalize:!0,normalizeTags:!1,attrkey:"@",charkey:"#",explicitArray:!1,ignoreAttrs:!1,mergeAttrs:!1,explicitRoot:!1,validator:null,xmlns:!1,explicitChildren:!1,childkey:"@@",charsAsChildren:!1,includeWhiteChars:!1,async:!1,strict:!0,attrNameProcessors:null,attrValueProcessors:null,tagNameProcessors:null,valueProcessors:null,emptyTag:""},.2:{explicitCharkey:!1,trim:!1,normalize:!1,normalizeTags:!1,attrkey:"$",charkey:"_",explicitArray:!0,ignoreAttrs:!1,mergeAttrs:!1,explicitRoot:!0,validator:null,xmlns:!1,explicitChildren:!1,preserveChildrenOrder:!1,childkey:"$$",charsAsChildren:!1,includeWhiteChars:!1,async:!1,strict:!0,attrNameProcessors:null,attrValueProcessors:null,tagNameProcessors:null,valueProcessors:null,rootName:"root",xmldec:{version:"1.0",encoding:"UTF-8",standalone:!0},doctype:null,renderOpts:{pretty:!0,indent:" ",newline:"\n"},headless:!1,chunkSize:1e4,emptyTag:"",cdata:!1}}}).call(this)},9082:function(t,e,r){(function(){"use strict";var t,n,i,o,s,a,h,u,c=function(t,e){return function(){return t.apply(e,arguments)}},l={}.hasOwnProperty;h=r(6099),i=r(7187),t=r(306),a=r(406),u=r(5663).setImmediate,n=r(8381).defaults,o=function(t){return"object"==typeof t&&null!=t&&0===Object.keys(t).length},s=function(t,e,r){var n,i;for(n=0,i=t.length;n<i;n++)e=(0,t[n])(e,r);return e},e.Parser=function(r){function i(t){var r,i,o;if(this.parseStringPromise=c(this.parseStringPromise,this),this.parseString=c(this.parseString,this),this.reset=c(this.reset,this),this.assignOrPush=c(this.assignOrPush,this),this.processAsync=c(this.processAsync,this),!(this instanceof e.Parser))return new e.Parser(t);for(r in this.options={},i=n[.2])l.call(i,r)&&(o=i[r],this.options[r]=o);for(r in t)l.call(t,r)&&(o=t[r],this.options[r]=o);this.options.xmlns&&(this.options.xmlnskey=this.options.attrkey+"ns"),this.options.normalizeTags&&(this.options.tagNameProcessors||(this.options.tagNameProcessors=[]),this.options.tagNameProcessors.unshift(a.normalize)),this.reset()}return function(t,e){for(var r in e)l.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(i,r),i.prototype.processAsync=function(){var t,e;try{return this.remaining.length<=this.options.chunkSize?(t=this.remaining,this.remaining="",this.saxParser=this.saxParser.write(t),this.saxParser.close()):(t=this.remaining.substr(0,this.options.chunkSize),this.remaining=this.remaining.substr(this.options.chunkSize,this.remaining.length),this.saxParser=this.saxParser.write(t),u(this.processAsync))}catch(t){if(e=t,!this.saxParser.errThrown)return this.saxParser.errThrown=!0,this.emit(e)}},i.prototype.assignOrPush=function(t,e,r){return e in t?(t[e]instanceof Array||(t[e]=[t[e]]),t[e].push(r)):this.options.explicitArray?t[e]=[r]:t[e]=r},i.prototype.reset=function(){var t,e,r,n,i;return this.removeAllListeners(),this.saxParser=h.parser(this.options.strict,{trim:!1,normalize:!1,xmlns:this.options.xmlns}),this.saxParser.errThrown=!1,this.saxParser.onerror=(i=this,function(t){if(i.saxParser.resume(),!i.saxParser.errThrown)return i.saxParser.errThrown=!0,i.emit("error",t)}),this.saxParser.onend=function(t){return function(){if(!t.saxParser.ended)return t.saxParser.ended=!0,t.emit("end",t.resultObject)}}(this),this.saxParser.ended=!1,this.EXPLICIT_CHARKEY=this.options.explicitCharkey,this.resultObject=null,n=[],t=this.options.attrkey,e=this.options.charkey,this.saxParser.onopentag=function(r){return function(i){var o,a,h,u,c;if((h={})[e]="",!r.options.ignoreAttrs)for(o in c=i.attributes)l.call(c,o)&&(t in h||r.options.mergeAttrs||(h[t]={}),a=r.options.attrValueProcessors?s(r.options.attrValueProcessors,i.attributes[o],o):i.attributes[o],u=r.options.attrNameProcessors?s(r.options.attrNameProcessors,o):o,r.options.mergeAttrs?r.assignOrPush(h,u,a):h[t][u]=a);return h["#name"]=r.options.tagNameProcessors?s(r.options.tagNameProcessors,i.name):i.name,r.options.xmlns&&(h[r.options.xmlnskey]={uri:i.uri,local:i.local}),n.push(h)}}(this),this.saxParser.onclosetag=function(t){return function(){var r,i,a,h,u,c,f,p,d,y;if(c=n.pop(),u=c["#name"],t.options.explicitChildren&&t.options.preserveChildrenOrder||delete c["#name"],!0===c.cdata&&(r=c.cdata,delete c.cdata),d=n[n.length-1],c[e].match(/^\s*$/)&&!r?(i=c[e],delete c[e]):(t.options.trim&&(c[e]=c[e].trim()),t.options.normalize&&(c[e]=c[e].replace(/\s{2,}/g," ").trim()),c[e]=t.options.valueProcessors?s(t.options.valueProcessors,c[e],u):c[e],1===Object.keys(c).length&&e in c&&!t.EXPLICIT_CHARKEY&&(c=c[e])),o(c)&&(c=""!==t.options.emptyTag?t.options.emptyTag:i),null!=t.options.validator&&(y="/"+function(){var t,e,r;for(r=[],t=0,e=n.length;t<e;t++)h=n[t],r.push(h["#name"]);return r}().concat(u).join("/"),function(){var e;try{c=t.options.validator(y,d&&d[u],c)}catch(r){return e=r,t.emit("error",e)}}()),t.options.explicitChildren&&!t.options.mergeAttrs&&"object"==typeof c)if(t.options.preserveChildrenOrder){if(d){for(a in d[t.options.childkey]=d[t.options.childkey]||[],f={},c)l.call(c,a)&&(f[a]=c[a]);d[t.options.childkey].push(f),delete c["#name"],1===Object.keys(c).length&&e in c&&!t.EXPLICIT_CHARKEY&&(c=c[e])}}else h={},t.options.attrkey in c&&(h[t.options.attrkey]=c[t.options.attrkey],delete c[t.options.attrkey]),!t.options.charsAsChildren&&t.options.charkey in c&&(h[t.options.charkey]=c[t.options.charkey],delete c[t.options.charkey]),Object.getOwnPropertyNames(c).length>0&&(h[t.options.childkey]=c),c=h;return n.length>0?t.assignOrPush(d,u,c):(t.options.explicitRoot&&(p=c,(c={})[u]=p),t.resultObject=c,t.saxParser.ended=!0,t.emit("end",t.resultObject))}}(this),r=function(t){return function(r){var i,o;if(o=n[n.length-1])return o[e]+=r,t.options.explicitChildren&&t.options.preserveChildrenOrder&&t.options.charsAsChildren&&(t.options.includeWhiteChars||""!==r.replace(/\\n/g,"").trim())&&(o[t.options.childkey]=o[t.options.childkey]||[],(i={"#name":"__text__"})[e]=r,t.options.normalize&&(i[e]=i[e].replace(/\s{2,}/g," ").trim()),o[t.options.childkey].push(i)),o}}(this),this.saxParser.ontext=r,this.saxParser.oncdata=function(t){var e;if(e=r(t))return e.cdata=!0}},i.prototype.parseString=function(e,r){var n;null!=r&&"function"==typeof r&&(this.on("end",(function(t){return this.reset(),r(null,t)})),this.on("error",(function(t){return this.reset(),r(t)})));try{return""===(e=e.toString()).trim()?(this.emit("end",null),!0):(e=t.stripBOM(e),this.options.async?(this.remaining=e,u(this.processAsync),this.saxParser):this.saxParser.write(e).close())}catch(t){if(n=t,!this.saxParser.errThrown&&!this.saxParser.ended)return this.emit("error",n),this.saxParser.errThrown=!0;if(this.saxParser.ended)throw n}},i.prototype.parseStringPromise=function(t){return new Promise((e=this,function(r,n){return e.parseString(t,(function(t,e){return t?n(t):r(e)}))}));var e},i}(i),e.parseString=function(t,r,n){var i,o;return null!=n?("function"==typeof n&&(i=n),"object"==typeof r&&(o=r)):("function"==typeof r&&(i=r),o={}),new e.Parser(o).parseString(t,i)},e.parseStringPromise=function(t,r){var n;return"object"==typeof r&&(n=r),new e.Parser(n).parseStringPromise(t)}}).call(this)},406:function(t,e){(function(){"use strict";var t;t=new RegExp(/(?!xmlns)^.*:/),e.normalize=function(t){return t.toLowerCase()},e.firstCharLowerCase=function(t){return t.charAt(0).toLowerCase()+t.slice(1)},e.stripPrefix=function(e){return e.replace(t,"")},e.parseNumbers=function(t){return isNaN(t)||(t=t%1==0?parseInt(t,10):parseFloat(t)),t},e.parseBooleans=function(t){return/^(?:true|false)$/i.test(t)&&(t="true"===t.toLowerCase()),t}}).call(this)},5055:function(t,e,r){(function(){"use strict";var t,n,i,o,s={}.hasOwnProperty;n=r(8381),t=r(4096),i=r(9082),o=r(406),e.defaults=n.defaults,e.processors=o,e.ValidationError=function(t){function e(t){this.message=t}return function(t,e){for(var r in e)s.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(e,Error),e}(),e.Builder=t.Builder,e.Parser=i.Parser,e.parseString=i.parseString,e.parseStringPromise=i.parseStringPromise}).call(this)},8154:function(t){(function(){t.exports={Disconnected:1,Preceding:2,Following:4,Contains:8,ContainedBy:16,ImplementationSpecific:32}}).call(this)},8745:function(t){(function(){t.exports={Element:1,Attribute:2,Text:3,CData:4,EntityReference:5,EntityDeclaration:6,ProcessingInstruction:7,Comment:8,Document:9,DocType:10,DocumentFragment:11,NotationDeclaration:12,Declaration:201,Raw:202,AttributeDeclaration:203,ElementDeclaration:204,Dummy:205}}).call(this)},8676:function(t){(function(){var e,r,n,i,o,s,a,h=[].slice,u={}.hasOwnProperty;e=function(){var t,e,r,n,i,s;if(s=arguments[0],i=2<=arguments.length?h.call(arguments,1):[],o(Object.assign))Object.assign.apply(null,arguments);else for(t=0,r=i.length;t<r;t++)if(null!=(n=i[t]))for(e in n)u.call(n,e)&&(s[e]=n[e]);return s},o=function(t){return!!t&&"[object Function]"===Object.prototype.toString.call(t)},s=function(t){var e;return!!t&&("function"==(e=typeof t)||"object"===e)},n=function(t){return o(Array.isArray)?Array.isArray(t):"[object Array]"===Object.prototype.toString.call(t)},i=function(t){var e;if(n(t))return!t.length;for(e in t)if(u.call(t,e))return!1;return!0},a=function(t){var e,r;return s(t)&&(r=Object.getPrototypeOf(t))&&(e=r.constructor)&&"function"==typeof e&&e instanceof e&&Function.prototype.toString.call(e)===Function.prototype.toString.call(Object)},r=function(t){return o(t.valueOf)?t.valueOf():t},t.exports.assign=e,t.exports.isFunction=o,t.exports.isObject=s,t.exports.isArray=n,t.exports.isEmpty=i,t.exports.isPlainObject=a,t.exports.getValue=r}).call(this)},6530:function(t){(function(){t.exports={None:0,OpenTag:1,InsideTag:2,CloseTag:3}}).call(this)},7490:function(t,e,r){(function(){var e;e=r(8745),r(630),t.exports=function(){function t(t,r,n){if(this.parent=t,this.parent&&(this.options=this.parent.options,this.stringify=this.parent.stringify),null==r)throw new Error("Missing attribute name. "+this.debugInfo(r));this.name=this.stringify.name(r),this.value=this.stringify.attValue(n),this.type=e.Attribute,this.isId=!1,this.schemaTypeInfo=null}return Object.defineProperty(t.prototype,"nodeType",{get:function(){return this.type}}),Object.defineProperty(t.prototype,"ownerElement",{get:function(){return this.parent}}),Object.defineProperty(t.prototype,"textContent",{get:function(){return this.value},set:function(t){return this.value=t||""}}),Object.defineProperty(t.prototype,"namespaceURI",{get:function(){return""}}),Object.defineProperty(t.prototype,"prefix",{get:function(){return""}}),Object.defineProperty(t.prototype,"localName",{get:function(){return this.name}}),Object.defineProperty(t.prototype,"specified",{get:function(){return!0}}),t.prototype.clone=function(){return Object.create(this)},t.prototype.toString=function(t){return this.options.writer.attribute(this,this.options.writer.filterOptions(t))},t.prototype.debugInfo=function(t){return null==(t=t||this.name)?"parent: <"+this.parent.name+">":"attribute: {"+t+"}, parent: <"+this.parent.name+">"},t.prototype.isEqualNode=function(t){return t.namespaceURI===this.namespaceURI&&t.prefix===this.prefix&&t.localName===this.localName&&t.value===this.value},t}()}).call(this)},9877:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(8745),n=r(4356),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing CDATA text. "+this.debugInfo());this.name="#cdata-section",this.type=e.CData,this.value=this.stringify.cdata(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.cdata(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},4356:function(t,e,r){(function(){var e,n={}.hasOwnProperty;e=r(630),t.exports=function(t){function e(t){e.__super__.constructor.call(this,t),this.value=""}return function(t,e){for(var r in e)n.call(e,r)&&(t[r]=e[r]);function i(){this.constructor=t}i.prototype=e.prototype,t.prototype=new i,t.__super__=e.prototype}(e,t),Object.defineProperty(e.prototype,"data",{get:function(){return this.value},set:function(t){return this.value=t||""}}),Object.defineProperty(e.prototype,"length",{get:function(){return this.value.length}}),Object.defineProperty(e.prototype,"textContent",{get:function(){return this.value},set:function(t){return this.value=t||""}}),e.prototype.clone=function(){return Object.create(this)},e.prototype.substringData=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.appendData=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.insertData=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.deleteData=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.replaceData=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},e.prototype.isEqualNode=function(t){return!!e.__super__.isEqualNode.apply(this,arguments).isEqualNode(t)&&t.data===this.data},e}(e)}).call(this)},2374:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(8745),n=r(4356),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing comment text. "+this.debugInfo());this.name="#comment",this.type=e.Comment,this.value=this.stringify.comment(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.comment(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},1829:function(t,e,r){(function(){var e,n;e=r(7885),n=r(4929),t.exports=function(){function t(){this.defaultParams={"canonical-form":!1,"cdata-sections":!1,comments:!1,"datatype-normalization":!1,"element-content-whitespace":!0,entities:!0,"error-handler":new e,infoset:!0,"validate-if-schema":!1,namespaces:!0,"namespace-declarations":!0,"normalize-characters":!1,"schema-location":"","schema-type":"","split-cdata-sections":!0,validate:!1,"well-formed":!0},this.params=Object.create(this.defaultParams)}return Object.defineProperty(t.prototype,"parameterNames",{get:function(){return new n(Object.keys(this.defaultParams))}}),t.prototype.getParameter=function(t){return this.params.hasOwnProperty(t)?this.params[t]:null},t.prototype.canSetParameter=function(t,e){return!0},t.prototype.setParameter=function(t,e){return null!=e?this.params[t]=e:delete this.params[t]},t}()}).call(this)},7885:function(t){(function(){t.exports=function(){function t(){}return t.prototype.handleError=function(t){throw new Error(t)},t}()}).call(this)},4016:function(t){(function(){t.exports=function(){function t(){}return t.prototype.hasFeature=function(t,e){return!0},t.prototype.createDocumentType=function(t,e,r){throw new Error("This DOM method is not implemented.")},t.prototype.createDocument=function(t,e,r){throw new Error("This DOM method is not implemented.")},t.prototype.createHTMLDocument=function(t){throw new Error("This DOM method is not implemented.")},t.prototype.getFeature=function(t,e){throw new Error("This DOM method is not implemented.")},t}()}).call(this)},4929:function(t){(function(){t.exports=function(){function t(t){this.arr=t||[]}return Object.defineProperty(t.prototype,"length",{get:function(){return this.arr.length}}),t.prototype.item=function(t){return this.arr[t]||null},t.prototype.contains=function(t){return-1!==this.arr.indexOf(t)},t}()}).call(this)},4131:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(630),e=r(8745),t.exports=function(t){function r(t,n,i,o,s,a){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing DTD element name. "+this.debugInfo());if(null==i)throw new Error("Missing DTD attribute name. "+this.debugInfo(n));if(!o)throw new Error("Missing DTD attribute type. "+this.debugInfo(n));if(!s)throw new Error("Missing DTD attribute default. "+this.debugInfo(n));if(0!==s.indexOf("#")&&(s="#"+s),!s.match(/^(#REQUIRED|#IMPLIED|#FIXED|#DEFAULT)$/))throw new Error("Invalid default value type; expected: #REQUIRED, #IMPLIED, #FIXED or #DEFAULT. "+this.debugInfo(n));if(a&&!s.match(/^(#FIXED|#DEFAULT)$/))throw new Error("Default value only applies to #FIXED or #DEFAULT. "+this.debugInfo(n));this.elementName=this.stringify.name(n),this.type=e.AttributeDeclaration,this.attributeName=this.stringify.name(i),this.attributeType=this.stringify.dtdAttType(o),a&&(this.defaultValue=this.stringify.dtdAttDefault(a)),this.defaultValueType=s}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.toString=function(t){return this.options.writer.dtdAttList(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},7338:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(630),e=r(8745),t.exports=function(t){function r(t,n,i){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing DTD element name. "+this.debugInfo());i||(i="(#PCDATA)"),Array.isArray(i)&&(i="("+i.join(",")+")"),this.name=this.stringify.name(n),this.type=e.ElementDeclaration,this.value=this.stringify.dtdElementValue(i)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.toString=function(t){return this.options.writer.dtdElement(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},7834:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;i=r(8676).isObject,n=r(630),e=r(8745),t.exports=function(t){function r(t,n,o,s){if(r.__super__.constructor.call(this,t),null==o)throw new Error("Missing DTD entity name. "+this.debugInfo(o));if(null==s)throw new Error("Missing DTD entity value. "+this.debugInfo(o));if(this.pe=!!n,this.name=this.stringify.name(o),this.type=e.EntityDeclaration,i(s)){if(!s.pubID&&!s.sysID)throw new Error("Public and/or system identifiers are required for an external entity. "+this.debugInfo(o));if(s.pubID&&!s.sysID)throw new Error("System identifier is required for a public external entity. "+this.debugInfo(o));if(this.internal=!1,null!=s.pubID&&(this.pubID=this.stringify.dtdPubID(s.pubID)),null!=s.sysID&&(this.sysID=this.stringify.dtdSysID(s.sysID)),null!=s.nData&&(this.nData=this.stringify.dtdNData(s.nData)),this.pe&&this.nData)throw new Error("Notation declaration is not allowed in a parameter entity. "+this.debugInfo(o))}else this.value=this.stringify.dtdEntityValue(s),this.internal=!0}return function(t,e){for(var r in e)o.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(r.prototype,"systemId",{get:function(){return this.sysID}}),Object.defineProperty(r.prototype,"notationName",{get:function(){return this.nData||null}}),Object.defineProperty(r.prototype,"inputEncoding",{get:function(){return null}}),Object.defineProperty(r.prototype,"xmlEncoding",{get:function(){return null}}),Object.defineProperty(r.prototype,"xmlVersion",{get:function(){return null}}),r.prototype.toString=function(t){return this.options.writer.dtdEntity(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},8507:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(630),e=r(8745),t.exports=function(t){function r(t,n,i){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing DTD notation name. "+this.debugInfo(n));if(!i.pubID&&!i.sysID)throw new Error("Public or system identifiers are required for an external entity. "+this.debugInfo(n));this.name=this.stringify.name(n),this.type=e.NotationDeclaration,null!=i.pubID&&(this.pubID=this.stringify.dtdPubID(i.pubID)),null!=i.sysID&&(this.sysID=this.stringify.dtdSysID(i.sysID))}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(r.prototype,"systemId",{get:function(){return this.sysID}}),r.prototype.toString=function(t){return this.options.writer.dtdNotation(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},2308:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;i=r(8676).isObject,n=r(630),e=r(8745),t.exports=function(t){function r(t,n,o,s){var a;r.__super__.constructor.call(this,t),i(n)&&(n=(a=n).version,o=a.encoding,s=a.standalone),n||(n="1.0"),this.type=e.Declaration,this.version=this.stringify.xmlVersion(n),null!=o&&(this.encoding=this.stringify.xmlEncoding(o)),null!=s&&(this.standalone=this.stringify.xmlStandalone(s))}return function(t,e){for(var r in e)o.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.toString=function(t){return this.options.writer.declaration(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},6808:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c={}.hasOwnProperty;u=r(8676).isObject,h=r(630),e=r(8745),n=r(4131),o=r(7834),i=r(7338),s=r(8507),a=r(405),t.exports=function(t){function r(t,n,i){var o,s,a,h,c,l;if(r.__super__.constructor.call(this,t),this.type=e.DocType,t.children)for(s=0,a=(h=t.children).length;s<a;s++)if((o=h[s]).type===e.Element){this.name=o.name;break}this.documentObject=t,u(n)&&(n=(c=n).pubID,i=c.sysID),null==i&&(i=(l=[n,i])[0],n=l[1]),null!=n&&(this.pubID=this.stringify.dtdPubID(n)),null!=i&&(this.sysID=this.stringify.dtdSysID(i))}return function(t,e){for(var r in e)c.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"entities",{get:function(){var t,r,n,i,o;for(i={},r=0,n=(o=this.children).length;r<n;r++)(t=o[r]).type!==e.EntityDeclaration||t.pe||(i[t.name]=t);return new a(i)}}),Object.defineProperty(r.prototype,"notations",{get:function(){var t,r,n,i,o;for(i={},r=0,n=(o=this.children).length;r<n;r++)(t=o[r]).type===e.NotationDeclaration&&(i[t.name]=t);return new a(i)}}),Object.defineProperty(r.prototype,"publicId",{get:function(){return this.pubID}}),Object.defineProperty(r.prototype,"systemId",{get:function(){return this.sysID}}),Object.defineProperty(r.prototype,"internalSubset",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),r.prototype.element=function(t,e){var r;return r=new i(this,t,e),this.children.push(r),this},r.prototype.attList=function(t,e,r,i,o){var s;return s=new n(this,t,e,r,i,o),this.children.push(s),this},r.prototype.entity=function(t,e){var r;return r=new o(this,!1,t,e),this.children.push(r),this},r.prototype.pEntity=function(t,e){var r;return r=new o(this,!0,t,e),this.children.push(r),this},r.prototype.notation=function(t,e){var r;return r=new s(this,t,e),this.children.push(r),this},r.prototype.toString=function(t){return this.options.writer.docType(this,this.options.writer.filterOptions(t))},r.prototype.ele=function(t,e){return this.element(t,e)},r.prototype.att=function(t,e,r,n,i){return this.attList(t,e,r,n,i)},r.prototype.ent=function(t,e){return this.entity(t,e)},r.prototype.pent=function(t,e){return this.pEntity(t,e)},r.prototype.not=function(t,e){return this.notation(t,e)},r.prototype.up=function(){return this.root()||this.documentObject},r.prototype.isEqualNode=function(t){return!!r.__super__.isEqualNode.apply(this,arguments).isEqualNode(t)&&t.name===this.name&&t.publicId===this.publicId&&t.systemId===this.systemId},r}(h)}).call(this)},1888:function(t,e,r){(function(){var e,n,i,o,s,a,h,u={}.hasOwnProperty;h=r(8676).isPlainObject,i=r(4016),n=r(1829),o=r(630),e=r(8745),a=r(8365),s=r(1663),t.exports=function(t){function r(t){r.__super__.constructor.call(this,null),this.name="#document",this.type=e.Document,this.documentURI=null,this.domConfig=new n,t||(t={}),t.writer||(t.writer=new s),this.options=t,this.stringify=new a(t)}return function(t,e){for(var r in e)u.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"implementation",{value:new i}),Object.defineProperty(r.prototype,"doctype",{get:function(){var t,r,n,i;for(r=0,n=(i=this.children).length;r<n;r++)if((t=i[r]).type===e.DocType)return t;return null}}),Object.defineProperty(r.prototype,"documentElement",{get:function(){return this.rootObject||null}}),Object.defineProperty(r.prototype,"inputEncoding",{get:function(){return null}}),Object.defineProperty(r.prototype,"strictErrorChecking",{get:function(){return!1}}),Object.defineProperty(r.prototype,"xmlEncoding",{get:function(){return 0!==this.children.length&&this.children[0].type===e.Declaration?this.children[0].encoding:null}}),Object.defineProperty(r.prototype,"xmlStandalone",{get:function(){return 0!==this.children.length&&this.children[0].type===e.Declaration&&"yes"===this.children[0].standalone}}),Object.defineProperty(r.prototype,"xmlVersion",{get:function(){return 0!==this.children.length&&this.children[0].type===e.Declaration?this.children[0].version:"1.0"}}),Object.defineProperty(r.prototype,"URL",{get:function(){return this.documentURI}}),Object.defineProperty(r.prototype,"origin",{get:function(){return null}}),Object.defineProperty(r.prototype,"compatMode",{get:function(){return null}}),Object.defineProperty(r.prototype,"characterSet",{get:function(){return null}}),Object.defineProperty(r.prototype,"contentType",{get:function(){return null}}),r.prototype.end=function(t){var e;return e={},t?h(t)&&(e=t,t=this.options.writer):t=this.options.writer,t.document(this,t.filterOptions(e))},r.prototype.toString=function(t){return this.options.writer.document(this,this.options.writer.filterOptions(t))},r.prototype.createElement=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createDocumentFragment=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createTextNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createComment=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createCDATASection=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createProcessingInstruction=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createAttribute=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createEntityReference=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.importNode=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createElementNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagNameNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementById=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.adoptNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.normalizeDocument=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.renameNode=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByClassName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createEvent=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createRange=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createNodeIterator=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.createTreeWalker=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r}(o)}).call(this)},2621:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c,l,f,p,d,y,g,m,v,w,b,M,_,x,E,S={}.hasOwnProperty;E=r(8676),_=E.isObject,M=E.isFunction,x=E.isPlainObject,b=E.getValue,e=r(8745),p=r(1888),d=r(5725),o=r(9877),s=r(2374),g=r(7641),w=r(4306),y=r(3402),l=r(2308),f=r(6808),a=r(4131),u=r(7834),h=r(7338),c=r(8507),i=r(7490),v=r(8365),m=r(1663),n=r(6530),t.exports=function(){function t(t,r,n){var i;this.name="?xml",this.type=e.Document,t||(t={}),i={},t.writer?x(t.writer)&&(i=t.writer,t.writer=new m):t.writer=new m,this.options=t,this.writer=t.writer,this.writerOptions=this.writer.filterOptions(i),this.stringify=new v(t),this.onDataCallback=r||function(){},this.onEndCallback=n||function(){},this.currentNode=null,this.currentLevel=-1,this.openTags={},this.documentStarted=!1,this.documentCompleted=!1,this.root=null}return t.prototype.createChildNode=function(t){var r,n,i,o,s,a,h,u;switch(t.type){case e.CData:this.cdata(t.value);break;case e.Comment:this.comment(t.value);break;case e.Element:for(n in i={},h=t.attribs)S.call(h,n)&&(r=h[n],i[n]=r.value);this.node(t.name,i);break;case e.Dummy:this.dummy();break;case e.Raw:this.raw(t.value);break;case e.Text:this.text(t.value);break;case e.ProcessingInstruction:this.instruction(t.target,t.value);break;default:throw new Error("This XML node type is not supported in a JS object: "+t.constructor.name)}for(s=0,a=(u=t.children).length;s<a;s++)o=u[s],this.createChildNode(o),o.type===e.Element&&this.up();return this},t.prototype.dummy=function(){return this},t.prototype.node=function(t,e,r){var n;if(null==t)throw new Error("Missing node name.");if(this.root&&-1===this.currentLevel)throw new Error("Document can only have one root node. "+this.debugInfo(t));return this.openCurrent(),t=b(t),null==e&&(e={}),e=b(e),_(e)||(r=(n=[e,r])[0],e=n[1]),this.currentNode=new d(this,t,e),this.currentNode.children=!1,this.currentLevel++,this.openTags[this.currentLevel]=this.currentNode,null!=r&&this.text(r),this},t.prototype.element=function(t,r,n){var i,o,s,a,h,u;if(this.currentNode&&this.currentNode.type===e.DocType)this.dtdElement.apply(this,arguments);else if(Array.isArray(t)||_(t)||M(t))for(a=this.options.noValidation,this.options.noValidation=!0,(u=new p(this.options).element("TEMP_ROOT")).element(t),this.options.noValidation=a,o=0,s=(h=u.children).length;o<s;o++)i=h[o],this.createChildNode(i),i.type===e.Element&&this.up();else this.node(t,r,n);return this},t.prototype.attribute=function(t,e){var r,n;if(!this.currentNode||this.currentNode.children)throw new Error("att() can only be used immediately after an ele() call in callback mode. "+this.debugInfo(t));if(null!=t&&(t=b(t)),_(t))for(r in t)S.call(t,r)&&(n=t[r],this.attribute(r,n));else M(e)&&(e=e.apply()),this.options.keepNullAttributes&&null==e?this.currentNode.attribs[t]=new i(this,t,""):null!=e&&(this.currentNode.attribs[t]=new i(this,t,e));return this},t.prototype.text=function(t){var e;return this.openCurrent(),e=new w(this,t),this.onData(this.writer.text(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.cdata=function(t){var e;return this.openCurrent(),e=new o(this,t),this.onData(this.writer.cdata(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.comment=function(t){var e;return this.openCurrent(),e=new s(this,t),this.onData(this.writer.comment(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.raw=function(t){var e;return this.openCurrent(),e=new g(this,t),this.onData(this.writer.raw(e,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.instruction=function(t,e){var r,n,i,o,s;if(this.openCurrent(),null!=t&&(t=b(t)),null!=e&&(e=b(e)),Array.isArray(t))for(r=0,o=t.length;r<o;r++)n=t[r],this.instruction(n);else if(_(t))for(n in t)S.call(t,n)&&(i=t[n],this.instruction(n,i));else M(e)&&(e=e.apply()),s=new y(this,t,e),this.onData(this.writer.processingInstruction(s,this.writerOptions,this.currentLevel+1),this.currentLevel+1);return this},t.prototype.declaration=function(t,e,r){var n;if(this.openCurrent(),this.documentStarted)throw new Error("declaration() must be the first node.");return n=new l(this,t,e,r),this.onData(this.writer.declaration(n,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.doctype=function(t,e,r){if(this.openCurrent(),null==t)throw new Error("Missing root node name.");if(this.root)throw new Error("dtd() must come before the root node.");return this.currentNode=new f(this,e,r),this.currentNode.rootNodeName=t,this.currentNode.children=!1,this.currentLevel++,this.openTags[this.currentLevel]=this.currentNode,this},t.prototype.dtdElement=function(t,e){var r;return this.openCurrent(),r=new h(this,t,e),this.onData(this.writer.dtdElement(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.attList=function(t,e,r,n,i){var o;return this.openCurrent(),o=new a(this,t,e,r,n,i),this.onData(this.writer.dtdAttList(o,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.entity=function(t,e){var r;return this.openCurrent(),r=new u(this,!1,t,e),this.onData(this.writer.dtdEntity(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.pEntity=function(t,e){var r;return this.openCurrent(),r=new u(this,!0,t,e),this.onData(this.writer.dtdEntity(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.notation=function(t,e){var r;return this.openCurrent(),r=new c(this,t,e),this.onData(this.writer.dtdNotation(r,this.writerOptions,this.currentLevel+1),this.currentLevel+1),this},t.prototype.up=function(){if(this.currentLevel<0)throw new Error("The document node has no parent.");return this.currentNode?(this.currentNode.children?this.closeNode(this.currentNode):this.openNode(this.currentNode),this.currentNode=null):this.closeNode(this.openTags[this.currentLevel]),delete this.openTags[this.currentLevel],this.currentLevel--,this},t.prototype.end=function(){for(;this.currentLevel>=0;)this.up();return this.onEnd()},t.prototype.openCurrent=function(){if(this.currentNode)return this.currentNode.children=!0,this.openNode(this.currentNode)},t.prototype.openNode=function(t){var r,i,o,s;if(!t.isOpen){if(this.root||0!==this.currentLevel||t.type!==e.Element||(this.root=t),i="",t.type===e.Element){for(o in this.writerOptions.state=n.OpenTag,i=this.writer.indent(t,this.writerOptions,this.currentLevel)+"<"+t.name,s=t.attribs)S.call(s,o)&&(r=s[o],i+=this.writer.attribute(r,this.writerOptions,this.currentLevel));i+=(t.children?">":"/>")+this.writer.endline(t,this.writerOptions,this.currentLevel),this.writerOptions.state=n.InsideTag}else this.writerOptions.state=n.OpenTag,i=this.writer.indent(t,this.writerOptions,this.currentLevel)+"<!DOCTYPE "+t.rootNodeName,t.pubID&&t.sysID?i+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.sysID&&(i+=' SYSTEM "'+t.sysID+'"'),t.children?(i+=" [",this.writerOptions.state=n.InsideTag):(this.writerOptions.state=n.CloseTag,i+=">"),i+=this.writer.endline(t,this.writerOptions,this.currentLevel);return this.onData(i,this.currentLevel),t.isOpen=!0}},t.prototype.closeNode=function(t){var r;if(!t.isClosed)return"",this.writerOptions.state=n.CloseTag,r=t.type===e.Element?this.writer.indent(t,this.writerOptions,this.currentLevel)+"</"+t.name+">"+this.writer.endline(t,this.writerOptions,this.currentLevel):this.writer.indent(t,this.writerOptions,this.currentLevel)+"]>"+this.writer.endline(t,this.writerOptions,this.currentLevel),this.writerOptions.state=n.None,this.onData(r,this.currentLevel),t.isClosed=!0},t.prototype.onData=function(t,e){return this.documentStarted=!0,this.onDataCallback(t,e+1)},t.prototype.onEnd=function(){return this.documentCompleted=!0,this.onEndCallback()},t.prototype.debugInfo=function(t){return null==t?"":"node: <"+t+">"},t.prototype.ele=function(){return this.element.apply(this,arguments)},t.prototype.nod=function(t,e,r){return this.node(t,e,r)},t.prototype.txt=function(t){return this.text(t)},t.prototype.dat=function(t){return this.cdata(t)},t.prototype.com=function(t){return this.comment(t)},t.prototype.ins=function(t,e){return this.instruction(t,e)},t.prototype.dec=function(t,e,r){return this.declaration(t,e,r)},t.prototype.dtd=function(t,e,r){return this.doctype(t,e,r)},t.prototype.e=function(t,e,r){return this.element(t,e,r)},t.prototype.n=function(t,e,r){return this.node(t,e,r)},t.prototype.t=function(t){return this.text(t)},t.prototype.d=function(t){return this.cdata(t)},t.prototype.c=function(t){return this.comment(t)},t.prototype.r=function(t){return this.raw(t)},t.prototype.i=function(t,e){return this.instruction(t,e)},t.prototype.att=function(){return this.currentNode&&this.currentNode.type===e.DocType?this.attList.apply(this,arguments):this.attribute.apply(this,arguments)},t.prototype.a=function(){return this.currentNode&&this.currentNode.type===e.DocType?this.attList.apply(this,arguments):this.attribute.apply(this,arguments)},t.prototype.ent=function(t,e){return this.entity(t,e)},t.prototype.pent=function(t,e){return this.pEntity(t,e)},t.prototype.not=function(t,e){return this.notation(t,e)},t}()}).call(this)},4402:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;n=r(630),e=r(8745),t.exports=function(t){function r(t){r.__super__.constructor.call(this,t),this.type=e.Dummy}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return""},r}(n)}).call(this)},5725:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c={}.hasOwnProperty;u=r(8676),h=u.isObject,a=u.isFunction,s=u.getValue,o=r(630),e=r(8745),n=r(7490),i=r(405),t.exports=function(t){function r(t,n,i){var o,s,a,h;if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing element name. "+this.debugInfo());if(this.name=this.stringify.name(n),this.type=e.Element,this.attribs={},this.schemaTypeInfo=null,null!=i&&this.attribute(i),t.type===e.Document&&(this.isRoot=!0,this.documentObject=t,t.rootObject=this,t.children))for(s=0,a=(h=t.children).length;s<a;s++)if((o=h[s]).type===e.DocType){o.name=this.name;break}}return function(t,e){for(var r in e)c.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"tagName",{get:function(){return this.name}}),Object.defineProperty(r.prototype,"namespaceURI",{get:function(){return""}}),Object.defineProperty(r.prototype,"prefix",{get:function(){return""}}),Object.defineProperty(r.prototype,"localName",{get:function(){return this.name}}),Object.defineProperty(r.prototype,"id",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"className",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"classList",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"attributes",{get:function(){return this.attributeMap&&this.attributeMap.nodes||(this.attributeMap=new i(this.attribs)),this.attributeMap}}),r.prototype.clone=function(){var t,e,r,n;for(e in(r=Object.create(this)).isRoot&&(r.documentObject=null),r.attribs={},n=this.attribs)c.call(n,e)&&(t=n[e],r.attribs[e]=t.clone());return r.children=[],this.children.forEach((function(t){var e;return(e=t.clone()).parent=r,r.children.push(e)})),r},r.prototype.attribute=function(t,e){var r,i;if(null!=t&&(t=s(t)),h(t))for(r in t)c.call(t,r)&&(i=t[r],this.attribute(r,i));else a(e)&&(e=e.apply()),this.options.keepNullAttributes&&null==e?this.attribs[t]=new n(this,t,""):null!=e&&(this.attribs[t]=new n(this,t,e));return this},r.prototype.removeAttribute=function(t){var e,r,n;if(null==t)throw new Error("Missing attribute name. "+this.debugInfo());if(t=s(t),Array.isArray(t))for(r=0,n=t.length;r<n;r++)e=t[r],delete this.attribs[e];else delete this.attribs[t];return this},r.prototype.toString=function(t){return this.options.writer.element(this,this.options.writer.filterOptions(t))},r.prototype.att=function(t,e){return this.attribute(t,e)},r.prototype.a=function(t,e){return this.attribute(t,e)},r.prototype.getAttribute=function(t){return this.attribs.hasOwnProperty(t)?this.attribs[t].value:null},r.prototype.setAttribute=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getAttributeNode=function(t){return this.attribs.hasOwnProperty(t)?this.attribs[t]:null},r.prototype.setAttributeNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.removeAttributeNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setAttributeNS=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.removeAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getAttributeNodeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setAttributeNodeNS=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagNameNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.hasAttribute=function(t){return this.attribs.hasOwnProperty(t)},r.prototype.hasAttributeNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setIdAttribute=function(t,e){return this.attribs.hasOwnProperty(t)?this.attribs[t].isId:e},r.prototype.setIdAttributeNS=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.setIdAttributeNode=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByTagNameNS=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.getElementsByClassName=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.isEqualNode=function(t){var e,n,i;if(!r.__super__.isEqualNode.apply(this,arguments).isEqualNode(t))return!1;if(t.namespaceURI!==this.namespaceURI)return!1;if(t.prefix!==this.prefix)return!1;if(t.localName!==this.localName)return!1;if(t.attribs.length!==this.attribs.length)return!1;for(e=n=0,i=this.attribs.length-1;0<=i?n<=i:n>=i;e=0<=i?++n:--n)if(!this.attribs[e].isEqualNode(t.attribs[e]))return!1;return!0},r}(o)}).call(this)},405:function(t){(function(){t.exports=function(){function t(t){this.nodes=t}return Object.defineProperty(t.prototype,"length",{get:function(){return Object.keys(this.nodes).length||0}}),t.prototype.clone=function(){return this.nodes=null},t.prototype.getNamedItem=function(t){return this.nodes[t]},t.prototype.setNamedItem=function(t){var e;return e=this.nodes[t.nodeName],this.nodes[t.nodeName]=t,e||null},t.prototype.removeNamedItem=function(t){var e;return e=this.nodes[t],delete this.nodes[t],e||null},t.prototype.item=function(t){return this.nodes[Object.keys(this.nodes)[t]]||null},t.prototype.getNamedItemNS=function(t,e){throw new Error("This DOM method is not implemented.")},t.prototype.setNamedItemNS=function(t){throw new Error("This DOM method is not implemented.")},t.prototype.removeNamedItemNS=function(t,e){throw new Error("This DOM method is not implemented.")},t}()}).call(this)},630:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c,l,f,p,d,y,g,m,v,w={}.hasOwnProperty;v=r(8676),m=v.isObject,g=v.isFunction,y=v.isEmpty,d=v.getValue,u=null,i=null,o=null,s=null,a=null,f=null,p=null,l=null,h=null,n=null,c=null,e=null,t.exports=function(){function t(t){this.parent=t,this.parent&&(this.options=this.parent.options,this.stringify=this.parent.stringify),this.value=null,this.children=[],this.baseURI=null,u||(u=r(5725),i=r(9877),o=r(2374),s=r(2308),a=r(6808),f=r(7641),p=r(4306),l=r(3402),h=r(4402),n=r(8745),c=r(3220),r(405),e=r(8154))}return Object.defineProperty(t.prototype,"nodeName",{get:function(){return this.name}}),Object.defineProperty(t.prototype,"nodeType",{get:function(){return this.type}}),Object.defineProperty(t.prototype,"nodeValue",{get:function(){return this.value}}),Object.defineProperty(t.prototype,"parentNode",{get:function(){return this.parent}}),Object.defineProperty(t.prototype,"childNodes",{get:function(){return this.childNodeList&&this.childNodeList.nodes||(this.childNodeList=new c(this.children)),this.childNodeList}}),Object.defineProperty(t.prototype,"firstChild",{get:function(){return this.children[0]||null}}),Object.defineProperty(t.prototype,"lastChild",{get:function(){return this.children[this.children.length-1]||null}}),Object.defineProperty(t.prototype,"previousSibling",{get:function(){var t;return t=this.parent.children.indexOf(this),this.parent.children[t-1]||null}}),Object.defineProperty(t.prototype,"nextSibling",{get:function(){var t;return t=this.parent.children.indexOf(this),this.parent.children[t+1]||null}}),Object.defineProperty(t.prototype,"ownerDocument",{get:function(){return this.document()||null}}),Object.defineProperty(t.prototype,"textContent",{get:function(){var t,e,r,i,o;if(this.nodeType===n.Element||this.nodeType===n.DocumentFragment){for(o="",e=0,r=(i=this.children).length;e<r;e++)(t=i[e]).textContent&&(o+=t.textContent);return o}return null},set:function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),t.prototype.setParent=function(t){var e,r,n,i,o;for(this.parent=t,t&&(this.options=t.options,this.stringify=t.stringify),o=[],r=0,n=(i=this.children).length;r<n;r++)e=i[r],o.push(e.setParent(this));return o},t.prototype.element=function(t,e,r){var n,i,o,s,a,h,u,c,l,f,p;if(h=null,null===e&&null==r&&(e=(l=[{},null])[0],r=l[1]),null==e&&(e={}),e=d(e),m(e)||(r=(f=[e,r])[0],e=f[1]),null!=t&&(t=d(t)),Array.isArray(t))for(o=0,u=t.length;o<u;o++)i=t[o],h=this.element(i);else if(g(t))h=this.element(t.apply());else if(m(t)){for(a in t)if(w.call(t,a))if(p=t[a],g(p)&&(p=p.apply()),!this.options.ignoreDecorators&&this.stringify.convertAttKey&&0===a.indexOf(this.stringify.convertAttKey))h=this.attribute(a.substr(this.stringify.convertAttKey.length),p);else if(!this.options.separateArrayItems&&Array.isArray(p)&&y(p))h=this.dummy();else if(m(p)&&y(p))h=this.element(a);else if(this.options.keepNullNodes||null!=p)if(!this.options.separateArrayItems&&Array.isArray(p))for(s=0,c=p.length;s<c;s++)i=p[s],(n={})[a]=i,h=this.element(n);else m(p)?!this.options.ignoreDecorators&&this.stringify.convertTextKey&&0===a.indexOf(this.stringify.convertTextKey)?h=this.element(p):(h=this.element(a)).element(p):h=this.element(a,p);else h=this.dummy()}else h=this.options.keepNullNodes||null!==r?!this.options.ignoreDecorators&&this.stringify.convertTextKey&&0===t.indexOf(this.stringify.convertTextKey)?this.text(r):!this.options.ignoreDecorators&&this.stringify.convertCDataKey&&0===t.indexOf(this.stringify.convertCDataKey)?this.cdata(r):!this.options.ignoreDecorators&&this.stringify.convertCommentKey&&0===t.indexOf(this.stringify.convertCommentKey)?this.comment(r):!this.options.ignoreDecorators&&this.stringify.convertRawKey&&0===t.indexOf(this.stringify.convertRawKey)?this.raw(r):!this.options.ignoreDecorators&&this.stringify.convertPIKey&&0===t.indexOf(this.stringify.convertPIKey)?this.instruction(t.substr(this.stringify.convertPIKey.length),r):this.node(t,e,r):this.dummy();if(null==h)throw new Error("Could not create any elements with: "+t+". "+this.debugInfo());return h},t.prototype.insertBefore=function(t,e,r){var n,i,o,s,a;if(null!=t?t.type:void 0)return s=e,(o=t).setParent(this),s?(i=children.indexOf(s),a=children.splice(i),children.push(o),Array.prototype.push.apply(children,a)):children.push(o),o;if(this.isRoot)throw new Error("Cannot insert elements at root level. "+this.debugInfo(t));return i=this.parent.children.indexOf(this),a=this.parent.children.splice(i),n=this.parent.element(t,e,r),Array.prototype.push.apply(this.parent.children,a),n},t.prototype.insertAfter=function(t,e,r){var n,i,o;if(this.isRoot)throw new Error("Cannot insert elements at root level. "+this.debugInfo(t));return i=this.parent.children.indexOf(this),o=this.parent.children.splice(i+1),n=this.parent.element(t,e,r),Array.prototype.push.apply(this.parent.children,o),n},t.prototype.remove=function(){var t;if(this.isRoot)throw new Error("Cannot remove the root element. "+this.debugInfo());return t=this.parent.children.indexOf(this),[].splice.apply(this.parent.children,[t,t-t+1].concat([])),this.parent},t.prototype.node=function(t,e,r){var n,i;return null!=t&&(t=d(t)),e||(e={}),e=d(e),m(e)||(r=(i=[e,r])[0],e=i[1]),n=new u(this,t,e),null!=r&&n.text(r),this.children.push(n),n},t.prototype.text=function(t){var e;return m(t)&&this.element(t),e=new p(this,t),this.children.push(e),this},t.prototype.cdata=function(t){var e;return e=new i(this,t),this.children.push(e),this},t.prototype.comment=function(t){var e;return e=new o(this,t),this.children.push(e),this},t.prototype.commentBefore=function(t){var e,r;return e=this.parent.children.indexOf(this),r=this.parent.children.splice(e),this.parent.comment(t),Array.prototype.push.apply(this.parent.children,r),this},t.prototype.commentAfter=function(t){var e,r;return e=this.parent.children.indexOf(this),r=this.parent.children.splice(e+1),this.parent.comment(t),Array.prototype.push.apply(this.parent.children,r),this},t.prototype.raw=function(t){var e;return e=new f(this,t),this.children.push(e),this},t.prototype.dummy=function(){return new h(this)},t.prototype.instruction=function(t,e){var r,n,i,o,s;if(null!=t&&(t=d(t)),null!=e&&(e=d(e)),Array.isArray(t))for(o=0,s=t.length;o<s;o++)r=t[o],this.instruction(r);else if(m(t))for(r in t)w.call(t,r)&&(n=t[r],this.instruction(r,n));else g(e)&&(e=e.apply()),i=new l(this,t,e),this.children.push(i);return this},t.prototype.instructionBefore=function(t,e){var r,n;return r=this.parent.children.indexOf(this),n=this.parent.children.splice(r),this.parent.instruction(t,e),Array.prototype.push.apply(this.parent.children,n),this},t.prototype.instructionAfter=function(t,e){var r,n;return r=this.parent.children.indexOf(this),n=this.parent.children.splice(r+1),this.parent.instruction(t,e),Array.prototype.push.apply(this.parent.children,n),this},t.prototype.declaration=function(t,e,r){var i,o;return i=this.document(),o=new s(i,t,e,r),0===i.children.length?i.children.unshift(o):i.children[0].type===n.Declaration?i.children[0]=o:i.children.unshift(o),i.root()||i},t.prototype.dtd=function(t,e){var r,i,o,s,h,u,c,l,f;for(r=this.document(),i=new a(r,t,e),o=s=0,u=(l=r.children).length;s<u;o=++s)if(l[o].type===n.DocType)return r.children[o]=i,i;for(o=h=0,c=(f=r.children).length;h<c;o=++h)if(f[o].isRoot)return r.children.splice(o,0,i),i;return r.children.push(i),i},t.prototype.up=function(){if(this.isRoot)throw new Error("The root node has no parent. Use doc() if you need to get the document object.");return this.parent},t.prototype.root=function(){var t;for(t=this;t;){if(t.type===n.Document)return t.rootObject;if(t.isRoot)return t;t=t.parent}},t.prototype.document=function(){var t;for(t=this;t;){if(t.type===n.Document)return t;t=t.parent}},t.prototype.end=function(t){return this.document().end(t)},t.prototype.prev=function(){var t;if((t=this.parent.children.indexOf(this))<1)throw new Error("Already at the first node. "+this.debugInfo());return this.parent.children[t-1]},t.prototype.next=function(){var t;if(-1===(t=this.parent.children.indexOf(this))||t===this.parent.children.length-1)throw new Error("Already at the last node. "+this.debugInfo());return this.parent.children[t+1]},t.prototype.importDocument=function(t){var e;return(e=t.root().clone()).parent=this,e.isRoot=!1,this.children.push(e),this},t.prototype.debugInfo=function(t){var e,r;return null!=(t=t||this.name)||(null!=(e=this.parent)?e.name:void 0)?null==t?"parent: <"+this.parent.name+">":(null!=(r=this.parent)?r.name:void 0)?"node: <"+t+">, parent: <"+this.parent.name+">":"node: <"+t+">":""},t.prototype.ele=function(t,e,r){return this.element(t,e,r)},t.prototype.nod=function(t,e,r){return this.node(t,e,r)},t.prototype.txt=function(t){return this.text(t)},t.prototype.dat=function(t){return this.cdata(t)},t.prototype.com=function(t){return this.comment(t)},t.prototype.ins=function(t,e){return this.instruction(t,e)},t.prototype.doc=function(){return this.document()},t.prototype.dec=function(t,e,r){return this.declaration(t,e,r)},t.prototype.e=function(t,e,r){return this.element(t,e,r)},t.prototype.n=function(t,e,r){return this.node(t,e,r)},t.prototype.t=function(t){return this.text(t)},t.prototype.d=function(t){return this.cdata(t)},t.prototype.c=function(t){return this.comment(t)},t.prototype.r=function(t){return this.raw(t)},t.prototype.i=function(t,e){return this.instruction(t,e)},t.prototype.u=function(){return this.up()},t.prototype.importXMLBuilder=function(t){return this.importDocument(t)},t.prototype.replaceChild=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.removeChild=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.appendChild=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.hasChildNodes=function(){return 0!==this.children.length},t.prototype.cloneNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.normalize=function(){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.isSupported=function(t,e){return!0},t.prototype.hasAttributes=function(){return 0!==this.attribs.length},t.prototype.compareDocumentPosition=function(t){var r,n;return(r=this)===t?0:this.document()!==t.document()?(n=e.Disconnected|e.ImplementationSpecific,Math.random()<.5?n|=e.Preceding:n|=e.Following,n):r.isAncestor(t)?e.Contains|e.Preceding:r.isDescendant(t)?e.Contains|e.Following:r.isPreceding(t)?e.Preceding:e.Following},t.prototype.isSameNode=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.lookupPrefix=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.isDefaultNamespace=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.lookupNamespaceURI=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.isEqualNode=function(t){var e,r,n;if(t.nodeType!==this.nodeType)return!1;if(t.children.length!==this.children.length)return!1;for(e=r=0,n=this.children.length-1;0<=n?r<=n:r>=n;e=0<=n?++r:--r)if(!this.children[e].isEqualNode(t.children[e]))return!1;return!0},t.prototype.getFeature=function(t,e){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.setUserData=function(t,e,r){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.getUserData=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},t.prototype.contains=function(t){return!!t&&(t===this||this.isDescendant(t))},t.prototype.isDescendant=function(t){var e,r,n,i;for(r=0,n=(i=this.children).length;r<n;r++){if(t===(e=i[r]))return!0;if(e.isDescendant(t))return!0}return!1},t.prototype.isAncestor=function(t){return t.isDescendant(this)},t.prototype.isPreceding=function(t){var e,r;return e=this.treePosition(t),r=this.treePosition(this),-1!==e&&-1!==r&&e<r},t.prototype.isFollowing=function(t){var e,r;return e=this.treePosition(t),r=this.treePosition(this),-1!==e&&-1!==r&&e>r},t.prototype.treePosition=function(t){var e,r;return r=0,e=!1,this.foreachTreeNode(this.document(),(function(n){if(r++,!e&&n===t)return e=!0})),e?r:-1},t.prototype.foreachTreeNode=function(t,e){var r,n,i,o,s;for(t||(t=this.document()),n=0,i=(o=t.children).length;n<i;n++){if(s=e(r=o[n]))return s;if(s=this.foreachTreeNode(r,e))return s}},t}()}).call(this)},3220:function(t){(function(){t.exports=function(){function t(t){this.nodes=t}return Object.defineProperty(t.prototype,"length",{get:function(){return this.nodes.length||0}}),t.prototype.clone=function(){return this.nodes=null},t.prototype.item=function(t){return this.nodes[t]||null},t}()}).call(this)},3402:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(8745),n=r(4356),t.exports=function(t){function r(t,n,i){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing instruction target. "+this.debugInfo());this.type=e.ProcessingInstruction,this.target=this.stringify.insTarget(n),this.name=this.target,i&&(this.value=this.stringify.insValue(i))}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.processingInstruction(this,this.options.writer.filterOptions(t))},r.prototype.isEqualNode=function(t){return!!r.__super__.isEqualNode.apply(this,arguments).isEqualNode(t)&&t.target===this.target},r}(n)}).call(this)},7641:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(8745),n=r(630),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing raw text. "+this.debugInfo());this.type=e.Raw,this.value=this.stringify.raw(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.raw(this,this.options.writer.filterOptions(t))},r}(n)}).call(this)},1479:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;e=r(8745),i=r(5859),n=r(6530),t.exports=function(t){function r(t,e){this.stream=t,r.__super__.constructor.call(this,e)}return function(t,e){for(var r in e)o.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),r.prototype.endline=function(t,e,i){return t.isLastRootNode&&e.state===n.CloseTag?"":r.__super__.endline.call(this,t,e,i)},r.prototype.document=function(t,e){var r,n,i,o,s,a,h,u,c;for(n=i=0,s=(h=t.children).length;i<s;n=++i)(r=h[n]).isLastRootNode=n===t.children.length-1;for(e=this.filterOptions(e),c=[],o=0,a=(u=t.children).length;o<a;o++)r=u[o],c.push(this.writeChildNode(r,e,0));return c},r.prototype.attribute=function(t,e,n){return this.stream.write(r.__super__.attribute.call(this,t,e,n))},r.prototype.cdata=function(t,e,n){return this.stream.write(r.__super__.cdata.call(this,t,e,n))},r.prototype.comment=function(t,e,n){return this.stream.write(r.__super__.comment.call(this,t,e,n))},r.prototype.declaration=function(t,e,n){return this.stream.write(r.__super__.declaration.call(this,t,e,n))},r.prototype.docType=function(t,e,r){var i,o,s,a;if(r||(r=0),this.openNode(t,e,r),e.state=n.OpenTag,this.stream.write(this.indent(t,e,r)),this.stream.write("<!DOCTYPE "+t.root().name),t.pubID&&t.sysID?this.stream.write(' PUBLIC "'+t.pubID+'" "'+t.sysID+'"'):t.sysID&&this.stream.write(' SYSTEM "'+t.sysID+'"'),t.children.length>0){for(this.stream.write(" ["),this.stream.write(this.endline(t,e,r)),e.state=n.InsideTag,o=0,s=(a=t.children).length;o<s;o++)i=a[o],this.writeChildNode(i,e,r+1);e.state=n.CloseTag,this.stream.write("]")}return e.state=n.CloseTag,this.stream.write(e.spaceBeforeSlash+">"),this.stream.write(this.endline(t,e,r)),e.state=n.None,this.closeNode(t,e,r)},r.prototype.element=function(t,r,i){var s,a,h,u,c,l,f,p,d;for(f in i||(i=0),this.openNode(t,r,i),r.state=n.OpenTag,this.stream.write(this.indent(t,r,i)+"<"+t.name),p=t.attribs)o.call(p,f)&&(s=p[f],this.attribute(s,r,i));if(u=0===(h=t.children.length)?null:t.children[0],0===h||t.children.every((function(t){return(t.type===e.Text||t.type===e.Raw)&&""===t.value})))r.allowEmpty?(this.stream.write(">"),r.state=n.CloseTag,this.stream.write("</"+t.name+">")):(r.state=n.CloseTag,this.stream.write(r.spaceBeforeSlash+"/>"));else if(!r.pretty||1!==h||u.type!==e.Text&&u.type!==e.Raw||null==u.value){for(this.stream.write(">"+this.endline(t,r,i)),r.state=n.InsideTag,c=0,l=(d=t.children).length;c<l;c++)a=d[c],this.writeChildNode(a,r,i+1);r.state=n.CloseTag,this.stream.write(this.indent(t,r,i)+"</"+t.name+">")}else this.stream.write(">"),r.state=n.InsideTag,r.suppressPrettyCount++,this.writeChildNode(u,r,i+1),r.suppressPrettyCount--,r.state=n.CloseTag,this.stream.write("</"+t.name+">");return this.stream.write(this.endline(t,r,i)),r.state=n.None,this.closeNode(t,r,i)},r.prototype.processingInstruction=function(t,e,n){return this.stream.write(r.__super__.processingInstruction.call(this,t,e,n))},r.prototype.raw=function(t,e,n){return this.stream.write(r.__super__.raw.call(this,t,e,n))},r.prototype.text=function(t,e,n){return this.stream.write(r.__super__.text.call(this,t,e,n))},r.prototype.dtdAttList=function(t,e,n){return this.stream.write(r.__super__.dtdAttList.call(this,t,e,n))},r.prototype.dtdElement=function(t,e,n){return this.stream.write(r.__super__.dtdElement.call(this,t,e,n))},r.prototype.dtdEntity=function(t,e,n){return this.stream.write(r.__super__.dtdEntity.call(this,t,e,n))},r.prototype.dtdNotation=function(t,e,n){return this.stream.write(r.__super__.dtdNotation.call(this,t,e,n))},r}(i)}).call(this)},1663:function(t,e,r){(function(){var e,n={}.hasOwnProperty;e=r(5859),t.exports=function(t){function e(t){e.__super__.constructor.call(this,t)}return function(t,e){for(var r in e)n.call(e,r)&&(t[r]=e[r]);function i(){this.constructor=t}i.prototype=e.prototype,t.prototype=new i,t.__super__=e.prototype}(e,t),e.prototype.document=function(t,e){var r,n,i,o,s;for(e=this.filterOptions(e),o="",n=0,i=(s=t.children).length;n<i;n++)r=s[n],o+=this.writeChildNode(r,e,0);return e.pretty&&o.slice(-e.newline.length)===e.newline&&(o=o.slice(0,-e.newline.length)),o},e}(e)}).call(this)},8365:function(t){(function(){var e=function(t,e){return function(){return t.apply(e,arguments)}},r={}.hasOwnProperty;t.exports=function(){function t(t){var n,i,o;for(n in this.assertLegalName=e(this.assertLegalName,this),this.assertLegalChar=e(this.assertLegalChar,this),t||(t={}),this.options=t,this.options.version||(this.options.version="1.0"),i=t.stringify||{})r.call(i,n)&&(o=i[n],this[n]=o)}return t.prototype.name=function(t){return this.options.noValidation?t:this.assertLegalName(""+t||"")},t.prototype.text=function(t){return this.options.noValidation?t:this.assertLegalChar(this.textEscape(""+t||""))},t.prototype.cdata=function(t){return this.options.noValidation?t:(t=(t=""+t||"").replace("]]>","]]]]><![CDATA[>"),this.assertLegalChar(t))},t.prototype.comment=function(t){if(this.options.noValidation)return t;if((t=""+t||"").match(/--/))throw new Error("Comment text cannot contain double-hypen: "+t);return this.assertLegalChar(t)},t.prototype.raw=function(t){return this.options.noValidation?t:""+t||""},t.prototype.attValue=function(t){return this.options.noValidation?t:this.assertLegalChar(this.attEscape(t=""+t||""))},t.prototype.insTarget=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.insValue=function(t){if(this.options.noValidation)return t;if((t=""+t||"").match(/\?>/))throw new Error("Invalid processing instruction value: "+t);return this.assertLegalChar(t)},t.prototype.xmlVersion=function(t){if(this.options.noValidation)return t;if(!(t=""+t||"").match(/1\.[0-9]+/))throw new Error("Invalid version number: "+t);return t},t.prototype.xmlEncoding=function(t){if(this.options.noValidation)return t;if(!(t=""+t||"").match(/^[A-Za-z](?:[A-Za-z0-9._-])*$/))throw new Error("Invalid encoding: "+t);return this.assertLegalChar(t)},t.prototype.xmlStandalone=function(t){return this.options.noValidation?t:t?"yes":"no"},t.prototype.dtdPubID=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdSysID=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdElementValue=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdAttType=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdAttDefault=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdEntityValue=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.dtdNData=function(t){return this.options.noValidation?t:this.assertLegalChar(""+t||"")},t.prototype.convertAttKey="@",t.prototype.convertPIKey="?",t.prototype.convertTextKey="#text",t.prototype.convertCDataKey="#cdata",t.prototype.convertCommentKey="#comment",t.prototype.convertRawKey="#raw",t.prototype.assertLegalChar=function(t){var e,r;if(this.options.noValidation)return t;if(e="","1.0"===this.options.version){if(e=/[\0-\x08\x0B\f\x0E-\x1F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,r=t.match(e))throw new Error("Invalid character in string: "+t+" at index "+r.index)}else if("1.1"===this.options.version&&(e=/[\0\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,r=t.match(e)))throw new Error("Invalid character in string: "+t+" at index "+r.index);return t},t.prototype.assertLegalName=function(t){var e;if(this.options.noValidation)return t;if(this.assertLegalChar(t),e=/^([:A-Z_a-z\xC0-\xD6\xD8-\xF6\xF8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])([\x2D\.0-:A-Z_a-z\xB7\xC0-\xD6\xD8-\xF6\xF8-\u037D\u037F-\u1FFF\u200C\u200D\u203F\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]|[\uD800-\uDB7F][\uDC00-\uDFFF])*$/,!t.match(e))throw new Error("Invalid character in name");return t},t.prototype.textEscape=function(t){var e;return this.options.noValidation?t:(e=this.options.noDoubleEncoding?/(?!&\S+;)&/g:/&/g,t.replace(e,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/\r/g,"&#xD;"))},t.prototype.attEscape=function(t){var e;return this.options.noValidation?t:(e=this.options.noDoubleEncoding?/(?!&\S+;)&/g:/&/g,t.replace(e,"&amp;").replace(/</g,"&lt;").replace(/"/g,"&quot;").replace(/\t/g,"&#x9;").replace(/\n/g,"&#xA;").replace(/\r/g,"&#xD;"))},t}()}).call(this)},4306:function(t,e,r){(function(){var e,n,i={}.hasOwnProperty;e=r(8745),n=r(4356),t.exports=function(t){function r(t,n){if(r.__super__.constructor.call(this,t),null==n)throw new Error("Missing element text. "+this.debugInfo());this.name="#text",this.type=e.Text,this.value=this.stringify.text(n)}return function(t,e){for(var r in e)i.call(e,r)&&(t[r]=e[r]);function n(){this.constructor=t}n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype}(r,t),Object.defineProperty(r.prototype,"isElementContentWhitespace",{get:function(){throw new Error("This DOM method is not implemented."+this.debugInfo())}}),Object.defineProperty(r.prototype,"wholeText",{get:function(){var t,e,r;for(r="",e=this.previousSibling;e;)r=e.data+r,e=e.previousSibling;for(r+=this.data,t=this.nextSibling;t;)r+=t.data,t=t.nextSibling;return r}}),r.prototype.clone=function(){return Object.create(this)},r.prototype.toString=function(t){return this.options.writer.text(this,this.options.writer.filterOptions(t))},r.prototype.splitText=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r.prototype.replaceWholeText=function(t){throw new Error("This DOM method is not implemented."+this.debugInfo())},r}(n)}).call(this)},5859:function(t,e,r){(function(){var e,n,i,o={}.hasOwnProperty;i=r(8676).assign,e=r(8745),r(2308),r(6808),r(9877),r(2374),r(5725),r(7641),r(4306),r(3402),r(4402),r(4131),r(7338),r(7834),r(8507),n=r(6530),t.exports=function(){function t(t){var e,r,n;for(e in t||(t={}),this.options=t,r=t.writer||{})o.call(r,e)&&(n=r[e],this["_"+e]=this[e],this[e]=n)}return t.prototype.filterOptions=function(t){var e,r,o,s,a,h,u,c;return t||(t={}),t=i({},this.options,t),(e={writer:this}).pretty=t.pretty||!1,e.allowEmpty=t.allowEmpty||!1,e.indent=null!=(r=t.indent)?r:" ",e.newline=null!=(o=t.newline)?o:"\n",e.offset=null!=(s=t.offset)?s:0,e.dontPrettyTextNodes=null!=(a=null!=(h=t.dontPrettyTextNodes)?h:t.dontprettytextnodes)?a:0,e.spaceBeforeSlash=null!=(u=null!=(c=t.spaceBeforeSlash)?c:t.spacebeforeslash)?u:"",!0===e.spaceBeforeSlash&&(e.spaceBeforeSlash=" "),e.suppressPrettyCount=0,e.user={},e.state=n.None,e},t.prototype.indent=function(t,e,r){var n;return!e.pretty||e.suppressPrettyCount?"":e.pretty&&(n=(r||0)+e.offset+1)>0?new Array(n).join(e.indent):""},t.prototype.endline=function(t,e,r){return!e.pretty||e.suppressPrettyCount?"":e.newline},t.prototype.attribute=function(t,e,r){var n;return this.openAttribute(t,e,r),n=" "+t.name+'="'+t.value+'"',this.closeAttribute(t,e,r),n},t.prototype.cdata=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<![CDATA[",e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+="]]>"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.comment=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"\x3c!-- ",e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+=" --\x3e"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.declaration=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<?xml",e.state=n.InsideTag,i+=' version="'+t.version+'"',null!=t.encoding&&(i+=' encoding="'+t.encoding+'"'),null!=t.standalone&&(i+=' standalone="'+t.standalone+'"'),e.state=n.CloseTag,i+=e.spaceBeforeSlash+"?>",i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.docType=function(t,e,r){var i,o,s,a,h;if(r||(r=0),this.openNode(t,e,r),e.state=n.OpenTag,a=this.indent(t,e,r),a+="<!DOCTYPE "+t.root().name,t.pubID&&t.sysID?a+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.sysID&&(a+=' SYSTEM "'+t.sysID+'"'),t.children.length>0){for(a+=" [",a+=this.endline(t,e,r),e.state=n.InsideTag,o=0,s=(h=t.children).length;o<s;o++)i=h[o],a+=this.writeChildNode(i,e,r+1);e.state=n.CloseTag,a+="]"}return e.state=n.CloseTag,a+=e.spaceBeforeSlash+">",a+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),a},t.prototype.element=function(t,r,i){var s,a,h,u,c,l,f,p,d,y,g,m,v,w;for(d in i||(i=0),y=!1,g="",this.openNode(t,r,i),r.state=n.OpenTag,g+=this.indent(t,r,i)+"<"+t.name,m=t.attribs)o.call(m,d)&&(s=m[d],g+=this.attribute(s,r,i));if(u=0===(h=t.children.length)?null:t.children[0],0===h||t.children.every((function(t){return(t.type===e.Text||t.type===e.Raw)&&""===t.value})))r.allowEmpty?(g+=">",r.state=n.CloseTag,g+="</"+t.name+">"+this.endline(t,r,i)):(r.state=n.CloseTag,g+=r.spaceBeforeSlash+"/>"+this.endline(t,r,i));else if(!r.pretty||1!==h||u.type!==e.Text&&u.type!==e.Raw||null==u.value){if(r.dontPrettyTextNodes)for(c=0,f=(v=t.children).length;c<f;c++)if(((a=v[c]).type===e.Text||a.type===e.Raw)&&null!=a.value){r.suppressPrettyCount++,y=!0;break}for(g+=">"+this.endline(t,r,i),r.state=n.InsideTag,l=0,p=(w=t.children).length;l<p;l++)a=w[l],g+=this.writeChildNode(a,r,i+1);r.state=n.CloseTag,g+=this.indent(t,r,i)+"</"+t.name+">",y&&r.suppressPrettyCount--,g+=this.endline(t,r,i),r.state=n.None}else g+=">",r.state=n.InsideTag,r.suppressPrettyCount++,y=!0,g+=this.writeChildNode(u,r,i+1),r.suppressPrettyCount--,y=!1,r.state=n.CloseTag,g+="</"+t.name+">"+this.endline(t,r,i);return this.closeNode(t,r,i),g},t.prototype.writeChildNode=function(t,r,n){switch(t.type){case e.CData:return this.cdata(t,r,n);case e.Comment:return this.comment(t,r,n);case e.Element:return this.element(t,r,n);case e.Raw:return this.raw(t,r,n);case e.Text:return this.text(t,r,n);case e.ProcessingInstruction:return this.processingInstruction(t,r,n);case e.Dummy:return"";case e.Declaration:return this.declaration(t,r,n);case e.DocType:return this.docType(t,r,n);case e.AttributeDeclaration:return this.dtdAttList(t,r,n);case e.ElementDeclaration:return this.dtdElement(t,r,n);case e.EntityDeclaration:return this.dtdEntity(t,r,n);case e.NotationDeclaration:return this.dtdNotation(t,r,n);default:throw new Error("Unknown XML node type: "+t.constructor.name)}},t.prototype.processingInstruction=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<?",e.state=n.InsideTag,i+=t.target,t.value&&(i+=" "+t.value),e.state=n.CloseTag,i+=e.spaceBeforeSlash+"?>",i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.raw=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r),e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.text=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r),e.state=n.InsideTag,i+=t.value,e.state=n.CloseTag,i+=this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdAttList=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!ATTLIST",e.state=n.InsideTag,i+=" "+t.elementName+" "+t.attributeName+" "+t.attributeType,"#DEFAULT"!==t.defaultValueType&&(i+=" "+t.defaultValueType),t.defaultValue&&(i+=' "'+t.defaultValue+'"'),e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdElement=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!ELEMENT",e.state=n.InsideTag,i+=" "+t.name+" "+t.value,e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdEntity=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!ENTITY",e.state=n.InsideTag,t.pe&&(i+=" %"),i+=" "+t.name,t.value?i+=' "'+t.value+'"':(t.pubID&&t.sysID?i+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.sysID&&(i+=' SYSTEM "'+t.sysID+'"'),t.nData&&(i+=" NDATA "+t.nData)),e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.dtdNotation=function(t,e,r){var i;return this.openNode(t,e,r),e.state=n.OpenTag,i=this.indent(t,e,r)+"<!NOTATION",e.state=n.InsideTag,i+=" "+t.name,t.pubID&&t.sysID?i+=' PUBLIC "'+t.pubID+'" "'+t.sysID+'"':t.pubID?i+=' PUBLIC "'+t.pubID+'"':t.sysID&&(i+=' SYSTEM "'+t.sysID+'"'),e.state=n.CloseTag,i+=e.spaceBeforeSlash+">"+this.endline(t,e,r),e.state=n.None,this.closeNode(t,e,r),i},t.prototype.openNode=function(t,e,r){},t.prototype.closeNode=function(t,e,r){},t.prototype.openAttribute=function(t,e,r){},t.prototype.closeAttribute=function(t,e,r){},t}()}).call(this)},9374:function(t,e,r){(function(){var e,n,i,o,s,a,h,u,c,l;l=r(8676),u=l.assign,c=l.isFunction,i=r(4016),o=r(1888),s=r(2621),h=r(1663),a=r(1479),e=r(8745),n=r(6530),t.exports.create=function(t,e,r,n){var i,s;if(null==t)throw new Error("Root element needs a name.");return n=u({},e,r,n),s=(i=new o(n)).element(t),n.headless||(i.declaration(n),null==n.pubID&&null==n.sysID||i.dtd(n)),s},t.exports.begin=function(t,e,r){var n;return c(t)&&(e=(n=[t,e])[0],r=n[1],t={}),e?new s(t,e,r):new o(t)},t.exports.stringWriter=function(t){return new h(t)},t.exports.streamWriter=function(t,e){return new a(t,e)},t.exports.implementation=new i,t.exports.nodeType=e,t.exports.writerState=n}).call(this)}},e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}return r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),r(6124),r(300)})()}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9sYW5keG1sL3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2FyZWEvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi9jbG9uZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL2hlbHBlcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi9tZXRhL2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvdW5pb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi91bmlvbi9ub2RlX21vZHVsZXMvQHR1cmYvaW52YXJpYW50L2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaXN1YmguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2VtaXR0ZXItY29tcG9uZW50L2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9tYXJ0aW5lei1wb2x5Z29uLWNsaXBwaW5nL2Rpc3QvbWFydGluZXoudW1kLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcmFuZG9tY29sb3IvcmFuZG9tQ29sb3IuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9zYXgvbGliL3NheC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3N0cmVhbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL2xpYi9zdHJpbmdfZGVjb2Rlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3N0cmluZ19kZWNvZGVyL25vZGVfbW9kdWxlcy9zYWZlLWJ1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3RpbWVycy9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb25zdGFudHMvdmFsdWVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbnN0YW50cy9QcmltZU1lcmlkaWFuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbnN0YW50cy91bml0cy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9tYXRjaC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qU3RyaW5nLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvd2t0LXBhcnNlci9wYXJzZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy93a3QtcGFyc2VyL3Byb2Nlc3MuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy93a3QtcGFyc2VyL2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2RlZnMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvZ2xvYmFsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3BhcnNlQ29kZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9leHRlbmQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL21zZm56LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9zaWduLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9hZGp1c3RfbG9uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi90c2Zuei5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vcGhpMnouanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvbG9uZ2xhdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9tZXJjLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbnN0YW50cy9FbGxpcHNvaWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29uc3RhbnRzL0RhdHVtLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL1Byb2ouanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvZGVyaXZlQ29uc3RhbnRzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2RhdHVtLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2RhdHVtVXRpbHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvZGF0dW1fdHJhbnNmb3JtLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2FkanVzdF9heGlzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi90b1BvaW50LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NoZWNrU2FuaXR5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb3JlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvbWdycy9tZ3JzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL1BvaW50LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9wal9lbmZuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9wal9tbGZuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9wal9pbnZfbWxmbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy90bWVyYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vc2luaC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vaHlwb3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2dhdGcuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2NsZW5zX2NtcGx4LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9jb3NoLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2V0bWVyYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vY2xlbnMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL2FzaW5oeS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vbG9nMXB5LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3V0bS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vYWRqdXN0X3pvbmUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvY29tbW9uL3NyYXQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvZ2F1c3MuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvc3RlcmVhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3N0ZXJlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3NvbWVyYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9vbWVyYy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9sY2MuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMva3JvdmFrLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9tbGZuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9lMGZuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9lMWZuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9lMmZuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9lM2ZuLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9nTi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vYWRqdXN0X2xhdC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vaW1sZm4uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvY2Fzcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vcXNmbnouanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvbGFlYS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9jb21tb24vYXNpbnouanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvYWVhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2dub20uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvY2VhLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL2NvbW1vbi9pcXNmbnouanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvZXFjLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3BvbHkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvbnptZy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9taWxsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3NpbnUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvbW9sbC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9wcm9qZWN0aW9ucy9lcWRjLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3ZhbmRnLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2FlcWQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvb3J0aG8uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvcXNjLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL3JvYmluLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvcHJvajQvbGliL3Byb2plY3Rpb25zL2dlb2NlbnQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9saWIvcHJvamVjdGlvbnMvdHBlcnMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9wcm9qNC9wcm9qcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3Byb2o0L2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbGliL3Byb2plY3Rpb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL2xpYi91dGlsLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvdHJhbnNmb3JtLXRyYW5zbGF0ZS9ub2RlX21vZHVsZXMvQHR1cmYvbWV0YS9tYWluLmVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvdHJhbnNmb3JtLXRyYW5zbGF0ZS9ub2RlX21vZHVsZXMvQHR1cmYvY2xvbmUvbWFpbi5lcy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL0B0dXJmL3JodW1iLWRlc3RpbmF0aW9uL25vZGVfbW9kdWxlcy9AdHVyZi9oZWxwZXJzL21haW4uZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi9yaHVtYi1kZXN0aW5hdGlvbi9tYWluLmVzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMvQHR1cmYvaW52YXJpYW50L21haW4uZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi90cmFuc2Zvcm0tdHJhbnNsYXRlL21haW4uZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy9AdHVyZi90cmFuc2Zvcm0tdHJhbnNsYXRlL25vZGVfbW9kdWxlcy9AdHVyZi9oZWxwZXJzL21haW4uZXMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL2xpYi9waXBlLW5ldHdvcmsuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL2xpYi9jb252ZXJ0ZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL2xpYi9wYXJjZWwuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL2xpYi9zdXJmYWNlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9saWIvY2ctcG9pbnQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbGliL2JvbS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9saWIvYnVpbGRlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9saWIvZGVmYXVsdHMuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbGliL3BhcnNlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9saWIvcHJvY2Vzc29ycy5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9saWIveG1sMmpzLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9Eb2N1bWVudFBvc2l0aW9uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9Ob2RlVHlwZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvVXRpbGl0eS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvV3JpdGVyU3RhdGUuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTEF0dHJpYnV0ZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MQ0RhdGEuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTENoYXJhY3RlckRhdGEuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTENvbW1lbnQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTERPTUNvbmZpZ3VyYXRpb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTERPTUVycm9ySGFuZGxlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRE9NSW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTERPTVN0cmluZ0xpc3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTERUREF0dExpc3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTERUREVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTERUREVudGl0eS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRFRETm90YXRpb24uanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTERlY2xhcmF0aW9uLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxEb2NUeXBlLmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxEb2N1bWVudC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRG9jdW1lbnRDQi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MRHVtbXkuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTEVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTE5hbWVkTm9kZU1hcC5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MTm9kZS5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MTm9kZUxpc3QuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MUmF3LmpzIiwid2VicGFjazovL2xhbmR4bWwvLi9ub2RlX21vZHVsZXMveG1sMmpzL25vZGVfbW9kdWxlcy94bWxidWlsZGVyL2xpYi9YTUxTdHJlYW1Xcml0ZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTFN0cmluZ1dyaXRlci5qcyIsIndlYnBhY2s6Ly9sYW5keG1sLy4vbm9kZV9tb2R1bGVzL3htbDJqcy9ub2RlX21vZHVsZXMveG1sYnVpbGRlci9saWIvWE1MU3RyaW5naWZpZXIuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTFRleHQuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL1hNTFdyaXRlckJhc2UuanMiLCJ3ZWJwYWNrOi8vbGFuZHhtbC8uL25vZGVfbW9kdWxlcy94bWwyanMvbm9kZV9tb2R1bGVzL3htbGJ1aWxkZXIvbGliL2luZGV4LmpzIiwid2VicGFjazovL2xhbmR4bWwvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vbGFuZHhtbC93ZWJwYWNrL3N0YXJ0dXAiLCJ3ZWJwYWNrOi8vbGFuZHhtbC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9sYW5keG1sL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9sYW5keG1sL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vbGFuZHhtbC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2xhbmR4bWwvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9sYW5keG1sL3dlYnBhY2svcnVudGltZS9ub2RlIG1vZHVsZSBkZWNvcmF0b3IiXSwibmFtZXMiOlsicm9vdCIsImZhY3RvcnkiLCJleHBvcnRzIiwibW9kdWxlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIm1ldGFfMSIsIlJBRElVUyIsInBvbHlnb25BcmVhIiwiY29vcmRzIiwidG90YWwiLCJsZW5ndGgiLCJNYXRoIiwiYWJzIiwicmluZ0FyZWEiLCJpIiwicDEiLCJwMiIsImxvd2VySW5kZXgiLCJtaWRkbGVJbmRleCIsInVwcGVySW5kZXgiLCJjb29yZHNMZW5ndGgiLCJyYWQiLCJzaW4iLCJudW0iLCJQSSIsImdlb2pzb24iLCJnZW9tUmVkdWNlIiwidmFsdWUiLCJnZW9tIiwidHlwZSIsImNvb3JkaW5hdGVzIiwiY2FsY3VsYXRlQXJlYSIsImNsb25lRmVhdHVyZSIsImNsb25lZCIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicHJvcGVydGllcyIsImNsb25lUHJvcGVydGllcyIsImdlb21ldHJ5IiwiY2xvbmVHZW9tZXRyeSIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsIml0ZW0iLCJiYm94IiwiZ2VvbWV0cmllcyIsImciLCJkZWVwU2xpY2UiLCJzbGljZSIsImNvb3JkIiwiRXJyb3IiLCJmZWF0dXJlcyIsImZlYXR1cmUiLCJjbG9uZUZlYXR1cmVDb2xsZWN0aW9uIiwib3B0aW9ucyIsImZlYXQiLCJpZCIsInBvaW50IiwicG9seWdvbiIsIl9pIiwiY29vcmRpbmF0ZXNfMSIsInJpbmciLCJqIiwibGluZVN0cmluZyIsImZlYXR1cmVDb2xsZWN0aW9uIiwiZmMiLCJtdWx0aUxpbmVTdHJpbmciLCJtdWx0aVBvaW50IiwibXVsdGlQb2x5Z29uIiwicmFkaWFuc1RvTGVuZ3RoIiwicmFkaWFucyIsInVuaXRzIiwiZmFjdG9yIiwiZmFjdG9ycyIsImxlbmd0aFRvUmFkaWFucyIsImRpc3RhbmNlIiwicmFkaWFuc1RvRGVncmVlcyIsImlzTnVtYmVyIiwiaXNOYU4iLCJ0ZXN0IiwiZGVmaW5lUHJvcGVydHkiLCJlYXJ0aFJhZGl1cyIsImNlbnRpbWV0ZXJzIiwiY2VudGltZXRyZXMiLCJkZWdyZWVzIiwiZmVldCIsImluY2hlcyIsImtpbG9tZXRlcnMiLCJraWxvbWV0cmVzIiwibWV0ZXJzIiwibWV0cmVzIiwibWlsZXMiLCJtaWxsaW1ldGVycyIsIm1pbGxpbWV0cmVzIiwibmF1dGljYWxtaWxlcyIsInlhcmRzIiwidW5pdHNGYWN0b3JzIiwiYXJlYUZhY3RvcnMiLCJhY3JlcyIsInBvaW50cyIsInBvbHlnb25zIiwibGluZVN0cmluZ3MiLCJnZW9tZXRyeUNvbGxlY3Rpb24iLCJyb3VuZCIsInByZWNpc2lvbiIsIm11bHRpcGxpZXIiLCJwb3ciLCJsZW5ndGhUb0RlZ3JlZXMiLCJiZWFyaW5nVG9BemltdXRoIiwiYmVhcmluZyIsImFuZ2xlIiwiZGVncmVlc1RvUmFkaWFucyIsImNvbnZlcnRMZW5ndGgiLCJvcmlnaW5hbFVuaXQiLCJmaW5hbFVuaXQiLCJjb252ZXJ0QXJlYSIsImFyZWEiLCJzdGFydEZhY3RvciIsImZpbmFsRmFjdG9yIiwiaXNPYmplY3QiLCJpbnB1dCIsImNvbnN0cnVjdG9yIiwidmFsaWRhdGVCQm94IiwidmFsaWRhdGVJZCIsImluZGV4T2YiLCJyYWRpYW5zMmRlZ3JlZXMiLCJkZWdyZWVzMnJhZGlhbnMiLCJkaXN0YW5jZVRvRGVncmVlcyIsImRpc3RhbmNlVG9SYWRpYW5zIiwicmFkaWFuc1RvRGlzdGFuY2UiLCJiZWFyaW5nVG9BbmdsZSIsImNvbnZlcnREaXN0YW5jZSIsImhlbHBlcnMiLCJjb29yZEVhY2giLCJjYWxsYmFjayIsImV4Y2x1ZGVXcmFwQ29vcmQiLCJrIiwibCIsInN0b3BHIiwiZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24iLCJpc0dlb21ldHJ5Q29sbGVjdGlvbiIsIndyYXBTaHJpbmsiLCJjb29yZEluZGV4IiwiaXNGZWF0dXJlQ29sbGVjdGlvbiIsImlzRmVhdHVyZSIsInN0b3AiLCJmZWF0dXJlSW5kZXgiLCJnZW9tSW5kZXgiLCJtdWx0aUZlYXR1cmVJbmRleCIsImdlb21ldHJ5SW5kZXgiLCJnZW9tVHlwZSIsInByb3BFYWNoIiwiZmVhdHVyZUVhY2giLCJnZW9tRWFjaCIsImZlYXR1cmVQcm9wZXJ0aWVzIiwiZmVhdHVyZUJCb3giLCJmZWF0dXJlSWQiLCJ1bmRlZmluZWQiLCJmbGF0dGVuRWFjaCIsInNlZ21lbnRFYWNoIiwic2VnbWVudEluZGV4IiwicHJldmlvdXNDb29yZHMiLCJwcmV2aW91c0ZlYXR1cmVJbmRleCIsInByZXZpb3VzTXVsdGlJbmRleCIsInByZXZHZW9tSW5kZXgiLCJjdXJyZW50Q29vcmQiLCJmZWF0dXJlSW5kZXhDb29yZCIsIm11bHRpUGFydEluZGV4Q29vcmQiLCJjdXJyZW50U2VnbWVudCIsImxpbmVFYWNoIiwiY29vcmRSZWR1Y2UiLCJpbml0aWFsVmFsdWUiLCJwcmV2aW91c1ZhbHVlIiwicHJvcFJlZHVjZSIsImN1cnJlbnRQcm9wZXJ0aWVzIiwiZmVhdHVyZVJlZHVjZSIsImN1cnJlbnRGZWF0dXJlIiwiY29vcmRBbGwiLCJwdXNoIiwiY3VycmVudEdlb21ldHJ5IiwiZmxhdHRlblJlZHVjZSIsInNlZ21lbnRSZWR1Y2UiLCJzdGFydGVkIiwibGluZVJlZHVjZSIsImN1cnJlbnRMaW5lIiwiZmluZFNlZ21lbnQiLCJmaW5kUG9pbnQiLCJtYXJ0aW5leiIsImludmFyaWFudF8xIiwiaGVscGVyc18xIiwicG9seWdvbjEiLCJwb2x5Z29uMiIsImNvb3JkczEiLCJnZXRHZW9tIiwiY29vcmRzMiIsInVuaW9uZWQiLCJ1bmlvbiIsImdldENvb3JkIiwiZ2V0Q29vcmRzIiwiY29udGFpbnNOdW1iZXIiLCJnZW9qc29uVHlwZSIsIm5hbWUiLCJmZWF0dXJlT2YiLCJjb2xsZWN0aW9uT2YiLCJfYSIsImdldFR5cGUiLCJfYmFiZWxQb2x5ZmlsbCIsIk8iLCJ3cml0YWJsZSIsImNvbmZpZ3VyYWJsZSIsIlN0cmluZyIsInByb3RvdHlwZSIsInBhZFN0YXJ0IiwicGFkRW5kIiwic3BsaXQiLCJGdW5jdGlvbiIsImNhbGwiLCJiaW5kIiwiZ2xvYmFsIiwiT3AiLCJoYXNPd24iLCJoYXNPd25Qcm9wZXJ0eSIsIiRTeW1ib2wiLCJTeW1ib2wiLCJpdGVyYXRvclN5bWJvbCIsIml0ZXJhdG9yIiwiYXN5bmNJdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJ0b1N0cmluZ1RhZ1N5bWJvbCIsInRvU3RyaW5nVGFnIiwicnVudGltZSIsInJlZ2VuZXJhdG9yUnVudGltZSIsIndyYXAiLCJHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0IiwiR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCIsIkdlblN0YXRlRXhlY3V0aW5nIiwiR2VuU3RhdGVDb21wbGV0ZWQiLCJDb250aW51ZVNlbnRpbmVsIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJ0aGlzIiwiZ2V0UHJvdG8iLCJnZXRQcm90b3R5cGVPZiIsIk5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlIiwidmFsdWVzIiwiR3AiLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsIkdlbmVyYXRvciIsImNyZWF0ZSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiZ2VuRnVuIiwiY3RvciIsIm1hcmsiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsImF3cmFwIiwiYXJnIiwiX19hd2FpdCIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIkFzeW5jSXRlcmF0b3IiLCJhc3luYyIsImlubmVyRm4iLCJvdXRlckZuIiwidHJ5TG9jc0xpc3QiLCJpdGVyIiwibmV4dCIsInRoZW4iLCJyZXN1bHQiLCJkb25lIiwidG9TdHJpbmciLCJvYmplY3QiLCJyZXZlcnNlIiwicG9wIiwiQ29udGV4dCIsInJlc2V0Iiwic2tpcFRlbXBSZXNldCIsInByZXYiLCJzZW50IiwiX3NlbnQiLCJkZWxlZ2F0ZSIsIm1ldGhvZCIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5IiwiY2hhckF0Iiwicm9vdFJlY29yZCIsImNvbXBsZXRpb24iLCJydmFsIiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJleGNlcHRpb24iLCJjb250ZXh0IiwiaGFuZGxlIiwibG9jIiwiY2F1Z2h0IiwicmVjb3JkIiwiZW50cnkiLCJ0cnlMb2MiLCJoYXNDYXRjaCIsImhhc0ZpbmFsbHkiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhYnJ1cHQiLCJmaW5hbGx5RW50cnkiLCJjb21wbGV0ZSIsImFmdGVyTG9jIiwiZmluaXNoIiwidGhyb3duIiwiZGVsZWdhdGVZaWVsZCIsIml0ZXJhYmxlIiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwcm90b0dlbmVyYXRvciIsImdlbmVyYXRvciIsIl9pbnZva2UiLCJzdGF0ZSIsImRvbmVSZXN1bHQiLCJkZWxlZ2F0ZVJlc3VsdCIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJ0cnlDYXRjaCIsIm1ha2VJbnZva2VNZXRob2QiLCJmbiIsIm9iaiIsImVyciIsImludm9rZSIsInJlc29sdmUiLCJyZWplY3QiLCJQcm9taXNlIiwidW53cmFwcGVkIiwicHJldmlvdXNQcm9taXNlIiwicHJvY2VzcyIsImRvbWFpbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwicmV0dXJuIiwiVHlwZUVycm9yIiwiaW5mbyIsInB1c2hUcnlFbnRyeSIsImxvY3MiLCJpdGVyYXRvck1ldGhvZCIsIndpbmRvdyIsImJ5dGVMZW5ndGgiLCJiNjQiLCJsZW5zIiwiZ2V0TGVucyIsInZhbGlkTGVuIiwicGxhY2VIb2xkZXJzTGVuIiwidG9CeXRlQXJyYXkiLCJ0bXAiLCJhcnIiLCJBcnIiLCJfYnl0ZUxlbmd0aCIsImN1ckJ5dGUiLCJsZW4iLCJyZXZMb29rdXAiLCJjaGFyQ29kZUF0IiwiZnJvbUJ5dGVBcnJheSIsInVpbnQ4IiwiZXh0cmFCeXRlcyIsInBhcnRzIiwibWF4Q2h1bmtMZW5ndGgiLCJsZW4yIiwiZW5jb2RlQ2h1bmsiLCJsb29rdXAiLCJqb2luIiwiVWludDhBcnJheSIsImNvZGUiLCJzdGFydCIsImVuZCIsIm91dHB1dCIsImJhc2U2NCIsImllZWU3NTQiLCJCdWZmZXIiLCJTbG93QnVmZmVyIiwiYWxsb2MiLCJJTlNQRUNUX01BWF9CWVRFUyIsIktfTUFYX0xFTkdUSCIsImNyZWF0ZUJ1ZmZlciIsIlJhbmdlRXJyb3IiLCJidWYiLCJlbmNvZGluZ09yT2Zmc2V0IiwiYWxsb2NVbnNhZmUiLCJmcm9tIiwiaXNBcnJheUJ1ZmZlciIsImFycmF5IiwiYnl0ZU9mZnNldCIsImZyb21BcnJheUJ1ZmZlciIsInN0cmluZyIsImVuY29kaW5nIiwiaXNFbmNvZGluZyIsImFjdHVhbCIsIndyaXRlIiwiZnJvbVN0cmluZyIsImlzQnVmZmVyIiwiY2hlY2tlZCIsImNvcHkiLCJpc0FycmF5QnVmZmVyVmlldyIsIm51bWJlcklzTmFOIiwiZnJvbUFycmF5TGlrZSIsImRhdGEiLCJmcm9tT2JqZWN0IiwiYXNzZXJ0U2l6ZSIsInNpemUiLCJsb3dlcmVkQ2FzZSIsInV0ZjhUb0J5dGVzIiwiYmFzZTY0VG9CeXRlcyIsInRvTG93ZXJDYXNlIiwic2xvd1RvU3RyaW5nIiwiaGV4U2xpY2UiLCJ1dGY4U2xpY2UiLCJhc2NpaVNsaWNlIiwibGF0aW4xU2xpY2UiLCJiYXNlNjRTbGljZSIsInV0ZjE2bGVTbGljZSIsInN3YXAiLCJiIiwibiIsIm0iLCJiaWRpcmVjdGlvbmFsSW5kZXhPZiIsImJ1ZmZlciIsInZhbCIsImRpciIsImFycmF5SW5kZXhPZiIsImxhc3RJbmRleE9mIiwiaW5kZXhTaXplIiwiYXJyTGVuZ3RoIiwidmFsTGVuZ3RoIiwicmVhZCIsInJlYWRVSW50MTZCRSIsImZvdW5kSW5kZXgiLCJmb3VuZCIsImhleFdyaXRlIiwib2Zmc2V0IiwiTnVtYmVyIiwicmVtYWluaW5nIiwic3RyTGVuIiwicGFyc2VkIiwicGFyc2VJbnQiLCJzdWJzdHIiLCJ1dGY4V3JpdGUiLCJibGl0QnVmZmVyIiwiYXNjaWlXcml0ZSIsInN0ciIsImJ5dGVBcnJheSIsImFzY2lpVG9CeXRlcyIsImxhdGluMVdyaXRlIiwiYmFzZTY0V3JpdGUiLCJ1Y3MyV3JpdGUiLCJjIiwiaGkiLCJsbyIsInV0ZjE2bGVUb0J5dGVzIiwibWluIiwicmVzIiwic2Vjb25kQnl0ZSIsInRoaXJkQnl0ZSIsImZvdXJ0aEJ5dGUiLCJ0ZW1wQ29kZVBvaW50IiwiZmlyc3RCeXRlIiwiY29kZVBvaW50IiwiYnl0ZXNQZXJTZXF1ZW5jZSIsImNvZGVQb2ludHMiLCJNQVhfQVJHVU1FTlRTX0xFTkdUSCIsImZyb21DaGFyQ29kZSIsImFwcGx5IiwiZGVjb2RlQ29kZVBvaW50c0FycmF5Iiwia01heExlbmd0aCIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJmb28iLCJlIiwidHlwZWRBcnJheVN1cHBvcnQiLCJjb25zb2xlIiwiZXJyb3IiLCJzcGVjaWVzIiwiZW51bWVyYWJsZSIsInBvb2xTaXplIiwiZmlsbCIsImFsbG9jVW5zYWZlU2xvdyIsIl9pc0J1ZmZlciIsImNvbXBhcmUiLCJhIiwieCIsInkiLCJjb25jYXQiLCJsaXN0IiwicG9zIiwic3dhcDE2Iiwic3dhcDMyIiwic3dhcDY0IiwiYXJndW1lbnRzIiwiZXF1YWxzIiwiaW5zcGVjdCIsIm1heCIsIm1hdGNoIiwidGFyZ2V0IiwidGhpc1N0YXJ0IiwidGhpc0VuZCIsInRoaXNDb3B5IiwidGFyZ2V0Q29weSIsImluY2x1ZGVzIiwiaXNGaW5pdGUiLCJ0b0pTT04iLCJfYXJyIiwicmV0Iiwib3V0IiwiYnl0ZXMiLCJjaGVja09mZnNldCIsImV4dCIsImNoZWNrSW50IiwiY2hlY2tJRUVFNzU0Iiwid3JpdGVGbG9hdCIsImxpdHRsZUVuZGlhbiIsIm5vQXNzZXJ0Iiwid3JpdGVEb3VibGUiLCJuZXdCdWYiLCJzdWJhcnJheSIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVUludEJFIiwicmVhZFVJbnQ4IiwicmVhZFVJbnQxNkxFIiwicmVhZFVJbnQzMkxFIiwicmVhZFVJbnQzMkJFIiwicmVhZEludExFIiwicmVhZEludEJFIiwicmVhZEludDgiLCJyZWFkSW50MTZMRSIsInJlYWRJbnQxNkJFIiwicmVhZEludDMyTEUiLCJyZWFkSW50MzJCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVJbnRMRSIsIndyaXRlVUludEJFIiwid3JpdGVVSW50OCIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVJbnQxNkJFIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUludExFIiwibGltaXQiLCJzdWIiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJ0YXJnZXRTdGFydCIsInNldCIsIklOVkFMSURfQkFTRTY0X1JFIiwiSW5maW5pdHkiLCJsZWFkU3Vycm9nYXRlIiwidHJpbSIsInJlcGxhY2UiLCJiYXNlNjRjbGVhbiIsInNyYyIsImRzdCIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiaXQiLCJjb2YiLCJtc2ciLCJVTlNDT1BBQkxFUyIsIkFycmF5UHJvdG8iLCJhdCIsIlMiLCJpbmRleCIsInVuaWNvZGUiLCJDb25zdHJ1Y3RvciIsImZvcmJpZGRlbkZpZWxkIiwidG9PYmplY3QiLCJ0b0Fic29sdXRlSW5kZXgiLCJ0b0xlbmd0aCIsImNvcHlXaXRoaW4iLCJ0byIsImNvdW50IiwiaW5jIiwiYUxlbiIsImVuZFBvcyIsImZvck9mIiwiSVRFUkFUT1IiLCJ0b0lPYmplY3QiLCJJU19JTkNMVURFUyIsIiR0aGlzIiwiZWwiLCJmcm9tSW5kZXgiLCJjdHgiLCJJT2JqZWN0IiwiYXNjIiwiVFlQRSIsIiRjcmVhdGUiLCJJU19NQVAiLCJJU19GSUxURVIiLCJJU19TT01FIiwiSVNfRVZFUlkiLCJJU19GSU5EX0lOREVYIiwiTk9fSE9MRVMiLCJjYWxsYmFja2ZuIiwidGhhdCIsImYiLCJhRnVuY3Rpb24iLCJtZW1vIiwiaXNSaWdodCIsIlNQRUNJRVMiLCJvcmlnaW5hbCIsIkMiLCJzcGVjaWVzQ29uc3RydWN0b3IiLCJhcnJheVNsaWNlIiwiZmFjdG9yaWVzIiwiY29uc3RydWN0IiwiRiIsImFyZ3MiLCJwYXJ0QXJncyIsImJvdW5kIiwiVEFHIiwiQVJHIiwiVCIsIkIiLCJ0cnlHZXQiLCJjYWxsZWUiLCJkUCIsInJlZGVmaW5lQWxsIiwiYW5JbnN0YW5jZSIsIiRpdGVyRGVmaW5lIiwic3RlcCIsInNldFNwZWNpZXMiLCJERVNDUklQVE9SUyIsImZhc3RLZXkiLCJ2YWxpZGF0ZSIsIlNJWkUiLCJnZXRFbnRyeSIsIl9mIiwiZ2V0Q29uc3RydWN0b3IiLCJ3cmFwcGVyIiwiTkFNRSIsIkFEREVSIiwiX3QiLCJfbCIsImNsZWFyIiwiciIsInAiLCJ2IiwiaGFzIiwiZ2V0IiwiZGVmIiwic2V0U3Ryb25nIiwiaXRlcmF0ZWQiLCJraW5kIiwiX2siLCJjbGFzc29mIiwiZ2V0V2VhayIsImFuT2JqZWN0IiwiY3JlYXRlQXJyYXlNZXRob2QiLCIkaGFzIiwiYXJyYXlGaW5kIiwiYXJyYXlGaW5kSW5kZXgiLCJ1bmNhdWdodEZyb3plblN0b3JlIiwiVW5jYXVnaHRGcm96ZW5TdG9yZSIsImZpbmRVbmNhdWdodEZyb3plbiIsInN0b3JlIiwic3BsaWNlIiwidWZzdG9yZSIsIiRleHBvcnQiLCJyZWRlZmluZSIsIm1ldGEiLCJmYWlscyIsIiRpdGVyRGV0ZWN0Iiwic2V0VG9TdHJpbmdUYWciLCJpbmhlcml0SWZSZXF1aXJlZCIsIm1ldGhvZHMiLCJjb21tb24iLCJJU19XRUFLIiwiQmFzZSIsInByb3RvIiwiZml4TWV0aG9kIiwiS0VZIiwiZW50cmllcyIsImluc3RhbmNlIiwiSEFTTlRfQ0hBSU5JTkciLCJUSFJPV1NfT05fUFJJTUlUSVZFUyIsIkFDQ0VQVF9JVEVSQUJMRVMiLCJCVUdHWV9aRVJPIiwiJGluc3RhbmNlIiwiTkVFRCIsIkciLCJXIiwiY29yZSIsInZlcnNpb24iLCJfX2UiLCIkZGVmaW5lUHJvcGVydHkiLCJjcmVhdGVEZXNjIiwiZ2V0VGltZSIsIkRhdGUiLCIkdG9JU09TdHJpbmciLCJ0b0lTT1N0cmluZyIsImx6IiwiTmFOIiwiZCIsImdldFVUQ0Z1bGxZZWFyIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwicyIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJ0b1ByaW1pdGl2ZSIsIk5VTUJFUiIsImhpbnQiLCJkb2N1bWVudCIsImlzIiwiY3JlYXRlRWxlbWVudCIsImdldEtleXMiLCJnT1BTIiwicElFIiwiZ2V0U3ltYm9scyIsInN5bWJvbHMiLCJpc0VudW0iLCJoaWRlIiwic291cmNlIiwib3duIiwiZXhwIiwiSVNfRk9SQ0VEIiwiSVNfR0xPQkFMIiwiSVNfU1RBVElDIiwiSVNfUFJPVE8iLCJQIiwiSVNfQklORCIsImV4cFByb3RvIiwiVSIsIlIiLCJNQVRDSCIsInJlIiwiZXhlYyIsImRlZmluZWQiLCJ3a3MiLCJyZWdleHBFeGVjIiwiUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMiLCJncm91cHMiLCJTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMiLCJvcmlnaW5hbEV4ZWMiLCJTWU1CT0wiLCJERUxFR0FURVNfVE9fU1lNQk9MIiwiREVMRUdBVEVTX1RPX0VYRUMiLCJleGVjQ2FsbGVkIiwibmF0aXZlUmVnRXhwTWV0aG9kIiwiZm5zIiwibmF0aXZlTWV0aG9kIiwicmVnZXhwIiwiYXJnMiIsImZvcmNlU3RyaW5nTWV0aG9kIiwic3RyZm4iLCJyeGZuIiwiUmVnRXhwIiwiaWdub3JlQ2FzZSIsIm11bHRpbGluZSIsInN0aWNreSIsIklTX0NPTkNBVF9TUFJFQURBQkxFIiwiZmxhdHRlbkludG9BcnJheSIsInNvdXJjZUxlbiIsImRlcHRoIiwibWFwcGVyIiwidGhpc0FyZyIsImVsZW1lbnQiLCJzcHJlYWRhYmxlIiwidGFyZ2V0SW5kZXgiLCJzb3VyY2VJbmRleCIsIm1hcEZuIiwiaXNBcnJheUl0ZXIiLCJnZXRJdGVyRm4iLCJCUkVBSyIsIlJFVFVSTiIsIml0ZXJGbiIsIl9fZyIsImRvY3VtZW50RWxlbWVudCIsInVuIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJJdGVyYXRvcnMiLCJmbG9vciIsImlzUmVnRXhwIiwiZGVzY3JpcHRvciIsIkxJQlJBUlkiLCIkaXRlckNyZWF0ZSIsIkJVR0dZIiwiS0VZUyIsIlZBTFVFUyIsInJldHVyblRoaXMiLCJERUZBVUxUIiwiSVNfU0VUIiwiRk9SQ0VEIiwiZ2V0TWV0aG9kIiwiREVGX1ZBTFVFUyIsIlZBTFVFU19CVUciLCIkbmF0aXZlIiwiJGRlZmF1bHQiLCIkZW50cmllcyIsIiRhbnlOYXRpdmUiLCJTQUZFX0NMT1NJTkciLCJyaXRlciIsInNraXBDbG9zaW5nIiwic2FmZSIsIiRleHBtMSIsImV4cG0xIiwic2lnbiIsIkVQU0lMT04iLCJFUFNJTE9OMzIiLCJNQVgzMiIsIk1JTjMyIiwiZnJvdW5kIiwiJGFicyIsIiRzaWduIiwibG9nMXAiLCJsb2ciLCJzY2FsZSIsImluTG93IiwiaW5IaWdoIiwib3V0TG93Iiwib3V0SGlnaCIsIk1FVEEiLCJzZXREZXNjIiwiaXNFeHRlbnNpYmxlIiwiRlJFRVpFIiwicHJldmVudEV4dGVuc2lvbnMiLCJzZXRNZXRhIiwidyIsIm9uRnJlZXplIiwiTWFwIiwic2hhcmVkIiwiZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCIsInRhcmdldEtleSIsInRhcmdldE1ldGFkYXRhIiwia2V5TWV0YWRhdGEiLCJNZXRhZGF0YUtleSIsIm1ldGFkYXRhTWFwIiwiTWV0YWRhdGFWYWx1ZSIsIl8iLCJtYWNyb3Rhc2siLCJPYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiwiaXNOb2RlIiwiaGVhZCIsImxhc3QiLCJub3RpZnkiLCJmbHVzaCIsInBhcmVudCIsImV4aXQiLCJlbnRlciIsIm5leHRUaWNrIiwibmF2aWdhdG9yIiwic3RhbmRhbG9uZSIsInByb21pc2UiLCJ0b2dnbGUiLCJub2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJvYnNlcnZlIiwiY2hhcmFjdGVyRGF0YSIsInRhc2siLCJQcm9taXNlQ2FwYWJpbGl0eSIsIiQkcmVzb2x2ZSIsIiQkcmVqZWN0IiwiJGFzc2lnbiIsImFzc2lnbiIsIkEiLCJLIiwiZFBzIiwiZW51bUJ1Z0tleXMiLCJJRV9QUk9UTyIsIkVtcHR5IiwiY3JlYXRlRGljdCIsImlmcmFtZURvY3VtZW50IiwiaWZyYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwiY29udGVudFdpbmRvdyIsIm9wZW4iLCJsdCIsImNsb3NlIiwiUHJvcGVydGllcyIsIklFOF9ET01fREVGSU5FIiwiQXR0cmlidXRlcyIsImRlZmluZVByb3BlcnRpZXMiLCJyYW5kb20iLCJfX2RlZmluZVNldHRlcl9fIiwiZ09QRCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdPUE4iLCJ3aW5kb3dOYW1lcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRXaW5kb3dOYW1lcyIsIiRrZXlzIiwiaGlkZGVuS2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIk9iamVjdFByb3RvIiwibmFtZXMiLCJpc0VudHJpZXMiLCJSZWZsZWN0Iiwib3duS2V5cyIsIiRwYXJzZUZsb2F0IiwiJHRyaW0iLCIkcGFyc2VJbnQiLCJ3cyIsImhleCIsInJhZGl4IiwibmV3UHJvbWlzZUNhcGFiaWxpdHkiLCJwcm9taXNlQ2FwYWJpbGl0eSIsImJpdG1hcCIsIlNSQyIsIiR0b1N0cmluZyIsIlRPX1NUUklORyIsIlRQTCIsImlzRnVuY3Rpb24iLCJidWlsdGluRXhlYyIsInJlMSIsInJlMiIsInJlZ2V4cEZsYWdzIiwibmF0aXZlRXhlYyIsIm5hdGl2ZVJlcGxhY2UiLCJwYXRjaGVkRXhlYyIsIlVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyIsIk5QQ0dfSU5DTFVERUQiLCJsYXN0SW5kZXgiLCJyZUNvcHkiLCJyZWdFeHAiLCJyZXBsYWNlciIsInBhcnQiLCJDT0xMRUNUSU9OIiwibWFwcGluZyIsImNiIiwibmV4dEl0ZW0iLCJvZiIsImNoZWNrIiwiYnVnZ3kiLCJ0YWciLCJzdGF0IiwidWlkIiwiU0hBUkVEIiwibW9kZSIsImNvcHlyaWdodCIsIkQiLCJ0b0ludGVnZXIiLCJzZWFyY2hTdHJpbmciLCJxdW90IiwiY3JlYXRlSFRNTCIsImF0dHJpYnV0ZSIsInJlcGVhdCIsIm1heExlbmd0aCIsImZpbGxTdHJpbmciLCJsZWZ0Iiwic3RyaW5nTGVuZ3RoIiwiZmlsbFN0ciIsImludE1heExlbmd0aCIsImZpbGxMZW4iLCJzdHJpbmdGaWxsZXIiLCJjZWlsIiwic3BhY2VzIiwic3BhY2UiLCJsdHJpbSIsInJ0cmltIiwiZXhwb3J0ZXIiLCJBTElBUyIsIkZPUkNFIiwiZGVmZXIiLCJjaGFubmVsIiwicG9ydCIsImh0bWwiLCJjZWwiLCJzZXRUYXNrIiwic2V0SW1tZWRpYXRlIiwiY2xlYXJUYXNrIiwiY2xlYXJJbW1lZGlhdGUiLCJNZXNzYWdlQ2hhbm5lbCIsIkRpc3BhdGNoIiwiY291bnRlciIsInF1ZXVlIiwicnVuIiwibGlzdGVuZXIiLCJldmVudCIsIm5vdyIsInBvcnQyIiwicG9ydDEiLCJvbm1lc3NhZ2UiLCJwb3N0TWVzc2FnZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJpbXBvcnRTY3JpcHRzIiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVDaGlsZCIsInNldFRpbWVvdXQiLCJudW1iZXIiLCJ2YWx1ZU9mIiwiJHR5cGVkIiwiJGJ1ZmZlciIsInByb3BlcnR5RGVzYyIsInRvSW5kZXgiLCJjcmVhdGVBcnJheUluY2x1ZGVzIiwiQXJyYXlJdGVyYXRvcnMiLCJhcnJheUZpbGwiLCJhcnJheUNvcHlXaXRoaW4iLCIkRFAiLCIkR09QRCIsIkFSUkFZX0JVRkZFUiIsIlNIQVJFRF9CVUZGRVIiLCJCWVRFU19QRVJfRUxFTUVOVCIsIiRBcnJheUJ1ZmZlciIsIiREYXRhVmlldyIsIkRhdGFWaWV3IiwiYXJyYXlGb3JFYWNoIiwiYXJyYXlGaWx0ZXIiLCJhcnJheVNvbWUiLCJhcnJheUV2ZXJ5IiwiYXJyYXlJbmNsdWRlcyIsImFycmF5VmFsdWVzIiwiYXJyYXlLZXlzIiwiYXJyYXlFbnRyaWVzIiwiYXJyYXlMYXN0SW5kZXhPZiIsImFycmF5UmVkdWNlIiwicmVkdWNlIiwiYXJyYXlSZWR1Y2VSaWdodCIsInJlZHVjZVJpZ2h0IiwiYXJyYXlKb2luIiwiYXJyYXlTb3J0Iiwic29ydCIsImFycmF5VG9TdHJpbmciLCJhcnJheVRvTG9jYWxlU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJUWVBFRF9DT05TVFJVQ1RPUiIsIkRFRl9DT05TVFJVQ1RPUiIsIkFMTF9DT05TVFJVQ1RPUlMiLCJDT05TVFIiLCJUWVBFRF9BUlJBWSIsIlRZUEVEIiwiVklFVyIsIldST05HX0xFTkdUSCIsIiRtYXAiLCJhbGxvY2F0ZSIsIkxJVFRMRV9FTkRJQU4iLCJVaW50MTZBcnJheSIsIkZPUkNFRF9TRVQiLCJ0b09mZnNldCIsIkJZVEVTIiwic3BlY2llc0Zyb21MaXN0IiwiZnJvbUxpc3QiLCJhZGRHZXR0ZXIiLCJpbnRlcm5hbCIsIl9kIiwiJGZyb20iLCJtYXBmbiIsIiRvZiIsIlRPX0xPQ0FMRV9CVUciLCIkdG9Mb2NhbGVTdHJpbmciLCJldmVyeSIsImZpbHRlciIsImZpbmQiLCJwcmVkaWNhdGUiLCJmaW5kSW5kZXgiLCJzZWFyY2hFbGVtZW50Iiwic2VwYXJhdG9yIiwibWlkZGxlIiwic29tZSIsImNvbXBhcmVmbiIsImJlZ2luIiwiJGJlZ2luIiwiJHNsaWNlIiwiJHNldCIsImFycmF5TGlrZSIsIiRpdGVyYXRvcnMiLCJpc1RBSW5kZXgiLCIkZ2V0RGVzYyIsIiRzZXREZXNjIiwiZGVzYyIsIiRUeXBlZEFycmF5UHJvdG90eXBlJCIsIkNMQU1QRUQiLCJHRVRURVIiLCJTRVRURVIiLCJUeXBlZEFycmF5IiwiVEFDIiwiQUJWIiwiVHlwZWRBcnJheVByb3RvdHlwZSIsImFkZEVsZW1lbnQiLCJvIiwiZ2V0dGVyIiwic2V0dGVyIiwiJG9mZnNldCIsIiRsZW5ndGgiLCJrbGFzcyIsIiRsZW4iLCIkbmF0aXZlSXRlcmF0b3IiLCJDT1JSRUNUX0lURVJfTkFNRSIsIiRpdGVyYXRvciIsIkRBVEFfVklFVyIsIldST05HX0lOREVYIiwiQmFzZUJ1ZmZlciIsIkxOMiIsIkJVRkZFUiIsIkJZVEVfTEVOR1RIIiwiQllURV9PRkZTRVQiLCIkQlVGRkVSIiwiJExFTkdUSCIsIiRPRkZTRVQiLCJwYWNrSUVFRTc1NCIsIm1MZW4iLCJuQnl0ZXMiLCJlTGVuIiwiZU1heCIsImVCaWFzIiwicnQiLCJ1bnBhY2tJRUVFNzU0IiwibkJpdHMiLCJ1bnBhY2tJMzIiLCJwYWNrSTgiLCJwYWNrSTE2IiwicGFja0kzMiIsInBhY2tGNjQiLCJwYWNrRjMyIiwidmlldyIsImlzTGl0dGxlRW5kaWFuIiwiaW50SW5kZXgiLCJfYiIsInBhY2siLCJjb252ZXJzaW9uIiwiQXJyYXlCdWZmZXJQcm90byIsIiRzZXRJbnQ4Iiwic2V0SW50OCIsImdldEludDgiLCJzZXRVaW50OCIsImJ1ZmZlckxlbmd0aCIsImdldFVpbnQ4IiwiZ2V0SW50MTYiLCJnZXRVaW50MTYiLCJnZXRJbnQzMiIsImdldFVpbnQzMiIsImdldEZsb2F0MzIiLCJnZXRGbG9hdDY0Iiwic2V0SW50MTYiLCJzZXRVaW50MTYiLCJzZXRJbnQzMiIsInNldFVpbnQzMiIsInNldEZsb2F0MzIiLCJzZXRGbG9hdDY0IiwiVHlwZWQiLCJUeXBlZEFycmF5Q29uc3RydWN0b3JzIiwicHgiLCJ1c2VyQWdlbnQiLCJ3a3NFeHQiLCJVU0VfU1lNQk9MIiwiJHJlIiwiZXNjYXBlIiwiJGV2ZXJ5IiwiJGZpbHRlciIsIiRmaW5kIiwiZm9yY2VkIiwiJGZvckVhY2giLCJTVFJJQ1QiLCJjcmVhdGVQcm9wZXJ0eSIsIiRpbmRleE9mIiwiTkVHQVRJVkVfWkVSTyIsImFkZFRvVW5zY29wYWJsZXMiLCJBcmd1bWVudHMiLCIkcmVkdWNlIiwidXBUbyIsIiRzb21lIiwiJHNvcnQiLCJwdiIsIlRPX1BSSU1JVElWRSIsIkRhdGVQcm90byIsIklOVkFMSURfREFURSIsIkhBU19JTlNUQU5DRSIsIkZ1bmN0aW9uUHJvdG8iLCJGUHJvdG8iLCJuYW1lUkUiLCJzdHJvbmciLCJNQVAiLCJzcXJ0IiwiJGFjb3NoIiwiYWNvc2giLCJNQVhfVkFMVUUiLCIkYXNpbmgiLCJhc2luaCIsIiRhdGFuaCIsImF0YW5oIiwiY2JydCIsImNsejMyIiwiTE9HMkUiLCJjb3NoIiwiaHlwb3QiLCJ2YWx1ZTEiLCJ2YWx1ZTIiLCJkaXYiLCJzdW0iLCJsYXJnIiwiJGltdWwiLCJpbXVsIiwiVUlOVDE2IiwieG4iLCJ5biIsInhsIiwieWwiLCJsb2cxMCIsIkxPRzEwRSIsImxvZzIiLCJzaW5oIiwiRSIsInRhbmgiLCJ0cnVuYyIsIiROdW1iZXIiLCJCUk9LRU5fQ09GIiwiVFJJTSIsInRvTnVtYmVyIiwiYXJndW1lbnQiLCJ0aGlyZCIsIm1heENvZGUiLCJmaXJzdCIsImRpZ2l0cyIsIl9pc0Zpbml0ZSIsImlzSW50ZWdlciIsImlzU2FmZUludGVnZXIiLCJNQVhfU0FGRV9JTlRFR0VSIiwiTUlOX1NBRkVfSU5URUdFUiIsInBhcnNlRmxvYXQiLCJhTnVtYmVyVmFsdWUiLCIkdG9GaXhlZCIsInRvRml4ZWQiLCJFUlJPUiIsIlpFUk8iLCJtdWx0aXBseSIsImMyIiwiZGl2aWRlIiwibnVtVG9TdHJpbmciLCJ0IiwiYWNjIiwiZnJhY3Rpb25EaWdpdHMiLCJ6IiwieDIiLCIkZmFpbHMiLCIkdG9QcmVjaXNpb24iLCJ0b1ByZWNpc2lvbiIsIiRmcmVlemUiLCIkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiJGdldFByb3RvdHlwZU9mIiwiJGlzRXh0ZW5zaWJsZSIsIiRpc0Zyb3plbiIsIiRpc1NlYWxlZCIsIiRwcmV2ZW50RXh0ZW5zaW9ucyIsIiRzZWFsIiwiSW50ZXJuYWwiLCJuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkiLCJPd25Qcm9taXNlQ2FwYWJpbGl0eSIsIldyYXBwZXIiLCJtaWNyb3Rhc2siLCJuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSIsInBlcmZvcm0iLCJwcm9taXNlUmVzb2x2ZSIsIlBST01JU0UiLCJ2ZXJzaW9ucyIsInY4IiwiJFByb21pc2UiLCJlbXB0eSIsIlVTRV9OQVRJVkUiLCJGYWtlUHJvbWlzZSIsIlByb21pc2VSZWplY3Rpb25FdmVudCIsImlzVGhlbmFibGUiLCJpc1JlamVjdCIsIl9uIiwiY2hhaW4iLCJfYyIsIl92Iiwib2siLCJfcyIsInJlYWN0aW9uIiwiZXhpdGVkIiwiaGFuZGxlciIsImZhaWwiLCJfaCIsIm9uSGFuZGxlVW5oYW5kbGVkIiwib25VbmhhbmRsZWQiLCJ1bmhhbmRsZWQiLCJpc1VuaGFuZGxlZCIsImVtaXQiLCJvbnVuaGFuZGxlZHJlamVjdGlvbiIsInJlYXNvbiIsIm9ucmVqZWN0aW9uaGFuZGxlZCIsIiRyZWplY3QiLCJfdyIsIiRyZXNvbHZlIiwiZXhlY3V0b3IiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJjYXBhYmlsaXR5IiwiYWxsIiwiJGluZGV4IiwiYWxyZWFkeUNhbGxlZCIsInJhY2UiLCJyQXBwbHkiLCJmQXBwbHkiLCJ0aGlzQXJndW1lbnQiLCJhcmd1bWVudHNMaXN0IiwiTCIsInJDb25zdHJ1Y3QiLCJORVdfVEFSR0VUX0JVRyIsIkFSR1NfQlVHIiwiVGFyZ2V0IiwibmV3VGFyZ2V0IiwiJGFyZ3MiLCJwcm9wZXJ0eUtleSIsImF0dHJpYnV0ZXMiLCJkZWxldGVQcm9wZXJ0eSIsIkVudW1lcmF0ZSIsImVudW1lcmF0ZSIsInJlY2VpdmVyIiwic2V0UHJvdG8iLCJWIiwiZXhpc3RpbmdEZXNjcmlwdG9yIiwib3duRGVzYyIsIiRmbGFncyIsIiRSZWdFeHAiLCJDT1JSRUNUX05FVyIsInRpUkUiLCJwaVJFIiwiZmlVIiwicHJveHkiLCJmbGFncyIsImFkdmFuY2VTdHJpbmdJbmRleCIsInJlZ0V4cEV4ZWMiLCIkbWF0Y2giLCJtYXliZUNhbGxOYXRpdmUiLCJyeCIsImZ1bGxVbmljb2RlIiwibWF0Y2hTdHIiLCJTVUJTVElUVVRJT05fU1lNQk9MUyIsIlNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEIiwiUkVQTEFDRSIsIiRyZXBsYWNlIiwic2VhcmNoVmFsdWUiLCJyZXBsYWNlVmFsdWUiLCJmdW5jdGlvbmFsUmVwbGFjZSIsInJlc3VsdHMiLCJhY2N1bXVsYXRlZFJlc3VsdCIsIm5leHRTb3VyY2VQb3NpdGlvbiIsIm1hdGNoZWQiLCJwb3NpdGlvbiIsImNhcHR1cmVzIiwibmFtZWRDYXB0dXJlcyIsInJlcGxhY2VyQXJncyIsInJlcGxhY2VtZW50IiwiZ2V0U3Vic3RpdHV0aW9uIiwidGFpbFBvcyIsImNoIiwiY2FwdHVyZSIsInNhbWVWYWx1ZSIsIlNFQVJDSCIsIiRzZWFyY2giLCJwcmV2aW91c0xhc3RJbmRleCIsImNhbGxSZWdFeHBFeGVjIiwiJG1pbiIsIiRwdXNoIiwiTUFYX1VJTlQzMiIsIlNVUFBPUlRTX1kiLCJTUExJVCIsIiRzcGxpdCIsImludGVybmFsU3BsaXQiLCJsYXN0TGVuZ3RoIiwibGFzdExhc3RJbmRleCIsInNwbGl0TGltaXQiLCJzZXBhcmF0b3JDb3B5Iiwic3BsaXR0ZXIiLCJ1bmljb2RlTWF0Y2hpbmciLCJsaW0iLCJxIiwiYWRkIiwiJGF0IiwiY29kZVBvaW50QXQiLCJFTkRTX1dJVEgiLCIkZW5kc1dpdGgiLCJlbmRzV2l0aCIsImVuZFBvc2l0aW9uIiwic2VhcmNoIiwiY29sb3IiLCIkZnJvbUNvZGVQb2ludCIsImZyb21Db2RlUG9pbnQiLCJJTkNMVURFUyIsInVybCIsInJhdyIsImNhbGxTaXRlIiwidHBsIiwiU1RBUlRTX1dJVEgiLCIkc3RhcnRzV2l0aCIsInN0YXJ0c1dpdGgiLCJ3a3NEZWZpbmUiLCJlbnVtS2V5cyIsIl9jcmVhdGUiLCJnT1BORXh0IiwiJEdPUFMiLCIkSlNPTiIsIkpTT04iLCJfc3RyaW5naWZ5Iiwic3RyaW5naWZ5IiwiSElEREVOIiwiU3ltYm9sUmVnaXN0cnkiLCJBbGxTeW1ib2xzIiwiT1BTeW1ib2xzIiwiUU9iamVjdCIsImZpbmRDaGlsZCIsInNldFN5bWJvbERlc2MiLCJwcm90b0Rlc2MiLCJzeW0iLCJpc1N5bWJvbCIsIiRkZWZpbmVQcm9wZXJ0aWVzIiwiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwiJGdldE93blByb3BlcnR5TmFtZXMiLCIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiSVNfT1AiLCJlczZTeW1ib2xzIiwid2VsbEtub3duU3ltYm9scyIsImtleUZvciIsInVzZVNldHRlciIsInVzZVNpbXBsZSIsIkZBSUxTX09OX1BSSU1JVElWRVMiLCIkcmVwbGFjZXIiLCIkaXNWaWV3IiwiZmluIiwidmlld1MiLCJ2aWV3VCIsImluaXQiLCJJbnRlcm5hbE1hcCIsImVhY2giLCJ3ZWFrIiwiTkFUSVZFX1dFQUtfTUFQIiwiSVNfSUUxMSIsIkFjdGl2ZVhPYmplY3QiLCJXRUFLX01BUCIsIiRXZWFrTWFwIiwiV0VBS19TRVQiLCJhcnJheVNwZWNpZXNDcmVhdGUiLCJmbGF0TWFwIiwiZmxhdHRlbiIsImRlcHRoQXJnIiwiJGluY2x1ZGVzIiwiYXNhcCIsImlzRXJyb3IiLCJjbGFtcCIsImxvd2VyIiwidXBwZXIiLCJERUdfUEVSX1JBRCIsIlJBRF9QRVJfREVHIiwiZnNjYWxlIiwiaWFkZGgiLCJ4MCIsIngxIiwieTAiLCJ5MSIsIiR4MCIsIiR5MCIsImltdWxoIiwidSIsIiR1IiwiJHYiLCJ1MCIsInYwIiwidTEiLCJ2MSIsImlzdWJoIiwic2lnbmJpdCIsInVtdWxoIiwiX19kZWZpbmVHZXR0ZXJfXyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJnZXREZXNjIiwiX19sb29rdXBHZXR0ZXJfXyIsIl9fbG9va3VwU2V0dGVyX18iLCIkdmFsdWVzIiwiT0JTRVJWQUJMRSIsImNsZWFudXBTdWJzY3JpcHRpb24iLCJzdWJzY3JpcHRpb24iLCJjbGVhbnVwIiwic3Vic2NyaXB0aW9uQ2xvc2VkIiwiX28iLCJjbG9zZVN1YnNjcmlwdGlvbiIsIlN1YnNjcmlwdGlvbiIsIm9ic2VydmVyIiwic3Vic2NyaWJlciIsIlN1YnNjcmlwdGlvbk9ic2VydmVyIiwidW5zdWJzY3JpYmUiLCIkT2JzZXJ2YWJsZSIsInN1YnNjcmliZSIsIm9ic2VydmFibGUiLCJpdGVtcyIsIk9ic2VydmFibGUiLCJvbkZpbmFsbHkiLCJtZXRhZGF0YSIsInRvTWV0YUtleSIsIm9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEiLCJkZWZpbmVNZXRhZGF0YSIsIm1ldGFkYXRhS2V5IiwibWV0YWRhdGFWYWx1ZSIsImRlbGV0ZU1ldGFkYXRhIiwiU2V0Iiwib3JkaW5hcnlPd25NZXRhZGF0YUtleXMiLCJvcmRpbmFyeU1ldGFkYXRhS2V5cyIsIm9LZXlzIiwicEtleXMiLCJnZXRNZXRhZGF0YUtleXMiLCJvcmRpbmFyeUhhc093bk1ldGFkYXRhIiwib3JkaW5hcnlHZXRPd25NZXRhZGF0YSIsIm9yZGluYXJ5R2V0TWV0YWRhdGEiLCJnZXRNZXRhZGF0YSIsImdldE93bk1ldGFkYXRhS2V5cyIsImdldE93bk1ldGFkYXRhIiwib3JkaW5hcnlIYXNNZXRhZGF0YSIsImhhc01ldGFkYXRhIiwiaGFzT3duTWV0YWRhdGEiLCIkbWV0YWRhdGEiLCJnZXRGbGFncyIsIlJlZ0V4cFByb3RvIiwiJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yIiwiX3IiLCJtYXRjaEFsbCIsIiRwYWQiLCJXRUJLSVRfQlVHIiwiVE9fU1RSSU5HX1RBRyIsIkFycmF5VmFsdWVzIiwiRE9NSXRlcmFibGVzIiwiQ1NTUnVsZUxpc3QiLCJDU1NTdHlsZURlY2xhcmF0aW9uIiwiQ1NTVmFsdWVMaXN0IiwiQ2xpZW50UmVjdExpc3QiLCJET01SZWN0TGlzdCIsIkRPTVN0cmluZ0xpc3QiLCJET01Ub2tlbkxpc3QiLCJEYXRhVHJhbnNmZXJJdGVtTGlzdCIsIkZpbGVMaXN0IiwiSFRNTEFsbENvbGxlY3Rpb24iLCJIVE1MQ29sbGVjdGlvbiIsIkhUTUxGb3JtRWxlbWVudCIsIkhUTUxTZWxlY3RFbGVtZW50IiwiTWVkaWFMaXN0IiwiTWltZVR5cGVBcnJheSIsIk5hbWVkTm9kZU1hcCIsIk5vZGVMaXN0IiwiUGFpbnRSZXF1ZXN0TGlzdCIsIlBsdWdpbiIsIlBsdWdpbkFycmF5IiwiU1ZHTGVuZ3RoTGlzdCIsIlNWR051bWJlckxpc3QiLCJTVkdQYXRoU2VnTGlzdCIsIlNWR1BvaW50TGlzdCIsIlNWR1N0cmluZ0xpc3QiLCJTVkdUcmFuc2Zvcm1MaXN0IiwiU291cmNlQnVmZmVyTGlzdCIsIlN0eWxlU2hlZXRMaXN0IiwiVGV4dFRyYWNrQ3VlTGlzdCIsIlRleHRUcmFja0xpc3QiLCJUb3VjaExpc3QiLCJjb2xsZWN0aW9ucyIsImV4cGxpY2l0IiwiQ29sbGVjdGlvbiIsIiR0YXNrIiwiTVNJRSIsInRpbWUiLCJib3VuZEFyZ3MiLCJzZXRJbnRlcnZhbCIsIkVtaXR0ZXIiLCJtaXhpbiIsIm9uIiwiX2NhbGxiYWNrcyIsIm9uY2UiLCJvZmYiLCJyZW1vdmVMaXN0ZW5lciIsInJlbW92ZUFsbExpc3RlbmVycyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjYWxsYmFja3MiLCJsaXN0ZW5lcnMiLCJoYXNMaXN0ZW5lcnMiLCJFdmVudEVtaXR0ZXIiLCJfZXZlbnRzIiwiX21heExpc3RlbmVycyIsImlzVW5kZWZpbmVkIiwiZGVmYXVsdE1heExpc3RlbmVycyIsInNldE1heExpc3RlbmVycyIsImVyIiwiYWRkTGlzdGVuZXIiLCJuZXdMaXN0ZW5lciIsIndhcm5lZCIsInRyYWNlIiwiZmlyZWQiLCJsaXN0ZW5lckNvdW50IiwiZXZsaXN0ZW5lciIsImVtaXR0ZXIiLCJpc0xFIiwiREVGQVVMVF9DT01QQVJFIiwiU3BsYXlUcmVlIiwibm9EdXBsaWNhdGVzIiwiX2NvbXBhcmUiLCJfcm9vdCIsIl9zaXplIiwiX25vRHVwbGljYXRlcyIsInByb3RvdHlwZUFjY2Vzc29ycyIsImxvYWRSZWN1cnNpdmUiLCJyaWdodCIsInBpdm90Iiwicm90YXRlTGVmdCIsInJvdGF0ZVJpZ2h0IiwiX3NwbGF5IiwidGhpcyQxIiwic3BsYXkiLCJncCIsImdncCIsIm1pbk5vZGUiLCJtYXhOb2RlIiwiaW5zZXJ0IiwiY29tcCIsImNtcCIsImNvbnRhaW5zIiwiY29tcGFyYXRvciIsInJlbW92ZSIsInJlbW92ZU5vZGUiLCJlcmFzZSIsInNNYXgiLCJyZXR1cm5WYWx1ZSIsInN1Y2Nlc3NvciIsInByZWRlY2Vzc29yIiwiY3VycmVudCIsInJhbmdlIiwibG93IiwiaGlnaCIsIlEiLCJsb2FkIiwicHJlc29ydCIsImlzRW1wdHkiLCJjcmVhdGVUcmVlIiwiY29tcHV0ZUZpZWxkcyIsIm9wZXJhdGlvbiIsImluT3V0Iiwib3RoZXJJbk91dCIsImlzU3ViamVjdCIsImlzVmVydGljYWwiLCJwcmV2SW5SZXN1bHQiLCJpblJlc3VsdCIsIlN3ZWVwRXZlbnQiLCJvdGhlckV2ZW50IiwiZWRnZVR5cGUiLCJyZXN1bHRJbk91dCIsImlzRXh0ZXJpb3JSaW5nIiwic2lnbmVkQXJlYSIsInAwIiwiY29tcGFyZUV2ZW50cyIsImUxIiwiZTIiLCJpc0JlbG93Iiwic3BlY2lhbENhc2VzIiwiZGl2aWRlU2VnbWVudCIsInNlIiwid2FybiIsImNvbnRvdXJJZCIsImNyb3NzUHJvZHVjdCIsImRvdFByb2R1Y3QiLCJwb3NzaWJsZUludGVyc2VjdGlvbiIsInNlMSIsInNlMiIsImludGVyIiwiYTEiLCJhMiIsImIxIiwiYjIiLCJub0VuZHBvaW50VG91Y2giLCJ2YSIsInZiIiwidG9Qb2ludCIsImtyb3NzIiwic3FyS3Jvc3MiLCJzcXJMZW5BIiwic2EiLCJzYiIsInNtaW4iLCJzbWF4IiwiaW50ZXJzZWN0aW9uIiwibmludGVyc2VjdGlvbnMiLCJldmVudHMiLCJsZWZ0Q29pbmNpZGUiLCJyaWdodENvaW5jaWRlIiwiY29tcGFyZVNlZ21lbnRzIiwibGUxIiwibGUyIiwiaXNBYm92ZSIsIm5leHRQb3MiLCJyZXN1bHRFdmVudHMiLCJwcm9jZXNzZWQiLCJvcmlnSW5kZXgiLCJuZXdQb3MiLCJjb25uZWN0RWRnZXMiLCJzb3J0ZWRFdmVudHMiLCJzb3J0ZWQiLCJvcmRlckV2ZW50cyIsImNvbnRvdXIiLCJyaW5nSWQiLCJpbml0aWFsIiwiY2xvbmUiLCJ0aW55cXVldWUiLCJUaW55UXVldWUiLCJkZWZhdWx0XzEiLCJkZWZhdWx0Q29tcGFyZSIsIl9kb3duIiwiX3VwIiwidG9wIiwicGVlayIsImhhbGZMZW5ndGgiLCJiZXN0IiwiZGVmYXVsdCIsInByb2Nlc3NQb2x5Z29uIiwiY29udG91ck9ySG9sZSIsInMxIiwiczIiLCJFTVBUWSIsImJvb2xlYW4iLCJzdWJqZWN0IiwiY2xpcHBpbmciLCJ0cml2aWFsIiwidHJpdmlhbE9wZXJhdGlvbiIsInNiYm94IiwiY2Jib3giLCJldmVudFF1ZXVlIiwicG9seWdvblNldCIsImlpIiwiamoiLCJmaWxsUXVldWUiLCJjb21wYXJlQkJveGVzIiwic3dlZXBMaW5lIiwicmlnaHRib3VuZCIsInByZXZFdmVudCIsInByZXZwcmV2Iiwic3ViZGl2aWRlIiwib3BlcmF0aW9ucyIsIlVOSU9OIiwiRElGRkVSRU5DRSIsIklOVEVSU0VDVElPTiIsIlhPUiIsImRpZmYiLCJ4b3IiLCJyYW5kb21Db2xvciIsInNlZWQiLCJjb2xvckRpY3Rpb25hcnkiLCJkZWZpbmVDb2xvciIsImNvbG9yUmFuZ2VzIiwic3RyaW5nVG9JbnRlZ2VyIiwiSCIsInRvdGFsQ29sb3JzIiwiY29sb3JzIiwiaHN2IiwiZm9ybWF0IiwiSFNWdG9IU0wiLCJoc2wiLCJoc2xDb2xvciIsImFscGhhIiwiSFNWdG9SR0IiLCJyZ2JDb2xvciIsInJnYiIsImNvbXBvbmVudFRvSGV4IiwiSFNWdG9IZXgiLCJzZXRGb3JtYXQiLCJwaWNrSHVlIiwicGlja1NhdHVyYXRpb24iLCJwaWNrQnJpZ2h0bmVzcyIsImh1ZSIsInJhbmRvbVdpdGhpbiIsImh1ZVJhbmdlIiwiY29sb3JIdWUiLCJnZXRDb2xvckluZm8iLCJIZXhUb0hTQiIsImdldFJlYWxIdWVSYW5nZSIsImNvbG9ySW5wdXQiLCJnZXRIdWVSYW5nZSIsImx1bWlub3NpdHkiLCJzYXR1cmF0aW9uUmFuZ2UiLCJnZXRTYXR1cmF0aW9uUmFuZ2UiLCJzTWluIiwiYk1pbiIsImxvd2VyQm91bmRzIiwidjIiLCJnZXRNaW5pbXVtQnJpZ2h0bmVzcyIsImJNYXgiLCJjb2xvck5hbWUiLCJybmQiLCJicmlnaHRuZXNzUmFuZ2UiLCJoIiwiaF9pIiwicmVkIiwiZ3JlZW4iLCJibHVlIiwiY01heCIsImRlbHRhIiwic2F0dXJhdGlvbiIsInNheCIsInBhcnNlciIsInN0cmljdCIsIm9wdCIsIlNBWFBhcnNlciIsIlNBWFN0cmVhbSIsImNyZWF0ZVN0cmVhbSIsIk1BWF9CVUZGRVJfTEVOR1RIIiwiYnVmZmVycyIsImNsZWFyQnVmZmVycyIsImJ1ZmZlckNoZWNrUG9zaXRpb24iLCJsb3dlcmNhc2UiLCJsb3dlcmNhc2V0YWdzIiwibG9vc2VDYXNlIiwidGFncyIsImNsb3NlZCIsImNsb3NlZFJvb3QiLCJzYXdSb290Iiwibm9zY3JpcHQiLCJCRUdJTiIsIkVOVElUSUVTIiwiYXR0cmliTGlzdCIsInhtbG5zIiwibnMiLCJyb290TlMiLCJ0cmFja1Bvc2l0aW9uIiwibGluZSIsImNvbHVtbiIsIkVWRU5UUyIsImNodW5rIiwiT1BFTl9XQUtBIiwic3RhcnRUYWdQb3NpdGlvbiIsIm5vdCIsIndoaXRlc3BhY2UiLCJzdHJpY3RGYWlsIiwidGV4dE5vZGUiLCJURVhUIiwic3RhcnRpIiwic3Vic3RyaW5nIiwiVEVYVF9FTlRJVFkiLCJTQ1JJUFQiLCJTQ1JJUFRfRU5ESU5HIiwic2NyaXB0IiwiQ0xPU0VfVEFHIiwiU0dNTF9ERUNMIiwic2dtbERlY2wiLCJuYW1lU3RhcnQiLCJPUEVOX1RBRyIsInRhZ05hbWUiLCJQUk9DX0lOU1QiLCJwcm9jSW5zdE5hbWUiLCJwcm9jSW5zdEJvZHkiLCJwYWQiLCJ0b1VwcGVyQ2FzZSIsImVtaXROb2RlIiwiQ0RBVEEiLCJjZGF0YSIsIkNPTU1FTlQiLCJjb21tZW50IiwiRE9DVFlQRSIsImRvY3R5cGUiLCJxdW90ZSIsIlNHTUxfREVDTF9RVU9URUQiLCJET0NUWVBFX0RURCIsIkRPQ1RZUEVfUVVPVEVEIiwiRE9DVFlQRV9EVERfUVVPVEVEIiwiQ09NTUVOVF9FTkRJTkciLCJDT01NRU5UX0VOREVEIiwidGV4dG9wdHMiLCJDREFUQV9FTkRJTkciLCJDREFUQV9FTkRJTkdfMiIsIlBST0NfSU5TVF9FTkRJTkciLCJQUk9DX0lOU1RfQk9EWSIsImJvZHkiLCJuYW1lQm9keSIsIm5ld1RhZyIsIm9wZW5UYWciLCJPUEVOX1RBR19TTEFTSCIsIkFUVFJJQiIsImNsb3NlVGFnIiwiYXR0cmliTmFtZSIsImF0dHJpYlZhbHVlIiwiQVRUUklCX05BTUUiLCJBVFRSSUJfVkFMVUUiLCJhdHRyaWIiLCJBVFRSSUJfTkFNRV9TQVdfV0hJVEUiLCJBVFRSSUJfVkFMVUVfUVVPVEVEIiwiQVRUUklCX1ZBTFVFX1VOUVVPVEVEIiwiQVRUUklCX1ZBTFVFX0VOVElUWV9RIiwiQVRUUklCX1ZBTFVFX0NMT1NFRCIsImF0dHJpYkVuZCIsIkFUVFJJQl9WQUxVRV9FTlRJVFlfVSIsIkNMT1NFX1RBR19TQVdfV0hJVEUiLCJyZXR1cm5TdGF0ZSIsInBhcnNlRW50aXR5IiwiZW50aXR5IiwibWF4QWxsb3dlZCIsIm1heEFjdHVhbCIsImNsb3NlVGV4dCIsImNoZWNrQnVmZmVyTGVuZ3RoIiwicmVzdW1lIiwiU3RyZWFtIiwiZXgiLCJzdHJlYW1XcmFwcyIsImV2IiwiX3BhcnNlciIsInJlYWRhYmxlIiwibWUiLCJvbmVuZCIsIm9uZXJyb3IiLCJfZGVjb2RlciIsIlNEIiwibGV0dGVyIiwiWE1MX05BTUVTUEFDRSIsIlhNTE5TX05BTUVTUEFDRSIsInhtbCIsImNoYXJDbGFzcyIsImNoYXJjbGFzcyIsInN0cmluZ0Zyb21DaGFyQ29kZSIsIlNUQVRFIiwiQ09NTUVOVF9TVEFSVElORyIsIm5vZGVUeXBlIiwidGV4dCIsIm5vcm1hbGl6ZSIsIm1lc3NhZ2UiLCJxbmFtZSIsInF1YWxOYW1lIiwicHJlZml4IiwibG9jYWwiLCJxbiIsInNlbGZDbG9zaW5nIiwidXJpIiwibnYiLCJpc1NlbGZDbG9zaW5nIiwiY2xvc2VUbyIsImVudGl0eUxDIiwibnVtU3RyIiwiaGlnaFN1cnJvZ2F0ZSIsImxvd1N1cnJvZ2F0ZSIsIk1BWF9TSVpFIiwiY29kZVVuaXRzIiwicGlwZSIsImRlc3QiLCJvbmRhdGEiLCJwYXVzZSIsIm9uZHJhaW4iLCJfaXNTdGRpbyIsIm9uY2xvc2UiLCJkaWRPbkVuZCIsImRlc3Ryb3kiLCJTdHJpbmdEZWNvZGVyIiwibmIiLCJlbmMiLCJuZW5jIiwicmV0cmllZCIsIl9ub3JtYWxpemVFbmNvZGluZyIsIm5vcm1hbGl6ZUVuY29kaW5nIiwidXRmMTZUZXh0IiwidXRmMTZFbmQiLCJmaWxsTGFzdCIsInV0ZjhGaWxsTGFzdCIsImJhc2U2NFRleHQiLCJiYXNlNjRFbmQiLCJzaW1wbGVXcml0ZSIsInNpbXBsZUVuZCIsImxhc3ROZWVkIiwibGFzdFRvdGFsIiwibGFzdENoYXIiLCJ1dGY4Q2hlY2tCeXRlIiwiYnl0ZSIsInV0ZjhDaGVja0V4dHJhQnl0ZXMiLCJ1dGY4Q2hlY2tJbmNvbXBsZXRlIiwiY29weVByb3BzIiwiU2FmZUJ1ZmZlciIsIm1pbGxpc2Vjb25kIiwic2Vjb25kIiwibWludXRlIiwiaG91ciIsImRheSIsIm1zIiwiRXZlcnkiLCJyZWciLCJwYXJzZSIsImRvIiwiaW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiU0VDX1RPX1JBRCIsIkhBTEZfUEkiLCJFUFNMTiIsIkQyUiIsIlIyRCIsIkZPUlRQSSIsIlRXT19QSSIsIlNQSSIsImZ0IiwidG9fbWV0ZXIiLCJpZ25vcmVkQ2hhciIsInRlc3RrZXkiLCJsa2V5IiwiZGVmRGF0YSIsInBhcmFtTmFtZSIsInBhcmFtVmFsIiwicGFyYW1PdXRuYW1lIiwicGFyYW1PYmoiLCJwYXJhbXMiLCJwcm9qIiwiZGF0dW0iLCJyZiIsImxhdF8wIiwibGF0MCIsImxhdF8xIiwibGF0MSIsImxhdF8yIiwibGF0MiIsImxhdF90cyIsImxvbl8wIiwibG9uZzAiLCJsb25fMSIsImxvbmcxIiwibG9uXzIiLCJsb25nMiIsImxvbmMiLCJsb25nYyIsInhfMCIsInlfMCIsImtfMCIsImswIiwicl9hIiwiUl9BIiwiem9uZSIsInNvdXRoIiwidXRtU291dGgiLCJ0b3dnczg0IiwiZGF0dW1fcGFyYW1zIiwidW5pdCIsImZyb21fZ3JlZW53aWNoIiwicG0iLCJuYWRncmlkcyIsImRhdHVtQ29kZSIsImF4aXMiLCJsZWdhbEF4aXMiLCJsYXRpbiIsImtleXdvcmQiLCJlbmRUaGluZ3MiLCJkaWdldHMiLCJQYXJzZXIiLCJsZXZlbCIsInBsYWNlIiwic3RhY2siLCJjdXJyZW50T2JqZWN0IiwibWFwaXQiLCJ1bnNoaWZ0IiwidGhpbmciLCJuZXdPYmoiLCJzRXhwciIsInNoaWZ0IiwiY29udmVydCIsImQyciIsIndrdCIsImxpc3AiLCJwcm9qTmFtZSIsIlBST0pFQ1RJT04iLCJBWElTIiwiYXhpc09yZGVyIiwiVU5JVCIsIkRBVFVNIiwiU1BIRVJPSUQiLCJnZW9nY3MiLCJHRU9HQ1MiLCJ0b01ldGVyIiwic3BoZXJlIiwiZWxscHMiLCJUT1dHUzg0Iiwib3V0TmFtZSIsImluTmFtZSIsInJlbmFtZSIsImNsZWFuV0tUIiwiZGVmcyIsIkVQU0ciLCJFU1JJIiwiSUFVMjAwMCIsInJlYWRDaGFyaWN0ZXIiLCJjaGFyIiwibmV1dHJhbCIsInF1b3RlZCIsImFmdGVycXVvdGUiLCJ3b3JkIiwiYWZ0ZXJJdGVtIiwibmV3T2JqZWN0cyIsIldHUzg0IiwiR09PR0xFIiwiY29kZVdvcmRzIiwiY29kZXMiLCJkZXN0aW5hdGlvbiIsInByb3BlcnR5IiwiZWNjZW50Iiwic2lucGhpIiwiY29zcGhpIiwiY29uIiwicGhpIiwiY29tIiwidGFuIiwidHMiLCJkcGhpIiwiZWNjbnRoIiwiYXRhbiIsImlkZW50aXR5IiwicHQiLCJwcm9qcyIsImVzIiwiY29zIiwibXNmbnoiLCJmb3J3YXJkIiwibG9uIiwibGF0IiwiYWRqdXN0X2xvbiIsInRzZm56IiwiaW52ZXJzZSIsInBoaTJ6IiwicHJvalN0b3JlIiwiZWxsaXBzZU5hbWUiLCJlbGxpcHNlIiwiZGF0dW1OYW1lIiwiUHJvamVjdGlvbiIsInNyc0NvZGUiLCJqc29uIiwidGVzdE9iaiIsInRlc3REZWYiLCJ0ZXN0V0tUIiwiYXV0aCIsImNoZWNrTWVyY2F0b3IiLCJtYXliZVByb2pTdHIiLCJjaGVja1Byb2pTdHIiLCJ0ZXN0UHJvaiIsInBhcnNlQ29kZSIsIm91clByb2oiLCJwcm9qZWN0aW9ucyIsImRhdHVtRGVmIiwic3BoZXJlXyIsImVjYyIsImVwMiIsImRhdHVtT2JqIiwiZGF0dW1fdHlwZSIsImV4dGVuZCIsImdlb2RldGljVG9HZW9jZW50cmljIiwiUm4iLCJTaW5fTGF0IiwiU2luMl9MYXQiLCJDb3NfTGF0IiwiTG9uZ2l0dWRlIiwiTGF0aXR1ZGUiLCJIZWlnaHQiLCJnZW9jZW50cmljVG9HZW9kZXRpYyIsIlJSIiwiQ1QiLCJTVCIsIlJYIiwiUksiLCJSTiIsIkNQSEkwIiwiU1BISTAiLCJDUEhJIiwiU1BISSIsIlNEUEhJIiwiWCIsIlkiLCJaIiwiYXRhbjIiLCJjaGVja1BhcmFtcyIsImNycyIsImRlbm9ybSIsInhpbiIsInlpbiIsInppbiIsImNoZWNrQ29vcmQiLCJ0cmFuc2Zvcm0iLCJ3Z3M4NCIsImNoZWNrU2FuaXR5IiwiY2hlY2tOb3RXR1MiLCJhZGp1c3RfYXhpcyIsImNvbXBhcmVEYXR1bXMiLCJEeF9CRiIsIkR5X0JGIiwiRHpfQkYiLCJSeF9CRiIsIlJ5X0JGIiwiUnpfQkYiLCJNX0JGIiwiZ2VvY2VudHJpY1RvV2dzODQiLCJ4X3RtcCIsInlfdG1wIiwiel90bXAiLCJnZW9jZW50cmljRnJvbVdnczg0IiwiZGF0dW1fdHJhbnNmb3JtIiwidHJhbnNmb3JtZXIiLCJ0cmFuc2Zvcm1lZEFycmF5IiwiY2hlY2tQcm9qIiwib1Byb2oiLCJmcm9tUHJvaiIsInRvUHJvaiIsInNpbmdsZSIsIlNFVF9PUklHSU5fQ09MVU1OX0xFVFRFUlMiLCJTRVRfT1JJR0lOX1JPV19MRVRURVJTIiwiSSIsIm1ncnMiLCJVVE10b0xMIiwiZGVjb2RlIiwiYm90dG9tIiwibGwiLCJhY2N1cmFjeSIsInV0bSIsInJvdyIsImNvbE9yaWdpbiIsInJvd09yaWdpbiIsImNvbEludCIsInJvd0ludCIsInJvbGxvdmVyIiwiZWFzdGluZyIsIm5vcnRoaW5nIiwic2V0UGFybSIsInNlYXN0aW5nIiwic25vcnRoaW5nIiwiem9uZU51bWJlciIsInpvbmVMZXR0ZXIiLCJnZXQxMDBrU2V0Rm9yWm9uZSIsImVuY29kZSIsImVjY1ByaW1lU3F1YXJlZCIsIk4iLCJMb25nT3JpZ2luUmFkIiwiWm9uZU51bWJlciIsIkxhdCIsIkxvbmciLCJlY2NTcXVhcmVkIiwiTGF0UmFkIiwiZGVnVG9SYWQiLCJMb25nUmFkIiwiTGV0dGVyRGVzaWduYXRvciIsIlVUTUVhc3RpbmciLCJVVE1Ob3J0aGluZyIsIkxMdG9VVE0iLCJkZWciLCJyYWRUb0RlZyIsIk4xIiwiVDEiLCJDMSIsIlIxIiwiTG9uZ09yaWdpbiIsIm11IiwicGhpMVJhZCIsInRvcFJpZ2h0IiwibWdyc1N0cmluZyIsInRlc3RDaGFyIiwiaHVuSyIsImVhc3QxMDBrIiwiY3VyQ29sIiwiZWFzdGluZ1ZhbHVlIiwicmV3aW5kTWFya2VyIiwiZ2V0RWFzdGluZ0Zyb21DaGFyIiwibm9ydGgxMDBrIiwiY3VyUm93Iiwibm9ydGhpbmdWYWx1ZSIsImdldE5vcnRoaW5nRnJvbUNoYXIiLCJnZXRNaW5Ob3J0aGluZyIsInJlbWFpbmRlciIsImFjY3VyYWN5Qm9udXMiLCJzZXBFYXN0aW5nU3RyaW5nIiwic2VwTm9ydGhpbmdTdHJpbmciLCJzZXAiLCJzZXBFYXN0aW5nIiwic2VwTm9ydGhpbmciLCJQb2ludCIsImZyb21NR1JTIiwibWdyc1N0ciIsInRvTUdSUyIsIkMwNCIsIkMwNiIsIkMwOCIsImVuIiwic3BoaSIsImNwaGkiLCJwal9tbGZuIiwicGpfZW5mbiIsIm1sMCIsImRlbHRhX2xvbiIsInNpbl9waGkiLCJjb3NfcGhpIiwiYWwiLCJhbHMiLCJjcyIsInRxIiwibWwiLCJhY29zIiwicGpfaW52X21sZm4iLCJ0YW5fcGhpIiwiZHMiLCJ0ZW1wIiwiYXNpbiIsInBwIiwiY29zXzJCIiwiaDEiLCJoMiIsImFyZ19yIiwiYXJnX2kiLCJocjIiLCJoaTIiLCJzaW5fYXJnX3IiLCJjb3NfYXJnX3IiLCJzaW5oX2FyZ19pIiwiY29zaF9hcmdfaSIsImhyIiwiaGkxIiwiaHIxIiwiY2diIiwiY2JnIiwidXRnIiwiZ3R1IiwibnAiLCJRbiIsImdhdGciLCJaYiIsImNsZW5zIiwiQ2UiLCJDbiIsInNpbl9DbiIsImNvc19DbiIsInNpbl9DZSIsImNvc19DZSIsImxvZzFweSIsImFzaW5oeSIsImNsZW5zX2NtcGx4IiwiYWRqdXN0X3pvbmUiLCJldG1lcmMiLCJkZXBlbmRzT24iLCJlc2lucCIsInJjIiwicGhpYzAiLCJyYXRleHAiLCJzcmF0IiwiZ2F1c3MiLCJzaW5jMCIsImNvc2MwIiwiUjIiLCJ0aXRsZSIsInNpbmMiLCJjb3NjIiwiY29zbCIsInJobyIsImNvc2xhdDAiLCJzaW5sYXQwIiwiY29ucyIsIm1zMSIsIlgwIiwic3Nmbl8iLCJjb3NYMCIsInNpblgwIiwic2luWCIsImNvc1giLCJyaCIsInNpbmxhdCIsImNvc2xhdCIsImRsb24iLCJjZSIsIkNoaSIsInBoaXQiLCJlY2NlbiIsInBoeTAiLCJsYW1iZGEwIiwic2luUGh5MCIsInNlbWlNYWpvckF4aXMiLCJmbGF0dGVuaW5nIiwiYjAiLCJrMSIsImsyIiwiazMiLCJTYTEiLCJTYTIiLCJyb3RJIiwicm90QiIsImxhbWJkYSIsInBoeSIsInByZXZQaHkiLCJpdGVyYXRpb24iLCJub19vZmYiLCJub19yb3QiLCJibCIsImZsIiwiZ2wiLCJ0MCIsImRsIiwidDEiLCJ0MiIsImhsIiwiamwiLCJwbCIsImRsb24xMiIsImRsb24xMCIsImdhbW1hMCIsInVjIiwidXMiLCJ2cyIsInFsIiwic2wiLCJ0bCIsInZsIiwidWwiLCJQT1NJVElWRV9JTkZJTklUWSIsInFwIiwic3AiLCJ0cCIsInZwIiwidXAiLCJzaW4xIiwiY29zMSIsInRzMSIsInNpbjIiLCJjb3MyIiwibXMyIiwidHMyIiwidHMwIiwiZjAiLCJyaDEiLCJ0aGV0YSIsInM0NSIsInM5MCIsImZpMCIsImFsZmEiLCJ1cSIsIm4wIiwiczAiLCJybzAiLCJhZCIsImdmaSIsImRlbHRhdiIsImVwcyIsInJvIiwiY3plY2giLCJmaTEiLCJlMCIsImUzIiwiZTBmbiIsImUxZm4iLCJlMmZuIiwiZTNmbiIsIm1sZm4iLCJsYW0iLCJubCIsImdOIiwiYXNxIiwiY2wiLCJkZCIsInBoaTEiLCJpbWxmbiIsIm5sMSIsInJsMSIsInRsMSIsImRzcSIsImFkanVzdF9sYXQiLCJTX1BPTEUiLCJOX1BPTEUiLCJFUVVJVCIsIk9CTElRIiwicXNmbnoiLCJtbWYiLCJhcGEiLCJBUEEiLCJhdXRoc2V0IiwicnEiLCJ4bWYiLCJ5bWYiLCJzaW5iMSIsImNvc2IxIiwic2lucGgwIiwiY29zcGgwIiwiY29zbGFtIiwic2lubGFtIiwic2luYiIsImNvc2IiLCJjQ2UiLCJzQ2UiLCJhYiIsImJldGEiLCJjb3N6Iiwic2lueiIsInNpbl9wbyIsImNvc19wbyIsInFzMSIsInFzMiIsInQzIiwicXMwIiwibnMwIiwicXMiLCJwaGkxeiIsImFzaW56IiwiZWNjbnRzIiwic2luX3AxNCIsImNvc19wMTQiLCJpbmZpbml0eV9kaXN0IiwiY29zbG9uIiwiaXFzZm56IiwiZGxhdCIsInRhbnBoaSIsIm1sbiIsIm1sbnAiLCJtYSIsIkJfcmUiLCJCX2ltIiwiQ19yZSIsIkNfaW0iLCJkZWx0YV9sYXQiLCJkX3BoaSIsImRfbGFtYmRhIiwiZF9waGlfbiIsImRfcHNpIiwidGhfbl9pbTEiLCJ0aF9yZSIsInRoX2ltIiwidGhfbl9yZSIsInRoX25faW0iLCJ6X3JlIiwiel9pbSIsInpfbl9pbTEiLCJkZWx0YV94Iiwiel9uX3JlIiwiel9uX2ltIiwiaXRlcmF0aW9ucyIsIm51bV9yZSIsIm51bV9pbSIsImRlbl9yZSIsImRlbl9pbSIsImRlbjIiLCJkX3BzaV9uIiwiQ195IiwiQ194IiwiZGVsdGFfdGhldGEiLCJtbDEiLCJtbDIiLCJzaW50aCIsImNvc3RoIiwiZ3NxIiwibXNxIiwieHgiLCJ5eSIsInh5cyIsImMxIiwiYzMiLCJtMSIsInRoMSIsInNpbl9wMTIiLCJjb3NfcDEyIiwiTWxwIiwiTWwiLCJObDEiLCJObCIsInBzaSIsIkF6IiwiR0giLCJIcyIsImtwIiwiY29zX2MiLCJzMyIsInM0IiwiY29zQXoiLCJFZSIsInNpbnBzaSIsInFzY19md2RfZXF1YXRfZmFjZV90aGV0YSIsInFzY19zaGlmdF9sb25fb3JpZ2luIiwic2xvbiIsImZhY2UiLCJvbmVfbWludXNfZiIsIm9uZV9taW51c19mX3NxdWFyZWQiLCJ4eSIsInNpbmxvbiIsIm51IiwiY29zbXUiLCJ0YW5udSIsInRhbnRoZXRhIiwiaW52ZXJ0X3NpZ24iLCJ4YSIsImxwIiwiQ09FRlNfWCIsIkNPRUZTX1kiLCJGWEMiLCJGWUMiLCJwb2x5M192YWwiLCJjb2VmcyIsIk5PREVTIiwiZl9kZiIsIm1heF9lcnIiLCJpdGVycyIsInVwZCIsIm5ld3Rvbl9yYXBzaG9uIiwicG9seTNfZGVyIiwiYXppIiwidGlsdCIsInBuMSIsInJwIiwicGZhY3QiLCJvbWVnYSIsImdhbW1hIiwiY2ciLCJzZyIsImN3Iiwic3ciLCJ5dCIsImJhIiwiYm0iLCJicSIsInByb2o0IiwiUHJvaiIsInRtZXJjIiwic3RlcmVhIiwic3RlcmUiLCJzb21lcmMiLCJvbWVyYyIsImxjYyIsImtyb3ZhayIsImNhc3MiLCJsYWVhIiwiYWVhIiwiZ25vbSIsImNlYSIsImVxYyIsInBvbHkiLCJuem1nIiwibWlsbCIsInNpbnUiLCJtb2xsIiwiZXFkYyIsInZhbmRnIiwiYWVxZCIsIm9ydGhvIiwicXNjIiwicm9iaW4iLCJnZW9jZW50IiwidHBlcnMiLCJQcm9qNERlZnMiLCJhc3FyIiwiYnNxciIsImNyZWF0ZUVsbGlwc29pZCIsImdldFByb3AiLCJwcm9wcyIsInByb3AiLCJleGlzdHMiLCJwYXJzZVNlcXVlbmNlIiwiZ2V0Q29sb3IiLCJvcHRzIiwidG9SYWRpYW5zIiwiYW5nbGVJbkRlZ3JlZXMiLCJ0b0RlZ3JlZXMiLCJhbmdsZUluUmFkaWFucyIsImxvbjEiLCJkQnlSIiwib3JpZ2luIiwiZGlzdGFuY2VJbk1ldGVycyIsInJhZGl1cyIsImxhbWJkYTEiLCJEZWx0YVBoaSIsInBoaTIiLCJEZWx0YVBzaSIsImNhbGN1bGF0ZVJodW1iRGVzdGluYXRpb24iLCJkaXJlY3Rpb24iLCJ6VHJhbnNsYXRpb24iLCJtdXRhdGUiLCJwb2ludENvb3JkcyIsIm5ld0Nvb3JkcyIsIlBST0pFQ1RJT05fQVVUT19ERVRFQ1QiLCJDT05WRVJUX1NVUkZBQ0VTIiwiQ09OVkVSVF9QQVJDRUxTIiwiQ09OVkVSVF9QSVBFX05FVFdPUktTIiwiQ09OVkVSVF9DR19QT0lOVFMiLCJjb252ZXJ0ZXJzIiwieG1sT2JqIiwicHJvamVjdGlvbiIsIm9yaWdpbmFsUG9pbnRzIiwib3JpZ2luYWxQYXJjZWxzIiwiJCIsInBjIiwib3BjIiwiQ29vcmRHZW9tIiwiZW5kQ29vcmQiLCJvcmlnQ29vcmRzIiwiTGluZSIsIm9jIiwiU3RhcnQiLCJwbnRSZWYiLCJFbmQiLCJwYXJhbWV0ZXJzIiwibGFuZHhtbENsYXNzIiwiY2xhc3MiLCJsYW5keG1sU3RhdGUiLCJsYW5keG1sUGFyY2VsVHlwZSIsInBhcmNlbFR5cGUiLCJsYW5keG1sVHlwZSIsImxhbmR4bWxDb2xvciIsImNvbG9yT3B0cyIsInN1cmZhY2VzQ29udGFpbmVyTm9kZXMiLCJzYyIsImF0dHJzIiwiYmFzZVByb3BzIiwic3VyZmFjZU5vZGVzIiwiZmVhdHVyZVByb3BzIiwiZGVzY3JpcHRpb24iLCJzdXJmYWNlRmVhdHVyZXMiLCJzdXJmYWNlIiwiYm91bmRhcnlOb2RlcyIsImJvdW5kYXJ5Iiwic2VxIiwiY29udmVydEJvdW5kYXJpZXMiLCJwb2ludE5vZGVzIiwiZmFjZU5vZGVzIiwicG9pbnRJZCIsImZhY2VzIiwicG9pbnRJZHMiLCJjb252ZXJ0RmFjZXMiLCJtZXJnZWQiLCJwaXBlTmV0d29ya3NOb2RlcyIsInBuIiwicGlwZU5ldHdvcmtOb2RlcyIsInN0cnVjdHMiLCJsb2NhbFN0cnVjdHMiLCJwaXBlTmV0d29yayIsInN0cnVjdE5vZGVzIiwiY2VudGVyTm9kZSIsInJlY3RTdHJ1Y3ROb2RlIiwiY2lyY1N0cnVjdE5vZGUiLCJpbmxldFN0cnVjdE5vZGUiLCJvdXRsZXRTdHJ1Y3ROb2RlIiwiY29ubmVjdGlvbk5vZGUiLCJzdHJ1Y3RUeXBlIiwibGFuZHhtbFN0cnVjdCIsImxhbmR4bWxFbGV2UmltIiwiZWxldlJpbSIsImxhbmR4bWxFbGV2U3VtcCIsImVsZXZTdW1wIiwibGFuZHhtbERpYW1ldGVyIiwiZGlhbWV0ZXIiLCJsYW5keG1sVGhpY2tuZXNzIiwidGhpY2tuZXNzIiwibGFuZHhtbExlbmd0aCIsImxhbmR4bWxXaWR0aCIsIndpZHRoIiwiY2VudGVyIiwibGFuZHhtbENlbnRlckxvbmdpdHVkZSIsImxhbmR4bWxDZW50ZXJMYXRpdHVkZSIsImxhbmR4bWxDZW50ZXJBbHRpdHVkZSIsImNlbnRlckNvb3JkcyIsIm5vcnRoRWFzdCIsIm5vcnRoV2VzdCIsInNvdXRoV2VzdCIsInNvdXRoRWFzdCIsInNxdWFyZUFyb3VuZCIsIm51bWJlck9mU2VnbWVudHMiLCJmbGF0Q29vcmRpbmF0ZXMiLCJjaXJjbGVUb1BvbHlnb24iLCJjb252ZXJ0U3RydWN0cyIsInBpcGVzIiwicGlwZU5vZGVzIiwiY2lyY1BpcGVOb2RlIiwibGFuZHhtbE1hdGVyaWFsIiwibWF0ZXJpYWwiLCJyZWZTdGFydCIsInJlZkVuZCIsImNvbnZlcnRQaXBlcyIsInBvaW50c0NvbnRhaW5lck5vZGVzIiwicG9pbnRGZWF0dXJlIiwiY2dQb2ludCIsImxhbmR4bWxBbHRpdHVkZSIsImNvbnZlcnRQb2ludCIsIkNvbnZlcnRlciIsImRlZmF1bHRPcHRpb25zIiwiZW5hYmxlZENvbnZlcnRlcnMiLCJwcm9qNERlZnMiLCJmZWF0dXJlTWFwcGVyIiwicGFyc2VyT3B0aW9ucyIsImNvbmZpZ3VyZVByb2o0IiwicGFyc2VTdHJpbmciLCJjb252ZXJ0VG9HZW9KU09OIiwiZ2V0TGFuZFhNTFByb2plY3Rpb24iLCJuZXdGZWF0dXJlcyIsImFkZGl0aW9uYWxQcm9qNERlZnMiLCJtYW51YWxQcm9qZWN0aW9uIiwiZmluZFVUTVByb2plY3Rpb24iLCJ1dG1Qcm9qZWN0aW9uIiwic3RyaXBCT00iLCJidWlsZGVyIiwiZGVmYXVsdHMiLCJlc2NhcGVDREFUQSIsInJlcXVpcmVzQ0RBVEEiLCJ3cmFwQ0RBVEEiLCJoYXNQcm9wIiwiQnVpbGRlciIsInJlZiIsImJ1aWxkT2JqZWN0Iiwicm9vdE9iaiIsImF0dHJrZXkiLCJjaGFya2V5IiwicmVuZGVyIiwicm9vdEVsZW1lbnQiLCJyb290TmFtZSIsIl90aGlzIiwiYXR0ciIsImNoaWxkIiwidHh0IiwiZWxlIiwiYXR0IiwieG1sZGVjIiwiaGVhZGxlc3MiLCJhbGxvd1N1cnJvZ2F0ZUNoYXJzIiwicmVuZGVyT3B0cyIsImV4cGxpY2l0Q2hhcmtleSIsIm5vcm1hbGl6ZVRhZ3MiLCJleHBsaWNpdEFycmF5IiwiaWdub3JlQXR0cnMiLCJtZXJnZUF0dHJzIiwiZXhwbGljaXRSb290IiwidmFsaWRhdG9yIiwiZXhwbGljaXRDaGlsZHJlbiIsImNoaWxka2V5IiwiY2hhcnNBc0NoaWxkcmVuIiwiaW5jbHVkZVdoaXRlQ2hhcnMiLCJhdHRyTmFtZVByb2Nlc3NvcnMiLCJhdHRyVmFsdWVQcm9jZXNzb3JzIiwidGFnTmFtZVByb2Nlc3NvcnMiLCJ2YWx1ZVByb2Nlc3NvcnMiLCJlbXB0eVRhZyIsInByZXNlcnZlQ2hpbGRyZW5PcmRlciIsImNodW5rU2l6ZSIsImJvbSIsInByb2Nlc3NJdGVtIiwicHJvY2Vzc29ycyIsInN1cGVyQ2xhc3MiLCJwYXJzZVN0cmluZ1Byb21pc2UiLCJhc3NpZ25PclB1c2giLCJwcm9jZXNzQXN5bmMiLCJ4bWxuc2tleSIsIl9fc3VwZXJfXyIsInNheFBhcnNlciIsImVycm9yMSIsImVyclRocm93biIsIm5ld1ZhbHVlIiwib250ZXh0IiwiZW5kZWQiLCJyZXN1bHRPYmplY3QiLCJFWFBMSUNJVF9DSEFSS0VZIiwib25vcGVudGFnIiwicHJvY2Vzc2VkS2V5Iiwib25jbG9zZXRhZyIsImVtcHR5U3RyIiwibm9kZU5hbWUiLCJvYmpDbG9uZSIsIm9sZCIsInhwYXRoIiwiY2hhckNoaWxkIiwib25jZGF0YSIsInByZWZpeE1hdGNoIiwiZmlyc3RDaGFyTG93ZXJDYXNlIiwic3RyaXBQcmVmaXgiLCJwYXJzZU51bWJlcnMiLCJwYXJzZUJvb2xlYW5zIiwiVmFsaWRhdGlvbkVycm9yIiwiRGlzY29ubmVjdGVkIiwiUHJlY2VkaW5nIiwiRm9sbG93aW5nIiwiQ29udGFpbnMiLCJDb250YWluZWRCeSIsIkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJFbGVtZW50IiwiQXR0cmlidXRlIiwiVGV4dCIsIkNEYXRhIiwiRW50aXR5UmVmZXJlbmNlIiwiRW50aXR5RGVjbGFyYXRpb24iLCJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLCJDb21tZW50IiwiRG9jdW1lbnQiLCJEb2NUeXBlIiwiRG9jdW1lbnRGcmFnbWVudCIsIk5vdGF0aW9uRGVjbGFyYXRpb24iLCJEZWNsYXJhdGlvbiIsIlJhdyIsIkF0dHJpYnV0ZURlY2xhcmF0aW9uIiwiRWxlbWVudERlY2xhcmF0aW9uIiwiRHVtbXkiLCJnZXRWYWx1ZSIsImlzUGxhaW5PYmplY3QiLCJzb3VyY2VzIiwiTm9uZSIsIk9wZW5UYWciLCJJbnNpZGVUYWciLCJDbG9zZVRhZyIsIk5vZGVUeXBlIiwiWE1MQXR0cmlidXRlIiwiZGVidWdJbmZvIiwiYXR0VmFsdWUiLCJpc0lkIiwic2NoZW1hVHlwZUluZm8iLCJ3cml0ZXIiLCJmaWx0ZXJPcHRpb25zIiwiaXNFcXVhbE5vZGUiLCJuYW1lc3BhY2VVUkkiLCJsb2NhbE5hbWUiLCJYTUxDaGFyYWN0ZXJEYXRhIiwiWE1MQ0RhdGEiLCJYTUxOb2RlIiwic3Vic3RyaW5nRGF0YSIsImFwcGVuZERhdGEiLCJpbnNlcnREYXRhIiwiZGVsZXRlRGF0YSIsInJlcGxhY2VEYXRhIiwiWE1MQ29tbWVudCIsIlhNTERPTUVycm9ySGFuZGxlciIsIlhNTERPTVN0cmluZ0xpc3QiLCJYTUxET01Db25maWd1cmF0aW9uIiwiZGVmYXVsdFBhcmFtcyIsImdldFBhcmFtZXRlciIsImNhblNldFBhcmFtZXRlciIsInNldFBhcmFtZXRlciIsImhhbmRsZUVycm9yIiwiWE1MRE9NSW1wbGVtZW50YXRpb24iLCJoYXNGZWF0dXJlIiwiY3JlYXRlRG9jdW1lbnRUeXBlIiwicXVhbGlmaWVkTmFtZSIsInB1YmxpY0lkIiwic3lzdGVtSWQiLCJjcmVhdGVEb2N1bWVudCIsImNyZWF0ZUhUTUxEb2N1bWVudCIsImdldEZlYXR1cmUiLCJYTUxEVERBdHRMaXN0IiwiZWxlbWVudE5hbWUiLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlVHlwZSIsImRlZmF1bHRWYWx1ZVR5cGUiLCJkZWZhdWx0VmFsdWUiLCJkdGRBdHRUeXBlIiwiZHRkQXR0RGVmYXVsdCIsImR0ZEF0dExpc3QiLCJYTUxEVERFbGVtZW50IiwiZHRkRWxlbWVudFZhbHVlIiwiZHRkRWxlbWVudCIsIlhNTERUREVudGl0eSIsInBlIiwicHViSUQiLCJzeXNJRCIsImR0ZFB1YklEIiwiZHRkU3lzSUQiLCJuRGF0YSIsImR0ZE5EYXRhIiwiZHRkRW50aXR5VmFsdWUiLCJkdGRFbnRpdHkiLCJYTUxEVEROb3RhdGlvbiIsImR0ZE5vdGF0aW9uIiwiWE1MRGVjbGFyYXRpb24iLCJ4bWxWZXJzaW9uIiwieG1sRW5jb2RpbmciLCJ4bWxTdGFuZGFsb25lIiwiZGVjbGFyYXRpb24iLCJYTUxOYW1lZE5vZGVNYXAiLCJYTUxEb2NUeXBlIiwicmVmMSIsInJlZjIiLCJjaGlsZHJlbiIsImRvY3VtZW50T2JqZWN0Iiwibm9kZXMiLCJhdHRMaXN0IiwicEVudGl0eSIsIm5vdGF0aW9uIiwiZG9jVHlwZSIsImVudCIsInBlbnQiLCJYTUxTdHJpbmdXcml0ZXIiLCJYTUxTdHJpbmdpZmllciIsIlhNTERvY3VtZW50IiwiZG9jdW1lbnRVUkkiLCJkb21Db25maWciLCJyb290T2JqZWN0Iiwid3JpdGVyT3B0aW9ucyIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJjcmVhdGVDb21tZW50IiwiY3JlYXRlQ0RBVEFTZWN0aW9uIiwiY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uIiwiY3JlYXRlQXR0cmlidXRlIiwiY3JlYXRlRW50aXR5UmVmZXJlbmNlIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJ0YWduYW1lIiwiaW1wb3J0Tm9kZSIsImltcG9ydGVkTm9kZSIsImRlZXAiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdGVBdHRyaWJ1dGVOUyIsImdldEVsZW1lbnRzQnlUYWdOYW1lTlMiLCJnZXRFbGVtZW50QnlJZCIsImVsZW1lbnRJZCIsImFkb3B0Tm9kZSIsIm5vcm1hbGl6ZURvY3VtZW50IiwicmVuYW1lTm9kZSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJjbGFzc05hbWVzIiwiY3JlYXRlRXZlbnQiLCJldmVudEludGVyZmFjZSIsImNyZWF0ZVJhbmdlIiwiY3JlYXRlTm9kZUl0ZXJhdG9yIiwid2hhdFRvU2hvdyIsImNyZWF0ZVRyZWVXYWxrZXIiLCJXcml0ZXJTdGF0ZSIsIlhNTEVsZW1lbnQiLCJYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24iLCJYTUxSYXciLCJYTUxUZXh0IiwiWE1MRG9jdW1lbnRDQiIsIm9uRGF0YSIsIm9uRW5kIiwib25EYXRhQ2FsbGJhY2siLCJvbkVuZENhbGxiYWNrIiwiY3VycmVudE5vZGUiLCJjdXJyZW50TGV2ZWwiLCJvcGVuVGFncyIsImRvY3VtZW50U3RhcnRlZCIsImRvY3VtZW50Q29tcGxldGVkIiwiY3JlYXRlQ2hpbGROb2RlIiwiYXR0TmFtZSIsImF0dHJpYnMiLCJkdW1teSIsImluc3RydWN0aW9uIiwib3BlbkN1cnJlbnQiLCJvbGRWYWxpZGF0aW9uRmxhZyIsIm5vVmFsaWRhdGlvbiIsImtlZXBOdWxsQXR0cmlidXRlcyIsImluc1RhcmdldCIsImluc1ZhbHVlIiwicHJvY2Vzc2luZ0luc3RydWN0aW9uIiwicm9vdE5vZGVOYW1lIiwiY2xvc2VOb2RlIiwib3Blbk5vZGUiLCJpc09wZW4iLCJpbmRlbnQiLCJlbmRsaW5lIiwiaXNDbG9zZWQiLCJub2QiLCJkYXQiLCJpbnMiLCJkZWMiLCJkdGQiLCJYTUxEdW1teSIsImlzUm9vdCIsImF0dHJpYnV0ZU1hcCIsImNsb25lZFNlbGYiLCJjbG9uZWRDaGlsZCIsInJlbW92ZUF0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsImdldEF0dHJpYnV0ZU5vZGUiLCJzZXRBdHRyaWJ1dGVOb2RlIiwibmV3QXR0ciIsInJlbW92ZUF0dHJpYnV0ZU5vZGUiLCJvbGRBdHRyIiwiZ2V0QXR0cmlidXRlTlMiLCJzZXRBdHRyaWJ1dGVOUyIsInJlbW92ZUF0dHJpYnV0ZU5TIiwiZ2V0QXR0cmlidXRlTm9kZU5TIiwic2V0QXR0cmlidXRlTm9kZU5TIiwiaGFzQXR0cmlidXRlIiwiaGFzQXR0cmlidXRlTlMiLCJzZXRJZEF0dHJpYnV0ZSIsInNldElkQXR0cmlidXRlTlMiLCJzZXRJZEF0dHJpYnV0ZU5vZGUiLCJpZEF0dHIiLCJnZXROYW1lZEl0ZW0iLCJzZXROYW1lZEl0ZW0iLCJvbGROb2RlIiwicmVtb3ZlTmFtZWRJdGVtIiwiZ2V0TmFtZWRJdGVtTlMiLCJzZXROYW1lZEl0ZW1OUyIsInJlbW92ZU5hbWVkSXRlbU5TIiwiRG9jdW1lbnRQb3NpdGlvbiIsIlhNTE5vZGVMaXN0IiwicGFyZW50MSIsImJhc2VVUkkiLCJjaGlsZE5vZGVMaXN0IiwidGV4dENvbnRlbnQiLCJzZXRQYXJlbnQiLCJjaGlsZE5vZGUiLCJsYXN0Q2hpbGQiLCJsZW4xIiwicmVmMyIsImlnbm9yZURlY29yYXRvcnMiLCJjb252ZXJ0QXR0S2V5Iiwic2VwYXJhdGVBcnJheUl0ZW1zIiwia2VlcE51bGxOb2RlcyIsImNvbnZlcnRUZXh0S2V5IiwiY29udmVydENEYXRhS2V5IiwiY29udmVydENvbW1lbnRLZXkiLCJjb252ZXJ0UmF3S2V5IiwiY29udmVydFBJS2V5IiwiaW5zZXJ0QmVmb3JlIiwibmV3Q2hpbGQiLCJyZWZDaGlsZCIsInJlbW92ZWQiLCJpbnNlcnRBZnRlciIsImNvbW1lbnRCZWZvcmUiLCJjb21tZW50QWZ0ZXIiLCJpbnN0cnVjdGlvbkJlZm9yZSIsImluc3RydWN0aW9uQWZ0ZXIiLCJkb2MiLCJpbXBvcnREb2N1bWVudCIsImNsb25lZFJvb3QiLCJpbXBvcnRYTUxCdWlsZGVyIiwicmVwbGFjZUNoaWxkIiwib2xkQ2hpbGQiLCJoYXNDaGlsZE5vZGVzIiwiY2xvbmVOb2RlIiwiaXNTdXBwb3J0ZWQiLCJoYXNBdHRyaWJ1dGVzIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJvdGhlciIsImlzQW5jZXN0b3IiLCJpc0Rlc2NlbmRhbnQiLCJpc1ByZWNlZGluZyIsImlzU2FtZU5vZGUiLCJsb29rdXBQcmVmaXgiLCJpc0RlZmF1bHROYW1lc3BhY2UiLCJsb29rdXBOYW1lc3BhY2VVUkkiLCJzZXRVc2VyRGF0YSIsImdldFVzZXJEYXRhIiwibm9kZVBvcyIsInRoaXNQb3MiLCJ0cmVlUG9zaXRpb24iLCJpc0ZvbGxvd2luZyIsImZvcmVhY2hUcmVlTm9kZSIsImZ1bmMiLCJYTUxXcml0ZXJCYXNlIiwiWE1MU3RyZWFtV3JpdGVyIiwic3RyZWFtIiwiaXNMYXN0Um9vdE5vZGUiLCJ3cml0ZUNoaWxkTm9kZSIsInNwYWNlQmVmb3JlU2xhc2giLCJjaGlsZE5vZGVDb3VudCIsImZpcnN0Q2hpbGROb2RlIiwiYWxsb3dFbXB0eSIsInByZXR0eSIsInN1cHByZXNzUHJldHR5Q291bnQiLCJuZXdsaW5lIiwiYXNzZXJ0TGVnYWxOYW1lIiwiYXNzZXJ0TGVnYWxDaGFyIiwidGV4dEVzY2FwZSIsImF0dEVzY2FwZSIsInJlZ2V4IiwiYW1wcmVnZXgiLCJub0RvdWJsZUVuY29kaW5nIiwicHJldmlvdXNTaWJsaW5nIiwibmV4dFNpYmxpbmciLCJzcGxpdFRleHQiLCJyZXBsYWNlV2hvbGVUZXh0IiwiY29udGVudCIsImZpbHRlcmVkT3B0aW9ucyIsInJlZjQiLCJyZWY1IiwicmVmNiIsImRvbnRQcmV0dHlUZXh0Tm9kZXMiLCJkb250cHJldHR5dGV4dG5vZGVzIiwic3BhY2ViZWZvcmVzbGFzaCIsInVzZXIiLCJpbmRlbnRMZXZlbCIsIm9wZW5BdHRyaWJ1dGUiLCJjbG9zZUF0dHJpYnV0ZSIsInByZXR0eVN1cHByZXNzZWQiLCJzdHJpbmdXcml0ZXIiLCJzdHJlYW1Xcml0ZXIiLCJpbXBsZW1lbnRhdGlvbiIsIndyaXRlclN0YXRlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwibG9hZGVkIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIl9fZXNNb2R1bGUiLCJkZWZpbml0aW9uIiwiZ2xvYmFsVGhpcyIsIm5tZCIsInBhdGhzIl0sIm1hcHBpbmdzIjoiO0NBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELElBQ1EsbUJBQVhHLFFBQXlCQSxPQUFPQyxJQUM5Q0QsT0FBTyxHQUFJSCxHQUNlLGlCQUFaQyxRQUNkQSxRQUFpQixRQUFJRCxJQUVyQkQsRUFBYyxRQUFJQyxJQVJwQixDQVNHSyxNQUFNLFdBQ1QsTSx5Q0NSQSxJQUFJQyxFQUFTLEVBQVEsTUFFakJDLEVBQVMsUUFnRGIsU0FBU0MsRUFBWUMsR0FDakIsSUFBSUMsRUFBUSxFQUNaLEdBQUlELEdBQVVBLEVBQU9FLE9BQVMsRUFBRyxDQUM3QkQsR0FBU0UsS0FBS0MsSUFBSUMsRUFBU0wsRUFBTyxLQUNsQyxJQUFLLElBQUlNLEVBQUksRUFBR0EsRUFBSU4sRUFBT0UsT0FBUUksSUFDL0JMLEdB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QjJqQixZQUFhbnpDLEVBQUtkLEVBQU9pMEMsZ0IsZUNsQjNCLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsSUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLElBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsS0FDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFBUSxLQUNSLEVBQVEsTUFDUixFQUFRLEtBQ1IsRUFBUSxNQUNSLEVBQVEsTUFDUixFQUFRLE1BQ1IsRUFB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SUFDVCxPQUFXLElBQ1gsT0FBVyxJQUNYLE1BQVUsSUFDVixPQUFXLElBQ1gsSUFBUSxJQUNSLEtBQVMsSUFDVCxPQUFXLElBQ1gsTUFBVSxJQUNWLE9BQVcsSUFDWCxLQUFTLElBQ1QsT0FBVyxJQUNYLE9BQVcsSUFDWCxNQUFVLElBQ1YsT0FBVyxJQUNYLE9BQVcsSUFDWCxPQUFXLElBQ1gsS0FBUyxJQUNULE1BQVUsSUFDVixNQUFVLElBQ1YsT0FBVyxJQUNYLE1BQVUsSUFDVixPQUFXLElBQ1gsS0FBUyxJQUNULE9BQVcsSUFDWCxLQUFTLElBQ1QsS0FBUyxJQUNULElBQVEsSUFDUixLQUFTLElBQ1QsTUFBVSxJQUNWLEtBQVMsSUFDVCxNQUFVLElBQ1YsT0FBVyxJQUNYLElBQVEsSUFDUixPQUFXLElBQ1gsS0FBUyxJQUNULElBQVEsSUFDUixLQUFTLElBQ1QsTUFBVSxJQUNWLElBQVEsSUFDUixJQUFRLElBQ1IsS0FBUyxJQUNULElBQVEsSUFDUixPQUFXLElBQ1gsS0FBUyxJQUNULEtBQVMsSUFDVCxLQUFTLElBQ1QsTUFBVSxJQUNWLE1BQVUsSUFDVixLQUFTLElBQ1QsT0FBVyxJQUNYLE1BQVUsSUFDVixLQUFTLElBQ1QsTUFBVSxJQUNWLE9BQVcsSUFDWCxPQUFXLElBQ1gsT0FBVyxJQUNYLE9BQVcsSUFDWCxNQUFVLElBQ1YsT0FBVyxJQUNYLE1BQVUsSUFDVixNQUFVLElBQ1YsT0FBVyxJQUNYLE9BQVcsSUFDWCxLQUFTLElBQ1QsS0FBUyxJQUNULEtBQVMsSUFDVCxNQUFVLElBQ1YsTUFBVSxJQUNWLEtBQVMsSUFDVCxNQUFVLElBQ1YsTUFBVSxJQUNWLFFBQVksSUFDWixLQUFTLElBQ1QsSUFBUSxJQUNSLE1BQVUsSUFDVixLQUFTLElBQ1QsTUFBVSxJQUNWLE9BQVcsSUFDWCxHQUFPLElBQ1AsR0FBTyxJQUNQLEdBQU8sSUFDUCxRQUFZLElBQ1osR0FBTyxJQUNQLElBQVEsSUFDUixNQUFVLElBQ1YsSUFBUSxJQUNSLFFBQVksSUFDWixJQUFRLElBQ1IsSUFBUSxJQUNSLElBQVEsSUFDUixNQUFVLElBQ1YsTUFBVSxJQUNWLEtBQVMsSUFDVCxNQUFVLElBQ1YsTUFBVSxJQUNWLFFBQVksSUFDWixLQUFTLElBQ1QsSUFBUSxJQUNSLE1BQVUsSUFDVixLQUFTLElBQ1QsTUFBVSxJQUNWLE9BQVcsSUFDWCxHQUFPLElBQ1AsR0FBTyxJQUNQLEdBQU8sSUFDUCxRQUFZLElBQ1osR0FBTyxJQUNQLElBQVEsSUFDUixPQUFXLElBQ1gsTUFBVSxJQUNWLElBQVEsSUFDUixRQUFZLElBQ1osSUFBUSxJQUNSLElBQVEsSUFDUixJQUFRLElBQ1IsTUFBVSxJQUNWLFNBQWEsSUFDYixNQUFVLElBQ1YsSUFBUSxJQUNSLEtBQVMsS0FDVCxLQUFTLEtBQ1QsT0FBVyxLQUNYLEtBQVMsS0FDVCxJQUFRLEtBQ1IsSUFBUSxLQUNSLElBQVEsS0FDUixNQUFVLEtBQ1YsTUFBVSxLQUNWLE1BQVUsS0FDVixNQUFVLEtBQ1YsTUFBVSxLQUNWLE1BQVUsS0FDVixNQUFVLEtBQ1YsTUFBVSxLQUNWLE9BQVcsS0FDWCxPQUFXLEtBQ1gsS0FBUyxLQUNULE9BQVcsS0FDWCxPQUFXLEtBQ1gsTUFBVSxLQUNWLE1BQVUsS0FDVixPQUFXLEtBQ1gsT0FBVyxLQUNYLE1BQVUsS0FDVixNQUFVLEtBQ1YsS0FBUyxLQUNULE1BQVUsS0FDVixPQUFXLEtBQ1gsS0FBUyxLQUNULE1BQVUsS0FDVixRQUFZLEtBQ1osS0FBUyxLQUNULEtBQVMsS0FDVCxLQUFTLEtBQ1QsS0FBUyxLQUNULEtBQVMsS0FDVCxNQUFVLEtBQ1YsS0FBUyxLQUNULEtBQVMsS0FDVCxLQUFTLEtBQ1QsS0FBUyxLQUNULEtBQVMsS0FDVCxPQUFXLEtBQ1gsS0FBUyxLQUNULE1BQVUsS0FDVixNQUFVLEtBQ1YsTUFBVSxLQUNWLEtBQVMsS0FDVCxNQUFVLEtBQ1YsR0FBTyxLQUNQLEtBQVMsS0FDVCxJQUFRLEtBQ1IsTUFBVSxLQUNWLE9BQVcsS0FDWCxNQUFVLEtBQ1YsS0FBUyxLQUNULE1BQVUsS0FDVixJQUFRLEtBQ1IsSUFBUSxLQUNSLEdBQU8s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ImxhbmR4bWwuYnJvd3Nlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImxhbmR4bWxcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wibGFuZHhtbFwiXSA9IGZhY3RvcnkoKTtcbn0pKHNlbGYsIGZ1bmN0aW9uKCkge1xucmV0dXJuICIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIG1ldGFfMSA9IHJlcXVpcmUoXCJAdHVyZi9tZXRhXCIpO1xuLy8gTm90ZTogY2hhbmdlIFJBRElVUyA9PiBlYXJ0aFJhZGl1c1xudmFyIFJBRElVUyA9IDYzNzgxMzc7XG4vKipcbiAqIFRha2VzIG9uZSBvciBtb3JlIGZlYXR1cmVzIGFuZCByZXR1cm5zIHRoZWlyIGFyZWEgaW4gc3F1YXJlIG1ldGVycy5cbiAqXG4gKiBAbmFtZSBhcmVhXG4gKiBAcGFyYW0ge0dlb0pTT059IGdlb2pzb24gaW5wdXQgR2VvSlNPTiBmZWF0dXJlKHMpXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhcmVhIGluIHNxdWFyZSBtZXRlcnNcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbiA9IHR1cmYucG9seWdvbihbW1sxMjUsIC0xNV0sIFsxMTMsIC0yMl0sIFsxNTQsIC0yN10sIFsxNDQsIC0xNV0sIFsxMjUsIC0xNV1dXSk7XG4gKlxuICogdmFyIGFyZWEgPSB0dXJmLmFyZWEocG9seWdvbik7XG4gKlxuICogLy9hZGRUb01hcFxuICogdmFyIGFkZFRvTWFwID0gW3BvbHlnb25dXG4gKiBwb2x5Z29uLnByb3BlcnRpZXMuYXJlYSA9IGFyZWFcbiAqL1xuZnVuY3Rpb24gYXJlYShnZW9qc29uKSB7XG4gICAgcmV0dXJuIG1ldGFfMS5nZW9tUmVkdWNlKGdlb2pzb24sIGZ1bmN0aW9uICh2YWx1ZSwgZ2VvbSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgKyBjYWxjdWxhdGVBcmVhKGdlb20pO1xuICAgIH0sIDApO1xufVxuZXhwb3J0cy5kZWZhdWx0ID0gYXJlYTtcbi8qKlxuICogQ2FsY3VsYXRlIEFyZWFcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtHZW9tZXRyeX0gZ2VvbSBHZW9KU09OIEdlb21ldHJpZXNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFyZWFcbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlQXJlYShnZW9tKSB7XG4gICAgdmFyIHRvdGFsID0gMDtcbiAgICB2YXIgaTtcbiAgICBzd2l0Y2ggKGdlb20udHlwZSkge1xuICAgICAgICBjYXNlIFwiUG9seWdvblwiOlxuICAgICAgICAgICAgcmV0dXJuIHBvbHlnb25BcmVhKGdlb20uY29vcmRpbmF0ZXMpO1xuICAgICAgICBjYXNlIFwiTXVsdGlQb2x5Z29uXCI6XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvbS5jb29yZGluYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRvdGFsICs9IHBvbHlnb25BcmVhKGdlb20uY29vcmRpbmF0ZXNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRvdGFsO1xuICAgICAgICBjYXNlIFwiUG9pbnRcIjpcbiAgICAgICAgY2FzZSBcIk11bHRpUG9pbnRcIjpcbiAgICAgICAgY2FzZSBcIkxpbmVTdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcIk11bHRpTGluZVN0cmluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuZnVuY3Rpb24gcG9seWdvbkFyZWEoY29vcmRzKSB7XG4gICAgdmFyIHRvdGFsID0gMDtcbiAgICBpZiAoY29vcmRzICYmIGNvb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRvdGFsICs9IE1hdGguYWJzKHJpbmdBcmVhKGNvb3Jkc1swXSkpO1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNvb3Jkcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG90YWwgLT0gTWF0aC5hYnMocmluZ0FyZWEoY29vcmRzW2ldKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICogQ2FsY3VsYXRlIHRoZSBhcHByb3hpbWF0ZSBhcmVhIG9mIHRoZSBwb2x5Z29uIHdlcmUgaXQgcHJvamVjdGVkIG9udG8gdGhlIGVhcnRoLlxuICogTm90ZSB0aGF0IHRoaXMgYXJlYSB3aWxsIGJlIHBvc2l0aXZlIGlmIHJpbmcgaXMgb3JpZW50ZWQgY2xvY2t3aXNlLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBuZWdhdGl2ZS5cbiAqXG4gKiBSZWZlcmVuY2U6XG4gKiBSb2JlcnQuIEcuIENoYW1iZXJsYWluIGFuZCBXaWxsaWFtIEguIER1cXVldHRlLCBcIlNvbWUgQWxnb3JpdGhtcyBmb3IgUG9seWdvbnMgb24gYSBTcGhlcmVcIixcbiAqIEpQTCBQdWJsaWNhdGlvbiAwNy0wMywgSmV0IFByb3B1bHNpb25cbiAqIExhYm9yYXRvcnksIFBhc2FkZW5hLCBDQSwgSnVuZSAyMDA3IGh0dHA6Ly90cnMtbmV3LmpwbC5uYXNhLmdvdi9kc3BhY2UvaGFuZGxlLzIwMTQvNDA0MDlcbiAqXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZHMgUmluZyBDb29yZGluYXRlc1xuICogQHJldHVybnMge251bWJlcn0gVGhlIGFwcHJveGltYXRlIHNpZ25lZCBnZW9kZXNpYyBhcmVhIG9mIHRoZSBwb2x5Z29uIGluIHNxdWFyZSBtZXRlcnMuXG4gKi9cbmZ1bmN0aW9uIHJpbmdBcmVhKGNvb3Jkcykge1xuICAgIHZhciBwMTtcbiAgICB2YXIgcDI7XG4gICAgdmFyIHAzO1xuICAgIHZhciBsb3dlckluZGV4O1xuICAgIHZhciBtaWRkbGVJbmRleDtcbiAgICB2YXIgdXBwZXJJbmRleDtcbiAgICB2YXIgaTtcbiAgICB2YXIgdG90YWwgPSAwO1xuICAgIHZhciBjb29yZHNMZW5ndGggPSBjb29yZHMubGVuZ3RoO1xuICAgIGlmIChjb29yZHNMZW5ndGggPiAyKSB7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb29yZHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPT09IGNvb3Jkc0xlbmd0aCAtIDIpIHtcbiAgICAgICAgICAgICAgICBsb3dlckluZGV4ID0gY29vcmRzTGVuZ3RoIC0gMjtcbiAgICAgICAgICAgICAgICBtaWRkbGVJbmRleCA9IGNvb3Jkc0xlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgdXBwZXJJbmRleCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpID09PSBjb29yZHNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgbG93ZXJJbmRleCA9IGNvb3Jkc0xlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgbWlkZGxlSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHVwcGVySW5kZXggPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbG93ZXJJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgbWlkZGxlSW5kZXggPSBpICsgMTtcbiAgICAgICAgICAgICAgICB1cHBlckluZGV4ID0gaSArIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwMSA9IGNvb3Jkc1tsb3dlckluZGV4XTtcbiAgICAgICAgICAgIHAyID0gY29vcmRzW21pZGRsZUluZGV4XTtcbiAgICAgICAgICAgIHAzID0gY29vcmRzW3VwcGVySW5kZXhdO1xuICAgICAgICAgICAgdG90YWwgKz0gKHJhZChwM1swXSkgLSByYWQocDFbMF0pKSAqIE1hdGguc2luKHJhZChwMlsxXSkpO1xuICAgICAgICB9XG4gICAgICAgIHRvdGFsID0gdG90YWwgKiBSQURJVVMgKiBSQURJVVMgLyAyO1xuICAgIH1cbiAgICByZXR1cm4gdG90YWw7XG59XG5mdW5jdGlvbiByYWQobnVtKSB7XG4gICAgcmV0dXJuIG51bSAqIE1hdGguUEkgLyAxODA7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qKlxuICogUmV0dXJucyBhIGNsb25lZCBjb3B5IG9mIHRoZSBwYXNzZWQgR2VvSlNPTiBPYmplY3QsIGluY2x1ZGluZyBwb3NzaWJsZSAnRm9yZWlnbiBNZW1iZXJzJy5cbiAqIH4zLTV4IGZhc3RlciB0aGFuIHRoZSBjb21tb24gSlNPTi5wYXJzZSArIEpTT04uc3RyaW5naWZ5IGNvbWJvIG1ldGhvZC5cbiAqXG4gKiBAbmFtZSBjbG9uZVxuICogQHBhcmFtIHtHZW9KU09OfSBnZW9qc29uIEdlb0pTT04gT2JqZWN0XG4gKiBAcmV0dXJucyB7R2VvSlNPTn0gY2xvbmVkIEdlb0pTT04gT2JqZWN0XG4gKiBAZXhhbXBsZVxuICogdmFyIGxpbmUgPSB0dXJmLmxpbmVTdHJpbmcoW1stNzQsIDQwXSwgWy03OCwgNDJdLCBbLTgyLCAzNV1dLCB7Y29sb3I6ICdyZWQnfSk7XG4gKlxuICogdmFyIGxpbmVDbG9uZWQgPSB0dXJmLmNsb25lKGxpbmUpO1xuICovXG5mdW5jdGlvbiBjbG9uZShnZW9qc29uKSB7XG4gICAgaWYgKCFnZW9qc29uKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImdlb2pzb24gaXMgcmVxdWlyZWRcIik7XG4gICAgfVxuICAgIHN3aXRjaCAoZ2VvanNvbi50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJGZWF0dXJlXCI6XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVGZWF0dXJlKGdlb2pzb24pO1xuICAgICAgICBjYXNlIFwiRmVhdHVyZUNvbGxlY3Rpb25cIjpcbiAgICAgICAgICAgIHJldHVybiBjbG9uZUZlYXR1cmVDb2xsZWN0aW9uKGdlb2pzb24pO1xuICAgICAgICBjYXNlIFwiUG9pbnRcIjpcbiAgICAgICAgY2FzZSBcIkxpbmVTdHJpbmdcIjpcbiAgICAgICAgY2FzZSBcIlBvbHlnb25cIjpcbiAgICAgICAgY2FzZSBcIk11bHRpUG9pbnRcIjpcbiAgICAgICAgY2FzZSBcIk11bHRpTGluZVN0cmluZ1wiOlxuICAgICAgICBjYXNlIFwiTXVsdGlQb2x5Z29uXCI6XG4gICAgICAgIGNhc2UgXCJHZW9tZXRyeUNvbGxlY3Rpb25cIjpcbiAgICAgICAgICAgIHJldHVybiBjbG9uZUdlb21ldHJ5KGdlb2pzb24pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBHZW9KU09OIHR5cGVcIik7XG4gICAgfVxufVxuLyoqXG4gKiBDbG9uZSBGZWF0dXJlXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RmVhdHVyZTxhbnk+fSBnZW9qc29uIEdlb0pTT04gRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8YW55Pn0gY2xvbmVkIEZlYXR1cmVcbiAqL1xuZnVuY3Rpb24gY2xvbmVGZWF0dXJlKGdlb2pzb24pIHtcbiAgICB2YXIgY2xvbmVkID0geyB0eXBlOiBcIkZlYXR1cmVcIiB9O1xuICAgIC8vIFByZXNlcnZlIEZvcmVpZ24gTWVtYmVyc1xuICAgIE9iamVjdC5rZXlzKGdlb2pzb24pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSBcInR5cGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJwcm9wZXJ0aWVzXCI6XG4gICAgICAgICAgICBjYXNlIFwiZ2VvbWV0cnlcIjpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNsb25lZFtrZXldID0gZ2VvanNvbltrZXldO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQWRkIHByb3BlcnRpZXMgJiBnZW9tZXRyeSBsYXN0XG4gICAgY2xvbmVkLnByb3BlcnRpZXMgPSBjbG9uZVByb3BlcnRpZXMoZ2VvanNvbi5wcm9wZXJ0aWVzKTtcbiAgICBjbG9uZWQuZ2VvbWV0cnkgPSBjbG9uZUdlb21ldHJ5KGdlb2pzb24uZ2VvbWV0cnkpO1xuICAgIHJldHVybiBjbG9uZWQ7XG59XG4vKipcbiAqIENsb25lIFByb3BlcnRpZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgR2VvSlNPTiBQcm9wZXJ0aWVzXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBjbG9uZWQgUHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBjbG9uZVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICAgIHZhciBjbG9uZWQgPSB7fTtcbiAgICBpZiAoIXByb3BlcnRpZXMpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9XG4gICAgT2JqZWN0LmtleXMocHJvcGVydGllcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIG51bGxcbiAgICAgICAgICAgICAgICBjbG9uZWRba2V5XSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBBcnJheVxuICAgICAgICAgICAgICAgIGNsb25lZFtrZXldID0gdmFsdWUubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIGdlbmVyaWMgT2JqZWN0XG4gICAgICAgICAgICAgICAgY2xvbmVkW2tleV0gPSBjbG9uZVByb3BlcnRpZXModmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2xvbmVkW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZWQ7XG59XG4vKipcbiAqIENsb25lIEZlYXR1cmUgQ29sbGVjdGlvblxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9uPGFueT59IGdlb2pzb24gR2VvSlNPTiBGZWF0dXJlIENvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxhbnk+fSBjbG9uZWQgRmVhdHVyZSBDb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNsb25lRmVhdHVyZUNvbGxlY3Rpb24oZ2VvanNvbikge1xuICAgIHZhciBjbG9uZWQgPSB7IHR5cGU6IFwiRmVhdHVyZUNvbGxlY3Rpb25cIiB9O1xuICAgIC8vIFByZXNlcnZlIEZvcmVpZ24gTWVtYmVyc1xuICAgIE9iamVjdC5rZXlzKGdlb2pzb24pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSBcInR5cGVcIjpcbiAgICAgICAgICAgIGNhc2UgXCJmZWF0dXJlc1wiOlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY2xvbmVkW2tleV0gPSBnZW9qc29uW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBZGQgZmVhdHVyZXNcbiAgICBjbG9uZWQuZmVhdHVyZXMgPSBnZW9qc29uLmZlYXR1cmVzLm1hcChmdW5jdGlvbiAoZmVhdHVyZSkge1xuICAgICAgICByZXR1cm4gY2xvbmVGZWF0dXJlKGZlYXR1cmUpO1xuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZWQ7XG59XG4vKipcbiAqIENsb25lIEdlb21ldHJ5XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7R2VvbWV0cnk8YW55Pn0gZ2VvbWV0cnkgR2VvSlNPTiBHZW9tZXRyeVxuICogQHJldHVybnMge0dlb21ldHJ5PGFueT59IGNsb25lZCBHZW9tZXRyeVxuICovXG5mdW5jdGlvbiBjbG9uZUdlb21ldHJ5KGdlb21ldHJ5KSB7XG4gICAgdmFyIGdlb20gPSB7IHR5cGU6IGdlb21ldHJ5LnR5cGUgfTtcbiAgICBpZiAoZ2VvbWV0cnkuYmJveCkge1xuICAgICAgICBnZW9tLmJib3ggPSBnZW9tZXRyeS5iYm94O1xuICAgIH1cbiAgICBpZiAoZ2VvbWV0cnkudHlwZSA9PT0gXCJHZW9tZXRyeUNvbGxlY3Rpb25cIikge1xuICAgICAgICBnZW9tLmdlb21ldHJpZXMgPSBnZW9tZXRyeS5nZW9tZXRyaWVzLm1hcChmdW5jdGlvbiAoZykge1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lR2VvbWV0cnkoZyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZ2VvbTtcbiAgICB9XG4gICAgZ2VvbS5jb29yZGluYXRlcyA9IGRlZXBTbGljZShnZW9tZXRyeS5jb29yZGluYXRlcyk7XG4gICAgcmV0dXJuIGdlb207XG59XG4vKipcbiAqIERlZXAgU2xpY2UgY29vcmRpbmF0ZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtDb29yZGluYXRlc30gY29vcmRzIENvb3JkaW5hdGVzXG4gKiBAcmV0dXJucyB7Q29vcmRpbmF0ZXN9IGFsbCBjb29yZGluYXRlcyBzbGljZWRcbiAqL1xuZnVuY3Rpb24gZGVlcFNsaWNlKGNvb3Jkcykge1xuICAgIHZhciBjbG9uZWQgPSBjb29yZHM7XG4gICAgaWYgKHR5cGVvZiBjbG9uZWRbMF0gIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lZC5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmVkLm1hcChmdW5jdGlvbiAoY29vcmQpIHtcbiAgICAgICAgcmV0dXJuIGRlZXBTbGljZShjb29yZCk7XG4gICAgfSk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBjbG9uZTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuLyoqXG4gKiBAbW9kdWxlIGhlbHBlcnNcbiAqL1xuLyoqXG4gKiBFYXJ0aCBSYWRpdXMgdXNlZCB3aXRoIHRoZSBIYXJ2ZXNpbmUgZm9ybXVsYSBhbmQgYXBwcm94aW1hdGVzIHVzaW5nIGEgc3BoZXJpY2FsIChub24tZWxsaXBzb2lkKSBFYXJ0aC5cbiAqXG4gKiBAbWVtYmVyb2YgaGVscGVyc1xuICogQHR5cGUge251bWJlcn1cbiAqL1xuZXhwb3J0cy5lYXJ0aFJhZGl1cyA9IDYzNzEwMDguODtcbi8qKlxuICogVW5pdCBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIHVzaW5nIGEgc3BoZXJpY2FsIChub24tZWxsaXBzb2lkKSBlYXJ0aCByYWRpdXMuXG4gKlxuICogQG1lbWJlcm9mIGhlbHBlcnNcbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cbmV4cG9ydHMuZmFjdG9ycyA9IHtcbiAgICBjZW50aW1ldGVyczogZXhwb3J0cy5lYXJ0aFJhZGl1cyAqIDEwMCxcbiAgICBjZW50aW1ldHJlczogZXhwb3J0cy5lYXJ0aFJhZGl1cyAqIDEwMCxcbiAgICBkZWdyZWVzOiBleHBvcnRzLmVhcnRoUmFkaXVzIC8gMTExMzI1LFxuICAgIGZlZXQ6IGV4cG9ydHMuZWFydGhSYWRpdXMgKiAzLjI4MDg0LFxuICAgIGluY2hlczogZXhwb3J0cy5lYXJ0aFJhZGl1cyAqIDM5LjM3MCxcbiAgICBraWxvbWV0ZXJzOiBleHBvcnRzLmVhcnRoUmFkaXVzIC8gMTAwMCxcbiAgICBraWxvbWV0cmVzOiBleHBvcnRzLmVhcnRoUmFkaXVzIC8gMTAwMCxcbiAgICBtZXRlcnM6IGV4cG9ydHMuZWFydGhSYWRpdXMsXG4gICAgbWV0cmVzOiBleHBvcnRzLmVhcnRoUmFkaXVzLFxuICAgIG1pbGVzOiBleHBvcnRzLmVhcnRoUmFkaXVzIC8gMTYwOS4zNDQsXG4gICAgbWlsbGltZXRlcnM6IGV4cG9ydHMuZWFydGhSYWRpdXMgKiAxMDAwLFxuICAgIG1pbGxpbWV0cmVzOiBleHBvcnRzLmVhcnRoUmFkaXVzICogMTAwMCxcbiAgICBuYXV0aWNhbG1pbGVzOiBleHBvcnRzLmVhcnRoUmFkaXVzIC8gMTg1MixcbiAgICByYWRpYW5zOiAxLFxuICAgIHlhcmRzOiBleHBvcnRzLmVhcnRoUmFkaXVzIC8gMS4wOTM2LFxufTtcbi8qKlxuICogVW5pdHMgb2YgbWVhc3VyZW1lbnQgZmFjdG9ycyBiYXNlZCBvbiAxIG1ldGVyLlxuICpcbiAqIEBtZW1iZXJvZiBoZWxwZXJzXG4gKiBAdHlwZSB7T2JqZWN0fVxuICovXG5leHBvcnRzLnVuaXRzRmFjdG9ycyA9IHtcbiAgICBjZW50aW1ldGVyczogMTAwLFxuICAgIGNlbnRpbWV0cmVzOiAxMDAsXG4gICAgZGVncmVlczogMSAvIDExMTMyNSxcbiAgICBmZWV0OiAzLjI4MDg0LFxuICAgIGluY2hlczogMzkuMzcwLFxuICAgIGtpbG9tZXRlcnM6IDEgLyAxMDAwLFxuICAgIGtpbG9tZXRyZXM6IDEgLyAxMDAwLFxuICAgIG1ldGVyczogMSxcbiAgICBtZXRyZXM6IDEsXG4gICAgbWlsZXM6IDEgLyAxNjA5LjM0NCxcbiAgICBtaWxsaW1ldGVyczogMTAwMCxcbiAgICBtaWxsaW1ldHJlczogMTAwMCxcbiAgICBuYXV0aWNhbG1pbGVzOiAxIC8gMTg1MixcbiAgICByYWRpYW5zOiAxIC8gZXhwb3J0cy5lYXJ0aFJhZGl1cyxcbiAgICB5YXJkczogMSAvIDEuMDkzNixcbn07XG4vKipcbiAqIEFyZWEgb2YgbWVhc3VyZW1lbnQgZmFjdG9ycyBiYXNlZCBvbiAxIHNxdWFyZSBtZXRlci5cbiAqXG4gKiBAbWVtYmVyb2YgaGVscGVyc1xuICogQHR5cGUge09iamVjdH1cbiAqL1xuZXhwb3J0cy5hcmVhRmFjdG9ycyA9IHtcbiAgICBhY3JlczogMC4wMDAyNDcxMDUsXG4gICAgY2VudGltZXRlcnM6IDEwMDAwLFxuICAgIGNlbnRpbWV0cmVzOiAxMDAwMCxcbiAgICBmZWV0OiAxMC43NjM5MTA0MTcsXG4gICAgaW5jaGVzOiAxNTUwLjAwMzEwMDAwNixcbiAgICBraWxvbWV0ZXJzOiAwLjAwMDAwMSxcbiAgICBraWxvbWV0cmVzOiAwLjAwMDAwMSxcbiAgICBtZXRlcnM6IDEsXG4gICAgbWV0cmVzOiAxLFxuICAgIG1pbGVzOiAzLjg2ZS03LFxuICAgIG1pbGxpbWV0ZXJzOiAxMDAwMDAwLFxuICAgIG1pbGxpbWV0cmVzOiAxMDAwMDAwLFxuICAgIHlhcmRzOiAxLjE5NTk5MDA0Nixcbn07XG4vKipcbiAqIFdyYXBzIGEgR2VvSlNPTiB7QGxpbmsgR2VvbWV0cnl9IGluIGEgR2VvSlNPTiB7QGxpbmsgRmVhdHVyZX0uXG4gKlxuICogQG5hbWUgZmVhdHVyZVxuICogQHBhcmFtIHtHZW9tZXRyeX0gZ2VvbWV0cnkgaW5wdXQgZ2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZX0gYSBHZW9KU09OIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgZ2VvbWV0cnkgPSB7XG4gKiAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgIFwiY29vcmRpbmF0ZXNcIjogWzExMCwgNTBdXG4gKiB9O1xuICpcbiAqIHZhciBmZWF0dXJlID0gdHVyZi5mZWF0dXJlKGdlb21ldHJ5KTtcbiAqXG4gKiAvLz1mZWF0dXJlXG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIGZlYXQgPSB7IHR5cGU6IFwiRmVhdHVyZVwiIH07XG4gICAgaWYgKG9wdGlvbnMuaWQgPT09IDAgfHwgb3B0aW9ucy5pZCkge1xuICAgICAgICBmZWF0LmlkID0gb3B0aW9ucy5pZDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYmJveCkge1xuICAgICAgICBmZWF0LmJib3ggPSBvcHRpb25zLmJib3g7XG4gICAgfVxuICAgIGZlYXQucHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307XG4gICAgZmVhdC5nZW9tZXRyeSA9IGdlb207XG4gICAgcmV0dXJuIGZlYXQ7XG59XG5leHBvcnRzLmZlYXR1cmUgPSBmZWF0dXJlO1xuLyoqXG4gKiBDcmVhdGVzIGEgR2VvSlNPTiB7QGxpbmsgR2VvbWV0cnl9IGZyb20gYSBHZW9tZXRyeSBzdHJpbmcgdHlwZSAmIGNvb3JkaW5hdGVzLlxuICogRm9yIEdlb21ldHJ5Q29sbGVjdGlvbiB0eXBlIHVzZSBgaGVscGVycy5nZW9tZXRyeUNvbGxlY3Rpb25gXG4gKlxuICogQG5hbWUgZ2VvbWV0cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIEdlb21ldHJ5IFR5cGVcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gY29vcmRpbmF0ZXMgQ29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHJldHVybnMge0dlb21ldHJ5fSBhIEdlb0pTT04gR2VvbWV0cnlcbiAqIEBleGFtcGxlXG4gKiB2YXIgdHlwZSA9IFwiUG9pbnRcIjtcbiAqIHZhciBjb29yZGluYXRlcyA9IFsxMTAsIDUwXTtcbiAqIHZhciBnZW9tZXRyeSA9IHR1cmYuZ2VvbWV0cnkodHlwZSwgY29vcmRpbmF0ZXMpO1xuICogLy8gPT4gZ2VvbWV0cnlcbiAqL1xuZnVuY3Rpb24gZ2VvbWV0cnkodHlwZSwgY29vcmRpbmF0ZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFwiUG9pbnRcIjogcmV0dXJuIHBvaW50KGNvb3JkaW5hdGVzKS5nZW9tZXRyeTtcbiAgICAgICAgY2FzZSBcIkxpbmVTdHJpbmdcIjogcmV0dXJuIGxpbmVTdHJpbmcoY29vcmRpbmF0ZXMpLmdlb21ldHJ5O1xuICAgICAgICBjYXNlIFwiUG9seWdvblwiOiByZXR1cm4gcG9seWdvbihjb29yZGluYXRlcykuZ2VvbWV0cnk7XG4gICAgICAgIGNhc2UgXCJNdWx0aVBvaW50XCI6IHJldHVybiBtdWx0aVBvaW50KGNvb3JkaW5hdGVzKS5nZW9tZXRyeTtcbiAgICAgICAgY2FzZSBcIk11bHRpTGluZVN0cmluZ1wiOiByZXR1cm4gbXVsdGlMaW5lU3RyaW5nKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTtcbiAgICAgICAgY2FzZSBcIk11bHRpUG9seWdvblwiOiByZXR1cm4gbXVsdGlQb2x5Z29uKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTtcbiAgICAgICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKHR5cGUgKyBcIiBpcyBpbnZhbGlkXCIpO1xuICAgIH1cbn1cbmV4cG9ydHMuZ2VvbWV0cnkgPSBnZW9tZXRyeTtcbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2ludH0ge0BsaW5rIEZlYXR1cmV9IGZyb20gYSBQb3NpdGlvbi5cbiAqXG4gKiBAbmFtZSBwb2ludFxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjb29yZGluYXRlcyBsb25naXR1ZGUsIGxhdGl0dWRlIHBvc2l0aW9uIChlYWNoIGluIGRlY2ltYWwgZGVncmVlcylcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxQb2ludD59IGEgUG9pbnQgZmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2ludCA9IHR1cmYucG9pbnQoWy03NS4zNDMsIDM5Ljk4NF0pO1xuICpcbiAqIC8vPXBvaW50XG4gKi9cbmZ1bmN0aW9uIHBvaW50KGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgZ2VvbSA9IHtcbiAgICAgICAgdHlwZTogXCJQb2ludFwiLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXMsXG4gICAgfTtcbiAgICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMucG9pbnQgPSBwb2ludDtcbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2ludH0ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIFBvaW50IGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lIHBvaW50c1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9pbnRzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIFRyYW5zbGF0ZSB0aGVzZSBwcm9wZXJ0aWVzIHRvIGVhY2ggRmVhdHVyZVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXVxuICogYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248UG9pbnQ+fSBQb2ludCBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvaW50cyA9IHR1cmYucG9pbnRzKFtcbiAqICAgWy03NSwgMzldLFxuICogICBbLTgwLCA0NV0sXG4gKiAgIFstNzgsIDUwXVxuICogXSk7XG4gKlxuICogLy89cG9pbnRzXG4gKi9cbmZ1bmN0aW9uIHBvaW50cyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgIHJldHVybiBwb2ludChjb29yZHMsIHByb3BlcnRpZXMpO1xuICAgIH0pLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMucG9pbnRzID0gcG9pbnRzO1xuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvbHlnb259IHtAbGluayBGZWF0dXJlfSBmcm9tIGFuIEFycmF5IG9mIExpbmVhclJpbmdzLlxuICpcbiAqIEBuYW1lIHBvbHlnb25cbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lYXJSaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPFBvbHlnb24+fSBQb2x5Z29uIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbiA9IHR1cmYucG9seWdvbihbW1stNSwgNTJdLCBbLTQsIDU2XSwgWy0yLCA1MV0sIFstNywgNTRdLCBbLTUsIDUyXV1dLCB7IG5hbWU6ICdwb2x5MScgfSk7XG4gKlxuICogLy89cG9seWdvblxuICovXG5mdW5jdGlvbiBwb2x5Z29uKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBmb3IgKHZhciBfaSA9IDAsIGNvb3JkaW5hdGVzXzEgPSBjb29yZGluYXRlczsgX2kgPCBjb29yZGluYXRlc18xLmxlbmd0aDsgX2krKykge1xuICAgICAgICB2YXIgcmluZyA9IGNvb3JkaW5hdGVzXzFbX2ldO1xuICAgICAgICBpZiAocmluZy5sZW5ndGggPCA0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFYWNoIExpbmVhclJpbmcgb2YgYSBQb2x5Z29uIG11c3QgaGF2ZSA0IG9yIG1vcmUgUG9zaXRpb25zLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmdbcmluZy5sZW5ndGggLSAxXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZmlyc3QgcG9pbnQgb2YgUG9seWdvbiBjb250YWlucyB0d28gbnVtYmVyc1xuICAgICAgICAgICAgaWYgKHJpbmdbcmluZy5sZW5ndGggLSAxXVtqXSAhPT0gcmluZ1swXVtqXSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZpcnN0IGFuZCBsYXN0IFBvc2l0aW9uIGFyZSBub3QgZXF1aXZhbGVudC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGdlb20gPSB7XG4gICAgICAgIHR5cGU6IFwiUG9seWdvblwiLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXMsXG4gICAgfTtcbiAgICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMucG9seWdvbiA9IHBvbHlnb247XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9seWdvbn0ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIFBvbHlnb24gY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgcG9seWdvbnNcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9seWdvbiBjb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248UG9seWdvbj59IFBvbHlnb24gRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbnMgPSB0dXJmLnBvbHlnb25zKFtcbiAqICAgW1tbLTUsIDUyXSwgWy00LCA1Nl0sIFstMiwgNTFdLCBbLTcsIDU0XSwgWy01LCA1Ml1dXSxcbiAqICAgW1tbLTE1LCA0Ml0sIFstMTQsIDQ2XSwgWy0xMiwgNDFdLCBbLTE3LCA0NF0sIFstMTUsIDQyXV1dLFxuICogXSk7XG4gKlxuICogLy89cG9seWdvbnNcbiAqL1xuZnVuY3Rpb24gcG9seWdvbnMoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihjb29yZGluYXRlcy5tYXAoZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gcG9seWdvbihjb29yZHMsIHByb3BlcnRpZXMpO1xuICAgIH0pLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMucG9seWdvbnMgPSBwb2x5Z29ucztcbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBMaW5lU3RyaW5nfSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhbiBBcnJheSBvZiBQb3NpdGlvbnMuXG4gKlxuICogQG5hbWUgbGluZVN0cmluZ1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9zaXRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TGluZVN0cmluZz59IExpbmVTdHJpbmcgRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBsaW5lc3RyaW5nMSA9IHR1cmYubGluZVN0cmluZyhbWy0yNCwgNjNdLCBbLTIzLCA2MF0sIFstMjUsIDY1XSwgWy0yMCwgNjldXSwge25hbWU6ICdsaW5lIDEnfSk7XG4gKiB2YXIgbGluZXN0cmluZzIgPSB0dXJmLmxpbmVTdHJpbmcoW1stMTQsIDQzXSwgWy0xMywgNDBdLCBbLTE1LCA0NV0sIFstMTAsIDQ5XV0sIHtuYW1lOiAnbGluZSAyJ30pO1xuICpcbiAqIC8vPWxpbmVzdHJpbmcxXG4gKiAvLz1saW5lc3RyaW5nMlxuICovXG5mdW5jdGlvbiBsaW5lU3RyaW5nKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoIDwgMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb29yZGluYXRlcyBtdXN0IGJlIGFuIGFycmF5IG9mIHR3byBvciBtb3JlIHBvc2l0aW9uc1wiKTtcbiAgICB9XG4gICAgdmFyIGdlb20gPSB7XG4gICAgICAgIHR5cGU6IFwiTGluZVN0cmluZ1wiLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXMsXG4gICAgfTtcbiAgICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMubGluZVN0cmluZyA9IGxpbmVTdHJpbmc7XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgTGluZVN0cmluZ30ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIExpbmVTdHJpbmcgY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgbGluZVN0cmluZ3NcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lYXJSaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdXG4gKiBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxMaW5lU3RyaW5nPn0gTGluZVN0cmluZyBGZWF0dXJlQ29sbGVjdGlvblxuICogQGV4YW1wbGVcbiAqIHZhciBsaW5lc3RyaW5ncyA9IHR1cmYubGluZVN0cmluZ3MoW1xuICogICBbWy0yNCwgNjNdLCBbLTIzLCA2MF0sIFstMjUsIDY1XSwgWy0yMCwgNjldXSxcbiAqICAgW1stMTQsIDQzXSwgWy0xMywgNDBdLCBbLTE1LCA0NV0sIFstMTAsIDQ5XV1cbiAqIF0pO1xuICpcbiAqIC8vPWxpbmVzdHJpbmdzXG4gKi9cbmZ1bmN0aW9uIGxpbmVTdHJpbmdzKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oY29vcmRpbmF0ZXMubWFwKGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgICAgcmV0dXJuIGxpbmVTdHJpbmcoY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9KSwgb3B0aW9ucyk7XG59XG5leHBvcnRzLmxpbmVTdHJpbmdzID0gbGluZVN0cmluZ3M7XG4vKipcbiAqIFRha2VzIG9uZSBvciBtb3JlIHtAbGluayBGZWF0dXJlfEZlYXR1cmVzfSBhbmQgY3JlYXRlcyBhIHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0uXG4gKlxuICogQG5hbWUgZmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7RmVhdHVyZVtdfSBmZWF0dXJlcyBpbnB1dCBmZWF0dXJlc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb259IEZlYXR1cmVDb2xsZWN0aW9uIG9mIEZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogdmFyIGxvY2F0aW9uQSA9IHR1cmYucG9pbnQoWy03NS4zNDMsIDM5Ljk4NF0sIHtuYW1lOiAnTG9jYXRpb24gQSd9KTtcbiAqIHZhciBsb2NhdGlvbkIgPSB0dXJmLnBvaW50KFstNzUuODMzLCAzOS4yODRdLCB7bmFtZTogJ0xvY2F0aW9uIEInfSk7XG4gKiB2YXIgbG9jYXRpb25DID0gdHVyZi5wb2ludChbLTc1LjUzNCwgMzkuMTIzXSwge25hbWU6ICdMb2NhdGlvbiBDJ30pO1xuICpcbiAqIHZhciBjb2xsZWN0aW9uID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIGxvY2F0aW9uQSxcbiAqICAgbG9jYXRpb25CLFxuICogICBsb2NhdGlvbkNcbiAqIF0pO1xuICpcbiAqIC8vPWNvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBmYyA9IHsgdHlwZTogXCJGZWF0dXJlQ29sbGVjdGlvblwiIH07XG4gICAgaWYgKG9wdGlvbnMuaWQpIHtcbiAgICAgICAgZmMuaWQgPSBvcHRpb25zLmlkO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5iYm94KSB7XG4gICAgICAgIGZjLmJib3ggPSBvcHRpb25zLmJib3g7XG4gICAgfVxuICAgIGZjLmZlYXR1cmVzID0gZmVhdHVyZXM7XG4gICAgcmV0dXJuIGZjO1xufVxuZXhwb3J0cy5mZWF0dXJlQ29sbGVjdGlvbiA9IGZlYXR1cmVDb2xsZWN0aW9uO1xuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8TXVsdGlMaW5lU3RyaW5nPn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aUxpbmVTdHJpbmdcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lU3RyaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPE11bHRpTGluZVN0cmluZz59IGEgTXVsdGlMaW5lU3RyaW5nIGZlYXR1cmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBjb29yZGluYXRlcyBhcmUgcGFzc2VkXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtbWzAsMF0sWzEwLDEwXV1dKTtcbiAqXG4gKiAvLz1tdWx0aUxpbmVcbiAqL1xuZnVuY3Rpb24gbXVsdGlMaW5lU3RyaW5nKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgZ2VvbSA9IHtcbiAgICAgICAgdHlwZTogXCJNdWx0aUxpbmVTdHJpbmdcIixcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzLFxuICAgIH07XG4gICAgcmV0dXJuIGZlYXR1cmUoZ2VvbSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5leHBvcnRzLm11bHRpTGluZVN0cmluZyA9IG11bHRpTGluZVN0cmluZztcbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpUG9pbnQ+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIG11bHRpUG9pbnRcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvc2l0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPE11bHRpUG9pbnQ+fSBhIE11bHRpUG9pbnQgZmVhdHVyZVxuICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlQdCA9IHR1cmYubXVsdGlQb2ludChbWzAsMF0sWzEwLDEwXV0pO1xuICpcbiAqIC8vPW11bHRpUHRcbiAqL1xuZnVuY3Rpb24gbXVsdGlQb2ludChjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIGdlb20gPSB7XG4gICAgICAgIHR5cGU6IFwiTXVsdGlQb2ludFwiLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXMsXG4gICAgfTtcbiAgICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMubXVsdGlQb2ludCA9IG11bHRpUG9pbnQ7XG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxNdWx0aVBvbHlnb24+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIG11bHRpUG9seWdvblxuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb2x5Z29uc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPE11bHRpUG9seWdvbj59IGEgbXVsdGlwb2x5Z29uIGZlYXR1cmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBjb29yZGluYXRlcyBhcmUgcGFzc2VkXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpUG9seSA9IHR1cmYubXVsdGlQb2x5Z29uKFtbW1swLDBdLFswLDEwXSxbMTAsMTBdLFsxMCwwXSxbMCwwXV1dXSk7XG4gKlxuICogLy89bXVsdGlQb2x5XG4gKlxuICovXG5mdW5jdGlvbiBtdWx0aVBvbHlnb24oY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZhciBnZW9tID0ge1xuICAgICAgICB0eXBlOiBcIk11bHRpUG9seWdvblwiLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXMsXG4gICAgfTtcbiAgICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMubXVsdGlQb2x5Z29uID0gbXVsdGlQb2x5Z29uO1xuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8R2VvbWV0cnlDb2xsZWN0aW9uPn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBnZW9tZXRyeUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXk8R2VvbWV0cnk+fSBnZW9tZXRyaWVzIGFuIGFycmF5IG9mIEdlb0pTT04gR2VvbWV0cmllc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPEdlb21ldHJ5Q29sbGVjdGlvbj59IGEgR2VvSlNPTiBHZW9tZXRyeUNvbGxlY3Rpb24gRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwdCA9IHR1cmYuZ2VvbWV0cnkoXCJQb2ludFwiLCBbMTAwLCAwXSk7XG4gKiB2YXIgbGluZSA9IHR1cmYuZ2VvbWV0cnkoXCJMaW5lU3RyaW5nXCIsIFtbMTAxLCAwXSwgWzEwMiwgMV1dKTtcbiAqIHZhciBjb2xsZWN0aW9uID0gdHVyZi5nZW9tZXRyeUNvbGxlY3Rpb24oW3B0LCBsaW5lXSk7XG4gKlxuICogLy8gPT4gY29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBnZW9tZXRyeUNvbGxlY3Rpb24oZ2VvbWV0cmllcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHsgb3B0aW9ucyA9IHt9OyB9XG4gICAgdmFyIGdlb20gPSB7XG4gICAgICAgIHR5cGU6IFwiR2VvbWV0cnlDb2xsZWN0aW9uXCIsXG4gICAgICAgIGdlb21ldHJpZXM6IGdlb21ldHJpZXMsXG4gICAgfTtcbiAgICByZXR1cm4gZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cbmV4cG9ydHMuZ2VvbWV0cnlDb2xsZWN0aW9uID0gZ2VvbWV0cnlDb2xsZWN0aW9uO1xuLyoqXG4gKiBSb3VuZCBudW1iZXIgdG8gcHJlY2lzaW9uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG51bSBOdW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFByZWNpc2lvblxuICogQHJldHVybnMge251bWJlcn0gcm91bmRlZCBudW1iZXJcbiAqIEBleGFtcGxlXG4gKiB0dXJmLnJvdW5kKDEyMC40MzIxKVxuICogLy89MTIwXG4gKlxuICogdHVyZi5yb3VuZCgxMjAuNDMyMSwgMilcbiAqIC8vPTEyMC40M1xuICovXG5mdW5jdGlvbiByb3VuZChudW0sIHByZWNpc2lvbikge1xuICAgIGlmIChwcmVjaXNpb24gPT09IHZvaWQgMCkgeyBwcmVjaXNpb24gPSAwOyB9XG4gICAgaWYgKHByZWNpc2lvbiAmJiAhKHByZWNpc2lvbiA+PSAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwcmVjaXNpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgICB9XG4gICAgdmFyIG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDApO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG51bSAqIG11bHRpcGxpZXIpIC8gbXVsdGlwbGllcjtcbn1cbmV4cG9ydHMucm91bmQgPSByb3VuZDtcbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSByYWRpYW5zIHRvIGEgbW9yZSBmcmllbmRseSB1bml0LlxuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAbmFtZSByYWRpYW5zVG9MZW5ndGhcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIGluIHJhZGlhbnMgYWNyb3NzIHRoZSBzcGhlcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9XCJraWxvbWV0ZXJzXCJdIGNhbiBiZSBkZWdyZWVzLCByYWRpYW5zLCBtaWxlcywgb3Iga2lsb21ldGVycyBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsXG4gKiBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBkaXN0YW5jZVxuICovXG5mdW5jdGlvbiByYWRpYW5zVG9MZW5ndGgocmFkaWFucywgdW5pdHMpIHtcbiAgICBpZiAodW5pdHMgPT09IHZvaWQgMCkgeyB1bml0cyA9IFwia2lsb21ldGVyc1wiOyB9XG4gICAgdmFyIGZhY3RvciA9IGV4cG9ydHMuZmFjdG9yc1t1bml0c107XG4gICAgaWYgKCFmYWN0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHVuaXRzICsgXCIgdW5pdHMgaXMgaW52YWxpZFwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBmYWN0b3I7XG59XG5leHBvcnRzLnJhZGlhbnNUb0xlbmd0aCA9IHJhZGlhbnNUb0xlbmd0aDtcbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSBhIHJlYWwtd29ybGQgdW5pdCBpbnRvIHJhZGlhbnNcbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGtpbG9tZXRlcnMsIGNlbnRpbWV0ZXJzLCBmZWV0XG4gKlxuICogQG5hbWUgbGVuZ3RoVG9SYWRpYW5zXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2UgaW4gcmVhbCB1bml0c1xuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz1cImtpbG9tZXRlcnNcIl0gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBvciBraWxvbWV0ZXJzIGluY2hlcywgeWFyZHMsIG1ldHJlcyxcbiAqIG1ldGVycywga2lsb21ldHJlcywga2lsb21ldGVycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IHJhZGlhbnNcbiAqL1xuZnVuY3Rpb24gbGVuZ3RoVG9SYWRpYW5zKGRpc3RhbmNlLCB1bml0cykge1xuICAgIGlmICh1bml0cyA9PT0gdm9pZCAwKSB7IHVuaXRzID0gXCJraWxvbWV0ZXJzXCI7IH1cbiAgICB2YXIgZmFjdG9yID0gZXhwb3J0cy5mYWN0b3JzW3VuaXRzXTtcbiAgICBpZiAoIWZhY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IodW5pdHMgKyBcIiB1bml0cyBpcyBpbnZhbGlkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZGlzdGFuY2UgLyBmYWN0b3I7XG59XG5leHBvcnRzLmxlbmd0aFRvUmFkaWFucyA9IGxlbmd0aFRvUmFkaWFucztcbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSBhIHJlYWwtd29ybGQgdW5pdCBpbnRvIGRlZ3JlZXNcbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGNlbnRpbWV0ZXJzLCBraWxvbWV0cmVzLCBmZWV0XG4gKlxuICogQG5hbWUgbGVuZ3RoVG9EZWdyZWVzXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2UgaW4gcmVhbCB1bml0c1xuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz1cImtpbG9tZXRlcnNcIl0gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBvciBraWxvbWV0ZXJzIGluY2hlcywgeWFyZHMsIG1ldHJlcyxcbiAqIG1ldGVycywga2lsb21ldHJlcywga2lsb21ldGVycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IGRlZ3JlZXNcbiAqL1xuZnVuY3Rpb24gbGVuZ3RoVG9EZWdyZWVzKGRpc3RhbmNlLCB1bml0cykge1xuICAgIHJldHVybiByYWRpYW5zVG9EZWdyZWVzKGxlbmd0aFRvUmFkaWFucyhkaXN0YW5jZSwgdW5pdHMpKTtcbn1cbmV4cG9ydHMubGVuZ3RoVG9EZWdyZWVzID0gbGVuZ3RoVG9EZWdyZWVzO1xuLyoqXG4gKiBDb252ZXJ0cyBhbnkgYmVhcmluZyBhbmdsZSBmcm9tIHRoZSBub3J0aCBsaW5lIGRpcmVjdGlvbiAocG9zaXRpdmUgY2xvY2t3aXNlKVxuICogYW5kIHJldHVybnMgYW4gYW5nbGUgYmV0d2VlbiAwLTM2MCBkZWdyZWVzIChwb3NpdGl2ZSBjbG9ja3dpc2UpLCAwIGJlaW5nIHRoZSBub3J0aCBsaW5lXG4gKlxuICogQG5hbWUgYmVhcmluZ1RvQXppbXV0aFxuICogQHBhcmFtIHtudW1iZXJ9IGJlYXJpbmcgYW5nbGUsIGJldHdlZW4gLTE4MCBhbmQgKzE4MCBkZWdyZWVzXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBhbmdsZSBiZXR3ZWVuIDAgYW5kIDM2MCBkZWdyZWVzXG4gKi9cbmZ1bmN0aW9uIGJlYXJpbmdUb0F6aW11dGgoYmVhcmluZykge1xuICAgIHZhciBhbmdsZSA9IGJlYXJpbmcgJSAzNjA7XG4gICAgaWYgKGFuZ2xlIDwgMCkge1xuICAgICAgICBhbmdsZSArPSAzNjA7XG4gICAgfVxuICAgIHJldHVybiBhbmdsZTtcbn1cbmV4cG9ydHMuYmVhcmluZ1RvQXppbXV0aCA9IGJlYXJpbmdUb0F6aW11dGg7XG4vKipcbiAqIENvbnZlcnRzIGFuIGFuZ2xlIGluIHJhZGlhbnMgdG8gZGVncmVlc1xuICpcbiAqIEBuYW1lIHJhZGlhbnNUb0RlZ3JlZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIGFuZ2xlIGluIHJhZGlhbnNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGRlZ3JlZXMgYmV0d2VlbiAwIGFuZCAzNjAgZGVncmVlc1xuICovXG5mdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHtcbiAgICB2YXIgZGVncmVlcyA9IHJhZGlhbnMgJSAoMiAqIE1hdGguUEkpO1xuICAgIHJldHVybiBkZWdyZWVzICogMTgwIC8gTWF0aC5QSTtcbn1cbmV4cG9ydHMucmFkaWFuc1RvRGVncmVlcyA9IHJhZGlhbnNUb0RlZ3JlZXM7XG4vKipcbiAqIENvbnZlcnRzIGFuIGFuZ2xlIGluIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICpcbiAqIEBuYW1lIGRlZ3JlZXNUb1JhZGlhbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWdyZWVzIGFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFuZ2xlIGluIHJhZGlhbnNcbiAqL1xuZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7XG4gICAgdmFyIHJhZGlhbnMgPSBkZWdyZWVzICUgMzYwO1xuICAgIHJldHVybiByYWRpYW5zICogTWF0aC5QSSAvIDE4MDtcbn1cbmV4cG9ydHMuZGVncmVlc1RvUmFkaWFucyA9IGRlZ3JlZXNUb1JhZGlhbnM7XG4vKipcbiAqIENvbnZlcnRzIGEgbGVuZ3RoIHRvIHRoZSByZXF1ZXN0ZWQgdW5pdC5cbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGtpbG9tZXRlcnMsIGNlbnRpbWV0ZXJzLCBmZWV0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSB7VW5pdHN9IFtvcmlnaW5hbFVuaXQ9XCJraWxvbWV0ZXJzXCJdIG9mIHRoZSBsZW5ndGhcbiAqIEBwYXJhbSB7VW5pdHN9IFtmaW5hbFVuaXQ9XCJraWxvbWV0ZXJzXCJdIHJldHVybmVkIHVuaXRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBjb252ZXJ0ZWQgbGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMZW5ndGgobGVuZ3RoLCBvcmlnaW5hbFVuaXQsIGZpbmFsVW5pdCkge1xuICAgIGlmIChvcmlnaW5hbFVuaXQgPT09IHZvaWQgMCkgeyBvcmlnaW5hbFVuaXQgPSBcImtpbG9tZXRlcnNcIjsgfVxuICAgIGlmIChmaW5hbFVuaXQgPT09IHZvaWQgMCkgeyBmaW5hbFVuaXQgPSBcImtpbG9tZXRlcnNcIjsgfVxuICAgIGlmICghKGxlbmd0aCA+PSAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJsZW5ndGggbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhZGlhbnNUb0xlbmd0aChsZW5ndGhUb1JhZGlhbnMobGVuZ3RoLCBvcmlnaW5hbFVuaXQpLCBmaW5hbFVuaXQpO1xufVxuZXhwb3J0cy5jb252ZXJ0TGVuZ3RoID0gY29udmVydExlbmd0aDtcbi8qKlxuICogQ29udmVydHMgYSBhcmVhIHRvIHRoZSByZXF1ZXN0ZWQgdW5pdC5cbiAqIFZhbGlkIHVuaXRzOiBraWxvbWV0ZXJzLCBraWxvbWV0cmVzLCBtZXRlcnMsIG1ldHJlcywgY2VudGltZXRyZXMsIG1pbGxpbWV0ZXJzLCBhY3JlcywgbWlsZXMsIHlhcmRzLCBmZWV0LCBpbmNoZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhcmVhIHRvIGJlIGNvbnZlcnRlZFxuICogQHBhcmFtIHtVbml0c30gW29yaWdpbmFsVW5pdD1cIm1ldGVyc1wiXSBvZiB0aGUgZGlzdGFuY2VcbiAqIEBwYXJhbSB7VW5pdHN9IFtmaW5hbFVuaXQ9XCJraWxvbWV0ZXJzXCJdIHJldHVybmVkIHVuaXRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBjb252ZXJ0ZWQgZGlzdGFuY2VcbiAqL1xuZnVuY3Rpb24gY29udmVydEFyZWEoYXJlYSwgb3JpZ2luYWxVbml0LCBmaW5hbFVuaXQpIHtcbiAgICBpZiAob3JpZ2luYWxVbml0ID09PSB2b2lkIDApIHsgb3JpZ2luYWxVbml0ID0gXCJtZXRlcnNcIjsgfVxuICAgIGlmIChmaW5hbFVuaXQgPT09IHZvaWQgMCkgeyBmaW5hbFVuaXQgPSBcImtpbG9tZXRlcnNcIjsgfVxuICAgIGlmICghKGFyZWEgPj0gMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXJlYSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO1xuICAgIH1cbiAgICB2YXIgc3RhcnRGYWN0b3IgPSBleHBvcnRzLmFyZWFGYWN0b3JzW29yaWdpbmFsVW5pdF07XG4gICAgaWYgKCFzdGFydEZhY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG9yaWdpbmFsIHVuaXRzXCIpO1xuICAgIH1cbiAgICB2YXIgZmluYWxGYWN0b3IgPSBleHBvcnRzLmFyZWFGYWN0b3JzW2ZpbmFsVW5pdF07XG4gICAgaWYgKCFmaW5hbEZhY3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGZpbmFsIHVuaXRzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gKGFyZWEgLyBzdGFydEZhY3RvcikgKiBmaW5hbEZhY3Rvcjtcbn1cbmV4cG9ydHMuY29udmVydEFyZWEgPSBjb252ZXJ0QXJlYTtcbi8qKlxuICogaXNOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IG51bSBOdW1iZXIgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogdHVyZi5pc051bWJlcigxMjMpXG4gKiAvLz10cnVlXG4gKiB0dXJmLmlzTnVtYmVyKCdmb28nKVxuICogLy89ZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIobnVtKSB7XG4gICAgcmV0dXJuICFpc05hTihudW0pICYmIG51bSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShudW0pICYmICEvXlxccyokLy50ZXN0KG51bSk7XG59XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG4vKipcbiAqIGlzT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSBpbnB1dCB2YXJpYWJsZSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiB0dXJmLmlzT2JqZWN0KHtlbGV2YXRpb246IDEwfSlcbiAqIC8vPXRydWVcbiAqIHR1cmYuaXNPYmplY3QoJ2ZvbycpXG4gKiAvLz1mYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgIHJldHVybiAoISFpbnB1dCkgJiYgKGlucHV0LmNvbnN0cnVjdG9yID09PSBPYmplY3QpO1xufVxuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuLyoqXG4gKiBWYWxpZGF0ZSBCQm94XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gYmJveCBCQm94IHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEB0aHJvd3MgRXJyb3IgaWYgQkJveCBpcyBub3QgdmFsaWRcbiAqIEBleGFtcGxlXG4gKiB2YWxpZGF0ZUJCb3goWy0xODAsIC00MCwgMTEwLCA1MF0pXG4gKiAvLz1PS1xuICogdmFsaWRhdGVCQm94KFstMTgwLCAtNDBdKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveCgnRm9vJylcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3goNSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3gobnVsbClcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3godW5kZWZpbmVkKVxuICogLy89RXJyb3JcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCQm94KGJib3gpIHtcbiAgICBpZiAoIWJib3gpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYmJveCBpcyByZXF1aXJlZFwiKTtcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGJib3gpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImJib3ggbXVzdCBiZSBhbiBBcnJheVwiKTtcbiAgICB9XG4gICAgaWYgKGJib3gubGVuZ3RoICE9PSA0ICYmIGJib3gubGVuZ3RoICE9PSA2KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImJib3ggbXVzdCBiZSBhbiBBcnJheSBvZiA0IG9yIDYgbnVtYmVyc1wiKTtcbiAgICB9XG4gICAgYmJveC5mb3JFYWNoKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgICAgaWYgKCFpc051bWJlcihudW0pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYm94IG11c3Qgb25seSBjb250YWluIG51bWJlcnNcIik7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbmV4cG9ydHMudmFsaWRhdGVCQm94ID0gdmFsaWRhdGVCQm94O1xuLyoqXG4gKiBWYWxpZGF0ZSBJZFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGlkIElkIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEB0aHJvd3MgRXJyb3IgaWYgSWQgaXMgbm90IHZhbGlkXG4gKiBAZXhhbXBsZVxuICogdmFsaWRhdGVJZChbLTE4MCwgLTQwLCAxMTAsIDUwXSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUlkKFstMTgwLCAtNDBdKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlSWQoJ0ZvbycpXG4gKiAvLz1PS1xuICogdmFsaWRhdGVJZCg1KVxuICogLy89T0tcbiAqIHZhbGlkYXRlSWQobnVsbClcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUlkKHVuZGVmaW5lZClcbiAqIC8vPUVycm9yXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlSWQoaWQpIHtcbiAgICBpZiAoIWlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImlkIGlzIHJlcXVpcmVkXCIpO1xuICAgIH1cbiAgICBpZiAoW1wic3RyaW5nXCIsIFwibnVtYmVyXCJdLmluZGV4T2YodHlwZW9mIGlkKSA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWQgbXVzdCBiZSBhIG51bWJlciBvciBhIHN0cmluZ1wiKTtcbiAgICB9XG59XG5leHBvcnRzLnZhbGlkYXRlSWQgPSB2YWxpZGF0ZUlkO1xuLy8gRGVwcmVjYXRlZCBtZXRob2RzXG5mdW5jdGlvbiByYWRpYW5zMmRlZ3JlZXMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYHJhZGlhbnNUb0RlZ3JlZXNgXCIpO1xufVxuZXhwb3J0cy5yYWRpYW5zMmRlZ3JlZXMgPSByYWRpYW5zMmRlZ3JlZXM7XG5mdW5jdGlvbiBkZWdyZWVzMnJhZGlhbnMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRlZ3JlZXNUb1JhZGlhbnNgXCIpO1xufVxuZXhwb3J0cy5kZWdyZWVzMnJhZGlhbnMgPSBkZWdyZWVzMnJhZGlhbnM7XG5mdW5jdGlvbiBkaXN0YW5jZVRvRGVncmVlcygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgbGVuZ3RoVG9EZWdyZWVzYFwiKTtcbn1cbmV4cG9ydHMuZGlzdGFuY2VUb0RlZ3JlZXMgPSBkaXN0YW5jZVRvRGVncmVlcztcbmZ1bmN0aW9uIGRpc3RhbmNlVG9SYWRpYW5zKCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBsZW5ndGhUb1JhZGlhbnNgXCIpO1xufVxuZXhwb3J0cy5kaXN0YW5jZVRvUmFkaWFucyA9IGRpc3RhbmNlVG9SYWRpYW5zO1xuZnVuY3Rpb24gcmFkaWFuc1RvRGlzdGFuY2UoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYHJhZGlhbnNUb0xlbmd0aGBcIik7XG59XG5leHBvcnRzLnJhZGlhbnNUb0Rpc3RhbmNlID0gcmFkaWFuc1RvRGlzdGFuY2U7XG5mdW5jdGlvbiBiZWFyaW5nVG9BbmdsZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgYmVhcmluZ1RvQXppbXV0aGBcIik7XG59XG5leHBvcnRzLmJlYXJpbmdUb0FuZ2xlID0gYmVhcmluZ1RvQW5nbGU7XG5mdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwibWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGNvbnZlcnRMZW5ndGhgXCIpO1xufVxuZXhwb3J0cy5jb252ZXJ0RGlzdGFuY2UgPSBjb252ZXJ0RGlzdGFuY2U7XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbnZhciBoZWxwZXJzID0gcmVxdWlyZSgnQHR1cmYvaGVscGVycycpO1xuXG4vKipcbiAqIENhbGxiYWNrIGZvciBjb29yZEVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgY29vcmRFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gY3VycmVudENvb3JkIFRoZSBjdXJyZW50IGNvb3JkaW5hdGUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvb3JkSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIGNvb3JkaW5hdGUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBjb29yZGluYXRlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaCgpXG4gKlxuICogQG5hbWUgY29vcmRFYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtleGNsdWRlV3JhcENvb3JkPWZhbHNlXSB3aGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBmaW5hbCBjb29yZGluYXRlIG9mIExpbmVhclJpbmdzIHRoYXQgd3JhcHMgdGhlIHJpbmcgaW4gaXRzIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7XCJmb29cIjogXCJiYXJcIn0pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7XCJoZWxsb1wiOiBcIndvcmxkXCJ9KVxuICogXSk7XG4gKlxuICogdHVyZi5jb29yZEVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAqICAgLy89Y3VycmVudENvb3JkXG4gKiAgIC8vPWNvb3JkSW5kZXhcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBjb29yZEVhY2goZ2VvanNvbiwgY2FsbGJhY2ssIGV4Y2x1ZGVXcmFwQ29vcmQpIHtcbiAgICAvLyBIYW5kbGVzIG51bGwgR2VvbWV0cnkgLS0gU2tpcHMgdGhpcyBHZW9KU09OXG4gICAgaWYgKGdlb2pzb24gPT09IG51bGwpIHJldHVybjtcbiAgICB2YXIgaiwgaywgbCwgZ2VvbWV0cnksIHN0b3BHLCBjb29yZHMsXG4gICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLFxuICAgICAgICB3cmFwU2hyaW5rID0gMCxcbiAgICAgICAgY29vcmRJbmRleCA9IDAsXG4gICAgICAgIGlzR2VvbWV0cnlDb2xsZWN0aW9uLFxuICAgICAgICB0eXBlID0gZ2VvanNvbi50eXBlLFxuICAgICAgICBpc0ZlYXR1cmVDb2xsZWN0aW9uID0gdHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJyxcbiAgICAgICAgaXNGZWF0dXJlID0gdHlwZSA9PT0gJ0ZlYXR1cmUnLFxuICAgICAgICBzdG9wID0gaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoIDogMTtcblxuICAgIC8vIFRoaXMgbG9naWMgbWF5IGxvb2sgYSBsaXR0bGUgd2VpcmQuIFRoZSByZWFzb24gd2h5IGl0IGlzIHRoYXQgd2F5XG4gICAgLy8gaXMgYmVjYXVzZSBpdCdzIHRyeWluZyB0byBiZSBmYXN0LiBHZW9KU09OIHN1cHBvcnRzIG11bHRpcGxlIGtpbmRzXG4gICAgLy8gb2Ygb2JqZWN0cyBhdCBpdHMgcm9vdDogRmVhdHVyZUNvbGxlY3Rpb24sIEZlYXR1cmVzLCBHZW9tZXRyaWVzLlxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaGFzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBoYW5kbGluZyBhbGwgb2YgdGhlbSwgYW5kIHRoYXRcbiAgICAvLyBtZWFucyB0aGF0IHNvbWUgb2YgdGhlIGBmb3JgIGxvb3BzIHlvdSBzZWUgYmVsb3cgYWN0dWFsbHkganVzdCBkb24ndCBhcHBseVxuICAgIC8vIHRvIGNlcnRhaW4gaW5wdXRzLiBGb3IgaW5zdGFuY2UsIGlmIHlvdSBnaXZlIHRoaXMganVzdCBhXG4gICAgLy8gUG9pbnQgZ2VvbWV0cnksIHRoZW4gYm90aCBsb29wcyBhcmUgc2hvcnQtY2lyY3VpdGVkIGFuZCBhbGwgd2UgZG9cbiAgICAvLyBpcyBncmFkdWFsbHkgcmVuYW1lIHRoZSBpbnB1dCB1bnRpbCBpdCdzIGNhbGxlZCAnZ2VvbWV0cnknLlxuICAgIC8vXG4gICAgLy8gVGhpcyBhbHNvIGFpbXMgdG8gYWxsb2NhdGUgYXMgZmV3IHJlc291cmNlcyBhcyBwb3NzaWJsZToganVzdCBhXG4gICAgLy8gZmV3IG51bWJlcnMgYW5kIGJvb2xlYW5zLCByYXRoZXIgdGhhbiBhbnkgdGVtcG9yYXJ5IGFycmF5cyBhcyB3b3VsZFxuICAgIC8vIGJlIHJlcXVpcmVkIHdpdGggdGhlIG5vcm1hbGl6YXRpb24gYXBwcm9hY2guXG4gICAgZm9yICh2YXIgZmVhdHVyZUluZGV4ID0gMDsgZmVhdHVyZUluZGV4IDwgc3RvcDsgZmVhdHVyZUluZGV4KyspIHtcbiAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24gPSAoaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5nZW9tZXRyeSA6XG4gICAgICAgICAgICAoaXNGZWF0dXJlID8gZ2VvanNvbi5nZW9tZXRyeSA6IGdlb2pzb24pKTtcbiAgICAgICAgaXNHZW9tZXRyeUNvbGxlY3Rpb24gPSAoZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24pID8gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24udHlwZSA9PT0gJ0dlb21ldHJ5Q29sbGVjdGlvbicgOiBmYWxzZTtcbiAgICAgICAgc3RvcEcgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXMubGVuZ3RoIDogMTtcblxuICAgICAgICBmb3IgKHZhciBnZW9tSW5kZXggPSAwOyBnZW9tSW5kZXggPCBzdG9wRzsgZ2VvbUluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBtdWx0aUZlYXR1cmVJbmRleCA9IDA7XG4gICAgICAgICAgICB2YXIgZ2VvbWV0cnlJbmRleCA9IDA7XG4gICAgICAgICAgICBnZW9tZXRyeSA9IGlzR2VvbWV0cnlDb2xsZWN0aW9uID9cbiAgICAgICAgICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi5nZW9tZXRyaWVzW2dlb21JbmRleF0gOiBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbjtcblxuICAgICAgICAgICAgLy8gSGFuZGxlcyBudWxsIEdlb21ldHJ5IC0tIFNraXBzIHRoaXMgZ2VvbWV0cnlcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkgY29udGludWU7XG4gICAgICAgICAgICBjb29yZHMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICAgICAgICAgIHZhciBnZW9tVHlwZSA9IGdlb21ldHJ5LnR5cGU7XG5cbiAgICAgICAgICAgIHdyYXBTaHJpbmsgPSAoZXhjbHVkZVdyYXBDb29yZCAmJiAoZ2VvbVR5cGUgPT09ICdQb2x5Z29uJyB8fCBnZW9tVHlwZSA9PT0gJ011bHRpUG9seWdvbicpKSA/IDEgOiAwO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGdlb21UeXBlKSB7XG4gICAgICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdQb2ludCc6XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3JkcywgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29vcmRJbmRleCsrO1xuICAgICAgICAgICAgICAgIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvb3Jkc1tqXSwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdlb21UeXBlID09PSAnTXVsdGlQb2ludCcpIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gJ0xpbmVTdHJpbmcnKSBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgICAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb29yZHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGNvb3Jkc1tqXS5sZW5ndGggLSB3cmFwU2hyaW5rOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhjb29yZHNbal1ba10sIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gJ011bHRpTGluZVN0cmluZycpIG11bHRpRmVhdHVyZUluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gJ1BvbHlnb24nKSBnZW9tZXRyeUluZGV4Kys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gJ1BvbHlnb24nKSBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29vcmRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgY29vcmRzW2pdLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSAwOyBsIDwgY29vcmRzW2pdW2tdLmxlbmd0aCAtIHdyYXBTaHJpbms7IGwrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhjb29yZHNbal1ba11bbF0sIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGdlb21ldHJ5SW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0dlb21ldHJ5Q29sbGVjdGlvbic6XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGdlb21ldHJ5Lmdlb21ldHJpZXMubGVuZ3RoOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb29yZEVhY2goZ2VvbWV0cnkuZ2VvbWV0cmllc1tqXSwgY2FsbGJhY2ssIGV4Y2x1ZGVXcmFwQ29vcmQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gR2VvbWV0cnkgVHlwZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBjb29yZFJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGNvb3JkUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGN1cnJlbnRDb29yZCBUaGUgY3VycmVudCBjb29yZGluYXRlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb29yZEluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBjb29yZGluYXRlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIFN0YXJ0cyBhdCBpbmRleCAwLCBpZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQsIGFuZCBhdCBpbmRleCAxIG90aGVyd2lzZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgY29vcmRpbmF0ZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpXG4gKlxuICogQG5hbWUgY29vcmRSZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258R2VvbWV0cnl8RmVhdHVyZX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRDb29yZCwgY29vcmRJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtleGNsdWRlV3JhcENvb3JkPWZhbHNlXSB3aGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBmaW5hbCBjb29yZGluYXRlIG9mIExpbmVhclJpbmdzIHRoYXQgd3JhcHMgdGhlIHJpbmcgaW4gaXRzIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge1wiZm9vXCI6IFwiYmFyXCJ9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge1wiaGVsbG9cIjogXCJ3b3JsZFwifSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuY29vcmRSZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50Q29vcmRcbiAqICAgLy89Y29vcmRJbmRleFxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogICByZXR1cm4gY3VycmVudENvb3JkO1xuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGNvb3JkUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUsIGV4Y2x1ZGVXcmFwQ29vcmQpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBjb29yZEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICAgICAgICBpZiAoY29vcmRJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRDb29yZDtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KTtcbiAgICB9LCBleGNsdWRlV3JhcENvb3JkKTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgcHJvcEVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgcHJvcEVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtPYmplY3R9IGN1cnJlbnRQcm9wZXJ0aWVzIFRoZSBjdXJyZW50IFByb3BlcnRpZXMgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgcHJvcGVydGllcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaCgpXG4gKlxuICogQG5hbWUgcHJvcEVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLnByb3BFYWNoKGZlYXR1cmVzLCBmdW5jdGlvbiAoY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleCkge1xuICogICAvLz1jdXJyZW50UHJvcGVydGllc1xuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBwcm9wRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIHZhciBpO1xuICAgIHN3aXRjaCAoZ2VvanNvbi50eXBlKSB7XG4gICAgY2FzZSAnRmVhdHVyZUNvbGxlY3Rpb24nOlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGdlb2pzb24uZmVhdHVyZXNbaV0ucHJvcGVydGllcywgaSkgPT09IGZhbHNlKSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICBjYXNlICdGZWF0dXJlJzpcbiAgICAgICAgY2FsbGJhY2soZ2VvanNvbi5wcm9wZXJ0aWVzLCAwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxufVxuXG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHByb3BSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBwcm9wUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0geyp9IGN1cnJlbnRQcm9wZXJ0aWVzIFRoZSBjdXJyZW50IFByb3BlcnRpZXMgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgcHJvcGVydGllcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QgaW50byBhIHNpbmdsZSB2YWx1ZSxcbiAqIHNpbWlsYXIgdG8gaG93IEFycmF5LnJlZHVjZSB3b3Jrcy4gSG93ZXZlciwgaW4gdGhpcyBjYXNlIHdlIGxhemlseSBydW5cbiAqIHRoZSByZWR1Y3Rpb24sIHNvIGFuIGFycmF5IG9mIGFsbCBwcm9wZXJ0aWVzIGlzIHVubmVjZXNzYXJ5LlxuICpcbiAqIEBuYW1lIHByb3BSZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYucHJvcFJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50UHJvcGVydGllc1xuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRQcm9wZXJ0aWVzXG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gcHJvcFJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgcHJvcEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRQcm9wZXJ0aWVzO1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZmVhdHVyZUVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgZmVhdHVyZUVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtGZWF0dXJlPGFueT59IGN1cnJlbnRGZWF0dXJlIFRoZSBjdXJyZW50IEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZmVhdHVyZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvXG4gKiBBcnJheS5mb3JFYWNoLlxuICpcbiAqIEBuYW1lIGZlYXR1cmVFYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmZlYXR1cmVFYWNoKGZlYXR1cmVzLCBmdW5jdGlvbiAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCkge1xuICogICAvLz1jdXJyZW50RmVhdHVyZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBmZWF0dXJlRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIGlmIChnZW9qc29uLnR5cGUgPT09ICdGZWF0dXJlJykge1xuICAgICAgICBjYWxsYmFjayhnZW9qc29uLCAwKTtcbiAgICB9IGVsc2UgaWYgKGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhnZW9qc29uLmZlYXR1cmVzW2ldLCBpKSA9PT0gZmFsc2UpIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBmZWF0dXJlUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgZmVhdHVyZVJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtGZWF0dXJlfSBjdXJyZW50RmVhdHVyZSBUaGUgY3VycmVudCBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKS5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge1wiZm9vXCI6IFwiYmFyXCJ9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge1wiaGVsbG9cIjogXCJ3b3JsZFwifSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZmVhdHVyZVJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50RmVhdHVyZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRGZWF0dXJlXG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZmVhdHVyZVJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgZmVhdHVyZUVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRGZWF0dXJlO1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBHZXQgYWxsIGNvb3JkaW5hdGVzIGZyb20gYW55IEdlb0pTT04gb2JqZWN0LlxuICpcbiAqIEBuYW1lIGNvb3JkQWxsXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcmV0dXJucyB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGUgcG9zaXRpb24gYXJyYXlcbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHZhciBjb29yZHMgPSB0dXJmLmNvb3JkQWxsKGZlYXR1cmVzKTtcbiAqIC8vPSBbWzI2LCAzN10sIFszNiwgNTNdXVxuICovXG5mdW5jdGlvbiBjb29yZEFsbChnZW9qc29uKSB7XG4gICAgdmFyIGNvb3JkcyA9IFtdO1xuICAgIGNvb3JkRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY29vcmQpIHtcbiAgICAgICAgY29vcmRzLnB1c2goY29vcmQpO1xuICAgIH0pO1xuICAgIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGdlb21FYWNoXG4gKlxuICogQGNhbGxiYWNrIGdlb21FYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7R2VvbWV0cnl9IGN1cnJlbnRHZW9tZXRyeSBUaGUgY3VycmVudCBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBmZWF0dXJlUHJvcGVydGllcyBUaGUgY3VycmVudCBGZWF0dXJlIFByb3BlcnRpZXMgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBmZWF0dXJlQkJveCBUaGUgY3VycmVudCBGZWF0dXJlIEJCb3ggYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBmZWF0dXJlSWQgVGhlIGN1cnJlbnQgRmVhdHVyZSBJZCBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZWFjaCBnZW9tZXRyeSBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkuZm9yRWFjaCgpXG4gKlxuICogQG5hbWUgZ2VvbUVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZClcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZ2VvbUVhY2goZmVhdHVyZXMsIGZ1bmN0aW9uIChjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpIHtcbiAqICAgLy89Y3VycmVudEdlb21ldHJ5XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1mZWF0dXJlUHJvcGVydGllc1xuICogICAvLz1mZWF0dXJlQkJveFxuICogICAvLz1mZWF0dXJlSWRcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBnZW9tRWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIHZhciBpLCBqLCBnLCBnZW9tZXRyeSwgc3RvcEcsXG4gICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLFxuICAgICAgICBpc0dlb21ldHJ5Q29sbGVjdGlvbixcbiAgICAgICAgZmVhdHVyZVByb3BlcnRpZXMsXG4gICAgICAgIGZlYXR1cmVCQm94LFxuICAgICAgICBmZWF0dXJlSWQsXG4gICAgICAgIGZlYXR1cmVJbmRleCA9IDAsXG4gICAgICAgIGlzRmVhdHVyZUNvbGxlY3Rpb24gPSBnZW9qc29uLnR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgIGlzRmVhdHVyZSA9IGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmUnLFxuICAgICAgICBzdG9wID0gaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoIDogMTtcblxuICAgIC8vIFRoaXMgbG9naWMgbWF5IGxvb2sgYSBsaXR0bGUgd2VpcmQuIFRoZSByZWFzb24gd2h5IGl0IGlzIHRoYXQgd2F5XG4gICAgLy8gaXMgYmVjYXVzZSBpdCdzIHRyeWluZyB0byBiZSBmYXN0LiBHZW9KU09OIHN1cHBvcnRzIG11bHRpcGxlIGtpbmRzXG4gICAgLy8gb2Ygb2JqZWN0cyBhdCBpdHMgcm9vdDogRmVhdHVyZUNvbGxlY3Rpb24sIEZlYXR1cmVzLCBHZW9tZXRyaWVzLlxuICAgIC8vIFRoaXMgZnVuY3Rpb24gaGFzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBoYW5kbGluZyBhbGwgb2YgdGhlbSwgYW5kIHRoYXRcbiAgICAvLyBtZWFucyB0aGF0IHNvbWUgb2YgdGhlIGBmb3JgIGxvb3BzIHlvdSBzZWUgYmVsb3cgYWN0dWFsbHkganVzdCBkb24ndCBhcHBseVxuICAgIC8vIHRvIGNlcnRhaW4gaW5wdXRzLiBGb3IgaW5zdGFuY2UsIGlmIHlvdSBnaXZlIHRoaXMganVzdCBhXG4gICAgLy8gUG9pbnQgZ2VvbWV0cnksIHRoZW4gYm90aCBsb29wcyBhcmUgc2hvcnQtY2lyY3VpdGVkIGFuZCBhbGwgd2UgZG9cbiAgICAvLyBpcyBncmFkdWFsbHkgcmVuYW1lIHRoZSBpbnB1dCB1bnRpbCBpdCdzIGNhbGxlZCAnZ2VvbWV0cnknLlxuICAgIC8vXG4gICAgLy8gVGhpcyBhbHNvIGFpbXMgdG8gYWxsb2NhdGUgYXMgZmV3IHJlc291cmNlcyBhcyBwb3NzaWJsZToganVzdCBhXG4gICAgLy8gZmV3IG51bWJlcnMgYW5kIGJvb2xlYW5zLCByYXRoZXIgdGhhbiBhbnkgdGVtcG9yYXJ5IGFycmF5cyBhcyB3b3VsZFxuICAgIC8vIGJlIHJlcXVpcmVkIHdpdGggdGhlIG5vcm1hbGl6YXRpb24gYXBwcm9hY2guXG4gICAgZm9yIChpID0gMDsgaSA8IHN0b3A7IGkrKykge1xuXG4gICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uID0gKGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLmdlb21ldHJ5IDpcbiAgICAgICAgICAgIChpc0ZlYXR1cmUgPyBnZW9qc29uLmdlb21ldHJ5IDogZ2VvanNvbikpO1xuICAgICAgICBmZWF0dXJlUHJvcGVydGllcyA9IChpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tpXS5wcm9wZXJ0aWVzIDpcbiAgICAgICAgICAgIChpc0ZlYXR1cmUgPyBnZW9qc29uLnByb3BlcnRpZXMgOiB7fSkpO1xuICAgICAgICBmZWF0dXJlQkJveCA9IChpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tpXS5iYm94IDpcbiAgICAgICAgICAgIChpc0ZlYXR1cmUgPyBnZW9qc29uLmJib3ggOiB1bmRlZmluZWQpKTtcbiAgICAgICAgZmVhdHVyZUlkID0gKGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ldLmlkIDpcbiAgICAgICAgICAgIChpc0ZlYXR1cmUgPyBnZW9qc29uLmlkIDogdW5kZWZpbmVkKSk7XG4gICAgICAgIGlzR2VvbWV0cnlDb2xsZWN0aW9uID0gKGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uKSA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLnR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nIDogZmFsc2U7XG4gICAgICAgIHN0b3BHID0gaXNHZW9tZXRyeUNvbGxlY3Rpb24gPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi5nZW9tZXRyaWVzLmxlbmd0aCA6IDE7XG5cbiAgICAgICAgZm9yIChnID0gMDsgZyA8IHN0b3BHOyBnKyspIHtcbiAgICAgICAgICAgIGdlb21ldHJ5ID0gaXNHZW9tZXRyeUNvbGxlY3Rpb24gP1xuICAgICAgICAgICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLmdlb21ldHJpZXNbZ10gOiBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbjtcblxuICAgICAgICAgICAgLy8gSGFuZGxlIG51bGwgR2VvbWV0cnlcbiAgICAgICAgICAgIGlmIChnZW9tZXRyeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhudWxsLCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoZ2VvbWV0cnkudHlwZSkge1xuICAgICAgICAgICAgY2FzZSAnUG9pbnQnOlxuICAgICAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgICAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soZ2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnR2VvbWV0cnlDb2xsZWN0aW9uJzoge1xuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBnZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhnZW9tZXRyeS5nZW9tZXRyaWVzW2pdLCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBHZW9tZXRyeSBUeXBlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gT25seSBpbmNyZWFzZSBgZmVhdHVyZUluZGV4YCBwZXIgZWFjaCBmZWF0dXJlXG4gICAgICAgIGZlYXR1cmVJbmRleCsrO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZ2VvbVJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGdlb21SZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7R2VvbWV0cnl9IGN1cnJlbnRHZW9tZXRyeSBUaGUgY3VycmVudCBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBmZWF0dXJlUHJvcGVydGllcyBUaGUgY3VycmVudCBGZWF0dXJlIFByb3BlcnRpZXMgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBmZWF0dXJlQkJveCBUaGUgY3VycmVudCBGZWF0dXJlIEJCb3ggYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBmZWF0dXJlSWQgVGhlIGN1cnJlbnQgRmVhdHVyZSBJZCBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZ2VvbWV0cnkgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LnJlZHVjZSgpLlxuICpcbiAqIEBuYW1lIGdlb21SZWR1Y2VcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5nZW9tUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudEdlb21ldHJ5XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1mZWF0dXJlUHJvcGVydGllc1xuICogICAvLz1mZWF0dXJlQkJveFxuICogICAvLz1mZWF0dXJlSWRcbiAqICAgcmV0dXJuIGN1cnJlbnRHZW9tZXRyeVxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGdlb21SZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIGdlb21FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRHZW9tZXRyeTtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZmxhdHRlbkVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgZmxhdHRlbkVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtGZWF0dXJlfSBjdXJyZW50RmVhdHVyZSBUaGUgY3VycmVudCBmbGF0dGVuZWQgZmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgZmxhdHRlbmVkIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0b1xuICogQXJyYXkuZm9yRWFjaC5cbiAqXG4gKiBAbmFtZSBmbGF0dGVuRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLm11bHRpUG9pbnQoW1s0MCwgMzBdLCBbMzYsIDUzXV0sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmZsYXR0ZW5FYWNoKGZlYXR1cmVzLCBmdW5jdGlvbiAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89Y3VycmVudEZlYXR1cmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZmxhdHRlbkVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICBnZW9tRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoZ2VvbWV0cnksIGZlYXR1cmVJbmRleCwgcHJvcGVydGllcywgYmJveCwgaWQpIHtcbiAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIHNpbmdsZSBnZW9tZXRyeVxuICAgICAgICB2YXIgdHlwZSA9IChnZW9tZXRyeSA9PT0gbnVsbCkgPyBudWxsIDogZ2VvbWV0cnkudHlwZTtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgbnVsbDpcbiAgICAgICAgY2FzZSAnUG9pbnQnOlxuICAgICAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soaGVscGVycy5mZWF0dXJlKGdlb21ldHJ5LCBwcm9wZXJ0aWVzLCB7YmJveDogYmJveCwgaWQ6IGlkfSksIGZlYXR1cmVJbmRleCwgMCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZ2VvbVR5cGU7XG5cbiAgICAgICAgLy8gQ2FsbGJhY2sgZm9yIG11bHRpLWdlb21ldHJ5XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgICAgIGdlb21UeXBlID0gJ1BvaW50JztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICAgICAgZ2VvbVR5cGUgPSAnTGluZVN0cmluZyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgICAgIGdlb21UeXBlID0gJ1BvbHlnb24nO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBtdWx0aUZlYXR1cmVJbmRleCA9IDA7IG11bHRpRmVhdHVyZUluZGV4IDwgZ2VvbWV0cnkuY29vcmRpbmF0ZXMubGVuZ3RoOyBtdWx0aUZlYXR1cmVJbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgY29vcmRpbmF0ZSA9IGdlb21ldHJ5LmNvb3JkaW5hdGVzW211bHRpRmVhdHVyZUluZGV4XTtcbiAgICAgICAgICAgIHZhciBnZW9tID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IGdlb21UeXBlLFxuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGhlbHBlcnMuZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzKSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZmxhdHRlblJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGZsYXR0ZW5SZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7RmVhdHVyZX0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZmxhdHRlbmVkIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKS5cbiAqXG4gKiBAbmFtZSBmbGF0dGVuUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLm11bHRpUG9pbnQoW1s0MCwgMzBdLCBbMzYsIDUzXV0sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmZsYXR0ZW5SZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICByZXR1cm4gY3VycmVudEZlYXR1cmVcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBmbGF0dGVuUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBmbGF0dGVuRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBtdWx0aUZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRGZWF0dXJlO1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHNlZ21lbnRFYWNoXG4gKlxuICogQGNhbGxiYWNrIHNlZ21lbnRFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gY3VycmVudFNlZ21lbnQgVGhlIGN1cnJlbnQgU2VnbWVudCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IHNlZ21lbnRJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgU2VnbWVudCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciAyLXZlcnRleCBsaW5lIHNlZ21lbnQgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2goKVxuICogKE11bHRpKVBvaW50IGdlb21ldHJpZXMgZG8gbm90IGNvbnRhaW4gc2VnbWVudHMgdGhlcmVmb3JlIHRoZXkgYXJlIGlnbm9yZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleClcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFtbWy01MCwgNV0sIFstNDAsIC0xMF0sIFstNTAsIC0xMF0sIFstNDAsIDVdLCBbLTUwLCA1XV1dKTtcbiAqXG4gKiAvLyBJdGVyYXRlIG92ZXIgR2VvSlNPTiBieSAyLXZlcnRleCBzZWdtZW50c1xuICogdHVyZi5zZWdtZW50RWFjaChwb2x5Z29uLCBmdW5jdGlvbiAoY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCkge1xuICogICAvLz1jdXJyZW50U2VnbWVudFxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogICAvLz1zZWdtZW50SW5kZXhcbiAqIH0pO1xuICpcbiAqIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHNlZ21lbnRzXG4gKiB2YXIgdG90YWwgPSAwO1xuICogdHVyZi5zZWdtZW50RWFjaChwb2x5Z29uLCBmdW5jdGlvbiAoKSB7XG4gKiAgICAgdG90YWwrKztcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBzZWdtZW50RWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIGZsYXR0ZW5FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChmZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gICAgICAgIHZhciBzZWdtZW50SW5kZXggPSAwO1xuXG4gICAgICAgIC8vIEV4Y2x1ZGUgbnVsbCBHZW9tZXRyaWVzXG4gICAgICAgIGlmICghZmVhdHVyZS5nZW9tZXRyeSkgcmV0dXJuO1xuICAgICAgICAvLyAoTXVsdGkpUG9pbnQgZ2VvbWV0cmllcyBkbyBub3QgY29udGFpbiBzZWdtZW50cyB0aGVyZWZvcmUgdGhleSBhcmUgaWdub3JlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICAgIHZhciB0eXBlID0gZmVhdHVyZS5nZW9tZXRyeS50eXBlO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcpIHJldHVybjtcblxuICAgICAgICAvLyBHZW5lcmF0ZSAyLXZlcnRleCBsaW5lIHNlZ21lbnRzXG4gICAgICAgIHZhciBwcmV2aW91c0Nvb3JkcztcbiAgICAgICAgdmFyIHByZXZpb3VzRmVhdHVyZUluZGV4ID0gMDtcbiAgICAgICAgdmFyIHByZXZpb3VzTXVsdGlJbmRleCA9IDA7XG4gICAgICAgIHZhciBwcmV2R2VvbUluZGV4ID0gMDtcbiAgICAgICAgaWYgKGNvb3JkRWFjaChmZWF0dXJlLCBmdW5jdGlvbiAoY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXhDb29yZCwgbXVsdGlQYXJ0SW5kZXhDb29yZCwgZ2VvbWV0cnlJbmRleCkge1xuICAgICAgICAgICAgLy8gU2ltdWxhdGluZyBhIG1ldGEuY29vcmRSZWR1Y2UoKSBzaW5jZSBgcmVkdWNlYCBvcGVyYXRpb25zIGNhbm5vdCBiZSBzdG9wcGVkIGJ5IHJldHVybmluZyBgZmFsc2VgXG4gICAgICAgICAgICBpZiAocHJldmlvdXNDb29yZHMgPT09IHVuZGVmaW5lZCB8fCBmZWF0dXJlSW5kZXggPiBwcmV2aW91c0ZlYXR1cmVJbmRleCB8fCBtdWx0aVBhcnRJbmRleENvb3JkID4gcHJldmlvdXNNdWx0aUluZGV4IHx8IGdlb21ldHJ5SW5kZXggPiBwcmV2R2VvbUluZGV4KSB7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNDb29yZHMgPSBjdXJyZW50Q29vcmQ7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNGZWF0dXJlSW5kZXggPSBmZWF0dXJlSW5kZXg7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNNdWx0aUluZGV4ID0gbXVsdGlQYXJ0SW5kZXhDb29yZDtcbiAgICAgICAgICAgICAgICBwcmV2R2VvbUluZGV4ID0gZ2VvbWV0cnlJbmRleDtcbiAgICAgICAgICAgICAgICBzZWdtZW50SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjdXJyZW50U2VnbWVudCA9IGhlbHBlcnMubGluZVN0cmluZyhbcHJldmlvdXNDb29yZHMsIGN1cnJlbnRDb29yZF0sIGZlYXR1cmUucHJvcGVydGllcyk7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBzZWdtZW50SW5kZXgrKztcbiAgICAgICAgICAgIHByZXZpb3VzQ29vcmRzID0gY3VycmVudENvb3JkO1xuICAgICAgICB9KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3Igc2VnbWVudFJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIHNlZ21lbnRSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gY3VycmVudFNlZ21lbnQgVGhlIGN1cnJlbnQgU2VnbWVudCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IHNlZ21lbnRJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgU2VnbWVudCBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgMi12ZXJ0ZXggbGluZSBzZWdtZW50IGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKVxuICogKE11bHRpKVBvaW50IGdlb21ldHJpZXMgZG8gbm90IGNvbnRhaW4gc2VnbWVudHMgdGhlcmVmb3JlIHRoZXkgYXJlIGlnbm9yZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudFNlZ21lbnQsIGN1cnJlbnRJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9seWdvbiA9IHR1cmYucG9seWdvbihbW1stNTAsIDVdLCBbLTQwLCAtMTBdLCBbLTUwLCAtMTBdLCBbLTQwLCA1XSwgWy01MCwgNV1dXSk7XG4gKlxuICogLy8gSXRlcmF0ZSBvdmVyIEdlb0pTT04gYnkgMi12ZXJ0ZXggc2VnbWVudHNcbiAqIHR1cmYuc2VnbWVudFJlZHVjZShwb2x5Z29uLCBmdW5jdGlvbiAocHJldmlvdXNTZWdtZW50LCBjdXJyZW50U2VnbWVudCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCwgc2VnbWVudEluZGV4KSB7XG4gKiAgIC8vPSBwcmV2aW91c1NlZ21lbnRcbiAqICAgLy89IGN1cnJlbnRTZWdtZW50XG4gKiAgIC8vPSBmZWF0dXJlSW5kZXhcbiAqICAgLy89IG11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPSBnZW9tZXRyeUluZGV4XG4gKiAgIC8vPSBzZWdtZW50SW5leFxuICogICByZXR1cm4gY3VycmVudFNlZ21lbnRcbiAqIH0pO1xuICpcbiAqIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHNlZ21lbnRzXG4gKiB2YXIgaW5pdGlhbFZhbHVlID0gMFxuICogdmFyIHRvdGFsID0gdHVyZi5zZWdtZW50UmVkdWNlKHBvbHlnb24sIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlKSB7XG4gKiAgICAgcHJldmlvdXNWYWx1ZSsrO1xuICogICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xuICogfSwgaW5pdGlhbFZhbHVlKTtcbiAqL1xuZnVuY3Rpb24gc2VnbWVudFJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgdmFyIHN0YXJ0ZWQgPSBmYWxzZTtcbiAgICBzZWdtZW50RWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCkge1xuICAgICAgICBpZiAoc3RhcnRlZCA9PT0gZmFsc2UgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50U2VnbWVudDtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCk7XG4gICAgICAgIHN0YXJ0ZWQgPSB0cnVlO1xuICAgIH0pO1xuICAgIHJldHVybiBwcmV2aW91c1ZhbHVlO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBsaW5lRWFjaFxuICpcbiAqIEBjYWxsYmFjayBsaW5lRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0ZlYXR1cmU8TGluZVN0cmluZz59IGN1cnJlbnRMaW5lIFRoZSBjdXJyZW50IExpbmVTdHJpbmd8TGluZWFyUmluZyBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgbGluZSBvciByaW5nIGNvb3JkaW5hdGVzIGluIExpbmVTdHJpbmcsIFBvbHlnb24sIE11bHRpTGluZVN0cmluZywgTXVsdGlQb2x5Z29uIEZlYXR1cmVzIG9yIEdlb21ldHJpZXMsXG4gKiBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2guXG4gKlxuICogQG5hbWUgbGluZUVhY2hcbiAqIEBwYXJhbSB7R2VvbWV0cnl8RmVhdHVyZTxMaW5lU3RyaW5nfFBvbHlnb258TXVsdGlMaW5lU3RyaW5nfE11bHRpUG9seWdvbj59IGdlb2pzb24gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleClcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1xuICogICBbWzI2LCAzN10sIFszNSwgNDVdXSxcbiAqICAgW1szNiwgNTNdLCBbMzgsIDUwXSwgWzQxLCA1NV1dXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmxpbmVFYWNoKG11bHRpTGluZSwgZnVuY3Rpb24gKGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRMaW5lXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gbGluZUVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICAvLyB2YWxpZGF0aW9uXG4gICAgaWYgKCFnZW9qc29uKSB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgcmVxdWlyZWQnKTtcblxuICAgIGZsYXR0ZW5FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChmZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gICAgICAgIGlmIChmZWF0dXJlLmdlb21ldHJ5ID09PSBudWxsKSByZXR1cm47XG4gICAgICAgIHZhciB0eXBlID0gZmVhdHVyZS5nZW9tZXRyeS50eXBlO1xuICAgICAgICB2YXIgY29vcmRzID0gZmVhdHVyZS5nZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIDAsIDApID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgZm9yICh2YXIgZ2VvbWV0cnlJbmRleCA9IDA7IGdlb21ldHJ5SW5kZXggPCBjb29yZHMubGVuZ3RoOyBnZW9tZXRyeUluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soaGVscGVycy5saW5lU3RyaW5nKGNvb3Jkc1tnZW9tZXRyeUluZGV4XSwgZmVhdHVyZS5wcm9wZXJ0aWVzKSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBsaW5lUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgbGluZVJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50TGluZSBUaGUgY3VycmVudCBMaW5lU3RyaW5nfExpbmVhclJpbmcgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWRcbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKCkuXG4gKlxuICogQG5hbWUgbGluZVJlZHVjZVxuICogQHBhcmFtIHtHZW9tZXRyeXxGZWF0dXJlPExpbmVTdHJpbmd8UG9seWdvbnxNdWx0aUxpbmVTdHJpbmd8TXVsdGlQb2x5Z29uPn0gZ2VvanNvbiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlQb2x5ID0gdHVyZi5tdWx0aVBvbHlnb24oW1xuICogICB0dXJmLnBvbHlnb24oW1tbMTIsNDhdLFsyLDQxXSxbMjQsMzhdLFsxMiw0OF1dLCBbWzksNDRdLFsxMyw0MV0sWzEzLDQ1XSxbOSw0NF1dXSksXG4gKiAgIHR1cmYucG9seWdvbihbW1s1LCA1XSwgWzAsIDBdLCBbMiwgMl0sIFs0LCA0XSwgWzUsIDVdXV0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmxpbmVSZWR1Y2UobXVsdGlQb2x5LCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAqICAgLy89cHJldmlvdXNWYWx1ZVxuICogICAvLz1jdXJyZW50TGluZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogICByZXR1cm4gY3VycmVudExpbmVcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBsaW5lUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBsaW5lRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRMaW5lO1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogRmluZHMgYSBwYXJ0aWN1bGFyIDItdmVydGV4IExpbmVTdHJpbmcgU2VnbWVudCBmcm9tIGEgR2VvSlNPTiB1c2luZyBgQHR1cmYvbWV0YWAgaW5kZXhlcy5cbiAqXG4gKiBOZWdhdGl2ZSBpbmRleGVzIGFyZSBwZXJtaXR0ZWQuXG4gKiBQb2ludCAmIE11bHRpUG9pbnQgd2lsbCBhbHdheXMgcmV0dXJuIG51bGwuXG4gKlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIEFueSBHZW9KU09OIEZlYXR1cmUgb3IgR2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmZlYXR1cmVJbmRleD0wXSBGZWF0dXJlIEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubXVsdGlGZWF0dXJlSW5kZXg9MF0gTXVsdGktRmVhdHVyZSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmdlb21ldHJ5SW5kZXg9MF0gR2VvbWV0cnkgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5zZWdtZW50SW5kZXg9MF0gU2VnbWVudCBJbmRleFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnByb3BlcnRpZXM9e31dIFRyYW5zbGF0ZSBQcm9wZXJ0aWVzIHRvIG91dHB1dCBMaW5lU3RyaW5nXG4gKiBAcGFyYW0ge0JCb3h9IFtvcHRpb25zLmJib3g9e31dIFRyYW5zbGF0ZSBCQm94IHRvIG91dHB1dCBMaW5lU3RyaW5nXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtvcHRpb25zLmlkPXt9XSBUcmFuc2xhdGUgSWQgdG8gb3V0cHV0IExpbmVTdHJpbmdcbiAqIEByZXR1cm5zIHtGZWF0dXJlPExpbmVTdHJpbmc+fSAyLXZlcnRleCBHZW9KU09OIEZlYXR1cmUgTGluZVN0cmluZ1xuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aUxpbmUgPSB0dXJmLm11bHRpTGluZVN0cmluZyhbXG4gKiAgICAgW1sxMCwgMTBdLCBbNTAsIDMwXSwgWzMwLCA0MF1dLFxuICogICAgIFtbLTEwLCAtMTBdLCBbLTUwLCAtMzBdLCBbLTMwLCAtNDBdXVxuICogXSk7XG4gKlxuICogLy8gRmlyc3QgU2VnbWVudCAoZGVmYXVsdHMgYXJlIDApXG4gKiB0dXJmLmZpbmRTZWdtZW50KG11bHRpTGluZSk7XG4gKiAvLyA9PiBGZWF0dXJlPExpbmVTdHJpbmc8W1sxMCwgMTBdLCBbNTAsIDMwXV0+PlxuICpcbiAqIC8vIEZpcnN0IFNlZ21lbnQgb2YgMm5kIE11bHRpIEZlYXR1cmVcbiAqIHR1cmYuZmluZFNlZ21lbnQobXVsdGlMaW5lLCB7bXVsdGlGZWF0dXJlSW5kZXg6IDF9KTtcbiAqIC8vID0+IEZlYXR1cmU8TGluZVN0cmluZzxbWy0xMCwgLTEwXSwgWy01MCwgLTMwXV0+PlxuICpcbiAqIC8vIExhc3QgU2VnbWVudCBvZiBMYXN0IE11bHRpIEZlYXR1cmVcbiAqIHR1cmYuZmluZFNlZ21lbnQobXVsdGlMaW5lLCB7bXVsdGlGZWF0dXJlSW5kZXg6IC0xLCBzZWdtZW50SW5kZXg6IC0xfSk7XG4gKiAvLyA9PiBGZWF0dXJlPExpbmVTdHJpbmc8W1stNTAsIC0zMF0sIFstMzAsIC00MF1dPj5cbiAqL1xuZnVuY3Rpb24gZmluZFNlZ21lbnQoZ2VvanNvbiwgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWhlbHBlcnMuaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIGZlYXR1cmVJbmRleCA9IG9wdGlvbnMuZmVhdHVyZUluZGV4IHx8IDA7XG4gICAgdmFyIG11bHRpRmVhdHVyZUluZGV4ID0gb3B0aW9ucy5tdWx0aUZlYXR1cmVJbmRleCB8fCAwO1xuICAgIHZhciBnZW9tZXRyeUluZGV4ID0gb3B0aW9ucy5nZW9tZXRyeUluZGV4IHx8IDA7XG4gICAgdmFyIHNlZ21lbnRJbmRleCA9IG9wdGlvbnMuc2VnbWVudEluZGV4IHx8IDA7XG5cbiAgICAvLyBGaW5kIEZlYXR1cmVJbmRleFxuICAgIHZhciBwcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9wZXJ0aWVzO1xuICAgIHZhciBnZW9tZXRyeTtcblxuICAgIHN3aXRjaCAoZ2VvanNvbi50eXBlKSB7XG4gICAgY2FzZSAnRmVhdHVyZUNvbGxlY3Rpb24nOlxuICAgICAgICBpZiAoZmVhdHVyZUluZGV4IDwgMCkgZmVhdHVyZUluZGV4ID0gZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGggKyBmZWF0dXJlSW5kZXg7XG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5wcm9wZXJ0aWVzO1xuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5nZW9tZXRyeTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRmVhdHVyZSc6XG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IGdlb2pzb24ucHJvcGVydGllcztcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uLmdlb21ldHJ5O1xuICAgICAgICBicmVhaztcbiAgICBjYXNlICdQb2ludCc6XG4gICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uO1xuICAgICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8vIEZpbmQgU2VnbWVudEluZGV4XG4gICAgaWYgKGdlb21ldHJ5ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY29vcmRzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgc3dpdGNoIChnZW9tZXRyeS50eXBlKSB7XG4gICAgY2FzZSAnUG9pbnQnOlxuICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA8IDApIHNlZ21lbnRJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBzZWdtZW50SW5kZXggLSAxO1xuICAgICAgICByZXR1cm4gaGVscGVycy5saW5lU3RyaW5nKFtjb29yZHNbc2VnbWVudEluZGV4XSwgY29vcmRzW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgIGlmIChnZW9tZXRyeUluZGV4IDwgMCkgZ2VvbWV0cnlJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBnZW9tZXRyeUluZGV4O1xuICAgICAgICBpZiAoc2VnbWVudEluZGV4IDwgMCkgc2VnbWVudEluZGV4ID0gY29vcmRzW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCArIHNlZ21lbnRJbmRleCAtIDE7XG4gICAgICAgIHJldHVybiBoZWxwZXJzLmxpbmVTdHJpbmcoW2Nvb3Jkc1tnZW9tZXRyeUluZGV4XVtzZWdtZW50SW5kZXhdLCBjb29yZHNbZ2VvbWV0cnlJbmRleF1bc2VnbWVudEluZGV4ICsgMV1dLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA8IDApIHNlZ21lbnRJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0ubGVuZ3RoICsgc2VnbWVudEluZGV4IC0gMTtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMubGluZVN0cmluZyhbY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtzZWdtZW50SW5kZXhdLCBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICAgIGlmIChnZW9tZXRyeUluZGV4IDwgMCkgZ2VvbWV0cnlJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0ubGVuZ3RoICsgZ2VvbWV0cnlJbmRleDtcbiAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA8IDApIHNlZ21lbnRJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF0ubGVuZ3RoIC0gc2VnbWVudEluZGV4IC0gMTtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMubGluZVN0cmluZyhbY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XVtzZWdtZW50SW5kZXhdLCBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyBpbnZhbGlkJyk7XG59XG5cbi8qKlxuICogRmluZHMgYSBwYXJ0aWN1bGFyIFBvaW50IGZyb20gYSBHZW9KU09OIHVzaW5nIGBAdHVyZi9tZXRhYCBpbmRleGVzLlxuICpcbiAqIE5lZ2F0aXZlIGluZGV4ZXMgYXJlIHBlcm1pdHRlZC5cbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gQW55IEdlb0pTT04gRmVhdHVyZSBvciBHZW9tZXRyeVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZmVhdHVyZUluZGV4PTBdIEZlYXR1cmUgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tdWx0aUZlYXR1cmVJbmRleD0wXSBNdWx0aS1GZWF0dXJlIEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZ2VvbWV0cnlJbmRleD0wXSBHZW9tZXRyeSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmNvb3JkSW5kZXg9MF0gQ29vcmQgSW5kZXhcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucy5wcm9wZXJ0aWVzPXt9XSBUcmFuc2xhdGUgUHJvcGVydGllcyB0byBvdXRwdXQgUG9pbnRcbiAqIEBwYXJhbSB7QkJveH0gW29wdGlvbnMuYmJveD17fV0gVHJhbnNsYXRlIEJCb3ggdG8gb3V0cHV0IFBvaW50XG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtvcHRpb25zLmlkPXt9XSBUcmFuc2xhdGUgSWQgdG8gb3V0cHV0IFBvaW50XG4gKiBAcmV0dXJucyB7RmVhdHVyZTxQb2ludD59IDItdmVydGV4IEdlb0pTT04gRmVhdHVyZSBQb2ludFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aUxpbmUgPSB0dXJmLm11bHRpTGluZVN0cmluZyhbXG4gKiAgICAgW1sxMCwgMTBdLCBbNTAsIDMwXSwgWzMwLCA0MF1dLFxuICogICAgIFtbLTEwLCAtMTBdLCBbLTUwLCAtMzBdLCBbLTMwLCAtNDBdXVxuICogXSk7XG4gKlxuICogLy8gRmlyc3QgU2VnbWVudCAoZGVmYXVsdHMgYXJlIDApXG4gKiB0dXJmLmZpbmRQb2ludChtdWx0aUxpbmUpO1xuICogLy8gPT4gRmVhdHVyZTxQb2ludDxbMTAsIDEwXT4+XG4gKlxuICogLy8gRmlyc3QgU2VnbWVudCBvZiB0aGUgMm5kIE11bHRpLUZlYXR1cmVcbiAqIHR1cmYuZmluZFBvaW50KG11bHRpTGluZSwge211bHRpRmVhdHVyZUluZGV4OiAxfSk7XG4gKiAvLyA9PiBGZWF0dXJlPFBvaW50PFstMTAsIC0xMF0+PlxuICpcbiAqIC8vIExhc3QgU2VnbWVudCBvZiBsYXN0IE11bHRpLUZlYXR1cmVcbiAqIHR1cmYuZmluZFBvaW50KG11bHRpTGluZSwge211bHRpRmVhdHVyZUluZGV4OiAtMSwgY29vcmRJbmRleDogLTF9KTtcbiAqIC8vID0+IEZlYXR1cmU8UG9pbnQ8Wy0zMCwgLTQwXT4+XG4gKi9cbmZ1bmN0aW9uIGZpbmRQb2ludChnZW9qc29uLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaGVscGVycy5pc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgZmVhdHVyZUluZGV4ID0gb3B0aW9ucy5mZWF0dXJlSW5kZXggfHwgMDtcbiAgICB2YXIgbXVsdGlGZWF0dXJlSW5kZXggPSBvcHRpb25zLm11bHRpRmVhdHVyZUluZGV4IHx8IDA7XG4gICAgdmFyIGdlb21ldHJ5SW5kZXggPSBvcHRpb25zLmdlb21ldHJ5SW5kZXggfHwgMDtcbiAgICB2YXIgY29vcmRJbmRleCA9IG9wdGlvbnMuY29vcmRJbmRleCB8fCAwO1xuXG4gICAgLy8gRmluZCBGZWF0dXJlSW5kZXhcbiAgICB2YXIgcHJvcGVydGllcyA9IG9wdGlvbnMucHJvcGVydGllcztcbiAgICB2YXIgZ2VvbWV0cnk7XG5cbiAgICBzd2l0Y2ggKGdlb2pzb24udHlwZSkge1xuICAgIGNhc2UgJ0ZlYXR1cmVDb2xsZWN0aW9uJzpcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA8IDApIGZlYXR1cmVJbmRleCA9IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoICsgZmVhdHVyZUluZGV4O1xuICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0ucHJvcGVydGllcztcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0uZ2VvbWV0cnk7XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0ZlYXR1cmUnOlxuICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCBnZW9qc29uLnByb3BlcnRpZXM7XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbi5nZW9tZXRyeTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnUG9pbnQnOlxuICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICBjYXNlICdQb2x5Z29uJzpcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgIGdlb21ldHJ5ID0gZ2VvanNvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIENvb3JkIEluZGV4XG4gICAgaWYgKGdlb21ldHJ5ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY29vcmRzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgc3dpdGNoIChnZW9tZXRyeS50eXBlKSB7XG4gICAgY2FzZSAnUG9pbnQnOlxuICAgICAgICByZXR1cm4gaGVscGVycy5wb2ludChjb29yZHMsIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMucG9pbnQoY29vcmRzW211bHRpRmVhdHVyZUluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgIGlmIChjb29yZEluZGV4IDwgMCkgY29vcmRJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBjb29yZEluZGV4O1xuICAgICAgICByZXR1cm4gaGVscGVycy5wb2ludChjb29yZHNbY29vcmRJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICBpZiAoZ2VvbWV0cnlJbmRleCA8IDApIGdlb21ldHJ5SW5kZXggPSBjb29yZHMubGVuZ3RoICsgZ2VvbWV0cnlJbmRleDtcbiAgICAgICAgaWYgKGNvb3JkSW5kZXggPCAwKSBjb29yZEluZGV4ID0gY29vcmRzW2dlb21ldHJ5SW5kZXhdLmxlbmd0aCArIGNvb3JkSW5kZXg7XG4gICAgICAgIHJldHVybiBoZWxwZXJzLnBvaW50KGNvb3Jkc1tnZW9tZXRyeUluZGV4XVtjb29yZEluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICAgIGlmIChjb29yZEluZGV4IDwgMCkgY29vcmRJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0ubGVuZ3RoICsgY29vcmRJbmRleDtcbiAgICAgICAgcmV0dXJuIGhlbHBlcnMucG9pbnQoY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtjb29yZEluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICAgIGlmIChnZW9tZXRyeUluZGV4IDwgMCkgZ2VvbWV0cnlJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0ubGVuZ3RoICsgZ2VvbWV0cnlJbmRleDtcbiAgICAgICAgaWYgKGNvb3JkSW5kZXggPCAwKSBjb29yZEluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XS5sZW5ndGggLSBjb29yZEluZGV4O1xuICAgICAgICByZXR1cm4gaGVscGVycy5wb2ludChjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW2dlb21ldHJ5SW5kZXhdW2Nvb3JkSW5kZXhdLCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIGludmFsaWQnKTtcbn1cblxuZXhwb3J0cy5jb29yZEVhY2ggPSBjb29yZEVhY2g7XG5leHBvcnRzLmNvb3JkUmVkdWNlID0gY29vcmRSZWR1Y2U7XG5leHBvcnRzLnByb3BFYWNoID0gcHJvcEVhY2g7XG5leHBvcnRzLnByb3BSZWR1Y2UgPSBwcm9wUmVkdWNlO1xuZXhwb3J0cy5mZWF0dXJlRWFjaCA9IGZlYXR1cmVFYWNoO1xuZXhwb3J0cy5mZWF0dXJlUmVkdWNlID0gZmVhdHVyZVJlZHVjZTtcbmV4cG9ydHMuY29vcmRBbGwgPSBjb29yZEFsbDtcbmV4cG9ydHMuZ2VvbUVhY2ggPSBnZW9tRWFjaDtcbmV4cG9ydHMuZ2VvbVJlZHVjZSA9IGdlb21SZWR1Y2U7XG5leHBvcnRzLmZsYXR0ZW5FYWNoID0gZmxhdHRlbkVhY2g7XG5leHBvcnRzLmZsYXR0ZW5SZWR1Y2UgPSBmbGF0dGVuUmVkdWNlO1xuZXhwb3J0cy5zZWdtZW50RWFjaCA9IHNlZ21lbnRFYWNoO1xuZXhwb3J0cy5zZWdtZW50UmVkdWNlID0gc2VnbWVudFJlZHVjZTtcbmV4cG9ydHMubGluZUVhY2ggPSBsaW5lRWFjaDtcbmV4cG9ydHMubGluZVJlZHVjZSA9IGxpbmVSZWR1Y2U7XG5leHBvcnRzLmZpbmRTZWdtZW50ID0gZmluZFNlZ21lbnQ7XG5leHBvcnRzLmZpbmRQb2ludCA9IGZpbmRQb2ludDtcbiIsIlwidXNlIHN0cmljdFwiO1xyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XHJcbnZhciBtYXJ0aW5leiA9IHJlcXVpcmUoXCJtYXJ0aW5lei1wb2x5Z29uLWNsaXBwaW5nXCIpO1xyXG52YXIgaW52YXJpYW50XzEgPSByZXF1aXJlKFwiQHR1cmYvaW52YXJpYW50XCIpO1xyXG52YXIgaGVscGVyc18xID0gcmVxdWlyZShcIkB0dXJmL2hlbHBlcnNcIik7XHJcbi8qKlxyXG4gKiBUYWtlcyB0d28ge0BsaW5rIChNdWx0aSlQb2x5Z29uKHMpfSBhbmQgcmV0dXJucyBhIGNvbWJpbmVkIHBvbHlnb24uIElmIHRoZSBpbnB1dCBwb2x5Z29ucyBhcmUgbm90IGNvbnRpZ3VvdXMsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHtAbGluayBNdWx0aVBvbHlnb259IGZlYXR1cmUuXHJcbiAqXHJcbiAqIEBuYW1lIHVuaW9uXHJcbiAqIEBwYXJhbSB7RmVhdHVyZTxQb2x5Z29ufE11bHRpUG9seWdvbj59IHBvbHlnb24xIGlucHV0IFBvbHlnb24gZmVhdHVyZVxyXG4gKiBAcGFyYW0ge0ZlYXR1cmU8UG9seWdvbnxNdWx0aVBvbHlnb24+fSBwb2x5Z29uMiBQb2x5Z29uIGZlYXR1cmUgdG8gZGlmZmVyZW5jZSBmcm9tIHBvbHlnb24xXHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xyXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucHJvcGVydGllcz17fV0gVHJhbnNsYXRlIFByb3BlcnRpZXMgdG8gb3V0cHV0IEZlYXR1cmVcclxuICogQHJldHVybnMge0ZlYXR1cmU8KFBvbHlnb258TXVsdGlQb2x5Z29uKT59IGEgY29tYmluZWQge0BsaW5rIFBvbHlnb259IG9yIHtAbGluayBNdWx0aVBvbHlnb259IGZlYXR1cmVcclxuICogQGV4YW1wbGVcclxuICogdmFyIHBvbHkxID0gdHVyZi5wb2x5Z29uKFtbXHJcbiAqICAgICBbLTgyLjU3NDc4NywgMzUuNTk0MDg3XSxcclxuICogICAgIFstODIuNTc0Nzg3LCAzNS42MTU1ODFdLFxyXG4gKiAgICAgWy04Mi41NDUyNjEsIDM1LjYxNTU4MV0sXHJcbiAqICAgICBbLTgyLjU0NTI2MSwgMzUuNTk0MDg3XSxcclxuICogICAgIFstODIuNTc0Nzg3LCAzNS41OTQwODddXHJcbiAqIF1dLCB7XCJmaWxsXCI6IFwiIzBmMFwifSk7XHJcbiAqIHZhciBwb2x5MiA9IHR1cmYucG9seWdvbihbW1xyXG4gKiAgICAgWy04Mi41NjAwMjQsIDM1LjU4NTE1M10sXHJcbiAqICAgICBbLTgyLjU2MDAyNCwgMzUuNjAyNjAyXSxcclxuICogICAgIFstODIuNTI5NjQsIDM1LjYwMjYwMl0sXHJcbiAqICAgICBbLTgyLjUyOTY0LCAzNS41ODUxNTNdLFxyXG4gKiAgICAgWy04Mi41NjAwMjQsIDM1LjU4NTE1M11cclxuICogXV0sIHtcImZpbGxcIjogXCIjMDBmXCJ9KTtcclxuICpcclxuICogdmFyIHVuaW9uID0gdHVyZi51bmlvbihwb2x5MSwgcG9seTIpO1xyXG4gKlxyXG4gKiAvL2FkZFRvTWFwXHJcbiAqIHZhciBhZGRUb01hcCA9IFtwb2x5MSwgcG9seTIsIHVuaW9uXTtcclxuICovXHJcbmZ1bmN0aW9uIHVuaW9uKHBvbHlnb24xLCBwb2x5Z29uMiwgb3B0aW9ucykge1xyXG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cclxuICAgIHZhciBjb29yZHMxID0gaW52YXJpYW50XzEuZ2V0R2VvbShwb2x5Z29uMSkuY29vcmRpbmF0ZXM7XHJcbiAgICB2YXIgY29vcmRzMiA9IGludmFyaWFudF8xLmdldEdlb20ocG9seWdvbjIpLmNvb3JkaW5hdGVzO1xyXG4gICAgdmFyIHVuaW9uZWQgPSBtYXJ0aW5lei51bmlvbihjb29yZHMxLCBjb29yZHMyKTtcclxuICAgIGlmICh1bmlvbmVkLmxlbmd0aCA9PT0gMClcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIGlmICh1bmlvbmVkLmxlbmd0aCA9PT0gMSlcclxuICAgICAgICByZXR1cm4gaGVscGVyc18xLnBvbHlnb24odW5pb25lZFswXSwgb3B0aW9ucy5wcm9wZXJ0aWVzKTtcclxuICAgIGVsc2VcclxuICAgICAgICByZXR1cm4gaGVscGVyc18xLm11bHRpUG9seWdvbih1bmlvbmVkLCBvcHRpb25zLnByb3BlcnRpZXMpO1xyXG59XHJcbmV4cG9ydHMuZGVmYXVsdCA9IHVuaW9uO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcclxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xyXG52YXIgaGVscGVyc18xID0gcmVxdWlyZShcIkB0dXJmL2hlbHBlcnNcIik7XHJcbi8qKlxyXG4gKiBVbndyYXAgYSBjb29yZGluYXRlIGZyb20gYSBQb2ludCBGZWF0dXJlLCBHZW9tZXRyeSBvciBhIHNpbmdsZSBjb29yZGluYXRlLlxyXG4gKlxyXG4gKiBAbmFtZSBnZXRDb29yZFxyXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj58R2VvbWV0cnk8UG9pbnQ+fEZlYXR1cmU8UG9pbnQ+fSBjb29yZCBHZW9KU09OIFBvaW50IG9yIGFuIEFycmF5IG9mIG51bWJlcnNcclxuICogQHJldHVybnMge0FycmF5PG51bWJlcj59IGNvb3JkaW5hdGVzXHJcbiAqIEBleGFtcGxlXHJcbiAqIHZhciBwdCA9IHR1cmYucG9pbnQoWzEwLCAxMF0pO1xyXG4gKlxyXG4gKiB2YXIgY29vcmQgPSB0dXJmLmdldENvb3JkKHB0KTtcclxuICogLy89IFsxMCwgMTBdXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRDb29yZChjb29yZCkge1xyXG4gICAgaWYgKCFjb29yZCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImNvb3JkIGlzIHJlcXVpcmVkXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkKSkge1xyXG4gICAgICAgIGlmIChjb29yZC50eXBlID09PSBcIkZlYXR1cmVcIiAmJiBjb29yZC5nZW9tZXRyeSAhPT0gbnVsbCAmJiBjb29yZC5nZW9tZXRyeS50eXBlID09PSBcIlBvaW50XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGNvb3JkLmdlb21ldHJ5LmNvb3JkaW5hdGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29vcmQudHlwZSA9PT0gXCJQb2ludFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb29yZC5jb29yZGluYXRlcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjb29yZCkgJiYgY29vcmQubGVuZ3RoID49IDIgJiYgIUFycmF5LmlzQXJyYXkoY29vcmRbMF0pICYmICFBcnJheS5pc0FycmF5KGNvb3JkWzFdKSkge1xyXG4gICAgICAgIHJldHVybiBjb29yZDtcclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihcImNvb3JkIG11c3QgYmUgR2VvSlNPTiBQb2ludCBvciBhbiBBcnJheSBvZiBudW1iZXJzXCIpO1xyXG59XHJcbmV4cG9ydHMuZ2V0Q29vcmQgPSBnZXRDb29yZDtcclxuLyoqXHJcbiAqIFVud3JhcCBjb29yZGluYXRlcyBmcm9tIGEgRmVhdHVyZSwgR2VvbWV0cnkgT2JqZWN0IG9yIGFuIEFycmF5XHJcbiAqXHJcbiAqIEBuYW1lIGdldENvb3Jkc1xyXG4gKiBAcGFyYW0ge0FycmF5PGFueT58R2VvbWV0cnl8RmVhdHVyZX0gY29vcmRzIEZlYXR1cmUsIEdlb21ldHJ5IE9iamVjdCBvciBhbiBBcnJheVxyXG4gKiBAcmV0dXJucyB7QXJyYXk8YW55Pn0gY29vcmRpbmF0ZXNcclxuICogQGV4YW1wbGVcclxuICogdmFyIHBvbHkgPSB0dXJmLnBvbHlnb24oW1tbMTE5LjMyLCAtOC43XSwgWzExOS41NSwgLTguNjldLCBbMTE5LjUxLCAtOC41NF0sIFsxMTkuMzIsIC04LjddXV0pO1xyXG4gKlxyXG4gKiB2YXIgY29vcmRzID0gdHVyZi5nZXRDb29yZHMocG9seSk7XHJcbiAqIC8vPSBbW1sxMTkuMzIsIC04LjddLCBbMTE5LjU1LCAtOC42OV0sIFsxMTkuNTEsIC04LjU0XSwgWzExOS4zMiwgLTguN11dXVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0Q29vcmRzKGNvb3Jkcykge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29vcmRzKSkge1xyXG4gICAgICAgIHJldHVybiBjb29yZHM7XHJcbiAgICB9XHJcbiAgICAvLyBGZWF0dXJlXHJcbiAgICBpZiAoY29vcmRzLnR5cGUgPT09IFwiRmVhdHVyZVwiKSB7XHJcbiAgICAgICAgaWYgKGNvb3Jkcy5nZW9tZXRyeSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gY29vcmRzLmdlb21ldHJ5LmNvb3JkaW5hdGVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEdlb21ldHJ5XHJcbiAgICAgICAgaWYgKGNvb3Jkcy5jb29yZGluYXRlcykge1xyXG4gICAgICAgICAgICByZXR1cm4gY29vcmRzLmNvb3JkaW5hdGVzO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRocm93IG5ldyBFcnJvcihcImNvb3JkcyBtdXN0IGJlIEdlb0pTT04gRmVhdHVyZSwgR2VvbWV0cnkgT2JqZWN0IG9yIGFuIEFycmF5XCIpO1xyXG59XHJcbmV4cG9ydHMuZ2V0Q29vcmRzID0gZ2V0Q29vcmRzO1xyXG4vKipcclxuICogQ2hlY2tzIGlmIGNvb3JkaW5hdGVzIGNvbnRhaW5zIGEgbnVtYmVyXHJcbiAqXHJcbiAqIEBuYW1lIGNvbnRhaW5zTnVtYmVyXHJcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gY29vcmRpbmF0ZXMgR2VvSlNPTiBDb29yZGluYXRlc1xyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBBcnJheSBjb250YWlucyBhIG51bWJlclxyXG4gKi9cclxuZnVuY3Rpb24gY29udGFpbnNOdW1iZXIoY29vcmRpbmF0ZXMpIHtcclxuICAgIGlmIChjb29yZGluYXRlcy5sZW5ndGggPiAxICYmIGhlbHBlcnNfMS5pc051bWJlcihjb29yZGluYXRlc1swXSkgJiYgaGVscGVyc18xLmlzTnVtYmVyKGNvb3JkaW5hdGVzWzFdKSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXNbMF0pICYmIGNvb3JkaW5hdGVzWzBdLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiBjb250YWluc051bWJlcihjb29yZGluYXRlc1swXSk7XHJcbiAgICB9XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb29yZGluYXRlcyBtdXN0IG9ubHkgY29udGFpbiBudW1iZXJzXCIpO1xyXG59XHJcbmV4cG9ydHMuY29udGFpbnNOdW1iZXIgPSBjb250YWluc051bWJlcjtcclxuLyoqXHJcbiAqIEVuZm9yY2UgZXhwZWN0YXRpb25zIGFib3V0IHR5cGVzIG9mIEdlb0pTT04gb2JqZWN0cyBmb3IgVHVyZi5cclxuICpcclxuICogQG5hbWUgZ2VvanNvblR5cGVcclxuICogQHBhcmFtIHtHZW9KU09OfSB2YWx1ZSBhbnkgR2VvSlNPTiBvYmplY3RcclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgZXhwZWN0ZWQgR2VvSlNPTiB0eXBlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgY2FsbGluZyBmdW5jdGlvblxyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdmFsdWUgaXMgbm90IHRoZSBleHBlY3RlZCB0eXBlLlxyXG4gKi9cclxuZnVuY3Rpb24gZ2VvanNvblR5cGUodmFsdWUsIHR5cGUsIG5hbWUpIHtcclxuICAgIGlmICghdHlwZSB8fCAhbmFtZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInR5cGUgYW5kIG5hbWUgcmVxdWlyZWRcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLnR5cGUgIT09IHR5cGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHRvIFwiICsgbmFtZSArIFwiOiBtdXN0IGJlIGEgXCIgKyB0eXBlICsgXCIsIGdpdmVuIFwiICsgdmFsdWUudHlwZSk7XHJcbiAgICB9XHJcbn1cclxuZXhwb3J0cy5nZW9qc29uVHlwZSA9IGdlb2pzb25UeXBlO1xyXG4vKipcclxuICogRW5mb3JjZSBleHBlY3RhdGlvbnMgYWJvdXQgdHlwZXMgb2Yge0BsaW5rIEZlYXR1cmV9IGlucHV0cyBmb3IgVHVyZi5cclxuICogSW50ZXJuYWxseSB0aGlzIHVzZXMge0BsaW5rIGdlb2pzb25UeXBlfSB0byBqdWRnZSBnZW9tZXRyeSB0eXBlcy5cclxuICpcclxuICogQG5hbWUgZmVhdHVyZU9mXHJcbiAqIEBwYXJhbSB7RmVhdHVyZX0gZmVhdHVyZSBhIGZlYXR1cmUgd2l0aCBhbiBleHBlY3RlZCBnZW9tZXRyeSB0eXBlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIGV4cGVjdGVkIEdlb0pTT04gdHlwZVxyXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIGNhbGxpbmcgZnVuY3Rpb25cclxuICogQHRocm93cyB7RXJyb3J9IGVycm9yIGlmIHZhbHVlIGlzIG5vdCB0aGUgZXhwZWN0ZWQgdHlwZS5cclxuICovXHJcbmZ1bmN0aW9uIGZlYXR1cmVPZihmZWF0dXJlLCB0eXBlLCBuYW1lKSB7XHJcbiAgICBpZiAoIWZlYXR1cmUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBmZWF0dXJlIHBhc3NlZFwiKTtcclxuICAgIH1cclxuICAgIGlmICghbmFtZSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIi5mZWF0dXJlT2YoKSByZXF1aXJlcyBhIG5hbWVcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWZlYXR1cmUgfHwgZmVhdHVyZS50eXBlICE9PSBcIkZlYXR1cmVcIiB8fCAhZmVhdHVyZS5nZW9tZXRyeSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgdG8gXCIgKyBuYW1lICsgXCIsIEZlYXR1cmUgd2l0aCBnZW9tZXRyeSByZXF1aXJlZFwiKTtcclxuICAgIH1cclxuICAgIGlmICghZmVhdHVyZS5nZW9tZXRyeSB8fCBmZWF0dXJlLmdlb21ldHJ5LnR5cGUgIT09IHR5cGUpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGlucHV0IHRvIFwiICsgbmFtZSArIFwiOiBtdXN0IGJlIGEgXCIgKyB0eXBlICsgXCIsIGdpdmVuIFwiICsgZmVhdHVyZS5nZW9tZXRyeS50eXBlKTtcclxuICAgIH1cclxufVxyXG5leHBvcnRzLmZlYXR1cmVPZiA9IGZlYXR1cmVPZjtcclxuLyoqXHJcbiAqIEVuZm9yY2UgZXhwZWN0YXRpb25zIGFib3V0IHR5cGVzIG9mIHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gaW5wdXRzIGZvciBUdXJmLlxyXG4gKiBJbnRlcm5hbGx5IHRoaXMgdXNlcyB7QGxpbmsgZ2VvanNvblR5cGV9IHRvIGp1ZGdlIGdlb21ldHJ5IHR5cGVzLlxyXG4gKlxyXG4gKiBAbmFtZSBjb2xsZWN0aW9uT2ZcclxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbn0gZmVhdHVyZUNvbGxlY3Rpb24gYSBGZWF0dXJlQ29sbGVjdGlvbiBmb3Igd2hpY2ggZmVhdHVyZXMgd2lsbCBiZSBqdWRnZWRcclxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgZXhwZWN0ZWQgR2VvSlNPTiB0eXBlXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgY2FsbGluZyBmdW5jdGlvblxyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgdmFsdWUgaXMgbm90IHRoZSBleHBlY3RlZCB0eXBlLlxyXG4gKi9cclxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKGZlYXR1cmVDb2xsZWN0aW9uLCB0eXBlLCBuYW1lKSB7XHJcbiAgICBpZiAoIWZlYXR1cmVDb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZmVhdHVyZUNvbGxlY3Rpb24gcGFzc2VkXCIpO1xyXG4gICAgfVxyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiLmNvbGxlY3Rpb25PZigpIHJlcXVpcmVzIGEgbmFtZVwiKTtcclxuICAgIH1cclxuICAgIGlmICghZmVhdHVyZUNvbGxlY3Rpb24gfHwgZmVhdHVyZUNvbGxlY3Rpb24udHlwZSAhPT0gXCJGZWF0dXJlQ29sbGVjdGlvblwiKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCB0byBcIiArIG5hbWUgKyBcIiwgRmVhdHVyZUNvbGxlY3Rpb24gcmVxdWlyZWRcIik7XHJcbiAgICB9XHJcbiAgICBmb3IgKHZhciBfaSA9IDAsIF9hID0gZmVhdHVyZUNvbGxlY3Rpb24uZmVhdHVyZXM7IF9pIDwgX2EubGVuZ3RoOyBfaSsrKSB7XHJcbiAgICAgICAgdmFyIGZlYXR1cmUgPSBfYVtfaV07XHJcbiAgICAgICAgaWYgKCFmZWF0dXJlIHx8IGZlYXR1cmUudHlwZSAhPT0gXCJGZWF0dXJlXCIgfHwgIWZlYXR1cmUuZ2VvbWV0cnkpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCB0byBcIiArIG5hbWUgKyBcIiwgRmVhdHVyZSB3aXRoIGdlb21ldHJ5IHJlcXVpcmVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWZlYXR1cmUuZ2VvbWV0cnkgfHwgZmVhdHVyZS5nZW9tZXRyeS50eXBlICE9PSB0eXBlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgdG8gXCIgKyBuYW1lICsgXCI6IG11c3QgYmUgYSBcIiArIHR5cGUgKyBcIiwgZ2l2ZW4gXCIgKyBmZWF0dXJlLmdlb21ldHJ5LnR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5leHBvcnRzLmNvbGxlY3Rpb25PZiA9IGNvbGxlY3Rpb25PZjtcclxuLyoqXHJcbiAqIEdldCBHZW9tZXRyeSBmcm9tIEZlYXR1cmUgb3IgR2VvbWV0cnkgT2JqZWN0XHJcbiAqXHJcbiAqIEBwYXJhbSB7RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBHZW9KU09OIEZlYXR1cmUgb3IgR2VvbWV0cnkgT2JqZWN0XHJcbiAqIEByZXR1cm5zIHtHZW9tZXRyeXxudWxsfSBHZW9KU09OIEdlb21ldHJ5IE9iamVjdFxyXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgZ2VvanNvbiBpcyBub3QgYSBGZWF0dXJlIG9yIEdlb21ldHJ5IE9iamVjdFxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcG9pbnQgPSB7XHJcbiAqICAgXCJ0eXBlXCI6IFwiRmVhdHVyZVwiLFxyXG4gKiAgIFwicHJvcGVydGllc1wiOiB7fSxcclxuICogICBcImdlb21ldHJ5XCI6IHtcclxuICogICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXHJcbiAqICAgICBcImNvb3JkaW5hdGVzXCI6IFsxMTAsIDQwXVxyXG4gKiAgIH1cclxuICogfVxyXG4gKiB2YXIgZ2VvbSA9IHR1cmYuZ2V0R2VvbShwb2ludClcclxuICogLy89e1widHlwZVwiOiBcIlBvaW50XCIsIFwiY29vcmRpbmF0ZXNcIjogWzExMCwgNDBdfVxyXG4gKi9cclxuZnVuY3Rpb24gZ2V0R2VvbShnZW9qc29uKSB7XHJcbiAgICBpZiAoZ2VvanNvbi50eXBlID09PSBcIkZlYXR1cmVcIikge1xyXG4gICAgICAgIHJldHVybiBnZW9qc29uLmdlb21ldHJ5O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdlb2pzb247XHJcbn1cclxuZXhwb3J0cy5nZXRHZW9tID0gZ2V0R2VvbTtcclxuLyoqXHJcbiAqIEdldCBHZW9KU09OIG9iamVjdCdzIHR5cGUsIEdlb21ldHJ5IHR5cGUgaXMgcHJpb3JpdGl6ZS5cclxuICpcclxuICogQHBhcmFtIHtHZW9KU09OfSBnZW9qc29uIEdlb0pTT04gb2JqZWN0XHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT1cImdlb2pzb25cIl0gbmFtZSBvZiB0aGUgdmFyaWFibGUgdG8gZGlzcGxheSBpbiBlcnJvciBtZXNzYWdlXHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEdlb0pTT04gdHlwZVxyXG4gKiBAZXhhbXBsZVxyXG4gKiB2YXIgcG9pbnQgPSB7XHJcbiAqICAgXCJ0eXBlXCI6IFwiRmVhdHVyZVwiLFxyXG4gKiAgIFwicHJvcGVydGllc1wiOiB7fSxcclxuICogICBcImdlb21ldHJ5XCI6IHtcclxuICogICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXHJcbiAqICAgICBcImNvb3JkaW5hdGVzXCI6IFsxMTAsIDQwXVxyXG4gKiAgIH1cclxuICogfVxyXG4gKiB2YXIgZ2VvbSA9IHR1cmYuZ2V0VHlwZShwb2ludClcclxuICogLy89XCJQb2ludFwiXHJcbiAqL1xyXG5mdW5jdGlvbiBnZXRUeXBlKGdlb2pzb24sIG5hbWUpIHtcclxuICAgIGlmIChnZW9qc29uLnR5cGUgPT09IFwiRmVhdHVyZUNvbGxlY3Rpb25cIikge1xyXG4gICAgICAgIHJldHVybiBcIkZlYXR1cmVDb2xsZWN0aW9uXCI7XHJcbiAgICB9XHJcbiAgICBpZiAoZ2VvanNvbi50eXBlID09PSBcIkdlb21ldHJ5Q29sbGVjdGlvblwiKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiR2VvbWV0cnlDb2xsZWN0aW9uXCI7XHJcbiAgICB9XHJcbiAgICBpZiAoZ2VvanNvbi50eXBlID09PSBcIkZlYXR1cmVcIiAmJiBnZW9qc29uLmdlb21ldHJ5ICE9PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIGdlb2pzb24uZ2VvbWV0cnkudHlwZTtcclxuICAgIH1cclxuICAgIHJldHVybiBnZW9qc29uLnR5cGU7XHJcbn1cclxuZXhwb3J0cy5nZXRUeXBlID0gZ2V0VHlwZTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL3NoaW1cIik7XG5cbnJlcXVpcmUoXCJyZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWVcIik7XG5cbnJlcXVpcmUoXCJjb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGVcIik7XG5cbmlmIChnbG9iYWwuX2JhYmVsUG9seWZpbGwpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwib25seSBvbmUgaW5zdGFuY2Ugb2YgYmFiZWwtcG9seWZpbGwgaXMgYWxsb3dlZFwiKTtcbn1cbmdsb2JhbC5fYmFiZWxQb2x5ZmlsbCA9IHRydWU7XG5cbnZhciBERUZJTkVfUFJPUEVSVFkgPSBcImRlZmluZVByb3BlcnR5XCI7XG5mdW5jdGlvbiBkZWZpbmUoTywga2V5LCB2YWx1ZSkge1xuICBPW2tleV0gfHwgT2JqZWN0W0RFRklORV9QUk9QRVJUWV0oTywga2V5LCB7XG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9KTtcbn1cblxuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkTGVmdFwiLCBcIlwiLnBhZFN0YXJ0KTtcbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZFJpZ2h0XCIsIFwiXCIucGFkRW5kKTtcblxuXCJwb3AscmV2ZXJzZSxzaGlmdCxrZXlzLHZhbHVlcyxlbnRyaWVzLGluZGV4T2YsZXZlcnksc29tZSxmb3JFYWNoLG1hcCxmaWx0ZXIsZmluZCxmaW5kSW5kZXgsaW5jbHVkZXMsam9pbixzbGljZSxjb25jYXQscHVzaCxzcGxpY2UsdW5zaGlmdCxzb3J0LGxhc3RJbmRleE9mLHJlZHVjZSxyZWR1Y2VSaWdodCxjb3B5V2l0aGluLGZpbGxcIi5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIFtdW2tleV0gJiYgZGVmaW5lKEFycmF5LCBrZXksIEZ1bmN0aW9uLmNhbGwuYmluZChbXVtrZXldKSk7XG59KTsiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbi8vIFN1cHBvcnQgZGVjb2RpbmcgVVJMLXNhZmUgYmFzZTY0IHN0cmluZ3MsIGFzIE5vZGUuanMgZG9lcy5cbi8vIFNlZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmFzZTY0I1VSTF9hcHBsaWNhdGlvbnNcbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIGdldExlbnMgKGI2NCkge1xuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuXG4gIGlmIChsZW4gJSA0ID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCcpXG4gIH1cblxuICAvLyBUcmltIG9mZiBleHRyYSBieXRlcyBhZnRlciBwbGFjZWhvbGRlciBieXRlcyBhcmUgZm91bmRcbiAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vYmVhdGdhbW1pdC9iYXNlNjQtanMvaXNzdWVzLzQyXG4gIHZhciB2YWxpZExlbiA9IGI2NC5pbmRleE9mKCc9JylcbiAgaWYgKHZhbGlkTGVuID09PSAtMSkgdmFsaWRMZW4gPSBsZW5cblxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gdmFsaWRMZW4gPT09IGxlblxuICAgID8gMFxuICAgIDogNCAtICh2YWxpZExlbiAlIDQpXG5cbiAgcmV0dXJuIFt2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuXVxufVxuXG4vLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiBfYnl0ZUxlbmd0aCAoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSB7XG4gIHJldHVybiAoKHZhbGlkTGVuICsgcGxhY2VIb2xkZXJzTGVuKSAqIDMgLyA0KSAtIHBsYWNlSG9sZGVyc0xlblxufVxuXG5mdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuXG4gIHZhciBhcnIgPSBuZXcgQXJyKF9ieXRlTGVuZ3RoKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikpXG5cbiAgdmFyIGN1ckJ5dGUgPSAwXG5cbiAgLy8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuICB2YXIgbGVuID0gcGxhY2VIb2xkZXJzTGVuID4gMFxuICAgID8gdmFsaWRMZW4gLSA0XG4gICAgOiB2YWxpZExlblxuXG4gIHZhciBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayh1aW50OCwgaSwgKGkgKyBtYXhDaHVua0xlbmd0aCkgPiBsZW4yID8gbGVuMiA6IChpICsgbWF4Q2h1bmtMZW5ndGgpKSlcbiAgfVxuXG4gIC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcbiAgaWYgKGV4dHJhQnl0ZXMgPT09IDEpIHtcbiAgICB0bXAgPSB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDJdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDQpICYgMHgzRl0gK1xuICAgICAgJz09J1xuICAgIClcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAxMF0gK1xuICAgICAgbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdICtcbiAgICAgICc9J1xuICAgIClcbiAgfVxuXG4gIHJldHVybiBwYXJ0cy5qb2luKCcnKVxufVxuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbnZhciBLX01BWF9MRU5HVEggPSAweDdmZmZmZmZmXG5leHBvcnRzLmtNYXhMZW5ndGggPSBLX01BWF9MRU5HVEhcblxuLyoqXG4gKiBJZiBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgOlxuICogICA9PT0gdHJ1ZSAgICBVc2UgVWludDhBcnJheSBpbXBsZW1lbnRhdGlvbiAoZmFzdGVzdClcbiAqICAgPT09IGZhbHNlICAgUHJpbnQgd2FybmluZyBhbmQgcmVjb21tZW5kIHVzaW5nIGBidWZmZXJgIHY0Lnggd2hpY2ggaGFzIGFuIE9iamVjdFxuICogICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiAobW9zdCBjb21wYXRpYmxlLCBldmVuIElFNilcbiAqXG4gKiBCcm93c2VycyB0aGF0IHN1cHBvcnQgdHlwZWQgYXJyYXlzIGFyZSBJRSAxMCssIEZpcmVmb3ggNCssIENocm9tZSA3KywgU2FmYXJpIDUuMSssXG4gKiBPcGVyYSAxMS42KywgaU9TIDQuMisuXG4gKlxuICogV2UgcmVwb3J0IHRoYXQgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0eXBlZCBhcnJheXMgaWYgdGhlIGFyZSBub3Qgc3ViY2xhc3NhYmxlXG4gKiB1c2luZyBfX3Byb3RvX18uIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgXG4gKiAoU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzgpLiBJRSAxMCBsYWNrcyBzdXBwb3J0XG4gKiBmb3IgX19wcm90b19fIGFuZCBoYXMgYSBidWdneSB0eXBlZCBhcnJheSBpbXBsZW1lbnRhdGlvbi5cbiAqL1xuQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgPSB0eXBlZEFycmF5U3VwcG9ydCgpXG5cbmlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgY29uc29sZS5lcnJvcihcbiAgICAnVGhpcyBicm93c2VyIGxhY2tzIHR5cGVkIGFycmF5IChVaW50OEFycmF5KSBzdXBwb3J0IHdoaWNoIGlzIHJlcXVpcmVkIGJ5ICcgK1xuICAgICdgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LidcbiAgKVxufVxuXG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIC8vIENhbiB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZD9cbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MlxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKGxlbmd0aCA+IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCcpXG4gIH1cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgYnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGJ1ZlxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUoYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG4vLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgdmFsdWU6IG51bGwsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAoaXNBcnJheUJ1ZmZlcih2YWx1ZSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbkJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbkJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAoc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZW5jb2RpbmdcIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJylcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBieXRlTGVuZ3RoKHN0cmluZywgZW5jb2RpbmcpIHwgMFxuICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbmd0aClcblxuICB2YXIgYWN0dWFsID0gYnVmLndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICBidWYgPSBidWYuc2xpY2UoMCwgYWN0dWFsKVxuICB9XG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlIChhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHZhciBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgYnVmW2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUJ1ZmZlciAoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAoYnl0ZU9mZnNldCA8IDAgfHwgYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnb2Zmc2V0XFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0ICsgKGxlbmd0aCB8fCAwKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdsZW5ndGhcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICB2YXIgYnVmXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBidWYgPSBuZXcgVWludDhBcnJheShhcnJheSlcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZVxuICBidWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICByZXR1cm4gYnVmXG59XG5cbmZ1bmN0aW9uIGZyb21PYmplY3QgKG9iaikge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKG9iaikpIHtcbiAgICB2YXIgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICB2YXIgYnVmID0gY3JlYXRlQnVmZmVyKGxlbilcblxuICAgIGlmIChidWYubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gYnVmXG4gICAgfVxuXG4gICAgb2JqLmNvcHkoYnVmLCAwLCAwLCBsZW4pXG4gICAgcmV0dXJuIGJ1ZlxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmIChpc0FycmF5QnVmZmVyVmlldyhvYmopIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBBcnJheS5pc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBLX01BWF9MRU5HVEhgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0gS19NQVhfTEVOR1RIKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIEtfTUFYX0xFTkdUSC50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuIGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlciA9PT0gdHJ1ZVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAoaXNBcnJheUJ1ZmZlclZpZXcoc3RyaW5nKSB8fCBpc0FycmF5QnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgKGFuZCB0aGUgYGlzLWJ1ZmZlcmAgbnBtIHBhY2thZ2UpXG4vLyB0byBkZXRlY3QgYSBCdWZmZXIgaW5zdGFuY2UuIEl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBgaW5zdGFuY2VvZiBCdWZmZXJgXG4vLyByZWxpYWJseSBpbiBhIGJyb3dzZXJpZnkgY29udGV4dCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIGRpZmZlcmVudFxuLy8gY29waWVzIG9mIHRoZSAnYnVmZmVyJyBwYWNrYWdlIGluIHVzZS4gVGhpcyBtZXRob2Qgd29ya3MgZXZlbiBmb3IgQnVmZmVyXG4vLyBpbnN0YW5jZXMgdGhhdCB3ZXJlIGNyZWF0ZWQgZnJvbSBhbm90aGVyIGNvcHkgb2YgdGhlIGBidWZmZXJgIHBhY2thZ2UuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8xNTRcbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKG51bWJlcklzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoID4+PiAwXG4gICAgICBpZiAoZW5jb2RpbmcgPT09IHVuZGVmaW5lZCkgZW5jb2RpbmcgPSAndXRmOCdcbiAgICB9IGVsc2Uge1xuICAgICAgZW5jb2RpbmcgPSBsZW5ndGhcbiAgICAgIGxlbmd0aCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgKGJ5dGVzW2kgKyAxXSAqIDI1NikpXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnNsaWNlID0gZnVuY3Rpb24gc2xpY2UgKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIHN0YXJ0ID0gfn5zdGFydFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IH5+ZW5kXG5cbiAgaWYgKHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ICs9IGxlblxuICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMFxuICB9IGVsc2UgaWYgKHN0YXJ0ID4gbGVuKSB7XG4gICAgc3RhcnQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCAwKSB7XG4gICAgZW5kICs9IGxlblxuICAgIGlmIChlbmQgPCAwKSBlbmQgPSAwXG4gIH0gZWxzZSBpZiAoZW5kID4gbGVuKSB7XG4gICAgZW5kID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgdmFyIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgbmV3QnVmLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnRCRSA9IGZ1bmN0aW9uIHJlYWRVSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkUgPSBmdW5jdGlvbiByZWFkVUludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdICogMHgxMDAwMDAwKSArXG4gICAgKCh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgIHRoaXNbb2Zmc2V0ICsgM10pXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludExFID0gZnVuY3Rpb24gcmVhZEludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICBpZiAoISh0aGlzW29mZnNldF0gJiAweDgwKSkgcmV0dXJuICh0aGlzW29mZnNldF0pXG4gIHJldHVybiAoKDB4ZmYgLSB0aGlzW29mZnNldF0gKyAxKSAqIC0xKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFID0gZnVuY3Rpb24gcmVhZEludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHhmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbGltaXQgPSBNYXRoLnBvdygyLCAoOCAqIGJ5dGVMZW5ndGgpIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgKDggKiBieXRlTGVuZ3RoKSAtIDEpXG5cbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBsaW1pdCAtIDEsIC1saW1pdClcbiAgfVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aCAtIDFcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXQgKyBpXSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoLS1pID49IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICBpZiAodmFsdWUgPCAwICYmIHN1YiA9PT0gMCAmJiB0aGlzW29mZnNldCArIGkgKyAxXSAhPT0gMCkge1xuICAgICAgc3ViID0gMVxuICAgIH1cbiAgICB0aGlzW29mZnNldCArIGldID0gKCh2YWx1ZSAvIG11bCkgPj4gMCkgLSBzdWIgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50OCA9IGZ1bmN0aW9uIHdyaXRlSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2TEUgPSBmdW5jdGlvbiB3cml0ZUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tJRUVFNzU0KGJ1ZiwgdmFsdWUsIG9mZnNldCwgOCwgMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgsIC0xLjc5NzY5MzEzNDg2MjMxNTdFKzMwOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCA1MiwgOClcbiAgcmV0dXJuIG9mZnNldCArIDhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUxFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlQkUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG4vLyBjb3B5KHRhcmdldEJ1ZmZlciwgdGFyZ2V0U3RhcnQ9MCwgc291cmNlU3RhcnQ9MCwgc291cmNlRW5kPWJ1ZmZlci5sZW5ndGgpXG5CdWZmZXIucHJvdG90eXBlLmNvcHkgPSBmdW5jdGlvbiBjb3B5ICh0YXJnZXQsIHRhcmdldFN0YXJ0LCBzdGFydCwgZW5kKSB7XG4gIGlmICghc3RhcnQpIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCAmJiBlbmQgIT09IDApIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXRTdGFydCA+PSB0YXJnZXQubGVuZ3RoKSB0YXJnZXRTdGFydCA9IHRhcmdldC5sZW5ndGhcbiAgaWYgKCF0YXJnZXRTdGFydCkgdGFyZ2V0U3RhcnQgPSAwXG4gIGlmIChlbmQgPiAwICYmIGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIC8vIENvcHkgMCBieXRlczsgd2UncmUgZG9uZVxuICBpZiAoZW5kID09PSBzdGFydCkgcmV0dXJuIDBcbiAgaWYgKHRhcmdldC5sZW5ndGggPT09IDAgfHwgdGhpcy5sZW5ndGggPT09IDApIHJldHVybiAwXG5cbiAgLy8gRmF0YWwgZXJyb3IgY29uZGl0aW9uc1xuICBpZiAodGFyZ2V0U3RhcnQgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3RhcmdldFN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICB9XG4gIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPj0gdGhpcy5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgaWYgKGVuZCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcycpXG5cbiAgLy8gQXJlIHdlIG9vYj9cbiAgaWYgKGVuZCA+IHRoaXMubGVuZ3RoKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0IDwgZW5kIC0gc3RhcnQpIHtcbiAgICBlbmQgPSB0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgKyBzdGFydFxuICB9XG5cbiAgdmFyIGxlbiA9IGVuZCAtIHN0YXJ0XG4gIHZhciBpXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiBzdGFydCA8IHRhcmdldFN0YXJ0ICYmIHRhcmdldFN0YXJ0IDwgZW5kKSB7XG4gICAgLy8gZGVzY2VuZGluZyBjb3B5IGZyb20gZW5kXG4gICAgZm9yIChpID0gbGVuIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2UgaWYgKGxlbiA8IDEwMDApIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHIudHJpbSgpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuLy8gQXJyYXlCdWZmZXJzIGZyb20gYW5vdGhlciBjb250ZXh0IChpLmUuIGFuIGlmcmFtZSkgZG8gbm90IHBhc3MgdGhlIGBpbnN0YW5jZW9mYCBjaGVja1xuLy8gYnV0IHRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdmFsaWQuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE2NlxuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlciAob2JqKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAgIChvYmogIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IgIT0gbnVsbCAmJiBvYmouY29uc3RydWN0b3IubmFtZSA9PT0gJ0FycmF5QnVmZmVyJyAmJlxuICAgICAgdHlwZW9mIG9iai5ieXRlTGVuZ3RoID09PSAnbnVtYmVyJylcbn1cblxuLy8gTm9kZSAwLjEwIHN1cHBvcnRzIGBBcnJheUJ1ZmZlcmAgYnV0IGxhY2tzIGBBcnJheUJ1ZmZlci5pc1ZpZXdgXG5mdW5jdGlvbiBpc0FycmF5QnVmZmVyVmlldyAob2JqKSB7XG4gIHJldHVybiAodHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJykgJiYgQXJyYXlCdWZmZXIuaXNWaWV3KG9iailcbn1cblxuZnVuY3Rpb24gbnVtYmVySXNOYU4gKG9iaikge1xuICByZXR1cm4gb2JqICE9PSBvYmogLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5SZWdFeHAuZXNjYXBlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIG1zZykge1xuICBpZiAodHlwZW9mIGl0ICE9ICdudW1iZXInICYmIGNvZihpdCkgIT0gJ051bWJlcicpIHRocm93IFR5cGVFcnJvcihtc2cpO1xuICByZXR1cm4gK2l0O1xufTtcbiIsIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuIC8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQgLyogPSAwICovLCBzdGFydCAvKiA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIHRvID0gdG9BYnNvbHV0ZUluZGV4KHRhcmdldCwgbGVuKTtcbiAgdmFyIGZyb20gPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNvdW50ID0gTWF0aC5taW4oKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0byk7XG4gIHZhciBpbmMgPSAxO1xuICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4gICAgaW5jID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gKz0gY291bnQgLSAxO1xuICB9XG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGVuZFBvcyA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKTtcbiAgd2hpbGUgKGVuZFBvcyA+IGluZGV4KSBPW2luZGV4KytdID0gdmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXNjID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsICRjcmVhdGUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICB2YXIgY3JlYXRlID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWwsIHJlcztcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFMZW4sIG1lbW8sIGlzUmlnaHQpIHtcbiAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBpbmRleCA9IGlzUmlnaHQgPyBsZW5ndGggLSAxIDogMDtcbiAgdmFyIGkgPSBpc1JpZ2h0ID8gLTEgOiAxO1xuICBpZiAoYUxlbiA8IDIpIGZvciAoOzspIHtcbiAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpbmRleCArPSBpO1xuICAgIGlmIChpc1JpZ2h0ID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICB9XG4gIH1cbiAgZm9yICg7aXNSaWdodCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICB9XG4gIHJldHVybiBtZW1vO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwsIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4vX21ldGEnKS5mYXN0S2V5O1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNJWkUgPSBERVNDUklQVE9SUyA/ICdfcycgOiAnc2l6ZSc7XG5cbnZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgdmFyIGVudHJ5O1xuICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yIChlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICBpZiAoZW50cnkuayA9PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBjcmVhdGUobnVsbCk7IC8vIGluZGV4XG4gICAgICB0aGF0Ll9mID0gdW5kZWZpbmVkOyAgICAvLyBmaXJzdCBlbnRyeVxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgICAgLy8gbGFzdCBlbnRyeVxuICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgLy8gc2l6ZVxuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICBmb3IgKHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSksIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucCkgZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm47XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnAgPSBwcmV2O1xuICAgICAgICAgIGlmICh0aGF0Ll9mID09IGVudHJ5KSB0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZiAodGhhdC5fbCA9PSBlbnRyeSkgdGhhdC5fbCA9IHByZXY7XG4gICAgICAgICAgdGhhdFtTSVpFXS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjIuMy42IFNldC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgLy8gMjMuMS4zLjUgTWFwLnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZikge1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh0aGlzLCBOQU1FKVtTSVpFXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgdmFyIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgZW50cnkudiA9IHZhbHVlO1xuICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcbiAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG4gICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG4gICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG4gICAgICB9O1xuICAgICAgaWYgKCF0aGF0Ll9mKSB0aGF0Ll9mID0gZW50cnk7XG4gICAgICBpZiAocHJldikgcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSB0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuICAgIH0gcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIGdldEVudHJ5OiBnZXRFbnRyeSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQywgTkFNRSwgSVNfTUFQKSB7XG4gICAgLy8gYWRkIC5rZXlzLCAudmFsdWVzLCAuZW50cmllcywgW0BAaXRlcmF0b3JdXG4gICAgLy8gMjMuMS4zLjQsIDIzLjEuMy44LCAyMy4xLjMuMTEsIDIzLjEuMy4xMiwgMjMuMi4zLjUsIDIzLjIuMy44LCAyMy4yLjMuMTAsIDIzLjIuMy4xMVxuICAgICRpdGVyRGVmaW5lKEMsIE5BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgdGhpcy5fdCA9IHZhbGlkYXRlKGl0ZXJhdGVkLCBOQU1FKTsgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAgICAgICAgICAgICAgICAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBraW5kID0gdGhhdC5faztcbiAgICAgIHZhciBlbnRyeSA9IHRoYXQuX2w7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBhZGQgW0BAc3BlY2llc10sIDIzLjEuMi4yLCAyMy4yLjIuMlxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG4gIH1cbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIGlmIChjbGFzc29mKHRoaXMpICE9IE5BTUUpIHRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG4gICAgcmV0dXJuIGZyb20odGhpcyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZ2V0V2VhayA9IHJlcXVpcmUoJy4vX21ldGEnKS5nZXRXZWFrO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xudmFyICRoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBhcnJheUZpbmQgPSBjcmVhdGVBcnJheU1ldGhvZCg1KTtcbnZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICh0aGF0KSB7XG4gIHJldHVybiB0aGF0Ll9sIHx8ICh0aGF0Ll9sID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG59O1xudmFyIFVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYSA9IFtdO1xufTtcbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gYXJyYXlGaW5kKHN0b3JlLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICB9KTtcbn07XG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5hLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBhcnJheUZpbmRJbmRleCh0aGlzLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gICAgfSk7XG4gICAgaWYgKH5pbmRleCkgdGhpcy5hLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuICEhfmluZGV4O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGlkKys7ICAgICAgLy8gY29sbGVjdGlvbiBpZFxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgLy8gbGVhayBzdG9yZSBmb3IgdW5jYXVnaHQgZnJvemVuIG9iamVjdHNcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMy4zLjIgV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjQuMy4zIFdlYWtTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKSAmJiBkZWxldGUgZGF0YVt0aGlzLl9pXTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4zLjMuNCBXZWFrTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuNC4zLjQgV2Vha1NldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKS5oYXMoa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBkYXRhID0gZ2V0V2Vhayhhbk9iamVjdChrZXkpLCB0cnVlKTtcbiAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZSh0aGF0KS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgZWxzZSBkYXRhW3RoYXQuX2ldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIHVmc3RvcmU6IHVuY2F1Z2h0RnJvemVuU3RvcmVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkaXRlckRldGVjdCA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0Jyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCB3cmFwcGVyLCBtZXRob2RzLCBjb21tb24sIElTX01BUCwgSVNfV0VBSykge1xuICB2YXIgQmFzZSA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIEMgPSBCYXNlO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlO1xuICB2YXIgTyA9IHt9O1xuICB2YXIgZml4TWV0aG9kID0gZnVuY3Rpb24gKEtFWSkge1xuICAgIHZhciBmbiA9IHByb3RvW0tFWV07XG4gICAgcmVkZWZpbmUocHJvdG8sIEtFWSxcbiAgICAgIEtFWSA9PSAnZGVsZXRlJyA/IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnZ2V0JyA/IGZ1bmN0aW9uIGdldChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IHVuZGVmaW5lZCA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2FkZCcgPyBmdW5jdGlvbiBhZGQoYSkgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7IHJldHVybiB0aGlzOyB9XG4gICAgICAgIDogZnVuY3Rpb24gc2V0KGEsIGIpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEsIGIpOyByZXR1cm4gdGhpczsgfVxuICAgICk7XG4gIH07XG4gIGlmICh0eXBlb2YgQyAhPSAnZnVuY3Rpb24nIHx8ICEoSVNfV0VBSyB8fCBwcm90by5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICB9KSkpIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICAgIG1ldGEuTkVFRCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAvLyBlYXJseSBpbXBsZW1lbnRhdGlvbnMgbm90IHN1cHBvcnRzIGNoYWluaW5nXG4gICAgdmFyIEhBU05UX0NIQUlOSU5HID0gaW5zdGFuY2VbQURERVJdKElTX1dFQUsgPyB7fSA6IC0wLCAxKSAhPSBpbnN0YW5jZTtcbiAgICAvLyBWOCB+ICBDaHJvbWl1bSA0MC0gd2Vhay1jb2xsZWN0aW9ucyB0aHJvd3Mgb24gcHJpbWl0aXZlcywgYnV0IHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IGluc3RhbmNlLmhhcygxKTsgfSk7XG4gICAgLy8gbW9zdCBlYXJseSBpbXBsZW1lbnRhdGlvbnMgZG9lc24ndCBzdXBwb3J0cyBpdGVyYWJsZXMsIG1vc3QgbW9kZXJuIC0gbm90IGNsb3NlIGl0IGNvcnJlY3RseVxuICAgIHZhciBBQ0NFUFRfSVRFUkFCTEVTID0gJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHsgbmV3IEMoaXRlcik7IH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIC8vIGZvciBlYXJseSBpbXBsZW1lbnRhdGlvbnMgLTAgYW5kICswIG5vdCB0aGUgc2FtZVxuICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVjggfiBDaHJvbWl1bSA0Mi0gZmFpbHMgb25seSB3aXRoIDUrIGVsZW1lbnRzXG4gICAgICB2YXIgJGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAgIHZhciBpbmRleCA9IDU7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkgJGluc3RhbmNlW0FEREVSXShpbmRleCwgaW5kZXgpO1xuICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICB9KTtcbiAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGFyZ2V0LCBDLCBOQU1FKTtcbiAgICAgICAgdmFyIHRoYXQgPSBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSgpLCB0YXJnZXQsIEMpO1xuICAgICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgfSk7XG4gICAgICBDLnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgcHJvdG8uY29uc3RydWN0b3IgPSBDO1xuICAgIH1cbiAgICBpZiAoVEhST1dTX09OX1BSSU1JVElWRVMgfHwgQlVHR1lfWkVSTykge1xuICAgICAgZml4TWV0aG9kKCdkZWxldGUnKTtcbiAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICBJU19NQVAgJiYgZml4TWV0aG9kKCdnZXQnKTtcbiAgICB9XG4gICAgaWYgKEJVR0dZX1pFUk8gfHwgSEFTTlRfQ0hBSU5JTkcpIGZpeE1ldGhvZChBRERFUik7XG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBwcm90by5jbGVhcikgZGVsZXRlIHByb3RvLmNsZWFyO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEMgIT0gQmFzZSksIE8pO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDO1xufTtcbiIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuMTInIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gIGlmIChpbmRleCBpbiBvYmplY3QpICRkZWZpbmVQcm9wZXJ0eS5mKG9iamVjdCwgaW5kZXgsIGNyZWF0ZURlc2MoMCwgdmFsdWUpKTtcbiAgZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG59O1xuIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ2V0VGltZSA9IERhdGUucHJvdG90eXBlLmdldFRpbWU7XG52YXIgJHRvSVNPU3RyaW5nID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBseiA9IGZ1bmN0aW9uIChudW0pIHtcbiAgcmV0dXJuIG51bSA+IDkgPyBudW0gOiAnMCcgKyBudW07XG59O1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbm1vZHVsZS5leHBvcnRzID0gKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKC01ZTEzIC0gMSkpICE9ICcwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVonO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoTmFOKSk7XG59KSkgPyBmdW5jdGlvbiB0b0lTT1N0cmluZygpIHtcbiAgaWYgKCFpc0Zpbml0ZShnZXRUaW1lLmNhbGwodGhpcykpKSB0aHJvdyBSYW5nZUVycm9yKCdJbnZhbGlkIHRpbWUgdmFsdWUnKTtcbiAgdmFyIGQgPSB0aGlzO1xuICB2YXIgeSA9IGQuZ2V0VVRDRnVsbFllYXIoKTtcbiAgdmFyIG0gPSBkLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICB2YXIgcyA9IHkgPCAwID8gJy0nIDogeSA+IDk5OTkgPyAnKycgOiAnJztcbiAgcmV0dXJuIHMgKyAoJzAwMDAwJyArIE1hdGguYWJzKHkpKS5zbGljZShzID8gLTYgOiAtNCkgK1xuICAgICctJyArIGx6KGQuZ2V0VVRDTW9udGgoKSArIDEpICsgJy0nICsgbHooZC5nZXRVVENEYXRlKCkpICtcbiAgICAnVCcgKyBseihkLmdldFVUQ0hvdXJzKCkpICsgJzonICsgbHooZC5nZXRVVENNaW51dGVzKCkpICtcbiAgICAnOicgKyBseihkLmdldFVUQ1NlY29uZHMoKSkgKyAnLicgKyAobSA+IDk5ID8gbSA6ICcwJyArIGx6KG0pKSArICdaJztcbn0gOiAkdG9JU09TdHJpbmc7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIE5VTUJFUiA9ICdudW1iZXInO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChoaW50KSB7XG4gIGlmIChoaW50ICE9PSAnc3RyaW5nJyAmJiBoaW50ICE9PSBOVU1CRVIgJiYgaGludCAhPT0gJ2RlZmF1bHQnKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCBoaW50Jyk7XG4gIHJldHVybiB0b1ByaW1pdGl2ZShhbk9iamVjdCh0aGlzKSwgaGludCAhPSBOVU1CRVIpO1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCIvLyBhbGwgZW51bWVyYWJsZSBvYmplY3Qga2V5cywgaW5jbHVkZXMgc3ltYm9sc1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSBnZXRLZXlzKGl0KTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIGlmIChnZXRTeW1ib2xzKSB7XG4gICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICB2YXIgaXNFbnVtID0gcElFLmY7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKHN5bWJvbHMubGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKGl0LCBrZXkgPSBzeW1ib2xzW2krK10pKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbnZhciAkZXhwb3J0ID0gZnVuY3Rpb24gKHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuICBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4dGVuZCBnbG9iYWxcbiAgICBpZiAodGFyZ2V0KSByZWRlZmluZSh0YXJnZXQsIGtleSwgb3V0LCB0eXBlICYgJGV4cG9ydC5VKTtcbiAgICAvLyBleHBvcnRcbiAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICB9XG59O1xuZ2xvYmFsLmNvcmUgPSBjb3JlO1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuIiwidmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIHJlID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW0tFWV0ocmUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJlW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICEnLy4vJ1tLRVldKHJlKTtcbiAgICB9IGNhdGNoIChmKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gdHJ1ZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZXhlYycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xuXG52YXIgU1BFQ0lFUyA9IHdrcygnc3BlY2llcycpO1xuXG52YXIgUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyAjcmVwbGFjZSBuZWVkcyBidWlsdC1pbiBzdXBwb3J0IGZvciBuYW1lZCBncm91cHMuXG4gIC8vICNtYXRjaCB3b3JrcyBmaW5lIGJlY2F1c2UgaXQganVzdCByZXR1cm4gdGhlIGV4ZWMgcmVzdWx0cywgZXZlbiBpZiBpdCBoYXNcbiAgLy8gYSBcImdyb3BzXCIgcHJvcGVydHkuXG4gIHZhciByZSA9IC8uLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0Lmdyb3VwcyA9IHsgYTogJzcnIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgcmV0dXJuICcnLnJlcGxhY2UocmUsICckPGE+JykgIT09ICc3Jztcbn0pO1xuXG52YXIgU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDID0gKGZ1bmN0aW9uICgpIHtcbiAgLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCA9PT0gMiAmJiByZXN1bHRbMF0gPT09ICdhJyAmJiByZXN1bHRbMV0gPT09ICdiJztcbn0pKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgbGVuZ3RoLCBleGVjKSB7XG4gIHZhciBTWU1CT0wgPSB3a3MoS0VZKTtcblxuICB2YXIgREVMRUdBVEVTX1RPX1NZTUJPTCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3RyaW5nIG1ldGhvZHMgY2FsbCBzeW1ib2wtbmFtZWQgUmVnRXAgbWV0aG9kc1xuICAgIHZhciBPID0ge307XG4gICAgT1tTWU1CT0xdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfTtcbiAgICByZXR1cm4gJydbS0VZXShPKSAhPSA3O1xuICB9KTtcblxuICB2YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBERUxFR0FURVNfVE9fU1lNQk9MID8gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgfVxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgKEtFWSA9PT0gJ3JlcGxhY2UnICYmICFSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUykgfHxcbiAgICAoS0VZID09PSAnc3BsaXQnICYmICFTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMpXG4gICkge1xuICAgIHZhciBuYXRpdmVSZWdFeHBNZXRob2QgPSAvLi9bU1lNQk9MXTtcbiAgICB2YXIgZm5zID0gZXhlYyhcbiAgICAgIGRlZmluZWQsXG4gICAgICBTWU1CT0wsXG4gICAgICAnJ1tLRVldLFxuICAgICAgZnVuY3Rpb24gbWF5YmVDYWxsTmF0aXZlKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgIGlmIChyZWdleHAuZXhlYyA9PT0gcmVnZXhwRXhlYykge1xuICAgICAgICAgIGlmIChERUxFR0FURVNfVE9fU1lNQk9MICYmICFmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgICAvLyBXZSBhdm9pZCBpdCBieSBkaXJlY3RseSBjYWxsaW5nIHRoZSBuYXRpdmUgQEBtZXRob2QgbWV0aG9kLlxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZVJlZ0V4cE1ldGhvZC5jYWxsKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlTWV0aG9kLmNhbGwoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICApO1xuICAgIHZhciBzdHJmbiA9IGZuc1swXTtcbiAgICB2YXIgcnhmbiA9IGZuc1sxXTtcblxuICAgIHJlZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIEtFWSwgc3RyZm4pO1xuICAgIGhpZGUoUmVnRXhwLnByb3RvdHlwZSwgU1lNQk9MLCBsZW5ndGggPT0gMlxuICAgICAgLy8gMjEuMi41LjggUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdKHN0cmluZywgcmVwbGFjZVZhbHVlKVxuICAgICAgLy8gMjEuMi41LjExIFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF0oc3RyaW5nLCBsaW1pdClcbiAgICAgID8gZnVuY3Rpb24gKHN0cmluZywgYXJnKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzLCBhcmcpOyB9XG4gICAgICAvLyAyMS4yLjUuNiBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdKHN0cmluZylcbiAgICAgIC8vIDIxLjIuNS45IFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdKHN0cmluZylcbiAgICAgIDogZnVuY3Rpb24gKHN0cmluZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcyk7IH1cbiAgICApO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1GbGF0dGVuSW50b0FycmF5XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElTX0NPTkNBVF9TUFJFQURBQkxFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2lzQ29uY2F0U3ByZWFkYWJsZScpO1xuXG5mdW5jdGlvbiBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gY3R4KG1hcHBlciwgdGhpc0FyZywgMykgOiBmYWxzZTtcbiAgdmFyIGVsZW1lbnQsIHNwcmVhZGFibGU7XG5cbiAgd2hpbGUgKHNvdXJjZUluZGV4IDwgc291cmNlTGVuKSB7XG4gICAgaWYgKHNvdXJjZUluZGV4IGluIHNvdXJjZSkge1xuICAgICAgZWxlbWVudCA9IG1hcEZuID8gbWFwRm4oc291cmNlW3NvdXJjZUluZGV4XSwgc291cmNlSW5kZXgsIG9yaWdpbmFsKSA6IHNvdXJjZVtzb3VyY2VJbmRleF07XG5cbiAgICAgIHNwcmVhZGFibGUgPSBmYWxzZTtcbiAgICAgIGlmIChpc09iamVjdChlbGVtZW50KSkge1xuICAgICAgICBzcHJlYWRhYmxlID0gZWxlbWVudFtJU19DT05DQVRfU1BSRUFEQUJMRV07XG4gICAgICAgIHNwcmVhZGFibGUgPSBzcHJlYWRhYmxlICE9PSB1bmRlZmluZWQgPyAhIXNwcmVhZGFibGUgOiBpc0FycmF5KGVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3ByZWFkYWJsZSAmJiBkZXB0aCA+IDApIHtcbiAgICAgICAgdGFyZ2V0SW5kZXggPSBmbGF0dGVuSW50b0FycmF5KHRhcmdldCwgb3JpZ2luYWwsIGVsZW1lbnQsIHRvTGVuZ3RoKGVsZW1lbnQubGVuZ3RoKSwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRhcmdldEluZGV4ID49IDB4MWZmZmZmZmZmZmZmZmYpIHRocm93IFR5cGVFcnJvcigpO1xuICAgICAgICB0YXJnZXRbdGFyZ2V0SW5kZXhdID0gZWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdGFyZ2V0SW5kZXgrKztcbiAgICB9XG4gICAgc291cmNlSW5kZXgrKztcbiAgfVxuICByZXR1cm4gdGFyZ2V0SW5kZXg7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkludG9BcnJheTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQ7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIHZhciBQO1xuICBpZiAoUyAhPT0gQyAmJiB0eXBlb2YgUyA9PSAnZnVuY3Rpb24nICYmIChQID0gUy5wcm90b3R5cGUpICE9PSBDLnByb3RvdHlwZSAmJiBpc09iamVjdChQKSAmJiBzZXRQcm90b3R5cGVPZikge1xuICAgIHNldFByb3RvdHlwZU9mKHRoYXQsIFApO1xuICB9IHJldHVybiB0aGF0O1xufTtcbiIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIi8vIDcuMi44IElzUmVnRXhwKGFyZ3VtZW50KVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBpc1JlZ0V4cDtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiAoKGlzUmVnRXhwID0gaXRbTUFUQ0hdKSAhPT0gdW5kZWZpbmVkID8gISFpc1JlZ0V4cCA6IGNvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBtMSA9IE1hdGguZXhwbTE7XG5tb2R1bGUuZXhwb3J0cyA9ICghJGV4cG0xXG4gIC8vIE9sZCBGRiBidWdcbiAgfHwgJGV4cG0xKDEwKSA+IDIyMDI1LjQ2NTc5NDgwNjcxOSB8fCAkZXhwbTEoMTApIDwgMjIwMjUuNDY1Nzk0ODA2NzE2NTE2OFxuICAvLyBUb3IgQnJvd3NlciBidWdcbiAgfHwgJGV4cG0xKC0yZS0xNykgIT0gLTJlLTE3XG4pID8gZnVuY3Rpb24gZXhwbTEoeCkge1xuICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiB4ID4gLTFlLTYgJiYgeCA8IDFlLTYgPyB4ICsgeCAqIHggLyAyIDogTWF0aC5leHAoeCkgLSAxO1xufSA6ICRleHBtMTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyIHNpZ24gPSByZXF1aXJlKCcuL19tYXRoLXNpZ24nKTtcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBFUFNJTE9OID0gcG93KDIsIC01Mik7XG52YXIgRVBTSUxPTjMyID0gcG93KDIsIC0yMyk7XG52YXIgTUFYMzIgPSBwb3coMiwgMTI3KSAqICgyIC0gRVBTSUxPTjMyKTtcbnZhciBNSU4zMiA9IHBvdygyLCAtMTI2KTtcblxudmFyIHJvdW5kVGllc1RvRXZlbiA9IGZ1bmN0aW9uIChuKSB7XG4gIHJldHVybiBuICsgMSAvIEVQU0lMT04gLSAxIC8gRVBTSUxPTjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gTWF0aC5mcm91bmQgfHwgZnVuY3Rpb24gZnJvdW5kKHgpIHtcbiAgdmFyICRhYnMgPSBNYXRoLmFicyh4KTtcbiAgdmFyICRzaWduID0gc2lnbih4KTtcbiAgdmFyIGEsIHJlc3VsdDtcbiAgaWYgKCRhYnMgPCBNSU4zMikgcmV0dXJuICRzaWduICogcm91bmRUaWVzVG9FdmVuKCRhYnMgLyBNSU4zMiAvIEVQU0lMT04zMikgKiBNSU4zMiAqIEVQU0lMT04zMjtcbiAgYSA9ICgxICsgRVBTSUxPTjMyIC8gRVBTSUxPTikgKiAkYWJzO1xuICByZXN1bHQgPSBhIC0gKGEgLSAkYWJzKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAocmVzdWx0ID4gTUFYMzIgfHwgcmVzdWx0ICE9IHJlc3VsdCkgcmV0dXJuICRzaWduICogSW5maW5pdHk7XG4gIHJldHVybiAkc2lnbiAqIHJlc3VsdDtcbn07XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmxvZzFwIHx8IGZ1bmN0aW9uIGxvZzFwKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID4gLTFlLTggJiYgeCA8IDFlLTggPyB4IC0geCAqIHggLyAyIDogTWF0aC5sb2coMSArIHgpO1xufTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zY2FsZSB8fCBmdW5jdGlvbiBzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgaWYgKFxuICAgIGFyZ3VtZW50cy5sZW5ndGggPT09IDBcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IHggIT0geFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5Mb3cgIT0gaW5Mb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluSGlnaCAhPSBpbkhpZ2hcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IG91dExvdyAhPSBvdXRMb3dcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IG91dEhpZ2ggIT0gb3V0SGlnaFxuICApIHJldHVybiBOYU47XG4gIGlmICh4ID09PSBJbmZpbml0eSB8fCB4ID09PSAtSW5maW5pdHkpIHJldHVybiB4O1xuICByZXR1cm4gKHggLSBpbkxvdykgKiAob3V0SGlnaCAtIG91dExvdykgLyAoaW5IaWdoIC0gaW5Mb3cpICsgb3V0TG93O1xufTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5zaWduIHx8IGZ1bmN0aW9uIHNpZ24oeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSA9PSAwIHx8IHggIT0geCA/IHggOiB4IDwgMCA/IC0xIDogMTtcbn07XG4iLCJ2YXIgTUVUQSA9IHJlcXVpcmUoJy4vX3VpZCcpKCdtZXRhJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBzZXREZXNjID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBpZCA9IDA7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcbnZhciBGUkVFWkUgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG59KTtcbnZhciBzZXRNZXRhID0gZnVuY3Rpb24gKGl0KSB7XG4gIHNldERlc2MoaXQsIE1FVEEsIHsgdmFsdWU6IHtcbiAgICBpOiAnTycgKyArK2lkLCAvLyBvYmplY3QgSURcbiAgICB3OiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcbnZhciBmYXN0S2V5ID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgLy8gcmV0dXJuIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFdLmk7XG59O1xudmFyIGdldFdlYWsgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBoYXNoIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFdLnc7XG59O1xuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICBLRVk6IE1FVEEsXG4gIE5FRUQ6IGZhbHNlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrOiBnZXRXZWFrLFxuICBvbkZyZWV6ZTogb25GcmVlemVcbn07XG4iLCJ2YXIgTWFwID0gcmVxdWlyZSgnLi9lczYubWFwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdtZXRhZGF0YScpO1xudmFyIHN0b3JlID0gc2hhcmVkLnN0b3JlIHx8IChzaGFyZWQuc3RvcmUgPSBuZXcgKHJlcXVpcmUoJy4vZXM2LndlYWstbWFwJykpKCkpO1xuXG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSwgY3JlYXRlKSB7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICBpZiAoIXRhcmdldE1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgc3RvcmUuc2V0KHRhcmdldCwgdGFyZ2V0TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9XG4gIHZhciBrZXlNZXRhZGF0YSA9IHRhcmdldE1ldGFkYXRhLmdldCh0YXJnZXRLZXkpO1xuICBpZiAoIWtleU1ldGFkYXRhKSB7XG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgdGFyZ2V0TWV0YWRhdGEuc2V0KHRhcmdldEtleSwga2V5TWV0YWRhdGEgPSBuZXcgTWFwKCkpO1xuICB9IHJldHVybiBrZXlNZXRhZGF0YTtcbn07XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IG1ldGFkYXRhTWFwLmhhcyhNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbWV0YWRhdGFNYXAuZ2V0KE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSwgTywgUCkge1xuICBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIHRydWUpLnNldChNZXRhZGF0YUtleSwgTWV0YWRhdGFWYWx1ZSk7XG59O1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAodGFyZ2V0LCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgdmFyIGtleXMgPSBbXTtcbiAgaWYgKG1ldGFkYXRhTWFwKSBtZXRhZGF0YU1hcC5mb3JFYWNoKGZ1bmN0aW9uIChfLCBrZXkpIHsga2V5cy5wdXNoKGtleSk7IH0pO1xuICByZXR1cm4ga2V5cztcbn07XG52YXIgdG9NZXRhS2V5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG52YXIgZXhwID0gZnVuY3Rpb24gKE8pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgTyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RvcmU6IHN0b3JlLFxuICBtYXA6IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAsXG4gIGhhczogb3JkaW5hcnlIYXNPd25NZXRhZGF0YSxcbiAgZ2V0OiBvcmRpbmFyeUdldE93bk1ldGFkYXRhLFxuICBzZXQ6IG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEsXG4gIGtleXM6IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzLFxuICBrZXk6IHRvTWV0YUtleSxcbiAgZXhwOiBleHBcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEZvcmNlZCByZXBsYWNlbWVudCBwcm90b3R5cGUgYWNjZXNzb3JzIG1ldGhvZHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fbGlicmFyeScpIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEsgPSBNYXRoLnJhbmRvbSgpO1xuICAvLyBJbiBGRiB0aHJvd3Mgb25seSBkZWZpbmUgbWV0aG9kc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWYsIG5vLXVzZWxlc3MtY2FsbFxuICBfX2RlZmluZVNldHRlcl9fLmNhbGwobnVsbCwgSywgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgZGVsZXRlIHJlcXVpcmUoJy4vX2dsb2JhbCcpW0tdO1xufSk7XG4iLCJ2YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIE8gPSB0b0lPYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBnT1BEKE8sIFApO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKGhhcyhPLCBQKSkgcmV0dXJuIGNyZWF0ZURlc2MoIXBJRS5mLmNhbGwoTywgUCksIE9bUF0pO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBJRTExIGJ1Z2d5IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHdpdGggaWZyYW1lIGFuZCB3aW5kb3dcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG52YXIgd2luZG93TmFtZXMgPSB0eXBlb2Ygd2luZG93ID09ICdvYmplY3QnICYmIHdpbmRvdyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc1xuICA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdykgOiBbXTtcblxudmFyIGdldFdpbmRvd05hbWVzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdPUE4oaXQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHdpbmRvd05hbWVzLnNsaWNlKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHJldHVybiB3aW5kb3dOYW1lcyAmJiB0b1N0cmluZy5jYWxsKGl0KSA9PSAnW29iamVjdCBXaW5kb3ddJyA/IGdldFdpbmRvd05hbWVzKGl0KSA6IGdPUE4odG9JT2JqZWN0KGl0KSk7XG59O1xuIiwiLy8gMTkuMS4yLjcgLyAxNS4yLjMuNCBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpLmNvbmNhdCgnbGVuZ3RoJywgJ3Byb3RvdHlwZScpO1xuXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGhpZGRlbktleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiLy8gbW9zdCBPYmplY3QgbWV0aG9kcyBieSBFUzYgc2hvdWxkIGFjY2VwdCBwcmltaXRpdmVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjKSB7XG4gIHZhciBmbiA9IChjb3JlLk9iamVjdCB8fCB7fSlbS0VZXSB8fCBPYmplY3RbS0VZXTtcbiAgdmFyIGV4cCA9IHt9O1xuICBleHBbS0VZXSA9IGV4ZWMoZm4pO1xuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgZm4oMSk7IH0pLCAnT2JqZWN0JywgZXhwKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBpc0VudW0gPSByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgIHZhciBrZXlzID0gZ2V0S2V5cyhPKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICBrZXkgPSBrZXlzW2krK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKE8sIGtleSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goaXNFbnRyaWVzID8gW2tleSwgT1trZXldXSA6IE9ba2V5XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuIiwiLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgUmVmbGVjdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFJlZmxlY3QgJiYgUmVmbGVjdC5vd25LZXlzIHx8IGZ1bmN0aW9uIG93bktleXMoaXQpIHtcbiAgdmFyIGtleXMgPSBnT1BOLmYoYW5PYmplY3QoaXQpKTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHJldHVybiBnZXRTeW1ib2xzID8ga2V5cy5jb25jYXQoZ2V0U3ltYm9scyhpdCkpIDoga2V5cztcbn07XG4iLCJ2YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUZsb2F0O1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xuXG5tb2R1bGUuZXhwb3J0cyA9IDEgLyAkcGFyc2VGbG9hdChyZXF1aXJlKCcuL19zdHJpbmctd3MnKSArICctMCcpICE9PSAtSW5maW5pdHkgPyBmdW5jdGlvbiBwYXJzZUZsb2F0KHN0cikge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICB2YXIgcmVzdWx0ID0gJHBhcnNlRmxvYXQoc3RyaW5nKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gMCAmJiBzdHJpbmcuY2hhckF0KDApID09ICctJyA/IC0wIDogcmVzdWx0O1xufSA6ICRwYXJzZUZsb2F0O1xuIiwidmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlSW50O1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIHdzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgaGV4ID0gL15bLStdPzBbeFhdLztcblxubW9kdWxlLmV4cG9ydHMgPSAkcGFyc2VJbnQod3MgKyAnMDgnKSAhPT0gOCB8fCAkcGFyc2VJbnQod3MgKyAnMHgxNicpICE9PSAyMiA/IGZ1bmN0aW9uIHBhcnNlSW50KHN0ciwgcmFkaXgpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgcmV0dXJuICRwYXJzZUludChzdHJpbmcsIChyYWRpeCA+Pj4gMCkgfHwgKGhleC50ZXN0KHN0cmluZykgPyAxNiA6IDEwKSk7XG59IDogJHBhcnNlSW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGU6IGZhbHNlLCB2OiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IGU6IHRydWUsIHY6IGUgfTtcbiAgfVxufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgc2FmZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgU1JDID0gcmVxdWlyZSgnLi9fdWlkJykoJ3NyYycpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4vX2Z1bmN0aW9uLXRvLXN0cmluZycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgVFBMID0gKCcnICsgJHRvU3RyaW5nKS5zcGxpdChUT19TVFJJTkcpO1xuXG5yZXF1aXJlKCcuL19jb3JlJykuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2UgaWYgKCFzYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfSBlbHNlIGlmIChPW2tleV0pIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgJHRvU3RyaW5nLmNhbGwodGhpcyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgYnVpbHRpbkV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG5cbiAvLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAodHlwZW9mIGV4ZWMgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVzdWx0ID0gZXhlYy5jYWxsKFIsIFMpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwIGV4ZWMgbWV0aG9kIHJldHVybmVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIE9iamVjdCBvciBudWxsJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKGNsYXNzb2YoUikgIT09ICdSZWdFeHAnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVnRXhwI2V4ZWMgY2FsbGVkIG9uIGluY29tcGF0aWJsZSByZWNlaXZlcicpO1xuICB9XG4gIHJldHVybiBidWlsdGluRXhlYy5jYWxsKFIsIFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlZ2V4cEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcblxudmFyIG5hdGl2ZUV4ZWMgPSBSZWdFeHAucHJvdG90eXBlLmV4ZWM7XG4vLyBUaGlzIGFsd2F5cyByZWZlcnMgdG8gdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiwgYmVjYXVzZSB0aGVcbi8vIFN0cmluZyNyZXBsYWNlIHBvbHlmaWxsIHVzZXMgLi9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzLFxuLy8gd2hpY2ggbG9hZHMgdGhpcyBmaWxlIGJlZm9yZSBwYXRjaGluZyB0aGUgbWV0aG9kLlxudmFyIG5hdGl2ZVJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG5cbnZhciBwYXRjaGVkRXhlYyA9IG5hdGl2ZUV4ZWM7XG5cbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvLFxuICAgICAgcmUyID0gL2IqL2c7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTEsICdhJyk7XG4gIG5hdGl2ZUV4ZWMuY2FsbChyZTIsICdhJyk7XG4gIHJldHVybiByZTFbTEFTVF9JTkRFWF0gIT09IDAgfHwgcmUyW0xBU1RfSU5ERVhdICE9PSAwO1xufSkoKTtcblxuLy8gbm9ucGFydGljaXBhdGluZyBjYXB0dXJpbmcgZ3JvdXAsIGNvcGllZCBmcm9tIGVzNS1zaGltJ3MgU3RyaW5nI3NwbGl0IHBhdGNoLlxudmFyIE5QQ0dfSU5DTFVERUQgPSAvKCk/Py8uZXhlYygnJylbMV0gIT09IHVuZGVmaW5lZDtcblxudmFyIFBBVENIID0gVVBEQVRFU19MQVNUX0lOREVYX1dST05HIHx8IE5QQ0dfSU5DTFVERUQ7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgbGFzdEluZGV4LCByZUNvcHksIG1hdGNoLCBpO1xuXG4gICAgaWYgKE5QQ0dfSU5DTFVERUQpIHtcbiAgICAgIHJlQ29weSA9IG5ldyBSZWdFeHAoJ14nICsgcmUuc291cmNlICsgJyQoPyFcXFxccyknLCByZWdleHBGbGFncy5jYWxsKHJlKSk7XG4gICAgfVxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcpIGxhc3RJbmRleCA9IHJlW0xBU1RfSU5ERVhdO1xuXG4gICAgbWF0Y2ggPSBuYXRpdmVFeGVjLmNhbGwocmUsIHN0cik7XG5cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HICYmIG1hdGNoKSB7XG4gICAgICByZVtMQVNUX0lOREVYXSA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbG9vcC1mdW5jXG4gICAgICBuYXRpdmVSZXBsYWNlLmNhbGwobWF0Y2hbMF0sIHJlQ29weSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aCAtIDI7IGkrKykge1xuICAgICAgICAgIGlmIChhcmd1bWVudHNbaV0gPT09IHVuZGVmaW5lZCkgbWF0Y2hbaV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHJlZ0V4cCwgcmVwbGFjZSkge1xuICB2YXIgcmVwbGFjZXIgPSByZXBsYWNlID09PSBPYmplY3QocmVwbGFjZSkgPyBmdW5jdGlvbiAocGFydCkge1xuICAgIHJldHVybiByZXBsYWNlW3BhcnRdO1xuICB9IDogcmVwbGFjZTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBTdHJpbmcoaXQpLnJlcGxhY2UocmVnRXhwLCByZXBsYWNlcik7XG4gIH07XG59O1xuIiwiLy8gNy4yLjkgU2FtZVZhbHVlKHgsIHkpXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5pcyB8fCBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuIHggPT09IHkgPyB4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSA6IHggIT0geCAmJiB5ICE9IHk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcEZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgIEEgPSBbXTtcbiAgICBpZiAobWFwcGluZykge1xuICAgICAgbiA9IDA7XG4gICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIEEucHVzaCwgQSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGgtLSkgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoTywgcHJvdG8pIHtcbiAgYW5PYmplY3QoTyk7XG4gIGlmICghaXNPYmplY3QocHJvdG8pICYmIHByb3RvICE9PSBudWxsKSB0aHJvdyBUeXBlRXJyb3IocHJvdG8gKyBcIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSFcIik7XG59O1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICBmdW5jdGlvbiAodGVzdCwgYnVnZ3ksIHNldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0ID0gcmVxdWlyZSgnLi9fY3R4JykoRnVuY3Rpb24uY2FsbCwgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICBzZXQodGVzdCwgW10pO1xuICAgICAgICBidWdneSA9ICEodGVzdCBpbnN0YW5jZW9mIEFycmF5KTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgYnVnZ3kgPSB0cnVlOyB9XG4gICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgY2hlY2soTywgcHJvdG8pO1xuICAgICAgICBpZiAoYnVnZ3kpIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgICAgIGVsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIE87XG4gICAgICB9O1xuICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gIGNoZWNrOiBjaGVja1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMjAgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiIsIi8vIGhlbHBlciBmb3IgU3RyaW5nI3tzdGFydHNXaXRoLCBlbmRzV2l0aCwgaW5jbHVkZXN9XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBzZWFyY2hTdHJpbmcsIE5BTUUpIHtcbiAgaWYgKGlzUmVnRXhwKHNlYXJjaFN0cmluZykpIHRocm93IFR5cGVFcnJvcignU3RyaW5nIycgKyBOQU1FICsgXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO1xuICByZXR1cm4gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgcXVvdCA9IC9cIi9nO1xuLy8gQi4yLjMuMi4xIENyZWF0ZUhUTUwoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpXG52YXIgY3JlYXRlSFRNTCA9IGZ1bmN0aW9uIChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICB2YXIgcDEgPSAnPCcgKyB0YWc7XG4gIGlmIChhdHRyaWJ1dGUgIT09ICcnKSBwMSArPSAnICcgKyBhdHRyaWJ1dGUgKyAnPVwiJyArIFN0cmluZyh2YWx1ZSkucmVwbGFjZShxdW90LCAnJnF1b3Q7JykgKyAnXCInO1xuICByZXR1cm4gcDEgKyAnPicgKyBTICsgJzwvJyArIHRhZyArICc+Jztcbn07XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCBleGVjKSB7XG4gIHZhciBPID0ge307XG4gIE9bTkFNRV0gPSBleGVjKGNyZWF0ZUhUTUwpO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdGVzdCA9ICcnW05BTUVdKCdcIicpO1xuICAgIHJldHVybiB0ZXN0ICE9PSB0ZXN0LnRvTG93ZXJDYXNlKCkgfHwgdGVzdC5zcGxpdCgnXCInKS5sZW5ndGggPiAzO1xuICB9KSwgJ1N0cmluZycsIE8pO1xufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgbWF4TGVuZ3RoLCBmaWxsU3RyaW5nLCBsZWZ0KSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICB2YXIgc3RyaW5nTGVuZ3RoID0gUy5sZW5ndGg7XG4gIHZhciBmaWxsU3RyID0gZmlsbFN0cmluZyA9PT0gdW5kZWZpbmVkID8gJyAnIDogU3RyaW5nKGZpbGxTdHJpbmcpO1xuICB2YXIgaW50TWF4TGVuZ3RoID0gdG9MZW5ndGgobWF4TGVuZ3RoKTtcbiAgaWYgKGludE1heExlbmd0aCA8PSBzdHJpbmdMZW5ndGggfHwgZmlsbFN0ciA9PSAnJykgcmV0dXJuIFM7XG4gIHZhciBmaWxsTGVuID0gaW50TWF4TGVuZ3RoIC0gc3RyaW5nTGVuZ3RoO1xuICB2YXIgc3RyaW5nRmlsbGVyID0gcmVwZWF0LmNhbGwoZmlsbFN0ciwgTWF0aC5jZWlsKGZpbGxMZW4gLyBmaWxsU3RyLmxlbmd0aCkpO1xuICBpZiAoc3RyaW5nRmlsbGVyLmxlbmd0aCA+IGZpbGxMZW4pIHN0cmluZ0ZpbGxlciA9IHN0cmluZ0ZpbGxlci5zbGljZSgwLCBmaWxsTGVuKTtcbiAgcmV0dXJuIGxlZnQgPyBzdHJpbmdGaWxsZXIgKyBTIDogUyArIHN0cmluZ0ZpbGxlcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gIHZhciByZXMgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuICBmb3IgKDtuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgcmV0dXJuIHJlcztcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNwYWNlcyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIHNwYWNlID0gJ1snICsgc3BhY2VzICsgJ10nO1xudmFyIG5vbiA9ICdcXHUyMDBiXFx1MDA4NSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgc3BhY2UgKyBzcGFjZSArICcqJyk7XG52YXIgcnRyaW0gPSBSZWdFeHAoc3BhY2UgKyBzcGFjZSArICcqJCcpO1xuXG52YXIgZXhwb3J0ZXIgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBBTElBUykge1xuICB2YXIgZXhwID0ge307XG4gIHZhciBGT1JDRSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gISFzcGFjZXNbS0VZXSgpIHx8IG5vbltLRVldKCkgIT0gbm9uO1xuICB9KTtcbiAgdmFyIGZuID0gZXhwW0tFWV0gPSBGT1JDRSA/IGV4ZWModHJpbSkgOiBzcGFjZXNbS0VZXTtcbiAgaWYgKEFMSUFTKSBleHBbQUxJQVNdID0gZm47XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0UsICdTdHJpbmcnLCBleHApO1xufTtcblxuLy8gMSAtPiBTdHJpbmcjdHJpbUxlZnRcbi8vIDIgLT4gU3RyaW5nI3RyaW1SaWdodFxuLy8gMyAtPiBTdHJpbmcjdHJpbVxudmFyIHRyaW0gPSBleHBvcnRlci50cmltID0gZnVuY3Rpb24gKHN0cmluZywgVFlQRSkge1xuICBzdHJpbmcgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShsdHJpbSwgJycpO1xuICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJ0cmltLCAnJyk7XG4gIHJldHVybiBzdHJpbmc7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydGVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSAnXFx4MDlcXHgwQVxceDBCXFx4MENcXHgwRFxceDIwXFx4QTBcXHUxNjgwXFx1MTgwRVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDMnICtcbiAgJ1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMEFcXHUyMDJGXFx1MjA1RlxcdTMwMDBcXHUyMDI4XFx1MjAyOVxcdUZFRkYnO1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY2VsID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhclRhc2sgPSBnbG9iYWwuY2xlYXJJbW1lZGlhdGU7XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgY291bnRlciA9IDA7XG52YXIgcXVldWUgPSB7fTtcbnZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbnZhciBkZWZlciwgY2hhbm5lbCwgcG9ydDtcbnZhciBydW4gPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpZCA9ICt0aGlzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gIGlmIChxdWV1ZS5oYXNPd25Qcm9wZXJ0eShpZCkpIHtcbiAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgICBmbigpO1xuICB9XG59O1xudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bi5jYWxsKGV2ZW50LmRhdGEpO1xufTtcbi8vIE5vZGUuanMgMC45KyAmIElFMTArIGhhcyBzZXRJbW1lZGlhdGUsIG90aGVyd2lzZTpcbmlmICghc2V0VGFzayB8fCAhY2xlYXJUYXNrKSB7XG4gIHNldFRhc2sgPSBmdW5jdGlvbiBzZXRJbW1lZGlhdGUoZm4pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIHZhciBpID0gMTtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgaW52b2tlKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbiksIGFyZ3MpO1xuICAgIH07XG4gICAgZGVmZXIoY291bnRlcik7XG4gICAgcmV0dXJuIGNvdW50ZXI7XG4gIH07XG4gIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChyZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3coY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBsaXN0ZW5lcjtcbiAgICBkZWZlciA9IGN0eChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0LCAxKTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGdsb2JhbC5wb3N0TWVzc2FnZShpZCArICcnLCAnKicpO1xuICAgIH07XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgaHRtbC5hcHBlbmRDaGlsZChjZWwoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4uY2FsbChpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQoY3R4KHJ1biwgaWQsIDEpLCAwKTtcbiAgICB9O1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXRUYXNrLFxuICBjbGVhcjogY2xlYXJUYXNrXG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbn07XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2luZGV4XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHZhciBudW1iZXIgPSB0b0ludGVnZXIoaXQpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgobnVtYmVyKTtcbiAgaWYgKG51bWJlciAhPT0gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBsZW5ndGghJyk7XG4gIHJldHVybiBsZW5ndGg7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpKSB7XG4gIHZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xuICB2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG4gIHZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG4gIHZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4gIHZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xuICB2YXIgJGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xuICB2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG4gIHZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbiAgdmFyIHByb3BlcnR5RGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbiAgdmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG4gIHZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xuICB2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xuICB2YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbiAgdmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xuICB2YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbiAgdmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbiAgdmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG4gIHZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuICB2YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbiAgdmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xuICB2YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xuICB2YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG4gIHZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xuICB2YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbiAgdmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xuICB2YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4gIHZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbiAgdmFyIGNyZWF0ZUFycmF5SW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpO1xuICB2YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuICB2YXIgQXJyYXlJdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xuICB2YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG4gIHZhciAkaXRlckRldGVjdCA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0Jyk7XG4gIHZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbiAgdmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbiAgdmFyIGFycmF5Q29weVdpdGhpbiA9IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJyk7XG4gIHZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbiAgdmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbiAgdmFyIGRQID0gJERQLmY7XG4gIHZhciBnT1BEID0gJEdPUEQuZjtcbiAgdmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbiAgdmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG4gIHZhciBVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXk7XG4gIHZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuICB2YXIgU0hBUkVEX0JVRkZFUiA9ICdTaGFyZWQnICsgQVJSQVlfQlVGRkVSO1xuICB2YXIgQllURVNfUEVSX0VMRU1FTlQgPSAnQllURVNfUEVSX0VMRU1FTlQnO1xuICB2YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG4gIHZhciBBcnJheVByb3RvID0gQXJyYXlbUFJPVE9UWVBFXTtcbiAgdmFyICRBcnJheUJ1ZmZlciA9ICRidWZmZXIuQXJyYXlCdWZmZXI7XG4gIHZhciAkRGF0YVZpZXcgPSAkYnVmZmVyLkRhdGFWaWV3O1xuICB2YXIgYXJyYXlGb3JFYWNoID0gY3JlYXRlQXJyYXlNZXRob2QoMCk7XG4gIHZhciBhcnJheUZpbHRlciA9IGNyZWF0ZUFycmF5TWV0aG9kKDIpO1xuICB2YXIgYXJyYXlTb21lID0gY3JlYXRlQXJyYXlNZXRob2QoMyk7XG4gIHZhciBhcnJheUV2ZXJ5ID0gY3JlYXRlQXJyYXlNZXRob2QoNCk7XG4gIHZhciBhcnJheUZpbmQgPSBjcmVhdGVBcnJheU1ldGhvZCg1KTtcbiAgdmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG4gIHZhciBhcnJheUluY2x1ZGVzID0gY3JlYXRlQXJyYXlJbmNsdWRlcyh0cnVlKTtcbiAgdmFyIGFycmF5SW5kZXhPZiA9IGNyZWF0ZUFycmF5SW5jbHVkZXMoZmFsc2UpO1xuICB2YXIgYXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9ycy52YWx1ZXM7XG4gIHZhciBhcnJheUtleXMgPSBBcnJheUl0ZXJhdG9ycy5rZXlzO1xuICB2YXIgYXJyYXlFbnRyaWVzID0gQXJyYXlJdGVyYXRvcnMuZW50cmllcztcbiAgdmFyIGFycmF5TGFzdEluZGV4T2YgPSBBcnJheVByb3RvLmxhc3RJbmRleE9mO1xuICB2YXIgYXJyYXlSZWR1Y2UgPSBBcnJheVByb3RvLnJlZHVjZTtcbiAgdmFyIGFycmF5UmVkdWNlUmlnaHQgPSBBcnJheVByb3RvLnJlZHVjZVJpZ2h0O1xuICB2YXIgYXJyYXlKb2luID0gQXJyYXlQcm90by5qb2luO1xuICB2YXIgYXJyYXlTb3J0ID0gQXJyYXlQcm90by5zb3J0O1xuICB2YXIgYXJyYXlTbGljZSA9IEFycmF5UHJvdG8uc2xpY2U7XG4gIHZhciBhcnJheVRvU3RyaW5nID0gQXJyYXlQcm90by50b1N0cmluZztcbiAgdmFyIGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBBcnJheVByb3RvLnRvTG9jYWxlU3RyaW5nO1xuICB2YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG4gIHZhciBUQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG4gIHZhciBUWVBFRF9DT05TVFJVQ1RPUiA9IHVpZCgndHlwZWRfY29uc3RydWN0b3InKTtcbiAgdmFyIERFRl9DT05TVFJVQ1RPUiA9IHVpZCgnZGVmX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBBTExfQ09OU1RSVUNUT1JTID0gJHR5cGVkLkNPTlNUUjtcbiAgdmFyIFRZUEVEX0FSUkFZID0gJHR5cGVkLlRZUEVEO1xuICB2YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xuICB2YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xuXG4gIHZhciAkbWFwID0gY3JlYXRlQXJyYXlNZXRob2QoMSwgZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICAgIHJldHVybiBhbGxvY2F0ZShzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGVuZ3RoKTtcbiAgfSk7XG5cbiAgdmFyIExJVFRMRV9FTkRJQU4gPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KG5ldyBVaW50MTZBcnJheShbMV0pLmJ1ZmZlcilbMF0gPT09IDE7XG4gIH0pO1xuXG4gIHZhciBGT1JDRURfU0VUID0gISFVaW50OEFycmF5ICYmICEhVWludDhBcnJheVtQUk9UT1RZUEVdLnNldCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IFVpbnQ4QXJyYXkoMSkuc2V0KHt9KTtcbiAgfSk7XG5cbiAgdmFyIHRvT2Zmc2V0ID0gZnVuY3Rpb24gKGl0LCBCWVRFUykge1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoaXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfTtcblxuICB2YXIgdmFsaWRhdGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICBpZiAoaXNPYmplY3QoaXQpICYmIFRZUEVEX0FSUkFZIGluIGl0KSByZXR1cm4gaXQ7XG4gICAgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSB0eXBlZCBhcnJheSEnKTtcbiAgfTtcblxuICB2YXIgYWxsb2NhdGUgPSBmdW5jdGlvbiAoQywgbGVuZ3RoKSB7XG4gICAgaWYgKCEoaXNPYmplY3QoQykgJiYgVFlQRURfQ09OU1RSVUNUT1IgaW4gQykpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignSXQgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IhJyk7XG4gICAgfSByZXR1cm4gbmV3IEMobGVuZ3RoKTtcbiAgfTtcblxuICB2YXIgc3BlY2llc0Zyb21MaXN0ID0gZnVuY3Rpb24gKE8sIGxpc3QpIHtcbiAgICByZXR1cm4gZnJvbUxpc3Qoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxpc3QpO1xuICB9O1xuXG4gIHZhciBmcm9tTGlzdCA9IGZ1bmN0aW9uIChDLCBsaXN0KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKEMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiAoaXQsIGtleSwgaW50ZXJuYWwpIHtcbiAgICBkUChpdCwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZFtpbnRlcm5hbF07IH0gfSk7XG4gIH07XG5cbiAgdmFyICRmcm9tID0gZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBmbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3Qoc291cmNlKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGksIGxlbmd0aCwgdmFsdWVzLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICFpc0FycmF5SXRlcihpdGVyRm4pKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHZhbHVlcyA9IFtdLCBpID0gMDsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpKyspIHtcbiAgICAgICAgdmFsdWVzLnB1c2goc3RlcC52YWx1ZSk7XG4gICAgICB9IE8gPSB2YWx1ZXM7XG4gICAgfVxuICAgIGlmIChtYXBwaW5nICYmIGFMZW4gPiAyKSBtYXBmbiA9IGN0eChtYXBmbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCksIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7IGxlbmd0aCA+IGk7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gbWFwcGluZyA/IG1hcGZuKE9baV0sIGkpIDogT1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgJG9mID0gZnVuY3Rpb24gb2YoLyogLi4uaXRlbXMgKi8pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGFyZ3VtZW50c1tpbmRleCsrXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIC8vIGlPUyBTYWZhcmkgNi54IGZhaWxzIGhlcmVcbiAgdmFyIFRPX0xPQ0FMRV9CVUcgPSAhIVVpbnQ4QXJyYXkgJiYgZmFpbHMoZnVuY3Rpb24gKCkgeyBhcnJheVRvTG9jYWxlU3RyaW5nLmNhbGwobmV3IFVpbnQ4QXJyYXkoMSkpOyB9KTtcblxuICB2YXIgJHRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24gdG9Mb2NhbGVTdHJpbmcoKSB7XG4gICAgcmV0dXJuIGFycmF5VG9Mb2NhbGVTdHJpbmcuYXBwbHkoVE9fTE9DQUxFX0JVRyA/IGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSkgOiB2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgfTtcblxuICB2YXIgcHJvdG8gPSB7XG4gICAgY29weVdpdGhpbjogZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0IC8qICwgZW5kICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlDb3B5V2l0aGluLmNhbGwodmFsaWRhdGUodGhpcyksIHRhcmdldCwgc3RhcnQsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RXZlcnkodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbGw6IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCwgZW5kICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUZpbGwuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIHNwZWNpZXNGcm9tTGlzdCh0aGlzLCBhcnJheUZpbHRlcih2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbixcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpKTtcbiAgICB9LFxuICAgIGZpbmQ6IGZ1bmN0aW9uIGZpbmQocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kSW5kZXgodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgYXJyYXlGb3JFYWNoKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluZGV4T2YodmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmNsdWRlcyh2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUxhc3RJbmRleE9mLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbWFwOiBmdW5jdGlvbiBtYXAobWFwZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gJG1hcCh2YWxpZGF0ZSh0aGlzKSwgbWFwZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5UmVkdWNlUmlnaHQuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZXZlcnNlOiBmdW5jdGlvbiByZXZlcnNlKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlKHRoYXQpLmxlbmd0aDtcbiAgICAgIHZhciBtaWRkbGUgPSBNYXRoLmZsb29yKGxlbmd0aCAvIDIpO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciB2YWx1ZTtcbiAgICAgIHdoaWxlIChpbmRleCA8IG1pZGRsZSkge1xuICAgICAgICB2YWx1ZSA9IHRoYXRbaW5kZXhdO1xuICAgICAgICB0aGF0W2luZGV4KytdID0gdGhhdFstLWxlbmd0aF07XG4gICAgICAgIHRoYXRbbGVuZ3RoXSA9IHZhbHVlO1xuICAgICAgfSByZXR1cm4gdGhhdDtcbiAgICB9LFxuICAgIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheVNvbWUodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb3J0LmNhbGwodmFsaWRhdGUodGhpcyksIGNvbXBhcmVmbik7XG4gICAgfSxcbiAgICBzdWJhcnJheTogZnVuY3Rpb24gc3ViYXJyYXkoYmVnaW4sIGVuZCkge1xuICAgICAgdmFyIE8gPSB2YWxpZGF0ZSh0aGlzKTtcbiAgICAgIHZhciBsZW5ndGggPSBPLmxlbmd0aDtcbiAgICAgIHZhciAkYmVnaW4gPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbmd0aCk7XG4gICAgICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSkoXG4gICAgICAgIE8uYnVmZmVyLFxuICAgICAgICBPLmJ5dGVPZmZzZXQgKyAkYmVnaW4gKiBPLkJZVEVTX1BFUl9FTEVNRU5ULFxuICAgICAgICB0b0xlbmd0aCgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpKSAtICRiZWdpbilcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIHZhciAkc2xpY2UgPSBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIHNwZWNpZXNGcm9tTGlzdCh0aGlzLCBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcyksIHN0YXJ0LCBlbmQpKTtcbiAgfTtcblxuICB2YXIgJHNldCA9IGZ1bmN0aW9uIHNldChhcnJheUxpa2UgLyogLCBvZmZzZXQgKi8pIHtcbiAgICB2YWxpZGF0ZSh0aGlzKTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9PZmZzZXQoYXJndW1lbnRzWzFdLCAxKTtcbiAgICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGg7XG4gICAgdmFyIHNyYyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHNyYy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgaWYgKGxlbiArIG9mZnNldCA+IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHdoaWxlIChpbmRleCA8IGxlbikgdGhpc1tvZmZzZXQgKyBpbmRleF0gPSBzcmNbaW5kZXgrK107XG4gIH07XG5cbiAgdmFyICRpdGVyYXRvcnMgPSB7XG4gICAgZW50cmllczogZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICAgIHJldHVybiBhcnJheUVudHJpZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICBrZXlzOiBmdW5jdGlvbiBrZXlzKCkge1xuICAgICAgcmV0dXJuIGFycmF5S2V5cy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5VmFsdWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgaXNUQUluZGV4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHRhcmdldClcbiAgICAgICYmIHRhcmdldFtUWVBFRF9BUlJBWV1cbiAgICAgICYmIHR5cGVvZiBrZXkgIT0gJ3N5bWJvbCdcbiAgICAgICYmIGtleSBpbiB0YXJnZXRcbiAgICAgICYmIFN0cmluZygra2V5KSA9PSBTdHJpbmcoa2V5KTtcbiAgfTtcbiAgdmFyICRnZXREZXNjID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSB7XG4gICAgcmV0dXJuIGlzVEFJbmRleCh0YXJnZXQsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpXG4gICAgICA/IHByb3BlcnR5RGVzYygyLCB0YXJnZXRba2V5XSlcbiAgICAgIDogZ09QRCh0YXJnZXQsIGtleSk7XG4gIH07XG4gIHZhciAkc2V0RGVzYyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgaWYgKGlzVEFJbmRleCh0YXJnZXQsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpXG4gICAgICAmJiBpc09iamVjdChkZXNjKVxuICAgICAgJiYgaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgICAmJiAhaGFzKGRlc2MsICdnZXQnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnc2V0JylcbiAgICAgIC8vIFRPRE86IGFkZCB2YWxpZGF0aW9uIGRlc2NyaXB0b3Igdy9vIGNhbGxpbmcgYWNjZXNzb3JzXG4gICAgICAmJiAhZGVzYy5jb25maWd1cmFibGVcbiAgICAgICYmICghaGFzKGRlc2MsICd3cml0YWJsZScpIHx8IGRlc2Mud3JpdGFibGUpXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnZW51bWVyYWJsZScpIHx8IGRlc2MuZW51bWVyYWJsZSlcbiAgICApIHtcbiAgICAgIHRhcmdldFtrZXldID0gZGVzYy52YWx1ZTtcbiAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfSByZXR1cm4gZFAodGFyZ2V0LCBrZXksIGRlc2MpO1xuICB9O1xuXG4gIGlmICghQUxMX0NPTlNUUlVDVE9SUykge1xuICAgICRHT1BELmYgPSAkZ2V0RGVzYztcbiAgICAkRFAuZiA9ICRzZXREZXNjO1xuICB9XG5cbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhQUxMX0NPTlNUUlVDVE9SUywgJ09iamVjdCcsIHtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXREZXNjLFxuICAgIGRlZmluZVByb3BlcnR5OiAkc2V0RGVzY1xuICB9KTtcblxuICBpZiAoZmFpbHMoZnVuY3Rpb24gKCkgeyBhcnJheVRvU3RyaW5nLmNhbGwoe30pOyB9KSkge1xuICAgIGFycmF5VG9TdHJpbmcgPSBhcnJheVRvTG9jYWxlU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciAkVHlwZWRBcnJheVByb3RvdHlwZSQgPSByZWRlZmluZUFsbCh7fSwgcHJvdG8pO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsICRpdGVyYXRvcnMpO1xuICBoaWRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgSVRFUkFUT1IsICRpdGVyYXRvcnMudmFsdWVzKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCB7XG4gICAgc2xpY2U6ICRzbGljZSxcbiAgICBzZXQ6ICRzZXQsXG4gICAgY29uc3RydWN0b3I6IGZ1bmN0aW9uICgpIHsgLyogbm9vcCAqLyB9LFxuICAgIHRvU3RyaW5nOiBhcnJheVRvU3RyaW5nLFxuICAgIHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmdcbiAgfSk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdidWZmZXInLCAnYicpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZU9mZnNldCcsICdvJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlTGVuZ3RoJywgJ2wnKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2xlbmd0aCcsICdlJyk7XG4gIGRQKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgVEFHLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW1RZUEVEX0FSUkFZXTsgfVxuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHNcbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBCWVRFUywgd3JhcHBlciwgQ0xBTVBFRCkge1xuICAgIENMQU1QRUQgPSAhIUNMQU1QRUQ7XG4gICAgdmFyIE5BTUUgPSBLRVkgKyAoQ0xBTVBFRCA/ICdDbGFtcGVkJyA6ICcnKSArICdBcnJheSc7XG4gICAgdmFyIEdFVFRFUiA9ICdnZXQnICsgS0VZO1xuICAgIHZhciBTRVRURVIgPSAnc2V0JyArIEtFWTtcbiAgICB2YXIgVHlwZWRBcnJheSA9IGdsb2JhbFtOQU1FXTtcbiAgICB2YXIgQmFzZSA9IFR5cGVkQXJyYXkgfHwge307XG4gICAgdmFyIFRBQyA9IFR5cGVkQXJyYXkgJiYgZ2V0UHJvdG90eXBlT2YoVHlwZWRBcnJheSk7XG4gICAgdmFyIEZPUkNFRCA9ICFUeXBlZEFycmF5IHx8ICEkdHlwZWQuQUJWO1xuICAgIHZhciBPID0ge307XG4gICAgdmFyIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5ICYmIFR5cGVkQXJyYXlbUFJPVE9UWVBFXTtcbiAgICB2YXIgZ2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICByZXR1cm4gZGF0YS52W0dFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEubywgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgc2V0dGVyID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgaWYgKENMQU1QRUQpIHZhbHVlID0gKHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSkpIDwgMCA/IDAgOiB2YWx1ZSA+IDB4ZmYgPyAweGZmIDogdmFsdWUgJiAweGZmO1xuICAgICAgZGF0YS52W1NFVFRFUl0oaW5kZXggKiBCWVRFUyArIGRhdGEubywgdmFsdWUsIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIGFkZEVsZW1lbnQgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIGRQKHRoYXQsIGluZGV4LCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBnZXR0ZXIodGhpcywgaW5kZXgpO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiBzZXR0ZXIodGhpcywgaW5kZXgsIHZhbHVlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSB7XG4gICAgICBUeXBlZEFycmF5ID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgZGF0YSwgJG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXksIE5BTUUsICdfZCcpO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgdmFyIGJ1ZmZlciwgYnl0ZUxlbmd0aCwgbGVuZ3RoLCBrbGFzcztcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkge1xuICAgICAgICAgIGxlbmd0aCA9IHRvSW5kZXgoZGF0YSk7XG4gICAgICAgICAgYnl0ZUxlbmd0aCA9IGxlbmd0aCAqIEJZVEVTO1xuICAgICAgICAgIGJ1ZmZlciA9IG5ldyAkQXJyYXlCdWZmZXIoYnl0ZUxlbmd0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIGJ1ZmZlciA9IGRhdGE7XG4gICAgICAgICAgb2Zmc2V0ID0gdG9PZmZzZXQoJG9mZnNldCwgQllURVMpO1xuICAgICAgICAgIHZhciAkbGVuID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIGlmICgkbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmICgkbGVuICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSAkbGVuIC0gb2Zmc2V0O1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggPCAwKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ5dGVMZW5ndGggPSB0b0xlbmd0aCgkbGVuZ3RoKSAqIEJZVEVTO1xuICAgICAgICAgICAgaWYgKGJ5dGVMZW5ndGggKyBvZmZzZXQgPiAkbGVuKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxlbmd0aCA9IGJ5dGVMZW5ndGggLyBCWVRFUztcbiAgICAgICAgfSBlbHNlIGlmIChUWVBFRF9BUlJBWSBpbiBkYXRhKSB7XG4gICAgICAgICAgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAkZnJvbS5jYWxsKFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGhpZGUodGhhdCwgJ19kJywge1xuICAgICAgICAgIGI6IGJ1ZmZlcixcbiAgICAgICAgICBvOiBvZmZzZXQsXG4gICAgICAgICAgbDogYnl0ZUxlbmd0aCxcbiAgICAgICAgICBlOiBsZW5ndGgsXG4gICAgICAgICAgdjogbmV3ICREYXRhVmlldyhidWZmZXIpXG4gICAgICAgIH0pO1xuICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIGFkZEVsZW1lbnQodGhhdCwgaW5kZXgrKyk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBUeXBlZEFycmF5W1BST1RPVFlQRV0gPSBjcmVhdGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkKTtcbiAgICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgVHlwZWRBcnJheSk7XG4gICAgfSBlbHNlIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheSgxKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIH0pIHx8ICEkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KG51bGwpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KGl0ZXIpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIH0sIHRydWUpKSB7XG4gICAgICBUeXBlZEFycmF5ID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgZGF0YSwgJG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXksIE5BTUUpO1xuICAgICAgICB2YXIga2xhc3M7XG4gICAgICAgIC8vIGB3c2AgbW9kdWxlIGJ1ZywgdGVtcG9yYXJpbHkgcmVtb3ZlIHZhbGlkYXRpb24gbGVuZ3RoIGZvciBVaW50OEFycmF5XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJzb2NrZXRzL3dzL3B1bGwvNjQ1XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHJldHVybiBuZXcgQmFzZSh0b0luZGV4KGRhdGEpKTtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICByZXR1cm4gJGxlbmd0aCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSwgJGxlbmd0aClcbiAgICAgICAgICAgIDogJG9mZnNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpKVxuICAgICAgICAgICAgICA6IG5ldyBCYXNlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChUWVBFRF9BUlJBWSBpbiBkYXRhKSByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIHJldHVybiAkZnJvbS5jYWxsKFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgfSk7XG4gICAgICBhcnJheUZvckVhY2goVEFDICE9PSBGdW5jdGlvbi5wcm90b3R5cGUgPyBnT1BOKEJhc2UpLmNvbmNhdChnT1BOKFRBQykpIDogZ09QTihCYXNlKSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gVHlwZWRBcnJheSkpIGhpZGUoVHlwZWRBcnJheSwga2V5LCBCYXNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5W1BST1RPVFlQRV0gPSBUeXBlZEFycmF5UHJvdG90eXBlO1xuICAgICAgaWYgKCFMSUJSQVJZKSBUeXBlZEFycmF5UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHlwZWRBcnJheTtcbiAgICB9XG4gICAgdmFyICRuYXRpdmVJdGVyYXRvciA9IFR5cGVkQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdO1xuICAgIHZhciBDT1JSRUNUX0lURVJfTkFNRSA9ICEhJG5hdGl2ZUl0ZXJhdG9yXG4gICAgICAmJiAoJG5hdGl2ZUl0ZXJhdG9yLm5hbWUgPT0gJ3ZhbHVlcycgfHwgJG5hdGl2ZUl0ZXJhdG9yLm5hbWUgPT0gdW5kZWZpbmVkKTtcbiAgICB2YXIgJGl0ZXJhdG9yID0gJGl0ZXJhdG9ycy52YWx1ZXM7XG4gICAgaGlkZShUeXBlZEFycmF5LCBUWVBFRF9DT05TVFJVQ1RPUiwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBUWVBFRF9BUlJBWSwgTkFNRSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIERFRl9DT05TVFJVQ1RPUiwgVHlwZWRBcnJheSk7XG5cbiAgICBpZiAoQ0xBTVBFRCA/IG5ldyBUeXBlZEFycmF5KDEpW1RBR10gIT0gTkFNRSA6ICEoVEFHIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSB7XG4gICAgICBkUChUeXBlZEFycmF5UHJvdG90eXBlLCBUQUcsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBOQU1FOyB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBPW05BTUVdID0gVHlwZWRBcnJheTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKFR5cGVkQXJyYXkgIT0gQmFzZSksIE8pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlMsIE5BTUUsIHtcbiAgICAgIEJZVEVTX1BFUl9FTEVNRU5UOiBCWVRFU1xuICAgIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IEJhc2Uub2YuY2FsbChUeXBlZEFycmF5LCAxKTsgfSksIE5BTUUsIHtcbiAgICAgIGZyb206ICRmcm9tLFxuICAgICAgb2Y6ICRvZlxuICAgIH0pO1xuXG4gICAgaWYgKCEoQllURVNfUEVSX0VMRU1FTlQgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgQllURVNfUEVSX0VMRU1FTlQsIEJZVEVTKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QLCBOQU1FLCBwcm90byk7XG5cbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRURfU0VULCBOQU1FLCB7IHNldDogJHNldCB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIUNPUlJFQ1RfSVRFUl9OQU1FLCBOQU1FLCAkaXRlcmF0b3JzKTtcblxuICAgIGlmICghTElCUkFSWSAmJiBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nICE9IGFycmF5VG9TdHJpbmcpIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgPSBhcnJheVRvU3RyaW5nO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgxKS5zbGljZSgpO1xuICAgIH0pLCBOQU1FLCB7IHNsaWNlOiAkc2xpY2UgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gWzEsIDJdLnRvTG9jYWxlU3RyaW5nKCkgIT0gbmV3IFR5cGVkQXJyYXkoWzEsIDJdKS50b0xvY2FsZVN0cmluZygpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsIDJdKTtcbiAgICB9KSksIE5BTUUsIHsgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZyB9KTtcblxuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IENPUlJFQ1RfSVRFUl9OQU1FID8gJG5hdGl2ZUl0ZXJhdG9yIDogJGl0ZXJhdG9yO1xuICAgIGlmICghTElCUkFSWSAmJiAhQ09SUkVDVF9JVEVSX05BTUUpIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgSVRFUkFUT1IsICRpdGVyYXRvcik7XG4gIH07XG59IGVsc2UgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW5kZXggPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGFycmF5RmlsbCA9IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCEnO1xudmFyICRBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIE1hdGggPSBnbG9iYWwuTWF0aDtcbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2hhZG93LXJlc3RyaWN0ZWQtbmFtZXNcbnZhciBJbmZpbml0eSA9IGdsb2JhbC5JbmZpbml0eTtcbnZhciBCYXNlQnVmZmVyID0gJEFycmF5QnVmZmVyO1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcbnZhciBCVUZGRVIgPSAnYnVmZmVyJztcbnZhciBCWVRFX0xFTkdUSCA9ICdieXRlTGVuZ3RoJztcbnZhciBCWVRFX09GRlNFVCA9ICdieXRlT2Zmc2V0JztcbnZhciAkQlVGRkVSID0gREVTQ1JJUFRPUlMgPyAnX2InIDogQlVGRkVSO1xudmFyICRMRU5HVEggPSBERVNDUklQVE9SUyA/ICdfbCcgOiBCWVRFX0xFTkdUSDtcbnZhciAkT0ZGU0VUID0gREVTQ1JJUFRPUlMgPyAnX28nIDogQllURV9PRkZTRVQ7XG5cbi8vIElFRUU3NTQgY29udmVyc2lvbnMgYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9pZWVlNzU0XG5mdW5jdGlvbiBwYWNrSUVFRTc1NCh2YWx1ZSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSBuZXcgQXJyYXkobkJ5dGVzKTtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1MZW4gPT09IDIzID8gcG93KDIsIC0yNCkgLSBwb3coMiwgLTc3KSA6IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgdmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCA/IDEgOiAwO1xuICB2YXIgZSwgbSwgYztcbiAgdmFsdWUgPSBhYnModmFsdWUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmICh2YWx1ZSAhPSB2YWx1ZSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgbSA9IHZhbHVlICE9IHZhbHVlID8gMSA6IDA7XG4gICAgZSA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZSA9IGZsb29yKGxvZyh2YWx1ZSkgLyBMTjIpO1xuICAgIGlmICh2YWx1ZSAqIChjID0gcG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrKztcbiAgICAgIGMgLz0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMDtcbiAgICAgIGUgPSBlTWF4O1xuICAgIH0gZWxzZSBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIG0gPSAodmFsdWUgKiBjIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gZSArIGVCaWFzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gdmFsdWUgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSAwO1xuICAgIH1cbiAgfVxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbaSsrXSA9IG0gJiAyNTUsIG0gLz0gMjU2LCBtTGVuIC09IDgpO1xuICBlID0gZSA8PCBtTGVuIHwgbTtcbiAgZUxlbiArPSBtTGVuO1xuICBmb3IgKDsgZUxlbiA+IDA7IGJ1ZmZlcltpKytdID0gZSAmIDI1NSwgZSAvPSAyNTYsIGVMZW4gLT0gOCk7XG4gIGJ1ZmZlclstLWldIHw9IHMgKiAxMjg7XG4gIHJldHVybiBidWZmZXI7XG59XG5mdW5jdGlvbiB1bnBhY2tJRUVFNzU0KGJ1ZmZlciwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBlTGVuIC0gNztcbiAgdmFyIGkgPSBuQnl0ZXMgLSAxO1xuICB2YXIgcyA9IGJ1ZmZlcltpLS1dO1xuICB2YXIgZSA9IHMgJiAxMjc7XG4gIHZhciBtO1xuICBzID4+PSA3O1xuICBmb3IgKDsgbkJpdHMgPiAwOyBlID0gZSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgbSA9IGUgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZSA+Pj0gLW5CaXRzO1xuICBuQml0cyArPSBtTGVuO1xuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltpXSwgaS0tLCBuQml0cyAtPSA4KTtcbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6IHMgPyAtSW5maW5pdHkgOiBJbmZpbml0eTtcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIHBvdygyLCBtTGVuKTtcbiAgICBlID0gZSAtIGVCaWFzO1xuICB9IHJldHVybiAocyA/IC0xIDogMSkgKiBtICogcG93KDIsIGUgLSBtTGVuKTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrSTMyKGJ5dGVzKSB7XG4gIHJldHVybiBieXRlc1szXSA8PCAyNCB8IGJ5dGVzWzJdIDw8IDE2IHwgYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xufVxuZnVuY3Rpb24gcGFja0k4KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMTYoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tJMzIoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmYsIGl0ID4+IDggJiAweGZmLCBpdCA+PiAxNiAmIDB4ZmYsIGl0ID4+IDI0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrRjY0KGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgNTIsIDgpO1xufVxuZnVuY3Rpb24gcGFja0YzMihpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDIzLCA0KTtcbn1cblxuZnVuY3Rpb24gYWRkR2V0dGVyKEMsIGtleSwgaW50ZXJuYWwpIHtcbiAgZFAoQ1tQUk9UT1RZUEVdLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzW2ludGVybmFsXTsgfSB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IHN0b3JlLnNsaWNlKHN0YXJ0LCBzdGFydCArIGJ5dGVzKTtcbiAgcmV0dXJuIGlzTGl0dGxlRW5kaWFuID8gcGFjayA6IHBhY2sucmV2ZXJzZSgpO1xufVxuZnVuY3Rpb24gc2V0KHZpZXcsIGJ5dGVzLCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBjb252ZXJzaW9uKCt2YWx1ZSk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKykgc3RvcmVbc3RhcnQgKyBpXSA9IHBhY2tbaXNMaXR0bGVFbmRpYW4gPyBpIDogYnl0ZXMgLSBpIC0gMV07XG59XG5cbmlmICghJHR5cGVkLkFCVikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICB0aGlzLl9iID0gYXJyYXlGaWxsLmNhbGwobmV3IEFycmF5KGJ5dGVMZW5ndGgpLCAwKTtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICREYXRhVmlldywgREFUQV9WSUVXKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgJEFycmF5QnVmZmVyLCBEQVRBX1ZJRVcpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJbJExFTkdUSF07XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihieXRlT2Zmc2V0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB0aGlzWyRCVUZGRVJdID0gYnVmZmVyO1xuICAgIHRoaXNbJE9GRlNFVF0gPSBvZmZzZXQ7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJVRkZFUiwgJ19iJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9MRU5HVEgsICdfbCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfT0ZGU0VULCAnX28nKTtcbiAgfVxuXG4gIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgZ2V0SW50ODogZnVuY3Rpb24gZ2V0SW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdIDw8IDI0ID4+IDI0O1xuICAgIH0sXG4gICAgZ2V0VWludDg6IGZ1bmN0aW9uIGdldFVpbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF07XG4gICAgfSxcbiAgICBnZXRJbnQxNjogZnVuY3Rpb24gZ2V0SW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDIzLCA0KTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSksIDUyLCA4KTtcbiAgICB9LFxuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0RmxvYXQ2NDogZnVuY3Rpb24gc2V0RmxvYXQ2NChieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIHBhY2tGNjQsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH1cbiAgfSk7XG59IGVsc2Uge1xuICBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAkQXJyYXlCdWZmZXIoMSk7XG4gIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoTmFOKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICByZXR1cm4gJEFycmF5QnVmZmVyLm5hbWUgIT0gQVJSQVlfQlVGRkVSO1xuICB9KSkge1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIpO1xuICAgICAgcmV0dXJuIG5ldyBCYXNlQnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcbiAgICB2YXIgQXJyYXlCdWZmZXJQcm90byA9ICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQmFzZUJ1ZmZlcltQUk9UT1RZUEVdO1xuICAgIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2VCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSBoaWRlKCRBcnJheUJ1ZmZlciwga2V5LCBCYXNlQnVmZmVyW2tleV0pO1xuICAgIH1cbiAgICBpZiAoIUxJQlJBUlkpIEFycmF5QnVmZmVyUHJvdG8uY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH1cbiAgLy8gaU9TIFNhZmFyaSA3LnggYnVnXG4gIHZhciB2aWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gJERhdGFWaWV3W1BST1RPVFlQRV0uc2V0SW50ODtcbiAgdmlldy5zZXRJbnQ4KDAsIDIxNDc0ODM2NDgpO1xuICB2aWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh2aWV3LmdldEludDgoMCkgfHwgIXZpZXcuZ2V0SW50OCgxKSkgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB0cnVlKTtcbn1cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcbmhpZGUoJERhdGFWaWV3W1BST1RPVFlQRV0sICR0eXBlZC5WSUVXLCB0cnVlKTtcbmV4cG9ydHNbQVJSQVlfQlVGRkVSXSA9ICRBcnJheUJ1ZmZlcjtcbmV4cG9ydHNbREFUQV9WSUVXXSA9ICREYXRhVmlldztcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFRZUEVEID0gdWlkKCd0eXBlZF9hcnJheScpO1xudmFyIFZJRVcgPSB1aWQoJ3ZpZXcnKTtcbnZhciBBQlYgPSAhIShnbG9iYWwuQXJyYXlCdWZmZXIgJiYgZ2xvYmFsLkRhdGFWaWV3KTtcbnZhciBDT05TVFIgPSBBQlY7XG52YXIgaSA9IDA7XG52YXIgbCA9IDk7XG52YXIgVHlwZWQ7XG5cbnZhciBUeXBlZEFycmF5Q29uc3RydWN0b3JzID0gKFxuICAnSW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXknXG4pLnNwbGl0KCcsJyk7XG5cbndoaWxlIChpIDwgbCkge1xuICBpZiAoVHlwZWQgPSBnbG9iYWxbVHlwZWRBcnJheUNvbnN0cnVjdG9yc1tpKytdXSkge1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBUWVBFRCwgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICB9IGVsc2UgQ09OU1RSID0gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBBQlY6IEFCVixcbiAgQ09OU1RSOiBDT05TVFIsXG4gIFRZUEVEOiBUWVBFRCxcbiAgVklFVzogVklFV1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwgeyB2YWx1ZTogd2tzRXh0LmYobmFtZSkgfSk7XG59O1xuIiwiZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fd2tzJyk7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZW5qYW1pbmdyL1JleEV4cC5lc2NhcGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlID0gcmVxdWlyZSgnLi9fcmVwbGFjZXInKSgvW1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWdFeHAnLCB7IGVzY2FwZTogZnVuY3Rpb24gZXNjYXBlKGl0KSB7IHJldHVybiAkcmUoaXQpOyB9IH0pO1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBjb3B5V2l0aGluOiByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnY29weVdpdGhpbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXZlcnkgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5ldmVyeSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjUgLyAxNS40LjQuMTYgQXJyYXkucHJvdG90eXBlLmV2ZXJ5KGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGV2ZXJ5OiBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZXZlcnkodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGZpbGw6IHJlcXVpcmUoJy4vX2FycmF5LWZpbGwnKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZpbGwnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgyKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZpbHRlciwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjcgLyAxNS40LjQuMjAgQXJyYXkucHJvdG90eXBlLmZpbHRlcihjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmaWx0ZXI6IGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZmlsdGVyKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjkgQXJyYXkucHJvdG90eXBlLmZpbmRJbmRleChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDYpO1xudmFyIEtFWSA9ICdmaW5kSW5kZXgnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjggQXJyYXkucHJvdG90eXBlLmZpbmQocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg1KTtcbnZhciBLRVkgPSAnZmluZCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZDogZnVuY3Rpb24gZmluZChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZvckVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgU1RSSUNUID0gcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmZvckVhY2gsIHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFTVFJJQ1QsICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjEwIC8gMTUuNC40LjE4IEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZvckVhY2godGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7IEFycmF5LmZyb20oaXRlcik7IH0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4xIEFycmF5LmZyb20oYXJyYXlMaWtlLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcbiAgICAvLyBpZiBvYmplY3QgaXNuJ3QgaXRlcmFibGUgb3IgaXQncyBhcnJheSB3aXRoIGRlZmF1bHQgaXRlcmF0b3IgLSB1c2Ugc2ltcGxlIGNhc2VcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhKEMgPT0gQXJyYXkgJiYgaXNBcnJheUl0ZXIoaXRlckZuKSkpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGluZGV4O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyICRuYXRpdmUgPSBbXS5pbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhISRuYXRpdmUgJiYgMSAvIFsxXS5pbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjExIC8gMTUuNC40LjE0IEFycmF5LnByb3RvdHlwZS5pbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiBORUdBVElWRV9aRVJPXG4gICAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgICA/ICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwXG4gICAgICA6ICRpbmRleE9mKHRoaXMsIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4yLjIgLyAxNS40LjMuMiBBcnJheS5pc0FycmF5KGFyZylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnQXJyYXknLCB7IGlzQXJyYXk6IHJlcXVpcmUoJy4vX2lzLWFycmF5JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5qb2luKHNlcGFyYXRvcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5Sm9pbiA9IFtdLmpvaW47XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBzdHJpbmdzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChyZXF1aXJlKCcuL19pb2JqZWN0JykgIT0gT2JqZWN0IHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoYXJyYXlKb2luKSksICdBcnJheScsIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gYXJyYXlKb2luLmNhbGwodG9JT2JqZWN0KHRoaXMpLCBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCA/ICcsJyA6IHNlcGFyYXRvcik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgJG5hdGl2ZSA9IFtdLmxhc3RJbmRleE9mO1xudmFyIE5FR0FUSVZFX1pFUk8gPSAhISRuYXRpdmUgJiYgMSAvIFsxXS5sYXN0SW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNCAvIDE1LjQuNC4xNSBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IEBbKi0xXSAqLykge1xuICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICBpZiAoTkVHQVRJVkVfWkVSTykgcmV0dXJuICRuYXRpdmUuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCAwO1xuICAgIHZhciBPID0gdG9JT2JqZWN0KHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gbGVuZ3RoIC0gMTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIGluZGV4ID0gTWF0aC5taW4oaW5kZXgsIHRvSW50ZWdlcihhcmd1bWVudHNbMV0pKTtcbiAgICBpZiAoaW5kZXggPCAwKSBpbmRleCA9IGxlbmd0aCArIGluZGV4O1xuICAgIGZvciAoO2luZGV4ID49IDA7IGluZGV4LS0pIGlmIChpbmRleCBpbiBPKSBpZiAoT1tpbmRleF0gPT09IHNlYXJjaEVsZW1lbnQpIHJldHVybiBpbmRleCB8fCAwO1xuICAgIHJldHVybiAtMTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5tYXAsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xNSAvIDE1LjQuNC4xOSBBcnJheS5wcm90b3R5cGUubWFwKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIG1hcDogZnVuY3Rpb24gbWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRtYXAodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIFdlYktpdCBBcnJheS5vZiBpc24ndCBnZW5lcmljXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKEFycmF5Lm9mLmNhbGwoRikgaW5zdGFuY2VvZiBGKTtcbn0pLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMi4zIEFycmF5Lm9mKCAuLi5pdGVtcylcbiAgb2Y6IGZ1bmN0aW9uIG9mKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gbmV3ICh0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5KShhTGVuKTtcbiAgICB3aGlsZSAoYUxlbiA+IGluZGV4KSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBhTGVuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2VSaWdodCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE5IC8gMTUuNC40LjIyIEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodChjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE4IC8gMTUuNC40LjIxIEFycmF5LnByb3RvdHlwZS5yZWR1Y2UoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7XG4gICAgcmV0dXJuICRyZWR1Y2UodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCwgYXJndW1lbnRzWzFdLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG5cbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGlmIChodG1sKSBhcnJheVNsaWNlLmNhbGwoaHRtbCk7XG59KSwgJ0FycmF5Jywge1xuICBzbGljZTogZnVuY3Rpb24gc2xpY2UoYmVnaW4sIGVuZCkge1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGlzLmxlbmd0aCk7XG4gICAgdmFyIGtsYXNzID0gY29mKHRoaXMpO1xuICAgIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kO1xuICAgIGlmIChrbGFzcyA9PSAnQXJyYXknKSByZXR1cm4gYXJyYXlTbGljZS5jYWxsKHRoaXMsIGJlZ2luLCBlbmQpO1xuICAgIHZhciBzdGFydCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuKTtcbiAgICB2YXIgdXBUbyA9IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbik7XG4gICAgdmFyIHNpemUgPSB0b0xlbmd0aCh1cFRvIC0gc3RhcnQpO1xuICAgIHZhciBjbG9uZWQgPSBuZXcgQXJyYXkoc2l6ZSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDwgc2l6ZTsgaSsrKSBjbG9uZWRbaV0gPSBrbGFzcyA9PSAnU3RyaW5nJ1xuICAgICAgPyB0aGlzLmNoYXJBdChzdGFydCArIGkpXG4gICAgICA6IHRoaXNbc3RhcnQgKyBpXTtcbiAgICByZXR1cm4gY2xvbmVkO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5zb21lLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjMgLyAxNS40LjQuMTcgQXJyYXkucHJvdG90eXBlLnNvbWUoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkc29tZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRzb3J0ID0gW10uc29ydDtcbnZhciB0ZXN0ID0gWzEsIDIsIDNdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFOC1cbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCBidWdcbiAgdGVzdC5zb3J0KG51bGwpO1xuICAvLyBPbGQgV2ViS2l0XG59KSB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRzb3J0KSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjI1IEFycmF5LnByb3RvdHlwZS5zb3J0KGNvbXBhcmVmbilcbiAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICByZXR1cm4gY29tcGFyZWZuID09PSB1bmRlZmluZWRcbiAgICAgID8gJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSlcbiAgICAgIDogJHNvcnQuY2FsbCh0b09iamVjdCh0aGlzKSwgYUZ1bmN0aW9uKGNvbXBhcmVmbikpO1xuICB9XG59KTtcbiIsInJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ0FycmF5Jyk7XG4iLCIvLyAyMC4zLjMuMSAvIDE1LjkuNC40IERhdGUubm93KClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRGF0ZScsIHsgbm93OiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgRGF0ZSgpLmdldFRpbWUoKTsgfSB9KTtcbiIsIi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSVNPU3RyaW5nID0gcmVxdWlyZSgnLi9fZGF0ZS10by1pc28tc3RyaW5nJyk7XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcgIT09IHRvSVNPU3RyaW5nKSwgJ0RhdGUnLCB7XG4gIHRvSVNPU3RyaW5nOiB0b0lTT1N0cmluZ1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKE5hTikudG9KU09OKCkgIT09IG51bGxcbiAgICB8fCBEYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7IHRvSVNPU3RyaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9IH0pICE9PSAxO1xufSksICdEYXRlJywge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oa2V5KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgcHYgPSB0b1ByaW1pdGl2ZShPKTtcbiAgICByZXR1cm4gdHlwZW9mIHB2ID09ICdudW1iZXInICYmICFpc0Zpbml0ZShwdikgPyBudWxsIDogTy50b0lTT1N0cmluZygpO1xuICB9XG59KTtcbiIsInZhciBUT19QUklNSVRJVkUgPSByZXF1aXJlKCcuL193a3MnKSgndG9QcmltaXRpdmUnKTtcbnZhciBwcm90byA9IERhdGUucHJvdG90eXBlO1xuXG5pZiAoIShUT19QUklNSVRJVkUgaW4gcHJvdG8pKSByZXF1aXJlKCcuL19oaWRlJykocHJvdG8sIFRPX1BSSU1JVElWRSwgcmVxdWlyZSgnLi9fZGF0ZS10by1wcmltaXRpdmUnKSk7XG4iLCJ2YXIgRGF0ZVByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG52YXIgSU5WQUxJRF9EQVRFID0gJ0ludmFsaWQgRGF0ZSc7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSBEYXRlUHJvdG9bVE9fU1RSSU5HXTtcbnZhciBnZXRUaW1lID0gRGF0ZVByb3RvLmdldFRpbWU7XG5pZiAobmV3IERhdGUoTmFOKSArICcnICE9IElOVkFMSURfREFURSkge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKERhdGVQcm90bywgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgdmFsdWUgPSBnZXRUaW1lLmNhbGwodGhpcyk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyAkdG9TdHJpbmcuY2FsbCh0aGlzKSA6IElOVkFMSURfREFURTtcbiAgfSk7XG59XG4iLCIvLyAxOS4yLjMuMiAvIDE1LjMuNC41IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKHRoaXNBcmcsIGFyZ3MuLi4pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0Z1bmN0aW9uJywgeyBiaW5kOiByZXF1aXJlKCcuL19iaW5kJykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBIQVNfSU5TVEFOQ0UgPSByZXF1aXJlKCcuL193a3MnKSgnaGFzSW5zdGFuY2UnKTtcbnZhciBGdW5jdGlvblByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuLy8gMTkuMi4zLjYgRnVuY3Rpb24ucHJvdG90eXBlW0BAaGFzSW5zdGFuY2VdKFYpXG5pZiAoIShIQVNfSU5TVEFOQ0UgaW4gRnVuY3Rpb25Qcm90bykpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoRnVuY3Rpb25Qcm90bywgSEFTX0lOU1RBTkNFLCB7IHZhbHVlOiBmdW5jdGlvbiAoTykge1xuICBpZiAodHlwZW9mIHRoaXMgIT0gJ2Z1bmN0aW9uJyB8fCAhaXNPYmplY3QoTykpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFpc09iamVjdCh0aGlzLnByb3RvdHlwZSkpIHJldHVybiBPIGluc3RhbmNlb2YgdGhpcztcbiAgLy8gZm9yIGVudmlyb25tZW50IHcvbyBuYXRpdmUgYEBAaGFzSW5zdGFuY2VgIGxvZ2ljIGVub3VnaCBgaW5zdGFuY2VvZmAsIGJ1dCBhZGQgdGhpczpcbiAgd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSkgaWYgKHRoaXMucHJvdG90eXBlID09PSBPKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufSB9KTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgRlByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIG5hbWVSRSA9IC9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLztcbnZhciBOQU1FID0gJ25hbWUnO1xuXG4vLyAxOS4yLjQuMiBuYW1lXG5OQU1FIGluIEZQcm90byB8fCByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIGRQKEZQcm90bywgTkFNRSwge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKCcnICsgdGhpcykubWF0Y2gobmFtZVJFKVsxXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE1BUCA9ICdNYXAnO1xuXG4vLyAyMy4xIE1hcCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShNQVAsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjEuMy42IE1hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gc3Ryb25nLmdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSk7XG4gICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnY7XG4gIH0sXG4gIC8vIDIzLjEuMy45IE1hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZywgdHJ1ZSk7XG4iLCIvLyAyMC4yLjIuMyBNYXRoLmFjb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGxvZzFwID0gcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpO1xudmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG52YXIgJGFjb3NoID0gTWF0aC5hY29zaDtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhY29zaFxuICAvLyBWOCBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNTA5XG4gICYmIE1hdGguZmxvb3IoJGFjb3NoKE51bWJlci5NQVhfVkFMVUUpKSA9PSA3MTBcbiAgLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFjb3NoKEluZmluaXR5KSAtPiBOYU5cbiAgJiYgJGFjb3NoKEluZmluaXR5KSA9PSBJbmZpbml0eVxuKSwgJ01hdGgnLCB7XG4gIGFjb3NoOiBmdW5jdGlvbiBhY29zaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpIDwgMSA/IE5hTiA6IHggPiA5NDkwNjI2NS42MjQyNTE1NlxuICAgICAgPyBNYXRoLmxvZyh4KSArIE1hdGguTE4yXG4gICAgICA6IGxvZzFwKHggLSAxICsgc3FydCh4IC0gMSkgKiBzcXJ0KHggKyAxKSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjUgTWF0aC5hc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXNpbmggPSBNYXRoLmFzaW5oO1xuXG5mdW5jdGlvbiBhc2luaCh4KSB7XG4gIHJldHVybiAhaXNGaW5pdGUoeCA9ICt4KSB8fCB4ID09IDAgPyB4IDogeCA8IDAgPyAtYXNpbmgoLXgpIDogTWF0aC5sb2coeCArIE1hdGguc3FydCh4ICogeCArIDEpKTtcbn1cblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmFzaW5oKDApIC0+IC0wXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFzaW5oICYmIDEgLyAkYXNpbmgoMCkgPiAwKSwgJ01hdGgnLCB7IGFzaW5oOiBhc2luaCB9KTtcbiIsIi8vIDIwLjIuMi43IE1hdGguYXRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0YW5oID0gTWF0aC5hdGFuaDtcblxuLy8gVG9yIEJyb3dzZXIgYnVnOiBNYXRoLmF0YW5oKC0wKSAtPiAwXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGF0YW5oICYmIDEgLyAkYXRhbmgoLTApIDwgMCksICdNYXRoJywge1xuICBhdGFuaDogZnVuY3Rpb24gYXRhbmgoeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IE1hdGgubG9nKCgxICsgeCkgLyAoMSAtIHgpKSAvIDI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjkgTWF0aC5jYnJ0KHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNpZ24gPSByZXF1aXJlKCcuL19tYXRoLXNpZ24nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjYnJ0OiBmdW5jdGlvbiBjYnJ0KHgpIHtcbiAgICByZXR1cm4gc2lnbih4ID0gK3gpICogTWF0aC5wb3coTWF0aC5hYnMoeCksIDEgLyAzKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTEgTWF0aC5jbHozMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbHozMjogZnVuY3Rpb24gY2x6MzIoeCkge1xuICAgIHJldHVybiAoeCA+Pj49IDApID8gMzEgLSBNYXRoLmZsb29yKE1hdGgubG9nKHggKyAwLjUpICogTWF0aC5MT0cyRSkgOiAzMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTIgTWF0aC5jb3NoKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNvc2g6IGZ1bmN0aW9uIGNvc2goeCkge1xuICAgIHJldHVybiAoZXhwKHggPSAreCkgKyBleHAoLXgpKSAvIDI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICgkZXhwbTEgIT0gTWF0aC5leHBtMSksICdNYXRoJywgeyBleHBtMTogJGV4cG0xIH0pO1xuIiwiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGZyb3VuZDogcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKSB9KTtcbiIsIi8vIDIwLjIuMi4xNyBNYXRoLmh5cG90KFt2YWx1ZTFbLCB2YWx1ZTJbLCDigKYgXV1dKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBoeXBvdDogZnVuY3Rpb24gaHlwb3QodmFsdWUxLCB2YWx1ZTIpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciBzdW0gPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGxhcmcgPSAwO1xuICAgIHZhciBhcmcsIGRpdjtcbiAgICB3aGlsZSAoaSA8IGFMZW4pIHtcbiAgICAgIGFyZyA9IGFicyhhcmd1bWVudHNbaSsrXSk7XG4gICAgICBpZiAobGFyZyA8IGFyZykge1xuICAgICAgICBkaXYgPSBsYXJnIC8gYXJnO1xuICAgICAgICBzdW0gPSBzdW0gKiBkaXYgKiBkaXYgKyAxO1xuICAgICAgICBsYXJnID0gYXJnO1xuICAgICAgfSBlbHNlIGlmIChhcmcgPiAwKSB7XG4gICAgICAgIGRpdiA9IGFyZyAvIGxhcmc7XG4gICAgICAgIHN1bSArPSBkaXYgKiBkaXY7XG4gICAgICB9IGVsc2Ugc3VtICs9IGFyZztcbiAgICB9XG4gICAgcmV0dXJuIGxhcmcgPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBsYXJnICogTWF0aC5zcXJ0KHN1bSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjE4IE1hdGguaW11bCh4LCB5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW11bCA9IE1hdGguaW11bDtcblxuLy8gc29tZSBXZWJLaXQgdmVyc2lvbnMgZmFpbHMgd2l0aCBiaWcgbnVtYmVycywgc29tZSBoYXMgd3JvbmcgYXJpdHlcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkaW11bCgweGZmZmZmZmZmLCA1KSAhPSAtNSB8fCAkaW11bC5sZW5ndGggIT0gMjtcbn0pLCAnTWF0aCcsIHtcbiAgaW11bDogZnVuY3Rpb24gaW11bCh4LCB5KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgeG4gPSAreDtcbiAgICB2YXIgeW4gPSAreTtcbiAgICB2YXIgeGwgPSBVSU5UMTYgJiB4bjtcbiAgICB2YXIgeWwgPSBVSU5UMTYgJiB5bjtcbiAgICByZXR1cm4gMCB8IHhsICogeWwgKyAoKFVJTlQxNiAmIHhuID4+PiAxNikgKiB5bCArIHhsICogKFVJTlQxNiAmIHluID4+PiAxNikgPDwgMTYgPj4+IDApO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMSBNYXRoLmxvZzEwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzEwOiBmdW5jdGlvbiBsb2cxMCh4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpICogTWF0aC5MT0cxMEU7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgbG9nMXA6IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKSB9KTtcbiIsIi8vIDIwLjIuMi4yMiBNYXRoLmxvZzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMjogZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduOiByZXF1aXJlKCcuL19tYXRoLXNpZ24nKSB9KTtcbiIsIi8vIDIwLjIuMi4zMCBNYXRoLnNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbi8vIFY4IG5lYXIgQ2hyb21pdW0gMzggaGFzIGEgcHJvYmxlbSB3aXRoIHZlcnkgc21hbGwgbnVtYmVyc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFNYXRoLnNpbmgoLTJlLTE3KSAhPSAtMmUtMTc7XG59KSwgJ01hdGgnLCB7XG4gIHNpbmg6IGZ1bmN0aW9uIHNpbmgoeCkge1xuICAgIHJldHVybiBNYXRoLmFicyh4ID0gK3gpIDwgMVxuICAgICAgPyAoZXhwbTEoeCkgLSBleHBtMSgteCkpIC8gMlxuICAgICAgOiAoZXhwKHggLSAxKSAtIGV4cCgteCAtIDEpKSAqIChNYXRoLkUgLyAyKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzMgTWF0aC50YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHRhbmg6IGZ1bmN0aW9uIHRhbmgoeCkge1xuICAgIHZhciBhID0gZXhwbTEoeCA9ICt4KTtcbiAgICB2YXIgYiA9IGV4cG0xKC14KTtcbiAgICByZXR1cm4gYSA9PSBJbmZpbml0eSA/IDEgOiBiID09IEluZmluaXR5ID8gLTEgOiAoYSAtIGIpIC8gKGV4cCh4KSArIGV4cCgteCkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zNCBNYXRoLnRydW5jKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHRydW5jOiBmdW5jdGlvbiB0cnVuYyhpdCkge1xuICAgIHJldHVybiAoaXQgPiAwID8gTWF0aC5mbG9vciA6IE1hdGguY2VpbCkoaXQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKS50cmltO1xudmFyIE5VTUJFUiA9ICdOdW1iZXInO1xudmFyICROdW1iZXIgPSBnbG9iYWxbTlVNQkVSXTtcbnZhciBCYXNlID0gJE51bWJlcjtcbnZhciBwcm90byA9ICROdW1iZXIucHJvdG90eXBlO1xuLy8gT3BlcmEgfjEyIGhhcyBicm9rZW4gT2JqZWN0I3RvU3RyaW5nXG52YXIgQlJPS0VOX0NPRiA9IGNvZihyZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykocHJvdG8pKSA9PSBOVU1CRVI7XG52YXIgVFJJTSA9ICd0cmltJyBpbiBTdHJpbmcucHJvdG90eXBlO1xuXG4vLyA3LjEuMyBUb051bWJlcihhcmd1bWVudClcbnZhciB0b051bWJlciA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgaXQgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgZmFsc2UpO1xuICBpZiAodHlwZW9mIGl0ID09ICdzdHJpbmcnICYmIGl0Lmxlbmd0aCA+IDIpIHtcbiAgICBpdCA9IFRSSU0gPyBpdC50cmltKCkgOiAkdHJpbShpdCwgMyk7XG4gICAgdmFyIGZpcnN0ID0gaXQuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgdGhpcmQsIHJhZGl4LCBtYXhDb2RlO1xuICAgIGlmIChmaXJzdCA9PT0gNDMgfHwgZmlyc3QgPT09IDQ1KSB7XG4gICAgICB0aGlyZCA9IGl0LmNoYXJDb2RlQXQoMik7XG4gICAgICBpZiAodGhpcmQgPT09IDg4IHx8IHRoaXJkID09PSAxMjApIHJldHVybiBOYU47IC8vIE51bWJlcignKzB4MScpIHNob3VsZCBiZSBOYU4sIG9sZCBWOCBmaXhcbiAgICB9IGVsc2UgaWYgKGZpcnN0ID09PSA0OCkge1xuICAgICAgc3dpdGNoIChpdC5jaGFyQ29kZUF0KDEpKSB7XG4gICAgICAgIGNhc2UgNjY6IGNhc2UgOTg6IHJhZGl4ID0gMjsgbWF4Q29kZSA9IDQ5OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBiWzAxXSskL2lcbiAgICAgICAgY2FzZSA3OTogY2FzZSAxMTE6IHJhZGl4ID0gODsgbWF4Q29kZSA9IDU1OyBicmVhazsgLy8gZmFzdCBlcXVhbCAvXjBvWzAtN10rJC9pXG4gICAgICAgIGRlZmF1bHQ6IHJldHVybiAraXQ7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBkaWdpdHMgPSBpdC5zbGljZSgyKSwgaSA9IDAsIGwgPSBkaWdpdHMubGVuZ3RoLCBjb2RlOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGNvZGUgPSBkaWdpdHMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgLy8gcGFyc2VJbnQgcGFyc2VzIGEgc3RyaW5nIHRvIGEgZmlyc3QgdW5hdmFpbGFibGUgc3ltYm9sXG4gICAgICAgIC8vIGJ1dCBUb051bWJlciBzaG91bGQgcmV0dXJuIE5hTiBpZiBhIHN0cmluZyBjb250YWlucyB1bmF2YWlsYWJsZSBzeW1ib2xzXG4gICAgICAgIGlmIChjb2RlIDwgNDggfHwgY29kZSA+IG1heENvZGUpIHJldHVybiBOYU47XG4gICAgICB9IHJldHVybiBwYXJzZUludChkaWdpdHMsIHJhZGl4KTtcbiAgICB9XG4gIH0gcmV0dXJuICtpdDtcbn07XG5cbmlmICghJE51bWJlcignIDBvMScpIHx8ICEkTnVtYmVyKCcwYjEnKSB8fCAkTnVtYmVyKCcrMHgxJykpIHtcbiAgJE51bWJlciA9IGZ1bmN0aW9uIE51bWJlcih2YWx1ZSkge1xuICAgIHZhciBpdCA9IGFyZ3VtZW50cy5sZW5ndGggPCAxID8gMCA6IHZhbHVlO1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gdGhhdCBpbnN0YW5jZW9mICROdW1iZXJcbiAgICAgIC8vIGNoZWNrIG9uIDEuLmNvbnN0cnVjdG9yKGZvbykgY2FzZVxuICAgICAgJiYgKEJST0tFTl9DT0YgPyBmYWlscyhmdW5jdGlvbiAoKSB7IHByb3RvLnZhbHVlT2YuY2FsbCh0aGF0KTsgfSkgOiBjb2YodGhhdCkgIT0gTlVNQkVSKVxuICAgICAgICA/IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKHRvTnVtYmVyKGl0KSksIHRoYXQsICROdW1iZXIpIDogdG9OdW1iZXIoaXQpO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUE4oQmFzZSkgOiAoXG4gICAgLy8gRVMzOlxuICAgICdNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSwnICtcbiAgICAvLyBFUzYgKGluIGNhc2UsIGlmIG1vZHVsZXMgd2l0aCBFUzYgTnVtYmVyIHN0YXRpY3MgcmVxdWlyZWQgYmVmb3JlKTpcbiAgICAnRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLCcgK1xuICAgICdNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyJ1xuICApLnNwbGl0KCcsJyksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajsgaisrKSB7XG4gICAgaWYgKGhhcyhCYXNlLCBrZXkgPSBrZXlzW2pdKSAmJiAhaGFzKCROdW1iZXIsIGtleSkpIHtcbiAgICAgIGRQKCROdW1iZXIsIGtleSwgZ09QRChCYXNlLCBrZXkpKTtcbiAgICB9XG4gIH1cbiAgJE51bWJlci5wcm90b3R5cGUgPSBwcm90bztcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkTnVtYmVyO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgTlVNQkVSLCAkTnVtYmVyKTtcbn1cbiIsIi8vIDIwLjEuMi4xIE51bWJlci5FUFNJTE9OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgRVBTSUxPTjogTWF0aC5wb3coMiwgLTUyKSB9KTtcbiIsIi8vIDIwLjEuMi4yIE51bWJlci5pc0Zpbml0ZShudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIF9pc0Zpbml0ZSA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmlzRmluaXRlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNGaW5pdGU6IGZ1bmN0aW9uIGlzRmluaXRlKGl0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnbnVtYmVyJyAmJiBfaXNGaW5pdGUoaXQpO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IGlzSW50ZWdlcjogcmVxdWlyZSgnLi9faXMtaW50ZWdlcicpIH0pO1xuIiwiLy8gMjAuMS4yLjQgTnVtYmVyLmlzTmFOKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc05hTjogZnVuY3Rpb24gaXNOYU4obnVtYmVyKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIHJldHVybiBudW1iZXIgIT0gbnVtYmVyO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi41IE51bWJlci5pc1NhZmVJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNJbnRlZ2VyID0gcmVxdWlyZSgnLi9faXMtaW50ZWdlcicpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNTYWZlSW50ZWdlcjogZnVuY3Rpb24gaXNTYWZlSW50ZWdlcihudW1iZXIpIHtcbiAgICByZXR1cm4gaXNJbnRlZ2VyKG51bWJlcikgJiYgYWJzKG51bWJlcikgPD0gMHgxZmZmZmZmZmZmZmZmZjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1BWF9TQUZFX0lOVEVHRVI6IDB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCIvLyAyMC4xLjIuMTAgTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNSU5fU0FGRV9JTlRFR0VSOiAtMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMjAuMS4yLjEyIE51bWJlci5wYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgJ051bWJlcicsIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX3BhcnNlLWludCcpO1xuLy8gMjAuMS4yLjEzIE51bWJlci5wYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlSW50ICE9ICRwYXJzZUludCksICdOdW1iZXInLCB7IHBhcnNlSW50OiAkcGFyc2VJbnQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciAkdG9GaXhlZCA9IDEuMC50b0ZpeGVkO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBkYXRhID0gWzAsIDAsIDAsIDAsIDAsIDBdO1xudmFyIEVSUk9SID0gJ051bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnO1xudmFyIFpFUk8gPSAnMCc7XG5cbnZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChuLCBjKSB7XG4gIHZhciBpID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2kgPCA2KSB7XG4gICAgYzIgKz0gbiAqIGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xudmFyIGRpdmlkZSA9IGZ1bmN0aW9uIChuKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBjICs9IGRhdGFbaV07XG4gICAgZGF0YVtpXSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcbnZhciBudW1Ub1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgcyA9ICcnO1xuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaSA9PT0gMCB8fCBkYXRhW2ldICE9PSAwKSB7XG4gICAgICB2YXIgdCA9IFN0cmluZyhkYXRhW2ldKTtcbiAgICAgIHMgPSBzID09PSAnJyA/IHQgOiBzICsgcmVwZWF0LmNhbGwoWkVSTywgNyAtIHQubGVuZ3RoKSArIHQ7XG4gICAgfVxuICB9IHJldHVybiBzO1xufTtcbnZhciBwb3cgPSBmdW5jdGlvbiAoeCwgbiwgYWNjKSB7XG4gIHJldHVybiBuID09PSAwID8gYWNjIDogbiAlIDIgPT09IDEgPyBwb3coeCwgbiAtIDEsIGFjYyAqIHgpIDogcG93KHggKiB4LCBuIC8gMiwgYWNjKTtcbn07XG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoISEkdG9GaXhlZCAmJiAoXG4gIDAuMDAwMDgudG9GaXhlZCgzKSAhPT0gJzAuMDAwJyB8fFxuICAwLjkudG9GaXhlZCgwKSAhPT0gJzEnIHx8XG4gIDEuMjU1LnRvRml4ZWQoMikgIT09ICcxLjI1JyB8fFxuICAxMDAwMDAwMDAwMDAwMDAwMTI4LjAudG9GaXhlZCgwKSAhPT0gJzEwMDAwMDAwMDAwMDAwMDAxMjgnXG4pIHx8ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvRml4ZWQuY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvRml4ZWQ6IGZ1bmN0aW9uIHRvRml4ZWQoZnJhY3Rpb25EaWdpdHMpIHtcbiAgICB2YXIgeCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCBFUlJPUik7XG4gICAgdmFyIGYgPSB0b0ludGVnZXIoZnJhY3Rpb25EaWdpdHMpO1xuICAgIHZhciBzID0gJyc7XG4gICAgdmFyIG0gPSBaRVJPO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuICAgIGlmIChmIDwgMCB8fCBmID4gMjApIHRocm93IFJhbmdlRXJyb3IoRVJST1IpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoeCAhPSB4KSByZXR1cm4gJ05hTic7XG4gICAgaWYgKHggPD0gLTFlMjEgfHwgeCA+PSAxZTIxKSByZXR1cm4gU3RyaW5nKHgpO1xuICAgIGlmICh4IDwgMCkge1xuICAgICAgcyA9ICctJztcbiAgICAgIHggPSAteDtcbiAgICB9XG4gICAgaWYgKHggPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyh4ICogcG93KDIsIDY5LCAxKSkgLSA2OTtcbiAgICAgIHogPSBlIDwgMCA/IHggKiBwb3coMiwgLWUsIDEpIDogeCAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIGogPSBmO1xuICAgICAgICB3aGlsZSAoaiA+PSA3KSB7XG4gICAgICAgICAgbXVsdGlwbHkoMWU3LCAwKTtcbiAgICAgICAgICBqIC09IDc7XG4gICAgICAgIH1cbiAgICAgICAgbXVsdGlwbHkocG93KDEwLCBqLCAxKSwgMCk7XG4gICAgICAgIGogPSBlIC0gMTtcbiAgICAgICAgd2hpbGUgKGogPj0gMjMpIHtcbiAgICAgICAgICBkaXZpZGUoMSA8PCAyMyk7XG4gICAgICAgICAgaiAtPSAyMztcbiAgICAgICAgfVxuICAgICAgICBkaXZpZGUoMSA8PCBqKTtcbiAgICAgICAgbXVsdGlwbHkoMSwgMSk7XG4gICAgICAgIGRpdmlkZSgyKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgbXVsdGlwbHkoMSA8PCAtZSwgMCk7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpICsgcmVwZWF0LmNhbGwoWkVSTywgZik7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmID4gMCkge1xuICAgICAgayA9IG0ubGVuZ3RoO1xuICAgICAgbSA9IHMgKyAoayA8PSBmID8gJzAuJyArIHJlcGVhdC5jYWxsKFpFUk8sIGYgLSBrKSArIG0gOiBtLnNsaWNlKDAsIGsgLSBmKSArICcuJyArIG0uc2xpY2UoayAtIGYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHMgKyBtO1xuICAgIH0gcmV0dXJuIG07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgJHRvUHJlY2lzaW9uID0gMS4wLnRvUHJlY2lzaW9uO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICgkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTctXG4gIHJldHVybiAkdG9QcmVjaXNpb24uY2FsbCgxLCB1bmRlZmluZWQpICE9PSAnMSc7XG59KSB8fCAhJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggfiBBbmRyb2lkIDQuMy1cbiAgJHRvUHJlY2lzaW9uLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b1ByZWNpc2lvbjogZnVuY3Rpb24gdG9QcmVjaXNpb24ocHJlY2lzaW9uKSB7XG4gICAgdmFyIHRoYXQgPSBhTnVtYmVyVmFsdWUodGhpcywgJ051bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgcmV0dXJuIHByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gJHRvUHJlY2lzaW9uLmNhbGwodGhhdCkgOiAkdG9QcmVjaXNpb24uY2FsbCh0aGF0LCBwcmVjaXNpb24pO1xuICB9XG59KTtcbiIsIi8vIDE5LjEuMy4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHsgYXNzaWduOiByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgY3JlYXRlOiByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjMgLyAxNS4yLjMuNyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydGllczogcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi40IC8gMTUuMi4zLjYgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0eTogcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZiB9KTtcbiIsIi8vIDE5LjEuMi41IE9iamVjdC5mcmVlemUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZnJlZXplJywgZnVuY3Rpb24gKCRmcmVlemUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZyZWV6ZShpdCkge1xuICAgIHJldHVybiAkZnJlZXplICYmIGlzT2JqZWN0KGl0KSA/ICRmcmVlemUobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3InLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRvSU9iamVjdChpdCksIGtleSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5TmFtZXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKS5mO1xufSk7XG4iLCIvLyAxOS4xLjIuOSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRQcm90b3R5cGVPZicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuICRnZXRQcm90b3R5cGVPZih0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTEgT2JqZWN0LmlzRXh0ZW5zaWJsZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNFeHRlbnNpYmxlJywgZnVuY3Rpb24gKCRpc0V4dGVuc2libGUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlIDogZmFsc2U7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMiBPYmplY3QuaXNGcm96ZW4oTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRnJvemVuJywgZnVuY3Rpb24gKCRpc0Zyb3plbikge1xuICByZXR1cm4gZnVuY3Rpb24gaXNGcm96ZW4oaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRnJvemVuID8gJGlzRnJvemVuKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEzIE9iamVjdC5pc1NlYWxlZChPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNTZWFsZWQnLCBmdW5jdGlvbiAoJGlzU2VhbGVkKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc1NlYWxlZChpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNTZWFsZWQgPyAkaXNTZWFsZWQoaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjMuMTAgT2JqZWN0LmlzKHZhbHVlMSwgdmFsdWUyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBpczogcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpIH0pO1xuIiwiLy8gMTkuMS4yLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgna2V5cycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gJGtleXModG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE1IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyhPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdwcmV2ZW50RXh0ZW5zaW9ucycsIGZ1bmN0aW9uICgkcHJldmVudEV4dGVuc2lvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKGl0KSB7XG4gICAgcmV0dXJuICRwcmV2ZW50RXh0ZW5zaW9ucyAmJiBpc09iamVjdChpdCkgPyAkcHJldmVudEV4dGVuc2lvbnMobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNyBPYmplY3Quc2VhbChPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdzZWFsJywgZnVuY3Rpb24gKCRzZWFsKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzZWFsKGl0KSB7XG4gICAgcmV0dXJuICRzZWFsICYmIGlzT2JqZWN0KGl0KSA/ICRzZWFsKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjMuMTkgT2JqZWN0LnNldFByb3RvdHlwZU9mKE8sIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBzZXRQcm90b3R5cGVPZjogcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlRmxvYXQgPSByZXF1aXJlKCcuL19wYXJzZS1mbG9hdCcpO1xuLy8gMTguMi40IHBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksIHsgcGFyc2VGbG9hdDogJHBhcnNlRmxvYXQgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUludCA9IHJlcXVpcmUoJy4vX3BhcnNlLWludCcpO1xuLy8gMTguMi41IHBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUludCAhPSAkcGFyc2VJbnQpLCB7IHBhcnNlSW50OiAkcGFyc2VJbnQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4IHx8ICcnO1xudmFyICRQcm9taXNlID0gZ2xvYmFsW1BST01JU0VdO1xudmFyIGlzTm9kZSA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xudmFyIGVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIEludGVybmFsLCBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHksIE93blByb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcblxudmFyIFVTRV9OQVRJVkUgPSAhIWZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9ICRQcm9taXNlLnJlc29sdmUoMSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICAgIH07XG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZVxuICAgICAgLy8gdjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgICAvLyB3ZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgICAgJiYgdjguaW5kZXhPZignNi42JykgIT09IDBcbiAgICAgICYmIHVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUvNjYnKSA9PT0gLTE7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbiAocHJvbWlzZSwgaXNSZWplY3QpIHtcbiAgaWYgKHByb21pc2UuX24pIHJldHVybjtcbiAgcHJvbWlzZS5fbiA9IHRydWU7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2M7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgb2sgPSBwcm9taXNlLl9zID09IDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBydW4gPSBmdW5jdGlvbiAocmVhY3Rpb24pIHtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHByb21pc2UuX2ggPT0gMikgb25IYW5kbGVVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gbWF5IHRocm93XG4gICAgICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGggPiBpKSBydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgIHByb21pc2UuX24gPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpIG9uVW5oYW5kbGVkKHByb21pc2UpO1xuICB9KTtcbn07XG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgdW5oYW5kbGVkID0gaXNVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgdmFyIHJlc3VsdCwgaGFuZGxlciwgY29uc29sZTtcbiAgICBpZiAodW5oYW5kbGVkKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pIHtcbiAgICAgICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgfSBwcm9taXNlLl9hID0gdW5kZWZpbmVkO1xuICAgIGlmICh1bmhhbmRsZWQgJiYgcmVzdWx0LmUpIHRocm93IHJlc3VsdC52O1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICByZXR1cm4gcHJvbWlzZS5faCAhPT0gMSAmJiAocHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jKS5sZW5ndGggPT09IDA7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3YgfSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgdmFyIHRoZW47XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmICh0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgJHJlamVjdC5jYWxsKHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9hKSB0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFByb21pc2U6ICRQcm9taXNlIH0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICB2YXIgJCRyZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoTElCUkFSWSAmJiB0aGlzID09PSBXcmFwcGVyID8gJFByb21pc2UgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG59KSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyICRpbmRleCA9IGluZGV4Kys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1skaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMSBSZWZsZWN0LmFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciByQXBwbHkgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuYXBwbHk7XG52YXIgZkFwcGx5ID0gRnVuY3Rpb24uYXBwbHk7XG4vLyBNUyBFZGdlIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByQXBwbHkoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgYXBwbHk6IGZ1bmN0aW9uIGFwcGx5KHRhcmdldCwgdGhpc0FyZ3VtZW50LCBhcmd1bWVudHNMaXN0KSB7XG4gICAgdmFyIFQgPSBhRnVuY3Rpb24odGFyZ2V0KTtcbiAgICB2YXIgTCA9IGFuT2JqZWN0KGFyZ3VtZW50c0xpc3QpO1xuICAgIHJldHVybiByQXBwbHkgPyByQXBwbHkoVCwgdGhpc0FyZ3VtZW50LCBMKSA6IGZBcHBseS5jYWxsKFQsIHRoaXNBcmd1bWVudCwgTCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4yIFJlZmxlY3QuY29uc3RydWN0KHRhcmdldCwgYXJndW1lbnRzTGlzdCBbLCBuZXdUYXJnZXRdKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4vX2JpbmQnKTtcbnZhciByQ29uc3RydWN0ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmNvbnN0cnVjdDtcblxuLy8gTVMgRWRnZSBzdXBwb3J0cyBvbmx5IDIgYXJndW1lbnRzIGFuZCBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4vLyBGRiBOaWdodGx5IHNldHMgdGhpcmQgYXJndW1lbnQgYXMgYG5ldy50YXJnZXRgLCBidXQgZG9lcyBub3QgY3JlYXRlIGB0aGlzYCBmcm9tIGl0XG52YXIgTkVXX1RBUkdFVF9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEockNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIFtdLCBGKSBpbnN0YW5jZW9mIEYpO1xufSk7XG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICByQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUcpLCAnUmVmbGVjdCcsIHtcbiAgY29uc3RydWN0OiBmdW5jdGlvbiBjb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzIC8qICwgbmV3VGFyZ2V0ICovKSB7XG4gICAgYUZ1bmN0aW9uKFRhcmdldCk7XG4gICAgYW5PYmplY3QoYXJncyk7XG4gICAgdmFyIG5ld1RhcmdldCA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gVGFyZ2V0IDogYUZ1bmN0aW9uKGFyZ3VtZW50c1syXSk7XG4gICAgaWYgKEFSR1NfQlVHICYmICFORVdfVEFSR0VUX0JVRykgcmV0dXJuIHJDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgJGFyZ3MucHVzaC5hcHBseSgkYXJncywgYXJncyk7XG4gICAgICByZXR1cm4gbmV3IChiaW5kLmFwcGx5KFRhcmdldCwgJGFyZ3MpKSgpO1xuICAgIH1cbiAgICAvLyB3aXRoIGFsdGVyZWQgbmV3VGFyZ2V0LCBub3Qgc3VwcG9ydCBidWlsdC1pbiBjb25zdHJ1Y3RvcnNcbiAgICB2YXIgcHJvdG8gPSBuZXdUYXJnZXQucHJvdG90eXBlO1xuICAgIHZhciBpbnN0YW5jZSA9IGNyZWF0ZShpc09iamVjdChwcm90bykgPyBwcm90byA6IE9iamVjdC5wcm90b3R5cGUpO1xuICAgIHZhciByZXN1bHQgPSBGdW5jdGlvbi5hcHBseS5jYWxsKFRhcmdldCwgaW5zdGFuY2UsIGFyZ3MpO1xuICAgIHJldHVybiBpc09iamVjdChyZXN1bHQpID8gcmVzdWx0IDogaW5zdGFuY2U7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4zIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcylcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbi8vIE1TIEVkZ2UgaGFzIGJyb2tlbiBSZWZsZWN0LmRlZmluZVByb3BlcnR5IC0gdGhyb3dpbmcgaW5zdGVhZCBvZiByZXR1cm5pbmcgZmFsc2VcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICBSZWZsZWN0LmRlZmluZVByb3BlcnR5KGRQLmYoe30sIDEsIHsgdmFsdWU6IDEgfSksIDEsIHsgdmFsdWU6IDIgfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGRlZmluZVByb3BlcnR5OiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICBwcm9wZXJ0eUtleSA9IHRvUHJpbWl0aXZlKHByb3BlcnR5S2V5LCB0cnVlKTtcbiAgICBhbk9iamVjdChhdHRyaWJ1dGVzKTtcbiAgICB0cnkge1xuICAgICAgZFAuZih0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS40IFJlZmxlY3QuZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGRlbGV0ZVByb3BlcnR5OiBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgdmFyIGRlc2MgPSBnT1BEKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgICByZXR1cm4gZGVzYyAmJiAhZGVzYy5jb25maWd1cmFibGUgPyBmYWxzZSA6IGRlbGV0ZSB0YXJnZXRbcHJvcGVydHlLZXldO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDI2LjEuNSBSZWZsZWN0LmVudW1lcmF0ZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgRW51bWVyYXRlID0gZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBhbk9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHZhciBrZXlzID0gdGhpcy5fayA9IFtdOyAgICAgIC8vIGtleXNcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gaXRlcmF0ZWQpIGtleXMucHVzaChrZXkpO1xufTtcbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoRW51bWVyYXRlLCAnT2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IHRoaXM7XG4gIHZhciBrZXlzID0gdGhhdC5faztcbiAgdmFyIGtleTtcbiAgZG8ge1xuICAgIGlmICh0aGF0Ll9pID49IGtleXMubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH0gd2hpbGUgKCEoKGtleSA9IGtleXNbdGhhdC5faSsrXSkgaW4gdGhhdC5fdCkpO1xuICByZXR1cm4geyB2YWx1ZToga2V5LCBkb25lOiBmYWxzZSB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZW51bWVyYXRlOiBmdW5jdGlvbiBlbnVtZXJhdGUodGFyZ2V0KSB7XG4gICAgcmV0dXJuIG5ldyBFbnVtZXJhdGUodGFyZ2V0KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjcgUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgcmV0dXJuIGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS44IFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnZXRQcm90byA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZih0YXJnZXQpIHtcbiAgICByZXR1cm4gZ2V0UHJvdG8oYW5PYmplY3QodGFyZ2V0KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS42IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgWywgcmVjZWl2ZXJdKVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjLCBwcm90bztcbiAgaWYgKGFuT2JqZWN0KHRhcmdldCkgPT09IHJlY2VpdmVyKSByZXR1cm4gdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgaWYgKGRlc2MgPSBnT1BELmYodGFyZ2V0LCBwcm9wZXJ0eUtleSkpIHJldHVybiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICA/IGRlc2MudmFsdWVcbiAgICA6IGRlc2MuZ2V0ICE9PSB1bmRlZmluZWRcbiAgICAgID8gZGVzYy5nZXQuY2FsbChyZWNlaXZlcilcbiAgICAgIDogdW5kZWZpbmVkO1xuICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkgcmV0dXJuIGdldChwcm90bywgcHJvcGVydHlLZXksIHJlY2VpdmVyKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBnZXQ6IGdldCB9KTtcbiIsIi8vIDI2LjEuOSBSZWZsZWN0Lmhhcyh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBoYXM6IGZ1bmN0aW9uIGhhcyh0YXJnZXQsIHByb3BlcnR5S2V5KSB7XG4gICAgcmV0dXJuIHByb3BlcnR5S2V5IGluIHRhcmdldDtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEwIFJlZmxlY3QuaXNFeHRlbnNpYmxlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBpc0V4dGVuc2libGU6IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZSh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZSh0YXJnZXQpIDogdHJ1ZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjExIFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IG93bktleXM6IHJlcXVpcmUoJy4vX293bi1rZXlzJykgfSk7XG4iLCIvLyAyNi4xLjEyIFJlZmxlY3QucHJldmVudEV4dGVuc2lvbnModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRwcmV2ZW50RXh0ZW5zaW9ucyA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBwcmV2ZW50RXh0ZW5zaW9uczogZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICB0cnkge1xuICAgICAgaWYgKCRwcmV2ZW50RXh0ZW5zaW9ucykgJHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuMTQgUmVmbGVjdC5zZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzZXRQcm90byA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpO1xuXG5pZiAoc2V0UHJvdG8pICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgc2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pIHtcbiAgICBzZXRQcm90by5jaGVjayh0YXJnZXQsIHByb3RvKTtcbiAgICB0cnkge1xuICAgICAgc2V0UHJvdG8uc2V0KHRhcmdldCwgcHJvdG8pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEzIFJlZmxlY3Quc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgWywgcmVjZWl2ZXJdKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBzZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCA0ID8gdGFyZ2V0IDogYXJndW1lbnRzWzNdO1xuICB2YXIgb3duRGVzYyA9IGdPUEQuZihhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gIHZhciBleGlzdGluZ0Rlc2NyaXB0b3IsIHByb3RvO1xuICBpZiAoIW93bkRlc2MpIHtcbiAgICBpZiAoaXNPYmplY3QocHJvdG8gPSBnZXRQcm90b3R5cGVPZih0YXJnZXQpKSkge1xuICAgICAgcmV0dXJuIHNldChwcm90bywgcHJvcGVydHlLZXksIFYsIHJlY2VpdmVyKTtcbiAgICB9XG4gICAgb3duRGVzYyA9IGNyZWF0ZURlc2MoMCk7XG4gIH1cbiAgaWYgKGhhcyhvd25EZXNjLCAndmFsdWUnKSkge1xuICAgIGlmIChvd25EZXNjLndyaXRhYmxlID09PSBmYWxzZSB8fCAhaXNPYmplY3QocmVjZWl2ZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvciA9IGdPUEQuZihyZWNlaXZlciwgcHJvcGVydHlLZXkpKSB7XG4gICAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yLmdldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iuc2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgIGV4aXN0aW5nRGVzY3JpcHRvci52YWx1ZSA9IFY7XG4gICAgICBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgZXhpc3RpbmdEZXNjcmlwdG9yKTtcbiAgICB9IGVsc2UgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGNyZWF0ZURlc2MoMCwgVikpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvd25EZXNjLnNldCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiAob3duRGVzYy5zZXQuY2FsbChyZWNlaXZlciwgViksIHRydWUpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IHNldDogc2V0IH0pO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcbnZhciBCYXNlID0gJFJlZ0V4cDtcbnZhciBwcm90byA9ICRSZWdFeHAucHJvdG90eXBlO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcbi8vIFwibmV3XCIgY3JlYXRlcyBhIG5ldyBvYmplY3QsIG9sZCB3ZWJraXQgYnVnZ3kgaGVyZVxudmFyIENPUlJFQ1RfTkVXID0gbmV3ICRSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAoIUNPUlJFQ1RfTkVXIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZTJbcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyldID0gZmFsc2U7XG4gIC8vIFJlZ0V4cCBjb25zdHJ1Y3RvciBjYW4gYWx0ZXIgZmxhZ3MgYW5kIElzUmVnRXhwIHdvcmtzIGNvcnJlY3Qgd2l0aCBAQG1hdGNoXG4gIHJldHVybiAkUmVnRXhwKHJlMSkgIT0gcmUxIHx8ICRSZWdFeHAocmUyKSA9PSByZTIgfHwgJFJlZ0V4cChyZTEsICdpJykgIT0gJy9hL2knO1xufSkpKSB7XG4gICRSZWdFeHAgPSBmdW5jdGlvbiBSZWdFeHAocCwgZikge1xuICAgIHZhciB0aVJFID0gdGhpcyBpbnN0YW5jZW9mICRSZWdFeHA7XG4gICAgdmFyIHBpUkUgPSBpc1JlZ0V4cChwKTtcbiAgICB2YXIgZmlVID0gZiA9PT0gdW5kZWZpbmVkO1xuICAgIHJldHVybiAhdGlSRSAmJiBwaVJFICYmIHAuY29uc3RydWN0b3IgPT09ICRSZWdFeHAgJiYgZmlVID8gcFxuICAgICAgOiBpbmhlcml0SWZSZXF1aXJlZChDT1JSRUNUX05FV1xuICAgICAgICA/IG5ldyBCYXNlKHBpUkUgJiYgIWZpVSA/IHAuc291cmNlIDogcCwgZilcbiAgICAgICAgOiBCYXNlKChwaVJFID0gcCBpbnN0YW5jZW9mICRSZWdFeHApID8gcC5zb3VyY2UgOiBwLCBwaVJFICYmIGZpVSA/ICRmbGFncy5jYWxsKHApIDogZilcbiAgICAgICwgdGlSRSA/IHRoaXMgOiBwcm90bywgJFJlZ0V4cCk7XG4gIH07XG4gIHZhciBwcm94eSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkgaW4gJFJlZ0V4cCB8fCBkUCgkUmVnRXhwLCBrZXksIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gQmFzZVtrZXldOyB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAoaXQpIHsgQmFzZVtrZXldID0gaXQ7IH1cbiAgICB9KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZSksIGkgPSAwOyBrZXlzLmxlbmd0aCA+IGk7KSBwcm94eShrZXlzW2krK10pO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICRSZWdFeHA7XG4gICRSZWdFeHAucHJvdG90eXBlID0gcHJvdG87XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCAnUmVnRXhwJywgJFJlZ0V4cCk7XG59XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ1JlZ0V4cCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xucmVxdWlyZSgnLi9fZXhwb3J0Jykoe1xuICB0YXJnZXQ6ICdSZWdFeHAnLFxuICBwcm90bzogdHJ1ZSxcbiAgZm9yY2VkOiByZWdleHBFeGVjICE9PSAvLi8uZXhlY1xufSwge1xuICBleGVjOiByZWdleHBFeGVjXG59KTtcbiIsIi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzKClcbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmIC8uL2cuZmxhZ3MgIT0gJ2cnKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKFJlZ0V4cC5wcm90b3R5cGUsICdmbGFncycsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IHJlcXVpcmUoJy4vX2ZsYWdzJylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAbWF0Y2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnbWF0Y2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgTUFUQ0gsICRtYXRjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUubWF0Y2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbTUFUQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbTUFUQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQG1hdGNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkbWF0Y2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgdmFyIG4gPSAwO1xuICAgICAgdmFyIHJlc3VsdDtcbiAgICAgIHdoaWxlICgocmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUykpICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBBW25dID0gbWF0Y2hTdHI7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICAgIG4rKztcbiAgICAgIH1cbiAgICAgIHJldHVybiBuID09PSAwID8gbnVsbCA6IEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciBtYXggPSBNYXRoLm1heDtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJmAnXXxcXGRcXGQ/fDxbXj5dKj4pL2c7XG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQgPSAvXFwkKFskJmAnXXxcXGRcXGQ/KS9nO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdyZXBsYWNlJywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFJFUExBQ0UsICRyZXBsYWNlLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnJlcGxhY2VcbiAgICBmdW5jdGlvbiByZXBsYWNlKHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHNlYXJjaFZhbHVlID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlYXJjaFZhbHVlW1JFUExBQ0VdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBmbi5jYWxsKHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpXG4gICAgICAgIDogJHJlcGxhY2UuY2FsbChTdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAocmVnZXhwLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHJlcGxhY2UsIHJlZ2V4cCwgdGhpcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gdHlwZW9mIHJlcGxhY2VWYWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmICghZnVuY3Rpb25hbFJlcGxhY2UpIHJlcGxhY2VWYWx1ZSA9IFN0cmluZyhyZXBsYWNlVmFsdWUpO1xuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgIH1cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgdmFyIHBvc2l0aW9uID0gbWF4KG1pbih0b0ludGVnZXIocmVzdWx0LmluZGV4KSwgUy5sZW5ndGgpLCAwKTtcbiAgICAgICAgdmFyIGNhcHR1cmVzID0gW107XG4gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgZXF1aXZhbGVudCB0b1xuICAgICAgICAvLyAgIGNhcHR1cmVzID0gcmVzdWx0LnNsaWNlKDEpLm1hcChtYXliZVRvU3RyaW5nKVxuICAgICAgICAvLyBidXQgZm9yIHNvbWUgcmVhc29uIGBuYXRpdmVTbGljZS5jYWxsKHJlc3VsdCwgMSwgcmVzdWx0Lmxlbmd0aClgIChjYWxsZWQgaW5cbiAgICAgICAgLy8gdGhlIHNsaWNlIHBvbHlmaWxsIHdoZW4gc2xpY2luZyBuYXRpdmUgYXJyYXlzKSBcImRvZXNuJ3Qgd29ya1wiIGluIHNhZmFyaSA5IGFuZFxuICAgICAgICAvLyBjYXVzZXMgYSBjcmFzaCAoaHR0cHM6Ly9wYXN0ZWJpbi5jb20vTjIxUXplUUEpIHdoZW4gdHJ5aW5nIHRvIGRlYnVnIGl0LlxuICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IHJlc3VsdC5sZW5ndGg7IGorKykgY2FwdHVyZXMucHVzaChtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBbbWF0Y2hlZF0uY29uY2F0KGNhcHR1cmVzLCBwb3NpdGlvbiwgUyk7XG4gICAgICAgICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkgcmVwbGFjZXJBcmdzLnB1c2gobmFtZWRDYXB0dXJlcyk7XG4gICAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gU3RyaW5nKHJlcGxhY2VWYWx1ZS5hcHBseSh1bmRlZmluZWQsIHJlcGxhY2VyQXJncykpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIFMsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocG9zaXRpb24gPj0gbmV4dFNvdXJjZVBvc2l0aW9uKSB7XG4gICAgICAgICAgYWNjdW11bGF0ZWRSZXN1bHQgKz0gUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uKTtcbiAgICB9XG4gIF07XG5cbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbiAgZnVuY3Rpb24gZ2V0U3Vic3RpdHV0aW9uKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICAgIHZhciB0YWlsUG9zID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgICB9XG4gICAgcmV0dXJuICRyZXBsYWNlLmNhbGwocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICAgIHZhciBjYXB0dXJlO1xuICAgICAgc3dpdGNoIChjaC5jaGFyQXQoMCkpIHtcbiAgICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICAgIGNhc2UgJyYnOiByZXR1cm4gbWF0Y2hlZDtcbiAgICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHIuc2xpY2UoMCwgcG9zaXRpb24pO1xuICAgICAgICBjYXNlIFwiJ1wiOiByZXR1cm4gc3RyLnNsaWNlKHRhaWxQb3MpO1xuICAgICAgICBjYXNlICc8JzpcbiAgICAgICAgICBjYXB0dXJlID0gbmFtZWRDYXB0dXJlc1tjaC5zbGljZSgxLCAtMSldO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OiAvLyBcXGRcXGQ/XG4gICAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICBpZiAobiA+IG0pIHtcbiAgICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgICBpZiAoZiA8PSBtKSByZXR1cm4gY2FwdHVyZXNbZiAtIDFdID09PSB1bmRlZmluZWQgPyBjaC5jaGFyQXQoMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaC5jaGFyQXQoMSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgICB9XG4gICAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICAgIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc2FtZVZhbHVlID0gcmVxdWlyZSgnLi9fc2FtZS12YWx1ZScpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQHNlYXJjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzZWFyY2gnLCAxLCBmdW5jdGlvbiAoZGVmaW5lZCwgU0VBUkNILCAkc2VhcmNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zZWFyY2hgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc2VhcmNoXG4gICAgZnVuY3Rpb24gc2VhcmNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtTRUFSQ0hdO1xuICAgICAgcmV0dXJuIGZuICE9PSB1bmRlZmluZWQgPyBmbi5jYWxsKHJlZ2V4cCwgTykgOiBuZXcgUmVnRXhwKHJlZ2V4cClbU0VBUkNIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzZWFyY2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc2VhcmNoXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkc2VhcmNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIHByZXZpb3VzTGFzdEluZGV4ID0gcngubGFzdEluZGV4O1xuICAgICAgaWYgKCFzYW1lVmFsdWUocHJldmlvdXNMYXN0SW5kZXgsIDApKSByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgaWYgKCFzYW1lVmFsdWUocngubGFzdEluZGV4LCBwcmV2aW91c0xhc3RJbmRleCkpIHJ4Lmxhc3RJbmRleCA9IHByZXZpb3VzTGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IC0xIDogcmVzdWx0LmluZGV4O1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyICRTUExJVCA9ICdzcGxpdCc7XG52YXIgTEVOR1RIID0gJ2xlbmd0aCc7XG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xudmFyIE1BWF9VSU5UMzIgPSAweGZmZmZmZmZmO1xuXG4vLyBiYWJlbC1taW5pZnkgdHJhbnNwaWxlcyBSZWdFeHAoJ3gnLCAneScpIC0+IC94L3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyIFNVUFBPUlRTX1kgPSAhZmFpbHMoZnVuY3Rpb24gKCkgeyBSZWdFeHAoTUFYX1VJTlQzMiwgJ3knKTsgfSk7XG5cbi8vIEBAc3BsaXQgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc3BsaXQnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgU1BMSVQsICRzcGxpdCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBpbnRlcm5hbFNwbGl0O1xuICBpZiAoXG4gICAgJ2FiYmMnWyRTUExJVF0oLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAndGVzdCdbJFNQTElUXSgvKD86KS8sIC0xKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnYWInWyRTUExJVF0oLyg/OmFiKSovKVtMRU5HVEhdICE9IDIgfHxcbiAgICAnLidbJFNQTElUXSgvKC4/KSguPykvKVtMRU5HVEhdICE9IDQgfHxcbiAgICAnLidbJFNQTElUXSgvKCkoKS8pW0xFTkdUSF0gPiAxIHx8XG4gICAgJydbJFNQTElUXSgvLj8vKVtMRU5HVEhdXG4gICkge1xuICAgIC8vIGJhc2VkIG9uIGVzNS1zaGltIGltcGxlbWVudGF0aW9uLCBuZWVkIHRvIHJld29yayBpdFxuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkgcmV0dXJuICRzcGxpdC5jYWxsKHN0cmluZywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIHNwbGl0TGltaXQgPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IHJlZ2V4cEV4ZWMuY2FsbChzZXBhcmF0b3JDb3B5LCBzdHJpbmcpKSB7XG4gICAgICAgIGxhc3RJbmRleCA9IHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF07XG4gICAgICAgIGlmIChsYXN0SW5kZXggPiBsYXN0TGFzdEluZGV4KSB7XG4gICAgICAgICAgb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgsIG1hdGNoLmluZGV4KSk7XG4gICAgICAgICAgaWYgKG1hdGNoW0xFTkdUSF0gPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nW0xFTkdUSF0pICRwdXNoLmFwcGx5KG91dHB1dCwgbWF0Y2guc2xpY2UoMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXVtMRU5HVEhdO1xuICAgICAgICAgIGxhc3RMYXN0SW5kZXggPSBsYXN0SW5kZXg7XG4gICAgICAgICAgaWYgKG91dHB1dFtMRU5HVEhdID49IHNwbGl0TGltaXQpIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdID09PSBtYXRjaC5pbmRleCkgc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSsrOyAvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wXG4gICAgICB9XG4gICAgICBpZiAobGFzdExhc3RJbmRleCA9PT0gc3RyaW5nW0xFTkdUSF0pIHtcbiAgICAgICAgaWYgKGxhc3RMZW5ndGggfHwgIXNlcGFyYXRvckNvcHkudGVzdCgnJykpIG91dHB1dC5wdXNoKCcnKTtcbiAgICAgIH0gZWxzZSBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCkpO1xuICAgICAgcmV0dXJuIG91dHB1dFtMRU5HVEhdID4gc3BsaXRMaW1pdCA/IG91dHB1dC5zbGljZSgwLCBzcGxpdExpbWl0KSA6IG91dHB1dDtcbiAgICB9O1xuICAvLyBDaGFrcmEsIFY4XG4gIH0gZWxzZSBpZiAoJzAnWyRTUExJVF0odW5kZWZpbmVkLCAwKVtMRU5HVEhdKSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICByZXR1cm4gc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDAgPyBbXSA6ICRzcGxpdC5jYWxsKHRoaXMsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaW50ZXJuYWxTcGxpdCA9ICRzcGxpdDtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc3BsaXRgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VwYXJhdG9yW1NQTElUXTtcbiAgICAgIHJldHVybiBzcGxpdHRlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gc3BsaXR0ZXIuY2FsbChzZXBhcmF0b3IsIE8sIGxpbWl0KVxuICAgICAgICA6IGludGVybmFsU3BsaXQuY2FsbChTdHJpbmcoTyksIHNlcGFyYXRvciwgbGltaXQpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBzcGxpdF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAocmVnZXhwLCBsaW1pdCkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZShpbnRlcm5hbFNwbGl0LCByZWdleHAsIHRoaXMsIGxpbWl0LCBpbnRlcm5hbFNwbGl0ICE9PSAkc3BsaXQpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3RvcihyeCwgUmVnRXhwKTtcblxuICAgICAgdmFyIHVuaWNvZGVNYXRjaGluZyA9IHJ4LnVuaWNvZGU7XG4gICAgICB2YXIgZmxhZ3MgPSAocnguaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChTVVBQT1JUU19ZID8gJ3knIDogJ2cnKTtcblxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIFMgc2xpY2luZywgdG9cbiAgICAgIC8vIHNpbXVsYXRlIHRoZSAneScgZmxhZy5cbiAgICAgIHZhciBzcGxpdHRlciA9IG5ldyBDKFNVUFBPUlRTX1kgPyByeCA6ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJywgZmxhZ3MpO1xuICAgICAgdmFyIGxpbSA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICBpZiAobGltID09PSAwKSByZXR1cm4gW107XG4gICAgICBpZiAoUy5sZW5ndGggPT09IDApIHJldHVybiBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgUykgPT09IG51bGwgPyBbU10gOiBbXTtcbiAgICAgIHZhciBwID0gMDtcbiAgICAgIHZhciBxID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB3aGlsZSAocSA8IFMubGVuZ3RoKSB7XG4gICAgICAgIHNwbGl0dGVyLmxhc3RJbmRleCA9IFNVUFBPUlRTX1kgPyBxIDogMDtcbiAgICAgICAgdmFyIHogPSBjYWxsUmVnRXhwRXhlYyhzcGxpdHRlciwgU1VQUE9SVFNfWSA/IFMgOiBTLnNsaWNlKHEpKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSAkbWluKHRvTGVuZ3RoKHNwbGl0dGVyLmxhc3RJbmRleCArIChTVVBQT1JUU19ZID8gMCA6IHEpKSwgUy5sZW5ndGgpKSA9PT0gcFxuICAgICAgICApIHtcbiAgICAgICAgICBxID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHEsIHVuaWNvZGVNYXRjaGluZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgQS5wdXNoKFMuc2xpY2UocCwgcSkpO1xuICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSB6Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgQS5wdXNoKHpbaV0pO1xuICAgICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIH1cbiAgICAgICAgICBxID0gcCA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIEEucHVzaChTLnNsaWNlKHApKTtcbiAgICAgIHJldHVybiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmZsYWdzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IC8uL1tUT19TVFJJTkddO1xuXG52YXIgZGVmaW5lID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoUmVnRXhwLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmbiwgdHJ1ZSk7XG59O1xuXG4vLyAyMS4yLjUuMTQgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZygpXG5pZiAocmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7IHJldHVybiAkdG9TdHJpbmcuY2FsbCh7IHNvdXJjZTogJ2EnLCBmbGFnczogJ2InIH0pICE9ICcvYS9iJzsgfSkpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgcmV0dXJuICcvJy5jb25jYXQoUi5zb3VyY2UsICcvJyxcbiAgICAgICdmbGFncycgaW4gUiA/IFIuZmxhZ3MgOiAhREVTQ1JJUFRPUlMgJiYgUiBpbnN0YW5jZW9mIFJlZ0V4cCA/ICRmbGFncy5jYWxsKFIpIDogdW5kZWZpbmVkKTtcbiAgfSk7XG4vLyBGRjQ0LSBSZWdFeHAjdG9TdHJpbmcgaGFzIGEgd3JvbmcgbmFtZVxufSBlbHNlIGlmICgkdG9TdHJpbmcubmFtZSAhPSBUT19TVFJJTkcpIHtcbiAgZGVmaW5lKGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTRVQgPSAnU2V0JztcblxuLy8gMjMuMiBTZXQgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4yLjMuMSBTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gc3Ryb25nLmRlZih2YWxpZGF0ZSh0aGlzLCBTRVQpLCB2YWx1ZSA9IHZhbHVlID09PSAwID8gMCA6IHZhbHVlLCB2YWx1ZSk7XG4gIH1cbn0sIHN0cm9uZyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4yIFN0cmluZy5wcm90b3R5cGUuYW5jaG9yKG5hbWUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdhbmNob3InLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYW5jaG9yKG5hbWUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICduYW1lJywgbmFtZSk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjMgU3RyaW5nLnByb3RvdHlwZS5iaWcoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmlnJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJpZygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmlnJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNCBTdHJpbmcucHJvdG90eXBlLmJsaW5rKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJsaW5rKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdibGluaycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjUgU3RyaW5nLnByb3RvdHlwZS5ib2xkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JvbGQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYm9sZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykoZmFsc2UpO1xuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4zIFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXQocG9zKVxuICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy42IFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgoc2VhcmNoU3RyaW5nIFssIGVuZFBvc2l0aW9uXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBFTkRTX1dJVEggPSAnZW5kc1dpdGgnO1xudmFyICRlbmRzV2l0aCA9ICcnW0VORFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoRU5EU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgZW5kc1dpdGg6IGZ1bmN0aW9uIGVuZHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIGVuZFBvc2l0aW9uID0gQGxlbmd0aCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIEVORFNfV0lUSCk7XG4gICAgdmFyIGVuZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoYXQubGVuZ3RoKTtcbiAgICB2YXIgZW5kID0gZW5kUG9zaXRpb24gPT09IHVuZGVmaW5lZCA/IGxlbiA6IE1hdGgubWluKHRvTGVuZ3RoKGVuZFBvc2l0aW9uKSwgbGVuKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRlbmRzV2l0aFxuICAgICAgPyAkZW5kc1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGVuZClcbiAgICAgIDogdGhhdC5zbGljZShlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNiBTdHJpbmcucHJvdG90eXBlLmZpeGVkKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZpeGVkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZpeGVkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICd0dCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjcgU3RyaW5nLnByb3RvdHlwZS5mb250Y29sb3IoY29sb3IpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250Y29sb3InLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9udGNvbG9yKGNvbG9yKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnY29sb3InLCBjb2xvcik7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjggU3RyaW5nLnByb3RvdHlwZS5mb250c2l6ZShzaXplKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udHNpemUnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZm9udHNpemUoc2l6ZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ3NpemUnLCBzaXplKTtcbiAgfTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcblxuLy8gbGVuZ3RoIHNob3VsZCBiZSAxLCBvbGQgRkYgcHJvYmxlbVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT0gMSksICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi4yIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmNvZGVQb2ludHMpXG4gIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGNvZGU7XG4gICAgd2hpbGUgKGFMZW4gPiBpKSB7XG4gICAgICBjb2RlID0gK2FyZ3VtZW50c1tpKytdO1xuICAgICAgaWYgKHRvQWJzb2x1dGVJbmRleChjb2RlLCAweDEwZmZmZikgIT09IGNvZGUpIHRocm93IFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgcmVzLnB1c2goY29kZSA8IDB4MTAwMDBcbiAgICAgICAgPyBmcm9tQ2hhckNvZGUoY29kZSlcbiAgICAgICAgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4ZDgwMCwgY29kZSAlIDB4NDAwICsgMHhkYzAwKVxuICAgICAgKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjcgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlcyhzZWFyY2hTdHJpbmcsIHBvc2l0aW9uID0gMClcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5jb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgSU5DTFVERVMpXG4gICAgICAuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy45IFN0cmluZy5wcm90b3R5cGUuaXRhbGljcygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdpdGFsaWNzJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGl0YWxpY3MoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2knLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbi8vIDIxLjEuMy4yNyBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbi8vIDIxLjEuNS4yLjEgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICB2YXIgcG9pbnQ7XG4gIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEwIFN0cmluZy5wcm90b3R5cGUubGluayh1cmwpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdsaW5rJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGxpbmsodXJsKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnaHJlZicsIHVybCk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuNCBTdHJpbmcucmF3KGNhbGxTaXRlLCAuLi5zdWJzdGl0dXRpb25zKVxuICByYXc6IGZ1bmN0aW9uIHJhdyhjYWxsU2l0ZSkge1xuICAgIHZhciB0cGwgPSB0b0lPYmplY3QoY2FsbFNpdGUucmF3KTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodHBsLmxlbmd0aCk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgaSA9IDA7XG4gICAgd2hpbGUgKGxlbiA+IGkpIHtcbiAgICAgIHJlcy5wdXNoKFN0cmluZyh0cGxbaSsrXSkpO1xuICAgICAgaWYgKGkgPCBhTGVuKSByZXMucHVzaChTdHJpbmcoYXJndW1lbnRzW2ldKSk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5yZXBlYXQoY291bnQpXG4gIHJlcGVhdDogcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpXG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjExIFN0cmluZy5wcm90b3R5cGUuc21hbGwoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc21hbGwnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc21hbGwoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3NtYWxsJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiLy8gMjEuMS4zLjE4IFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgWywgcG9zaXRpb24gXSlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBTVEFSVFNfV0lUSCA9ICdzdGFydHNXaXRoJztcbnZhciAkc3RhcnRzV2l0aCA9ICcnW1NUQVJUU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShTVEFSVFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIHN0YXJ0c1dpdGg6IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgU1RBUlRTX1dJVEgpO1xuICAgIHZhciBpbmRleCA9IHRvTGVuZ3RoKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0aGF0Lmxlbmd0aCkpO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJHN0YXJ0c1dpdGhcbiAgICAgID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KVxuICAgICAgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTIgU3RyaW5nLnByb3RvdHlwZS5zdHJpa2UoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3RyaWtlJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN0cmlrZSgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3RyaWtlJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTMgU3RyaW5nLnByb3RvdHlwZS5zdWIoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3ViJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1YigpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3ViJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTQgU3RyaW5nLnByb3RvdHlwZS5zdXAoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnc3VwJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHN1cCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc3VwJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjEuMS4zLjI1IFN0cmluZy5wcm90b3R5cGUudHJpbSgpXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltJywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltKCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAzKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRUNNQVNjcmlwdCA2IHN5bWJvbHMgc2hpbVxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIE1FVEEgPSByZXF1aXJlKCcuL19tZXRhJykuS0VZO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciB3a3NEZWZpbmUgPSByZXF1aXJlKCcuL193a3MtZGVmaW5lJyk7XG52YXIgZW51bUtleXMgPSByZXF1aXJlKCcuL19lbnVtLWtleXMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIF9jcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZ09QTkV4dCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpO1xudmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkR09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUEQgPSAkR09QRC5mO1xudmFyIGRQID0gJERQLmY7XG52YXIgZ09QTiA9IGdPUE5FeHQuZjtcbnZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciAkSlNPTiA9IGdsb2JhbC5KU09OO1xudmFyIF9zdHJpbmdpZnkgPSAkSlNPTiAmJiAkSlNPTi5zdHJpbmdpZnk7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG52YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xudmFyIGlzRW51bSA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbnZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG52YXIgT1BTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbnZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJyAmJiAhISRHT1BTLmY7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcblxuLy8gZmFsbGJhY2sgZm9yIG9sZCBBbmRyb2lkLCBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9Njg3XG52YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRQKHRoaXMsICdhJywgeyB2YWx1ZTogNyB9KS5hOyB9XG4gIH0pKS5hICE9IDc7XG59KSA/IGZ1bmN0aW9uIChpdCwga2V5LCBEKSB7XG4gIHZhciBwcm90b0Rlc2MgPSBnT1BEKE9iamVjdFByb3RvLCBrZXkpO1xuICBpZiAocHJvdG9EZXNjKSBkZWxldGUgT2JqZWN0UHJvdG9ba2V5XTtcbiAgZFAoaXQsIGtleSwgRCk7XG4gIGlmIChwcm90b0Rlc2MgJiYgaXQgIT09IE9iamVjdFByb3RvKSBkUChPYmplY3RQcm90bywga2V5LCBwcm90b0Rlc2MpO1xufSA6IGRQO1xuXG52YXIgd3JhcCA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgdmFyIHN5bSA9IEFsbFN5bWJvbHNbdGFnXSA9IF9jcmVhdGUoJFN5bWJvbFtQUk9UT1RZUEVdKTtcbiAgc3ltLl9rID0gdGFnO1xuICByZXR1cm4gc3ltO1xufTtcblxudmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiB0eXBlb2YgJFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJyA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgaW5zdGFuY2VvZiAkU3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgYW5PYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBhbk9iamVjdChEKTtcbiAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgaWYgKCFELmVudW1lcmFibGUpIHtcbiAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICBEID0gX2NyZWF0ZShELCB7IGVudW1lcmFibGU6IGNyZWF0ZURlc2MoMCwgZmFsc2UpIH0pO1xuICAgIH0gcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gIH0gcmV0dXJuIGRQKGl0LCBrZXksIEQpO1xufTtcbnZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgYW5PYmplY3QoaXQpO1xuICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICB2YXIgaSA9IDA7XG4gIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsID4gaSkgJGRlZmluZVByb3BlcnR5KGl0LCBrZXkgPSBrZXlzW2krK10sIFBba2V5XSk7XG4gIHJldHVybiBpdDtcbn07XG52YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG59O1xudmFyICRwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKGtleSkge1xuICB2YXIgRSA9IGlzRW51bS5jYWxsKHRoaXMsIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSkpO1xuICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIEUgfHwgIWhhcyh0aGlzLCBrZXkpIHx8ICFoYXMoQWxsU3ltYm9scywga2V5KSB8fCBoYXModGhpcywgSElEREVOKSAmJiB0aGlzW0hJRERFTl1ba2V5XSA/IEUgOiB0cnVlO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgcmV0dXJuIEQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoIWhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiBrZXkgIT0gSElEREVOICYmIGtleSAhPSBNRVRBKSByZXN1bHQucHVzaChrZXkpO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgdmFyIElTX09QID0gaXQgPT09IE9iamVjdFByb3RvO1xuICB2YXIgbmFtZXMgPSBnT1BOKElTX09QID8gT1BTeW1ib2xzIDogdG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIDE5LjQuMS4xIFN5bWJvbChbZGVzY3JpcHRpb25dKVxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKHRoaXMgaW5zdGFuY2VvZiAkU3ltYm9sKSB0aHJvdyBUeXBlRXJyb3IoJ1N5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEnKTtcbiAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgJHNldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzKHRoaXMsIEhJRERFTikgJiYgaGFzKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgfTtcbiAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCBzZXQ6ICRzZXQgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgfTtcbiAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5faztcbiAgfSk7XG5cbiAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmYgPSBnT1BORXh0LmYgPSAkZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gICRHT1BTLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKSB7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBTeW1ib2w6ICRTeW1ib2wgfSk7XG5cbmZvciAodmFyIGVzNlN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaiA9IDA7IGVzNlN5bWJvbHMubGVuZ3RoID4gajspd2tzKGVzNlN5bWJvbHNbaisrXSk7XG5cbmZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykgd2tzRGVmaW5lKHdlbGxLbm93blN5bWJvbHNbaysrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gICAgZm9yICh2YXIga2V5IGluIFN5bWJvbFJlZ2lzdHJ5KSBpZiAoU3ltYm9sUmVnaXN0cnlba2V5XSA9PT0gc3ltKSByZXR1cm4ga2V5O1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gJGZhaWxzKGZ1bmN0aW9uICgpIHsgJEdPUFMuZigxKTsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogRkFJTFNfT05fUFJJTUlUSVZFUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpIHtcbiAgICByZXR1cm4gJEdPUFMuZih0b09iamVjdChpdCkpO1xuICB9XG59KTtcblxuLy8gMjQuMy4yIEpTT04uc3RyaW5naWZ5KHZhbHVlIFssIHJlcGxhY2VyIFssIHNwYWNlXV0pXG4kSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgLy8gTVMgRWRnZSBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMge31cbiAgLy8gV2ViS2l0IGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyBudWxsXG4gIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7IGE6IFMgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9Jztcbn0pKSwgJ0pTT04nLCB7XG4gIHN0cmluZ2lmeTogZnVuY3Rpb24gc3RyaW5naWZ5KGl0KSB7XG4gICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgIHZhciBpID0gMTtcbiAgICB2YXIgcmVwbGFjZXIsICRyZXBsYWNlcjtcbiAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgJHJlcGxhY2VyID0gcmVwbGFjZXIgPSBhcmdzWzFdO1xuICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgaWYgKCFpc1N5bWJvbCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICByZXR1cm4gX3N0cmluZ2lmeS5hcHBseSgkSlNPTiwgYXJncyk7XG4gIH1cbn0pO1xuXG4vLyAxOS40LjMuNCBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdKGhpbnQpXG4kU3ltYm9sW1BST1RPVFlQRV1bVE9fUFJJTUlUSVZFXSB8fCByZXF1aXJlKCcuL19oaWRlJykoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbi8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKCRTeW1ib2wsICdTeW1ib2wnKTtcbi8vIDIwLjIuMS45IE1hdGhbQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4vLyAyNC4zLjMgSlNPTltAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBBcnJheUJ1ZmZlciA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLkFycmF5QnVmZmVyO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciAkQXJyYXlCdWZmZXIgPSBidWZmZXIuQXJyYXlCdWZmZXI7XG52YXIgJERhdGFWaWV3ID0gYnVmZmVyLkRhdGFWaWV3O1xudmFyICRpc1ZpZXcgPSAkdHlwZWQuQUJWICYmIEFycmF5QnVmZmVyLmlzVmlldztcbnZhciAkc2xpY2UgPSAkQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlO1xudmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChBcnJheUJ1ZmZlciAhPT0gJEFycmF5QnVmZmVyKSwgeyBBcnJheUJ1ZmZlcjogJEFycmF5QnVmZmVyIH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEkdHlwZWQuQ09OU1RSLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS4zLjEgQXJyYXlCdWZmZXIuaXNWaWV3KGFyZylcbiAgaXNWaWV3OiBmdW5jdGlvbiBpc1ZpZXcoaXQpIHtcbiAgICByZXR1cm4gJGlzVmlldyAmJiAkaXNWaWV3KGl0KSB8fCBpc09iamVjdChpdCkgJiYgVklFVyBpbiBpdDtcbiAgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5VICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3ICRBcnJheUJ1ZmZlcigyKS5zbGljZSgxLCB1bmRlZmluZWQpLmJ5dGVMZW5ndGg7XG59KSwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuNC4zIEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZShzdGFydCwgZW5kKVxuICBzbGljZTogZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIGlmICgkc2xpY2UgIT09IHVuZGVmaW5lZCAmJiBlbmQgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRzbGljZS5jYWxsKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIHZhciBsZW4gPSBhbk9iamVjdCh0aGlzKS5ieXRlTGVuZ3RoO1xuICAgIHZhciBmaXJzdCA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgICB2YXIgZmluID0gdG9BYnNvbHV0ZUluZGV4KGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogZW5kLCBsZW4pO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3UyA9IG5ldyAkRGF0YVZpZXcodGhpcyk7XG4gICAgdmFyIHZpZXdUID0gbmV3ICREYXRhVmlldyhyZXN1bHQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGZpcnN0IDwgZmluKSB7XG4gICAgICB2aWV3VC5zZXRVaW50OChpbmRleCsrLCB2aWV3Uy5nZXRVaW50OChmaXJzdCsrKSk7XG4gICAgfSByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShBUlJBWV9CVUZGRVIpO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3R5cGVkJykuQUJWLCB7XG4gIERhdGFWaWV3OiByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKS5EYXRhVmlld1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdGbG9hdDY0JywgOCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEZsb2F0NjRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQxNkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59LCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBlYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKTtcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIFdFQUtfTUFQID0gJ1dlYWtNYXAnO1xudmFyIGdldFdlYWsgPSBtZXRhLmdldFdlYWs7XG52YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gd2Vhay51ZnN0b3JlO1xudmFyIEludGVybmFsTWFwO1xuXG52YXIgd3JhcHBlciA9IGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtNYXAoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gIH07XG59O1xuXG52YXIgbWV0aG9kcyA9IHtcbiAgLy8gMjMuMy4zLjMgV2Vha01hcC5wcm90b3R5cGUuZ2V0KGtleSlcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSkuZ2V0KGtleSk7XG4gICAgICByZXR1cm4gZGF0YSA/IGRhdGFbdGhpcy5faV0gOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9LFxuICAvLyAyMy4zLjMuNSBXZWFrTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCksIGtleSwgdmFsdWUpO1xuICB9XG59O1xuXG4vLyAyMy4zIFdlYWtNYXAgT2JqZWN0c1xudmFyICRXZWFrTWFwID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19NQVAsIHdyYXBwZXIsIG1ldGhvZHMsIHdlYWssIHRydWUsIHRydWUpO1xuXG4vLyBJRTExIFdlYWtNYXAgZnJvemVuIGtleXMgZml4XG5pZiAoTkFUSVZFX1dFQUtfTUFQICYmIElTX0lFMTEpIHtcbiAgSW50ZXJuYWxNYXAgPSB3ZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIFdFQUtfTUFQKTtcbiAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gIG1ldGEuTkVFRCA9IHRydWU7XG4gIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBwcm90byA9ICRXZWFrTWFwLnByb3RvdHlwZTtcbiAgICB2YXIgbWV0aG9kID0gcHJvdG9ba2V5XTtcbiAgICByZWRlZmluZShwcm90bywga2V5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgLy8gc3RvcmUgZnJvemVuIG9iamVjdHMgb24gaW50ZXJuYWwgd2Vha21hcCBzaGltXG4gICAgICBpZiAoaXNPYmplY3QoYSkgJiYgIWlzRXh0ZW5zaWJsZShhKSkge1xuICAgICAgICBpZiAoIXRoaXMuX2YpIHRoaXMuX2YgPSBuZXcgSW50ZXJuYWxNYXAoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zba2V5XShhLCBiKTtcbiAgICAgICAgcmV0dXJuIGtleSA9PSAnc2V0JyA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAvLyBzdG9yZSBhbGwgdGhlIHJlc3Qgb24gbmF0aXZlIHdlYWttYXBcbiAgICAgIH0gcmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIGEsIGIpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciB3ZWFrID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi13ZWFrJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbi8vIDIzLjQgV2Vha1NldCBPYmplY3RzXG5yZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy40LjMuMSBXZWFrU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfU0VUKSwgdmFsdWUsIHRydWUpO1xuICB9XG59LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdE1hcFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0TWFwOiBmdW5jdGlvbiBmbGF0TWFwKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuLCBBO1xuICAgIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgICBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgMSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0TWFwJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLWZsYXRNYXAvI3NlYy1BcnJheS5wcm90b3R5cGUuZmxhdHRlblxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gcmVxdWlyZSgnLi9fZmxhdHRlbi1pbnRvLWFycmF5Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBmbGF0dGVuOiBmdW5jdGlvbiBmbGF0dGVuKC8qIGRlcHRoQXJnID0gMSAqLykge1xuICAgIHZhciBkZXB0aEFyZyA9IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIGRlcHRoQXJnID09PSB1bmRlZmluZWQgPyAxIDogdG9JbnRlZ2VyKGRlcHRoQXJnKSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdHRlbicpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnaW5jbHVkZXMnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yd2FsZHJvbi90YzM5LW5vdGVzL2Jsb2IvbWFzdGVyL2VzNi8yMDE0LTA5L3NlcHQtMjUubWQjNTEwLWdsb2JhbGFzYXAtZm9yLWVucXVldWluZy1hLW1pY3JvdGFza1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIHByb2Nlc3MgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wcm9jZXNzO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHtcbiAgYXNhcDogZnVuY3Rpb24gYXNhcChmbikge1xuICAgIHZhciBkb21haW4gPSBpc05vZGUgJiYgcHJvY2Vzcy5kb21haW47XG4gICAgbWljcm90YXNrKGRvbWFpbiA/IGRvbWFpbi5iaW5kKGZuKSA6IGZuKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL3Byb3Bvc2FsLWlzLWVycm9yXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0Vycm9yJywge1xuICBpc0Vycm9yOiBmdW5jdGlvbiBpc0Vycm9yKGl0KSB7XG4gICAgcmV0dXJuIGNvZihpdCkgPT09ICdFcnJvcic7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdNYXAnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ01hcCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjbGFtcDogZnVuY3Rpb24gY2xhbXAoeCwgbG93ZXIsIHVwcGVyKSB7XG4gICAgcmV0dXJuIE1hdGgubWluKHVwcGVyLCBNYXRoLm1heChsb3dlciwgeCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgREVHX1BFUl9SQUQ6IE1hdGguUEkgLyAxODAgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIFJBRF9QRVJfREVHID0gMTgwIC8gTWF0aC5QSTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBkZWdyZWVzOiBmdW5jdGlvbiBkZWdyZWVzKHJhZGlhbnMpIHtcbiAgICByZXR1cm4gcmFkaWFucyAqIFJBRF9QRVJfREVHO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2NhbGUgPSByZXF1aXJlKCcuL19tYXRoLXNjYWxlJyk7XG52YXIgZnJvdW5kID0gcmVxdWlyZSgnLi9fbWF0aC1mcm91bmQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBmc2NhbGU6IGZ1bmN0aW9uIGZzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpIHtcbiAgICByZXR1cm4gZnJvdW5kKHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlhZGRoOiBmdW5jdGlvbiBpYWRkaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgKyAoeTEgPj4+IDApICsgKCgkeDAgJiAkeTAgfCAoJHgwIHwgJHkwKSAmIH4oJHgwICsgJHkwID4+PiAwKSkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaW11bGg6IGZ1bmN0aW9uIGltdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4gMTYpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGlzdWJoOiBmdW5jdGlvbiBpc3ViaCh4MCwgeDEsIHkwLCB5MSkge1xuICAgIHZhciAkeDAgPSB4MCA+Pj4gMDtcbiAgICB2YXIgJHgxID0geDEgPj4+IDA7XG4gICAgdmFyICR5MCA9IHkwID4+PiAwO1xuICAgIHJldHVybiAkeDEgLSAoeTEgPj4+IDApIC0gKCh+JHgwICYgJHkwIHwgfigkeDAgXiAkeTApICYgJHgwIC0gJHkwID4+PiAwKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IFJBRF9QRVJfREVHOiAxODAgLyBNYXRoLlBJIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBERUdfUEVSX1JBRCA9IE1hdGguUEkgLyAxODA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgcmFkaWFuczogZnVuY3Rpb24gcmFkaWFucyhkZWdyZWVzKSB7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiBERUdfUEVSX1JBRDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNjYWxlOiByZXF1aXJlKCcuL19tYXRoLXNjYWxlJykgfSk7XG4iLCIvLyBodHRwOi8vamZiYXN0aWVuLmdpdGh1Yi5pby9wYXBlcnMvTWF0aC5zaWduYml0Lmh0bWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbmJpdDogZnVuY3Rpb24gc2lnbmJpdCh4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpICE9IHggPyB4IDogeCA9PSAwID8gMSAvIHggPT0gSW5maW5pdHkgOiB4ID4gMDtcbn0gfSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB1bXVsaDogZnVuY3Rpb24gdW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4+IDE2O1xuICAgIHZhciB2MSA9ICR2ID4+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+Pj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+Pj4gMTYpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjIgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZUdldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZUdldHRlcl9fKFAsIGdldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IGdldDogYUZ1bmN0aW9uKGdldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4zIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVTZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVTZXR0ZXJfXyhQLCBzZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBzZXQ6IGFGdW5jdGlvbihzZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KSB7XG4gICAgcmV0dXJuICRlbnRyaWVzKGl0KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBvd25LZXlzID0gcmVxdWlyZSgnLi9fb3duLWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqZWN0KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICB2YXIgZ2V0RGVzYyA9IGdPUEQuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5LCBkZXNjO1xuICAgIHdoaWxlIChrZXlzLmxlbmd0aCA+IGkpIHtcbiAgICAgIGRlc2MgPSBnZXREZXNjKE8sIGtleSA9IGtleXNbaSsrXSk7XG4gICAgICBpZiAoZGVzYyAhPT0gdW5kZWZpbmVkKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGtleSwgZGVzYyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG4vLyBCLjIuMi40IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBHZXR0ZXJfXyhQKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fbG9va3VwR2V0dGVyX186IGZ1bmN0aW9uIF9fbG9va3VwR2V0dGVyX18oUCkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEsgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICB2YXIgRDtcbiAgICBkbyB7XG4gICAgICBpZiAoRCA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBLKSkgcmV0dXJuIEQuZ2V0O1xuICAgIH0gd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG4vLyBCLjIuMi41IE9iamVjdC5wcm90b3R5cGUuX19sb29rdXBTZXR0ZXJfXyhQKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fbG9va3VwU2V0dGVyX186IGZ1bmN0aW9uIF9fbG9va3VwU2V0dGVyX18oUCkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEsgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICB2YXIgRDtcbiAgICBkbyB7XG4gICAgICBpZiAoRCA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBLKSkgcmV0dXJuIEQuc2V0O1xuICAgIH0gd2hpbGUgKE8gPSBnZXRQcm90b3R5cGVPZihPKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR2YWx1ZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKShmYWxzZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vemVucGFyc2luZy9lcy1vYnNlcnZhYmxlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBPQlNFUlZBQkxFID0gcmVxdWlyZSgnLi9fd2tzJykoJ29ic2VydmFibGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBSRVRVUk4gPSBmb3JPZi5SRVRVUk47XG5cbnZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZuID09IG51bGwgPyB1bmRlZmluZWQgOiBhRnVuY3Rpb24oZm4pO1xufTtcblxudmFyIGNsZWFudXBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHZhciBjbGVhbnVwID0gc3Vic2NyaXB0aW9uLl9jO1xuICBpZiAoY2xlYW51cCkge1xuICAgIHN1YnNjcmlwdGlvbi5fYyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwKCk7XG4gIH1cbn07XG5cbnZhciBzdWJzY3JpcHRpb25DbG9zZWQgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHJldHVybiBzdWJzY3JpcHRpb24uX28gPT09IHVuZGVmaW5lZDtcbn07XG5cbnZhciBjbG9zZVN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gIH1cbn07XG5cbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAob2JzZXJ2ZXIsIHN1YnNjcmliZXIpIHtcbiAgYW5PYmplY3Qob2JzZXJ2ZXIpO1xuICB0aGlzLl9jID0gdW5kZWZpbmVkO1xuICB0aGlzLl9vID0gb2JzZXJ2ZXI7XG4gIG9ic2VydmVyID0gbmV3IFN1YnNjcmlwdGlvbk9ic2VydmVyKHRoaXMpO1xuICB0cnkge1xuICAgIHZhciBjbGVhbnVwID0gc3Vic2NyaWJlcihvYnNlcnZlcik7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IGNsZWFudXA7XG4gICAgaWYgKGNsZWFudXAgIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBjbGVhbnVwLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSBjbGVhbnVwID0gZnVuY3Rpb24gKCkgeyBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgIGVsc2UgYUZ1bmN0aW9uKGNsZWFudXApO1xuICAgICAgdGhpcy5fYyA9IGNsZWFudXA7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgcmV0dXJuO1xuICB9IGlmIChzdWJzY3JpcHRpb25DbG9zZWQodGhpcykpIGNsZWFudXBTdWJzY3JpcHRpb24odGhpcyk7XG59O1xuXG5TdWJzY3JpcHRpb24ucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgdW5zdWJzY3JpYmU6IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkgeyBjbG9zZVN1YnNjcmlwdGlvbih0aGlzKTsgfVxufSk7XG5cbnZhciBTdWJzY3JpcHRpb25PYnNlcnZlciA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdGhpcy5fcyA9IHN1YnNjcmlwdGlvbjtcbn07XG5cblN1YnNjcmlwdGlvbk9ic2VydmVyLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIG5leHQ6IGZ1bmN0aW9uIG5leHQodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5uZXh0KTtcbiAgICAgICAgaWYgKG0pIHJldHVybiBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbG9zZVN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIGVycm9yOiBmdW5jdGlvbiBlcnJvcih2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmIChzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkgdGhyb3cgdmFsdWU7XG4gICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuZXJyb3IpO1xuICAgICAgaWYgKCFtKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHZhbHVlID0gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH0sXG4gIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHN1YnNjcmlwdGlvbi5fbyA9IHVuZGVmaW5lZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmNvbXBsZXRlKTtcbiAgICAgICAgdmFsdWUgPSBtID8gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnZhciAkT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlcikge1xuICBhbkluc3RhbmNlKHRoaXMsICRPYnNlcnZhYmxlLCAnT2JzZXJ2YWJsZScsICdfZicpLl9mID0gYUZ1bmN0aW9uKHN1YnNjcmliZXIpO1xufTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUucHJvdG90eXBlLCB7XG4gIHN1YnNjcmliZTogZnVuY3Rpb24gc3Vic2NyaWJlKG9ic2VydmVyKSB7XG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24ob2JzZXJ2ZXIsIHRoaXMuX2YpO1xuICB9LFxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGZuKSB7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiBuZXcgKGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgYUZ1bmN0aW9uKGZuKTtcbiAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGF0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZm4odmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgY29tcGxldGU6IHJlc29sdmVcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59KTtcblxucmVkZWZpbmVBbGwoJE9ic2VydmFibGUsIHtcbiAgZnJvbTogZnVuY3Rpb24gZnJvbSh4KSB7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZTtcbiAgICB2YXIgbWV0aG9kID0gZ2V0TWV0aG9kKGFuT2JqZWN0KHgpW09CU0VSVkFCTEVdKTtcbiAgICBpZiAobWV0aG9kKSB7XG4gICAgICB2YXIgb2JzZXJ2YWJsZSA9IGFuT2JqZWN0KG1ldGhvZC5jYWxsKHgpKTtcbiAgICAgIHJldHVybiBvYnNlcnZhYmxlLmNvbnN0cnVjdG9yID09PSBDID8gb2JzZXJ2YWJsZSA6IG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZS5zdWJzY3JpYmUob2JzZXJ2ZXIpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGZvck9mKHgsIGZhbHNlLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdCk7XG4gICAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm4gUkVUVVJOO1xuICAgICAgICAgICAgfSkgPT09IFJFVFVSTikgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBlO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9LFxuICBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoLCBpdGVtcyA9IG5ldyBBcnJheShsKTsgaSA8IGw7KSBpdGVtc1tpXSA9IGFyZ3VtZW50c1tpKytdO1xuICAgIHJldHVybiBuZXcgKHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlKShmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgIHZhciBkb25lID0gZmFsc2U7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIWRvbmUpIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGl0ZW1zLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0ZW1zW2pdKTtcbiAgICAgICAgICAgIGlmIChkb25lKSByZXR1cm47XG4gICAgICAgICAgfSBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IGRvbmUgPSB0cnVlOyB9O1xuICAgIH0pO1xuICB9XG59KTtcblxuaGlkZSgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIE9CU0VSVkFCTEUsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuRywgeyBPYnNlcnZhYmxlOiAkT2JzZXJ2YWJsZSB9KTtcblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnT2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS1maW5hbGx5XG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHsgJ2ZpbmFsbHknOiBmdW5jdGlvbiAob25GaW5hbGx5KSB7XG4gIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIG9uRmluYWxseSA9PSAnZnVuY3Rpb24nO1xuICByZXR1cm4gdGhpcy50aGVuKFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHksXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uIChlKSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICB9IDogb25GaW5hbGx5XG4gICk7XG59IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtcHJvbWlzZS10cnlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdQcm9taXNlJywgeyAndHJ5JzogZnVuY3Rpb24gKGNhbGxiYWNrZm4pIHtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTtcbiAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gIChyZXN1bHQuZSA/IHByb21pc2VDYXBhYmlsaXR5LnJlamVjdCA6IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmUpKHJlc3VsdC52KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gbWV0YWRhdGEuc2V0O1xuXG5tZXRhZGF0YS5leHAoeyBkZWZpbmVNZXRhZGF0YTogZnVuY3Rpb24gZGVmaW5lTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsIGFuT2JqZWN0KHRhcmdldCksIHRvTWV0YUtleSh0YXJnZXRLZXkpKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBtZXRhZGF0YS5tYXA7XG52YXIgc3RvcmUgPSBtZXRhZGF0YS5zdG9yZTtcblxubWV0YWRhdGEuZXhwKHsgZGVsZXRlTWV0YWRhdGE6IGZ1bmN0aW9uIGRlbGV0ZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgdmFyIHRhcmdldEtleSA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSk7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoYW5PYmplY3QodGFyZ2V0KSwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIGlmIChtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkIHx8ICFtZXRhZGF0YU1hcFsnZGVsZXRlJ10obWV0YWRhdGFLZXkpKSByZXR1cm4gZmFsc2U7XG4gIGlmIChtZXRhZGF0YU1hcC5zaXplKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIHRhcmdldE1ldGFkYXRhWydkZWxldGUnXSh0YXJnZXRLZXkpO1xuICByZXR1cm4gISF0YXJnZXRNZXRhZGF0YS5zaXplIHx8IHN0b3JlWydkZWxldGUnXSh0YXJnZXQpO1xufSB9KTtcbiIsInZhciBTZXQgPSByZXF1aXJlKCcuL2VzNi5zZXQnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xudmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeU1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uIChPLCBQKSB7XG4gIHZhciBvS2V5cyA9IG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIGlmIChwYXJlbnQgPT09IG51bGwpIHJldHVybiBvS2V5cztcbiAgdmFyIHBLZXlzID0gb3JkaW5hcnlNZXRhZGF0YUtleXMocGFyZW50LCBQKTtcbiAgcmV0dXJuIHBLZXlzLmxlbmd0aCA/IG9LZXlzLmxlbmd0aCA/IGZyb20obmV3IFNldChvS2V5cy5jb25jYXQocEtleXMpKSkgOiBwS2V5cyA6IG9LZXlzO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRNZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5R2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5R2V0TWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiB1bmRlZmluZWQ7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YTogZnVuY3Rpb24gZ2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzID0gbWV0YWRhdGEua2V5cztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YTogZnVuY3Rpb24gZ2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlHZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlIYXNNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiB0cnVlO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUhhc01ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogZmFsc2U7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNNZXRhZGF0YTogZnVuY3Rpb24gaGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBoYXNPd25NZXRhZGF0YTogZnVuY3Rpb24gaGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgYW5PYmplY3QodGFyZ2V0KVxuICAgICwgYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKSk7XG59IH0pO1xuIiwidmFyICRtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9NZXRhS2V5ID0gJG1ldGFkYXRhLmtleTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gJG1ldGFkYXRhLnNldDtcblxuJG1ldGFkYXRhLmV4cCh7IG1ldGFkYXRhOiBmdW5jdGlvbiBtZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZGVjb3JhdG9yKHRhcmdldCwgdGFyZ2V0S2V5KSB7XG4gICAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShcbiAgICAgIG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLFxuICAgICAgKHRhcmdldEtleSAhPT0gdW5kZWZpbmVkID8gYW5PYmplY3QgOiBhRnVuY3Rpb24pKHRhcmdldCksXG4gICAgICB0b01ldGFLZXkodGFyZ2V0S2V5KVxuICAgICk7XG4gIH07XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdTZXQnLCB7IHRvSlNPTjogcmVxdWlyZSgnLi9fY29sbGVjdGlvbi10by1qc29uJykoJ1NldCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL21hdGhpYXNieW5lbnMvU3RyaW5nLnByb3RvdHlwZS5hdFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG52YXIgRk9SQ0VEID0gJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICfwoK63Jy5hdCgwKSAhPT0gJ/CgrrcnO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VELCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkRW5kOiBmdW5jdGlvbiBwYWRFbmQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRTdGFydDogZnVuY3Rpb24gcGFkU3RhcnQobWF4TGVuZ3RoIC8qICwgZmlsbFN0cmluZyA9ICcgJyAqLykge1xuICAgIHJldHVybiAkcGFkKHRoaXMsIG1heExlbmd0aCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1MZWZ0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltTGVmdCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMSk7XG4gIH07XG59LCAndHJpbVN0YXJ0Jyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltUmlnaHQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1SaWdodCgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMik7XG4gIH07XG59LCAndHJpbUVuZCcpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ29ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTeXN0ZW0nLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtTZXQnKTtcbiIsInZhciAkaXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbnZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xudmFyIEFycmF5VmFsdWVzID0gSXRlcmF0b3JzLkFycmF5O1xuXG52YXIgRE9NSXRlcmFibGVzID0ge1xuICBDU1NSdWxlTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICBGaWxlTGlzdDogZmFsc2UsXG4gIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gIE1lZGlhTGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIE1pbWVUeXBlQXJyYXk6IGZhbHNlLFxuICBOYW1lZE5vZGVNYXA6IGZhbHNlLFxuICBOb2RlTGlzdDogdHJ1ZSxcbiAgUGFpbnRSZXF1ZXN0TGlzdDogZmFsc2UsXG4gIFBsdWdpbjogZmFsc2UsXG4gIFBsdWdpbkFycmF5OiBmYWxzZSxcbiAgU1ZHTGVuZ3RoTGlzdDogZmFsc2UsXG4gIFNWR051bWJlckxpc3Q6IGZhbHNlLFxuICBTVkdQYXRoU2VnTGlzdDogZmFsc2UsXG4gIFNWR1BvaW50TGlzdDogZmFsc2UsXG4gIFNWR1N0cmluZ0xpc3Q6IGZhbHNlLFxuICBTVkdUcmFuc2Zvcm1MaXN0OiBmYWxzZSxcbiAgU291cmNlQnVmZmVyTGlzdDogZmFsc2UsXG4gIFN0eWxlU2hlZXRMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICBUb3VjaExpc3Q6IGZhbHNlXG59O1xuXG5mb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICB2YXIga2V5O1xuICBpZiAocHJvdG8pIHtcbiAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBBcnJheVZhbHVlcztcbiAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIGlmICghcHJvdG9ba2V5XSkgcmVkZWZpbmUocHJvdG8sIGtleSwgJGl0ZXJhdG9yc1trZXldLCB0cnVlKTtcbiAgfVxufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CLCB7XG4gIHNldEltbWVkaWF0ZTogJHRhc2suc2V0LFxuICBjbGVhckltbWVkaWF0ZTogJHRhc2suY2xlYXJcbn0pO1xuIiwiLy8gaWU5LSBzZXRUaW1lb3V0ICYgc2V0SW50ZXJ2YWwgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZpeFxudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgc2xpY2UgPSBbXS5zbGljZTtcbnZhciBNU0lFID0gL01TSUUgLlxcLi8udGVzdCh1c2VyQWdlbnQpOyAvLyA8LSBkaXJ0eSBpZTktIGNoZWNrXG52YXIgd3JhcCA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChmbiwgdGltZSAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgICB2YXIgYm91bmRBcmdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XG4gICAgdmFyIGFyZ3MgPSBib3VuZEFyZ3MgPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMikgOiBmYWxzZTtcbiAgICByZXR1cm4gc2V0KGJvdW5kQXJncyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgICAgKHR5cGVvZiBmbiA9PSAnZnVuY3Rpb24nID8gZm4gOiBGdW5jdGlvbihmbikpLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH0gOiBmbiwgdGltZSk7XG4gIH07XG59O1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIgKyAkZXhwb3J0LkYgKiBNU0lFLCB7XG4gIHNldFRpbWVvdXQ6IHdyYXAoZ2xvYmFsLnNldFRpbWVvdXQpLFxuICBzZXRJbnRlcnZhbDogd3JhcChnbG9iYWwuc2V0SW50ZXJ2YWwpXG59KTtcbiIsInJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3ltYm9sJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Qua2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZnJlZXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWZyb3plbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtc2VhbGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5hc3NpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmhhcy1pbnN0YW5jZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5lcHNpbG9uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLW5hbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5tYXgtc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5taW4tc2FmZS1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYWNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmF0YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2JydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNsejMyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZnJvdW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaHlwb3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5pbXVsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMTAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2luaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50cnVuYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yYXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0YXJ0cy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5hbmNob3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJpZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJvbGQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5saW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zbWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdWInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1cCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLm5vdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuam9pbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zbGljZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb3J0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lmxhc3QtaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQtaW5kZXgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc3BlY2llcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLm1hdGNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zZWFyY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNwbGl0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnByb21pc2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi53ZWFrLXNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5hcnJheS1idWZmZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZGF0YS12aWV3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDgtY2xhbXBlZC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQ2NC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmFwcGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuY29uc3RydWN0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVsZXRlLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZW51bWVyYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmhhcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5vd24ta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcuYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1sZWZ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLXJpZ2h0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5tYXRjaC1hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLmFzeW5jLWl0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1zZXR0ZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LnRvLWpzb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5jbGFtcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaXN1YmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pbXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgudW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zaWduYml0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UuZmluYWxseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLnRyeScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlbGV0ZS1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hc2FwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIudGltZXJzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmltbWVkaWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5kb20uaXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9tb2R1bGVzL19jb3JlJyk7XG4iLCJcbi8qKlxuICogRXhwb3NlIGBFbWl0dGVyYC5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IEVtaXR0ZXI7XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIG5ldyBgRW1pdHRlcmAuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBFbWl0dGVyKG9iaikge1xuICBpZiAob2JqKSByZXR1cm4gbWl4aW4ob2JqKTtcbn07XG5cbi8qKlxuICogTWl4aW4gdGhlIGVtaXR0ZXIgcHJvcGVydGllcy5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBtaXhpbihvYmopIHtcbiAgZm9yICh2YXIga2V5IGluIEVtaXR0ZXIucHJvdG90eXBlKSB7XG4gICAgb2JqW2tleV0gPSBFbWl0dGVyLnByb3RvdHlwZVtrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogTGlzdGVuIG9uIHRoZSBnaXZlbiBgZXZlbnRgIHdpdGggYGZuYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcmV0dXJuIHtFbWl0dGVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5FbWl0dGVyLnByb3RvdHlwZS5vbiA9XG5FbWl0dGVyLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQsIGZuKXtcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xuICAodGhpcy5fY2FsbGJhY2tzW2V2ZW50XSA9IHRoaXMuX2NhbGxiYWNrc1tldmVudF0gfHwgW10pXG4gICAgLnB1c2goZm4pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogQWRkcyBhbiBgZXZlbnRgIGxpc3RlbmVyIHRoYXQgd2lsbCBiZSBpbnZva2VkIGEgc2luZ2xlXG4gKiB0aW1lIHRoZW4gYXV0b21hdGljYWxseSByZW1vdmVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0VtaXR0ZXJ9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbihldmVudCwgZm4pe1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX2NhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcyB8fCB7fTtcblxuICBmdW5jdGlvbiBvbigpIHtcbiAgICBzZWxmLm9mZihldmVudCwgb24pO1xuICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH1cblxuICBvbi5mbiA9IGZuO1xuICB0aGlzLm9uKGV2ZW50LCBvbik7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgdGhlIGdpdmVuIGNhbGxiYWNrIGZvciBgZXZlbnRgIG9yIGFsbFxuICogcmVnaXN0ZXJlZCBjYWxsYmFja3MuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGV2ZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7RW1pdHRlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUub2ZmID1cbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbkVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycyA9XG5FbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyID0gZnVuY3Rpb24oZXZlbnQsIGZuKXtcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xuXG4gIC8vIGFsbFxuICBpZiAoMCA9PSBhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgdGhpcy5fY2FsbGJhY2tzID0ge307XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvLyBzcGVjaWZpYyBldmVudFxuICB2YXIgY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzW2V2ZW50XTtcbiAgaWYgKCFjYWxsYmFja3MpIHJldHVybiB0aGlzO1xuXG4gIC8vIHJlbW92ZSBhbGwgaGFuZGxlcnNcbiAgaWYgKDEgPT0gYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gcmVtb3ZlIHNwZWNpZmljIGhhbmRsZXJcbiAgdmFyIGNiO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgIGNiID0gY2FsbGJhY2tzW2ldO1xuICAgIGlmIChjYiA9PT0gZm4gfHwgY2IuZm4gPT09IGZuKSB7XG4gICAgICBjYWxsYmFja3Muc3BsaWNlKGksIDEpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBFbWl0IGBldmVudGAgd2l0aCB0aGUgZ2l2ZW4gYXJncy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gZXZlbnRcbiAqIEBwYXJhbSB7TWl4ZWR9IC4uLlxuICogQHJldHVybiB7RW1pdHRlcn1cbiAqL1xuXG5FbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oZXZlbnQpe1xuICB0aGlzLl9jYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3MgfHwge307XG4gIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpXG4gICAgLCBjYWxsYmFja3MgPSB0aGlzLl9jYWxsYmFja3NbZXZlbnRdO1xuXG4gIGlmIChjYWxsYmFja3MpIHtcbiAgICBjYWxsYmFja3MgPSBjYWxsYmFja3Muc2xpY2UoMCk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNhbGxiYWNrcy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgY2FsbGJhY2tzW2ldLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYXJyYXkgb2YgY2FsbGJhY2tzIGZvciBgZXZlbnRgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHJldHVybiB7QXJyYXl9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkVtaXR0ZXIucHJvdG90eXBlLmxpc3RlbmVycyA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IHt9O1xuICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzW2V2ZW50XSB8fCBbXTtcbn07XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhpcyBlbWl0dGVyIGhhcyBgZXZlbnRgIGhhbmRsZXJzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBldmVudFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuRW1pdHRlci5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24oZXZlbnQpe1xuICByZXR1cm4gISEgdGhpcy5saXN0ZW5lcnMoZXZlbnQpLmxlbmd0aDtcbn07XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuZnVuY3Rpb24gRXZlbnRFbWl0dGVyKCkge1xuICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMgfHwge307XG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50RW1pdHRlcjtcblxuLy8gQmFja3dhcmRzLWNvbXBhdCB3aXRoIG5vZGUgMC4xMC54XG5FdmVudEVtaXR0ZXIuRXZlbnRFbWl0dGVyID0gRXZlbnRFbWl0dGVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9ldmVudHMgPSB1bmRlZmluZWQ7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnMgPSB1bmRlZmluZWQ7XG5cbi8vIEJ5IGRlZmF1bHQgRXZlbnRFbWl0dGVycyB3aWxsIHByaW50IGEgd2FybmluZyBpZiBtb3JlIHRoYW4gMTAgbGlzdGVuZXJzIGFyZVxuLy8gYWRkZWQgdG8gaXQuIFRoaXMgaXMgYSB1c2VmdWwgZGVmYXVsdCB3aGljaCBoZWxwcyBmaW5kaW5nIG1lbW9yeSBsZWFrcy5cbkV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzID0gMTA7XG5cbi8vIE9idmlvdXNseSBub3QgYWxsIEVtaXR0ZXJzIHNob3VsZCBiZSBsaW1pdGVkIHRvIDEwLiBUaGlzIGZ1bmN0aW9uIGFsbG93c1xuLy8gdGhhdCB0byBiZSBpbmNyZWFzZWQuIFNldCB0byB6ZXJvIGZvciB1bmxpbWl0ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnNldE1heExpc3RlbmVycyA9IGZ1bmN0aW9uKG4pIHtcbiAgaWYgKCFpc051bWJlcihuKSB8fCBuIDwgMCB8fCBpc05hTihuKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICB0aGlzLl9tYXhMaXN0ZW5lcnMgPSBuO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgdmFyIGVyLCBoYW5kbGVyLCBsZW4sIGFyZ3MsIGksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmICh0eXBlID09PSAnZXJyb3InKSB7XG4gICAgaWYgKCF0aGlzLl9ldmVudHMuZXJyb3IgfHxcbiAgICAgICAgKGlzT2JqZWN0KHRoaXMuX2V2ZW50cy5lcnJvcikgJiYgIXRoaXMuX2V2ZW50cy5lcnJvci5sZW5ndGgpKSB7XG4gICAgICBlciA9IGFyZ3VtZW50c1sxXTtcbiAgICAgIGlmIChlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQXQgbGVhc3QgZ2l2ZSBzb21lIGtpbmQgb2YgY29udGV4dCB0byB0aGUgdXNlclxuICAgICAgICB2YXIgZXJyID0gbmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LiAoJyArIGVyICsgJyknKTtcbiAgICAgICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgaWYgKGlzVW5kZWZpbmVkKGhhbmRsZXIpKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAoaXNGdW5jdGlvbihoYW5kbGVyKSkge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgLy8gZmFzdCBjYXNlc1xuICAgICAgY2FzZSAxOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAyOlxuICAgICAgICBoYW5kbGVyLmNhbGwodGhpcywgYXJndW1lbnRzWzFdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0sIGFyZ3VtZW50c1syXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLy8gc2xvd2VyXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICAgICAgaGFuZGxlci5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoaGFuZGxlcikpIHtcbiAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICBsaXN0ZW5lcnMgPSBoYW5kbGVyLnNsaWNlKCk7XG4gICAgbGVuID0gbGlzdGVuZXJzLmxlbmd0aDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgICBsaXN0ZW5lcnNbaV0uYXBwbHkodGhpcywgYXJncyk7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXIgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICB2YXIgbTtcblxuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgdGhpcy5fZXZlbnRzID0ge307XG5cbiAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgLy8gYWRkaW5nIGl0IHRvIHRoZSBsaXN0ZW5lcnMsIGZpcnN0IGVtaXQgXCJuZXdMaXN0ZW5lclwiLlxuICBpZiAodGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyKVxuICAgIHRoaXMuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICBpc0Z1bmN0aW9uKGxpc3RlbmVyLmxpc3RlbmVyKSA/XG4gICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVyIDogbGlzdGVuZXIpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIC8vIE9wdGltaXplIHRoZSBjYXNlIG9mIG9uZSBsaXN0ZW5lci4gRG9uJ3QgbmVlZCB0aGUgZXh0cmEgYXJyYXkgb2JqZWN0LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICBlbHNlIGlmIChpc09iamVjdCh0aGlzLl9ldmVudHNbdHlwZV0pKVxuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgZ290IGFuIGFycmF5LCBqdXN0IGFwcGVuZC5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XG4gIGVsc2VcbiAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICB0aGlzLl9ldmVudHNbdHlwZV0gPSBbdGhpcy5fZXZlbnRzW3R5cGVdLCBsaXN0ZW5lcl07XG5cbiAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkgJiYgIXRoaXMuX2V2ZW50c1t0eXBlXS53YXJuZWQpIHtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX21heExpc3RlbmVycykpIHtcbiAgICAgIG0gPSB0aGlzLl9tYXhMaXN0ZW5lcnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgICB9XG5cbiAgICBpZiAobSAmJiBtID4gMCAmJiB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoID4gbSkge1xuICAgICAgdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCA9IHRydWU7XG4gICAgICBjb25zb2xlLmVycm9yKCcobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSAnICtcbiAgICAgICAgICAgICAgICAgICAgJ2xlYWsgZGV0ZWN0ZWQuICVkIGxpc3RlbmVycyBhZGRlZC4gJyArXG4gICAgICAgICAgICAgICAgICAgICdVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC4nLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHNbdHlwZV0ubGVuZ3RoKTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZS50cmFjZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBub3Qgc3VwcG9ydGVkIGluIElFIDEwXG4gICAgICAgIGNvbnNvbGUudHJhY2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub24gPSBFdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyO1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbih0eXBlLCBsaXN0ZW5lcikge1xuICBpZiAoIWlzRnVuY3Rpb24obGlzdGVuZXIpKVxuICAgIHRocm93IFR5cGVFcnJvcignbGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgdmFyIGZpcmVkID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gZygpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGcpO1xuXG4gICAgaWYgKCFmaXJlZCkge1xuICAgICAgZmlyZWQgPSB0cnVlO1xuICAgICAgbGlzdGVuZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH1cblxuICBnLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHRoaXMub24odHlwZSwgZyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBlbWl0cyBhICdyZW1vdmVMaXN0ZW5lcicgZXZlbnQgaWZmIHRoZSBsaXN0ZW5lciB3YXMgcmVtb3ZlZFxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBsaXN0LCBwb3NpdGlvbiwgbGVuZ3RoLCBpO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldHVybiB0aGlzO1xuXG4gIGxpc3QgPSB0aGlzLl9ldmVudHNbdHlwZV07XG4gIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICBwb3NpdGlvbiA9IC0xO1xuXG4gIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fFxuICAgICAgKGlzRnVuY3Rpb24obGlzdC5saXN0ZW5lcikgJiYgbGlzdC5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcblxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KGxpc3QpKSB7XG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gPiAwOykge1xuICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8XG4gICAgICAgICAgKGxpc3RbaV0ubGlzdGVuZXIgJiYgbGlzdFtpXS5saXN0ZW5lciA9PT0gbGlzdGVuZXIpKSB7XG4gICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgaWYgKGxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgICBsaXN0Lmxlbmd0aCA9IDA7XG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaXN0LnNwbGljZShwb3NpdGlvbiwgMSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcilcbiAgICAgIHRoaXMuZW1pdCgncmVtb3ZlTGlzdGVuZXInLCB0eXBlLCBsaXN0ZW5lcik7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIga2V5LCBsaXN0ZW5lcnM7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHMpXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgLy8gbm90IGxpc3RlbmluZyBmb3IgcmVtb3ZlTGlzdGVuZXIsIG5vIG5lZWQgdG8gZW1pdFxuICBpZiAoIXRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lcikge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxuICAgICAgdGhpcy5fZXZlbnRzID0ge307XG4gICAgZWxzZSBpZiAodGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgICAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAoa2V5IGluIHRoaXMuX2V2ZW50cykge1xuICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhrZXkpO1xuICAgIH1cbiAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNGdW5jdGlvbihsaXN0ZW5lcnMpKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnMpO1xuICB9IGVsc2UgaWYgKGxpc3RlbmVycykge1xuICAgIC8vIExJRk8gb3JkZXJcbiAgICB3aGlsZSAobGlzdGVuZXJzLmxlbmd0aClcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgbGlzdGVuZXJzW2xpc3RlbmVycy5sZW5ndGggLSAxXSk7XG4gIH1cbiAgZGVsZXRlIHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgcmV0O1xuICBpZiAoIXRoaXMuX2V2ZW50cyB8fCAhdGhpcy5fZXZlbnRzW3R5cGVdKVxuICAgIHJldCA9IFtdO1xuICBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgcmV0ID0gW3RoaXMuX2V2ZW50c1t0eXBlXV07XG4gIGVsc2VcbiAgICByZXQgPSB0aGlzLl9ldmVudHNbdHlwZV0uc2xpY2UoKTtcbiAgcmV0dXJuIHJldDtcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKHR5cGUpIHtcbiAgaWYgKHRoaXMuX2V2ZW50cykge1xuICAgIHZhciBldmxpc3RlbmVyID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKGlzRnVuY3Rpb24oZXZsaXN0ZW5lcikpXG4gICAgICByZXR1cm4gMTtcbiAgICBlbHNlIGlmIChldmxpc3RlbmVyKVxuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICB9XG4gIHJldHVybiAwO1xufTtcblxuRXZlbnRFbWl0dGVyLmxpc3RlbmVyQ291bnQgPSBmdW5jdGlvbihlbWl0dGVyLCB0eXBlKSB7XG4gIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG59O1xuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNOdW1iZXIoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNPYmplY3QoYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnb2JqZWN0JyAmJiBhcmcgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKGFyZykge1xuICByZXR1cm4gYXJnID09PSB2b2lkIDA7XG59XG4iLCIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiLyoqXG4gKiBtYXJ0aW5leiB2MC40LjNcbiAqIE1hcnRpbmV6IHBvbHlnb24gY2xpcHBpbmcgYWxnb3JpdGhtLCBkb2VzIGJvb2xlYW4gb3BlcmF0aW9uIG9uIHBvbHlnb25zIChtdWx0aXBvbHlnb25zLCBwb2x5Z29ucyB3aXRoIGhvbGVzIGV0Yyk6IGludGVyc2VjdGlvbiwgdW5pb24sIGRpZmZlcmVuY2UsIHhvclxuICpcbiAqIEBhdXRob3IgQWxleCBNaWxldnNraSA8aW5mb0B3OHIubmFtZT5cbiAqIEBsaWNlbnNlIE1JVFxuICogQHByZXNlcnZlXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLm1hcnRpbmV6ID0ge30pKSk7XG59KHRoaXMsIChmdW5jdGlvbiAoZXhwb3J0cykgeyAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gREVGQVVMVF9DT01QQVJFIChhLCBiKSB7IHJldHVybiBhID4gYiA/IDEgOiBhIDwgYiA/IC0xIDogMDsgfVxuXG4gIHZhciBTcGxheVRyZWUgPSBmdW5jdGlvbiBTcGxheVRyZWUoY29tcGFyZSwgbm9EdXBsaWNhdGVzKSB7XG4gICAgaWYgKCBjb21wYXJlID09PSB2b2lkIDAgKSBjb21wYXJlID0gREVGQVVMVF9DT01QQVJFO1xuICAgIGlmICggbm9EdXBsaWNhdGVzID09PSB2b2lkIDAgKSBub0R1cGxpY2F0ZXMgPSBmYWxzZTtcblxuICAgIHRoaXMuX2NvbXBhcmUgPSBjb21wYXJlO1xuICAgIHRoaXMuX3Jvb3QgPSBudWxsO1xuICAgIHRoaXMuX3NpemUgPSAwO1xuICAgIHRoaXMuX25vRHVwbGljYXRlcyA9ICEhbm9EdXBsaWNhdGVzO1xuICB9O1xuXG4gIHZhciBwcm90b3R5cGVBY2Nlc3NvcnMgPSB7IHNpemU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUucm90YXRlTGVmdCA9IGZ1bmN0aW9uIHJvdGF0ZUxlZnQgKHgpIHtcbiAgICB2YXIgeSA9IHgucmlnaHQ7XG4gICAgaWYgKHkpIHtcbiAgICAgIHgucmlnaHQgPSB5LmxlZnQ7XG4gICAgICBpZiAoeS5sZWZ0KSB7IHkubGVmdC5wYXJlbnQgPSB4OyB9XG4gICAgICB5LnBhcmVudCA9IHgucGFyZW50O1xuICAgIH1cblxuICAgIGlmICgheC5wYXJlbnQpICAgICAgICAgICAgICB7IHRoaXMuX3Jvb3QgPSB5OyB9XG4gICAgZWxzZSBpZiAoeCA9PT0geC5wYXJlbnQubGVmdCkgeyB4LnBhcmVudC5sZWZ0ID0geTsgfVxuICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICB7IHgucGFyZW50LnJpZ2h0ID0geTsgfVxuICAgIGlmICh5KSB7IHkubGVmdCA9IHg7IH1cbiAgICB4LnBhcmVudCA9IHk7XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLnJvdGF0ZVJpZ2h0ID0gZnVuY3Rpb24gcm90YXRlUmlnaHQgKHgpIHtcbiAgICB2YXIgeSA9IHgubGVmdDtcbiAgICBpZiAoeSkge1xuICAgICAgeC5sZWZ0ID0geS5yaWdodDtcbiAgICAgIGlmICh5LnJpZ2h0KSB7IHkucmlnaHQucGFyZW50ID0geDsgfVxuICAgICAgeS5wYXJlbnQgPSB4LnBhcmVudDtcbiAgICB9XG5cbiAgICBpZiAoIXgucGFyZW50KSAgICAgICAgICAgICB7IHRoaXMuX3Jvb3QgPSB5OyB9XG4gICAgZWxzZSBpZih4ID09PSB4LnBhcmVudC5sZWZ0KSB7IHgucGFyZW50LmxlZnQgPSB5OyB9XG4gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgeyB4LnBhcmVudC5yaWdodCA9IHk7IH1cbiAgICBpZiAoeSkgeyB5LnJpZ2h0ID0geDsgfVxuICAgIHgucGFyZW50ID0geTtcbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUuX3NwbGF5ID0gZnVuY3Rpb24gX3NwbGF5ICh4KSB7XG4gICAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAgIHdoaWxlICh4LnBhcmVudCkge1xuICAgICAgdmFyIHAgPSB4LnBhcmVudDtcbiAgICAgIGlmICghcC5wYXJlbnQpIHtcbiAgICAgICAgaWYgKHAubGVmdCA9PT0geCkgeyB0aGlzJDEucm90YXRlUmlnaHQocCk7IH1cbiAgICAgICAgZWxzZSAgICAgICAgICAgIHsgdGhpcyQxLnJvdGF0ZUxlZnQocCk7IH1cbiAgICAgIH0gZWxzZSBpZiAocC5sZWZ0ID09PSB4ICYmIHAucGFyZW50LmxlZnQgPT09IHApIHtcbiAgICAgICAgdGhpcyQxLnJvdGF0ZVJpZ2h0KHAucGFyZW50KTtcbiAgICAgICAgdGhpcyQxLnJvdGF0ZVJpZ2h0KHApO1xuICAgICAgfSBlbHNlIGlmIChwLnJpZ2h0ID09PSB4ICYmIHAucGFyZW50LnJpZ2h0ID09PSBwKSB7XG4gICAgICAgIHRoaXMkMS5yb3RhdGVMZWZ0KHAucGFyZW50KTtcbiAgICAgICAgdGhpcyQxLnJvdGF0ZUxlZnQocCk7XG4gICAgICB9IGVsc2UgaWYgKHAubGVmdCA9PT0geCAmJiBwLnBhcmVudC5yaWdodCA9PT0gcCkge1xuICAgICAgICB0aGlzJDEucm90YXRlUmlnaHQocCk7XG4gICAgICAgIHRoaXMkMS5yb3RhdGVMZWZ0KHApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcyQxLnJvdGF0ZUxlZnQocCk7XG4gICAgICAgIHRoaXMkMS5yb3RhdGVSaWdodChwKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLnNwbGF5ID0gZnVuY3Rpb24gc3BsYXkgKHgpIHtcbiAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgdmFyIHAsIGdwLCBnZ3AsIGwsIHI7XG5cbiAgICB3aGlsZSAoeC5wYXJlbnQpIHtcbiAgICAgIHAgPSB4LnBhcmVudDtcbiAgICAgIGdwID0gcC5wYXJlbnQ7XG5cbiAgICAgIGlmIChncCAmJiBncC5wYXJlbnQpIHtcbiAgICAgICAgZ2dwID0gZ3AucGFyZW50O1xuICAgICAgICBpZiAoZ2dwLmxlZnQgPT09IGdwKSB7IGdncC5sZWZ0PSB4OyB9XG4gICAgICAgIGVsc2UgICAgICAgICAgICAgICB7IGdncC5yaWdodCA9IHg7IH1cbiAgICAgICAgeC5wYXJlbnQgPSBnZ3A7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4LnBhcmVudCA9IG51bGw7XG4gICAgICAgIHRoaXMkMS5fcm9vdCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGwgPSB4LmxlZnQ7IHIgPSB4LnJpZ2h0O1xuXG4gICAgICBpZiAoeCA9PT0gcC5sZWZ0KSB7IC8vIGxlZnRcbiAgICAgICAgaWYgKGdwKSB7XG4gICAgICAgICAgaWYgKGdwLmxlZnQgPT09IHApIHtcbiAgICAgICAgICAgIC8qIHppZy16aWcgKi9cbiAgICAgICAgICAgIGlmIChwLnJpZ2h0KSB7XG4gICAgICAgICAgICAgIGdwLmxlZnQgPSBwLnJpZ2h0O1xuICAgICAgICAgICAgICBncC5sZWZ0LnBhcmVudCA9IGdwO1xuICAgICAgICAgICAgfSBlbHNlIHsgZ3AubGVmdCA9IG51bGw7IH1cblxuICAgICAgICAgICAgcC5yaWdodCA9IGdwO1xuICAgICAgICAgICAgZ3AucGFyZW50ID0gcDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyogemlnLXphZyAqL1xuICAgICAgICAgICAgaWYgKGwpIHtcbiAgICAgICAgICAgICAgZ3AucmlnaHQgPSBsO1xuICAgICAgICAgICAgICBsLnBhcmVudCA9IGdwO1xuICAgICAgICAgICAgfSBlbHNlIHsgZ3AucmlnaHQgPSBudWxsOyB9XG5cbiAgICAgICAgICAgIHgubGVmdCAgPSBncDtcbiAgICAgICAgICAgIGdwLnBhcmVudCA9IHg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgcC5sZWZ0ID0gcjtcbiAgICAgICAgICByLnBhcmVudCA9IHA7XG4gICAgICAgIH0gZWxzZSB7IHAubGVmdCA9IG51bGw7IH1cblxuICAgICAgICB4LnJpZ2h0PSBwO1xuICAgICAgICBwLnBhcmVudCA9IHg7XG4gICAgICB9IGVsc2UgeyAvLyByaWdodFxuICAgICAgICBpZiAoZ3ApIHtcbiAgICAgICAgICBpZiAoZ3AucmlnaHQgPT09IHApIHtcbiAgICAgICAgICAgIC8qIHppZy16aWcgKi9cbiAgICAgICAgICAgIGlmIChwLmxlZnQpIHtcbiAgICAgICAgICAgICAgZ3AucmlnaHQgPSBwLmxlZnQ7XG4gICAgICAgICAgICAgIGdwLnJpZ2h0LnBhcmVudCA9IGdwO1xuICAgICAgICAgICAgfSBlbHNlIHsgZ3AucmlnaHQgPSBudWxsOyB9XG5cbiAgICAgICAgICAgIHAubGVmdCA9IGdwO1xuICAgICAgICAgICAgZ3AucGFyZW50ID0gcDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyogemlnLXphZyAqL1xuICAgICAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICAgICAgZ3AubGVmdCA9IHI7XG4gICAgICAgICAgICAgIHIucGFyZW50ID0gZ3A7XG4gICAgICAgICAgICB9IGVsc2UgeyBncC5sZWZ0ID0gbnVsbDsgfVxuXG4gICAgICAgICAgICB4LnJpZ2h0ID0gZ3A7XG4gICAgICAgICAgICBncC5wYXJlbnQgPSB4O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobCkge1xuICAgICAgICAgIHAucmlnaHQgPSBsO1xuICAgICAgICAgIGwucGFyZW50ID0gcDtcbiAgICAgICAgfSBlbHNlIHsgcC5yaWdodCA9IG51bGw7IH1cblxuICAgICAgICB4LmxlZnQgPSBwO1xuICAgICAgICBwLnBhcmVudCA9IHg7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5yZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZSAodSwgdikge1xuICAgIGlmICghdS5wYXJlbnQpIHsgdGhpcy5fcm9vdCA9IHY7IH1cbiAgICBlbHNlIGlmICh1ID09PSB1LnBhcmVudC5sZWZ0KSB7IHUucGFyZW50LmxlZnQgPSB2OyB9XG4gICAgZWxzZSB7IHUucGFyZW50LnJpZ2h0ID0gdjsgfVxuICAgIGlmICh2KSB7IHYucGFyZW50ID0gdS5wYXJlbnQ7IH1cbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUubWluTm9kZSA9IGZ1bmN0aW9uIG1pbk5vZGUgKHUpIHtcbiAgICAgIGlmICggdSA9PT0gdm9pZCAwICkgdSA9IHRoaXMuX3Jvb3Q7XG5cbiAgICBpZiAodSkgeyB3aGlsZSAodS5sZWZ0KSB7IHUgPSB1LmxlZnQ7IH0gfVxuICAgIHJldHVybiB1O1xuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5tYXhOb2RlID0gZnVuY3Rpb24gbWF4Tm9kZSAodSkge1xuICAgICAgaWYgKCB1ID09PSB2b2lkIDAgKSB1ID0gdGhpcy5fcm9vdDtcblxuICAgIGlmICh1KSB7IHdoaWxlICh1LnJpZ2h0KSB7IHUgPSB1LnJpZ2h0OyB9IH1cbiAgICByZXR1cm4gdTtcbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0IChrZXksIGRhdGEpIHtcbiAgICB2YXIgeiA9IHRoaXMuX3Jvb3Q7XG4gICAgdmFyIHAgPSBudWxsO1xuICAgIHZhciBjb21wID0gdGhpcy5fY29tcGFyZTtcbiAgICB2YXIgY21wO1xuXG4gICAgaWYgKHRoaXMuX25vRHVwbGljYXRlcykge1xuICAgICAgd2hpbGUgKHopIHtcbiAgICAgICAgcCA9IHo7XG4gICAgICAgIGNtcCA9IGNvbXAoei5rZXksIGtleSk7XG4gICAgICAgIGlmIChjbXAgPT09IDApIHsgcmV0dXJuOyB9XG4gICAgICAgIGVsc2UgaWYgKGNvbXAoei5rZXksIGtleSkgPCAwKSB7IHogPSB6LnJpZ2h0OyB9XG4gICAgICAgIGVsc2UgeyB6ID0gei5sZWZ0OyB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoaWxlICh6KSB7XG4gICAgICAgIHAgPSB6O1xuICAgICAgICBpZiAoY29tcCh6LmtleSwga2V5KSA8IDApIHsgeiA9IHoucmlnaHQ7IH1cbiAgICAgICAgZWxzZSB7IHogPSB6LmxlZnQ7IH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB6ID0geyBrZXk6IGtleSwgZGF0YTogZGF0YSwgbGVmdDogbnVsbCwgcmlnaHQ6IG51bGwsIHBhcmVudDogcCB9O1xuXG4gICAgaWYgKCFwKSAgICAgICAgICAgICAgICAgICAgICAgIHsgdGhpcy5fcm9vdCA9IHo7IH1cbiAgICBlbHNlIGlmIChjb21wKHAua2V5LCB6LmtleSkgPCAwKSB7IHAucmlnaHQgPSB6OyB9XG4gICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcC5sZWZ0PSB6OyB9XG5cbiAgICB0aGlzLnNwbGF5KHopO1xuICAgIHRoaXMuX3NpemUrKztcbiAgICByZXR1cm4gejtcbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUuZmluZCA9IGZ1bmN0aW9uIGZpbmQgKGtleSkge1xuICAgIHZhciB6ICA9IHRoaXMuX3Jvb3Q7XG4gICAgdmFyIGNvbXAgPSB0aGlzLl9jb21wYXJlO1xuICAgIHdoaWxlICh6KSB7XG4gICAgICB2YXIgY21wID0gY29tcCh6LmtleSwga2V5KTtcbiAgICAgIGlmICAgIChjbXAgPCAwKSB7IHogPSB6LnJpZ2h0OyB9XG4gICAgICBlbHNlIGlmIChjbXAgPiAwKSB7IHogPSB6LmxlZnQ7IH1cbiAgICAgIGVsc2UgICAgICAgICAgICB7IHJldHVybiB6OyB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0cmVlIGNvbnRhaW5zIGEgbm9kZSB3aXRoIHRoZSBnaXZlbiBrZXlcbiAgICogQHBhcmFte0tleX0ga2V5XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUvZmFsc2VcbiAgICovXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiBjb250YWlucyAoa2V5KSB7XG4gICAgdmFyIG5vZGUgICAgID0gdGhpcy5fcm9vdDtcbiAgICB2YXIgY29tcGFyYXRvciA9IHRoaXMuX2NvbXBhcmU7XG4gICAgd2hpbGUgKG5vZGUpe1xuICAgICAgdmFyIGNtcCA9IGNvbXBhcmF0b3Ioa2V5LCBub2RlLmtleSk7XG4gICAgICBpZiAgICAoY21wID09PSAwKSB7IHJldHVybiB0cnVlOyB9XG4gICAgICBlbHNlIGlmIChjbXAgPCAwKSB7IG5vZGUgPSBub2RlLmxlZnQ7IH1cbiAgICAgIGVsc2UgICAgICAgICAgICAgIHsgbm9kZSA9IG5vZGUucmlnaHQ7IH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cblxuICBTcGxheVRyZWUucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIHJlbW92ZSAoa2V5KSB7XG4gICAgdmFyIHogPSB0aGlzLmZpbmQoa2V5KTtcblxuICAgIGlmICgheikgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgIHRoaXMuc3BsYXkoeik7XG5cbiAgICBpZiAoIXoubGVmdCkgeyB0aGlzLnJlcGxhY2Uoeiwgei5yaWdodCk7IH1cbiAgICBlbHNlIGlmICghei5yaWdodCkgeyB0aGlzLnJlcGxhY2Uoeiwgei5sZWZ0KTsgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHkgPSB0aGlzLm1pbk5vZGUoei5yaWdodCk7XG4gICAgICBpZiAoeS5wYXJlbnQgIT09IHopIHtcbiAgICAgICAgdGhpcy5yZXBsYWNlKHksIHkucmlnaHQpO1xuICAgICAgICB5LnJpZ2h0ID0gei5yaWdodDtcbiAgICAgICAgeS5yaWdodC5wYXJlbnQgPSB5O1xuICAgICAgfVxuICAgICAgdGhpcy5yZXBsYWNlKHosIHkpO1xuICAgICAgeS5sZWZ0ID0gei5sZWZ0O1xuICAgICAgeS5sZWZ0LnBhcmVudCA9IHk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2l6ZS0tO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5yZW1vdmVOb2RlID0gZnVuY3Rpb24gcmVtb3ZlTm9kZSAoeikge1xuICAgIGlmICgheikgeyByZXR1cm4gZmFsc2U7IH1cblxuICAgIHRoaXMuc3BsYXkoeik7XG5cbiAgICBpZiAoIXoubGVmdCkgeyB0aGlzLnJlcGxhY2Uoeiwgei5yaWdodCk7IH1cbiAgICBlbHNlIGlmICghei5yaWdodCkgeyB0aGlzLnJlcGxhY2Uoeiwgei5sZWZ0KTsgfVxuICAgIGVsc2Uge1xuICAgICAgdmFyIHkgPSB0aGlzLm1pbk5vZGUoei5yaWdodCk7XG4gICAgICBpZiAoeS5wYXJlbnQgIT09IHopIHtcbiAgICAgICAgdGhpcy5yZXBsYWNlKHksIHkucmlnaHQpO1xuICAgICAgICB5LnJpZ2h0ID0gei5yaWdodDtcbiAgICAgICAgeS5yaWdodC5wYXJlbnQgPSB5O1xuICAgICAgfVxuICAgICAgdGhpcy5yZXBsYWNlKHosIHkpO1xuICAgICAgeS5sZWZ0ID0gei5sZWZ0O1xuICAgICAgeS5sZWZ0LnBhcmVudCA9IHk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2l6ZS0tO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG5cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5lcmFzZSA9IGZ1bmN0aW9uIGVyYXNlIChrZXkpIHtcbiAgICB2YXIgeiA9IHRoaXMuZmluZChrZXkpO1xuICAgIGlmICgheikgeyByZXR1cm47IH1cblxuICAgIHRoaXMuc3BsYXkoeik7XG5cbiAgICB2YXIgcyA9IHoubGVmdDtcbiAgICB2YXIgdCA9IHoucmlnaHQ7XG5cbiAgICB2YXIgc01heCA9IG51bGw7XG4gICAgaWYgKHMpIHtcbiAgICAgIHMucGFyZW50ID0gbnVsbDtcbiAgICAgIHNNYXggPSB0aGlzLm1heE5vZGUocyk7XG4gICAgICB0aGlzLnNwbGF5KHNNYXgpO1xuICAgICAgdGhpcy5fcm9vdCA9IHNNYXg7XG4gICAgfVxuICAgIGlmICh0KSB7XG4gICAgICBpZiAocykgeyBzTWF4LnJpZ2h0ID0gdDsgfVxuICAgICAgZWxzZSB7IHRoaXMuX3Jvb3QgPSB0OyB9XG4gICAgICB0LnBhcmVudCA9IHNNYXg7XG4gICAgfVxuXG4gICAgdGhpcy5fc2l6ZS0tO1xuICB9O1xuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuZCByZXR1cm5zIHRoZSBub2RlIHdpdGggc21hbGxlc3Qga2V5XG4gICAqIEByZXR1cm4gez9Ob2RlfVxuICAgKi9cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5wb3AgPSBmdW5jdGlvbiBwb3AgKCkge1xuICAgIHZhciBub2RlID0gdGhpcy5fcm9vdCwgcmV0dXJuVmFsdWUgPSBudWxsO1xuICAgIGlmIChub2RlKSB7XG4gICAgICB3aGlsZSAobm9kZS5sZWZ0KSB7IG5vZGUgPSBub2RlLmxlZnQ7IH1cbiAgICAgIHJldHVyblZhbHVlID0geyBrZXk6IG5vZGUua2V5LCBkYXRhOiBub2RlLmRhdGEgfTtcbiAgICAgIHRoaXMucmVtb3ZlKG5vZGUua2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9O1xuXG5cbiAgLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xuXG4gIC8qKlxuICAgKiBTdWNjZXNzb3Igbm9kZVxuICAgKiBAcGFyYW17Tm9kZX0gbm9kZVxuICAgKiBAcmV0dXJuIHs/Tm9kZX1cbiAgICovXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uIG5leHQgKG5vZGUpIHtcbiAgICB2YXIgc3VjY2Vzc29yID0gbm9kZTtcbiAgICBpZiAoc3VjY2Vzc29yKSB7XG4gICAgICBpZiAoc3VjY2Vzc29yLnJpZ2h0KSB7XG4gICAgICAgIHN1Y2Nlc3NvciA9IHN1Y2Nlc3Nvci5yaWdodDtcbiAgICAgICAgd2hpbGUgKHN1Y2Nlc3NvciAmJiBzdWNjZXNzb3IubGVmdCkgeyBzdWNjZXNzb3IgPSBzdWNjZXNzb3IubGVmdDsgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VjY2Vzc29yID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChzdWNjZXNzb3IgJiYgc3VjY2Vzc29yLnJpZ2h0ID09PSBub2RlKSB7XG4gICAgICAgICAgbm9kZSA9IHN1Y2Nlc3Nvcjsgc3VjY2Vzc29yID0gc3VjY2Vzc29yLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3VjY2Vzc29yO1xuICB9O1xuXG5cbiAgLyoqXG4gICAqIFByZWRlY2Vzc29yIG5vZGVcbiAgICogQHBhcmFte05vZGV9IG5vZGVcbiAgICogQHJldHVybiB7P05vZGV9XG4gICAqL1xuICBTcGxheVRyZWUucHJvdG90eXBlLnByZXYgPSBmdW5jdGlvbiBwcmV2IChub2RlKSB7XG4gICAgdmFyIHByZWRlY2Vzc29yID0gbm9kZTtcbiAgICBpZiAocHJlZGVjZXNzb3IpIHtcbiAgICAgIGlmIChwcmVkZWNlc3Nvci5sZWZ0KSB7XG4gICAgICAgIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3IubGVmdDtcbiAgICAgICAgd2hpbGUgKHByZWRlY2Vzc29yICYmIHByZWRlY2Vzc29yLnJpZ2h0KSB7IHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3IucmlnaHQ7IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWRlY2Vzc29yID0gbm9kZS5wYXJlbnQ7XG4gICAgICAgIHdoaWxlIChwcmVkZWNlc3NvciAmJiBwcmVkZWNlc3Nvci5sZWZ0ID09PSBub2RlKSB7XG4gICAgICAgICAgbm9kZSA9IHByZWRlY2Vzc29yO1xuICAgICAgICAgIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3IucGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVkZWNlc3NvcjtcbiAgfTtcbiAgLyogZXNsaW50LWVuYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXG5cblxuICAvKipcbiAgICogQHBhcmFte2ZvckVhY2hDYWxsYmFja30gY2FsbGJhY2tcbiAgICogQHJldHVybiB7U3BsYXlUcmVlfVxuICAgKi9cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gZm9yRWFjaCAoY2FsbGJhY2spIHtcbiAgICB2YXIgY3VycmVudCA9IHRoaXMuX3Jvb3Q7XG4gICAgdmFyIHMgPSBbXSwgZG9uZSA9IGZhbHNlLCBpID0gMDtcblxuICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgLy8gUmVhY2ggdGhlIGxlZnQgbW9zdCBOb2RlIG9mIHRoZSBjdXJyZW50IE5vZGVcbiAgICAgIGlmIChjdXJyZW50KSB7XG4gICAgICAgIC8vIFBsYWNlIHBvaW50ZXIgdG8gYSB0cmVlIG5vZGUgb24gdGhlIHN0YWNrXG4gICAgICAgIC8vIGJlZm9yZSB0cmF2ZXJzaW5nIHRoZSBub2RlJ3MgbGVmdCBzdWJ0cmVlXG4gICAgICAgIHMucHVzaChjdXJyZW50KTtcbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnQubGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEJhY2tUcmFjayBmcm9tIHRoZSBlbXB0eSBzdWJ0cmVlIGFuZCB2aXNpdCB0aGUgTm9kZVxuICAgICAgICAvLyBhdCB0aGUgdG9wIG9mIHRoZSBzdGFjazsgaG93ZXZlciwgaWYgdGhlIHN0YWNrIGlzXG4gICAgICAgIC8vIGVtcHR5IHlvdSBhcmUgZG9uZVxuICAgICAgICBpZiAocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY3VycmVudCA9IHMucG9wKCk7XG4gICAgICAgICAgY2FsbGJhY2soY3VycmVudCwgaSsrKTtcblxuICAgICAgICAgIC8vIFdlIGhhdmUgdmlzaXRlZCB0aGUgbm9kZSBhbmQgaXRzIGxlZnRcbiAgICAgICAgICAvLyBzdWJ0cmVlLiBOb3csIGl0J3MgcmlnaHQgc3VidHJlZSdzIHR1cm5cbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDtcbiAgICAgICAgfSBlbHNlIHsgZG9uZSA9IHRydWU7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cblxuICAvKipcbiAgICogV2FsayBrZXkgcmFuZ2UgZnJvbSBgbG93YCB0byBgaGlnaGAuIFN0b3BzIGlmIGBmbmAgcmV0dXJucyBhIHZhbHVlLlxuICAgKiBAcGFyYW17S2V5fSAgICBsb3dcbiAgICogQHBhcmFte0tleX0gICAgaGlnaFxuICAgKiBAcGFyYW17RnVuY3Rpb259IGZuXG4gICAqIEBwYXJhbXsqP30gICAgIGN0eFxuICAgKiBAcmV0dXJuIHtTcGxheVRyZWV9XG4gICAqL1xuICBTcGxheVRyZWUucHJvdG90eXBlLnJhbmdlID0gZnVuY3Rpb24gcmFuZ2UgKGxvdywgaGlnaCwgZm4sIGN0eCkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB2YXIgUSA9IFtdO1xuICAgIHZhciBjb21wYXJlID0gdGhpcy5fY29tcGFyZTtcbiAgICB2YXIgbm9kZSA9IHRoaXMuX3Jvb3QsIGNtcDtcblxuICAgIHdoaWxlIChRLmxlbmd0aCAhPT0gMCB8fCBub2RlKSB7XG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBRLnB1c2gobm9kZSk7XG4gICAgICAgIG5vZGUgPSBub2RlLmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gUS5wb3AoKTtcbiAgICAgICAgY21wID0gY29tcGFyZShub2RlLmtleSwgaGlnaCk7XG4gICAgICAgIGlmIChjbXAgPiAwKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tcGFyZShub2RlLmtleSwgbG93KSA+PSAwKSB7XG4gICAgICAgICAgaWYgKGZuLmNhbGwoY3R4LCBub2RlKSkgeyByZXR1cm4gdGhpcyQxOyB9IC8vIHN0b3AgaWYgc210aCBpcyByZXR1cm5lZFxuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBub2RlLnJpZ2h0O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyBhbGwga2V5cyBpbiBvcmRlclxuICAgKiBAcmV0dXJuIHtBcnJheTxLZXk+fVxuICAgKi9cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24ga2V5cyAoKSB7XG4gICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9yb290O1xuICAgIHZhciBzID0gW10sIHIgPSBbXSwgZG9uZSA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKCFkb25lKSB7XG4gICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICBzLnB1c2goY3VycmVudCk7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY3VycmVudCA9IHMucG9wKCk7XG4gICAgICAgICAgci5wdXNoKGN1cnJlbnQua2V5KTtcbiAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDtcbiAgICAgICAgfSBlbHNlIHsgZG9uZSA9IHRydWU7IH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH07XG5cblxuICAvKipcbiAgICogUmV0dXJucyBgZGF0YWAgZmllbGRzIG9mIGFsbCBub2RlcyBpbiBvcmRlci5cbiAgICogQHJldHVybiB7QXJyYXk8VmFsdWU+fVxuICAgKi9cbiAgU3BsYXlUcmVlLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiB2YWx1ZXMgKCkge1xuICAgIHZhciBjdXJyZW50ID0gdGhpcy5fcm9vdDtcbiAgICB2YXIgcyA9IFtdLCByID0gW10sIGRvbmUgPSBmYWxzZTtcblxuICAgIHdoaWxlICghZG9uZSkge1xuICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgcy5wdXNoKGN1cnJlbnQpO1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudC5sZWZ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGN1cnJlbnQgPSBzLnBvcCgpO1xuICAgICAgICAgIHIucHVzaChjdXJyZW50LmRhdGEpO1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJpZ2h0O1xuICAgICAgICB9IGVsc2UgeyBkb25lID0gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfTtcblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIG5vZGUgYXQgZ2l2ZW4gaW5kZXhcbiAgICogQHBhcmFte251bWJlcn0gaW5kZXhcbiAgICogQHJldHVybiB7P05vZGV9XG4gICAqL1xuICBTcGxheVRyZWUucHJvdG90eXBlLmF0ID0gZnVuY3Rpb24gYXQgKGluZGV4KSB7XG4gICAgLy8gcmVtb3ZlZCBhZnRlciBhIGNvbnNpZGVyYXRpb24sIG1vcmUgbWlzbGVhZGluZyB0aGFuIHVzZWZ1bFxuICAgIC8vIGluZGV4ID0gaW5kZXggJSB0aGlzLnNpemU7XG4gICAgLy8gaWYgKGluZGV4IDwgMCkgaW5kZXggPSB0aGlzLnNpemUgLSBpbmRleDtcblxuICAgIHZhciBjdXJyZW50ID0gdGhpcy5fcm9vdDtcbiAgICB2YXIgcyA9IFtdLCBkb25lID0gZmFsc2UsIGkgPSAwO1xuXG4gICAgd2hpbGUgKCFkb25lKSB7XG4gICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICBzLnB1c2goY3VycmVudCk7XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LmxlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY3VycmVudCA9IHMucG9wKCk7XG4gICAgICAgICAgaWYgKGkgPT09IGluZGV4KSB7IHJldHVybiBjdXJyZW50OyB9XG4gICAgICAgICAgaSsrO1xuICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnJpZ2h0O1xuICAgICAgICB9IGVsc2UgeyBkb25lID0gdHJ1ZTsgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogQnVsay1sb2FkIGl0ZW1zLiBCb3RoIGFycmF5IGhhdmUgdG8gYmUgc2FtZSBzaXplXG4gICAqIEBwYXJhbXtBcnJheTxLZXk+fSAga2V5c1xuICAgKiBAcGFyYW17QXJyYXk8VmFsdWU+fVt2YWx1ZXNdXG4gICAqIEBwYXJhbXtCb29sZWFufSAgICAgW3ByZXNvcnQ9ZmFsc2VdIFByZS1zb3J0IGtleXMgYW5kIHZhbHVlcywgdXNpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlJ3MgY29tcGFyYXRvci4gU29ydGluZyBpcyBkb25lXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4tcGxhY2VcbiAgICogQHJldHVybiB7QVZMVHJlZX1cbiAgICovXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUubG9hZCA9IGZ1bmN0aW9uIGxvYWQgKGtleXMsIHZhbHVlcywgcHJlc29ydCkge1xuICAgICAgaWYgKCBrZXlzID09PSB2b2lkIDAgKSBrZXlzID0gW107XG4gICAgICBpZiAoIHZhbHVlcyA9PT0gdm9pZCAwICkgdmFsdWVzID0gW107XG4gICAgICBpZiAoIHByZXNvcnQgPT09IHZvaWQgMCApIHByZXNvcnQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLl9zaXplICE9PSAwKSB7IHRocm93IG5ldyBFcnJvcignYnVsay1sb2FkOiB0cmVlIGlzIG5vdCBlbXB0eScpOyB9XG4gICAgdmFyIHNpemUgPSBrZXlzLmxlbmd0aDtcbiAgICBpZiAocHJlc29ydCkgeyBzb3J0KGtleXMsIHZhbHVlcywgMCwgc2l6ZSAtIDEsIHRoaXMuX2NvbXBhcmUpOyB9XG4gICAgdGhpcy5fcm9vdCA9IGxvYWRSZWN1cnNpdmUobnVsbCwga2V5cywgdmFsdWVzLCAwLCBzaXplKTtcbiAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUubWluID0gZnVuY3Rpb24gbWluICgpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMubWluTm9kZSh0aGlzLl9yb290KTtcbiAgICBpZiAobm9kZSkgeyByZXR1cm4gbm9kZS5rZXk7IH1cbiAgICBlbHNlICAgIHsgcmV0dXJuIG51bGw7IH1cbiAgfTtcblxuXG4gIFNwbGF5VHJlZS5wcm90b3R5cGUubWF4ID0gZnVuY3Rpb24gbWF4ICgpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMubWF4Tm9kZSh0aGlzLl9yb290KTtcbiAgICBpZiAobm9kZSkgeyByZXR1cm4gbm9kZS5rZXk7IH1cbiAgICBlbHNlICAgIHsgcmV0dXJuIG51bGw7IH1cbiAgfTtcblxuICBTcGxheVRyZWUucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiBpc0VtcHR5ICgpIHsgcmV0dXJuIHRoaXMuX3Jvb3QgPT09IG51bGw7IH07XG4gIHByb3RvdHlwZUFjY2Vzc29ycy5zaXplLmdldCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX3NpemU7IH07XG5cblxuICAvKipcbiAgICogQ3JlYXRlIGEgdHJlZSBhbmQgbG9hZCBpdCB3aXRoIGl0ZW1zXG4gICAqIEBwYXJhbXtBcnJheTxLZXk+fSAgICAgICAga2V5c1xuICAgKiBAcGFyYW17QXJyYXk8VmFsdWU+P30gICAgICBbdmFsdWVzXVxuXG4gICAqIEBwYXJhbXtGdW5jdGlvbj99ICAgICAgICAgIFtjb21wYXJhdG9yXVxuICAgKiBAcGFyYW17Qm9vbGVhbj99ICAgICAgICAgICBbcHJlc29ydD1mYWxzZV0gUHJlLXNvcnQga2V5cyBhbmQgdmFsdWVzLCB1c2luZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyZWUncyBjb21wYXJhdG9yLiBTb3J0aW5nIGlzIGRvbmVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbi1wbGFjZVxuICAgKiBAcGFyYW17Qm9vbGVhbj99ICAgICAgICAgICBbbm9EdXBsaWNhdGVzPWZhbHNlXSBBbGxvdyBkdXBsaWNhdGVzXG4gICAqIEByZXR1cm4ge1NwbGF5VHJlZX1cbiAgICovXG4gIFNwbGF5VHJlZS5jcmVhdGVUcmVlID0gZnVuY3Rpb24gY3JlYXRlVHJlZSAoa2V5cywgdmFsdWVzLCBjb21wYXJhdG9yLCBwcmVzb3J0LCBub0R1cGxpY2F0ZXMpIHtcbiAgICByZXR1cm4gbmV3IFNwbGF5VHJlZShjb21wYXJhdG9yLCBub0R1cGxpY2F0ZXMpLmxvYWQoa2V5cywgdmFsdWVzLCBwcmVzb3J0KTtcbiAgfTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyggU3BsYXlUcmVlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzICk7XG5cblxuICBmdW5jdGlvbiBsb2FkUmVjdXJzaXZlIChwYXJlbnQsIGtleXMsIHZhbHVlcywgc3RhcnQsIGVuZCkge1xuICAgIHZhciBzaXplID0gZW5kIC0gc3RhcnQ7XG4gICAgaWYgKHNpemUgPiAwKSB7XG4gICAgICB2YXIgbWlkZGxlID0gc3RhcnQgKyBNYXRoLmZsb29yKHNpemUgLyAyKTtcbiAgICAgIHZhciBrZXkgICAgPSBrZXlzW21pZGRsZV07XG4gICAgICB2YXIgZGF0YSAgID0gdmFsdWVzW21pZGRsZV07XG4gICAgICB2YXIgbm9kZSAgID0geyBrZXk6IGtleSwgZGF0YTogZGF0YSwgcGFyZW50OiBwYXJlbnQgfTtcbiAgICAgIG5vZGUubGVmdCAgICA9IGxvYWRSZWN1cnNpdmUobm9kZSwga2V5cywgdmFsdWVzLCBzdGFydCwgbWlkZGxlKTtcbiAgICAgIG5vZGUucmlnaHQgICA9IGxvYWRSZWN1cnNpdmUobm9kZSwga2V5cywgdmFsdWVzLCBtaWRkbGUgKyAxLCBlbmQpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuICBmdW5jdGlvbiBzb3J0KGtleXMsIHZhbHVlcywgbGVmdCwgcmlnaHQsIGNvbXBhcmUpIHtcbiAgICBpZiAobGVmdCA+PSByaWdodCkgeyByZXR1cm47IH1cblxuICAgIHZhciBwaXZvdCA9IGtleXNbKGxlZnQgKyByaWdodCkgPj4gMV07XG4gICAgdmFyIGkgPSBsZWZ0IC0gMTtcbiAgICB2YXIgaiA9IHJpZ2h0ICsgMTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBkbyB7IGkrKzsgfSB3aGlsZSAoY29tcGFyZShrZXlzW2ldLCBwaXZvdCkgPCAwKTtcbiAgICAgIGRvIHsgai0tOyB9IHdoaWxlIChjb21wYXJlKGtleXNbal0sIHBpdm90KSA+IDApO1xuICAgICAgaWYgKGkgPj0gaikgeyBicmVhazsgfVxuXG4gICAgICB2YXIgdG1wID0ga2V5c1tpXTtcbiAgICAgIGtleXNbaV0gPSBrZXlzW2pdO1xuICAgICAga2V5c1tqXSA9IHRtcDtcblxuICAgICAgdG1wID0gdmFsdWVzW2ldO1xuICAgICAgdmFsdWVzW2ldID0gdmFsdWVzW2pdO1xuICAgICAgdmFsdWVzW2pdID0gdG1wO1xuICAgIH1cblxuICAgIHNvcnQoa2V5cywgdmFsdWVzLCAgbGVmdCwgICAgIGosIGNvbXBhcmUpO1xuICAgIHNvcnQoa2V5cywgdmFsdWVzLCBqICsgMSwgcmlnaHQsIGNvbXBhcmUpO1xuICB9XG5cbiAgdmFyIE5PUk1BTCAgICAgICAgICAgICAgID0gMDtcbiAgdmFyIE5PTl9DT05UUklCVVRJTkcgICAgID0gMTtcbiAgdmFyIFNBTUVfVFJBTlNJVElPTiAgICAgID0gMjtcbiAgdmFyIERJRkZFUkVOVF9UUkFOU0lUSU9OID0gMztcblxuICB2YXIgSU5URVJTRUNUSU9OID0gMDtcbiAgdmFyIFVOSU9OICAgICAgICA9IDE7XG4gIHZhciBESUZGRVJFTkNFICAgPSAyO1xuICB2YXIgWE9SICAgICAgICAgID0gMztcblxuICAvKipcbiAgICogQHBhcmFtICB7U3dlZXBFdmVudH0gZXZlbnRcbiAgICogQHBhcmFtICB7U3dlZXBFdmVudH0gcHJldlxuICAgKiBAcGFyYW0gIHtPcGVyYXRpb259IG9wZXJhdGlvblxuICAgKi9cbiAgZnVuY3Rpb24gY29tcHV0ZUZpZWxkcyAoZXZlbnQsIHByZXYsIG9wZXJhdGlvbikge1xuICAgIC8vIGNvbXB1dGUgaW5PdXQgYW5kIG90aGVySW5PdXQgZmllbGRzXG4gICAgaWYgKHByZXYgPT09IG51bGwpIHtcbiAgICAgIGV2ZW50LmluT3V0ICAgICAgPSBmYWxzZTtcbiAgICAgIGV2ZW50Lm90aGVySW5PdXQgPSB0cnVlO1xuXG4gICAgLy8gcHJldmlvdXMgbGluZSBzZWdtZW50IGluIHN3ZWVwbGluZSBiZWxvbmdzIHRvIHRoZSBzYW1lIHBvbHlnb25cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGV2ZW50LmlzU3ViamVjdCA9PT0gcHJldi5pc1N1YmplY3QpIHtcbiAgICAgICAgZXZlbnQuaW5PdXQgICAgICA9ICFwcmV2LmluT3V0O1xuICAgICAgICBldmVudC5vdGhlckluT3V0ID0gcHJldi5vdGhlckluT3V0O1xuXG4gICAgICAvLyBwcmV2aW91cyBsaW5lIHNlZ21lbnQgaW4gc3dlZXBsaW5lIGJlbG9uZ3MgdG8gdGhlIGNsaXBwaW5nIHBvbHlnb25cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV2ZW50LmluT3V0ICAgICAgPSAhcHJldi5vdGhlckluT3V0O1xuICAgICAgICBldmVudC5vdGhlckluT3V0ID0gcHJldi5pc1ZlcnRpY2FsKCkgPyAhcHJldi5pbk91dCA6IHByZXYuaW5PdXQ7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbXB1dGUgcHJldkluUmVzdWx0IGZpZWxkXG4gICAgICBpZiAocHJldikge1xuICAgICAgICBldmVudC5wcmV2SW5SZXN1bHQgPSAoIWluUmVzdWx0KHByZXYsIG9wZXJhdGlvbikgfHwgcHJldi5pc1ZlcnRpY2FsKCkpXG4gICAgICAgICAgPyBwcmV2LnByZXZJblJlc3VsdCA6IHByZXY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgdGhlIGxpbmUgc2VnbWVudCBiZWxvbmdzIHRvIHRoZSBCb29sZWFuIG9wZXJhdGlvblxuICAgIGV2ZW50LmluUmVzdWx0ID0gaW5SZXN1bHQoZXZlbnQsIG9wZXJhdGlvbik7XG4gIH1cblxuXG4gIC8qIGVzbGludC1kaXNhYmxlIGluZGVudCAqL1xuICBmdW5jdGlvbiBpblJlc3VsdChldmVudCwgb3BlcmF0aW9uKSB7XG4gICAgc3dpdGNoIChldmVudC50eXBlKSB7XG4gICAgICBjYXNlIE5PUk1BTDpcbiAgICAgICAgc3dpdGNoIChvcGVyYXRpb24pIHtcbiAgICAgICAgICBjYXNlIElOVEVSU0VDVElPTjpcbiAgICAgICAgICAgIHJldHVybiAhZXZlbnQub3RoZXJJbk91dDtcbiAgICAgICAgICBjYXNlIFVOSU9OOlxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50Lm90aGVySW5PdXQ7XG4gICAgICAgICAgY2FzZSBESUZGRVJFTkNFOlxuICAgICAgICAgICAgLy8gcmV0dXJuIChldmVudC5pc1N1YmplY3QgJiYgIWV2ZW50Lm90aGVySW5PdXQpIHx8XG4gICAgICAgICAgICAvLyAgICAgICAgICghZXZlbnQuaXNTdWJqZWN0ICYmIGV2ZW50Lm90aGVySW5PdXQpO1xuICAgICAgICAgICAgcmV0dXJuIChldmVudC5pc1N1YmplY3QgJiYgZXZlbnQub3RoZXJJbk91dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKCFldmVudC5pc1N1YmplY3QgJiYgIWV2ZW50Lm90aGVySW5PdXQpO1xuICAgICAgICAgIGNhc2UgWE9SOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNBTUVfVFJBTlNJVElPTjpcbiAgICAgICAgcmV0dXJuIG9wZXJhdGlvbiA9PT0gSU5URVJTRUNUSU9OIHx8IG9wZXJhdGlvbiA9PT0gVU5JT047XG4gICAgICBjYXNlIERJRkZFUkVOVF9UUkFOU0lUSU9OOlxuICAgICAgICByZXR1cm4gb3BlcmF0aW9uID09PSBESUZGRVJFTkNFO1xuICAgICAgY2FzZSBOT05fQ09OVFJJQlVUSU5HOlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIGluZGVudCAqL1xuXG4gIHZhciBTd2VlcEV2ZW50ID0gZnVuY3Rpb24gU3dlZXBFdmVudCAocG9pbnQsIGxlZnQsIG90aGVyRXZlbnQsIGlzU3ViamVjdCwgZWRnZVR5cGUpIHtcblxuICAgIC8qKlxuICAgICAqIElzIGxlZnQgZW5kcG9pbnQ/XG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5sZWZ0ID0gbGVmdDtcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtBcnJheS48TnVtYmVyPn1cbiAgICAgKi9cbiAgICB0aGlzLnBvaW50ID0gcG9pbnQ7XG5cbiAgICAvKipcbiAgICAgKiBPdGhlciBlZGdlIHJlZmVyZW5jZVxuICAgICAqIEB0eXBlIHtTd2VlcEV2ZW50fVxuICAgICAqL1xuICAgIHRoaXMub3RoZXJFdmVudCA9IG90aGVyRXZlbnQ7XG5cbiAgICAvKipcbiAgICAgKiBCZWxvbmdzIHRvIHNvdXJjZSBvciBjbGlwcGluZyBwb2x5Z29uXG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5pc1N1YmplY3QgPSBpc1N1YmplY3Q7XG5cbiAgICAvKipcbiAgICAgKiBFZGdlIGNvbnRyaWJ1dGlvbiB0eXBlXG4gICAgICogQHR5cGUge051bWJlcn1cbiAgICAgKi9cbiAgICB0aGlzLnR5cGUgPSBlZGdlVHlwZSB8fCBOT1JNQUw7XG5cblxuICAgIC8qKlxuICAgICAqIEluLW91dCB0cmFuc2l0aW9uIGZvciB0aGUgc3dlZXBsaW5lIGNyb3NzaW5nIHBvbHlnb25cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmluT3V0ID0gZmFsc2U7XG5cblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtCb29sZWFufVxuICAgICAqL1xuICAgIHRoaXMub3RoZXJJbk91dCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogUHJldmlvdXMgZXZlbnQgaW4gcmVzdWx0P1xuICAgICAqIEB0eXBlIHtTd2VlcEV2ZW50fVxuICAgICAqL1xuICAgIHRoaXMucHJldkluUmVzdWx0ID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIERvZXMgZXZlbnQgYmVsb25nIHRvIHJlc3VsdD9cbiAgICAgKiBAdHlwZSB7Qm9vbGVhbn1cbiAgICAgKi9cbiAgICB0aGlzLmluUmVzdWx0ID0gZmFsc2U7XG5cblxuICAgIC8vIGNvbm5lY3Rpb24gc3RlcFxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge0Jvb2xlYW59XG4gICAgICovXG4gICAgdGhpcy5yZXN1bHRJbk91dCA9IGZhbHNlO1xuXG4gICAgdGhpcy5pc0V4dGVyaW9yUmluZyA9IHRydWU7XG4gIH07XG5cblxuICAvKipcbiAgICogQHBhcmFte0FycmF5LjxOdW1iZXI+fXBcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIFN3ZWVwRXZlbnQucHJvdG90eXBlLmlzQmVsb3cgPSBmdW5jdGlvbiBpc0JlbG93IChwKSB7XG4gICAgdmFyIHAwID0gdGhpcy5wb2ludCwgcDEgPSB0aGlzLm90aGVyRXZlbnQucG9pbnQ7XG4gICAgcmV0dXJuIHRoaXMubGVmdFxuICAgICAgPyAocDBbMF0gLSBwWzBdKSAqIChwMVsxXSAtIHBbMV0pIC0gKHAxWzBdIC0gcFswXSkgKiAocDBbMV0gLSBwWzFdKSA+IDBcbiAgICAgIC8vIHNpZ25lZEFyZWEodGhpcy5wb2ludCwgdGhpcy5vdGhlckV2ZW50LnBvaW50LCBwKSA+IDAgOlxuICAgICAgOiAocDFbMF0gLSBwWzBdKSAqIChwMFsxXSAtIHBbMV0pIC0gKHAwWzBdIC0gcFswXSkgKiAocDFbMV0gLSBwWzFdKSA+IDA7XG4gICAgICAvL3NpZ25lZEFyZWEodGhpcy5vdGhlckV2ZW50LnBvaW50LCB0aGlzLnBvaW50LCBwKSA+IDA7XG4gIH07XG5cblxuICAvKipcbiAgICogQHBhcmFte0FycmF5LjxOdW1iZXI+fXBcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIFN3ZWVwRXZlbnQucHJvdG90eXBlLmlzQWJvdmUgPSBmdW5jdGlvbiBpc0Fib3ZlIChwKSB7XG4gICAgcmV0dXJuICF0aGlzLmlzQmVsb3cocCk7XG4gIH07XG5cblxuICAvKipcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIFN3ZWVwRXZlbnQucHJvdG90eXBlLmlzVmVydGljYWwgPSBmdW5jdGlvbiBpc1ZlcnRpY2FsICgpIHtcbiAgICByZXR1cm4gdGhpcy5wb2ludFswXSA9PT0gdGhpcy5vdGhlckV2ZW50LnBvaW50WzBdO1xuICB9O1xuXG5cbiAgU3dlZXBFdmVudC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiBjbG9uZSAoKSB7XG4gICAgdmFyIGNvcHkgPSBuZXcgU3dlZXBFdmVudChcbiAgICAgIHRoaXMucG9pbnQsIHRoaXMubGVmdCwgdGhpcy5vdGhlckV2ZW50LCB0aGlzLmlzU3ViamVjdCwgdGhpcy50eXBlKTtcblxuICAgIGNvcHkuaW5SZXN1bHQgICAgID0gdGhpcy5pblJlc3VsdDtcbiAgICBjb3B5LnByZXZJblJlc3VsdCA9IHRoaXMucHJldkluUmVzdWx0O1xuICAgIGNvcHkuaXNFeHRlcmlvclJpbmcgPSB0aGlzLmlzRXh0ZXJpb3JSaW5nO1xuICAgIGNvcHkuaW5PdXQgICAgICAgID0gdGhpcy5pbk91dDtcbiAgICBjb3B5Lm90aGVySW5PdXQgICA9IHRoaXMub3RoZXJJbk91dDtcblxuICAgIHJldHVybiBjb3B5O1xuICB9O1xuXG4gIGZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgICBpZiAocDFbMF0gPT09IHAyWzBdKSB7XG4gICAgICBpZiAocDFbMV0gPT09IHAyWzFdKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBjb25zdCBFUFNJTE9OID0gMWUtOTtcbiAgLy8gY29uc3QgYWJzID0gTWF0aC5hYnM7XG4gIC8vIFRPRE8gaHR0cHM6Ly9naXRodWIuY29tL3c4ci9tYXJ0aW5lei9pc3N1ZXMvNiNpc3N1ZWNvbW1lbnQtMjYyODQ3MTY0XG4gIC8vIFByZWNpc2lvbiBwcm9ibGVtLlxuICAvL1xuICAvLyBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVxdWFscyhwMSwgcDIpIHtcbiAgLy8gICByZXR1cm4gYWJzKHAxWzBdIC0gcDJbMF0pIDw9IEVQU0lMT04gJiYgYWJzKHAxWzFdIC0gcDJbMV0pIDw9IEVQU0lMT047XG4gIC8vIH07XG5cbiAgLyoqXG4gICAqIFNpZ25lZCBhcmVhIG9mIHRoZSB0cmlhbmdsZSAocDAsIHAxLCBwMilcbiAgICogQHBhcmFtICB7QXJyYXkuPE51bWJlcj59IHAwXG4gICAqIEBwYXJhbSAge0FycmF5LjxOdW1iZXI+fSBwMVxuICAgKiBAcGFyYW0gIHtBcnJheS48TnVtYmVyPn0gcDJcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gc2lnbmVkQXJlYShwMCwgcDEsIHAyKSB7XG4gICAgcmV0dXJuIChwMFswXSAtIHAyWzBdKSAqIChwMVsxXSAtIHAyWzFdKSAtIChwMVswXSAtIHAyWzBdKSAqIChwMFsxXSAtIHAyWzFdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtTd2VlcEV2ZW50fSBlMVxuICAgKiBAcGFyYW0gIHtTd2VlcEV2ZW50fSBlMlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBjb21wYXJlRXZlbnRzKGUxLCBlMikge1xuICAgIHZhciBwMSA9IGUxLnBvaW50O1xuICAgIHZhciBwMiA9IGUyLnBvaW50O1xuXG4gICAgLy8gRGlmZmVyZW50IHgtY29vcmRpbmF0ZVxuICAgIGlmIChwMVswXSA+IHAyWzBdKSB7IHJldHVybiAxOyB9XG4gICAgaWYgKHAxWzBdIDwgcDJbMF0pIHsgcmV0dXJuIC0xOyB9XG5cbiAgICAvLyBEaWZmZXJlbnQgcG9pbnRzLCBidXQgc2FtZSB4LWNvb3JkaW5hdGVcbiAgICAvLyBFdmVudCB3aXRoIGxvd2VyIHktY29vcmRpbmF0ZSBpcyBwcm9jZXNzZWQgZmlyc3RcbiAgICBpZiAocDFbMV0gIT09IHAyWzFdKSB7IHJldHVybiBwMVsxXSA+IHAyWzFdID8gMSA6IC0xOyB9XG5cbiAgICByZXR1cm4gc3BlY2lhbENhc2VzKGUxLCBlMiwgcDEsIHAyKTtcbiAgfVxuXG5cbiAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbiAgZnVuY3Rpb24gc3BlY2lhbENhc2VzKGUxLCBlMiwgcDEsIHAyKSB7XG4gICAgLy8gU2FtZSBjb29yZGluYXRlcywgYnV0IG9uZSBpcyBhIGxlZnQgZW5kcG9pbnQgYW5kIHRoZSBvdGhlciBpc1xuICAgIC8vIGEgcmlnaHQgZW5kcG9pbnQuIFRoZSByaWdodCBlbmRwb2ludCBpcyBwcm9jZXNzZWQgZmlyc3RcbiAgICBpZiAoZTEubGVmdCAhPT0gZTIubGVmdClcbiAgICAgIHsgcmV0dXJuIGUxLmxlZnQgPyAxIDogLTE7IH1cblxuICAgIC8vIGNvbnN0IHAyID0gZTEub3RoZXJFdmVudC5wb2ludCwgcDMgPSBlMi5vdGhlckV2ZW50LnBvaW50O1xuICAgIC8vIGNvbnN0IHNhID0gKHAxWzBdIC0gcDNbMF0pICogKHAyWzFdIC0gcDNbMV0pIC0gKHAyWzBdIC0gcDNbMF0pICogKHAxWzFdIC0gcDNbMV0pXG4gICAgLy8gU2FtZSBjb29yZGluYXRlcywgYm90aCBldmVudHNcbiAgICAvLyBhcmUgbGVmdCBlbmRwb2ludHMgb3IgcmlnaHQgZW5kcG9pbnRzLlxuICAgIC8vIG5vdCBjb2xsaW5lYXJcbiAgICBpZiAoc2lnbmVkQXJlYShwMSwgZTEub3RoZXJFdmVudC5wb2ludCwgZTIub3RoZXJFdmVudC5wb2ludCkgIT09IDApIHtcbiAgICAgIC8vIHRoZSBldmVudCBhc3NvY2lhdGUgdG8gdGhlIGJvdHRvbSBzZWdtZW50IGlzIHByb2Nlc3NlZCBmaXJzdFxuICAgICAgcmV0dXJuICghZTEuaXNCZWxvdyhlMi5vdGhlckV2ZW50LnBvaW50KSkgPyAxIDogLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuICghZTEuaXNTdWJqZWN0ICYmIGUyLmlzU3ViamVjdCkgPyAxIDogLTE7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtTd2VlcEV2ZW50fSBzZVxuICAgKiBAcGFyYW0gIHtBcnJheS48TnVtYmVyPn0gcFxuICAgKiBAcGFyYW0gIHtRdWV1ZX0gcXVldWVcbiAgICogQHJldHVybiB7UXVldWV9XG4gICAqL1xuICBmdW5jdGlvbiBkaXZpZGVTZWdtZW50KHNlLCBwLCBxdWV1ZSkgIHtcbiAgICB2YXIgciA9IG5ldyBTd2VlcEV2ZW50KHAsIGZhbHNlLCBzZSwgICAgICAgICAgICBzZS5pc1N1YmplY3QpO1xuICAgIHZhciBsID0gbmV3IFN3ZWVwRXZlbnQocCwgdHJ1ZSwgIHNlLm90aGVyRXZlbnQsIHNlLmlzU3ViamVjdCk7XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgaWYgKGVxdWFscyhzZS5wb2ludCwgc2Uub3RoZXJFdmVudC5wb2ludCkpIHtcblxuICAgICAgY29uc29sZS53YXJuKCd3aGF0IGlzIHRoYXQsIGEgY29sbGFwc2VkIHNlZ21lbnQ/Jywgc2UpO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cblxuICAgIHIuY29udG91cklkID0gbC5jb250b3VySWQgPSBzZS5jb250b3VySWQ7XG5cbiAgICAvLyBhdm9pZCBhIHJvdW5kaW5nIGVycm9yLiBUaGUgbGVmdCBldmVudCB3b3VsZCBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHJpZ2h0IGV2ZW50XG4gICAgaWYgKGNvbXBhcmVFdmVudHMobCwgc2Uub3RoZXJFdmVudCkgPiAwKSB7XG4gICAgICBzZS5vdGhlckV2ZW50LmxlZnQgPSB0cnVlO1xuICAgICAgbC5sZWZ0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gYXZvaWQgYSByb3VuZGluZyBlcnJvci4gVGhlIGxlZnQgZXZlbnQgd291bGQgYmUgcHJvY2Vzc2VkIGFmdGVyIHRoZSByaWdodCBldmVudFxuICAgIC8vIGlmIChjb21wYXJlRXZlbnRzKHNlLCByKSA+IDApIHt9XG5cbiAgICBzZS5vdGhlckV2ZW50Lm90aGVyRXZlbnQgPSBsO1xuICAgIHNlLm90aGVyRXZlbnQgPSByO1xuXG4gICAgcXVldWUucHVzaChsKTtcbiAgICBxdWV1ZS5wdXNoKHIpO1xuXG4gICAgcmV0dXJuIHF1ZXVlO1xuICB9XG5cbiAgLy9jb25zdCBFUFMgPSAxZS05O1xuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgbWFnbml0dWRlIG9mIHRoZSBjcm9zcyBwcm9kdWN0IG9mIHR3byB2ZWN0b3JzIChpZiB3ZSBwcmV0ZW5kXG4gICAqIHRoZXkncmUgaW4gdGhyZWUgZGltZW5zaW9ucylcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IGEgRmlyc3QgdmVjdG9yXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBiIFNlY29uZCB2ZWN0b3JcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybnMge051bWJlcn0gVGhlIG1hZ25pdHVkZSBvZiB0aGUgY3Jvc3MgcHJvZHVjdFxuICAgKi9cbiAgZnVuY3Rpb24gY3Jvc3NQcm9kdWN0KGEsIGIpIHtcbiAgICByZXR1cm4gKGFbMF0gKiBiWzFdKSAtIChhWzFdICogYlswXSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWN0b3JzLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gYSBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtIHtPYmplY3R9IGIgU2Vjb25kIHZlY3RvclxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgZG90IHByb2R1Y3RcbiAgICovXG4gIGZ1bmN0aW9uIGRvdFByb2R1Y3QoYSwgYikge1xuICAgIHJldHVybiAoYVswXSAqIGJbMF0pICsgKGFbMV0gKiBiWzFdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyB0aGUgaW50ZXJzZWN0aW9uIChpZiBhbnkpIGJldHdlZW4gdHdvIGxpbmUgc2VnbWVudHMgYSBhbmQgYiwgZ2l2ZW4gdGhlXG4gICAqIGxpbmUgc2VnbWVudHMnIGVuZCBwb2ludHMgYTEsIGEyIGFuZCBiMSwgYjIuXG4gICAqXG4gICAqIFRoaXMgYWxnb3JpdGhtIGlzIGJhc2VkIG9uIFNjaG5laWRlciBhbmQgRWJlcmx5LlxuICAgKiBodHRwOi8vd3d3LmNpbWVjLm9yZy5hci9+bmNhbHZvL1NjaG5laWRlcl9FYmVybHkucGRmXG4gICAqIFBhZ2UgMjQ0LlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5LjxOdW1iZXI+fSBhMSBwb2ludCBvZiBmaXJzdCBsaW5lXG4gICAqIEBwYXJhbSB7QXJyYXkuPE51bWJlcj59IGEyIHBvaW50IG9mIGZpcnN0IGxpbmVcbiAgICogQHBhcmFtIHtBcnJheS48TnVtYmVyPn0gYjEgcG9pbnQgb2Ygc2Vjb25kIGxpbmVcbiAgICogQHBhcmFtIHtBcnJheS48TnVtYmVyPn0gYjIgcG9pbnQgb2Ygc2Vjb25kIGxpbmVcbiAgICogQHBhcmFtIHtCb29sZWFuPX0gICAgICAgbm9FbmRwb2ludFRvdWNoIHdoZXRoZXIgdG8gc2tpcCBzaW5nbGUgdG91Y2hwb2ludHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZWFuaW5nIGNvbm5lY3RlZCBzZWdtZW50cykgYXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyc2VjdGlvbnNcbiAgICogQHJldHVybnMge0FycmF5LjxBcnJheS48TnVtYmVyPj58TnVsbH0gSWYgdGhlIGxpbmVzIGludGVyc2VjdCwgdGhlIHBvaW50IG9mXG4gICAqIGludGVyc2VjdGlvbi4gSWYgdGhleSBvdmVybGFwLCB0aGUgdHdvIGVuZCBwb2ludHMgb2YgdGhlIG92ZXJsYXBwaW5nIHNlZ21lbnQuXG4gICAqIE90aGVyd2lzZSwgbnVsbC5cbiAgICovXG4gIGZ1bmN0aW9uIGludGVyc2VjdGlvbiAoYTEsIGEyLCBiMSwgYjIsIG5vRW5kcG9pbnRUb3VjaCkge1xuICAgIC8vIFRoZSBhbGdvcml0aG0gZXhwZWN0cyBvdXIgbGluZXMgaW4gdGhlIGZvcm0gUCArIHNkLCB3aGVyZSBQIGlzIGEgcG9pbnQsXG4gICAgLy8gcyBpcyBvbiB0aGUgaW50ZXJ2YWwgWzAsIDFdLCBhbmQgZCBpcyBhIHZlY3Rvci5cbiAgICAvLyBXZSBhcmUgcGFzc2VkIHR3byBwb2ludHMuIFAgY2FuIGJlIHRoZSBmaXJzdCBwb2ludCBvZiBlYWNoIHBhaXIuIFRoZVxuICAgIC8vIHZlY3RvciwgdGhlbiwgY291bGQgYmUgdGhvdWdodCBvZiBhcyB0aGUgZGlzdGFuY2UgKGluIHggYW5kIHkgY29tcG9uZW50cylcbiAgICAvLyBmcm9tIHRoZSBmaXJzdCBwb2ludCB0byB0aGUgc2Vjb25kIHBvaW50LlxuICAgIC8vIFNvIGZpcnN0LCBsZXQncyBtYWtlIG91ciB2ZWN0b3JzOlxuICAgIHZhciB2YSA9IFthMlswXSAtIGExWzBdLCBhMlsxXSAtIGExWzFdXTtcbiAgICB2YXIgdmIgPSBbYjJbMF0gLSBiMVswXSwgYjJbMV0gLSBiMVsxXV07XG4gICAgLy8gV2UgYWxzbyBkZWZpbmUgYSBmdW5jdGlvbiB0byBjb252ZXJ0IGJhY2sgdG8gcmVndWxhciBwb2ludCBmb3JtOlxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgYXJyb3ctYm9keS1zdHlsZSAqL1xuXG4gICAgZnVuY3Rpb24gdG9Qb2ludChwLCBzLCBkKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBwWzBdICsgcyAqIGRbMF0sXG4gICAgICAgIHBbMV0gKyBzICogZFsxXVxuICAgICAgXTtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZW5hYmxlIGFycm93LWJvZHktc3R5bGUgKi9cblxuICAgIC8vIFRoZSByZXN0IGlzIHByZXR0eSBtdWNoIGEgc3RyYWlnaHQgcG9ydCBvZiB0aGUgYWxnb3JpdGhtLlxuICAgIHZhciBlID0gW2IxWzBdIC0gYTFbMF0sIGIxWzFdIC0gYTFbMV1dO1xuICAgIHZhciBrcm9zcyAgICA9IGNyb3NzUHJvZHVjdCh2YSwgdmIpO1xuICAgIHZhciBzcXJLcm9zcyA9IGtyb3NzICoga3Jvc3M7XG4gICAgdmFyIHNxckxlbkEgID0gZG90UHJvZHVjdCh2YSwgdmEpO1xuICAgIC8vY29uc3Qgc3FyTGVuQiAgPSBkb3RQcm9kdWN0KHZiLCB2Yik7XG5cbiAgICAvLyBDaGVjayBmb3IgbGluZSBpbnRlcnNlY3Rpb24uIFRoaXMgd29ya3MgYmVjYXVzZSBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGVcbiAgICAvLyBjcm9zcyBwcm9kdWN0IC0tIHNwZWNpZmljYWxseSwgdHdvIHZlY3RvcnMgYXJlIHBhcmFsbGVsIGlmIGFuZCBvbmx5IGlmIHRoZVxuICAgIC8vIGNyb3NzIHByb2R1Y3QgaXMgdGhlIDAgdmVjdG9yLiBUaGUgZnVsbCBjYWxjdWxhdGlvbiBpbnZvbHZlcyByZWxhdGl2ZSBlcnJvclxuICAgIC8vIHRvIGFjY291bnQgZm9yIHBvc3NpYmxlIHZlcnkgc21hbGwgbGluZSBzZWdtZW50cy4gU2VlIFNjaG5laWRlciAmIEViZXJseVxuICAgIC8vIGZvciBkZXRhaWxzLlxuICAgIGlmIChzcXJLcm9zcyA+IDAvKiBFUFMgKiBzcXJMZW5CICogc3FMZW5BICovKSB7XG4gICAgICAvLyBJZiB0aGV5J3JlIG5vdCBwYXJhbGxlbCwgdGhlbiAoYmVjYXVzZSB0aGVzZSBhcmUgbGluZSBzZWdtZW50cykgdGhleVxuICAgICAgLy8gc3RpbGwgbWlnaHQgbm90IGFjdHVhbGx5IGludGVyc2VjdC4gVGhpcyBjb2RlIGNoZWNrcyB0aGF0IHRoZVxuICAgICAgLy8gaW50ZXJzZWN0aW9uIHBvaW50IG9mIHRoZSBsaW5lcyBpcyBhY3R1YWxseSBvbiBib3RoIGxpbmUgc2VnbWVudHMuXG4gICAgICB2YXIgcyA9IGNyb3NzUHJvZHVjdChlLCB2YikgLyBrcm9zcztcbiAgICAgIGlmIChzIDwgMCB8fCBzID4gMSkge1xuICAgICAgICAvLyBub3Qgb24gbGluZSBzZWdtZW50IGFcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgdCA9IGNyb3NzUHJvZHVjdChlLCB2YSkgLyBrcm9zcztcbiAgICAgIGlmICh0IDwgMCB8fCB0ID4gMSkge1xuICAgICAgICAvLyBub3Qgb24gbGluZSBzZWdtZW50IGJcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAocyA9PT0gMCB8fCBzID09PSAxKSB7XG4gICAgICAgIC8vIG9uIGFuIGVuZHBvaW50IG9mIGxpbmUgc2VnbWVudCBhXG4gICAgICAgIHJldHVybiBub0VuZHBvaW50VG91Y2ggPyBudWxsIDogW3RvUG9pbnQoYTEsIHMsIHZhKV07XG4gICAgICB9XG4gICAgICBpZiAodCA9PT0gMCB8fCB0ID09PSAxKSB7XG4gICAgICAgIC8vIG9uIGFuIGVuZHBvaW50IG9mIGxpbmUgc2VnbWVudCBiXG4gICAgICAgIHJldHVybiBub0VuZHBvaW50VG91Y2ggPyBudWxsIDogW3RvUG9pbnQoYjEsIHQsIHZiKV07XG4gICAgICB9XG4gICAgICByZXR1cm4gW3RvUG9pbnQoYTEsIHMsIHZhKV07XG4gICAgfVxuXG4gICAgLy8gSWYgd2UndmUgcmVhY2hlZCB0aGlzIHBvaW50LCB0aGVuIHRoZSBsaW5lcyBhcmUgZWl0aGVyIHBhcmFsbGVsIG9yIHRoZVxuICAgIC8vIHNhbWUsIGJ1dCB0aGUgc2VnbWVudHMgY291bGQgb3ZlcmxhcCBwYXJ0aWFsbHkgb3IgZnVsbHksIG9yIG5vdCBhdCBhbGwuXG4gICAgLy8gU28gd2UgbmVlZCB0byBmaW5kIHRoZSBvdmVybGFwLCBpZiBhbnkuIFRvIGRvIHRoYXQsIHdlIGNhbiB1c2UgZSwgd2hpY2ggaXNcbiAgICAvLyB0aGUgKHZlY3RvcikgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gaW5pdGlhbCBwb2ludHMuIElmIHRoaXMgaXMgcGFyYWxsZWxcbiAgICAvLyB3aXRoIHRoZSBsaW5lIGl0c2VsZiwgdGhlbiB0aGUgdHdvIGxpbmVzIGFyZSB0aGUgc2FtZSBsaW5lLCBhbmQgdGhlcmUgd2lsbFxuICAgIC8vIGJlIG92ZXJsYXAuXG4gICAgLy9jb25zdCBzcXJMZW5FID0gZG90UHJvZHVjdChlLCBlKTtcbiAgICBrcm9zcyA9IGNyb3NzUHJvZHVjdChlLCB2YSk7XG4gICAgc3FyS3Jvc3MgPSBrcm9zcyAqIGtyb3NzO1xuXG4gICAgaWYgKHNxcktyb3NzID4gMCAvKiBFUFMgKiBzcUxlbkIgKiBzcUxlbkUgKi8pIHtcbiAgICAvLyBMaW5lcyBhcmUganVzdCBwYXJhbGxlbCwgbm90IHRoZSBzYW1lLiBObyBvdmVybGFwLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHNhID0gZG90UHJvZHVjdCh2YSwgZSkgLyBzcXJMZW5BO1xuICAgIHZhciBzYiA9IHNhICsgZG90UHJvZHVjdCh2YSwgdmIpIC8gc3FyTGVuQTtcbiAgICB2YXIgc21pbiA9IE1hdGgubWluKHNhLCBzYik7XG4gICAgdmFyIHNtYXggPSBNYXRoLm1heChzYSwgc2IpO1xuXG4gICAgLy8gdGhpcyBpcywgZXNzZW50aWFsbHksIHRoZSBGaW5kSW50ZXJzZWN0aW9uIGFjdGluZyBvbiBmbG9hdHMgZnJvbVxuICAgIC8vIFNjaG5laWRlciAmIEViZXJseSwganVzdCBpbmxpbmVkIGludG8gdGhpcyBmdW5jdGlvbi5cbiAgICBpZiAoc21pbiA8PSAxICYmIHNtYXggPj0gMCkge1xuXG4gICAgICAvLyBvdmVybGFwIG9uIGFuIGVuZCBwb2ludFxuICAgICAgaWYgKHNtaW4gPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIG5vRW5kcG9pbnRUb3VjaCA/IG51bGwgOiBbdG9Qb2ludChhMSwgc21pbiA+IDAgPyBzbWluIDogMCwgdmEpXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNtYXggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5vRW5kcG9pbnRUb3VjaCA/IG51bGwgOiBbdG9Qb2ludChhMSwgc21heCA8IDEgPyBzbWF4IDogMSwgdmEpXTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vRW5kcG9pbnRUb3VjaCAmJiBzbWluID09PSAwICYmIHNtYXggPT09IDEpIHsgcmV0dXJuIG51bGw7IH1cblxuICAgICAgLy8gVGhlcmUncyBvdmVybGFwIG9uIGEgc2VnbWVudCAtLSB0d28gcG9pbnRzIG9mIGludGVyc2VjdGlvbi4gUmV0dXJuIGJvdGguXG4gICAgICByZXR1cm4gW1xuICAgICAgICB0b1BvaW50KGExLCBzbWluID4gMCA/IHNtaW4gOiAwLCB2YSksXG4gICAgICAgIHRvUG9pbnQoYTEsIHNtYXggPCAxID8gc21heCA6IDEsIHZhKVxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtTd2VlcEV2ZW50fSBzZTFcbiAgICogQHBhcmFtICB7U3dlZXBFdmVudH0gc2UyXG4gICAqIEBwYXJhbSAge1F1ZXVlfSAgICAgIHF1ZXVlXG4gICAqIEByZXR1cm4ge051bWJlcn1cbiAgICovXG4gIGZ1bmN0aW9uIHBvc3NpYmxlSW50ZXJzZWN0aW9uIChzZTEsIHNlMiwgcXVldWUpIHtcbiAgICAvLyB0aGF0IGRpc2FsbG93cyBzZWxmLWludGVyc2VjdGluZyBwb2x5Z29ucyxcbiAgICAvLyBkaWQgY29zdCB1cyBoYWxmIGEgZGF5LCBzbyBJJ2xsIGxlYXZlIGl0XG4gICAgLy8gb3V0IG9mIHJlc3BlY3RcbiAgICAvLyBpZiAoc2UxLmlzU3ViamVjdCA9PT0gc2UyLmlzU3ViamVjdCkgcmV0dXJuO1xuICAgIHZhciBpbnRlciA9IGludGVyc2VjdGlvbihcbiAgICAgIHNlMS5wb2ludCwgc2UxLm90aGVyRXZlbnQucG9pbnQsXG4gICAgICBzZTIucG9pbnQsIHNlMi5vdGhlckV2ZW50LnBvaW50XG4gICAgKTtcblxuICAgIHZhciBuaW50ZXJzZWN0aW9ucyA9IGludGVyID8gaW50ZXIubGVuZ3RoIDogMDtcbiAgICBpZiAobmludGVyc2VjdGlvbnMgPT09IDApIHsgcmV0dXJuIDA7IH0gLy8gbm8gaW50ZXJzZWN0aW9uXG5cbiAgICAvLyB0aGUgbGluZSBzZWdtZW50cyBpbnRlcnNlY3QgYXQgYW4gZW5kcG9pbnQgb2YgYm90aCBsaW5lIHNlZ21lbnRzXG4gICAgaWYgKChuaW50ZXJzZWN0aW9ucyA9PT0gMSkgJiZcbiAgICAgICAgKGVxdWFscyhzZTEucG9pbnQsIHNlMi5wb2ludCkgfHxcbiAgICAgICAgIGVxdWFscyhzZTEub3RoZXJFdmVudC5wb2ludCwgc2UyLm90aGVyRXZlbnQucG9pbnQpKSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKG5pbnRlcnNlY3Rpb25zID09PSAyICYmIHNlMS5pc1N1YmplY3QgPT09IHNlMi5pc1N1YmplY3QpIHtcbiAgICAgIC8vIGlmKHNlMS5jb250b3VySWQgPT09IHNlMi5jb250b3VySWQpe1xuICAgICAgLy8gY29uc29sZS53YXJuKCdFZGdlcyBvZiB0aGUgc2FtZSBwb2x5Z29uIG92ZXJsYXAnLFxuICAgICAgLy8gICBzZTEucG9pbnQsIHNlMS5vdGhlckV2ZW50LnBvaW50LCBzZTIucG9pbnQsIHNlMi5vdGhlckV2ZW50LnBvaW50KTtcbiAgICAgIC8vIH1cbiAgICAgIC8vdGhyb3cgbmV3IEVycm9yKCdFZGdlcyBvZiB0aGUgc2FtZSBwb2x5Z29uIG92ZXJsYXAnKTtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIFRoZSBsaW5lIHNlZ21lbnRzIGFzc29jaWF0ZWQgdG8gc2UxIGFuZCBzZTIgaW50ZXJzZWN0XG4gICAgaWYgKG5pbnRlcnNlY3Rpb25zID09PSAxKSB7XG5cbiAgICAgIC8vIGlmIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgaXMgbm90IGFuIGVuZHBvaW50IG9mIHNlMVxuICAgICAgaWYgKCFlcXVhbHMoc2UxLnBvaW50LCBpbnRlclswXSkgJiYgIWVxdWFscyhzZTEub3RoZXJFdmVudC5wb2ludCwgaW50ZXJbMF0pKSB7XG4gICAgICAgIGRpdmlkZVNlZ21lbnQoc2UxLCBpbnRlclswXSwgcXVldWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGUgaW50ZXJzZWN0aW9uIHBvaW50IGlzIG5vdCBhbiBlbmRwb2ludCBvZiBzZTJcbiAgICAgIGlmICghZXF1YWxzKHNlMi5wb2ludCwgaW50ZXJbMF0pICYmICFlcXVhbHMoc2UyLm90aGVyRXZlbnQucG9pbnQsIGludGVyWzBdKSkge1xuICAgICAgICBkaXZpZGVTZWdtZW50KHNlMiwgaW50ZXJbMF0sIHF1ZXVlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8vIFRoZSBsaW5lIHNlZ21lbnRzIGFzc29jaWF0ZWQgdG8gc2UxIGFuZCBzZTIgb3ZlcmxhcFxuICAgIHZhciBldmVudHMgICAgICAgID0gW107XG4gICAgdmFyIGxlZnRDb2luY2lkZSAgPSBmYWxzZTtcbiAgICB2YXIgcmlnaHRDb2luY2lkZSA9IGZhbHNlO1xuXG4gICAgaWYgKGVxdWFscyhzZTEucG9pbnQsIHNlMi5wb2ludCkpIHtcbiAgICAgIGxlZnRDb2luY2lkZSA9IHRydWU7IC8vIGxpbmtlZFxuICAgIH0gZWxzZSBpZiAoY29tcGFyZUV2ZW50cyhzZTEsIHNlMikgPT09IDEpIHtcbiAgICAgIGV2ZW50cy5wdXNoKHNlMiwgc2UxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXZlbnRzLnB1c2goc2UxLCBzZTIpO1xuICAgIH1cblxuICAgIGlmIChlcXVhbHMoc2UxLm90aGVyRXZlbnQucG9pbnQsIHNlMi5vdGhlckV2ZW50LnBvaW50KSkge1xuICAgICAgcmlnaHRDb2luY2lkZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjb21wYXJlRXZlbnRzKHNlMS5vdGhlckV2ZW50LCBzZTIub3RoZXJFdmVudCkgPT09IDEpIHtcbiAgICAgIGV2ZW50cy5wdXNoKHNlMi5vdGhlckV2ZW50LCBzZTEub3RoZXJFdmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50cy5wdXNoKHNlMS5vdGhlckV2ZW50LCBzZTIub3RoZXJFdmVudCk7XG4gICAgfVxuXG4gICAgaWYgKChsZWZ0Q29pbmNpZGUgJiYgcmlnaHRDb2luY2lkZSkgfHwgbGVmdENvaW5jaWRlKSB7XG4gICAgICAvLyBib3RoIGxpbmUgc2VnbWVudHMgYXJlIGVxdWFsIG9yIHNoYXJlIHRoZSBsZWZ0IGVuZHBvaW50XG4gICAgICBzZTIudHlwZSA9IE5PTl9DT05UUklCVVRJTkc7XG4gICAgICBzZTEudHlwZSA9IChzZTIuaW5PdXQgPT09IHNlMS5pbk91dClcbiAgICAgICAgPyBTQU1FX1RSQU5TSVRJT04gOiBESUZGRVJFTlRfVFJBTlNJVElPTjtcblxuICAgICAgaWYgKGxlZnRDb2luY2lkZSAmJiAhcmlnaHRDb2luY2lkZSkge1xuICAgICAgICAvLyBob25lc3RseSBubyBpZGVhLCBidXQgY2hhbmdpbmcgZXZlbnRzIHNlbGVjdGlvbiBmcm9tIFsyLCAxXVxuICAgICAgICAvLyB0byBbMCwgMV0gZml4ZXMgdGhlIG92ZXJsYXBwaW5nIHNlbGYtaW50ZXJzZWN0aW5nIHBvbHlnb25zIGlzc3VlXG4gICAgICAgIGRpdmlkZVNlZ21lbnQoZXZlbnRzWzFdLm90aGVyRXZlbnQsIGV2ZW50c1swXS5wb2ludCwgcXVldWUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDI7XG4gICAgfVxuXG4gICAgLy8gdGhlIGxpbmUgc2VnbWVudHMgc2hhcmUgdGhlIHJpZ2h0IGVuZHBvaW50XG4gICAgaWYgKHJpZ2h0Q29pbmNpZGUpIHtcbiAgICAgIGRpdmlkZVNlZ21lbnQoZXZlbnRzWzBdLCBldmVudHNbMV0ucG9pbnQsIHF1ZXVlKTtcbiAgICAgIHJldHVybiAzO1xuICAgIH1cblxuICAgIC8vIG5vIGxpbmUgc2VnbWVudCBpbmNsdWRlcyB0b3RhbGx5IHRoZSBvdGhlciBvbmVcbiAgICBpZiAoZXZlbnRzWzBdICE9PSBldmVudHNbM10ub3RoZXJFdmVudCkge1xuICAgICAgZGl2aWRlU2VnbWVudChldmVudHNbMF0sIGV2ZW50c1sxXS5wb2ludCwgcXVldWUpO1xuICAgICAgZGl2aWRlU2VnbWVudChldmVudHNbMV0sIGV2ZW50c1syXS5wb2ludCwgcXVldWUpO1xuICAgICAgcmV0dXJuIDM7XG4gICAgfVxuXG4gICAgLy8gb25lIGxpbmUgc2VnbWVudCBpbmNsdWRlcyB0aGUgb3RoZXIgb25lXG4gICAgZGl2aWRlU2VnbWVudChldmVudHNbMF0sIGV2ZW50c1sxXS5wb2ludCwgcXVldWUpO1xuICAgIGRpdmlkZVNlZ21lbnQoZXZlbnRzWzNdLm90aGVyRXZlbnQsIGV2ZW50c1syXS5wb2ludCwgcXVldWUpO1xuXG4gICAgcmV0dXJuIDM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtICB7U3dlZXBFdmVudH0gbGUxXG4gICAqIEBwYXJhbSAge1N3ZWVwRXZlbnR9IGxlMlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBjb21wYXJlU2VnbWVudHMobGUxLCBsZTIpIHtcbiAgICBpZiAobGUxID09PSBsZTIpIHsgcmV0dXJuIDA7IH1cblxuICAgIC8vIFNlZ21lbnRzIGFyZSBub3QgY29sbGluZWFyXG4gICAgaWYgKHNpZ25lZEFyZWEobGUxLnBvaW50LCBsZTEub3RoZXJFdmVudC5wb2ludCwgbGUyLnBvaW50KSAhPT0gMCB8fFxuICAgICAgc2lnbmVkQXJlYShsZTEucG9pbnQsIGxlMS5vdGhlckV2ZW50LnBvaW50LCBsZTIub3RoZXJFdmVudC5wb2ludCkgIT09IDApIHtcblxuICAgICAgLy8gSWYgdGhleSBzaGFyZSB0aGVpciBsZWZ0IGVuZHBvaW50IHVzZSB0aGUgcmlnaHQgZW5kcG9pbnQgdG8gc29ydFxuICAgICAgaWYgKGVxdWFscyhsZTEucG9pbnQsIGxlMi5wb2ludCkpIHsgcmV0dXJuIGxlMS5pc0JlbG93KGxlMi5vdGhlckV2ZW50LnBvaW50KSA/IC0xIDogMTsgfVxuXG4gICAgICAvLyBEaWZmZXJlbnQgbGVmdCBlbmRwb2ludDogdXNlIHRoZSBsZWZ0IGVuZHBvaW50IHRvIHNvcnRcbiAgICAgIGlmIChsZTEucG9pbnRbMF0gPT09IGxlMi5wb2ludFswXSkgeyByZXR1cm4gbGUxLnBvaW50WzFdIDwgbGUyLnBvaW50WzFdID8gLTEgOiAxOyB9XG5cbiAgICAgIC8vIGhhcyB0aGUgbGluZSBzZWdtZW50IGFzc29jaWF0ZWQgdG8gZTEgYmVlbiBpbnNlcnRlZFxuICAgICAgLy8gaW50byBTIGFmdGVyIHRoZSBsaW5lIHNlZ21lbnQgYXNzb2NpYXRlZCB0byBlMiA/XG4gICAgICBpZiAoY29tcGFyZUV2ZW50cyhsZTEsIGxlMikgPT09IDEpIHsgcmV0dXJuIGxlMi5pc0Fib3ZlKGxlMS5wb2ludCkgPyAtMSA6IDE7IH1cblxuICAgICAgLy8gVGhlIGxpbmUgc2VnbWVudCBhc3NvY2lhdGVkIHRvIGUyIGhhcyBiZWVuIGluc2VydGVkXG4gICAgICAvLyBpbnRvIFMgYWZ0ZXIgdGhlIGxpbmUgc2VnbWVudCBhc3NvY2lhdGVkIHRvIGUxXG4gICAgICByZXR1cm4gbGUxLmlzQmVsb3cobGUyLnBvaW50KSA/IC0xIDogMTtcbiAgICB9XG5cbiAgICBpZiAobGUxLmlzU3ViamVjdCA9PT0gbGUyLmlzU3ViamVjdCkgeyAvLyBzYW1lIHBvbHlnb25cbiAgICAgIHZhciBwMSA9IGxlMS5wb2ludCwgcDIgPSBsZTIucG9pbnQ7XG4gICAgICBpZiAocDFbMF0gPT09IHAyWzBdICYmIHAxWzFdID09PSBwMlsxXS8qZXF1YWxzKGxlMS5wb2ludCwgbGUyLnBvaW50KSovKSB7XG4gICAgICAgIHAxID0gbGUxLm90aGVyRXZlbnQucG9pbnQ7IHAyID0gbGUyLm90aGVyRXZlbnQucG9pbnQ7XG4gICAgICAgIGlmIChwMVswXSA9PT0gcDJbMF0gJiYgcDFbMV0gPT09IHAyWzFdKSB7IHJldHVybiAwOyB9XG4gICAgICAgIGVsc2UgeyByZXR1cm4gbGUxLmNvbnRvdXJJZCA+IGxlMi5jb250b3VySWQgPyAxIDogLTE7IH1cbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyBTZWdtZW50cyBhcmUgY29sbGluZWFyLCBidXQgYmVsb25nIHRvIHNlcGFyYXRlIHBvbHlnb25zXG4gICAgICByZXR1cm4gbGUxLmlzU3ViamVjdCA/IC0xIDogMTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZUV2ZW50cyhsZTEsIGxlMikgPT09IDEgPyAxIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBzdWJkaXZpZGUoZXZlbnRRdWV1ZSwgc3ViamVjdCwgY2xpcHBpbmcsIHNiYm94LCBjYmJveCwgb3BlcmF0aW9uKSB7XG4gICAgdmFyIHN3ZWVwTGluZSA9IG5ldyBTcGxheVRyZWUoY29tcGFyZVNlZ21lbnRzKTtcbiAgICB2YXIgc29ydGVkRXZlbnRzID0gW107XG5cbiAgICB2YXIgcmlnaHRib3VuZCA9IE1hdGgubWluKHNiYm94WzJdLCBjYmJveFsyXSk7XG5cbiAgICB2YXIgcHJldiwgbmV4dCwgYmVnaW47XG5cbiAgICB3aGlsZSAoZXZlbnRRdWV1ZS5sZW5ndGggIT09IDApIHtcbiAgICAgIHZhciBldmVudCA9IGV2ZW50UXVldWUucG9wKCk7XG4gICAgICBzb3J0ZWRFdmVudHMucHVzaChldmVudCk7XG5cbiAgICAgIC8vIG9wdGltaXphdGlvbiBieSBiYm94ZXMgZm9yIGludGVyc2VjdGlvbiBhbmQgZGlmZmVyZW5jZSBnb2VzIGhlcmVcbiAgICAgIGlmICgob3BlcmF0aW9uID09PSBJTlRFUlNFQ1RJT04gJiYgZXZlbnQucG9pbnRbMF0gPiByaWdodGJvdW5kKSB8fFxuICAgICAgICAgIChvcGVyYXRpb24gPT09IERJRkZFUkVOQ0UgICAmJiBldmVudC5wb2ludFswXSA+IHNiYm94WzJdKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LmxlZnQpIHtcbiAgICAgICAgbmV4dCAgPSBwcmV2ID0gc3dlZXBMaW5lLmluc2VydChldmVudCk7XG4gICAgICAgIGJlZ2luID0gc3dlZXBMaW5lLm1pbk5vZGUoKTtcblxuICAgICAgICBpZiAocHJldiAhPT0gYmVnaW4pIHsgcHJldiA9IHN3ZWVwTGluZS5wcmV2KHByZXYpOyB9XG4gICAgICAgIGVsc2UgICAgICAgICAgICAgICAgeyBwcmV2ID0gbnVsbDsgfVxuXG4gICAgICAgIG5leHQgPSBzd2VlcExpbmUubmV4dChuZXh0KTtcblxuICAgICAgICB2YXIgcHJldkV2ZW50ID0gcHJldiA/IHByZXYua2V5IDogbnVsbDtcbiAgICAgICAgdmFyIHByZXZwcmV2RXZlbnQgPSAodm9pZCAwKTtcbiAgICAgICAgY29tcHV0ZUZpZWxkcyhldmVudCwgcHJldkV2ZW50LCBvcGVyYXRpb24pO1xuICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgIGlmIChwb3NzaWJsZUludGVyc2VjdGlvbihldmVudCwgbmV4dC5rZXksIGV2ZW50UXVldWUpID09PSAyKSB7XG4gICAgICAgICAgICBjb21wdXRlRmllbGRzKGV2ZW50LCBwcmV2RXZlbnQsIG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21wdXRlRmllbGRzKGV2ZW50LCBuZXh0LmtleSwgb3BlcmF0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgIGlmIChwb3NzaWJsZUludGVyc2VjdGlvbihwcmV2LmtleSwgZXZlbnQsIGV2ZW50UXVldWUpID09PSAyKSB7XG4gICAgICAgICAgICB2YXIgcHJldnByZXYgPSBwcmV2O1xuICAgICAgICAgICAgaWYgKHByZXZwcmV2ICE9PSBiZWdpbikgeyBwcmV2cHJldiA9IHN3ZWVwTGluZS5wcmV2KHByZXZwcmV2KTsgfVxuICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgeyBwcmV2cHJldiA9IG51bGw7IH1cblxuICAgICAgICAgICAgcHJldnByZXZFdmVudCA9IHByZXZwcmV2ID8gcHJldnByZXYua2V5IDogbnVsbDtcbiAgICAgICAgICAgIGNvbXB1dGVGaWVsZHMocHJldkV2ZW50LCBwcmV2cHJldkV2ZW50LCBvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tcHV0ZUZpZWxkcyhldmVudCwgICAgIHByZXZFdmVudCwgICAgIG9wZXJhdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBldmVudCA9IGV2ZW50Lm90aGVyRXZlbnQ7XG4gICAgICAgIG5leHQgPSBwcmV2ID0gc3dlZXBMaW5lLmZpbmQoZXZlbnQpO1xuXG4gICAgICAgIGlmIChwcmV2ICYmIG5leHQpIHtcblxuICAgICAgICAgIGlmIChwcmV2ICE9PSBiZWdpbikgeyBwcmV2ID0gc3dlZXBMaW5lLnByZXYocHJldik7IH1cbiAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgIHsgcHJldiA9IG51bGw7IH1cblxuICAgICAgICAgIG5leHQgPSBzd2VlcExpbmUubmV4dChuZXh0KTtcbiAgICAgICAgICBzd2VlcExpbmUucmVtb3ZlKGV2ZW50KTtcblxuICAgICAgICAgIGlmIChuZXh0ICYmIHByZXYpIHtcbiAgICAgICAgICAgIHBvc3NpYmxlSW50ZXJzZWN0aW9uKHByZXYua2V5LCBuZXh0LmtleSwgZXZlbnRRdWV1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzb3J0ZWRFdmVudHM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtICB7QXJyYXkuPFN3ZWVwRXZlbnQ+fSBzb3J0ZWRFdmVudHNcbiAgICogQHJldHVybiB7QXJyYXkuPFN3ZWVwRXZlbnQ+fVxuICAgKi9cbiAgZnVuY3Rpb24gb3JkZXJFdmVudHMoc29ydGVkRXZlbnRzKSB7XG4gICAgdmFyIGV2ZW50LCBpLCBsZW4sIHRtcDtcbiAgICB2YXIgcmVzdWx0RXZlbnRzID0gW107XG4gICAgZm9yIChpID0gMCwgbGVuID0gc29ydGVkRXZlbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBldmVudCA9IHNvcnRlZEV2ZW50c1tpXTtcbiAgICAgIGlmICgoZXZlbnQubGVmdCAmJiBldmVudC5pblJlc3VsdCkgfHxcbiAgICAgICAgKCFldmVudC5sZWZ0ICYmIGV2ZW50Lm90aGVyRXZlbnQuaW5SZXN1bHQpKSB7XG4gICAgICAgIHJlc3VsdEV2ZW50cy5wdXNoKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRHVlIHRvIG92ZXJsYXBwaW5nIGVkZ2VzIHRoZSByZXN1bHRFdmVudHMgYXJyYXkgY2FuIGJlIG5vdCB3aG9sbHkgc29ydGVkXG4gICAgdmFyIHNvcnRlZCA9IGZhbHNlO1xuICAgIHdoaWxlICghc29ydGVkKSB7XG4gICAgICBzb3J0ZWQgPSB0cnVlO1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVzdWx0RXZlbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmICgoaSArIDEpIDwgbGVuICYmXG4gICAgICAgICAgY29tcGFyZUV2ZW50cyhyZXN1bHRFdmVudHNbaV0sIHJlc3VsdEV2ZW50c1tpICsgMV0pID09PSAxKSB7XG4gICAgICAgICAgdG1wID0gcmVzdWx0RXZlbnRzW2ldO1xuICAgICAgICAgIHJlc3VsdEV2ZW50c1tpXSA9IHJlc3VsdEV2ZW50c1tpICsgMV07XG4gICAgICAgICAgcmVzdWx0RXZlbnRzW2kgKyAxXSA9IHRtcDtcbiAgICAgICAgICBzb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuXG4gICAgZm9yIChpID0gMCwgbGVuID0gcmVzdWx0RXZlbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBldmVudCA9IHJlc3VsdEV2ZW50c1tpXTtcbiAgICAgIGV2ZW50LnBvcyA9IGk7XG4gICAgfVxuXG4gICAgLy8gaW1hZ2luZSwgdGhlIHJpZ2h0IGV2ZW50IGlzIGZvdW5kIGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHF1ZXVlLFxuICAgIC8vIHdoZW4gaGlzIGxlZnQgY291bnRlcnBhcnQgaXMgbm90IG1hcmtlZCB5ZXRcbiAgICBmb3IgKGkgPSAwLCBsZW4gPSByZXN1bHRFdmVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGV2ZW50ID0gcmVzdWx0RXZlbnRzW2ldO1xuICAgICAgaWYgKCFldmVudC5sZWZ0KSB7XG4gICAgICAgIHRtcCA9IGV2ZW50LnBvcztcbiAgICAgICAgZXZlbnQucG9zID0gZXZlbnQub3RoZXJFdmVudC5wb3M7XG4gICAgICAgIGV2ZW50Lm90aGVyRXZlbnQucG9zID0gdG1wO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRFdmVudHM7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtOdW1iZXJ9IHBvc1xuICAgKiBAcGFyYW0gIHtBcnJheS48U3dlZXBFdmVudD59IHJlc3VsdEV2ZW50c1xuICAgKiBAcGFyYW0gIHtPYmplY3Q+fSAgICBwcm9jZXNzZWRcbiAgICogQHJldHVybiB7TnVtYmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gbmV4dFBvcyhwb3MsIHJlc3VsdEV2ZW50cywgcHJvY2Vzc2VkLCBvcmlnSW5kZXgpIHtcbiAgICB2YXIgbmV3UG9zID0gcG9zICsgMTtcbiAgICB2YXIgbGVuZ3RoID0gcmVzdWx0RXZlbnRzLmxlbmd0aDtcbiAgICBpZiAobmV3UG9zID4gbGVuZ3RoIC0gMSkgeyByZXR1cm4gcG9zIC0gMTsgfVxuICAgIHZhciBwICA9IHJlc3VsdEV2ZW50c1twb3NdLnBvaW50O1xuICAgIHZhciBwMSA9IHJlc3VsdEV2ZW50c1tuZXdQb3NdLnBvaW50O1xuXG5cbiAgICAvLyB3aGlsZSBpbiByYW5nZSBhbmQgbm90IHRoZSBjdXJyZW50IG9uZSBieSB2YWx1ZVxuICAgIHdoaWxlIChuZXdQb3MgPCBsZW5ndGggJiYgcDFbMF0gPT09IHBbMF0gJiYgcDFbMV0gPT09IHBbMV0pIHtcbiAgICAgIGlmICghcHJvY2Vzc2VkW25ld1Bvc10pIHtcbiAgICAgICAgcmV0dXJuIG5ld1BvcztcbiAgICAgIH0gZWxzZSAgIHtcbiAgICAgICAgbmV3UG9zKys7XG4gICAgICB9XG4gICAgICBwMSA9IHJlc3VsdEV2ZW50c1tuZXdQb3NdLnBvaW50O1xuICAgIH1cblxuICAgIG5ld1BvcyA9IHBvcyAtIDE7XG5cbiAgICB3aGlsZSAocHJvY2Vzc2VkW25ld1Bvc10gJiYgbmV3UG9zID49IG9yaWdJbmRleCkge1xuICAgICAgbmV3UG9zLS07XG4gICAgfVxuICAgIHJldHVybiBuZXdQb3M7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtBcnJheS48U3dlZXBFdmVudD59IHNvcnRlZEV2ZW50c1xuICAgKiBAcmV0dXJuIHtBcnJheS48Kj59IHBvbHlnb25zXG4gICAqL1xuICBmdW5jdGlvbiBjb25uZWN0RWRnZXMoc29ydGVkRXZlbnRzLCBvcGVyYXRpb24pIHtcbiAgICB2YXIgaSwgbGVuO1xuICAgIHZhciByZXN1bHRFdmVudHMgPSBvcmRlckV2ZW50cyhzb3J0ZWRFdmVudHMpO1xuXG4gICAgLy8gXCJmYWxzZVwiLWZpbGxlZCBhcnJheVxuICAgIHZhciBwcm9jZXNzZWQgPSB7fTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGV2ZW50O1xuXG4gICAgZm9yIChpID0gMCwgbGVuID0gcmVzdWx0RXZlbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAocHJvY2Vzc2VkW2ldKSB7IGNvbnRpbnVlOyB9XG4gICAgICB2YXIgY29udG91ciA9IFtbXV07XG5cbiAgICAgIGlmICghcmVzdWx0RXZlbnRzW2ldLmlzRXh0ZXJpb3JSaW5nKSB7XG4gICAgICAgIGlmIChvcGVyYXRpb24gPT09IERJRkZFUkVOQ0UgJiYgIXJlc3VsdEV2ZW50c1tpXS5pc1N1YmplY3QgJiYgcmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbnRvdXIpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaChbW2NvbnRvdXJdXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5wdXNoKGNvbnRvdXJbMF0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gRElGRkVSRU5DRSAmJiAhcmVzdWx0RXZlbnRzW2ldLmlzU3ViamVjdCAmJiByZXN1bHQubGVuZ3RoID4gMSkge1xuICAgICAgICByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLnB1c2goY29udG91clswXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQucHVzaChjb250b3VyKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJpbmdJZCA9IHJlc3VsdC5sZW5ndGggLSAxO1xuICAgICAgdmFyIHBvcyA9IGk7XG5cbiAgICAgIHZhciBpbml0aWFsID0gcmVzdWx0RXZlbnRzW2ldLnBvaW50O1xuICAgICAgY29udG91clswXS5wdXNoKGluaXRpYWwpO1xuXG4gICAgICB3aGlsZSAocG9zID49IGkpIHtcbiAgICAgICAgZXZlbnQgPSByZXN1bHRFdmVudHNbcG9zXTtcbiAgICAgICAgcHJvY2Vzc2VkW3Bvc10gPSB0cnVlO1xuXG4gICAgICAgIGlmIChldmVudC5sZWZ0KSB7XG4gICAgICAgICAgZXZlbnQucmVzdWx0SW5PdXQgPSBmYWxzZTtcbiAgICAgICAgICBldmVudC5jb250b3VySWQgICA9IHJpbmdJZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBldmVudC5vdGhlckV2ZW50LnJlc3VsdEluT3V0ID0gdHJ1ZTtcbiAgICAgICAgICBldmVudC5vdGhlckV2ZW50LmNvbnRvdXJJZCAgID0gcmluZ0lkO1xuICAgICAgICB9XG5cbiAgICAgICAgcG9zID0gZXZlbnQucG9zO1xuICAgICAgICBwcm9jZXNzZWRbcG9zXSA9IHRydWU7XG4gICAgICAgIGNvbnRvdXJbMF0ucHVzaChyZXN1bHRFdmVudHNbcG9zXS5wb2ludCk7XG4gICAgICAgIHBvcyA9IG5leHRQb3MocG9zLCByZXN1bHRFdmVudHMsIHByb2Nlc3NlZCwgaSk7XG4gICAgICB9XG5cbiAgICAgIHBvcyA9IHBvcyA9PT0gLTEgPyBpIDogcG9zO1xuXG4gICAgICBldmVudCA9IHJlc3VsdEV2ZW50c1twb3NdO1xuICAgICAgcHJvY2Vzc2VkW3Bvc10gPSBwcm9jZXNzZWRbZXZlbnQucG9zXSA9IHRydWU7XG4gICAgICBldmVudC5vdGhlckV2ZW50LnJlc3VsdEluT3V0ID0gdHJ1ZTtcbiAgICAgIGV2ZW50Lm90aGVyRXZlbnQuY29udG91cklkICAgPSByaW5nSWQ7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGlmIHRoZSByZXN1bHQgaXMgYSBwb2x5Z29uIChlZyBub3QgbXVsdGlwb2x5KVxuICAgIC8vIENvbW1lbnRlZCBpdCBhZ2FpbiwgbGV0J3Mgc2VlIHdoYXQgZG8gd2UgbWVhbiBieSB0aGF0XG4gICAgLy8gaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHJlc3VsdCA9IHJlc3VsdFswXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdmFyIHRpbnlxdWV1ZSA9IFRpbnlRdWV1ZTtcbiAgdmFyIGRlZmF1bHRfMSA9IFRpbnlRdWV1ZTtcblxuICBmdW5jdGlvbiBUaW55UXVldWUoZGF0YSwgY29tcGFyZSkge1xuICAgICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUaW55UXVldWUpKSB7IHJldHVybiBuZXcgVGlueVF1ZXVlKGRhdGEsIGNvbXBhcmUpOyB9XG5cbiAgICAgIHRoaXMuZGF0YSA9IGRhdGEgfHwgW107XG4gICAgICB0aGlzLmxlbmd0aCA9IHRoaXMuZGF0YS5sZW5ndGg7XG4gICAgICB0aGlzLmNvbXBhcmUgPSBjb21wYXJlIHx8IGRlZmF1bHRDb21wYXJlO1xuXG4gICAgICBpZiAodGhpcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9ICh0aGlzLmxlbmd0aCA+PiAxKSAtIDE7IGkgPj0gMDsgaS0tKSB7IHRoaXMkMS5fZG93bihpKTsgfVxuICAgICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZGVmYXVsdENvbXBhcmUoYSwgYikge1xuICAgICAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiAwO1xuICB9XG5cbiAgVGlueVF1ZXVlLnByb3RvdHlwZSA9IHtcblxuICAgICAgcHVzaDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICB0aGlzLmRhdGEucHVzaChpdGVtKTtcbiAgICAgICAgICB0aGlzLmxlbmd0aCsrO1xuICAgICAgICAgIHRoaXMuX3VwKHRoaXMubGVuZ3RoIC0gMSk7XG4gICAgICB9LFxuXG4gICAgICBwb3A6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAodGhpcy5sZW5ndGggPT09IDApIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gICAgICAgICAgdmFyIHRvcCA9IHRoaXMuZGF0YVswXTtcbiAgICAgICAgICB0aGlzLmxlbmd0aC0tO1xuXG4gICAgICAgICAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmRhdGFbMF0gPSB0aGlzLmRhdGFbdGhpcy5sZW5ndGhdO1xuICAgICAgICAgICAgICB0aGlzLl9kb3duKDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRhdGEucG9wKCk7XG5cbiAgICAgICAgICByZXR1cm4gdG9wO1xuICAgICAgfSxcblxuICAgICAgcGVlazogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFbMF07XG4gICAgICB9LFxuXG4gICAgICBfdXA6IGZ1bmN0aW9uIChwb3MpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICB2YXIgY29tcGFyZSA9IHRoaXMuY29tcGFyZTtcbiAgICAgICAgICB2YXIgaXRlbSA9IGRhdGFbcG9zXTtcblxuICAgICAgICAgIHdoaWxlIChwb3MgPiAwKSB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnQgPSAocG9zIC0gMSkgPj4gMTtcbiAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBkYXRhW3BhcmVudF07XG4gICAgICAgICAgICAgIGlmIChjb21wYXJlKGl0ZW0sIGN1cnJlbnQpID49IDApIHsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgZGF0YVtwb3NdID0gY3VycmVudDtcbiAgICAgICAgICAgICAgcG9zID0gcGFyZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbcG9zXSA9IGl0ZW07XG4gICAgICB9LFxuXG4gICAgICBfZG93bjogZnVuY3Rpb24gKHBvcykge1xuICAgICAgICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgdmFyIGNvbXBhcmUgPSB0aGlzLmNvbXBhcmU7XG4gICAgICAgICAgdmFyIGhhbGZMZW5ndGggPSB0aGlzLmxlbmd0aCA+PiAxO1xuICAgICAgICAgIHZhciBpdGVtID0gZGF0YVtwb3NdO1xuXG4gICAgICAgICAgd2hpbGUgKHBvcyA8IGhhbGZMZW5ndGgpIHtcbiAgICAgICAgICAgICAgdmFyIGxlZnQgPSAocG9zIDw8IDEpICsgMTtcbiAgICAgICAgICAgICAgdmFyIHJpZ2h0ID0gbGVmdCArIDE7XG4gICAgICAgICAgICAgIHZhciBiZXN0ID0gZGF0YVtsZWZ0XTtcblxuICAgICAgICAgICAgICBpZiAocmlnaHQgPCB0aGlzJDEubGVuZ3RoICYmIGNvbXBhcmUoZGF0YVtyaWdodF0sIGJlc3QpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgbGVmdCA9IHJpZ2h0O1xuICAgICAgICAgICAgICAgICAgYmVzdCA9IGRhdGFbcmlnaHRdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChjb21wYXJlKGJlc3QsIGl0ZW0pID49IDApIHsgYnJlYWs7IH1cblxuICAgICAgICAgICAgICBkYXRhW3Bvc10gPSBiZXN0O1xuICAgICAgICAgICAgICBwb3MgPSBsZWZ0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbcG9zXSA9IGl0ZW07XG4gICAgICB9XG4gIH07XG4gIHRpbnlxdWV1ZS5kZWZhdWx0ID0gZGVmYXVsdF8xO1xuXG4gIHZhciBtYXggPSBNYXRoLm1heDtcbiAgdmFyIG1pbiA9IE1hdGgubWluO1xuXG4gIHZhciBjb250b3VySWQgPSAwO1xuXG5cbiAgZnVuY3Rpb24gcHJvY2Vzc1BvbHlnb24oY29udG91ck9ySG9sZSwgaXNTdWJqZWN0LCBkZXB0aCwgUSwgYmJveCwgaXNFeHRlcmlvclJpbmcpIHtcbiAgICB2YXIgaSwgbGVuLCBzMSwgczIsIGUxLCBlMjtcbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBjb250b3VyT3JIb2xlLmxlbmd0aCAtIDE7IGkgPCBsZW47IGkrKykge1xuICAgICAgczEgPSBjb250b3VyT3JIb2xlW2ldO1xuICAgICAgczIgPSBjb250b3VyT3JIb2xlW2kgKyAxXTtcbiAgICAgIGUxID0gbmV3IFN3ZWVwRXZlbnQoczEsIGZhbHNlLCB1bmRlZmluZWQsIGlzU3ViamVjdCk7XG4gICAgICBlMiA9IG5ldyBTd2VlcEV2ZW50KHMyLCBmYWxzZSwgZTEsICAgICAgICBpc1N1YmplY3QpO1xuICAgICAgZTEub3RoZXJFdmVudCA9IGUyO1xuXG4gICAgICBpZiAoczFbMF0gPT09IHMyWzBdICYmIHMxWzFdID09PSBzMlsxXSkge1xuICAgICAgICBjb250aW51ZTsgLy8gc2tpcCBjb2xsYXBzZWQgZWRnZXMsIG9yIGl0IGJyZWFrc1xuICAgICAgfVxuXG4gICAgICBlMS5jb250b3VySWQgPSBlMi5jb250b3VySWQgPSBkZXB0aDtcbiAgICAgIGlmICghaXNFeHRlcmlvclJpbmcpIHtcbiAgICAgICAgZTEuaXNFeHRlcmlvclJpbmcgPSBmYWxzZTtcbiAgICAgICAgZTIuaXNFeHRlcmlvclJpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb21wYXJlRXZlbnRzKGUxLCBlMikgPiAwKSB7XG4gICAgICAgIGUyLmxlZnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZTEubGVmdCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciB4ID0gczFbMF0sIHkgPSBzMVsxXTtcbiAgICAgIGJib3hbMF0gPSBtaW4oYmJveFswXSwgeCk7XG4gICAgICBiYm94WzFdID0gbWluKGJib3hbMV0sIHkpO1xuICAgICAgYmJveFsyXSA9IG1heChiYm94WzJdLCB4KTtcbiAgICAgIGJib3hbM10gPSBtYXgoYmJveFszXSwgeSk7XG5cbiAgICAgIC8vIFB1c2hpbmcgaXQgc28gdGhlIHF1ZXVlIGlzIHNvcnRlZCBmcm9tIGxlZnQgdG8gcmlnaHQsXG4gICAgICAvLyB3aXRoIG9iamVjdCBvbiB0aGUgbGVmdCBoYXZpbmcgdGhlIGhpZ2hlc3QgcHJpb3JpdHkuXG4gICAgICBRLnB1c2goZTEpO1xuICAgICAgUS5wdXNoKGUyKTtcbiAgICB9XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGZpbGxRdWV1ZShzdWJqZWN0LCBjbGlwcGluZywgc2Jib3gsIGNiYm94LCBvcGVyYXRpb24pIHtcbiAgICB2YXIgZXZlbnRRdWV1ZSA9IG5ldyB0aW55cXVldWUobnVsbCwgY29tcGFyZUV2ZW50cyk7XG4gICAgdmFyIHBvbHlnb25TZXQsIGlzRXh0ZXJpb3JSaW5nLCBpLCBpaSwgaiwgamo7IC8vLCBrLCBraztcblxuICAgIGZvciAoaSA9IDAsIGlpID0gc3ViamVjdC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBwb2x5Z29uU2V0ID0gc3ViamVjdFtpXTtcbiAgICAgIGZvciAoaiA9IDAsIGpqID0gcG9seWdvblNldC5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIGlzRXh0ZXJpb3JSaW5nID0gaiA9PT0gMDtcbiAgICAgICAgaWYgKGlzRXh0ZXJpb3JSaW5nKSB7IGNvbnRvdXJJZCsrOyB9XG4gICAgICAgIHByb2Nlc3NQb2x5Z29uKHBvbHlnb25TZXRbal0sIHRydWUsIGNvbnRvdXJJZCwgZXZlbnRRdWV1ZSwgc2Jib3gsIGlzRXh0ZXJpb3JSaW5nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGNsaXBwaW5nLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHBvbHlnb25TZXQgPSBjbGlwcGluZ1tpXTtcbiAgICAgIGZvciAoaiA9IDAsIGpqID0gcG9seWdvblNldC5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgIGlzRXh0ZXJpb3JSaW5nID0gaiA9PT0gMDtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiA9PT0gRElGRkVSRU5DRSkgeyBpc0V4dGVyaW9yUmluZyA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChpc0V4dGVyaW9yUmluZykgeyBjb250b3VySWQrKzsgfVxuICAgICAgICBwcm9jZXNzUG9seWdvbihwb2x5Z29uU2V0W2pdLCBmYWxzZSwgY29udG91cklkLCBldmVudFF1ZXVlLCBjYmJveCwgaXNFeHRlcmlvclJpbmcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBldmVudFF1ZXVlO1xuICB9XG5cbiAgdmFyIEVNUFRZID0gW107XG5cblxuICBmdW5jdGlvbiB0cml2aWFsT3BlcmF0aW9uKHN1YmplY3QsIGNsaXBwaW5nLCBvcGVyYXRpb24pIHtcbiAgICB2YXIgcmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoc3ViamVjdC5sZW5ndGggKiBjbGlwcGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIGlmICAgICAgICAob3BlcmF0aW9uID09PSBJTlRFUlNFQ1RJT04pIHtcbiAgICAgICAgcmVzdWx0ID0gRU1QVFk7XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gRElGRkVSRU5DRSkge1xuICAgICAgICByZXN1bHQgPSBzdWJqZWN0O1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09IFVOSU9OIHx8XG4gICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9PT0gWE9SKSB7XG4gICAgICAgIHJlc3VsdCA9IChzdWJqZWN0Lmxlbmd0aCA9PT0gMCkgPyBjbGlwcGluZyA6IHN1YmplY3Q7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVCQm94ZXMoc3ViamVjdCwgY2xpcHBpbmcsIHNiYm94LCBjYmJveCwgb3BlcmF0aW9uKSB7XG4gICAgdmFyIHJlc3VsdCA9IG51bGw7XG4gICAgaWYgKHNiYm94WzBdID4gY2Jib3hbMl0gfHxcbiAgICAgICAgY2Jib3hbMF0gPiBzYmJveFsyXSB8fFxuICAgICAgICBzYmJveFsxXSA+IGNiYm94WzNdIHx8XG4gICAgICAgIGNiYm94WzFdID4gc2Jib3hbM10pIHtcbiAgICAgIGlmICAgICAgICAob3BlcmF0aW9uID09PSBJTlRFUlNFQ1RJT04pIHtcbiAgICAgICAgcmVzdWx0ID0gRU1QVFk7XG4gICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PT0gRElGRkVSRU5DRSkge1xuICAgICAgICByZXN1bHQgPSBzdWJqZWN0O1xuICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT09IFVOSU9OIHx8XG4gICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9PT0gWE9SKSB7XG4gICAgICAgIHJlc3VsdCA9IHN1YmplY3QuY29uY2F0KGNsaXBwaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gYm9vbGVhbihzdWJqZWN0LCBjbGlwcGluZywgb3BlcmF0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBzdWJqZWN0WzBdWzBdWzBdID09PSAnbnVtYmVyJykge1xuICAgICAgc3ViamVjdCA9IFtzdWJqZWN0XTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjbGlwcGluZ1swXVswXVswXSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNsaXBwaW5nID0gW2NsaXBwaW5nXTtcbiAgICB9XG4gICAgdmFyIHRyaXZpYWwgPSB0cml2aWFsT3BlcmF0aW9uKHN1YmplY3QsIGNsaXBwaW5nLCBvcGVyYXRpb24pO1xuICAgIGlmICh0cml2aWFsKSB7XG4gICAgICByZXR1cm4gdHJpdmlhbCA9PT0gRU1QVFkgPyBudWxsIDogdHJpdmlhbDtcbiAgICB9XG4gICAgdmFyIHNiYm94ID0gW0luZmluaXR5LCBJbmZpbml0eSwgLUluZmluaXR5LCAtSW5maW5pdHldO1xuICAgIHZhciBjYmJveCA9IFtJbmZpbml0eSwgSW5maW5pdHksIC1JbmZpbml0eSwgLUluZmluaXR5XTtcblxuICAgIC8vY29uc29sZS50aW1lKCdmaWxsIHF1ZXVlJyk7XG4gICAgdmFyIGV2ZW50UXVldWUgPSBmaWxsUXVldWUoc3ViamVjdCwgY2xpcHBpbmcsIHNiYm94LCBjYmJveCwgb3BlcmF0aW9uKTtcbiAgICAvL2NvbnNvbGUudGltZUVuZCgnZmlsbCBxdWV1ZScpO1xuXG4gICAgdHJpdmlhbCA9IGNvbXBhcmVCQm94ZXMoc3ViamVjdCwgY2xpcHBpbmcsIHNiYm94LCBjYmJveCwgb3BlcmF0aW9uKTtcbiAgICBpZiAodHJpdmlhbCkge1xuICAgICAgcmV0dXJuIHRyaXZpYWwgPT09IEVNUFRZID8gbnVsbCA6IHRyaXZpYWw7XG4gICAgfVxuICAgIC8vY29uc29sZS50aW1lKCdzdWJkaXZpZGUgZWRnZXMnKTtcbiAgICB2YXIgc29ydGVkRXZlbnRzID0gc3ViZGl2aWRlKGV2ZW50UXVldWUsIHN1YmplY3QsIGNsaXBwaW5nLCBzYmJveCwgY2Jib3gsIG9wZXJhdGlvbik7XG4gICAgLy9jb25zb2xlLnRpbWVFbmQoJ3N1YmRpdmlkZSBlZGdlcycpO1xuXG4gICAgLy9jb25zb2xlLnRpbWUoJ2Nvbm5lY3QgdmVydGljZXMnKTtcbiAgICB2YXIgcmVzdWx0ID0gY29ubmVjdEVkZ2VzKHNvcnRlZEV2ZW50cywgb3BlcmF0aW9uKTtcbiAgICAvL2NvbnNvbGUudGltZUVuZCgnY29ubmVjdCB2ZXJ0aWNlcycpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBmdW5jdGlvbiB1bmlvbiAoc3ViamVjdCwgY2xpcHBpbmcpIHtcbiAgICByZXR1cm4gYm9vbGVhbihzdWJqZWN0LCBjbGlwcGluZywgVU5JT04pO1xuICB9XG5cbiAgZnVuY3Rpb24gZGlmZiAoc3ViamVjdCwgY2xpcHBpbmcpIHtcbiAgICByZXR1cm4gYm9vbGVhbihzdWJqZWN0LCBjbGlwcGluZywgRElGRkVSRU5DRSk7XG4gIH1cblxuICBmdW5jdGlvbiB4b3IgKHN1YmplY3QsIGNsaXBwaW5nKXtcbiAgICByZXR1cm4gYm9vbGVhbihzdWJqZWN0LCBjbGlwcGluZywgWE9SKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludGVyc2VjdGlvbiQxIChzdWJqZWN0LCBjbGlwcGluZykge1xuICAgIHJldHVybiBib29sZWFuKHN1YmplY3QsIGNsaXBwaW5nLCBJTlRFUlNFQ1RJT04pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBlbnVtIHtOdW1iZXJ9XG4gICAqL1xuICB2YXIgb3BlcmF0aW9ucyA9IHsgVU5JT046IFVOSU9OLCBESUZGRVJFTkNFOiBESUZGRVJFTkNFLCBJTlRFUlNFQ1RJT046IElOVEVSU0VDVElPTiwgWE9SOiBYT1IgfTtcblxuICBleHBvcnRzLnVuaW9uID0gdW5pb247XG4gIGV4cG9ydHMuZGlmZiA9IGRpZmY7XG4gIGV4cG9ydHMueG9yID0geG9yO1xuICBleHBvcnRzLmludGVyc2VjdGlvbiA9IGludGVyc2VjdGlvbiQxO1xuICBleHBvcnRzLm9wZXJhdGlvbnMgPSBvcGVyYXRpb25zO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXJ0aW5lei51bWQuanMubWFwXG4iLCIvLyByYW5kb21Db2xvciBieSBEYXZpZCBNZXJmaWVsZCB1bmRlciB0aGUgQ0MwIGxpY2Vuc2Vcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZpZG1lcmZpZWxkL3JhbmRvbUNvbG9yL1xuXG47KGZ1bmN0aW9uKHJvb3QsIGZhY3RvcnkpIHtcblxuICAvLyBTdXBwb3J0IENvbW1vbkpTXG4gIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgcmFuZG9tQ29sb3IgPSBmYWN0b3J5KCk7XG5cbiAgICAvLyBTdXBwb3J0IE5vZGVKUyAmIENvbXBvbmVudCwgd2hpY2ggYWxsb3cgbW9kdWxlLmV4cG9ydHMgdG8gYmUgYSBmdW5jdGlvblxuICAgIGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHJhbmRvbUNvbG9yO1xuICAgIH1cblxuICAgIC8vIFN1cHBvcnQgQ29tbW9uSlMgMS4xLjEgc3BlY1xuICAgIGV4cG9ydHMucmFuZG9tQ29sb3IgPSByYW5kb21Db2xvcjtcblxuICAvLyBTdXBwb3J0IEFNRFxuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbXSwgZmFjdG9yeSk7XG5cbiAgLy8gU3VwcG9ydCB2YW5pbGxhIHNjcmlwdCBsb2FkaW5nXG4gIH0gZWxzZSB7XG4gICAgcm9vdC5yYW5kb21Db2xvciA9IGZhY3RvcnkoKTtcbiAgfVxuXG59KHRoaXMsIGZ1bmN0aW9uKCkge1xuXG4gIC8vIFNlZWQgdG8gZ2V0IHJlcGVhdGFibGUgY29sb3JzXG4gIHZhciBzZWVkID0gbnVsbDtcblxuICAvLyBTaGFyZWQgY29sb3IgZGljdGlvbmFyeVxuICB2YXIgY29sb3JEaWN0aW9uYXJ5ID0ge307XG5cbiAgLy8gUG9wdWxhdGUgdGhlIGNvbG9yIGRpY3Rpb25hcnlcbiAgbG9hZENvbG9yQm91bmRzKCk7XG5cbiAgLy8gY2hlY2sgaWYgYSByYW5nZSBpcyB0YWtlblxuICB2YXIgY29sb3JSYW5nZXMgPSBbXTtcblxuICB2YXIgcmFuZG9tQ29sb3IgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIHNlZWQgYW5kIGVuc3VyZSBpdCdzIGFuXG4gICAgLy8gaW50ZWdlci4gT3RoZXJ3aXNlLCByZXNldCB0aGUgc2VlZCB2YWx1ZS5cbiAgICBpZiAob3B0aW9ucy5zZWVkICE9PSB1bmRlZmluZWQgJiYgb3B0aW9ucy5zZWVkICE9PSBudWxsICYmIG9wdGlvbnMuc2VlZCA9PT0gcGFyc2VJbnQob3B0aW9ucy5zZWVkLCAxMCkpIHtcbiAgICAgIHNlZWQgPSBvcHRpb25zLnNlZWQ7XG5cbiAgICAvLyBBIHN0cmluZyB3YXMgcGFzc2VkIGFzIGEgc2VlZFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuc2VlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNlZWQgPSBzdHJpbmdUb0ludGVnZXIob3B0aW9ucy5zZWVkKTtcblxuICAgIC8vIFNvbWV0aGluZyB3YXMgcGFzc2VkIGFzIGEgc2VlZCBidXQgaXQgd2Fzbid0IGFuIGludGVnZXIgb3Igc3RyaW5nXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnNlZWQgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLnNlZWQgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzZWVkIHZhbHVlIG11c3QgYmUgYW4gaW50ZWdlciBvciBzdHJpbmcnKTtcblxuICAgIC8vIE5vIHNlZWQsIHJlc2V0IHRoZSB2YWx1ZSBvdXRzaWRlLlxuICAgIH0gZWxzZSB7XG4gICAgICBzZWVkID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgSCxTLEI7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGdlbmVyYXRlIG11bHRpcGxlIGNvbG9yc1xuICAgIGlmIChvcHRpb25zLmNvdW50ICE9PSBudWxsICYmIG9wdGlvbnMuY291bnQgIT09IHVuZGVmaW5lZCkge1xuXG4gICAgICB2YXIgdG90YWxDb2xvcnMgPSBvcHRpb25zLmNvdW50LFxuICAgICAgICAgIGNvbG9ycyA9IFtdO1xuICAgICAgLy8gVmFsdWUgZmFsc2UgYXQgaW5kZXggaSBtZWFucyB0aGUgcmFuZ2UgaSBpcyBub3QgdGFrZW4geWV0LlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvcHRpb25zLmNvdW50OyBpKyspIHtcbiAgICAgICAgY29sb3JSYW5nZXMucHVzaChmYWxzZSlcbiAgICAgICAgfVxuICAgICAgb3B0aW9ucy5jb3VudCA9IG51bGw7XG5cbiAgICAgIHdoaWxlICh0b3RhbENvbG9ycyA+IGNvbG9ycy5sZW5ndGgpIHtcblxuICAgICAgICB2YXIgY29sb3IgPSByYW5kb21Db2xvcihvcHRpb25zKTtcblxuICAgICAgICBpZiAoc2VlZCAhPT0gbnVsbCkge1xuICAgICAgICAgIG9wdGlvbnMuc2VlZCA9IHNlZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb2xvcnMucHVzaChjb2xvcik7XG4gICAgICB9XG5cbiAgICAgIG9wdGlvbnMuY291bnQgPSB0b3RhbENvbG9ycztcblxuICAgICAgcmV0dXJuIGNvbG9ycztcbiAgICB9XG5cbiAgICAvLyBGaXJzdCB3ZSBwaWNrIGEgaHVlIChIKVxuICAgIEggPSBwaWNrSHVlKG9wdGlvbnMpO1xuXG4gICAgLy8gVGhlbiB1c2UgSCB0byBkZXRlcm1pbmUgc2F0dXJhdGlvbiAoUylcbiAgICBTID0gcGlja1NhdHVyYXRpb24oSCwgb3B0aW9ucyk7XG5cbiAgICAvLyBUaGVuIHVzZSBTIGFuZCBIIHRvIGRldGVybWluZSBicmlnaHRuZXNzIChCKS5cbiAgICBCID0gcGlja0JyaWdodG5lc3MoSCwgUywgb3B0aW9ucyk7XG5cbiAgICAvLyBUaGVuIHdlIHJldHVybiB0aGUgSFNCIGNvbG9yIGluIHRoZSBkZXNpcmVkIGZvcm1hdFxuICAgIHJldHVybiBzZXRGb3JtYXQoW0gsUyxCXSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgZnVuY3Rpb24gcGlja0h1ZShvcHRpb25zKSB7XG4gICAgaWYgKGNvbG9yUmFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciBodWVSYW5nZSA9IGdldFJlYWxIdWVSYW5nZShvcHRpb25zLmh1ZSlcblxuICAgICAgdmFyIGh1ZSA9IHJhbmRvbVdpdGhpbihodWVSYW5nZSlcblxuICAgICAgLy9FYWNoIG9mIGNvbG9yUmFuZ2VzLmxlbmd0aCByYW5nZXMgaGFzIGEgbGVuZ3RoIGVxdWFsIGFwcHJveGltYXRlbGx5IG9uZSBzdGVwXG4gICAgICB2YXIgc3RlcCA9IChodWVSYW5nZVsxXSAtIGh1ZVJhbmdlWzBdKSAvIGNvbG9yUmFuZ2VzLmxlbmd0aFxuXG4gICAgICB2YXIgaiA9IHBhcnNlSW50KChodWUgLSBodWVSYW5nZVswXSkgLyBzdGVwKVxuXG4gICAgICAvL0NoZWNrIGlmIHRoZSByYW5nZSBqIGlzIHRha2VuXG4gICAgICBpZiAoY29sb3JSYW5nZXNbal0gPT09IHRydWUpIHtcbiAgICAgICAgaiA9IChqICsgMikgJSBjb2xvclJhbmdlcy5sZW5ndGhcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb2xvclJhbmdlc1tqXSA9IHRydWVcbiAgICAgICAgICAgfVxuXG4gICAgICB2YXIgbWluID0gKGh1ZVJhbmdlWzBdICsgaiAqIHN0ZXApICUgMzU5LFxuICAgICAgICAgIG1heCA9IChodWVSYW5nZVswXSArIChqICsgMSkgKiBzdGVwKSAlIDM1OTtcblxuICAgICAgaHVlUmFuZ2UgPSBbbWluLCBtYXhdXG5cbiAgICAgIGh1ZSA9IHJhbmRvbVdpdGhpbihodWVSYW5nZSlcblxuICAgICAgaWYgKGh1ZSA8IDApIHtodWUgPSAzNjAgKyBodWU7fVxuICAgICAgcmV0dXJuIGh1ZVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBodWVSYW5nZSA9IGdldEh1ZVJhbmdlKG9wdGlvbnMuaHVlKVxuXG4gICAgICBodWUgPSByYW5kb21XaXRoaW4oaHVlUmFuZ2UpO1xuICAgICAgLy8gSW5zdGVhZCBvZiBzdG9yaW5nIHJlZCBhcyB0d28gc2VwZXJhdGUgcmFuZ2VzLFxuICAgICAgLy8gd2UgZ3JvdXAgdGhlbSwgdXNpbmcgbmVnYXRpdmUgbnVtYmVyc1xuICAgICAgaWYgKGh1ZSA8IDApIHtcbiAgICAgICAgaHVlID0gMzYwICsgaHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaHVlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBpY2tTYXR1cmF0aW9uIChodWUsIG9wdGlvbnMpIHtcblxuICAgIGlmIChvcHRpb25zLmh1ZSA9PT0gJ21vbm9jaHJvbWUnKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5sdW1pbm9zaXR5ID09PSAncmFuZG9tJykge1xuICAgICAgcmV0dXJuIHJhbmRvbVdpdGhpbihbMCwxMDBdKTtcbiAgICB9XG5cbiAgICB2YXIgc2F0dXJhdGlvblJhbmdlID0gZ2V0U2F0dXJhdGlvblJhbmdlKGh1ZSk7XG5cbiAgICB2YXIgc01pbiA9IHNhdHVyYXRpb25SYW5nZVswXSxcbiAgICAgICAgc01heCA9IHNhdHVyYXRpb25SYW5nZVsxXTtcblxuICAgIHN3aXRjaCAob3B0aW9ucy5sdW1pbm9zaXR5KSB7XG5cbiAgICAgIGNhc2UgJ2JyaWdodCc6XG4gICAgICAgIHNNaW4gPSA1NTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2RhcmsnOlxuICAgICAgICBzTWluID0gc01heCAtIDEwO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGlnaHQnOlxuICAgICAgICBzTWF4ID0gNTU7XG4gICAgICAgIGJyZWFrO1xuICAgfVxuXG4gICAgcmV0dXJuIHJhbmRvbVdpdGhpbihbc01pbiwgc01heF0pO1xuXG4gIH1cblxuICBmdW5jdGlvbiBwaWNrQnJpZ2h0bmVzcyAoSCwgUywgb3B0aW9ucykge1xuXG4gICAgdmFyIGJNaW4gPSBnZXRNaW5pbXVtQnJpZ2h0bmVzcyhILCBTKSxcbiAgICAgICAgYk1heCA9IDEwMDtcblxuICAgIHN3aXRjaCAob3B0aW9ucy5sdW1pbm9zaXR5KSB7XG5cbiAgICAgIGNhc2UgJ2RhcmsnOlxuICAgICAgICBiTWF4ID0gYk1pbiArIDIwO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGlnaHQnOlxuICAgICAgICBiTWluID0gKGJNYXggKyBiTWluKS8yO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmFuZG9tJzpcbiAgICAgICAgYk1pbiA9IDA7XG4gICAgICAgIGJNYXggPSAxMDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiByYW5kb21XaXRoaW4oW2JNaW4sIGJNYXhdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldEZvcm1hdCAoaHN2LCBvcHRpb25zKSB7XG5cbiAgICBzd2l0Y2ggKG9wdGlvbnMuZm9ybWF0KSB7XG5cbiAgICAgIGNhc2UgJ2hzdkFycmF5JzpcbiAgICAgICAgcmV0dXJuIGhzdjtcblxuICAgICAgY2FzZSAnaHNsQXJyYXknOlxuICAgICAgICByZXR1cm4gSFNWdG9IU0woaHN2KTtcblxuICAgICAgY2FzZSAnaHNsJzpcbiAgICAgICAgdmFyIGhzbCA9IEhTVnRvSFNMKGhzdik7XG4gICAgICAgIHJldHVybiAnaHNsKCcraHNsWzBdKycsICcraHNsWzFdKyclLCAnK2hzbFsyXSsnJSknO1xuXG4gICAgICBjYXNlICdoc2xhJzpcbiAgICAgICAgdmFyIGhzbENvbG9yID0gSFNWdG9IU0woaHN2KTtcbiAgICAgICAgdmFyIGFscGhhID0gb3B0aW9ucy5hbHBoYSB8fCBNYXRoLnJhbmRvbSgpO1xuICAgICAgICByZXR1cm4gJ2hzbGEoJytoc2xDb2xvclswXSsnLCAnK2hzbENvbG9yWzFdKyclLCAnK2hzbENvbG9yWzJdKyclLCAnICsgYWxwaGEgKyAnKSc7XG5cbiAgICAgIGNhc2UgJ3JnYkFycmF5JzpcbiAgICAgICAgcmV0dXJuIEhTVnRvUkdCKGhzdik7XG5cbiAgICAgIGNhc2UgJ3JnYic6XG4gICAgICAgIHZhciByZ2IgPSBIU1Z0b1JHQihoc3YpO1xuICAgICAgICByZXR1cm4gJ3JnYignICsgcmdiLmpvaW4oJywgJykgKyAnKSc7XG5cbiAgICAgIGNhc2UgJ3JnYmEnOlxuICAgICAgICB2YXIgcmdiQ29sb3IgPSBIU1Z0b1JHQihoc3YpO1xuICAgICAgICB2YXIgYWxwaGEgPSBvcHRpb25zLmFscGhhIHx8IE1hdGgucmFuZG9tKCk7XG4gICAgICAgIHJldHVybiAncmdiYSgnICsgcmdiQ29sb3Iuam9pbignLCAnKSArICcsICcgKyBhbHBoYSArICcpJztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIEhTVnRvSGV4KGhzdik7XG4gICAgfVxuXG4gIH1cblxuICBmdW5jdGlvbiBnZXRNaW5pbXVtQnJpZ2h0bmVzcyhILCBTKSB7XG5cbiAgICB2YXIgbG93ZXJCb3VuZHMgPSBnZXRDb2xvckluZm8oSCkubG93ZXJCb3VuZHM7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvd2VyQm91bmRzLmxlbmd0aCAtIDE7IGkrKykge1xuXG4gICAgICB2YXIgczEgPSBsb3dlckJvdW5kc1tpXVswXSxcbiAgICAgICAgICB2MSA9IGxvd2VyQm91bmRzW2ldWzFdO1xuXG4gICAgICB2YXIgczIgPSBsb3dlckJvdW5kc1tpKzFdWzBdLFxuICAgICAgICAgIHYyID0gbG93ZXJCb3VuZHNbaSsxXVsxXTtcblxuICAgICAgaWYgKFMgPj0gczEgJiYgUyA8PSBzMikge1xuXG4gICAgICAgICB2YXIgbSA9ICh2MiAtIHYxKS8oczIgLSBzMSksXG4gICAgICAgICAgICAgYiA9IHYxIC0gbSpzMTtcblxuICAgICAgICAgcmV0dXJuIG0qUyArIGI7XG4gICAgICB9XG5cbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldEh1ZVJhbmdlIChjb2xvcklucHV0KSB7XG5cbiAgICBpZiAodHlwZW9mIHBhcnNlSW50KGNvbG9ySW5wdXQpID09PSAnbnVtYmVyJykge1xuXG4gICAgICB2YXIgbnVtYmVyID0gcGFyc2VJbnQoY29sb3JJbnB1dCk7XG5cbiAgICAgIGlmIChudW1iZXIgPCAzNjAgJiYgbnVtYmVyID4gMCkge1xuICAgICAgICByZXR1cm4gW251bWJlciwgbnVtYmVyXTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29sb3JJbnB1dCA9PT0gJ3N0cmluZycpIHtcblxuICAgICAgaWYgKGNvbG9yRGljdGlvbmFyeVtjb2xvcklucHV0XSkge1xuICAgICAgICB2YXIgY29sb3IgPSBjb2xvckRpY3Rpb25hcnlbY29sb3JJbnB1dF07XG4gICAgICAgIGlmIChjb2xvci5odWVSYW5nZSkge3JldHVybiBjb2xvci5odWVSYW5nZTt9XG4gICAgICB9IGVsc2UgaWYgKGNvbG9ySW5wdXQubWF0Y2goL14jPyhbMC05QS1GXXszfXxbMC05QS1GXXs2fSkkL2kpKSB7XG4gICAgICAgIHZhciBodWUgPSBIZXhUb0hTQihjb2xvcklucHV0KVswXTtcbiAgICAgICAgcmV0dXJuIFsgaHVlLCBodWUgXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gWzAsMzYwXTtcblxuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2F0dXJhdGlvblJhbmdlIChodWUpIHtcbiAgICByZXR1cm4gZ2V0Q29sb3JJbmZvKGh1ZSkuc2F0dXJhdGlvblJhbmdlO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0Q29sb3JJbmZvIChodWUpIHtcblxuICAgIC8vIE1hcHMgcmVkIGNvbG9ycyB0byBtYWtlIHBpY2tpbmcgaHVlIGVhc2llclxuICAgIGlmIChodWUgPj0gMzM0ICYmIGh1ZSA8PSAzNjApIHtcbiAgICAgIGh1ZS09IDM2MDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBjb2xvck5hbWUgaW4gY29sb3JEaWN0aW9uYXJ5KSB7XG4gICAgICAgdmFyIGNvbG9yID0gY29sb3JEaWN0aW9uYXJ5W2NvbG9yTmFtZV07XG4gICAgICAgaWYgKGNvbG9yLmh1ZVJhbmdlICYmXG4gICAgICAgICAgIGh1ZSA+PSBjb2xvci5odWVSYW5nZVswXSAmJlxuICAgICAgICAgICBodWUgPD0gY29sb3IuaHVlUmFuZ2VbMV0pIHtcbiAgICAgICAgICByZXR1cm4gY29sb3JEaWN0aW9uYXJ5W2NvbG9yTmFtZV07XG4gICAgICAgfVxuICAgIH0gcmV0dXJuICdDb2xvciBub3QgZm91bmQnO1xuICB9XG5cbiAgZnVuY3Rpb24gcmFuZG9tV2l0aGluIChyYW5nZSkge1xuICAgIGlmIChzZWVkID09PSBudWxsKSB7XG4gICAgICAvL2dlbmVyYXRlIHJhbmRvbSBldmVubHkgZGVzdGluY3QgbnVtYmVyIGZyb20gOiBodHRwczovL21hcnRpbi5hbmtlcmwuY29tLzIwMDkvMTIvMDkvaG93LXRvLWNyZWF0ZS1yYW5kb20tY29sb3JzLXByb2dyYW1tYXRpY2FsbHkvXG4gICAgICB2YXIgZ29sZGVuX3JhdGlvID0gMC42MTgwMzM5ODg3NDk4OTVcbiAgICAgIHZhciByPU1hdGgucmFuZG9tKClcbiAgICAgIHIgKz0gZ29sZGVuX3JhdGlvXG4gICAgICByICU9IDFcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKHJhbmdlWzBdICsgcioocmFuZ2VbMV0gKyAxIC0gcmFuZ2VbMF0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy9TZWVkZWQgcmFuZG9tIGFsZ29yaXRobSBmcm9tIGh0dHA6Ly9pbmRpZWdhbXIuY29tL2dlbmVyYXRlLXJlcGVhdGFibGUtcmFuZG9tLW51bWJlcnMtaW4tanMvXG4gICAgICB2YXIgbWF4ID0gcmFuZ2VbMV0gfHwgMTtcbiAgICAgIHZhciBtaW4gPSByYW5nZVswXSB8fCAwO1xuICAgICAgc2VlZCA9IChzZWVkICogOTMwMSArIDQ5Mjk3KSAlIDIzMzI4MDtcbiAgICAgIHZhciBybmQgPSBzZWVkIC8gMjMzMjgwLjA7XG4gICAgICByZXR1cm4gTWF0aC5mbG9vcihtaW4gKyBybmQgKiAobWF4IC0gbWluKSk7XG59XG4gIH1cblxuICBmdW5jdGlvbiBIU1Z0b0hleCAoaHN2KXtcblxuICAgIHZhciByZ2IgPSBIU1Z0b1JHQihoc3YpO1xuXG4gICAgZnVuY3Rpb24gY29tcG9uZW50VG9IZXgoYykge1xuICAgICAgICB2YXIgaGV4ID0gYy50b1N0cmluZygxNik7XG4gICAgICAgIHJldHVybiBoZXgubGVuZ3RoID09IDEgPyAnMCcgKyBoZXggOiBoZXg7XG4gICAgfVxuXG4gICAgdmFyIGhleCA9ICcjJyArIGNvbXBvbmVudFRvSGV4KHJnYlswXSkgKyBjb21wb25lbnRUb0hleChyZ2JbMV0pICsgY29tcG9uZW50VG9IZXgocmdiWzJdKTtcblxuICAgIHJldHVybiBoZXg7XG5cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlZmluZUNvbG9yIChuYW1lLCBodWVSYW5nZSwgbG93ZXJCb3VuZHMpIHtcblxuICAgIHZhciBzTWluID0gbG93ZXJCb3VuZHNbMF1bMF0sXG4gICAgICAgIHNNYXggPSBsb3dlckJvdW5kc1tsb3dlckJvdW5kcy5sZW5ndGggLSAxXVswXSxcblxuICAgICAgICBiTWluID0gbG93ZXJCb3VuZHNbbG93ZXJCb3VuZHMubGVuZ3RoIC0gMV1bMV0sXG4gICAgICAgIGJNYXggPSBsb3dlckJvdW5kc1swXVsxXTtcblxuICAgIGNvbG9yRGljdGlvbmFyeVtuYW1lXSA9IHtcbiAgICAgIGh1ZVJhbmdlOiBodWVSYW5nZSxcbiAgICAgIGxvd2VyQm91bmRzOiBsb3dlckJvdW5kcyxcbiAgICAgIHNhdHVyYXRpb25SYW5nZTogW3NNaW4sIHNNYXhdLFxuICAgICAgYnJpZ2h0bmVzc1JhbmdlOiBbYk1pbiwgYk1heF1cbiAgICB9O1xuXG4gIH1cblxuICBmdW5jdGlvbiBsb2FkQ29sb3JCb3VuZHMgKCkge1xuXG4gICAgZGVmaW5lQ29sb3IoXG4gICAgICAnbW9ub2Nocm9tZScsXG4gICAgICBudWxsLFxuICAgICAgW1swLDBdLFsxMDAsMF1dXG4gICAgKTtcblxuICAgIGRlZmluZUNvbG9yKFxuICAgICAgJ3JlZCcsXG4gICAgICBbLTI2LDE4XSxcbiAgICAgIFtbMjAsMTAwXSxbMzAsOTJdLFs0MCw4OV0sWzUwLDg1XSxbNjAsNzhdLFs3MCw3MF0sWzgwLDYwXSxbOTAsNTVdLFsxMDAsNTBdXVxuICAgICk7XG5cbiAgICBkZWZpbmVDb2xvcihcbiAgICAgICdvcmFuZ2UnLFxuICAgICAgWzE4LDQ2XSxcbiAgICAgIFtbMjAsMTAwXSxbMzAsOTNdLFs0MCw4OF0sWzUwLDg2XSxbNjAsODVdLFs3MCw3MF0sWzEwMCw3MF1dXG4gICAgKTtcblxuICAgIGRlZmluZUNvbG9yKFxuICAgICAgJ3llbGxvdycsXG4gICAgICBbNDYsNjJdLFxuICAgICAgW1syNSwxMDBdLFs0MCw5NF0sWzUwLDg5XSxbNjAsODZdLFs3MCw4NF0sWzgwLDgyXSxbOTAsODBdLFsxMDAsNzVdXVxuICAgICk7XG5cbiAgICBkZWZpbmVDb2xvcihcbiAgICAgICdncmVlbicsXG4gICAgICBbNjIsMTc4XSxcbiAgICAgIFtbMzAsMTAwXSxbNDAsOTBdLFs1MCw4NV0sWzYwLDgxXSxbNzAsNzRdLFs4MCw2NF0sWzkwLDUwXSxbMTAwLDQwXV1cbiAgICApO1xuXG4gICAgZGVmaW5lQ29sb3IoXG4gICAgICAnYmx1ZScsXG4gICAgICBbMTc4LCAyNTddLFxuICAgICAgW1syMCwxMDBdLFszMCw4Nl0sWzQwLDgwXSxbNTAsNzRdLFs2MCw2MF0sWzcwLDUyXSxbODAsNDRdLFs5MCwzOV0sWzEwMCwzNV1dXG4gICAgKTtcblxuICAgIGRlZmluZUNvbG9yKFxuICAgICAgJ3B1cnBsZScsXG4gICAgICBbMjU3LCAyODJdLFxuICAgICAgW1syMCwxMDBdLFszMCw4N10sWzQwLDc5XSxbNTAsNzBdLFs2MCw2NV0sWzcwLDU5XSxbODAsNTJdLFs5MCw0NV0sWzEwMCw0Ml1dXG4gICAgKTtcblxuICAgIGRlZmluZUNvbG9yKFxuICAgICAgJ3BpbmsnLFxuICAgICAgWzI4MiwgMzM0XSxcbiAgICAgIFtbMjAsMTAwXSxbMzAsOTBdLFs0MCw4Nl0sWzYwLDg0XSxbODAsODBdLFs5MCw3NV0sWzEwMCw3M11dXG4gICAgKTtcblxuICB9XG5cbiAgZnVuY3Rpb24gSFNWdG9SR0IgKGhzdikge1xuXG4gICAgLy8gdGhpcyBkb2Vzbid0IHdvcmsgZm9yIHRoZSB2YWx1ZXMgb2YgMCBhbmQgMzYwXG4gICAgLy8gaGVyZSdzIHRoZSBoYWNreSBmaXhcbiAgICB2YXIgaCA9IGhzdlswXTtcbiAgICBpZiAoaCA9PT0gMCkge2ggPSAxO31cbiAgICBpZiAoaCA9PT0gMzYwKSB7aCA9IDM1OTt9XG5cbiAgICAvLyBSZWJhc2UgdGhlIGgscyx2IHZhbHVlc1xuICAgIGggPSBoLzM2MDtcbiAgICB2YXIgcyA9IGhzdlsxXS8xMDAsXG4gICAgICAgIHYgPSBoc3ZbMl0vMTAwO1xuXG4gICAgdmFyIGhfaSA9IE1hdGguZmxvb3IoaCo2KSxcbiAgICAgIGYgPSBoICogNiAtIGhfaSxcbiAgICAgIHAgPSB2ICogKDEgLSBzKSxcbiAgICAgIHEgPSB2ICogKDEgLSBmKnMpLFxuICAgICAgdCA9IHYgKiAoMSAtICgxIC0gZikqcyksXG4gICAgICByID0gMjU2LFxuICAgICAgZyA9IDI1NixcbiAgICAgIGIgPSAyNTY7XG5cbiAgICBzd2l0Y2goaF9pKSB7XG4gICAgICBjYXNlIDA6IHIgPSB2OyBnID0gdDsgYiA9IHA7ICBicmVhaztcbiAgICAgIGNhc2UgMTogciA9IHE7IGcgPSB2OyBiID0gcDsgIGJyZWFrO1xuICAgICAgY2FzZSAyOiByID0gcDsgZyA9IHY7IGIgPSB0OyAgYnJlYWs7XG4gICAgICBjYXNlIDM6IHIgPSBwOyBnID0gcTsgYiA9IHY7ICBicmVhaztcbiAgICAgIGNhc2UgNDogciA9IHQ7IGcgPSBwOyBiID0gdjsgIGJyZWFrO1xuICAgICAgY2FzZSA1OiByID0gdjsgZyA9IHA7IGIgPSBxOyAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IFtNYXRoLmZsb29yKHIqMjU1KSwgTWF0aC5mbG9vcihnKjI1NSksIE1hdGguZmxvb3IoYioyNTUpXTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZnVuY3Rpb24gSGV4VG9IU0IgKGhleCkge1xuICAgIGhleCA9IGhleC5yZXBsYWNlKC9eIy8sICcnKTtcbiAgICBoZXggPSBoZXgubGVuZ3RoID09PSAzID8gaGV4LnJlcGxhY2UoLyguKS9nLCAnJDEkMScpIDogaGV4O1xuXG4gICAgdmFyIHJlZCA9IHBhcnNlSW50KGhleC5zdWJzdHIoMCwgMiksIDE2KSAvIDI1NSxcbiAgICAgICAgICBncmVlbiA9IHBhcnNlSW50KGhleC5zdWJzdHIoMiwgMiksIDE2KSAvIDI1NSxcbiAgICAgICAgICBibHVlID0gcGFyc2VJbnQoaGV4LnN1YnN0cig0LCAyKSwgMTYpIC8gMjU1O1xuXG4gICAgdmFyIGNNYXggPSBNYXRoLm1heChyZWQsIGdyZWVuLCBibHVlKSxcbiAgICAgICAgICBkZWx0YSA9IGNNYXggLSBNYXRoLm1pbihyZWQsIGdyZWVuLCBibHVlKSxcbiAgICAgICAgICBzYXR1cmF0aW9uID0gY01heCA/IChkZWx0YSAvIGNNYXgpIDogMDtcblxuICAgIHN3aXRjaCAoY01heCkge1xuICAgICAgY2FzZSByZWQ6IHJldHVybiBbIDYwICogKCgoZ3JlZW4gLSBibHVlKSAvIGRlbHRhKSAlIDYpIHx8IDAsIHNhdHVyYXRpb24sIGNNYXggXTtcbiAgICAgIGNhc2UgZ3JlZW46IHJldHVybiBbIDYwICogKCgoYmx1ZSAtIHJlZCkgLyBkZWx0YSkgKyAyKSB8fCAwLCBzYXR1cmF0aW9uLCBjTWF4IF07XG4gICAgICBjYXNlIGJsdWU6IHJldHVybiBbIDYwICogKCgocmVkIC0gZ3JlZW4pIC8gZGVsdGEpICsgNCkgfHwgMCwgc2F0dXJhdGlvbiwgY01heCBdO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIEhTVnRvSFNMIChoc3YpIHtcbiAgICB2YXIgaCA9IGhzdlswXSxcbiAgICAgIHMgPSBoc3ZbMV0vMTAwLFxuICAgICAgdiA9IGhzdlsyXS8xMDAsXG4gICAgICBrID0gKDItcykqdjtcblxuICAgIHJldHVybiBbXG4gICAgICBoLFxuICAgICAgTWF0aC5yb3VuZChzKnYgLyAoazwxID8gayA6IDItaykgKiAxMDAwMCkgLyAxMDAsXG4gICAgICBrLzIgKiAxMDBcbiAgICBdO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RyaW5nVG9JbnRlZ2VyIChzdHJpbmcpIHtcbiAgICB2YXIgdG90YWwgPSAwXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgIT09IHN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRvdGFsID49IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSBicmVhaztcbiAgICAgIHRvdGFsICs9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG4gICAgfVxuICAgIHJldHVybiB0b3RhbFxuICB9XG5cbiAgLy8gZ2V0IFRoZSByYW5nZSBvZiBnaXZlbiBodWUgd2hlbiBvcHRpb25zLmNvdW50IT0wXG4gIGZ1bmN0aW9uIGdldFJlYWxIdWVSYW5nZShjb2xvckh1ZSlcbiAgeyBpZiAoIWlzTmFOKGNvbG9ySHVlKSkge1xuICAgIHZhciBudW1iZXIgPSBwYXJzZUludChjb2xvckh1ZSk7XG5cbiAgICBpZiAobnVtYmVyIDwgMzYwICYmIG51bWJlciA+IDApIHtcbiAgICAgIHJldHVybiBnZXRDb2xvckluZm8oY29sb3JIdWUpLmh1ZVJhbmdlXG4gICAgfVxuICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGNvbG9ySHVlID09PSAnc3RyaW5nJykge1xuXG4gICAgICBpZiAoY29sb3JEaWN0aW9uYXJ5W2NvbG9ySHVlXSkge1xuICAgICAgICB2YXIgY29sb3IgPSBjb2xvckRpY3Rpb25hcnlbY29sb3JIdWVdO1xuXG4gICAgICAgIGlmIChjb2xvci5odWVSYW5nZSkge1xuICAgICAgICAgIHJldHVybiBjb2xvci5odWVSYW5nZVxuICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbG9ySHVlLm1hdGNoKC9eIz8oWzAtOUEtRl17M318WzAtOUEtRl17Nn0pJC9pKSkge1xuICAgICAgICB2YXIgaHVlID0gSGV4VG9IU0IoY29sb3JIdWUpWzBdXG4gICAgICAgIHJldHVybiBnZXRDb2xvckluZm8oaHVlKS5odWVSYW5nZVxuICAgIH1cbiAgfVxuXG4gICAgcmV0dXJuIFswLDM2MF1cbn1cbiAgcmV0dXJuIHJhbmRvbUNvbG9yO1xufSkpO1xuIiwiLy8gd3JhcHBlciBmb3Igbm9uLW5vZGUgZW52c1xuOyhmdW5jdGlvbiAoc2F4KSB7XG5cbnNheC5wYXJzZXIgPSBmdW5jdGlvbiAoc3RyaWN0LCBvcHQpIHsgcmV0dXJuIG5ldyBTQVhQYXJzZXIoc3RyaWN0LCBvcHQpIH1cbnNheC5TQVhQYXJzZXIgPSBTQVhQYXJzZXJcbnNheC5TQVhTdHJlYW0gPSBTQVhTdHJlYW1cbnNheC5jcmVhdGVTdHJlYW0gPSBjcmVhdGVTdHJlYW1cblxuLy8gV2hlbiB3ZSBwYXNzIHRoZSBNQVhfQlVGRkVSX0xFTkdUSCBwb3NpdGlvbiwgc3RhcnQgY2hlY2tpbmcgZm9yIGJ1ZmZlciBvdmVycnVucy5cbi8vIFdoZW4gd2UgY2hlY2ssIHNjaGVkdWxlIHRoZSBuZXh0IGNoZWNrIGZvciBNQVhfQlVGRkVSX0xFTkdUSCAtIChtYXgoYnVmZmVyIGxlbmd0aHMpKSxcbi8vIHNpbmNlIHRoYXQncyB0aGUgZWFybGllc3QgdGhhdCBhIGJ1ZmZlciBvdmVycnVuIGNvdWxkIG9jY3VyLiAgVGhpcyB3YXksIGNoZWNrcyBhcmVcbi8vIGFzIHJhcmUgYXMgcmVxdWlyZWQsIGJ1dCBhcyBvZnRlbiBhcyBuZWNlc3NhcnkgdG8gZW5zdXJlIG5ldmVyIGNyb3NzaW5nIHRoaXMgYm91bmQuXG4vLyBGdXJ0aGVybW9yZSwgYnVmZmVycyBhcmUgb25seSB0ZXN0ZWQgYXQgbW9zdCBvbmNlIHBlciB3cml0ZSgpLCBzbyBwYXNzaW5nIGEgdmVyeVxuLy8gbGFyZ2Ugc3RyaW5nIGludG8gd3JpdGUoKSBtaWdodCBoYXZlIHVuZGVzaXJhYmxlIGVmZmVjdHMsIGJ1dCB0aGlzIGlzIG1hbmFnZWFibGUgYnlcbi8vIHRoZSBjYWxsZXIsIHNvIGl0IGlzIGFzc3VtZWQgdG8gYmUgc2FmZS4gIFRodXMsIGEgY2FsbCB0byB3cml0ZSgpIG1heSwgaW4gdGhlIGV4dHJlbWVcbi8vIGVkZ2UgY2FzZSwgcmVzdWx0IGluIGNyZWF0aW5nIGF0IG1vc3Qgb25lIGNvbXBsZXRlIGNvcHkgb2YgdGhlIHN0cmluZyBwYXNzZWQgaW4uXG4vLyBTZXQgdG8gSW5maW5pdHkgdG8gaGF2ZSB1bmxpbWl0ZWQgYnVmZmVycy5cbnNheC5NQVhfQlVGRkVSX0xFTkdUSCA9IDY0ICogMTAyNFxuXG52YXIgYnVmZmVycyA9IFtcbiAgXCJjb21tZW50XCIsIFwic2dtbERlY2xcIiwgXCJ0ZXh0Tm9kZVwiLCBcInRhZ05hbWVcIiwgXCJkb2N0eXBlXCIsXG4gIFwicHJvY0luc3ROYW1lXCIsIFwicHJvY0luc3RCb2R5XCIsIFwiZW50aXR5XCIsIFwiYXR0cmliTmFtZVwiLFxuICBcImF0dHJpYlZhbHVlXCIsIFwiY2RhdGFcIiwgXCJzY3JpcHRcIlxuXVxuXG5zYXguRVZFTlRTID0gLy8gZm9yIGRpc2NvdmVyYWJpbGl0eS5cbiAgWyBcInRleHRcIlxuICAsIFwicHJvY2Vzc2luZ2luc3RydWN0aW9uXCJcbiAgLCBcInNnbWxkZWNsYXJhdGlvblwiXG4gICwgXCJkb2N0eXBlXCJcbiAgLCBcImNvbW1lbnRcIlxuICAsIFwiYXR0cmlidXRlXCJcbiAgLCBcIm9wZW50YWdcIlxuICAsIFwiY2xvc2V0YWdcIlxuICAsIFwib3BlbmNkYXRhXCJcbiAgLCBcImNkYXRhXCJcbiAgLCBcImNsb3NlY2RhdGFcIlxuICAsIFwiZXJyb3JcIlxuICAsIFwiZW5kXCJcbiAgLCBcInJlYWR5XCJcbiAgLCBcInNjcmlwdFwiXG4gICwgXCJvcGVubmFtZXNwYWNlXCJcbiAgLCBcImNsb3NlbmFtZXNwYWNlXCJcbiAgXVxuXG5mdW5jdGlvbiBTQVhQYXJzZXIgKHN0cmljdCwgb3B0KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTQVhQYXJzZXIpKSByZXR1cm4gbmV3IFNBWFBhcnNlcihzdHJpY3QsIG9wdClcblxuICB2YXIgcGFyc2VyID0gdGhpc1xuICBjbGVhckJ1ZmZlcnMocGFyc2VyKVxuICBwYXJzZXIucSA9IHBhcnNlci5jID0gXCJcIlxuICBwYXJzZXIuYnVmZmVyQ2hlY2tQb3NpdGlvbiA9IHNheC5NQVhfQlVGRkVSX0xFTkdUSFxuICBwYXJzZXIub3B0ID0gb3B0IHx8IHt9XG4gIHBhcnNlci5vcHQubG93ZXJjYXNlID0gcGFyc2VyLm9wdC5sb3dlcmNhc2UgfHwgcGFyc2VyLm9wdC5sb3dlcmNhc2V0YWdzXG4gIHBhcnNlci5sb29zZUNhc2UgPSBwYXJzZXIub3B0Lmxvd2VyY2FzZSA/IFwidG9Mb3dlckNhc2VcIiA6IFwidG9VcHBlckNhc2VcIlxuICBwYXJzZXIudGFncyA9IFtdXG4gIHBhcnNlci5jbG9zZWQgPSBwYXJzZXIuY2xvc2VkUm9vdCA9IHBhcnNlci5zYXdSb290ID0gZmFsc2VcbiAgcGFyc2VyLnRhZyA9IHBhcnNlci5lcnJvciA9IG51bGxcbiAgcGFyc2VyLnN0cmljdCA9ICEhc3RyaWN0XG4gIHBhcnNlci5ub3NjcmlwdCA9ICEhKHN0cmljdCB8fCBwYXJzZXIub3B0Lm5vc2NyaXB0KVxuICBwYXJzZXIuc3RhdGUgPSBTLkJFR0lOXG4gIHBhcnNlci5FTlRJVElFUyA9IE9iamVjdC5jcmVhdGUoc2F4LkVOVElUSUVTKVxuICBwYXJzZXIuYXR0cmliTGlzdCA9IFtdXG5cbiAgLy8gbmFtZXNwYWNlcyBmb3JtIGEgcHJvdG90eXBlIGNoYWluLlxuICAvLyBpdCBhbHdheXMgcG9pbnRzIGF0IHRoZSBjdXJyZW50IHRhZyxcbiAgLy8gd2hpY2ggcHJvdG9zIHRvIGl0cyBwYXJlbnQgdGFnLlxuICBpZiAocGFyc2VyLm9wdC54bWxucykgcGFyc2VyLm5zID0gT2JqZWN0LmNyZWF0ZShyb290TlMpXG5cbiAgLy8gbW9zdGx5IGp1c3QgZm9yIGVycm9yIHJlcG9ydGluZ1xuICBwYXJzZXIudHJhY2tQb3NpdGlvbiA9IHBhcnNlci5vcHQucG9zaXRpb24gIT09IGZhbHNlXG4gIGlmIChwYXJzZXIudHJhY2tQb3NpdGlvbikge1xuICAgIHBhcnNlci5wb3NpdGlvbiA9IHBhcnNlci5saW5lID0gcGFyc2VyLmNvbHVtbiA9IDBcbiAgfVxuICBlbWl0KHBhcnNlciwgXCJvbnJlYWR5XCIpXG59XG5cbmlmICghT2JqZWN0LmNyZWF0ZSkgT2JqZWN0LmNyZWF0ZSA9IGZ1bmN0aW9uIChvKSB7XG4gIGZ1bmN0aW9uIGYgKCkgeyB0aGlzLl9fcHJvdG9fXyA9IG8gfVxuICBmLnByb3RvdHlwZSA9IG9cbiAgcmV0dXJuIG5ldyBmXG59XG5cbmlmICghT2JqZWN0LmdldFByb3RvdHlwZU9mKSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPSBmdW5jdGlvbiAobykge1xuICByZXR1cm4gby5fX3Byb3RvX19cbn1cblxuaWYgKCFPYmplY3Qua2V5cykgT2JqZWN0LmtleXMgPSBmdW5jdGlvbiAobykge1xuICB2YXIgYSA9IFtdXG4gIGZvciAodmFyIGkgaW4gbykgaWYgKG8uaGFzT3duUHJvcGVydHkoaSkpIGEucHVzaChpKVxuICByZXR1cm4gYVxufVxuXG5mdW5jdGlvbiBjaGVja0J1ZmZlckxlbmd0aCAocGFyc2VyKSB7XG4gIHZhciBtYXhBbGxvd2VkID0gTWF0aC5tYXgoc2F4Lk1BWF9CVUZGRVJfTEVOR1RILCAxMClcbiAgICAsIG1heEFjdHVhbCA9IDBcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBidWZmZXJzLmxlbmd0aDsgaSA8IGw7IGkgKyspIHtcbiAgICB2YXIgbGVuID0gcGFyc2VyW2J1ZmZlcnNbaV1dLmxlbmd0aFxuICAgIGlmIChsZW4gPiBtYXhBbGxvd2VkKSB7XG4gICAgICAvLyBUZXh0L2NkYXRhIG5vZGVzIGNhbiBnZXQgYmlnLCBhbmQgc2luY2UgdGhleSdyZSBidWZmZXJlZCxcbiAgICAgIC8vIHdlIGNhbiBnZXQgaGVyZSB1bmRlciBub3JtYWwgY29uZGl0aW9ucy5cbiAgICAgIC8vIEF2b2lkIGlzc3VlcyBieSBlbWl0dGluZyB0aGUgdGV4dCBub2RlIG5vdyxcbiAgICAgIC8vIHNvIGF0IGxlYXN0IGl0IHdvbid0IGdldCBhbnkgYmlnZ2VyLlxuICAgICAgc3dpdGNoIChidWZmZXJzW2ldKSB7XG4gICAgICAgIGNhc2UgXCJ0ZXh0Tm9kZVwiOlxuICAgICAgICAgIGNsb3NlVGV4dChwYXJzZXIpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgICAgY2FzZSBcImNkYXRhXCI6XG4gICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uY2RhdGFcIiwgcGFyc2VyLmNkYXRhKVxuICAgICAgICAgIHBhcnNlci5jZGF0YSA9IFwiXCJcbiAgICAgICAgYnJlYWtcblxuICAgICAgICBjYXNlIFwic2NyaXB0XCI6XG4gICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uc2NyaXB0XCIsIHBhcnNlci5zY3JpcHQpXG4gICAgICAgICAgcGFyc2VyLnNjcmlwdCA9IFwiXCJcbiAgICAgICAgYnJlYWtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGVycm9yKHBhcnNlciwgXCJNYXggYnVmZmVyIGxlbmd0aCBleGNlZWRlZDogXCIrYnVmZmVyc1tpXSlcbiAgICAgIH1cbiAgICB9XG4gICAgbWF4QWN0dWFsID0gTWF0aC5tYXgobWF4QWN0dWFsLCBsZW4pXG4gIH1cbiAgLy8gc2NoZWR1bGUgdGhlIG5leHQgY2hlY2sgZm9yIHRoZSBlYXJsaWVzdCBwb3NzaWJsZSBidWZmZXIgb3ZlcnJ1bi5cbiAgcGFyc2VyLmJ1ZmZlckNoZWNrUG9zaXRpb24gPSAoc2F4Lk1BWF9CVUZGRVJfTEVOR1RIIC0gbWF4QWN0dWFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHBhcnNlci5wb3NpdGlvblxufVxuXG5mdW5jdGlvbiBjbGVhckJ1ZmZlcnMgKHBhcnNlcikge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGJ1ZmZlcnMubGVuZ3RoOyBpIDwgbDsgaSArKykge1xuICAgIHBhcnNlcltidWZmZXJzW2ldXSA9IFwiXCJcbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaEJ1ZmZlcnMgKHBhcnNlcikge1xuICBjbG9zZVRleHQocGFyc2VyKVxuICBpZiAocGFyc2VyLmNkYXRhICE9PSBcIlwiKSB7XG4gICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uY2RhdGFcIiwgcGFyc2VyLmNkYXRhKVxuICAgIHBhcnNlci5jZGF0YSA9IFwiXCJcbiAgfVxuICBpZiAocGFyc2VyLnNjcmlwdCAhPT0gXCJcIikge1xuICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbnNjcmlwdFwiLCBwYXJzZXIuc2NyaXB0KVxuICAgIHBhcnNlci5zY3JpcHQgPSBcIlwiXG4gIH1cbn1cblxuU0FYUGFyc2VyLnByb3RvdHlwZSA9XG4gIHsgZW5kOiBmdW5jdGlvbiAoKSB7IGVuZCh0aGlzKSB9XG4gICwgd3JpdGU6IHdyaXRlXG4gICwgcmVzdW1lOiBmdW5jdGlvbiAoKSB7IHRoaXMuZXJyb3IgPSBudWxsOyByZXR1cm4gdGhpcyB9XG4gICwgY2xvc2U6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMud3JpdGUobnVsbCkgfVxuICAsIGZsdXNoOiBmdW5jdGlvbiAoKSB7IGZsdXNoQnVmZmVycyh0aGlzKSB9XG4gIH1cblxudHJ5IHtcbiAgdmFyIFN0cmVhbSA9IHJlcXVpcmUoXCJzdHJlYW1cIikuU3RyZWFtXG59IGNhdGNoIChleCkge1xuICB2YXIgU3RyZWFtID0gZnVuY3Rpb24gKCkge31cbn1cblxuXG52YXIgc3RyZWFtV3JhcHMgPSBzYXguRVZFTlRTLmZpbHRlcihmdW5jdGlvbiAoZXYpIHtcbiAgcmV0dXJuIGV2ICE9PSBcImVycm9yXCIgJiYgZXYgIT09IFwiZW5kXCJcbn0pXG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmVhbSAoc3RyaWN0LCBvcHQpIHtcbiAgcmV0dXJuIG5ldyBTQVhTdHJlYW0oc3RyaWN0LCBvcHQpXG59XG5cbmZ1bmN0aW9uIFNBWFN0cmVhbSAoc3RyaWN0LCBvcHQpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNBWFN0cmVhbSkpIHJldHVybiBuZXcgU0FYU3RyZWFtKHN0cmljdCwgb3B0KVxuXG4gIFN0cmVhbS5hcHBseSh0aGlzKVxuXG4gIHRoaXMuX3BhcnNlciA9IG5ldyBTQVhQYXJzZXIoc3RyaWN0LCBvcHQpXG4gIHRoaXMud3JpdGFibGUgPSB0cnVlXG4gIHRoaXMucmVhZGFibGUgPSB0cnVlXG5cblxuICB2YXIgbWUgPSB0aGlzXG5cbiAgdGhpcy5fcGFyc2VyLm9uZW5kID0gZnVuY3Rpb24gKCkge1xuICAgIG1lLmVtaXQoXCJlbmRcIilcbiAgfVxuXG4gIHRoaXMuX3BhcnNlci5vbmVycm9yID0gZnVuY3Rpb24gKGVyKSB7XG4gICAgbWUuZW1pdChcImVycm9yXCIsIGVyKVxuXG4gICAgLy8gaWYgZGlkbid0IHRocm93LCB0aGVuIG1lYW5zIGVycm9yIHdhcyBoYW5kbGVkLlxuICAgIC8vIGdvIGFoZWFkIGFuZCBjbGVhciBlcnJvciwgc28gd2UgY2FuIHdyaXRlIGFnYWluLlxuICAgIG1lLl9wYXJzZXIuZXJyb3IgPSBudWxsXG4gIH1cblxuICB0aGlzLl9kZWNvZGVyID0gbnVsbDtcblxuICBzdHJlYW1XcmFwcy5mb3JFYWNoKGZ1bmN0aW9uIChldikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtZSwgXCJvblwiICsgZXYsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbWUuX3BhcnNlcltcIm9uXCIgKyBldl0gfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgaWYgKCFoKSB7XG4gICAgICAgICAgbWUucmVtb3ZlQWxsTGlzdGVuZXJzKGV2KVxuICAgICAgICAgIHJldHVybiBtZS5fcGFyc2VyW1wib25cIitldl0gPSBoXG4gICAgICAgIH1cbiAgICAgICAgbWUub24oZXYsIGgpXG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KVxuICB9KVxufVxuXG5TQVhTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTdHJlYW0ucHJvdG90eXBlLFxuICB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBTQVhTdHJlYW0gfSB9KVxuXG5TQVhTdHJlYW0ucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBCdWZmZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHR5cGVvZiBCdWZmZXIuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIGlmICghdGhpcy5fZGVjb2Rlcikge1xuICAgICAgdmFyIFNEID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKS5TdHJpbmdEZWNvZGVyXG4gICAgICB0aGlzLl9kZWNvZGVyID0gbmV3IFNEKCd1dGY4JylcbiAgICB9XG4gICAgZGF0YSA9IHRoaXMuX2RlY29kZXIud3JpdGUoZGF0YSk7XG4gIH1cblxuICB0aGlzLl9wYXJzZXIud3JpdGUoZGF0YS50b1N0cmluZygpKVxuICB0aGlzLmVtaXQoXCJkYXRhXCIsIGRhdGEpXG4gIHJldHVybiB0cnVlXG59XG5cblNBWFN0cmVhbS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gIGlmIChjaHVuayAmJiBjaHVuay5sZW5ndGgpIHRoaXMud3JpdGUoY2h1bmspXG4gIHRoaXMuX3BhcnNlci5lbmQoKVxuICByZXR1cm4gdHJ1ZVxufVxuXG5TQVhTdHJlYW0ucHJvdG90eXBlLm9uID0gZnVuY3Rpb24gKGV2LCBoYW5kbGVyKSB7XG4gIHZhciBtZSA9IHRoaXNcbiAgaWYgKCFtZS5fcGFyc2VyW1wib25cIitldl0gJiYgc3RyZWFtV3JhcHMuaW5kZXhPZihldikgIT09IC0xKSB7XG4gICAgbWUuX3BhcnNlcltcIm9uXCIrZXZdID0gZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gW2FyZ3VtZW50c1swXV1cbiAgICAgICAgICAgICAgIDogQXJyYXkuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICAgICAgYXJncy5zcGxpY2UoMCwgMCwgZXYpXG4gICAgICBtZS5lbWl0LmFwcGx5KG1lLCBhcmdzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTdHJlYW0ucHJvdG90eXBlLm9uLmNhbGwobWUsIGV2LCBoYW5kbGVyKVxufVxuXG5cblxuLy8gY2hhcmFjdGVyIGNsYXNzZXMgYW5kIHRva2Vuc1xudmFyIHdoaXRlc3BhY2UgPSBcIlxcclxcblxcdCBcIlxuICAvLyB0aGlzIHJlYWxseSBuZWVkcyB0byBiZSByZXBsYWNlZCB3aXRoIGNoYXJhY3RlciBjbGFzc2VzLlxuICAvLyBYTUwgYWxsb3dzIGFsbCBtYW5uZXIgb2YgcmlkaWN1bG91cyBudW1iZXJzIGFuZCBkaWdpdHMuXG4gICwgbnVtYmVyID0gXCIwMTI0MzU2Nzg5XCJcbiAgLCBsZXR0ZXIgPSBcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpcIlxuICAvLyAoTGV0dGVyIHwgXCJfXCIgfCBcIjpcIilcbiAgLCBxdW90ZSA9IFwiJ1xcXCJcIlxuICAsIGVudGl0eSA9IG51bWJlcitsZXR0ZXIrXCIjXCJcbiAgLCBhdHRyaWJFbmQgPSB3aGl0ZXNwYWNlICsgXCI+XCJcbiAgLCBDREFUQSA9IFwiW0NEQVRBW1wiXG4gICwgRE9DVFlQRSA9IFwiRE9DVFlQRVwiXG4gICwgWE1MX05BTUVTUEFDRSA9IFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCJcbiAgLCBYTUxOU19OQU1FU1BBQ0UgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCJcbiAgLCByb290TlMgPSB7IHhtbDogWE1MX05BTUVTUEFDRSwgeG1sbnM6IFhNTE5TX05BTUVTUEFDRSB9XG5cbi8vIHR1cm4gYWxsIHRoZSBzdHJpbmcgY2hhcmFjdGVyIHNldHMgaW50byBjaGFyYWN0ZXIgY2xhc3Mgb2JqZWN0cy5cbndoaXRlc3BhY2UgPSBjaGFyQ2xhc3Mod2hpdGVzcGFjZSlcbm51bWJlciA9IGNoYXJDbGFzcyhudW1iZXIpXG5sZXR0ZXIgPSBjaGFyQ2xhc3MobGV0dGVyKVxuXG4vLyBodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMteG1sLyNOVC1OYW1lU3RhcnRDaGFyXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIHdvcmtzIG9uIHN0cmluZ3MsIGEgc2luZ2xlIGNoYXJhY3RlciBhdCBhIHRpbWVcbi8vIGFzIHN1Y2gsIGl0IGNhbm5vdCBldmVyIHN1cHBvcnQgYXN0cmFsLXBsYW5lIGNoYXJhY3RlcnMgKDEwMDAwLUVGRkZGKVxuLy8gd2l0aG91dCBhIHNpZ25pZmljYW50IGJyZWFraW5nIGNoYW5nZSB0byBlaXRoZXIgdGhpcyAgcGFyc2VyLCBvciB0aGVcbi8vIEphdmFTY3JpcHQgbGFuZ3VhZ2UuICBJbXBsZW1lbnRhdGlvbiBvZiBhbiBlbW9qaS1jYXBhYmxlIHhtbCBwYXJzZXJcbi8vIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIuXG52YXIgbmFtZVN0YXJ0ID0gL1s6X0EtWmEtelxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMEMtXFx1MjAwRFxcdTIwNzAtXFx1MjE4RlxcdTJDMDAtXFx1MkZFRlxcdTMwMDEtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZGRF0vXG5cbnZhciBuYW1lQm9keSA9IC9bOl9BLVphLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRcXHUwMEI3XFx1MDMwMC1cXHUwMzZGXFx1MjAzRi1cXHUyMDQwXFwuXFxkLV0vXG5cbnF1b3RlID0gY2hhckNsYXNzKHF1b3RlKVxuZW50aXR5ID0gY2hhckNsYXNzKGVudGl0eSlcbmF0dHJpYkVuZCA9IGNoYXJDbGFzcyhhdHRyaWJFbmQpXG5cbmZ1bmN0aW9uIGNoYXJDbGFzcyAoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoXCJcIikucmVkdWNlKGZ1bmN0aW9uIChzLCBjKSB7XG4gICAgc1tjXSA9IHRydWVcbiAgICByZXR1cm4gc1xuICB9LCB7fSlcbn1cblxuZnVuY3Rpb24gaXNSZWdFeHAgKGMpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSdcbn1cblxuZnVuY3Rpb24gaXMgKGNoYXJjbGFzcywgYykge1xuICByZXR1cm4gaXNSZWdFeHAoY2hhcmNsYXNzKSA/ICEhYy5tYXRjaChjaGFyY2xhc3MpIDogY2hhcmNsYXNzW2NdXG59XG5cbmZ1bmN0aW9uIG5vdCAoY2hhcmNsYXNzLCBjKSB7XG4gIHJldHVybiAhaXMoY2hhcmNsYXNzLCBjKVxufVxuXG52YXIgUyA9IDBcbnNheC5TVEFURSA9XG57IEJFR0lOICAgICAgICAgICAgICAgICAgICAgOiBTKytcbiwgVEVYVCAgICAgICAgICAgICAgICAgICAgICA6IFMrKyAvLyBnZW5lcmFsIHN0dWZmXG4sIFRFWFRfRU5USVRZICAgICAgICAgICAgICAgOiBTKysgLy8gJmFtcCBhbmQgc3VjaC5cbiwgT1BFTl9XQUtBICAgICAgICAgICAgICAgICA6IFMrKyAvLyA8XG4sIFNHTUxfREVDTCAgICAgICAgICAgICAgICAgOiBTKysgLy8gPCFCTEFSR1xuLCBTR01MX0RFQ0xfUVVPVEVEICAgICAgICAgIDogUysrIC8vIDwhQkxBUkcgZm9vIFwiYmFyXG4sIERPQ1RZUEUgICAgICAgICAgICAgICAgICAgOiBTKysgLy8gPCFET0NUWVBFXG4sIERPQ1RZUEVfUVVPVEVEICAgICAgICAgICAgOiBTKysgLy8gPCFET0NUWVBFIFwiLy9ibGFoXG4sIERPQ1RZUEVfRFREICAgICAgICAgICAgICAgOiBTKysgLy8gPCFET0NUWVBFIFwiLy9ibGFoXCIgWyAuLi5cbiwgRE9DVFlQRV9EVERfUVVPVEVEICAgICAgICA6IFMrKyAvLyA8IURPQ1RZUEUgXCIvL2JsYWhcIiBbIFwiZm9vXG4sIENPTU1FTlRfU1RBUlRJTkcgICAgICAgICAgOiBTKysgLy8gPCEtXG4sIENPTU1FTlQgICAgICAgICAgICAgICAgICAgOiBTKysgLy8gPCEtLVxuLCBDT01NRU5UX0VORElORyAgICAgICAgICAgIDogUysrIC8vIDwhLS0gYmxhaCAtXG4sIENPTU1FTlRfRU5ERUQgICAgICAgICAgICAgOiBTKysgLy8gPCEtLSBibGFoIC0tXG4sIENEQVRBICAgICAgICAgICAgICAgICAgICAgOiBTKysgLy8gPCFbQ0RBVEFbIHNvbWV0aGluZ1xuLCBDREFUQV9FTkRJTkcgICAgICAgICAgICAgIDogUysrIC8vIF1cbiwgQ0RBVEFfRU5ESU5HXzIgICAgICAgICAgICA6IFMrKyAvLyBdXVxuLCBQUk9DX0lOU1QgICAgICAgICAgICAgICAgIDogUysrIC8vIDw/aGlcbiwgUFJPQ19JTlNUX0JPRFkgICAgICAgICAgICA6IFMrKyAvLyA8P2hpIHRoZXJlXG4sIFBST0NfSU5TVF9FTkRJTkcgICAgICAgICAgOiBTKysgLy8gPD9oaSBcInRoZXJlXCIgP1xuLCBPUEVOX1RBRyAgICAgICAgICAgICAgICAgIDogUysrIC8vIDxzdHJvbmdcbiwgT1BFTl9UQUdfU0xBU0ggICAgICAgICAgICA6IFMrKyAvLyA8c3Ryb25nIC9cbiwgQVRUUklCICAgICAgICAgICAgICAgICAgICA6IFMrKyAvLyA8YVxuLCBBVFRSSUJfTkFNRSAgICAgICAgICAgICAgIDogUysrIC8vIDxhIGZvb1xuLCBBVFRSSUJfTkFNRV9TQVdfV0hJVEUgICAgIDogUysrIC8vIDxhIGZvbyBfXG4sIEFUVFJJQl9WQUxVRSAgICAgICAgICAgICAgOiBTKysgLy8gPGEgZm9vPVxuLCBBVFRSSUJfVkFMVUVfUVVPVEVEICAgICAgIDogUysrIC8vIDxhIGZvbz1cImJhclxuLCBBVFRSSUJfVkFMVUVfQ0xPU0VEICAgICAgIDogUysrIC8vIDxhIGZvbz1cImJhclwiXG4sIEFUVFJJQl9WQUxVRV9VTlFVT1RFRCAgICAgOiBTKysgLy8gPGEgZm9vPWJhclxuLCBBVFRSSUJfVkFMVUVfRU5USVRZX1EgICAgIDogUysrIC8vIDxmb28gYmFyPVwiJnF1b3Q7XCJcbiwgQVRUUklCX1ZBTFVFX0VOVElUWV9VICAgICA6IFMrKyAvLyA8Zm9vIGJhcj0mcXVvdDtcbiwgQ0xPU0VfVEFHICAgICAgICAgICAgICAgICA6IFMrKyAvLyA8L2FcbiwgQ0xPU0VfVEFHX1NBV19XSElURSAgICAgICA6IFMrKyAvLyA8L2EgICA+XG4sIFNDUklQVCAgICAgICAgICAgICAgICAgICAgOiBTKysgLy8gPHNjcmlwdD4gLi4uXG4sIFNDUklQVF9FTkRJTkcgICAgICAgICAgICAgOiBTKysgLy8gPHNjcmlwdD4gLi4uIDxcbn1cblxuc2F4LkVOVElUSUVTID1cbnsgXCJhbXBcIiA6IFwiJlwiXG4sIFwiZ3RcIiA6IFwiPlwiXG4sIFwibHRcIiA6IFwiPFwiXG4sIFwicXVvdFwiIDogXCJcXFwiXCJcbiwgXCJhcG9zXCIgOiBcIidcIlxuLCBcIkFFbGlnXCIgOiAxOThcbiwgXCJBYWN1dGVcIiA6IDE5M1xuLCBcIkFjaXJjXCIgOiAxOTRcbiwgXCJBZ3JhdmVcIiA6IDE5MlxuLCBcIkFyaW5nXCIgOiAxOTdcbiwgXCJBdGlsZGVcIiA6IDE5NVxuLCBcIkF1bWxcIiA6IDE5NlxuLCBcIkNjZWRpbFwiIDogMTk5XG4sIFwiRVRIXCIgOiAyMDhcbiwgXCJFYWN1dGVcIiA6IDIwMVxuLCBcIkVjaXJjXCIgOiAyMDJcbiwgXCJFZ3JhdmVcIiA6IDIwMFxuLCBcIkV1bWxcIiA6IDIwM1xuLCBcIklhY3V0ZVwiIDogMjA1XG4sIFwiSWNpcmNcIiA6IDIwNlxuLCBcIklncmF2ZVwiIDogMjA0XG4sIFwiSXVtbFwiIDogMjA3XG4sIFwiTnRpbGRlXCIgOiAyMDlcbiwgXCJPYWN1dGVcIiA6IDIxMVxuLCBcIk9jaXJjXCIgOiAyMTJcbiwgXCJPZ3JhdmVcIiA6IDIxMFxuLCBcIk9zbGFzaFwiIDogMjE2XG4sIFwiT3RpbGRlXCIgOiAyMTNcbiwgXCJPdW1sXCIgOiAyMTRcbiwgXCJUSE9STlwiIDogMjIyXG4sIFwiVWFjdXRlXCIgOiAyMThcbiwgXCJVY2lyY1wiIDogMjE5XG4sIFwiVWdyYXZlXCIgOiAyMTdcbiwgXCJVdW1sXCIgOiAyMjBcbiwgXCJZYWN1dGVcIiA6IDIyMVxuLCBcImFhY3V0ZVwiIDogMjI1XG4sIFwiYWNpcmNcIiA6IDIyNlxuLCBcImFlbGlnXCIgOiAyMzBcbiwgXCJhZ3JhdmVcIiA6IDIyNFxuLCBcImFyaW5nXCIgOiAyMjlcbiwgXCJhdGlsZGVcIiA6IDIyN1xuLCBcImF1bWxcIiA6IDIyOFxuLCBcImNjZWRpbFwiIDogMjMxXG4sIFwiZWFjdXRlXCIgOiAyMzNcbiwgXCJlY2lyY1wiIDogMjM0XG4sIFwiZWdyYXZlXCIgOiAyMzJcbiwgXCJldGhcIiA6IDI0MFxuLCBcImV1bWxcIiA6IDIzNVxuLCBcImlhY3V0ZVwiIDogMjM3XG4sIFwiaWNpcmNcIiA6IDIzOFxuLCBcImlncmF2ZVwiIDogMjM2XG4sIFwiaXVtbFwiIDogMjM5XG4sIFwibnRpbGRlXCIgOiAyNDFcbiwgXCJvYWN1dGVcIiA6IDI0M1xuLCBcIm9jaXJjXCIgOiAyNDRcbiwgXCJvZ3JhdmVcIiA6IDI0MlxuLCBcIm9zbGFzaFwiIDogMjQ4XG4sIFwib3RpbGRlXCIgOiAyNDVcbiwgXCJvdW1sXCIgOiAyNDZcbiwgXCJzemxpZ1wiIDogMjIzXG4sIFwidGhvcm5cIiA6IDI1NFxuLCBcInVhY3V0ZVwiIDogMjUwXG4sIFwidWNpcmNcIiA6IDI1MVxuLCBcInVncmF2ZVwiIDogMjQ5XG4sIFwidXVtbFwiIDogMjUyXG4sIFwieWFjdXRlXCIgOiAyNTNcbiwgXCJ5dW1sXCIgOiAyNTVcbiwgXCJjb3B5XCIgOiAxNjlcbiwgXCJyZWdcIiA6IDE3NFxuLCBcIm5ic3BcIiA6IDE2MFxuLCBcImlleGNsXCIgOiAxNjFcbiwgXCJjZW50XCIgOiAxNjJcbiwgXCJwb3VuZFwiIDogMTYzXG4sIFwiY3VycmVuXCIgOiAxNjRcbiwgXCJ5ZW5cIiA6IDE2NVxuLCBcImJydmJhclwiIDogMTY2XG4sIFwic2VjdFwiIDogMTY3XG4sIFwidW1sXCIgOiAxNjhcbiwgXCJvcmRmXCIgOiAxNzBcbiwgXCJsYXF1b1wiIDogMTcxXG4sIFwibm90XCIgOiAxNzJcbiwgXCJzaHlcIiA6IDE3M1xuLCBcIm1hY3JcIiA6IDE3NVxuLCBcImRlZ1wiIDogMTc2XG4sIFwicGx1c21uXCIgOiAxNzdcbiwgXCJzdXAxXCIgOiAxODVcbiwgXCJzdXAyXCIgOiAxNzhcbiwgXCJzdXAzXCIgOiAxNzlcbiwgXCJhY3V0ZVwiIDogMTgwXG4sIFwibWljcm9cIiA6IDE4MVxuLCBcInBhcmFcIiA6IDE4MlxuLCBcIm1pZGRvdFwiIDogMTgzXG4sIFwiY2VkaWxcIiA6IDE4NFxuLCBcIm9yZG1cIiA6IDE4NlxuLCBcInJhcXVvXCIgOiAxODdcbiwgXCJmcmFjMTRcIiA6IDE4OFxuLCBcImZyYWMxMlwiIDogMTg5XG4sIFwiZnJhYzM0XCIgOiAxOTBcbiwgXCJpcXVlc3RcIiA6IDE5MVxuLCBcInRpbWVzXCIgOiAyMTVcbiwgXCJkaXZpZGVcIiA6IDI0N1xuLCBcIk9FbGlnXCIgOiAzMzhcbiwgXCJvZWxpZ1wiIDogMzM5XG4sIFwiU2Nhcm9uXCIgOiAzNTJcbiwgXCJzY2Fyb25cIiA6IDM1M1xuLCBcIll1bWxcIiA6IDM3NlxuLCBcImZub2ZcIiA6IDQwMlxuLCBcImNpcmNcIiA6IDcxMFxuLCBcInRpbGRlXCIgOiA3MzJcbiwgXCJBbHBoYVwiIDogOTEzXG4sIFwiQmV0YVwiIDogOTE0XG4sIFwiR2FtbWFcIiA6IDkxNVxuLCBcIkRlbHRhXCIgOiA5MTZcbiwgXCJFcHNpbG9uXCIgOiA5MTdcbiwgXCJaZXRhXCIgOiA5MThcbiwgXCJFdGFcIiA6IDkxOVxuLCBcIlRoZXRhXCIgOiA5MjBcbiwgXCJJb3RhXCIgOiA5MjFcbiwgXCJLYXBwYVwiIDogOTIyXG4sIFwiTGFtYmRhXCIgOiA5MjNcbiwgXCJNdVwiIDogOTI0XG4sIFwiTnVcIiA6IDkyNVxuLCBcIlhpXCIgOiA5MjZcbiwgXCJPbWljcm9uXCIgOiA5MjdcbiwgXCJQaVwiIDogOTI4XG4sIFwiUmhvXCIgOiA5MjlcbiwgXCJTaWdtYVwiIDogOTMxXG4sIFwiVGF1XCIgOiA5MzJcbiwgXCJVcHNpbG9uXCIgOiA5MzNcbiwgXCJQaGlcIiA6IDkzNFxuLCBcIkNoaVwiIDogOTM1XG4sIFwiUHNpXCIgOiA5MzZcbiwgXCJPbWVnYVwiIDogOTM3XG4sIFwiYWxwaGFcIiA6IDk0NVxuLCBcImJldGFcIiA6IDk0NlxuLCBcImdhbW1hXCIgOiA5NDdcbiwgXCJkZWx0YVwiIDogOTQ4XG4sIFwiZXBzaWxvblwiIDogOTQ5XG4sIFwiemV0YVwiIDogOTUwXG4sIFwiZXRhXCIgOiA5NTFcbiwgXCJ0aGV0YVwiIDogOTUyXG4sIFwiaW90YVwiIDogOTUzXG4sIFwia2FwcGFcIiA6IDk1NFxuLCBcImxhbWJkYVwiIDogOTU1XG4sIFwibXVcIiA6IDk1NlxuLCBcIm51XCIgOiA5NTdcbiwgXCJ4aVwiIDogOTU4XG4sIFwib21pY3JvblwiIDogOTU5XG4sIFwicGlcIiA6IDk2MFxuLCBcInJob1wiIDogOTYxXG4sIFwic2lnbWFmXCIgOiA5NjJcbiwgXCJzaWdtYVwiIDogOTYzXG4sIFwidGF1XCIgOiA5NjRcbiwgXCJ1cHNpbG9uXCIgOiA5NjVcbiwgXCJwaGlcIiA6IDk2NlxuLCBcImNoaVwiIDogOTY3XG4sIFwicHNpXCIgOiA5NjhcbiwgXCJvbWVnYVwiIDogOTY5XG4sIFwidGhldGFzeW1cIiA6IDk3N1xuLCBcInVwc2loXCIgOiA5NzhcbiwgXCJwaXZcIiA6IDk4MlxuLCBcImVuc3BcIiA6IDgxOTRcbiwgXCJlbXNwXCIgOiA4MTk1XG4sIFwidGhpbnNwXCIgOiA4MjAxXG4sIFwiendualwiIDogODIwNFxuLCBcInp3alwiIDogODIwNVxuLCBcImxybVwiIDogODIwNlxuLCBcInJsbVwiIDogODIwN1xuLCBcIm5kYXNoXCIgOiA4MjExXG4sIFwibWRhc2hcIiA6IDgyMTJcbiwgXCJsc3F1b1wiIDogODIxNlxuLCBcInJzcXVvXCIgOiA4MjE3XG4sIFwic2JxdW9cIiA6IDgyMThcbiwgXCJsZHF1b1wiIDogODIyMFxuLCBcInJkcXVvXCIgOiA4MjIxXG4sIFwiYmRxdW9cIiA6IDgyMjJcbiwgXCJkYWdnZXJcIiA6IDgyMjRcbiwgXCJEYWdnZXJcIiA6IDgyMjVcbiwgXCJidWxsXCIgOiA4MjI2XG4sIFwiaGVsbGlwXCIgOiA4MjMwXG4sIFwicGVybWlsXCIgOiA4MjQwXG4sIFwicHJpbWVcIiA6IDgyNDJcbiwgXCJQcmltZVwiIDogODI0M1xuLCBcImxzYXF1b1wiIDogODI0OVxuLCBcInJzYXF1b1wiIDogODI1MFxuLCBcIm9saW5lXCIgOiA4MjU0XG4sIFwiZnJhc2xcIiA6IDgyNjBcbiwgXCJldXJvXCIgOiA4MzY0XG4sIFwiaW1hZ2VcIiA6IDg0NjVcbiwgXCJ3ZWllcnBcIiA6IDg0NzJcbiwgXCJyZWFsXCIgOiA4NDc2XG4sIFwidHJhZGVcIiA6IDg0ODJcbiwgXCJhbGVmc3ltXCIgOiA4NTAxXG4sIFwibGFyclwiIDogODU5MlxuLCBcInVhcnJcIiA6IDg1OTNcbiwgXCJyYXJyXCIgOiA4NTk0XG4sIFwiZGFyclwiIDogODU5NVxuLCBcImhhcnJcIiA6IDg1OTZcbiwgXCJjcmFyclwiIDogODYyOVxuLCBcImxBcnJcIiA6IDg2NTZcbiwgXCJ1QXJyXCIgOiA4NjU3XG4sIFwickFyclwiIDogODY1OFxuLCBcImRBcnJcIiA6IDg2NTlcbiwgXCJoQXJyXCIgOiA4NjYwXG4sIFwiZm9yYWxsXCIgOiA4NzA0XG4sIFwicGFydFwiIDogODcwNlxuLCBcImV4aXN0XCIgOiA4NzA3XG4sIFwiZW1wdHlcIiA6IDg3MDlcbiwgXCJuYWJsYVwiIDogODcxMVxuLCBcImlzaW5cIiA6IDg3MTJcbiwgXCJub3RpblwiIDogODcxM1xuLCBcIm5pXCIgOiA4NzE1XG4sIFwicHJvZFwiIDogODcxOVxuLCBcInN1bVwiIDogODcyMVxuLCBcIm1pbnVzXCIgOiA4NzIyXG4sIFwibG93YXN0XCIgOiA4NzI3XG4sIFwicmFkaWNcIiA6IDg3MzBcbiwgXCJwcm9wXCIgOiA4NzMzXG4sIFwiaW5maW5cIiA6IDg3MzRcbiwgXCJhbmdcIiA6IDg3MzZcbiwgXCJhbmRcIiA6IDg3NDNcbiwgXCJvclwiIDogODc0NFxuLCBcImNhcFwiIDogODc0NVxuLCBcImN1cFwiIDogODc0NlxuLCBcImludFwiIDogODc0N1xuLCBcInRoZXJlNFwiIDogODc1NlxuLCBcInNpbVwiIDogODc2NFxuLCBcImNvbmdcIiA6IDg3NzNcbiwgXCJhc3ltcFwiIDogODc3NlxuLCBcIm5lXCIgOiA4ODAwXG4sIFwiZXF1aXZcIiA6IDg4MDFcbiwgXCJsZVwiIDogODgwNFxuLCBcImdlXCIgOiA4ODA1XG4sIFwic3ViXCIgOiA4ODM0XG4sIFwic3VwXCIgOiA4ODM1XG4sIFwibnN1YlwiIDogODgzNlxuLCBcInN1YmVcIiA6IDg4MzhcbiwgXCJzdXBlXCIgOiA4ODM5XG4sIFwib3BsdXNcIiA6IDg4NTNcbiwgXCJvdGltZXNcIiA6IDg4NTVcbiwgXCJwZXJwXCIgOiA4ODY5XG4sIFwic2RvdFwiIDogODkwMVxuLCBcImxjZWlsXCIgOiA4OTY4XG4sIFwicmNlaWxcIiA6IDg5NjlcbiwgXCJsZmxvb3JcIiA6IDg5NzBcbiwgXCJyZmxvb3JcIiA6IDg5NzFcbiwgXCJsYW5nXCIgOiA5MDAxXG4sIFwicmFuZ1wiIDogOTAwMlxuLCBcImxvelwiIDogOTY3NFxuLCBcInNwYWRlc1wiIDogOTgyNFxuLCBcImNsdWJzXCIgOiA5ODI3XG4sIFwiaGVhcnRzXCIgOiA5ODI5XG4sIFwiZGlhbXNcIiA6IDk4MzBcbn1cblxuT2JqZWN0LmtleXMoc2F4LkVOVElUSUVTKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZSA9IHNheC5FTlRJVElFU1trZXldXG4gICAgdmFyIHMgPSB0eXBlb2YgZSA9PT0gJ251bWJlcicgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGUpIDogZVxuICAgIHNheC5FTlRJVElFU1trZXldID0gc1xufSlcblxuZm9yICh2YXIgUyBpbiBzYXguU1RBVEUpIHNheC5TVEFURVtzYXguU1RBVEVbU11dID0gU1xuXG4vLyBzaG9ydGhhbmRcblMgPSBzYXguU1RBVEVcblxuZnVuY3Rpb24gZW1pdCAocGFyc2VyLCBldmVudCwgZGF0YSkge1xuICBwYXJzZXJbZXZlbnRdICYmIHBhcnNlcltldmVudF0oZGF0YSlcbn1cblxuZnVuY3Rpb24gZW1pdE5vZGUgKHBhcnNlciwgbm9kZVR5cGUsIGRhdGEpIHtcbiAgaWYgKHBhcnNlci50ZXh0Tm9kZSkgY2xvc2VUZXh0KHBhcnNlcilcbiAgZW1pdChwYXJzZXIsIG5vZGVUeXBlLCBkYXRhKVxufVxuXG5mdW5jdGlvbiBjbG9zZVRleHQgKHBhcnNlcikge1xuICBwYXJzZXIudGV4dE5vZGUgPSB0ZXh0b3B0cyhwYXJzZXIub3B0LCBwYXJzZXIudGV4dE5vZGUpXG4gIGlmIChwYXJzZXIudGV4dE5vZGUpIGVtaXQocGFyc2VyLCBcIm9udGV4dFwiLCBwYXJzZXIudGV4dE5vZGUpXG4gIHBhcnNlci50ZXh0Tm9kZSA9IFwiXCJcbn1cblxuZnVuY3Rpb24gdGV4dG9wdHMgKG9wdCwgdGV4dCkge1xuICBpZiAob3B0LnRyaW0pIHRleHQgPSB0ZXh0LnRyaW0oKVxuICBpZiAob3B0Lm5vcm1hbGl6ZSkgdGV4dCA9IHRleHQucmVwbGFjZSgvXFxzKy9nLCBcIiBcIilcbiAgcmV0dXJuIHRleHRcbn1cblxuZnVuY3Rpb24gZXJyb3IgKHBhcnNlciwgZXIpIHtcbiAgY2xvc2VUZXh0KHBhcnNlcilcbiAgaWYgKHBhcnNlci50cmFja1Bvc2l0aW9uKSB7XG4gICAgZXIgKz0gXCJcXG5MaW5lOiBcIitwYXJzZXIubGluZStcbiAgICAgICAgICBcIlxcbkNvbHVtbjogXCIrcGFyc2VyLmNvbHVtbitcbiAgICAgICAgICBcIlxcbkNoYXI6IFwiK3BhcnNlci5jXG4gIH1cbiAgZXIgPSBuZXcgRXJyb3IoZXIpXG4gIHBhcnNlci5lcnJvciA9IGVyXG4gIGVtaXQocGFyc2VyLCBcIm9uZXJyb3JcIiwgZXIpXG4gIHJldHVybiBwYXJzZXJcbn1cblxuZnVuY3Rpb24gZW5kIChwYXJzZXIpIHtcbiAgaWYgKCFwYXJzZXIuY2xvc2VkUm9vdCkgc3RyaWN0RmFpbChwYXJzZXIsIFwiVW5jbG9zZWQgcm9vdCB0YWdcIilcbiAgaWYgKChwYXJzZXIuc3RhdGUgIT09IFMuQkVHSU4pICYmIChwYXJzZXIuc3RhdGUgIT09IFMuVEVYVCkpIGVycm9yKHBhcnNlciwgXCJVbmV4cGVjdGVkIGVuZFwiKVxuICBjbG9zZVRleHQocGFyc2VyKVxuICBwYXJzZXIuYyA9IFwiXCJcbiAgcGFyc2VyLmNsb3NlZCA9IHRydWVcbiAgZW1pdChwYXJzZXIsIFwib25lbmRcIilcbiAgU0FYUGFyc2VyLmNhbGwocGFyc2VyLCBwYXJzZXIuc3RyaWN0LCBwYXJzZXIub3B0KVxuICByZXR1cm4gcGFyc2VyXG59XG5cbmZ1bmN0aW9uIHN0cmljdEZhaWwgKHBhcnNlciwgbWVzc2FnZSkge1xuICBpZiAodHlwZW9mIHBhcnNlciAhPT0gJ29iamVjdCcgfHwgIShwYXJzZXIgaW5zdGFuY2VvZiBTQVhQYXJzZXIpKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIGNhbGwgdG8gc3RyaWN0RmFpbCcpO1xuICBpZiAocGFyc2VyLnN0cmljdCkgZXJyb3IocGFyc2VyLCBtZXNzYWdlKVxufVxuXG5mdW5jdGlvbiBuZXdUYWcgKHBhcnNlcikge1xuICBpZiAoIXBhcnNlci5zdHJpY3QpIHBhcnNlci50YWdOYW1lID0gcGFyc2VyLnRhZ05hbWVbcGFyc2VyLmxvb3NlQ2FzZV0oKVxuICB2YXIgcGFyZW50ID0gcGFyc2VyLnRhZ3NbcGFyc2VyLnRhZ3MubGVuZ3RoIC0gMV0gfHwgcGFyc2VyXG4gICAgLCB0YWcgPSBwYXJzZXIudGFnID0geyBuYW1lIDogcGFyc2VyLnRhZ05hbWUsIGF0dHJpYnV0ZXMgOiB7fSB9XG5cbiAgLy8gd2lsbCBiZSBvdmVycmlkZGVuIGlmIHRhZyBjb250YWlscyBhbiB4bWxucz1cImZvb1wiIG9yIHhtbG5zOmZvbz1cImJhclwiXG4gIGlmIChwYXJzZXIub3B0LnhtbG5zKSB0YWcubnMgPSBwYXJlbnQubnNcbiAgcGFyc2VyLmF0dHJpYkxpc3QubGVuZ3RoID0gMFxufVxuXG5mdW5jdGlvbiBxbmFtZSAobmFtZSwgYXR0cmlidXRlKSB7XG4gIHZhciBpID0gbmFtZS5pbmRleE9mKFwiOlwiKVxuICAgICwgcXVhbE5hbWUgPSBpIDwgMCA/IFsgXCJcIiwgbmFtZSBdIDogbmFtZS5zcGxpdChcIjpcIilcbiAgICAsIHByZWZpeCA9IHF1YWxOYW1lWzBdXG4gICAgLCBsb2NhbCA9IHF1YWxOYW1lWzFdXG5cbiAgLy8gPHggXCJ4bWxuc1wiPVwiaHR0cDovL2Zvb1wiPlxuICBpZiAoYXR0cmlidXRlICYmIG5hbWUgPT09IFwieG1sbnNcIikge1xuICAgIHByZWZpeCA9IFwieG1sbnNcIlxuICAgIGxvY2FsID0gXCJcIlxuICB9XG5cbiAgcmV0dXJuIHsgcHJlZml4OiBwcmVmaXgsIGxvY2FsOiBsb2NhbCB9XG59XG5cbmZ1bmN0aW9uIGF0dHJpYiAocGFyc2VyKSB7XG4gIGlmICghcGFyc2VyLnN0cmljdCkgcGFyc2VyLmF0dHJpYk5hbWUgPSBwYXJzZXIuYXR0cmliTmFtZVtwYXJzZXIubG9vc2VDYXNlXSgpXG5cbiAgaWYgKHBhcnNlci5hdHRyaWJMaXN0LmluZGV4T2YocGFyc2VyLmF0dHJpYk5hbWUpICE9PSAtMSB8fFxuICAgICAgcGFyc2VyLnRhZy5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KHBhcnNlci5hdHRyaWJOYW1lKSkge1xuICAgIHJldHVybiBwYXJzZXIuYXR0cmliTmFtZSA9IHBhcnNlci5hdHRyaWJWYWx1ZSA9IFwiXCJcbiAgfVxuXG4gIGlmIChwYXJzZXIub3B0LnhtbG5zKSB7XG4gICAgdmFyIHFuID0gcW5hbWUocGFyc2VyLmF0dHJpYk5hbWUsIHRydWUpXG4gICAgICAsIHByZWZpeCA9IHFuLnByZWZpeFxuICAgICAgLCBsb2NhbCA9IHFuLmxvY2FsXG5cbiAgICBpZiAocHJlZml4ID09PSBcInhtbG5zXCIpIHtcbiAgICAgIC8vIG5hbWVzcGFjZSBiaW5kaW5nIGF0dHJpYnV0ZTsgcHVzaCB0aGUgYmluZGluZyBpbnRvIHNjb3BlXG4gICAgICBpZiAobG9jYWwgPT09IFwieG1sXCIgJiYgcGFyc2VyLmF0dHJpYlZhbHVlICE9PSBYTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIHN0cmljdEZhaWwoIHBhcnNlclxuICAgICAgICAgICAgICAgICAgLCBcInhtbDogcHJlZml4IG11c3QgYmUgYm91bmQgdG8gXCIgKyBYTUxfTkFNRVNQQUNFICsgXCJcXG5cIlxuICAgICAgICAgICAgICAgICAgKyBcIkFjdHVhbDogXCIgKyBwYXJzZXIuYXR0cmliVmFsdWUgKVxuICAgICAgfSBlbHNlIGlmIChsb2NhbCA9PT0gXCJ4bWxuc1wiICYmIHBhcnNlci5hdHRyaWJWYWx1ZSAhPT0gWE1MTlNfTkFNRVNQQUNFKSB7XG4gICAgICAgIHN0cmljdEZhaWwoIHBhcnNlclxuICAgICAgICAgICAgICAgICAgLCBcInhtbG5zOiBwcmVmaXggbXVzdCBiZSBib3VuZCB0byBcIiArIFhNTE5TX05BTUVTUEFDRSArIFwiXFxuXCJcbiAgICAgICAgICAgICAgICAgICsgXCJBY3R1YWw6IFwiICsgcGFyc2VyLmF0dHJpYlZhbHVlIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB0YWcgPSBwYXJzZXIudGFnXG4gICAgICAgICAgLCBwYXJlbnQgPSBwYXJzZXIudGFnc1twYXJzZXIudGFncy5sZW5ndGggLSAxXSB8fCBwYXJzZXJcbiAgICAgICAgaWYgKHRhZy5ucyA9PT0gcGFyZW50Lm5zKSB7XG4gICAgICAgICAgdGFnLm5zID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQubnMpXG4gICAgICAgIH1cbiAgICAgICAgdGFnLm5zW2xvY2FsXSA9IHBhcnNlci5hdHRyaWJWYWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlZmVyIG9uYXR0cmlidXRlIGV2ZW50cyB1bnRpbCBhbGwgYXR0cmlidXRlcyBoYXZlIGJlZW4gc2VlblxuICAgIC8vIHNvIGFueSBuZXcgYmluZGluZ3MgY2FuIHRha2UgZWZmZWN0OyBwcmVzZXJ2ZSBhdHRyaWJ1dGUgb3JkZXJcbiAgICAvLyBzbyBkZWZlcnJlZCBldmVudHMgY2FuIGJlIGVtaXR0ZWQgaW4gZG9jdW1lbnQgb3JkZXJcbiAgICBwYXJzZXIuYXR0cmliTGlzdC5wdXNoKFtwYXJzZXIuYXR0cmliTmFtZSwgcGFyc2VyLmF0dHJpYlZhbHVlXSlcbiAgfSBlbHNlIHtcbiAgICAvLyBpbiBub24teG1sbnMgbW9kZSwgd2UgY2FuIGVtaXQgdGhlIGV2ZW50IHJpZ2h0IGF3YXlcbiAgICBwYXJzZXIudGFnLmF0dHJpYnV0ZXNbcGFyc2VyLmF0dHJpYk5hbWVdID0gcGFyc2VyLmF0dHJpYlZhbHVlXG4gICAgZW1pdE5vZGUoIHBhcnNlclxuICAgICAgICAgICAgLCBcIm9uYXR0cmlidXRlXCJcbiAgICAgICAgICAgICwgeyBuYW1lOiBwYXJzZXIuYXR0cmliTmFtZVxuICAgICAgICAgICAgICAsIHZhbHVlOiBwYXJzZXIuYXR0cmliVmFsdWUgfSApXG4gIH1cblxuICBwYXJzZXIuYXR0cmliTmFtZSA9IHBhcnNlci5hdHRyaWJWYWx1ZSA9IFwiXCJcbn1cblxuZnVuY3Rpb24gb3BlblRhZyAocGFyc2VyLCBzZWxmQ2xvc2luZykge1xuICBpZiAocGFyc2VyLm9wdC54bWxucykge1xuICAgIC8vIGVtaXQgbmFtZXNwYWNlIGJpbmRpbmcgZXZlbnRzXG4gICAgdmFyIHRhZyA9IHBhcnNlci50YWdcblxuICAgIC8vIGFkZCBuYW1lc3BhY2UgaW5mbyB0byB0YWdcbiAgICB2YXIgcW4gPSBxbmFtZShwYXJzZXIudGFnTmFtZSlcbiAgICB0YWcucHJlZml4ID0gcW4ucHJlZml4XG4gICAgdGFnLmxvY2FsID0gcW4ubG9jYWxcbiAgICB0YWcudXJpID0gdGFnLm5zW3FuLnByZWZpeF0gfHwgXCJcIlxuXG4gICAgaWYgKHRhZy5wcmVmaXggJiYgIXRhZy51cmkpIHtcbiAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIlVuYm91bmQgbmFtZXNwYWNlIHByZWZpeDogXCJcbiAgICAgICAgICAgICAgICAgICAgICAgKyBKU09OLnN0cmluZ2lmeShwYXJzZXIudGFnTmFtZSkpXG4gICAgICB0YWcudXJpID0gcW4ucHJlZml4XG4gICAgfVxuXG4gICAgdmFyIHBhcmVudCA9IHBhcnNlci50YWdzW3BhcnNlci50YWdzLmxlbmd0aCAtIDFdIHx8IHBhcnNlclxuICAgIGlmICh0YWcubnMgJiYgcGFyZW50Lm5zICE9PSB0YWcubnMpIHtcbiAgICAgIE9iamVjdC5rZXlzKHRhZy5ucykuZm9yRWFjaChmdW5jdGlvbiAocCkge1xuICAgICAgICBlbWl0Tm9kZSggcGFyc2VyXG4gICAgICAgICAgICAgICAgLCBcIm9ub3Blbm5hbWVzcGFjZVwiXG4gICAgICAgICAgICAgICAgLCB7IHByZWZpeDogcCAsIHVyaTogdGFnLm5zW3BdIH0gKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBoYW5kbGUgZGVmZXJyZWQgb25hdHRyaWJ1dGUgZXZlbnRzXG4gICAgLy8gTm90ZTogZG8gbm90IGFwcGx5IGRlZmF1bHQgbnMgdG8gYXR0cmlidXRlczpcbiAgICAvLyAgIGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwtbmFtZXMvI2RlZmF1bHRpbmdcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHBhcnNlci5hdHRyaWJMaXN0Lmxlbmd0aDsgaSA8IGw7IGkgKyspIHtcbiAgICAgIHZhciBudiA9IHBhcnNlci5hdHRyaWJMaXN0W2ldXG4gICAgICB2YXIgbmFtZSA9IG52WzBdXG4gICAgICAgICwgdmFsdWUgPSBudlsxXVxuICAgICAgICAsIHF1YWxOYW1lID0gcW5hbWUobmFtZSwgdHJ1ZSlcbiAgICAgICAgLCBwcmVmaXggPSBxdWFsTmFtZS5wcmVmaXhcbiAgICAgICAgLCBsb2NhbCA9IHF1YWxOYW1lLmxvY2FsXG4gICAgICAgICwgdXJpID0gcHJlZml4ID09IFwiXCIgPyBcIlwiIDogKHRhZy5uc1twcmVmaXhdIHx8IFwiXCIpXG4gICAgICAgICwgYSA9IHsgbmFtZTogbmFtZVxuICAgICAgICAgICAgICAsIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAsIHByZWZpeDogcHJlZml4XG4gICAgICAgICAgICAgICwgbG9jYWw6IGxvY2FsXG4gICAgICAgICAgICAgICwgdXJpOiB1cmlcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAvLyBpZiB0aGVyZSdzIGFueSBhdHRyaWJ1dGVzIHdpdGggYW4gdW5kZWZpbmVkIG5hbWVzcGFjZSxcbiAgICAgIC8vIHRoZW4gZmFpbCBvbiB0aGVtIG5vdy5cbiAgICAgIGlmIChwcmVmaXggJiYgcHJlZml4ICE9IFwieG1sbnNcIiAmJiAhdXJpKSB7XG4gICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIlVuYm91bmQgbmFtZXNwYWNlIHByZWZpeDogXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICArIEpTT04uc3RyaW5naWZ5KHByZWZpeCkpXG4gICAgICAgIGEudXJpID0gcHJlZml4XG4gICAgICB9XG4gICAgICBwYXJzZXIudGFnLmF0dHJpYnV0ZXNbbmFtZV0gPSBhXG4gICAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25hdHRyaWJ1dGVcIiwgYSlcbiAgICB9XG4gICAgcGFyc2VyLmF0dHJpYkxpc3QubGVuZ3RoID0gMFxuICB9XG5cbiAgcGFyc2VyLnRhZy5pc1NlbGZDbG9zaW5nID0gISFzZWxmQ2xvc2luZ1xuXG4gIC8vIHByb2Nlc3MgdGhlIHRhZ1xuICBwYXJzZXIuc2F3Um9vdCA9IHRydWVcbiAgcGFyc2VyLnRhZ3MucHVzaChwYXJzZXIudGFnKVxuICBlbWl0Tm9kZShwYXJzZXIsIFwib25vcGVudGFnXCIsIHBhcnNlci50YWcpXG4gIGlmICghc2VsZkNsb3NpbmcpIHtcbiAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIDxzY3JpcHQ+IGluIG5vbi1zdHJpY3QgbW9kZS5cbiAgICBpZiAoIXBhcnNlci5ub3NjcmlwdCAmJiBwYXJzZXIudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInNjcmlwdFwiKSB7XG4gICAgICBwYXJzZXIuc3RhdGUgPSBTLlNDUklQVFxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICB9XG4gICAgcGFyc2VyLnRhZyA9IG51bGxcbiAgICBwYXJzZXIudGFnTmFtZSA9IFwiXCJcbiAgfVxuICBwYXJzZXIuYXR0cmliTmFtZSA9IHBhcnNlci5hdHRyaWJWYWx1ZSA9IFwiXCJcbiAgcGFyc2VyLmF0dHJpYkxpc3QubGVuZ3RoID0gMFxufVxuXG5mdW5jdGlvbiBjbG9zZVRhZyAocGFyc2VyKSB7XG4gIGlmICghcGFyc2VyLnRhZ05hbWUpIHtcbiAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJXZWlyZCBlbXB0eSBjbG9zZSB0YWcuXCIpXG4gICAgcGFyc2VyLnRleHROb2RlICs9IFwiPC8+XCJcbiAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChwYXJzZXIuc2NyaXB0KSB7XG4gICAgaWYgKHBhcnNlci50YWdOYW1lICE9PSBcInNjcmlwdFwiKSB7XG4gICAgICBwYXJzZXIuc2NyaXB0ICs9IFwiPC9cIiArIHBhcnNlci50YWdOYW1lICsgXCI+XCJcbiAgICAgIHBhcnNlci50YWdOYW1lID0gXCJcIlxuICAgICAgcGFyc2VyLnN0YXRlID0gUy5TQ1JJUFRcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25zY3JpcHRcIiwgcGFyc2VyLnNjcmlwdClcbiAgICBwYXJzZXIuc2NyaXB0ID0gXCJcIlxuICB9XG5cbiAgLy8gZmlyc3QgbWFrZSBzdXJlIHRoYXQgdGhlIGNsb3NpbmcgdGFnIGFjdHVhbGx5IGV4aXN0cy5cbiAgLy8gPGE+PGI+PC9jPjwvYj48L2E+IHdpbGwgY2xvc2UgZXZlcnl0aGluZywgb3RoZXJ3aXNlLlxuICB2YXIgdCA9IHBhcnNlci50YWdzLmxlbmd0aFxuICB2YXIgdGFnTmFtZSA9IHBhcnNlci50YWdOYW1lXG4gIGlmICghcGFyc2VyLnN0cmljdCkgdGFnTmFtZSA9IHRhZ05hbWVbcGFyc2VyLmxvb3NlQ2FzZV0oKVxuICB2YXIgY2xvc2VUbyA9IHRhZ05hbWVcbiAgd2hpbGUgKHQgLS0pIHtcbiAgICB2YXIgY2xvc2UgPSBwYXJzZXIudGFnc1t0XVxuICAgIGlmIChjbG9zZS5uYW1lICE9PSBjbG9zZVRvKSB7XG4gICAgICAvLyBmYWlsIHRoZSBmaXJzdCB0aW1lIGluIHN0cmljdCBtb2RlXG4gICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJVbmV4cGVjdGVkIGNsb3NlIHRhZ1wiKVxuICAgIH0gZWxzZSBicmVha1xuICB9XG5cbiAgLy8gZGlkbid0IGZpbmQgaXQuICB3ZSBhbHJlYWR5IGZhaWxlZCBmb3Igc3RyaWN0LCBzbyBqdXN0IGFib3J0LlxuICBpZiAodCA8IDApIHtcbiAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJVbm1hdGNoZWQgY2xvc2luZyB0YWc6IFwiK3BhcnNlci50YWdOYW1lKVxuICAgIHBhcnNlci50ZXh0Tm9kZSArPSBcIjwvXCIgKyBwYXJzZXIudGFnTmFtZSArIFwiPlwiXG4gICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgcmV0dXJuXG4gIH1cbiAgcGFyc2VyLnRhZ05hbWUgPSB0YWdOYW1lXG4gIHZhciBzID0gcGFyc2VyLnRhZ3MubGVuZ3RoXG4gIHdoaWxlIChzIC0tPiB0KSB7XG4gICAgdmFyIHRhZyA9IHBhcnNlci50YWcgPSBwYXJzZXIudGFncy5wb3AoKVxuICAgIHBhcnNlci50YWdOYW1lID0gcGFyc2VyLnRhZy5uYW1lXG4gICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uY2xvc2V0YWdcIiwgcGFyc2VyLnRhZ05hbWUpXG5cbiAgICB2YXIgeCA9IHt9XG4gICAgZm9yICh2YXIgaSBpbiB0YWcubnMpIHhbaV0gPSB0YWcubnNbaV1cblxuICAgIHZhciBwYXJlbnQgPSBwYXJzZXIudGFnc1twYXJzZXIudGFncy5sZW5ndGggLSAxXSB8fCBwYXJzZXJcbiAgICBpZiAocGFyc2VyLm9wdC54bWxucyAmJiB0YWcubnMgIT09IHBhcmVudC5ucykge1xuICAgICAgLy8gcmVtb3ZlIG5hbWVzcGFjZSBiaW5kaW5ncyBpbnRyb2R1Y2VkIGJ5IHRhZ1xuICAgICAgT2JqZWN0LmtleXModGFnLm5zKS5mb3JFYWNoKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIHZhciBuID0gdGFnLm5zW3BdXG4gICAgICAgIGVtaXROb2RlKHBhcnNlciwgXCJvbmNsb3NlbmFtZXNwYWNlXCIsIHsgcHJlZml4OiBwLCB1cmk6IG4gfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG4gIGlmICh0ID09PSAwKSBwYXJzZXIuY2xvc2VkUm9vdCA9IHRydWVcbiAgcGFyc2VyLnRhZ05hbWUgPSBwYXJzZXIuYXR0cmliVmFsdWUgPSBwYXJzZXIuYXR0cmliTmFtZSA9IFwiXCJcbiAgcGFyc2VyLmF0dHJpYkxpc3QubGVuZ3RoID0gMFxuICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbn1cblxuZnVuY3Rpb24gcGFyc2VFbnRpdHkgKHBhcnNlcikge1xuICB2YXIgZW50aXR5ID0gcGFyc2VyLmVudGl0eVxuICAgICwgZW50aXR5TEMgPSBlbnRpdHkudG9Mb3dlckNhc2UoKVxuICAgICwgbnVtXG4gICAgLCBudW1TdHIgPSBcIlwiXG4gIGlmIChwYXJzZXIuRU5USVRJRVNbZW50aXR5XSlcbiAgICByZXR1cm4gcGFyc2VyLkVOVElUSUVTW2VudGl0eV1cbiAgaWYgKHBhcnNlci5FTlRJVElFU1tlbnRpdHlMQ10pXG4gICAgcmV0dXJuIHBhcnNlci5FTlRJVElFU1tlbnRpdHlMQ11cbiAgZW50aXR5ID0gZW50aXR5TENcbiAgaWYgKGVudGl0eS5jaGFyQXQoMCkgPT09IFwiI1wiKSB7XG4gICAgaWYgKGVudGl0eS5jaGFyQXQoMSkgPT09IFwieFwiKSB7XG4gICAgICBlbnRpdHkgPSBlbnRpdHkuc2xpY2UoMilcbiAgICAgIG51bSA9IHBhcnNlSW50KGVudGl0eSwgMTYpXG4gICAgICBudW1TdHIgPSBudW0udG9TdHJpbmcoMTYpXG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGl0eSA9IGVudGl0eS5zbGljZSgxKVxuICAgICAgbnVtID0gcGFyc2VJbnQoZW50aXR5LCAxMClcbiAgICAgIG51bVN0ciA9IG51bS50b1N0cmluZygxMClcbiAgICB9XG4gIH1cbiAgZW50aXR5ID0gZW50aXR5LnJlcGxhY2UoL14wKy8sIFwiXCIpXG4gIGlmIChudW1TdHIudG9Mb3dlckNhc2UoKSAhPT0gZW50aXR5KSB7XG4gICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiSW52YWxpZCBjaGFyYWN0ZXIgZW50aXR5XCIpXG4gICAgcmV0dXJuIFwiJlwiK3BhcnNlci5lbnRpdHkgKyBcIjtcIlxuICB9XG5cbiAgcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KG51bSlcbn1cblxuZnVuY3Rpb24gd3JpdGUgKGNodW5rKSB7XG4gIHZhciBwYXJzZXIgPSB0aGlzXG4gIGlmICh0aGlzLmVycm9yKSB0aHJvdyB0aGlzLmVycm9yXG4gIGlmIChwYXJzZXIuY2xvc2VkKSByZXR1cm4gZXJyb3IocGFyc2VyLFxuICAgIFwiQ2Fubm90IHdyaXRlIGFmdGVyIGNsb3NlLiBBc3NpZ24gYW4gb25yZWFkeSBoYW5kbGVyLlwiKVxuICBpZiAoY2h1bmsgPT09IG51bGwpIHJldHVybiBlbmQocGFyc2VyKVxuICB2YXIgaSA9IDAsIGMgPSBcIlwiXG4gIHdoaWxlIChwYXJzZXIuYyA9IGMgPSBjaHVuay5jaGFyQXQoaSsrKSkge1xuICAgIGlmIChwYXJzZXIudHJhY2tQb3NpdGlvbikge1xuICAgICAgcGFyc2VyLnBvc2l0aW9uICsrXG4gICAgICBpZiAoYyA9PT0gXCJcXG5cIikge1xuICAgICAgICBwYXJzZXIubGluZSArK1xuICAgICAgICBwYXJzZXIuY29sdW1uID0gMFxuICAgICAgfSBlbHNlIHBhcnNlci5jb2x1bW4gKytcbiAgICB9XG4gICAgc3dpdGNoIChwYXJzZXIuc3RhdGUpIHtcblxuICAgICAgY2FzZSBTLkJFR0lOOlxuICAgICAgICBpZiAoYyA9PT0gXCI8XCIpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fV0FLQVxuICAgICAgICAgIHBhcnNlci5zdGFydFRhZ1Bvc2l0aW9uID0gcGFyc2VyLnBvc2l0aW9uXG4gICAgICAgIH0gZWxzZSBpZiAobm90KHdoaXRlc3BhY2UsYykpIHtcbiAgICAgICAgICAvLyBoYXZlIHRvIHByb2Nlc3MgdGhpcyBhcyBhIHRleHQgbm9kZS5cbiAgICAgICAgICAvLyB3ZWlyZCwgYnV0IGhhcHBlbnMuXG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiTm9uLXdoaXRlc3BhY2UgYmVmb3JlIGZpcnN0IHRhZy5cIilcbiAgICAgICAgICBwYXJzZXIudGV4dE5vZGUgPSBjXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5URVhUOlxuICAgICAgICBpZiAocGFyc2VyLnNhd1Jvb3QgJiYgIXBhcnNlci5jbG9zZWRSb290KSB7XG4gICAgICAgICAgdmFyIHN0YXJ0aSA9IGktMVxuICAgICAgICAgIHdoaWxlIChjICYmIGMhPT1cIjxcIiAmJiBjIT09XCImXCIpIHtcbiAgICAgICAgICAgIGMgPSBjaHVuay5jaGFyQXQoaSsrKVxuICAgICAgICAgICAgaWYgKGMgJiYgcGFyc2VyLnRyYWNrUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgcGFyc2VyLnBvc2l0aW9uICsrXG4gICAgICAgICAgICAgIGlmIChjID09PSBcIlxcblwiKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VyLmxpbmUgKytcbiAgICAgICAgICAgICAgICBwYXJzZXIuY29sdW1uID0gMFxuICAgICAgICAgICAgICB9IGVsc2UgcGFyc2VyLmNvbHVtbiArK1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYXJzZXIudGV4dE5vZGUgKz0gY2h1bmsuc3Vic3RyaW5nKHN0YXJ0aSwgaS0xKVxuICAgICAgICB9XG4gICAgICAgIGlmIChjID09PSBcIjxcIikge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuT1BFTl9XQUtBXG4gICAgICAgICAgcGFyc2VyLnN0YXJ0VGFnUG9zaXRpb24gPSBwYXJzZXIucG9zaXRpb25cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobm90KHdoaXRlc3BhY2UsIGMpICYmICghcGFyc2VyLnNhd1Jvb3QgfHwgcGFyc2VyLmNsb3NlZFJvb3QpKVxuICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiVGV4dCBkYXRhIG91dHNpZGUgb2Ygcm9vdCBub2RlLlwiKVxuICAgICAgICAgIGlmIChjID09PSBcIiZcIikgcGFyc2VyLnN0YXRlID0gUy5URVhUX0VOVElUWVxuICAgICAgICAgIGVsc2UgcGFyc2VyLnRleHROb2RlICs9IGNcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLlNDUklQVDpcbiAgICAgICAgLy8gb25seSBub24tc3RyaWN0XG4gICAgICAgIGlmIChjID09PSBcIjxcIikge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0NSSVBUX0VORElOR1xuICAgICAgICB9IGVsc2UgcGFyc2VyLnNjcmlwdCArPSBjXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuU0NSSVBUX0VORElORzpcbiAgICAgICAgaWYgKGMgPT09IFwiL1wiKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DTE9TRV9UQUdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZXIuc2NyaXB0ICs9IFwiPFwiICsgY1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0NSSVBUXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5PUEVOX1dBS0E6XG4gICAgICAgIC8vIGVpdGhlciBhIC8sID8sICEsIG9yIHRleHQgaXMgY29taW5nIG5leHQuXG4gICAgICAgIGlmIChjID09PSBcIiFcIikge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuU0dNTF9ERUNMXG4gICAgICAgICAgcGFyc2VyLnNnbWxEZWNsID0gXCJcIlxuICAgICAgICB9IGVsc2UgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSB7XG4gICAgICAgICAgLy8gd2FpdCBmb3IgaXQuLi5cbiAgICAgICAgfSBlbHNlIGlmIChpcyhuYW1lU3RhcnQsYykpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fVEFHXG4gICAgICAgICAgcGFyc2VyLnRhZ05hbWUgPSBjXG4gICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gXCIvXCIpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNMT1NFX1RBR1xuICAgICAgICAgIHBhcnNlci50YWdOYW1lID0gXCJcIlxuICAgICAgICB9IGVsc2UgaWYgKGMgPT09IFwiP1wiKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5QUk9DX0lOU1RcbiAgICAgICAgICBwYXJzZXIucHJvY0luc3ROYW1lID0gcGFyc2VyLnByb2NJbnN0Qm9keSA9IFwiXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHJpY3RGYWlsKHBhcnNlciwgXCJVbmVuY29kZWQgPFwiKVxuICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBzb21lIHdoaXRlc3BhY2UsIHRoZW4gYWRkIHRoYXQgaW4uXG4gICAgICAgICAgaWYgKHBhcnNlci5zdGFydFRhZ1Bvc2l0aW9uICsgMSA8IHBhcnNlci5wb3NpdGlvbikge1xuICAgICAgICAgICAgdmFyIHBhZCA9IHBhcnNlci5wb3NpdGlvbiAtIHBhcnNlci5zdGFydFRhZ1Bvc2l0aW9uXG4gICAgICAgICAgICBjID0gbmV3IEFycmF5KHBhZCkuam9pbihcIiBcIikgKyBjXG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcnNlci50ZXh0Tm9kZSArPSBcIjxcIiArIGNcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLlNHTUxfREVDTDpcbiAgICAgICAgaWYgKChwYXJzZXIuc2dtbERlY2wrYykudG9VcHBlckNhc2UoKSA9PT0gQ0RBVEEpIHtcbiAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25vcGVuY2RhdGFcIilcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBXG4gICAgICAgICAgcGFyc2VyLnNnbWxEZWNsID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5jZGF0YSA9IFwiXCJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJzZXIuc2dtbERlY2wrYyA9PT0gXCItLVwiKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DT01NRU5UXG4gICAgICAgICAgcGFyc2VyLmNvbW1lbnQgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLnNnbWxEZWNsID0gXCJcIlxuICAgICAgICB9IGVsc2UgaWYgKChwYXJzZXIuc2dtbERlY2wrYykudG9VcHBlckNhc2UoKSA9PT0gRE9DVFlQRSkge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuRE9DVFlQRVxuICAgICAgICAgIGlmIChwYXJzZXIuZG9jdHlwZSB8fCBwYXJzZXIuc2F3Um9vdCkgc3RyaWN0RmFpbChwYXJzZXIsXG4gICAgICAgICAgICBcIkluYXBwcm9wcmlhdGVseSBsb2NhdGVkIGRvY3R5cGUgZGVjbGFyYXRpb25cIilcbiAgICAgICAgICBwYXJzZXIuZG9jdHlwZSA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgPSBcIlwiXG4gICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gXCI+XCIpIHtcbiAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25zZ21sZGVjbGFyYXRpb25cIiwgcGFyc2VyLnNnbWxEZWNsKVxuICAgICAgICAgIHBhcnNlci5zZ21sRGVjbCA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgICAgfSBlbHNlIGlmIChpcyhxdW90ZSwgYykpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNHTUxfREVDTF9RVU9URURcbiAgICAgICAgICBwYXJzZXIuc2dtbERlY2wgKz0gY1xuICAgICAgICB9IGVsc2UgcGFyc2VyLnNnbWxEZWNsICs9IGNcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5TR01MX0RFQ0xfUVVPVEVEOlxuICAgICAgICBpZiAoYyA9PT0gcGFyc2VyLnEpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNHTUxfREVDTFxuICAgICAgICAgIHBhcnNlci5xID0gXCJcIlxuICAgICAgICB9XG4gICAgICAgIHBhcnNlci5zZ21sRGVjbCArPSBjXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuRE9DVFlQRTpcbiAgICAgICAgaWYgKGMgPT09IFwiPlwiKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uZG9jdHlwZVwiLCBwYXJzZXIuZG9jdHlwZSlcbiAgICAgICAgICBwYXJzZXIuZG9jdHlwZSA9IHRydWUgLy8ganVzdCByZW1lbWJlciB0aGF0IHdlIHNhdyBpdC5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJzZXIuZG9jdHlwZSArPSBjXG4gICAgICAgICAgaWYgKGMgPT09IFwiW1wiKSBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVfRFREXG4gICAgICAgICAgZWxzZSBpZiAoaXMocXVvdGUsIGMpKSB7XG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVfUVVPVEVEXG4gICAgICAgICAgICBwYXJzZXIucSA9IGNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5ET0NUWVBFX1FVT1RFRDpcbiAgICAgICAgcGFyc2VyLmRvY3R5cGUgKz0gY1xuICAgICAgICBpZiAoYyA9PT0gcGFyc2VyLnEpIHtcbiAgICAgICAgICBwYXJzZXIucSA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkRPQ1RZUEVfRFREOlxuICAgICAgICBwYXJzZXIuZG9jdHlwZSArPSBjXG4gICAgICAgIGlmIChjID09PSBcIl1cIikgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFXG4gICAgICAgIGVsc2UgaWYgKGlzKHF1b3RlLGMpKSB7XG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5ET0NUWVBFX0RURF9RVU9URURcbiAgICAgICAgICBwYXJzZXIucSA9IGNcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkRPQ1RZUEVfRFREX1FVT1RFRDpcbiAgICAgICAgcGFyc2VyLmRvY3R5cGUgKz0gY1xuICAgICAgICBpZiAoYyA9PT0gcGFyc2VyLnEpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkRPQ1RZUEVfRFREXG4gICAgICAgICAgcGFyc2VyLnEgPSBcIlwiXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5DT01NRU5UOlxuICAgICAgICBpZiAoYyA9PT0gXCItXCIpIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVF9FTkRJTkdcbiAgICAgICAgZWxzZSBwYXJzZXIuY29tbWVudCArPSBjXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQ09NTUVOVF9FTkRJTkc6XG4gICAgICAgIGlmIChjID09PSBcIi1cIikge1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVF9FTkRFRFxuICAgICAgICAgIHBhcnNlci5jb21tZW50ID0gdGV4dG9wdHMocGFyc2VyLm9wdCwgcGFyc2VyLmNvbW1lbnQpXG4gICAgICAgICAgaWYgKHBhcnNlci5jb21tZW50KSBlbWl0Tm9kZShwYXJzZXIsIFwib25jb21tZW50XCIsIHBhcnNlci5jb21tZW50KVxuICAgICAgICAgIHBhcnNlci5jb21tZW50ID0gXCJcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlci5jb21tZW50ICs9IFwiLVwiICsgY1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ09NTUVOVFxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQ09NTUVOVF9FTkRFRDpcbiAgICAgICAgaWYgKGMgIT09IFwiPlwiKSB7XG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiTWFsZm9ybWVkIGNvbW1lbnRcIilcbiAgICAgICAgICAvLyBhbGxvdyA8IS0tIGJsYWggLS0gYmxvbyAtLT4gaW4gbm9uLXN0cmljdCBtb2RlLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGEgY29tbWVudCBvZiBcIiBibGFoIC0tIGJsb28gXCJcbiAgICAgICAgICBwYXJzZXIuY29tbWVudCArPSBcIi0tXCIgKyBjXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DT01NRU5UXG4gICAgICAgIH0gZWxzZSBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5DREFUQTpcbiAgICAgICAgaWYgKGMgPT09IFwiXVwiKSBwYXJzZXIuc3RhdGUgPSBTLkNEQVRBX0VORElOR1xuICAgICAgICBlbHNlIHBhcnNlci5jZGF0YSArPSBjXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQ0RBVEFfRU5ESU5HOlxuICAgICAgICBpZiAoYyA9PT0gXCJdXCIpIHBhcnNlci5zdGF0ZSA9IFMuQ0RBVEFfRU5ESU5HXzJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcGFyc2VyLmNkYXRhICs9IFwiXVwiICsgY1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQ0RBVEFcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkNEQVRBX0VORElOR18yOlxuICAgICAgICBpZiAoYyA9PT0gXCI+XCIpIHtcbiAgICAgICAgICBpZiAocGFyc2VyLmNkYXRhKSBlbWl0Tm9kZShwYXJzZXIsIFwib25jZGF0YVwiLCBwYXJzZXIuY2RhdGEpXG4gICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uY2xvc2VjZGF0YVwiKVxuICAgICAgICAgIHBhcnNlci5jZGF0YSA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlRFWFRcbiAgICAgICAgfSBlbHNlIGlmIChjID09PSBcIl1cIikge1xuICAgICAgICAgIHBhcnNlci5jZGF0YSArPSBcIl1cIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcnNlci5jZGF0YSArPSBcIl1dXCIgKyBjXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5DREFUQVxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuUFJPQ19JTlNUOlxuICAgICAgICBpZiAoYyA9PT0gXCI/XCIpIHBhcnNlci5zdGF0ZSA9IFMuUFJPQ19JTlNUX0VORElOR1xuICAgICAgICBlbHNlIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkgcGFyc2VyLnN0YXRlID0gUy5QUk9DX0lOU1RfQk9EWVxuICAgICAgICBlbHNlIHBhcnNlci5wcm9jSW5zdE5hbWUgKz0gY1xuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLlBST0NfSU5TVF9CT0RZOlxuICAgICAgICBpZiAoIXBhcnNlci5wcm9jSW5zdEJvZHkgJiYgaXMod2hpdGVzcGFjZSwgYykpIGNvbnRpbnVlXG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFwiP1wiKSBwYXJzZXIuc3RhdGUgPSBTLlBST0NfSU5TVF9FTkRJTkdcbiAgICAgICAgZWxzZSBwYXJzZXIucHJvY0luc3RCb2R5ICs9IGNcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5QUk9DX0lOU1RfRU5ESU5HOlxuICAgICAgICBpZiAoYyA9PT0gXCI+XCIpIHtcbiAgICAgICAgICBlbWl0Tm9kZShwYXJzZXIsIFwib25wcm9jZXNzaW5naW5zdHJ1Y3Rpb25cIiwge1xuICAgICAgICAgICAgbmFtZSA6IHBhcnNlci5wcm9jSW5zdE5hbWUsXG4gICAgICAgICAgICBib2R5IDogcGFyc2VyLnByb2NJbnN0Qm9keVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcGFyc2VyLnByb2NJbnN0TmFtZSA9IHBhcnNlci5wcm9jSW5zdEJvZHkgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5URVhUXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyc2VyLnByb2NJbnN0Qm9keSArPSBcIj9cIiArIGNcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlBST0NfSU5TVF9CT0RZXG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5PUEVOX1RBRzpcbiAgICAgICAgaWYgKGlzKG5hbWVCb2R5LCBjKSkgcGFyc2VyLnRhZ05hbWUgKz0gY1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBuZXdUYWcocGFyc2VyKVxuICAgICAgICAgIGlmIChjID09PSBcIj5cIikgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgICAgZWxzZSBpZiAoYyA9PT0gXCIvXCIpIHBhcnNlci5zdGF0ZSA9IFMuT1BFTl9UQUdfU0xBU0hcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChub3Qod2hpdGVzcGFjZSwgYykpIHN0cmljdEZhaWwoXG4gICAgICAgICAgICAgIHBhcnNlciwgXCJJbnZhbGlkIGNoYXJhY3RlciBpbiB0YWcgbmFtZVwiKVxuICAgICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5PUEVOX1RBR19TTEFTSDpcbiAgICAgICAgaWYgKGMgPT09IFwiPlwiKSB7XG4gICAgICAgICAgb3BlblRhZyhwYXJzZXIsIHRydWUpXG4gICAgICAgICAgY2xvc2VUYWcocGFyc2VyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIkZvcndhcmQtc2xhc2ggaW4gb3BlbmluZyB0YWcgbm90IGZvbGxvd2VkIGJ5ID5cIilcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQlxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQVRUUklCOlxuICAgICAgICAvLyBoYXZlbid0IHJlYWQgdGhlIGF0dHJpYnV0ZSBuYW1lIHlldC5cbiAgICAgICAgaWYgKGlzKHdoaXRlc3BhY2UsIGMpKSBjb250aW51ZVxuICAgICAgICBlbHNlIGlmIChjID09PSBcIj5cIikgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFwiL1wiKSBwYXJzZXIuc3RhdGUgPSBTLk9QRU5fVEFHX1NMQVNIXG4gICAgICAgIGVsc2UgaWYgKGlzKG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICBwYXJzZXIuYXR0cmliTmFtZSA9IGNcbiAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfTkFNRVxuICAgICAgICB9IGVsc2Ugc3RyaWN0RmFpbChwYXJzZXIsIFwiSW52YWxpZCBhdHRyaWJ1dGUgbmFtZVwiKVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkFUVFJJQl9OQU1FOlxuICAgICAgICBpZiAoYyA9PT0gXCI9XCIpIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFXG4gICAgICAgIGVsc2UgaWYgKGMgPT09IFwiPlwiKSB7XG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiQXR0cmlidXRlIHdpdGhvdXQgdmFsdWVcIilcbiAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSBwYXJzZXIuYXR0cmliTmFtZVxuICAgICAgICAgIGF0dHJpYihwYXJzZXIpXG4gICAgICAgICAgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXMod2hpdGVzcGFjZSwgYykpIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX05BTUVfU0FXX1dISVRFXG4gICAgICAgIGVsc2UgaWYgKGlzKG5hbWVCb2R5LCBjKSkgcGFyc2VyLmF0dHJpYk5hbWUgKz0gY1xuICAgICAgICBlbHNlIHN0cmljdEZhaWwocGFyc2VyLCBcIkludmFsaWQgYXR0cmlidXRlIG5hbWVcIilcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5BVFRSSUJfTkFNRV9TQVdfV0hJVEU6XG4gICAgICAgIGlmIChjID09PSBcIj1cIikgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJfVkFMVUVcbiAgICAgICAgZWxzZSBpZiAoaXMod2hpdGVzcGFjZSwgYykpIGNvbnRpbnVlXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIkF0dHJpYnV0ZSB3aXRob3V0IHZhbHVlXCIpXG4gICAgICAgICAgcGFyc2VyLnRhZy5hdHRyaWJ1dGVzW3BhcnNlci5hdHRyaWJOYW1lXSA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuYXR0cmliVmFsdWUgPSBcIlwiXG4gICAgICAgICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uYXR0cmlidXRlXCIsXG4gICAgICAgICAgICAgICAgICAgeyBuYW1lIDogcGFyc2VyLmF0dHJpYk5hbWUsIHZhbHVlIDogXCJcIiB9KVxuICAgICAgICAgIHBhcnNlci5hdHRyaWJOYW1lID0gXCJcIlxuICAgICAgICAgIGlmIChjID09PSBcIj5cIikgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgICAgZWxzZSBpZiAoaXMobmFtZVN0YXJ0LCBjKSkge1xuICAgICAgICAgICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBjXG4gICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9OQU1FXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIkludmFsaWQgYXR0cmlidXRlIG5hbWVcIilcbiAgICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFOlxuICAgICAgICBpZiAoaXMod2hpdGVzcGFjZSwgYykpIGNvbnRpbnVlXG4gICAgICAgIGVsc2UgaWYgKGlzKHF1b3RlLCBjKSkge1xuICAgICAgICAgIHBhcnNlci5xID0gY1xuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX1FVT1RFRFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIlVucXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZVwiKVxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX1ZBTFVFX1VOUVVPVEVEXG4gICAgICAgICAgcGFyc2VyLmF0dHJpYlZhbHVlID0gY1xuICAgICAgICB9XG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX1FVT1RFRDpcbiAgICAgICAgaWYgKGMgIT09IHBhcnNlci5xKSB7XG4gICAgICAgICAgaWYgKGMgPT09IFwiJlwiKSBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9FTlRJVFlfUVxuICAgICAgICAgIGVsc2UgcGFyc2VyLmF0dHJpYlZhbHVlICs9IGNcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYihwYXJzZXIpXG4gICAgICAgIHBhcnNlci5xID0gXCJcIlxuICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9DTE9TRURcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfQ0xPU0VEOlxuICAgICAgICBpZiAoaXMod2hpdGVzcGFjZSwgYykpIHtcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQlxuICAgICAgICB9IGVsc2UgaWYgKGMgPT09IFwiPlwiKSBvcGVuVGFnKHBhcnNlcilcbiAgICAgICAgZWxzZSBpZiAoYyA9PT0gXCIvXCIpIHBhcnNlci5zdGF0ZSA9IFMuT1BFTl9UQUdfU0xBU0hcbiAgICAgICAgZWxzZSBpZiAoaXMobmFtZVN0YXJ0LCBjKSkge1xuICAgICAgICAgIHN0cmljdEZhaWwocGFyc2VyLCBcIk5vIHdoaXRlc3BhY2UgYmV0d2VlbiBhdHRyaWJ1dGVzXCIpXG4gICAgICAgICAgcGFyc2VyLmF0dHJpYk5hbWUgPSBjXG4gICAgICAgICAgcGFyc2VyLmF0dHJpYlZhbHVlID0gXCJcIlxuICAgICAgICAgIHBhcnNlci5zdGF0ZSA9IFMuQVRUUklCX05BTUVcbiAgICAgICAgfSBlbHNlIHN0cmljdEZhaWwocGFyc2VyLCBcIkludmFsaWQgYXR0cmlidXRlIG5hbWVcIilcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfVU5RVU9URUQ6XG4gICAgICAgIGlmIChub3QoYXR0cmliRW5kLGMpKSB7XG4gICAgICAgICAgaWYgKGMgPT09IFwiJlwiKSBwYXJzZXIuc3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9FTlRJVFlfVVxuICAgICAgICAgIGVsc2UgcGFyc2VyLmF0dHJpYlZhbHVlICs9IGNcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYihwYXJzZXIpXG4gICAgICAgIGlmIChjID09PSBcIj5cIikgb3BlblRhZyhwYXJzZXIpXG4gICAgICAgIGVsc2UgcGFyc2VyLnN0YXRlID0gUy5BVFRSSUJcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIGNhc2UgUy5DTE9TRV9UQUc6XG4gICAgICAgIGlmICghcGFyc2VyLnRhZ05hbWUpIHtcbiAgICAgICAgICBpZiAoaXMod2hpdGVzcGFjZSwgYykpIGNvbnRpbnVlXG4gICAgICAgICAgZWxzZSBpZiAobm90KG5hbWVTdGFydCwgYykpIHtcbiAgICAgICAgICAgIGlmIChwYXJzZXIuc2NyaXB0KSB7XG4gICAgICAgICAgICAgIHBhcnNlci5zY3JpcHQgKz0gXCI8L1wiICsgY1xuICAgICAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNDUklQVFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiSW52YWxpZCB0YWduYW1lIGluIGNsb3NpbmcgdGFnLlwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBwYXJzZXIudGFnTmFtZSA9IGNcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjID09PSBcIj5cIikgY2xvc2VUYWcocGFyc2VyKVxuICAgICAgICBlbHNlIGlmIChpcyhuYW1lQm9keSwgYykpIHBhcnNlci50YWdOYW1lICs9IGNcbiAgICAgICAgZWxzZSBpZiAocGFyc2VyLnNjcmlwdCkge1xuICAgICAgICAgIHBhcnNlci5zY3JpcHQgKz0gXCI8L1wiICsgcGFyc2VyLnRhZ05hbWVcbiAgICAgICAgICBwYXJzZXIudGFnTmFtZSA9IFwiXCJcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLlNDUklQVFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChub3Qod2hpdGVzcGFjZSwgYykpIHN0cmljdEZhaWwocGFyc2VyLFxuICAgICAgICAgICAgXCJJbnZhbGlkIHRhZ25hbWUgaW4gY2xvc2luZyB0YWdcIilcbiAgICAgICAgICBwYXJzZXIuc3RhdGUgPSBTLkNMT1NFX1RBR19TQVdfV0hJVEVcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSBTLkNMT1NFX1RBR19TQVdfV0hJVEU6XG4gICAgICAgIGlmIChpcyh3aGl0ZXNwYWNlLCBjKSkgY29udGludWVcbiAgICAgICAgaWYgKGMgPT09IFwiPlwiKSBjbG9zZVRhZyhwYXJzZXIpXG4gICAgICAgIGVsc2Ugc3RyaWN0RmFpbChwYXJzZXIsIFwiSW52YWxpZCBjaGFyYWN0ZXJzIGluIGNsb3NpbmcgdGFnXCIpXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlIFMuVEVYVF9FTlRJVFk6XG4gICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX0VOVElUWV9ROlxuICAgICAgY2FzZSBTLkFUVFJJQl9WQUxVRV9FTlRJVFlfVTpcbiAgICAgICAgc3dpdGNoKHBhcnNlci5zdGF0ZSkge1xuICAgICAgICAgIGNhc2UgUy5URVhUX0VOVElUWTpcbiAgICAgICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IFMuVEVYVCwgYnVmZmVyID0gXCJ0ZXh0Tm9kZVwiXG4gICAgICAgICAgYnJlYWtcblxuICAgICAgICAgIGNhc2UgUy5BVFRSSUJfVkFMVUVfRU5USVRZX1E6XG4gICAgICAgICAgICB2YXIgcmV0dXJuU3RhdGUgPSBTLkFUVFJJQl9WQUxVRV9RVU9URUQsIGJ1ZmZlciA9IFwiYXR0cmliVmFsdWVcIlxuICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICBjYXNlIFMuQVRUUklCX1ZBTFVFX0VOVElUWV9VOlxuICAgICAgICAgICAgdmFyIHJldHVyblN0YXRlID0gUy5BVFRSSUJfVkFMVUVfVU5RVU9URUQsIGJ1ZmZlciA9IFwiYXR0cmliVmFsdWVcIlxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgPT09IFwiO1wiKSB7XG4gICAgICAgICAgcGFyc2VyW2J1ZmZlcl0gKz0gcGFyc2VFbnRpdHkocGFyc2VyKVxuICAgICAgICAgIHBhcnNlci5lbnRpdHkgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gcmV0dXJuU3RhdGVcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpcyhlbnRpdHksIGMpKSBwYXJzZXIuZW50aXR5ICs9IGNcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3RyaWN0RmFpbChwYXJzZXIsIFwiSW52YWxpZCBjaGFyYWN0ZXIgZW50aXR5XCIpXG4gICAgICAgICAgcGFyc2VyW2J1ZmZlcl0gKz0gXCImXCIgKyBwYXJzZXIuZW50aXR5ICsgY1xuICAgICAgICAgIHBhcnNlci5lbnRpdHkgPSBcIlwiXG4gICAgICAgICAgcGFyc2VyLnN0YXRlID0gcmV0dXJuU3RhdGVcbiAgICAgICAgfVxuICAgICAgY29udGludWVcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHBhcnNlciwgXCJVbmtub3duIHN0YXRlOiBcIiArIHBhcnNlci5zdGF0ZSlcbiAgICB9XG4gIH0gLy8gd2hpbGVcbiAgLy8gY2RhdGEgYmxvY2tzIGNhbiBnZXQgdmVyeSBiaWcgdW5kZXIgbm9ybWFsIGNvbmRpdGlvbnMuIGVtaXQgYW5kIG1vdmUgb24uXG4gIC8vIGlmIChwYXJzZXIuc3RhdGUgPT09IFMuQ0RBVEEgJiYgcGFyc2VyLmNkYXRhKSB7XG4gIC8vICAgZW1pdE5vZGUocGFyc2VyLCBcIm9uY2RhdGFcIiwgcGFyc2VyLmNkYXRhKVxuICAvLyAgIHBhcnNlci5jZGF0YSA9IFwiXCJcbiAgLy8gfVxuICBpZiAocGFyc2VyLnBvc2l0aW9uID49IHBhcnNlci5idWZmZXJDaGVja1Bvc2l0aW9uKSBjaGVja0J1ZmZlckxlbmd0aChwYXJzZXIpXG4gIHJldHVybiBwYXJzZXJcbn1cblxuLyohIGh0dHA6Ly9tdGhzLmJlL2Zyb21jb2RlcG9pbnQgdjAuMS4wIGJ5IEBtYXRoaWFzICovXG5pZiAoIVN0cmluZy5mcm9tQ29kZVBvaW50KSB7XG4gICAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3RyaW5nRnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgICAgICAgICAgICAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgICAgICAgICAgICAgIHZhciBmcm9tQ29kZVBvaW50ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUFYX1NJWkUgPSAweDQwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVVuaXRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlnaFN1cnJvZ2F0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb3dTdXJyb2dhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVQb2ludCA9IE51bWJlcihhcmd1bWVudHNbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpc0Zpbml0ZShjb2RlUG9pbnQpIHx8IC8vIGBOYU5gLCBgK0luZmluaXR5YCwgb3IgYC1JbmZpbml0eWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnQgPCAwIHx8IC8vIG5vdCBhIHZhbGlkIFVuaWNvZGUgY29kZSBwb2ludFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludCA+IDB4MTBGRkZGIHx8IC8vIG5vdCBhIHZhbGlkIFVuaWNvZGUgY29kZSBwb2ludFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb29yKGNvZGVQb2ludCkgIT0gY29kZVBvaW50IC8vIG5vdCBhbiBpbnRlZ2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludDogJyArIGNvZGVQb2ludCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVQb2ludCA8PSAweEZGRkYpIHsgLy8gQk1QIGNvZGUgcG9pbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW4gc3Vycm9nYXRlIGhhbHZlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVBvaW50IC09IDB4MTAwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgMHhEODAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvd1N1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgJSAweDQwMCkgKyAweERDMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVVuaXRzLnB1c2goaGlnaFN1cnJvZ2F0ZSwgbG93U3Vycm9nYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggKyAxID09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVVuaXRzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU3RyaW5nLCAnZnJvbUNvZGVQb2ludCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogZnJvbUNvZGVQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZ3VyYWJsZSc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3cml0YWJsZSc6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZnJvbUNvZGVQb2ludCA9IGZyb21Db2RlUG9pbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9KCkpO1xufVxuXG59KSh0eXBlb2YgZXhwb3J0cyA9PT0gXCJ1bmRlZmluZWRcIiA/IHNheCA9IHt9IDogZXhwb3J0cyk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIEVtaXR0ZXIgPSByZXF1aXJlKCdlbWl0dGVyJyk7XG5cbmZ1bmN0aW9uIFN0cmVhbSgpIHtcbiAgRW1pdHRlci5jYWxsKHRoaXMpO1xufVxuU3RyZWFtLnByb3RvdHlwZSA9IG5ldyBFbWl0dGVyKCk7XG5tb2R1bGUuZXhwb3J0cyA9IFN0cmVhbTtcbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuNC54XG5TdHJlYW0uU3RyZWFtID0gU3RyZWFtO1xuXG5TdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbihkZXN0LCBvcHRpb25zKSB7XG4gIHZhciBzb3VyY2UgPSB0aGlzO1xuXG4gIGZ1bmN0aW9uIG9uZGF0YShjaHVuaykge1xuICAgIGlmIChkZXN0LndyaXRhYmxlKSB7XG4gICAgICBpZiAoZmFsc2UgPT09IGRlc3Qud3JpdGUoY2h1bmspICYmIHNvdXJjZS5wYXVzZSkge1xuICAgICAgICBzb3VyY2UucGF1c2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzb3VyY2Uub24oJ2RhdGEnLCBvbmRhdGEpO1xuXG4gIGZ1bmN0aW9uIG9uZHJhaW4oKSB7XG4gICAgaWYgKHNvdXJjZS5yZWFkYWJsZSAmJiBzb3VyY2UucmVzdW1lKSB7XG4gICAgICBzb3VyY2UucmVzdW1lKCk7XG4gICAgfVxuICB9XG5cbiAgZGVzdC5vbignZHJhaW4nLCBvbmRyYWluKTtcblxuICAvLyBJZiB0aGUgJ2VuZCcgb3B0aW9uIGlzIG5vdCBzdXBwbGllZCwgZGVzdC5lbmQoKSB3aWxsIGJlIGNhbGxlZCB3aGVuXG4gIC8vIHNvdXJjZSBnZXRzIHRoZSAnZW5kJyBvciAnY2xvc2UnIGV2ZW50cy4gIE9ubHkgZGVzdC5lbmQoKSBvbmNlLlxuICBpZiAoIWRlc3QuX2lzU3RkaW8gJiYgKCFvcHRpb25zIHx8IG9wdGlvbnMuZW5kICE9PSBmYWxzZSkpIHtcbiAgICBzb3VyY2Uub24oJ2VuZCcsIG9uZW5kKTtcbiAgICBzb3VyY2Uub24oJ2Nsb3NlJywgb25jbG9zZSk7XG4gIH1cblxuICB2YXIgZGlkT25FbmQgPSBmYWxzZTtcbiAgZnVuY3Rpb24gb25lbmQoKSB7XG4gICAgaWYgKGRpZE9uRW5kKSByZXR1cm47XG4gICAgZGlkT25FbmQgPSB0cnVlO1xuXG4gICAgZGVzdC5lbmQoKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gb25jbG9zZSgpIHtcbiAgICBpZiAoZGlkT25FbmQpIHJldHVybjtcbiAgICBkaWRPbkVuZCA9IHRydWU7XG5cbiAgICBpZiAodHlwZW9mIGRlc3QuZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykgZGVzdC5kZXN0cm95KCk7XG4gIH1cblxuICAvLyBkb24ndCBsZWF2ZSBkYW5nbGluZyBwaXBlcyB3aGVuIHRoZXJlIGFyZSBlcnJvcnMuXG4gIGZ1bmN0aW9uIG9uZXJyb3IoZXIpIHtcbiAgICBjbGVhbnVwKCk7XG4gICAgaWYgKCF0aGlzLmhhc0xpc3RlbmVycygnZXJyb3InKSkge1xuICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCBzdHJlYW0gZXJyb3IgaW4gcGlwZS5cbiAgICB9XG4gIH1cblxuICBzb3VyY2Uub24oJ2Vycm9yJywgb25lcnJvcik7XG4gIGRlc3Qub24oJ2Vycm9yJywgb25lcnJvcik7XG5cbiAgLy8gcmVtb3ZlIGFsbCB0aGUgZXZlbnQgbGlzdGVuZXJzIHRoYXQgd2VyZSBhZGRlZC5cbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICBzb3VyY2Uub2ZmKCdkYXRhJywgb25kYXRhKTtcbiAgICBkZXN0Lm9mZignZHJhaW4nLCBvbmRyYWluKTtcblxuICAgIHNvdXJjZS5vZmYoJ2VuZCcsIG9uZW5kKTtcbiAgICBzb3VyY2Uub2ZmKCdjbG9zZScsIG9uY2xvc2UpO1xuXG4gICAgc291cmNlLm9mZignZXJyb3InLCBvbmVycm9yKTtcbiAgICBkZXN0Lm9mZignZXJyb3InLCBvbmVycm9yKTtcblxuICAgIHNvdXJjZS5vZmYoJ2VuZCcsIGNsZWFudXApO1xuICAgIHNvdXJjZS5vZmYoJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgICBkZXN0Lm9mZignZW5kJywgY2xlYW51cCk7XG4gICAgZGVzdC5vZmYoJ2Nsb3NlJywgY2xlYW51cCk7XG4gIH1cblxuICBzb3VyY2Uub24oJ2VuZCcsIGNsZWFudXApO1xuICBzb3VyY2Uub24oJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgZGVzdC5vbignZW5kJywgY2xlYW51cCk7XG4gIGRlc3Qub24oJ2Nsb3NlJywgY2xlYW51cCk7XG5cbiAgZGVzdC5lbWl0KCdwaXBlJywgc291cmNlKTtcblxuICAvLyBBbGxvdyBmb3IgdW5peC1saWtlIHVzYWdlOiBBLnBpcGUoQikucGlwZShDKVxuICByZXR1cm4gZGVzdDtcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbi8qPHJlcGxhY2VtZW50PiovXG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlLWJ1ZmZlcicpLkJ1ZmZlcjtcbi8qPC9yZXBsYWNlbWVudD4qL1xuXG52YXIgaXNFbmNvZGluZyA9IEJ1ZmZlci5pc0VuY29kaW5nIHx8IGZ1bmN0aW9uIChlbmNvZGluZykge1xuICBlbmNvZGluZyA9ICcnICsgZW5jb2Rpbmc7XG4gIHN3aXRjaCAoZW5jb2RpbmcgJiYgZW5jb2RpbmcudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6Y2FzZSAndXRmOCc6Y2FzZSAndXRmLTgnOmNhc2UgJ2FzY2lpJzpjYXNlICdiaW5hcnknOmNhc2UgJ2Jhc2U2NCc6Y2FzZSAndWNzMic6Y2FzZSAndWNzLTInOmNhc2UgJ3V0ZjE2bGUnOmNhc2UgJ3V0Zi0xNmxlJzpjYXNlICdyYXcnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZnVuY3Rpb24gX25vcm1hbGl6ZUVuY29kaW5nKGVuYykge1xuICBpZiAoIWVuYykgcmV0dXJuICd1dGY4JztcbiAgdmFyIHJldHJpZWQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmMpIHtcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gJ3V0ZjgnO1xuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuICd1dGYxNmxlJztcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gJ2xhdGluMSc7XG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGVuYztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyZXRyaWVkKSByZXR1cm47IC8vIHVuZGVmaW5lZFxuICAgICAgICBlbmMgPSAoJycgKyBlbmMpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHJldHJpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufTtcblxuLy8gRG8gbm90IGNhY2hlIGBCdWZmZXIuaXNFbmNvZGluZ2Agd2hlbiBjaGVja2luZyBlbmNvZGluZyBuYW1lcyBhcyBzb21lXG4vLyBtb2R1bGVzIG1vbmtleS1wYXRjaCBpdCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgZW5jb2RpbmdzXG5mdW5jdGlvbiBub3JtYWxpemVFbmNvZGluZyhlbmMpIHtcbiAgdmFyIG5lbmMgPSBfbm9ybWFsaXplRW5jb2RpbmcoZW5jKTtcbiAgaWYgKHR5cGVvZiBuZW5jICE9PSAnc3RyaW5nJyAmJiAoQnVmZmVyLmlzRW5jb2RpbmcgPT09IGlzRW5jb2RpbmcgfHwgIWlzRW5jb2RpbmcoZW5jKSkpIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuYyk7XG4gIHJldHVybiBuZW5jIHx8IGVuYztcbn1cblxuLy8gU3RyaW5nRGVjb2RlciBwcm92aWRlcyBhbiBpbnRlcmZhY2UgZm9yIGVmZmljaWVudGx5IHNwbGl0dGluZyBhIHNlcmllcyBvZlxuLy8gYnVmZmVycyBpbnRvIGEgc2VyaWVzIG9mIEpTIHN0cmluZ3Mgd2l0aG91dCBicmVha2luZyBhcGFydCBtdWx0aS1ieXRlXG4vLyBjaGFyYWN0ZXJzLlxuZXhwb3J0cy5TdHJpbmdEZWNvZGVyID0gU3RyaW5nRGVjb2RlcjtcbmZ1bmN0aW9uIFN0cmluZ0RlY29kZXIoZW5jb2RpbmcpIHtcbiAgdGhpcy5lbmNvZGluZyA9IG5vcm1hbGl6ZUVuY29kaW5nKGVuY29kaW5nKTtcbiAgdmFyIG5iO1xuICBzd2l0Y2ggKHRoaXMuZW5jb2RpbmcpIHtcbiAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIHRoaXMudGV4dCA9IHV0ZjE2VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gdXRmMTZFbmQ7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1dGY4JzpcbiAgICAgIHRoaXMuZmlsbExhc3QgPSB1dGY4RmlsbExhc3Q7XG4gICAgICBuYiA9IDQ7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgdGhpcy50ZXh0ID0gYmFzZTY0VGV4dDtcbiAgICAgIHRoaXMuZW5kID0gYmFzZTY0RW5kO1xuICAgICAgbmIgPSAzO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMud3JpdGUgPSBzaW1wbGVXcml0ZTtcbiAgICAgIHRoaXMuZW5kID0gc2ltcGxlRW5kO1xuICAgICAgcmV0dXJuO1xuICB9XG4gIHRoaXMubGFzdE5lZWQgPSAwO1xuICB0aGlzLmxhc3RUb3RhbCA9IDA7XG4gIHRoaXMubGFzdENoYXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobmIpO1xufVxuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChidWYpIHtcbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHJldHVybiAnJztcbiAgdmFyIHI7XG4gIHZhciBpO1xuICBpZiAodGhpcy5sYXN0TmVlZCkge1xuICAgIHIgPSB0aGlzLmZpbGxMYXN0KGJ1Zik7XG4gICAgaWYgKHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuICcnO1xuICAgIGkgPSB0aGlzLmxhc3ROZWVkO1xuICAgIHRoaXMubGFzdE5lZWQgPSAwO1xuICB9IGVsc2Uge1xuICAgIGkgPSAwO1xuICB9XG4gIGlmIChpIDwgYnVmLmxlbmd0aCkgcmV0dXJuIHIgPyByICsgdGhpcy50ZXh0KGJ1ZiwgaSkgOiB0aGlzLnRleHQoYnVmLCBpKTtcbiAgcmV0dXJuIHIgfHwgJyc7XG59O1xuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSB1dGY4RW5kO1xuXG4vLyBSZXR1cm5zIG9ubHkgY29tcGxldGUgY2hhcmFjdGVycyBpbiBhIEJ1ZmZlclxuU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUudGV4dCA9IHV0ZjhUZXh0O1xuXG4vLyBBdHRlbXB0cyB0byBjb21wbGV0ZSBhIHBhcnRpYWwgbm9uLVVURi04IGNoYXJhY3RlciB1c2luZyBieXRlcyBmcm9tIGEgQnVmZmVyXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5maWxsTGFzdCA9IGZ1bmN0aW9uIChidWYpIHtcbiAgaWYgKHRoaXMubGFzdE5lZWQgPD0gYnVmLmxlbmd0aCkge1xuICAgIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZCwgMCwgdGhpcy5sYXN0TmVlZCk7XG4gICAgcmV0dXJuIHRoaXMubGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywgMCwgdGhpcy5sYXN0VG90YWwpO1xuICB9XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDtcbn07XG5cbi8vIENoZWNrcyB0aGUgdHlwZSBvZiBhIFVURi04IGJ5dGUsIHdoZXRoZXIgaXQncyBBU0NJSSwgYSBsZWFkaW5nIGJ5dGUsIG9yIGFcbi8vIGNvbnRpbnVhdGlvbiBieXRlLiBJZiBhbiBpbnZhbGlkIGJ5dGUgaXMgZGV0ZWN0ZWQsIC0yIGlzIHJldHVybmVkLlxuZnVuY3Rpb24gdXRmOENoZWNrQnl0ZShieXRlKSB7XG4gIGlmIChieXRlIDw9IDB4N0YpIHJldHVybiAwO2Vsc2UgaWYgKGJ5dGUgPj4gNSA9PT0gMHgwNikgcmV0dXJuIDI7ZWxzZSBpZiAoYnl0ZSA+PiA0ID09PSAweDBFKSByZXR1cm4gMztlbHNlIGlmIChieXRlID4+IDMgPT09IDB4MUUpIHJldHVybiA0O1xuICByZXR1cm4gYnl0ZSA+PiA2ID09PSAweDAyID8gLTEgOiAtMjtcbn1cblxuLy8gQ2hlY2tzIGF0IG1vc3QgMyBieXRlcyBhdCB0aGUgZW5kIG9mIGEgQnVmZmVyIGluIG9yZGVyIHRvIGRldGVjdCBhblxuLy8gaW5jb21wbGV0ZSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3Rlci4gVGhlIHRvdGFsIG51bWJlciBvZiBieXRlcyAoMiwgMywgb3IgNClcbi8vIG5lZWRlZCB0byBjb21wbGV0ZSB0aGUgVVRGLTggY2hhcmFjdGVyIChpZiBhcHBsaWNhYmxlKSBhcmUgcmV0dXJuZWQuXG5mdW5jdGlvbiB1dGY4Q2hlY2tJbmNvbXBsZXRlKHNlbGYsIGJ1ZiwgaSkge1xuICB2YXIgaiA9IGJ1Zi5sZW5ndGggLSAxO1xuICBpZiAoaiA8IGkpIHJldHVybiAwO1xuICB2YXIgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkgc2VsZi5sYXN0TmVlZCA9IG5iIC0gMTtcbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgaWYgKC0taiA8IGkgfHwgbmIgPT09IC0yKSByZXR1cm4gMDtcbiAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkgc2VsZi5sYXN0TmVlZCA9IG5iIC0gMjtcbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgaWYgKC0taiA8IGkgfHwgbmIgPT09IC0yKSByZXR1cm4gMDtcbiAgbmIgPSB1dGY4Q2hlY2tCeXRlKGJ1ZltqXSk7XG4gIGlmIChuYiA+PSAwKSB7XG4gICAgaWYgKG5iID4gMCkge1xuICAgICAgaWYgKG5iID09PSAyKSBuYiA9IDA7ZWxzZSBzZWxmLmxhc3ROZWVkID0gbmIgLSAzO1xuICAgIH1cbiAgICByZXR1cm4gbmI7XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbi8vIFZhbGlkYXRlcyBhcyBtYW55IGNvbnRpbnVhdGlvbiBieXRlcyBmb3IgYSBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciBhc1xuLy8gbmVlZGVkIG9yIGFyZSBhdmFpbGFibGUuIElmIHdlIHNlZSBhIG5vbi1jb250aW51YXRpb24gYnl0ZSB3aGVyZSB3ZSBleHBlY3Rcbi8vIG9uZSwgd2UgXCJyZXBsYWNlXCIgdGhlIHZhbGlkYXRlZCBjb250aW51YXRpb24gYnl0ZXMgd2UndmUgc2VlbiBzbyBmYXIgd2l0aFxuLy8gYSBzaW5nbGUgVVRGLTggcmVwbGFjZW1lbnQgY2hhcmFjdGVyICgnXFx1ZmZmZCcpLCB0byBtYXRjaCB2OCdzIFVURi04IGRlY29kaW5nXG4vLyBiZWhhdmlvci4gVGhlIGNvbnRpbnVhdGlvbiBieXRlIGNoZWNrIGlzIGluY2x1ZGVkIHRocmVlIHRpbWVzIGluIHRoZSBjYXNlXG4vLyB3aGVyZSBhbGwgb2YgdGhlIGNvbnRpbnVhdGlvbiBieXRlcyBmb3IgYSBjaGFyYWN0ZXIgZXhpc3QgaW4gdGhlIHNhbWUgYnVmZmVyLlxuLy8gSXQgaXMgYWxzbyBkb25lIHRoaXMgd2F5IGFzIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIGluY3JlYXNlIGluc3RlYWQgb2YgdXNpbmcgYVxuLy8gbG9vcC5cbmZ1bmN0aW9uIHV0ZjhDaGVja0V4dHJhQnl0ZXMoc2VsZiwgYnVmLCBwKSB7XG4gIGlmICgoYnVmWzBdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICBzZWxmLmxhc3ROZWVkID0gMDtcbiAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICB9XG4gIGlmIChzZWxmLmxhc3ROZWVkID4gMSAmJiBidWYubGVuZ3RoID4gMSkge1xuICAgIGlmICgoYnVmWzFdICYgMHhDMCkgIT09IDB4ODApIHtcbiAgICAgIHNlbGYubGFzdE5lZWQgPSAxO1xuICAgICAgcmV0dXJuICdcXHVmZmZkJztcbiAgICB9XG4gICAgaWYgKHNlbGYubGFzdE5lZWQgPiAyICYmIGJ1Zi5sZW5ndGggPiAyKSB7XG4gICAgICBpZiAoKGJ1ZlsyXSAmIDB4QzApICE9PSAweDgwKSB7XG4gICAgICAgIHNlbGYubGFzdE5lZWQgPSAyO1xuICAgICAgICByZXR1cm4gJ1xcdWZmZmQnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBBdHRlbXB0cyB0byBjb21wbGV0ZSBhIG11bHRpLWJ5dGUgVVRGLTggY2hhcmFjdGVyIHVzaW5nIGJ5dGVzIGZyb20gYSBCdWZmZXIuXG5mdW5jdGlvbiB1dGY4RmlsbExhc3QoYnVmKSB7XG4gIHZhciBwID0gdGhpcy5sYXN0VG90YWwgLSB0aGlzLmxhc3ROZWVkO1xuICB2YXIgciA9IHV0ZjhDaGVja0V4dHJhQnl0ZXModGhpcywgYnVmLCBwKTtcbiAgaWYgKHIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHI7XG4gIGlmICh0aGlzLmxhc3ROZWVkIDw9IGJ1Zi5sZW5ndGgpIHtcbiAgICBidWYuY29weSh0aGlzLmxhc3RDaGFyLCBwLCAwLCB0aGlzLmxhc3ROZWVkKTtcbiAgICByZXR1cm4gdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLCAwLCB0aGlzLmxhc3RUb3RhbCk7XG4gIH1cbiAgYnVmLmNvcHkodGhpcy5sYXN0Q2hhciwgcCwgMCwgYnVmLmxlbmd0aCk7XG4gIHRoaXMubGFzdE5lZWQgLT0gYnVmLmxlbmd0aDtcbn1cblxuLy8gUmV0dXJucyBhbGwgY29tcGxldGUgVVRGLTggY2hhcmFjdGVycyBpbiBhIEJ1ZmZlci4gSWYgdGhlIEJ1ZmZlciBlbmRlZCBvbiBhXG4vLyBwYXJ0aWFsIGNoYXJhY3RlciwgdGhlIGNoYXJhY3RlcidzIGJ5dGVzIGFyZSBidWZmZXJlZCB1bnRpbCB0aGUgcmVxdWlyZWRcbi8vIG51bWJlciBvZiBieXRlcyBhcmUgYXZhaWxhYmxlLlxuZnVuY3Rpb24gdXRmOFRleHQoYnVmLCBpKSB7XG4gIHZhciB0b3RhbCA9IHV0ZjhDaGVja0luY29tcGxldGUodGhpcywgYnVmLCBpKTtcbiAgaWYgKCF0aGlzLmxhc3ROZWVkKSByZXR1cm4gYnVmLnRvU3RyaW5nKCd1dGY4JywgaSk7XG4gIHRoaXMubGFzdFRvdGFsID0gdG90YWw7XG4gIHZhciBlbmQgPSBidWYubGVuZ3RoIC0gKHRvdGFsIC0gdGhpcy5sYXN0TmVlZCk7XG4gIGJ1Zi5jb3B5KHRoaXMubGFzdENoYXIsIDAsIGVuZCk7XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjgnLCBpLCBlbmQpO1xufVxuXG4vLyBGb3IgVVRGLTgsIGEgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIGlzIGFkZGVkIHdoZW4gZW5kaW5nIG9uIGEgcGFydGlhbFxuLy8gY2hhcmFjdGVyLlxuZnVuY3Rpb24gdXRmOEVuZChidWYpIHtcbiAgdmFyIHIgPSBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xuICBpZiAodGhpcy5sYXN0TmVlZCkgcmV0dXJuIHIgKyAnXFx1ZmZmZCc7XG4gIHJldHVybiByO1xufVxuXG4vLyBVVEYtMTZMRSB0eXBpY2FsbHkgbmVlZHMgdHdvIGJ5dGVzIHBlciBjaGFyYWN0ZXIsIGJ1dCBldmVuIGlmIHdlIGhhdmUgYW4gZXZlblxuLy8gbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSwgd2UgbmVlZCB0byBjaGVjayBpZiB3ZSBlbmQgb24gYSBsZWFkaW5nL2hpZ2hcbi8vIHN1cnJvZ2F0ZS4gSW4gdGhhdCBjYXNlLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBuZXh0IHR3byBieXRlcyBpbiBvcmRlciB0b1xuLy8gZGVjb2RlIHRoZSBsYXN0IGNoYXJhY3RlciBwcm9wZXJseS5cbmZ1bmN0aW9uIHV0ZjE2VGV4dChidWYsIGkpIHtcbiAgaWYgKChidWYubGVuZ3RoIC0gaSkgJSAyID09PSAwKSB7XG4gICAgdmFyIHIgPSBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpKTtcbiAgICBpZiAocikge1xuICAgICAgdmFyIGMgPSByLmNoYXJDb2RlQXQoci5sZW5ndGggLSAxKTtcbiAgICAgIGlmIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REJGRikge1xuICAgICAgICB0aGlzLmxhc3ROZWVkID0gMjtcbiAgICAgICAgdGhpcy5sYXN0VG90YWwgPSA0O1xuICAgICAgICB0aGlzLmxhc3RDaGFyWzBdID0gYnVmW2J1Zi5sZW5ndGggLSAyXTtcbiAgICAgICAgdGhpcy5sYXN0Q2hhclsxXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gICAgICAgIHJldHVybiByLnNsaWNlKDAsIC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgdGhpcy5sYXN0TmVlZCA9IDE7XG4gIHRoaXMubGFzdFRvdGFsID0gMjtcbiAgdGhpcy5sYXN0Q2hhclswXSA9IGJ1ZltidWYubGVuZ3RoIC0gMV07XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ3V0ZjE2bGUnLCBpLCBidWYubGVuZ3RoIC0gMSk7XG59XG5cbi8vIEZvciBVVEYtMTZMRSB3ZSBkbyBub3QgZXhwbGljaXRseSBhcHBlbmQgc3BlY2lhbCByZXBsYWNlbWVudCBjaGFyYWN0ZXJzIGlmIHdlXG4vLyBlbmQgb24gYSBwYXJ0aWFsIGNoYXJhY3Rlciwgd2Ugc2ltcGx5IGxldCB2OCBoYW5kbGUgdGhhdC5cbmZ1bmN0aW9uIHV0ZjE2RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSB7XG4gICAgdmFyIGVuZCA9IHRoaXMubGFzdFRvdGFsIC0gdGhpcy5sYXN0TmVlZDtcbiAgICByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ3V0ZjE2bGUnLCAwLCBlbmQpO1xuICB9XG4gIHJldHVybiByO1xufVxuXG5mdW5jdGlvbiBiYXNlNjRUZXh0KGJ1ZiwgaSkge1xuICB2YXIgbiA9IChidWYubGVuZ3RoIC0gaSkgJSAzO1xuICBpZiAobiA9PT0gMCkgcmV0dXJuIGJ1Zi50b1N0cmluZygnYmFzZTY0JywgaSk7XG4gIHRoaXMubGFzdE5lZWQgPSAzIC0gbjtcbiAgdGhpcy5sYXN0VG90YWwgPSAzO1xuICBpZiAobiA9PT0gMSkge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubGFzdENoYXJbMF0gPSBidWZbYnVmLmxlbmd0aCAtIDJdO1xuICAgIHRoaXMubGFzdENoYXJbMV0gPSBidWZbYnVmLmxlbmd0aCAtIDFdO1xuICB9XG4gIHJldHVybiBidWYudG9TdHJpbmcoJ2Jhc2U2NCcsIGksIGJ1Zi5sZW5ndGggLSBuKTtcbn1cblxuZnVuY3Rpb24gYmFzZTY0RW5kKGJ1Zikge1xuICB2YXIgciA9IGJ1ZiAmJiBidWYubGVuZ3RoID8gdGhpcy53cml0ZShidWYpIDogJyc7XG4gIGlmICh0aGlzLmxhc3ROZWVkKSByZXR1cm4gciArIHRoaXMubGFzdENoYXIudG9TdHJpbmcoJ2Jhc2U2NCcsIDAsIDMgLSB0aGlzLmxhc3ROZWVkKTtcbiAgcmV0dXJuIHI7XG59XG5cbi8vIFBhc3MgYnl0ZXMgb24gdGhyb3VnaCBmb3Igc2luZ2xlLWJ5dGUgZW5jb2RpbmdzIChlLmcuIGFzY2lpLCBsYXRpbjEsIGhleClcbmZ1bmN0aW9uIHNpbXBsZVdyaXRlKGJ1Zikge1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xufVxuXG5mdW5jdGlvbiBzaW1wbGVFbmQoYnVmKSB7XG4gIHJldHVybiBidWYgJiYgYnVmLmxlbmd0aCA/IHRoaXMud3JpdGUoYnVmKSA6ICcnO1xufSIsIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxuLy8gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgT2JqZWN0LmtleXMgZm9yIG9sZCBicm93c2Vyc1xuZnVuY3Rpb24gY29weVByb3BzIChzcmMsIGRzdCkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgZHN0W2tleV0gPSBzcmNba2V5XVxuICB9XG59XG5pZiAoQnVmZmVyLmZyb20gJiYgQnVmZmVyLmFsbG9jICYmIEJ1ZmZlci5hbGxvY1Vuc2FmZSAmJiBCdWZmZXIuYWxsb2NVbnNhZmVTbG93KSB7XG4gIG1vZHVsZS5leHBvcnRzID0gYnVmZmVyXG59IGVsc2Uge1xuICAvLyBDb3B5IHByb3BlcnRpZXMgZnJvbSByZXF1aXJlKCdidWZmZXInKVxuICBjb3B5UHJvcHMoYnVmZmVyLCBleHBvcnRzKVxuICBleHBvcnRzLkJ1ZmZlciA9IFNhZmVCdWZmZXJcbn1cblxuZnVuY3Rpb24gU2FmZUJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIEJ1ZmZlcihhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gQ29weSBzdGF0aWMgbWV0aG9kcyBmcm9tIEJ1ZmZlclxuY29weVByb3BzKEJ1ZmZlciwgU2FmZUJ1ZmZlcilcblxuU2FmZUJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuICByZXR1cm4gQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5TYWZlQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJylcbiAgfVxuICB2YXIgYnVmID0gQnVmZmVyKHNpemUpXG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1Zi5maWxsKGZpbGwpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGJ1Zi5maWxsKDApXG4gIH1cbiAgcmV0dXJuIGJ1ZlxufVxuXG5TYWZlQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9XG4gIHJldHVybiBCdWZmZXIoc2l6ZSlcbn1cblxuU2FmZUJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlci5TbG93QnVmZmVyKHNpemUpXG59XG4iLCJcbmV4cG9ydHMuZXZlcnkgPSBmdW5jdGlvbihzdHIpIHtcbiAgcmV0dXJuIG5ldyBFdmVyeShzdHIpO1xufTtcblxuLypcbiAgVGltZSBtYXBcbiovXG5cbnZhciB0aW1lID0ge1xuICBtaWxsaXNlY29uZDogMSxcbiAgc2Vjb25kOiAxMDAwLFxuICBtaW51dGU6IDYwMDAwLFxuICBob3VyOiAzNjAwMDAwLFxuICBkYXk6IDg2NDAwMDAwXG59O1xuXG5mb3IgKHZhciBrZXkgaW4gdGltZSkge1xuICBpZiAoa2V5ID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgdGltZS5tcyA9IHRpbWVba2V5XTtcbiAgfSBlbHNlIHtcbiAgICB0aW1lW2tleS5jaGFyQXQoMCldID0gdGltZVtrZXldO1xuICB9XG4gIHRpbWVba2V5ICsgJ3MnXSA9IHRpbWVba2V5XTtcbn1cblxuXG4vKlxuICBFdmVyeSBjb25zdHJ1Y3RvclxuKi9cblxuZnVuY3Rpb24gRXZlcnkoc3RyKSB7XG4gIHRoaXMuY291bnQgPSAwO1xuICB2YXIgbSA9IHBhcnNlKHN0cik7XG4gIGlmIChtKSB7XG4gICAgdGhpcy50aW1lID0gTnVtYmVyKG1bMF0pICogdGltZVttWzFdXTtcbiAgICB0aGlzLnR5cGUgPSBtWzFdO1xuICB9XG59XG5cbkV2ZXJ5LnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uKGNiKSB7XG4gIGlmICh0aGlzLnRpbWUpIHtcbiAgICB0aGlzLmludGVydmFsID0gc2V0SW50ZXJ2YWwoY2FsbGJhY2ssIHRoaXMudGltZSk7XG4gIH1cblxuICB2YXIgdGhhdCA9IHRoaXM7XG4gIGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xuICAgIHRoYXQuY291bnQrKztcbiAgICBjYi5jYWxsKHRoYXQpO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlcnkucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcbiAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWwpO1xuICAgIGRlbGV0ZSB0aGlzLmludGVydmFsO1xuICB9XG4gIHJldHVybiB0aGlzO1xufTtcblxuXG4vKlxuICBDb252ZXJ0IHN0cmluZyB0byBtaWxsaXNlY29uZHNcblxuICAgIG1zLCBtaWxsaXNlY29uZChzKT9cbiAgICBzLCBzZWNvbmQocyk/XG4gICAgbSwgbWludXRlKHMpP1xuICAgIGgsIGhvdXIocyk/XG4gICAgZCwgZGF5KHMpP1xuKi9cbnZhciByZWcgPSAvXlxccyooXFxkKyg/OlxcLlxcZCspPylcXHMqKFthLXpdKylcXHMqJC87XG5cbmZ1bmN0aW9uIHBhcnNlKHN0cikge1xuICB2YXIgbSA9IHN0ci5tYXRjaChyZWcpO1xuICBpZiAobSAmJiB0aW1lW21bMl1dKSB7XG4gICAgcmV0dXJuIG0uc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJleHBvcnQgdmFyIFBKRF8zUEFSQU0gPSAxO1xuZXhwb3J0IHZhciBQSkRfN1BBUkFNID0gMjtcbmV4cG9ydCB2YXIgUEpEX1dHUzg0ID0gNDsgLy8gV0dTODQgb3IgZXF1aXZhbGVudFxuZXhwb3J0IHZhciBQSkRfTk9EQVRVTSA9IDU7IC8vIFdHUzg0IG9yIGVxdWl2YWxlbnRcbmV4cG9ydCB2YXIgU0VDX1RPX1JBRCA9IDQuODQ4MTM2ODExMDk1MzU5OTM1ODk5MTQxMDIzNTdlLTY7XG5leHBvcnQgdmFyIEhBTEZfUEkgPSBNYXRoLlBJLzI7XG4vLyBlbGxpcG9pZCBwal9zZXRfZWxsLmNcbmV4cG9ydCB2YXIgU0lYVEggPSAwLjE2NjY2NjY2NjY2NjY2NjY2Njc7XG4vKiAxLzYgKi9cbmV4cG9ydCB2YXIgUkE0ID0gMC4wNDcyMjIyMjIyMjIyMjIyMjIyMjtcbi8qIDE3LzM2MCAqL1xuZXhwb3J0IHZhciBSQTYgPSAwLjAyMjE1NjA4NDY1NjA4NDY1NjA4O1xuZXhwb3J0IHZhciBFUFNMTiA9IDEuMGUtMTA7XG4vLyB5b3UnZCB0aGluayB5b3UgY291bGQgdXNlIE51bWJlci5FUFNJTE9OIGFib3ZlIGJ1dCB0aGF0IG1ha2VzXG4vLyBNb2xsd2VpZGUgZ2V0IGludG8gYW4gaW5maW5hdGUgbG9vcC5cblxuZXhwb3J0IHZhciBEMlIgPSAwLjAxNzQ1MzI5MjUxOTk0MzI5NTc3O1xuZXhwb3J0IHZhciBSMkQgPSA1Ny4yOTU3Nzk1MTMwODIzMjA4ODtcbmV4cG9ydCB2YXIgRk9SVFBJID0gTWF0aC5QSS80O1xuZXhwb3J0IHZhciBUV09fUEkgPSBNYXRoLlBJICogMjtcbi8vIFNQSSBpcyBzbGlnaHRseSBncmVhdGVyIHRoYW4gTWF0aC5QSSwgc28gdmFsdWVzIHRoYXQgZXhjZWVkIHRoZSAtMTgwLi4xODBcbi8vIGRlZ3JlZSByYW5nZSBieSBhIHRpbnkgYW1vdW50IGRvbid0IGdldCB3cmFwcGVkLiBUaGlzIHByZXZlbnRzIHBvaW50cyB0aGF0XG4vLyBoYXZlIGRyaWZ0ZWQgZnJvbSB0aGVpciBvcmlnaW5hbCBsb2NhdGlvbiBhbG9uZyB0aGUgMTgwdGggbWVyaWRpYW4gKGR1ZSB0b1xuLy8gZmxvYXRpbmcgcG9pbnQgZXJyb3IpIGZyb20gY2hhbmdpbmcgdGhlaXIgc2lnbi5cbmV4cG9ydCB2YXIgU1BJID0gMy4xNDE1OTI2NTM1OTtcbiIsInZhciBleHBvcnRzID0ge307XG5leHBvcnQge2V4cG9ydHMgYXMgZGVmYXVsdH07XG5cbmV4cG9ydHMuZ3JlZW53aWNoID0gMC4wOyAvL1wiMGRFXCIsXG5leHBvcnRzLmxpc2JvbiA9IC05LjEzMTkwNjExMTExMTsgLy9cIjlkMDcnNTQuODYyXFxcIldcIixcbmV4cG9ydHMucGFyaXMgPSAyLjMzNzIyOTE2NjY2NzsgLy9cIjJkMjAnMTQuMDI1XFxcIkVcIixcbmV4cG9ydHMuYm9nb3RhID0gLTc0LjA4MDkxNjY2NjY2NzsgLy9cIjc0ZDA0JzUxLjNcXFwiV1wiLFxuZXhwb3J0cy5tYWRyaWQgPSAtMy42ODc5Mzg4ODg4ODk7IC8vXCIzZDQxJzE2LjU4XFxcIldcIixcbmV4cG9ydHMucm9tZSA9IDEyLjQ1MjMzMzMzMzMzMzsgLy9cIjEyZDI3JzguNFxcXCJFXCIsXG5leHBvcnRzLmJlcm4gPSA3LjQzOTU4MzMzMzMzMzsgLy9cIjdkMjYnMjIuNVxcXCJFXCIsXG5leHBvcnRzLmpha2FydGEgPSAxMDYuODA3NzE5NDQ0NDQ0OyAvL1wiMTA2ZDQ4JzI3Ljc5XFxcIkVcIixcbmV4cG9ydHMuZmVycm8gPSAtMTcuNjY2NjY2NjY2NjY3OyAvL1wiMTdkNDAnV1wiLFxuZXhwb3J0cy5icnVzc2VscyA9IDQuMzY3OTc1OyAvL1wiNGQyMic0LjcxXFxcIkVcIixcbmV4cG9ydHMuc3RvY2tob2xtID0gMTguMDU4Mjc3Nzc3Nzc4OyAvL1wiMThkMycyOS44XFxcIkVcIixcbmV4cG9ydHMuYXRoZW5zID0gMjMuNzE2MzM3NTsgLy9cIjIzZDQyJzU4LjgxNVxcXCJFXCIsXG5leHBvcnRzLm9zbG8gPSAxMC43MjI5MTY2NjY2Njc7IC8vXCIxMGQ0MycyMi41XFxcIkVcIlxuIiwiZXhwb3J0IGRlZmF1bHQge1xuICBmdDoge3RvX21ldGVyOiAwLjMwNDh9LFxuICAndXMtZnQnOiB7dG9fbWV0ZXI6IDEyMDAgLyAzOTM3fVxufTtcbiIsInZhciBpZ25vcmVkQ2hhciA9IC9bXFxzX1xcLVxcL1xcKFxcKV0vZztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1hdGNoKG9iaiwga2V5KSB7XG4gIGlmIChvYmpba2V5XSkge1xuICAgIHJldHVybiBvYmpba2V5XTtcbiAgfVxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG4gIHZhciBsa2V5ID0ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZShpZ25vcmVkQ2hhciwgJycpO1xuICB2YXIgaSA9IC0xO1xuICB2YXIgdGVzdGtleSwgcHJvY2Vzc2VkS2V5O1xuICB3aGlsZSAoKytpIDwga2V5cy5sZW5ndGgpIHtcbiAgICB0ZXN0a2V5ID0ga2V5c1tpXTtcbiAgICBwcm9jZXNzZWRLZXkgPSB0ZXN0a2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZShpZ25vcmVkQ2hhciwgJycpO1xuICAgIGlmIChwcm9jZXNzZWRLZXkgPT09IGxrZXkpIHtcbiAgICAgIHJldHVybiBvYmpbdGVzdGtleV07XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge0QyUn0gZnJvbSAnLi9jb25zdGFudHMvdmFsdWVzJztcbmltcG9ydCBQcmltZU1lcmlkaWFuIGZyb20gJy4vY29uc3RhbnRzL1ByaW1lTWVyaWRpYW4nO1xuaW1wb3J0IHVuaXRzIGZyb20gJy4vY29uc3RhbnRzL3VuaXRzJztcbmltcG9ydCBtYXRjaCBmcm9tICcuL21hdGNoJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZGVmRGF0YSkge1xuICB2YXIgc2VsZiA9IHt9O1xuICB2YXIgcGFyYW1PYmogPSBkZWZEYXRhLnNwbGl0KCcrJykubWFwKGZ1bmN0aW9uKHYpIHtcbiAgICByZXR1cm4gdi50cmltKCk7XG4gIH0pLmZpbHRlcihmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGE7XG4gIH0pLnJlZHVjZShmdW5jdGlvbihwLCBhKSB7XG4gICAgdmFyIHNwbGl0ID0gYS5zcGxpdCgnPScpO1xuICAgIHNwbGl0LnB1c2godHJ1ZSk7XG4gICAgcFtzcGxpdFswXS50b0xvd2VyQ2FzZSgpXSA9IHNwbGl0WzFdO1xuICAgIHJldHVybiBwO1xuICB9LCB7fSk7XG4gIHZhciBwYXJhbU5hbWUsIHBhcmFtVmFsLCBwYXJhbU91dG5hbWU7XG4gIHZhciBwYXJhbXMgPSB7XG4gICAgcHJvajogJ3Byb2pOYW1lJyxcbiAgICBkYXR1bTogJ2RhdHVtQ29kZScsXG4gICAgcmY6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYucmYgPSBwYXJzZUZsb2F0KHYpO1xuICAgIH0sXG4gICAgbGF0XzA6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYubGF0MCA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICBsYXRfMTogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5sYXQxID0gdiAqIEQyUjtcbiAgICB9LFxuICAgIGxhdF8yOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmxhdDIgPSB2ICogRDJSO1xuICAgIH0sXG4gICAgbGF0X3RzOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmxhdF90cyA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICBsb25fMDogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5sb25nMCA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICBsb25fMTogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5sb25nMSA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICBsb25fMjogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5sb25nMiA9IHYgKiBEMlI7XG4gICAgfSxcbiAgICBhbHBoYTogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5hbHBoYSA9IHBhcnNlRmxvYXQodikgKiBEMlI7XG4gICAgfSxcbiAgICBsb25jOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmxvbmdjID0gdiAqIEQyUjtcbiAgICB9LFxuICAgIHhfMDogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi54MCA9IHBhcnNlRmxvYXQodik7XG4gICAgfSxcbiAgICB5XzA6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYueTAgPSBwYXJzZUZsb2F0KHYpO1xuICAgIH0sXG4gICAga18wOiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmswID0gcGFyc2VGbG9hdCh2KTtcbiAgICB9LFxuICAgIGs6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYuazAgPSBwYXJzZUZsb2F0KHYpO1xuICAgIH0sXG4gICAgYTogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi5hID0gcGFyc2VGbG9hdCh2KTtcbiAgICB9LFxuICAgIGI6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYuYiA9IHBhcnNlRmxvYXQodik7XG4gICAgfSxcbiAgICByX2E6IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5SX0EgPSB0cnVlO1xuICAgIH0sXG4gICAgem9uZTogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi56b25lID0gcGFyc2VJbnQodiwgMTApO1xuICAgIH0sXG4gICAgc291dGg6IGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi51dG1Tb3V0aCA9IHRydWU7XG4gICAgfSxcbiAgICB0b3dnczg0OiBmdW5jdGlvbih2KSB7XG4gICAgICBzZWxmLmRhdHVtX3BhcmFtcyA9IHYuc3BsaXQoXCIsXCIpLm1hcChmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGEpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB0b19tZXRlcjogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi50b19tZXRlciA9IHBhcnNlRmxvYXQodik7XG4gICAgfSxcbiAgICB1bml0czogZnVuY3Rpb24odikge1xuICAgICAgc2VsZi51bml0cyA9IHY7XG4gICAgICB2YXIgdW5pdCA9IG1hdGNoKHVuaXRzLCB2KTtcbiAgICAgIGlmICh1bml0KSB7XG4gICAgICAgIHNlbGYudG9fbWV0ZXIgPSB1bml0LnRvX21ldGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgZnJvbV9ncmVlbndpY2g6IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHNlbGYuZnJvbV9ncmVlbndpY2ggPSB2ICogRDJSO1xuICAgIH0sXG4gICAgcG06IGZ1bmN0aW9uKHYpIHtcbiAgICAgIHZhciBwbSA9IG1hdGNoKFByaW1lTWVyaWRpYW4sIHYpO1xuICAgICAgc2VsZi5mcm9tX2dyZWVud2ljaCA9IChwbSA/IHBtIDogcGFyc2VGbG9hdCh2KSkgKiBEMlI7XG4gICAgfSxcbiAgICBuYWRncmlkczogZnVuY3Rpb24odikge1xuICAgICAgaWYgKHYgPT09ICdAbnVsbCcpIHtcbiAgICAgICAgc2VsZi5kYXR1bUNvZGUgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2VsZi5uYWRncmlkcyA9IHY7XG4gICAgICB9XG4gICAgfSxcbiAgICBheGlzOiBmdW5jdGlvbih2KSB7XG4gICAgICB2YXIgbGVnYWxBeGlzID0gXCJld25zdWRcIjtcbiAgICAgIGlmICh2Lmxlbmd0aCA9PT0gMyAmJiBsZWdhbEF4aXMuaW5kZXhPZih2LnN1YnN0cigwLCAxKSkgIT09IC0xICYmIGxlZ2FsQXhpcy5pbmRleE9mKHYuc3Vic3RyKDEsIDEpKSAhPT0gLTEgJiYgbGVnYWxBeGlzLmluZGV4T2Yodi5zdWJzdHIoMiwgMSkpICE9PSAtMSkge1xuICAgICAgICBzZWxmLmF4aXMgPSB2O1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgZm9yIChwYXJhbU5hbWUgaW4gcGFyYW1PYmopIHtcbiAgICBwYXJhbVZhbCA9IHBhcmFtT2JqW3BhcmFtTmFtZV07XG4gICAgaWYgKHBhcmFtTmFtZSBpbiBwYXJhbXMpIHtcbiAgICAgIHBhcmFtT3V0bmFtZSA9IHBhcmFtc1twYXJhbU5hbWVdO1xuICAgICAgaWYgKHR5cGVvZiBwYXJhbU91dG5hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcGFyYW1PdXRuYW1lKHBhcmFtVmFsKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzZWxmW3BhcmFtT3V0bmFtZV0gPSBwYXJhbVZhbDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBzZWxmW3BhcmFtTmFtZV0gPSBwYXJhbVZhbDtcbiAgICB9XG4gIH1cbiAgaWYodHlwZW9mIHNlbGYuZGF0dW1Db2RlID09PSAnc3RyaW5nJyAmJiBzZWxmLmRhdHVtQ29kZSAhPT0gXCJXR1M4NFwiKXtcbiAgICBzZWxmLmRhdHVtQ29kZSA9IHNlbGYuZGF0dW1Db2RlLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBwYXJzZVN0cmluZztcblxudmFyIE5FVVRSQUwgPSAxO1xudmFyIEtFWVdPUkQgPSAyO1xudmFyIE5VTUJFUiA9IDM7XG52YXIgUVVPVEVEID0gNDtcbnZhciBBRlRFUlFVT1RFID0gNTtcbnZhciBFTkRFRCA9IC0xO1xudmFyIHdoaXRlc3BhY2UgPSAvXFxzLztcbnZhciBsYXRpbiA9IC9bQS1aYS16XS87XG52YXIga2V5d29yZCA9IC9bQS1aYS16ODRdLztcbnZhciBlbmRUaGluZ3MgPSAvWyxcXF1dLztcbnZhciBkaWdldHMgPSAvW1xcZFxcLkVcXC1cXCtdLztcbi8vIGNvbnN0IGlnbm9yZWRDaGFyID0gL1tcXHNfXFwtXFwvXFwoXFwpXS9nO1xuZnVuY3Rpb24gUGFyc2VyKHRleHQpIHtcbiAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGEgc3RyaW5nJyk7XG4gIH1cbiAgdGhpcy50ZXh0ID0gdGV4dC50cmltKCk7XG4gIHRoaXMubGV2ZWwgPSAwO1xuICB0aGlzLnBsYWNlID0gMDtcbiAgdGhpcy5yb290ID0gbnVsbDtcbiAgdGhpcy5zdGFjayA9IFtdO1xuICB0aGlzLmN1cnJlbnRPYmplY3QgPSBudWxsO1xuICB0aGlzLnN0YXRlID0gTkVVVFJBTDtcbn1cblBhcnNlci5wcm90b3R5cGUucmVhZENoYXJpY3RlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgY2hhciA9IHRoaXMudGV4dFt0aGlzLnBsYWNlKytdO1xuICBpZiAodGhpcy5zdGF0ZSAhPT0gUVVPVEVEKSB7XG4gICAgd2hpbGUgKHdoaXRlc3BhY2UudGVzdChjaGFyKSkge1xuICAgICAgaWYgKHRoaXMucGxhY2UgPj0gdGhpcy50ZXh0Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjaGFyID0gdGhpcy50ZXh0W3RoaXMucGxhY2UrK107XG4gICAgfVxuICB9XG4gIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgIGNhc2UgTkVVVFJBTDpcbiAgICAgIHJldHVybiB0aGlzLm5ldXRyYWwoY2hhcik7XG4gICAgY2FzZSBLRVlXT1JEOlxuICAgICAgcmV0dXJuIHRoaXMua2V5d29yZChjaGFyKVxuICAgIGNhc2UgUVVPVEVEOlxuICAgICAgcmV0dXJuIHRoaXMucXVvdGVkKGNoYXIpO1xuICAgIGNhc2UgQUZURVJRVU9URTpcbiAgICAgIHJldHVybiB0aGlzLmFmdGVycXVvdGUoY2hhcik7XG4gICAgY2FzZSBOVU1CRVI6XG4gICAgICByZXR1cm4gdGhpcy5udW1iZXIoY2hhcik7XG4gICAgY2FzZSBFTkRFRDpcbiAgICAgIHJldHVybjtcbiAgfVxufTtcblBhcnNlci5wcm90b3R5cGUuYWZ0ZXJxdW90ZSA9IGZ1bmN0aW9uKGNoYXIpIHtcbiAgaWYgKGNoYXIgPT09ICdcIicpIHtcbiAgICB0aGlzLndvcmQgKz0gJ1wiJztcbiAgICB0aGlzLnN0YXRlID0gUVVPVEVEO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZW5kVGhpbmdzLnRlc3QoY2hhcikpIHtcbiAgICB0aGlzLndvcmQgPSB0aGlzLndvcmQudHJpbSgpO1xuICAgIHRoaXMuYWZ0ZXJJdGVtKGNoYXIpO1xuICAgIHJldHVybjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ2hhdm5cXCd0IGhhbmRsZWQgXCInICtjaGFyICsgJ1wiIGluIGFmdGVycXVvdGUgeWV0LCBpbmRleCAnICsgdGhpcy5wbGFjZSk7XG59O1xuUGFyc2VyLnByb3RvdHlwZS5hZnRlckl0ZW0gPSBmdW5jdGlvbihjaGFyKSB7XG4gIGlmIChjaGFyID09PSAnLCcpIHtcbiAgICBpZiAodGhpcy53b3JkICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmN1cnJlbnRPYmplY3QucHVzaCh0aGlzLndvcmQpO1xuICAgIH1cbiAgICB0aGlzLndvcmQgPSBudWxsO1xuICAgIHRoaXMuc3RhdGUgPSBORVVUUkFMO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY2hhciA9PT0gJ10nKSB7XG4gICAgdGhpcy5sZXZlbC0tO1xuICAgIGlmICh0aGlzLndvcmQgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuY3VycmVudE9iamVjdC5wdXNoKHRoaXMud29yZCk7XG4gICAgICB0aGlzLndvcmQgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLnN0YXRlID0gTkVVVFJBTDtcbiAgICB0aGlzLmN1cnJlbnRPYmplY3QgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgIGlmICghdGhpcy5jdXJyZW50T2JqZWN0KSB7XG4gICAgICB0aGlzLnN0YXRlID0gRU5ERUQ7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG59O1xuUGFyc2VyLnByb3RvdHlwZS5udW1iZXIgPSBmdW5jdGlvbihjaGFyKSB7XG4gIGlmIChkaWdldHMudGVzdChjaGFyKSkge1xuICAgIHRoaXMud29yZCArPSBjaGFyO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZW5kVGhpbmdzLnRlc3QoY2hhcikpIHtcbiAgICB0aGlzLndvcmQgPSBwYXJzZUZsb2F0KHRoaXMud29yZCk7XG4gICAgdGhpcy5hZnRlckl0ZW0oY2hhcik7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcignaGF2blxcJ3QgaGFuZGxlZCBcIicgK2NoYXIgKyAnXCIgaW4gbnVtYmVyIHlldCwgaW5kZXggJyArIHRoaXMucGxhY2UpO1xufTtcblBhcnNlci5wcm90b3R5cGUucXVvdGVkID0gZnVuY3Rpb24oY2hhcikge1xuICBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgIHRoaXMuc3RhdGUgPSBBRlRFUlFVT1RFO1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLndvcmQgKz0gY2hhcjtcbiAgcmV0dXJuO1xufTtcblBhcnNlci5wcm90b3R5cGUua2V5d29yZCA9IGZ1bmN0aW9uKGNoYXIpIHtcbiAgaWYgKGtleXdvcmQudGVzdChjaGFyKSkge1xuICAgIHRoaXMud29yZCArPSBjaGFyO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY2hhciA9PT0gJ1snKSB7XG4gICAgdmFyIG5ld09iamVjdHMgPSBbXTtcbiAgICBuZXdPYmplY3RzLnB1c2godGhpcy53b3JkKTtcbiAgICB0aGlzLmxldmVsKys7XG4gICAgaWYgKHRoaXMucm9vdCA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5yb290ID0gbmV3T2JqZWN0cztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50T2JqZWN0LnB1c2gobmV3T2JqZWN0cyk7XG4gICAgfVxuICAgIHRoaXMuc3RhY2sucHVzaCh0aGlzLmN1cnJlbnRPYmplY3QpO1xuICAgIHRoaXMuY3VycmVudE9iamVjdCA9IG5ld09iamVjdHM7XG4gICAgdGhpcy5zdGF0ZSA9IE5FVVRSQUw7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChlbmRUaGluZ3MudGVzdChjaGFyKSkge1xuICAgIHRoaXMuYWZ0ZXJJdGVtKGNoYXIpO1xuICAgIHJldHVybjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ2hhdm5cXCd0IGhhbmRsZWQgXCInICtjaGFyICsgJ1wiIGluIGtleXdvcmQgeWV0LCBpbmRleCAnICsgdGhpcy5wbGFjZSk7XG59O1xuUGFyc2VyLnByb3RvdHlwZS5uZXV0cmFsID0gZnVuY3Rpb24oY2hhcikge1xuICBpZiAobGF0aW4udGVzdChjaGFyKSkge1xuICAgIHRoaXMud29yZCA9IGNoYXI7XG4gICAgdGhpcy5zdGF0ZSA9IEtFWVdPUkQ7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgdGhpcy53b3JkID0gJyc7XG4gICAgdGhpcy5zdGF0ZSA9IFFVT1RFRDtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGRpZ2V0cy50ZXN0KGNoYXIpKSB7XG4gICAgdGhpcy53b3JkID0gY2hhcjtcbiAgICB0aGlzLnN0YXRlID0gTlVNQkVSO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZW5kVGhpbmdzLnRlc3QoY2hhcikpIHtcbiAgICB0aGlzLmFmdGVySXRlbShjaGFyKTtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdoYXZuXFwndCBoYW5kbGVkIFwiJyArY2hhciArICdcIiBpbiBuZXV0cmFsIHlldCwgaW5kZXggJyArIHRoaXMucGxhY2UpO1xufTtcblBhcnNlci5wcm90b3R5cGUub3V0cHV0ID0gZnVuY3Rpb24oKSB7XG4gIHdoaWxlICh0aGlzLnBsYWNlIDwgdGhpcy50ZXh0Lmxlbmd0aCkge1xuICAgIHRoaXMucmVhZENoYXJpY3RlcigpO1xuICB9XG4gIGlmICh0aGlzLnN0YXRlID09PSBFTkRFRCkge1xuICAgIHJldHVybiB0aGlzLnJvb3Q7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCd1bmFibGUgdG8gcGFyc2Ugc3RyaW5nIFwiJyArdGhpcy50ZXh0ICsgJ1wiLiBTdGF0ZSBpcyAnICsgdGhpcy5zdGF0ZSk7XG59O1xuXG5mdW5jdGlvbiBwYXJzZVN0cmluZyh0eHQpIHtcbiAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIodHh0KTtcbiAgcmV0dXJuIHBhcnNlci5vdXRwdXQoKTtcbn1cbiIsIlxuXG5mdW5jdGlvbiBtYXBpdChvYmosIGtleSwgdmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgIHZhbHVlLnVuc2hpZnQoa2V5KTtcbiAgICBrZXkgPSBudWxsO1xuICB9XG4gIHZhciB0aGluZyA9IGtleSA/IHt9IDogb2JqO1xuXG4gIHZhciBvdXQgPSB2YWx1ZS5yZWR1Y2UoZnVuY3Rpb24obmV3T2JqLCBpdGVtKSB7XG4gICAgc0V4cHIoaXRlbSwgbmV3T2JqKTtcbiAgICByZXR1cm4gbmV3T2JqXG4gIH0sIHRoaW5nKTtcbiAgaWYgKGtleSkge1xuICAgIG9ialtrZXldID0gb3V0O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzRXhwcih2LCBvYmopIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgb2JqW3ZdID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIGtleSA9IHYuc2hpZnQoKTtcbiAgaWYgKGtleSA9PT0gJ1BBUkFNRVRFUicpIHtcbiAgICBrZXkgPSB2LnNoaWZ0KCk7XG4gIH1cbiAgaWYgKHYubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodlswXSkpIHtcbiAgICAgIG9ialtrZXldID0ge307XG4gICAgICBzRXhwcih2WzBdLCBvYmpba2V5XSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIG9ialtrZXldID0gdlswXTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCF2Lmxlbmd0aCkge1xuICAgIG9ialtrZXldID0gdHJ1ZTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGtleSA9PT0gJ1RPV0dTODQnKSB7XG4gICAgb2JqW2tleV0gPSB2O1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoa2V5ID09PSAnQVhJUycpIHtcbiAgICBpZiAoIShrZXkgaW4gb2JqKSkge1xuICAgICAgb2JqW2tleV0gPSBbXTtcbiAgICB9XG4gICAgb2JqW2tleV0ucHVzaCh2KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFBcnJheS5pc0FycmF5KGtleSkpIHtcbiAgICBvYmpba2V5XSA9IHt9O1xuICB9XG5cbiAgdmFyIGk7XG4gIHN3aXRjaCAoa2V5KSB7XG4gICAgY2FzZSAnVU5JVCc6XG4gICAgY2FzZSAnUFJJTUVNJzpcbiAgICBjYXNlICdWRVJUX0RBVFVNJzpcbiAgICAgIG9ialtrZXldID0ge1xuICAgICAgICBuYW1lOiB2WzBdLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIGNvbnZlcnQ6IHZbMV1cbiAgICAgIH07XG4gICAgICBpZiAodi5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgc0V4cHIodlsyXSwgb2JqW2tleV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgJ1NQSEVST0lEJzpcbiAgICBjYXNlICdFTExJUFNPSUQnOlxuICAgICAgb2JqW2tleV0gPSB7XG4gICAgICAgIG5hbWU6IHZbMF0sXG4gICAgICAgIGE6IHZbMV0sXG4gICAgICAgIHJmOiB2WzJdXG4gICAgICB9O1xuICAgICAgaWYgKHYubGVuZ3RoID09PSA0KSB7XG4gICAgICAgIHNFeHByKHZbM10sIG9ialtrZXldKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICBjYXNlICdQUk9KRUNURURDUlMnOlxuICAgIGNhc2UgJ1BST0pDUlMnOlxuICAgIGNhc2UgJ0dFT0dDUyc6XG4gICAgY2FzZSAnR0VPQ0NTJzpcbiAgICBjYXNlICdQUk9KQ1MnOlxuICAgIGNhc2UgJ0xPQ0FMX0NTJzpcbiAgICBjYXNlICdHRU9EQ1JTJzpcbiAgICBjYXNlICdHRU9ERVRJQ0NSUyc6XG4gICAgY2FzZSAnR0VPREVUSUNEQVRVTSc6XG4gICAgY2FzZSAnRURBVFVNJzpcbiAgICBjYXNlICdFTkdJTkVFUklOR0RBVFVNJzpcbiAgICBjYXNlICdWRVJUX0NTJzpcbiAgICBjYXNlICdWRVJUQ1JTJzpcbiAgICBjYXNlICdWRVJUSUNBTENSUyc6XG4gICAgY2FzZSAnQ09NUERfQ1MnOlxuICAgIGNhc2UgJ0NPTVBPVU5EQ1JTJzpcbiAgICBjYXNlICdFTkdJTkVFUklOR0NSUyc6XG4gICAgY2FzZSAnRU5HQ1JTJzpcbiAgICBjYXNlICdGSVRURURfQ1MnOlxuICAgIGNhc2UgJ0xPQ0FMX0RBVFVNJzpcbiAgICBjYXNlICdEQVRVTSc6XG4gICAgICB2WzBdID0gWyduYW1lJywgdlswXV07XG4gICAgICBtYXBpdChvYmosIGtleSwgdik7XG4gICAgICByZXR1cm47XG4gICAgZGVmYXVsdDpcbiAgICAgIGkgPSAtMTtcbiAgICAgIHdoaWxlICgrK2kgPCB2Lmxlbmd0aCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodltpXSkpIHtcbiAgICAgICAgICByZXR1cm4gc0V4cHIodiwgb2JqW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbWFwaXQob2JqLCBrZXksIHYpO1xuICB9XG59XG4iLCJ2YXIgRDJSID0gMC4wMTc0NTMyOTI1MTk5NDMyOTU3NztcbmltcG9ydCBwYXJzZXIgZnJvbSAnLi9wYXJzZXInO1xuaW1wb3J0IHtzRXhwcn0gZnJvbSAnLi9wcm9jZXNzJztcblxuXG5cbmZ1bmN0aW9uIHJlbmFtZShvYmosIHBhcmFtcykge1xuICB2YXIgb3V0TmFtZSA9IHBhcmFtc1swXTtcbiAgdmFyIGluTmFtZSA9IHBhcmFtc1sxXTtcbiAgaWYgKCEob3V0TmFtZSBpbiBvYmopICYmIChpbk5hbWUgaW4gb2JqKSkge1xuICAgIG9ialtvdXROYW1lXSA9IG9ialtpbk5hbWVdO1xuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAzKSB7XG4gICAgICBvYmpbb3V0TmFtZV0gPSBwYXJhbXNbMl0ob2JqW291dE5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZDJyKGlucHV0KSB7XG4gIHJldHVybiBpbnB1dCAqIEQyUjtcbn1cblxuZnVuY3Rpb24gY2xlYW5XS1Qod2t0KSB7XG4gIGlmICh3a3QudHlwZSA9PT0gJ0dFT0dDUycpIHtcbiAgICB3a3QucHJvak5hbWUgPSAnbG9uZ2xhdCc7XG4gIH0gZWxzZSBpZiAod2t0LnR5cGUgPT09ICdMT0NBTF9DUycpIHtcbiAgICB3a3QucHJvak5hbWUgPSAnaWRlbnRpdHknO1xuICAgIHdrdC5sb2NhbCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHR5cGVvZiB3a3QuUFJPSkVDVElPTiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHdrdC5wcm9qTmFtZSA9IE9iamVjdC5rZXlzKHdrdC5QUk9KRUNUSU9OKVswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2t0LnByb2pOYW1lID0gd2t0LlBST0pFQ1RJT047XG4gICAgfVxuICB9XG4gIGlmICh3a3QuQVhJUykge1xuICAgIHZhciBheGlzT3JkZXIgPSAnJztcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB3a3QuQVhJUy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICB2YXIgYXhpcyA9IHdrdC5BWElTW2ldO1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBheGlzWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoZGVzY3JpcHRvci5pbmRleE9mKCdub3J0aCcpICE9PSAtMSkge1xuICAgICAgICBheGlzT3JkZXIgKz0gJ24nO1xuICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmluZGV4T2YoJ3NvdXRoJykgIT09IC0xKSB7XG4gICAgICAgIGF4aXNPcmRlciArPSAncyc7XG4gICAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuaW5kZXhPZignZWFzdCcpICE9PSAtMSkge1xuICAgICAgICBheGlzT3JkZXIgKz0gJ2UnO1xuICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmluZGV4T2YoJ3dlc3QnKSAhPT0gLTEpIHtcbiAgICAgICAgYXhpc09yZGVyICs9ICd3JztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGF4aXNPcmRlci5sZW5ndGggPT09IDIpIHtcbiAgICAgIGF4aXNPcmRlciArPSAndSc7XG4gICAgfVxuICAgIGlmIChheGlzT3JkZXIubGVuZ3RoID09PSAzKSB7XG4gICAgICB3a3QuYXhpcyA9IGF4aXNPcmRlcjtcbiAgICB9XG4gIH1cbiAgaWYgKHdrdC5VTklUKSB7XG4gICAgd2t0LnVuaXRzID0gd2t0LlVOSVQubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh3a3QudW5pdHMgPT09ICdtZXRyZScpIHtcbiAgICAgIHdrdC51bml0cyA9ICdtZXRlcic7XG4gICAgfVxuICAgIGlmICh3a3QuVU5JVC5jb252ZXJ0KSB7XG4gICAgICBpZiAod2t0LnR5cGUgPT09ICdHRU9HQ1MnKSB7XG4gICAgICAgIGlmICh3a3QuREFUVU0gJiYgd2t0LkRBVFVNLlNQSEVST0lEKSB7XG4gICAgICAgICAgd2t0LnRvX21ldGVyID0gd2t0LlVOSVQuY29udmVydCp3a3QuREFUVU0uU1BIRVJPSUQuYTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2t0LnRvX21ldGVyID0gd2t0LlVOSVQuY29udmVydDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdmFyIGdlb2djcyA9IHdrdC5HRU9HQ1M7XG4gIGlmICh3a3QudHlwZSA9PT0gJ0dFT0dDUycpIHtcbiAgICBnZW9nY3MgPSB3a3Q7XG4gIH1cbiAgaWYgKGdlb2djcykge1xuICAgIC8vaWYod2t0LkdFT0dDUy5QUklNRU0mJndrdC5HRU9HQ1MuUFJJTUVNLmNvbnZlcnQpe1xuICAgIC8vICB3a3QuZnJvbV9ncmVlbndpY2g9d2t0LkdFT0dDUy5QUklNRU0uY29udmVydCpEMlI7XG4gICAgLy99XG4gICAgaWYgKGdlb2djcy5EQVRVTSkge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9IGdlb2djcy5EQVRVTS5uYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSBnZW9nY3MubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAod2t0LmRhdHVtQ29kZS5zbGljZSgwLCAyKSA9PT0gJ2RfJykge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9IHdrdC5kYXR1bUNvZGUuc2xpY2UoMik7XG4gICAgfVxuICAgIGlmICh3a3QuZGF0dW1Db2RlID09PSAnbmV3X3plYWxhbmRfZ2VvZGV0aWNfZGF0dW1fMTk0OScgfHwgd2t0LmRhdHVtQ29kZSA9PT0gJ25ld196ZWFsYW5kXzE5NDknKSB7XG4gICAgICB3a3QuZGF0dW1Db2RlID0gJ256Z2Q0OSc7XG4gICAgfVxuICAgIGlmICh3a3QuZGF0dW1Db2RlID09PSAnd2dzXzE5ODQnIHx8IHdrdC5kYXR1bUNvZGUgPT09ICd3b3JsZF9nZW9kZXRpY19zeXN0ZW1fMTk4NCcpIHtcbiAgICAgIGlmICh3a3QuUFJPSkVDVElPTiA9PT0gJ01lcmNhdG9yX0F1eGlsaWFyeV9TcGhlcmUnKSB7XG4gICAgICAgIHdrdC5zcGhlcmUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgd2t0LmRhdHVtQ29kZSA9ICd3Z3M4NCc7XG4gICAgfVxuICAgIGlmICh3a3QuZGF0dW1Db2RlLnNsaWNlKC02KSA9PT0gJ19mZXJybycpIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSB3a3QuZGF0dW1Db2RlLnNsaWNlKDAsIC0gNik7XG4gICAgfVxuICAgIGlmICh3a3QuZGF0dW1Db2RlLnNsaWNlKC04KSA9PT0gJ19qYWthcnRhJykge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9IHdrdC5kYXR1bUNvZGUuc2xpY2UoMCwgLSA4KTtcbiAgICB9XG4gICAgaWYgKH53a3QuZGF0dW1Db2RlLmluZGV4T2YoJ2JlbGdlJykpIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSAncm5iNzInO1xuICAgIH1cbiAgICBpZiAoZ2VvZ2NzLkRBVFVNICYmIGdlb2djcy5EQVRVTS5TUEhFUk9JRCkge1xuICAgICAgd2t0LmVsbHBzID0gZ2VvZ2NzLkRBVFVNLlNQSEVST0lELm5hbWUucmVwbGFjZSgnXzE5JywgJycpLnJlcGxhY2UoL1tDY11sYXJrZVxcXzE4LywgJ2NscmsnKTtcbiAgICAgIGlmICh3a3QuZWxscHMudG9Mb3dlckNhc2UoKS5zbGljZSgwLCAxMykgPT09ICdpbnRlcm5hdGlvbmFsJykge1xuICAgICAgICB3a3QuZWxscHMgPSAnaW50bCc7XG4gICAgICB9XG5cbiAgICAgIHdrdC5hID0gZ2VvZ2NzLkRBVFVNLlNQSEVST0lELmE7XG4gICAgICB3a3QucmYgPSBwYXJzZUZsb2F0KGdlb2djcy5EQVRVTS5TUEhFUk9JRC5yZiwgMTApO1xuICAgIH1cblxuICAgIGlmIChnZW9nY3MuREFUVU0gJiYgZ2VvZ2NzLkRBVFVNLlRPV0dTODQpIHtcbiAgICAgIHdrdC5kYXR1bV9wYXJhbXMgPSBnZW9nY3MuREFUVU0uVE9XR1M4NDtcbiAgICB9XG4gICAgaWYgKH53a3QuZGF0dW1Db2RlLmluZGV4T2YoJ29zZ2JfMTkzNicpKSB7XG4gICAgICB3a3QuZGF0dW1Db2RlID0gJ29zZ2IzNic7XG4gICAgfVxuICAgIGlmICh+d2t0LmRhdHVtQ29kZS5pbmRleE9mKCdvc25pXzE5NTInKSkge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9ICdvc25pNTInO1xuICAgIH1cbiAgICBpZiAofndrdC5kYXR1bUNvZGUuaW5kZXhPZigndG02NScpXG4gICAgICB8fCB+d2t0LmRhdHVtQ29kZS5pbmRleE9mKCdnZW9kZXRpY19kYXR1bV9vZl8xOTY1JykpIHtcbiAgICAgIHdrdC5kYXR1bUNvZGUgPSAnaXJlNjUnO1xuICAgIH1cbiAgICBpZiAod2t0LmRhdHVtQ29kZSA9PT0gJ2NoMTkwMysnKSB7XG4gICAgICB3a3QuZGF0dW1Db2RlID0gJ2NoMTkwMyc7XG4gICAgfVxuICAgIGlmICh+d2t0LmRhdHVtQ29kZS5pbmRleE9mKCdpc3JhZWwnKSkge1xuICAgICAgd2t0LmRhdHVtQ29kZSA9ICdpc3I5Myc7XG4gICAgfVxuICB9XG4gIGlmICh3a3QuYiAmJiAhaXNGaW5pdGUod2t0LmIpKSB7XG4gICAgd2t0LmIgPSB3a3QuYTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRvTWV0ZXIoaW5wdXQpIHtcbiAgICB2YXIgcmF0aW8gPSB3a3QudG9fbWV0ZXIgfHwgMTtcbiAgICByZXR1cm4gaW5wdXQgKiByYXRpbztcbiAgfVxuICB2YXIgcmVuYW1lciA9IGZ1bmN0aW9uKGEpIHtcbiAgICByZXR1cm4gcmVuYW1lKHdrdCwgYSk7XG4gIH07XG4gIHZhciBsaXN0ID0gW1xuICAgIFsnc3RhbmRhcmRfcGFyYWxsZWxfMScsICdTdGFuZGFyZF9QYXJhbGxlbF8xJ10sXG4gICAgWydzdGFuZGFyZF9wYXJhbGxlbF8yJywgJ1N0YW5kYXJkX1BhcmFsbGVsXzInXSxcbiAgICBbJ2ZhbHNlX2Vhc3RpbmcnLCAnRmFsc2VfRWFzdGluZyddLFxuICAgIFsnZmFsc2Vfbm9ydGhpbmcnLCAnRmFsc2VfTm9ydGhpbmcnXSxcbiAgICBbJ2NlbnRyYWxfbWVyaWRpYW4nLCAnQ2VudHJhbF9NZXJpZGlhbiddLFxuICAgIFsnbGF0aXR1ZGVfb2Zfb3JpZ2luJywgJ0xhdGl0dWRlX09mX09yaWdpbiddLFxuICAgIFsnbGF0aXR1ZGVfb2Zfb3JpZ2luJywgJ0NlbnRyYWxfUGFyYWxsZWwnXSxcbiAgICBbJ3NjYWxlX2ZhY3RvcicsICdTY2FsZV9GYWN0b3InXSxcbiAgICBbJ2swJywgJ3NjYWxlX2ZhY3RvciddLFxuICAgIFsnbGF0aXR1ZGVfb2ZfY2VudGVyJywgJ0xhdGl0dWRlX09mX0NlbnRlciddLFxuICAgIFsnbGF0aXR1ZGVfb2ZfY2VudGVyJywgJ0xhdGl0dWRlX29mX2NlbnRlciddLFxuICAgIFsnbGF0MCcsICdsYXRpdHVkZV9vZl9jZW50ZXInLCBkMnJdLFxuICAgIFsnbG9uZ2l0dWRlX29mX2NlbnRlcicsICdMb25naXR1ZGVfT2ZfQ2VudGVyJ10sXG4gICAgWydsb25naXR1ZGVfb2ZfY2VudGVyJywgJ0xvbmdpdHVkZV9vZl9jZW50ZXInXSxcbiAgICBbJ2xvbmdjJywgJ2xvbmdpdHVkZV9vZl9jZW50ZXInLCBkMnJdLFxuICAgIFsneDAnLCAnZmFsc2VfZWFzdGluZycsIHRvTWV0ZXJdLFxuICAgIFsneTAnLCAnZmFsc2Vfbm9ydGhpbmcnLCB0b01ldGVyXSxcbiAgICBbJ2xvbmcwJywgJ2NlbnRyYWxfbWVyaWRpYW4nLCBkMnJdLFxuICAgIFsnbGF0MCcsICdsYXRpdHVkZV9vZl9vcmlnaW4nLCBkMnJdLFxuICAgIFsnbGF0MCcsICdzdGFuZGFyZF9wYXJhbGxlbF8xJywgZDJyXSxcbiAgICBbJ2xhdDEnLCAnc3RhbmRhcmRfcGFyYWxsZWxfMScsIGQycl0sXG4gICAgWydsYXQyJywgJ3N0YW5kYXJkX3BhcmFsbGVsXzInLCBkMnJdLFxuICAgIFsnYXppbXV0aCcsICdBemltdXRoJ10sXG4gICAgWydhbHBoYScsICdhemltdXRoJywgZDJyXSxcbiAgICBbJ3Nyc0NvZGUnLCAnbmFtZSddXG4gIF07XG4gIGxpc3QuZm9yRWFjaChyZW5hbWVyKTtcbiAgaWYgKCF3a3QubG9uZzAgJiYgd2t0LmxvbmdjICYmICh3a3QucHJvak5hbWUgPT09ICdBbGJlcnNfQ29uaWNfRXF1YWxfQXJlYScgfHwgd2t0LnByb2pOYW1lID09PSAnTGFtYmVydF9BemltdXRoYWxfRXF1YWxfQXJlYScpKSB7XG4gICAgd2t0LmxvbmcwID0gd2t0LmxvbmdjO1xuICB9XG4gIGlmICghd2t0LmxhdF90cyAmJiB3a3QubGF0MSAmJiAod2t0LnByb2pOYW1lID09PSAnU3RlcmVvZ3JhcGhpY19Tb3V0aF9Qb2xlJyB8fCB3a3QucHJvak5hbWUgPT09ICdQb2xhciBTdGVyZW9ncmFwaGljICh2YXJpYW50IEIpJykpIHtcbiAgICB3a3QubGF0MCA9IGQycih3a3QubGF0MSA+IDAgPyA5MCA6IC05MCk7XG4gICAgd2t0LmxhdF90cyA9IHdrdC5sYXQxO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih3a3QpIHtcbiAgdmFyIGxpc3AgPSBwYXJzZXIod2t0KTtcbiAgdmFyIHR5cGUgPSBsaXNwLnNoaWZ0KCk7XG4gIHZhciBuYW1lID0gbGlzcC5zaGlmdCgpO1xuICBsaXNwLnVuc2hpZnQoWyduYW1lJywgbmFtZV0pO1xuICBsaXNwLnVuc2hpZnQoWyd0eXBlJywgdHlwZV0pO1xuICB2YXIgb2JqID0ge307XG4gIHNFeHByKGxpc3AsIG9iaik7XG4gIGNsZWFuV0tUKG9iaik7XG4gIHJldHVybiBvYmo7XG59XG4iLCJpbXBvcnQgZ2xvYmFscyBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgcGFyc2VQcm9qIGZyb20gJy4vcHJvalN0cmluZyc7XG5pbXBvcnQgd2t0IGZyb20gJ3drdC1wYXJzZXInO1xuXG5mdW5jdGlvbiBkZWZzKG5hbWUpIHtcbiAgLypnbG9iYWwgY29uc29sZSovXG4gIHZhciB0aGF0ID0gdGhpcztcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICB2YXIgZGVmID0gYXJndW1lbnRzWzFdO1xuICAgIGlmICh0eXBlb2YgZGVmID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKGRlZi5jaGFyQXQoMCkgPT09ICcrJykge1xuICAgICAgICBkZWZzW25hbWVdID0gcGFyc2VQcm9qKGFyZ3VtZW50c1sxXSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZGVmc1tuYW1lXSA9IHdrdChhcmd1bWVudHNbMV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWZzW25hbWVdID0gZGVmO1xuICAgIH1cbiAgfVxuICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgIHJldHVybiBuYW1lLm1hcChmdW5jdGlvbih2KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgICAgZGVmcy5hcHBseSh0aGF0LCB2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWZzKHYpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAobmFtZSBpbiBkZWZzKSB7XG4gICAgICAgIHJldHVybiBkZWZzW25hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICgnRVBTRycgaW4gbmFtZSkge1xuICAgICAgZGVmc1snRVBTRzonICsgbmFtZS5FUFNHXSA9IG5hbWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKCdFU1JJJyBpbiBuYW1lKSB7XG4gICAgICBkZWZzWydFU1JJOicgKyBuYW1lLkVTUkldID0gbmFtZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoJ0lBVTIwMDAnIGluIG5hbWUpIHtcbiAgICAgIGRlZnNbJ0lBVTIwMDA6JyArIG5hbWUuSUFVMjAwMF0gPSBuYW1lO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuXG59XG5nbG9iYWxzKGRlZnMpO1xuZXhwb3J0IGRlZmF1bHQgZGVmcztcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlZnMpIHtcbiAgZGVmcygnRVBTRzo0MzI2JywgXCIrdGl0bGU9V0dTIDg0IChsb25nL2xhdCkgK3Byb2o9bG9uZ2xhdCArZWxscHM9V0dTODQgK2RhdHVtPVdHUzg0ICt1bml0cz1kZWdyZWVzXCIpO1xuICBkZWZzKCdFUFNHOjQyNjknLCBcIit0aXRsZT1OQUQ4MyAobG9uZy9sYXQpICtwcm9qPWxvbmdsYXQgK2E9NjM3ODEzNy4wICtiPTYzNTY3NTIuMzE0MTQwMzYgK2VsbHBzPUdSUzgwICtkYXR1bT1OQUQ4MyArdW5pdHM9ZGVncmVlc1wiKTtcbiAgZGVmcygnRVBTRzozODU3JywgXCIrdGl0bGU9V0dTIDg0IC8gUHNldWRvLU1lcmNhdG9yICtwcm9qPW1lcmMgK2E9NjM3ODEzNyArYj02Mzc4MTM3ICtsYXRfdHM9MC4wICtsb25fMD0wLjAgK3hfMD0wLjAgK3lfMD0wICtrPTEuMCArdW5pdHM9bSArbmFkZ3JpZHM9QG51bGwgK25vX2RlZnNcIik7XG5cbiAgZGVmcy5XR1M4NCA9IGRlZnNbJ0VQU0c6NDMyNiddO1xuICBkZWZzWydFUFNHOjM3ODUnXSA9IGRlZnNbJ0VQU0c6Mzg1NyddOyAvLyBtYWludGFpbiBiYWNrd2FyZCBjb21wYXQsIG9mZmljaWFsIGNvZGUgaXMgMzg1N1xuICBkZWZzLkdPT0dMRSA9IGRlZnNbJ0VQU0c6Mzg1NyddO1xuICBkZWZzWydFUFNHOjkwMDkxMyddID0gZGVmc1snRVBTRzozODU3J107XG4gIGRlZnNbJ0VQU0c6MTAyMTEzJ10gPSBkZWZzWydFUFNHOjM4NTcnXTtcbn1cbiIsImltcG9ydCBkZWZzIGZyb20gJy4vZGVmcyc7XG5pbXBvcnQgd2t0IGZyb20gJ3drdC1wYXJzZXInO1xuaW1wb3J0IHByb2pTdHIgZnJvbSAnLi9wcm9qU3RyaW5nJztcbmltcG9ydCBtYXRjaCBmcm9tICcuL21hdGNoJztcbmZ1bmN0aW9uIHRlc3RPYmooY29kZSl7XG4gIHJldHVybiB0eXBlb2YgY29kZSA9PT0gJ3N0cmluZyc7XG59XG5mdW5jdGlvbiB0ZXN0RGVmKGNvZGUpe1xuICByZXR1cm4gY29kZSBpbiBkZWZzO1xufVxuIHZhciBjb2RlV29yZHMgPSBbJ1BST0pFQ1RFRENSUycsICdQUk9KQ1JTJywgJ0dFT0dDUycsJ0dFT0NDUycsJ1BST0pDUycsJ0xPQ0FMX0NTJywgJ0dFT0RDUlMnLCAnR0VPREVUSUNDUlMnLCAnR0VPREVUSUNEQVRVTScsICdFTkdDUlMnLCAnRU5HSU5FRVJJTkdDUlMnXTtcbmZ1bmN0aW9uIHRlc3RXS1QoY29kZSl7XG4gIHJldHVybiBjb2RlV29yZHMuc29tZShmdW5jdGlvbiAod29yZCkge1xuICAgIHJldHVybiBjb2RlLmluZGV4T2Yod29yZCkgPiAtMTtcbiAgfSk7XG59XG52YXIgY29kZXMgPSBbJzM4NTcnLCAnOTAwOTEzJywgJzM3ODUnLCAnMTAyMTEzJ107XG5mdW5jdGlvbiBjaGVja01lcmNhdG9yKGl0ZW0pIHtcbiAgdmFyIGF1dGggPSBtYXRjaChpdGVtLCAnYXV0aG9yaXR5Jyk7XG4gIGlmICghYXV0aCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgY29kZSA9IG1hdGNoKGF1dGgsICdlcHNnJyk7XG4gIHJldHVybiBjb2RlICYmIGNvZGVzLmluZGV4T2YoY29kZSkgPiAtMTtcbn1cbmZ1bmN0aW9uIGNoZWNrUHJvalN0cihpdGVtKSB7XG4gIHZhciBleHQgPSBtYXRjaChpdGVtLCAnZXh0ZW5zaW9uJyk7XG4gIGlmICghZXh0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHJldHVybiBtYXRjaChleHQsICdwcm9qNCcpO1xufVxuZnVuY3Rpb24gdGVzdFByb2ooY29kZSl7XG4gIHJldHVybiBjb2RlWzBdID09PSAnKyc7XG59XG5mdW5jdGlvbiBwYXJzZShjb2RlKXtcbiAgaWYgKHRlc3RPYmooY29kZSkpIHtcbiAgICAvL2NoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgV0tUIHN0cmluZ1xuICAgIGlmICh0ZXN0RGVmKGNvZGUpKSB7XG4gICAgICByZXR1cm4gZGVmc1tjb2RlXTtcbiAgICB9XG4gICAgaWYgKHRlc3RXS1QoY29kZSkpIHtcbiAgICAgIHZhciBvdXQgPSB3a3QoY29kZSk7XG4gICAgICAvLyB0ZXN0IG9mIHNwZXRpYWwgY2FzZSwgZHVlIHRvIHRoaXMgYmVpbmcgYSB2ZXJ5IGNvbW1vbiBhbmQgb2Z0ZW4gbWFsZm9ybWVkXG4gICAgICBpZiAoY2hlY2tNZXJjYXRvcihvdXQpKSB7XG4gICAgICAgIHJldHVybiBkZWZzWydFUFNHOjM4NTcnXTtcbiAgICAgIH1cbiAgICAgIHZhciBtYXliZVByb2pTdHIgPSBjaGVja1Byb2pTdHIob3V0KTtcbiAgICAgIGlmIChtYXliZVByb2pTdHIpIHtcbiAgICAgICAgcmV0dXJuIHByb2pTdHIobWF5YmVQcm9qU3RyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGlmICh0ZXN0UHJvaihjb2RlKSkge1xuICAgICAgcmV0dXJuIHByb2pTdHIoY29kZSk7XG4gICAgfVxuICB9ZWxzZXtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBwYXJzZTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbiB8fCB7fTtcbiAgdmFyIHZhbHVlLCBwcm9wZXJ0eTtcbiAgaWYgKCFzb3VyY2UpIHtcbiAgICByZXR1cm4gZGVzdGluYXRpb247XG4gIH1cbiAgZm9yIChwcm9wZXJ0eSBpbiBzb3VyY2UpIHtcbiAgICB2YWx1ZSA9IHNvdXJjZVtwcm9wZXJ0eV07XG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlc3RpbmF0aW9uW3Byb3BlcnR5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVzdGluYXRpb247XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlY2NlbnQsIHNpbnBoaSwgY29zcGhpKSB7XG4gIHZhciBjb24gPSBlY2NlbnQgKiBzaW5waGk7XG4gIHJldHVybiBjb3NwaGkgLyAoTWF0aC5zcXJ0KDEgLSBjb24gKiBjb24pKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4PDAgPyAtMSA6IDE7XG59IiwiXG5pbXBvcnQge1RXT19QSSwgU1BJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcbmltcG9ydCBzaWduIGZyb20gJy4vc2lnbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIChNYXRoLmFicyh4KSA8PSBTUEkpID8geCA6ICh4IC0gKHNpZ24oeCkgKiBUV09fUEkpKTtcbn1cbiIsImltcG9ydCB7SEFMRl9QSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGVjY2VudCwgcGhpLCBzaW5waGkpIHtcbiAgdmFyIGNvbiA9IGVjY2VudCAqIHNpbnBoaTtcbiAgdmFyIGNvbSA9IDAuNSAqIGVjY2VudDtcbiAgY29uID0gTWF0aC5wb3coKCgxIC0gY29uKSAvICgxICsgY29uKSksIGNvbSk7XG4gIHJldHVybiAoTWF0aC50YW4oMC41ICogKEhBTEZfUEkgLSBwaGkpKSAvIGNvbik7XG59XG4iLCJpbXBvcnQge0hBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlY2NlbnQsIHRzKSB7XG4gIHZhciBlY2NudGggPSAwLjUgKiBlY2NlbnQ7XG4gIHZhciBjb24sIGRwaGk7XG4gIHZhciBwaGkgPSBIQUxGX1BJIC0gMiAqIE1hdGguYXRhbih0cyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IDE1OyBpKyspIHtcbiAgICBjb24gPSBlY2NlbnQgKiBNYXRoLnNpbihwaGkpO1xuICAgIGRwaGkgPSBIQUxGX1BJIC0gMiAqIE1hdGguYXRhbih0cyAqIChNYXRoLnBvdygoKDEgLSBjb24pIC8gKDEgKyBjb24pKSwgZWNjbnRoKSkpIC0gcGhpO1xuICAgIHBoaSArPSBkcGhpO1xuICAgIGlmIChNYXRoLmFicyhkcGhpKSA8PSAwLjAwMDAwMDAwMDEpIHtcbiAgICAgIHJldHVybiBwaGk7XG4gICAgfVxuICB9XG4gIC8vY29uc29sZS5sb2coXCJwaGkyeiBoYXMgTm9Db252ZXJnZW5jZVwiKTtcbiAgcmV0dXJuIC05OTk5O1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIC8vbm8tb3AgZm9yIGxvbmdsYXRcbn1cblxuZnVuY3Rpb24gaWRlbnRpdHkocHQpIHtcbiAgcmV0dXJuIHB0O1xufVxuZXhwb3J0IHtpZGVudGl0eSBhcyBmb3J3YXJkfTtcbmV4cG9ydCB7aWRlbnRpdHkgYXMgaW52ZXJzZX07XG5leHBvcnQgdmFyIG5hbWVzID0gW1wibG9uZ2xhdFwiLCBcImlkZW50aXR5XCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBpZGVudGl0eSxcbiAgaW52ZXJzZTogaWRlbnRpdHksXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBtZXJjIGZyb20gXCIuL3Byb2plY3Rpb25zL21lcmNcIjtcbmltcG9ydCBsb25nbGF0IGZyb20gXCIuL3Byb2plY3Rpb25zL2xvbmdsYXRcIjtcbnZhciBwcm9qcyA9IFttZXJjLCBsb25nbGF0XTtcbnZhciBuYW1lcyA9IHt9O1xudmFyIHByb2pTdG9yZSA9IFtdO1xuXG5mdW5jdGlvbiBhZGQocHJvaiwgaSkge1xuICB2YXIgbGVuID0gcHJvalN0b3JlLmxlbmd0aDtcbiAgaWYgKCFwcm9qLm5hbWVzKSB7XG4gICAgY29uc29sZS5sb2coaSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcHJvalN0b3JlW2xlbl0gPSBwcm9qO1xuICBwcm9qLm5hbWVzLmZvckVhY2goZnVuY3Rpb24obikge1xuICAgIG5hbWVzW24udG9Mb3dlckNhc2UoKV0gPSBsZW47XG4gIH0pO1xuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IHthZGR9O1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgaWYgKCFuYW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBuID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodHlwZW9mIG5hbWVzW25dICE9PSAndW5kZWZpbmVkJyAmJiBwcm9qU3RvcmVbbmFtZXNbbl1dKSB7XG4gICAgcmV0dXJuIHByb2pTdG9yZVtuYW1lc1tuXV07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0KCkge1xuICBwcm9qcy5mb3JFYWNoKGFkZCk7XG59XG5leHBvcnQgZGVmYXVsdCB7XG4gIHN0YXJ0OiBzdGFydCxcbiAgYWRkOiBhZGQsXG4gIGdldDogZ2V0XG59O1xuIiwiaW1wb3J0IG1zZm56IGZyb20gJy4uL2NvbW1vbi9tc2Zueic7XG5cbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmltcG9ydCB0c2ZueiBmcm9tICcuLi9jb21tb24vdHNmbnonO1xuaW1wb3J0IHBoaTJ6IGZyb20gJy4uL2NvbW1vbi9waGkyeic7XG5pbXBvcnQge0ZPUlRQSSwgUjJELCBFUFNMTiwgSEFMRl9QSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdmFyIGNvbiA9IHRoaXMuYiAvIHRoaXMuYTtcbiAgdGhpcy5lcyA9IDEgLSBjb24gKiBjb247XG4gIGlmKCEoJ3gwJyBpbiB0aGlzKSl7XG4gICAgdGhpcy54MCA9IDA7XG4gIH1cbiAgaWYoISgneTAnIGluIHRoaXMpKXtcbiAgICB0aGlzLnkwID0gMDtcbiAgfVxuICB0aGlzLmUgPSBNYXRoLnNxcnQodGhpcy5lcyk7XG4gIGlmICh0aGlzLmxhdF90cykge1xuICAgIGlmICh0aGlzLnNwaGVyZSkge1xuICAgICAgdGhpcy5rMCA9IE1hdGguY29zKHRoaXMubGF0X3RzKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmswID0gbXNmbnoodGhpcy5lLCBNYXRoLnNpbih0aGlzLmxhdF90cyksIE1hdGguY29zKHRoaXMubGF0X3RzKSk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIGlmICghdGhpcy5rMCkge1xuICAgICAgaWYgKHRoaXMuaykge1xuICAgICAgICB0aGlzLmswID0gdGhpcy5rO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMuazAgPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiBNZXJjYXRvciBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIC8vIGNvbnZlcnQgdG8gcmFkaWFuc1xuICBpZiAobGF0ICogUjJEID4gOTAgJiYgbGF0ICogUjJEIDwgLTkwICYmIGxvbiAqIFIyRCA+IDE4MCAmJiBsb24gKiBSMkQgPCAtMTgwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgeCwgeTtcbiAgaWYgKE1hdGguYWJzKE1hdGguYWJzKGxhdCkgLSBIQUxGX1BJKSA8PSBFUFNMTikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGVsc2Uge1xuICAgIGlmICh0aGlzLnNwaGVyZSkge1xuICAgICAgeCA9IHRoaXMueDAgKyB0aGlzLmEgKiB0aGlzLmswICogYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgICAgIHkgPSB0aGlzLnkwICsgdGhpcy5hICogdGhpcy5rMCAqIE1hdGgubG9nKE1hdGgudGFuKEZPUlRQSSArIDAuNSAqIGxhdCkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBzaW5waGkgPSBNYXRoLnNpbihsYXQpO1xuICAgICAgdmFyIHRzID0gdHNmbnoodGhpcy5lLCBsYXQsIHNpbnBoaSk7XG4gICAgICB4ID0gdGhpcy54MCArIHRoaXMuYSAqIHRoaXMuazAgKiBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICAgICAgeSA9IHRoaXMueTAgLSB0aGlzLmEgKiB0aGlzLmswICogTWF0aC5sb2codHMpO1xuICAgIH1cbiAgICBwLnggPSB4O1xuICAgIHAueSA9IHk7XG4gICAgcmV0dXJuIHA7XG4gIH1cbn1cblxuLyogTWVyY2F0b3IgaW52ZXJzZSBlcXVhdGlvbnMtLW1hcHBpbmcgeCx5IHRvIGxhdC9sb25nXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcblxuICB2YXIgeCA9IHAueCAtIHRoaXMueDA7XG4gIHZhciB5ID0gcC55IC0gdGhpcy55MDtcbiAgdmFyIGxvbiwgbGF0O1xuXG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIGxhdCA9IEhBTEZfUEkgLSAyICogTWF0aC5hdGFuKE1hdGguZXhwKC15IC8gKHRoaXMuYSAqIHRoaXMuazApKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdmFyIHRzID0gTWF0aC5leHAoLXkgLyAodGhpcy5hICogdGhpcy5rMCkpO1xuICAgIGxhdCA9IHBoaTJ6KHRoaXMuZSwgdHMpO1xuICAgIGlmIChsYXQgPT09IC05OTk5KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgeCAvICh0aGlzLmEgKiB0aGlzLmswKSk7XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiTWVyY2F0b3JcIiwgXCJQb3B1bGFyIFZpc3VhbGlzYXRpb24gUHNldWRvIE1lcmNhdG9yXCIsIFwiTWVyY2F0b3JfMVNQXCIsIFwiTWVyY2F0b3JfQXV4aWxpYXJ5X1NwaGVyZVwiLCBcIm1lcmNcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsInZhciBleHBvcnRzID0ge307XG5leHBvcnQge2V4cG9ydHMgYXMgZGVmYXVsdH07XG5leHBvcnRzLk1FUklUID0ge1xuICBhOiA2Mzc4MTM3LjAsXG4gIHJmOiAyOTguMjU3LFxuICBlbGxpcHNlTmFtZTogXCJNRVJJVCAxOTgzXCJcbn07XG5cbmV4cG9ydHMuU0dTODUgPSB7XG4gIGE6IDYzNzgxMzYuMCxcbiAgcmY6IDI5OC4yNTcsXG4gIGVsbGlwc2VOYW1lOiBcIlNvdmlldCBHZW9kZXRpYyBTeXN0ZW0gODVcIlxufTtcblxuZXhwb3J0cy5HUlM4MCA9IHtcbiAgYTogNjM3ODEzNy4wLFxuICByZjogMjk4LjI1NzIyMjEwMSxcbiAgZWxsaXBzZU5hbWU6IFwiR1JTIDE5ODAoSVVHRywgMTk4MClcIlxufTtcblxuZXhwb3J0cy5JQVU3NiA9IHtcbiAgYTogNjM3ODE0MC4wLFxuICByZjogMjk4LjI1NyxcbiAgZWxsaXBzZU5hbWU6IFwiSUFVIDE5NzZcIlxufTtcblxuZXhwb3J0cy5haXJ5ID0ge1xuICBhOiA2Mzc3NTYzLjM5NixcbiAgYjogNjM1NjI1Ni45MTAsXG4gIGVsbGlwc2VOYW1lOiBcIkFpcnkgMTgzMFwiXG59O1xuXG5leHBvcnRzLkFQTDQgPSB7XG4gIGE6IDYzNzgxMzcsXG4gIHJmOiAyOTguMjUsXG4gIGVsbGlwc2VOYW1lOiBcIkFwcGwuIFBoeXNpY3MuIDE5NjVcIlxufTtcblxuZXhwb3J0cy5OV0w5RCA9IHtcbiAgYTogNjM3ODE0NS4wLFxuICByZjogMjk4LjI1LFxuICBlbGxpcHNlTmFtZTogXCJOYXZhbCBXZWFwb25zIExhYi4sIDE5NjVcIlxufTtcblxuZXhwb3J0cy5tb2RfYWlyeSA9IHtcbiAgYTogNjM3NzM0MC4xODksXG4gIGI6IDYzNTYwMzQuNDQ2LFxuICBlbGxpcHNlTmFtZTogXCJNb2RpZmllZCBBaXJ5XCJcbn07XG5cbmV4cG9ydHMuYW5kcmFlID0ge1xuICBhOiA2Mzc3MTA0LjQzLFxuICByZjogMzAwLjAsXG4gIGVsbGlwc2VOYW1lOiBcIkFuZHJhZSAxODc2IChEZW4uLCBJY2xuZC4pXCJcbn07XG5cbmV4cG9ydHMuYXVzdF9TQSA9IHtcbiAgYTogNjM3ODE2MC4wLFxuICByZjogMjk4LjI1LFxuICBlbGxpcHNlTmFtZTogXCJBdXN0cmFsaWFuIE5hdGwgJiBTLiBBbWVyLiAxOTY5XCJcbn07XG5cbmV4cG9ydHMuR1JTNjcgPSB7XG4gIGE6IDYzNzgxNjAuMCxcbiAgcmY6IDI5OC4yNDcxNjc0MjcwLFxuICBlbGxpcHNlTmFtZTogXCJHUlMgNjcoSVVHRyAxOTY3KVwiXG59O1xuXG5leHBvcnRzLmJlc3NlbCA9IHtcbiAgYTogNjM3NzM5Ny4xNTUsXG4gIHJmOiAyOTkuMTUyODEyOCxcbiAgZWxsaXBzZU5hbWU6IFwiQmVzc2VsIDE4NDFcIlxufTtcblxuZXhwb3J0cy5iZXNzX25hbSA9IHtcbiAgYTogNjM3NzQ4My44NjUsXG4gIHJmOiAyOTkuMTUyODEyOCxcbiAgZWxsaXBzZU5hbWU6IFwiQmVzc2VsIDE4NDEgKE5hbWliaWEpXCJcbn07XG5cbmV4cG9ydHMuY2xyazY2ID0ge1xuICBhOiA2Mzc4MjA2LjQsXG4gIGI6IDYzNTY1ODMuOCxcbiAgZWxsaXBzZU5hbWU6IFwiQ2xhcmtlIDE4NjZcIlxufTtcblxuZXhwb3J0cy5jbHJrODAgPSB7XG4gIGE6IDYzNzgyNDkuMTQ1LFxuICByZjogMjkzLjQ2NjMsXG4gIGVsbGlwc2VOYW1lOiBcIkNsYXJrZSAxODgwIG1vZC5cIlxufTtcblxuZXhwb3J0cy5jbHJrNTggPSB7XG4gIGE6IDYzNzgyOTMuNjQ1MjA4NzU5LFxuICByZjogMjk0LjI2MDY3NjM2OTI2NTQsXG4gIGVsbGlwc2VOYW1lOiBcIkNsYXJrZSAxODU4XCJcbn07XG5cbmV4cG9ydHMuQ1BNID0ge1xuICBhOiA2Mzc1NzM4LjcsXG4gIHJmOiAzMzQuMjksXG4gIGVsbGlwc2VOYW1lOiBcIkNvbW0uIGRlcyBQb2lkcyBldCBNZXN1cmVzIDE3OTlcIlxufTtcblxuZXhwb3J0cy5kZWxtYnIgPSB7XG4gIGE6IDYzNzY0MjguMCxcbiAgcmY6IDMxMS41LFxuICBlbGxpcHNlTmFtZTogXCJEZWxhbWJyZSAxODEwIChCZWxnaXVtKVwiXG59O1xuXG5leHBvcnRzLmVuZ2VsaXMgPSB7XG4gIGE6IDYzNzgxMzYuMDUsXG4gIHJmOiAyOTguMjU2NixcbiAgZWxsaXBzZU5hbWU6IFwiRW5nZWxpcyAxOTg1XCJcbn07XG5cbmV4cG9ydHMuZXZyc3QzMCA9IHtcbiAgYTogNjM3NzI3Ni4zNDUsXG4gIHJmOiAzMDAuODAxNyxcbiAgZWxsaXBzZU5hbWU6IFwiRXZlcmVzdCAxODMwXCJcbn07XG5cbmV4cG9ydHMuZXZyc3Q0OCA9IHtcbiAgYTogNjM3NzMwNC4wNjMsXG4gIHJmOiAzMDAuODAxNyxcbiAgZWxsaXBzZU5hbWU6IFwiRXZlcmVzdCAxOTQ4XCJcbn07XG5cbmV4cG9ydHMuZXZyc3Q1NiA9IHtcbiAgYTogNjM3NzMwMS4yNDMsXG4gIHJmOiAzMDAuODAxNyxcbiAgZWxsaXBzZU5hbWU6IFwiRXZlcmVzdCAxOTU2XCJcbn07XG5cbmV4cG9ydHMuZXZyc3Q2OSA9IHtcbiAgYTogNjM3NzI5NS42NjQsXG4gIHJmOiAzMDAuODAxNyxcbiAgZWxsaXBzZU5hbWU6IFwiRXZlcmVzdCAxOTY5XCJcbn07XG5cbmV4cG9ydHMuZXZyc3RTUyA9IHtcbiAgYTogNjM3NzI5OC41NTYsXG4gIHJmOiAzMDAuODAxNyxcbiAgZWxsaXBzZU5hbWU6IFwiRXZlcmVzdCAoU2FiYWggJiBTYXJhd2FrKVwiXG59O1xuXG5leHBvcnRzLmZzY2hyNjAgPSB7XG4gIGE6IDYzNzgxNjYuMCxcbiAgcmY6IDI5OC4zLFxuICBlbGxpcHNlTmFtZTogXCJGaXNjaGVyIChNZXJjdXJ5IERhdHVtKSAxOTYwXCJcbn07XG5cbmV4cG9ydHMuZnNjaHI2MG0gPSB7XG4gIGE6IDYzNzgxNTUuMCxcbiAgcmY6IDI5OC4zLFxuICBlbGxpcHNlTmFtZTogXCJGaXNjaGVyIDE5NjBcIlxufTtcblxuZXhwb3J0cy5mc2NocjY4ID0ge1xuICBhOiA2Mzc4MTUwLjAsXG4gIHJmOiAyOTguMyxcbiAgZWxsaXBzZU5hbWU6IFwiRmlzY2hlciAxOTY4XCJcbn07XG5cbmV4cG9ydHMuaGVsbWVydCA9IHtcbiAgYTogNjM3ODIwMC4wLFxuICByZjogMjk4LjMsXG4gIGVsbGlwc2VOYW1lOiBcIkhlbG1lcnQgMTkwNlwiXG59O1xuXG5leHBvcnRzLmhvdWdoID0ge1xuICBhOiA2Mzc4MjcwLjAsXG4gIHJmOiAyOTcuMCxcbiAgZWxsaXBzZU5hbWU6IFwiSG91Z2hcIlxufTtcblxuZXhwb3J0cy5pbnRsID0ge1xuICBhOiA2Mzc4Mzg4LjAsXG4gIHJmOiAyOTcuMCxcbiAgZWxsaXBzZU5hbWU6IFwiSW50ZXJuYXRpb25hbCAxOTA5IChIYXlmb3JkKVwiXG59O1xuXG5leHBvcnRzLmthdWxhID0ge1xuICBhOiA2Mzc4MTYzLjAsXG4gIHJmOiAyOTguMjQsXG4gIGVsbGlwc2VOYW1lOiBcIkthdWxhIDE5NjFcIlxufTtcblxuZXhwb3J0cy5sZXJjaCA9IHtcbiAgYTogNjM3ODEzOS4wLFxuICByZjogMjk4LjI1NyxcbiAgZWxsaXBzZU5hbWU6IFwiTGVyY2ggMTk3OVwiXG59O1xuXG5leHBvcnRzLm1wcnRzID0ge1xuICBhOiA2Mzk3MzAwLjAsXG4gIHJmOiAxOTEuMCxcbiAgZWxsaXBzZU5hbWU6IFwiTWF1cGVydGl1cyAxNzM4XCJcbn07XG5cbmV4cG9ydHMubmV3X2ludGwgPSB7XG4gIGE6IDYzNzgxNTcuNSxcbiAgYjogNjM1Njc3Mi4yLFxuICBlbGxpcHNlTmFtZTogXCJOZXcgSW50ZXJuYXRpb25hbCAxOTY3XCJcbn07XG5cbmV4cG9ydHMucGxlc3NpcyA9IHtcbiAgYTogNjM3NjUyMy4wLFxuICByZjogNjM1NTg2My4wLFxuICBlbGxpcHNlTmFtZTogXCJQbGVzc2lzIDE4MTcgKEZyYW5jZSlcIlxufTtcblxuZXhwb3J0cy5rcmFzcyA9IHtcbiAgYTogNjM3ODI0NS4wLFxuICByZjogMjk4LjMsXG4gIGVsbGlwc2VOYW1lOiBcIktyYXNzb3Zza3ksIDE5NDJcIlxufTtcblxuZXhwb3J0cy5TRWFzaWEgPSB7XG4gIGE6IDYzNzgxNTUuMCxcbiAgYjogNjM1Njc3My4zMjA1LFxuICBlbGxpcHNlTmFtZTogXCJTb3V0aGVhc3QgQXNpYVwiXG59O1xuXG5leHBvcnRzLndhbGJlY2sgPSB7XG4gIGE6IDYzNzY4OTYuMCxcbiAgYjogNjM1NTgzNC44NDY3LFxuICBlbGxpcHNlTmFtZTogXCJXYWxiZWNrXCJcbn07XG5cbmV4cG9ydHMuV0dTNjAgPSB7XG4gIGE6IDYzNzgxNjUuMCxcbiAgcmY6IDI5OC4zLFxuICBlbGxpcHNlTmFtZTogXCJXR1MgNjBcIlxufTtcblxuZXhwb3J0cy5XR1M2NiA9IHtcbiAgYTogNjM3ODE0NS4wLFxuICByZjogMjk4LjI1LFxuICBlbGxpcHNlTmFtZTogXCJXR1MgNjZcIlxufTtcblxuZXhwb3J0cy5XR1M3ID0ge1xuICBhOiA2Mzc4MTM1LjAsXG4gIHJmOiAyOTguMjYsXG4gIGVsbGlwc2VOYW1lOiBcIldHUyA3MlwiXG59O1xuXG5leHBvcnQgdmFyIFdHUzg0ID0gZXhwb3J0cy5XR1M4NCA9IHtcbiAgYTogNjM3ODEzNy4wLFxuICByZjogMjk4LjI1NzIyMzU2MyxcbiAgZWxsaXBzZU5hbWU6IFwiV0dTIDg0XCJcbn07XG5cbmV4cG9ydHMuc3BoZXJlID0ge1xuICBhOiA2MzcwOTk3LjAsXG4gIGI6IDYzNzA5OTcuMCxcbiAgZWxsaXBzZU5hbWU6IFwiTm9ybWFsIFNwaGVyZSAocj02MzcwOTk3KVwiXG59O1xuIiwidmFyIGV4cG9ydHMgPSB7fTtcbmV4cG9ydCB7ZXhwb3J0cyBhcyBkZWZhdWx0fTtcbmV4cG9ydHMud2dzODQgPSB7XG4gIHRvd2dzODQ6IFwiMCwwLDBcIixcbiAgZWxsaXBzZTogXCJXR1M4NFwiLFxuICBkYXR1bU5hbWU6IFwiV0dTODRcIlxufTtcblxuZXhwb3J0cy5jaDE5MDMgPSB7XG4gIHRvd2dzODQ6IFwiNjc0LjM3NCwxNS4wNTYsNDA1LjM0NlwiLFxuICBlbGxpcHNlOiBcImJlc3NlbFwiLFxuICBkYXR1bU5hbWU6IFwic3dpc3NcIlxufTtcblxuZXhwb3J0cy5nZ3JzODcgPSB7XG4gIHRvd2dzODQ6IFwiLTE5OS44Nyw3NC43OSwyNDYuNjJcIixcbiAgZWxsaXBzZTogXCJHUlM4MFwiLFxuICBkYXR1bU5hbWU6IFwiR3JlZWtfR2VvZGV0aWNfUmVmZXJlbmNlX1N5c3RlbV8xOTg3XCJcbn07XG5cbmV4cG9ydHMubmFkODMgPSB7XG4gIHRvd2dzODQ6IFwiMCwwLDBcIixcbiAgZWxsaXBzZTogXCJHUlM4MFwiLFxuICBkYXR1bU5hbWU6IFwiTm9ydGhfQW1lcmljYW5fRGF0dW1fMTk4M1wiXG59O1xuXG5leHBvcnRzLm5hZDI3ID0ge1xuICBuYWRncmlkczogXCJAY29udXMsQGFsYXNrYSxAbnR2Ml8wLmdzYixAbnR2MV9jYW4uZGF0XCIsXG4gIGVsbGlwc2U6IFwiY2xyazY2XCIsXG4gIGRhdHVtTmFtZTogXCJOb3J0aF9BbWVyaWNhbl9EYXR1bV8xOTI3XCJcbn07XG5cbmV4cG9ydHMucG90c2RhbSA9IHtcbiAgdG93Z3M4NDogXCI2MDYuMCwyMy4wLDQxMy4wXCIsXG4gIGVsbGlwc2U6IFwiYmVzc2VsXCIsXG4gIGRhdHVtTmFtZTogXCJQb3RzZGFtIFJhdWVuYmVyZyAxOTUwIERIRE5cIlxufTtcblxuZXhwb3J0cy5jYXJ0aGFnZSA9IHtcbiAgdG93Z3M4NDogXCItMjYzLjAsNi4wLDQzMS4wXCIsXG4gIGVsbGlwc2U6IFwiY2xhcms4MFwiLFxuICBkYXR1bU5hbWU6IFwiQ2FydGhhZ2UgMTkzNCBUdW5pc2lhXCJcbn07XG5cbmV4cG9ydHMuaGVybWFubnNrb2dlbCA9IHtcbiAgdG93Z3M4NDogXCI2NTMuMCwtMjEyLjAsNDQ5LjBcIixcbiAgZWxsaXBzZTogXCJiZXNzZWxcIixcbiAgZGF0dW1OYW1lOiBcIkhlcm1hbm5za29nZWxcIlxufTtcblxuZXhwb3J0cy5vc25pNTIgPSB7XG4gIHRvd2dzODQ6IFwiNDgyLjUzMCwtMTMwLjU5Niw1NjQuNTU3LC0xLjA0MiwtMC4yMTQsLTAuNjMxLDguMTVcIixcbiAgZWxsaXBzZTogXCJhaXJ5XCIsXG4gIGRhdHVtTmFtZTogXCJJcmlzaCBOYXRpb25hbFwiXG59O1xuXG5leHBvcnRzLmlyZTY1ID0ge1xuICB0b3dnczg0OiBcIjQ4Mi41MzAsLTEzMC41OTYsNTY0LjU1NywtMS4wNDIsLTAuMjE0LC0wLjYzMSw4LjE1XCIsXG4gIGVsbGlwc2U6IFwibW9kX2FpcnlcIixcbiAgZGF0dW1OYW1lOiBcIklyZWxhbmQgMTk2NVwiXG59O1xuXG5leHBvcnRzLnJhc3NhZGlyYW4gPSB7XG4gIHRvd2dzODQ6IFwiLTEzMy42MywtMTU3LjUsLTE1OC42MlwiLFxuICBlbGxpcHNlOiBcImludGxcIixcbiAgZGF0dW1OYW1lOiBcIlJhc3NhZGlyYW5cIlxufTtcblxuZXhwb3J0cy5uemdkNDkgPSB7XG4gIHRvd2dzODQ6IFwiNTkuNDcsLTUuMDQsMTg3LjQ0LDAuNDcsLTAuMSwxLjAyNCwtNC41OTkzXCIsXG4gIGVsbGlwc2U6IFwiaW50bFwiLFxuICBkYXR1bU5hbWU6IFwiTmV3IFplYWxhbmQgR2VvZGV0aWMgRGF0dW0gMTk0OVwiXG59O1xuXG5leHBvcnRzLm9zZ2IzNiA9IHtcbiAgdG93Z3M4NDogXCI0NDYuNDQ4LC0xMjUuMTU3LDU0Mi4wNjAsMC4xNTAyLDAuMjQ3MCwwLjg0MjEsLTIwLjQ4OTRcIixcbiAgZWxsaXBzZTogXCJhaXJ5XCIsXG4gIGRhdHVtTmFtZTogXCJBaXJ5IDE4MzBcIlxufTtcblxuZXhwb3J0cy5zX2p0c2sgPSB7XG4gIHRvd2dzODQ6IFwiNTg5LDc2LDQ4MFwiLFxuICBlbGxpcHNlOiAnYmVzc2VsJyxcbiAgZGF0dW1OYW1lOiAnUy1KVFNLIChGZXJybyknXG59O1xuXG5leHBvcnRzLmJlZHVhcmFtID0ge1xuICB0b3dnczg0OiAnLTEwNiwtODcsMTg4JyxcbiAgZWxsaXBzZTogJ2Nscms4MCcsXG4gIGRhdHVtTmFtZTogJ0JlZHVhcmFtJ1xufTtcblxuZXhwb3J0cy5ndW51bmdfc2VnYXJhID0ge1xuICB0b3dnczg0OiAnLTQwMyw2ODQsNDEnLFxuICBlbGxpcHNlOiAnYmVzc2VsJyxcbiAgZGF0dW1OYW1lOiAnR3VudW5nIFNlZ2FyYSBKYWthcnRhJ1xufTtcblxuZXhwb3J0cy5ybmI3MiA9IHtcbiAgdG93Z3M4NDogXCIxMDYuODY5LC01Mi4yOTc4LDEwMy43MjQsLTAuMzM2NTcsMC40NTY5NTUsLTEuODQyMTgsMVwiLFxuICBlbGxpcHNlOiBcImludGxcIixcbiAgZGF0dW1OYW1lOiBcIlJlc2VhdSBOYXRpb25hbCBCZWxnZSAxOTcyXCJcbn07XG4iLCJpbXBvcnQgcGFyc2VDb2RlIGZyb20gJy4vcGFyc2VDb2RlJztcbmltcG9ydCBleHRlbmQgZnJvbSAnLi9leHRlbmQnO1xuaW1wb3J0IHByb2plY3Rpb25zIGZyb20gJy4vcHJvamVjdGlvbnMnO1xuaW1wb3J0IHtzcGhlcmUgYXMgZGNfc3BoZXJlLCBlY2NlbnRyaWNpdHkgYXMgZGNfZWNjZW50cmljaXR5fSBmcm9tICcuL2Rlcml2ZUNvbnN0YW50cyc7XG5pbXBvcnQgRGF0dW0gZnJvbSAnLi9jb25zdGFudHMvRGF0dW0nO1xuaW1wb3J0IGRhdHVtIGZyb20gJy4vZGF0dW0nO1xuaW1wb3J0IG1hdGNoIGZyb20gJy4vbWF0Y2gnO1xuXG5mdW5jdGlvbiBQcm9qZWN0aW9uKHNyc0NvZGUsY2FsbGJhY2spIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFByb2plY3Rpb24pKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9qZWN0aW9uKHNyc0NvZGUpO1xuICB9XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oZXJyb3Ipe1xuICAgIGlmKGVycm9yKXtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbiAgdmFyIGpzb24gPSBwYXJzZUNvZGUoc3JzQ29kZSk7XG4gIGlmKHR5cGVvZiBqc29uICE9PSAnb2JqZWN0Jyl7XG4gICAgY2FsbGJhY2soc3JzQ29kZSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBvdXJQcm9qID0gUHJvamVjdGlvbi5wcm9qZWN0aW9ucy5nZXQoanNvbi5wcm9qTmFtZSk7XG4gIGlmKCFvdXJQcm9qKXtcbiAgICBjYWxsYmFjayhzcnNDb2RlKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGpzb24uZGF0dW1Db2RlICYmIGpzb24uZGF0dW1Db2RlICE9PSAnbm9uZScpIHtcbiAgICB2YXIgZGF0dW1EZWYgPSBtYXRjaChEYXR1bSwganNvbi5kYXR1bUNvZGUpO1xuICAgIGlmIChkYXR1bURlZikge1xuICAgICAganNvbi5kYXR1bV9wYXJhbXMgPSBkYXR1bURlZi50b3dnczg0ID8gZGF0dW1EZWYudG93Z3M4NC5zcGxpdCgnLCcpIDogbnVsbDtcbiAgICAgIGpzb24uZWxscHMgPSBkYXR1bURlZi5lbGxpcHNlO1xuICAgICAganNvbi5kYXR1bU5hbWUgPSBkYXR1bURlZi5kYXR1bU5hbWUgPyBkYXR1bURlZi5kYXR1bU5hbWUgOiBqc29uLmRhdHVtQ29kZTtcbiAgICB9XG4gIH1cbiAganNvbi5rMCA9IGpzb24uazAgfHwgMS4wO1xuICBqc29uLmF4aXMgPSBqc29uLmF4aXMgfHwgJ2VudSc7XG4gIGpzb24uZWxscHMgPSBqc29uLmVsbHBzIHx8ICd3Z3M4NCc7XG4gIHZhciBzcGhlcmVfID0gZGNfc3BoZXJlKGpzb24uYSwganNvbi5iLCBqc29uLnJmLCBqc29uLmVsbHBzLCBqc29uLnNwaGVyZSk7XG4gIHZhciBlY2MgPSBkY19lY2NlbnRyaWNpdHkoc3BoZXJlXy5hLCBzcGhlcmVfLmIsIHNwaGVyZV8ucmYsIGpzb24uUl9BKTtcbiAgdmFyIGRhdHVtT2JqID0ganNvbi5kYXR1bSB8fCBkYXR1bShqc29uLmRhdHVtQ29kZSwganNvbi5kYXR1bV9wYXJhbXMsIHNwaGVyZV8uYSwgc3BoZXJlXy5iLCBlY2MuZXMsIGVjYy5lcDIpO1xuXG4gIGV4dGVuZCh0aGlzLCBqc29uKTsgLy8gdHJhbnNmZXIgZXZlcnl0aGluZyBvdmVyIGZyb20gdGhlIHByb2plY3Rpb24gYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgd2UnbGwgbmVlZFxuICBleHRlbmQodGhpcywgb3VyUHJvaik7IC8vIHRyYW5zZmVyIGFsbCB0aGUgbWV0aG9kcyBmcm9tIHRoZSBwcm9qZWN0aW9uXG5cbiAgLy8gY29weSB0aGUgNCB0aGluZ3Mgb3ZlciB3ZSBjYWx1bGF0ZWQgaW4gZGVyaXZlQ29uc3RhbnRzLnNwaGVyZVxuICB0aGlzLmEgPSBzcGhlcmVfLmE7XG4gIHRoaXMuYiA9IHNwaGVyZV8uYjtcbiAgdGhpcy5yZiA9IHNwaGVyZV8ucmY7XG4gIHRoaXMuc3BoZXJlID0gc3BoZXJlXy5zcGhlcmU7XG5cbiAgLy8gY29weSB0aGUgMyB0aGluZ3Mgd2UgY2FsY3VsYXRlZCBpbiBkZXJpdmVDb25zdGFudHMuZWNjZW50cmljaXR5XG4gIHRoaXMuZXMgPSBlY2MuZXM7XG4gIHRoaXMuZSA9IGVjYy5lO1xuICB0aGlzLmVwMiA9IGVjYy5lcDI7XG5cbiAgLy8gYWRkIGluIHRoZSBkYXR1bSBvYmplY3RcbiAgdGhpcy5kYXR1bSA9IGRhdHVtT2JqO1xuXG4gIC8vIGluaXQgdGhlIHByb2plY3Rpb25cbiAgdGhpcy5pbml0KCk7XG5cbiAgLy8gbGVnZWN5IGNhbGxiYWNrIGZyb20gYmFjayBpbiB0aGUgZGF5IHdoZW4gaXQgd2VudCB0byBzcGF0aWFscmVmZXJlbmNlLm9yZ1xuICBjYWxsYmFjayhudWxsLCB0aGlzKTtcblxufVxuUHJvamVjdGlvbi5wcm9qZWN0aW9ucyA9IHByb2plY3Rpb25zO1xuUHJvamVjdGlvbi5wcm9qZWN0aW9ucy5zdGFydCgpO1xuZXhwb3J0IGRlZmF1bHQgUHJvamVjdGlvbjtcbiIsImltcG9ydCB7U0lYVEgsIFJBNCwgUkE2LCBFUFNMTn0gZnJvbSAnLi9jb25zdGFudHMvdmFsdWVzJztcbmltcG9ydCB7ZGVmYXVsdCBhcyBFbGxpcHNvaWQsIFdHUzg0fSBmcm9tICcuL2NvbnN0YW50cy9FbGxpcHNvaWQnO1xuaW1wb3J0IG1hdGNoIGZyb20gJy4vbWF0Y2gnO1xuXG5leHBvcnQgZnVuY3Rpb24gZWNjZW50cmljaXR5KGEsIGIsIHJmLCBSX0EpIHtcbiAgdmFyIGEyID0gYSAqIGE7IC8vIHVzZWQgaW4gZ2VvY2VudHJpY1xuICB2YXIgYjIgPSBiICogYjsgLy8gdXNlZCBpbiBnZW9jZW50cmljXG4gIHZhciBlcyA9IChhMiAtIGIyKSAvIGEyOyAvLyBlIF4gMlxuICB2YXIgZSA9IDA7XG4gIGlmIChSX0EpIHtcbiAgICBhICo9IDEgLSBlcyAqIChTSVhUSCArIGVzICogKFJBNCArIGVzICogUkE2KSk7XG4gICAgYTIgPSBhICogYTtcbiAgICBlcyA9IDA7XG4gIH0gZWxzZSB7XG4gICAgZSA9IE1hdGguc3FydChlcyk7IC8vIGVjY2VudHJpY2l0eVxuICB9XG4gIHZhciBlcDIgPSAoYTIgLSBiMikgLyBiMjsgLy8gdXNlZCBpbiBnZW9jZW50cmljXG4gIHJldHVybiB7XG4gICAgZXM6IGVzLFxuICAgIGU6IGUsXG4gICAgZXAyOiBlcDJcbiAgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzcGhlcmUoYSwgYiwgcmYsIGVsbHBzLCBzcGhlcmUpIHtcbiAgaWYgKCFhKSB7IC8vIGRvIHdlIGhhdmUgYW4gZWxsaXBzb2lkP1xuICAgIHZhciBlbGxpcHNlID0gbWF0Y2goRWxsaXBzb2lkLCBlbGxwcyk7XG4gICAgaWYgKCFlbGxpcHNlKSB7XG4gICAgICBlbGxpcHNlID0gV0dTODQ7XG4gICAgfVxuICAgIGEgPSBlbGxpcHNlLmE7XG4gICAgYiA9IGVsbGlwc2UuYjtcbiAgICByZiA9IGVsbGlwc2UucmY7XG4gIH1cblxuICBpZiAocmYgJiYgIWIpIHtcbiAgICBiID0gKDEuMCAtIDEuMCAvIHJmKSAqIGE7XG4gIH1cbiAgaWYgKHJmID09PSAwIHx8IE1hdGguYWJzKGEgLSBiKSA8IEVQU0xOKSB7XG4gICAgc3BoZXJlID0gdHJ1ZTtcbiAgICBiID0gYTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGE6IGEsXG4gICAgYjogYixcbiAgICByZjogcmYsXG4gICAgc3BoZXJlOiBzcGhlcmVcbiAgfTtcbn1cbiIsImltcG9ydCB7UEpEXzNQQVJBTSwgUEpEXzdQQVJBTSwgUEpEX1dHUzg0LCBQSkRfTk9EQVRVTSwgU0VDX1RPX1JBRH0gZnJvbSAnLi9jb25zdGFudHMvdmFsdWVzJztcblxuZnVuY3Rpb24gZGF0dW0oZGF0dW1Db2RlLCBkYXR1bV9wYXJhbXMsIGEsIGIsIGVzLCBlcDIpIHtcbiAgdmFyIG91dCA9IHt9O1xuXG4gIGlmIChkYXR1bUNvZGUgPT09IHVuZGVmaW5lZCB8fCBkYXR1bUNvZGUgPT09ICdub25lJykge1xuICAgIG91dC5kYXR1bV90eXBlID0gUEpEX05PREFUVU07XG4gIH0gZWxzZSB7XG4gICAgb3V0LmRhdHVtX3R5cGUgPSBQSkRfV0dTODQ7XG4gIH1cblxuICBpZiAoZGF0dW1fcGFyYW1zKSB7XG4gICAgb3V0LmRhdHVtX3BhcmFtcyA9IGRhdHVtX3BhcmFtcy5tYXAocGFyc2VGbG9hdCk7XG4gICAgaWYgKG91dC5kYXR1bV9wYXJhbXNbMF0gIT09IDAgfHwgb3V0LmRhdHVtX3BhcmFtc1sxXSAhPT0gMCB8fCBvdXQuZGF0dW1fcGFyYW1zWzJdICE9PSAwKSB7XG4gICAgICBvdXQuZGF0dW1fdHlwZSA9IFBKRF8zUEFSQU07XG4gICAgfVxuICAgIGlmIChvdXQuZGF0dW1fcGFyYW1zLmxlbmd0aCA+IDMpIHtcbiAgICAgIGlmIChvdXQuZGF0dW1fcGFyYW1zWzNdICE9PSAwIHx8IG91dC5kYXR1bV9wYXJhbXNbNF0gIT09IDAgfHwgb3V0LmRhdHVtX3BhcmFtc1s1XSAhPT0gMCB8fCBvdXQuZGF0dW1fcGFyYW1zWzZdICE9PSAwKSB7XG4gICAgICAgIG91dC5kYXR1bV90eXBlID0gUEpEXzdQQVJBTTtcbiAgICAgICAgb3V0LmRhdHVtX3BhcmFtc1szXSAqPSBTRUNfVE9fUkFEO1xuICAgICAgICBvdXQuZGF0dW1fcGFyYW1zWzRdICo9IFNFQ19UT19SQUQ7XG4gICAgICAgIG91dC5kYXR1bV9wYXJhbXNbNV0gKj0gU0VDX1RPX1JBRDtcbiAgICAgICAgb3V0LmRhdHVtX3BhcmFtc1s2XSA9IChvdXQuZGF0dW1fcGFyYW1zWzZdIC8gMTAwMDAwMC4wKSArIDEuMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvdXQuYSA9IGE7IC8vZGF0dW0gb2JqZWN0IGFsc28gdXNlcyB0aGVzZSB2YWx1ZXNcbiAgb3V0LmIgPSBiO1xuICBvdXQuZXMgPSBlcztcbiAgb3V0LmVwMiA9IGVwMjtcbiAgcmV0dXJuIG91dDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGF0dW07XG4iLCIndXNlIHN0cmljdCc7XG5pbXBvcnQge1BKRF8zUEFSQU0sIFBKRF83UEFSQU0sIEhBTEZfUEl9IGZyb20gJy4vY29uc3RhbnRzL3ZhbHVlcyc7XG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZURhdHVtcyhzb3VyY2UsIGRlc3QpIHtcbiAgaWYgKHNvdXJjZS5kYXR1bV90eXBlICE9PSBkZXN0LmRhdHVtX3R5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIGZhbHNlLCBkYXR1bXMgYXJlIG5vdCBlcXVhbFxuICB9IGVsc2UgaWYgKHNvdXJjZS5hICE9PSBkZXN0LmEgfHwgTWF0aC5hYnMoc291cmNlLmVzIC0gZGVzdC5lcykgPiAwLjAwMDAwMDAwMDA1MCkge1xuICAgIC8vIHRoZSB0b2xlcmFuY2UgZm9yIGVzIGlzIHRvIGVuc3VyZSB0aGF0IEdSUzgwIGFuZCBXR1M4NFxuICAgIC8vIGFyZSBjb25zaWRlcmVkIGlkZW50aWNhbFxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChzb3VyY2UuZGF0dW1fdHlwZSA9PT0gUEpEXzNQQVJBTSkge1xuICAgIHJldHVybiAoc291cmNlLmRhdHVtX3BhcmFtc1swXSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbMF0gJiYgc291cmNlLmRhdHVtX3BhcmFtc1sxXSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbMV0gJiYgc291cmNlLmRhdHVtX3BhcmFtc1syXSA9PT0gZGVzdC5kYXR1bV9wYXJhbXNbMl0pO1xuICB9IGVsc2UgaWYgKHNvdXJjZS5kYXR1bV90eXBlID09PSBQSkRfN1BBUkFNKSB7XG4gICAgcmV0dXJuIChzb3VyY2UuZGF0dW1fcGFyYW1zWzBdID09PSBkZXN0LmRhdHVtX3BhcmFtc1swXSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzFdID09PSBkZXN0LmRhdHVtX3BhcmFtc1sxXSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzJdID09PSBkZXN0LmRhdHVtX3BhcmFtc1syXSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzNdID09PSBkZXN0LmRhdHVtX3BhcmFtc1szXSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzRdID09PSBkZXN0LmRhdHVtX3BhcmFtc1s0XSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzVdID09PSBkZXN0LmRhdHVtX3BhcmFtc1s1XSAmJiBzb3VyY2UuZGF0dW1fcGFyYW1zWzZdID09PSBkZXN0LmRhdHVtX3BhcmFtc1s2XSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRydWU7IC8vIGRhdHVtcyBhcmUgZXF1YWxcbiAgfVxufSAvLyBjc19jb21wYXJlX2RhdHVtcygpXG5cbi8qXG4gKiBUaGUgZnVuY3Rpb24gQ29udmVydF9HZW9kZXRpY19Ub19HZW9jZW50cmljIGNvbnZlcnRzIGdlb2RldGljIGNvb3JkaW5hdGVzXG4gKiAobGF0aXR1ZGUsIGxvbmdpdHVkZSwgYW5kIGhlaWdodCkgdG8gZ2VvY2VudHJpYyBjb29yZGluYXRlcyAoWCwgWSwgWiksXG4gKiBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgZWxsaXBzb2lkIHBhcmFtZXRlcnMuXG4gKlxuICogICAgTGF0aXR1ZGUgIDogR2VvZGV0aWMgbGF0aXR1ZGUgaW4gcmFkaWFucyAgICAgICAgICAgICAgICAgICAgIChpbnB1dClcbiAqICAgIExvbmdpdHVkZSA6IEdlb2RldGljIGxvbmdpdHVkZSBpbiByYWRpYW5zICAgICAgICAgICAgICAgICAgICAoaW5wdXQpXG4gKiAgICBIZWlnaHQgICAgOiBHZW9kZXRpYyBoZWlnaHQsIGluIG1ldGVycyAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KVxuICogICAgWCAgICAgICAgIDogQ2FsY3VsYXRlZCBHZW9jZW50cmljIFggY29vcmRpbmF0ZSwgaW4gbWV0ZXJzICAgIChvdXRwdXQpXG4gKiAgICBZICAgICAgICAgOiBDYWxjdWxhdGVkIEdlb2NlbnRyaWMgWSBjb29yZGluYXRlLCBpbiBtZXRlcnMgICAgKG91dHB1dClcbiAqICAgIFogICAgICAgICA6IENhbGN1bGF0ZWQgR2VvY2VudHJpYyBaIGNvb3JkaW5hdGUsIGluIG1ldGVycyAgICAob3V0cHV0KVxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlb2RldGljVG9HZW9jZW50cmljKHAsIGVzLCBhKSB7XG4gIHZhciBMb25naXR1ZGUgPSBwLng7XG4gIHZhciBMYXRpdHVkZSA9IHAueTtcbiAgdmFyIEhlaWdodCA9IHAueiA/IHAueiA6IDA7IC8vWiB2YWx1ZSBub3QgYWx3YXlzIHN1cHBsaWVkXG5cbiAgdmFyIFJuOyAvKiAgRWFydGggcmFkaXVzIGF0IGxvY2F0aW9uICAqL1xuICB2YXIgU2luX0xhdDsgLyogIE1hdGguc2luKExhdGl0dWRlKSAgKi9cbiAgdmFyIFNpbjJfTGF0OyAvKiAgU3F1YXJlIG9mIE1hdGguc2luKExhdGl0dWRlKSAgKi9cbiAgdmFyIENvc19MYXQ7IC8qICBNYXRoLmNvcyhMYXRpdHVkZSkgICovXG5cbiAgLypcbiAgICoqIERvbid0IGJsb3cgdXAgaWYgTGF0aXR1ZGUgaXMganVzdCBhIGxpdHRsZSBvdXQgb2YgdGhlIHZhbHVlXG4gICAqKiByYW5nZSBhcyBpdCBtYXkganVzdCBiZSBhIHJvdW5kaW5nIGlzc3VlLiAgQWxzbyByZW1vdmVkIGxvbmdpdHVkZVxuICAgKiogdGVzdCwgaXQgc2hvdWxkIGJlIHdyYXBwZWQgYnkgTWF0aC5jb3MoKSBhbmQgTWF0aC5zaW4oKS4gIE5GVyBmb3IgUFJPSi40LCBTZXAvMjAwMS5cbiAgICovXG4gIGlmIChMYXRpdHVkZSA8IC1IQUxGX1BJICYmIExhdGl0dWRlID4gLTEuMDAxICogSEFMRl9QSSkge1xuICAgIExhdGl0dWRlID0gLUhBTEZfUEk7XG4gIH0gZWxzZSBpZiAoTGF0aXR1ZGUgPiBIQUxGX1BJICYmIExhdGl0dWRlIDwgMS4wMDEgKiBIQUxGX1BJKSB7XG4gICAgTGF0aXR1ZGUgPSBIQUxGX1BJO1xuICB9IGVsc2UgaWYgKExhdGl0dWRlIDwgLUhBTEZfUEkpIHtcbiAgICAvKiBMYXRpdHVkZSBvdXQgb2YgcmFuZ2UgKi9cbiAgICAvLy4ucmVwb3J0RXJyb3IoJ2dlb2NlbnQ6bGF0IG91dCBvZiByYW5nZTonICsgTGF0aXR1ZGUpO1xuICAgIHJldHVybiB7IHg6IC1JbmZpbml0eSwgeTogLUluZmluaXR5LCB6OiBwLnogfTtcbiAgfSBlbHNlIGlmIChMYXRpdHVkZSA+IEhBTEZfUEkpIHtcbiAgICAvKiBMYXRpdHVkZSBvdXQgb2YgcmFuZ2UgKi9cbiAgICByZXR1cm4geyB4OiBJbmZpbml0eSwgeTogSW5maW5pdHksIHo6IHAueiB9O1xuICB9XG5cbiAgaWYgKExvbmdpdHVkZSA+IE1hdGguUEkpIHtcbiAgICBMb25naXR1ZGUgLT0gKDIgKiBNYXRoLlBJKTtcbiAgfVxuICBTaW5fTGF0ID0gTWF0aC5zaW4oTGF0aXR1ZGUpO1xuICBDb3NfTGF0ID0gTWF0aC5jb3MoTGF0aXR1ZGUpO1xuICBTaW4yX0xhdCA9IFNpbl9MYXQgKiBTaW5fTGF0O1xuICBSbiA9IGEgLyAoTWF0aC5zcXJ0KDEuMGUwIC0gZXMgKiBTaW4yX0xhdCkpO1xuICByZXR1cm4ge1xuICAgIHg6IChSbiArIEhlaWdodCkgKiBDb3NfTGF0ICogTWF0aC5jb3MoTG9uZ2l0dWRlKSxcbiAgICB5OiAoUm4gKyBIZWlnaHQpICogQ29zX0xhdCAqIE1hdGguc2luKExvbmdpdHVkZSksXG4gICAgejogKChSbiAqICgxIC0gZXMpKSArIEhlaWdodCkgKiBTaW5fTGF0XG4gIH07XG59IC8vIGNzX2dlb2RldGljX3RvX2dlb2NlbnRyaWMoKVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VvY2VudHJpY1RvR2VvZGV0aWMocCwgZXMsIGEsIGIpIHtcbiAgLyogbG9jYWwgZGVmaW50aW9ucyBhbmQgdmFyaWFibGVzICovXG4gIC8qIGVuZC1jcml0ZXJpdW0gb2YgbG9vcCwgYWNjdXJhY3kgb2Ygc2luKExhdGl0dWRlKSAqL1xuICB2YXIgZ2VuYXUgPSAxZS0xMjtcbiAgdmFyIGdlbmF1MiA9IChnZW5hdSAqIGdlbmF1KTtcbiAgdmFyIG1heGl0ZXIgPSAzMDtcblxuICB2YXIgUDsgLyogZGlzdGFuY2UgYmV0d2VlbiBzZW1pLW1pbm9yIGF4aXMgYW5kIGxvY2F0aW9uICovXG4gIHZhciBSUjsgLyogZGlzdGFuY2UgYmV0d2VlbiBjZW50ZXIgYW5kIGxvY2F0aW9uICovXG4gIHZhciBDVDsgLyogc2luIG9mIGdlb2NlbnRyaWMgbGF0aXR1ZGUgKi9cbiAgdmFyIFNUOyAvKiBjb3Mgb2YgZ2VvY2VudHJpYyBsYXRpdHVkZSAqL1xuICB2YXIgUlg7XG4gIHZhciBSSztcbiAgdmFyIFJOOyAvKiBFYXJ0aCByYWRpdXMgYXQgbG9jYXRpb24gKi9cbiAgdmFyIENQSEkwOyAvKiBjb3Mgb2Ygc3RhcnQgb3Igb2xkIGdlb2RldGljIGxhdGl0dWRlIGluIGl0ZXJhdGlvbnMgKi9cbiAgdmFyIFNQSEkwOyAvKiBzaW4gb2Ygc3RhcnQgb3Igb2xkIGdlb2RldGljIGxhdGl0dWRlIGluIGl0ZXJhdGlvbnMgKi9cbiAgdmFyIENQSEk7IC8qIGNvcyBvZiBzZWFyY2hlZCBnZW9kZXRpYyBsYXRpdHVkZSAqL1xuICB2YXIgU1BISTsgLyogc2luIG9mIHNlYXJjaGVkIGdlb2RldGljIGxhdGl0dWRlICovXG4gIHZhciBTRFBISTsgLyogZW5kLWNyaXRlcml1bTogYWRkaXRpb24tdGhlb3JlbSBvZiBzaW4oTGF0aXR1ZGUoaXRlciktTGF0aXR1ZGUoaXRlci0xKSkgKi9cbiAgdmFyIGl0ZXI7IC8qICMgb2YgY29udGlub3VzIGl0ZXJhdGlvbiwgbWF4LiAzMCBpcyBhbHdheXMgZW5vdWdoIChzLmEuKSAqL1xuXG4gIHZhciBYID0gcC54O1xuICB2YXIgWSA9IHAueTtcbiAgdmFyIFogPSBwLnogPyBwLnogOiAwLjA7IC8vWiB2YWx1ZSBub3QgYWx3YXlzIHN1cHBsaWVkXG4gIHZhciBMb25naXR1ZGU7XG4gIHZhciBMYXRpdHVkZTtcbiAgdmFyIEhlaWdodDtcblxuICBQID0gTWF0aC5zcXJ0KFggKiBYICsgWSAqIFkpO1xuICBSUiA9IE1hdGguc3FydChYICogWCArIFkgKiBZICsgWiAqIFopO1xuXG4gIC8qICAgICAgc3BlY2lhbCBjYXNlcyBmb3IgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSAqL1xuICBpZiAoUCAvIGEgPCBnZW5hdSkge1xuXG4gICAgLyogIHNwZWNpYWwgY2FzZSwgaWYgUD0wLiAoWD0wLiwgWT0wLikgKi9cbiAgICBMb25naXR1ZGUgPSAwLjA7XG5cbiAgICAvKiAgaWYgKFgsWSxaKT0oMC4sMC4sMC4pIHRoZW4gSGVpZ2h0IGJlY29tZXMgc2VtaS1taW5vciBheGlzXG4gICAgICogIG9mIGVsbGlwc29pZCAoPWNlbnRlciBvZiBtYXNzKSwgTGF0aXR1ZGUgYmVjb21lcyBQSS8yICovXG4gICAgaWYgKFJSIC8gYSA8IGdlbmF1KSB7XG4gICAgICBMYXRpdHVkZSA9IEhBTEZfUEk7XG4gICAgICBIZWlnaHQgPSAtYjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHAueCxcbiAgICAgICAgeTogcC55LFxuICAgICAgICB6OiBwLnpcbiAgICAgIH07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8qICBlbGxpcHNvaWRhbCAoZ2VvZGV0aWMpIGxvbmdpdHVkZVxuICAgICAqICBpbnRlcnZhbDogLVBJIDwgTG9uZ2l0dWRlIDw9ICtQSSAqL1xuICAgIExvbmdpdHVkZSA9IE1hdGguYXRhbjIoWSwgWCk7XG4gIH1cblxuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBGb2xsb3dpbmcgaXRlcmF0aXZlIGFsZ29yaXRobSB3YXMgZGV2ZWxvcHBlZCBieVxuICAgKiBcIkluc3RpdHV0IGZvciBFcmRtZXNzdW5nXCIsIFVuaXZlcnNpdHkgb2YgSGFubm92ZXIsIEp1bHkgMTk4OC5cbiAgICogSW50ZXJuZXQ6IHd3dy5pZmUudW5pLWhhbm5vdmVyLmRlXG4gICAqIEl0ZXJhdGl2ZSBjb21wdXRhdGlvbiBvZiBDUEhJLFNQSEkgYW5kIEhlaWdodC5cbiAgICogSXRlcmF0aW9uIG9mIENQSEkgYW5kIFNQSEkgdG8gMTAqKi0xMiByYWRpYW4gcmVzcC5cbiAgICogMioxMCoqLTcgYXJjc2VjLlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cbiAgQ1QgPSBaIC8gUlI7XG4gIFNUID0gUCAvIFJSO1xuICBSWCA9IDEuMCAvIE1hdGguc3FydCgxLjAgLSBlcyAqICgyLjAgLSBlcykgKiBTVCAqIFNUKTtcbiAgQ1BISTAgPSBTVCAqICgxLjAgLSBlcykgKiBSWDtcbiAgU1BISTAgPSBDVCAqIFJYO1xuICBpdGVyID0gMDtcblxuICAvKiBsb29wIHRvIGZpbmQgc2luKExhdGl0dWRlKSByZXNwLiBMYXRpdHVkZVxuICAgKiB1bnRpbCB8c2luKExhdGl0dWRlKGl0ZXIpLUxhdGl0dWRlKGl0ZXItMSkpfCA8IGdlbmF1ICovXG4gIGRvIHtcbiAgICBpdGVyKys7XG4gICAgUk4gPSBhIC8gTWF0aC5zcXJ0KDEuMCAtIGVzICogU1BISTAgKiBTUEhJMCk7XG5cbiAgICAvKiAgZWxsaXBzb2lkYWwgKGdlb2RldGljKSBoZWlnaHQgKi9cbiAgICBIZWlnaHQgPSBQICogQ1BISTAgKyBaICogU1BISTAgLSBSTiAqICgxLjAgLSBlcyAqIFNQSEkwICogU1BISTApO1xuXG4gICAgUksgPSBlcyAqIFJOIC8gKFJOICsgSGVpZ2h0KTtcbiAgICBSWCA9IDEuMCAvIE1hdGguc3FydCgxLjAgLSBSSyAqICgyLjAgLSBSSykgKiBTVCAqIFNUKTtcbiAgICBDUEhJID0gU1QgKiAoMS4wIC0gUkspICogUlg7XG4gICAgU1BISSA9IENUICogUlg7XG4gICAgU0RQSEkgPSBTUEhJICogQ1BISTAgLSBDUEhJICogU1BISTA7XG4gICAgQ1BISTAgPSBDUEhJO1xuICAgIFNQSEkwID0gU1BISTtcbiAgfVxuICB3aGlsZSAoU0RQSEkgKiBTRFBISSA+IGdlbmF1MiAmJiBpdGVyIDwgbWF4aXRlcik7XG5cbiAgLyogICAgICBlbGxpcHNvaWRhbCAoZ2VvZGV0aWMpIGxhdGl0dWRlICovXG4gIExhdGl0dWRlID0gTWF0aC5hdGFuKFNQSEkgLyBNYXRoLmFicyhDUEhJKSk7XG4gIHJldHVybiB7XG4gICAgeDogTG9uZ2l0dWRlLFxuICAgIHk6IExhdGl0dWRlLFxuICAgIHo6IEhlaWdodFxuICB9O1xufSAvLyBjc19nZW9jZW50cmljX3RvX2dlb2RldGljKClcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vLyBwal9nZW9jZW50aWNfdG9fd2dzODQoIHAgKVxuLy8gIHAgPSBwb2ludCB0byB0cmFuc2Zvcm0gaW4gZ2VvY2VudHJpYyBjb29yZGluYXRlcyAoeCx5LHopXG5cblxuLyoqIHBvaW50IG9iamVjdCwgbm90aGluZyBmYW5jeSwganVzdCBhbGxvd3MgdmFsdWVzIHRvIGJlXG4gICAgcGFzc2VkIGJhY2sgYW5kIGZvcnRoIGJ5IHJlZmVyZW5jZSByYXRoZXIgdGhhbiBieSB2YWx1ZS5cbiAgICBPdGhlciBwb2ludCBjbGFzc2VzIG1heSBiZSB1c2VkIGFzIGxvbmcgYXMgdGhleSBoYXZlXG4gICAgeCBhbmQgeSBwcm9wZXJ0aWVzLCB3aGljaCB3aWxsIGdldCBtb2RpZmllZCBpbiB0aGUgdHJhbnNmb3JtIG1ldGhvZC5cbiovXG5leHBvcnQgZnVuY3Rpb24gZ2VvY2VudHJpY1RvV2dzODQocCwgZGF0dW1fdHlwZSwgZGF0dW1fcGFyYW1zKSB7XG5cbiAgaWYgKGRhdHVtX3R5cGUgPT09IFBKRF8zUEFSQU0pIHtcbiAgICAvLyBpZiggeFtpb10gPT09IEhVR0VfVkFMIClcbiAgICAvLyAgICBjb250aW51ZTtcbiAgICByZXR1cm4ge1xuICAgICAgeDogcC54ICsgZGF0dW1fcGFyYW1zWzBdLFxuICAgICAgeTogcC55ICsgZGF0dW1fcGFyYW1zWzFdLFxuICAgICAgejogcC56ICsgZGF0dW1fcGFyYW1zWzJdLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoZGF0dW1fdHlwZSA9PT0gUEpEXzdQQVJBTSkge1xuICAgIHZhciBEeF9CRiA9IGRhdHVtX3BhcmFtc1swXTtcbiAgICB2YXIgRHlfQkYgPSBkYXR1bV9wYXJhbXNbMV07XG4gICAgdmFyIER6X0JGID0gZGF0dW1fcGFyYW1zWzJdO1xuICAgIHZhciBSeF9CRiA9IGRhdHVtX3BhcmFtc1szXTtcbiAgICB2YXIgUnlfQkYgPSBkYXR1bV9wYXJhbXNbNF07XG4gICAgdmFyIFJ6X0JGID0gZGF0dW1fcGFyYW1zWzVdO1xuICAgIHZhciBNX0JGID0gZGF0dW1fcGFyYW1zWzZdO1xuICAgIC8vIGlmKCB4W2lvXSA9PT0gSFVHRV9WQUwgKVxuICAgIC8vICAgIGNvbnRpbnVlO1xuICAgIHJldHVybiB7XG4gICAgICB4OiBNX0JGICogKHAueCAtIFJ6X0JGICogcC55ICsgUnlfQkYgKiBwLnopICsgRHhfQkYsXG4gICAgICB5OiBNX0JGICogKFJ6X0JGICogcC54ICsgcC55IC0gUnhfQkYgKiBwLnopICsgRHlfQkYsXG4gICAgICB6OiBNX0JGICogKC1SeV9CRiAqIHAueCArIFJ4X0JGICogcC55ICsgcC56KSArIER6X0JGXG4gICAgfTtcbiAgfVxufSAvLyBjc19nZW9jZW50cmljX3RvX3dnczg0XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLy8gcGpfZ2VvY2VudGljX2Zyb21fd2dzODQoKVxuLy8gIGNvb3JkaW5hdGUgc3lzdGVtIGRlZmluaXRpb24sXG4vLyAgcG9pbnQgdG8gdHJhbnNmb3JtIGluIGdlb2NlbnRyaWMgY29vcmRpbmF0ZXMgKHgseSx6KVxuZXhwb3J0IGZ1bmN0aW9uIGdlb2NlbnRyaWNGcm9tV2dzODQocCwgZGF0dW1fdHlwZSwgZGF0dW1fcGFyYW1zKSB7XG5cbiAgaWYgKGRhdHVtX3R5cGUgPT09IFBKRF8zUEFSQU0pIHtcbiAgICAvL2lmKCB4W2lvXSA9PT0gSFVHRV9WQUwgKVxuICAgIC8vICAgIGNvbnRpbnVlO1xuICAgIHJldHVybiB7XG4gICAgICB4OiBwLnggLSBkYXR1bV9wYXJhbXNbMF0sXG4gICAgICB5OiBwLnkgLSBkYXR1bV9wYXJhbXNbMV0sXG4gICAgICB6OiBwLnogLSBkYXR1bV9wYXJhbXNbMl0sXG4gICAgfTtcblxuICB9IGVsc2UgaWYgKGRhdHVtX3R5cGUgPT09IFBKRF83UEFSQU0pIHtcbiAgICB2YXIgRHhfQkYgPSBkYXR1bV9wYXJhbXNbMF07XG4gICAgdmFyIER5X0JGID0gZGF0dW1fcGFyYW1zWzFdO1xuICAgIHZhciBEel9CRiA9IGRhdHVtX3BhcmFtc1syXTtcbiAgICB2YXIgUnhfQkYgPSBkYXR1bV9wYXJhbXNbM107XG4gICAgdmFyIFJ5X0JGID0gZGF0dW1fcGFyYW1zWzRdO1xuICAgIHZhciBSel9CRiA9IGRhdHVtX3BhcmFtc1s1XTtcbiAgICB2YXIgTV9CRiA9IGRhdHVtX3BhcmFtc1s2XTtcbiAgICB2YXIgeF90bXAgPSAocC54IC0gRHhfQkYpIC8gTV9CRjtcbiAgICB2YXIgeV90bXAgPSAocC55IC0gRHlfQkYpIC8gTV9CRjtcbiAgICB2YXIgel90bXAgPSAocC56IC0gRHpfQkYpIC8gTV9CRjtcbiAgICAvL2lmKCB4W2lvXSA9PT0gSFVHRV9WQUwgKVxuICAgIC8vICAgIGNvbnRpbnVlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHhfdG1wICsgUnpfQkYgKiB5X3RtcCAtIFJ5X0JGICogel90bXAsXG4gICAgICB5OiAtUnpfQkYgKiB4X3RtcCArIHlfdG1wICsgUnhfQkYgKiB6X3RtcCxcbiAgICAgIHo6IFJ5X0JGICogeF90bXAgLSBSeF9CRiAqIHlfdG1wICsgel90bXBcbiAgICB9O1xuICB9IC8vY3NfZ2VvY2VudHJpY19mcm9tX3dnczg0KClcbn1cbiIsImltcG9ydCB7UEpEXzNQQVJBTSwgUEpEXzdQQVJBTSwgUEpEX05PREFUVU19IGZyb20gJy4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbmltcG9ydCB7Z2VvZGV0aWNUb0dlb2NlbnRyaWMsIGdlb2NlbnRyaWNUb0dlb2RldGljLCBnZW9jZW50cmljVG9XZ3M4NCwgZ2VvY2VudHJpY0Zyb21XZ3M4NCwgY29tcGFyZURhdHVtc30gZnJvbSAnLi9kYXR1bVV0aWxzJztcbmZ1bmN0aW9uIGNoZWNrUGFyYW1zKHR5cGUpIHtcbiAgcmV0dXJuICh0eXBlID09PSBQSkRfM1BBUkFNIHx8IHR5cGUgPT09IFBKRF83UEFSQU0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzb3VyY2UsIGRlc3QsIHBvaW50KSB7XG4gIC8vIFNob3J0IGN1dCBpZiB0aGUgZGF0dW1zIGFyZSBpZGVudGljYWwuXG4gIGlmIChjb21wYXJlRGF0dW1zKHNvdXJjZSwgZGVzdCkpIHtcbiAgICByZXR1cm4gcG9pbnQ7IC8vIGluIHRoaXMgY2FzZSwgemVybyBpcyBzdWNlc3MsXG4gICAgLy8gd2hlcmVhcyBjc19jb21wYXJlX2RhdHVtcyByZXR1cm5zIDEgdG8gaW5kaWNhdGUgVFJVRVxuICAgIC8vIGNvbmZ1c2luZywgc2hvdWxkIGZpeCB0aGlzXG4gIH1cblxuICAvLyBFeHBsaWNpdGx5IHNraXAgZGF0dW0gdHJhbnNmb3JtIGJ5IHNldHRpbmcgJ2RhdHVtPW5vbmUnIGFzIHBhcmFtZXRlciBmb3IgZWl0aGVyIHNvdXJjZSBvciBkZXN0XG4gIGlmIChzb3VyY2UuZGF0dW1fdHlwZSA9PT0gUEpEX05PREFUVU0gfHwgZGVzdC5kYXR1bV90eXBlID09PSBQSkRfTk9EQVRVTSkge1xuICAgIHJldHVybiBwb2ludDtcbiAgfVxuXG4gIC8vIElmIHRoaXMgZGF0dW0gcmVxdWlyZXMgZ3JpZCBzaGlmdHMsIHRoZW4gYXBwbHkgaXQgdG8gZ2VvZGV0aWMgY29vcmRpbmF0ZXMuXG5cbiAgLy8gRG8gd2UgbmVlZCB0byBnbyB0aHJvdWdoIGdlb2NlbnRyaWMgY29vcmRpbmF0ZXM/XG4gIGlmIChzb3VyY2UuZXMgPT09IGRlc3QuZXMgJiYgc291cmNlLmEgPT09IGRlc3QuYSAmJiAhY2hlY2tQYXJhbXMoc291cmNlLmRhdHVtX3R5cGUpICYmICAhY2hlY2tQYXJhbXMoZGVzdC5kYXR1bV90eXBlKSkge1xuICAgIHJldHVybiBwb2ludDtcbiAgfVxuXG4gIC8vIENvbnZlcnQgdG8gZ2VvY2VudHJpYyBjb29yZGluYXRlcy5cbiAgcG9pbnQgPSBnZW9kZXRpY1RvR2VvY2VudHJpYyhwb2ludCwgc291cmNlLmVzLCBzb3VyY2UuYSk7XG4gIC8vIENvbnZlcnQgYmV0d2VlbiBkYXR1bXNcbiAgaWYgKGNoZWNrUGFyYW1zKHNvdXJjZS5kYXR1bV90eXBlKSkge1xuICAgIHBvaW50ID0gZ2VvY2VudHJpY1RvV2dzODQocG9pbnQsIHNvdXJjZS5kYXR1bV90eXBlLCBzb3VyY2UuZGF0dW1fcGFyYW1zKTtcbiAgfVxuICBpZiAoY2hlY2tQYXJhbXMoZGVzdC5kYXR1bV90eXBlKSkge1xuICAgIHBvaW50ID0gZ2VvY2VudHJpY0Zyb21XZ3M4NChwb2ludCwgZGVzdC5kYXR1bV90eXBlLCBkZXN0LmRhdHVtX3BhcmFtcyk7XG4gIH1cbiAgcmV0dXJuIGdlb2NlbnRyaWNUb0dlb2RldGljKHBvaW50LCBkZXN0LmVzLCBkZXN0LmEsIGRlc3QuYik7XG5cbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNycywgZGVub3JtLCBwb2ludCkge1xuICB2YXIgeGluID0gcG9pbnQueCxcbiAgICB5aW4gPSBwb2ludC55LFxuICAgIHppbiA9IHBvaW50LnogfHwgMC4wO1xuICB2YXIgdiwgdCwgaTtcbiAgdmFyIG91dCA9IHt9O1xuICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgaWYgKGRlbm9ybSAmJiBpID09PSAyICYmIHBvaW50LnogPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChpID09PSAwKSB7XG4gICAgICB2ID0geGluO1xuICAgICAgaWYgKFwiZXdcIi5pbmRleE9mKGNycy5heGlzW2ldKSAhPT0gLTEpIHtcbiAgICAgICAgdCA9ICd4JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHQgPSAneSc7XG4gICAgICB9XG5cbiAgICB9XG4gICAgZWxzZSBpZiAoaSA9PT0gMSkge1xuICAgICAgdiA9IHlpbjtcbiAgICAgIGlmIChcIm5zXCIuaW5kZXhPZihjcnMuYXhpc1tpXSkgIT09IC0xKSB7XG4gICAgICAgIHQgPSAneSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0ID0gJ3gnO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHYgPSB6aW47XG4gICAgICB0ID0gJ3onO1xuICAgIH1cbiAgICBzd2l0Y2ggKGNycy5heGlzW2ldKSB7XG4gICAgY2FzZSAnZSc6XG4gICAgICBvdXRbdF0gPSB2O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndyc6XG4gICAgICBvdXRbdF0gPSAtdjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ24nOlxuICAgICAgb3V0W3RdID0gdjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3MnOlxuICAgICAgb3V0W3RdID0gLXY7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd1JzpcbiAgICAgIGlmIChwb2ludFt0XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG91dC56ID0gdjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2QnOlxuICAgICAgaWYgKHBvaW50W3RdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3V0LnogPSAtdjtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvL2NvbnNvbGUubG9nKFwiRVJST1I6IHVua25vdyBheGlzIChcIitjcnMuYXhpc1tpXStcIikgLSBjaGVjayBkZWZpbml0aW9uIG9mIFwiK2Nycy5wcm9qTmFtZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChhcnJheSl7XG4gIHZhciBvdXQgPSB7XG4gICAgeDogYXJyYXlbMF0sXG4gICAgeTogYXJyYXlbMV1cbiAgfTtcbiAgaWYgKGFycmF5Lmxlbmd0aD4yKSB7XG4gICAgb3V0LnogPSBhcnJheVsyXTtcbiAgfVxuICBpZiAoYXJyYXkubGVuZ3RoPjMpIHtcbiAgICBvdXQubSA9IGFycmF5WzNdO1xuICB9XG4gIHJldHVybiBvdXQ7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKHBvaW50KSB7XG4gIGNoZWNrQ29vcmQocG9pbnQueCk7XG4gIGNoZWNrQ29vcmQocG9pbnQueSk7XG59XG5mdW5jdGlvbiBjaGVja0Nvb3JkKG51bSkge1xuICBpZiAodHlwZW9mIE51bWJlci5pc0Zpbml0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUobnVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGZpbml0ZSBudW1iZXJzJyk7XG4gIH1cbiAgaWYgKHR5cGVvZiBudW0gIT09ICdudW1iZXInIHx8IG51bSAhPT0gbnVtIHx8ICFpc0Zpbml0ZShudW0pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBmaW5pdGUgbnVtYmVycycpO1xuICB9XG59XG4iLCJpbXBvcnQge0QyUiwgUjJELCBQSkRfM1BBUkFNLCBQSkRfN1BBUkFNfSBmcm9tICcuL2NvbnN0YW50cy92YWx1ZXMnO1xuaW1wb3J0IGRhdHVtX3RyYW5zZm9ybSBmcm9tICcuL2RhdHVtX3RyYW5zZm9ybSc7XG5pbXBvcnQgYWRqdXN0X2F4aXMgZnJvbSAnLi9hZGp1c3RfYXhpcyc7XG5pbXBvcnQgcHJvaiBmcm9tICcuL1Byb2onO1xuaW1wb3J0IHRvUG9pbnQgZnJvbSAnLi9jb21tb24vdG9Qb2ludCc7XG5pbXBvcnQgY2hlY2tTYW5pdHkgZnJvbSAnLi9jaGVja1Nhbml0eSc7XG5cbmZ1bmN0aW9uIGNoZWNrTm90V0dTKHNvdXJjZSwgZGVzdCkge1xuICByZXR1cm4gKChzb3VyY2UuZGF0dW0uZGF0dW1fdHlwZSA9PT0gUEpEXzNQQVJBTSB8fCBzb3VyY2UuZGF0dW0uZGF0dW1fdHlwZSA9PT0gUEpEXzdQQVJBTSkgJiYgZGVzdC5kYXR1bUNvZGUgIT09ICdXR1M4NCcpIHx8ICgoZGVzdC5kYXR1bS5kYXR1bV90eXBlID09PSBQSkRfM1BBUkFNIHx8IGRlc3QuZGF0dW0uZGF0dW1fdHlwZSA9PT0gUEpEXzdQQVJBTSkgJiYgc291cmNlLmRhdHVtQ29kZSAhPT0gJ1dHUzg0Jyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybShzb3VyY2UsIGRlc3QsIHBvaW50KSB7XG4gIHZhciB3Z3M4NDtcbiAgaWYgKEFycmF5LmlzQXJyYXkocG9pbnQpKSB7XG4gICAgcG9pbnQgPSB0b1BvaW50KHBvaW50KTtcbiAgfVxuICBjaGVja1Nhbml0eShwb2ludCk7XG4gIC8vIFdvcmthcm91bmQgZm9yIGRhdHVtIHNoaWZ0cyB0b3dnczg0LCBpZiBlaXRoZXIgc291cmNlIG9yIGRlc3RpbmF0aW9uIHByb2plY3Rpb24gaXMgbm90IHdnczg0XG4gIGlmIChzb3VyY2UuZGF0dW0gJiYgZGVzdC5kYXR1bSAmJiBjaGVja05vdFdHUyhzb3VyY2UsIGRlc3QpKSB7XG4gICAgd2dzODQgPSBuZXcgcHJvaignV0dTODQnKTtcbiAgICBwb2ludCA9IHRyYW5zZm9ybShzb3VyY2UsIHdnczg0LCBwb2ludCk7XG4gICAgc291cmNlID0gd2dzODQ7XG4gIH1cbiAgLy8gREdSLCAyMDEwLzExLzEyXG4gIGlmIChzb3VyY2UuYXhpcyAhPT0gJ2VudScpIHtcbiAgICBwb2ludCA9IGFkanVzdF9heGlzKHNvdXJjZSwgZmFsc2UsIHBvaW50KTtcbiAgfVxuICAvLyBUcmFuc2Zvcm0gc291cmNlIHBvaW50cyB0byBsb25nL2xhdCwgaWYgdGhleSBhcmVuJ3QgYWxyZWFkeS5cbiAgaWYgKHNvdXJjZS5wcm9qTmFtZSA9PT0gJ2xvbmdsYXQnKSB7XG4gICAgcG9pbnQgPSB7XG4gICAgICB4OiBwb2ludC54ICogRDJSLFxuICAgICAgeTogcG9pbnQueSAqIEQyUixcbiAgICAgIHo6IHBvaW50LnogfHwgMFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKHNvdXJjZS50b19tZXRlcikge1xuICAgICAgcG9pbnQgPSB7XG4gICAgICAgIHg6IHBvaW50LnggKiBzb3VyY2UudG9fbWV0ZXIsXG4gICAgICAgIHk6IHBvaW50LnkgKiBzb3VyY2UudG9fbWV0ZXIsXG4gICAgICAgIHo6IHBvaW50LnogfHwgMFxuICAgICAgfTtcbiAgICB9XG4gICAgcG9pbnQgPSBzb3VyY2UuaW52ZXJzZShwb2ludCk7IC8vIENvbnZlcnQgQ2FydGVzaWFuIHRvIGxvbmdsYXRcbiAgICBpZiAoIXBvaW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIC8vIEFkanVzdCBmb3IgdGhlIHByaW1lIG1lcmlkaWFuIGlmIG5lY2Vzc2FyeVxuICBpZiAoc291cmNlLmZyb21fZ3JlZW53aWNoKSB7XG4gICAgcG9pbnQueCArPSBzb3VyY2UuZnJvbV9ncmVlbndpY2g7XG4gIH1cblxuICAvLyBDb252ZXJ0IGRhdHVtcyBpZiBuZWVkZWQsIGFuZCBpZiBwb3NzaWJsZS5cbiAgcG9pbnQgPSBkYXR1bV90cmFuc2Zvcm0oc291cmNlLmRhdHVtLCBkZXN0LmRhdHVtLCBwb2ludCk7XG5cbiAgLy8gQWRqdXN0IGZvciB0aGUgcHJpbWUgbWVyaWRpYW4gaWYgbmVjZXNzYXJ5XG4gIGlmIChkZXN0LmZyb21fZ3JlZW53aWNoKSB7XG4gICAgcG9pbnQgPSB7XG4gICAgICB4OiBwb2ludC54IC0gZGVzdC5mcm9tX2dyZWVud2ljaCxcbiAgICAgIHk6IHBvaW50LnksXG4gICAgICB6OiBwb2ludC56IHx8IDBcbiAgICB9O1xuICB9XG5cbiAgaWYgKGRlc3QucHJvak5hbWUgPT09ICdsb25nbGF0Jykge1xuICAgIC8vIGNvbnZlcnQgcmFkaWFucyB0byBkZWNpbWFsIGRlZ3JlZXNcbiAgICBwb2ludCA9IHtcbiAgICAgIHg6IHBvaW50LnggKiBSMkQsXG4gICAgICB5OiBwb2ludC55ICogUjJELFxuICAgICAgejogcG9pbnQueiB8fCAwXG4gICAgfTtcbiAgfSBlbHNlIHsgLy8gZWxzZSBwcm9qZWN0XG4gICAgcG9pbnQgPSBkZXN0LmZvcndhcmQocG9pbnQpO1xuICAgIGlmIChkZXN0LnRvX21ldGVyKSB7XG4gICAgICBwb2ludCA9IHtcbiAgICAgICAgeDogcG9pbnQueCAvIGRlc3QudG9fbWV0ZXIsXG4gICAgICAgIHk6IHBvaW50LnkgLyBkZXN0LnRvX21ldGVyLFxuICAgICAgICB6OiBwb2ludC56IHx8IDBcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLy8gREdSLCAyMDEwLzExLzEyXG4gIGlmIChkZXN0LmF4aXMgIT09ICdlbnUnKSB7XG4gICAgcmV0dXJuIGFkanVzdF9heGlzKGRlc3QsIHRydWUsIHBvaW50KTtcbiAgfVxuXG4gIHJldHVybiBwb2ludDtcbn1cbiIsImltcG9ydCBwcm9qIGZyb20gJy4vUHJvaic7XG5pbXBvcnQgdHJhbnNmb3JtIGZyb20gJy4vdHJhbnNmb3JtJztcbnZhciB3Z3M4NCA9IHByb2ooJ1dHUzg0Jyk7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybWVyKGZyb20sIHRvLCBjb29yZHMpIHtcbiAgdmFyIHRyYW5zZm9ybWVkQXJyYXksIG91dCwga2V5cztcbiAgaWYgKEFycmF5LmlzQXJyYXkoY29vcmRzKSkge1xuICAgIHRyYW5zZm9ybWVkQXJyYXkgPSB0cmFuc2Zvcm0oZnJvbSwgdG8sIGNvb3JkcykgfHwge3g6IE5hTiwgeTogTmFOfTtcbiAgICBpZiAoY29vcmRzLmxlbmd0aCA+IDIpIHtcbiAgICAgIGlmICgodHlwZW9mIGZyb20ubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZnJvbS5uYW1lID09PSAnZ2VvY2VudCcpIHx8ICh0eXBlb2YgdG8ubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdG8ubmFtZSA9PT0gJ2dlb2NlbnQnKSkge1xuICAgICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybWVkQXJyYXkueiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXR1cm4gW3RyYW5zZm9ybWVkQXJyYXkueCwgdHJhbnNmb3JtZWRBcnJheS55LCB0cmFuc2Zvcm1lZEFycmF5LnpdLmNvbmNhdChjb29yZHMuc3BsaWNlKDMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gW3RyYW5zZm9ybWVkQXJyYXkueCwgdHJhbnNmb3JtZWRBcnJheS55LCBjb29yZHNbMl1dLmNvbmNhdChjb29yZHMuc3BsaWNlKDMpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFt0cmFuc2Zvcm1lZEFycmF5LngsIHRyYW5zZm9ybWVkQXJyYXkueV0uY29uY2F0KGNvb3Jkcy5zcGxpY2UoMikpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3RyYW5zZm9ybWVkQXJyYXkueCwgdHJhbnNmb3JtZWRBcnJheS55XTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ID0gdHJhbnNmb3JtKGZyb20sIHRvLCBjb29yZHMpO1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyhjb29yZHMpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG4gICAga2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmICgodHlwZW9mIGZyb20ubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZnJvbS5uYW1lID09PSAnZ2VvY2VudCcpIHx8ICh0eXBlb2YgdG8ubmFtZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdG8ubmFtZSA9PT0gJ2dlb2NlbnQnKSkge1xuICAgICAgICBpZiAoa2V5ID09PSAneCcgfHwga2V5ID09PSAneScgfHwga2V5ID09PSAneicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChrZXkgPT09ICd4JyB8fCBrZXkgPT09ICd5Jykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0W2tleV0gPSBjb29yZHNba2V5XTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvaihpdGVtKSB7XG4gIGlmIChpdGVtIGluc3RhbmNlb2YgcHJvaikge1xuICAgIHJldHVybiBpdGVtO1xuICB9XG4gIGlmIChpdGVtLm9Qcm9qKSB7XG4gICAgcmV0dXJuIGl0ZW0ub1Byb2o7XG4gIH1cbiAgcmV0dXJuIHByb2ooaXRlbSk7XG59XG5cbmZ1bmN0aW9uIHByb2o0KGZyb21Qcm9qLCB0b1Byb2osIGNvb3JkKSB7XG4gIGZyb21Qcm9qID0gY2hlY2tQcm9qKGZyb21Qcm9qKTtcbiAgdmFyIHNpbmdsZSA9IGZhbHNlO1xuICB2YXIgb2JqO1xuICBpZiAodHlwZW9mIHRvUHJvaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0b1Byb2ogPSBmcm9tUHJvajtcbiAgICBmcm9tUHJvaiA9IHdnczg0O1xuICAgIHNpbmdsZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAodHlwZW9mIHRvUHJvai54ICE9PSAndW5kZWZpbmVkJyB8fCBBcnJheS5pc0FycmF5KHRvUHJvaikpIHtcbiAgICBjb29yZCA9IHRvUHJvajtcbiAgICB0b1Byb2ogPSBmcm9tUHJvajtcbiAgICBmcm9tUHJvaiA9IHdnczg0O1xuICAgIHNpbmdsZSA9IHRydWU7XG4gIH1cbiAgdG9Qcm9qID0gY2hlY2tQcm9qKHRvUHJvaik7XG4gIGlmIChjb29yZCkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1lcihmcm9tUHJvaiwgdG9Qcm9qLCBjb29yZCk7XG4gIH0gZWxzZSB7XG4gICAgb2JqID0ge1xuICAgICAgZm9yd2FyZDogZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtZXIoZnJvbVByb2osIHRvUHJvaiwgY29vcmRzKTtcbiAgICAgIH0sXG4gICAgICBpbnZlcnNlOiBmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1lcih0b1Byb2osIGZyb21Qcm9qLCBjb29yZHMpO1xuICAgICAgfVxuICAgIH07XG4gICAgaWYgKHNpbmdsZSkge1xuICAgICAgb2JqLm9Qcm9qID0gdG9Qcm9qO1xuICAgIH1cbiAgICByZXR1cm4gb2JqO1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBwcm9qNDsiLCJcblxuXG4vKipcbiAqIFVUTSB6b25lcyBhcmUgZ3JvdXBlZCwgYW5kIGFzc2lnbmVkIHRvIG9uZSBvZiBhIGdyb3VwIG9mIDZcbiAqIHNldHMuXG4gKlxuICoge2ludH0gQHByaXZhdGVcbiAqL1xudmFyIE5VTV8xMDBLX1NFVFMgPSA2O1xuXG4vKipcbiAqIFRoZSBjb2x1bW4gbGV0dGVycyAoZm9yIGVhc3RpbmcpIG9mIHRoZSBsb3dlciBsZWZ0IHZhbHVlLCBwZXJcbiAqIHNldC5cbiAqXG4gKiB7c3RyaW5nfSBAcHJpdmF0ZVxuICovXG52YXIgU0VUX09SSUdJTl9DT0xVTU5fTEVUVEVSUyA9ICdBSlNBSlMnO1xuXG4vKipcbiAqIFRoZSByb3cgbGV0dGVycyAoZm9yIG5vcnRoaW5nKSBvZiB0aGUgbG93ZXIgbGVmdCB2YWx1ZSwgcGVyXG4gKiBzZXQuXG4gKlxuICoge3N0cmluZ30gQHByaXZhdGVcbiAqL1xudmFyIFNFVF9PUklHSU5fUk9XX0xFVFRFUlMgPSAnQUZBRkFGJztcblxudmFyIEEgPSA2NTsgLy8gQVxudmFyIEkgPSA3MzsgLy8gSVxudmFyIE8gPSA3OTsgLy8gT1xudmFyIFYgPSA4NjsgLy8gVlxudmFyIFogPSA5MDsgLy8gWlxuZXhwb3J0IGRlZmF1bHQge1xuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICB0b1BvaW50OiB0b1BvaW50XG59O1xuLyoqXG4gKiBDb252ZXJzaW9uIG9mIGxhdC9sb24gdG8gTUdSUy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbGwgT2JqZWN0IGxpdGVyYWwgd2l0aCBsYXQgYW5kIGxvbiBwcm9wZXJ0aWVzIG9uIGFcbiAqICAgICBXR1M4NCBlbGxpcHNvaWQuXG4gKiBAcGFyYW0ge2ludH0gYWNjdXJhY3kgQWNjdXJhY3kgaW4gZGlnaXRzICg1IGZvciAxIG0sIDQgZm9yIDEwIG0sIDMgZm9yXG4gKiAgICAgIDEwMCBtLCAyIGZvciAxMDAwIG0gb3IgMSBmb3IgMTAwMDAgbSkuIE9wdGlvbmFsLCBkZWZhdWx0IGlzIDUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBNR1JTIHN0cmluZyBmb3IgdGhlIGdpdmVuIGxvY2F0aW9uIGFuZCBhY2N1cmFjeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQobGwsIGFjY3VyYWN5KSB7XG4gIGFjY3VyYWN5ID0gYWNjdXJhY3kgfHwgNTsgLy8gZGVmYXVsdCBhY2N1cmFjeSAxbVxuICByZXR1cm4gZW5jb2RlKExMdG9VVE0oe1xuICAgIGxhdDogbGxbMV0sXG4gICAgbG9uOiBsbFswXVxuICB9KSwgYWNjdXJhY3kpO1xufTtcblxuLyoqXG4gKiBDb252ZXJzaW9uIG9mIE1HUlMgdG8gbGF0L2xvbi5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWdycyBNR1JTIHN0cmluZy5cbiAqIEByZXR1cm4ge2FycmF5fSBBbiBhcnJheSB3aXRoIGxlZnQgKGxvbmdpdHVkZSksIGJvdHRvbSAobGF0aXR1ZGUpLCByaWdodFxuICogICAgIChsb25naXR1ZGUpIGFuZCB0b3AgKGxhdGl0dWRlKSB2YWx1ZXMgaW4gV0dTODQsIHJlcHJlc2VudGluZyB0aGVcbiAqICAgICBib3VuZGluZyBib3ggZm9yIHRoZSBwcm92aWRlZCBNR1JTIHJlZmVyZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UobWdycykge1xuICB2YXIgYmJveCA9IFVUTXRvTEwoZGVjb2RlKG1ncnMudG9VcHBlckNhc2UoKSkpO1xuICBpZiAoYmJveC5sYXQgJiYgYmJveC5sb24pIHtcbiAgICByZXR1cm4gW2Jib3gubG9uLCBiYm94LmxhdCwgYmJveC5sb24sIGJib3gubGF0XTtcbiAgfVxuICByZXR1cm4gW2Jib3gubGVmdCwgYmJveC5ib3R0b20sIGJib3gucmlnaHQsIGJib3gudG9wXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1BvaW50KG1ncnMpIHtcbiAgdmFyIGJib3ggPSBVVE10b0xMKGRlY29kZShtZ3JzLnRvVXBwZXJDYXNlKCkpKTtcbiAgaWYgKGJib3gubGF0ICYmIGJib3gubG9uKSB7XG4gICAgcmV0dXJuIFtiYm94LmxvbiwgYmJveC5sYXRdO1xuICB9XG4gIHJldHVybiBbKGJib3gubGVmdCArIGJib3gucmlnaHQpIC8gMiwgKGJib3gudG9wICsgYmJveC5ib3R0b20pIC8gMl07XG59O1xuLyoqXG4gKiBDb252ZXJzaW9uIGZyb20gZGVncmVlcyB0byByYWRpYW5zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gZGVnIHRoZSBhbmdsZSBpbiBkZWdyZWVzLlxuICogQHJldHVybiB7bnVtYmVyfSB0aGUgYW5nbGUgaW4gcmFkaWFucy5cbiAqL1xuZnVuY3Rpb24gZGVnVG9SYWQoZGVnKSB7XG4gIHJldHVybiAoZGVnICogKE1hdGguUEkgLyAxODAuMCkpO1xufVxuXG4vKipcbiAqIENvbnZlcnNpb24gZnJvbSByYWRpYW5zIHRvIGRlZ3JlZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWQgdGhlIGFuZ2xlIGluIHJhZGlhbnMuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBhbmdsZSBpbiBkZWdyZWVzLlxuICovXG5mdW5jdGlvbiByYWRUb0RlZyhyYWQpIHtcbiAgcmV0dXJuICgxODAuMCAqIChyYWQgLyBNYXRoLlBJKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzZXQgb2YgTG9uZ2l0dWRlIGFuZCBMYXRpdHVkZSBjby1vcmRpbmF0ZXMgdG8gVVRNXG4gKiB1c2luZyB0aGUgV0dTODQgZWxsaXBzb2lkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gbGwgT2JqZWN0IGxpdGVyYWwgd2l0aCBsYXQgYW5kIGxvbiBwcm9wZXJ0aWVzXG4gKiAgICAgcmVwcmVzZW50aW5nIHRoZSBXR1M4NCBjb29yZGluYXRlIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGxpdGVyYWwgY29udGFpbmluZyB0aGUgVVRNIHZhbHVlIHdpdGggZWFzdGluZyxcbiAqICAgICBub3J0aGluZywgem9uZU51bWJlciBhbmQgem9uZUxldHRlciBwcm9wZXJ0aWVzLCBhbmQgYW4gb3B0aW9uYWxcbiAqICAgICBhY2N1cmFjeSBwcm9wZXJ0eSBpbiBkaWdpdHMuIFJldHVybnMgbnVsbCBpZiB0aGUgY29udmVyc2lvbiBmYWlsZWQuXG4gKi9cbmZ1bmN0aW9uIExMdG9VVE0obGwpIHtcbiAgdmFyIExhdCA9IGxsLmxhdDtcbiAgdmFyIExvbmcgPSBsbC5sb247XG4gIHZhciBhID0gNjM3ODEzNy4wOyAvL2VsbGlwLnJhZGl1cztcbiAgdmFyIGVjY1NxdWFyZWQgPSAwLjAwNjY5NDM4OyAvL2VsbGlwLmVjY3NxO1xuICB2YXIgazAgPSAwLjk5OTY7XG4gIHZhciBMb25nT3JpZ2luO1xuICB2YXIgZWNjUHJpbWVTcXVhcmVkO1xuICB2YXIgTiwgVCwgQywgQSwgTTtcbiAgdmFyIExhdFJhZCA9IGRlZ1RvUmFkKExhdCk7XG4gIHZhciBMb25nUmFkID0gZGVnVG9SYWQoTG9uZyk7XG4gIHZhciBMb25nT3JpZ2luUmFkO1xuICB2YXIgWm9uZU51bWJlcjtcbiAgLy8gKGludClcbiAgWm9uZU51bWJlciA9IE1hdGguZmxvb3IoKExvbmcgKyAxODApIC8gNikgKyAxO1xuXG4gIC8vTWFrZSBzdXJlIHRoZSBsb25naXR1ZGUgMTgwLjAwIGlzIGluIFpvbmUgNjBcbiAgaWYgKExvbmcgPT09IDE4MCkge1xuICAgIFpvbmVOdW1iZXIgPSA2MDtcbiAgfVxuXG4gIC8vIFNwZWNpYWwgem9uZSBmb3IgTm9yd2F5XG4gIGlmIChMYXQgPj0gNTYuMCAmJiBMYXQgPCA2NC4wICYmIExvbmcgPj0gMy4wICYmIExvbmcgPCAxMi4wKSB7XG4gICAgWm9uZU51bWJlciA9IDMyO1xuICB9XG5cbiAgLy8gU3BlY2lhbCB6b25lcyBmb3IgU3ZhbGJhcmRcbiAgaWYgKExhdCA+PSA3Mi4wICYmIExhdCA8IDg0LjApIHtcbiAgICBpZiAoTG9uZyA+PSAwLjAgJiYgTG9uZyA8IDkuMCkge1xuICAgICAgWm9uZU51bWJlciA9IDMxO1xuICAgIH1cbiAgICBlbHNlIGlmIChMb25nID49IDkuMCAmJiBMb25nIDwgMjEuMCkge1xuICAgICAgWm9uZU51bWJlciA9IDMzO1xuICAgIH1cbiAgICBlbHNlIGlmIChMb25nID49IDIxLjAgJiYgTG9uZyA8IDMzLjApIHtcbiAgICAgIFpvbmVOdW1iZXIgPSAzNTtcbiAgICB9XG4gICAgZWxzZSBpZiAoTG9uZyA+PSAzMy4wICYmIExvbmcgPCA0Mi4wKSB7XG4gICAgICBab25lTnVtYmVyID0gMzc7XG4gICAgfVxuICB9XG5cbiAgTG9uZ09yaWdpbiA9IChab25lTnVtYmVyIC0gMSkgKiA2IC0gMTgwICsgMzsgLy8rMyBwdXRzIG9yaWdpblxuICAvLyBpbiBtaWRkbGUgb2ZcbiAgLy8gem9uZVxuICBMb25nT3JpZ2luUmFkID0gZGVnVG9SYWQoTG9uZ09yaWdpbik7XG5cbiAgZWNjUHJpbWVTcXVhcmVkID0gKGVjY1NxdWFyZWQpIC8gKDEgLSBlY2NTcXVhcmVkKTtcblxuICBOID0gYSAvIE1hdGguc3FydCgxIC0gZWNjU3F1YXJlZCAqIE1hdGguc2luKExhdFJhZCkgKiBNYXRoLnNpbihMYXRSYWQpKTtcbiAgVCA9IE1hdGgudGFuKExhdFJhZCkgKiBNYXRoLnRhbihMYXRSYWQpO1xuICBDID0gZWNjUHJpbWVTcXVhcmVkICogTWF0aC5jb3MoTGF0UmFkKSAqIE1hdGguY29zKExhdFJhZCk7XG4gIEEgPSBNYXRoLmNvcyhMYXRSYWQpICogKExvbmdSYWQgLSBMb25nT3JpZ2luUmFkKTtcblxuICBNID0gYSAqICgoMSAtIGVjY1NxdWFyZWQgLyA0IC0gMyAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gNjQgLSA1ICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMjU2KSAqIExhdFJhZCAtICgzICogZWNjU3F1YXJlZCAvIDggKyAzICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgLyAzMiArIDQ1ICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMTAyNCkgKiBNYXRoLnNpbigyICogTGF0UmFkKSArICgxNSAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMjU2ICsgNDUgKiBlY2NTcXVhcmVkICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgLyAxMDI0KSAqIE1hdGguc2luKDQgKiBMYXRSYWQpIC0gKDM1ICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMzA3MikgKiBNYXRoLnNpbig2ICogTGF0UmFkKSk7XG5cbiAgdmFyIFVUTUVhc3RpbmcgPSAoazAgKiBOICogKEEgKyAoMSAtIFQgKyBDKSAqIEEgKiBBICogQSAvIDYuMCArICg1IC0gMTggKiBUICsgVCAqIFQgKyA3MiAqIEMgLSA1OCAqIGVjY1ByaW1lU3F1YXJlZCkgKiBBICogQSAqIEEgKiBBICogQSAvIDEyMC4wKSArIDUwMDAwMC4wKTtcblxuICB2YXIgVVRNTm9ydGhpbmcgPSAoazAgKiAoTSArIE4gKiBNYXRoLnRhbihMYXRSYWQpICogKEEgKiBBIC8gMiArICg1IC0gVCArIDkgKiBDICsgNCAqIEMgKiBDKSAqIEEgKiBBICogQSAqIEEgLyAyNC4wICsgKDYxIC0gNTggKiBUICsgVCAqIFQgKyA2MDAgKiBDIC0gMzMwICogZWNjUHJpbWVTcXVhcmVkKSAqIEEgKiBBICogQSAqIEEgKiBBICogQSAvIDcyMC4wKSkpO1xuICBpZiAoTGF0IDwgMC4wKSB7XG4gICAgVVRNTm9ydGhpbmcgKz0gMTAwMDAwMDAuMDsgLy8xMDAwMDAwMCBtZXRlciBvZmZzZXQgZm9yXG4gICAgLy8gc291dGhlcm4gaGVtaXNwaGVyZVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBub3J0aGluZzogTWF0aC5yb3VuZChVVE1Ob3J0aGluZyksXG4gICAgZWFzdGluZzogTWF0aC5yb3VuZChVVE1FYXN0aW5nKSxcbiAgICB6b25lTnVtYmVyOiBab25lTnVtYmVyLFxuICAgIHpvbmVMZXR0ZXI6IGdldExldHRlckRlc2lnbmF0b3IoTGF0KVxuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIFVUTSBjb29yZHMgdG8gbGF0L2xvbmcsIHVzaW5nIHRoZSBXR1M4NCBlbGxpcHNvaWQuIFRoaXMgaXMgYSBjb252ZW5pZW5jZVxuICogY2xhc3Mgd2hlcmUgdGhlIFpvbmUgY2FuIGJlIHNwZWNpZmllZCBhcyBhIHNpbmdsZSBzdHJpbmcgZWcuXCI2ME5cIiB3aGljaFxuICogaXMgdGhlbiBicm9rZW4gZG93biBpbnRvIHRoZSBab25lTnVtYmVyIGFuZCBab25lTGV0dGVyLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge29iamVjdH0gdXRtIEFuIG9iamVjdCBsaXRlcmFsIHdpdGggbm9ydGhpbmcsIGVhc3RpbmcsIHpvbmVOdW1iZXJcbiAqICAgICBhbmQgem9uZUxldHRlciBwcm9wZXJ0aWVzLiBJZiBhbiBvcHRpb25hbCBhY2N1cmFjeSBwcm9wZXJ0eSBpc1xuICogICAgIHByb3ZpZGVkIChpbiBtZXRlcnMpLCBhIGJvdW5kaW5nIGJveCB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2ZcbiAqICAgICBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlLlxuICogQHJldHVybiB7b2JqZWN0fSBBbiBvYmplY3QgbGl0ZXJhbCBjb250YWluaW5nIGVpdGhlciBsYXQgYW5kIGxvbiB2YWx1ZXNcbiAqICAgICAoaWYgbm8gYWNjdXJhY3kgd2FzIHByb3ZpZGVkKSwgb3IgdG9wLCByaWdodCwgYm90dG9tIGFuZCBsZWZ0IHZhbHVlc1xuICogICAgIGZvciB0aGUgYm91bmRpbmcgYm94IGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBwcm92aWRlZCBhY2N1cmFjeS5cbiAqICAgICBSZXR1cm5zIG51bGwgaWYgdGhlIGNvbnZlcnNpb24gZmFpbGVkLlxuICovXG5mdW5jdGlvbiBVVE10b0xMKHV0bSkge1xuXG4gIHZhciBVVE1Ob3J0aGluZyA9IHV0bS5ub3J0aGluZztcbiAgdmFyIFVUTUVhc3RpbmcgPSB1dG0uZWFzdGluZztcbiAgdmFyIHpvbmVMZXR0ZXIgPSB1dG0uem9uZUxldHRlcjtcbiAgdmFyIHpvbmVOdW1iZXIgPSB1dG0uem9uZU51bWJlcjtcbiAgLy8gY2hlY2sgdGhlIFpvbmVOdW1tYmVyIGlzIHZhbGlkXG4gIGlmICh6b25lTnVtYmVyIDwgMCB8fCB6b25lTnVtYmVyID4gNjApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBrMCA9IDAuOTk5NjtcbiAgdmFyIGEgPSA2Mzc4MTM3LjA7IC8vZWxsaXAucmFkaXVzO1xuICB2YXIgZWNjU3F1YXJlZCA9IDAuMDA2Njk0Mzg7IC8vZWxsaXAuZWNjc3E7XG4gIHZhciBlY2NQcmltZVNxdWFyZWQ7XG4gIHZhciBlMSA9ICgxIC0gTWF0aC5zcXJ0KDEgLSBlY2NTcXVhcmVkKSkgLyAoMSArIE1hdGguc3FydCgxIC0gZWNjU3F1YXJlZCkpO1xuICB2YXIgTjEsIFQxLCBDMSwgUjEsIEQsIE07XG4gIHZhciBMb25nT3JpZ2luO1xuICB2YXIgbXUsIHBoaTFSYWQ7XG5cbiAgLy8gcmVtb3ZlIDUwMCwwMDAgbWV0ZXIgb2Zmc2V0IGZvciBsb25naXR1ZGVcbiAgdmFyIHggPSBVVE1FYXN0aW5nIC0gNTAwMDAwLjA7XG4gIHZhciB5ID0gVVRNTm9ydGhpbmc7XG5cbiAgLy8gV2UgbXVzdCBrbm93IHNvbWVob3cgaWYgd2UgYXJlIGluIHRoZSBOb3J0aGVybiBvciBTb3V0aGVyblxuICAvLyBoZW1pc3BoZXJlLCB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2UgdXNlIHRoZSBsZXR0ZXIgU28gZXZlblxuICAvLyBpZiB0aGUgWm9uZSBsZXR0ZXIgaXNuJ3QgZXhhY3RseSBjb3JyZWN0IGl0IHNob3VsZCBpbmRpY2F0ZVxuICAvLyB0aGUgaGVtaXNwaGVyZSBjb3JyZWN0bHlcbiAgaWYgKHpvbmVMZXR0ZXIgPCAnTicpIHtcbiAgICB5IC09IDEwMDAwMDAwLjA7IC8vIHJlbW92ZSAxMCwwMDAsMDAwIG1ldGVyIG9mZnNldCB1c2VkXG4gICAgLy8gZm9yIHNvdXRoZXJuIGhlbWlzcGhlcmVcbiAgfVxuXG4gIC8vIFRoZXJlIGFyZSA2MCB6b25lcyB3aXRoIHpvbmUgMSBiZWluZyBhdCBXZXN0IC0xODAgdG8gLTE3NFxuICBMb25nT3JpZ2luID0gKHpvbmVOdW1iZXIgLSAxKSAqIDYgLSAxODAgKyAzOyAvLyArMyBwdXRzIG9yaWdpblxuICAvLyBpbiBtaWRkbGUgb2ZcbiAgLy8gem9uZVxuXG4gIGVjY1ByaW1lU3F1YXJlZCA9IChlY2NTcXVhcmVkKSAvICgxIC0gZWNjU3F1YXJlZCk7XG5cbiAgTSA9IHkgLyBrMDtcbiAgbXUgPSBNIC8gKGEgKiAoMSAtIGVjY1NxdWFyZWQgLyA0IC0gMyAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gNjQgLSA1ICogZWNjU3F1YXJlZCAqIGVjY1NxdWFyZWQgKiBlY2NTcXVhcmVkIC8gMjU2KSk7XG5cbiAgcGhpMVJhZCA9IG11ICsgKDMgKiBlMSAvIDIgLSAyNyAqIGUxICogZTEgKiBlMSAvIDMyKSAqIE1hdGguc2luKDIgKiBtdSkgKyAoMjEgKiBlMSAqIGUxIC8gMTYgLSA1NSAqIGUxICogZTEgKiBlMSAqIGUxIC8gMzIpICogTWF0aC5zaW4oNCAqIG11KSArICgxNTEgKiBlMSAqIGUxICogZTEgLyA5NikgKiBNYXRoLnNpbig2ICogbXUpO1xuICAvLyBkb3VibGUgcGhpMSA9IFByb2pNYXRoLnJhZFRvRGVnKHBoaTFSYWQpO1xuXG4gIE4xID0gYSAvIE1hdGguc3FydCgxIC0gZWNjU3F1YXJlZCAqIE1hdGguc2luKHBoaTFSYWQpICogTWF0aC5zaW4ocGhpMVJhZCkpO1xuICBUMSA9IE1hdGgudGFuKHBoaTFSYWQpICogTWF0aC50YW4ocGhpMVJhZCk7XG4gIEMxID0gZWNjUHJpbWVTcXVhcmVkICogTWF0aC5jb3MocGhpMVJhZCkgKiBNYXRoLmNvcyhwaGkxUmFkKTtcbiAgUjEgPSBhICogKDEgLSBlY2NTcXVhcmVkKSAvIE1hdGgucG93KDEgLSBlY2NTcXVhcmVkICogTWF0aC5zaW4ocGhpMVJhZCkgKiBNYXRoLnNpbihwaGkxUmFkKSwgMS41KTtcbiAgRCA9IHggLyAoTjEgKiBrMCk7XG5cbiAgdmFyIGxhdCA9IHBoaTFSYWQgLSAoTjEgKiBNYXRoLnRhbihwaGkxUmFkKSAvIFIxKSAqIChEICogRCAvIDIgLSAoNSArIDMgKiBUMSArIDEwICogQzEgLSA0ICogQzEgKiBDMSAtIDkgKiBlY2NQcmltZVNxdWFyZWQpICogRCAqIEQgKiBEICogRCAvIDI0ICsgKDYxICsgOTAgKiBUMSArIDI5OCAqIEMxICsgNDUgKiBUMSAqIFQxIC0gMjUyICogZWNjUHJpbWVTcXVhcmVkIC0gMyAqIEMxICogQzEpICogRCAqIEQgKiBEICogRCAqIEQgKiBEIC8gNzIwKTtcbiAgbGF0ID0gcmFkVG9EZWcobGF0KTtcblxuICB2YXIgbG9uID0gKEQgLSAoMSArIDIgKiBUMSArIEMxKSAqIEQgKiBEICogRCAvIDYgKyAoNSAtIDIgKiBDMSArIDI4ICogVDEgLSAzICogQzEgKiBDMSArIDggKiBlY2NQcmltZVNxdWFyZWQgKyAyNCAqIFQxICogVDEpICogRCAqIEQgKiBEICogRCAqIEQgLyAxMjApIC8gTWF0aC5jb3MocGhpMVJhZCk7XG4gIGxvbiA9IExvbmdPcmlnaW4gKyByYWRUb0RlZyhsb24pO1xuXG4gIHZhciByZXN1bHQ7XG4gIGlmICh1dG0uYWNjdXJhY3kpIHtcbiAgICB2YXIgdG9wUmlnaHQgPSBVVE10b0xMKHtcbiAgICAgIG5vcnRoaW5nOiB1dG0ubm9ydGhpbmcgKyB1dG0uYWNjdXJhY3ksXG4gICAgICBlYXN0aW5nOiB1dG0uZWFzdGluZyArIHV0bS5hY2N1cmFjeSxcbiAgICAgIHpvbmVMZXR0ZXI6IHV0bS56b25lTGV0dGVyLFxuICAgICAgem9uZU51bWJlcjogdXRtLnpvbmVOdW1iZXJcbiAgICB9KTtcbiAgICByZXN1bHQgPSB7XG4gICAgICB0b3A6IHRvcFJpZ2h0LmxhdCxcbiAgICAgIHJpZ2h0OiB0b3BSaWdodC5sb24sXG4gICAgICBib3R0b206IGxhdCxcbiAgICAgIGxlZnQ6IGxvblxuICAgIH07XG4gIH1cbiAgZWxzZSB7XG4gICAgcmVzdWx0ID0ge1xuICAgICAgbGF0OiBsYXQsXG4gICAgICBsb246IGxvblxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGVzIHRoZSBNR1JTIGxldHRlciBkZXNpZ25hdG9yIGZvciB0aGUgZ2l2ZW4gbGF0aXR1ZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsYXQgVGhlIGxhdGl0dWRlIGluIFdHUzg0IHRvIGdldCB0aGUgbGV0dGVyIGRlc2lnbmF0b3JcbiAqICAgICBmb3IuXG4gKiBAcmV0dXJuIHtjaGFyfSBUaGUgbGV0dGVyIGRlc2lnbmF0b3IuXG4gKi9cbmZ1bmN0aW9uIGdldExldHRlckRlc2lnbmF0b3IobGF0KSB7XG4gIC8vVGhpcyBpcyBoZXJlIGFzIGFuIGVycm9yIGZsYWcgdG8gc2hvdyB0aGF0IHRoZSBMYXRpdHVkZSBpc1xuICAvL291dHNpZGUgTUdSUyBsaW1pdHNcbiAgdmFyIExldHRlckRlc2lnbmF0b3IgPSAnWic7XG5cbiAgaWYgKCg4NCA+PSBsYXQpICYmIChsYXQgPj0gNzIpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdYJztcbiAgfVxuICBlbHNlIGlmICgoNzIgPiBsYXQpICYmIChsYXQgPj0gNjQpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdXJztcbiAgfVxuICBlbHNlIGlmICgoNjQgPiBsYXQpICYmIChsYXQgPj0gNTYpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdWJztcbiAgfVxuICBlbHNlIGlmICgoNTYgPiBsYXQpICYmIChsYXQgPj0gNDgpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdVJztcbiAgfVxuICBlbHNlIGlmICgoNDggPiBsYXQpICYmIChsYXQgPj0gNDApKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdUJztcbiAgfVxuICBlbHNlIGlmICgoNDAgPiBsYXQpICYmIChsYXQgPj0gMzIpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdTJztcbiAgfVxuICBlbHNlIGlmICgoMzIgPiBsYXQpICYmIChsYXQgPj0gMjQpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdSJztcbiAgfVxuICBlbHNlIGlmICgoMjQgPiBsYXQpICYmIChsYXQgPj0gMTYpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdRJztcbiAgfVxuICBlbHNlIGlmICgoMTYgPiBsYXQpICYmIChsYXQgPj0gOCkpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ1AnO1xuICB9XG4gIGVsc2UgaWYgKCg4ID4gbGF0KSAmJiAobGF0ID49IDApKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdOJztcbiAgfVxuICBlbHNlIGlmICgoMCA+IGxhdCkgJiYgKGxhdCA+PSAtOCkpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ00nO1xuICB9XG4gIGVsc2UgaWYgKCgtOCA+IGxhdCkgJiYgKGxhdCA+PSAtMTYpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdMJztcbiAgfVxuICBlbHNlIGlmICgoLTE2ID4gbGF0KSAmJiAobGF0ID49IC0yNCkpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ0snO1xuICB9XG4gIGVsc2UgaWYgKCgtMjQgPiBsYXQpICYmIChsYXQgPj0gLTMyKSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnSic7XG4gIH1cbiAgZWxzZSBpZiAoKC0zMiA+IGxhdCkgJiYgKGxhdCA+PSAtNDApKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdIJztcbiAgfVxuICBlbHNlIGlmICgoLTQwID4gbGF0KSAmJiAobGF0ID49IC00OCkpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ0cnO1xuICB9XG4gIGVsc2UgaWYgKCgtNDggPiBsYXQpICYmIChsYXQgPj0gLTU2KSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnRic7XG4gIH1cbiAgZWxzZSBpZiAoKC01NiA+IGxhdCkgJiYgKGxhdCA+PSAtNjQpKSB7XG4gICAgTGV0dGVyRGVzaWduYXRvciA9ICdFJztcbiAgfVxuICBlbHNlIGlmICgoLTY0ID4gbGF0KSAmJiAobGF0ID49IC03MikpIHtcbiAgICBMZXR0ZXJEZXNpZ25hdG9yID0gJ0QnO1xuICB9XG4gIGVsc2UgaWYgKCgtNzIgPiBsYXQpICYmIChsYXQgPj0gLTgwKSkge1xuICAgIExldHRlckRlc2lnbmF0b3IgPSAnQyc7XG4gIH1cbiAgcmV0dXJuIExldHRlckRlc2lnbmF0b3I7XG59XG5cbi8qKlxuICogRW5jb2RlcyBhIFVUTSBsb2NhdGlvbiBhcyBNR1JTIHN0cmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtvYmplY3R9IHV0bSBBbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGVhc3RpbmcsIG5vcnRoaW5nLFxuICogICAgIHpvbmVMZXR0ZXIsIHpvbmVOdW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBhY2N1cmFjeSBBY2N1cmFjeSBpbiBkaWdpdHMgKDEtNSkuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE1HUlMgc3RyaW5nIGZvciB0aGUgZ2l2ZW4gVVRNIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodXRtLCBhY2N1cmFjeSkge1xuICAvLyBwcmVwZW5kIHdpdGggbGVhZGluZyB6ZXJvZXNcbiAgdmFyIHNlYXN0aW5nID0gXCIwMDAwMFwiICsgdXRtLmVhc3RpbmcsXG4gICAgc25vcnRoaW5nID0gXCIwMDAwMFwiICsgdXRtLm5vcnRoaW5nO1xuXG4gIHJldHVybiB1dG0uem9uZU51bWJlciArIHV0bS56b25lTGV0dGVyICsgZ2V0MTAwa0lEKHV0bS5lYXN0aW5nLCB1dG0ubm9ydGhpbmcsIHV0bS56b25lTnVtYmVyKSArIHNlYXN0aW5nLnN1YnN0cihzZWFzdGluZy5sZW5ndGggLSA1LCBhY2N1cmFjeSkgKyBzbm9ydGhpbmcuc3Vic3RyKHNub3J0aGluZy5sZW5ndGggLSA1LCBhY2N1cmFjeSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB0d28gbGV0dGVyIDEwMGsgZGVzaWduYXRvciBmb3IgYSBnaXZlbiBVVE0gZWFzdGluZyxcbiAqIG5vcnRoaW5nIGFuZCB6b25lIG51bWJlciB2YWx1ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGVhc3RpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfSBub3J0aGluZ1xuICogQHBhcmFtIHtudW1iZXJ9IHpvbmVOdW1iZXJcbiAqIEByZXR1cm4gdGhlIHR3byBsZXR0ZXIgMTAwayBkZXNpZ25hdG9yIGZvciB0aGUgZ2l2ZW4gVVRNIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBnZXQxMDBrSUQoZWFzdGluZywgbm9ydGhpbmcsIHpvbmVOdW1iZXIpIHtcbiAgdmFyIHNldFBhcm0gPSBnZXQxMDBrU2V0Rm9yWm9uZSh6b25lTnVtYmVyKTtcbiAgdmFyIHNldENvbHVtbiA9IE1hdGguZmxvb3IoZWFzdGluZyAvIDEwMDAwMCk7XG4gIHZhciBzZXRSb3cgPSBNYXRoLmZsb29yKG5vcnRoaW5nIC8gMTAwMDAwKSAlIDIwO1xuICByZXR1cm4gZ2V0TGV0dGVyMTAwa0lEKHNldENvbHVtbiwgc2V0Um93LCBzZXRQYXJtKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIFVUTSB6b25lIG51bWJlciwgZmlndXJlIG91dCB0aGUgTUdSUyAxMDBLIHNldCBpdCBpcyBpbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGkgQW4gVVRNIHpvbmUgbnVtYmVyLlxuICogQHJldHVybiB7bnVtYmVyfSB0aGUgMTAwayBzZXQgdGhlIFVUTSB6b25lIGlzIGluLlxuICovXG5mdW5jdGlvbiBnZXQxMDBrU2V0Rm9yWm9uZShpKSB7XG4gIHZhciBzZXRQYXJtID0gaSAlIE5VTV8xMDBLX1NFVFM7XG4gIGlmIChzZXRQYXJtID09PSAwKSB7XG4gICAgc2V0UGFybSA9IE5VTV8xMDBLX1NFVFM7XG4gIH1cblxuICByZXR1cm4gc2V0UGFybTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHR3by1sZXR0ZXIgTUdSUyAxMDBrIGRlc2lnbmF0b3IgZ2l2ZW4gaW5mb3JtYXRpb25cbiAqIHRyYW5zbGF0ZWQgZnJvbSB0aGUgVVRNIG5vcnRoaW5nLCBlYXN0aW5nIGFuZCB6b25lIG51bWJlci5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiB0aGUgY29sdW1uIGluZGV4IGFzIGl0IHJlbGF0ZXMgdG8gdGhlIE1HUlNcbiAqICAgICAgICAxMDBrIHNldCBzcHJlYWRzaGVldCwgY3JlYXRlZCBmcm9tIHRoZSBVVE0gZWFzdGluZy5cbiAqICAgICAgICBWYWx1ZXMgYXJlIDEtOC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByb3cgdGhlIHJvdyBpbmRleCBhcyBpdCByZWxhdGVzIHRvIHRoZSBNR1JTIDEwMGsgc2V0XG4gKiAgICAgICAgc3ByZWFkc2hlZXQsIGNyZWF0ZWQgZnJvbSB0aGUgVVRNIG5vcnRoaW5nIHZhbHVlLiBWYWx1ZXNcbiAqICAgICAgICBhcmUgZnJvbSAwLTE5LlxuICogQHBhcmFtIHtudW1iZXJ9IHBhcm0gdGhlIHNldCBibG9jaywgYXMgaXQgcmVsYXRlcyB0byB0aGUgTUdSUyAxMDBrIHNldFxuICogICAgICAgIHNwcmVhZHNoZWV0LCBjcmVhdGVkIGZyb20gdGhlIFVUTSB6b25lLiBWYWx1ZXMgYXJlIGZyb21cbiAqICAgICAgICAxLTYwLlxuICogQHJldHVybiB0d28gbGV0dGVyIE1HUlMgMTAwayBjb2RlLlxuICovXG5mdW5jdGlvbiBnZXRMZXR0ZXIxMDBrSUQoY29sdW1uLCByb3csIHBhcm0pIHtcbiAgLy8gY29sT3JpZ2luIGFuZCByb3dPcmlnaW4gYXJlIHRoZSBsZXR0ZXJzIGF0IHRoZSBvcmlnaW4gb2YgdGhlIHNldFxuICB2YXIgaW5kZXggPSBwYXJtIC0gMTtcbiAgdmFyIGNvbE9yaWdpbiA9IFNFVF9PUklHSU5fQ09MVU1OX0xFVFRFUlMuY2hhckNvZGVBdChpbmRleCk7XG4gIHZhciByb3dPcmlnaW4gPSBTRVRfT1JJR0lOX1JPV19MRVRURVJTLmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gIC8vIGNvbEludCBhbmQgcm93SW50IGFyZSB0aGUgbGV0dGVycyB0byBidWlsZCB0byByZXR1cm5cbiAgdmFyIGNvbEludCA9IGNvbE9yaWdpbiArIGNvbHVtbiAtIDE7XG4gIHZhciByb3dJbnQgPSByb3dPcmlnaW4gKyByb3c7XG4gIHZhciByb2xsb3ZlciA9IGZhbHNlO1xuXG4gIGlmIChjb2xJbnQgPiBaKSB7XG4gICAgY29sSW50ID0gY29sSW50IC0gWiArIEEgLSAxO1xuICAgIHJvbGxvdmVyID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChjb2xJbnQgPT09IEkgfHwgKGNvbE9yaWdpbiA8IEkgJiYgY29sSW50ID4gSSkgfHwgKChjb2xJbnQgPiBJIHx8IGNvbE9yaWdpbiA8IEkpICYmIHJvbGxvdmVyKSkge1xuICAgIGNvbEludCsrO1xuICB9XG5cbiAgaWYgKGNvbEludCA9PT0gTyB8fCAoY29sT3JpZ2luIDwgTyAmJiBjb2xJbnQgPiBPKSB8fCAoKGNvbEludCA+IE8gfHwgY29sT3JpZ2luIDwgTykgJiYgcm9sbG92ZXIpKSB7XG4gICAgY29sSW50Kys7XG5cbiAgICBpZiAoY29sSW50ID09PSBJKSB7XG4gICAgICBjb2xJbnQrKztcbiAgICB9XG4gIH1cblxuICBpZiAoY29sSW50ID4gWikge1xuICAgIGNvbEludCA9IGNvbEludCAtIFogKyBBIC0gMTtcbiAgfVxuXG4gIGlmIChyb3dJbnQgPiBWKSB7XG4gICAgcm93SW50ID0gcm93SW50IC0gViArIEEgLSAxO1xuICAgIHJvbGxvdmVyID0gdHJ1ZTtcbiAgfVxuICBlbHNlIHtcbiAgICByb2xsb3ZlciA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKCgocm93SW50ID09PSBJKSB8fCAoKHJvd09yaWdpbiA8IEkpICYmIChyb3dJbnQgPiBJKSkpIHx8ICgoKHJvd0ludCA+IEkpIHx8IChyb3dPcmlnaW4gPCBJKSkgJiYgcm9sbG92ZXIpKSB7XG4gICAgcm93SW50Kys7XG4gIH1cblxuICBpZiAoKChyb3dJbnQgPT09IE8pIHx8ICgocm93T3JpZ2luIDwgTykgJiYgKHJvd0ludCA+IE8pKSkgfHwgKCgocm93SW50ID4gTykgfHwgKHJvd09yaWdpbiA8IE8pKSAmJiByb2xsb3ZlcikpIHtcbiAgICByb3dJbnQrKztcblxuICAgIGlmIChyb3dJbnQgPT09IEkpIHtcbiAgICAgIHJvd0ludCsrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyb3dJbnQgPiBWKSB7XG4gICAgcm93SW50ID0gcm93SW50IC0gViArIEEgLSAxO1xuICB9XG5cbiAgdmFyIHR3b0xldHRlciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29sSW50KSArIFN0cmluZy5mcm9tQ2hhckNvZGUocm93SW50KTtcbiAgcmV0dXJuIHR3b0xldHRlcjtcbn1cblxuLyoqXG4gKiBEZWNvZGUgdGhlIFVUTSBwYXJhbWV0ZXJzIGZyb20gYSBNR1JTIHN0cmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ncnNTdHJpbmcgYW4gVVBQRVJDQVNFIGNvb3JkaW5hdGUgc3RyaW5nIGlzIGV4cGVjdGVkLlxuICogQHJldHVybiB7b2JqZWN0fSBBbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGVhc3RpbmcsIG5vcnRoaW5nLCB6b25lTGV0dGVyLFxuICogICAgIHpvbmVOdW1iZXIgYW5kIGFjY3VyYWN5IChpbiBtZXRlcnMpIHByb3BlcnRpZXMuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZShtZ3JzU3RyaW5nKSB7XG5cbiAgaWYgKG1ncnNTdHJpbmcgJiYgbWdyc1N0cmluZy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyAoXCJNR1JTUG9pbnQgY292ZXJ0aW5nIGZyb20gbm90aGluZ1wiKTtcbiAgfVxuXG4gIHZhciBsZW5ndGggPSBtZ3JzU3RyaW5nLmxlbmd0aDtcblxuICB2YXIgaHVuSyA9IG51bGw7XG4gIHZhciBzYiA9IFwiXCI7XG4gIHZhciB0ZXN0Q2hhcjtcbiAgdmFyIGkgPSAwO1xuXG4gIC8vIGdldCBab25lIG51bWJlclxuICB3aGlsZSAoISgvW0EtWl0vKS50ZXN0KHRlc3RDaGFyID0gbWdyc1N0cmluZy5jaGFyQXQoaSkpKSB7XG4gICAgaWYgKGkgPj0gMikge1xuICAgICAgdGhyb3cgKFwiTUdSU1BvaW50IGJhZCBjb252ZXJzaW9uIGZyb206IFwiICsgbWdyc1N0cmluZyk7XG4gICAgfVxuICAgIHNiICs9IHRlc3RDaGFyO1xuICAgIGkrKztcbiAgfVxuXG4gIHZhciB6b25lTnVtYmVyID0gcGFyc2VJbnQoc2IsIDEwKTtcblxuICBpZiAoaSA9PT0gMCB8fCBpICsgMyA+IGxlbmd0aCkge1xuICAgIC8vIEEgZ29vZCBNR1JTIHN0cmluZyBoYXMgdG8gYmUgNC01IGRpZ2l0cyBsb25nLFxuICAgIC8vICMjQUFBLyNBQUEgYXQgbGVhc3QuXG4gICAgdGhyb3cgKFwiTUdSU1BvaW50IGJhZCBjb252ZXJzaW9uIGZyb206IFwiICsgbWdyc1N0cmluZyk7XG4gIH1cblxuICB2YXIgem9uZUxldHRlciA9IG1ncnNTdHJpbmcuY2hhckF0KGkrKyk7XG5cbiAgLy8gU2hvdWxkIHdlIGNoZWNrIHRoZSB6b25lIGxldHRlciBoZXJlPyBXaHkgbm90LlxuICBpZiAoem9uZUxldHRlciA8PSAnQScgfHwgem9uZUxldHRlciA9PT0gJ0InIHx8IHpvbmVMZXR0ZXIgPT09ICdZJyB8fCB6b25lTGV0dGVyID49ICdaJyB8fCB6b25lTGV0dGVyID09PSAnSScgfHwgem9uZUxldHRlciA9PT0gJ08nKSB7XG4gICAgdGhyb3cgKFwiTUdSU1BvaW50IHpvbmUgbGV0dGVyIFwiICsgem9uZUxldHRlciArIFwiIG5vdCBoYW5kbGVkOiBcIiArIG1ncnNTdHJpbmcpO1xuICB9XG5cbiAgaHVuSyA9IG1ncnNTdHJpbmcuc3Vic3RyaW5nKGksIGkgKz0gMik7XG5cbiAgdmFyIHNldCA9IGdldDEwMGtTZXRGb3Jab25lKHpvbmVOdW1iZXIpO1xuXG4gIHZhciBlYXN0MTAwayA9IGdldEVhc3RpbmdGcm9tQ2hhcihodW5LLmNoYXJBdCgwKSwgc2V0KTtcbiAgdmFyIG5vcnRoMTAwayA9IGdldE5vcnRoaW5nRnJvbUNoYXIoaHVuSy5jaGFyQXQoMSksIHNldCk7XG5cbiAgLy8gV2UgaGF2ZSBhIGJ1ZyB3aGVyZSB0aGUgbm9ydGhpbmcgbWF5IGJlIDIwMDAwMDAgdG9vIGxvdy5cbiAgLy8gSG93XG4gIC8vIGRvIHdlIGtub3cgd2hlbiB0byByb2xsIG92ZXI/XG5cbiAgd2hpbGUgKG5vcnRoMTAwayA8IGdldE1pbk5vcnRoaW5nKHpvbmVMZXR0ZXIpKSB7XG4gICAgbm9ydGgxMDBrICs9IDIwMDAwMDA7XG4gIH1cblxuICAvLyBjYWxjdWxhdGUgdGhlIGNoYXIgaW5kZXggZm9yIGVhc3Rpbmcvbm9ydGhpbmcgc2VwYXJhdG9yXG4gIHZhciByZW1haW5kZXIgPSBsZW5ndGggLSBpO1xuXG4gIGlmIChyZW1haW5kZXIgJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgKFwiTUdSU1BvaW50IGhhcyB0byBoYXZlIGFuIGV2ZW4gbnVtYmVyIFxcbm9mIGRpZ2l0cyBhZnRlciB0aGUgem9uZSBsZXR0ZXIgYW5kIHR3byAxMDBrbSBsZXR0ZXJzIC0gZnJvbnQgXFxuaGFsZiBmb3IgZWFzdGluZyBtZXRlcnMsIHNlY29uZCBoYWxmIGZvciBcXG5ub3J0aGluZyBtZXRlcnNcIiArIG1ncnNTdHJpbmcpO1xuICB9XG5cbiAgdmFyIHNlcCA9IHJlbWFpbmRlciAvIDI7XG5cbiAgdmFyIHNlcEVhc3RpbmcgPSAwLjA7XG4gIHZhciBzZXBOb3J0aGluZyA9IDAuMDtcbiAgdmFyIGFjY3VyYWN5Qm9udXMsIHNlcEVhc3RpbmdTdHJpbmcsIHNlcE5vcnRoaW5nU3RyaW5nLCBlYXN0aW5nLCBub3J0aGluZztcbiAgaWYgKHNlcCA+IDApIHtcbiAgICBhY2N1cmFjeUJvbnVzID0gMTAwMDAwLjAgLyBNYXRoLnBvdygxMCwgc2VwKTtcbiAgICBzZXBFYXN0aW5nU3RyaW5nID0gbWdyc1N0cmluZy5zdWJzdHJpbmcoaSwgaSArIHNlcCk7XG4gICAgc2VwRWFzdGluZyA9IHBhcnNlRmxvYXQoc2VwRWFzdGluZ1N0cmluZykgKiBhY2N1cmFjeUJvbnVzO1xuICAgIHNlcE5vcnRoaW5nU3RyaW5nID0gbWdyc1N0cmluZy5zdWJzdHJpbmcoaSArIHNlcCk7XG4gICAgc2VwTm9ydGhpbmcgPSBwYXJzZUZsb2F0KHNlcE5vcnRoaW5nU3RyaW5nKSAqIGFjY3VyYWN5Qm9udXM7XG4gIH1cblxuICBlYXN0aW5nID0gc2VwRWFzdGluZyArIGVhc3QxMDBrO1xuICBub3J0aGluZyA9IHNlcE5vcnRoaW5nICsgbm9ydGgxMDBrO1xuXG4gIHJldHVybiB7XG4gICAgZWFzdGluZzogZWFzdGluZyxcbiAgICBub3J0aGluZzogbm9ydGhpbmcsXG4gICAgem9uZUxldHRlcjogem9uZUxldHRlcixcbiAgICB6b25lTnVtYmVyOiB6b25lTnVtYmVyLFxuICAgIGFjY3VyYWN5OiBhY2N1cmFjeUJvbnVzXG4gIH07XG59XG5cbi8qKlxuICogR2l2ZW4gdGhlIGZpcnN0IGxldHRlciBmcm9tIGEgdHdvLWxldHRlciBNR1JTIDEwMGsgem9uZSwgYW5kIGdpdmVuIHRoZVxuICogTUdSUyB0YWJsZSBzZXQgZm9yIHRoZSB6b25lIG51bWJlciwgZmlndXJlIG91dCB0aGUgZWFzdGluZyB2YWx1ZSB0aGF0XG4gKiBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIG90aGVyLCBzZWNvbmRhcnkgZWFzdGluZyB2YWx1ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtjaGFyfSBlIFRoZSBmaXJzdCBsZXR0ZXIgZnJvbSBhIHR3by1sZXR0ZXIgTUdSUyAxMDDCtGsgem9uZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZXQgVGhlIE1HUlMgdGFibGUgc2V0IGZvciB0aGUgem9uZSBudW1iZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBlYXN0aW5nIHZhbHVlIGZvciB0aGUgZ2l2ZW4gbGV0dGVyIGFuZCBzZXQuXG4gKi9cbmZ1bmN0aW9uIGdldEVhc3RpbmdGcm9tQ2hhcihlLCBzZXQpIHtcbiAgLy8gY29sT3JpZ2luIGlzIHRoZSBsZXR0ZXIgYXQgdGhlIG9yaWdpbiBvZiB0aGUgc2V0IGZvciB0aGVcbiAgLy8gY29sdW1uXG4gIHZhciBjdXJDb2wgPSBTRVRfT1JJR0lOX0NPTFVNTl9MRVRURVJTLmNoYXJDb2RlQXQoc2V0IC0gMSk7XG4gIHZhciBlYXN0aW5nVmFsdWUgPSAxMDAwMDAuMDtcbiAgdmFyIHJld2luZE1hcmtlciA9IGZhbHNlO1xuXG4gIHdoaWxlIChjdXJDb2wgIT09IGUuY2hhckNvZGVBdCgwKSkge1xuICAgIGN1ckNvbCsrO1xuICAgIGlmIChjdXJDb2wgPT09IEkpIHtcbiAgICAgIGN1ckNvbCsrO1xuICAgIH1cbiAgICBpZiAoY3VyQ29sID09PSBPKSB7XG4gICAgICBjdXJDb2wrKztcbiAgICB9XG4gICAgaWYgKGN1ckNvbCA+IFopIHtcbiAgICAgIGlmIChyZXdpbmRNYXJrZXIpIHtcbiAgICAgICAgdGhyb3cgKFwiQmFkIGNoYXJhY3RlcjogXCIgKyBlKTtcbiAgICAgIH1cbiAgICAgIGN1ckNvbCA9IEE7XG4gICAgICByZXdpbmRNYXJrZXIgPSB0cnVlO1xuICAgIH1cbiAgICBlYXN0aW5nVmFsdWUgKz0gMTAwMDAwLjA7XG4gIH1cblxuICByZXR1cm4gZWFzdGluZ1ZhbHVlO1xufVxuXG4vKipcbiAqIEdpdmVuIHRoZSBzZWNvbmQgbGV0dGVyIGZyb20gYSB0d28tbGV0dGVyIE1HUlMgMTAwayB6b25lLCBhbmQgZ2l2ZW4gdGhlXG4gKiBNR1JTIHRhYmxlIHNldCBmb3IgdGhlIHpvbmUgbnVtYmVyLCBmaWd1cmUgb3V0IHRoZSBub3J0aGluZyB2YWx1ZSB0aGF0XG4gKiBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIG90aGVyLCBzZWNvbmRhcnkgbm9ydGhpbmcgdmFsdWUuIFlvdSBoYXZlIHRvXG4gKiByZW1lbWJlciB0aGF0IE5vcnRoaW5ncyBhcmUgZGV0ZXJtaW5lZCBmcm9tIHRoZSBlcXVhdG9yLCBhbmQgdGhlIHZlcnRpY2FsXG4gKiBjeWNsZSBvZiBsZXR0ZXJzIG1lYW4gYSAyMDAwMDAwIGFkZGl0aW9uYWwgbm9ydGhpbmcgbWV0ZXJzLiBUaGlzIGhhcHBlbnNcbiAqIGFwcHJveC4gZXZlcnkgMTggZGVncmVlcyBvZiBsYXRpdHVkZS4gVGhpcyBtZXRob2QgZG9lcyAqTk9UKiBjb3VudCBhbnlcbiAqIGFkZGl0aW9uYWwgbm9ydGhpbmdzLiBZb3UgaGF2ZSB0byBmaWd1cmUgb3V0IGhvdyBtYW55IDIwMDAwMDAgbWV0ZXJzIG5lZWRcbiAqIHRvIGJlIGFkZGVkIGZvciB0aGUgem9uZSBsZXR0ZXIgb2YgdGhlIE1HUlMgY29vcmRpbmF0ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtjaGFyfSBuIFNlY29uZCBsZXR0ZXIgb2YgdGhlIE1HUlMgMTAwayB6b25lXG4gKiBAcGFyYW0ge251bWJlcn0gc2V0IFRoZSBNR1JTIHRhYmxlIHNldCBudW1iZXIsIHdoaWNoIGlzIGRlcGVuZGVudCBvbiB0aGVcbiAqICAgICBVVE0gem9uZSBudW1iZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBub3J0aGluZyB2YWx1ZSBmb3IgdGhlIGdpdmVuIGxldHRlciBhbmQgc2V0LlxuICovXG5mdW5jdGlvbiBnZXROb3J0aGluZ0Zyb21DaGFyKG4sIHNldCkge1xuXG4gIGlmIChuID4gJ1YnKSB7XG4gICAgdGhyb3cgKFwiTUdSU1BvaW50IGdpdmVuIGludmFsaWQgTm9ydGhpbmcgXCIgKyBuKTtcbiAgfVxuXG4gIC8vIHJvd09yaWdpbiBpcyB0aGUgbGV0dGVyIGF0IHRoZSBvcmlnaW4gb2YgdGhlIHNldCBmb3IgdGhlXG4gIC8vIGNvbHVtblxuICB2YXIgY3VyUm93ID0gU0VUX09SSUdJTl9ST1dfTEVUVEVSUy5jaGFyQ29kZUF0KHNldCAtIDEpO1xuICB2YXIgbm9ydGhpbmdWYWx1ZSA9IDAuMDtcbiAgdmFyIHJld2luZE1hcmtlciA9IGZhbHNlO1xuXG4gIHdoaWxlIChjdXJSb3cgIT09IG4uY2hhckNvZGVBdCgwKSkge1xuICAgIGN1clJvdysrO1xuICAgIGlmIChjdXJSb3cgPT09IEkpIHtcbiAgICAgIGN1clJvdysrO1xuICAgIH1cbiAgICBpZiAoY3VyUm93ID09PSBPKSB7XG4gICAgICBjdXJSb3crKztcbiAgICB9XG4gICAgLy8gZml4aW5nIGEgYnVnIG1ha2luZyB3aG9sZSBhcHBsaWNhdGlvbiBoYW5nIGluIHRoaXMgbG9vcFxuICAgIC8vIHdoZW4gJ24nIGlzIGEgd3JvbmcgY2hhcmFjdGVyXG4gICAgaWYgKGN1clJvdyA+IFYpIHtcbiAgICAgIGlmIChyZXdpbmRNYXJrZXIpIHsgLy8gbWFraW5nIHN1cmUgdGhhdCB0aGlzIGxvb3AgZW5kc1xuICAgICAgICB0aHJvdyAoXCJCYWQgY2hhcmFjdGVyOiBcIiArIG4pO1xuICAgICAgfVxuICAgICAgY3VyUm93ID0gQTtcbiAgICAgIHJld2luZE1hcmtlciA9IHRydWU7XG4gICAgfVxuICAgIG5vcnRoaW5nVmFsdWUgKz0gMTAwMDAwLjA7XG4gIH1cblxuICByZXR1cm4gbm9ydGhpbmdWYWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gZ2V0TWluTm9ydGhpbmcgcmV0dXJucyB0aGUgbWluaW11bSBub3J0aGluZyB2YWx1ZSBvZiBhIE1HUlNcbiAqIHpvbmUuXG4gKlxuICogUG9ydGVkIGZyb20gR2VvdHJhbnMnIGMgTGF0dGl0dWRlX0JhbmRfVmFsdWUgc3RydWN0dXJlIHRhYmxlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge2NoYXJ9IHpvbmVMZXR0ZXIgVGhlIE1HUlMgem9uZSB0byBnZXQgdGhlIG1pbiBub3J0aGluZyBmb3IuXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldE1pbk5vcnRoaW5nKHpvbmVMZXR0ZXIpIHtcbiAgdmFyIG5vcnRoaW5nO1xuICBzd2l0Y2ggKHpvbmVMZXR0ZXIpIHtcbiAgY2FzZSAnQyc6XG4gICAgbm9ydGhpbmcgPSAxMTAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ0QnOlxuICAgIG5vcnRoaW5nID0gMjAwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdFJzpcbiAgICBub3J0aGluZyA9IDI4MDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnRic6XG4gICAgbm9ydGhpbmcgPSAzNzAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ0cnOlxuICAgIG5vcnRoaW5nID0gNDYwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdIJzpcbiAgICBub3J0aGluZyA9IDU1MDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnSic6XG4gICAgbm9ydGhpbmcgPSA2NDAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ0snOlxuICAgIG5vcnRoaW5nID0gNzMwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdMJzpcbiAgICBub3J0aGluZyA9IDgyMDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnTSc6XG4gICAgbm9ydGhpbmcgPSA5MTAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ04nOlxuICAgIG5vcnRoaW5nID0gMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdQJzpcbiAgICBub3J0aGluZyA9IDgwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdRJzpcbiAgICBub3J0aGluZyA9IDE3MDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnUic6XG4gICAgbm9ydGhpbmcgPSAyNjAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ1MnOlxuICAgIG5vcnRoaW5nID0gMzUwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdUJzpcbiAgICBub3J0aGluZyA9IDQ0MDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnVSc6XG4gICAgbm9ydGhpbmcgPSA1MzAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGNhc2UgJ1YnOlxuICAgIG5vcnRoaW5nID0gNjIwMDAwMC4wO1xuICAgIGJyZWFrO1xuICBjYXNlICdXJzpcbiAgICBub3J0aGluZyA9IDcwMDAwMDAuMDtcbiAgICBicmVhaztcbiAgY2FzZSAnWCc6XG4gICAgbm9ydGhpbmcgPSA3OTAwMDAwLjA7XG4gICAgYnJlYWs7XG4gIGRlZmF1bHQ6XG4gICAgbm9ydGhpbmcgPSAtMS4wO1xuICB9XG4gIGlmIChub3J0aGluZyA+PSAwLjApIHtcbiAgICByZXR1cm4gbm9ydGhpbmc7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgKFwiSW52YWxpZCB6b25lIGxldHRlcjogXCIgKyB6b25lTGV0dGVyKTtcbiAgfVxuXG59XG4iLCJpbXBvcnQge3RvUG9pbnQsIGZvcndhcmR9IGZyb20gJ21ncnMnO1xuXG5mdW5jdGlvbiBQb2ludCh4LCB5LCB6KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQb2ludCkpIHtcbiAgICByZXR1cm4gbmV3IFBvaW50KHgsIHksIHopO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgdGhpcy54ID0geFswXTtcbiAgICB0aGlzLnkgPSB4WzFdO1xuICAgIHRoaXMueiA9IHhbMl0gfHwgMC4wO1xuICB9IGVsc2UgaWYodHlwZW9mIHggPT09ICdvYmplY3QnKSB7XG4gICAgdGhpcy54ID0geC54O1xuICAgIHRoaXMueSA9IHgueTtcbiAgICB0aGlzLnogPSB4LnogfHwgMC4wO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB4ID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgeSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgY29vcmRzID0geC5zcGxpdCgnLCcpO1xuICAgIHRoaXMueCA9IHBhcnNlRmxvYXQoY29vcmRzWzBdLCAxMCk7XG4gICAgdGhpcy55ID0gcGFyc2VGbG9hdChjb29yZHNbMV0sIDEwKTtcbiAgICB0aGlzLnogPSBwYXJzZUZsb2F0KGNvb3Jkc1syXSwgMTApIHx8IDAuMDtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnggPSB4O1xuICAgIHRoaXMueSA9IHk7XG4gICAgdGhpcy56ID0geiB8fCAwLjA7XG4gIH1cbiAgY29uc29sZS53YXJuKCdwcm9qNC5Qb2ludCB3aWxsIGJlIHJlbW92ZWQgaW4gdmVyc2lvbiAzLCB1c2UgcHJvajQudG9Qb2ludCcpO1xufVxuXG5Qb2ludC5mcm9tTUdSUyA9IGZ1bmN0aW9uKG1ncnNTdHIpIHtcbiAgcmV0dXJuIG5ldyBQb2ludCh0b1BvaW50KG1ncnNTdHIpKTtcbn07XG5Qb2ludC5wcm90b3R5cGUudG9NR1JTID0gZnVuY3Rpb24oYWNjdXJhY3kpIHtcbiAgcmV0dXJuIGZvcndhcmQoW3RoaXMueCwgdGhpcy55XSwgYWNjdXJhY3kpO1xufTtcbmV4cG9ydCBkZWZhdWx0IFBvaW50O1xuIiwidmFyIEMwMCA9IDE7XG52YXIgQzAyID0gMC4yNTtcbnZhciBDMDQgPSAwLjA0Njg3NTtcbnZhciBDMDYgPSAwLjAxOTUzMTI1O1xudmFyIEMwOCA9IDAuMDEwNjgxMTUyMzQzNzU7XG52YXIgQzIyID0gMC43NTtcbnZhciBDNDQgPSAwLjQ2ODc1O1xudmFyIEM0NiA9IDAuMDEzMDIwODMzMzMzMzMzMzMzMzM7XG52YXIgQzQ4ID0gMC4wMDcxMjA3NjgyMjkxNjY2NjY2NjtcbnZhciBDNjYgPSAwLjM2NDU4MzMzMzMzMzMzMzMzMzMzO1xudmFyIEM2OCA9IDAuMDA1Njk2NjE0NTgzMzMzMzMzMzM7XG52YXIgQzg4ID0gMC4zMDc2MTcxODc1O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlcykge1xuICB2YXIgZW4gPSBbXTtcbiAgZW5bMF0gPSBDMDAgLSBlcyAqIChDMDIgKyBlcyAqIChDMDQgKyBlcyAqIChDMDYgKyBlcyAqIEMwOCkpKTtcbiAgZW5bMV0gPSBlcyAqIChDMjIgLSBlcyAqIChDMDQgKyBlcyAqIChDMDYgKyBlcyAqIEMwOCkpKTtcbiAgdmFyIHQgPSBlcyAqIGVzO1xuICBlblsyXSA9IHQgKiAoQzQ0IC0gZXMgKiAoQzQ2ICsgZXMgKiBDNDgpKTtcbiAgdCAqPSBlcztcbiAgZW5bM10gPSB0ICogKEM2NiAtIGVzICogQzY4KTtcbiAgZW5bNF0gPSB0ICogZXMgKiBDODg7XG4gIHJldHVybiBlbjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwaGksIHNwaGksIGNwaGksIGVuKSB7XG4gIGNwaGkgKj0gc3BoaTtcbiAgc3BoaSAqPSBzcGhpO1xuICByZXR1cm4gKGVuWzBdICogcGhpIC0gY3BoaSAqIChlblsxXSArIHNwaGkgKiAoZW5bMl0gKyBzcGhpICogKGVuWzNdICsgc3BoaSAqIGVuWzRdKSkpKTtcbn0iLCJpbXBvcnQgcGpfbWxmbiBmcm9tIFwiLi9wal9tbGZuXCI7XG5pbXBvcnQge0VQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxudmFyIE1BWF9JVEVSID0gMjA7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGFyZywgZXMsIGVuKSB7XG4gIHZhciBrID0gMSAvICgxIC0gZXMpO1xuICB2YXIgcGhpID0gYXJnO1xuICBmb3IgKHZhciBpID0gTUFYX0lURVI7IGk7IC0taSkgeyAvKiByYXJlbHkgZ29lcyBvdmVyIDIgaXRlcmF0aW9ucyAqL1xuICAgIHZhciBzID0gTWF0aC5zaW4ocGhpKTtcbiAgICB2YXIgdCA9IDEgLSBlcyAqIHMgKiBzO1xuICAgIC8vdCA9IHRoaXMucGpfbWxmbihwaGksIHMsIE1hdGguY29zKHBoaSksIGVuKSAtIGFyZztcbiAgICAvL3BoaSAtPSB0ICogKHQgKiBNYXRoLnNxcnQodCkpICogaztcbiAgICB0ID0gKHBqX21sZm4ocGhpLCBzLCBNYXRoLmNvcyhwaGkpLCBlbikgLSBhcmcpICogKHQgKiBNYXRoLnNxcnQodCkpICogaztcbiAgICBwaGkgLT0gdDtcbiAgICBpZiAoTWF0aC5hYnModCkgPCBFUFNMTikge1xuICAgICAgcmV0dXJuIHBoaTtcbiAgICB9XG4gIH1cbiAgLy8uLnJlcG9ydEVycm9yKFwiY2Fzczpwal9pbnZfbWxmbjogQ29udmVyZ2VuY2UgZXJyb3JcIik7XG4gIHJldHVybiBwaGk7XG59XG4iLCIvLyBIZWF2aWx5IGJhc2VkIG9uIHRoaXMgdG1lcmMgcHJvamVjdGlvbiBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21ibG9jaC9tYXBzaGFwZXItcHJvai9ibG9iL21hc3Rlci9zcmMvcHJvamVjdGlvbnMvdG1lcmMuanNcblxuaW1wb3J0IHBqX2VuZm4gZnJvbSAnLi4vY29tbW9uL3BqX2VuZm4nO1xuaW1wb3J0IHBqX21sZm4gZnJvbSAnLi4vY29tbW9uL3BqX21sZm4nO1xuaW1wb3J0IHBqX2ludl9tbGZuIGZyb20gJy4uL2NvbW1vbi9wal9pbnZfbWxmbic7XG5pbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5cbmltcG9ydCB7RVBTTE4sIEhBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuaW1wb3J0IHNpZ24gZnJvbSAnLi4vY29tbW9uL3NpZ24nO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdGhpcy54MCA9IHRoaXMueDAgIT09IHVuZGVmaW5lZCA/IHRoaXMueDAgOiAwO1xuICB0aGlzLnkwID0gdGhpcy55MCAhPT0gdW5kZWZpbmVkID8gdGhpcy55MCA6IDA7XG4gIHRoaXMubG9uZzAgPSB0aGlzLmxvbmcwICE9PSB1bmRlZmluZWQgPyB0aGlzLmxvbmcwIDogMDtcbiAgdGhpcy5sYXQwID0gdGhpcy5sYXQwICE9PSB1bmRlZmluZWQgPyB0aGlzLmxhdDAgOiAwO1xuXG4gIGlmICh0aGlzLmVzKSB7XG4gICAgdGhpcy5lbiA9IHBqX2VuZm4odGhpcy5lcyk7XG4gICAgdGhpcy5tbDAgPSBwal9tbGZuKHRoaXMubGF0MCwgTWF0aC5zaW4odGhpcy5sYXQwKSwgTWF0aC5jb3ModGhpcy5sYXQwKSwgdGhpcy5lbik7XG4gIH1cbn1cblxuLyoqXG4gICAgVHJhbnN2ZXJzZSBNZXJjYXRvciBGb3J3YXJkICAtIGxvbmcvbGF0IHRvIHgveVxuICAgIGxvbmcvbGF0IGluIHJhZGlhbnNcbiAgKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcblxuICB2YXIgZGVsdGFfbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgdmFyIGNvbjtcbiAgdmFyIHgsIHk7XG4gIHZhciBzaW5fcGhpID0gTWF0aC5zaW4obGF0KTtcbiAgdmFyIGNvc19waGkgPSBNYXRoLmNvcyhsYXQpO1xuXG4gIGlmICghdGhpcy5lcykge1xuICAgIHZhciBiID0gY29zX3BoaSAqIE1hdGguc2luKGRlbHRhX2xvbik7XG5cbiAgICBpZiAoKE1hdGguYWJzKE1hdGguYWJzKGIpIC0gMSkpIDwgRVBTTE4pIHtcbiAgICAgIHJldHVybiAoOTMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHggPSAwLjUgKiB0aGlzLmEgKiB0aGlzLmswICogTWF0aC5sb2coKDEgKyBiKSAvICgxIC0gYikpICsgdGhpcy54MDtcbiAgICAgIHkgPSBjb3NfcGhpICogTWF0aC5jb3MoZGVsdGFfbG9uKSAvIE1hdGguc3FydCgxIC0gTWF0aC5wb3coYiwgMikpO1xuICAgICAgYiA9IE1hdGguYWJzKHkpO1xuXG4gICAgICBpZiAoYiA+PSAxKSB7XG4gICAgICAgIGlmICgoYiAtIDEpID4gRVBTTE4pIHtcbiAgICAgICAgICByZXR1cm4gKDkzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB5ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHkgPSBNYXRoLmFjb3MoeSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXQgPCAwKSB7XG4gICAgICAgIHkgPSAteTtcbiAgICAgIH1cblxuICAgICAgeSA9IHRoaXMuYSAqIHRoaXMuazAgKiAoeSAtIHRoaXMubGF0MCkgKyB0aGlzLnkwO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICB2YXIgYWwgPSBjb3NfcGhpICogZGVsdGFfbG9uO1xuICAgIHZhciBhbHMgPSBNYXRoLnBvdyhhbCwgMik7XG4gICAgdmFyIGMgPSB0aGlzLmVwMiAqIE1hdGgucG93KGNvc19waGksIDIpO1xuICAgIHZhciBjcyA9IE1hdGgucG93KGMsIDIpO1xuICAgIHZhciB0cSA9IE1hdGguYWJzKGNvc19waGkpID4gRVBTTE4gPyBNYXRoLnRhbihsYXQpIDogMDtcbiAgICB2YXIgdCA9IE1hdGgucG93KHRxLCAyKTtcbiAgICB2YXIgdHMgPSBNYXRoLnBvdyh0LCAyKTtcbiAgICBjb24gPSAxIC0gdGhpcy5lcyAqIE1hdGgucG93KHNpbl9waGksIDIpO1xuICAgIGFsID0gYWwgLyBNYXRoLnNxcnQoY29uKTtcbiAgICB2YXIgbWwgPSBwal9tbGZuKGxhdCwgc2luX3BoaSwgY29zX3BoaSwgdGhpcy5lbik7XG5cbiAgICB4ID0gdGhpcy5hICogKHRoaXMuazAgKiBhbCAqICgxICtcbiAgICAgIGFscyAvIDYgKiAoMSAtIHQgKyBjICtcbiAgICAgIGFscyAvIDIwICogKDUgLSAxOCAqIHQgKyB0cyArIDE0ICogYyAtIDU4ICogdCAqIGMgK1xuICAgICAgYWxzIC8gNDIgKiAoNjEgKyAxNzkgKiB0cyAtIHRzICogdCAtIDQ3OSAqIHQpKSkpKSArXG4gICAgICB0aGlzLngwO1xuXG4gICAgeSA9IHRoaXMuYSAqICh0aGlzLmswICogKG1sIC0gdGhpcy5tbDAgK1xuICAgICAgc2luX3BoaSAqIGRlbHRhX2xvbiAqIGFsIC8gMiAqICgxICtcbiAgICAgIGFscyAvIDEyICogKDUgLSB0ICsgOSAqIGMgKyA0ICogY3MgK1xuICAgICAgYWxzIC8gMzAgKiAoNjEgKyB0cyAtIDU4ICogdCArIDI3MCAqIGMgLSAzMzAgKiB0ICogYyArXG4gICAgICBhbHMgLyA1NiAqICgxMzg1ICsgNTQzICogdHMgLSB0cyAqIHQgLSAzMTExICogdCkpKSkpKSArXG4gICAgICB0aGlzLnkwO1xuICB9XG5cbiAgcC54ID0geDtcbiAgcC55ID0geTtcblxuICByZXR1cm4gcDtcbn1cblxuLyoqXG4gICAgVHJhbnN2ZXJzZSBNZXJjYXRvciBJbnZlcnNlICAtICB4L3kgdG8gbG9uZy9sYXRcbiAgKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIGNvbiwgcGhpO1xuICB2YXIgbGF0LCBsb247XG4gIHZhciB4ID0gKHAueCAtIHRoaXMueDApICogKDEgLyB0aGlzLmEpO1xuICB2YXIgeSA9IChwLnkgLSB0aGlzLnkwKSAqICgxIC8gdGhpcy5hKTtcblxuICBpZiAoIXRoaXMuZXMpIHtcbiAgICB2YXIgZiA9IE1hdGguZXhwKHggLyB0aGlzLmswKTtcbiAgICB2YXIgZyA9IDAuNSAqIChmIC0gMSAvIGYpO1xuICAgIHZhciB0ZW1wID0gdGhpcy5sYXQwICsgeSAvIHRoaXMuazA7XG4gICAgdmFyIGggPSBNYXRoLmNvcyh0ZW1wKTtcbiAgICBjb24gPSBNYXRoLnNxcnQoKDEgLSBNYXRoLnBvdyhoLCAyKSkgLyAoMSArIE1hdGgucG93KGcsIDIpKSk7XG4gICAgbGF0ID0gTWF0aC5hc2luKGNvbik7XG5cbiAgICBpZiAoeSA8IDApIHtcbiAgICAgIGxhdCA9IC1sYXQ7XG4gICAgfVxuXG4gICAgaWYgKChnID09PSAwKSAmJiAoaCA9PT0gMCkpIHtcbiAgICAgIGxvbiA9IDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbG9uID0gYWRqdXN0X2xvbihNYXRoLmF0YW4yKGcsIGgpICsgdGhpcy5sb25nMCk7XG4gICAgfVxuICB9XG4gIGVsc2UgeyAvLyBlbGxpcHNvaWRhbCBmb3JtXG4gICAgY29uID0gdGhpcy5tbDAgKyB5IC8gdGhpcy5rMDtcbiAgICBwaGkgPSBwal9pbnZfbWxmbihjb24sIHRoaXMuZXMsIHRoaXMuZW4pO1xuXG4gICAgaWYgKE1hdGguYWJzKHBoaSkgPCBIQUxGX1BJKSB7XG4gICAgICB2YXIgc2luX3BoaSA9IE1hdGguc2luKHBoaSk7XG4gICAgICB2YXIgY29zX3BoaSA9IE1hdGguY29zKHBoaSk7XG4gICAgICB2YXIgdGFuX3BoaSA9IE1hdGguYWJzKGNvc19waGkpID4gRVBTTE4gPyBNYXRoLnRhbihwaGkpIDogMDtcbiAgICAgIHZhciBjID0gdGhpcy5lcDIgKiBNYXRoLnBvdyhjb3NfcGhpLCAyKTtcbiAgICAgIHZhciBjcyA9IE1hdGgucG93KGMsIDIpO1xuICAgICAgdmFyIHQgPSBNYXRoLnBvdyh0YW5fcGhpLCAyKTtcbiAgICAgIHZhciB0cyA9IE1hdGgucG93KHQsIDIpO1xuICAgICAgY29uID0gMSAtIHRoaXMuZXMgKiBNYXRoLnBvdyhzaW5fcGhpLCAyKTtcbiAgICAgIHZhciBkID0geCAqIE1hdGguc3FydChjb24pIC8gdGhpcy5rMDtcbiAgICAgIHZhciBkcyA9IE1hdGgucG93KGQsIDIpO1xuICAgICAgY29uID0gY29uICogdGFuX3BoaTtcblxuICAgICAgbGF0ID0gcGhpIC0gKGNvbiAqIGRzIC8gKDEgLSB0aGlzLmVzKSkgKiAwLjUgKiAoMSAtXG4gICAgICAgIGRzIC8gMTIgKiAoNSArIDMgKiB0IC0gOSAqIGMgKiB0ICsgYyAtIDQgKiBjcyAtXG4gICAgICAgIGRzIC8gMzAgKiAoNjEgKyA5MCAqIHQgLSAyNTIgKiBjICogdCArIDQ1ICogdHMgKyA0NiAqIGMgLVxuICAgICAgICBkcyAvIDU2ICogKDEzODUgKyAzNjMzICogdCArIDQwOTUgKiB0cyArIDE1NzQgKiB0cyAqIHQpKSkpO1xuXG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyAoZCAqICgxIC1cbiAgICAgICAgZHMgLyA2ICogKDEgKyAyICogdCArIGMgLVxuICAgICAgICBkcyAvIDIwICogKDUgKyAyOCAqIHQgKyAyNCAqIHRzICsgOCAqIGMgKiB0ICsgNiAqIGMgLVxuICAgICAgICBkcyAvIDQyICogKDYxICsgNjYyICogdCArIDEzMjAgKiB0cyArIDcyMCAqIHRzICogdCkpKSkgLyBjb3NfcGhpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbGF0ID0gSEFMRl9QSSAqIHNpZ24oeSk7XG4gICAgICBsb24gPSAwO1xuICAgIH1cbiAgfVxuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuXG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiVHJhbnN2ZXJzZV9NZXJjYXRvclwiLCBcIlRyYW5zdmVyc2UgTWVyY2F0b3JcIiwgXCJ0bWVyY1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICB2YXIgciA9IE1hdGguZXhwKHgpO1xuICByID0gKHIgLSAxIC8gcikgLyAyO1xuICByZXR1cm4gcjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIHggPSBNYXRoLmFicyh4KTtcbiAgeSA9IE1hdGguYWJzKHkpO1xuICB2YXIgYSA9IE1hdGgubWF4KHgsIHkpO1xuICB2YXIgYiA9IE1hdGgubWluKHgsIHkpIC8gKGEgPyBhIDogMSk7XG5cbiAgcmV0dXJuIGEgKiBNYXRoLnNxcnQoMSArIE1hdGgucG93KGIsIDIpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBwLCBCKSB7XG4gIHZhciBjb3NfMkIgPSAyICogTWF0aC5jb3MoMiAqIEIpO1xuICB2YXIgaSA9IHBwLmxlbmd0aCAtIDE7XG4gIHZhciBoMSA9IHBwW2ldO1xuICB2YXIgaDIgPSAwO1xuICB2YXIgaDtcblxuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBoID0gLWgyICsgY29zXzJCICogaDEgKyBwcFtpXTtcbiAgICBoMiA9IGgxO1xuICAgIGgxID0gaDtcbiAgfVxuXG4gIHJldHVybiAoQiArIGggKiBNYXRoLnNpbigyICogQikpO1xufVxuIiwiaW1wb3J0IHNpbmggZnJvbSAnLi9zaW5oJztcbmltcG9ydCBjb3NoIGZyb20gJy4vY29zaCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHBwLCBhcmdfciwgYXJnX2kpIHtcbiAgdmFyIHNpbl9hcmdfciA9IE1hdGguc2luKGFyZ19yKTtcbiAgdmFyIGNvc19hcmdfciA9IE1hdGguY29zKGFyZ19yKTtcbiAgdmFyIHNpbmhfYXJnX2kgPSBzaW5oKGFyZ19pKTtcbiAgdmFyIGNvc2hfYXJnX2kgPSBjb3NoKGFyZ19pKTtcbiAgdmFyIHIgPSAyICogY29zX2FyZ19yICogY29zaF9hcmdfaTtcbiAgdmFyIGkgPSAtMiAqIHNpbl9hcmdfciAqIHNpbmhfYXJnX2k7XG4gIHZhciBqID0gcHAubGVuZ3RoIC0gMTtcbiAgdmFyIGhyID0gcHBbal07XG4gIHZhciBoaTEgPSAwO1xuICB2YXIgaHIxID0gMDtcbiAgdmFyIGhpID0gMDtcbiAgdmFyIGhyMjtcbiAgdmFyIGhpMjtcblxuICB3aGlsZSAoLS1qID49IDApIHtcbiAgICBocjIgPSBocjE7XG4gICAgaGkyID0gaGkxO1xuICAgIGhyMSA9IGhyO1xuICAgIGhpMSA9IGhpO1xuICAgIGhyID0gLWhyMiArIHIgKiBocjEgLSBpICogaGkxICsgcHBbal07XG4gICAgaGkgPSAtaGkyICsgaSAqIGhyMSArIHIgKiBoaTE7XG4gIH1cblxuICByID0gc2luX2FyZ19yICogY29zaF9hcmdfaTtcbiAgaSA9IGNvc19hcmdfciAqIHNpbmhfYXJnX2k7XG5cbiAgcmV0dXJuIFtyICogaHIgLSBpICogaGksIHIgKiBoaSArIGkgKiBocl07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHZhciByID0gTWF0aC5leHAoeCk7XG4gIHIgPSAociArIDEgLyByKSAvIDI7XG4gIHJldHVybiByO1xufSIsIi8vIEhlYXZpbHkgYmFzZWQgb24gdGhpcyBldG1lcmMgcHJvamVjdGlvbiBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21ibG9jaC9tYXBzaGFwZXItcHJvai9ibG9iL21hc3Rlci9zcmMvcHJvamVjdGlvbnMvZXRtZXJjLmpzXG5cbmltcG9ydCBzaW5oIGZyb20gJy4uL2NvbW1vbi9zaW5oJztcbmltcG9ydCBoeXBvdCBmcm9tICcuLi9jb21tb24vaHlwb3QnO1xuaW1wb3J0IGFzaW5oeSBmcm9tICcuLi9jb21tb24vYXNpbmh5JztcbmltcG9ydCBnYXRnIGZyb20gJy4uL2NvbW1vbi9nYXRnJztcbmltcG9ydCBjbGVucyBmcm9tICcuLi9jb21tb24vY2xlbnMnO1xuaW1wb3J0IGNsZW5zX2NtcGx4IGZyb20gJy4uL2NvbW1vbi9jbGVuc19jbXBseCc7XG5pbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICBpZiAodGhpcy5lcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZXMgPD0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5jb3JyZWN0IGVsbGlwdGljYWwgdXNhZ2UnKTtcbiAgfVxuXG4gIHRoaXMueDAgPSB0aGlzLngwICE9PSB1bmRlZmluZWQgPyB0aGlzLngwIDogMDtcbiAgdGhpcy55MCA9IHRoaXMueTAgIT09IHVuZGVmaW5lZCA/IHRoaXMueTAgOiAwO1xuICB0aGlzLmxvbmcwID0gdGhpcy5sb25nMCAhPT0gdW5kZWZpbmVkID8gdGhpcy5sb25nMCA6IDA7XG4gIHRoaXMubGF0MCA9IHRoaXMubGF0MCAhPT0gdW5kZWZpbmVkID8gdGhpcy5sYXQwIDogMDtcblxuICB0aGlzLmNnYiA9IFtdO1xuICB0aGlzLmNiZyA9IFtdO1xuICB0aGlzLnV0ZyA9IFtdO1xuICB0aGlzLmd0dSA9IFtdO1xuXG4gIHZhciBmID0gdGhpcy5lcyAvICgxICsgTWF0aC5zcXJ0KDEgLSB0aGlzLmVzKSk7XG4gIHZhciBuID0gZiAvICgyIC0gZik7XG4gIHZhciBucCA9IG47XG5cbiAgdGhpcy5jZ2JbMF0gPSBuICogKDIgKyBuICogKC0yIC8gMyArIG4gKiAoLTIgKyBuICogKDExNiAvIDQ1ICsgbiAqICgyNiAvIDQ1ICsgbiAqICgtMjg1NCAvIDY3NSApKSkpKSk7XG4gIHRoaXMuY2JnWzBdID0gbiAqICgtMiArIG4gKiAoIDIgLyAzICsgbiAqICggNCAvIDMgKyBuICogKC04MiAvIDQ1ICsgbiAqICgzMiAvIDQ1ICsgbiAqICg0NjQyIC8gNDcyNSkpKSkpKTtcblxuICBucCA9IG5wICogbjtcbiAgdGhpcy5jZ2JbMV0gPSBucCAqICg3IC8gMyArIG4gKiAoLTggLyA1ICsgbiAqICgtMjI3IC8gNDUgKyBuICogKDI3MDQgLyAzMTUgKyBuICogKDIzMjMgLyA5NDUpKSkpKTtcbiAgdGhpcy5jYmdbMV0gPSBucCAqICg1IC8gMyArIG4gKiAoLTE2IC8gMTUgKyBuICogKCAtMTMgLyA5ICsgbiAqICg5MDQgLyAzMTUgKyBuICogKC0xNTIyIC8gOTQ1KSkpKSk7XG5cbiAgbnAgPSBucCAqIG47XG4gIHRoaXMuY2diWzJdID0gbnAgKiAoNTYgLyAxNSArIG4gKiAoLTEzNiAvIDM1ICsgbiAqICgtMTI2MiAvIDEwNSArIG4gKiAoNzM4MTQgLyAyODM1KSkpKTtcbiAgdGhpcy5jYmdbMl0gPSBucCAqICgtMjYgLyAxNSArIG4gKiAoMzQgLyAyMSArIG4gKiAoOCAvIDUgKyBuICogKC0xMjY4NiAvIDI4MzUpKSkpO1xuXG4gIG5wID0gbnAgKiBuO1xuICB0aGlzLmNnYlszXSA9IG5wICogKDQyNzkgLyA2MzAgKyBuICogKC0zMzIgLyAzNSArIG4gKiAoLTM5OTU3MiAvIDE0MTc1KSkpO1xuICB0aGlzLmNiZ1szXSA9IG5wICogKDEyMzcgLyA2MzAgKyBuICogKC0xMiAvIDUgKyBuICogKCAtMjQ4MzIgLyAxNDE3NSkpKTtcblxuICBucCA9IG5wICogbjtcbiAgdGhpcy5jZ2JbNF0gPSBucCAqICg0MTc0IC8gMzE1ICsgbiAqICgtMTQ0ODM4IC8gNjIzNykpO1xuICB0aGlzLmNiZ1s0XSA9IG5wICogKC03MzQgLyAzMTUgKyBuICogKDEwOTU5OCAvIDMxMTg1KSk7XG5cbiAgbnAgPSBucCAqIG47XG4gIHRoaXMuY2diWzVdID0gbnAgKiAoNjAxNjc2IC8gMjIyNzUpO1xuICB0aGlzLmNiZ1s1XSA9IG5wICogKDQ0NDMzNyAvIDE1NTkyNSk7XG5cbiAgbnAgPSBNYXRoLnBvdyhuLCAyKTtcbiAgdGhpcy5RbiA9IHRoaXMuazAgLyAoMSArIG4pICogKDEgKyBucCAqICgxIC8gNCArIG5wICogKDEgLyA2NCArIG5wIC8gMjU2KSkpO1xuXG4gIHRoaXMudXRnWzBdID0gbiAqICgtMC41ICsgbiAqICggMiAvIDMgKyBuICogKC0zNyAvIDk2ICsgbiAqICggMSAvIDM2MCArIG4gKiAoODEgLyA1MTIgKyBuICogKC05NjE5OSAvIDYwNDgwMCkpKSkpKTtcbiAgdGhpcy5ndHVbMF0gPSBuICogKDAuNSArIG4gKiAoLTIgLyAzICsgbiAqICg1IC8gMTYgKyBuICogKDQxIC8gMTgwICsgbiAqICgtMTI3IC8gMjg4ICsgbiAqICg3ODkxIC8gMzc4MDApKSkpKSk7XG5cbiAgdGhpcy51dGdbMV0gPSBucCAqICgtMSAvIDQ4ICsgbiAqICgtMSAvIDE1ICsgbiAqICg0MzcgLyAxNDQwICsgbiAqICgtNDYgLyAxMDUgKyBuICogKDExMTg3MTEgLyAzODcwNzIwKSkpKSk7XG4gIHRoaXMuZ3R1WzFdID0gbnAgKiAoMTMgLyA0OCArIG4gKiAoLTMgLyA1ICsgbiAqICg1NTcgLyAxNDQwICsgbiAqICgyODEgLyA2MzAgKyBuICogKC0xOTgzNDMzIC8gMTkzNTM2MCkpKSkpO1xuXG4gIG5wID0gbnAgKiBuO1xuICB0aGlzLnV0Z1syXSA9IG5wICogKC0xNyAvIDQ4MCArIG4gKiAoMzcgLyA4NDAgKyBuICogKDIwOSAvIDQ0ODAgKyBuICogKC01NTY5IC8gOTA3MjAgKSkpKTtcbiAgdGhpcy5ndHVbMl0gPSBucCAqICg2MSAvIDI0MCArIG4gKiAoLTEwMyAvIDE0MCArIG4gKiAoMTUwNjEgLyAyNjg4MCArIG4gKiAoMTY3NjAzIC8gMTgxNDQwKSkpKTtcblxuICBucCA9IG5wICogbjtcbiAgdGhpcy51dGdbM10gPSBucCAqICgtNDM5NyAvIDE2MTI4MCArIG4gKiAoMTEgLyA1MDQgKyBuICogKDgzMDI1MSAvIDcyNTc2MDApKSk7XG4gIHRoaXMuZ3R1WzNdID0gbnAgKiAoNDk1NjEgLyAxNjEyODAgKyBuICogKC0xNzkgLyAxNjggKyBuICogKDY2MDE2NjEgLyA3MjU3NjAwKSkpO1xuXG4gIG5wID0gbnAgKiBuO1xuICB0aGlzLnV0Z1s0XSA9IG5wICogKC00NTgzIC8gMTYxMjgwICsgbiAqICgxMDg4NDcgLyAzOTkxNjgwKSk7XG4gIHRoaXMuZ3R1WzRdID0gbnAgKiAoMzQ3MjkgLyA4MDY0MCArIG4gKiAoLTM0MTg4ODkgLyAxOTk1ODQwKSk7XG5cbiAgbnAgPSBucCAqIG47XG4gIHRoaXMudXRnWzVdID0gbnAgKiAoLTIwNjQ4NjkzIC8gNjM4NjY4ODAwKTtcbiAgdGhpcy5ndHVbNV0gPSBucCAqICgyMTIzNzg5NDEgLyAzMTkzMzQ0MDApO1xuXG4gIHZhciBaID0gZ2F0Zyh0aGlzLmNiZywgdGhpcy5sYXQwKTtcbiAgdGhpcy5aYiA9IC10aGlzLlFuICogKFogKyBjbGVucyh0aGlzLmd0dSwgMiAqIFopKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgQ2UgPSBhZGp1c3RfbG9uKHAueCAtIHRoaXMubG9uZzApO1xuICB2YXIgQ24gPSBwLnk7XG5cbiAgQ24gPSBnYXRnKHRoaXMuY2JnLCBDbik7XG4gIHZhciBzaW5fQ24gPSBNYXRoLnNpbihDbik7XG4gIHZhciBjb3NfQ24gPSBNYXRoLmNvcyhDbik7XG4gIHZhciBzaW5fQ2UgPSBNYXRoLnNpbihDZSk7XG4gIHZhciBjb3NfQ2UgPSBNYXRoLmNvcyhDZSk7XG5cbiAgQ24gPSBNYXRoLmF0YW4yKHNpbl9DbiwgY29zX0NlICogY29zX0NuKTtcbiAgQ2UgPSBNYXRoLmF0YW4yKHNpbl9DZSAqIGNvc19DbiwgaHlwb3Qoc2luX0NuLCBjb3NfQ24gKiBjb3NfQ2UpKTtcbiAgQ2UgPSBhc2luaHkoTWF0aC50YW4oQ2UpKTtcblxuICB2YXIgdG1wID0gY2xlbnNfY21wbHgodGhpcy5ndHUsIDIgKiBDbiwgMiAqIENlKTtcblxuICBDbiA9IENuICsgdG1wWzBdO1xuICBDZSA9IENlICsgdG1wWzFdO1xuXG4gIHZhciB4O1xuICB2YXIgeTtcblxuICBpZiAoTWF0aC5hYnMoQ2UpIDw9IDIuNjIzMzk1MTYyNzc4KSB7XG4gICAgeCA9IHRoaXMuYSAqICh0aGlzLlFuICogQ2UpICsgdGhpcy54MDtcbiAgICB5ID0gdGhpcy5hICogKHRoaXMuUW4gKiBDbiArIHRoaXMuWmIpICsgdGhpcy55MDtcbiAgfVxuICBlbHNlIHtcbiAgICB4ID0gSW5maW5pdHk7XG4gICAgeSA9IEluZmluaXR5O1xuICB9XG5cbiAgcC54ID0geDtcbiAgcC55ID0geTtcblxuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgQ2UgPSAocC54IC0gdGhpcy54MCkgKiAoMSAvIHRoaXMuYSk7XG4gIHZhciBDbiA9IChwLnkgLSB0aGlzLnkwKSAqICgxIC8gdGhpcy5hKTtcblxuICBDbiA9IChDbiAtIHRoaXMuWmIpIC8gdGhpcy5RbjtcbiAgQ2UgPSBDZSAvIHRoaXMuUW47XG5cbiAgdmFyIGxvbjtcbiAgdmFyIGxhdDtcblxuICBpZiAoTWF0aC5hYnMoQ2UpIDw9IDIuNjIzMzk1MTYyNzc4KSB7XG4gICAgdmFyIHRtcCA9IGNsZW5zX2NtcGx4KHRoaXMudXRnLCAyICogQ24sIDIgKiBDZSk7XG5cbiAgICBDbiA9IENuICsgdG1wWzBdO1xuICAgIENlID0gQ2UgKyB0bXBbMV07XG4gICAgQ2UgPSBNYXRoLmF0YW4oc2luaChDZSkpO1xuXG4gICAgdmFyIHNpbl9DbiA9IE1hdGguc2luKENuKTtcbiAgICB2YXIgY29zX0NuID0gTWF0aC5jb3MoQ24pO1xuICAgIHZhciBzaW5fQ2UgPSBNYXRoLnNpbihDZSk7XG4gICAgdmFyIGNvc19DZSA9IE1hdGguY29zKENlKTtcblxuICAgIENuID0gTWF0aC5hdGFuMihzaW5fQ24gKiBjb3NfQ2UsIGh5cG90KHNpbl9DZSwgY29zX0NlICogY29zX0NuKSk7XG4gICAgQ2UgPSBNYXRoLmF0YW4yKHNpbl9DZSwgY29zX0NlICogY29zX0NuKTtcblxuICAgIGxvbiA9IGFkanVzdF9sb24oQ2UgKyB0aGlzLmxvbmcwKTtcbiAgICBsYXQgPSBnYXRnKHRoaXMuY2diLCBDbik7XG4gIH1cbiAgZWxzZSB7XG4gICAgbG9uID0gSW5maW5pdHk7XG4gICAgbGF0ID0gSW5maW5pdHk7XG4gIH1cblxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcblxuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIkV4dGVuZGVkX1RyYW5zdmVyc2VfTWVyY2F0b3JcIiwgXCJFeHRlbmRlZCBUcmFuc3ZlcnNlIE1lcmNhdG9yXCIsIFwiZXRtZXJjXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihwcCwgYXJnX3IpIHtcbiAgdmFyIHIgPSAyICogTWF0aC5jb3MoYXJnX3IpO1xuICB2YXIgaSA9IHBwLmxlbmd0aCAtIDE7XG4gIHZhciBocjEgPSBwcFtpXTtcbiAgdmFyIGhyMiA9IDA7XG4gIHZhciBocjtcblxuICB3aGlsZSAoLS1pID49IDApIHtcbiAgICBociA9IC1ocjIgKyByICogaHIxICsgcHBbaV07XG4gICAgaHIyID0gaHIxO1xuICAgIGhyMSA9IGhyO1xuICB9XG5cbiAgcmV0dXJuIE1hdGguc2luKGFyZ19yKSAqIGhyO1xufVxuIiwiaW1wb3J0IGh5cG90IGZyb20gJy4vaHlwb3QnO1xuaW1wb3J0IGxvZzFweSBmcm9tICcuL2xvZzFweSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgdmFyIHkgPSBNYXRoLmFicyh4KTtcbiAgeSA9IGxvZzFweSh5ICogKDEgKyB5IC8gKGh5cG90KDEsIHkpICsgMSkpKTtcblxuICByZXR1cm4geCA8IDAgPyAteSA6IHk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHZhciB5ID0gMSArIHg7XG4gIHZhciB6ID0geSAtIDE7XG5cbiAgcmV0dXJuIHogPT09IDAgPyB4IDogeCAqIE1hdGgubG9nKHkpIC8gejtcbn1cbiIsImltcG9ydCBhZGp1c3Rfem9uZSBmcm9tICcuLi9jb21tb24vYWRqdXN0X3pvbmUnO1xuaW1wb3J0IGV0bWVyYyBmcm9tICcuL2V0bWVyYyc7XG5leHBvcnQgdmFyIGRlcGVuZHNPbiA9ICdldG1lcmMnO1xuaW1wb3J0IHtEMlJ9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICB2YXIgem9uZSA9IGFkanVzdF96b25lKHRoaXMuem9uZSwgdGhpcy5sb25nMCk7XG4gIGlmICh6b25lID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gdXRtIHpvbmUnKTtcbiAgfVxuICB0aGlzLmxhdDAgPSAwO1xuICB0aGlzLmxvbmcwID0gICgoNiAqIE1hdGguYWJzKHpvbmUpKSAtIDE4MykgKiBEMlI7XG4gIHRoaXMueDAgPSA1MDAwMDA7XG4gIHRoaXMueTAgPSB0aGlzLnV0bVNvdXRoID8gMTAwMDAwMDAgOiAwO1xuICB0aGlzLmswID0gMC45OTk2O1xuXG4gIGV0bWVyYy5pbml0LmFwcGx5KHRoaXMpO1xuICB0aGlzLmZvcndhcmQgPSBldG1lcmMuZm9yd2FyZDtcbiAgdGhpcy5pbnZlcnNlID0gZXRtZXJjLmludmVyc2U7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJVbml2ZXJzYWwgVHJhbnN2ZXJzZSBNZXJjYXRvciBTeXN0ZW1cIiwgXCJ1dG1cIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIG5hbWVzOiBuYW1lcyxcbiAgZGVwZW5kc09uOiBkZXBlbmRzT25cbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuL2FkanVzdF9sb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih6b25lLCBsb24pIHtcbiAgaWYgKHpvbmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHpvbmUgPSBNYXRoLmZsb29yKChhZGp1c3RfbG9uKGxvbikgKyBNYXRoLlBJKSAqIDMwIC8gTWF0aC5QSSkgKyAxO1xuXG4gICAgaWYgKHpvbmUgPCAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKHpvbmUgPiA2MCkge1xuICAgICAgcmV0dXJuIDYwO1xuICAgIH1cbiAgfVxuICByZXR1cm4gem9uZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGVzaW5wLCBleHApIHtcbiAgcmV0dXJuIChNYXRoLnBvdygoMSAtIGVzaW5wKSAvICgxICsgZXNpbnApLCBleHApKTtcbn0iLCJpbXBvcnQgc3JhdCBmcm9tICcuLi9jb21tb24vc3JhdCc7XG52YXIgTUFYX0lURVIgPSAyMDtcbmltcG9ydCB7SEFMRl9QSSwgRk9SVFBJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIHZhciBzcGhpID0gTWF0aC5zaW4odGhpcy5sYXQwKTtcbiAgdmFyIGNwaGkgPSBNYXRoLmNvcyh0aGlzLmxhdDApO1xuICBjcGhpICo9IGNwaGk7XG4gIHRoaXMucmMgPSBNYXRoLnNxcnQoMSAtIHRoaXMuZXMpIC8gKDEgLSB0aGlzLmVzICogc3BoaSAqIHNwaGkpO1xuICB0aGlzLkMgPSBNYXRoLnNxcnQoMSArIHRoaXMuZXMgKiBjcGhpICogY3BoaSAvICgxIC0gdGhpcy5lcykpO1xuICB0aGlzLnBoaWMwID0gTWF0aC5hc2luKHNwaGkgLyB0aGlzLkMpO1xuICB0aGlzLnJhdGV4cCA9IDAuNSAqIHRoaXMuQyAqIHRoaXMuZTtcbiAgdGhpcy5LID0gTWF0aC50YW4oMC41ICogdGhpcy5waGljMCArIEZPUlRQSSkgLyAoTWF0aC5wb3coTWF0aC50YW4oMC41ICogdGhpcy5sYXQwICsgRk9SVFBJKSwgdGhpcy5DKSAqIHNyYXQodGhpcy5lICogc3BoaSwgdGhpcy5yYXRleHApKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuXG4gIHAueSA9IDIgKiBNYXRoLmF0YW4odGhpcy5LICogTWF0aC5wb3coTWF0aC50YW4oMC41ICogbGF0ICsgRk9SVFBJKSwgdGhpcy5DKSAqIHNyYXQodGhpcy5lICogTWF0aC5zaW4obGF0KSwgdGhpcy5yYXRleHApKSAtIEhBTEZfUEk7XG4gIHAueCA9IHRoaXMuQyAqIGxvbjtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIERFTF9UT0wgPSAxZS0xNDtcbiAgdmFyIGxvbiA9IHAueCAvIHRoaXMuQztcbiAgdmFyIGxhdCA9IHAueTtcbiAgdmFyIG51bSA9IE1hdGgucG93KE1hdGgudGFuKDAuNSAqIGxhdCArIEZPUlRQSSkgLyB0aGlzLkssIDEgLyB0aGlzLkMpO1xuICBmb3IgKHZhciBpID0gTUFYX0lURVI7IGkgPiAwOyAtLWkpIHtcbiAgICBsYXQgPSAyICogTWF0aC5hdGFuKG51bSAqIHNyYXQodGhpcy5lICogTWF0aC5zaW4ocC55KSwgLSAwLjUgKiB0aGlzLmUpKSAtIEhBTEZfUEk7XG4gICAgaWYgKE1hdGguYWJzKGxhdCAtIHAueSkgPCBERUxfVE9MKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgcC55ID0gbGF0O1xuICB9XG4gIC8qIGNvbnZlcmdlbmNlIGZhaWxlZCAqL1xuICBpZiAoIWkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJnYXVzc1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGdhdXNzIGZyb20gJy4vZ2F1c3MnO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgZ2F1c3MuaW5pdC5hcHBseSh0aGlzKTtcbiAgaWYgKCF0aGlzLnJjKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuc2luYzAgPSBNYXRoLnNpbih0aGlzLnBoaWMwKTtcbiAgdGhpcy5jb3NjMCA9IE1hdGguY29zKHRoaXMucGhpYzApO1xuICB0aGlzLlIyID0gMiAqIHRoaXMucmM7XG4gIGlmICghdGhpcy50aXRsZSkge1xuICAgIHRoaXMudGl0bGUgPSBcIk9ibGlxdWUgU3RlcmVvZ3JhcGhpYyBBbHRlcm5hdGl2ZVwiO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIHNpbmMsIGNvc2MsIGNvc2wsIGs7XG4gIHAueCA9IGFkanVzdF9sb24ocC54IC0gdGhpcy5sb25nMCk7XG4gIGdhdXNzLmZvcndhcmQuYXBwbHkodGhpcywgW3BdKTtcbiAgc2luYyA9IE1hdGguc2luKHAueSk7XG4gIGNvc2MgPSBNYXRoLmNvcyhwLnkpO1xuICBjb3NsID0gTWF0aC5jb3MocC54KTtcbiAgayA9IHRoaXMuazAgKiB0aGlzLlIyIC8gKDEgKyB0aGlzLnNpbmMwICogc2luYyArIHRoaXMuY29zYzAgKiBjb3NjICogY29zbCk7XG4gIHAueCA9IGsgKiBjb3NjICogTWF0aC5zaW4ocC54KTtcbiAgcC55ID0gayAqICh0aGlzLmNvc2MwICogc2luYyAtIHRoaXMuc2luYzAgKiBjb3NjICogY29zbCk7XG4gIHAueCA9IHRoaXMuYSAqIHAueCArIHRoaXMueDA7XG4gIHAueSA9IHRoaXMuYSAqIHAueSArIHRoaXMueTA7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciBzaW5jLCBjb3NjLCBsb24sIGxhdCwgcmhvO1xuICBwLnggPSAocC54IC0gdGhpcy54MCkgLyB0aGlzLmE7XG4gIHAueSA9IChwLnkgLSB0aGlzLnkwKSAvIHRoaXMuYTtcblxuICBwLnggLz0gdGhpcy5rMDtcbiAgcC55IC89IHRoaXMuazA7XG4gIGlmICgocmhvID0gTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSkpKSB7XG4gICAgdmFyIGMgPSAyICogTWF0aC5hdGFuMihyaG8sIHRoaXMuUjIpO1xuICAgIHNpbmMgPSBNYXRoLnNpbihjKTtcbiAgICBjb3NjID0gTWF0aC5jb3MoYyk7XG4gICAgbGF0ID0gTWF0aC5hc2luKGNvc2MgKiB0aGlzLnNpbmMwICsgcC55ICogc2luYyAqIHRoaXMuY29zYzAgLyByaG8pO1xuICAgIGxvbiA9IE1hdGguYXRhbjIocC54ICogc2luYywgcmhvICogdGhpcy5jb3NjMCAqIGNvc2MgLSBwLnkgKiB0aGlzLnNpbmMwICogc2luYyk7XG4gIH1cbiAgZWxzZSB7XG4gICAgbGF0ID0gdGhpcy5waGljMDtcbiAgICBsb24gPSAwO1xuICB9XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIGdhdXNzLmludmVyc2UuYXBwbHkodGhpcywgW3BdKTtcbiAgcC54ID0gYWRqdXN0X2xvbihwLnggKyB0aGlzLmxvbmcwKTtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJTdGVyZW9ncmFwaGljX05vcnRoX1BvbGVcIiwgXCJPYmxpcXVlX1N0ZXJlb2dyYXBoaWNcIiwgXCJQb2xhcl9TdGVyZW9ncmFwaGljXCIsIFwic3RlcmVhXCIsXCJPYmxpcXVlIFN0ZXJlb2dyYXBoaWMgQWx0ZXJuYXRpdmVcIixcIkRvdWJsZV9TdGVyZW9ncmFwaGljXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQge0VQU0xOLCBIQUxGX1BJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuaW1wb3J0IHNpZ24gZnJvbSAnLi4vY29tbW9uL3NpZ24nO1xuaW1wb3J0IG1zZm56IGZyb20gJy4uL2NvbW1vbi9tc2Zueic7XG5pbXBvcnQgdHNmbnogZnJvbSAnLi4vY29tbW9uL3RzZm56JztcbmltcG9ydCBwaGkyeiBmcm9tICcuLi9jb21tb24vcGhpMnonO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG5leHBvcnQgZnVuY3Rpb24gc3Nmbl8ocGhpdCwgc2lucGhpLCBlY2Nlbikge1xuICBzaW5waGkgKj0gZWNjZW47XG4gIHJldHVybiAoTWF0aC50YW4oMC41ICogKEhBTEZfUEkgKyBwaGl0KSkgKiBNYXRoLnBvdygoMSAtIHNpbnBoaSkgLyAoMSArIHNpbnBoaSksIDAuNSAqIGVjY2VuKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICB0aGlzLmNvc2xhdDAgPSBNYXRoLmNvcyh0aGlzLmxhdDApO1xuICB0aGlzLnNpbmxhdDAgPSBNYXRoLnNpbih0aGlzLmxhdDApO1xuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBpZiAodGhpcy5rMCA9PT0gMSAmJiAhaXNOYU4odGhpcy5sYXRfdHMpICYmIE1hdGguYWJzKHRoaXMuY29zbGF0MCkgPD0gRVBTTE4pIHtcbiAgICAgIHRoaXMuazAgPSAwLjUgKiAoMSArIHNpZ24odGhpcy5sYXQwKSAqIE1hdGguc2luKHRoaXMubGF0X3RzKSk7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIGlmIChNYXRoLmFicyh0aGlzLmNvc2xhdDApIDw9IEVQU0xOKSB7XG4gICAgICBpZiAodGhpcy5sYXQwID4gMCkge1xuICAgICAgICAvL05vcnRoIHBvbGVcbiAgICAgICAgLy90cmFjZSgnc3RlcmU6bm9ydGggcG9sZScpO1xuICAgICAgICB0aGlzLmNvbiA9IDE7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy9Tb3V0aCBwb2xlXG4gICAgICAgIC8vdHJhY2UoJ3N0ZXJlOnNvdXRoIHBvbGUnKTtcbiAgICAgICAgdGhpcy5jb24gPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jb25zID0gTWF0aC5zcXJ0KE1hdGgucG93KDEgKyB0aGlzLmUsIDEgKyB0aGlzLmUpICogTWF0aC5wb3coMSAtIHRoaXMuZSwgMSAtIHRoaXMuZSkpO1xuICAgIGlmICh0aGlzLmswID09PSAxICYmICFpc05hTih0aGlzLmxhdF90cykgJiYgTWF0aC5hYnModGhpcy5jb3NsYXQwKSA8PSBFUFNMTikge1xuICAgICAgdGhpcy5rMCA9IDAuNSAqIHRoaXMuY29ucyAqIG1zZm56KHRoaXMuZSwgTWF0aC5zaW4odGhpcy5sYXRfdHMpLCBNYXRoLmNvcyh0aGlzLmxhdF90cykpIC8gdHNmbnoodGhpcy5lLCB0aGlzLmNvbiAqIHRoaXMubGF0X3RzLCB0aGlzLmNvbiAqIE1hdGguc2luKHRoaXMubGF0X3RzKSk7XG4gICAgfVxuICAgIHRoaXMubXMxID0gbXNmbnoodGhpcy5lLCB0aGlzLnNpbmxhdDAsIHRoaXMuY29zbGF0MCk7XG4gICAgdGhpcy5YMCA9IDIgKiBNYXRoLmF0YW4odGhpcy5zc2ZuXyh0aGlzLmxhdDAsIHRoaXMuc2lubGF0MCwgdGhpcy5lKSkgLSBIQUxGX1BJO1xuICAgIHRoaXMuY29zWDAgPSBNYXRoLmNvcyh0aGlzLlgwKTtcbiAgICB0aGlzLnNpblgwID0gTWF0aC5zaW4odGhpcy5YMCk7XG4gIH1cbn1cblxuLy8gU3RlcmVvZ3JhcGhpYyBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcbiAgdmFyIHNpbmxhdCA9IE1hdGguc2luKGxhdCk7XG4gIHZhciBjb3NsYXQgPSBNYXRoLmNvcyhsYXQpO1xuICB2YXIgQSwgWCwgc2luWCwgY29zWCwgdHMsIHJoO1xuICB2YXIgZGxvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG5cbiAgaWYgKE1hdGguYWJzKE1hdGguYWJzKGxvbiAtIHRoaXMubG9uZzApIC0gTWF0aC5QSSkgPD0gRVBTTE4gJiYgTWF0aC5hYnMobGF0ICsgdGhpcy5sYXQwKSA8PSBFUFNMTikge1xuICAgIC8vY2FzZSBvZiB0aGUgb3JpZ2luZSBwb2ludFxuICAgIC8vdHJhY2UoJ3N0ZXJlOnRoaXMgaXMgdGhlIG9yaWdpbiBwb2ludCcpO1xuICAgIHAueCA9IE5hTjtcbiAgICBwLnkgPSBOYU47XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgLy90cmFjZSgnc3RlcmU6c3BoZXJlIGNhc2UnKTtcbiAgICBBID0gMiAqIHRoaXMuazAgLyAoMSArIHRoaXMuc2lubGF0MCAqIHNpbmxhdCArIHRoaXMuY29zbGF0MCAqIGNvc2xhdCAqIE1hdGguY29zKGRsb24pKTtcbiAgICBwLnggPSB0aGlzLmEgKiBBICogY29zbGF0ICogTWF0aC5zaW4oZGxvbikgKyB0aGlzLngwO1xuICAgIHAueSA9IHRoaXMuYSAqIEEgKiAodGhpcy5jb3NsYXQwICogc2lubGF0IC0gdGhpcy5zaW5sYXQwICogY29zbGF0ICogTWF0aC5jb3MoZGxvbikpICsgdGhpcy55MDtcbiAgICByZXR1cm4gcDtcbiAgfVxuICBlbHNlIHtcbiAgICBYID0gMiAqIE1hdGguYXRhbih0aGlzLnNzZm5fKGxhdCwgc2lubGF0LCB0aGlzLmUpKSAtIEhBTEZfUEk7XG4gICAgY29zWCA9IE1hdGguY29zKFgpO1xuICAgIHNpblggPSBNYXRoLnNpbihYKTtcbiAgICBpZiAoTWF0aC5hYnModGhpcy5jb3NsYXQwKSA8PSBFUFNMTikge1xuICAgICAgdHMgPSB0c2Zueih0aGlzLmUsIGxhdCAqIHRoaXMuY29uLCB0aGlzLmNvbiAqIHNpbmxhdCk7XG4gICAgICByaCA9IDIgKiB0aGlzLmEgKiB0aGlzLmswICogdHMgLyB0aGlzLmNvbnM7XG4gICAgICBwLnggPSB0aGlzLngwICsgcmggKiBNYXRoLnNpbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgICAgIHAueSA9IHRoaXMueTAgLSB0aGlzLmNvbiAqIHJoICogTWF0aC5jb3MobG9uIC0gdGhpcy5sb25nMCk7XG4gICAgICAvL3RyYWNlKHAudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5zaW5sYXQwKSA8IEVQU0xOKSB7XG4gICAgICAvL0VxXG4gICAgICAvL3RyYWNlKCdzdGVyZTplcXVhdGV1cicpO1xuICAgICAgQSA9IDIgKiB0aGlzLmEgKiB0aGlzLmswIC8gKDEgKyBjb3NYICogTWF0aC5jb3MoZGxvbikpO1xuICAgICAgcC55ID0gQSAqIHNpblg7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgLy9vdGhlciBjYXNlXG4gICAgICAvL3RyYWNlKCdzdGVyZTpub3JtYWwgY2FzZScpO1xuICAgICAgQSA9IDIgKiB0aGlzLmEgKiB0aGlzLmswICogdGhpcy5tczEgLyAodGhpcy5jb3NYMCAqICgxICsgdGhpcy5zaW5YMCAqIHNpblggKyB0aGlzLmNvc1gwICogY29zWCAqIE1hdGguY29zKGRsb24pKSk7XG4gICAgICBwLnkgPSBBICogKHRoaXMuY29zWDAgKiBzaW5YIC0gdGhpcy5zaW5YMCAqIGNvc1ggKiBNYXRoLmNvcyhkbG9uKSkgKyB0aGlzLnkwO1xuICAgIH1cbiAgICBwLnggPSBBICogY29zWCAqIE1hdGguc2luKGRsb24pICsgdGhpcy54MDtcbiAgfVxuICAvL3RyYWNlKHAudG9TdHJpbmcoKSk7XG4gIHJldHVybiBwO1xufVxuXG4vLyogU3RlcmVvZ3JhcGhpYyBpbnZlcnNlIGVxdWF0aW9ucy0tbWFwcGluZyB4LHkgdG8gbGF0L2xvbmdcbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSAtPSB0aGlzLnkwO1xuICB2YXIgbG9uLCBsYXQsIHRzLCBjZSwgQ2hpO1xuICB2YXIgcmggPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgdmFyIGMgPSAyICogTWF0aC5hdGFuKHJoIC8gKDIgKiB0aGlzLmEgKiB0aGlzLmswKSk7XG4gICAgbG9uID0gdGhpcy5sb25nMDtcbiAgICBsYXQgPSB0aGlzLmxhdDA7XG4gICAgaWYgKHJoIDw9IEVQU0xOKSB7XG4gICAgICBwLnggPSBsb247XG4gICAgICBwLnkgPSBsYXQ7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgbGF0ID0gTWF0aC5hc2luKE1hdGguY29zKGMpICogdGhpcy5zaW5sYXQwICsgcC55ICogTWF0aC5zaW4oYykgKiB0aGlzLmNvc2xhdDAgLyByaCk7XG4gICAgaWYgKE1hdGguYWJzKHRoaXMuY29zbGF0MCkgPCBFUFNMTikge1xuICAgICAgaWYgKHRoaXMubGF0MCA+IDApIHtcbiAgICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLngsIC0gMSAqIHAueSkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXRhbjIocC54LCBwLnkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBNYXRoLmF0YW4yKHAueCAqIE1hdGguc2luKGMpLCByaCAqIHRoaXMuY29zbGF0MCAqIE1hdGguY29zKGMpIC0gcC55ICogdGhpcy5zaW5sYXQwICogTWF0aC5zaW4oYykpKTtcbiAgICB9XG4gICAgcC54ID0gbG9uO1xuICAgIHAueSA9IGxhdDtcbiAgICByZXR1cm4gcDtcbiAgfVxuICBlbHNlIHtcbiAgICBpZiAoTWF0aC5hYnModGhpcy5jb3NsYXQwKSA8PSBFUFNMTikge1xuICAgICAgaWYgKHJoIDw9IEVQU0xOKSB7XG4gICAgICAgIGxhdCA9IHRoaXMubGF0MDtcbiAgICAgICAgbG9uID0gdGhpcy5sb25nMDtcbiAgICAgICAgcC54ID0gbG9uO1xuICAgICAgICBwLnkgPSBsYXQ7XG4gICAgICAgIC8vdHJhY2UocC50b1N0cmluZygpKTtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgICB9XG4gICAgICBwLnggKj0gdGhpcy5jb247XG4gICAgICBwLnkgKj0gdGhpcy5jb247XG4gICAgICB0cyA9IHJoICogdGhpcy5jb25zIC8gKDIgKiB0aGlzLmEgKiB0aGlzLmswKTtcbiAgICAgIGxhdCA9IHRoaXMuY29uICogcGhpMnoodGhpcy5lLCB0cyk7XG4gICAgICBsb24gPSB0aGlzLmNvbiAqIGFkanVzdF9sb24odGhpcy5jb24gKiB0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLngsIC0gMSAqIHAueSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNlID0gMiAqIE1hdGguYXRhbihyaCAqIHRoaXMuY29zWDAgLyAoMiAqIHRoaXMuYSAqIHRoaXMuazAgKiB0aGlzLm1zMSkpO1xuICAgICAgbG9uID0gdGhpcy5sb25nMDtcbiAgICAgIGlmIChyaCA8PSBFUFNMTikge1xuICAgICAgICBDaGkgPSB0aGlzLlgwO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIENoaSA9IE1hdGguYXNpbihNYXRoLmNvcyhjZSkgKiB0aGlzLnNpblgwICsgcC55ICogTWF0aC5zaW4oY2UpICogdGhpcy5jb3NYMCAvIHJoKTtcbiAgICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLnggKiBNYXRoLnNpbihjZSksIHJoICogdGhpcy5jb3NYMCAqIE1hdGguY29zKGNlKSAtIHAueSAqIHRoaXMuc2luWDAgKiBNYXRoLnNpbihjZSkpKTtcbiAgICAgIH1cbiAgICAgIGxhdCA9IC0xICogcGhpMnoodGhpcy5lLCBNYXRoLnRhbigwLjUgKiAoSEFMRl9QSSArIENoaSkpKTtcbiAgICB9XG4gIH1cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG5cbiAgLy90cmFjZShwLnRvU3RyaW5nKCkpO1xuICByZXR1cm4gcDtcblxufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wic3RlcmVcIiwgXCJTdGVyZW9ncmFwaGljX1NvdXRoX1BvbGVcIiwgXCJQb2xhciBTdGVyZW9ncmFwaGljICh2YXJpYW50IEIpXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXMsXG4gIHNzZm5fOiBzc2ZuX1xufTtcbiIsIi8qXG4gIHJlZmVyZW5jZXM6XG4gICAgRm9ybXVsZXMgZXQgY29uc3RhbnRlcyBwb3VyIGxlIENhbGN1bCBwb3VyIGxhXG4gICAgcHJvamVjdGlvbiBjeWxpbmRyaXF1ZSBjb25mb3JtZSDDoCBheGUgb2JsaXF1ZSBldCBwb3VyIGxhIHRyYW5zZm9ybWF0aW9uIGVudHJlXG4gICAgZGVzIHN5c3TDqG1lcyBkZSByw6lmw6lyZW5jZS5cbiAgICBodHRwOi8vd3d3LnN3aXNzdG9wby5hZG1pbi5jaC9pbnRlcm5ldC9zd2lzc3RvcG8vZnIvaG9tZS90b3BpY3Mvc3VydmV5L3N5cy9yZWZzeXMvc3dpdHplcmxhbmQucGFyc3lzcmVsYXRlZDEuMzEyMTYuZG93bmxvYWRMaXN0Ljc3MDA0LkRvd25sb2FkRmlsZS50bXAvc3dpc3Nwcm9qZWN0aW9uZnIucGRmXG4gICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICB2YXIgcGh5MCA9IHRoaXMubGF0MDtcbiAgdGhpcy5sYW1iZGEwID0gdGhpcy5sb25nMDtcbiAgdmFyIHNpblBoeTAgPSBNYXRoLnNpbihwaHkwKTtcbiAgdmFyIHNlbWlNYWpvckF4aXMgPSB0aGlzLmE7XG4gIHZhciBpbnZGID0gdGhpcy5yZjtcbiAgdmFyIGZsYXR0ZW5pbmcgPSAxIC8gaW52RjtcbiAgdmFyIGUyID0gMiAqIGZsYXR0ZW5pbmcgLSBNYXRoLnBvdyhmbGF0dGVuaW5nLCAyKTtcbiAgdmFyIGUgPSB0aGlzLmUgPSBNYXRoLnNxcnQoZTIpO1xuICB0aGlzLlIgPSB0aGlzLmswICogc2VtaU1ham9yQXhpcyAqIE1hdGguc3FydCgxIC0gZTIpIC8gKDEgLSBlMiAqIE1hdGgucG93KHNpblBoeTAsIDIpKTtcbiAgdGhpcy5hbHBoYSA9IE1hdGguc3FydCgxICsgZTIgLyAoMSAtIGUyKSAqIE1hdGgucG93KE1hdGguY29zKHBoeTApLCA0KSk7XG4gIHRoaXMuYjAgPSBNYXRoLmFzaW4oc2luUGh5MCAvIHRoaXMuYWxwaGEpO1xuICB2YXIgazEgPSBNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCArIHRoaXMuYjAgLyAyKSk7XG4gIHZhciBrMiA9IE1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkgLyA0ICsgcGh5MCAvIDIpKTtcbiAgdmFyIGszID0gTWF0aC5sb2coKDEgKyBlICogc2luUGh5MCkgLyAoMSAtIGUgKiBzaW5QaHkwKSk7XG4gIHRoaXMuSyA9IGsxIC0gdGhpcy5hbHBoYSAqIGsyICsgdGhpcy5hbHBoYSAqIGUgLyAyICogazM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIFNhMSA9IE1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkgLyA0IC0gcC55IC8gMikpO1xuICB2YXIgU2EyID0gdGhpcy5lIC8gMiAqIE1hdGgubG9nKCgxICsgdGhpcy5lICogTWF0aC5zaW4ocC55KSkgLyAoMSAtIHRoaXMuZSAqIE1hdGguc2luKHAueSkpKTtcbiAgdmFyIFMgPSAtdGhpcy5hbHBoYSAqIChTYTEgKyBTYTIpICsgdGhpcy5LO1xuXG4gIC8vIHNwaGVyaWMgbGF0aXR1ZGVcbiAgdmFyIGIgPSAyICogKE1hdGguYXRhbihNYXRoLmV4cChTKSkgLSBNYXRoLlBJIC8gNCk7XG5cbiAgLy8gc3BoZXJpYyBsb25naXR1ZGVcbiAgdmFyIEkgPSB0aGlzLmFscGhhICogKHAueCAtIHRoaXMubGFtYmRhMCk7XG5cbiAgLy8gcHNvZXVkbyBlcXVhdG9yaWFsIHJvdGF0aW9uXG4gIHZhciByb3RJID0gTWF0aC5hdGFuKE1hdGguc2luKEkpIC8gKE1hdGguc2luKHRoaXMuYjApICogTWF0aC50YW4oYikgKyBNYXRoLmNvcyh0aGlzLmIwKSAqIE1hdGguY29zKEkpKSk7XG5cbiAgdmFyIHJvdEIgPSBNYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5iMCkgKiBNYXRoLnNpbihiKSAtIE1hdGguc2luKHRoaXMuYjApICogTWF0aC5jb3MoYikgKiBNYXRoLmNvcyhJKSk7XG5cbiAgcC55ID0gdGhpcy5SIC8gMiAqIE1hdGgubG9nKCgxICsgTWF0aC5zaW4ocm90QikpIC8gKDEgLSBNYXRoLnNpbihyb3RCKSkpICsgdGhpcy55MDtcbiAgcC54ID0gdGhpcy5SICogcm90SSArIHRoaXMueDA7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciBZID0gcC54IC0gdGhpcy54MDtcbiAgdmFyIFggPSBwLnkgLSB0aGlzLnkwO1xuXG4gIHZhciByb3RJID0gWSAvIHRoaXMuUjtcbiAgdmFyIHJvdEIgPSAyICogKE1hdGguYXRhbihNYXRoLmV4cChYIC8gdGhpcy5SKSkgLSBNYXRoLlBJIC8gNCk7XG5cbiAgdmFyIGIgPSBNYXRoLmFzaW4oTWF0aC5jb3ModGhpcy5iMCkgKiBNYXRoLnNpbihyb3RCKSArIE1hdGguc2luKHRoaXMuYjApICogTWF0aC5jb3Mocm90QikgKiBNYXRoLmNvcyhyb3RJKSk7XG4gIHZhciBJID0gTWF0aC5hdGFuKE1hdGguc2luKHJvdEkpIC8gKE1hdGguY29zKHRoaXMuYjApICogTWF0aC5jb3Mocm90SSkgLSBNYXRoLnNpbih0aGlzLmIwKSAqIE1hdGgudGFuKHJvdEIpKSk7XG5cbiAgdmFyIGxhbWJkYSA9IHRoaXMubGFtYmRhMCArIEkgLyB0aGlzLmFscGhhO1xuXG4gIHZhciBTID0gMDtcbiAgdmFyIHBoeSA9IGI7XG4gIHZhciBwcmV2UGh5ID0gLTEwMDA7XG4gIHZhciBpdGVyYXRpb24gPSAwO1xuICB3aGlsZSAoTWF0aC5hYnMocGh5IC0gcHJldlBoeSkgPiAwLjAwMDAwMDEpIHtcbiAgICBpZiAoKytpdGVyYXRpb24gPiAyMCkge1xuICAgICAgLy8uLi5yZXBvcnRFcnJvcihcIm9tZXJjRndkSW5maW5pdHlcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vUyA9IE1hdGgubG9nKE1hdGgudGFuKE1hdGguUEkgLyA0ICsgcGh5IC8gMikpO1xuICAgIFMgPSAxIC8gdGhpcy5hbHBoYSAqIChNYXRoLmxvZyhNYXRoLnRhbihNYXRoLlBJIC8gNCArIGIgLyAyKSkgLSB0aGlzLkspICsgdGhpcy5lICogTWF0aC5sb2coTWF0aC50YW4oTWF0aC5QSSAvIDQgKyBNYXRoLmFzaW4odGhpcy5lICogTWF0aC5zaW4ocGh5KSkgLyAyKSk7XG4gICAgcHJldlBoeSA9IHBoeTtcbiAgICBwaHkgPSAyICogTWF0aC5hdGFuKE1hdGguZXhwKFMpKSAtIE1hdGguUEkgLyAyO1xuICB9XG5cbiAgcC54ID0gbGFtYmRhO1xuICBwLnkgPSBwaHk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wic29tZXJjXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgdHNmbnogZnJvbSAnLi4vY29tbW9uL3RzZm56JztcbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmltcG9ydCBwaGkyeiBmcm9tICcuLi9jb21tb24vcGhpMnonO1xuaW1wb3J0IHtFUFNMTiwgSEFMRl9QSSwgRk9SVFBJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuLyogSW5pdGlhbGl6ZSB0aGUgT2JsaXF1ZSBNZXJjYXRvciAgcHJvamVjdGlvblxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdGhpcy5ub19vZmYgPSB0aGlzLm5vX29mZiB8fCBmYWxzZTtcbiAgdGhpcy5ub19yb3QgPSB0aGlzLm5vX3JvdCB8fCBmYWxzZTtcblxuICBpZiAoaXNOYU4odGhpcy5rMCkpIHtcbiAgICB0aGlzLmswID0gMTtcbiAgfVxuICB2YXIgc2lubGF0ID0gTWF0aC5zaW4odGhpcy5sYXQwKTtcbiAgdmFyIGNvc2xhdCA9IE1hdGguY29zKHRoaXMubGF0MCk7XG4gIHZhciBjb24gPSB0aGlzLmUgKiBzaW5sYXQ7XG5cbiAgdGhpcy5ibCA9IE1hdGguc3FydCgxICsgdGhpcy5lcyAvICgxIC0gdGhpcy5lcykgKiBNYXRoLnBvdyhjb3NsYXQsIDQpKTtcbiAgdGhpcy5hbCA9IHRoaXMuYSAqIHRoaXMuYmwgKiB0aGlzLmswICogTWF0aC5zcXJ0KDEgLSB0aGlzLmVzKSAvICgxIC0gY29uICogY29uKTtcbiAgdmFyIHQwID0gdHNmbnoodGhpcy5lLCB0aGlzLmxhdDAsIHNpbmxhdCk7XG4gIHZhciBkbCA9IHRoaXMuYmwgLyBjb3NsYXQgKiBNYXRoLnNxcnQoKDEgLSB0aGlzLmVzKSAvICgxIC0gY29uICogY29uKSk7XG4gIGlmIChkbCAqIGRsIDwgMSkge1xuICAgIGRsID0gMTtcbiAgfVxuICB2YXIgZmw7XG4gIHZhciBnbDtcbiAgaWYgKCFpc05hTih0aGlzLmxvbmdjKSkge1xuICAgIC8vQ2VudHJhbCBwb2ludCBhbmQgYXppbXV0aCBtZXRob2RcblxuICAgIGlmICh0aGlzLmxhdDAgPj0gMCkge1xuICAgICAgZmwgPSBkbCArIE1hdGguc3FydChkbCAqIGRsIC0gMSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgZmwgPSBkbCAtIE1hdGguc3FydChkbCAqIGRsIC0gMSk7XG4gICAgfVxuICAgIHRoaXMuZWwgPSBmbCAqIE1hdGgucG93KHQwLCB0aGlzLmJsKTtcbiAgICBnbCA9IDAuNSAqIChmbCAtIDEgLyBmbCk7XG4gICAgdGhpcy5nYW1tYTAgPSBNYXRoLmFzaW4oTWF0aC5zaW4odGhpcy5hbHBoYSkgLyBkbCk7XG4gICAgdGhpcy5sb25nMCA9IHRoaXMubG9uZ2MgLSBNYXRoLmFzaW4oZ2wgKiBNYXRoLnRhbih0aGlzLmdhbW1hMCkpIC8gdGhpcy5ibDtcblxuICB9XG4gIGVsc2Uge1xuICAgIC8vMiBwb2ludHMgbWV0aG9kXG4gICAgdmFyIHQxID0gdHNmbnoodGhpcy5lLCB0aGlzLmxhdDEsIE1hdGguc2luKHRoaXMubGF0MSkpO1xuICAgIHZhciB0MiA9IHRzZm56KHRoaXMuZSwgdGhpcy5sYXQyLCBNYXRoLnNpbih0aGlzLmxhdDIpKTtcbiAgICBpZiAodGhpcy5sYXQwID49IDApIHtcbiAgICAgIHRoaXMuZWwgPSAoZGwgKyBNYXRoLnNxcnQoZGwgKiBkbCAtIDEpKSAqIE1hdGgucG93KHQwLCB0aGlzLmJsKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmVsID0gKGRsIC0gTWF0aC5zcXJ0KGRsICogZGwgLSAxKSkgKiBNYXRoLnBvdyh0MCwgdGhpcy5ibCk7XG4gICAgfVxuICAgIHZhciBobCA9IE1hdGgucG93KHQxLCB0aGlzLmJsKTtcbiAgICB2YXIgbGwgPSBNYXRoLnBvdyh0MiwgdGhpcy5ibCk7XG4gICAgZmwgPSB0aGlzLmVsIC8gaGw7XG4gICAgZ2wgPSAwLjUgKiAoZmwgLSAxIC8gZmwpO1xuICAgIHZhciBqbCA9ICh0aGlzLmVsICogdGhpcy5lbCAtIGxsICogaGwpIC8gKHRoaXMuZWwgKiB0aGlzLmVsICsgbGwgKiBobCk7XG4gICAgdmFyIHBsID0gKGxsIC0gaGwpIC8gKGxsICsgaGwpO1xuICAgIHZhciBkbG9uMTIgPSBhZGp1c3RfbG9uKHRoaXMubG9uZzEgLSB0aGlzLmxvbmcyKTtcbiAgICB0aGlzLmxvbmcwID0gMC41ICogKHRoaXMubG9uZzEgKyB0aGlzLmxvbmcyKSAtIE1hdGguYXRhbihqbCAqIE1hdGgudGFuKDAuNSAqIHRoaXMuYmwgKiAoZGxvbjEyKSkgLyBwbCkgLyB0aGlzLmJsO1xuICAgIHRoaXMubG9uZzAgPSBhZGp1c3RfbG9uKHRoaXMubG9uZzApO1xuICAgIHZhciBkbG9uMTAgPSBhZGp1c3RfbG9uKHRoaXMubG9uZzEgLSB0aGlzLmxvbmcwKTtcbiAgICB0aGlzLmdhbW1hMCA9IE1hdGguYXRhbihNYXRoLnNpbih0aGlzLmJsICogKGRsb24xMCkpIC8gZ2wpO1xuICAgIHRoaXMuYWxwaGEgPSBNYXRoLmFzaW4oZGwgKiBNYXRoLnNpbih0aGlzLmdhbW1hMCkpO1xuICB9XG5cbiAgaWYgKHRoaXMubm9fb2ZmKSB7XG4gICAgdGhpcy51YyA9IDA7XG4gIH1cbiAgZWxzZSB7XG4gICAgaWYgKHRoaXMubGF0MCA+PSAwKSB7XG4gICAgICB0aGlzLnVjID0gdGhpcy5hbCAvIHRoaXMuYmwgKiBNYXRoLmF0YW4yKE1hdGguc3FydChkbCAqIGRsIC0gMSksIE1hdGguY29zKHRoaXMuYWxwaGEpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnVjID0gLTEgKiB0aGlzLmFsIC8gdGhpcy5ibCAqIE1hdGguYXRhbjIoTWF0aC5zcXJ0KGRsICogZGwgLSAxKSwgTWF0aC5jb3ModGhpcy5hbHBoYSkpO1xuICAgIH1cbiAgfVxuXG59XG5cbi8qIE9ibGlxdWUgTWVyY2F0b3IgZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIHZhciBkbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgdmFyIHVzLCB2cztcbiAgdmFyIGNvbjtcbiAgaWYgKE1hdGguYWJzKE1hdGguYWJzKGxhdCkgLSBIQUxGX1BJKSA8PSBFUFNMTikge1xuICAgIGlmIChsYXQgPiAwKSB7XG4gICAgICBjb24gPSAtMTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb24gPSAxO1xuICAgIH1cbiAgICB2cyA9IHRoaXMuYWwgLyB0aGlzLmJsICogTWF0aC5sb2coTWF0aC50YW4oRk9SVFBJICsgY29uICogdGhpcy5nYW1tYTAgKiAwLjUpKTtcbiAgICB1cyA9IC0xICogY29uICogSEFMRl9QSSAqIHRoaXMuYWwgLyB0aGlzLmJsO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciB0ID0gdHNmbnoodGhpcy5lLCBsYXQsIE1hdGguc2luKGxhdCkpO1xuICAgIHZhciBxbCA9IHRoaXMuZWwgLyBNYXRoLnBvdyh0LCB0aGlzLmJsKTtcbiAgICB2YXIgc2wgPSAwLjUgKiAocWwgLSAxIC8gcWwpO1xuICAgIHZhciB0bCA9IDAuNSAqIChxbCArIDEgLyBxbCk7XG4gICAgdmFyIHZsID0gTWF0aC5zaW4odGhpcy5ibCAqIChkbG9uKSk7XG4gICAgdmFyIHVsID0gKHNsICogTWF0aC5zaW4odGhpcy5nYW1tYTApIC0gdmwgKiBNYXRoLmNvcyh0aGlzLmdhbW1hMCkpIC8gdGw7XG4gICAgaWYgKE1hdGguYWJzKE1hdGguYWJzKHVsKSAtIDEpIDw9IEVQU0xOKSB7XG4gICAgICB2cyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2cyA9IDAuNSAqIHRoaXMuYWwgKiBNYXRoLmxvZygoMSAtIHVsKSAvICgxICsgdWwpKSAvIHRoaXMuYmw7XG4gICAgfVxuICAgIGlmIChNYXRoLmFicyhNYXRoLmNvcyh0aGlzLmJsICogKGRsb24pKSkgPD0gRVBTTE4pIHtcbiAgICAgIHVzID0gdGhpcy5hbCAqIHRoaXMuYmwgKiAoZGxvbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdXMgPSB0aGlzLmFsICogTWF0aC5hdGFuMihzbCAqIE1hdGguY29zKHRoaXMuZ2FtbWEwKSArIHZsICogTWF0aC5zaW4odGhpcy5nYW1tYTApLCBNYXRoLmNvcyh0aGlzLmJsICogZGxvbikpIC8gdGhpcy5ibDtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5ub19yb3QpIHtcbiAgICBwLnggPSB0aGlzLngwICsgdXM7XG4gICAgcC55ID0gdGhpcy55MCArIHZzO1xuICB9XG4gIGVsc2Uge1xuXG4gICAgdXMgLT0gdGhpcy51YztcbiAgICBwLnggPSB0aGlzLngwICsgdnMgKiBNYXRoLmNvcyh0aGlzLmFscGhhKSArIHVzICogTWF0aC5zaW4odGhpcy5hbHBoYSk7XG4gICAgcC55ID0gdGhpcy55MCArIHVzICogTWF0aC5jb3ModGhpcy5hbHBoYSkgLSB2cyAqIE1hdGguc2luKHRoaXMuYWxwaGEpO1xuICB9XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciB1cywgdnM7XG4gIGlmICh0aGlzLm5vX3JvdCkge1xuICAgIHZzID0gcC55IC0gdGhpcy55MDtcbiAgICB1cyA9IHAueCAtIHRoaXMueDA7XG4gIH1cbiAgZWxzZSB7XG4gICAgdnMgPSAocC54IC0gdGhpcy54MCkgKiBNYXRoLmNvcyh0aGlzLmFscGhhKSAtIChwLnkgLSB0aGlzLnkwKSAqIE1hdGguc2luKHRoaXMuYWxwaGEpO1xuICAgIHVzID0gKHAueSAtIHRoaXMueTApICogTWF0aC5jb3ModGhpcy5hbHBoYSkgKyAocC54IC0gdGhpcy54MCkgKiBNYXRoLnNpbih0aGlzLmFscGhhKTtcbiAgICB1cyArPSB0aGlzLnVjO1xuICB9XG4gIHZhciBxcCA9IE1hdGguZXhwKC0xICogdGhpcy5ibCAqIHZzIC8gdGhpcy5hbCk7XG4gIHZhciBzcCA9IDAuNSAqIChxcCAtIDEgLyBxcCk7XG4gIHZhciB0cCA9IDAuNSAqIChxcCArIDEgLyBxcCk7XG4gIHZhciB2cCA9IE1hdGguc2luKHRoaXMuYmwgKiB1cyAvIHRoaXMuYWwpO1xuICB2YXIgdXAgPSAodnAgKiBNYXRoLmNvcyh0aGlzLmdhbW1hMCkgKyBzcCAqIE1hdGguc2luKHRoaXMuZ2FtbWEwKSkgLyB0cDtcbiAgdmFyIHRzID0gTWF0aC5wb3codGhpcy5lbCAvIE1hdGguc3FydCgoMSArIHVwKSAvICgxIC0gdXApKSwgMSAvIHRoaXMuYmwpO1xuICBpZiAoTWF0aC5hYnModXAgLSAxKSA8IEVQU0xOKSB7XG4gICAgcC54ID0gdGhpcy5sb25nMDtcbiAgICBwLnkgPSBIQUxGX1BJO1xuICB9XG4gIGVsc2UgaWYgKE1hdGguYWJzKHVwICsgMSkgPCBFUFNMTikge1xuICAgIHAueCA9IHRoaXMubG9uZzA7XG4gICAgcC55ID0gLTEgKiBIQUxGX1BJO1xuICB9XG4gIGVsc2Uge1xuICAgIHAueSA9IHBoaTJ6KHRoaXMuZSwgdHMpO1xuICAgIHAueCA9IGFkanVzdF9sb24odGhpcy5sb25nMCAtIE1hdGguYXRhbjIoc3AgKiBNYXRoLmNvcyh0aGlzLmdhbW1hMCkgLSB2cCAqIE1hdGguc2luKHRoaXMuZ2FtbWEwKSwgTWF0aC5jb3ModGhpcy5ibCAqIHVzIC8gdGhpcy5hbCkpIC8gdGhpcy5ibCk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJIb3RpbmVfT2JsaXF1ZV9NZXJjYXRvclwiLCBcIkhvdGluZSBPYmxpcXVlIE1lcmNhdG9yXCIsIFwiSG90aW5lX09ibGlxdWVfTWVyY2F0b3JfQXppbXV0aF9OYXR1cmFsX09yaWdpblwiLCBcIkhvdGluZV9PYmxpcXVlX01lcmNhdG9yX0F6aW11dGhfQ2VudGVyXCIsIFwib21lcmNcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBtc2ZueiBmcm9tICcuLi9jb21tb24vbXNmbnonO1xuaW1wb3J0IHRzZm56IGZyb20gJy4uL2NvbW1vbi90c2Zueic7XG5pbXBvcnQgc2lnbiBmcm9tICcuLi9jb21tb24vc2lnbic7XG5pbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQgcGhpMnogZnJvbSAnLi4vY29tbW9uL3BoaTJ6JztcbmltcG9ydCB7SEFMRl9QSSwgRVBTTE59IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgLy8gYXJyYXkgb2Y6ICByX21haixyX21pbixsYXQxLGxhdDIsY19sb24sY19sYXQsZmFsc2VfZWFzdCxmYWxzZV9ub3J0aFxuICAvL2RvdWJsZSBjX2xhdDsgICAgICAgICAgICAgICAgICAgLyogY2VudGVyIGxhdGl0dWRlICAgICAgICAgICAgICAgICAgICAgICovXG4gIC8vZG91YmxlIGNfbG9uOyAgICAgICAgICAgICAgICAgICAvKiBjZW50ZXIgbG9uZ2l0dWRlICAgICAgICAgICAgICAgICAgICAgKi9cbiAgLy9kb3VibGUgbGF0MTsgICAgICAgICAgICAgICAgICAgIC8qIGZpcnN0IHN0YW5kYXJkIHBhcmFsbGVsICAgICAgICAgICAgICAqL1xuICAvL2RvdWJsZSBsYXQyOyAgICAgICAgICAgICAgICAgICAgLyogc2Vjb25kIHN0YW5kYXJkIHBhcmFsbGVsICAgICAgICAgICAgICovXG4gIC8vZG91YmxlIHJfbWFqOyAgICAgICAgICAgICAgICAgICAvKiBtYWpvciBheGlzICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgLy9kb3VibGUgcl9taW47ICAgICAgICAgICAgICAgICAgIC8qIG1pbm9yIGF4aXMgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAvL2RvdWJsZSBmYWxzZV9lYXN0OyAgICAgICAgICAgICAgLyogeCBvZmZzZXQgaW4gbWV0ZXJzICAgICAgICAgICAgICAgICAgICovXG4gIC8vZG91YmxlIGZhbHNlX25vcnRoOyAgICAgICAgICAgICAvKiB5IG9mZnNldCBpbiBtZXRlcnMgICAgICAgICAgICAgICAgICAgKi9cblxuICBpZiAoIXRoaXMubGF0Mikge1xuICAgIHRoaXMubGF0MiA9IHRoaXMubGF0MTtcbiAgfSAvL2lmIGxhdDIgaXMgbm90IGRlZmluZWRcbiAgaWYgKCF0aGlzLmswKSB7XG4gICAgdGhpcy5rMCA9IDE7XG4gIH1cbiAgdGhpcy54MCA9IHRoaXMueDAgfHwgMDtcbiAgdGhpcy55MCA9IHRoaXMueTAgfHwgMDtcbiAgLy8gU3RhbmRhcmQgUGFyYWxsZWxzIGNhbm5vdCBiZSBlcXVhbCBhbmQgb24gb3Bwb3NpdGUgc2lkZXMgb2YgdGhlIGVxdWF0b3JcbiAgaWYgKE1hdGguYWJzKHRoaXMubGF0MSArIHRoaXMubGF0MikgPCBFUFNMTikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0ZW1wID0gdGhpcy5iIC8gdGhpcy5hO1xuICB0aGlzLmUgPSBNYXRoLnNxcnQoMSAtIHRlbXAgKiB0ZW1wKTtcblxuICB2YXIgc2luMSA9IE1hdGguc2luKHRoaXMubGF0MSk7XG4gIHZhciBjb3MxID0gTWF0aC5jb3ModGhpcy5sYXQxKTtcbiAgdmFyIG1zMSA9IG1zZm56KHRoaXMuZSwgc2luMSwgY29zMSk7XG4gIHZhciB0czEgPSB0c2Zueih0aGlzLmUsIHRoaXMubGF0MSwgc2luMSk7XG5cbiAgdmFyIHNpbjIgPSBNYXRoLnNpbih0aGlzLmxhdDIpO1xuICB2YXIgY29zMiA9IE1hdGguY29zKHRoaXMubGF0Mik7XG4gIHZhciBtczIgPSBtc2Zueih0aGlzLmUsIHNpbjIsIGNvczIpO1xuICB2YXIgdHMyID0gdHNmbnoodGhpcy5lLCB0aGlzLmxhdDIsIHNpbjIpO1xuXG4gIHZhciB0czAgPSB0c2Zueih0aGlzLmUsIHRoaXMubGF0MCwgTWF0aC5zaW4odGhpcy5sYXQwKSk7XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMubGF0MSAtIHRoaXMubGF0MikgPiBFUFNMTikge1xuICAgIHRoaXMubnMgPSBNYXRoLmxvZyhtczEgLyBtczIpIC8gTWF0aC5sb2codHMxIC8gdHMyKTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLm5zID0gc2luMTtcbiAgfVxuICBpZiAoaXNOYU4odGhpcy5ucykpIHtcbiAgICB0aGlzLm5zID0gc2luMTtcbiAgfVxuICB0aGlzLmYwID0gbXMxIC8gKHRoaXMubnMgKiBNYXRoLnBvdyh0czEsIHRoaXMubnMpKTtcbiAgdGhpcy5yaCA9IHRoaXMuYSAqIHRoaXMuZjAgKiBNYXRoLnBvdyh0czAsIHRoaXMubnMpO1xuICBpZiAoIXRoaXMudGl0bGUpIHtcbiAgICB0aGlzLnRpdGxlID0gXCJMYW1iZXJ0IENvbmZvcm1hbCBDb25pY1wiO1xuICB9XG59XG5cbi8vIExhbWJlcnQgQ29uZm9ybWFsIGNvbmljIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcblxuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuXG4gIC8vIHNpbmd1bGFyIGNhc2VzIDpcbiAgaWYgKE1hdGguYWJzKDIgKiBNYXRoLmFicyhsYXQpIC0gTWF0aC5QSSkgPD0gRVBTTE4pIHtcbiAgICBsYXQgPSBzaWduKGxhdCkgKiAoSEFMRl9QSSAtIDIgKiBFUFNMTik7XG4gIH1cblxuICB2YXIgY29uID0gTWF0aC5hYnMoTWF0aC5hYnMobGF0KSAtIEhBTEZfUEkpO1xuICB2YXIgdHMsIHJoMTtcbiAgaWYgKGNvbiA+IEVQU0xOKSB7XG4gICAgdHMgPSB0c2Zueih0aGlzLmUsIGxhdCwgTWF0aC5zaW4obGF0KSk7XG4gICAgcmgxID0gdGhpcy5hICogdGhpcy5mMCAqIE1hdGgucG93KHRzLCB0aGlzLm5zKTtcbiAgfVxuICBlbHNlIHtcbiAgICBjb24gPSBsYXQgKiB0aGlzLm5zO1xuICAgIGlmIChjb24gPD0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJoMSA9IDA7XG4gIH1cbiAgdmFyIHRoZXRhID0gdGhpcy5ucyAqIGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHAueCA9IHRoaXMuazAgKiAocmgxICogTWF0aC5zaW4odGhldGEpKSArIHRoaXMueDA7XG4gIHAueSA9IHRoaXMuazAgKiAodGhpcy5yaCAtIHJoMSAqIE1hdGguY29zKHRoZXRhKSkgKyB0aGlzLnkwO1xuXG4gIHJldHVybiBwO1xufVxuXG4vLyBMYW1iZXJ0IENvbmZvcm1hbCBDb25pYyBpbnZlcnNlIGVxdWF0aW9ucy0tbWFwcGluZyB4LHkgdG8gbGF0L2xvbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG5cbiAgdmFyIHJoMSwgY29uLCB0cztcbiAgdmFyIGxhdCwgbG9uO1xuICB2YXIgeCA9IChwLnggLSB0aGlzLngwKSAvIHRoaXMuazA7XG4gIHZhciB5ID0gKHRoaXMucmggLSAocC55IC0gdGhpcy55MCkgLyB0aGlzLmswKTtcbiAgaWYgKHRoaXMubnMgPiAwKSB7XG4gICAgcmgxID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgIGNvbiA9IDE7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmgxID0gLU1hdGguc3FydCh4ICogeCArIHkgKiB5KTtcbiAgICBjb24gPSAtMTtcbiAgfVxuICB2YXIgdGhldGEgPSAwO1xuICBpZiAocmgxICE9PSAwKSB7XG4gICAgdGhldGEgPSBNYXRoLmF0YW4yKChjb24gKiB4KSwgKGNvbiAqIHkpKTtcbiAgfVxuICBpZiAoKHJoMSAhPT0gMCkgfHwgKHRoaXMubnMgPiAwKSkge1xuICAgIGNvbiA9IDEgLyB0aGlzLm5zO1xuICAgIHRzID0gTWF0aC5wb3coKHJoMSAvICh0aGlzLmEgKiB0aGlzLmYwKSksIGNvbik7XG4gICAgbGF0ID0gcGhpMnoodGhpcy5lLCB0cyk7XG4gICAgaWYgKGxhdCA9PT0gLTk5OTkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBsYXQgPSAtSEFMRl9QSTtcbiAgfVxuICBsb24gPSBhZGp1c3RfbG9uKHRoZXRhIC8gdGhpcy5ucyArIHRoaXMubG9uZzApO1xuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIkxhbWJlcnQgVGFuZ2VudGlhbCBDb25mb3JtYWwgQ29uaWMgUHJvamVjdGlvblwiLCBcIkxhbWJlcnRfQ29uZm9ybWFsX0NvbmljXCIsIFwiTGFtYmVydF9Db25mb3JtYWxfQ29uaWNfMlNQXCIsIFwibGNjXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICB0aGlzLmEgPSA2Mzc3Mzk3LjE1NTtcbiAgdGhpcy5lcyA9IDAuMDA2Njc0MzcyMjMwNjE0O1xuICB0aGlzLmUgPSBNYXRoLnNxcnQodGhpcy5lcyk7XG4gIGlmICghdGhpcy5sYXQwKSB7XG4gICAgdGhpcy5sYXQwID0gMC44NjM5Mzc5Nzk3MzcxOTM7XG4gIH1cbiAgaWYgKCF0aGlzLmxvbmcwKSB7XG4gICAgdGhpcy5sb25nMCA9IDAuNzQxNzY0OTMyMDk3NTkwMSAtIDAuMzA4MzQxNTAxMTg1NjY1O1xuICB9XG4gIC8qIGlmIHNjYWxlIG5vdCBzZXQgZGVmYXVsdCB0byAwLjk5OTkgKi9cbiAgaWYgKCF0aGlzLmswKSB7XG4gICAgdGhpcy5rMCA9IDAuOTk5OTtcbiAgfVxuICB0aGlzLnM0NSA9IDAuNzg1Mzk4MTYzMzk3NDQ4OyAvKiA0NSAqL1xuICB0aGlzLnM5MCA9IDIgKiB0aGlzLnM0NTtcbiAgdGhpcy5maTAgPSB0aGlzLmxhdDA7XG4gIHRoaXMuZTIgPSB0aGlzLmVzO1xuICB0aGlzLmUgPSBNYXRoLnNxcnQodGhpcy5lMik7XG4gIHRoaXMuYWxmYSA9IE1hdGguc3FydCgxICsgKHRoaXMuZTIgKiBNYXRoLnBvdyhNYXRoLmNvcyh0aGlzLmZpMCksIDQpKSAvICgxIC0gdGhpcy5lMikpO1xuICB0aGlzLnVxID0gMS4wNDIxNjg1NjM4MDQ3NDtcbiAgdGhpcy51MCA9IE1hdGguYXNpbihNYXRoLnNpbih0aGlzLmZpMCkgLyB0aGlzLmFsZmEpO1xuICB0aGlzLmcgPSBNYXRoLnBvdygoMSArIHRoaXMuZSAqIE1hdGguc2luKHRoaXMuZmkwKSkgLyAoMSAtIHRoaXMuZSAqIE1hdGguc2luKHRoaXMuZmkwKSksIHRoaXMuYWxmYSAqIHRoaXMuZSAvIDIpO1xuICB0aGlzLmsgPSBNYXRoLnRhbih0aGlzLnUwIC8gMiArIHRoaXMuczQ1KSAvIE1hdGgucG93KE1hdGgudGFuKHRoaXMuZmkwIC8gMiArIHRoaXMuczQ1KSwgdGhpcy5hbGZhKSAqIHRoaXMuZztcbiAgdGhpcy5rMSA9IHRoaXMuazA7XG4gIHRoaXMubjAgPSB0aGlzLmEgKiBNYXRoLnNxcnQoMSAtIHRoaXMuZTIpIC8gKDEgLSB0aGlzLmUyICogTWF0aC5wb3coTWF0aC5zaW4odGhpcy5maTApLCAyKSk7XG4gIHRoaXMuczAgPSAxLjM3MDA4MzQ2MjgxNTU1O1xuICB0aGlzLm4gPSBNYXRoLnNpbih0aGlzLnMwKTtcbiAgdGhpcy5ybzAgPSB0aGlzLmsxICogdGhpcy5uMCAvIE1hdGgudGFuKHRoaXMuczApO1xuICB0aGlzLmFkID0gdGhpcy5zOTAgLSB0aGlzLnVxO1xufVxuXG4vKiBlbGxpcHNvaWQgKi9cbi8qIGNhbGN1bGF0ZSB4eSBmcm9tIGxhdC9sb24gKi9cbi8qIENvbnN0YW50cywgaWRlbnRpY2FsIHRvIGludmVyc2UgdHJhbnNmb3JtIGZ1bmN0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBnZmksIHUsIGRlbHRhdiwgcywgZCwgZXBzLCBybztcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcbiAgdmFyIGRlbHRhX2xvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIC8qIFRyYW5zZm9ybWF0aW9uICovXG4gIGdmaSA9IE1hdGgucG93KCgoMSArIHRoaXMuZSAqIE1hdGguc2luKGxhdCkpIC8gKDEgLSB0aGlzLmUgKiBNYXRoLnNpbihsYXQpKSksICh0aGlzLmFsZmEgKiB0aGlzLmUgLyAyKSk7XG4gIHUgPSAyICogKE1hdGguYXRhbih0aGlzLmsgKiBNYXRoLnBvdyhNYXRoLnRhbihsYXQgLyAyICsgdGhpcy5zNDUpLCB0aGlzLmFsZmEpIC8gZ2ZpKSAtIHRoaXMuczQ1KTtcbiAgZGVsdGF2ID0gLWRlbHRhX2xvbiAqIHRoaXMuYWxmYTtcbiAgcyA9IE1hdGguYXNpbihNYXRoLmNvcyh0aGlzLmFkKSAqIE1hdGguc2luKHUpICsgTWF0aC5zaW4odGhpcy5hZCkgKiBNYXRoLmNvcyh1KSAqIE1hdGguY29zKGRlbHRhdikpO1xuICBkID0gTWF0aC5hc2luKE1hdGguY29zKHUpICogTWF0aC5zaW4oZGVsdGF2KSAvIE1hdGguY29zKHMpKTtcbiAgZXBzID0gdGhpcy5uICogZDtcbiAgcm8gPSB0aGlzLnJvMCAqIE1hdGgucG93KE1hdGgudGFuKHRoaXMuczAgLyAyICsgdGhpcy5zNDUpLCB0aGlzLm4pIC8gTWF0aC5wb3coTWF0aC50YW4ocyAvIDIgKyB0aGlzLnM0NSksIHRoaXMubik7XG4gIHAueSA9IHJvICogTWF0aC5jb3MoZXBzKSAvIDE7XG4gIHAueCA9IHJvICogTWF0aC5zaW4oZXBzKSAvIDE7XG5cbiAgaWYgKCF0aGlzLmN6ZWNoKSB7XG4gICAgcC55ICo9IC0xO1xuICAgIHAueCAqPSAtMTtcbiAgfVxuICByZXR1cm4gKHApO1xufVxuXG4vKiBjYWxjdWxhdGUgbGF0L2xvbiBmcm9tIHh5ICovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciB1LCBkZWx0YXYsIHMsIGQsIGVwcywgcm8sIGZpMTtcbiAgdmFyIG9rO1xuXG4gIC8qIFRyYW5zZm9ybWF0aW9uICovXG4gIC8qIHJldmVydCB5LCB4Ki9cbiAgdmFyIHRtcCA9IHAueDtcbiAgcC54ID0gcC55O1xuICBwLnkgPSB0bXA7XG4gIGlmICghdGhpcy5jemVjaCkge1xuICAgIHAueSAqPSAtMTtcbiAgICBwLnggKj0gLTE7XG4gIH1cbiAgcm8gPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgZXBzID0gTWF0aC5hdGFuMihwLnksIHAueCk7XG4gIGQgPSBlcHMgLyBNYXRoLnNpbih0aGlzLnMwKTtcbiAgcyA9IDIgKiAoTWF0aC5hdGFuKE1hdGgucG93KHRoaXMucm8wIC8gcm8sIDEgLyB0aGlzLm4pICogTWF0aC50YW4odGhpcy5zMCAvIDIgKyB0aGlzLnM0NSkpIC0gdGhpcy5zNDUpO1xuICB1ID0gTWF0aC5hc2luKE1hdGguY29zKHRoaXMuYWQpICogTWF0aC5zaW4ocykgLSBNYXRoLnNpbih0aGlzLmFkKSAqIE1hdGguY29zKHMpICogTWF0aC5jb3MoZCkpO1xuICBkZWx0YXYgPSBNYXRoLmFzaW4oTWF0aC5jb3MocykgKiBNYXRoLnNpbihkKSAvIE1hdGguY29zKHUpKTtcbiAgcC54ID0gdGhpcy5sb25nMCAtIGRlbHRhdiAvIHRoaXMuYWxmYTtcbiAgZmkxID0gdTtcbiAgb2sgPSAwO1xuICB2YXIgaXRlciA9IDA7XG4gIGRvIHtcbiAgICBwLnkgPSAyICogKE1hdGguYXRhbihNYXRoLnBvdyh0aGlzLmssIC0gMSAvIHRoaXMuYWxmYSkgKiBNYXRoLnBvdyhNYXRoLnRhbih1IC8gMiArIHRoaXMuczQ1KSwgMSAvIHRoaXMuYWxmYSkgKiBNYXRoLnBvdygoMSArIHRoaXMuZSAqIE1hdGguc2luKGZpMSkpIC8gKDEgLSB0aGlzLmUgKiBNYXRoLnNpbihmaTEpKSwgdGhpcy5lIC8gMikpIC0gdGhpcy5zNDUpO1xuICAgIGlmIChNYXRoLmFicyhmaTEgLSBwLnkpIDwgMC4wMDAwMDAwMDAxKSB7XG4gICAgICBvayA9IDE7XG4gICAgfVxuICAgIGZpMSA9IHAueTtcbiAgICBpdGVyICs9IDE7XG4gIH0gd2hpbGUgKG9rID09PSAwICYmIGl0ZXIgPCAxNSk7XG4gIGlmIChpdGVyID49IDE1KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKHApO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiS3JvdmFrXCIsIFwia3JvdmFrXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlMCwgZTEsIGUyLCBlMywgcGhpKSB7XG4gIHJldHVybiAoZTAgKiBwaGkgLSBlMSAqIE1hdGguc2luKDIgKiBwaGkpICsgZTIgKiBNYXRoLnNpbig0ICogcGhpKSAtIGUzICogTWF0aC5zaW4oNiAqIHBoaSkpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuICgxIC0gMC4yNSAqIHggKiAoMSArIHggLyAxNiAqICgzICsgMS4yNSAqIHgpKSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gKDAuMzc1ICogeCAqICgxICsgMC4yNSAqIHggKiAoMSArIDAuNDY4NzUgKiB4KSkpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuICgwLjA1ODU5Mzc1ICogeCAqIHggKiAoMSArIDAuNzUgKiB4KSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4gKHggKiB4ICogeCAqICgzNSAvIDMwNzIpKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBlLCBzaW5waGkpIHtcbiAgdmFyIHRlbXAgPSBlICogc2lucGhpO1xuICByZXR1cm4gYSAvIE1hdGguc3FydCgxIC0gdGVtcCAqIHRlbXApO1xufSIsImltcG9ydCB7SEFMRl9QSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5pbXBvcnQgc2lnbiBmcm9tICcuL3NpZ24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiAoTWF0aC5hYnMoeCkgPCBIQUxGX1BJKSA/IHggOiAoeCAtIChzaWduKHgpICogTWF0aC5QSSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWwsIGUwLCBlMSwgZTIsIGUzKSB7XG4gIHZhciBwaGk7XG4gIHZhciBkcGhpO1xuXG4gIHBoaSA9IG1sIC8gZTA7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTU7IGkrKykge1xuICAgIGRwaGkgPSAobWwgLSAoZTAgKiBwaGkgLSBlMSAqIE1hdGguc2luKDIgKiBwaGkpICsgZTIgKiBNYXRoLnNpbig0ICogcGhpKSAtIGUzICogTWF0aC5zaW4oNiAqIHBoaSkpKSAvIChlMCAtIDIgKiBlMSAqIE1hdGguY29zKDIgKiBwaGkpICsgNCAqIGUyICogTWF0aC5jb3MoNCAqIHBoaSkgLSA2ICogZTMgKiBNYXRoLmNvcyg2ICogcGhpKSk7XG4gICAgcGhpICs9IGRwaGk7XG4gICAgaWYgKE1hdGguYWJzKGRwaGkpIDw9IDAuMDAwMDAwMDAwMSkge1xuICAgICAgcmV0dXJuIHBoaTtcbiAgICB9XG4gIH1cblxuICAvLy4ucmVwb3J0RXJyb3IoXCJJTUxGTi1DT05WOkxhdGl0dWRlIGZhaWxlZCB0byBjb252ZXJnZSBhZnRlciAxNSBpdGVyYXRpb25zXCIpO1xuICByZXR1cm4gTmFOO1xufSIsImltcG9ydCBtbGZuIGZyb20gJy4uL2NvbW1vbi9tbGZuJztcbmltcG9ydCBlMGZuIGZyb20gJy4uL2NvbW1vbi9lMGZuJztcbmltcG9ydCBlMWZuIGZyb20gJy4uL2NvbW1vbi9lMWZuJztcbmltcG9ydCBlMmZuIGZyb20gJy4uL2NvbW1vbi9lMmZuJztcbmltcG9ydCBlM2ZuIGZyb20gJy4uL2NvbW1vbi9lM2ZuJztcbmltcG9ydCBnTiBmcm9tICcuLi9jb21tb24vZ04nO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFkanVzdF9sYXQgZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sYXQnO1xuaW1wb3J0IGltbGZuIGZyb20gJy4uL2NvbW1vbi9pbWxmbic7XG5pbXBvcnQge0hBTEZfUEksIEVQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIGlmICghdGhpcy5zcGhlcmUpIHtcbiAgICB0aGlzLmUwID0gZTBmbih0aGlzLmVzKTtcbiAgICB0aGlzLmUxID0gZTFmbih0aGlzLmVzKTtcbiAgICB0aGlzLmUyID0gZTJmbih0aGlzLmVzKTtcbiAgICB0aGlzLmUzID0gZTNmbih0aGlzLmVzKTtcbiAgICB0aGlzLm1sMCA9IHRoaXMuYSAqIG1sZm4odGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMywgdGhpcy5sYXQwKTtcbiAgfVxufVxuXG4vKiBDYXNzaW5pIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG5cbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgdmFyIHgsIHk7XG4gIHZhciBsYW0gPSBwLng7XG4gIHZhciBwaGkgPSBwLnk7XG4gIGxhbSA9IGFkanVzdF9sb24obGFtIC0gdGhpcy5sb25nMCk7XG5cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgeCA9IHRoaXMuYSAqIE1hdGguYXNpbihNYXRoLmNvcyhwaGkpICogTWF0aC5zaW4obGFtKSk7XG4gICAgeSA9IHRoaXMuYSAqIChNYXRoLmF0YW4yKE1hdGgudGFuKHBoaSksIE1hdGguY29zKGxhbSkpIC0gdGhpcy5sYXQwKTtcbiAgfVxuICBlbHNlIHtcbiAgICAvL2VsbGlwc29pZFxuICAgIHZhciBzaW5waGkgPSBNYXRoLnNpbihwaGkpO1xuICAgIHZhciBjb3NwaGkgPSBNYXRoLmNvcyhwaGkpO1xuICAgIHZhciBubCA9IGdOKHRoaXMuYSwgdGhpcy5lLCBzaW5waGkpO1xuICAgIHZhciB0bCA9IE1hdGgudGFuKHBoaSkgKiBNYXRoLnRhbihwaGkpO1xuICAgIHZhciBhbCA9IGxhbSAqIE1hdGguY29zKHBoaSk7XG4gICAgdmFyIGFzcSA9IGFsICogYWw7XG4gICAgdmFyIGNsID0gdGhpcy5lcyAqIGNvc3BoaSAqIGNvc3BoaSAvICgxIC0gdGhpcy5lcyk7XG4gICAgdmFyIG1sID0gdGhpcy5hICogbWxmbih0aGlzLmUwLCB0aGlzLmUxLCB0aGlzLmUyLCB0aGlzLmUzLCBwaGkpO1xuXG4gICAgeCA9IG5sICogYWwgKiAoMSAtIGFzcSAqIHRsICogKDEgLyA2IC0gKDggLSB0bCArIDggKiBjbCkgKiBhc3EgLyAxMjApKTtcbiAgICB5ID0gbWwgLSB0aGlzLm1sMCArIG5sICogc2lucGhpIC8gY29zcGhpICogYXNxICogKDAuNSArICg1IC0gdGwgKyA2ICogY2wpICogYXNxIC8gMjQpO1xuXG5cbiAgfVxuXG4gIHAueCA9IHggKyB0aGlzLngwO1xuICBwLnkgPSB5ICsgdGhpcy55MDtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIEludmVyc2UgZXF1YXRpb25zXG4gIC0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSAtPSB0aGlzLnkwO1xuICB2YXIgeCA9IHAueCAvIHRoaXMuYTtcbiAgdmFyIHkgPSBwLnkgLyB0aGlzLmE7XG4gIHZhciBwaGksIGxhbTtcblxuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICB2YXIgZGQgPSB5ICsgdGhpcy5sYXQwO1xuICAgIHBoaSA9IE1hdGguYXNpbihNYXRoLnNpbihkZCkgKiBNYXRoLmNvcyh4KSk7XG4gICAgbGFtID0gTWF0aC5hdGFuMihNYXRoLnRhbih4KSwgTWF0aC5jb3MoZGQpKTtcbiAgfVxuICBlbHNlIHtcbiAgICAvKiBlbGxpcHNvaWQgKi9cbiAgICB2YXIgbWwxID0gdGhpcy5tbDAgLyB0aGlzLmEgKyB5O1xuICAgIHZhciBwaGkxID0gaW1sZm4obWwxLCB0aGlzLmUwLCB0aGlzLmUxLCB0aGlzLmUyLCB0aGlzLmUzKTtcbiAgICBpZiAoTWF0aC5hYnMoTWF0aC5hYnMocGhpMSkgLSBIQUxGX1BJKSA8PSBFUFNMTikge1xuICAgICAgcC54ID0gdGhpcy5sb25nMDtcbiAgICAgIHAueSA9IEhBTEZfUEk7XG4gICAgICBpZiAoeSA8IDApIHtcbiAgICAgICAgcC55ICo9IC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIHZhciBubDEgPSBnTih0aGlzLmEsIHRoaXMuZSwgTWF0aC5zaW4ocGhpMSkpO1xuXG4gICAgdmFyIHJsMSA9IG5sMSAqIG5sMSAqIG5sMSAvIHRoaXMuYSAvIHRoaXMuYSAqICgxIC0gdGhpcy5lcyk7XG4gICAgdmFyIHRsMSA9IE1hdGgucG93KE1hdGgudGFuKHBoaTEpLCAyKTtcbiAgICB2YXIgZGwgPSB4ICogdGhpcy5hIC8gbmwxO1xuICAgIHZhciBkc3EgPSBkbCAqIGRsO1xuICAgIHBoaSA9IHBoaTEgLSBubDEgKiBNYXRoLnRhbihwaGkxKSAvIHJsMSAqIGRsICogZGwgKiAoMC41IC0gKDEgKyAzICogdGwxKSAqIGRsICogZGwgLyAyNCk7XG4gICAgbGFtID0gZGwgKiAoMSAtIGRzcSAqICh0bDEgLyAzICsgKDEgKyAzICogdGwxKSAqIHRsMSAqIGRzcSAvIDE1KSkgLyBNYXRoLmNvcyhwaGkxKTtcblxuICB9XG5cbiAgcC54ID0gYWRqdXN0X2xvbihsYW0gKyB0aGlzLmxvbmcwKTtcbiAgcC55ID0gYWRqdXN0X2xhdChwaGkpO1xuICByZXR1cm4gcDtcblxufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiQ2Fzc2luaVwiLCBcIkNhc3NpbmlfU29sZG5lclwiLCBcImNhc3NcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGVjY2VudCwgc2lucGhpKSB7XG4gIHZhciBjb247XG4gIGlmIChlY2NlbnQgPiAxLjBlLTcpIHtcbiAgICBjb24gPSBlY2NlbnQgKiBzaW5waGk7XG4gICAgcmV0dXJuICgoMSAtIGVjY2VudCAqIGVjY2VudCkgKiAoc2lucGhpIC8gKDEgLSBjb24gKiBjb24pIC0gKDAuNSAvIGVjY2VudCkgKiBNYXRoLmxvZygoMSAtIGNvbikgLyAoMSArIGNvbikpKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuICgyICogc2lucGhpKTtcbiAgfVxufSIsIlxuaW1wb3J0IHtIQUxGX1BJLCBFUFNMTiwgRk9SVFBJfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuaW1wb3J0IHFzZm56IGZyb20gJy4uL2NvbW1vbi9xc2Zueic7XG5pbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5cbi8qXG4gIHJlZmVyZW5jZVxuICAgIFwiTmV3IEVxdWFsLUFyZWEgTWFwIFByb2plY3Rpb25zIGZvciBOb25jaXJjdWxhciBSZWdpb25zXCIsIEpvaG4gUC4gU255ZGVyLFxuICAgIFRoZSBBbWVyaWNhbiBDYXJ0b2dyYXBoZXIsIFZvbCAxNSwgTm8uIDQsIE9jdG9iZXIgMTk4OCwgcHAuIDM0MS0zNTUuXG4gICovXG5cbmV4cG9ydCB2YXIgU19QT0xFID0gMTtcblxuZXhwb3J0IHZhciBOX1BPTEUgPSAyO1xuZXhwb3J0IHZhciBFUVVJVCA9IDM7XG5leHBvcnQgdmFyIE9CTElRID0gNDtcblxuLyogSW5pdGlhbGl6ZSB0aGUgTGFtYmVydCBBemltdXRoYWwgRXF1YWwgQXJlYSBwcm9qZWN0aW9uXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdmFyIHQgPSBNYXRoLmFicyh0aGlzLmxhdDApO1xuICBpZiAoTWF0aC5hYnModCAtIEhBTEZfUEkpIDwgRVBTTE4pIHtcbiAgICB0aGlzLm1vZGUgPSB0aGlzLmxhdDAgPCAwID8gdGhpcy5TX1BPTEUgOiB0aGlzLk5fUE9MRTtcbiAgfVxuICBlbHNlIGlmIChNYXRoLmFicyh0KSA8IEVQU0xOKSB7XG4gICAgdGhpcy5tb2RlID0gdGhpcy5FUVVJVDtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLm1vZGUgPSB0aGlzLk9CTElRO1xuICB9XG4gIGlmICh0aGlzLmVzID4gMCkge1xuICAgIHZhciBzaW5waGk7XG5cbiAgICB0aGlzLnFwID0gcXNmbnoodGhpcy5lLCAxKTtcbiAgICB0aGlzLm1tZiA9IDAuNSAvICgxIC0gdGhpcy5lcyk7XG4gICAgdGhpcy5hcGEgPSBhdXRoc2V0KHRoaXMuZXMpO1xuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgY2FzZSB0aGlzLk5fUE9MRTpcbiAgICAgIHRoaXMuZGQgPSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLlNfUE9MRTpcbiAgICAgIHRoaXMuZGQgPSAxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLkVRVUlUOlxuICAgICAgdGhpcy5ycSA9IE1hdGguc3FydCgwLjUgKiB0aGlzLnFwKTtcbiAgICAgIHRoaXMuZGQgPSAxIC8gdGhpcy5ycTtcbiAgICAgIHRoaXMueG1mID0gMTtcbiAgICAgIHRoaXMueW1mID0gMC41ICogdGhpcy5xcDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdGhpcy5PQkxJUTpcbiAgICAgIHRoaXMucnEgPSBNYXRoLnNxcnQoMC41ICogdGhpcy5xcCk7XG4gICAgICBzaW5waGkgPSBNYXRoLnNpbih0aGlzLmxhdDApO1xuICAgICAgdGhpcy5zaW5iMSA9IHFzZm56KHRoaXMuZSwgc2lucGhpKSAvIHRoaXMucXA7XG4gICAgICB0aGlzLmNvc2IxID0gTWF0aC5zcXJ0KDEgLSB0aGlzLnNpbmIxICogdGhpcy5zaW5iMSk7XG4gICAgICB0aGlzLmRkID0gTWF0aC5jb3ModGhpcy5sYXQwKSAvIChNYXRoLnNxcnQoMSAtIHRoaXMuZXMgKiBzaW5waGkgKiBzaW5waGkpICogdGhpcy5ycSAqIHRoaXMuY29zYjEpO1xuICAgICAgdGhpcy55bWYgPSAodGhpcy54bWYgPSB0aGlzLnJxKSAvIHRoaXMuZGQ7XG4gICAgICB0aGlzLnhtZiAqPSB0aGlzLmRkO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIGlmICh0aGlzLm1vZGUgPT09IHRoaXMuT0JMSVEpIHtcbiAgICAgIHRoaXMuc2lucGgwID0gTWF0aC5zaW4odGhpcy5sYXQwKTtcbiAgICAgIHRoaXMuY29zcGgwID0gTWF0aC5jb3ModGhpcy5sYXQwKTtcbiAgICB9XG4gIH1cbn1cblxuLyogTGFtYmVydCBBemltdXRoYWwgRXF1YWwgQXJlYSBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuXG4gIC8qIEZvcndhcmQgZXF1YXRpb25zXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIHZhciB4LCB5LCBjb3NsYW0sIHNpbmxhbSwgc2lucGhpLCBxLCBzaW5iLCBjb3NiLCBiLCBjb3NwaGk7XG4gIHZhciBsYW0gPSBwLng7XG4gIHZhciBwaGkgPSBwLnk7XG5cbiAgbGFtID0gYWRqdXN0X2xvbihsYW0gLSB0aGlzLmxvbmcwKTtcbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgc2lucGhpID0gTWF0aC5zaW4ocGhpKTtcbiAgICBjb3NwaGkgPSBNYXRoLmNvcyhwaGkpO1xuICAgIGNvc2xhbSA9IE1hdGguY29zKGxhbSk7XG4gICAgaWYgKHRoaXMubW9kZSA9PT0gdGhpcy5PQkxJUSB8fCB0aGlzLm1vZGUgPT09IHRoaXMuRVFVSVQpIHtcbiAgICAgIHkgPSAodGhpcy5tb2RlID09PSB0aGlzLkVRVUlUKSA/IDEgKyBjb3NwaGkgKiBjb3NsYW0gOiAxICsgdGhpcy5zaW5waDAgKiBzaW5waGkgKyB0aGlzLmNvc3BoMCAqIGNvc3BoaSAqIGNvc2xhbTtcbiAgICAgIGlmICh5IDw9IEVQU0xOKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgeSA9IE1hdGguc3FydCgyIC8geSk7XG4gICAgICB4ID0geSAqIGNvc3BoaSAqIE1hdGguc2luKGxhbSk7XG4gICAgICB5ICo9ICh0aGlzLm1vZGUgPT09IHRoaXMuRVFVSVQpID8gc2lucGhpIDogdGhpcy5jb3NwaDAgKiBzaW5waGkgLSB0aGlzLnNpbnBoMCAqIGNvc3BoaSAqIGNvc2xhbTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5tb2RlID09PSB0aGlzLk5fUE9MRSB8fCB0aGlzLm1vZGUgPT09IHRoaXMuU19QT0xFKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk5fUE9MRSkge1xuICAgICAgICBjb3NsYW0gPSAtY29zbGFtO1xuICAgICAgfVxuICAgICAgaWYgKE1hdGguYWJzKHBoaSArIHRoaXMubGF0MCkgPCBFUFNMTikge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHkgPSBGT1JUUEkgLSBwaGkgKiAwLjU7XG4gICAgICB5ID0gMiAqICgodGhpcy5tb2RlID09PSB0aGlzLlNfUE9MRSkgPyBNYXRoLmNvcyh5KSA6IE1hdGguc2luKHkpKTtcbiAgICAgIHggPSB5ICogTWF0aC5zaW4obGFtKTtcbiAgICAgIHkgKj0gY29zbGFtO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBzaW5iID0gMDtcbiAgICBjb3NiID0gMDtcbiAgICBiID0gMDtcbiAgICBjb3NsYW0gPSBNYXRoLmNvcyhsYW0pO1xuICAgIHNpbmxhbSA9IE1hdGguc2luKGxhbSk7XG4gICAgc2lucGhpID0gTWF0aC5zaW4ocGhpKTtcbiAgICBxID0gcXNmbnoodGhpcy5lLCBzaW5waGkpO1xuICAgIGlmICh0aGlzLm1vZGUgPT09IHRoaXMuT0JMSVEgfHwgdGhpcy5tb2RlID09PSB0aGlzLkVRVUlUKSB7XG4gICAgICBzaW5iID0gcSAvIHRoaXMucXA7XG4gICAgICBjb3NiID0gTWF0aC5zcXJ0KDEgLSBzaW5iICogc2luYik7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgY2FzZSB0aGlzLk9CTElROlxuICAgICAgYiA9IDEgKyB0aGlzLnNpbmIxICogc2luYiArIHRoaXMuY29zYjEgKiBjb3NiICogY29zbGFtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLkVRVUlUOlxuICAgICAgYiA9IDEgKyBjb3NiICogY29zbGFtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLk5fUE9MRTpcbiAgICAgIGIgPSBIQUxGX1BJICsgcGhpO1xuICAgICAgcSA9IHRoaXMucXAgLSBxO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSB0aGlzLlNfUE9MRTpcbiAgICAgIGIgPSBwaGkgLSBIQUxGX1BJO1xuICAgICAgcSA9IHRoaXMucXAgKyBxO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGlmIChNYXRoLmFicyhiKSA8IEVQU0xOKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLm1vZGUpIHtcbiAgICBjYXNlIHRoaXMuT0JMSVE6XG4gICAgY2FzZSB0aGlzLkVRVUlUOlxuICAgICAgYiA9IE1hdGguc3FydCgyIC8gYik7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk9CTElRKSB7XG4gICAgICAgIHkgPSB0aGlzLnltZiAqIGIgKiAodGhpcy5jb3NiMSAqIHNpbmIgLSB0aGlzLnNpbmIxICogY29zYiAqIGNvc2xhbSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgeSA9IChiID0gTWF0aC5zcXJ0KDIgLyAoMSArIGNvc2IgKiBjb3NsYW0pKSkgKiBzaW5iICogdGhpcy55bWY7XG4gICAgICB9XG4gICAgICB4ID0gdGhpcy54bWYgKiBiICogY29zYiAqIHNpbmxhbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdGhpcy5OX1BPTEU6XG4gICAgY2FzZSB0aGlzLlNfUE9MRTpcbiAgICAgIGlmIChxID49IDApIHtcbiAgICAgICAgeCA9IChiID0gTWF0aC5zcXJ0KHEpKSAqIHNpbmxhbTtcbiAgICAgICAgeSA9IGNvc2xhbSAqICgodGhpcy5tb2RlID09PSB0aGlzLlNfUE9MRSkgPyBiIDogLWIpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHggPSB5ID0gMDtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHAueCA9IHRoaXMuYSAqIHggKyB0aGlzLngwO1xuICBwLnkgPSB0aGlzLmEgKiB5ICsgdGhpcy55MDtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIEludmVyc2UgZXF1YXRpb25zXG4gIC0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSAtPSB0aGlzLnkwO1xuICB2YXIgeCA9IHAueCAvIHRoaXMuYTtcbiAgdmFyIHkgPSBwLnkgLyB0aGlzLmE7XG4gIHZhciBsYW0sIHBoaSwgY0NlLCBzQ2UsIHEsIHJobywgYWI7XG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIHZhciBjb3N6ID0gMCxcbiAgICAgIHJoLCBzaW56ID0gMDtcblxuICAgIHJoID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgIHBoaSA9IHJoICogMC41O1xuICAgIGlmIChwaGkgPiAxKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcGhpID0gMiAqIE1hdGguYXNpbihwaGkpO1xuICAgIGlmICh0aGlzLm1vZGUgPT09IHRoaXMuT0JMSVEgfHwgdGhpcy5tb2RlID09PSB0aGlzLkVRVUlUKSB7XG4gICAgICBzaW56ID0gTWF0aC5zaW4ocGhpKTtcbiAgICAgIGNvc3ogPSBNYXRoLmNvcyhwaGkpO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgIGNhc2UgdGhpcy5FUVVJVDpcbiAgICAgIHBoaSA9IChNYXRoLmFicyhyaCkgPD0gRVBTTE4pID8gMCA6IE1hdGguYXNpbih5ICogc2lueiAvIHJoKTtcbiAgICAgIHggKj0gc2luejtcbiAgICAgIHkgPSBjb3N6ICogcmg7XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRoaXMuT0JMSVE6XG4gICAgICBwaGkgPSAoTWF0aC5hYnMocmgpIDw9IEVQU0xOKSA/IHRoaXMubGF0MCA6IE1hdGguYXNpbihjb3N6ICogdGhpcy5zaW5waDAgKyB5ICogc2lueiAqIHRoaXMuY29zcGgwIC8gcmgpO1xuICAgICAgeCAqPSBzaW56ICogdGhpcy5jb3NwaDA7XG4gICAgICB5ID0gKGNvc3ogLSBNYXRoLnNpbihwaGkpICogdGhpcy5zaW5waDApICogcmg7XG4gICAgICBicmVhaztcbiAgICBjYXNlIHRoaXMuTl9QT0xFOlxuICAgICAgeSA9IC15O1xuICAgICAgcGhpID0gSEFMRl9QSSAtIHBoaTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgdGhpcy5TX1BPTEU6XG4gICAgICBwaGkgLT0gSEFMRl9QSTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBsYW0gPSAoeSA9PT0gMCAmJiAodGhpcy5tb2RlID09PSB0aGlzLkVRVUlUIHx8IHRoaXMubW9kZSA9PT0gdGhpcy5PQkxJUSkpID8gMCA6IE1hdGguYXRhbjIoeCwgeSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgYWIgPSAwO1xuICAgIGlmICh0aGlzLm1vZGUgPT09IHRoaXMuT0JMSVEgfHwgdGhpcy5tb2RlID09PSB0aGlzLkVRVUlUKSB7XG4gICAgICB4IC89IHRoaXMuZGQ7XG4gICAgICB5ICo9IHRoaXMuZGQ7XG4gICAgICByaG8gPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XG4gICAgICBpZiAocmhvIDwgRVBTTE4pIHtcbiAgICAgICAgcC54ID0gdGhpcy5sb25nMDtcbiAgICAgICAgcC55ID0gdGhpcy5sYXQwO1xuICAgICAgICByZXR1cm4gcDtcbiAgICAgIH1cbiAgICAgIHNDZSA9IDIgKiBNYXRoLmFzaW4oMC41ICogcmhvIC8gdGhpcy5ycSk7XG4gICAgICBjQ2UgPSBNYXRoLmNvcyhzQ2UpO1xuICAgICAgeCAqPSAoc0NlID0gTWF0aC5zaW4oc0NlKSk7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk9CTElRKSB7XG4gICAgICAgIGFiID0gY0NlICogdGhpcy5zaW5iMSArIHkgKiBzQ2UgKiB0aGlzLmNvc2IxIC8gcmhvO1xuICAgICAgICBxID0gdGhpcy5xcCAqIGFiO1xuICAgICAgICB5ID0gcmhvICogdGhpcy5jb3NiMSAqIGNDZSAtIHkgKiB0aGlzLnNpbmIxICogc0NlO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGFiID0geSAqIHNDZSAvIHJobztcbiAgICAgICAgcSA9IHRoaXMucXAgKiBhYjtcbiAgICAgICAgeSA9IHJobyAqIGNDZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5tb2RlID09PSB0aGlzLk5fUE9MRSB8fCB0aGlzLm1vZGUgPT09IHRoaXMuU19QT0xFKSB7XG4gICAgICBpZiAodGhpcy5tb2RlID09PSB0aGlzLk5fUE9MRSkge1xuICAgICAgICB5ID0gLXk7XG4gICAgICB9XG4gICAgICBxID0gKHggKiB4ICsgeSAqIHkpO1xuICAgICAgaWYgKCFxKSB7XG4gICAgICAgIHAueCA9IHRoaXMubG9uZzA7XG4gICAgICAgIHAueSA9IHRoaXMubGF0MDtcbiAgICAgICAgcmV0dXJuIHA7XG4gICAgICB9XG4gICAgICBhYiA9IDEgLSBxIC8gdGhpcy5xcDtcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09IHRoaXMuU19QT0xFKSB7XG4gICAgICAgIGFiID0gLWFiO1xuICAgICAgfVxuICAgIH1cbiAgICBsYW0gPSBNYXRoLmF0YW4yKHgsIHkpO1xuICAgIHBoaSA9IGF1dGhsYXQoTWF0aC5hc2luKGFiKSwgdGhpcy5hcGEpO1xuICB9XG5cbiAgcC54ID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgbGFtKTtcbiAgcC55ID0gcGhpO1xuICByZXR1cm4gcDtcbn1cblxuLyogZGV0ZXJtaW5lIGxhdGl0dWRlIGZyb20gYXV0aGFsaWMgbGF0aXR1ZGUgKi9cbnZhciBQMDAgPSAwLjMzMzMzMzMzMzMzMzMzMzMzMzMzO1xuXG52YXIgUDAxID0gMC4xNzIyMjIyMjIyMjIyMjIyMjIyMjtcbnZhciBQMDIgPSAwLjEwMjU3OTM2NTA3OTM2NTA3OTM2O1xudmFyIFAxMCA9IDAuMDYzODg4ODg4ODg4ODg4ODg4ODg7XG52YXIgUDExID0gMC4wNjY0MDIxMTY0MDIxMTY0MDIxMTtcbnZhciBQMjAgPSAwLjAxNjQxNTAxMjk0MjE5MTU0NDQzO1xuXG5mdW5jdGlvbiBhdXRoc2V0KGVzKSB7XG4gIHZhciB0O1xuICB2YXIgQVBBID0gW107XG4gIEFQQVswXSA9IGVzICogUDAwO1xuICB0ID0gZXMgKiBlcztcbiAgQVBBWzBdICs9IHQgKiBQMDE7XG4gIEFQQVsxXSA9IHQgKiBQMTA7XG4gIHQgKj0gZXM7XG4gIEFQQVswXSArPSB0ICogUDAyO1xuICBBUEFbMV0gKz0gdCAqIFAxMTtcbiAgQVBBWzJdID0gdCAqIFAyMDtcbiAgcmV0dXJuIEFQQTtcbn1cblxuZnVuY3Rpb24gYXV0aGxhdChiZXRhLCBBUEEpIHtcbiAgdmFyIHQgPSBiZXRhICsgYmV0YTtcbiAgcmV0dXJuIChiZXRhICsgQVBBWzBdICogTWF0aC5zaW4odCkgKyBBUEFbMV0gKiBNYXRoLnNpbih0ICsgdCkgKyBBUEFbMl0gKiBNYXRoLnNpbih0ICsgdCArIHQpKTtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIkxhbWJlcnQgQXppbXV0aGFsIEVxdWFsIEFyZWFcIiwgXCJMYW1iZXJ0X0F6aW11dGhhbF9FcXVhbF9BcmVhXCIsIFwibGFlYVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzLFxuICBTX1BPTEU6IFNfUE9MRSxcbiAgTl9QT0xFOiBOX1BPTEUsXG4gIEVRVUlUOiBFUVVJVCxcbiAgT0JMSVE6IE9CTElRXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICBpZiAoTWF0aC5hYnMoeCkgPiAxKSB7XG4gICAgeCA9ICh4ID4gMSkgPyAxIDogLTE7XG4gIH1cbiAgcmV0dXJuIE1hdGguYXNpbih4KTtcbn0iLCJpbXBvcnQgbXNmbnogZnJvbSAnLi4vY29tbW9uL21zZm56JztcbmltcG9ydCBxc2ZueiBmcm9tICcuLi9jb21tb24vcXNmbnonO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFzaW56IGZyb20gJy4uL2NvbW1vbi9hc2lueic7XG5pbXBvcnQge0VQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMubGF0MSArIHRoaXMubGF0MikgPCBFUFNMTikge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnRlbXAgPSB0aGlzLmIgLyB0aGlzLmE7XG4gIHRoaXMuZXMgPSAxIC0gTWF0aC5wb3codGhpcy50ZW1wLCAyKTtcbiAgdGhpcy5lMyA9IE1hdGguc3FydCh0aGlzLmVzKTtcblxuICB0aGlzLnNpbl9wbyA9IE1hdGguc2luKHRoaXMubGF0MSk7XG4gIHRoaXMuY29zX3BvID0gTWF0aC5jb3ModGhpcy5sYXQxKTtcbiAgdGhpcy50MSA9IHRoaXMuc2luX3BvO1xuICB0aGlzLmNvbiA9IHRoaXMuc2luX3BvO1xuICB0aGlzLm1zMSA9IG1zZm56KHRoaXMuZTMsIHRoaXMuc2luX3BvLCB0aGlzLmNvc19wbyk7XG4gIHRoaXMucXMxID0gcXNmbnoodGhpcy5lMywgdGhpcy5zaW5fcG8sIHRoaXMuY29zX3BvKTtcblxuICB0aGlzLnNpbl9wbyA9IE1hdGguc2luKHRoaXMubGF0Mik7XG4gIHRoaXMuY29zX3BvID0gTWF0aC5jb3ModGhpcy5sYXQyKTtcbiAgdGhpcy50MiA9IHRoaXMuc2luX3BvO1xuICB0aGlzLm1zMiA9IG1zZm56KHRoaXMuZTMsIHRoaXMuc2luX3BvLCB0aGlzLmNvc19wbyk7XG4gIHRoaXMucXMyID0gcXNmbnoodGhpcy5lMywgdGhpcy5zaW5fcG8sIHRoaXMuY29zX3BvKTtcblxuICB0aGlzLnNpbl9wbyA9IE1hdGguc2luKHRoaXMubGF0MCk7XG4gIHRoaXMuY29zX3BvID0gTWF0aC5jb3ModGhpcy5sYXQwKTtcbiAgdGhpcy50MyA9IHRoaXMuc2luX3BvO1xuICB0aGlzLnFzMCA9IHFzZm56KHRoaXMuZTMsIHRoaXMuc2luX3BvLCB0aGlzLmNvc19wbyk7XG5cbiAgaWYgKE1hdGguYWJzKHRoaXMubGF0MSAtIHRoaXMubGF0MikgPiBFUFNMTikge1xuICAgIHRoaXMubnMwID0gKHRoaXMubXMxICogdGhpcy5tczEgLSB0aGlzLm1zMiAqIHRoaXMubXMyKSAvICh0aGlzLnFzMiAtIHRoaXMucXMxKTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLm5zMCA9IHRoaXMuY29uO1xuICB9XG4gIHRoaXMuYyA9IHRoaXMubXMxICogdGhpcy5tczEgKyB0aGlzLm5zMCAqIHRoaXMucXMxO1xuICB0aGlzLnJoID0gdGhpcy5hICogTWF0aC5zcXJ0KHRoaXMuYyAtIHRoaXMubnMwICogdGhpcy5xczApIC8gdGhpcy5uczA7XG59XG5cbi8qIEFsYmVycyBDb25pY2FsIEVxdWFsIEFyZWEgZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuXG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG5cbiAgdGhpcy5zaW5fcGhpID0gTWF0aC5zaW4obGF0KTtcbiAgdGhpcy5jb3NfcGhpID0gTWF0aC5jb3MobGF0KTtcblxuICB2YXIgcXMgPSBxc2Zueih0aGlzLmUzLCB0aGlzLnNpbl9waGksIHRoaXMuY29zX3BoaSk7XG4gIHZhciByaDEgPSB0aGlzLmEgKiBNYXRoLnNxcnQodGhpcy5jIC0gdGhpcy5uczAgKiBxcykgLyB0aGlzLm5zMDtcbiAgdmFyIHRoZXRhID0gdGhpcy5uczAgKiBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICB2YXIgeCA9IHJoMSAqIE1hdGguc2luKHRoZXRhKSArIHRoaXMueDA7XG4gIHZhciB5ID0gdGhpcy5yaCAtIHJoMSAqIE1hdGguY29zKHRoZXRhKSArIHRoaXMueTA7XG5cbiAgcC54ID0geDtcbiAgcC55ID0geTtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIHJoMSwgcXMsIGNvbiwgdGhldGEsIGxvbiwgbGF0O1xuXG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgPSB0aGlzLnJoIC0gcC55ICsgdGhpcy55MDtcbiAgaWYgKHRoaXMubnMwID49IDApIHtcbiAgICByaDEgPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgICBjb24gPSAxO1xuICB9XG4gIGVsc2Uge1xuICAgIHJoMSA9IC1NYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgICBjb24gPSAtMTtcbiAgfVxuICB0aGV0YSA9IDA7XG4gIGlmIChyaDEgIT09IDApIHtcbiAgICB0aGV0YSA9IE1hdGguYXRhbjIoY29uICogcC54LCBjb24gKiBwLnkpO1xuICB9XG4gIGNvbiA9IHJoMSAqIHRoaXMubnMwIC8gdGhpcy5hO1xuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBsYXQgPSBNYXRoLmFzaW4oKHRoaXMuYyAtIGNvbiAqIGNvbikgLyAoMiAqIHRoaXMubnMwKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgcXMgPSAodGhpcy5jIC0gY29uICogY29uKSAvIHRoaXMubnMwO1xuICAgIGxhdCA9IHRoaXMucGhpMXoodGhpcy5lMywgcXMpO1xuICB9XG5cbiAgbG9uID0gYWRqdXN0X2xvbih0aGV0YSAvIHRoaXMubnMwICsgdGhpcy5sb25nMCk7XG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuLyogRnVuY3Rpb24gdG8gY29tcHV0ZSBwaGkxLCB0aGUgbGF0aXR1ZGUgZm9yIHRoZSBpbnZlcnNlIG9mIHRoZVxuICAgQWxiZXJzIENvbmljYWwgRXF1YWwtQXJlYSBwcm9qZWN0aW9uLlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gcGhpMXooZWNjZW50LCBxcykge1xuICB2YXIgc2lucGhpLCBjb3NwaGksIGNvbiwgY29tLCBkcGhpO1xuICB2YXIgcGhpID0gYXNpbnooMC41ICogcXMpO1xuICBpZiAoZWNjZW50IDwgRVBTTE4pIHtcbiAgICByZXR1cm4gcGhpO1xuICB9XG5cbiAgdmFyIGVjY250cyA9IGVjY2VudCAqIGVjY2VudDtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPD0gMjU7IGkrKykge1xuICAgIHNpbnBoaSA9IE1hdGguc2luKHBoaSk7XG4gICAgY29zcGhpID0gTWF0aC5jb3MocGhpKTtcbiAgICBjb24gPSBlY2NlbnQgKiBzaW5waGk7XG4gICAgY29tID0gMSAtIGNvbiAqIGNvbjtcbiAgICBkcGhpID0gMC41ICogY29tICogY29tIC8gY29zcGhpICogKHFzIC8gKDEgLSBlY2NudHMpIC0gc2lucGhpIC8gY29tICsgMC41IC8gZWNjZW50ICogTWF0aC5sb2coKDEgLSBjb24pIC8gKDEgKyBjb24pKSk7XG4gICAgcGhpID0gcGhpICsgZHBoaTtcbiAgICBpZiAoTWF0aC5hYnMoZHBoaSkgPD0gMWUtNykge1xuICAgICAgcmV0dXJuIHBoaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJBbGJlcnNfQ29uaWNfRXF1YWxfQXJlYVwiLCBcIkFsYmVyc1wiLCBcImFlYVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzLFxuICBwaGkxejogcGhpMXpcbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQgYXNpbnogZnJvbSAnLi4vY29tbW9uL2FzaW56JztcbmltcG9ydCB7RVBTTE59IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG4vKlxuICByZWZlcmVuY2U6XG4gICAgV29sZnJhbSBNYXRod29ybGQgXCJHbm9tb25pYyBQcm9qZWN0aW9uXCJcbiAgICBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL0dub21vbmljUHJvamVjdGlvbi5odG1sXG4gICAgQWNjZXNzZWQ6IDEydGggTm92ZW1iZXIgMjAwOVxuICAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgLyogUGxhY2UgcGFyYW1ldGVycyBpbiBzdGF0aWMgc3RvcmFnZSBmb3IgY29tbW9uIHVzZVxuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIHRoaXMuc2luX3AxNCA9IE1hdGguc2luKHRoaXMubGF0MCk7XG4gIHRoaXMuY29zX3AxNCA9IE1hdGguY29zKHRoaXMubGF0MCk7XG4gIC8vIEFwcHJveGltYXRpb24gZm9yIHByb2plY3RpbmcgcG9pbnRzIHRvIHRoZSBob3Jpem9uIChpbmZpbml0eSlcbiAgdGhpcy5pbmZpbml0eV9kaXN0ID0gMTAwMCAqIHRoaXMuYTtcbiAgdGhpcy5yYyA9IDE7XG59XG5cbi8qIEdub21vbmljIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBzaW5waGksIGNvc3BoaTsgLyogc2luIGFuZCBjb3MgdmFsdWUgICAgICAgICovXG4gIHZhciBkbG9uOyAvKiBkZWx0YSBsb25naXR1ZGUgdmFsdWUgICAgICAqL1xuICB2YXIgY29zbG9uOyAvKiBjb3Mgb2YgbG9uZ2l0dWRlICAgICAgICAqL1xuICB2YXIga3NwOyAvKiBzY2FsZSBmYWN0b3IgICAgICAgICAgKi9cbiAgdmFyIGc7XG4gIHZhciB4LCB5O1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICAvKiBGb3J3YXJkIGVxdWF0aW9uc1xuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0qL1xuICBkbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcblxuICBzaW5waGkgPSBNYXRoLnNpbihsYXQpO1xuICBjb3NwaGkgPSBNYXRoLmNvcyhsYXQpO1xuXG4gIGNvc2xvbiA9IE1hdGguY29zKGRsb24pO1xuICBnID0gdGhpcy5zaW5fcDE0ICogc2lucGhpICsgdGhpcy5jb3NfcDE0ICogY29zcGhpICogY29zbG9uO1xuICBrc3AgPSAxO1xuICBpZiAoKGcgPiAwKSB8fCAoTWF0aC5hYnMoZykgPD0gRVBTTE4pKSB7XG4gICAgeCA9IHRoaXMueDAgKyB0aGlzLmEgKiBrc3AgKiBjb3NwaGkgKiBNYXRoLnNpbihkbG9uKSAvIGc7XG4gICAgeSA9IHRoaXMueTAgKyB0aGlzLmEgKiBrc3AgKiAodGhpcy5jb3NfcDE0ICogc2lucGhpIC0gdGhpcy5zaW5fcDE0ICogY29zcGhpICogY29zbG9uKSAvIGc7XG4gIH1cbiAgZWxzZSB7XG5cbiAgICAvLyBQb2ludCBpcyBpbiB0aGUgb3Bwb3NpbmcgaGVtaXNwaGVyZSBhbmQgaXMgdW5wcm9qZWN0YWJsZVxuICAgIC8vIFdlIHN0aWxsIG5lZWQgdG8gcmV0dXJuIGEgcmVhc29uYWJsZSBwb2ludCwgc28gd2UgcHJvamVjdFxuICAgIC8vIHRvIGluZmluaXR5LCBvbiBhIGJlYXJpbmdcbiAgICAvLyBlcXVpdmFsZW50IHRvIHRoZSBub3J0aGVybiBoZW1pc3BoZXJlIGVxdWl2YWxlbnRcbiAgICAvLyBUaGlzIGlzIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9uIGZvciBzaG9ydCBzaGFwZXMgYW5kIGxpbmVzIHRoYXRcbiAgICAvLyBzdHJhZGRsZSB0aGUgaG9yaXpvbi5cblxuICAgIHggPSB0aGlzLngwICsgdGhpcy5pbmZpbml0eV9kaXN0ICogY29zcGhpICogTWF0aC5zaW4oZGxvbik7XG4gICAgeSA9IHRoaXMueTAgKyB0aGlzLmluZmluaXR5X2Rpc3QgKiAodGhpcy5jb3NfcDE0ICogc2lucGhpIC0gdGhpcy5zaW5fcDE0ICogY29zcGhpICogY29zbG9uKTtcblxuICB9XG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciByaDsgLyogUmhvICovXG4gIHZhciBzaW5jLCBjb3NjO1xuICB2YXIgYztcbiAgdmFyIGxvbiwgbGF0O1xuXG4gIC8qIEludmVyc2UgZXF1YXRpb25zXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIHAueCA9IChwLnggLSB0aGlzLngwKSAvIHRoaXMuYTtcbiAgcC55ID0gKHAueSAtIHRoaXMueTApIC8gdGhpcy5hO1xuXG4gIHAueCAvPSB0aGlzLmswO1xuICBwLnkgLz0gdGhpcy5rMDtcblxuICBpZiAoKHJoID0gTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSkpKSB7XG4gICAgYyA9IE1hdGguYXRhbjIocmgsIHRoaXMucmMpO1xuICAgIHNpbmMgPSBNYXRoLnNpbihjKTtcbiAgICBjb3NjID0gTWF0aC5jb3MoYyk7XG5cbiAgICBsYXQgPSBhc2lueihjb3NjICogdGhpcy5zaW5fcDE0ICsgKHAueSAqIHNpbmMgKiB0aGlzLmNvc19wMTQpIC8gcmgpO1xuICAgIGxvbiA9IE1hdGguYXRhbjIocC54ICogc2luYywgcmggKiB0aGlzLmNvc19wMTQgKiBjb3NjIC0gcC55ICogdGhpcy5zaW5fcDE0ICogc2luYyk7XG4gICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgbG9uKTtcbiAgfVxuICBlbHNlIHtcbiAgICBsYXQgPSB0aGlzLnBoaWMwO1xuICAgIGxvbiA9IDA7XG4gIH1cblxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJnbm9tXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQgcXNmbnogZnJvbSAnLi4vY29tbW9uL3FzZm56JztcbmltcG9ydCBtc2ZueiBmcm9tICcuLi9jb21tb24vbXNmbnonO1xuaW1wb3J0IGlxc2ZueiBmcm9tICcuLi9jb21tb24vaXFzZm56JztcblxuLypcbiAgcmVmZXJlbmNlOlxuICAgIFwiQ2FydG9ncmFwaGljIFByb2plY3Rpb24gUHJvY2VkdXJlcyBmb3IgdGhlIFVOSVggRW52aXJvbm1lbnQtXG4gICAgQSBVc2VyJ3MgTWFudWFsXCIgYnkgR2VyYWxkIEkuIEV2ZW5kZW4sXG4gICAgVVNHUyBPcGVuIEZpbGUgUmVwb3J0IDkwLTI4NGFuZCBSZWxlYXNlIDQgSW50ZXJpbSBSZXBvcnRzICgyMDAzKVxuKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICAvL25vLW9wXG4gIGlmICghdGhpcy5zcGhlcmUpIHtcbiAgICB0aGlzLmswID0gbXNmbnoodGhpcy5lLCBNYXRoLnNpbih0aGlzLmxhdF90cyksIE1hdGguY29zKHRoaXMubGF0X3RzKSk7XG4gIH1cbn1cblxuLyogQ3lsaW5kcmljYWwgRXF1YWwgQXJlYSBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICB2YXIgeCwgeTtcbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgdmFyIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICB4ID0gdGhpcy54MCArIHRoaXMuYSAqIGRsb24gKiBNYXRoLmNvcyh0aGlzLmxhdF90cyk7XG4gICAgeSA9IHRoaXMueTAgKyB0aGlzLmEgKiBNYXRoLnNpbihsYXQpIC8gTWF0aC5jb3ModGhpcy5sYXRfdHMpO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciBxcyA9IHFzZm56KHRoaXMuZSwgTWF0aC5zaW4obGF0KSk7XG4gICAgeCA9IHRoaXMueDAgKyB0aGlzLmEgKiB0aGlzLmswICogZGxvbjtcbiAgICB5ID0gdGhpcy55MCArIHRoaXMuYSAqIHFzICogMC41IC8gdGhpcy5rMDtcbiAgfVxuXG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG4gIHJldHVybiBwO1xufVxuXG4vKiBDeWxpbmRyaWNhbCBFcXVhbCBBcmVhIGludmVyc2UgZXF1YXRpb25zLS1tYXBwaW5nIHgseSB0byBsYXQvbG9uZ1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgLT0gdGhpcy55MDtcbiAgdmFyIGxvbiwgbGF0O1xuXG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIChwLnggLyB0aGlzLmEpIC8gTWF0aC5jb3ModGhpcy5sYXRfdHMpKTtcbiAgICBsYXQgPSBNYXRoLmFzaW4oKHAueSAvIHRoaXMuYSkgKiBNYXRoLmNvcyh0aGlzLmxhdF90cykpO1xuICB9XG4gIGVsc2Uge1xuICAgIGxhdCA9IGlxc2Zueih0aGlzLmUsIDIgKiBwLnkgKiB0aGlzLmswIC8gdGhpcy5hKTtcbiAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBwLnggLyAodGhpcy5hICogdGhpcy5rMCkpO1xuICB9XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiY2VhXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQge0hBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihlY2NlbnQsIHEpIHtcbiAgdmFyIHRlbXAgPSAxIC0gKDEgLSBlY2NlbnQgKiBlY2NlbnQpIC8gKDIgKiBlY2NlbnQpICogTWF0aC5sb2coKDEgLSBlY2NlbnQpIC8gKDEgKyBlY2NlbnQpKTtcbiAgaWYgKE1hdGguYWJzKE1hdGguYWJzKHEpIC0gdGVtcCkgPCAxLjBFLTYpIHtcbiAgICBpZiAocSA8IDApIHtcbiAgICAgIHJldHVybiAoLTEgKiBIQUxGX1BJKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gSEFMRl9QSTtcbiAgICB9XG4gIH1cbiAgLy92YXIgcGhpID0gMC41KiBxLygxLWVjY2VudCplY2NlbnQpO1xuICB2YXIgcGhpID0gTWF0aC5hc2luKDAuNSAqIHEpO1xuICB2YXIgZHBoaTtcbiAgdmFyIHNpbl9waGk7XG4gIHZhciBjb3NfcGhpO1xuICB2YXIgY29uO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDMwOyBpKyspIHtcbiAgICBzaW5fcGhpID0gTWF0aC5zaW4ocGhpKTtcbiAgICBjb3NfcGhpID0gTWF0aC5jb3MocGhpKTtcbiAgICBjb24gPSBlY2NlbnQgKiBzaW5fcGhpO1xuICAgIGRwaGkgPSBNYXRoLnBvdygxIC0gY29uICogY29uLCAyKSAvICgyICogY29zX3BoaSkgKiAocSAvICgxIC0gZWNjZW50ICogZWNjZW50KSAtIHNpbl9waGkgLyAoMSAtIGNvbiAqIGNvbikgKyAwLjUgLyBlY2NlbnQgKiBNYXRoLmxvZygoMSAtIGNvbikgLyAoMSArIGNvbikpKTtcbiAgICBwaGkgKz0gZHBoaTtcbiAgICBpZiAoTWF0aC5hYnMoZHBoaSkgPD0gMC4wMDAwMDAwMDAxKSB7XG4gICAgICByZXR1cm4gcGhpO1xuICAgIH1cbiAgfVxuXG4gIC8vY29uc29sZS5sb2coXCJJUVNGTi1DT05WOkxhdGl0dWRlIGZhaWxlZCB0byBjb252ZXJnZSBhZnRlciAzMCBpdGVyYXRpb25zXCIpO1xuICByZXR1cm4gTmFOO1xufVxuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFkanVzdF9sYXQgZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sYXQnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcblxuICB0aGlzLngwID0gdGhpcy54MCB8fCAwO1xuICB0aGlzLnkwID0gdGhpcy55MCB8fCAwO1xuICB0aGlzLmxhdDAgPSB0aGlzLmxhdDAgfHwgMDtcbiAgdGhpcy5sb25nMCA9IHRoaXMubG9uZzAgfHwgMDtcbiAgdGhpcy5sYXRfdHMgPSB0aGlzLmxhdF90cyB8fCAwO1xuICB0aGlzLnRpdGxlID0gdGhpcy50aXRsZSB8fCBcIkVxdWlkaXN0YW50IEN5bGluZHJpY2FsIChQbGF0ZSBDYXJyZSlcIjtcblxuICB0aGlzLnJjID0gTWF0aC5jb3ModGhpcy5sYXRfdHMpO1xufVxuXG4vLyBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG5cbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcblxuICB2YXIgZGxvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHZhciBkbGF0ID0gYWRqdXN0X2xhdChsYXQgLSB0aGlzLmxhdDApO1xuICBwLnggPSB0aGlzLngwICsgKHRoaXMuYSAqIGRsb24gKiB0aGlzLnJjKTtcbiAgcC55ID0gdGhpcy55MCArICh0aGlzLmEgKiBkbGF0KTtcbiAgcmV0dXJuIHA7XG59XG5cbi8vIGludmVyc2UgZXF1YXRpb25zLS1tYXBwaW5nIHgseSB0byBsYXQvbG9uZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcblxuICB2YXIgeCA9IHAueDtcbiAgdmFyIHkgPSBwLnk7XG5cbiAgcC54ID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgKCh4IC0gdGhpcy54MCkgLyAodGhpcy5hICogdGhpcy5yYykpKTtcbiAgcC55ID0gYWRqdXN0X2xhdCh0aGlzLmxhdDAgKyAoKHkgLSB0aGlzLnkwKSAvICh0aGlzLmEpKSk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiRXF1aXJlY3Rhbmd1bGFyXCIsIFwiRXF1aWRpc3RhbnRfQ3lsaW5kcmljYWxcIiwgXCJlcWNcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBlMGZuIGZyb20gJy4uL2NvbW1vbi9lMGZuJztcbmltcG9ydCBlMWZuIGZyb20gJy4uL2NvbW1vbi9lMWZuJztcbmltcG9ydCBlMmZuIGZyb20gJy4uL2NvbW1vbi9lMmZuJztcbmltcG9ydCBlM2ZuIGZyb20gJy4uL2NvbW1vbi9lM2ZuJztcbmltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcbmltcG9ydCBhZGp1c3RfbGF0IGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbGF0JztcbmltcG9ydCBtbGZuIGZyb20gJy4uL2NvbW1vbi9tbGZuJztcbmltcG9ydCB7RVBTTE59IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5pbXBvcnQgZ04gZnJvbSAnLi4vY29tbW9uL2dOJztcbnZhciBNQVhfSVRFUiA9IDIwO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgLyogUGxhY2UgcGFyYW1ldGVycyBpbiBzdGF0aWMgc3RvcmFnZSBmb3IgY29tbW9uIHVzZVxuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIHRoaXMudGVtcCA9IHRoaXMuYiAvIHRoaXMuYTtcbiAgdGhpcy5lcyA9IDEgLSBNYXRoLnBvdyh0aGlzLnRlbXAsIDIpOyAvLyBkZXZhaXQgZXRyZSBkYW5zIHRtZXJjLmpzIG1haXMgbiB5IGVzdCBwYXMgZG9uYyBqZSBjb21tZW50ZSBzaW5vbiByZXRvdXIgZGUgdmFsZXVycyBudWxsZXNcbiAgdGhpcy5lID0gTWF0aC5zcXJ0KHRoaXMuZXMpO1xuICB0aGlzLmUwID0gZTBmbih0aGlzLmVzKTtcbiAgdGhpcy5lMSA9IGUxZm4odGhpcy5lcyk7XG4gIHRoaXMuZTIgPSBlMmZuKHRoaXMuZXMpO1xuICB0aGlzLmUzID0gZTNmbih0aGlzLmVzKTtcbiAgdGhpcy5tbDAgPSB0aGlzLmEgKiBtbGZuKHRoaXMuZTAsIHRoaXMuZTEsIHRoaXMuZTIsIHRoaXMuZTMsIHRoaXMubGF0MCk7IC8vc2kgcXVlIGRlcyB6ZXJvcyBsZSBjYWxjdWwgbmUgc2UgZmFpdCBwYXNcbn1cblxuLyogUG9seWNvbmljIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIHZhciB4LCB5LCBlbDtcbiAgdmFyIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICBlbCA9IGRsb24gKiBNYXRoLnNpbihsYXQpO1xuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBpZiAoTWF0aC5hYnMobGF0KSA8PSBFUFNMTikge1xuICAgICAgeCA9IHRoaXMuYSAqIGRsb247XG4gICAgICB5ID0gLTEgKiB0aGlzLmEgKiB0aGlzLmxhdDA7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgeCA9IHRoaXMuYSAqIE1hdGguc2luKGVsKSAvIE1hdGgudGFuKGxhdCk7XG4gICAgICB5ID0gdGhpcy5hICogKGFkanVzdF9sYXQobGF0IC0gdGhpcy5sYXQwKSArICgxIC0gTWF0aC5jb3MoZWwpKSAvIE1hdGgudGFuKGxhdCkpO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBpZiAoTWF0aC5hYnMobGF0KSA8PSBFUFNMTikge1xuICAgICAgeCA9IHRoaXMuYSAqIGRsb247XG4gICAgICB5ID0gLTEgKiB0aGlzLm1sMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB2YXIgbmwgPSBnTih0aGlzLmEsIHRoaXMuZSwgTWF0aC5zaW4obGF0KSkgLyBNYXRoLnRhbihsYXQpO1xuICAgICAgeCA9IG5sICogTWF0aC5zaW4oZWwpO1xuICAgICAgeSA9IHRoaXMuYSAqIG1sZm4odGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMywgbGF0KSAtIHRoaXMubWwwICsgbmwgKiAoMSAtIE1hdGguY29zKGVsKSk7XG4gICAgfVxuXG4gIH1cbiAgcC54ID0geCArIHRoaXMueDA7XG4gIHAueSA9IHkgKyB0aGlzLnkwO1xuICByZXR1cm4gcDtcbn1cblxuLyogSW52ZXJzZSBlcXVhdGlvbnNcbiAgLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgbG9uLCBsYXQsIHgsIHksIGk7XG4gIHZhciBhbCwgYmw7XG4gIHZhciBwaGksIGRwaGk7XG4gIHggPSBwLnggLSB0aGlzLngwO1xuICB5ID0gcC55IC0gdGhpcy55MDtcblxuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBpZiAoTWF0aC5hYnMoeSArIHRoaXMuYSAqIHRoaXMubGF0MCkgPD0gRVBTTE4pIHtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24oeCAvIHRoaXMuYSArIHRoaXMubG9uZzApO1xuICAgICAgbGF0ID0gMDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBhbCA9IHRoaXMubGF0MCArIHkgLyB0aGlzLmE7XG4gICAgICBibCA9IHggKiB4IC8gdGhpcy5hIC8gdGhpcy5hICsgYWwgKiBhbDtcbiAgICAgIHBoaSA9IGFsO1xuICAgICAgdmFyIHRhbnBoaTtcbiAgICAgIGZvciAoaSA9IE1BWF9JVEVSOyBpOyAtLWkpIHtcbiAgICAgICAgdGFucGhpID0gTWF0aC50YW4ocGhpKTtcbiAgICAgICAgZHBoaSA9IC0xICogKGFsICogKHBoaSAqIHRhbnBoaSArIDEpIC0gcGhpIC0gMC41ICogKHBoaSAqIHBoaSArIGJsKSAqIHRhbnBoaSkgLyAoKHBoaSAtIGFsKSAvIHRhbnBoaSAtIDEpO1xuICAgICAgICBwaGkgKz0gZHBoaTtcbiAgICAgICAgaWYgKE1hdGguYWJzKGRwaGkpIDw9IEVQU0xOKSB7XG4gICAgICAgICAgbGF0ID0gcGhpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyAoTWF0aC5hc2luKHggKiBNYXRoLnRhbihwaGkpIC8gdGhpcy5hKSkgLyBNYXRoLnNpbihsYXQpKTtcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgaWYgKE1hdGguYWJzKHkgKyB0aGlzLm1sMCkgPD0gRVBTTE4pIHtcbiAgICAgIGxhdCA9IDA7XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyB4IC8gdGhpcy5hKTtcbiAgICB9XG4gICAgZWxzZSB7XG5cbiAgICAgIGFsID0gKHRoaXMubWwwICsgeSkgLyB0aGlzLmE7XG4gICAgICBibCA9IHggKiB4IC8gdGhpcy5hIC8gdGhpcy5hICsgYWwgKiBhbDtcbiAgICAgIHBoaSA9IGFsO1xuICAgICAgdmFyIGNsLCBtbG4sIG1sbnAsIG1hO1xuICAgICAgdmFyIGNvbjtcbiAgICAgIGZvciAoaSA9IE1BWF9JVEVSOyBpOyAtLWkpIHtcbiAgICAgICAgY29uID0gdGhpcy5lICogTWF0aC5zaW4ocGhpKTtcbiAgICAgICAgY2wgPSBNYXRoLnNxcnQoMSAtIGNvbiAqIGNvbikgKiBNYXRoLnRhbihwaGkpO1xuICAgICAgICBtbG4gPSB0aGlzLmEgKiBtbGZuKHRoaXMuZTAsIHRoaXMuZTEsIHRoaXMuZTIsIHRoaXMuZTMsIHBoaSk7XG4gICAgICAgIG1sbnAgPSB0aGlzLmUwIC0gMiAqIHRoaXMuZTEgKiBNYXRoLmNvcygyICogcGhpKSArIDQgKiB0aGlzLmUyICogTWF0aC5jb3MoNCAqIHBoaSkgLSA2ICogdGhpcy5lMyAqIE1hdGguY29zKDYgKiBwaGkpO1xuICAgICAgICBtYSA9IG1sbiAvIHRoaXMuYTtcbiAgICAgICAgZHBoaSA9IChhbCAqIChjbCAqIG1hICsgMSkgLSBtYSAtIDAuNSAqIGNsICogKG1hICogbWEgKyBibCkpIC8gKHRoaXMuZXMgKiBNYXRoLnNpbigyICogcGhpKSAqIChtYSAqIG1hICsgYmwgLSAyICogYWwgKiBtYSkgLyAoNCAqIGNsKSArIChhbCAtIG1hKSAqIChjbCAqIG1sbnAgLSAyIC8gTWF0aC5zaW4oMiAqIHBoaSkpIC0gbWxucCk7XG4gICAgICAgIHBoaSAtPSBkcGhpO1xuICAgICAgICBpZiAoTWF0aC5hYnMoZHBoaSkgPD0gRVBTTE4pIHtcbiAgICAgICAgICBsYXQgPSBwaGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy9sYXQ9cGhpNHoodGhpcy5lLHRoaXMuZTAsdGhpcy5lMSx0aGlzLmUyLHRoaXMuZTMsYWwsYmwsMCwwKTtcbiAgICAgIGNsID0gTWF0aC5zcXJ0KDEgLSB0aGlzLmVzICogTWF0aC5wb3coTWF0aC5zaW4obGF0KSwgMikpICogTWF0aC50YW4obGF0KTtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXNpbih4ICogY2wgLyB0aGlzLmEpIC8gTWF0aC5zaW4obGF0KSk7XG4gICAgfVxuICB9XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiUG9seWNvbmljXCIsIFwicG9seVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IHtTRUNfVE9fUkFEfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuLypcbiAgcmVmZXJlbmNlXG4gICAgRGVwYXJ0bWVudCBvZiBMYW5kIGFuZCBTdXJ2ZXkgVGVjaG5pY2FsIENpcmN1bGFyIDE5NzMvMzJcbiAgICAgIGh0dHA6Ly93d3cubGluei5nb3Z0Lm56L2RvY3MvbWlzY2VsbGFuZW91cy9uei1tYXAtZGVmaW5pdGlvbi5wZGZcbiAgICBPU0cgVGVjaG5pY2FsIFJlcG9ydCA0LjFcbiAgICAgIGh0dHA6Ly93d3cubGluei5nb3Z0Lm56L2RvY3MvbWlzY2VsbGFuZW91cy9uem1nLnBkZlxuICAqL1xuXG4vKipcbiAqIGl0ZXJhdGlvbnM6IE51bWJlciBvZiBpdGVyYXRpb25zIHRvIHJlZmluZSBpbnZlcnNlIHRyYW5zZm9ybS5cbiAqICAgICAwIC0+IGttIGFjY3VyYWN5XG4gKiAgICAgMSAtPiBtIGFjY3VyYWN5IC0tIHN1aXRhYmxlIGZvciBtb3N0IG1hcHBpbmcgYXBwbGljYXRpb25zXG4gKiAgICAgMiAtPiBtbSBhY2N1cmFjeVxuICovXG5leHBvcnQgdmFyIGl0ZXJhdGlvbnMgPSAxO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgdGhpcy5BID0gW107XG4gIHRoaXMuQVsxXSA9IDAuNjM5OTE3NTA3MztcbiAgdGhpcy5BWzJdID0gLTAuMTM1ODc5NzYxMztcbiAgdGhpcy5BWzNdID0gMC4wNjMyOTQ0MDk7XG4gIHRoaXMuQVs0XSA9IC0wLjAyNTI2ODUzO1xuICB0aGlzLkFbNV0gPSAwLjAxMTc4Nzk7XG4gIHRoaXMuQVs2XSA9IC0wLjAwNTUxNjE7XG4gIHRoaXMuQVs3XSA9IDAuMDAyNjkwNjtcbiAgdGhpcy5BWzhdID0gLTAuMDAxMzMzO1xuICB0aGlzLkFbOV0gPSAwLjAwMDY3O1xuICB0aGlzLkFbMTBdID0gLTAuMDAwMzQ7XG5cbiAgdGhpcy5CX3JlID0gW107XG4gIHRoaXMuQl9pbSA9IFtdO1xuICB0aGlzLkJfcmVbMV0gPSAwLjc1NTc4NTMyMjg7XG4gIHRoaXMuQl9pbVsxXSA9IDA7XG4gIHRoaXMuQl9yZVsyXSA9IDAuMjQ5MjA0NjQ2O1xuICB0aGlzLkJfaW1bMl0gPSAwLjAwMzM3MTUwNztcbiAgdGhpcy5CX3JlWzNdID0gLTAuMDAxNTQxNzM5O1xuICB0aGlzLkJfaW1bM10gPSAwLjA0MTA1ODU2MDtcbiAgdGhpcy5CX3JlWzRdID0gLTAuMTAxNjI5MDc7XG4gIHRoaXMuQl9pbVs0XSA9IDAuMDE3Mjc2MDk7XG4gIHRoaXMuQl9yZVs1XSA9IC0wLjI2NjIzNDg5O1xuICB0aGlzLkJfaW1bNV0gPSAtMC4zNjI0OTIxODtcbiAgdGhpcy5CX3JlWzZdID0gLTAuNjg3MDk4MztcbiAgdGhpcy5CX2ltWzZdID0gLTEuMTY1MTk2NztcblxuICB0aGlzLkNfcmUgPSBbXTtcbiAgdGhpcy5DX2ltID0gW107XG4gIHRoaXMuQ19yZVsxXSA9IDEuMzIzMTI3MDQzOTtcbiAgdGhpcy5DX2ltWzFdID0gMDtcbiAgdGhpcy5DX3JlWzJdID0gLTAuNTc3MjQ1Nzg5O1xuICB0aGlzLkNfaW1bMl0gPSAtMC4wMDc4MDk1OTg7XG4gIHRoaXMuQ19yZVszXSA9IDAuNTA4MzA3NTEzO1xuICB0aGlzLkNfaW1bM10gPSAtMC4xMTIyMDg5NTI7XG4gIHRoaXMuQ19yZVs0XSA9IC0wLjE1MDk0NzYyO1xuICB0aGlzLkNfaW1bNF0gPSAwLjE4MjAwNjAyO1xuICB0aGlzLkNfcmVbNV0gPSAxLjAxNDE4MTc5O1xuICB0aGlzLkNfaW1bNV0gPSAxLjY0NDk3Njk2O1xuICB0aGlzLkNfcmVbNl0gPSAxLjk2NjA1NDk7XG4gIHRoaXMuQ19pbVs2XSA9IDIuNTEyNzY0NTtcblxuICB0aGlzLkQgPSBbXTtcbiAgdGhpcy5EWzFdID0gMS41NjI3MDE0MjQzO1xuICB0aGlzLkRbMl0gPSAwLjUxODU0MDYzOTg7XG4gIHRoaXMuRFszXSA9IC0wLjAzMzMzMDk4O1xuICB0aGlzLkRbNF0gPSAtMC4xMDUyOTA2O1xuICB0aGlzLkRbNV0gPSAtMC4wMzY4NTk0O1xuICB0aGlzLkRbNl0gPSAwLjAwNzMxNztcbiAgdGhpcy5EWzddID0gMC4wMTIyMDtcbiAgdGhpcy5EWzhdID0gMC4wMDM5NDtcbiAgdGhpcy5EWzldID0gLTAuMDAxMztcbn1cblxuLyoqXG4gICAgTmV3IFplYWxhbmQgTWFwIEdyaWQgRm9yd2FyZCAgLSBsb25nL2xhdCB0byB4L3lcbiAgICBsb25nL2xhdCBpbiByYWRpYW5zXG4gICovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBuO1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuXG4gIHZhciBkZWx0YV9sYXQgPSBsYXQgLSB0aGlzLmxhdDA7XG4gIHZhciBkZWx0YV9sb24gPSBsb24gLSB0aGlzLmxvbmcwO1xuXG4gIC8vIDEuIENhbGN1bGF0ZSBkX3BoaSBhbmQgZF9wc2kgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZF9sYW1iZGFcbiAgLy8gRm9yIHRoaXMgYWxnb3JpdGhtLCBkZWx0YV9sYXRpdHVkZSBpcyBpbiBzZWNvbmRzIG9mIGFyYyB4IDEwLTUsIHNvIHdlIG5lZWQgdG8gc2NhbGUgdG8gdGhvc2UgdW5pdHMuIExvbmdpdHVkZSBpcyByYWRpYW5zLlxuICB2YXIgZF9waGkgPSBkZWx0YV9sYXQgLyBTRUNfVE9fUkFEICogMUUtNTtcbiAgdmFyIGRfbGFtYmRhID0gZGVsdGFfbG9uO1xuICB2YXIgZF9waGlfbiA9IDE7IC8vIGRfcGhpXjBcblxuICB2YXIgZF9wc2kgPSAwO1xuICBmb3IgKG4gPSAxOyBuIDw9IDEwOyBuKyspIHtcbiAgICBkX3BoaV9uID0gZF9waGlfbiAqIGRfcGhpO1xuICAgIGRfcHNpID0gZF9wc2kgKyB0aGlzLkFbbl0gKiBkX3BoaV9uO1xuICB9XG5cbiAgLy8gMi4gQ2FsY3VsYXRlIHRoZXRhXG4gIHZhciB0aF9yZSA9IGRfcHNpO1xuICB2YXIgdGhfaW0gPSBkX2xhbWJkYTtcblxuICAvLyAzLiBDYWxjdWxhdGUgelxuICB2YXIgdGhfbl9yZSA9IDE7XG4gIHZhciB0aF9uX2ltID0gMDsgLy8gdGhldGFeMFxuICB2YXIgdGhfbl9yZTE7XG4gIHZhciB0aF9uX2ltMTtcblxuICB2YXIgel9yZSA9IDA7XG4gIHZhciB6X2ltID0gMDtcbiAgZm9yIChuID0gMTsgbiA8PSA2OyBuKyspIHtcbiAgICB0aF9uX3JlMSA9IHRoX25fcmUgKiB0aF9yZSAtIHRoX25faW0gKiB0aF9pbTtcbiAgICB0aF9uX2ltMSA9IHRoX25faW0gKiB0aF9yZSArIHRoX25fcmUgKiB0aF9pbTtcbiAgICB0aF9uX3JlID0gdGhfbl9yZTE7XG4gICAgdGhfbl9pbSA9IHRoX25faW0xO1xuICAgIHpfcmUgPSB6X3JlICsgdGhpcy5CX3JlW25dICogdGhfbl9yZSAtIHRoaXMuQl9pbVtuXSAqIHRoX25faW07XG4gICAgel9pbSA9IHpfaW0gKyB0aGlzLkJfaW1bbl0gKiB0aF9uX3JlICsgdGhpcy5CX3JlW25dICogdGhfbl9pbTtcbiAgfVxuXG4gIC8vIDQuIENhbGN1bGF0ZSBlYXN0aW5nIGFuZCBub3J0aGluZ1xuICBwLnggPSAoel9pbSAqIHRoaXMuYSkgKyB0aGlzLngwO1xuICBwLnkgPSAoel9yZSAqIHRoaXMuYSkgKyB0aGlzLnkwO1xuXG4gIHJldHVybiBwO1xufVxuXG4vKipcbiAgICBOZXcgWmVhbGFuZCBNYXAgR3JpZCBJbnZlcnNlICAtICB4L3kgdG8gbG9uZy9sYXRcbiAgKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIG47XG4gIHZhciB4ID0gcC54O1xuICB2YXIgeSA9IHAueTtcblxuICB2YXIgZGVsdGFfeCA9IHggLSB0aGlzLngwO1xuICB2YXIgZGVsdGFfeSA9IHkgLSB0aGlzLnkwO1xuXG4gIC8vIDEuIENhbGN1bGF0ZSB6XG4gIHZhciB6X3JlID0gZGVsdGFfeSAvIHRoaXMuYTtcbiAgdmFyIHpfaW0gPSBkZWx0YV94IC8gdGhpcy5hO1xuXG4gIC8vIDJhLiBDYWxjdWxhdGUgdGhldGEgLSBmaXJzdCBhcHByb3hpbWF0aW9uIGdpdmVzIGttIGFjY3VyYWN5XG4gIHZhciB6X25fcmUgPSAxO1xuICB2YXIgel9uX2ltID0gMDsgLy8gel4wXG4gIHZhciB6X25fcmUxO1xuICB2YXIgel9uX2ltMTtcblxuICB2YXIgdGhfcmUgPSAwO1xuICB2YXIgdGhfaW0gPSAwO1xuICBmb3IgKG4gPSAxOyBuIDw9IDY7IG4rKykge1xuICAgIHpfbl9yZTEgPSB6X25fcmUgKiB6X3JlIC0gel9uX2ltICogel9pbTtcbiAgICB6X25faW0xID0gel9uX2ltICogel9yZSArIHpfbl9yZSAqIHpfaW07XG4gICAgel9uX3JlID0gel9uX3JlMTtcbiAgICB6X25faW0gPSB6X25faW0xO1xuICAgIHRoX3JlID0gdGhfcmUgKyB0aGlzLkNfcmVbbl0gKiB6X25fcmUgLSB0aGlzLkNfaW1bbl0gKiB6X25faW07XG4gICAgdGhfaW0gPSB0aF9pbSArIHRoaXMuQ19pbVtuXSAqIHpfbl9yZSArIHRoaXMuQ19yZVtuXSAqIHpfbl9pbTtcbiAgfVxuXG4gIC8vIDJiLiBJdGVyYXRlIHRvIHJlZmluZSB0aGUgYWNjdXJhY3kgb2YgdGhlIGNhbGN1bGF0aW9uXG4gIC8vICAgICAgICAwIGl0ZXJhdGlvbnMgZ2l2ZXMga20gYWNjdXJhY3lcbiAgLy8gICAgICAgIDEgaXRlcmF0aW9uIGdpdmVzIG0gYWNjdXJhY3kgLS0gZ29vZCBlbm91Z2ggZm9yIG1vc3QgbWFwcGluZyBhcHBsaWNhdGlvbnNcbiAgLy8gICAgICAgIDIgaXRlcmF0aW9ucyBiaXZlcyBtbSBhY2N1cmFjeVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlcmF0aW9uczsgaSsrKSB7XG4gICAgdmFyIHRoX25fcmUgPSB0aF9yZTtcbiAgICB2YXIgdGhfbl9pbSA9IHRoX2ltO1xuICAgIHZhciB0aF9uX3JlMTtcbiAgICB2YXIgdGhfbl9pbTE7XG5cbiAgICB2YXIgbnVtX3JlID0gel9yZTtcbiAgICB2YXIgbnVtX2ltID0gel9pbTtcbiAgICBmb3IgKG4gPSAyOyBuIDw9IDY7IG4rKykge1xuICAgICAgdGhfbl9yZTEgPSB0aF9uX3JlICogdGhfcmUgLSB0aF9uX2ltICogdGhfaW07XG4gICAgICB0aF9uX2ltMSA9IHRoX25faW0gKiB0aF9yZSArIHRoX25fcmUgKiB0aF9pbTtcbiAgICAgIHRoX25fcmUgPSB0aF9uX3JlMTtcbiAgICAgIHRoX25faW0gPSB0aF9uX2ltMTtcbiAgICAgIG51bV9yZSA9IG51bV9yZSArIChuIC0gMSkgKiAodGhpcy5CX3JlW25dICogdGhfbl9yZSAtIHRoaXMuQl9pbVtuXSAqIHRoX25faW0pO1xuICAgICAgbnVtX2ltID0gbnVtX2ltICsgKG4gLSAxKSAqICh0aGlzLkJfaW1bbl0gKiB0aF9uX3JlICsgdGhpcy5CX3JlW25dICogdGhfbl9pbSk7XG4gICAgfVxuXG4gICAgdGhfbl9yZSA9IDE7XG4gICAgdGhfbl9pbSA9IDA7XG4gICAgdmFyIGRlbl9yZSA9IHRoaXMuQl9yZVsxXTtcbiAgICB2YXIgZGVuX2ltID0gdGhpcy5CX2ltWzFdO1xuICAgIGZvciAobiA9IDI7IG4gPD0gNjsgbisrKSB7XG4gICAgICB0aF9uX3JlMSA9IHRoX25fcmUgKiB0aF9yZSAtIHRoX25faW0gKiB0aF9pbTtcbiAgICAgIHRoX25faW0xID0gdGhfbl9pbSAqIHRoX3JlICsgdGhfbl9yZSAqIHRoX2ltO1xuICAgICAgdGhfbl9yZSA9IHRoX25fcmUxO1xuICAgICAgdGhfbl9pbSA9IHRoX25faW0xO1xuICAgICAgZGVuX3JlID0gZGVuX3JlICsgbiAqICh0aGlzLkJfcmVbbl0gKiB0aF9uX3JlIC0gdGhpcy5CX2ltW25dICogdGhfbl9pbSk7XG4gICAgICBkZW5faW0gPSBkZW5faW0gKyBuICogKHRoaXMuQl9pbVtuXSAqIHRoX25fcmUgKyB0aGlzLkJfcmVbbl0gKiB0aF9uX2ltKTtcbiAgICB9XG5cbiAgICAvLyBDb21wbGV4IGRpdmlzaW9uXG4gICAgdmFyIGRlbjIgPSBkZW5fcmUgKiBkZW5fcmUgKyBkZW5faW0gKiBkZW5faW07XG4gICAgdGhfcmUgPSAobnVtX3JlICogZGVuX3JlICsgbnVtX2ltICogZGVuX2ltKSAvIGRlbjI7XG4gICAgdGhfaW0gPSAobnVtX2ltICogZGVuX3JlIC0gbnVtX3JlICogZGVuX2ltKSAvIGRlbjI7XG4gIH1cblxuICAvLyAzLiBDYWxjdWxhdGUgZF9waGkgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBkX2xhbWJkYVxuICB2YXIgZF9wc2kgPSB0aF9yZTtcbiAgdmFyIGRfbGFtYmRhID0gdGhfaW07XG4gIHZhciBkX3BzaV9uID0gMTsgLy8gZF9wc2leMFxuXG4gIHZhciBkX3BoaSA9IDA7XG4gIGZvciAobiA9IDE7IG4gPD0gOTsgbisrKSB7XG4gICAgZF9wc2lfbiA9IGRfcHNpX24gKiBkX3BzaTtcbiAgICBkX3BoaSA9IGRfcGhpICsgdGhpcy5EW25dICogZF9wc2lfbjtcbiAgfVxuXG4gIC8vIDQuIENhbGN1bGF0ZSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlXG4gIC8vIGRfcGhpIGlzIGNhbGN1YXRlZCBpbiBzZWNvbmQgb2YgYXJjICogMTBeLTUsIHNvIHdlIG5lZWQgdG8gc2NhbGUgYmFjayB0byByYWRpYW5zLiBkX2xhbWJkYSBpcyBpbiByYWRpYW5zLlxuICB2YXIgbGF0ID0gdGhpcy5sYXQwICsgKGRfcGhpICogU0VDX1RPX1JBRCAqIDFFNSk7XG4gIHZhciBsb24gPSB0aGlzLmxvbmcwICsgZF9sYW1iZGE7XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG5cbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJOZXdfWmVhbGFuZF9NYXBfR3JpZFwiLCBcIm56bWdcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBhZGp1c3RfbG9uIGZyb20gJy4uL2NvbW1vbi9hZGp1c3RfbG9uJztcblxuLypcbiAgcmVmZXJlbmNlXG4gICAgXCJOZXcgRXF1YWwtQXJlYSBNYXAgUHJvamVjdGlvbnMgZm9yIE5vbmNpcmN1bGFyIFJlZ2lvbnNcIiwgSm9obiBQLiBTbnlkZXIsXG4gICAgVGhlIEFtZXJpY2FuIENhcnRvZ3JhcGhlciwgVm9sIDE1LCBOby4gNCwgT2N0b2JlciAxOTg4LCBwcC4gMzQxLTM1NS5cbiAgKi9cblxuXG4vKiBJbml0aWFsaXplIHRoZSBNaWxsZXIgQ3lsaW5kcmljYWwgcHJvamVjdGlvblxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICAvL25vLW9wXG59XG5cbi8qIE1pbGxlciBDeWxpbmRyaWNhbCBmb3J3YXJkIGVxdWF0aW9ucy0tbWFwcGluZyBsYXQsbG9uZyB0byB4LHlcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICAvKiBGb3J3YXJkIGVxdWF0aW9uc1xuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0qL1xuICB2YXIgZGxvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHZhciB4ID0gdGhpcy54MCArIHRoaXMuYSAqIGRsb247XG4gIHZhciB5ID0gdGhpcy55MCArIHRoaXMuYSAqIE1hdGgubG9nKE1hdGgudGFuKChNYXRoLlBJIC8gNCkgKyAobGF0IC8gMi41KSkpICogMS4yNTtcblxuICBwLnggPSB4O1xuICBwLnkgPSB5O1xuICByZXR1cm4gcDtcbn1cblxuLyogTWlsbGVyIEN5bGluZHJpY2FsIGludmVyc2UgZXF1YXRpb25zLS1tYXBwaW5nIHgseSB0byBsYXQvbG9uZ1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgLT0gdGhpcy55MDtcblxuICB2YXIgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgcC54IC8gdGhpcy5hKTtcbiAgdmFyIGxhdCA9IDIuNSAqIChNYXRoLmF0YW4oTWF0aC5leHAoMC44ICogcC55IC8gdGhpcy5hKSkgLSBNYXRoLlBJIC8gNCk7XG5cbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiTWlsbGVyX0N5bGluZHJpY2FsXCIsIFwibWlsbFwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFkanVzdF9sYXQgZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sYXQnO1xuaW1wb3J0IHBqX2VuZm4gZnJvbSAnLi4vY29tbW9uL3BqX2VuZm4nO1xudmFyIE1BWF9JVEVSID0gMjA7XG5pbXBvcnQgcGpfbWxmbiBmcm9tICcuLi9jb21tb24vcGpfbWxmbic7XG5pbXBvcnQgcGpfaW52X21sZm4gZnJvbSAnLi4vY29tbW9uL3BqX2ludl9tbGZuJztcbmltcG9ydCB7RVBTTE4sIEhBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5pbXBvcnQgYXNpbnogZnJvbSAnLi4vY29tbW9uL2FzaW56JztcblxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgLyogUGxhY2UgcGFyYW1ldGVycyBpbiBzdGF0aWMgc3RvcmFnZSBmb3IgY29tbW9uIHVzZVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cbiAgaWYgKCF0aGlzLnNwaGVyZSkge1xuICAgIHRoaXMuZW4gPSBwal9lbmZuKHRoaXMuZXMpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRoaXMubiA9IDE7XG4gICAgdGhpcy5tID0gMDtcbiAgICB0aGlzLmVzID0gMDtcbiAgICB0aGlzLkNfeSA9IE1hdGguc3FydCgodGhpcy5tICsgMSkgLyB0aGlzLm4pO1xuICAgIHRoaXMuQ194ID0gdGhpcy5DX3kgLyAodGhpcy5tICsgMSk7XG4gIH1cblxufVxuXG4vKiBTaW51c29pZGFsIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciB4LCB5O1xuICB2YXIgbG9uID0gcC54O1xuICB2YXIgbGF0ID0gcC55O1xuICAvKiBGb3J3YXJkIGVxdWF0aW9uc1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcblxuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBpZiAoIXRoaXMubSkge1xuICAgICAgbGF0ID0gdGhpcy5uICE9PSAxID8gTWF0aC5hc2luKHRoaXMubiAqIE1hdGguc2luKGxhdCkpIDogbGF0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHZhciBrID0gdGhpcy5uICogTWF0aC5zaW4obGF0KTtcbiAgICAgIGZvciAodmFyIGkgPSBNQVhfSVRFUjsgaTsgLS1pKSB7XG4gICAgICAgIHZhciBWID0gKHRoaXMubSAqIGxhdCArIE1hdGguc2luKGxhdCkgLSBrKSAvICh0aGlzLm0gKyBNYXRoLmNvcyhsYXQpKTtcbiAgICAgICAgbGF0IC09IFY7XG4gICAgICAgIGlmIChNYXRoLmFicyhWKSA8IEVQU0xOKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgeCA9IHRoaXMuYSAqIHRoaXMuQ194ICogbG9uICogKHRoaXMubSArIE1hdGguY29zKGxhdCkpO1xuICAgIHkgPSB0aGlzLmEgKiB0aGlzLkNfeSAqIGxhdDtcblxuICB9XG4gIGVsc2Uge1xuXG4gICAgdmFyIHMgPSBNYXRoLnNpbihsYXQpO1xuICAgIHZhciBjID0gTWF0aC5jb3MobGF0KTtcbiAgICB5ID0gdGhpcy5hICogcGpfbWxmbihsYXQsIHMsIGMsIHRoaXMuZW4pO1xuICAgIHggPSB0aGlzLmEgKiBsb24gKiBjIC8gTWF0aC5zcXJ0KDEgLSB0aGlzLmVzICogcyAqIHMpO1xuICB9XG5cbiAgcC54ID0geDtcbiAgcC55ID0geTtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIGxhdCwgdGVtcCwgbG9uLCBzO1xuXG4gIHAueCAtPSB0aGlzLngwO1xuICBsb24gPSBwLnggLyB0aGlzLmE7XG4gIHAueSAtPSB0aGlzLnkwO1xuICBsYXQgPSBwLnkgLyB0aGlzLmE7XG5cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgbGF0IC89IHRoaXMuQ195O1xuICAgIGxvbiA9IGxvbiAvICh0aGlzLkNfeCAqICh0aGlzLm0gKyBNYXRoLmNvcyhsYXQpKSk7XG4gICAgaWYgKHRoaXMubSkge1xuICAgICAgbGF0ID0gYXNpbnooKHRoaXMubSAqIGxhdCArIE1hdGguc2luKGxhdCkpIC8gdGhpcy5uKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5uICE9PSAxKSB7XG4gICAgICBsYXQgPSBhc2lueihNYXRoLnNpbihsYXQpIC8gdGhpcy5uKTtcbiAgICB9XG4gICAgbG9uID0gYWRqdXN0X2xvbihsb24gKyB0aGlzLmxvbmcwKTtcbiAgICBsYXQgPSBhZGp1c3RfbGF0KGxhdCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgbGF0ID0gcGpfaW52X21sZm4ocC55IC8gdGhpcy5hLCB0aGlzLmVzLCB0aGlzLmVuKTtcbiAgICBzID0gTWF0aC5hYnMobGF0KTtcbiAgICBpZiAocyA8IEhBTEZfUEkpIHtcbiAgICAgIHMgPSBNYXRoLnNpbihsYXQpO1xuICAgICAgdGVtcCA9IHRoaXMubG9uZzAgKyBwLnggKiBNYXRoLnNxcnQoMSAtIHRoaXMuZXMgKiBzICogcykgLyAodGhpcy5hICogTWF0aC5jb3MobGF0KSk7XG4gICAgICAvL3RlbXAgPSB0aGlzLmxvbmcwICsgcC54IC8gKHRoaXMuYSAqIE1hdGguY29zKGxhdCkpO1xuICAgICAgbG9uID0gYWRqdXN0X2xvbih0ZW1wKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKHMgLSBFUFNMTikgPCBIQUxGX1BJKSB7XG4gICAgICBsb24gPSB0aGlzLmxvbmcwO1xuICAgIH1cbiAgfVxuICBwLnggPSBsb247XG4gIHAueSA9IGxhdDtcbiAgcmV0dXJuIHA7XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJTaW51c29pZGFsXCIsIFwic2ludVwiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7fVxuaW1wb3J0IHtFUFNMTn0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG4vKiBNb2xsd2VpZGUgZm9yd2FyZCBlcXVhdGlvbnMtLW1hcHBpbmcgbGF0LGxvbmcgdG8geCx5XG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG5cbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcblxuICB2YXIgZGVsdGFfbG9uID0gYWRqdXN0X2xvbihsb24gLSB0aGlzLmxvbmcwKTtcbiAgdmFyIHRoZXRhID0gbGF0O1xuICB2YXIgY29uID0gTWF0aC5QSSAqIE1hdGguc2luKGxhdCk7XG5cbiAgLyogSXRlcmF0ZSB1c2luZyB0aGUgTmV3dG9uLVJhcGhzb24gbWV0aG9kIHRvIGZpbmQgdGhldGFcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgZGVsdGFfdGhldGEgPSAtKHRoZXRhICsgTWF0aC5zaW4odGhldGEpIC0gY29uKSAvICgxICsgTWF0aC5jb3ModGhldGEpKTtcbiAgICB0aGV0YSArPSBkZWx0YV90aGV0YTtcbiAgICBpZiAoTWF0aC5hYnMoZGVsdGFfdGhldGEpIDwgRVBTTE4pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICB0aGV0YSAvPSAyO1xuXG4gIC8qIElmIHRoZSBsYXRpdHVkZSBpcyA5MCBkZWcsIGZvcmNlIHRoZSB4IGNvb3JkaW5hdGUgdG8gYmUgXCIwICsgZmFsc2UgZWFzdGluZ1wiXG4gICAgICAgdGhpcyBpcyBkb25lIGhlcmUgYmVjYXVzZSBvZiBwcmVjaXNpb24gcHJvYmxlbXMgd2l0aCBcImNvcyh0aGV0YSlcIlxuICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgaWYgKE1hdGguUEkgLyAyIC0gTWF0aC5hYnMobGF0KSA8IEVQU0xOKSB7XG4gICAgZGVsdGFfbG9uID0gMDtcbiAgfVxuICB2YXIgeCA9IDAuOTAwMzE2MzE2MTU4ICogdGhpcy5hICogZGVsdGFfbG9uICogTWF0aC5jb3ModGhldGEpICsgdGhpcy54MDtcbiAgdmFyIHkgPSAxLjQxNDIxMzU2MjM3MzEgKiB0aGlzLmEgKiBNYXRoLnNpbih0aGV0YSkgKyB0aGlzLnkwO1xuXG4gIHAueCA9IHg7XG4gIHAueSA9IHk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHZhciB0aGV0YTtcbiAgdmFyIGFyZztcblxuICAvKiBJbnZlcnNlIGVxdWF0aW9uc1xuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0qL1xuICBwLnggLT0gdGhpcy54MDtcbiAgcC55IC09IHRoaXMueTA7XG4gIGFyZyA9IHAueSAvICgxLjQxNDIxMzU2MjM3MzEgKiB0aGlzLmEpO1xuXG4gIC8qIEJlY2F1c2Ugb2YgZGl2aXNpb24gYnkgemVybyBwcm9ibGVtcywgJ2FyZycgY2FuIG5vdCBiZSAxLiAgVGhlcmVmb3JlXG4gICAgICAgYSBudW1iZXIgdmVyeSBjbG9zZSB0byBvbmUgaXMgdXNlZCBpbnN0ZWFkLlxuICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuICBpZiAoTWF0aC5hYnMoYXJnKSA+IDAuOTk5OTk5OTk5OTk5KSB7XG4gICAgYXJnID0gMC45OTk5OTk5OTk5OTk7XG4gIH1cbiAgdGhldGEgPSBNYXRoLmFzaW4oYXJnKTtcbiAgdmFyIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIChwLnggLyAoMC45MDAzMTYzMTYxNTggKiB0aGlzLmEgKiBNYXRoLmNvcyh0aGV0YSkpKSk7XG4gIGlmIChsb24gPCAoLU1hdGguUEkpKSB7XG4gICAgbG9uID0gLU1hdGguUEk7XG4gIH1cbiAgaWYgKGxvbiA+IE1hdGguUEkpIHtcbiAgICBsb24gPSBNYXRoLlBJO1xuICB9XG4gIGFyZyA9ICgyICogdGhldGEgKyBNYXRoLnNpbigyICogdGhldGEpKSAvIE1hdGguUEk7XG4gIGlmIChNYXRoLmFicyhhcmcpID4gMSkge1xuICAgIGFyZyA9IDE7XG4gIH1cbiAgdmFyIGxhdCA9IE1hdGguYXNpbihhcmcpO1xuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIk1vbGx3ZWlkZVwiLCBcIm1vbGxcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCBlMGZuIGZyb20gJy4uL2NvbW1vbi9lMGZuJztcbmltcG9ydCBlMWZuIGZyb20gJy4uL2NvbW1vbi9lMWZuJztcbmltcG9ydCBlMmZuIGZyb20gJy4uL2NvbW1vbi9lMmZuJztcbmltcG9ydCBlM2ZuIGZyb20gJy4uL2NvbW1vbi9lM2ZuJztcbmltcG9ydCBtc2ZueiBmcm9tICcuLi9jb21tb24vbXNmbnonO1xuaW1wb3J0IG1sZm4gZnJvbSAnLi4vY29tbW9uL21sZm4nO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuaW1wb3J0IGFkanVzdF9sYXQgZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sYXQnO1xuaW1wb3J0IGltbGZuIGZyb20gJy4uL2NvbW1vbi9pbWxmbic7XG5pbXBvcnQge0VQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG5cbiAgLyogUGxhY2UgcGFyYW1ldGVycyBpbiBzdGF0aWMgc3RvcmFnZSBmb3IgY29tbW9uIHVzZVxuICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4gIC8vIFN0YW5kYXJkIFBhcmFsbGVscyBjYW5ub3QgYmUgZXF1YWwgYW5kIG9uIG9wcG9zaXRlIHNpZGVzIG9mIHRoZSBlcXVhdG9yXG4gIGlmIChNYXRoLmFicyh0aGlzLmxhdDEgKyB0aGlzLmxhdDIpIDwgRVBTTE4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdGhpcy5sYXQyID0gdGhpcy5sYXQyIHx8IHRoaXMubGF0MTtcbiAgdGhpcy50ZW1wID0gdGhpcy5iIC8gdGhpcy5hO1xuICB0aGlzLmVzID0gMSAtIE1hdGgucG93KHRoaXMudGVtcCwgMik7XG4gIHRoaXMuZSA9IE1hdGguc3FydCh0aGlzLmVzKTtcbiAgdGhpcy5lMCA9IGUwZm4odGhpcy5lcyk7XG4gIHRoaXMuZTEgPSBlMWZuKHRoaXMuZXMpO1xuICB0aGlzLmUyID0gZTJmbih0aGlzLmVzKTtcbiAgdGhpcy5lMyA9IGUzZm4odGhpcy5lcyk7XG5cbiAgdGhpcy5zaW5waGkgPSBNYXRoLnNpbih0aGlzLmxhdDEpO1xuICB0aGlzLmNvc3BoaSA9IE1hdGguY29zKHRoaXMubGF0MSk7XG5cbiAgdGhpcy5tczEgPSBtc2Zueih0aGlzLmUsIHRoaXMuc2lucGhpLCB0aGlzLmNvc3BoaSk7XG4gIHRoaXMubWwxID0gbWxmbih0aGlzLmUwLCB0aGlzLmUxLCB0aGlzLmUyLCB0aGlzLmUzLCB0aGlzLmxhdDEpO1xuXG4gIGlmIChNYXRoLmFicyh0aGlzLmxhdDEgLSB0aGlzLmxhdDIpIDwgRVBTTE4pIHtcbiAgICB0aGlzLm5zID0gdGhpcy5zaW5waGk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhpcy5zaW5waGkgPSBNYXRoLnNpbih0aGlzLmxhdDIpO1xuICAgIHRoaXMuY29zcGhpID0gTWF0aC5jb3ModGhpcy5sYXQyKTtcbiAgICB0aGlzLm1zMiA9IG1zZm56KHRoaXMuZSwgdGhpcy5zaW5waGksIHRoaXMuY29zcGhpKTtcbiAgICB0aGlzLm1sMiA9IG1sZm4odGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMywgdGhpcy5sYXQyKTtcbiAgICB0aGlzLm5zID0gKHRoaXMubXMxIC0gdGhpcy5tczIpIC8gKHRoaXMubWwyIC0gdGhpcy5tbDEpO1xuICB9XG4gIHRoaXMuZyA9IHRoaXMubWwxICsgdGhpcy5tczEgLyB0aGlzLm5zO1xuICB0aGlzLm1sMCA9IG1sZm4odGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMywgdGhpcy5sYXQwKTtcbiAgdGhpcy5yaCA9IHRoaXMuYSAqICh0aGlzLmcgLSB0aGlzLm1sMCk7XG59XG5cbi8qIEVxdWlkaXN0YW50IENvbmljIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIHZhciByaDE7XG5cbiAgLyogRm9yd2FyZCBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgcmgxID0gdGhpcy5hICogKHRoaXMuZyAtIGxhdCk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdmFyIG1sID0gbWxmbih0aGlzLmUwLCB0aGlzLmUxLCB0aGlzLmUyLCB0aGlzLmUzLCBsYXQpO1xuICAgIHJoMSA9IHRoaXMuYSAqICh0aGlzLmcgLSBtbCk7XG4gIH1cbiAgdmFyIHRoZXRhID0gdGhpcy5ucyAqIGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHZhciB4ID0gdGhpcy54MCArIHJoMSAqIE1hdGguc2luKHRoZXRhKTtcbiAgdmFyIHkgPSB0aGlzLnkwICsgdGhpcy5yaCAtIHJoMSAqIE1hdGguY29zKHRoZXRhKTtcbiAgcC54ID0geDtcbiAgcC55ID0geTtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIEludmVyc2UgZXF1YXRpb25zXG4gIC0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSA9IHRoaXMucmggLSBwLnkgKyB0aGlzLnkwO1xuICB2YXIgY29uLCByaDEsIGxhdCwgbG9uO1xuICBpZiAodGhpcy5ucyA+PSAwKSB7XG4gICAgcmgxID0gTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSk7XG4gICAgY29uID0gMTtcbiAgfVxuICBlbHNlIHtcbiAgICByaDEgPSAtTWF0aC5zcXJ0KHAueCAqIHAueCArIHAueSAqIHAueSk7XG4gICAgY29uID0gLTE7XG4gIH1cbiAgdmFyIHRoZXRhID0gMDtcbiAgaWYgKHJoMSAhPT0gMCkge1xuICAgIHRoZXRhID0gTWF0aC5hdGFuMihjb24gKiBwLngsIGNvbiAqIHAueSk7XG4gIH1cblxuICBpZiAodGhpcy5zcGhlcmUpIHtcbiAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyB0aGV0YSAvIHRoaXMubnMpO1xuICAgIGxhdCA9IGFkanVzdF9sYXQodGhpcy5nIC0gcmgxIC8gdGhpcy5hKTtcbiAgICBwLnggPSBsb247XG4gICAgcC55ID0gbGF0O1xuICAgIHJldHVybiBwO1xuICB9XG4gIGVsc2Uge1xuICAgIHZhciBtbCA9IHRoaXMuZyAtIHJoMSAvIHRoaXMuYTtcbiAgICBsYXQgPSBpbWxmbihtbCwgdGhpcy5lMCwgdGhpcy5lMSwgdGhpcy5lMiwgdGhpcy5lMyk7XG4gICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgdGhldGEgLyB0aGlzLm5zKTtcbiAgICBwLnggPSBsb247XG4gICAgcC55ID0gbGF0O1xuICAgIHJldHVybiBwO1xuICB9XG5cbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIkVxdWlkaXN0YW50X0NvbmljXCIsIFwiZXFkY1wiXTtcbmV4cG9ydCBkZWZhdWx0IHtcbiAgaW5pdDogaW5pdCxcbiAgZm9yd2FyZDogZm9yd2FyZCxcbiAgaW52ZXJzZTogaW52ZXJzZSxcbiAgbmFtZXM6IG5hbWVzXG59O1xuIiwiaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG5pbXBvcnQge0hBTEZfUEksIEVQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuaW1wb3J0IGFzaW56IGZyb20gJy4uL2NvbW1vbi9hc2lueic7XG5cbi8qIEluaXRpYWxpemUgdGhlIFZhbiBEZXIgR3JpbnRlbiBwcm9qZWN0aW9uXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIC8vdGhpcy5SID0gNjM3MDk5NzsgLy9SYWRpdXMgb2YgZWFydGhcbiAgdGhpcy5SID0gdGhpcy5hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG5cbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcblxuICAvKiBGb3J3YXJkIGVxdWF0aW9uc1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgdmFyIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuICB2YXIgeCwgeTtcblxuICBpZiAoTWF0aC5hYnMobGF0KSA8PSBFUFNMTikge1xuICAgIHggPSB0aGlzLngwICsgdGhpcy5SICogZGxvbjtcbiAgICB5ID0gdGhpcy55MDtcbiAgfVxuICB2YXIgdGhldGEgPSBhc2lueigyICogTWF0aC5hYnMobGF0IC8gTWF0aC5QSSkpO1xuICBpZiAoKE1hdGguYWJzKGRsb24pIDw9IEVQU0xOKSB8fCAoTWF0aC5hYnMoTWF0aC5hYnMobGF0KSAtIEhBTEZfUEkpIDw9IEVQU0xOKSkge1xuICAgIHggPSB0aGlzLngwO1xuICAgIGlmIChsYXQgPj0gMCkge1xuICAgICAgeSA9IHRoaXMueTAgKyBNYXRoLlBJICogdGhpcy5SICogTWF0aC50YW4oMC41ICogdGhldGEpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHkgPSB0aGlzLnkwICsgTWF0aC5QSSAqIHRoaXMuUiAqIC1NYXRoLnRhbigwLjUgKiB0aGV0YSk7XG4gICAgfVxuICAgIC8vICByZXR1cm4oT0spO1xuICB9XG4gIHZhciBhbCA9IDAuNSAqIE1hdGguYWJzKChNYXRoLlBJIC8gZGxvbikgLSAoZGxvbiAvIE1hdGguUEkpKTtcbiAgdmFyIGFzcSA9IGFsICogYWw7XG4gIHZhciBzaW50aCA9IE1hdGguc2luKHRoZXRhKTtcbiAgdmFyIGNvc3RoID0gTWF0aC5jb3ModGhldGEpO1xuXG4gIHZhciBnID0gY29zdGggLyAoc2ludGggKyBjb3N0aCAtIDEpO1xuICB2YXIgZ3NxID0gZyAqIGc7XG4gIHZhciBtID0gZyAqICgyIC8gc2ludGggLSAxKTtcbiAgdmFyIG1zcSA9IG0gKiBtO1xuICB2YXIgY29uID0gTWF0aC5QSSAqIHRoaXMuUiAqIChhbCAqIChnIC0gbXNxKSArIE1hdGguc3FydChhc3EgKiAoZyAtIG1zcSkgKiAoZyAtIG1zcSkgLSAobXNxICsgYXNxKSAqIChnc3EgLSBtc3EpKSkgLyAobXNxICsgYXNxKTtcbiAgaWYgKGRsb24gPCAwKSB7XG4gICAgY29uID0gLWNvbjtcbiAgfVxuICB4ID0gdGhpcy54MCArIGNvbjtcbiAgLy9jb24gPSBNYXRoLmFicyhjb24gLyAoTWF0aC5QSSAqIHRoaXMuUikpO1xuICB2YXIgcSA9IGFzcSArIGc7XG4gIGNvbiA9IE1hdGguUEkgKiB0aGlzLlIgKiAobSAqIHEgLSBhbCAqIE1hdGguc3FydCgobXNxICsgYXNxKSAqIChhc3EgKyAxKSAtIHEgKiBxKSkgLyAobXNxICsgYXNxKTtcbiAgaWYgKGxhdCA+PSAwKSB7XG4gICAgLy95ID0gdGhpcy55MCArIE1hdGguUEkgKiB0aGlzLlIgKiBNYXRoLnNxcnQoMSAtIGNvbiAqIGNvbiAtIDIgKiBhbCAqIGNvbik7XG4gICAgeSA9IHRoaXMueTAgKyBjb247XG4gIH1cbiAgZWxzZSB7XG4gICAgLy95ID0gdGhpcy55MCAtIE1hdGguUEkgKiB0aGlzLlIgKiBNYXRoLnNxcnQoMSAtIGNvbiAqIGNvbiAtIDIgKiBhbCAqIGNvbik7XG4gICAgeSA9IHRoaXMueTAgLSBjb247XG4gIH1cbiAgcC54ID0geDtcbiAgcC55ID0geTtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIFZhbiBEZXIgR3JpbnRlbiBpbnZlcnNlIGVxdWF0aW9ucy0tbWFwcGluZyB4LHkgdG8gbGF0L2xvbmdcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIGxvbiwgbGF0O1xuICB2YXIgeHgsIHl5LCB4eXMsIGMxLCBjMiwgYzM7XG4gIHZhciBhMTtcbiAgdmFyIG0xO1xuICB2YXIgY29uO1xuICB2YXIgdGgxO1xuICB2YXIgZDtcblxuICAvKiBpbnZlcnNlIGVxdWF0aW9uc1xuICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSAtPSB0aGlzLnkwO1xuICBjb24gPSBNYXRoLlBJICogdGhpcy5SO1xuICB4eCA9IHAueCAvIGNvbjtcbiAgeXkgPSBwLnkgLyBjb247XG4gIHh5cyA9IHh4ICogeHggKyB5eSAqIHl5O1xuICBjMSA9IC1NYXRoLmFicyh5eSkgKiAoMSArIHh5cyk7XG4gIGMyID0gYzEgLSAyICogeXkgKiB5eSArIHh4ICogeHg7XG4gIGMzID0gLTIgKiBjMSArIDEgKyAyICogeXkgKiB5eSArIHh5cyAqIHh5cztcbiAgZCA9IHl5ICogeXkgLyBjMyArICgyICogYzIgKiBjMiAqIGMyIC8gYzMgLyBjMyAvIGMzIC0gOSAqIGMxICogYzIgLyBjMyAvIGMzKSAvIDI3O1xuICBhMSA9IChjMSAtIGMyICogYzIgLyAzIC8gYzMpIC8gYzM7XG4gIG0xID0gMiAqIE1hdGguc3FydCgtYTEgLyAzKTtcbiAgY29uID0gKCgzICogZCkgLyBhMSkgLyBtMTtcbiAgaWYgKE1hdGguYWJzKGNvbikgPiAxKSB7XG4gICAgaWYgKGNvbiA+PSAwKSB7XG4gICAgICBjb24gPSAxO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbiA9IC0xO1xuICAgIH1cbiAgfVxuICB0aDEgPSBNYXRoLmFjb3MoY29uKSAvIDM7XG4gIGlmIChwLnkgPj0gMCkge1xuICAgIGxhdCA9ICgtbTEgKiBNYXRoLmNvcyh0aDEgKyBNYXRoLlBJIC8gMykgLSBjMiAvIDMgLyBjMykgKiBNYXRoLlBJO1xuICB9XG4gIGVsc2Uge1xuICAgIGxhdCA9IC0oLW0xICogTWF0aC5jb3ModGgxICsgTWF0aC5QSSAvIDMpIC0gYzIgLyAzIC8gYzMpICogTWF0aC5QSTtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyh4eCkgPCBFUFNMTikge1xuICAgIGxvbiA9IHRoaXMubG9uZzA7XG4gIH1cbiAgZWxzZSB7XG4gICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5QSSAqICh4eXMgLSAxICsgTWF0aC5zcXJ0KDEgKyAyICogKHh4ICogeHggLSB5eSAqIHl5KSArIHh5cyAqIHh5cykpIC8gMiAvIHh4KTtcbiAgfVxuXG4gIHAueCA9IGxvbjtcbiAgcC55ID0gbGF0O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIlZhbl9kZXJfR3JpbnRlbl9JXCIsIFwiVmFuRGVyR3JpbnRlblwiLCBcInZhbmRnXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQge0hBTEZfUEksIEVQU0xOfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWVzJztcblxuaW1wb3J0IG1sZm4gZnJvbSAnLi4vY29tbW9uL21sZm4nO1xuaW1wb3J0IGUwZm4gZnJvbSAnLi4vY29tbW9uL2UwZm4nO1xuaW1wb3J0IGUxZm4gZnJvbSAnLi4vY29tbW9uL2UxZm4nO1xuaW1wb3J0IGUyZm4gZnJvbSAnLi4vY29tbW9uL2UyZm4nO1xuaW1wb3J0IGUzZm4gZnJvbSAnLi4vY29tbW9uL2UzZm4nO1xuaW1wb3J0IGdOIGZyb20gJy4uL2NvbW1vbi9nTic7XG5pbXBvcnQgYXNpbnogZnJvbSAnLi4vY29tbW9uL2FzaW56JztcbmltcG9ydCBpbWxmbiBmcm9tICcuLi9jb21tb24vaW1sZm4nO1xuXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXQoKSB7XG4gIHRoaXMuc2luX3AxMiA9IE1hdGguc2luKHRoaXMubGF0MCk7XG4gIHRoaXMuY29zX3AxMiA9IE1hdGguY29zKHRoaXMubGF0MCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIGxvbiA9IHAueDtcbiAgdmFyIGxhdCA9IHAueTtcbiAgdmFyIHNpbnBoaSA9IE1hdGguc2luKHAueSk7XG4gIHZhciBjb3NwaGkgPSBNYXRoLmNvcyhwLnkpO1xuICB2YXIgZGxvbiA9IGFkanVzdF9sb24obG9uIC0gdGhpcy5sb25nMCk7XG4gIHZhciBlMCwgZTEsIGUyLCBlMywgTWxwLCBNbCwgdGFucGhpLCBObDEsIE5sLCBwc2ksIEF6LCBHLCBILCBHSCwgSHMsIGMsIGtwLCBjb3NfYywgcywgczIsIHMzLCBzNCwgczU7XG4gIGlmICh0aGlzLnNwaGVyZSkge1xuICAgIGlmIChNYXRoLmFicyh0aGlzLnNpbl9wMTIgLSAxKSA8PSBFUFNMTikge1xuICAgICAgLy9Ob3J0aCBQb2xlIGNhc2VcbiAgICAgIHAueCA9IHRoaXMueDAgKyB0aGlzLmEgKiAoSEFMRl9QSSAtIGxhdCkgKiBNYXRoLnNpbihkbG9uKTtcbiAgICAgIHAueSA9IHRoaXMueTAgLSB0aGlzLmEgKiAoSEFMRl9QSSAtIGxhdCkgKiBNYXRoLmNvcyhkbG9uKTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLnNpbl9wMTIgKyAxKSA8PSBFUFNMTikge1xuICAgICAgLy9Tb3V0aCBQb2xlIGNhc2VcbiAgICAgIHAueCA9IHRoaXMueDAgKyB0aGlzLmEgKiAoSEFMRl9QSSArIGxhdCkgKiBNYXRoLnNpbihkbG9uKTtcbiAgICAgIHAueSA9IHRoaXMueTAgKyB0aGlzLmEgKiAoSEFMRl9QSSArIGxhdCkgKiBNYXRoLmNvcyhkbG9uKTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vZGVmYXVsdCBjYXNlXG4gICAgICBjb3NfYyA9IHRoaXMuc2luX3AxMiAqIHNpbnBoaSArIHRoaXMuY29zX3AxMiAqIGNvc3BoaSAqIE1hdGguY29zKGRsb24pO1xuICAgICAgYyA9IE1hdGguYWNvcyhjb3NfYyk7XG4gICAgICBrcCA9IGMgPyBjIC8gTWF0aC5zaW4oYykgOiAxO1xuICAgICAgcC54ID0gdGhpcy54MCArIHRoaXMuYSAqIGtwICogY29zcGhpICogTWF0aC5zaW4oZGxvbik7XG4gICAgICBwLnkgPSB0aGlzLnkwICsgdGhpcy5hICoga3AgKiAodGhpcy5jb3NfcDEyICogc2lucGhpIC0gdGhpcy5zaW5fcDEyICogY29zcGhpICogTWF0aC5jb3MoZGxvbikpO1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIGUwID0gZTBmbih0aGlzLmVzKTtcbiAgICBlMSA9IGUxZm4odGhpcy5lcyk7XG4gICAgZTIgPSBlMmZuKHRoaXMuZXMpO1xuICAgIGUzID0gZTNmbih0aGlzLmVzKTtcbiAgICBpZiAoTWF0aC5hYnModGhpcy5zaW5fcDEyIC0gMSkgPD0gRVBTTE4pIHtcbiAgICAgIC8vTm9ydGggUG9sZSBjYXNlXG4gICAgICBNbHAgPSB0aGlzLmEgKiBtbGZuKGUwLCBlMSwgZTIsIGUzLCBIQUxGX1BJKTtcbiAgICAgIE1sID0gdGhpcy5hICogbWxmbihlMCwgZTEsIGUyLCBlMywgbGF0KTtcbiAgICAgIHAueCA9IHRoaXMueDAgKyAoTWxwIC0gTWwpICogTWF0aC5zaW4oZGxvbik7XG4gICAgICBwLnkgPSB0aGlzLnkwIC0gKE1scCAtIE1sKSAqIE1hdGguY29zKGRsb24pO1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIGVsc2UgaWYgKE1hdGguYWJzKHRoaXMuc2luX3AxMiArIDEpIDw9IEVQU0xOKSB7XG4gICAgICAvL1NvdXRoIFBvbGUgY2FzZVxuICAgICAgTWxwID0gdGhpcy5hICogbWxmbihlMCwgZTEsIGUyLCBlMywgSEFMRl9QSSk7XG4gICAgICBNbCA9IHRoaXMuYSAqIG1sZm4oZTAsIGUxLCBlMiwgZTMsIGxhdCk7XG4gICAgICBwLnggPSB0aGlzLngwICsgKE1scCArIE1sKSAqIE1hdGguc2luKGRsb24pO1xuICAgICAgcC55ID0gdGhpcy55MCArIChNbHAgKyBNbCkgKiBNYXRoLmNvcyhkbG9uKTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIC8vRGVmYXVsdCBjYXNlXG4gICAgICB0YW5waGkgPSBzaW5waGkgLyBjb3NwaGk7XG4gICAgICBObDEgPSBnTih0aGlzLmEsIHRoaXMuZSwgdGhpcy5zaW5fcDEyKTtcbiAgICAgIE5sID0gZ04odGhpcy5hLCB0aGlzLmUsIHNpbnBoaSk7XG4gICAgICBwc2kgPSBNYXRoLmF0YW4oKDEgLSB0aGlzLmVzKSAqIHRhbnBoaSArIHRoaXMuZXMgKiBObDEgKiB0aGlzLnNpbl9wMTIgLyAoTmwgKiBjb3NwaGkpKTtcbiAgICAgIEF6ID0gTWF0aC5hdGFuMihNYXRoLnNpbihkbG9uKSwgdGhpcy5jb3NfcDEyICogTWF0aC50YW4ocHNpKSAtIHRoaXMuc2luX3AxMiAqIE1hdGguY29zKGRsb24pKTtcbiAgICAgIGlmIChBeiA9PT0gMCkge1xuICAgICAgICBzID0gTWF0aC5hc2luKHRoaXMuY29zX3AxMiAqIE1hdGguc2luKHBzaSkgLSB0aGlzLnNpbl9wMTIgKiBNYXRoLmNvcyhwc2kpKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKE1hdGguYWJzKE1hdGguYWJzKEF6KSAtIE1hdGguUEkpIDw9IEVQU0xOKSB7XG4gICAgICAgIHMgPSAtTWF0aC5hc2luKHRoaXMuY29zX3AxMiAqIE1hdGguc2luKHBzaSkgLSB0aGlzLnNpbl9wMTIgKiBNYXRoLmNvcyhwc2kpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzID0gTWF0aC5hc2luKE1hdGguc2luKGRsb24pICogTWF0aC5jb3MocHNpKSAvIE1hdGguc2luKEF6KSk7XG4gICAgICB9XG4gICAgICBHID0gdGhpcy5lICogdGhpcy5zaW5fcDEyIC8gTWF0aC5zcXJ0KDEgLSB0aGlzLmVzKTtcbiAgICAgIEggPSB0aGlzLmUgKiB0aGlzLmNvc19wMTIgKiBNYXRoLmNvcyhBeikgLyBNYXRoLnNxcnQoMSAtIHRoaXMuZXMpO1xuICAgICAgR0ggPSBHICogSDtcbiAgICAgIEhzID0gSCAqIEg7XG4gICAgICBzMiA9IHMgKiBzO1xuICAgICAgczMgPSBzMiAqIHM7XG4gICAgICBzNCA9IHMzICogcztcbiAgICAgIHM1ID0gczQgKiBzO1xuICAgICAgYyA9IE5sMSAqIHMgKiAoMSAtIHMyICogSHMgKiAoMSAtIEhzKSAvIDYgKyBzMyAvIDggKiBHSCAqICgxIC0gMiAqIEhzKSArIHM0IC8gMTIwICogKEhzICogKDQgLSA3ICogSHMpIC0gMyAqIEcgKiBHICogKDEgLSA3ICogSHMpKSAtIHM1IC8gNDggKiBHSCk7XG4gICAgICBwLnggPSB0aGlzLngwICsgYyAqIE1hdGguc2luKEF6KTtcbiAgICAgIHAueSA9IHRoaXMueTAgKyBjICogTWF0aC5jb3MoQXopO1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9XG5cblxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAtPSB0aGlzLngwO1xuICBwLnkgLT0gdGhpcy55MDtcbiAgdmFyIHJoLCB6LCBzaW56LCBjb3N6LCBsb24sIGxhdCwgY29uLCBlMCwgZTEsIGUyLCBlMywgTWxwLCBNLCBOMSwgcHNpLCBBeiwgY29zQXosIHRtcCwgQSwgQiwgRCwgRWUsIEYsIHNpbnBzaTtcbiAgaWYgKHRoaXMuc3BoZXJlKSB7XG4gICAgcmggPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgICBpZiAocmggPiAoMiAqIEhBTEZfUEkgKiB0aGlzLmEpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHogPSByaCAvIHRoaXMuYTtcblxuICAgIHNpbnogPSBNYXRoLnNpbih6KTtcbiAgICBjb3N6ID0gTWF0aC5jb3Moeik7XG5cbiAgICBsb24gPSB0aGlzLmxvbmcwO1xuICAgIGlmIChNYXRoLmFicyhyaCkgPD0gRVBTTE4pIHtcbiAgICAgIGxhdCA9IHRoaXMubGF0MDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBsYXQgPSBhc2lueihjb3N6ICogdGhpcy5zaW5fcDEyICsgKHAueSAqIHNpbnogKiB0aGlzLmNvc19wMTIpIC8gcmgpO1xuICAgICAgY29uID0gTWF0aC5hYnModGhpcy5sYXQwKSAtIEhBTEZfUEk7XG4gICAgICBpZiAoTWF0aC5hYnMoY29uKSA8PSBFUFNMTikge1xuICAgICAgICBpZiAodGhpcy5sYXQwID49IDApIHtcbiAgICAgICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBNYXRoLmF0YW4yKHAueCwgLSBwLnkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgLSBNYXRoLmF0YW4yKC1wLngsIHAueSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLypjb24gPSBjb3N6IC0gdGhpcy5zaW5fcDEyICogTWF0aC5zaW4obGF0KTtcbiAgICAgICAgaWYgKChNYXRoLmFicyhjb24pIDwgRVBTTE4pICYmIChNYXRoLmFicyhwLngpIDwgRVBTTE4pKSB7XG4gICAgICAgICAgLy9uby1vcCwganVzdCBrZWVwIHRoZSBsb24gdmFsdWUgYXMgaXNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgdGVtcCA9IE1hdGguYXRhbjIoKHAueCAqIHNpbnogKiB0aGlzLmNvc19wMTIpLCAoY29uICogcmgpKTtcbiAgICAgICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBNYXRoLmF0YW4yKChwLnggKiBzaW56ICogdGhpcy5jb3NfcDEyKSwgKGNvbiAqIHJoKSkpO1xuICAgICAgICB9Ki9cbiAgICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLnggKiBzaW56LCByaCAqIHRoaXMuY29zX3AxMiAqIGNvc3ogLSBwLnkgKiB0aGlzLnNpbl9wMTIgKiBzaW56KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcC54ID0gbG9uO1xuICAgIHAueSA9IGxhdDtcbiAgICByZXR1cm4gcDtcbiAgfVxuICBlbHNlIHtcbiAgICBlMCA9IGUwZm4odGhpcy5lcyk7XG4gICAgZTEgPSBlMWZuKHRoaXMuZXMpO1xuICAgIGUyID0gZTJmbih0aGlzLmVzKTtcbiAgICBlMyA9IGUzZm4odGhpcy5lcyk7XG4gICAgaWYgKE1hdGguYWJzKHRoaXMuc2luX3AxMiAtIDEpIDw9IEVQU0xOKSB7XG4gICAgICAvL05vcnRoIHBvbGUgY2FzZVxuICAgICAgTWxwID0gdGhpcy5hICogbWxmbihlMCwgZTEsIGUyLCBlMywgSEFMRl9QSSk7XG4gICAgICByaCA9IE1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpO1xuICAgICAgTSA9IE1scCAtIHJoO1xuICAgICAgbGF0ID0gaW1sZm4oTSAvIHRoaXMuYSwgZTAsIGUxLCBlMiwgZTMpO1xuICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMihwLngsIC0gMSAqIHAueSkpO1xuICAgICAgcC54ID0gbG9uO1xuICAgICAgcC55ID0gbGF0O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIGVsc2UgaWYgKE1hdGguYWJzKHRoaXMuc2luX3AxMiArIDEpIDw9IEVQU0xOKSB7XG4gICAgICAvL1NvdXRoIHBvbGUgY2FzZVxuICAgICAgTWxwID0gdGhpcy5hICogbWxmbihlMCwgZTEsIGUyLCBlMywgSEFMRl9QSSk7XG4gICAgICByaCA9IE1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpO1xuICAgICAgTSA9IHJoIC0gTWxwO1xuXG4gICAgICBsYXQgPSBpbWxmbihNIC8gdGhpcy5hLCBlMCwgZTEsIGUyLCBlMyk7XG4gICAgICBsb24gPSBhZGp1c3RfbG9uKHRoaXMubG9uZzAgKyBNYXRoLmF0YW4yKHAueCwgcC55KSk7XG4gICAgICBwLnggPSBsb247XG4gICAgICBwLnkgPSBsYXQ7XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAvL2RlZmF1bHQgY2FzZVxuICAgICAgcmggPSBNYXRoLnNxcnQocC54ICogcC54ICsgcC55ICogcC55KTtcbiAgICAgIEF6ID0gTWF0aC5hdGFuMihwLngsIHAueSk7XG4gICAgICBOMSA9IGdOKHRoaXMuYSwgdGhpcy5lLCB0aGlzLnNpbl9wMTIpO1xuICAgICAgY29zQXogPSBNYXRoLmNvcyhBeik7XG4gICAgICB0bXAgPSB0aGlzLmUgKiB0aGlzLmNvc19wMTIgKiBjb3NBejtcbiAgICAgIEEgPSAtdG1wICogdG1wIC8gKDEgLSB0aGlzLmVzKTtcbiAgICAgIEIgPSAzICogdGhpcy5lcyAqICgxIC0gQSkgKiB0aGlzLnNpbl9wMTIgKiB0aGlzLmNvc19wMTIgKiBjb3NBeiAvICgxIC0gdGhpcy5lcyk7XG4gICAgICBEID0gcmggLyBOMTtcbiAgICAgIEVlID0gRCAtIEEgKiAoMSArIEEpICogTWF0aC5wb3coRCwgMykgLyA2IC0gQiAqICgxICsgMyAqIEEpICogTWF0aC5wb3coRCwgNCkgLyAyNDtcbiAgICAgIEYgPSAxIC0gQSAqIEVlICogRWUgLyAyIC0gRCAqIEVlICogRWUgKiBFZSAvIDY7XG4gICAgICBwc2kgPSBNYXRoLmFzaW4odGhpcy5zaW5fcDEyICogTWF0aC5jb3MoRWUpICsgdGhpcy5jb3NfcDEyICogTWF0aC5zaW4oRWUpICogY29zQXopO1xuICAgICAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hc2luKE1hdGguc2luKEF6KSAqIE1hdGguc2luKEVlKSAvIE1hdGguY29zKHBzaSkpKTtcbiAgICAgIHNpbnBzaSA9IE1hdGguc2luKHBzaSk7XG4gICAgICBsYXQgPSBNYXRoLmF0YW4yKChzaW5wc2kgLSB0aGlzLmVzICogRiAqIHRoaXMuc2luX3AxMikgKiBNYXRoLnRhbihwc2kpLCBzaW5wc2kgKiAoMSAtIHRoaXMuZXMpKTtcbiAgICAgIHAueCA9IGxvbjtcbiAgICAgIHAueSA9IGxhdDtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgfVxuXG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJBemltdXRoYWxfRXF1aWRpc3RhbnRcIiwgXCJhZXFkXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG4iLCJpbXBvcnQgYWRqdXN0X2xvbiBmcm9tICcuLi9jb21tb24vYWRqdXN0X2xvbic7XG5pbXBvcnQgYXNpbnogZnJvbSAnLi4vY29tbW9uL2FzaW56JztcbmltcG9ydCB7RVBTTE4sIEhBTEZfUEl9IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdCgpIHtcbiAgLy9kb3VibGUgdGVtcDsgICAgICAvKiB0ZW1wb3JhcnkgdmFyaWFibGUgICAgKi9cblxuICAvKiBQbGFjZSBwYXJhbWV0ZXJzIGluIHN0YXRpYyBzdG9yYWdlIGZvciBjb21tb24gdXNlXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgdGhpcy5zaW5fcDE0ID0gTWF0aC5zaW4odGhpcy5sYXQwKTtcbiAgdGhpcy5jb3NfcDE0ID0gTWF0aC5jb3ModGhpcy5sYXQwKTtcbn1cblxuLyogT3J0aG9ncmFwaGljIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gIHZhciBzaW5waGksIGNvc3BoaTsgLyogc2luIGFuZCBjb3MgdmFsdWUgICAgICAgICovXG4gIHZhciBkbG9uOyAvKiBkZWx0YSBsb25naXR1ZGUgdmFsdWUgICAgICAqL1xuICB2YXIgY29zbG9uOyAvKiBjb3Mgb2YgbG9uZ2l0dWRlICAgICAgICAqL1xuICB2YXIga3NwOyAvKiBzY2FsZSBmYWN0b3IgICAgICAgICAgKi9cbiAgdmFyIGcsIHgsIHk7XG4gIHZhciBsb24gPSBwLng7XG4gIHZhciBsYXQgPSBwLnk7XG4gIC8qIEZvcndhcmQgZXF1YXRpb25zXG4gICAgICAtLS0tLS0tLS0tLS0tLS0tLSovXG4gIGRsb24gPSBhZGp1c3RfbG9uKGxvbiAtIHRoaXMubG9uZzApO1xuXG4gIHNpbnBoaSA9IE1hdGguc2luKGxhdCk7XG4gIGNvc3BoaSA9IE1hdGguY29zKGxhdCk7XG5cbiAgY29zbG9uID0gTWF0aC5jb3MoZGxvbik7XG4gIGcgPSB0aGlzLnNpbl9wMTQgKiBzaW5waGkgKyB0aGlzLmNvc19wMTQgKiBjb3NwaGkgKiBjb3Nsb247XG4gIGtzcCA9IDE7XG4gIGlmICgoZyA+IDApIHx8IChNYXRoLmFicyhnKSA8PSBFUFNMTikpIHtcbiAgICB4ID0gdGhpcy5hICoga3NwICogY29zcGhpICogTWF0aC5zaW4oZGxvbik7XG4gICAgeSA9IHRoaXMueTAgKyB0aGlzLmEgKiBrc3AgKiAodGhpcy5jb3NfcDE0ICogc2lucGhpIC0gdGhpcy5zaW5fcDE0ICogY29zcGhpICogY29zbG9uKTtcbiAgfVxuICBwLnggPSB4O1xuICBwLnkgPSB5O1xuICByZXR1cm4gcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UocCkge1xuICB2YXIgcmg7IC8qIGhlaWdodCBhYm92ZSBlbGxpcHNvaWQgICAgICAqL1xuICB2YXIgejsgLyogYW5nbGUgICAgICAgICAgKi9cbiAgdmFyIHNpbnosIGNvc3o7IC8qIHNpbiBvZiB6IGFuZCBjb3Mgb2YgeiAgICAgICovXG4gIHZhciBjb247XG4gIHZhciBsb24sIGxhdDtcbiAgLyogSW52ZXJzZSBlcXVhdGlvbnNcbiAgICAgIC0tLS0tLS0tLS0tLS0tLS0tKi9cbiAgcC54IC09IHRoaXMueDA7XG4gIHAueSAtPSB0aGlzLnkwO1xuICByaCA9IE1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpO1xuICB6ID0gYXNpbnoocmggLyB0aGlzLmEpO1xuXG4gIHNpbnogPSBNYXRoLnNpbih6KTtcbiAgY29zeiA9IE1hdGguY29zKHopO1xuXG4gIGxvbiA9IHRoaXMubG9uZzA7XG4gIGlmIChNYXRoLmFicyhyaCkgPD0gRVBTTE4pIHtcbiAgICBsYXQgPSB0aGlzLmxhdDA7XG4gICAgcC54ID0gbG9uO1xuICAgIHAueSA9IGxhdDtcbiAgICByZXR1cm4gcDtcbiAgfVxuICBsYXQgPSBhc2lueihjb3N6ICogdGhpcy5zaW5fcDE0ICsgKHAueSAqIHNpbnogKiB0aGlzLmNvc19wMTQpIC8gcmgpO1xuICBjb24gPSBNYXRoLmFicyh0aGlzLmxhdDApIC0gSEFMRl9QSTtcbiAgaWYgKE1hdGguYWJzKGNvbikgPD0gRVBTTE4pIHtcbiAgICBpZiAodGhpcy5sYXQwID49IDApIHtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCArIE1hdGguYXRhbjIocC54LCAtIHAueSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGxvbiA9IGFkanVzdF9sb24odGhpcy5sb25nMCAtIE1hdGguYXRhbjIoLXAueCwgcC55KSk7XG4gICAgfVxuICAgIHAueCA9IGxvbjtcbiAgICBwLnkgPSBsYXQ7XG4gICAgcmV0dXJuIHA7XG4gIH1cbiAgbG9uID0gYWRqdXN0X2xvbih0aGlzLmxvbmcwICsgTWF0aC5hdGFuMigocC54ICogc2lueiksIHJoICogdGhpcy5jb3NfcDE0ICogY29zeiAtIHAueSAqIHRoaXMuc2luX3AxNCAqIHNpbnopKTtcbiAgcC54ID0gbG9uO1xuICBwLnkgPSBsYXQ7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wib3J0aG9cIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsIi8vIFFTQyBwcm9qZWN0aW9uIHJld3JpdHRlbiBmcm9tIHRoZSBvcmlnaW5hbCBQUk9KNFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL09TR2VvL3Byb2ouNC9ibG9iL21hc3Rlci9zcmMvUEpfcXNjLmNcblxuaW1wb3J0IHtFUFNMTiwgVFdPX1BJLCBTUEksIEhBTEZfUEksIEZPUlRQSX0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlcyc7XG5cbi8qIGNvbnN0YW50cyAqL1xudmFyIEZBQ0VfRU5VTSA9IHtcbiAgICBGUk9OVDogMSxcbiAgICBSSUdIVDogMixcbiAgICBCQUNLOiAzLFxuICAgIExFRlQ6IDQsXG4gICAgVE9QOiA1LFxuICAgIEJPVFRPTTogNlxufTtcblxudmFyIEFSRUFfRU5VTSA9IHtcbiAgICBBUkVBXzA6IDEsXG4gICAgQVJFQV8xOiAyLFxuICAgIEFSRUFfMjogMyxcbiAgICBBUkVBXzM6IDRcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuXG4gIHRoaXMueDAgPSB0aGlzLngwIHx8IDA7XG4gIHRoaXMueTAgPSB0aGlzLnkwIHx8IDA7XG4gIHRoaXMubGF0MCA9IHRoaXMubGF0MCB8fCAwO1xuICB0aGlzLmxvbmcwID0gdGhpcy5sb25nMCB8fCAwO1xuICB0aGlzLmxhdF90cyA9IHRoaXMubGF0X3RzIHx8IDA7XG4gIHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlIHx8IFwiUXVhZHJpbGF0ZXJhbGl6ZWQgU3BoZXJpY2FsIEN1YmVcIjtcblxuICAvKiBEZXRlcm1pbmUgdGhlIGN1YmUgZmFjZSBmcm9tIHRoZSBjZW50ZXIgb2YgcHJvamVjdGlvbi4gKi9cbiAgaWYgKHRoaXMubGF0MCA+PSBIQUxGX1BJIC0gRk9SVFBJIC8gMi4wKSB7XG4gICAgdGhpcy5mYWNlID0gRkFDRV9FTlVNLlRPUDtcbiAgfSBlbHNlIGlmICh0aGlzLmxhdDAgPD0gLShIQUxGX1BJIC0gRk9SVFBJIC8gMi4wKSkge1xuICAgIHRoaXMuZmFjZSA9IEZBQ0VfRU5VTS5CT1RUT007XG4gIH0gZWxzZSBpZiAoTWF0aC5hYnModGhpcy5sb25nMCkgPD0gRk9SVFBJKSB7XG4gICAgdGhpcy5mYWNlID0gRkFDRV9FTlVNLkZST05UO1xuICB9IGVsc2UgaWYgKE1hdGguYWJzKHRoaXMubG9uZzApIDw9IEhBTEZfUEkgKyBGT1JUUEkpIHtcbiAgICB0aGlzLmZhY2UgPSB0aGlzLmxvbmcwID4gMC4wID8gRkFDRV9FTlVNLlJJR0hUIDogRkFDRV9FTlVNLkxFRlQ7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5mYWNlID0gRkFDRV9FTlVNLkJBQ0s7XG4gIH1cblxuICAvKiBGaWxsIGluIHVzZWZ1bCB2YWx1ZXMgZm9yIHRoZSBlbGxpcHNvaWQgPC0+IHNwaGVyZSBzaGlmdFxuICAgKiBkZXNjcmliZWQgaW4gW0xLMTJdLiAqL1xuICBpZiAodGhpcy5lcyAhPT0gMCkge1xuICAgIHRoaXMub25lX21pbnVzX2YgPSAxIC0gKHRoaXMuYSAtIHRoaXMuYikgLyB0aGlzLmE7XG4gICAgdGhpcy5vbmVfbWludXNfZl9zcXVhcmVkID0gdGhpcy5vbmVfbWludXNfZiAqIHRoaXMub25lX21pbnVzX2Y7XG4gIH1cbn1cblxuLy8gUVNDIGZvcndhcmQgZXF1YXRpb25zLS1tYXBwaW5nIGxhdCxsb25nIHRvIHgseVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkKHApIHtcbiAgdmFyIHh5ID0ge3g6IDAsIHk6IDB9O1xuICB2YXIgbGF0LCBsb247XG4gIHZhciB0aGV0YSwgcGhpO1xuICB2YXIgdCwgbXU7XG4gIC8qIG51OyAqL1xuICB2YXIgYXJlYSA9IHt2YWx1ZTogMH07XG5cbiAgLy8gbW92ZSBsb24gYWNjb3JkaW5nIHRvIHByb2plY3Rpb24ncyBsb25cbiAgcC54IC09IHRoaXMubG9uZzA7XG5cbiAgLyogQ29udmVydCB0aGUgZ2VvZGV0aWMgbGF0aXR1ZGUgdG8gYSBnZW9jZW50cmljIGxhdGl0dWRlLlxuICAgKiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBzaGlmdCBmcm9tIHRoZSBlbGxpcHNvaWQgdG8gdGhlIHNwaGVyZVxuICAgKiBkZXNjcmliZWQgaW4gW0xLMTJdLiAqL1xuICBpZiAodGhpcy5lcyAhPT0gMCkgey8vaWYgKFAtPmVzICE9IDApIHtcbiAgICBsYXQgPSBNYXRoLmF0YW4odGhpcy5vbmVfbWludXNfZl9zcXVhcmVkICogTWF0aC50YW4ocC55KSk7XG4gIH0gZWxzZSB7XG4gICAgbGF0ID0gcC55O1xuICB9XG5cbiAgLyogQ29udmVydCB0aGUgaW5wdXQgbGF0LCBsb24gaW50byB0aGV0YSwgcGhpIGFzIHVzZWQgYnkgUVNDLlxuICAgKiBUaGlzIGRlcGVuZHMgb24gdGhlIGN1YmUgZmFjZSBhbmQgdGhlIGFyZWEgb24gaXQuXG4gICAqIEZvciB0aGUgdG9wIGFuZCBib3R0b20gZmFjZSwgd2UgY2FuIGNvbXB1dGUgdGhldGEgYW5kIHBoaVxuICAgKiBkaXJlY3RseSBmcm9tIHBoaSwgbGFtLiBGb3IgdGhlIG90aGVyIGZhY2VzLCB3ZSBtdXN0IHVzZVxuICAgKiB1bml0IHNwaGVyZSBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgYXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAuICovXG4gIGxvbiA9IHAueDsgLy9sb24gPSBscC5sYW07XG4gIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5UT1ApIHtcbiAgICBwaGkgPSBIQUxGX1BJIC0gbGF0O1xuICAgIGlmIChsb24gPj0gRk9SVFBJICYmIGxvbiA8PSBIQUxGX1BJICsgRk9SVFBJKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMDtcbiAgICAgIHRoZXRhID0gbG9uIC0gSEFMRl9QSTtcbiAgICB9IGVsc2UgaWYgKGxvbiA+IEhBTEZfUEkgKyBGT1JUUEkgfHwgbG9uIDw9IC0oSEFMRl9QSSArIEZPUlRQSSkpIHtcbiAgICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8xO1xuICAgICAgdGhldGEgPSAobG9uID4gMC4wID8gbG9uIC0gU1BJIDogbG9uICsgU1BJKTtcbiAgICB9IGVsc2UgaWYgKGxvbiA+IC0oSEFMRl9QSSArIEZPUlRQSSkgJiYgbG9uIDw9IC1GT1JUUEkpIHtcbiAgICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8yO1xuICAgICAgdGhldGEgPSBsb24gKyBIQUxGX1BJO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMztcbiAgICAgIHRoZXRhID0gbG9uO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5CT1RUT00pIHtcbiAgICBwaGkgPSBIQUxGX1BJICsgbGF0O1xuICAgIGlmIChsb24gPj0gRk9SVFBJICYmIGxvbiA8PSBIQUxGX1BJICsgRk9SVFBJKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMDtcbiAgICAgIHRoZXRhID0gLWxvbiArIEhBTEZfUEk7XG4gICAgfSBlbHNlIGlmIChsb24gPCBGT1JUUEkgJiYgbG9uID49IC1GT1JUUEkpIHtcbiAgICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8xO1xuICAgICAgdGhldGEgPSAtbG9uO1xuICAgIH0gZWxzZSBpZiAobG9uIDwgLUZPUlRQSSAmJiBsb24gPj0gLShIQUxGX1BJICsgRk9SVFBJKSkge1xuICAgICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzI7XG4gICAgICB0aGV0YSA9IC1sb24gLSBIQUxGX1BJO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMztcbiAgICAgIHRoZXRhID0gKGxvbiA+IDAuMCA/IC1sb24gKyBTUEkgOiAtbG9uIC0gU1BJKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIHEsIHIsIHM7XG4gICAgdmFyIHNpbmxhdCwgY29zbGF0O1xuICAgIHZhciBzaW5sb24sIGNvc2xvbjtcblxuICAgIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5SSUdIVCkge1xuICAgICAgbG9uID0gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obG9uLCArSEFMRl9QSSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5CQUNLKSB7XG4gICAgICBsb24gPSBxc2Nfc2hpZnRfbG9uX29yaWdpbihsb24sICtTUEkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uTEVGVCkge1xuICAgICAgbG9uID0gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obG9uLCAtSEFMRl9QSSk7XG4gICAgfVxuICAgIHNpbmxhdCA9IE1hdGguc2luKGxhdCk7XG4gICAgY29zbGF0ID0gTWF0aC5jb3MobGF0KTtcbiAgICBzaW5sb24gPSBNYXRoLnNpbihsb24pO1xuICAgIGNvc2xvbiA9IE1hdGguY29zKGxvbik7XG4gICAgcSA9IGNvc2xhdCAqIGNvc2xvbjtcbiAgICByID0gY29zbGF0ICogc2lubG9uO1xuICAgIHMgPSBzaW5sYXQ7XG5cbiAgICBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uRlJPTlQpIHtcbiAgICAgIHBoaSA9IE1hdGguYWNvcyhxKTtcbiAgICAgIHRoZXRhID0gcXNjX2Z3ZF9lcXVhdF9mYWNlX3RoZXRhKHBoaSwgcywgciwgYXJlYSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5SSUdIVCkge1xuICAgICAgcGhpID0gTWF0aC5hY29zKHIpO1xuICAgICAgdGhldGEgPSBxc2NfZndkX2VxdWF0X2ZhY2VfdGhldGEocGhpLCBzLCAtcSwgYXJlYSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5CQUNLKSB7XG4gICAgICBwaGkgPSBNYXRoLmFjb3MoLXEpO1xuICAgICAgdGhldGEgPSBxc2NfZndkX2VxdWF0X2ZhY2VfdGhldGEocGhpLCBzLCAtciwgYXJlYSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5MRUZUKSB7XG4gICAgICBwaGkgPSBNYXRoLmFjb3MoLXIpO1xuICAgICAgdGhldGEgPSBxc2NfZndkX2VxdWF0X2ZhY2VfdGhldGEocGhpLCBzLCBxLCBhcmVhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLyogSW1wb3NzaWJsZSAqL1xuICAgICAgcGhpID0gdGhldGEgPSAwO1xuICAgICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzA7XG4gICAgfVxuICB9XG5cbiAgLyogQ29tcHV0ZSBtdSBhbmQgbnUgZm9yIHRoZSBhcmVhIG9mIGRlZmluaXRpb24uXG4gICAqIEZvciBtdSwgc2VlIEVxLiAoMy0yMSkgaW4gW09MNzZdLCBidXQgbm90ZSB0aGUgdHlwb3M6XG4gICAqIGNvbXBhcmUgd2l0aCBFcS4gKDMtMTQpLiBGb3IgbnUsIHNlZSBFcS4gKDMtMzgpLiAqL1xuICBtdSA9IE1hdGguYXRhbigoMTIgLyBTUEkpICogKHRoZXRhICsgTWF0aC5hY29zKE1hdGguc2luKHRoZXRhKSAqIE1hdGguY29zKEZPUlRQSSkpIC0gSEFMRl9QSSkpO1xuICB0ID0gTWF0aC5zcXJ0KCgxIC0gTWF0aC5jb3MocGhpKSkgLyAoTWF0aC5jb3MobXUpICogTWF0aC5jb3MobXUpKSAvICgxIC0gTWF0aC5jb3MoTWF0aC5hdGFuKDEgLyBNYXRoLmNvcyh0aGV0YSkpKSkpO1xuXG4gIC8qIEFwcGx5IHRoZSByZXN1bHQgdG8gdGhlIHJlYWwgYXJlYS4gKi9cbiAgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzEpIHtcbiAgICBtdSArPSBIQUxGX1BJO1xuICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzIpIHtcbiAgICBtdSArPSBTUEk7XG4gIH0gZWxzZSBpZiAoYXJlYS52YWx1ZSA9PT0gQVJFQV9FTlVNLkFSRUFfMykge1xuICAgIG11ICs9IDEuNSAqIFNQSTtcbiAgfVxuXG4gIC8qIE5vdyBjb21wdXRlIHgsIHkgZnJvbSBtdSBhbmQgbnUgKi9cbiAgeHkueCA9IHQgKiBNYXRoLmNvcyhtdSk7XG4gIHh5LnkgPSB0ICogTWF0aC5zaW4obXUpO1xuICB4eS54ID0geHkueCAqIHRoaXMuYSArIHRoaXMueDA7XG4gIHh5LnkgPSB4eS55ICogdGhpcy5hICsgdGhpcy55MDtcblxuICBwLnggPSB4eS54O1xuICBwLnkgPSB4eS55O1xuICByZXR1cm4gcDtcbn1cblxuLy8gUVNDIGludmVyc2UgZXF1YXRpb25zLS1tYXBwaW5nIHgseSB0byBsYXQvbG9uZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgdmFyIGxwID0ge2xhbTogMCwgcGhpOiAwfTtcbiAgdmFyIG11LCBudSwgY29zbXUsIHRhbm51O1xuICB2YXIgdGFudGhldGEsIHRoZXRhLCBjb3NwaGksIHBoaTtcbiAgdmFyIHQ7XG4gIHZhciBhcmVhID0ge3ZhbHVlOiAwfTtcblxuICAvKiBkZS1vZmZzZXQgKi9cbiAgcC54ID0gKHAueCAtIHRoaXMueDApIC8gdGhpcy5hO1xuICBwLnkgPSAocC55IC0gdGhpcy55MCkgLyB0aGlzLmE7XG5cbiAgLyogQ29udmVydCB0aGUgaW5wdXQgeCwgeSB0byB0aGUgbXUgYW5kIG51IGFuZ2xlcyBhcyB1c2VkIGJ5IFFTQy5cbiAgICogVGhpcyBkZXBlbmRzIG9uIHRoZSBhcmVhIG9mIHRoZSBjdWJlIGZhY2UuICovXG4gIG51ID0gTWF0aC5hdGFuKE1hdGguc3FydChwLnggKiBwLnggKyBwLnkgKiBwLnkpKTtcbiAgbXUgPSBNYXRoLmF0YW4yKHAueSwgcC54KTtcbiAgaWYgKHAueCA+PSAwLjAgJiYgcC54ID49IE1hdGguYWJzKHAueSkpIHtcbiAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMDtcbiAgfSBlbHNlIGlmIChwLnkgPj0gMC4wICYmIHAueSA+PSBNYXRoLmFicyhwLngpKSB7XG4gICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzE7XG4gICAgbXUgLT0gSEFMRl9QSTtcbiAgfSBlbHNlIGlmIChwLnggPCAwLjAgJiYgLXAueCA+PSBNYXRoLmFicyhwLnkpKSB7XG4gICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzI7XG4gICAgbXUgPSAobXUgPCAwLjAgPyBtdSArIFNQSSA6IG11IC0gU1BJKTtcbiAgfSBlbHNlIHtcbiAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMztcbiAgICBtdSArPSBIQUxGX1BJO1xuICB9XG5cbiAgLyogQ29tcHV0ZSBwaGkgYW5kIHRoZXRhIGZvciB0aGUgYXJlYSBvZiBkZWZpbml0aW9uLlxuICAgKiBUaGUgaW52ZXJzZSBwcm9qZWN0aW9uIGlzIG5vdCBkZXNjcmliZWQgaW4gdGhlIG9yaWdpbmFsIHBhcGVyLCBidXQgc29tZVxuICAgKiBnb29kIGhpbnRzIGNhbiBiZSBmb3VuZCBoZXJlIChhcyBvZiAyMDExLTEyLTE0KTpcbiAgICogaHR0cDovL2ZpdHMuZ3NmYy5uYXNhLmdvdi9maXRzYml0cy9zYWYuOTMvc2FmLjkzMDJcbiAgICogKHNlYXJjaCBmb3IgXCJNZXNzYWdlLUlkOiA8OTMwMjE4MTc1OS5BQTI1NDc3IGF0IGZpdHMuY3YubnJhby5lZHU+XCIpICovXG4gIHQgPSAoU1BJIC8gMTIpICogTWF0aC50YW4obXUpO1xuICB0YW50aGV0YSA9IE1hdGguc2luKHQpIC8gKE1hdGguY29zKHQpIC0gKDEgLyBNYXRoLnNxcnQoMikpKTtcbiAgdGhldGEgPSBNYXRoLmF0YW4odGFudGhldGEpO1xuICBjb3NtdSA9IE1hdGguY29zKG11KTtcbiAgdGFubnUgPSBNYXRoLnRhbihudSk7XG4gIGNvc3BoaSA9IDEgLSBjb3NtdSAqIGNvc211ICogdGFubnUgKiB0YW5udSAqICgxIC0gTWF0aC5jb3MoTWF0aC5hdGFuKDEgLyBNYXRoLmNvcyh0aGV0YSkpKSk7XG4gIGlmIChjb3NwaGkgPCAtMSkge1xuICAgIGNvc3BoaSA9IC0xO1xuICB9IGVsc2UgaWYgKGNvc3BoaSA+ICsxKSB7XG4gICAgY29zcGhpID0gKzE7XG4gIH1cblxuICAvKiBBcHBseSB0aGUgcmVzdWx0IHRvIHRoZSByZWFsIGFyZWEgb24gdGhlIGN1YmUgZmFjZS5cbiAgICogRm9yIHRoZSB0b3AgYW5kIGJvdHRvbSBmYWNlLCB3ZSBjYW4gY29tcHV0ZSBwaGkgYW5kIGxhbSBkaXJlY3RseS5cbiAgICogRm9yIHRoZSBvdGhlciBmYWNlcywgd2UgbXVzdCB1c2UgdW5pdCBzcGhlcmUgY2FydGVzaWFuIGNvb3JkaW5hdGVzXG4gICAqIGFzIGFuIGludGVybWVkaWF0ZSBzdGVwLiAqL1xuICBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uVE9QKSB7XG4gICAgcGhpID0gTWF0aC5hY29zKGNvc3BoaSk7XG4gICAgbHAucGhpID0gSEFMRl9QSSAtIHBoaTtcbiAgICBpZiAoYXJlYS52YWx1ZSA9PT0gQVJFQV9FTlVNLkFSRUFfMCkge1xuICAgICAgbHAubGFtID0gdGhldGEgKyBIQUxGX1BJO1xuICAgIH0gZWxzZSBpZiAoYXJlYS52YWx1ZSA9PT0gQVJFQV9FTlVNLkFSRUFfMSkge1xuICAgICAgbHAubGFtID0gKHRoZXRhIDwgMC4wID8gdGhldGEgKyBTUEkgOiB0aGV0YSAtIFNQSSk7XG4gICAgfSBlbHNlIGlmIChhcmVhLnZhbHVlID09PSBBUkVBX0VOVU0uQVJFQV8yKSB7XG4gICAgICBscC5sYW0gPSB0aGV0YSAtIEhBTEZfUEk7XG4gICAgfSBlbHNlIC8qIGFyZWEudmFsdWUgPT0gQVJFQV9FTlVNLkFSRUFfMyAqLyB7XG4gICAgICBscC5sYW0gPSB0aGV0YTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uQk9UVE9NKSB7XG4gICAgcGhpID0gTWF0aC5hY29zKGNvc3BoaSk7XG4gICAgbHAucGhpID0gcGhpIC0gSEFMRl9QSTtcbiAgICBpZiAoYXJlYS52YWx1ZSA9PT0gQVJFQV9FTlVNLkFSRUFfMCkge1xuICAgICAgbHAubGFtID0gLXRoZXRhICsgSEFMRl9QSTtcbiAgICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzEpIHtcbiAgICAgIGxwLmxhbSA9IC10aGV0YTtcbiAgICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzIpIHtcbiAgICAgIGxwLmxhbSA9IC10aGV0YSAtIEhBTEZfUEk7XG4gICAgfSBlbHNlIC8qIGFyZWEudmFsdWUgPT0gQVJFQV9FTlVNLkFSRUFfMyAqLyB7XG4gICAgICBscC5sYW0gPSAodGhldGEgPCAwLjAgPyAtdGhldGEgLSBTUEkgOiAtdGhldGEgKyBTUEkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvKiBDb21wdXRlIHBoaSBhbmQgbGFtIHZpYSBjYXJ0ZXNpYW4gdW5pdCBzcGhlcmUgY29vcmRpbmF0ZXMuICovXG4gICAgdmFyIHEsIHIsIHM7XG4gICAgcSA9IGNvc3BoaTtcbiAgICB0ID0gcSAqIHE7XG4gICAgaWYgKHQgPj0gMSkge1xuICAgICAgcyA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgPSBNYXRoLnNxcnQoMSAtIHQpICogTWF0aC5zaW4odGhldGEpO1xuICAgIH1cbiAgICB0ICs9IHMgKiBzO1xuICAgIGlmICh0ID49IDEpIHtcbiAgICAgIHIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByID0gTWF0aC5zcXJ0KDEgLSB0KTtcbiAgICB9XG4gICAgLyogUm90YXRlIHEscixzIGludG8gdGhlIGNvcnJlY3QgYXJlYS4gKi9cbiAgICBpZiAoYXJlYS52YWx1ZSA9PT0gQVJFQV9FTlVNLkFSRUFfMSkge1xuICAgICAgdCA9IHI7XG4gICAgICByID0gLXM7XG4gICAgICBzID0gdDtcbiAgICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzIpIHtcbiAgICAgIHIgPSAtcjtcbiAgICAgIHMgPSAtcztcbiAgICB9IGVsc2UgaWYgKGFyZWEudmFsdWUgPT09IEFSRUFfRU5VTS5BUkVBXzMpIHtcbiAgICAgIHQgPSByO1xuICAgICAgciA9IHM7XG4gICAgICBzID0gLXQ7XG4gICAgfVxuICAgIC8qIFJvdGF0ZSBxLHIscyBpbnRvIHRoZSBjb3JyZWN0IGN1YmUgZmFjZS4gKi9cbiAgICBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uUklHSFQpIHtcbiAgICAgIHQgPSBxO1xuICAgICAgcSA9IC1yO1xuICAgICAgciA9IHQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5CQUNLKSB7XG4gICAgICBxID0gLXE7XG4gICAgICByID0gLXI7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5MRUZUKSB7XG4gICAgICB0ID0gcTtcbiAgICAgIHEgPSByO1xuICAgICAgciA9IC10O1xuICAgIH1cbiAgICAvKiBOb3cgY29tcHV0ZSBwaGkgYW5kIGxhbSBmcm9tIHRoZSB1bml0IHNwaGVyZSBjb29yZGluYXRlcy4gKi9cbiAgICBscC5waGkgPSBNYXRoLmFjb3MoLXMpIC0gSEFMRl9QSTtcbiAgICBscC5sYW0gPSBNYXRoLmF0YW4yKHIsIHEpO1xuICAgIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5SSUdIVCkge1xuICAgICAgbHAubGFtID0gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obHAubGFtLCAtSEFMRl9QSSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZhY2UgPT09IEZBQ0VfRU5VTS5CQUNLKSB7XG4gICAgICBscC5sYW0gPSBxc2Nfc2hpZnRfbG9uX29yaWdpbihscC5sYW0sIC1TUEkpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5mYWNlID09PSBGQUNFX0VOVU0uTEVGVCkge1xuICAgICAgbHAubGFtID0gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obHAubGFtLCArSEFMRl9QSSk7XG4gICAgfVxuICB9XG5cbiAgLyogQXBwbHkgdGhlIHNoaWZ0IGZyb20gdGhlIHNwaGVyZSB0byB0aGUgZWxsaXBzb2lkIGFzIGRlc2NyaWJlZFxuICAgKiBpbiBbTEsxMl0uICovXG4gIGlmICh0aGlzLmVzICE9PSAwKSB7XG4gICAgdmFyIGludmVydF9zaWduO1xuICAgIHZhciB0YW5waGksIHhhO1xuICAgIGludmVydF9zaWduID0gKGxwLnBoaSA8IDAgPyAxIDogMCk7XG4gICAgdGFucGhpID0gTWF0aC50YW4obHAucGhpKTtcbiAgICB4YSA9IHRoaXMuYiAvIE1hdGguc3FydCh0YW5waGkgKiB0YW5waGkgKyB0aGlzLm9uZV9taW51c19mX3NxdWFyZWQpO1xuICAgIGxwLnBoaSA9IE1hdGguYXRhbihNYXRoLnNxcnQodGhpcy5hICogdGhpcy5hIC0geGEgKiB4YSkgLyAodGhpcy5vbmVfbWludXNfZiAqIHhhKSk7XG4gICAgaWYgKGludmVydF9zaWduKSB7XG4gICAgICBscC5waGkgPSAtbHAucGhpO1xuICAgIH1cbiAgfVxuXG4gIGxwLmxhbSArPSB0aGlzLmxvbmcwO1xuICBwLnggPSBscC5sYW07XG4gIHAueSA9IGxwLnBoaTtcbiAgcmV0dXJuIHA7XG59XG5cbi8qIEhlbHBlciBmdW5jdGlvbiBmb3IgZm9yd2FyZCBwcm9qZWN0aW9uOiBjb21wdXRlIHRoZSB0aGV0YSBhbmdsZVxuICogYW5kIGRldGVybWluZSB0aGUgYXJlYSBudW1iZXIuICovXG5mdW5jdGlvbiBxc2NfZndkX2VxdWF0X2ZhY2VfdGhldGEocGhpLCB5LCB4LCBhcmVhKSB7XG4gIHZhciB0aGV0YTtcbiAgaWYgKHBoaSA8IEVQU0xOKSB7XG4gICAgYXJlYS52YWx1ZSA9IEFSRUFfRU5VTS5BUkVBXzA7XG4gICAgdGhldGEgPSAwLjA7XG4gIH0gZWxzZSB7XG4gICAgdGhldGEgPSBNYXRoLmF0YW4yKHksIHgpO1xuICAgIGlmIChNYXRoLmFicyh0aGV0YSkgPD0gRk9SVFBJKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMDtcbiAgICB9IGVsc2UgaWYgKHRoZXRhID4gRk9SVFBJICYmIHRoZXRhIDw9IEhBTEZfUEkgKyBGT1JUUEkpIHtcbiAgICAgIGFyZWEudmFsdWUgPSBBUkVBX0VOVU0uQVJFQV8xO1xuICAgICAgdGhldGEgLT0gSEFMRl9QSTtcbiAgICB9IGVsc2UgaWYgKHRoZXRhID4gSEFMRl9QSSArIEZPUlRQSSB8fCB0aGV0YSA8PSAtKEhBTEZfUEkgKyBGT1JUUEkpKSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMjtcbiAgICAgIHRoZXRhID0gKHRoZXRhID49IDAuMCA/IHRoZXRhIC0gU1BJIDogdGhldGEgKyBTUEkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmVhLnZhbHVlID0gQVJFQV9FTlVNLkFSRUFfMztcbiAgICAgIHRoZXRhICs9IEhBTEZfUEk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGV0YTtcbn1cblxuLyogSGVscGVyIGZ1bmN0aW9uOiBzaGlmdCB0aGUgbG9uZ2l0dWRlLiAqL1xuZnVuY3Rpb24gcXNjX3NoaWZ0X2xvbl9vcmlnaW4obG9uLCBvZmZzZXQpIHtcbiAgdmFyIHNsb24gPSBsb24gKyBvZmZzZXQ7XG4gIGlmIChzbG9uIDwgLVNQSSkge1xuICAgIHNsb24gKz0gVFdPX1BJO1xuICB9IGVsc2UgaWYgKHNsb24gPiArU1BJKSB7XG4gICAgc2xvbiAtPSBUV09fUEk7XG4gIH1cbiAgcmV0dXJuIHNsb247XG59XG5cbmV4cG9ydCB2YXIgbmFtZXMgPSBbXCJRdWFkcmlsYXRlcmFsaXplZCBTcGhlcmljYWwgQ3ViZVwiLCBcIlF1YWRyaWxhdGVyYWxpemVkX1NwaGVyaWNhbF9DdWJlXCIsIFwicXNjXCJdO1xuZXhwb3J0IGRlZmF1bHQge1xuICBpbml0OiBpbml0LFxuICBmb3J3YXJkOiBmb3J3YXJkLFxuICBpbnZlcnNlOiBpbnZlcnNlLFxuICBuYW1lczogbmFtZXNcbn07XG5cbiIsIi8vIFJvYmluc29uIHByb2plY3Rpb25cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9PU0dlby9wcm9qLjQvYmxvYi9tYXN0ZXIvc3JjL1BKX3JvYmluLmNcbi8vIFBvbHlub21pYWwgY29lZmljaWVudHMgZnJvbSBodHRwOi8vYXJ0aWNsZS5nbWFuZS5vcmcvZ21hbmUuY29tcC5naXMucHJvai00LmRldmVsLzYwMzlcblxuaW1wb3J0IHtIQUxGX1BJLCBEMlIsIFIyRCwgRVBTTE59IGZyb20gJy4uL2NvbnN0YW50cy92YWx1ZXMnO1xuaW1wb3J0IGFkanVzdF9sb24gZnJvbSAnLi4vY29tbW9uL2FkanVzdF9sb24nO1xuXG52YXIgQ09FRlNfWCA9IFtcbiAgICBbMS4wMDAwLCAyLjIxOTllLTE3LCAtNy4xNTUxNWUtMDUsIDMuMTEwM2UtMDZdLFxuICAgIFswLjk5ODYsIC0wLjAwMDQ4MjI0MywgLTIuNDg5N2UtMDUsIC0xLjMzMDllLTA2XSxcbiAgICBbMC45OTU0LCAtMC4wMDA4MzEwMywgLTQuNDg2MDVlLTA1LCAtOS44NjcwMWUtMDddLFxuICAgIFswLjk5MDAsIC0wLjAwMTM1MzY0LCAtNS45NjYxZS0wNSwgMy42Nzc3ZS0wNl0sXG4gICAgWzAuOTgyMiwgLTAuMDAxNjc0NDIsIC00LjQ5NTQ3ZS0wNiwgLTUuNzI0MTFlLTA2XSxcbiAgICBbMC45NzMwLCAtMC4wMDIxNDg2OCwgLTkuMDM1NzFlLTA1LCAxLjg3MzZlLTA4XSxcbiAgICBbMC45NjAwLCAtMC4wMDMwNTA4NSwgLTkuMDA3NjFlLTA1LCAxLjY0OTE3ZS0wNl0sXG4gICAgWzAuOTQyNywgLTAuMDAzODI3OTIsIC02LjUzMzg2ZS0wNSwgLTIuNjE1NGUtMDZdLFxuICAgIFswLjkyMTYsIC0wLjAwNDY3NzQ2LCAtMC4wMDAxMDQ1NywgNC44MTI0M2UtMDZdLFxuICAgIFswLjg5NjIsIC0wLjAwNTM2MjIzLCAtMy4yMzgzMWUtMDUsIC01LjQzNDMyZS0wNl0sXG4gICAgWzAuODY3OSwgLTAuMDA2MDkzNjMsIC0wLjAwMDExMzg5OCwgMy4zMjQ4NGUtMDZdLFxuICAgIFswLjgzNTAsIC0wLjAwNjk4MzI1LCAtNi40MDI1M2UtMDUsIDkuMzQ5NTllLTA3XSxcbiAgICBbMC43OTg2LCAtMC4wMDc1NTMzOCwgLTUuMDAwMDllLTA1LCA5LjM1MzI0ZS0wN10sXG4gICAgWzAuNzU5NywgLTAuMDA3OTgzMjQsIC0zLjU5NzFlLTA1LCAtMi4yNzYyNmUtMDZdLFxuICAgIFswLjcxODYsIC0wLjAwODUxMzY3LCAtNy4wMTE0OWUtMDUsIC04LjYzMDNlLTA2XSxcbiAgICBbMC42NzMyLCAtMC4wMDk4NjIwOSwgLTAuMDAwMTk5NTY5LCAxLjkxOTc0ZS0wNV0sXG4gICAgWzAuNjIxMywgLTAuMDEwNDE4LCA4LjgzOTIzZS0wNSwgNi4yNDA1MWUtMDZdLFxuICAgIFswLjU3MjIsIC0wLjAwOTA2NjAxLCAwLjAwMDE4MiwgNi4yNDA1MWUtMDZdLFxuICAgIFswLjUzMjIsIC0wLjAwNjc3Nzk3LCAwLjAwMDI3NTYwOCwgNi4yNDA1MWUtMDZdXG5dO1xuXG52YXIgQ09FRlNfWSA9IFtcbiAgICBbLTUuMjA0MTdlLTE4LCAwLjAxMjQsIDEuMjE0MzFlLTE4LCAtOC40NTI4NGUtMTFdLFxuICAgIFswLjA2MjAsIDAuMDEyNCwgLTEuMjY3OTNlLTA5LCA0LjIyNjQyZS0xMF0sXG4gICAgWzAuMTI0MCwgMC4wMTI0LCA1LjA3MTcxZS0wOSwgLTEuNjA2MDRlLTA5XSxcbiAgICBbMC4xODYwLCAwLjAxMjM5OTksIC0xLjkwMTg5ZS0wOCwgNi4wMDE1MmUtMDldLFxuICAgIFswLjI0ODAsIDAuMDEyNDAwMiwgNy4xMDAzOWUtMDgsIC0yLjI0ZS0wOF0sXG4gICAgWzAuMzEwMCwgMC4wMTIzOTkyLCAtMi42NDk5N2UtMDcsIDguMzU5ODZlLTA4XSxcbiAgICBbMC4zNzIwLCAwLjAxMjQwMjksIDkuODg5ODNlLTA3LCAtMy4xMTk5NGUtMDddLFxuICAgIFswLjQzNDAsIDAuMDEyMzg5MywgLTMuNjkwOTNlLTA2LCAtNC4zNTYyMWUtMDddLFxuICAgIFswLjQ5NTgsIDAuMDEyMzE5OCwgLTEuMDIyNTJlLTA1LCAtMy40NTUyM2UtMDddLFxuICAgIFswLjU1NzEsIDAuMDEyMTkxNiwgLTEuNTQwODFlLTA1LCAtNS44MjI4OGUtMDddLFxuICAgIFswLjYxNzYsIDAuMDExOTkzOCwgLTIuNDE0MjRlLTA1LCAtNS4yNTMyN2UtMDddLFxuICAgIFswLjY3NjksIDAuMDExNzEzLCAtMy4yMDIyM2UtMDUsIC01LjE2NDA1ZS0wN10sXG4gICAgWzAuNzM0NiwgMC4wMTEzNTQxLCAtMy45NzY4NGUtMDUsIC02LjA5MDUyZS0wN10sXG4gICAgWzAuNzkwMywgMC4wMTA5MTA3LCAtNC44OTA0MmUtMDUsIC0xLjA0NzM5ZS0wNl0sXG4gICAgWzAuODQzNSwgMC4wMTAzNDMxLCAtNi40NjE1ZS0wNSwgLTEuNDAzNzRlLTA5XSxcbiAgICBbMC44OTM2LCAwLjAwOTY5Njg2LCAtNi40NjM2ZS0wNSwgLTguNTQ3ZS0wNl0sXG4gICAgWzAuOTM5NCwgMC4wMDg0MDk0NywgLTAuMDAwMTkyODQxLCAtNC4yMTA2ZS0wNl0sXG4gICAgWzAuOTc2MSwgMC4wMDYxNjUyNywgLTAuMDAwMjU2LCAtNC4yMTA2ZS0wNl0sXG4gICAgWzEuMDAwMCwgMC4wMDMyODk0NywgLTAuMDAwMzE5MTU5LCAtNC4yMTA2ZS0wNl1cbl07XG5cbnZhciBGWEMgPSAwLjg0ODc7XG52YXIgRllDID0gMS4zNTIzO1xudmFyIEMxID0gUjJELzU7IC8vIHJhZCB0byA1LWRlZ3JlZSBpbnRlcnZhbFxudmFyIFJDMSA9IDEvQzE7XG52YXIgTk9ERVMgPSAxODtcblxudmFyIHBvbHkzX3ZhbCA9IGZ1bmN0aW9uKGNvZWZzLCB4KSB7XG4gICAgcmV0dXJuIGNvZWZzWzBdICsgeCAqIChjb2Vmc1sxXSArIHggKiAoY29lZnNbMl0gKyB4ICogY29lZnNbM10pKTtcbn07XG5cbnZhciBwb2x5M19kZXIgPSBmdW5jdGlvbihjb2VmcywgeCkge1xuICAgIHJldHVybiBjb2Vmc1sxXSArIHggKiAoMiAqIGNvZWZzWzJdICsgeCAqIDMgKiBjb2Vmc1szXSk7XG59O1xuXG5mdW5jdGlvbiBuZXd0b25fcmFwc2hvbihmX2RmLCBzdGFydCwgbWF4X2VyciwgaXRlcnMpIHtcbiAgICB2YXIgeCA9IHN0YXJ0O1xuICAgIGZvciAoOyBpdGVyczsgLS1pdGVycykge1xuICAgICAgICB2YXIgdXBkID0gZl9kZih4KTtcbiAgICAgICAgeCAtPSB1cGQ7XG4gICAgICAgIGlmIChNYXRoLmFicyh1cGQpIDwgbWF4X2Vycikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICAgIHRoaXMueDAgPSB0aGlzLngwIHx8IDA7XG4gICAgdGhpcy55MCA9IHRoaXMueTAgfHwgMDtcbiAgICB0aGlzLmxvbmcwID0gdGhpcy5sb25nMCB8fCAwO1xuICAgIHRoaXMuZXMgPSAwO1xuICAgIHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlIHx8IFwiUm9iaW5zb25cIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQobGwpIHtcbiAgICB2YXIgbG9uID0gYWRqdXN0X2xvbihsbC54IC0gdGhpcy5sb25nMCk7XG5cbiAgICB2YXIgZHBoaSA9IE1hdGguYWJzKGxsLnkpO1xuICAgIHZhciBpID0gTWF0aC5mbG9vcihkcGhpICogQzEpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgICBpID0gMDtcbiAgICB9IGVsc2UgaWYgKGkgPj0gTk9ERVMpIHtcbiAgICAgICAgaSA9IE5PREVTIC0gMTtcbiAgICB9XG4gICAgZHBoaSA9IFIyRCAqIChkcGhpIC0gUkMxICogaSk7XG4gICAgdmFyIHh5ID0ge1xuICAgICAgICB4OiBwb2x5M192YWwoQ09FRlNfWFtpXSwgZHBoaSkgKiBsb24sXG4gICAgICAgIHk6IHBvbHkzX3ZhbChDT0VGU19ZW2ldLCBkcGhpKVxuICAgIH07XG4gICAgaWYgKGxsLnkgPCAwKSB7XG4gICAgICAgIHh5LnkgPSAteHkueTtcbiAgICB9XG5cbiAgICB4eS54ID0geHkueCAqIHRoaXMuYSAqIEZYQyArIHRoaXMueDA7XG4gICAgeHkueSA9IHh5LnkgKiB0aGlzLmEgKiBGWUMgKyB0aGlzLnkwO1xuICAgIHJldHVybiB4eTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGludmVyc2UoeHkpIHtcbiAgICB2YXIgbGwgPSB7XG4gICAgICAgIHg6ICh4eS54IC0gdGhpcy54MCkgLyAodGhpcy5hICogRlhDKSxcbiAgICAgICAgeTogTWF0aC5hYnMoeHkueSAtIHRoaXMueTApIC8gKHRoaXMuYSAqIEZZQylcbiAgICB9O1xuXG4gICAgaWYgKGxsLnkgPj0gMSkgeyAvLyBwYXRob2xvZ2ljIGNhc2VcbiAgICAgICAgbGwueCAvPSBDT0VGU19YW05PREVTXVswXTtcbiAgICAgICAgbGwueSA9IHh5LnkgPCAwID8gLUhBTEZfUEkgOiBIQUxGX1BJO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZpbmQgdGFibGUgaW50ZXJ2YWxcbiAgICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKGxsLnkgKiBOT0RFUyk7XG4gICAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA+PSBOT0RFUykge1xuICAgICAgICAgICAgaSA9IE5PREVTIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICBpZiAoQ09FRlNfWVtpXVswXSA+IGxsLnkpIHtcbiAgICAgICAgICAgICAgICAtLWk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKENPRUZTX1lbaSsxXVswXSA8PSBsbC55KSB7XG4gICAgICAgICAgICAgICAgKytpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBpbiA1IGRlZ3JlZSBpbnRlcnZhbFxuICAgICAgICB2YXIgY29lZnMgPSBDT0VGU19ZW2ldO1xuICAgICAgICB2YXIgdCA9IDUgKiAobGwueSAtIGNvZWZzWzBdKSAvIChDT0VGU19ZW2krMV1bMF0gLSBjb2Vmc1swXSk7XG4gICAgICAgIC8vIGZpbmQgdCBzbyB0aGF0IHBvbHkzX3ZhbChjb2VmcywgdCkgPSBsbC55XG4gICAgICAgIHQgPSBuZXd0b25fcmFwc2hvbihmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICByZXR1cm4gKHBvbHkzX3ZhbChjb2VmcywgeCkgLSBsbC55KSAvIHBvbHkzX2Rlcihjb2VmcywgeCk7XG4gICAgICAgIH0sIHQsIEVQU0xOLCAxMDApO1xuXG4gICAgICAgIGxsLnggLz0gcG9seTNfdmFsKENPRUZTX1hbaV0sIHQpO1xuICAgICAgICBsbC55ID0gKDUgKiBpICsgdCkgKiBEMlI7XG4gICAgICAgIGlmICh4eS55IDwgMCkge1xuICAgICAgICAgICAgbGwueSA9IC1sbC55O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGwueCA9IGFkanVzdF9sb24obGwueCArIHRoaXMubG9uZzApO1xuICAgIHJldHVybiBsbDtcbn1cblxuZXhwb3J0IHZhciBuYW1lcyA9IFtcIlJvYmluc29uXCIsIFwicm9iaW5cIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCB7XG4gICAgZ2VvZGV0aWNUb0dlb2NlbnRyaWMsXG4gICAgZ2VvY2VudHJpY1RvR2VvZGV0aWNcbn0gZnJvbSAnLi4vZGF0dW1VdGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICAgIHRoaXMubmFtZSA9ICdnZW9jZW50JztcblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZChwKSB7XG4gICAgdmFyIHBvaW50ID0gZ2VvZGV0aWNUb0dlb2NlbnRyaWMocCwgdGhpcy5lcywgdGhpcy5hKTtcbiAgICByZXR1cm4gcG9pbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZlcnNlKHApIHtcbiAgICB2YXIgcG9pbnQgPSBnZW9jZW50cmljVG9HZW9kZXRpYyhwLCB0aGlzLmVzLCB0aGlzLmEsIHRoaXMuYik7XG4gICAgcmV0dXJuIHBvaW50O1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiR2VvY2VudHJpY1wiLCAnZ2VvY2VudHJpYycsIFwiZ2VvY2VudFwiLCBcIkdlb2NlbnRcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gICAgaW5pdDogaW5pdCxcbiAgICBmb3J3YXJkOiBmb3J3YXJkLFxuICAgIGludmVyc2U6IGludmVyc2UsXG4gICAgbmFtZXM6IG5hbWVzXG59OyIsIlxudmFyIG1vZGUgPSB7XG4gIE5fUE9MRTogMCxcbiAgU19QT0xFOiAxLFxuICBFUVVJVDogMixcbiAgT0JMSVE6IDNcbn07XG5cbmltcG9ydCB7IEQyUiwgSEFMRl9QSSwgRVBTTE4gfSBmcm9tIFwiLi4vY29uc3RhbnRzL3ZhbHVlc1wiO1xuaW1wb3J0IGh5cG90IGZyb20gXCIuLi9jb21tb24vaHlwb3RcIjtcblxudmFyIHBhcmFtcyA9IHtcbiAgaDogICAgIHsgZGVmOiAxMDAwMDAsIG51bTogdHJ1ZSB9LCAgICAgICAgICAgLy8gZGVmYXVsdCBpcyBLYXJtYW4gbGluZSwgbm8gZGVmYXVsdCBpbiBQUk9KLjdcbiAgYXppOiAgIHsgZGVmOiAwLCBudW06IHRydWUsIGRlZ3JlZXM6IHRydWUgfSwgLy8gZGVmYXVsdCBpcyBOb3J0aFxuICB0aWx0OiAgeyBkZWY6IDAsIG51bTogdHJ1ZSwgZGVncmVlczogdHJ1ZSB9LCAvLyBkZWZhdWx0IGlzIE5hZGlyXG4gIGxvbmcwOiB7IGRlZjogMCwgbnVtOiB0cnVlIH0sICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgaXMgR3JlZW53aWNoLCBjb252ZXJzaW9uIHRvIHJhZCBpcyBhdXRvbWF0aWNcbiAgbGF0MDogIHsgZGVmOiAwLCBudW06IHRydWUgfSAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBpcyBFcXVhdG9yLCBjb252ZXJzaW9uIHRvIHJhZCBpcyBhdXRvbWF0aWNcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goZnVuY3Rpb24gKHApIHtcbiAgICBpZiAodHlwZW9mIHRoaXNbcF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXNbcF0gPSBwYXJhbXNbcF0uZGVmO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zW3BdLm51bSAmJiBpc05hTih0aGlzW3BdKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwYXJhbWV0ZXIgdmFsdWUsIG11c3QgYmUgbnVtZXJpYyBcIiArIHAgKyBcIiA9IFwiICsgdGhpc1twXSk7XG4gICAgfSBlbHNlIGlmIChwYXJhbXNbcF0ubnVtKSB7XG4gICAgICB0aGlzW3BdID0gcGFyc2VGbG9hdCh0aGlzW3BdKTtcbiAgICB9XG4gICAgaWYgKHBhcmFtc1twXS5kZWdyZWVzKSB7XG4gICAgICB0aGlzW3BdID0gdGhpc1twXSAqIEQyUjtcbiAgICB9XG4gIH0uYmluZCh0aGlzKSk7XG5cbiAgaWYgKE1hdGguYWJzKChNYXRoLmFicyh0aGlzLmxhdDApIC0gSEFMRl9QSSkpIDwgRVBTTE4pIHtcbiAgICB0aGlzLm1vZGUgPSB0aGlzLmxhdDAgPCAwID8gbW9kZS5TX1BPTEUgOiBtb2RlLk5fUE9MRTtcbiAgfSBlbHNlIGlmIChNYXRoLmFicyh0aGlzLmxhdDApIDwgRVBTTE4pIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlLkVRVUlUO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubW9kZSA9IG1vZGUuT0JMSVE7XG4gICAgdGhpcy5zaW5waDAgPSBNYXRoLnNpbih0aGlzLmxhdDApO1xuICAgIHRoaXMuY29zcGgwID0gTWF0aC5jb3ModGhpcy5sYXQwKTtcbiAgfVxuXG4gIHRoaXMucG4xID0gdGhpcy5oIC8gdGhpcy5hOyAgLy8gTm9ybWFsaXplIHJlbGF0aXZlIHRvIHRoZSBFYXJ0aCdzIHJhZGl1c1xuXG4gIGlmICh0aGlzLnBuMSA8PSAwIHx8IHRoaXMucG4xID4gMWUxMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaGVpZ2h0XCIpO1xuICB9XG4gIFxuICB0aGlzLnAgPSAxICsgdGhpcy5wbjE7XG4gIHRoaXMucnAgPSAxIC8gdGhpcy5wO1xuICB0aGlzLmgxID0gMSAvIHRoaXMucG4xO1xuICB0aGlzLnBmYWN0ID0gKHRoaXMucCArIDEpICogdGhpcy5oMTtcbiAgdGhpcy5lcyA9IDA7XG5cbiAgdmFyIG9tZWdhID0gdGhpcy50aWx0O1xuICB2YXIgZ2FtbWEgPSB0aGlzLmF6aTtcbiAgdGhpcy5jZyA9IE1hdGguY29zKGdhbW1hKTtcbiAgdGhpcy5zZyA9IE1hdGguc2luKGdhbW1hKTtcbiAgdGhpcy5jdyA9IE1hdGguY29zKG9tZWdhKTtcbiAgdGhpcy5zdyA9IE1hdGguc2luKG9tZWdhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmQocCkge1xuICBwLnggLT0gdGhpcy5sb25nMDtcbiAgdmFyIHNpbnBoaSA9IE1hdGguc2luKHAueSk7XG4gIHZhciBjb3NwaGkgPSBNYXRoLmNvcyhwLnkpO1xuICB2YXIgY29zbGFtID0gTWF0aC5jb3MocC54KTtcbiAgdmFyIHgsIHk7XG4gIHN3aXRjaCAodGhpcy5tb2RlKSB7XG4gICAgY2FzZSBtb2RlLk9CTElROlxuICAgICAgeSA9IHRoaXMuc2lucGgwICogc2lucGhpICsgdGhpcy5jb3NwaDAgKiBjb3NwaGkgKiBjb3NsYW07XG4gICAgICBicmVhaztcbiAgICBjYXNlIG1vZGUuRVFVSVQ6XG4gICAgICB5ID0gY29zcGhpICogY29zbGFtO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBtb2RlLlNfUE9MRTpcbiAgICAgIHkgPSAtc2lucGhpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBtb2RlLk5fUE9MRTpcbiAgICAgIHkgPSBzaW5waGk7XG4gICAgICBicmVhaztcbiAgfVxuICB5ID0gdGhpcy5wbjEgLyAodGhpcy5wIC0geSk7XG4gIHggPSB5ICogY29zcGhpICogTWF0aC5zaW4ocC54KTtcblxuICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgIGNhc2UgbW9kZS5PQkxJUTpcbiAgICAgIHkgKj0gdGhpcy5jb3NwaDAgKiBzaW5waGkgLSB0aGlzLnNpbnBoMCAqIGNvc3BoaSAqIGNvc2xhbTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgbW9kZS5FUVVJVDpcbiAgICAgIHkgKj0gc2lucGhpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBtb2RlLk5fUE9MRTpcbiAgICAgIHkgKj0gLShjb3NwaGkgKiBjb3NsYW0pO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBtb2RlLlNfUE9MRTpcbiAgICAgIHkgKj0gY29zcGhpICogY29zbGFtO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICAvLyBUaWx0IFxuICB2YXIgeXQsIGJhO1xuICB5dCA9IHkgKiB0aGlzLmNnICsgeCAqIHRoaXMuc2c7XG4gIGJhID0gMSAvICh5dCAqIHRoaXMuc3cgKiB0aGlzLmgxICsgdGhpcy5jdyk7XG4gIHggPSAoeCAqIHRoaXMuY2cgLSB5ICogdGhpcy5zZykgKiB0aGlzLmN3ICogYmE7XG4gIHkgPSB5dCAqIGJhO1xuXG4gIHAueCA9IHggKiB0aGlzLmE7XG4gIHAueSA9IHkgKiB0aGlzLmE7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJzZShwKSB7XG4gIHAueCAvPSB0aGlzLmE7XG4gIHAueSAvPSB0aGlzLmE7XG4gIHZhciByID0geyB4OiBwLngsIHk6IHAueSB9O1xuXG4gIC8vIFVuLVRpbHRcbiAgdmFyIGJtLCBicSwgeXQ7XG4gIHl0ID0gMSAvICh0aGlzLnBuMSAtIHAueSAqIHRoaXMuc3cpO1xuICBibSA9IHRoaXMucG4xICogcC54ICogeXQ7XG4gIGJxID0gdGhpcy5wbjEgKiBwLnkgKiB0aGlzLmN3ICogeXQ7XG4gIHAueCA9IGJtICogdGhpcy5jZyArIGJxICogdGhpcy5zZztcbiAgcC55ID0gYnEgKiB0aGlzLmNnIC0gYm0gKiB0aGlzLnNnO1xuXG4gIHZhciByaCA9IGh5cG90KHAueCwgcC55KTtcbiAgaWYgKE1hdGguYWJzKHJoKSA8IEVQU0xOKSB7XG4gICAgci54ID0gMDtcbiAgICByLnkgPSBwLnk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNvc3osIHNpbno7XG4gICAgc2lueiA9IDEgLSByaCAqIHJoICogdGhpcy5wZmFjdDtcbiAgICBzaW56ID0gKHRoaXMucCAtIE1hdGguc3FydChzaW56KSkgLyAodGhpcy5wbjEgLyByaCArIHJoIC8gdGhpcy5wbjEpO1xuICAgIGNvc3ogPSBNYXRoLnNxcnQoMSAtIHNpbnogKiBzaW56KTtcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xuICAgICAgY2FzZSBtb2RlLk9CTElROlxuICAgICAgICByLnkgPSBNYXRoLmFzaW4oY29zeiAqIHRoaXMuc2lucGgwICsgcC55ICogc2lueiAqIHRoaXMuY29zcGgwIC8gcmgpO1xuICAgICAgICBwLnkgPSAoY29zeiAtIHRoaXMuc2lucGgwICogTWF0aC5zaW4oci55KSkgKiByaDtcbiAgICAgICAgcC54ICo9IHNpbnogKiB0aGlzLmNvc3BoMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG1vZGUuRVFVSVQ6XG4gICAgICAgIHIueSA9IE1hdGguYXNpbihwLnkgKiBzaW56IC8gcmgpO1xuICAgICAgICBwLnkgPSBjb3N6ICogcmg7XG4gICAgICAgIHAueCAqPSBzaW56O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgbW9kZS5OX1BPTEU6XG4gICAgICAgIHIueSA9IE1hdGguYXNpbihjb3N6KTtcbiAgICAgICAgcC55ID0gLXAueTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIG1vZGUuU19QT0xFOlxuICAgICAgICByLnkgPSAtTWF0aC5hc2luKGNvc3opO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgci54ID0gTWF0aC5hdGFuMihwLngsIHAueSk7XG4gIH1cblxuICBwLnggPSByLnggKyB0aGlzLmxvbmcwO1xuICBwLnkgPSByLnk7XG4gIHJldHVybiBwO1xufVxuXG5leHBvcnQgdmFyIG5hbWVzID0gW1wiVGlsdGVkX1BlcnNwZWN0aXZlXCIsIFwidHBlcnNcIl07XG5leHBvcnQgZGVmYXVsdCB7XG4gIGluaXQ6IGluaXQsXG4gIGZvcndhcmQ6IGZvcndhcmQsXG4gIGludmVyc2U6IGludmVyc2UsXG4gIG5hbWVzOiBuYW1lc1xufTtcbiIsImltcG9ydCB0bWVyYyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy90bWVyYyc7XG5pbXBvcnQgZXRtZXJjIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2V0bWVyYyc7XG5pbXBvcnQgdXRtIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3V0bSc7XG5pbXBvcnQgc3RlcmVhIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3N0ZXJlYSc7XG5pbXBvcnQgc3RlcmUgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvc3RlcmUnO1xuaW1wb3J0IHNvbWVyYyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9zb21lcmMnO1xuaW1wb3J0IG9tZXJjIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL29tZXJjJztcbmltcG9ydCBsY2MgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvbGNjJztcbmltcG9ydCBrcm92YWsgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMva3JvdmFrJztcbmltcG9ydCBjYXNzIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2Nhc3MnO1xuaW1wb3J0IGxhZWEgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvbGFlYSc7XG5pbXBvcnQgYWVhIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL2FlYSc7XG5pbXBvcnQgZ25vbSBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9nbm9tJztcbmltcG9ydCBjZWEgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvY2VhJztcbmltcG9ydCBlcWMgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvZXFjJztcbmltcG9ydCBwb2x5IGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3BvbHknO1xuaW1wb3J0IG56bWcgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvbnptZyc7XG5pbXBvcnQgbWlsbCBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9taWxsJztcbmltcG9ydCBzaW51IGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3NpbnUnO1xuaW1wb3J0IG1vbGwgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvbW9sbCc7XG5pbXBvcnQgZXFkYyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9lcWRjJztcbmltcG9ydCB2YW5kZyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy92YW5kZyc7XG5pbXBvcnQgYWVxZCBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9hZXFkJztcbmltcG9ydCBvcnRobyBmcm9tICcuL2xpYi9wcm9qZWN0aW9ucy9vcnRobyc7XG5pbXBvcnQgcXNjIGZyb20gJy4vbGliL3Byb2plY3Rpb25zL3FzYyc7XG5pbXBvcnQgcm9iaW4gZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvcm9iaW4nO1xuaW1wb3J0IGdlb2NlbnQgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvZ2VvY2VudCc7XG5pbXBvcnQgdHBlcnMgZnJvbSAnLi9saWIvcHJvamVjdGlvbnMvdHBlcnMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocHJvajQpe1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZCh0bWVyYyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGV0bWVyYyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHV0bSk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHN0ZXJlYSk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHN0ZXJlKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQoc29tZXJjKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQob21lcmMpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChsY2MpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChrcm92YWspO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChjYXNzKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQobGFlYSk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGFlYSk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGdub20pO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChjZWEpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChlcWMpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChwb2x5KTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQobnptZyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKG1pbGwpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChzaW51KTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQobW9sbCk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGVxZGMpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZCh2YW5kZyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKGFlcWQpO1xuICBwcm9qNC5Qcm9qLnByb2plY3Rpb25zLmFkZChvcnRobyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHFzYyk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHJvYmluKTtcbiAgcHJvajQuUHJvai5wcm9qZWN0aW9ucy5hZGQoZ2VvY2VudCk7XG4gIHByb2o0LlByb2oucHJvamVjdGlvbnMuYWRkKHRwZXJzKTtcbn0iLCJpbXBvcnQgcHJvajQgZnJvbSAnLi9jb3JlJztcbmltcG9ydCBQcm9qIGZyb20gXCIuL1Byb2pcIjtcbmltcG9ydCBQb2ludCBmcm9tIFwiLi9Qb2ludFwiO1xuaW1wb3J0IGNvbW1vbiBmcm9tIFwiLi9jb21tb24vdG9Qb2ludFwiO1xuaW1wb3J0IGRlZnMgZnJvbSBcIi4vZGVmc1wiO1xuaW1wb3J0IHRyYW5zZm9ybSBmcm9tIFwiLi90cmFuc2Zvcm1cIjtcbmltcG9ydCBtZ3JzIGZyb20gXCJtZ3JzXCI7XG5pbXBvcnQgaW5jbHVkZWRQcm9qZWN0aW9ucyBmcm9tIFwiLi4vcHJvanNcIjtcblxucHJvajQuZGVmYXVsdERhdHVtID0gJ1dHUzg0JzsgLy9kZWZhdWx0IGRhdHVtXG5wcm9qNC5Qcm9qID0gUHJvajtcbnByb2o0LldHUzg0ID0gbmV3IHByb2o0LlByb2ooJ1dHUzg0Jyk7XG5wcm9qNC5Qb2ludCA9IFBvaW50O1xucHJvajQudG9Qb2ludCA9IGNvbW1vbjtcbnByb2o0LmRlZnMgPSBkZWZzO1xucHJvajQudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xucHJvajQubWdycyA9IG1ncnM7XG5wcm9qNC52ZXJzaW9uID0gJ19fVkVSU0lPTl9fJztcbmluY2x1ZGVkUHJvamVjdGlvbnMocHJvajQpO1xuZXhwb3J0IGRlZmF1bHQgcHJvajQ7XG4iLCJpbXBvcnQgcHJvajQgZnJvbSAncHJvajQnO1xuLy8gRGV2ZWxvcG1lbnQgdG9vbHNcbi8vIE1hcCBhcHBsaWNhdGlvbiB3aXRoIGNvb3JkaW5hdGVzIHByb2plY3Rpb25cbi8vIGh0dHBzOi8vZG9taW5vYzkyNS1wYWdlcy5hcHBzcG90LmNvbS9tYXBwbGV0cy9jc19lY2VmLmh0bWxcbi8vIFRoZSBXb3JsZCBjb29yZGluYXRlcyBjb252ZXJ0ZXJcbi8vIGh0dHBzOi8vdHdjYy5mci8jXG5leHBvcnQgY29uc3QgUHJvamVjdGlvbnMgPSBbXG4gICAge1xuICAgICAgICB0aXRsZTogXCJSR0Y5MyAoTGFtYmVydC05MylcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy9yZ2Y5My1sYW1iZXJ0LTkzL1wiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6MjE1NFwiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQ5ICtsYXRfMj00NCArbGF0XzA9NDYuNSArbG9uXzA9MyAreF8wPTcwMDAwMCAreV8wPTY2MDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJSR0Y5MyAoQ0M1MClcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjM5NTBcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy8zOTUwL1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQ5LjI1ICtsYXRfMj01MC43NSArbGF0XzA9NTAgK2xvbl8wPTMgK3hfMD0xNzAwMDAwICt5XzA9OTIwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlJHRjkzIChDQzQ5KVwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6Mzk0OVwiLFxuICAgICAgICB1cmw6IFwiaHR0cDovL3NwYXRpYWxyZWZlcmVuY2Uub3JnL3JlZi9lcHNnLzM5NDkvXCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxjYyArbGF0XzE9NDguMjUgK2xhdF8yPTQ5Ljc1ICtsYXRfMD00OSArbG9uXzA9MyAreF8wPTE3MDAwMDAgK3lfMD04MjAwMDAwICtlbGxwcz1HUlM4MCArdG93Z3M4ND0wLDAsMCwwLDAsMCwwICt1bml0cz1tICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiUkdGOTMgKENDNDgpXCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzozOTQ4XCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvMzk0OC9cIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bGNjICtsYXRfMT00Ny4yNSArbGF0XzI9NDguNzUgK2xhdF8wPTQ4ICtsb25fMD0zICt4XzA9MTcwMDAwMCAreV8wPTcyMDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJSR0Y5MyAoQ0M0NylcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjM5NDdcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy8zOTQ3L1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQ2LjI1ICtsYXRfMj00Ny43NSArbGF0XzA9NDcgK2xvbl8wPTMgK3hfMD0xNzAwMDAwICt5XzA9NjIwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlJHRjkzIChDQzQ2KVwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6Mzk0NlwiLFxuICAgICAgICB1cmw6IFwiaHR0cDovL3NwYXRpYWxyZWZlcmVuY2Uub3JnL3JlZi9lcHNnLzM5NDYvXCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxjYyArbGF0XzE9NDUuMjUgK2xhdF8yPTQ2Ljc1ICtsYXRfMD00NiArbG9uXzA9MyAreF8wPTE3MDAwMDAgK3lfMD01MjAwMDAwICtlbGxwcz1HUlM4MCArdG93Z3M4ND0wLDAsMCwwLDAsMCwwICt1bml0cz1tICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiUkdGOTMgKENDNDUpXCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzozOTQ1XCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvMzk0NS9cIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bGNjICtsYXRfMT00NC4yNSArbGF0XzI9NDUuNzUgK2xhdF8wPTQ1ICtsb25fMD0zICt4XzA9MTcwMDAwMCAreV8wPTQyMDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJSR0Y5MyAoQ0M0NClcIixcbiAgICAgICAgY29kZTogXCJFUFNHOjM5NDRcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy8zOTQ0L1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQzLjI1ICtsYXRfMj00NC43NSArbGF0XzA9NDQgK2xvbl8wPTMgK3hfMD0xNzAwMDAwICt5XzA9MzIwMDAwMCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIlJHRjkzIChDQzQzKVwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6Mzk0M1wiLFxuICAgICAgICB1cmw6IFwiaHR0cDovL3NwYXRpYWxyZWZlcmVuY2Uub3JnL3JlZi9lcHNnLzM5NDMvXCIsXG4gICAgICAgIHByb2o0OiBcIitwcm9qPWxjYyArbGF0XzE9NDIuMjUgK2xhdF8yPTQzLjc1ICtsYXRfMD00MyArbG9uXzA9MyAreF8wPTE3MDAwMDAgK3lfMD0yMjAwMDAwICtlbGxwcz1HUlM4MCArdG93Z3M4ND0wLDAsMCwwLDAsMCwwICt1bml0cz1tICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiUkdGOTMgKENDNDIpXCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzozOTQyXCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvMzk0Mi9cIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bGNjICtsYXRfMT00MS4yNSArbGF0XzI9NDIuNzUgK2xhdF8wPTQyICtsb25fMD0zICt4XzA9MTcwMDAwMCAreV8wPTEyMDAwMDAgK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJOVEYgKExhbWJlcnQgSUkpXCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzoyNzU3MlwiLFxuICAgICAgICB1cmw6IFwiaHR0cDovL3NwYXRpYWxyZWZlcmVuY2Uub3JnL3JlZi9lcHNnLzI3NTcyL1wiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sY2MgK2xhdF8xPTQ2LjggK2xhdF8wPTQ2LjggK2xvbl8wPTAgK2tfMD0wLjk5OTg3NzQyICt4XzA9NjAwMDAwICt5XzA9MjIwMDAwMCArYT02Mzc4MjQ5LjIgK2I9NjM1NjUxNSArdG93Z3M4ND0tMTY4LC02MCwzMjAsMCwwLDAsMCArcG09cGFyaXMgK3VuaXRzPW0gK25vX2RlZnNcIlxuICAgIH0sXG4gICAge1xuICAgICAgICB0aXRsZTogXCJOVEYgKExhbWJlcnQgSUlJKVwiLFxuICAgICAgICBjb2RlOiBcIkVQU0c6Mjc1NzNcIixcbiAgICAgICAgdXJsOiBcImh0dHA6Ly9zcGF0aWFscmVmZXJlbmNlLm9yZy9yZWYvZXBzZy8yNzU3My9cIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bGNjICtsYXRfMT00NC4xMDAwMDAwMDAwMDAwMSArbGF0XzA9NDQuMTAwMDAwMDAwMDAwMDEgK2xvbl8wPTAgK2tfMD0wLjk5OTg3NzQ5OSAreF8wPTYwMDAwMCAreV8wPTMyMDAwMDAgK2E9NjM3ODI0OS4yICtiPTYzNTY1MTUgK3Rvd2dzODQ9LTE2OCwtNjAsMzIwLDAsMCwwLDAgK3BtPXBhcmlzICt1bml0cz1tICtub19kZWZzXCJcbiAgICB9LFxuICAgIHtcbiAgICAgICAgdGl0bGU6IFwiTlRGXCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzo0Mjc1XCIsXG4gICAgICAgIHVybDogXCJodHRwOi8vc3BhdGlhbHJlZmVyZW5jZS5vcmcvcmVmL2Vwc2cvNDI3NS9cIixcbiAgICAgICAgcHJvajQ6IFwiK3Byb2o9bG9uZ2xhdCArYT02Mzc4MjQ5LjIgK2I9NjM1NjUxNSArdG93Z3M4ND0tMTY4LC02MCwzMjAsMCwwLDAsMCArbm9fZGVmc1wiXG4gICAgfSxcbiAgICB7XG4gICAgICAgIHRpdGxlOiBcIldHUzg0XCIsXG4gICAgICAgIGNvZGU6IFwiRVBTRzo0MzI2XCIsXG4gICAgICAgIHVybDogXCJodHRwczovL2Vwc2cuaW8vNDMyNlwiLFxuICAgICAgICBwcm9qNDogXCIrcHJvaj1sb25nbGF0ICtkYXR1bT1XR1M4NCArbm9fZGVmc1wiXG4gICAgfVxuXTtcbmV4cG9ydCBjb25zdCBQcm9qNERlZnMgPSBQcm9qZWN0aW9ucy5tYXAocCA9PiBbcC5jb2RlLCBwLnByb2o0XSk7XG5wcm9qNC5kZWZzKFByb2o0RGVmcyk7XG5leHBvcnQgZnVuY3Rpb24gcHJvamVjdChmcm9tLCB0bywgeSwgeCkge1xuICAgIGNvbnNvbGUubG9nKGBQcm9qZWN0aW5nIGNvb3JkaW5hdGVzICcke3h9LCR7eX0nIGZyb20gJyR7ZnJvbX0nIHRvICcke3RvfSdgKTtcbiAgICBjb25zdCBjb29yZHMgPSBwcm9qNChmcm9tLCB0bywgW3gsIHldKTtcbiAgICByZXR1cm4geyB4OiBjb29yZHNbMF0sIHk6IGNvb3Jkc1sxXSB9O1xufVxuO1xuLy8gVm9pciBodHRwczovL2dlb2Rlc2llLmlnbi5mci9jb250ZW51L2ZpY2hpZXJzL2RvY3VtZW50YXRpb24vcGVkYWdvZ2lxdWVzL1RyYW5zZm9ybWF0aW9uc0Nvb3Jkb25uZWVzR2VvZGVzaXF1ZXMucGRmXG5leHBvcnQgY29uc3QgV0dTODRFbGxpcHNvaWQgPSBjcmVhdGVFbGxpcHNvaWQoNjM3ODEzNywgMSAvIDI5OC4yNTcyMjM1NjMpO1xuZnVuY3Rpb24gY3JlYXRlRWxsaXBzb2lkKGEsIGYpIHtcbiAgICBjb25zdCBiID0gYSAqICgxIC0gZik7XG4gICAgY29uc3QgYXNxciA9IGEgKiBhO1xuICAgIGNvbnN0IGJzcXIgPSBiICogYjtcbiAgICBjb25zdCBlID0gTWF0aC5zcXJ0KChhc3FyIC0gYnNxcikgLyBhc3FyKTtcbiAgICBjb25zdCBlcHJpbWUgPSBNYXRoLnNxcnQoKGFzcXIgLSBic3FyKSAvIGJzcXIpO1xuICAgIHJldHVybiB7IGEsIGYsIGIsIGUsIGJzcXIsIGFzcXIsIGVwcmltZSB9O1xufVxuZnVuY3Rpb24gZGVncmVlcyhhbmdsZSkge1xuICAgIHJldHVybiBhbmdsZSAqICgxODAgLyBNYXRoLlBJKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBYWVp0b0xMQSh4LCB5LCB6LCBlbGxpcHNvaWQpIHtcbiAgICBjb25zdCBwID0gTWF0aC5zcXJ0KHggKiB4ICsgeSAqIHkpO1xuICAgIGNvbnN0IHRoZXRhID0gTWF0aC5hdGFuKCh6ICogZWxsaXBzb2lkLmEpIC8gKHAgKiBlbGxpcHNvaWQuYikpO1xuICAgIGNvbnN0IHNpbnRoZXRhID0gTWF0aC5zaW4odGhldGEpO1xuICAgIGNvbnN0IGNvc3RoZXRhID0gTWF0aC5jb3ModGhldGEpO1xuICAgIGNvbnN0IG51bSA9IHogKyBlbGxpcHNvaWQuZXByaW1lICogZWxsaXBzb2lkLmVwcmltZSAqIGVsbGlwc29pZC5iICogc2ludGhldGEgKiBzaW50aGV0YSAqIHNpbnRoZXRhO1xuICAgIGNvbnN0IGRlbm9tID0gcCAtIGVsbGlwc29pZC5lICogZWxsaXBzb2lkLmUgKiBlbGxpcHNvaWQuYSAqIGNvc3RoZXRhICogY29zdGhldGEgKiBjb3N0aGV0YTtcbiAgICBjb25zdCBsYXQgPSBNYXRoLmF0YW4obnVtIC8gZGVub20pO1xuICAgIGxldCBsb24gPSBNYXRoLmF0YW4oeSAvIHgpO1xuICAgIGNvbnN0IG4gPSBnZXROKGxhdCwgZWxsaXBzb2lkKTtcbiAgICBjb25zdCBhbHQgPSAocCAvIE1hdGguY29zKGxhdCkpIC0gbjtcbiAgICBpZiAoeCA8IDAgJiYgeSA8IDApIHtcbiAgICAgICAgbG9uID0gbG9uIC0gTWF0aC5QSTtcbiAgICB9XG4gICAgaWYgKHggPCAwICYmIHkgPiAwKSB7XG4gICAgICAgIGxvbiA9IGxvbiArIE1hdGguUEk7XG4gICAgfVxuICAgIHJldHVybiB7IGxhdGl0dWRlOiBkZWdyZWVzKGxhdCksIGxvbmdpdHVkZTogZGVncmVlcyhsb24pLCBhbHRpdHVkZTogYWx0IH07XG59XG5mdW5jdGlvbiBnZXROKGxhdCwgZWxsaXBzb2lkKSB7XG4gICAgY29uc3Qgc2lubGF0ID0gTWF0aC5zaW4obGF0KTtcbiAgICBjb25zdCBkZW5vbSA9IE1hdGguc3FydCgxIC0gZWxsaXBzb2lkLmUgKiBlbGxpcHNvaWQuZSAqIHNpbmxhdCAqIHNpbmxhdCk7XG4gICAgY29uc3QgbiA9IGVsbGlwc29pZC5hIC8gZGVub207XG4gICAgcmV0dXJuIG47XG59XG5leHBvcnQgZnVuY3Rpb24gTExBdG9YWVoobGF0aXR1ZGUsIGxvbmdpdHVkZSwgYWx0aXR1ZGUsIGVsbGlwc29pZCkge1xuICAgIGNvbnN0IGNvc0xhdCA9IE1hdGguY29zKGxhdGl0dWRlICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgICBjb25zdCBzaW5MYXQgPSBNYXRoLnNpbihsYXRpdHVkZSAqIE1hdGguUEkgLyAxODAuMCk7XG4gICAgY29uc3QgY29zTG9uID0gTWF0aC5jb3MobG9uZ2l0dWRlICogTWF0aC5QSSAvIDE4MC4wKTtcbiAgICBjb25zdCBzaW5Mb24gPSBNYXRoLnNpbihsb25naXR1ZGUgKiBNYXRoLlBJIC8gMTgwLjApO1xuICAgIGNvbnN0IHJhZCA9IGVsbGlwc29pZC5hO1xuICAgIGNvbnN0IGYgPSBlbGxpcHNvaWQuZjtcbiAgICBjb25zdCBDID0gMS4wIC8gTWF0aC5zcXJ0KGNvc0xhdCAqIGNvc0xhdCArICgxIC0gZikgKiAoMSAtIGYpICogc2luTGF0ICogc2luTGF0KTtcbiAgICBjb25zdCBTID0gKDEuMCAtIGYpICogKDEuMCAtIGYpICogQztcbiAgICBjb25zdCBoID0gYWx0aXR1ZGU7XG4gICAgY29uc3QgeCA9IChyYWQgKiBDICsgaCkgKiBjb3NMYXQgKiBjb3NMb247XG4gICAgY29uc3QgeSA9IChyYWQgKiBDICsgaCkgKiBjb3NMYXQgKiBzaW5Mb247XG4gICAgY29uc3QgeiA9IChyYWQgKiBTICsgaCkgKiBzaW5MYXQ7XG4gICAgcmV0dXJuIHsgeCwgeSwgeiB9O1xufVxuIiwiaW1wb3J0IHJhbmRvbUNvbG9yIGZyb20gJ3JhbmRvbWNvbG9yJztcbmltcG9ydCB7IHBvbHlnb24gfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wKG9iaiwgLi4ucHJvcHMpIHtcbiAgICBpZiAocHJvcHMubGVuZ3RoID09PSAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgbXVzdCBhdCBsZWFzdCBwcm92aWRlIG9uZSBwcm9wZXJ0eS5cIik7XG4gICAgY29uc3QgcHJvcCA9IHByb3BzLnNoaWZ0KCk7XG4gICAgY29uc3QgZXhpc3RzID0gb2JqLmhhc093blByb3BlcnR5KHByb3ApO1xuICAgIGlmIChwcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0cyA/IG9ialtwcm9wXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKG9ialtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBnZXRQcm9wKG9ialtwcm9wXSwgLi4ucHJvcHMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU2VxdWVuY2Uoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHI/XFxuP1xcdD8vZywgJycpLnNwbGl0KCcgJyk7XG59XG5jb25zdCBjb2xvcnMgPSB7fTtcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb2xvcihrZXksIG9wdHMpIHtcbiAgICBpZiAoa2V5IGluIGNvbG9ycykge1xuICAgICAgICByZXR1cm4gY29sb3JzW2tleV07XG4gICAgfVxuICAgIGNvbnN0IGNvbG9yID0gcmFuZG9tQ29sb3Iob3B0cyk7XG4gICAgY29sb3JzW2tleV0gPSBjb2xvcjtcbiAgICByZXR1cm4gY29sb3I7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9SYWRpYW5zKGFuZ2xlSW5EZWdyZWVzKSB7XG4gICAgcmV0dXJuIGFuZ2xlSW5EZWdyZWVzICogTWF0aC5QSSAvIDE4MDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b0RlZ3JlZXMoYW5nbGVJblJhZGlhbnMpIHtcbiAgICByZXR1cm4gYW5nbGVJblJhZGlhbnMgKiAxODAgLyBNYXRoLlBJO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNpcmNsZVRvUG9seWdvbihjZW50ZXIsIHJhZGl1cywgbnVtYmVyT2ZTZWdtZW50cywgcHJvcGVydGllcykge1xuICAgIGNvbnN0IG4gPSBudW1iZXJPZlNlZ21lbnRzID8gbnVtYmVyT2ZTZWdtZW50cyA6IDMyO1xuICAgIGNvbnN0IGZsYXRDb29yZGluYXRlcyA9IFtdO1xuICAgIGNvbnN0IGNvb3JkaW5hdGVzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgZmxhdENvb3JkaW5hdGVzLnB1c2goLi4ub2Zmc2V0KGNlbnRlciwgcmFkaXVzLCAyICogTWF0aC5QSSAqIGkgLyBuKSk7XG4gICAgfVxuICAgIGZsYXRDb29yZGluYXRlcy5wdXNoKGZsYXRDb29yZGluYXRlc1swXSwgZmxhdENvb3JkaW5hdGVzWzFdKTtcbiAgICBmb3IgKGxldCBpID0gMCwgaiA9IDA7IGogPCBmbGF0Q29vcmRpbmF0ZXMubGVuZ3RoOyBqICs9IDIpIHtcbiAgICAgICAgY29vcmRpbmF0ZXNbaSsrXSA9IGZsYXRDb29yZGluYXRlcy5zbGljZShqLCBqICsgMik7XG4gICAgfVxuICAgIHJldHVybiBwb2x5Z29uKFtjb29yZGluYXRlcy5yZXZlcnNlKCldLCBwcm9wZXJ0aWVzKTtcbn1cbjtcbmV4cG9ydCBmdW5jdGlvbiBvZmZzZXQoYzEsIGRpc3RhbmNlLCBiZWFyaW5nKSB7XG4gICAgY29uc3QgbGF0MSA9IHRvUmFkaWFucyhjMVsxXSk7XG4gICAgY29uc3QgbG9uMSA9IHRvUmFkaWFucyhjMVswXSk7XG4gICAgY29uc3QgZEJ5UiA9IGRpc3RhbmNlIC8gNjM3ODEzNzsgLy8gZGlzdGFuY2UgZGl2aWRlZCBieSA2Mzc4MTM3IChyYWRpdXMgb2YgdGhlIGVhcnRoKSB3Z3M4NFxuICAgIGNvbnN0IGxhdCA9IE1hdGguYXNpbihNYXRoLnNpbihsYXQxKSAqIE1hdGguY29zKGRCeVIpICtcbiAgICAgICAgTWF0aC5jb3MobGF0MSkgKiBNYXRoLnNpbihkQnlSKSAqIE1hdGguY29zKGJlYXJpbmcpKTtcbiAgICBjb25zdCBsb24gPSBsb24xICsgTWF0aC5hdGFuMihNYXRoLnNpbihiZWFyaW5nKSAqIE1hdGguc2luKGRCeVIpICogTWF0aC5jb3MobGF0MSksIE1hdGguY29zKGRCeVIpIC0gTWF0aC5zaW4obGF0MSkgKiBNYXRoLnNpbihsYXQpKTtcbiAgICByZXR1cm4gW3RvRGVncmVlcyhsb24pLCB0b0RlZ3JlZXMobGF0KV07XG59XG4iLCJpbXBvcnQgeyBmZWF0dXJlLCBpc09iamVjdCwgbGluZVN0cmluZywgcG9pbnQgfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgY29vcmRFYWNoXG4gKlxuICogQGNhbGxiYWNrIGNvb3JkRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGN1cnJlbnRDb29yZCBUaGUgY3VycmVudCBjb29yZGluYXRlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBjb29yZEluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBjb29yZGluYXRlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnZW9tZXRyeUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBHZW9tZXRyeSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgY29vcmRpbmF0ZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2goKVxuICpcbiAqIEBuYW1lIGNvb3JkRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KVxuICogQHBhcmFtIHtib29sZWFufSBbZXhjbHVkZVdyYXBDb29yZD1mYWxzZV0gd2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmluYWwgY29vcmRpbmF0ZSBvZiBMaW5lYXJSaW5ncyB0aGF0IHdyYXBzIHRoZSByaW5nIGluIGl0cyBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgdHVyZi5wb2ludChbMjYsIDM3XSwge1wiZm9vXCI6IFwiYmFyXCJ9KSxcbiAqICAgdHVyZi5wb2ludChbMzYsIDUzXSwge1wiaGVsbG9cIjogXCJ3b3JsZFwifSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuY29vcmRFYWNoKGZlYXR1cmVzLCBmdW5jdGlvbiAoY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRDb29yZFxuICogICAvLz1jb29yZEluZGV4XG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gY29vcmRFYWNoKGdlb2pzb24sIGNhbGxiYWNrLCBleGNsdWRlV3JhcENvb3JkKSB7XG4gICAgLy8gSGFuZGxlcyBudWxsIEdlb21ldHJ5IC0tIFNraXBzIHRoaXMgR2VvSlNPTlxuICAgIGlmIChnZW9qc29uID09PSBudWxsKSByZXR1cm47XG4gICAgdmFyIGosIGssIGwsIGdlb21ldHJ5LCBzdG9wRywgY29vcmRzLFxuICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbixcbiAgICAgICAgd3JhcFNocmluayA9IDAsXG4gICAgICAgIGNvb3JkSW5kZXggPSAwLFxuICAgICAgICBpc0dlb21ldHJ5Q29sbGVjdGlvbixcbiAgICAgICAgdHlwZSA9IGdlb2pzb24udHlwZSxcbiAgICAgICAgaXNGZWF0dXJlQ29sbGVjdGlvbiA9IHR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicsXG4gICAgICAgIGlzRmVhdHVyZSA9IHR5cGUgPT09ICdGZWF0dXJlJyxcbiAgICAgICAgc3RvcCA9IGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aCA6IDE7XG5cbiAgICAvLyBUaGlzIGxvZ2ljIG1heSBsb29rIGEgbGl0dGxlIHdlaXJkLiBUaGUgcmVhc29uIHdoeSBpdCBpcyB0aGF0IHdheVxuICAgIC8vIGlzIGJlY2F1c2UgaXQncyB0cnlpbmcgdG8gYmUgZmFzdC4gR2VvSlNPTiBzdXBwb3J0cyBtdWx0aXBsZSBraW5kc1xuICAgIC8vIG9mIG9iamVjdHMgYXQgaXRzIHJvb3Q6IEZlYXR1cmVDb2xsZWN0aW9uLCBGZWF0dXJlcywgR2VvbWV0cmllcy5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgaGFuZGxpbmcgYWxsIG9mIHRoZW0sIGFuZCB0aGF0XG4gICAgLy8gbWVhbnMgdGhhdCBzb21lIG9mIHRoZSBgZm9yYCBsb29wcyB5b3Ugc2VlIGJlbG93IGFjdHVhbGx5IGp1c3QgZG9uJ3QgYXBwbHlcbiAgICAvLyB0byBjZXJ0YWluIGlucHV0cy4gRm9yIGluc3RhbmNlLCBpZiB5b3UgZ2l2ZSB0aGlzIGp1c3QgYVxuICAgIC8vIFBvaW50IGdlb21ldHJ5LCB0aGVuIGJvdGggbG9vcHMgYXJlIHNob3J0LWNpcmN1aXRlZCBhbmQgYWxsIHdlIGRvXG4gICAgLy8gaXMgZ3JhZHVhbGx5IHJlbmFtZSB0aGUgaW5wdXQgdW50aWwgaXQncyBjYWxsZWQgJ2dlb21ldHJ5Jy5cbiAgICAvL1xuICAgIC8vIFRoaXMgYWxzbyBhaW1zIHRvIGFsbG9jYXRlIGFzIGZldyByZXNvdXJjZXMgYXMgcG9zc2libGU6IGp1c3QgYVxuICAgIC8vIGZldyBudW1iZXJzIGFuZCBib29sZWFucywgcmF0aGVyIHRoYW4gYW55IHRlbXBvcmFyeSBhcnJheXMgYXMgd291bGRcbiAgICAvLyBiZSByZXF1aXJlZCB3aXRoIHRoZSBub3JtYWxpemF0aW9uIGFwcHJvYWNoLlxuICAgIGZvciAodmFyIGZlYXR1cmVJbmRleCA9IDA7IGZlYXR1cmVJbmRleCA8IHN0b3A7IGZlYXR1cmVJbmRleCsrKSB7XG4gICAgICAgIGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uID0gKGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzW2ZlYXR1cmVJbmRleF0uZ2VvbWV0cnkgOlxuICAgICAgICAgICAgKGlzRmVhdHVyZSA/IGdlb2pzb24uZ2VvbWV0cnkgOiBnZW9qc29uKSk7XG4gICAgICAgIGlzR2VvbWV0cnlDb2xsZWN0aW9uID0gKGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uKSA/IGdlb21ldHJ5TWF5YmVDb2xsZWN0aW9uLnR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nIDogZmFsc2U7XG4gICAgICAgIHN0b3BHID0gaXNHZW9tZXRyeUNvbGxlY3Rpb24gPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi5nZW9tZXRyaWVzLmxlbmd0aCA6IDE7XG5cbiAgICAgICAgZm9yICh2YXIgZ2VvbUluZGV4ID0gMDsgZ2VvbUluZGV4IDwgc3RvcEc7IGdlb21JbmRleCsrKSB7XG4gICAgICAgICAgICB2YXIgbXVsdGlGZWF0dXJlSW5kZXggPSAwO1xuICAgICAgICAgICAgdmFyIGdlb21ldHJ5SW5kZXggPSAwO1xuICAgICAgICAgICAgZ2VvbWV0cnkgPSBpc0dlb21ldHJ5Q29sbGVjdGlvbiA/XG4gICAgICAgICAgICAgICAgZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24uZ2VvbWV0cmllc1tnZW9tSW5kZXhdIDogZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb247XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZXMgbnVsbCBHZW9tZXRyeSAtLSBTa2lwcyB0aGlzIGdlb21ldHJ5XG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29vcmRzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgICAgICAgICB2YXIgZ2VvbVR5cGUgPSBnZW9tZXRyeS50eXBlO1xuXG4gICAgICAgICAgICB3cmFwU2hyaW5rID0gKGV4Y2x1ZGVXcmFwQ29vcmQgJiYgKGdlb21UeXBlID09PSAnUG9seWdvbicgfHwgZ2VvbVR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSkgPyAxIDogMDtcblxuICAgICAgICAgICAgc3dpdGNoIChnZW9tVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBudWxsOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnUG9pbnQnOlxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhjb29yZHMsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICAgICAgICBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgICAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29vcmRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjayhjb29yZHNbal0sIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb29yZEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW9tVHlwZSA9PT0gJ011bHRpUG9pbnQnKSBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09ICdMaW5lU3RyaW5nJykgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY29vcmRzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjb29yZHNbal0ubGVuZ3RoIC0gd3JhcFNocmluazsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soY29vcmRzW2pdW2tdLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09ICdNdWx0aUxpbmVTdHJpbmcnKSBtdWx0aUZlYXR1cmVJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09ICdQb2x5Z29uJykgZ2VvbWV0cnlJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09ICdQb2x5Z29uJykgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvb3Jkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2VvbVR5cGUgPT09ICdNdWx0aVBvbHlnb24nKSBnZW9tZXRyeUluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGNvb3Jkc1tqXS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsID0gMDsgbCA8IGNvb3Jkc1tqXVtrXS5sZW5ndGggLSB3cmFwU2hyaW5rOyBsKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soY29vcmRzW2pdW2tdW2xdLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW9tZXRyeUluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbXVsdGlGZWF0dXJlSW5kZXgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdHZW9tZXRyeUNvbGxlY3Rpb24nOlxuICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBnZW9tZXRyeS5nZW9tZXRyaWVzLmxlbmd0aDsgaisrKVxuICAgICAgICAgICAgICAgICAgICBpZiAoY29vcmRFYWNoKGdlb21ldHJ5Lmdlb21ldHJpZXNbal0sIGNhbGxiYWNrLCBleGNsdWRlV3JhcENvb3JkKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIEdlb21ldHJ5IFR5cGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgY29vcmRSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBjb29yZFJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjdXJyZW50Q29vcmQgVGhlIGN1cnJlbnQgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gY29vcmRJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgY29vcmRpbmF0ZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBTdGFydHMgYXQgaW5kZXggMCwgaWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkLCBhbmQgYXQgaW5kZXggMSBvdGhlcndpc2UuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIGNvb3JkaW5hdGVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKVxuICpcbiAqIEBuYW1lIGNvb3JkUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEdlb21ldHJ5fEZlYXR1cmV9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHBhcmFtIHtib29sZWFufSBbZXhjbHVkZVdyYXBDb29yZD1mYWxzZV0gd2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgZmluYWwgY29vcmRpbmF0ZSBvZiBMaW5lYXJSaW5ncyB0aGF0IHdyYXBzIHRoZSByaW5nIGluIGl0cyBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtcImZvb1wiOiBcImJhclwifSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtcImhlbGxvXCI6IFwid29ybGRcIn0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmNvb3JkUmVkdWNlKGZlYXR1cmVzLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSwgY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudENvb3JkXG4gKiAgIC8vPWNvb3JkSW5kZXhcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIC8vPW11bHRpRmVhdHVyZUluZGV4XG4gKiAgIC8vPWdlb21ldHJ5SW5kZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRDb29yZDtcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBjb29yZFJlZHVjZShnZW9qc29uLCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlLCBleGNsdWRlV3JhcENvb3JkKSB7XG4gICAgdmFyIHByZXZpb3VzVmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgY29vcmRFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50Q29vcmQsIGNvb3JkSW5kZXgsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpIHtcbiAgICAgICAgaWYgKGNvb3JkSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50Q29vcmQ7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRDb29yZCwgY29vcmRJbmRleCwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCk7XG4gICAgfSwgZXhjbHVkZVdyYXBDb29yZCk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHByb3BFYWNoXG4gKlxuICogQGNhbGxiYWNrIHByb3BFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7T2JqZWN0fSBjdXJyZW50UHJvcGVydGllcyBUaGUgY3VycmVudCBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIHByb3BlcnRpZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2goKVxuICpcbiAqIEBuYW1lIHByb3BFYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5wcm9wRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRQcm9wZXJ0aWVzLCBmZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89Y3VycmVudFByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gcHJvcEVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICB2YXIgaTtcbiAgICBzd2l0Y2ggKGdlb2pzb24udHlwZSkge1xuICAgIGNhc2UgJ0ZlYXR1cmVDb2xsZWN0aW9uJzpcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGdlb2pzb24uZmVhdHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhnZW9qc29uLmZlYXR1cmVzW2ldLnByb3BlcnRpZXMsIGkpID09PSBmYWxzZSkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRmVhdHVyZSc6XG4gICAgICAgIGNhbGxiYWNrKGdlb2pzb24ucHJvcGVydGllcywgMCk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbn1cblxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBwcm9wUmVkdWNlXG4gKlxuICogVGhlIGZpcnN0IHRpbWUgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCwgdGhlIHZhbHVlcyBwcm92aWRlZCBhcyBhcmd1bWVudHMgZGVwZW5kXG4gKiBvbiB3aGV0aGVyIHRoZSByZWR1Y2UgbWV0aG9kIGhhcyBhbiBpbml0aWFsVmFsdWUgYXJndW1lbnQuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIHByb3ZpZGVkIHRvIHRoZSByZWR1Y2UgbWV0aG9kOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgaW5pdGlhbFZhbHVlLlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogSWYgYW4gaW5pdGlhbFZhbHVlIGlzIG5vdCBwcm92aWRlZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBAY2FsbGJhY2sgcHJvcFJlZHVjZUNhbGxiYWNrXG4gKiBAcGFyYW0geyp9IHByZXZpb3VzVmFsdWUgVGhlIGFjY3VtdWxhdGVkIHZhbHVlIHByZXZpb3VzbHkgcmV0dXJuZWQgaW4gdGhlIGxhc3QgaW52b2NhdGlvblxuICogb2YgdGhlIGNhbGxiYWNrLCBvciBpbml0aWFsVmFsdWUsIGlmIHN1cHBsaWVkLlxuICogQHBhcmFtIHsqfSBjdXJyZW50UHJvcGVydGllcyBUaGUgY3VycmVudCBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIHByb3BlcnRpZXMgaW4gYW55IEdlb0pTT04gb2JqZWN0IGludG8gYSBzaW5nbGUgdmFsdWUsXG4gKiBzaW1pbGFyIHRvIGhvdyBBcnJheS5yZWR1Y2Ugd29ya3MuIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSB3ZSBsYXppbHkgcnVuXG4gKiB0aGUgcmVkdWN0aW9uLCBzbyBhbiBhcnJheSBvZiBhbGwgcHJvcGVydGllcyBpcyB1bm5lY2Vzc2FyeS5cbiAqXG4gKiBAbmFtZSBwcm9wUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KVxuICogQHBhcmFtIHsqfSBbaW5pdGlhbFZhbHVlXSBWYWx1ZSB0byB1c2UgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmaXJzdCBjYWxsIG9mIHRoZSBjYWxsYmFjay5cbiAqIEByZXR1cm5zIHsqfSBUaGUgdmFsdWUgdGhhdCByZXN1bHRzIGZyb20gdGhlIHJlZHVjdGlvbi5cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLnByb3BSZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudFByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50UHJvcGVydGllc1xuICogfSk7XG4gKi9cbmZ1bmN0aW9uIHByb3BSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIHByb3BFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50UHJvcGVydGllcywgZmVhdHVyZUluZGV4KSB7XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50UHJvcGVydGllcztcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudFByb3BlcnRpZXMsIGZlYXR1cmVJbmRleCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZlYXR1cmVFYWNoXG4gKlxuICogQGNhbGxiYWNrIGZlYXR1cmVFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RmVhdHVyZTxhbnk+fSBjdXJyZW50RmVhdHVyZSBUaGUgY3VycmVudCBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBmZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0b1xuICogQXJyYXkuZm9yRWFjaC5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlRWFjaFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleClcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICB0dXJmLnBvaW50KFszNiwgNTNdLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5mZWF0dXJlRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgpIHtcbiAqICAgLy89Y3VycmVudEZlYXR1cmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZmVhdHVyZUVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICBpZiAoZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZScpIHtcbiAgICAgICAgY2FsbGJhY2soZ2VvanNvbiwgMCk7XG4gICAgfSBlbHNlIGlmIChnZW9qc29uLnR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soZ2VvanNvbi5mZWF0dXJlc1tpXSwgaSkgPT09IGZhbHNlKSBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZmVhdHVyZVJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGZlYXR1cmVSZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7RmVhdHVyZX0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqL1xuXG4vKipcbiAqIFJlZHVjZSBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKCkuXG4gKlxuICogQG5hbWUgZmVhdHVyZVJlZHVjZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtcImZvb1wiOiBcImJhclwifSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtcImhlbGxvXCI6IFwid29ybGRcIn0pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmZlYXR1cmVSZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPXByZXZpb3VzVmFsdWVcbiAqICAgLy89Y3VycmVudEZlYXR1cmVcbiAqICAgLy89ZmVhdHVyZUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50RmVhdHVyZVxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIGZlYXR1cmVFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4KSB7XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50RmVhdHVyZTtcbiAgICAgICAgZWxzZSBwcmV2aW91c1ZhbHVlID0gY2FsbGJhY2socHJldmlvdXNWYWx1ZSwgY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogR2V0IGFsbCBjb29yZGluYXRlcyBmcm9tIGFueSBHZW9KU09OIG9iamVjdC5cbiAqXG4gKiBAbmFtZSBjb29yZEFsbFxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIGFueSBHZW9KU09OIG9iamVjdFxuICogQHJldHVybnMge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlIHBvc2l0aW9uIGFycmF5XG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB2YXIgY29vcmRzID0gdHVyZi5jb29yZEFsbChmZWF0dXJlcyk7XG4gKiAvLz0gW1syNiwgMzddLCBbMzYsIDUzXV1cbiAqL1xuZnVuY3Rpb24gY29vcmRBbGwoZ2VvanNvbikge1xuICAgIHZhciBjb29yZHMgPSBbXTtcbiAgICBjb29yZEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGNvb3JkKSB7XG4gICAgICAgIGNvb3Jkcy5wdXNoKGNvb3JkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gY29vcmRzO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIGZvciBnZW9tRWFjaFxuICpcbiAqIEBjYWxsYmFjayBnZW9tRWFjaENhbGxiYWNrXG4gKiBAcGFyYW0ge0dlb21ldHJ5fSBjdXJyZW50R2VvbWV0cnkgVGhlIGN1cnJlbnQgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gZmVhdHVyZVByb3BlcnRpZXMgVGhlIGN1cnJlbnQgRmVhdHVyZSBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gZmVhdHVyZUJCb3ggVGhlIGN1cnJlbnQgRmVhdHVyZSBCQm94IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmVhdHVyZUlkIFRoZSBjdXJyZW50IEZlYXR1cmUgSWQgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGVhY2ggZ2VvbWV0cnkgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2goKVxuICpcbiAqIEBuYW1lIGdlb21FYWNoXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBleGFtcGxlXG4gKiB2YXIgZmVhdHVyZXMgPSB0dXJmLmZlYXR1cmVDb2xsZWN0aW9uKFtcbiAqICAgICB0dXJmLnBvaW50KFsyNiwgMzddLCB7Zm9vOiAnYmFyJ30pLFxuICogICAgIHR1cmYucG9pbnQoWzM2LCA1M10sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmdlb21FYWNoKGZlYXR1cmVzLCBmdW5jdGlvbiAoY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSB7XG4gKiAgIC8vPWN1cnJlbnRHZW9tZXRyeVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89ZmVhdHVyZVByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUJCb3hcbiAqICAgLy89ZmVhdHVyZUlkXG4gKiB9KTtcbiAqL1xuZnVuY3Rpb24gZ2VvbUVhY2goZ2VvanNvbiwgY2FsbGJhY2spIHtcbiAgICB2YXIgaSwgaiwgZywgZ2VvbWV0cnksIHN0b3BHLFxuICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbixcbiAgICAgICAgaXNHZW9tZXRyeUNvbGxlY3Rpb24sXG4gICAgICAgIGZlYXR1cmVQcm9wZXJ0aWVzLFxuICAgICAgICBmZWF0dXJlQkJveCxcbiAgICAgICAgZmVhdHVyZUlkLFxuICAgICAgICBmZWF0dXJlSW5kZXggPSAwLFxuICAgICAgICBpc0ZlYXR1cmVDb2xsZWN0aW9uID0gZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nLFxuICAgICAgICBpc0ZlYXR1cmUgPSBnZW9qc29uLnR5cGUgPT09ICdGZWF0dXJlJyxcbiAgICAgICAgc3RvcCA9IGlzRmVhdHVyZUNvbGxlY3Rpb24gPyBnZW9qc29uLmZlYXR1cmVzLmxlbmd0aCA6IDE7XG5cbiAgICAvLyBUaGlzIGxvZ2ljIG1heSBsb29rIGEgbGl0dGxlIHdlaXJkLiBUaGUgcmVhc29uIHdoeSBpdCBpcyB0aGF0IHdheVxuICAgIC8vIGlzIGJlY2F1c2UgaXQncyB0cnlpbmcgdG8gYmUgZmFzdC4gR2VvSlNPTiBzdXBwb3J0cyBtdWx0aXBsZSBraW5kc1xuICAgIC8vIG9mIG9iamVjdHMgYXQgaXRzIHJvb3Q6IEZlYXR1cmVDb2xsZWN0aW9uLCBGZWF0dXJlcywgR2VvbWV0cmllcy5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGhhcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgaGFuZGxpbmcgYWxsIG9mIHRoZW0sIGFuZCB0aGF0XG4gICAgLy8gbWVhbnMgdGhhdCBzb21lIG9mIHRoZSBgZm9yYCBsb29wcyB5b3Ugc2VlIGJlbG93IGFjdHVhbGx5IGp1c3QgZG9uJ3QgYXBwbHlcbiAgICAvLyB0byBjZXJ0YWluIGlucHV0cy4gRm9yIGluc3RhbmNlLCBpZiB5b3UgZ2l2ZSB0aGlzIGp1c3QgYVxuICAgIC8vIFBvaW50IGdlb21ldHJ5LCB0aGVuIGJvdGggbG9vcHMgYXJlIHNob3J0LWNpcmN1aXRlZCBhbmQgYWxsIHdlIGRvXG4gICAgLy8gaXMgZ3JhZHVhbGx5IHJlbmFtZSB0aGUgaW5wdXQgdW50aWwgaXQncyBjYWxsZWQgJ2dlb21ldHJ5Jy5cbiAgICAvL1xuICAgIC8vIFRoaXMgYWxzbyBhaW1zIHRvIGFsbG9jYXRlIGFzIGZldyByZXNvdXJjZXMgYXMgcG9zc2libGU6IGp1c3QgYVxuICAgIC8vIGZldyBudW1iZXJzIGFuZCBib29sZWFucywgcmF0aGVyIHRoYW4gYW55IHRlbXBvcmFyeSBhcnJheXMgYXMgd291bGRcbiAgICAvLyBiZSByZXF1aXJlZCB3aXRoIHRoZSBub3JtYWxpemF0aW9uIGFwcHJvYWNoLlxuICAgIGZvciAoaSA9IDA7IGkgPCBzdG9wOyBpKyspIHtcblxuICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbiA9IChpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tpXS5nZW9tZXRyeSA6XG4gICAgICAgICAgICAoaXNGZWF0dXJlID8gZ2VvanNvbi5nZW9tZXRyeSA6IGdlb2pzb24pKTtcbiAgICAgICAgZmVhdHVyZVByb3BlcnRpZXMgPSAoaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbaV0ucHJvcGVydGllcyA6XG4gICAgICAgICAgICAoaXNGZWF0dXJlID8gZ2VvanNvbi5wcm9wZXJ0aWVzIDoge30pKTtcbiAgICAgICAgZmVhdHVyZUJCb3ggPSAoaXNGZWF0dXJlQ29sbGVjdGlvbiA/IGdlb2pzb24uZmVhdHVyZXNbaV0uYmJveCA6XG4gICAgICAgICAgICAoaXNGZWF0dXJlID8gZ2VvanNvbi5iYm94IDogdW5kZWZpbmVkKSk7XG4gICAgICAgIGZlYXR1cmVJZCA9IChpc0ZlYXR1cmVDb2xsZWN0aW9uID8gZ2VvanNvbi5mZWF0dXJlc1tpXS5pZCA6XG4gICAgICAgICAgICAoaXNGZWF0dXJlID8gZ2VvanNvbi5pZCA6IHVuZGVmaW5lZCkpO1xuICAgICAgICBpc0dlb21ldHJ5Q29sbGVjdGlvbiA9IChnZW9tZXRyeU1heWJlQ29sbGVjdGlvbikgPyBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi50eXBlID09PSAnR2VvbWV0cnlDb2xsZWN0aW9uJyA6IGZhbHNlO1xuICAgICAgICBzdG9wRyA9IGlzR2VvbWV0cnlDb2xsZWN0aW9uID8gZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb24uZ2VvbWV0cmllcy5sZW5ndGggOiAxO1xuXG4gICAgICAgIGZvciAoZyA9IDA7IGcgPCBzdG9wRzsgZysrKSB7XG4gICAgICAgICAgICBnZW9tZXRyeSA9IGlzR2VvbWV0cnlDb2xsZWN0aW9uID9cbiAgICAgICAgICAgICAgICBnZW9tZXRyeU1heWJlQ29sbGVjdGlvbi5nZW9tZXRyaWVzW2ddIDogZ2VvbWV0cnlNYXliZUNvbGxlY3Rpb247XG5cbiAgICAgICAgICAgIC8vIEhhbmRsZSBudWxsIEdlb21ldHJ5XG4gICAgICAgICAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2sobnVsbCwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKGdlb21ldHJ5LnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICAgICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgICAgICBjYXNlICdNdWx0aVBvbHlnb24nOiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0dlb21ldHJ5Q29sbGVjdGlvbic6IHtcbiAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VvbWV0cnkuZ2VvbWV0cmllcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soZ2VvbWV0cnkuZ2VvbWV0cmllc1tqXSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gR2VvbWV0cnkgVHlwZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE9ubHkgaW5jcmVhc2UgYGZlYXR1cmVJbmRleGAgcGVyIGVhY2ggZmVhdHVyZVxuICAgICAgICBmZWF0dXJlSW5kZXgrKztcbiAgICB9XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGdlb21SZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBnZW9tUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0dlb21ldHJ5fSBjdXJyZW50R2VvbWV0cnkgVGhlIGN1cnJlbnQgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gZmVhdHVyZVByb3BlcnRpZXMgVGhlIGN1cnJlbnQgRmVhdHVyZSBQcm9wZXJ0aWVzIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gZmVhdHVyZUJCb3ggVGhlIGN1cnJlbnQgRmVhdHVyZSBCQm94IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gZmVhdHVyZUlkIFRoZSBjdXJyZW50IEZlYXR1cmUgSWQgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIGdlb21ldHJ5IGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKS5cbiAqXG4gKiBAbmFtZSBnZW9tUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50R2VvbWV0cnksIGZlYXR1cmVJbmRleCwgZmVhdHVyZVByb3BlcnRpZXMsIGZlYXR1cmVCQm94LCBmZWF0dXJlSWQpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5wb2ludChbMzYsIDUzXSwge2hlbGxvOiAnd29ybGQnfSlcbiAqIF0pO1xuICpcbiAqIHR1cmYuZ2VvbVJlZHVjZShmZWF0dXJlcywgZnVuY3Rpb24gKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRHZW9tZXRyeVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89ZmVhdHVyZVByb3BlcnRpZXNcbiAqICAgLy89ZmVhdHVyZUJCb3hcbiAqICAgLy89ZmVhdHVyZUlkXG4gKiAgIHJldHVybiBjdXJyZW50R2VvbWV0cnlcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBnZW9tUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBnZW9tRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudEdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIGZlYXR1cmVQcm9wZXJ0aWVzLCBmZWF0dXJlQkJveCwgZmVhdHVyZUlkKSB7XG4gICAgICAgIGlmIChmZWF0dXJlSW5kZXggPT09IDAgJiYgaW5pdGlhbFZhbHVlID09PSB1bmRlZmluZWQpIHByZXZpb3VzVmFsdWUgPSBjdXJyZW50R2VvbWV0cnk7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRHZW9tZXRyeSwgZmVhdHVyZUluZGV4LCBmZWF0dXJlUHJvcGVydGllcywgZmVhdHVyZUJCb3gsIGZlYXR1cmVJZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGZsYXR0ZW5FYWNoXG4gKlxuICogQGNhbGxiYWNrIGZsYXR0ZW5FYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RmVhdHVyZX0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgZmxhdHRlbmVkIGZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGZsYXR0ZW5lZCBmZWF0dXJlcyBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG9cbiAqIEFycmF5LmZvckVhY2guXG4gKlxuICogQG5hbWUgZmxhdHRlbkVhY2hcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KVxuICogQGV4YW1wbGVcbiAqIHZhciBmZWF0dXJlcyA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICAgIHR1cmYucG9pbnQoWzI2LCAzN10sIHtmb286ICdiYXInfSksXG4gKiAgICAgdHVyZi5tdWx0aVBvaW50KFtbNDAsIDMwXSwgWzM2LCA1M11dLCB7aGVsbG86ICd3b3JsZCd9KVxuICogXSk7XG4gKlxuICogdHVyZi5mbGF0dGVuRWFjaChmZWF0dXJlcywgZnVuY3Rpb24gKGN1cnJlbnRGZWF0dXJlLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGZsYXR0ZW5FYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgZ2VvbUVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGdlb21ldHJ5LCBmZWF0dXJlSW5kZXgsIHByb3BlcnRpZXMsIGJib3gsIGlkKSB7XG4gICAgICAgIC8vIENhbGxiYWNrIGZvciBzaW5nbGUgZ2VvbWV0cnlcbiAgICAgICAgdmFyIHR5cGUgPSAoZ2VvbWV0cnkgPT09IG51bGwpID8gbnVsbCA6IGdlb21ldHJ5LnR5cGU7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIG51bGw6XG4gICAgICAgIGNhc2UgJ1BvaW50JzpcbiAgICAgICAgY2FzZSAnTGluZVN0cmluZyc6XG4gICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGZlYXR1cmUoZ2VvbWV0cnksIHByb3BlcnRpZXMsIHtiYm94OiBiYm94LCBpZDogaWR9KSwgZmVhdHVyZUluZGV4LCAwKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBnZW9tVHlwZTtcblxuICAgICAgICAvLyBDYWxsYmFjayBmb3IgbXVsdGktZ2VvbWV0cnlcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICAgICAgZ2VvbVR5cGUgPSAnUG9pbnQnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgICAgICBnZW9tVHlwZSA9ICdMaW5lU3RyaW5nJztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdNdWx0aVBvbHlnb24nOlxuICAgICAgICAgICAgZ2VvbVR5cGUgPSAnUG9seWdvbic7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIG11bHRpRmVhdHVyZUluZGV4ID0gMDsgbXVsdGlGZWF0dXJlSW5kZXggPCBnZW9tZXRyeS5jb29yZGluYXRlcy5sZW5ndGg7IG11bHRpRmVhdHVyZUluZGV4KyspIHtcbiAgICAgICAgICAgIHZhciBjb29yZGluYXRlID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXNbbXVsdGlGZWF0dXJlSW5kZXhdO1xuICAgICAgICAgICAgdmFyIGdlb20gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogZ2VvbVR5cGUsXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soZmVhdHVyZShnZW9tLCBwcm9wZXJ0aWVzKSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgZmxhdHRlblJlZHVjZVxuICpcbiAqIFRoZSBmaXJzdCB0aW1lIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQsIHRoZSB2YWx1ZXMgcHJvdmlkZWQgYXMgYXJndW1lbnRzIGRlcGVuZFxuICogb24gd2hldGhlciB0aGUgcmVkdWNlIG1ldGhvZCBoYXMgYW4gaW5pdGlhbFZhbHVlIGFyZ3VtZW50LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBwcm92aWRlZCB0byB0aGUgcmVkdWNlIG1ldGhvZDpcbiAqICAtIFRoZSBwcmV2aW91c1ZhbHVlIGFyZ3VtZW50IGlzIGluaXRpYWxWYWx1ZS5cbiAqICAtIFRoZSBjdXJyZW50VmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIElmIGFuIGluaXRpYWxWYWx1ZSBpcyBub3QgcHJvdmlkZWQ6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgcHJlc2VudCBpbiB0aGUgYXJyYXkuXG4gKlxuICogQGNhbGxiYWNrIGZsYXR0ZW5SZWR1Y2VDYWxsYmFja1xuICogQHBhcmFtIHsqfSBwcmV2aW91c1ZhbHVlIFRoZSBhY2N1bXVsYXRlZCB2YWx1ZSBwcmV2aW91c2x5IHJldHVybmVkIGluIHRoZSBsYXN0IGludm9jYXRpb25cbiAqIG9mIHRoZSBjYWxsYmFjaywgb3IgaW5pdGlhbFZhbHVlLCBpZiBzdXBwbGllZC5cbiAqIEBwYXJhbSB7RmVhdHVyZX0gY3VycmVudEZlYXR1cmUgVGhlIGN1cnJlbnQgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKi9cblxuLyoqXG4gKiBSZWR1Y2UgZmxhdHRlbmVkIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKS5cbiAqXG4gKiBAbmFtZSBmbGF0dGVuUmVkdWNlXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT04gb2JqZWN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBhIG1ldGhvZCB0aGF0IHRha2VzIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleClcbiAqIEBwYXJhbSB7Kn0gW2luaXRpYWxWYWx1ZV0gVmFsdWUgdG8gdXNlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZmlyc3QgY2FsbCBvZiB0aGUgY2FsbGJhY2suXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHZhbHVlIHRoYXQgcmVzdWx0cyBmcm9tIHRoZSByZWR1Y3Rpb24uXG4gKiBAZXhhbXBsZVxuICogdmFyIGZlYXR1cmVzID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgICAgdHVyZi5wb2ludChbMjYsIDM3XSwge2ZvbzogJ2Jhcid9KSxcbiAqICAgICB0dXJmLm11bHRpUG9pbnQoW1s0MCwgMzBdLCBbMzYsIDUzXV0sIHtoZWxsbzogJ3dvcmxkJ30pXG4gKiBdKTtcbiAqXG4gKiB0dXJmLmZsYXR0ZW5SZWR1Y2UoZmVhdHVyZXMsIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRGZWF0dXJlXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICByZXR1cm4gY3VycmVudEZlYXR1cmVcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBmbGF0dGVuUmVkdWNlKGdlb2pzb24sIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgICB2YXIgcHJldmlvdXNWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICBmbGF0dGVuRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoY3VycmVudEZlYXR1cmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgpIHtcbiAgICAgICAgaWYgKGZlYXR1cmVJbmRleCA9PT0gMCAmJiBtdWx0aUZlYXR1cmVJbmRleCA9PT0gMCAmJiBpbml0aWFsVmFsdWUgPT09IHVuZGVmaW5lZCkgcHJldmlvdXNWYWx1ZSA9IGN1cnJlbnRGZWF0dXJlO1xuICAgICAgICBlbHNlIHByZXZpb3VzVmFsdWUgPSBjYWxsYmFjayhwcmV2aW91c1ZhbHVlLCBjdXJyZW50RmVhdHVyZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHByZXZpb3VzVmFsdWU7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHNlZ21lbnRFYWNoXG4gKlxuICogQGNhbGxiYWNrIHNlZ21lbnRFYWNoQ2FsbGJhY2tcbiAqIEBwYXJhbSB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gY3VycmVudFNlZ21lbnQgVGhlIGN1cnJlbnQgU2VnbWVudCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBtdWx0aUZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgTXVsdGktRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZ2VvbWV0cnlJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgR2VvbWV0cnkgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IHNlZ21lbnRJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgU2VnbWVudCBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciAyLXZlcnRleCBsaW5lIHNlZ21lbnQgaW4gYW55IEdlb0pTT04gb2JqZWN0LCBzaW1pbGFyIHRvIEFycmF5LmZvckVhY2goKVxuICogKE11bHRpKVBvaW50IGdlb21ldHJpZXMgZG8gbm90IGNvbnRhaW4gc2VnbWVudHMgdGhlcmVmb3JlIHRoZXkgYXJlIGlnbm9yZWQgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RmVhdHVyZUNvbGxlY3Rpb258RmVhdHVyZXxHZW9tZXRyeX0gZ2VvanNvbiBhbnkgR2VvSlNPTlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleClcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFtbWy01MCwgNV0sIFstNDAsIC0xMF0sIFstNTAsIC0xMF0sIFstNDAsIDVdLCBbLTUwLCA1XV1dKTtcbiAqXG4gKiAvLyBJdGVyYXRlIG92ZXIgR2VvSlNPTiBieSAyLXZlcnRleCBzZWdtZW50c1xuICogdHVyZi5zZWdtZW50RWFjaChwb2x5Z29uLCBmdW5jdGlvbiAoY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCkge1xuICogICAvLz1jdXJyZW50U2VnbWVudFxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogICAvLz1zZWdtZW50SW5kZXhcbiAqIH0pO1xuICpcbiAqIC8vIENhbGN1bGF0ZSB0aGUgdG90YWwgbnVtYmVyIG9mIHNlZ21lbnRzXG4gKiB2YXIgdG90YWwgPSAwO1xuICogdHVyZi5zZWdtZW50RWFjaChwb2x5Z29uLCBmdW5jdGlvbiAoKSB7XG4gKiAgICAgdG90YWwrKztcbiAqIH0pO1xuICovXG5mdW5jdGlvbiBzZWdtZW50RWFjaChnZW9qc29uLCBjYWxsYmFjaykge1xuICAgIGZsYXR0ZW5FYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChmZWF0dXJlJCQxLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4KSB7XG4gICAgICAgIHZhciBzZWdtZW50SW5kZXggPSAwO1xuXG4gICAgICAgIC8vIEV4Y2x1ZGUgbnVsbCBHZW9tZXRyaWVzXG4gICAgICAgIGlmICghZmVhdHVyZSQkMS5nZW9tZXRyeSkgcmV0dXJuO1xuICAgICAgICAvLyAoTXVsdGkpUG9pbnQgZ2VvbWV0cmllcyBkbyBub3QgY29udGFpbiBzZWdtZW50cyB0aGVyZWZvcmUgdGhleSBhcmUgaWdub3JlZCBkdXJpbmcgdGhpcyBvcGVyYXRpb24uXG4gICAgICAgIHZhciB0eXBlID0gZmVhdHVyZSQkMS5nZW9tZXRyeS50eXBlO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ1BvaW50JyB8fCB0eXBlID09PSAnTXVsdGlQb2ludCcpIHJldHVybjtcblxuICAgICAgICAvLyBHZW5lcmF0ZSAyLXZlcnRleCBsaW5lIHNlZ21lbnRzXG4gICAgICAgIHZhciBwcmV2aW91c0Nvb3JkcztcbiAgICAgICAgaWYgKGNvb3JkRWFjaChmZWF0dXJlJCQxLCBmdW5jdGlvbiAoY3VycmVudENvb3JkLCBjb29yZEluZGV4LCBmZWF0dXJlSW5kZXhDb29yZCwgbXV0bGlQYXJ0SW5kZXhDb29yZCwgZ2VvbWV0cnlJbmRleCkge1xuICAgICAgICAgICAgLy8gU2ltdWxhdGluZyBhIG1ldGEuY29vcmRSZWR1Y2UoKSBzaW5jZSBgcmVkdWNlYCBvcGVyYXRpb25zIGNhbm5vdCBiZSBzdG9wcGVkIGJ5IHJldHVybmluZyBgZmFsc2VgXG4gICAgICAgICAgICBpZiAocHJldmlvdXNDb29yZHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHByZXZpb3VzQ29vcmRzID0gY3VycmVudENvb3JkO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBjdXJyZW50U2VnbWVudCA9IGxpbmVTdHJpbmcoW3ByZXZpb3VzQ29vcmRzLCBjdXJyZW50Q29vcmRdLCBmZWF0dXJlJCQxLnByb3BlcnRpZXMpO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgc2VnbWVudEluZGV4Kys7XG4gICAgICAgICAgICBwcmV2aW91c0Nvb3JkcyA9IGN1cnJlbnRDb29yZDtcbiAgICAgICAgfSkgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIHNlZ21lbnRSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBzZWdtZW50UmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0ZlYXR1cmU8TGluZVN0cmluZz59IGN1cnJlbnRTZWdtZW50IFRoZSBjdXJyZW50IFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGZlYXR1cmVJbmRleCBUaGUgY3VycmVudCBpbmRleCBvZiB0aGUgRmVhdHVyZSBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbXVsdGlGZWF0dXJlSW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIE11bHRpLUZlYXR1cmUgYmVpbmcgcHJvY2Vzc2VkLlxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBzZWdtZW50SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIFNlZ21lbnQgYmVpbmcgcHJvY2Vzc2VkLlxuICovXG5cbi8qKlxuICogUmVkdWNlIDItdmVydGV4IGxpbmUgc2VnbWVudCBpbiBhbnkgR2VvSlNPTiBvYmplY3QsIHNpbWlsYXIgdG8gQXJyYXkucmVkdWNlKClcbiAqIChNdWx0aSlQb2ludCBnZW9tZXRyaWVzIGRvIG5vdCBjb250YWluIHNlZ21lbnRzIHRoZXJlZm9yZSB0aGV5IGFyZSBpZ25vcmVkIGR1cmluZyB0aGlzIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gYW55IEdlb0pTT05cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGEgbWV0aG9kIHRoYXQgdGFrZXMgKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRTZWdtZW50LCBjdXJyZW50SW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW1tbLTUwLCA1XSwgWy00MCwgLTEwXSwgWy01MCwgLTEwXSwgWy00MCwgNV0sIFstNTAsIDVdXV0pO1xuICpcbiAqIC8vIEl0ZXJhdGUgb3ZlciBHZW9KU09OIGJ5IDItdmVydGV4IHNlZ21lbnRzXG4gKiB0dXJmLnNlZ21lbnRSZWR1Y2UocG9seWdvbiwgZnVuY3Rpb24gKHByZXZpb3VzU2VnbWVudCwgY3VycmVudFNlZ21lbnQsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgsIHNlZ21lbnRJbmRleCkge1xuICogICAvLz0gcHJldmlvdXNTZWdtZW50XG4gKiAgIC8vPSBjdXJyZW50U2VnbWVudFxuICogICAvLz0gZmVhdHVyZUluZGV4XG4gKiAgIC8vPSBtdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz0gZ2VvbWV0cnlJbmRleFxuICogICAvLz0gc2VnbWVudEluZXhcbiAqICAgcmV0dXJuIGN1cnJlbnRTZWdtZW50XG4gKiB9KTtcbiAqXG4gKiAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIG51bWJlciBvZiBzZWdtZW50c1xuICogdmFyIGluaXRpYWxWYWx1ZSA9IDBcbiAqIHZhciB0b3RhbCA9IHR1cmYuc2VnbWVudFJlZHVjZShwb2x5Z29uLCBmdW5jdGlvbiAocHJldmlvdXNWYWx1ZSkge1xuICogICAgIHByZXZpb3VzVmFsdWUrKztcbiAqICAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbiAqIH0sIGluaXRpYWxWYWx1ZSk7XG4gKi9cbmZ1bmN0aW9uIHNlZ21lbnRSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIHZhciBzdGFydGVkID0gZmFsc2U7XG4gICAgc2VnbWVudEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpIHtcbiAgICAgICAgaWYgKHN0YXJ0ZWQgPT09IGZhbHNlICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudFNlZ21lbnQ7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRTZWdtZW50LCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4LCBzZWdtZW50SW5kZXgpO1xuICAgICAgICBzdGFydGVkID0gdHJ1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayBmb3IgbGluZUVhY2hcbiAqXG4gKiBAY2FsbGJhY2sgbGluZUVhY2hDYWxsYmFja1xuICogQHBhcmFtIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBjdXJyZW50TGluZSBUaGUgY3VycmVudCBMaW5lU3RyaW5nfExpbmVhclJpbmcgYmVpbmcgcHJvY2Vzc2VkXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZFxuICovXG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGxpbmUgb3IgcmluZyBjb29yZGluYXRlcyBpbiBMaW5lU3RyaW5nLCBQb2x5Z29uLCBNdWx0aUxpbmVTdHJpbmcsIE11bHRpUG9seWdvbiBGZWF0dXJlcyBvciBHZW9tZXRyaWVzLFxuICogc2ltaWxhciB0byBBcnJheS5mb3JFYWNoLlxuICpcbiAqIEBuYW1lIGxpbmVFYWNoXG4gKiBAcGFyYW0ge0dlb21ldHJ5fEZlYXR1cmU8TGluZVN0cmluZ3xQb2x5Z29ufE11bHRpTGluZVN0cmluZ3xNdWx0aVBvbHlnb24+fSBnZW9qc29uIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAoY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtcbiAqICAgW1syNiwgMzddLCBbMzUsIDQ1XV0sXG4gKiAgIFtbMzYsIDUzXSwgWzM4LCA1MF0sIFs0MSwgNTVdXVxuICogXSk7XG4gKlxuICogdHVyZi5saW5lRWFjaChtdWx0aUxpbmUsIGZ1bmN0aW9uIChjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICogICAvLz1jdXJyZW50TGluZVxuICogICAvLz1mZWF0dXJlSW5kZXhcbiAqICAgLy89bXVsdGlGZWF0dXJlSW5kZXhcbiAqICAgLy89Z2VvbWV0cnlJbmRleFxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGxpbmVFYWNoKGdlb2pzb24sIGNhbGxiYWNrKSB7XG4gICAgLy8gdmFsaWRhdGlvblxuICAgIGlmICghZ2VvanNvbikgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIGlzIHJlcXVpcmVkJyk7XG5cbiAgICBmbGF0dGVuRWFjaChnZW9qc29uLCBmdW5jdGlvbiAoZmVhdHVyZSQkMSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCkge1xuICAgICAgICBpZiAoZmVhdHVyZSQkMS5nZW9tZXRyeSA9PT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICB2YXIgdHlwZSA9IGZlYXR1cmUkJDEuZ2VvbWV0cnkudHlwZTtcbiAgICAgICAgdmFyIGNvb3JkcyA9IGZlYXR1cmUkJDEuZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhmZWF0dXJlJCQxLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCAwLCAwKSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdQb2x5Z29uJzpcbiAgICAgICAgICAgIGZvciAodmFyIGdlb21ldHJ5SW5kZXggPSAwOyBnZW9tZXRyeUluZGV4IDwgY29vcmRzLmxlbmd0aDsgZ2VvbWV0cnlJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGxpbmVTdHJpbmcoY29vcmRzW2dlb21ldHJ5SW5kZXhdLCBmZWF0dXJlJCQxLnByb3BlcnRpZXMpLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KSA9PT0gZmFsc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgZm9yIGxpbmVSZWR1Y2VcbiAqXG4gKiBUaGUgZmlyc3QgdGltZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgdmFsdWVzIHByb3ZpZGVkIGFzIGFyZ3VtZW50cyBkZXBlbmRcbiAqIG9uIHdoZXRoZXIgdGhlIHJlZHVjZSBtZXRob2QgaGFzIGFuIGluaXRpYWxWYWx1ZSBhcmd1bWVudC5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgcHJvdmlkZWQgdG8gdGhlIHJlZHVjZSBtZXRob2Q6XG4gKiAgLSBUaGUgcHJldmlvdXNWYWx1ZSBhcmd1bWVudCBpcyBpbml0aWFsVmFsdWUuXG4gKiAgLSBUaGUgY3VycmVudFZhbHVlIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgZWxlbWVudCBwcmVzZW50IGluIHRoZSBhcnJheS5cbiAqXG4gKiBJZiBhbiBpbml0aWFsVmFsdWUgaXMgbm90IHByb3ZpZGVkOlxuICogIC0gVGhlIHByZXZpb3VzVmFsdWUgYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICogIC0gVGhlIGN1cnJlbnRWYWx1ZSBhcmd1bWVudCBpcyB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBlbGVtZW50IHByZXNlbnQgaW4gdGhlIGFycmF5LlxuICpcbiAqIEBjYWxsYmFjayBsaW5lUmVkdWNlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7Kn0gcHJldmlvdXNWYWx1ZSBUaGUgYWNjdW11bGF0ZWQgdmFsdWUgcHJldmlvdXNseSByZXR1cm5lZCBpbiB0aGUgbGFzdCBpbnZvY2F0aW9uXG4gKiBvZiB0aGUgY2FsbGJhY2ssIG9yIGluaXRpYWxWYWx1ZSwgaWYgc3VwcGxpZWQuXG4gKiBAcGFyYW0ge0ZlYXR1cmU8TGluZVN0cmluZz59IGN1cnJlbnRMaW5lIFRoZSBjdXJyZW50IExpbmVTdHJpbmd8TGluZWFyUmluZyBiZWluZyBwcm9jZXNzZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gZmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBGZWF0dXJlIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IG11bHRpRmVhdHVyZUluZGV4IFRoZSBjdXJyZW50IGluZGV4IG9mIHRoZSBNdWx0aS1GZWF0dXJlIGJlaW5nIHByb2Nlc3NlZFxuICogQHBhcmFtIHtudW1iZXJ9IGdlb21ldHJ5SW5kZXggVGhlIGN1cnJlbnQgaW5kZXggb2YgdGhlIEdlb21ldHJ5IGJlaW5nIHByb2Nlc3NlZFxuICovXG5cbi8qKlxuICogUmVkdWNlIGZlYXR1cmVzIGluIGFueSBHZW9KU09OIG9iamVjdCwgc2ltaWxhciB0byBBcnJheS5yZWR1Y2UoKS5cbiAqXG4gKiBAbmFtZSBsaW5lUmVkdWNlXG4gKiBAcGFyYW0ge0dlb21ldHJ5fEZlYXR1cmU8TGluZVN0cmluZ3xQb2x5Z29ufE11bHRpTGluZVN0cmluZ3xNdWx0aVBvbHlnb24+fSBnZW9qc29uIG9iamVjdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYSBtZXRob2QgdGhhdCB0YWtlcyAocHJldmlvdXNWYWx1ZSwgY3VycmVudExpbmUsIGZlYXR1cmVJbmRleCwgbXVsdGlGZWF0dXJlSW5kZXgsIGdlb21ldHJ5SW5kZXgpXG4gKiBAcGFyYW0geyp9IFtpbml0aWFsVmFsdWVdIFZhbHVlIHRvIHVzZSBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGZpcnN0IGNhbGwgb2YgdGhlIGNhbGxiYWNrLlxuICogQHJldHVybnMgeyp9IFRoZSB2YWx1ZSB0aGF0IHJlc3VsdHMgZnJvbSB0aGUgcmVkdWN0aW9uLlxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aVBvbHkgPSB0dXJmLm11bHRpUG9seWdvbihbXG4gKiAgIHR1cmYucG9seWdvbihbW1sxMiw0OF0sWzIsNDFdLFsyNCwzOF0sWzEyLDQ4XV0sIFtbOSw0NF0sWzEzLDQxXSxbMTMsNDVdLFs5LDQ0XV1dKSxcbiAqICAgdHVyZi5wb2x5Z29uKFtbWzUsIDVdLCBbMCwgMF0sIFsyLCAyXSwgWzQsIDRdLCBbNSwgNV1dXSlcbiAqIF0pO1xuICpcbiAqIHR1cmYubGluZVJlZHVjZShtdWx0aVBvbHksIGZ1bmN0aW9uIChwcmV2aW91c1ZhbHVlLCBjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICogICAvLz1wcmV2aW91c1ZhbHVlXG4gKiAgIC8vPWN1cnJlbnRMaW5lXG4gKiAgIC8vPWZlYXR1cmVJbmRleFxuICogICAvLz1tdWx0aUZlYXR1cmVJbmRleFxuICogICAvLz1nZW9tZXRyeUluZGV4XG4gKiAgIHJldHVybiBjdXJyZW50TGluZVxuICogfSk7XG4gKi9cbmZ1bmN0aW9uIGxpbmVSZWR1Y2UoZ2VvanNvbiwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICAgIHZhciBwcmV2aW91c1ZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIGxpbmVFYWNoKGdlb2pzb24sIGZ1bmN0aW9uIChjdXJyZW50TGluZSwgZmVhdHVyZUluZGV4LCBtdWx0aUZlYXR1cmVJbmRleCwgZ2VvbWV0cnlJbmRleCkge1xuICAgICAgICBpZiAoZmVhdHVyZUluZGV4ID09PSAwICYmIGluaXRpYWxWYWx1ZSA9PT0gdW5kZWZpbmVkKSBwcmV2aW91c1ZhbHVlID0gY3VycmVudExpbmU7XG4gICAgICAgIGVsc2UgcHJldmlvdXNWYWx1ZSA9IGNhbGxiYWNrKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRMaW5lLCBmZWF0dXJlSW5kZXgsIG11bHRpRmVhdHVyZUluZGV4LCBnZW9tZXRyeUluZGV4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJldmlvdXNWYWx1ZTtcbn1cblxuLyoqXG4gKiBGaW5kcyBhIHBhcnRpY3VsYXIgMi12ZXJ0ZXggTGluZVN0cmluZyBTZWdtZW50IGZyb20gYSBHZW9KU09OIHVzaW5nIGBAdHVyZi9tZXRhYCBpbmRleGVzLlxuICpcbiAqIE5lZ2F0aXZlIGluZGV4ZXMgYXJlIHBlcm1pdHRlZC5cbiAqIFBvaW50ICYgTXVsdGlQb2ludCB3aWxsIGFsd2F5cyByZXR1cm4gbnVsbC5cbiAqXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufEZlYXR1cmV8R2VvbWV0cnl9IGdlb2pzb24gQW55IEdlb0pTT04gRmVhdHVyZSBvciBHZW9tZXRyeVxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZmVhdHVyZUluZGV4PTBdIEZlYXR1cmUgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5tdWx0aUZlYXR1cmVJbmRleD0wXSBNdWx0aS1GZWF0dXJlIEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuZ2VvbWV0cnlJbmRleD0wXSBHZW9tZXRyeSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnNlZ21lbnRJbmRleD0wXSBTZWdtZW50IEluZGV4XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucHJvcGVydGllcz17fV0gVHJhbnNsYXRlIFByb3BlcnRpZXMgdG8gb3V0cHV0IExpbmVTdHJpbmdcbiAqIEBwYXJhbSB7QkJveH0gW29wdGlvbnMuYmJveD17fV0gVHJhbnNsYXRlIEJCb3ggdG8gb3V0cHV0IExpbmVTdHJpbmdcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdGlvbnMuaWQ9e31dIFRyYW5zbGF0ZSBJZCB0byBvdXRwdXQgTGluZVN0cmluZ1xuICogQHJldHVybnMge0ZlYXR1cmU8TGluZVN0cmluZz59IDItdmVydGV4IEdlb0pTT04gRmVhdHVyZSBMaW5lU3RyaW5nXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtcbiAqICAgICBbWzEwLCAxMF0sIFs1MCwgMzBdLCBbMzAsIDQwXV0sXG4gKiAgICAgW1stMTAsIC0xMF0sIFstNTAsIC0zMF0sIFstMzAsIC00MF1dXG4gKiBdKTtcbiAqXG4gKiAvLyBGaXJzdCBTZWdtZW50IChkZWZhdWx0cyBhcmUgMClcbiAqIHR1cmYuZmluZFNlZ21lbnQobXVsdGlMaW5lKTtcbiAqIC8vID0+IEZlYXR1cmU8TGluZVN0cmluZzxbWzEwLCAxMF0sIFs1MCwgMzBdXT4+XG4gKlxuICogLy8gRmlyc3QgU2VnbWVudCBvZiAybmQgTXVsdGkgRmVhdHVyZVxuICogdHVyZi5maW5kU2VnbWVudChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogMX0pO1xuICogLy8gPT4gRmVhdHVyZTxMaW5lU3RyaW5nPFtbLTEwLCAtMTBdLCBbLTUwLCAtMzBdXT4+XG4gKlxuICogLy8gTGFzdCBTZWdtZW50IG9mIExhc3QgTXVsdGkgRmVhdHVyZVxuICogdHVyZi5maW5kU2VnbWVudChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogLTEsIHNlZ21lbnRJbmRleDogLTF9KTtcbiAqIC8vID0+IEZlYXR1cmU8TGluZVN0cmluZzxbWy01MCwgLTMwXSwgWy0zMCwgLTQwXV0+PlxuICovXG5mdW5jdGlvbiBmaW5kU2VnbWVudChnZW9qc29uLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIGZlYXR1cmVJbmRleCA9IG9wdGlvbnMuZmVhdHVyZUluZGV4IHx8IDA7XG4gICAgdmFyIG11bHRpRmVhdHVyZUluZGV4ID0gb3B0aW9ucy5tdWx0aUZlYXR1cmVJbmRleCB8fCAwO1xuICAgIHZhciBnZW9tZXRyeUluZGV4ID0gb3B0aW9ucy5nZW9tZXRyeUluZGV4IHx8IDA7XG4gICAgdmFyIHNlZ21lbnRJbmRleCA9IG9wdGlvbnMuc2VnbWVudEluZGV4IHx8IDA7XG5cbiAgICAvLyBGaW5kIEZlYXR1cmVJbmRleFxuICAgIHZhciBwcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9wZXJ0aWVzO1xuICAgIHZhciBnZW9tZXRyeTtcblxuICAgIHN3aXRjaCAoZ2VvanNvbi50eXBlKSB7XG4gICAgY2FzZSAnRmVhdHVyZUNvbGxlY3Rpb24nOlxuICAgICAgICBpZiAoZmVhdHVyZUluZGV4IDwgMCkgZmVhdHVyZUluZGV4ID0gZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGggKyBmZWF0dXJlSW5kZXg7XG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5wcm9wZXJ0aWVzO1xuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5nZW9tZXRyeTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRmVhdHVyZSc6XG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IGdlb2pzb24ucHJvcGVydGllcztcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uLmdlb21ldHJ5O1xuICAgICAgICBicmVhaztcbiAgICBjYXNlICdQb2ludCc6XG4gICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uO1xuICAgICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8vIEZpbmQgU2VnbWVudEluZGV4XG4gICAgaWYgKGdlb21ldHJ5ID09PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICB2YXIgY29vcmRzID0gZ2VvbWV0cnkuY29vcmRpbmF0ZXM7XG4gICAgc3dpdGNoIChnZW9tZXRyeS50eXBlKSB7XG4gICAgY2FzZSAnUG9pbnQnOlxuICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA8IDApIHNlZ21lbnRJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBzZWdtZW50SW5kZXggLSAxO1xuICAgICAgICByZXR1cm4gbGluZVN0cmluZyhbY29vcmRzW3NlZ21lbnRJbmRleF0sIGNvb3Jkc1tzZWdtZW50SW5kZXggKyAxXV0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICBpZiAoZ2VvbWV0cnlJbmRleCA8IDApIGdlb21ldHJ5SW5kZXggPSBjb29yZHMubGVuZ3RoICsgZ2VvbWV0cnlJbmRleDtcbiAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA8IDApIHNlZ21lbnRJbmRleCA9IGNvb3Jkc1tnZW9tZXRyeUluZGV4XS5sZW5ndGggKyBzZWdtZW50SW5kZXggLSAxO1xuICAgICAgICByZXR1cm4gbGluZVN0cmluZyhbY29vcmRzW2dlb21ldHJ5SW5kZXhdW3NlZ21lbnRJbmRleF0sIGNvb3Jkc1tnZW9tZXRyeUluZGV4XVtzZWdtZW50SW5kZXggKyAxXV0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoc2VnbWVudEluZGV4IDwgMCkgc2VnbWVudEluZGV4ID0gY29vcmRzW211bHRpRmVhdHVyZUluZGV4XS5sZW5ndGggKyBzZWdtZW50SW5kZXggLSAxO1xuICAgICAgICByZXR1cm4gbGluZVN0cmluZyhbY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtzZWdtZW50SW5kZXhdLCBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdW3NlZ21lbnRJbmRleCArIDFdXSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICAgIGlmIChnZW9tZXRyeUluZGV4IDwgMCkgZ2VvbWV0cnlJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0ubGVuZ3RoICsgZ2VvbWV0cnlJbmRleDtcbiAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA8IDApIHNlZ21lbnRJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF0ubGVuZ3RoIC0gc2VnbWVudEluZGV4IC0gMTtcbiAgICAgICAgcmV0dXJuIGxpbmVTdHJpbmcoW2Nvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF1bc2VnbWVudEluZGV4XSwgY29vcmRzW211bHRpRmVhdHVyZUluZGV4XVtnZW9tZXRyeUluZGV4XVtzZWdtZW50SW5kZXggKyAxXV0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgaW52YWxpZCcpO1xufVxuXG4vKipcbiAqIEZpbmRzIGEgcGFydGljdWxhciBQb2ludCBmcm9tIGEgR2VvSlNPTiB1c2luZyBgQHR1cmYvbWV0YWAgaW5kZXhlcy5cbiAqXG4gKiBOZWdhdGl2ZSBpbmRleGVzIGFyZSBwZXJtaXR0ZWQuXG4gKlxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbnxGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIEFueSBHZW9KU09OIEZlYXR1cmUgb3IgR2VvbWV0cnlcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmZlYXR1cmVJbmRleD0wXSBGZWF0dXJlIEluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMubXVsdGlGZWF0dXJlSW5kZXg9MF0gTXVsdGktRmVhdHVyZSBJbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLmdlb21ldHJ5SW5kZXg9MF0gR2VvbWV0cnkgSW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy5jb29yZEluZGV4PTBdIENvb3JkIEluZGV4XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnMucHJvcGVydGllcz17fV0gVHJhbnNsYXRlIFByb3BlcnRpZXMgdG8gb3V0cHV0IFBvaW50XG4gKiBAcGFyYW0ge0JCb3h9IFtvcHRpb25zLmJib3g9e31dIFRyYW5zbGF0ZSBCQm94IHRvIG91dHB1dCBQb2ludFxuICogQHBhcmFtIHtudW1iZXJ8c3RyaW5nfSBbb3B0aW9ucy5pZD17fV0gVHJhbnNsYXRlIElkIHRvIG91dHB1dCBQb2ludFxuICogQHJldHVybnMge0ZlYXR1cmU8UG9pbnQ+fSAyLXZlcnRleCBHZW9KU09OIEZlYXR1cmUgUG9pbnRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1xuICogICAgIFtbMTAsIDEwXSwgWzUwLCAzMF0sIFszMCwgNDBdXSxcbiAqICAgICBbWy0xMCwgLTEwXSwgWy01MCwgLTMwXSwgWy0zMCwgLTQwXV1cbiAqIF0pO1xuICpcbiAqIC8vIEZpcnN0IFNlZ21lbnQgKGRlZmF1bHRzIGFyZSAwKVxuICogdHVyZi5maW5kUG9pbnQobXVsdGlMaW5lKTtcbiAqIC8vID0+IEZlYXR1cmU8UG9pbnQ8WzEwLCAxMF0+PlxuICpcbiAqIC8vIEZpcnN0IFNlZ21lbnQgb2YgdGhlIDJuZCBNdWx0aS1GZWF0dXJlXG4gKiB0dXJmLmZpbmRQb2ludChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogMX0pO1xuICogLy8gPT4gRmVhdHVyZTxQb2ludDxbLTEwLCAtMTBdPj5cbiAqXG4gKiAvLyBMYXN0IFNlZ21lbnQgb2YgbGFzdCBNdWx0aS1GZWF0dXJlXG4gKiB0dXJmLmZpbmRQb2ludChtdWx0aUxpbmUsIHttdWx0aUZlYXR1cmVJbmRleDogLTEsIGNvb3JkSW5kZXg6IC0xfSk7XG4gKiAvLyA9PiBGZWF0dXJlPFBvaW50PFstMzAsIC00MF0+PlxuICovXG5mdW5jdGlvbiBmaW5kUG9pbnQoZ2VvanNvbiwgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciBmZWF0dXJlSW5kZXggPSBvcHRpb25zLmZlYXR1cmVJbmRleCB8fCAwO1xuICAgIHZhciBtdWx0aUZlYXR1cmVJbmRleCA9IG9wdGlvbnMubXVsdGlGZWF0dXJlSW5kZXggfHwgMDtcbiAgICB2YXIgZ2VvbWV0cnlJbmRleCA9IG9wdGlvbnMuZ2VvbWV0cnlJbmRleCB8fCAwO1xuICAgIHZhciBjb29yZEluZGV4ID0gb3B0aW9ucy5jb29yZEluZGV4IHx8IDA7XG5cbiAgICAvLyBGaW5kIEZlYXR1cmVJbmRleFxuICAgIHZhciBwcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9wZXJ0aWVzO1xuICAgIHZhciBnZW9tZXRyeTtcblxuICAgIHN3aXRjaCAoZ2VvanNvbi50eXBlKSB7XG4gICAgY2FzZSAnRmVhdHVyZUNvbGxlY3Rpb24nOlxuICAgICAgICBpZiAoZmVhdHVyZUluZGV4IDwgMCkgZmVhdHVyZUluZGV4ID0gZ2VvanNvbi5mZWF0dXJlcy5sZW5ndGggKyBmZWF0dXJlSW5kZXg7XG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5wcm9wZXJ0aWVzO1xuICAgICAgICBnZW9tZXRyeSA9IGdlb2pzb24uZmVhdHVyZXNbZmVhdHVyZUluZGV4XS5nZW9tZXRyeTtcbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRmVhdHVyZSc6XG4gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IGdlb2pzb24ucHJvcGVydGllcztcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uLmdlb21ldHJ5O1xuICAgICAgICBicmVhaztcbiAgICBjYXNlICdQb2ludCc6XG4gICAgY2FzZSAnTXVsdGlQb2ludCc6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6XG4gICAgY2FzZSAnTXVsdGlQb2x5Z29uJzpcbiAgICAgICAgZ2VvbWV0cnkgPSBnZW9qc29uO1xuICAgICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8vIEZpbmQgQ29vcmQgSW5kZXhcbiAgICBpZiAoZ2VvbWV0cnkgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgIHZhciBjb29yZHMgPSBnZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICBzd2l0Y2ggKGdlb21ldHJ5LnR5cGUpIHtcbiAgICBjYXNlICdQb2ludCc6XG4gICAgICAgIHJldHVybiBwb2ludChjb29yZHMsIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ011bHRpUG9pbnQnOlxuICAgICAgICBpZiAobXVsdGlGZWF0dXJlSW5kZXggPCAwKSBtdWx0aUZlYXR1cmVJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBtdWx0aUZlYXR1cmVJbmRleDtcbiAgICAgICAgcmV0dXJuIHBvaW50KGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOlxuICAgICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHMubGVuZ3RoICsgY29vcmRJbmRleDtcbiAgICAgICAgcmV0dXJuIHBvaW50KGNvb3Jkc1tjb29yZEluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnUG9seWdvbic6XG4gICAgICAgIGlmIChnZW9tZXRyeUluZGV4IDwgMCkgZ2VvbWV0cnlJbmRleCA9IGNvb3Jkcy5sZW5ndGggKyBnZW9tZXRyeUluZGV4O1xuICAgICAgICBpZiAoY29vcmRJbmRleCA8IDApIGNvb3JkSW5kZXggPSBjb29yZHNbZ2VvbWV0cnlJbmRleF0ubGVuZ3RoICsgY29vcmRJbmRleDtcbiAgICAgICAgcmV0dXJuIHBvaW50KGNvb3Jkc1tnZW9tZXRyeUluZGV4XVtjb29yZEluZGV4XSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG4gICAgY2FzZSAnTXVsdGlMaW5lU3RyaW5nJzpcbiAgICAgICAgaWYgKG11bHRpRmVhdHVyZUluZGV4IDwgMCkgbXVsdGlGZWF0dXJlSW5kZXggPSBjb29yZHMubGVuZ3RoICsgbXVsdGlGZWF0dXJlSW5kZXg7XG4gICAgICAgIGlmIChjb29yZEluZGV4IDwgMCkgY29vcmRJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF0ubGVuZ3RoICsgY29vcmRJbmRleDtcbiAgICAgICAgcmV0dXJuIHBvaW50KGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bY29vcmRJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgICAgIGlmIChtdWx0aUZlYXR1cmVJbmRleCA8IDApIG11bHRpRmVhdHVyZUluZGV4ID0gY29vcmRzLmxlbmd0aCArIG11bHRpRmVhdHVyZUluZGV4O1xuICAgICAgICBpZiAoZ2VvbWV0cnlJbmRleCA8IDApIGdlb21ldHJ5SW5kZXggPSBjb29yZHNbbXVsdGlGZWF0dXJlSW5kZXhdLmxlbmd0aCArIGdlb21ldHJ5SW5kZXg7XG4gICAgICAgIGlmIChjb29yZEluZGV4IDwgMCkgY29vcmRJbmRleCA9IGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF0ubGVuZ3RoIC0gY29vcmRJbmRleDtcbiAgICAgICAgcmV0dXJuIHBvaW50KGNvb3Jkc1ttdWx0aUZlYXR1cmVJbmRleF1bZ2VvbWV0cnlJbmRleF1bY29vcmRJbmRleF0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgaW52YWxpZCcpO1xufVxuXG5leHBvcnQgeyBjb29yZEVhY2gsIGNvb3JkUmVkdWNlLCBwcm9wRWFjaCwgcHJvcFJlZHVjZSwgZmVhdHVyZUVhY2gsIGZlYXR1cmVSZWR1Y2UsIGNvb3JkQWxsLCBnZW9tRWFjaCwgZ2VvbVJlZHVjZSwgZmxhdHRlbkVhY2gsIGZsYXR0ZW5SZWR1Y2UsIHNlZ21lbnRFYWNoLCBzZWdtZW50UmVkdWNlLCBsaW5lRWFjaCwgbGluZVJlZHVjZSwgZmluZFNlZ21lbnQsIGZpbmRQb2ludCB9O1xuIiwiLyoqXG4gKiBSZXR1cm5zIGEgY2xvbmVkIGNvcHkgb2YgdGhlIHBhc3NlZCBHZW9KU09OIE9iamVjdCwgaW5jbHVkaW5nIHBvc3NpYmxlICdGb3JlaWduIE1lbWJlcnMnLlxuICogfjMtNXggZmFzdGVyIHRoYW4gdGhlIGNvbW1vbiBKU09OLnBhcnNlICsgSlNPTi5zdHJpbmdpZnkgY29tYm8gbWV0aG9kLlxuICpcbiAqIEBuYW1lIGNsb25lXG4gKiBAcGFyYW0ge0dlb0pTT059IGdlb2pzb24gR2VvSlNPTiBPYmplY3RcbiAqIEByZXR1cm5zIHtHZW9KU09OfSBjbG9uZWQgR2VvSlNPTiBPYmplY3RcbiAqIEBleGFtcGxlXG4gKiB2YXIgbGluZSA9IHR1cmYubGluZVN0cmluZyhbWy03NCwgNDBdLCBbLTc4LCA0Ml0sIFstODIsIDM1XV0sIHtjb2xvcjogJ3JlZCd9KTtcbiAqXG4gKiB2YXIgbGluZUNsb25lZCA9IHR1cmYuY2xvbmUobGluZSk7XG4gKi9cbmZ1bmN0aW9uIGNsb25lKGdlb2pzb24pIHtcbiAgICBpZiAoIWdlb2pzb24pIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyByZXF1aXJlZCcpO1xuXG4gICAgc3dpdGNoIChnZW9qc29uLnR5cGUpIHtcbiAgICBjYXNlICdGZWF0dXJlJzpcbiAgICAgICAgcmV0dXJuIGNsb25lRmVhdHVyZShnZW9qc29uKTtcbiAgICBjYXNlICdGZWF0dXJlQ29sbGVjdGlvbic6XG4gICAgICAgIHJldHVybiBjbG9uZUZlYXR1cmVDb2xsZWN0aW9uKGdlb2pzb24pO1xuICAgIGNhc2UgJ1BvaW50JzpcbiAgICBjYXNlICdMaW5lU3RyaW5nJzpcbiAgICBjYXNlICdQb2x5Z29uJzpcbiAgICBjYXNlICdNdWx0aVBvaW50JzpcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOlxuICAgIGNhc2UgJ011bHRpUG9seWdvbic6XG4gICAgY2FzZSAnR2VvbWV0cnlDb2xsZWN0aW9uJzpcbiAgICAgICAgcmV0dXJuIGNsb25lR2VvbWV0cnkoZ2VvanNvbik7XG4gICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIEdlb0pTT04gdHlwZScpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBDbG9uZSBGZWF0dXJlXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RmVhdHVyZTxhbnk+fSBnZW9qc29uIEdlb0pTT04gRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8YW55Pn0gY2xvbmVkIEZlYXR1cmVcbiAqL1xuZnVuY3Rpb24gY2xvbmVGZWF0dXJlKGdlb2pzb24pIHtcbiAgICB2YXIgY2xvbmVkID0ge3R5cGU6ICdGZWF0dXJlJ307XG4gICAgLy8gUHJlc2VydmUgRm9yZWlnbiBNZW1iZXJzXG4gICAgT2JqZWN0LmtleXMoZ2VvanNvbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICBjYXNlICdwcm9wZXJ0aWVzJzpcbiAgICAgICAgY2FzZSAnZ2VvbWV0cnknOlxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgY2xvbmVkW2tleV0gPSBnZW9qc29uW2tleV07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBZGQgcHJvcGVydGllcyAmIGdlb21ldHJ5IGxhc3RcbiAgICBjbG9uZWQucHJvcGVydGllcyA9IGNsb25lUHJvcGVydGllcyhnZW9qc29uLnByb3BlcnRpZXMpO1xuICAgIGNsb25lZC5nZW9tZXRyeSA9IGNsb25lR2VvbWV0cnkoZ2VvanNvbi5nZW9tZXRyeSk7XG4gICAgcmV0dXJuIGNsb25lZDtcbn1cblxuLyoqXG4gKiBDbG9uZSBQcm9wZXJ0aWVzXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIEdlb0pTT04gUHJvcGVydGllc1xuICogQHJldHVybnMge09iamVjdH0gY2xvbmVkIFByb3BlcnRpZXNcbiAqL1xuZnVuY3Rpb24gY2xvbmVQcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgICB2YXIgY2xvbmVkID0ge307XG4gICAgaWYgKCFwcm9wZXJ0aWVzKSByZXR1cm4gY2xvbmVkO1xuICAgIE9iamVjdC5rZXlzKHByb3BlcnRpZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0aWVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbnVsbFxuICAgICAgICAgICAgICAgIGNsb25lZFtrZXldID0gbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlIEFycmF5XG4gICAgICAgICAgICAgICAgY2xvbmVkW2tleV0gPSB2YWx1ZS5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBnZW5lcmljIE9iamVjdFxuICAgICAgICAgICAgICAgIGNsb25lZFtrZXldID0gY2xvbmVQcm9wZXJ0aWVzKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGNsb25lZFtrZXldID0gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lZDtcbn1cblxuLyoqXG4gKiBDbG9uZSBGZWF0dXJlIENvbGxlY3Rpb25cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGZWF0dXJlQ29sbGVjdGlvbjxhbnk+fSBnZW9qc29uIEdlb0pTT04gRmVhdHVyZSBDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248YW55Pn0gY2xvbmVkIEZlYXR1cmUgQ29sbGVjdGlvblxuICovXG5mdW5jdGlvbiBjbG9uZUZlYXR1cmVDb2xsZWN0aW9uKGdlb2pzb24pIHtcbiAgICB2YXIgY2xvbmVkID0ge3R5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbid9O1xuXG4gICAgLy8gUHJlc2VydmUgRm9yZWlnbiBNZW1iZXJzXG4gICAgT2JqZWN0LmtleXMoZ2VvanNvbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ3R5cGUnOlxuICAgICAgICBjYXNlICdmZWF0dXJlcyc6XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBjbG9uZWRba2V5XSA9IGdlb2pzb25ba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEFkZCBmZWF0dXJlc1xuICAgIGNsb25lZC5mZWF0dXJlcyA9IGdlb2pzb24uZmVhdHVyZXMubWFwKGZ1bmN0aW9uIChmZWF0dXJlKSB7XG4gICAgICAgIHJldHVybiBjbG9uZUZlYXR1cmUoZmVhdHVyZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lZDtcbn1cblxuLyoqXG4gKiBDbG9uZSBHZW9tZXRyeVxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0dlb21ldHJ5PGFueT59IGdlb21ldHJ5IEdlb0pTT04gR2VvbWV0cnlcbiAqIEByZXR1cm5zIHtHZW9tZXRyeTxhbnk+fSBjbG9uZWQgR2VvbWV0cnlcbiAqL1xuZnVuY3Rpb24gY2xvbmVHZW9tZXRyeShnZW9tZXRyeSkge1xuICAgIHZhciBnZW9tID0ge3R5cGU6IGdlb21ldHJ5LnR5cGV9O1xuICAgIGlmIChnZW9tZXRyeS5iYm94KSBnZW9tLmJib3ggPSBnZW9tZXRyeS5iYm94O1xuXG4gICAgaWYgKGdlb21ldHJ5LnR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGdlb20uZ2VvbWV0cmllcyA9IGdlb21ldHJ5Lmdlb21ldHJpZXMubWFwKGZ1bmN0aW9uIChnZW9tKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVHZW9tZXRyeShnZW9tKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBnZW9tO1xuICAgIH1cbiAgICBnZW9tLmNvb3JkaW5hdGVzID0gZGVlcFNsaWNlKGdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcbiAgICByZXR1cm4gZ2VvbTtcbn1cblxuLyoqXG4gKiBEZWVwIFNsaWNlIGNvb3JkaW5hdGVzXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Q29vcmRpbmF0ZXN9IGNvb3JkcyBDb29yZGluYXRlc1xuICogQHJldHVybnMge0Nvb3JkaW5hdGVzfSBhbGwgY29vcmRpbmF0ZXMgc2xpY2VkXG4gKi9cbmZ1bmN0aW9uIGRlZXBTbGljZShjb29yZHMpIHtcbiAgICBpZiAodHlwZW9mIGNvb3Jkc1swXSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGNvb3Jkcy5zbGljZSgpOyB9XG4gICAgcmV0dXJuIGNvb3Jkcy5tYXAoZnVuY3Rpb24gKGNvb3JkKSB7XG4gICAgICAgIHJldHVybiBkZWVwU2xpY2UoY29vcmQpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbG9uZTtcbiIsIi8qKlxuICogRWFydGggUmFkaXVzIHVzZWQgd2l0aCB0aGUgSGFydmVzaW5lIGZvcm11bGEgYW5kIGFwcHJveGltYXRlcyB1c2luZyBhIHNwaGVyaWNhbCAobm9uLWVsbGlwc29pZCkgRWFydGguXG4gKi9cbnZhciBlYXJ0aFJhZGl1cyA9IDYzNzEwMDguODtcblxuLyoqXG4gKiBVbml0IG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgdXNpbmcgYSBzcGhlcmljYWwgKG5vbi1lbGxpcHNvaWQpIGVhcnRoIHJhZGl1cy5cbiAqL1xudmFyIGZhY3RvcnMgPSB7XG4gICAgbWV0ZXJzOiBlYXJ0aFJhZGl1cyxcbiAgICBtZXRyZXM6IGVhcnRoUmFkaXVzLFxuICAgIG1pbGxpbWV0ZXJzOiBlYXJ0aFJhZGl1cyAqIDEwMDAsXG4gICAgbWlsbGltZXRyZXM6IGVhcnRoUmFkaXVzICogMTAwMCxcbiAgICBjZW50aW1ldGVyczogZWFydGhSYWRpdXMgKiAxMDAsXG4gICAgY2VudGltZXRyZXM6IGVhcnRoUmFkaXVzICogMTAwLFxuICAgIGtpbG9tZXRlcnM6IGVhcnRoUmFkaXVzIC8gMTAwMCxcbiAgICBraWxvbWV0cmVzOiBlYXJ0aFJhZGl1cyAvIDEwMDAsXG4gICAgbWlsZXM6IGVhcnRoUmFkaXVzIC8gMTYwOS4zNDQsXG4gICAgbmF1dGljYWxtaWxlczogZWFydGhSYWRpdXMgLyAxODUyLFxuICAgIGluY2hlczogZWFydGhSYWRpdXMgKiAzOS4zNzAsXG4gICAgeWFyZHM6IGVhcnRoUmFkaXVzIC8gMS4wOTM2LFxuICAgIGZlZXQ6IGVhcnRoUmFkaXVzICogMy4yODA4NCxcbiAgICByYWRpYW5zOiAxLFxuICAgIGRlZ3JlZXM6IGVhcnRoUmFkaXVzIC8gMTExMzI1LFxufTtcblxuLyoqXG4gKiBVbml0cyBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIGJhc2VkIG9uIDEgbWV0ZXIuXG4gKi9cbnZhciB1bml0c0ZhY3RvcnMgPSB7XG4gICAgbWV0ZXJzOiAxLFxuICAgIG1ldHJlczogMSxcbiAgICBtaWxsaW1ldGVyczogMTAwMCxcbiAgICBtaWxsaW1ldHJlczogMTAwMCxcbiAgICBjZW50aW1ldGVyczogMTAwLFxuICAgIGNlbnRpbWV0cmVzOiAxMDAsXG4gICAga2lsb21ldGVyczogMSAvIDEwMDAsXG4gICAga2lsb21ldHJlczogMSAvIDEwMDAsXG4gICAgbWlsZXM6IDEgLyAxNjA5LjM0NCxcbiAgICBuYXV0aWNhbG1pbGVzOiAxIC8gMTg1MixcbiAgICBpbmNoZXM6IDM5LjM3MCxcbiAgICB5YXJkczogMSAvIDEuMDkzNixcbiAgICBmZWV0OiAzLjI4MDg0LFxuICAgIHJhZGlhbnM6IDEgLyBlYXJ0aFJhZGl1cyxcbiAgICBkZWdyZWVzOiAxIC8gMTExMzI1LFxufTtcblxuLyoqXG4gKiBBcmVhIG9mIG1lYXN1cmVtZW50IGZhY3RvcnMgYmFzZWQgb24gMSBzcXVhcmUgbWV0ZXIuXG4gKi9cbnZhciBhcmVhRmFjdG9ycyA9IHtcbiAgICBtZXRlcnM6IDEsXG4gICAgbWV0cmVzOiAxLFxuICAgIG1pbGxpbWV0ZXJzOiAxMDAwMDAwLFxuICAgIG1pbGxpbWV0cmVzOiAxMDAwMDAwLFxuICAgIGNlbnRpbWV0ZXJzOiAxMDAwMCxcbiAgICBjZW50aW1ldHJlczogMTAwMDAsXG4gICAga2lsb21ldGVyczogMC4wMDAwMDEsXG4gICAga2lsb21ldHJlczogMC4wMDAwMDEsXG4gICAgYWNyZXM6IDAuMDAwMjQ3MTA1LFxuICAgIG1pbGVzOiAzLjg2ZS03LFxuICAgIHlhcmRzOiAxLjE5NTk5MDA0NixcbiAgICBmZWV0OiAxMC43NjM5MTA0MTcsXG4gICAgaW5jaGVzOiAxNTUwLjAwMzEwMDAwNlxufTtcblxuLyoqXG4gKiBXcmFwcyBhIEdlb0pTT04ge0BsaW5rIEdlb21ldHJ5fSBpbiBhIEdlb0pTT04ge0BsaW5rIEZlYXR1cmV9LlxuICpcbiAqIEBuYW1lIGZlYXR1cmVcbiAqIEBwYXJhbSB7R2VvbWV0cnl9IGdlb21ldHJ5IGlucHV0IGdlb21ldHJ5XG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmV9IGEgR2VvSlNPTiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIGdlb21ldHJ5ID0ge1xuICogICBcInR5cGVcIjogXCJQb2ludFwiLFxuICogICBcImNvb3JkaW5hdGVzXCI6IFsxMTAsIDUwXVxuICogfTtcbiAqXG4gKiB2YXIgZmVhdHVyZSA9IHR1cmYuZmVhdHVyZShnZW9tZXRyeSk7XG4gKlxuICogLy89ZmVhdHVyZVxuICovXG5mdW5jdGlvbiBmZWF0dXJlKGdlb21ldHJ5LCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIGJib3ggPSBvcHRpb25zLmJib3g7XG4gICAgdmFyIGlkID0gb3B0aW9ucy5pZDtcblxuICAgIC8vIFZhbGlkYXRpb25cbiAgICBpZiAoZ2VvbWV0cnkgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdnZW9tZXRyeSBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXMuY29uc3RydWN0b3IgIT09IE9iamVjdCkgdGhyb3cgbmV3IEVycm9yKCdwcm9wZXJ0aWVzIG11c3QgYmUgYW4gT2JqZWN0Jyk7XG4gICAgaWYgKGJib3gpIHZhbGlkYXRlQkJveChiYm94KTtcbiAgICBpZiAoaWQpIHZhbGlkYXRlSWQoaWQpO1xuXG4gICAgLy8gTWFpblxuICAgIHZhciBmZWF0ID0ge3R5cGU6ICdGZWF0dXJlJ307XG4gICAgaWYgKGlkKSBmZWF0LmlkID0gaWQ7XG4gICAgaWYgKGJib3gpIGZlYXQuYmJveCA9IGJib3g7XG4gICAgZmVhdC5wcm9wZXJ0aWVzID0gcHJvcGVydGllcyB8fCB7fTtcbiAgICBmZWF0Lmdlb21ldHJ5ID0gZ2VvbWV0cnk7XG4gICAgcmV0dXJuIGZlYXQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIEdlb0pTT04ge0BsaW5rIEdlb21ldHJ5fSBmcm9tIGEgR2VvbWV0cnkgc3RyaW5nIHR5cGUgJiBjb29yZGluYXRlcy5cbiAqIEZvciBHZW9tZXRyeUNvbGxlY3Rpb24gdHlwZSB1c2UgYGhlbHBlcnMuZ2VvbWV0cnlDb2xsZWN0aW9uYFxuICpcbiAqIEBuYW1lIGdlb21ldHJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBHZW9tZXRyeSBUeXBlXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IGNvb3JkaW5hdGVzIENvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgR2VvbWV0cnlcbiAqIEByZXR1cm5zIHtHZW9tZXRyeX0gYSBHZW9KU09OIEdlb21ldHJ5XG4gKiBAZXhhbXBsZVxuICogdmFyIHR5cGUgPSAnUG9pbnQnO1xuICogdmFyIGNvb3JkaW5hdGVzID0gWzExMCwgNTBdO1xuICpcbiAqIHZhciBnZW9tZXRyeSA9IHR1cmYuZ2VvbWV0cnkodHlwZSwgY29vcmRpbmF0ZXMpO1xuICpcbiAqIC8vPWdlb21ldHJ5XG4gKi9cbmZ1bmN0aW9uIGdlb21ldHJ5KHR5cGUsIGNvb3JkaW5hdGVzLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIGJib3ggPSBvcHRpb25zLmJib3g7XG5cbiAgICAvLyBWYWxpZGF0aW9uXG4gICAgaWYgKCF0eXBlKSB0aHJvdyBuZXcgRXJyb3IoJ3R5cGUgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgaWYgKGJib3gpIHZhbGlkYXRlQkJveChiYm94KTtcblxuICAgIC8vIE1haW5cbiAgICB2YXIgZ2VvbTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdQb2ludCc6IGdlb20gPSBwb2ludChjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGNhc2UgJ0xpbmVTdHJpbmcnOiBnZW9tID0gbGluZVN0cmluZyhjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGNhc2UgJ1BvbHlnb24nOiBnZW9tID0gcG9seWdvbihjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGNhc2UgJ011bHRpUG9pbnQnOiBnZW9tID0gbXVsdGlQb2ludChjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGNhc2UgJ011bHRpTGluZVN0cmluZyc6IGdlb20gPSBtdWx0aUxpbmVTdHJpbmcoY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBjYXNlICdNdWx0aVBvbHlnb24nOiBnZW9tID0gbXVsdGlQb2x5Z29uKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgZGVmYXVsdDogdGhyb3cgbmV3IEVycm9yKHR5cGUgKyAnIGlzIGludmFsaWQnKTtcbiAgICB9XG4gICAgaWYgKGJib3gpIGdlb20uYmJveCA9IGJib3g7XG4gICAgcmV0dXJuIGdlb207XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2ludH0ge0BsaW5rIEZlYXR1cmV9IGZyb20gYSBQb3NpdGlvbi5cbiAqXG4gKiBAbmFtZSBwb2ludFxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjb29yZGluYXRlcyBsb25naXR1ZGUsIGxhdGl0dWRlIHBvc2l0aW9uIChlYWNoIGluIGRlY2ltYWwgZGVncmVlcylcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxQb2ludD59IGEgUG9pbnQgZmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2ludCA9IHR1cmYucG9pbnQoWy03NS4zNDMsIDM5Ljk4NF0pO1xuICpcbiAqIC8vPXBvaW50XG4gKi9cbmZ1bmN0aW9uIHBvaW50KGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb29yZGluYXRlcykpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgIGlmIChjb29yZGluYXRlcy5sZW5ndGggPCAyKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYXQgbGVhc3QgMiBudW1iZXJzIGxvbmcnKTtcbiAgICBpZiAoIWlzTnVtYmVyKGNvb3JkaW5hdGVzWzBdKSB8fCAhaXNOdW1iZXIoY29vcmRpbmF0ZXNbMV0pKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgY29udGFpbiBudW1iZXJzJyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9pbnR9IHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBhbiBBcnJheSBvZiBQb2ludCBjb29yZGluYXRlcy5cbiAqXG4gKiBAbmFtZSBwb2ludHNcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvaW50c1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBUcmFuc2xhdGUgdGhlc2UgcHJvcGVydGllcyB0byBlYWNoIEZlYXR1cmVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248UG9pbnQ+fSBQb2ludCBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvaW50cyA9IHR1cmYucG9pbnRzKFtcbiAqICAgWy03NSwgMzldLFxuICogICBbLTgwLCA0NV0sXG4gKiAgIFstNzgsIDUwXVxuICogXSk7XG4gKlxuICogLy89cG9pbnRzXG4gKi9cbmZ1bmN0aW9uIHBvaW50cyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gQXJyYXknKTtcblxuICAgIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihjb29yZGluYXRlcy5tYXAoZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gcG9pbnQoY29vcmRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9KSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2x5Z29ufSB7QGxpbmsgRmVhdHVyZX0gZnJvbSBhbiBBcnJheSBvZiBMaW5lYXJSaW5ncy5cbiAqXG4gKiBAbmFtZSBwb2x5Z29uXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZWFyUmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxQb2x5Z29uPn0gUG9seWdvbiBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb24gPSB0dXJmLnBvbHlnb24oW1tbLTUsIDUyXSwgWy00LCA1Nl0sIFstMiwgNTFdLCBbLTcsIDU0XSwgWy01LCA1Ml1dXSwgeyBuYW1lOiAncG9seTEnIH0pO1xuICpcbiAqIC8vPXBvbHlnb25cbiAqL1xuZnVuY3Rpb24gcG9seWdvbihjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29vcmRpbmF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHJpbmcgPSBjb29yZGluYXRlc1tpXTtcbiAgICAgICAgaWYgKHJpbmcubGVuZ3RoIDwgNCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFYWNoIExpbmVhclJpbmcgb2YgYSBQb2x5Z29uIG11c3QgaGF2ZSA0IG9yIG1vcmUgUG9zaXRpb25zLicpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcmluZ1tyaW5nLmxlbmd0aCAtIDFdLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBmaXJzdCBwb2ludCBvZiBQb2x5Z29uIGNvbnRhaW5zIHR3byBudW1iZXJzXG4gICAgICAgICAgICBpZiAoaSA9PT0gMCAmJiBqID09PSAwICYmICFpc051bWJlcihyaW5nWzBdWzBdKSB8fCAhaXNOdW1iZXIocmluZ1swXVsxXSkpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBjb250YWluIG51bWJlcnMnKTtcbiAgICAgICAgICAgIGlmIChyaW5nW3JpbmcubGVuZ3RoIC0gMV1bal0gIT09IHJpbmdbMF1bal0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpcnN0IGFuZCBsYXN0IFBvc2l0aW9uIGFyZSBub3QgZXF1aXZhbGVudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ1BvbHlnb24nLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvbHlnb259IHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0gZnJvbSBhbiBBcnJheSBvZiBQb2x5Z29uIGNvb3JkaW5hdGVzLlxuICpcbiAqIEBuYW1lIHBvbHlnb25zXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PEFycmF5PEFycmF5PG51bWJlcj4+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvbHlnb24gY29vcmRpbmF0ZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9uPFBvbHlnb24+fSBQb2x5Z29uIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHlnb25zID0gdHVyZi5wb2x5Z29ucyhbXG4gKiAgIFtbWy01LCA1Ml0sIFstNCwgNTZdLCBbLTIsIDUxXSwgWy03LCA1NF0sIFstNSwgNTJdXV0sXG4gKiAgIFtbWy0xNSwgNDJdLCBbLTE0LCA0Nl0sIFstMTIsIDQxXSwgWy0xNywgNDRdLCBbLTE1LCA0Ml1dXSxcbiAqIF0pO1xuICpcbiAqIC8vPXBvbHlnb25zXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb25zKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb29yZGluYXRlcykpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgIHJldHVybiBwb2x5Z29uKGNvb3JkcywgcHJvcGVydGllcyk7XG4gICAgfSksIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgTGluZVN0cmluZ30ge0BsaW5rIEZlYXR1cmV9IGZyb20gYW4gQXJyYXkgb2YgUG9zaXRpb25zLlxuICpcbiAqIEBuYW1lIGxpbmVTdHJpbmdcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvc2l0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPExpbmVTdHJpbmc+fSBMaW5lU3RyaW5nIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgbGluZXN0cmluZzEgPSB0dXJmLmxpbmVTdHJpbmcoW1stMjQsIDYzXSwgWy0yMywgNjBdLCBbLTI1LCA2NV0sIFstMjAsIDY5XV0sIHtuYW1lOiAnbGluZSAxJ30pO1xuICogdmFyIGxpbmVzdHJpbmcyID0gdHVyZi5saW5lU3RyaW5nKFtbLTE0LCA0M10sIFstMTMsIDQwXSwgWy0xNSwgNDVdLCBbLTEwLCA0OV1dLCB7bmFtZTogJ2xpbmUgMid9KTtcbiAqXG4gKiAvLz1saW5lc3RyaW5nMVxuICogLy89bGluZXN0cmluZzJcbiAqL1xuZnVuY3Rpb24gbGluZVN0cmluZyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoIDwgMikgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIGFycmF5IG9mIHR3byBvciBtb3JlIHBvc2l0aW9ucycpO1xuICAgIC8vIENoZWNrIGlmIGZpcnN0IHBvaW50IG9mIExpbmVTdHJpbmcgY29udGFpbnMgdHdvIG51bWJlcnNcbiAgICBpZiAoIWlzTnVtYmVyKGNvb3JkaW5hdGVzWzBdWzFdKSB8fCAhaXNOdW1iZXIoY29vcmRpbmF0ZXNbMF1bMV0pKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgY29udGFpbiBudW1iZXJzJyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdMaW5lU3RyaW5nJyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBMaW5lU3RyaW5nfSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGZyb20gYW4gQXJyYXkgb2YgTGluZVN0cmluZyBjb29yZGluYXRlcy5cbiAqXG4gKiBAbmFtZSBsaW5lU3RyaW5nc1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgTGluZWFyUmluZ3NcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxMaW5lU3RyaW5nPn0gTGluZVN0cmluZyBGZWF0dXJlQ29sbGVjdGlvblxuICogQGV4YW1wbGVcbiAqIHZhciBsaW5lc3RyaW5ncyA9IHR1cmYubGluZVN0cmluZ3MoW1xuICogICBbWy0yNCwgNjNdLCBbLTIzLCA2MF0sIFstMjUsIDY1XSwgWy0yMCwgNjldXSxcbiAqICAgW1stMTQsIDQzXSwgWy0xMywgNDBdLCBbLTE1LCA0NV0sIFstMTAsIDQ5XV1cbiAqIF0pO1xuICpcbiAqIC8vPWxpbmVzdHJpbmdzXG4gKi9cbmZ1bmN0aW9uIGxpbmVTdHJpbmdzKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb29yZGluYXRlcykpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmVDb2xsZWN0aW9uKGNvb3JkaW5hdGVzLm1hcChmdW5jdGlvbiAoY29vcmRzKSB7XG4gICAgICAgIHJldHVybiBsaW5lU3RyaW5nKGNvb3JkcywgcHJvcGVydGllcyk7XG4gICAgfSksIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFRha2VzIG9uZSBvciBtb3JlIHtAbGluayBGZWF0dXJlfEZlYXR1cmVzfSBhbmQgY3JlYXRlcyBhIHtAbGluayBGZWF0dXJlQ29sbGVjdGlvbn0uXG4gKlxuICogQG5hbWUgZmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7RmVhdHVyZVtdfSBmZWF0dXJlcyBpbnB1dCBmZWF0dXJlc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb259IEZlYXR1cmVDb2xsZWN0aW9uIG9mIEZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogdmFyIGxvY2F0aW9uQSA9IHR1cmYucG9pbnQoWy03NS4zNDMsIDM5Ljk4NF0sIHtuYW1lOiAnTG9jYXRpb24gQSd9KTtcbiAqIHZhciBsb2NhdGlvbkIgPSB0dXJmLnBvaW50KFstNzUuODMzLCAzOS4yODRdLCB7bmFtZTogJ0xvY2F0aW9uIEInfSk7XG4gKiB2YXIgbG9jYXRpb25DID0gdHVyZi5wb2ludChbLTc1LjUzNCwgMzkuMTIzXSwge25hbWU6ICdMb2NhdGlvbiBDJ30pO1xuICpcbiAqIHZhciBjb2xsZWN0aW9uID0gdHVyZi5mZWF0dXJlQ29sbGVjdGlvbihbXG4gKiAgIGxvY2F0aW9uQSxcbiAqICAgbG9jYXRpb25CLFxuICogICBsb2NhdGlvbkNcbiAqIF0pO1xuICpcbiAqIC8vPWNvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZmVhdHVyZUNvbGxlY3Rpb24oZmVhdHVyZXMsIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgYmJveCA9IG9wdGlvbnMuYmJveDtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmlkO1xuXG4gICAgLy8gVmFsaWRhdGlvblxuICAgIGlmICghZmVhdHVyZXMpIHRocm93IG5ldyBFcnJvcignTm8gZmVhdHVyZXMgcGFzc2VkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGZlYXR1cmVzKSkgdGhyb3cgbmV3IEVycm9yKCdmZWF0dXJlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG4gICAgaWYgKGJib3gpIHZhbGlkYXRlQkJveChiYm94KTtcbiAgICBpZiAoaWQpIHZhbGlkYXRlSWQoaWQpO1xuXG4gICAgLy8gTWFpblxuICAgIHZhciBmYyA9IHt0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nfTtcbiAgICBpZiAoaWQpIGZjLmlkID0gaWQ7XG4gICAgaWYgKGJib3gpIGZjLmJib3ggPSBiYm94O1xuICAgIGZjLmZlYXR1cmVzID0gZmVhdHVyZXM7XG4gICAgcmV0dXJuIGZjO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxNdWx0aUxpbmVTdHJpbmc+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIG11bHRpTGluZVN0cmluZ1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIExpbmVTdHJpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TXVsdGlMaW5lU3RyaW5nPn0gYSBNdWx0aUxpbmVTdHJpbmcgZmVhdHVyZVxuICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlMaW5lID0gdHVyZi5tdWx0aUxpbmVTdHJpbmcoW1tbMCwwXSxbMTAsMTBdXV0pO1xuICpcbiAqIC8vPW11bHRpTGluZVxuICovXG5mdW5jdGlvbiBtdWx0aUxpbmVTdHJpbmcoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdNdWx0aUxpbmVTdHJpbmcnLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8TXVsdGlQb2ludD59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgbXVsdGlQb2ludFxuICogQHBhcmFtIHtBcnJheTxBcnJheTxudW1iZXI+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9zaXRpb25zXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8TXVsdGlQb2ludD59IGEgTXVsdGlQb2ludCBmZWF0dXJlXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aVB0ID0gdHVyZi5tdWx0aVBvaW50KFtbMCwwXSxbMTAsMTBdXSk7XG4gKlxuICogLy89bXVsdGlQdFxuICovXG5mdW5jdGlvbiBtdWx0aVBvaW50KGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnTXVsdGlQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZTxNdWx0aVBvbHlnb24+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIG11bHRpUG9seWdvblxuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb2x5Z29uc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPE11bHRpUG9seWdvbj59IGEgbXVsdGlwb2x5Z29uIGZlYXR1cmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBjb29yZGluYXRlcyBhcmUgcGFzc2VkXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpUG9seSA9IHR1cmYubXVsdGlQb2x5Z29uKFtbW1swLDBdLFswLDEwXSxbMTAsMTBdLFsxMCwwXSxbMCwwXV1dXSk7XG4gKlxuICogLy89bXVsdGlQb2x5XG4gKlxuICovXG5mdW5jdGlvbiBtdWx0aVBvbHlnb24oY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdNdWx0aVBvbHlnb24nLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8R2VvbWV0cnlDb2xsZWN0aW9uPn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBnZW9tZXRyeUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXk8R2VvbWV0cnk+fSBnZW9tZXRyaWVzIGFuIGFycmF5IG9mIEdlb0pTT04gR2VvbWV0cmllc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPEdlb21ldHJ5Q29sbGVjdGlvbj59IGEgR2VvSlNPTiBHZW9tZXRyeUNvbGxlY3Rpb24gRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwdCA9IHtcbiAqICAgICBcInR5cGVcIjogXCJQb2ludFwiLFxuICogICAgICAgXCJjb29yZGluYXRlc1wiOiBbMTAwLCAwXVxuICogICAgIH07XG4gKiB2YXIgbGluZSA9IHtcbiAqICAgICBcInR5cGVcIjogXCJMaW5lU3RyaW5nXCIsXG4gKiAgICAgXCJjb29yZGluYXRlc1wiOiBbIFsxMDEsIDBdLCBbMTAyLCAxXSBdXG4gKiAgIH07XG4gKiB2YXIgY29sbGVjdGlvbiA9IHR1cmYuZ2VvbWV0cnlDb2xsZWN0aW9uKFtwdCwgbGluZV0pO1xuICpcbiAqIC8vPWNvbGxlY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2VvbWV0cnlDb2xsZWN0aW9uKGdlb21ldHJpZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWdlb21ldHJpZXMpIHRocm93IG5ldyBFcnJvcignZ2VvbWV0cmllcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShnZW9tZXRyaWVzKSkgdGhyb3cgbmV3IEVycm9yKCdnZW9tZXRyaWVzIG11c3QgYmUgYW4gQXJyYXknKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ0dlb21ldHJ5Q29sbGVjdGlvbicsXG4gICAgICAgIGdlb21ldHJpZXM6IGdlb21ldHJpZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBSb3VuZCBudW1iZXIgdG8gcHJlY2lzaW9uXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG51bSBOdW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPTBdIFByZWNpc2lvblxuICogQHJldHVybnMge251bWJlcn0gcm91bmRlZCBudW1iZXJcbiAqIEBleGFtcGxlXG4gKiB0dXJmLnJvdW5kKDEyMC40MzIxKVxuICogLy89MTIwXG4gKlxuICogdHVyZi5yb3VuZCgxMjAuNDMyMSwgMilcbiAqIC8vPTEyMC40M1xuICovXG5mdW5jdGlvbiByb3VuZChudW0sIHByZWNpc2lvbikge1xuICAgIGlmIChudW0gPT09IHVuZGVmaW5lZCB8fCBudW0gPT09IG51bGwgfHwgaXNOYU4obnVtKSkgdGhyb3cgbmV3IEVycm9yKCdudW0gaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAocHJlY2lzaW9uICYmICEocHJlY2lzaW9uID49IDApKSB0aHJvdyBuZXcgRXJyb3IoJ3ByZWNpc2lvbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gICAgdmFyIG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uIHx8IDApO1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG51bSAqIG11bHRpcGxpZXIpIC8gbXVsdGlwbGllcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIHJhZGlhbnMgdG8gYSBtb3JlIGZyaWVuZGx5IHVuaXQuXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBraWxvbWV0ZXJzLCBjZW50aW1ldGVycywgZmVldFxuICpcbiAqIEBuYW1lIHJhZGlhbnNUb0xlbmd0aFxuICogQHBhcmFtIHtudW1iZXJ9IHJhZGlhbnMgaW4gcmFkaWFucyBhY3Jvc3MgdGhlIHNwaGVyZVxuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz0na2lsb21ldGVycyddIGNhbiBiZSBkZWdyZWVzLCByYWRpYW5zLCBtaWxlcywgb3Iga2lsb21ldGVycyBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsIG1ldGVycywga2lsb21ldHJlcywga2lsb21ldGVycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IGRpc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIHJhZGlhbnNUb0xlbmd0aChyYWRpYW5zLCB1bml0cykge1xuICAgIGlmIChyYWRpYW5zID09PSB1bmRlZmluZWQgfHwgcmFkaWFucyA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdyYWRpYW5zIGlzIHJlcXVpcmVkJyk7XG5cbiAgICBpZiAodW5pdHMgJiYgdHlwZW9mIHVuaXRzICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVycm9yKCd1bml0cyBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgdmFyIGZhY3RvciA9IGZhY3RvcnNbdW5pdHMgfHwgJ2tpbG9tZXRlcnMnXTtcbiAgICBpZiAoIWZhY3RvcikgdGhyb3cgbmV3IEVycm9yKHVuaXRzICsgJyB1bml0cyBpcyBpbnZhbGlkJyk7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBmYWN0b3I7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSBhIHJlYWwtd29ybGQgdW5pdCBpbnRvIHJhZGlhbnNcbiAqIFZhbGlkIHVuaXRzOiBtaWxlcywgbmF1dGljYWxtaWxlcywgaW5jaGVzLCB5YXJkcywgbWV0ZXJzLCBtZXRyZXMsIGtpbG9tZXRlcnMsIGNlbnRpbWV0ZXJzLCBmZWV0XG4gKlxuICogQG5hbWUgbGVuZ3RoVG9SYWRpYW5zXG4gKiBAcGFyYW0ge251bWJlcn0gZGlzdGFuY2UgaW4gcmVhbCB1bml0c1xuICogQHBhcmFtIHtzdHJpbmd9IFt1bml0cz0na2lsb21ldGVycyddIGNhbiBiZSBkZWdyZWVzLCByYWRpYW5zLCBtaWxlcywgb3Iga2lsb21ldGVycyBpbmNoZXMsIHlhcmRzLCBtZXRyZXMsIG1ldGVycywga2lsb21ldHJlcywga2lsb21ldGVycy5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IHJhZGlhbnNcbiAqL1xuZnVuY3Rpb24gbGVuZ3RoVG9SYWRpYW5zKGRpc3RhbmNlLCB1bml0cykge1xuICAgIGlmIChkaXN0YW5jZSA9PT0gdW5kZWZpbmVkIHx8IGRpc3RhbmNlID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ2Rpc3RhbmNlIGlzIHJlcXVpcmVkJyk7XG5cbiAgICBpZiAodW5pdHMgJiYgdHlwZW9mIHVuaXRzICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IEVycm9yKCd1bml0cyBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gICAgdmFyIGZhY3RvciA9IGZhY3RvcnNbdW5pdHMgfHwgJ2tpbG9tZXRlcnMnXTtcbiAgICBpZiAoIWZhY3RvcikgdGhyb3cgbmV3IEVycm9yKHVuaXRzICsgJyB1bml0cyBpcyBpbnZhbGlkJyk7XG4gICAgcmV0dXJuIGRpc3RhbmNlIC8gZmFjdG9yO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBkaXN0YW5jZSBtZWFzdXJlbWVudCAoYXNzdW1pbmcgYSBzcGhlcmljYWwgRWFydGgpIGZyb20gYSByZWFsLXdvcmxkIHVuaXQgaW50byBkZWdyZWVzXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBjZW50aW1ldGVycywga2lsb21ldHJlcywgZmVldFxuICpcbiAqIEBuYW1lIGxlbmd0aFRvRGVncmVlc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIGluIHJlYWwgdW5pdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9J2tpbG9tZXRlcnMnXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIG9yIGtpbG9tZXRlcnMgaW5jaGVzLCB5YXJkcywgbWV0cmVzLCBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBkZWdyZWVzXG4gKi9cbmZ1bmN0aW9uIGxlbmd0aFRvRGVncmVlcyhkaXN0YW5jZSwgdW5pdHMpIHtcbiAgICByZXR1cm4gcmFkaWFuc1RvRGVncmVlcyhsZW5ndGhUb1JhZGlhbnMoZGlzdGFuY2UsIHVuaXRzKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW55IGJlYXJpbmcgYW5nbGUgZnJvbSB0aGUgbm9ydGggbGluZSBkaXJlY3Rpb24gKHBvc2l0aXZlIGNsb2Nrd2lzZSlcbiAqIGFuZCByZXR1cm5zIGFuIGFuZ2xlIGJldHdlZW4gMC0zNjAgZGVncmVlcyAocG9zaXRpdmUgY2xvY2t3aXNlKSwgMCBiZWluZyB0aGUgbm9ydGggbGluZVxuICpcbiAqIEBuYW1lIGJlYXJpbmdUb0F6aW11dGhcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWFyaW5nIGFuZ2xlLCBiZXR3ZWVuIC0xODAgYW5kICsxODAgZGVncmVlc1xuICogQHJldHVybnMge251bWJlcn0gYW5nbGUgYmV0d2VlbiAwIGFuZCAzNjAgZGVncmVlc1xuICovXG5mdW5jdGlvbiBiZWFyaW5nVG9BemltdXRoKGJlYXJpbmcpIHtcbiAgICBpZiAoYmVhcmluZyA9PT0gbnVsbCB8fCBiZWFyaW5nID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignYmVhcmluZyBpcyByZXF1aXJlZCcpO1xuXG4gICAgdmFyIGFuZ2xlID0gYmVhcmluZyAlIDM2MDtcbiAgICBpZiAoYW5nbGUgPCAwKSBhbmdsZSArPSAzNjA7XG4gICAgcmV0dXJuIGFuZ2xlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFuZ2xlIGluIHJhZGlhbnMgdG8gZGVncmVlc1xuICpcbiAqIEBuYW1lIHJhZGlhbnNUb0RlZ3JlZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIGFuZ2xlIGluIHJhZGlhbnNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGRlZ3JlZXMgYmV0d2VlbiAwIGFuZCAzNjAgZGVncmVlc1xuICovXG5mdW5jdGlvbiByYWRpYW5zVG9EZWdyZWVzKHJhZGlhbnMpIHtcbiAgICBpZiAocmFkaWFucyA9PT0gbnVsbCB8fCByYWRpYW5zID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcigncmFkaWFucyBpcyByZXF1aXJlZCcpO1xuXG4gICAgdmFyIGRlZ3JlZXMgPSByYWRpYW5zICUgKDIgKiBNYXRoLlBJKTtcbiAgICByZXR1cm4gZGVncmVlcyAqIDE4MCAvIE1hdGguUEk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYW5nbGUgaW4gZGVncmVlcyB0byByYWRpYW5zXG4gKlxuICogQG5hbWUgZGVncmVlc1RvUmFkaWFuc1xuICogQHBhcmFtIHtudW1iZXJ9IGRlZ3JlZXMgYW5nbGUgYmV0d2VlbiAwIGFuZCAzNjAgZGVncmVlc1xuICogQHJldHVybnMge251bWJlcn0gYW5nbGUgaW4gcmFkaWFuc1xuICovXG5mdW5jdGlvbiBkZWdyZWVzVG9SYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICBpZiAoZGVncmVlcyA9PT0gbnVsbCB8fCBkZWdyZWVzID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignZGVncmVlcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgdmFyIHJhZGlhbnMgPSBkZWdyZWVzICUgMzYwO1xuICAgIHJldHVybiByYWRpYW5zICogTWF0aC5QSSAvIDE4MDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGxlbmd0aCB0byB0aGUgcmVxdWVzdGVkIHVuaXQuXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBraWxvbWV0ZXJzLCBjZW50aW1ldGVycywgZmVldFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggdG8gYmUgY29udmVydGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gb3JpZ2luYWxVbml0IG9mIHRoZSBsZW5ndGhcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmluYWxVbml0PSdraWxvbWV0ZXJzJ10gcmV0dXJuZWQgdW5pdFxuICogQHJldHVybnMge251bWJlcn0gdGhlIGNvbnZlcnRlZCBsZW5ndGhcbiAqL1xuZnVuY3Rpb24gY29udmVydExlbmd0aChsZW5ndGgsIG9yaWdpbmFsVW5pdCwgZmluYWxVbml0KSB7XG4gICAgaWYgKGxlbmd0aCA9PT0gbnVsbCB8fCBsZW5ndGggPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdsZW5ndGggaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIShsZW5ndGggPj0gMCkpIHRocm93IG5ldyBFcnJvcignbGVuZ3RoIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcblxuICAgIHJldHVybiByYWRpYW5zVG9MZW5ndGgobGVuZ3RoVG9SYWRpYW5zKGxlbmd0aCwgb3JpZ2luYWxVbml0KSwgZmluYWxVbml0IHx8ICdraWxvbWV0ZXJzJyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBhcmVhIHRvIHRoZSByZXF1ZXN0ZWQgdW5pdC5cbiAqIFZhbGlkIHVuaXRzOiBraWxvbWV0ZXJzLCBraWxvbWV0cmVzLCBtZXRlcnMsIG1ldHJlcywgY2VudGltZXRyZXMsIG1pbGxpbWV0ZXJzLCBhY3JlcywgbWlsZXMsIHlhcmRzLCBmZWV0LCBpbmNoZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhcmVhIHRvIGJlIGNvbnZlcnRlZFxuICogQHBhcmFtIHtzdHJpbmd9IFtvcmlnaW5hbFVuaXQ9J21ldGVycyddIG9mIHRoZSBkaXN0YW5jZVxuICogQHBhcmFtIHtzdHJpbmd9IFtmaW5hbFVuaXQ9J2tpbG9tZXRlcnMnXSByZXR1cm5lZCB1bml0XG4gKiBAcmV0dXJucyB7bnVtYmVyfSB0aGUgY29udmVydGVkIGRpc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRBcmVhKGFyZWEsIG9yaWdpbmFsVW5pdCwgZmluYWxVbml0KSB7XG4gICAgaWYgKGFyZWEgPT09IG51bGwgfHwgYXJlYSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2FyZWEgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIShhcmVhID49IDApKSB0aHJvdyBuZXcgRXJyb3IoJ2FyZWEgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuXG4gICAgdmFyIHN0YXJ0RmFjdG9yID0gYXJlYUZhY3RvcnNbb3JpZ2luYWxVbml0IHx8ICdtZXRlcnMnXTtcbiAgICBpZiAoIXN0YXJ0RmFjdG9yKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgb3JpZ2luYWwgdW5pdHMnKTtcblxuICAgIHZhciBmaW5hbEZhY3RvciA9IGFyZWFGYWN0b3JzW2ZpbmFsVW5pdCB8fCAna2lsb21ldGVycyddO1xuICAgIGlmICghZmluYWxGYWN0b3IpIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmaW5hbCB1bml0cycpO1xuXG4gICAgcmV0dXJuIChhcmVhIC8gc3RhcnRGYWN0b3IpICogZmluYWxGYWN0b3I7XG59XG5cbi8qKlxuICogaXNOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IG51bSBOdW1iZXIgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogdHVyZi5pc051bWJlcigxMjMpXG4gKiAvLz10cnVlXG4gKiB0dXJmLmlzTnVtYmVyKCdmb28nKVxuICogLy89ZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNOdW1iZXIobnVtKSB7XG4gICAgcmV0dXJuICFpc05hTihudW0pICYmIG51bSAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShudW0pO1xufVxuXG4vKipcbiAqIGlzT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSBpbnB1dCB2YXJpYWJsZSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiB0dXJmLmlzT2JqZWN0KHtlbGV2YXRpb246IDEwfSlcbiAqIC8vPXRydWVcbiAqIHR1cmYuaXNPYmplY3QoJ2ZvbycpXG4gKiAvLz1mYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgIHJldHVybiAoISFpbnB1dCkgJiYgKGlucHV0LmNvbnN0cnVjdG9yID09PSBPYmplY3QpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIEJCb3hcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBiYm94IEJCb3ggdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHRocm93cyBFcnJvciBpZiBCQm94IGlzIG5vdCB2YWxpZFxuICogQGV4YW1wbGVcbiAqIHZhbGlkYXRlQkJveChbLTE4MCwgLTQwLCAxMTAsIDUwXSlcbiAqIC8vPU9LXG4gKiB2YWxpZGF0ZUJCb3goWy0xODAsIC00MF0pXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVCQm94KCdGb28nKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveCg1KVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveChudWxsKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveCh1bmRlZmluZWQpXG4gKiAvLz1FcnJvclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJCb3goYmJveCkge1xuICAgIGlmICghYmJveCkgdGhyb3cgbmV3IEVycm9yKCdiYm94IGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGJib3gpKSB0aHJvdyBuZXcgRXJyb3IoJ2Jib3ggbXVzdCBiZSBhbiBBcnJheScpO1xuICAgIGlmIChiYm94Lmxlbmd0aCAhPT0gNCAmJiBiYm94Lmxlbmd0aCAhPT0gNikgdGhyb3cgbmV3IEVycm9yKCdiYm94IG11c3QgYmUgYW4gQXJyYXkgb2YgNCBvciA2IG51bWJlcnMnKTtcbiAgICBiYm94LmZvckVhY2goZnVuY3Rpb24gKG51bSkge1xuICAgICAgICBpZiAoIWlzTnVtYmVyKG51bSkpIHRocm93IG5ldyBFcnJvcignYmJveCBtdXN0IG9ubHkgY29udGFpbiBudW1iZXJzJyk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgSWRcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpZCBJZCB0byB2YWxpZGF0ZVxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAdGhyb3dzIEVycm9yIGlmIElkIGlzIG5vdCB2YWxpZFxuICogQGV4YW1wbGVcbiAqIHZhbGlkYXRlSWQoWy0xODAsIC00MCwgMTEwLCA1MF0pXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZChbLTE4MCwgLTQwXSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUlkKCdGb28nKVxuICogLy89T0tcbiAqIHZhbGlkYXRlSWQoNSlcbiAqIC8vPU9LXG4gKiB2YWxpZGF0ZUlkKG51bGwpXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZCh1bmRlZmluZWQpXG4gKiAvLz1FcnJvclxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUlkKGlkKSB7XG4gICAgaWYgKCFpZCkgdGhyb3cgbmV3IEVycm9yKCdpZCBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChbJ3N0cmluZycsICdudW1iZXInXS5pbmRleE9mKHR5cGVvZiBpZCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ2lkIG11c3QgYmUgYSBudW1iZXIgb3IgYSBzdHJpbmcnKTtcbn1cblxuLy8gRGVwcmVjYXRlZCBtZXRob2RzXG5mdW5jdGlvbiByYWRpYW5zMmRlZ3JlZXMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgcmFkaWFuc1RvRGVncmVlc2AnKTtcbn1cblxuZnVuY3Rpb24gZGVncmVlczJyYWRpYW5zKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRlZ3JlZXNUb1JhZGlhbnNgJyk7XG59XG5cbmZ1bmN0aW9uIGRpc3RhbmNlVG9EZWdyZWVzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGxlbmd0aFRvRGVncmVlc2AnKTtcbn1cblxuZnVuY3Rpb24gZGlzdGFuY2VUb1JhZGlhbnMoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgbGVuZ3RoVG9SYWRpYW5zYCcpO1xufVxuXG5mdW5jdGlvbiByYWRpYW5zVG9EaXN0YW5jZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGByYWRpYW5zVG9MZW5ndGhgJyk7XG59XG5cbmZ1bmN0aW9uIGJlYXJpbmdUb0FuZ2xlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGJlYXJpbmdUb0F6aW11dGhgJyk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREaXN0YW5jZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBjb252ZXJ0TGVuZ3RoYCcpO1xufVxuXG5leHBvcnQgeyBlYXJ0aFJhZGl1cywgZmFjdG9ycywgdW5pdHNGYWN0b3JzLCBhcmVhRmFjdG9ycywgZmVhdHVyZSwgZ2VvbWV0cnksIHBvaW50LCBwb2ludHMsIHBvbHlnb24sIHBvbHlnb25zLCBsaW5lU3RyaW5nLCBsaW5lU3RyaW5ncywgZmVhdHVyZUNvbGxlY3Rpb24sIG11bHRpTGluZVN0cmluZywgbXVsdGlQb2ludCwgbXVsdGlQb2x5Z29uLCBnZW9tZXRyeUNvbGxlY3Rpb24sIHJvdW5kLCByYWRpYW5zVG9MZW5ndGgsIGxlbmd0aFRvUmFkaWFucywgbGVuZ3RoVG9EZWdyZWVzLCBiZWFyaW5nVG9BemltdXRoLCByYWRpYW5zVG9EZWdyZWVzLCBkZWdyZWVzVG9SYWRpYW5zLCBjb252ZXJ0TGVuZ3RoLCBjb252ZXJ0QXJlYSwgaXNOdW1iZXIsIGlzT2JqZWN0LCB2YWxpZGF0ZUJCb3gsIHZhbGlkYXRlSWQsIHJhZGlhbnMyZGVncmVlcywgZGVncmVlczJyYWRpYW5zLCBkaXN0YW5jZVRvRGVncmVlcywgZGlzdGFuY2VUb1JhZGlhbnMsIHJhZGlhbnNUb0Rpc3RhbmNlLCBiZWFyaW5nVG9BbmdsZSwgY29udmVydERpc3RhbmNlIH07XG4iLCJpbXBvcnQgeyBjb252ZXJ0TGVuZ3RoLCBkZWdyZWVzVG9SYWRpYW5zLCBlYXJ0aFJhZGl1cywgaXNPYmplY3QsIHBvaW50IH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgeyBnZXRDb29yZCB9IGZyb20gJ0B0dXJmL2ludmFyaWFudCc7XG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1JodW1iX2xpbmVcbi8qKlxuICogUmV0dXJucyB0aGUgZGVzdGluYXRpb24ge0BsaW5rIFBvaW50fSBoYXZpbmcgdHJhdmVsbGVkIHRoZSBnaXZlbiBkaXN0YW5jZSBhbG9uZyBhIFJodW1iIGxpbmUgZnJvbSB0aGVcbiAqIG9yaWdpbiBQb2ludCB3aXRoIHRoZSAodmFyYW50KSBnaXZlbiBiZWFyaW5nLlxuICpcbiAqIEBuYW1lIHJodW1iRGVzdGluYXRpb25cbiAqIEBwYXJhbSB7Q29vcmR9IG9yaWdpbiBzdGFydGluZyBwb2ludFxuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIGRpc3RhbmNlIGZyb20gdGhlIHN0YXJ0aW5nIHBvaW50XG4gKiBAcGFyYW0ge251bWJlcn0gYmVhcmluZyB2YXJhbnQgYmVhcmluZyBhbmdsZSByYW5naW5nIGZyb20gLTE4MCB0byAxODAgZGVncmVlcyBmcm9tIG5vcnRoXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy51bml0cz0na2lsb21ldGVycyddIGNhbiBiZSBkZWdyZWVzLCByYWRpYW5zLCBtaWxlcywgb3Iga2lsb21ldGVyc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnByb3BlcnRpZXM9e31dIHRyYW5zbGF0ZSBwcm9wZXJ0aWVzIHRvIGRlc3RpbmF0aW9uIHBvaW50XG4gKiBAcmV0dXJucyB7RmVhdHVyZTxQb2ludD59IERlc3RpbmF0aW9uIHBvaW50LlxuICogQGV4YW1wbGVcbiAqIHZhciBwdCA9IHR1cmYucG9pbnQoWy03NS4zNDMsIDM5Ljk4NF0sIHtcIm1hcmtlci1jb2xvclwiOiBcIkYwMFwifSk7XG4gKiB2YXIgZGlzdGFuY2UgPSA1MDtcbiAqIHZhciBiZWFyaW5nID0gOTA7XG4gKiB2YXIgb3B0aW9ucyA9IHt1bml0czogJ21pbGVzJ307XG4gKlxuICogdmFyIGRlc3RpbmF0aW9uID0gdHVyZi5yaHVtYkRlc3RpbmF0aW9uKHB0LCBkaXN0YW5jZSwgYmVhcmluZywgb3B0aW9ucyk7XG4gKlxuICogLy9hZGRUb01hcFxuICogdmFyIGFkZFRvTWFwID0gW3B0LCBkZXN0aW5hdGlvbl1cbiAqIGRlc3RpbmF0aW9uLnByb3BlcnRpZXNbJ21hcmtlci1jb2xvciddID0gJyMwMEYnO1xuICovXG5mdW5jdGlvbiByaHVtYkRlc3RpbmF0aW9uKG9yaWdpbiwgZGlzdGFuY2UsIGJlYXJpbmcsIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgdW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuICAgIHZhciBwcm9wZXJ0aWVzID0gb3B0aW9ucy5wcm9wZXJ0aWVzO1xuXG4gICAgLy8gdmFsaWRhdGlvblxuICAgIGlmICghb3JpZ2luKSB0aHJvdyBuZXcgRXJyb3IoJ29yaWdpbiBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChkaXN0YW5jZSA9PT0gdW5kZWZpbmVkIHx8IGRpc3RhbmNlID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ2Rpc3RhbmNlIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKGJlYXJpbmcgPT09IHVuZGVmaW5lZCB8fCBiZWFyaW5nID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoJ2JlYXJpbmcgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIShkaXN0YW5jZSA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKCdkaXN0YW5jZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwJyk7XG5cbiAgICB2YXIgZGlzdGFuY2VJbk1ldGVycyA9IGNvbnZlcnRMZW5ndGgoZGlzdGFuY2UsIHVuaXRzLCAnbWV0ZXJzJyk7XG4gICAgdmFyIGNvb3JkcyA9IGdldENvb3JkKG9yaWdpbik7XG4gICAgdmFyIGRlc3RpbmF0aW9uID0gY2FsY3VsYXRlUmh1bWJEZXN0aW5hdGlvbihjb29yZHMsIGRpc3RhbmNlSW5NZXRlcnMsIGJlYXJpbmcpO1xuXG4gICAgLy8gY29tcGVuc2F0ZSB0aGUgY3Jvc3Npbmcgb2YgdGhlIDE4MHRoIG1lcmlkaWFuIChodHRwczovL21hY3dyaWdodC5vcmcvMjAxNi8wOS8yNi90aGUtMTgwdGgtbWVyaWRpYW4uaHRtbClcbiAgICAvLyBzb2x1dGlvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXBib3gvbWFwYm94LWdsLWpzL2lzc3Vlcy8zMjUwI2lzc3VlY29tbWVudC0yOTQ4ODc2NzhcbiAgICBkZXN0aW5hdGlvblswXSArPSAoZGVzdGluYXRpb25bMF0gLSBjb29yZHNbMF0gPiAxODApID8gLTM2MCA6IChjb29yZHNbMF0gLSBkZXN0aW5hdGlvblswXSA+IDE4MCkgPyAzNjAgOiAwO1xuICAgIHJldHVybiBwb2ludChkZXN0aW5hdGlvbiwgcHJvcGVydGllcyk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVzdGluYXRpb24gcG9pbnQgaGF2aW5nIHRyYXZlbGxlZCBhbG9uZyBhIHJodW1iIGxpbmUgZnJvbSBvcmlnaW4gcG9pbnQgdGhlIGdpdmVuXG4gKiBkaXN0YW5jZSBvbiB0aGUgIGdpdmVuIGJlYXJpbmcuXG4gKiBBZGFwdGVkIGZyb20gR2VvZGVzeTogaHR0cDovL3d3dy5tb3ZhYmxlLXR5cGUuY28udWsvc2NyaXB0cy9sYXRsb25nLmh0bWwjcmh1bWJsaW5lc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gICB7QXJyYXk8bnVtYmVyPn0gb3JpZ2luIC0gcG9pbnRcbiAqIEBwYXJhbSAgIHtudW1iZXJ9IGRpc3RhbmNlIC0gRGlzdGFuY2UgdHJhdmVsbGVkLCBpbiBzYW1lIHVuaXRzIGFzIGVhcnRoIHJhZGl1cyAoZGVmYXVsdDogbWV0cmVzKS5cbiAqIEBwYXJhbSAgIHtudW1iZXJ9IGJlYXJpbmcgLSBCZWFyaW5nIGluIGRlZ3JlZXMgZnJvbSBub3J0aC5cbiAqIEBwYXJhbSAgIHtudW1iZXJ9IFtyYWRpdXM9NjM3MWUzXSAtIChNZWFuKSByYWRpdXMgb2YgZWFydGggKGRlZmF1bHRzIHRvIHJhZGl1cyBpbiBtZXRyZXMpLlxuICogQHJldHVybnMge0FycmF5PG51bWJlcj59IERlc3RpbmF0aW9uIHBvaW50LlxuICovXG5mdW5jdGlvbiBjYWxjdWxhdGVSaHVtYkRlc3RpbmF0aW9uKG9yaWdpbiwgZGlzdGFuY2UsIGJlYXJpbmcsIHJhZGl1cykge1xuICAgIC8vIM+GID0+IHBoaVxuICAgIC8vIM67ID0+IGxhbWJkYVxuICAgIC8vIM+IID0+IHBzaVxuICAgIC8vIM6UID0+IERlbHRhXG4gICAgLy8gzrQgPT4gZGVsdGFcbiAgICAvLyDOuCA9PiB0aGV0YVxuXG4gICAgcmFkaXVzID0gKHJhZGl1cyA9PT0gdW5kZWZpbmVkKSA/IGVhcnRoUmFkaXVzIDogTnVtYmVyKHJhZGl1cyk7XG5cbiAgICB2YXIgZGVsdGEgPSBkaXN0YW5jZSAvIHJhZGl1czsgLy8gYW5ndWxhciBkaXN0YW5jZSBpbiByYWRpYW5zXG4gICAgdmFyIGxhbWJkYTEgPSBvcmlnaW5bMF0gKiBNYXRoLlBJIC8gMTgwOyAvLyB0byByYWRpYW5zLCBidXQgd2l0aG91dCBub3JtYWxpemUgdG8g8J2ci1xuICAgIHZhciBwaGkxID0gZGVncmVlc1RvUmFkaWFucyhvcmlnaW5bMV0pO1xuICAgIHZhciB0aGV0YSA9IGRlZ3JlZXNUb1JhZGlhbnMoYmVhcmluZyk7XG5cbiAgICB2YXIgRGVsdGFQaGkgPSBkZWx0YSAqIE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgcGhpMiA9IHBoaTEgKyBEZWx0YVBoaTtcblxuICAgIC8vIGNoZWNrIGZvciBzb21lIGRhZnQgYnVnZ2VyIGdvaW5nIHBhc3QgdGhlIHBvbGUsIG5vcm1hbGlzZSBsYXRpdHVkZSBpZiBzb1xuICAgIGlmIChNYXRoLmFicyhwaGkyKSA+IE1hdGguUEkgLyAyKSBwaGkyID0gcGhpMiA+IDAgPyBNYXRoLlBJIC0gcGhpMiA6IC1NYXRoLlBJIC0gcGhpMjtcblxuICAgIHZhciBEZWx0YVBzaSA9IE1hdGgubG9nKE1hdGgudGFuKHBoaTIgLyAyICsgTWF0aC5QSSAvIDQpIC8gTWF0aC50YW4ocGhpMSAvIDIgKyBNYXRoLlBJIC8gNCkpO1xuICAgIHZhciBxID0gTWF0aC5hYnMoRGVsdGFQc2kpID4gMTBlLTEyID8gRGVsdGFQaGkgLyBEZWx0YVBzaSA6IE1hdGguY29zKHBoaTEpOyAvLyBFLVcgY291cnNlIGJlY29tZXMgaWxsLWNvbmRpdGlvbmVkIHdpdGggMC8wXG5cbiAgICB2YXIgRGVsdGFMYW1iZGEgPSBkZWx0YSAqIE1hdGguc2luKHRoZXRhKSAvIHE7XG4gICAgdmFyIGxhbWJkYTIgPSBsYW1iZGExICsgRGVsdGFMYW1iZGE7XG5cbiAgICByZXR1cm4gWygobGFtYmRhMiAqIDE4MCAvIE1hdGguUEkpICsgNTQwKSAlIDM2MCAtIDE4MCwgcGhpMiAqIDE4MCAvIE1hdGguUEldOyAvLyBub3JtYWxpc2UgdG8g4oiSMTgwLi4rMTgwwrBcbn1cblxuZXhwb3J0IGRlZmF1bHQgcmh1bWJEZXN0aW5hdGlvbjtcbiIsImltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5cbi8qKlxuICogVW53cmFwIGEgY29vcmRpbmF0ZSBmcm9tIGEgUG9pbnQgRmVhdHVyZSwgR2VvbWV0cnkgb3IgYSBzaW5nbGUgY29vcmRpbmF0ZS5cbiAqXG4gKiBAbmFtZSBnZXRDb29yZFxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fEdlb21ldHJ5PFBvaW50PnxGZWF0dXJlPFBvaW50Pn0gY29vcmQgR2VvSlNPTiBQb2ludCBvciBhbiBBcnJheSBvZiBudW1iZXJzXG4gKiBAcmV0dXJucyB7QXJyYXk8bnVtYmVyPn0gY29vcmRpbmF0ZXNcbiAqIEBleGFtcGxlXG4gKiB2YXIgcHQgPSB0dXJmLnBvaW50KFsxMCwgMTBdKTtcbiAqXG4gKiB2YXIgY29vcmQgPSB0dXJmLmdldENvb3JkKHB0KTtcbiAqIC8vPSBbMTAsIDEwXVxuICovXG5mdW5jdGlvbiBnZXRDb29yZChjb29yZCkge1xuICAgIGlmICghY29vcmQpIHRocm93IG5ldyBFcnJvcignY29vcmQgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoY29vcmQudHlwZSA9PT0gJ0ZlYXR1cmUnICYmIGNvb3JkLmdlb21ldHJ5ICE9PSBudWxsICYmIGNvb3JkLmdlb21ldHJ5LnR5cGUgPT09ICdQb2ludCcpIHJldHVybiBjb29yZC5nZW9tZXRyeS5jb29yZGluYXRlcztcbiAgICBpZiAoY29vcmQudHlwZSA9PT0gJ1BvaW50JykgcmV0dXJuIGNvb3JkLmNvb3JkaW5hdGVzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvb3JkKSAmJiBjb29yZC5sZW5ndGggPj0gMiAmJiBjb29yZFswXS5sZW5ndGggPT09IHVuZGVmaW5lZCAmJiBjb29yZFsxXS5sZW5ndGggPT09IHVuZGVmaW5lZCkgcmV0dXJuIGNvb3JkO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb29yZCBtdXN0IGJlIEdlb0pTT04gUG9pbnQgb3IgYW4gQXJyYXkgb2YgbnVtYmVycycpO1xufVxuXG4vKipcbiAqIFVud3JhcCBjb29yZGluYXRlcyBmcm9tIGEgRmVhdHVyZSwgR2VvbWV0cnkgT2JqZWN0IG9yIGFuIEFycmF5XG4gKlxuICogQG5hbWUgZ2V0Q29vcmRzXG4gKiBAcGFyYW0ge0FycmF5PGFueT58R2VvbWV0cnl8RmVhdHVyZX0gY29vcmRzIEZlYXR1cmUsIEdlb21ldHJ5IE9iamVjdCBvciBhbiBBcnJheVxuICogQHJldHVybnMge0FycmF5PGFueT59IGNvb3JkaW5hdGVzXG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHkgPSB0dXJmLnBvbHlnb24oW1tbMTE5LjMyLCAtOC43XSwgWzExOS41NSwgLTguNjldLCBbMTE5LjUxLCAtOC41NF0sIFsxMTkuMzIsIC04LjddXV0pO1xuICpcbiAqIHZhciBjb29yZHMgPSB0dXJmLmdldENvb3Jkcyhwb2x5KTtcbiAqIC8vPSBbW1sxMTkuMzIsIC04LjddLCBbMTE5LjU1LCAtOC42OV0sIFsxMTkuNTEsIC04LjU0XSwgWzExOS4zMiwgLTguN11dXVxuICovXG5mdW5jdGlvbiBnZXRDb29yZHMoY29vcmRzKSB7XG4gICAgaWYgKCFjb29yZHMpIHRocm93IG5ldyBFcnJvcignY29vcmRzIGlzIHJlcXVpcmVkJyk7XG5cbiAgICAvLyBGZWF0dXJlXG4gICAgaWYgKGNvb3Jkcy50eXBlID09PSAnRmVhdHVyZScgJiYgY29vcmRzLmdlb21ldHJ5ICE9PSBudWxsKSByZXR1cm4gY29vcmRzLmdlb21ldHJ5LmNvb3JkaW5hdGVzO1xuXG4gICAgLy8gR2VvbWV0cnlcbiAgICBpZiAoY29vcmRzLmNvb3JkaW5hdGVzKSByZXR1cm4gY29vcmRzLmNvb3JkaW5hdGVzO1xuXG4gICAgLy8gQXJyYXkgb2YgbnVtYmVyc1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNvb3JkcykpIHJldHVybiBjb29yZHM7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkcyBtdXN0IGJlIEdlb0pTT04gRmVhdHVyZSwgR2VvbWV0cnkgT2JqZWN0IG9yIGFuIEFycmF5Jyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGNvb3JkaW5hdGVzIGNvbnRhaW5zIGEgbnVtYmVyXG4gKlxuICogQG5hbWUgY29udGFpbnNOdW1iZXJcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gY29vcmRpbmF0ZXMgR2VvSlNPTiBDb29yZGluYXRlc1xuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgQXJyYXkgY29udGFpbnMgYSBudW1iZXJcbiAqL1xuZnVuY3Rpb24gY29udGFpbnNOdW1iZXIoY29vcmRpbmF0ZXMpIHtcbiAgICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoID4gMSAmJiBpc051bWJlcihjb29yZGluYXRlc1swXSkgJiYgaXNOdW1iZXIoY29vcmRpbmF0ZXNbMV0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzWzBdKSAmJiBjb29yZGluYXRlc1swXS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zTnVtYmVyKGNvb3JkaW5hdGVzWzBdKTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IG9ubHkgY29udGFpbiBudW1iZXJzJyk7XG59XG5cbi8qKlxuICogRW5mb3JjZSBleHBlY3RhdGlvbnMgYWJvdXQgdHlwZXMgb2YgR2VvSlNPTiBvYmplY3RzIGZvciBUdXJmLlxuICpcbiAqIEBuYW1lIGdlb2pzb25UeXBlXG4gKiBAcGFyYW0ge0dlb0pTT059IHZhbHVlIGFueSBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgZXhwZWN0ZWQgR2VvSlNPTiB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIGNhbGxpbmcgZnVuY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB2YWx1ZSBpcyBub3QgdGhlIGV4cGVjdGVkIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGdlb2pzb25UeXBlKHZhbHVlLCB0eXBlLCBuYW1lKSB7XG4gICAgaWYgKCF0eXBlIHx8ICFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoJ3R5cGUgYW5kIG5hbWUgcmVxdWlyZWQnKTtcblxuICAgIGlmICghdmFsdWUgfHwgdmFsdWUudHlwZSAhPT0gdHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5wdXQgdG8gJyArIG5hbWUgKyAnOiBtdXN0IGJlIGEgJyArIHR5cGUgKyAnLCBnaXZlbiAnICsgdmFsdWUudHlwZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEVuZm9yY2UgZXhwZWN0YXRpb25zIGFib3V0IHR5cGVzIG9mIHtAbGluayBGZWF0dXJlfSBpbnB1dHMgZm9yIFR1cmYuXG4gKiBJbnRlcm5hbGx5IHRoaXMgdXNlcyB7QGxpbmsgZ2VvanNvblR5cGV9IHRvIGp1ZGdlIGdlb21ldHJ5IHR5cGVzLlxuICpcbiAqIEBuYW1lIGZlYXR1cmVPZlxuICogQHBhcmFtIHtGZWF0dXJlfSBmZWF0dXJlIGEgZmVhdHVyZSB3aXRoIGFuIGV4cGVjdGVkIGdlb21ldHJ5IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIGV4cGVjdGVkIEdlb0pTT04gdHlwZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgbmFtZSBvZiBjYWxsaW5nIGZ1bmN0aW9uXG4gKiBAdGhyb3dzIHtFcnJvcn0gZXJyb3IgaWYgdmFsdWUgaXMgbm90IHRoZSBleHBlY3RlZCB0eXBlLlxuICovXG5mdW5jdGlvbiBmZWF0dXJlT2YoZmVhdHVyZSwgdHlwZSwgbmFtZSkge1xuICAgIGlmICghZmVhdHVyZSkgdGhyb3cgbmV3IEVycm9yKCdObyBmZWF0dXJlIHBhc3NlZCcpO1xuICAgIGlmICghbmFtZSkgdGhyb3cgbmV3IEVycm9yKCcuZmVhdHVyZU9mKCkgcmVxdWlyZXMgYSBuYW1lJyk7XG4gICAgaWYgKCFmZWF0dXJlIHx8IGZlYXR1cmUudHlwZSAhPT0gJ0ZlYXR1cmUnIHx8ICFmZWF0dXJlLmdlb21ldHJ5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCB0byAnICsgbmFtZSArICcsIEZlYXR1cmUgd2l0aCBnZW9tZXRyeSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIWZlYXR1cmUuZ2VvbWV0cnkgfHwgZmVhdHVyZS5nZW9tZXRyeS50eXBlICE9PSB0eXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCB0byAnICsgbmFtZSArICc6IG11c3QgYmUgYSAnICsgdHlwZSArICcsIGdpdmVuICcgKyBmZWF0dXJlLmdlb21ldHJ5LnR5cGUpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBFbmZvcmNlIGV4cGVjdGF0aW9ucyBhYm91dCB0eXBlcyBvZiB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGlucHV0cyBmb3IgVHVyZi5cbiAqIEludGVybmFsbHkgdGhpcyB1c2VzIHtAbGluayBnZW9qc29uVHlwZX0gdG8ganVkZ2UgZ2VvbWV0cnkgdHlwZXMuXG4gKlxuICogQG5hbWUgY29sbGVjdGlvbk9mXG4gKiBAcGFyYW0ge0ZlYXR1cmVDb2xsZWN0aW9ufSBmZWF0dXJlQ29sbGVjdGlvbiBhIEZlYXR1cmVDb2xsZWN0aW9uIGZvciB3aGljaCBmZWF0dXJlcyB3aWxsIGJlIGp1ZGdlZFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgZXhwZWN0ZWQgR2VvSlNPTiB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIGNhbGxpbmcgZnVuY3Rpb25cbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiB2YWx1ZSBpcyBub3QgdGhlIGV4cGVjdGVkIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3Rpb25PZihmZWF0dXJlQ29sbGVjdGlvbiwgdHlwZSwgbmFtZSkge1xuICAgIGlmICghZmVhdHVyZUNvbGxlY3Rpb24pIHRocm93IG5ldyBFcnJvcignTm8gZmVhdHVyZUNvbGxlY3Rpb24gcGFzc2VkJyk7XG4gICAgaWYgKCFuYW1lKSB0aHJvdyBuZXcgRXJyb3IoJy5jb2xsZWN0aW9uT2YoKSByZXF1aXJlcyBhIG5hbWUnKTtcbiAgICBpZiAoIWZlYXR1cmVDb2xsZWN0aW9uIHx8IGZlYXR1cmVDb2xsZWN0aW9uLnR5cGUgIT09ICdGZWF0dXJlQ29sbGVjdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGlucHV0IHRvICcgKyBuYW1lICsgJywgRmVhdHVyZUNvbGxlY3Rpb24gcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmZWF0dXJlQ29sbGVjdGlvbi5mZWF0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZmVhdHVyZSA9IGZlYXR1cmVDb2xsZWN0aW9uLmZlYXR1cmVzW2ldO1xuICAgICAgICBpZiAoIWZlYXR1cmUgfHwgZmVhdHVyZS50eXBlICE9PSAnRmVhdHVyZScgfHwgIWZlYXR1cmUuZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCB0byAnICsgbmFtZSArICcsIEZlYXR1cmUgd2l0aCBnZW9tZXRyeSByZXF1aXJlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZmVhdHVyZS5nZW9tZXRyeSB8fCBmZWF0dXJlLmdlb21ldHJ5LnR5cGUgIT09IHR5cGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbnB1dCB0byAnICsgbmFtZSArICc6IG11c3QgYmUgYSAnICsgdHlwZSArICcsIGdpdmVuICcgKyBmZWF0dXJlLmdlb21ldHJ5LnR5cGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEdldCBHZW9tZXRyeSBmcm9tIEZlYXR1cmUgb3IgR2VvbWV0cnkgT2JqZWN0XG4gKlxuICogQHBhcmFtIHtGZWF0dXJlfEdlb21ldHJ5fSBnZW9qc29uIEdlb0pTT04gRmVhdHVyZSBvciBHZW9tZXRyeSBPYmplY3RcbiAqIEByZXR1cm5zIHtHZW9tZXRyeXxudWxsfSBHZW9KU09OIEdlb21ldHJ5IE9iamVjdFxuICogQHRocm93cyB7RXJyb3J9IGlmIGdlb2pzb24gaXMgbm90IGEgRmVhdHVyZSBvciBHZW9tZXRyeSBPYmplY3RcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnQgPSB7XG4gKiAgIFwidHlwZVwiOiBcIkZlYXR1cmVcIixcbiAqICAgXCJwcm9wZXJ0aWVzXCI6IHt9LFxuICogICBcImdlb21ldHJ5XCI6IHtcbiAqICAgICBcInR5cGVcIjogXCJQb2ludFwiLFxuICogICAgIFwiY29vcmRpbmF0ZXNcIjogWzExMCwgNDBdXG4gKiAgIH1cbiAqIH1cbiAqIHZhciBnZW9tID0gdHVyZi5nZXRHZW9tKHBvaW50KVxuICogLy89e1widHlwZVwiOiBcIlBvaW50XCIsIFwiY29vcmRpbmF0ZXNcIjogWzExMCwgNDBdfVxuICovXG5mdW5jdGlvbiBnZXRHZW9tKGdlb2pzb24pIHtcbiAgICBpZiAoIWdlb2pzb24pIHRocm93IG5ldyBFcnJvcignZ2VvanNvbiBpcyByZXF1aXJlZCcpO1xuICAgIGlmIChnZW9qc29uLmdlb21ldHJ5ICE9PSB1bmRlZmluZWQpIHJldHVybiBnZW9qc29uLmdlb21ldHJ5O1xuICAgIGlmIChnZW9qc29uLmNvb3JkaW5hdGVzIHx8IGdlb2pzb24uZ2VvbWV0cmllcykgcmV0dXJuIGdlb2pzb247XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZW9qc29uIG11c3QgYmUgYSB2YWxpZCBGZWF0dXJlIG9yIEdlb21ldHJ5IE9iamVjdCcpO1xufVxuXG4vKipcbiAqIEdldCBHZW9tZXRyeSBUeXBlIGZyb20gRmVhdHVyZSBvciBHZW9tZXRyeSBPYmplY3RcbiAqXG4gKiBAdGhyb3dzIHtFcnJvcn0gKipERVBSRUNBVEVEKiogaW4gdjUuMC4wIGluIGZhdm9yIG9mIGdldFR5cGVcbiAqL1xuZnVuY3Rpb24gZ2V0R2VvbVR5cGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhcmlhbnQuZ2V0R2VvbVR5cGUgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiB2NS4wIGluIGZhdm9yIG9mIGludmFyaWFudC5nZXRUeXBlJyk7XG59XG5cbi8qKlxuICogR2V0IEdlb0pTT04gb2JqZWN0J3MgdHlwZSwgR2VvbWV0cnkgdHlwZSBpcyBwcmlvcml0aXplLlxuICpcbiAqIEBwYXJhbSB7R2VvSlNPTn0gZ2VvanNvbiBHZW9KU09OIG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lPVwiZ2VvanNvblwiXSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0byBkaXNwbGF5IGluIGVycm9yIG1lc3NhZ2VcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEdlb0pTT04gdHlwZVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2ludCA9IHtcbiAqICAgXCJ0eXBlXCI6IFwiRmVhdHVyZVwiLFxuICogICBcInByb3BlcnRpZXNcIjoge30sXG4gKiAgIFwiZ2VvbWV0cnlcIjoge1xuICogICAgIFwidHlwZVwiOiBcIlBvaW50XCIsXG4gKiAgICAgXCJjb29yZGluYXRlc1wiOiBbMTEwLCA0MF1cbiAqICAgfVxuICogfVxuICogdmFyIGdlb20gPSB0dXJmLmdldFR5cGUocG9pbnQpXG4gKiAvLz1cIlBvaW50XCJcbiAqL1xuZnVuY3Rpb24gZ2V0VHlwZShnZW9qc29uLCBuYW1lKSB7XG4gICAgaWYgKCFnZW9qc29uKSB0aHJvdyBuZXcgRXJyb3IoKG5hbWUgfHwgJ2dlb2pzb24nKSArICcgaXMgcmVxdWlyZWQnKTtcbiAgICAvLyBHZW9KU09OIEZlYXR1cmUgJiBHZW9tZXRyeUNvbGxlY3Rpb25cbiAgICBpZiAoZ2VvanNvbi5nZW9tZXRyeSAmJiBnZW9qc29uLmdlb21ldHJ5LnR5cGUpIHJldHVybiBnZW9qc29uLmdlb21ldHJ5LnR5cGU7XG4gICAgLy8gR2VvSlNPTiBHZW9tZXRyeSAmIEZlYXR1cmVDb2xsZWN0aW9uXG4gICAgaWYgKGdlb2pzb24udHlwZSkgcmV0dXJuIGdlb2pzb24udHlwZTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoKG5hbWUgfHwgJ2dlb2pzb24nKSArICcgaXMgaW52YWxpZCcpO1xufVxuXG5leHBvcnQgeyBnZXRDb29yZCwgZ2V0Q29vcmRzLCBjb250YWluc051bWJlciwgZ2VvanNvblR5cGUsIGZlYXR1cmVPZiwgY29sbGVjdGlvbk9mLCBnZXRHZW9tLCBnZXRHZW9tVHlwZSwgZ2V0VHlwZSB9O1xuIiwiaW1wb3J0IHsgY29vcmRFYWNoIH0gZnJvbSAnQHR1cmYvbWV0YSc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IHsgZ2V0Q29vcmRzIH0gZnJvbSAnQHR1cmYvaW52YXJpYW50JztcbmltcG9ydCBjbG9uZSBmcm9tICdAdHVyZi9jbG9uZSc7XG5pbXBvcnQgcmh1bWJEZXN0aW5hdGlvbiBmcm9tICdAdHVyZi9yaHVtYi1kZXN0aW5hdGlvbic7XG5cbi8qKlxuICogTW92ZXMgYW55IGdlb2pzb24gRmVhdHVyZSBvciBHZW9tZXRyeSBvZiBhIHNwZWNpZmllZCBkaXN0YW5jZSBhbG9uZyBhIFJodW1iIExpbmVcbiAqIG9uIHRoZSBwcm92aWRlZCBkaXJlY3Rpb24gYW5nbGUuXG4gKlxuICogQG5hbWUgdHJhbnNmb3JtVHJhbnNsYXRlXG4gKiBAcGFyYW0ge0dlb0pTT059IGdlb2pzb24gb2JqZWN0IHRvIGJlIHRyYW5zbGF0ZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZSBsZW5ndGggb2YgdGhlIG1vdGlvbjsgbmVnYXRpdmUgdmFsdWVzIGRldGVybWluZSBtb3Rpb24gaW4gb3Bwb3NpdGUgZGlyZWN0aW9uXG4gKiBAcGFyYW0ge251bWJlcn0gZGlyZWN0aW9uIG9mIHRoZSBtb3Rpb247IGFuZ2xlIGZyb20gTm9ydGggaW4gZGVjaW1hbCBkZWdyZWVzLCBwb3NpdGl2ZSBjbG9ja3dpc2VcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgcGFyYW1ldGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLnVuaXRzPSdraWxvbWV0ZXJzJ10gaW4gd2hpY2ggYGRpc3RhbmNlYCB3aWxsIGJlIGV4cHJlc3M7IG1pbGVzLCBraWxvbWV0ZXJzLCBkZWdyZWVzLCBvciByYWRpYW5zXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMuelRyYW5zbGF0aW9uPTBdIGxlbmd0aCBvZiB0aGUgdmVydGljYWwgbW90aW9uLCBzYW1lIHVuaXQgb2YgZGlzdGFuY2VcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubXV0YXRlPWZhbHNlXSBhbGxvd3MgR2VvSlNPTiBpbnB1dCB0byBiZSBtdXRhdGVkIChzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBpbmNyZWFzZSBpZiB0cnVlKVxuICogQHJldHVybnMge0dlb0pTT059IHRoZSB0cmFuc2xhdGVkIEdlb0pTT04gb2JqZWN0XG4gKiBAZXhhbXBsZVxuICogdmFyIHBvbHkgPSB0dXJmLnBvbHlnb24oW1tbMCwyOV0sWzMuNSwyOV0sWzIuNSwzMl0sWzAsMjldXV0pO1xuICogdmFyIHRyYW5zbGF0ZWRQb2x5ID0gdHVyZi50cmFuc2Zvcm1UcmFuc2xhdGUocG9seSwgMTAwLCAzNSk7XG4gKlxuICogLy9hZGRUb01hcFxuICogdmFyIGFkZFRvTWFwID0gW3BvbHksIHRyYW5zbGF0ZWRQb2x5XTtcbiAqIHRyYW5zbGF0ZWRQb2x5LnByb3BlcnRpZXMgPSB7c3Ryb2tlOiAnI0YwMCcsICdzdHJva2Utd2lkdGgnOiA0fTtcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtVHJhbnNsYXRlKGdlb2pzb24sIGRpc3RhbmNlLCBkaXJlY3Rpb24sIG9wdGlvbnMpIHtcbiAgICAvLyBPcHRpb25hbCBwYXJhbWV0ZXJzXG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgaWYgKCFpc09iamVjdChvcHRpb25zKSkgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zIGlzIGludmFsaWQnKTtcbiAgICB2YXIgdW5pdHMgPSBvcHRpb25zLnVuaXRzO1xuICAgIHZhciB6VHJhbnNsYXRpb24gPSBvcHRpb25zLnpUcmFuc2xhdGlvbjtcbiAgICB2YXIgbXV0YXRlID0gb3B0aW9ucy5tdXRhdGU7XG5cbiAgICAvLyBJbnB1dCB2YWxpZGF0aW9uXG4gICAgaWYgKCFnZW9qc29uKSB0aHJvdyBuZXcgRXJyb3IoJ2dlb2pzb24gaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoZGlzdGFuY2UgPT09IHVuZGVmaW5lZCB8fCBkaXN0YW5jZSA9PT0gbnVsbCB8fCBpc05hTihkaXN0YW5jZSkpIHRocm93IG5ldyBFcnJvcignZGlzdGFuY2UgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoelRyYW5zbGF0aW9uICYmIHR5cGVvZiB6VHJhbnNsYXRpb24gIT09ICdudW1iZXInICYmIGlzTmFOKHpUcmFuc2xhdGlvbikpIHRocm93IG5ldyBFcnJvcignelRyYW5zbGF0aW9uIGlzIG5vdCBhIG51bWJlcicpO1xuXG4gICAgLy8gU2hvcnRjdXQgbm8tbW90aW9uXG4gICAgelRyYW5zbGF0aW9uID0gKHpUcmFuc2xhdGlvbiAhPT0gdW5kZWZpbmVkKSA/IHpUcmFuc2xhdGlvbiA6IDA7XG4gICAgaWYgKGRpc3RhbmNlID09PSAwICYmIHpUcmFuc2xhdGlvbiA9PT0gMCkgcmV0dXJuIGdlb2pzb247XG5cbiAgICBpZiAoZGlyZWN0aW9uID09PSB1bmRlZmluZWQgfHwgZGlyZWN0aW9uID09PSBudWxsIHx8IGlzTmFOKGRpcmVjdGlvbikpIHRocm93IG5ldyBFcnJvcignZGlyZWN0aW9uIGlzIHJlcXVpcmVkJyk7XG5cbiAgICAvLyBJbnZlcnQgd2l0aCBuZWdhdGl2ZSBkaXN0YW5jZXNcbiAgICBpZiAoZGlzdGFuY2UgPCAwKSB7XG4gICAgICAgIGRpc3RhbmNlID0gLWRpc3RhbmNlO1xuICAgICAgICBkaXJlY3Rpb24gPSAtZGlyZWN0aW9uO1xuICAgIH1cblxuICAgIC8vIENsb25lIGdlb2pzb24gdG8gYXZvaWQgc2lkZSBlZmZlY3RzXG4gICAgaWYgKG11dGF0ZSA9PT0gZmFsc2UgfHwgbXV0YXRlID09PSB1bmRlZmluZWQpIGdlb2pzb24gPSBjbG9uZShnZW9qc29uKTtcblxuICAgIC8vIFRyYW5zbGF0ZSBlYWNoIGNvb3JkaW5hdGVcbiAgICBjb29yZEVhY2goZ2VvanNvbiwgZnVuY3Rpb24gKHBvaW50Q29vcmRzKSB7XG4gICAgICAgIHZhciBuZXdDb29yZHMgPSBnZXRDb29yZHMocmh1bWJEZXN0aW5hdGlvbihwb2ludENvb3JkcywgZGlzdGFuY2UsIGRpcmVjdGlvbiwge3VuaXRzOiB1bml0c30pKTtcbiAgICAgICAgcG9pbnRDb29yZHNbMF0gPSBuZXdDb29yZHNbMF07XG4gICAgICAgIHBvaW50Q29vcmRzWzFdID0gbmV3Q29vcmRzWzFdO1xuICAgICAgICBpZiAoelRyYW5zbGF0aW9uICYmIHBvaW50Q29vcmRzLmxlbmd0aCA9PT0gMykgcG9pbnRDb29yZHNbMl0gKz0gelRyYW5zbGF0aW9uO1xuICAgIH0pO1xuICAgIHJldHVybiBnZW9qc29uO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2Zvcm1UcmFuc2xhdGU7XG4iLCIvKipcbiAqIEVhcnRoIFJhZGl1cyB1c2VkIHdpdGggdGhlIEhhcnZlc2luZSBmb3JtdWxhIGFuZCBhcHByb3hpbWF0ZXMgdXNpbmcgYSBzcGhlcmljYWwgKG5vbi1lbGxpcHNvaWQpIEVhcnRoLlxuICovXG52YXIgZWFydGhSYWRpdXMgPSA2MzcxMDA4Ljg7XG5cbi8qKlxuICogVW5pdCBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIHVzaW5nIGEgc3BoZXJpY2FsIChub24tZWxsaXBzb2lkKSBlYXJ0aCByYWRpdXMuXG4gKi9cbnZhciBmYWN0b3JzID0ge1xuICAgIG1ldGVyczogZWFydGhSYWRpdXMsXG4gICAgbWV0cmVzOiBlYXJ0aFJhZGl1cyxcbiAgICBtaWxsaW1ldGVyczogZWFydGhSYWRpdXMgKiAxMDAwLFxuICAgIG1pbGxpbWV0cmVzOiBlYXJ0aFJhZGl1cyAqIDEwMDAsXG4gICAgY2VudGltZXRlcnM6IGVhcnRoUmFkaXVzICogMTAwLFxuICAgIGNlbnRpbWV0cmVzOiBlYXJ0aFJhZGl1cyAqIDEwMCxcbiAgICBraWxvbWV0ZXJzOiBlYXJ0aFJhZGl1cyAvIDEwMDAsXG4gICAga2lsb21ldHJlczogZWFydGhSYWRpdXMgLyAxMDAwLFxuICAgIG1pbGVzOiBlYXJ0aFJhZGl1cyAvIDE2MDkuMzQ0LFxuICAgIG5hdXRpY2FsbWlsZXM6IGVhcnRoUmFkaXVzIC8gMTg1MixcbiAgICBpbmNoZXM6IGVhcnRoUmFkaXVzICogMzkuMzcwLFxuICAgIHlhcmRzOiBlYXJ0aFJhZGl1cyAvIDEuMDkzNixcbiAgICBmZWV0OiBlYXJ0aFJhZGl1cyAqIDMuMjgwODQsXG4gICAgcmFkaWFuczogMSxcbiAgICBkZWdyZWVzOiBlYXJ0aFJhZGl1cyAvIDExMTMyNSxcbn07XG5cbi8qKlxuICogVW5pdHMgb2YgbWVhc3VyZW1lbnQgZmFjdG9ycyBiYXNlZCBvbiAxIG1ldGVyLlxuICovXG52YXIgdW5pdHNGYWN0b3JzID0ge1xuICAgIG1ldGVyczogMSxcbiAgICBtZXRyZXM6IDEsXG4gICAgbWlsbGltZXRlcnM6IDEwMDAsXG4gICAgbWlsbGltZXRyZXM6IDEwMDAsXG4gICAgY2VudGltZXRlcnM6IDEwMCxcbiAgICBjZW50aW1ldHJlczogMTAwLFxuICAgIGtpbG9tZXRlcnM6IDEgLyAxMDAwLFxuICAgIGtpbG9tZXRyZXM6IDEgLyAxMDAwLFxuICAgIG1pbGVzOiAxIC8gMTYwOS4zNDQsXG4gICAgbmF1dGljYWxtaWxlczogMSAvIDE4NTIsXG4gICAgaW5jaGVzOiAzOS4zNzAsXG4gICAgeWFyZHM6IDEgLyAxLjA5MzYsXG4gICAgZmVldDogMy4yODA4NCxcbiAgICByYWRpYW5zOiAxIC8gZWFydGhSYWRpdXMsXG4gICAgZGVncmVlczogMSAvIDExMTMyNSxcbn07XG5cbi8qKlxuICogQXJlYSBvZiBtZWFzdXJlbWVudCBmYWN0b3JzIGJhc2VkIG9uIDEgc3F1YXJlIG1ldGVyLlxuICovXG52YXIgYXJlYUZhY3RvcnMgPSB7XG4gICAgbWV0ZXJzOiAxLFxuICAgIG1ldHJlczogMSxcbiAgICBtaWxsaW1ldGVyczogMTAwMDAwMCxcbiAgICBtaWxsaW1ldHJlczogMTAwMDAwMCxcbiAgICBjZW50aW1ldGVyczogMTAwMDAsXG4gICAgY2VudGltZXRyZXM6IDEwMDAwLFxuICAgIGtpbG9tZXRlcnM6IDAuMDAwMDAxLFxuICAgIGtpbG9tZXRyZXM6IDAuMDAwMDAxLFxuICAgIGFjcmVzOiAwLjAwMDI0NzEwNSxcbiAgICBtaWxlczogMy44NmUtNyxcbiAgICB5YXJkczogMS4xOTU5OTAwNDYsXG4gICAgZmVldDogMTAuNzYzOTEwNDE3LFxuICAgIGluY2hlczogMTU1MC4wMDMxMDAwMDZcbn07XG5cbi8qKlxuICogV3JhcHMgYSBHZW9KU09OIHtAbGluayBHZW9tZXRyeX0gaW4gYSBHZW9KU09OIHtAbGluayBGZWF0dXJlfS5cbiAqXG4gKiBAbmFtZSBmZWF0dXJlXG4gKiBAcGFyYW0ge0dlb21ldHJ5fSBnZW9tZXRyeSBpbnB1dCBnZW9tZXRyeVxuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlfSBhIEdlb0pTT04gRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBnZW9tZXRyeSA9IHtcbiAqICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAqICAgXCJjb29yZGluYXRlc1wiOiBbMTEwLCA1MF1cbiAqIH07XG4gKlxuICogdmFyIGZlYXR1cmUgPSB0dXJmLmZlYXR1cmUoZ2VvbWV0cnkpO1xuICpcbiAqIC8vPWZlYXR1cmVcbiAqL1xuZnVuY3Rpb24gZmVhdHVyZShnZW9tZXRyeSwgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciBiYm94ID0gb3B0aW9ucy5iYm94O1xuICAgIHZhciBpZCA9IG9wdGlvbnMuaWQ7XG5cbiAgICAvLyBWYWxpZGF0aW9uXG4gICAgaWYgKGdlb21ldHJ5ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignZ2VvbWV0cnkgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAocHJvcGVydGllcyAmJiBwcm9wZXJ0aWVzLmNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHRocm93IG5ldyBFcnJvcigncHJvcGVydGllcyBtdXN0IGJlIGFuIE9iamVjdCcpO1xuICAgIGlmIChiYm94KSB2YWxpZGF0ZUJCb3goYmJveCk7XG4gICAgaWYgKGlkKSB2YWxpZGF0ZUlkKGlkKTtcblxuICAgIC8vIE1haW5cbiAgICB2YXIgZmVhdCA9IHt0eXBlOiAnRmVhdHVyZSd9O1xuICAgIGlmIChpZCkgZmVhdC5pZCA9IGlkO1xuICAgIGlmIChiYm94KSBmZWF0LmJib3ggPSBiYm94O1xuICAgIGZlYXQucHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307XG4gICAgZmVhdC5nZW9tZXRyeSA9IGdlb21ldHJ5O1xuICAgIHJldHVybiBmZWF0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBHZW9KU09OIHtAbGluayBHZW9tZXRyeX0gZnJvbSBhIEdlb21ldHJ5IHN0cmluZyB0eXBlICYgY29vcmRpbmF0ZXMuXG4gKiBGb3IgR2VvbWV0cnlDb2xsZWN0aW9uIHR5cGUgdXNlIGBoZWxwZXJzLmdlb21ldHJ5Q29sbGVjdGlvbmBcbiAqXG4gKiBAbmFtZSBnZW9tZXRyeVxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgR2VvbWV0cnkgVHlwZVxuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjb29yZGluYXRlcyBDb29yZGluYXRlc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEdlb21ldHJ5XG4gKiBAcmV0dXJucyB7R2VvbWV0cnl9IGEgR2VvSlNPTiBHZW9tZXRyeVxuICogQGV4YW1wbGVcbiAqIHZhciB0eXBlID0gJ1BvaW50JztcbiAqIHZhciBjb29yZGluYXRlcyA9IFsxMTAsIDUwXTtcbiAqXG4gKiB2YXIgZ2VvbWV0cnkgPSB0dXJmLmdlb21ldHJ5KHR5cGUsIGNvb3JkaW5hdGVzKTtcbiAqXG4gKiAvLz1nZW9tZXRyeVxuICovXG5mdW5jdGlvbiBnZW9tZXRyeSh0eXBlLCBjb29yZGluYXRlcywgb3B0aW9ucykge1xuICAgIC8vIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIWlzT2JqZWN0KG9wdGlvbnMpKSB0aHJvdyBuZXcgRXJyb3IoJ29wdGlvbnMgaXMgaW52YWxpZCcpO1xuICAgIHZhciBiYm94ID0gb3B0aW9ucy5iYm94O1xuXG4gICAgLy8gVmFsaWRhdGlvblxuICAgIGlmICghdHlwZSkgdGhyb3cgbmV3IEVycm9yKCd0eXBlIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShjb29yZGluYXRlcykpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgIGlmIChiYm94KSB2YWxpZGF0ZUJCb3goYmJveCk7XG5cbiAgICAvLyBNYWluXG4gICAgdmFyIGdlb207XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnUG9pbnQnOiBnZW9tID0gcG9pbnQoY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBjYXNlICdMaW5lU3RyaW5nJzogZ2VvbSA9IGxpbmVTdHJpbmcoY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBjYXNlICdQb2x5Z29uJzogZ2VvbSA9IHBvbHlnb24oY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBjYXNlICdNdWx0aVBvaW50JzogZ2VvbSA9IG11bHRpUG9pbnQoY29vcmRpbmF0ZXMpLmdlb21ldHJ5OyBicmVhaztcbiAgICBjYXNlICdNdWx0aUxpbmVTdHJpbmcnOiBnZW9tID0gbXVsdGlMaW5lU3RyaW5nKGNvb3JkaW5hdGVzKS5nZW9tZXRyeTsgYnJlYWs7XG4gICAgY2FzZSAnTXVsdGlQb2x5Z29uJzogZ2VvbSA9IG11bHRpUG9seWdvbihjb29yZGluYXRlcykuZ2VvbWV0cnk7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcih0eXBlICsgJyBpcyBpbnZhbGlkJyk7XG4gICAgfVxuICAgIGlmIChiYm94KSBnZW9tLmJib3ggPSBiYm94O1xuICAgIHJldHVybiBnZW9tO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9pbnR9IHtAbGluayBGZWF0dXJlfSBmcm9tIGEgUG9zaXRpb24uXG4gKlxuICogQG5hbWUgcG9pbnRcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gY29vcmRpbmF0ZXMgbG9uZ2l0dWRlLCBsYXRpdHVkZSBwb3NpdGlvbiAoZWFjaCBpbiBkZWNpbWFsIGRlZ3JlZXMpXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8UG9pbnQ+fSBhIFBvaW50IGZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcG9pbnQgPSB0dXJmLnBvaW50KFstNzUuMzQzLCAzOS45ODRdKTtcbiAqXG4gKiAvLz1wb2ludFxuICovXG5mdW5jdGlvbiBwb2ludChjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gQXJyYXknKTtcbiAgICBpZiAoY29vcmRpbmF0ZXMubGVuZ3RoIDwgMikgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGF0IGxlYXN0IDIgbnVtYmVycyBsb25nJyk7XG4gICAgaWYgKCFpc051bWJlcihjb29yZGluYXRlc1swXSkgfHwgIWlzTnVtYmVyKGNvb3JkaW5hdGVzWzFdKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGNvbnRhaW4gbnVtYmVycycpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIFBvaW50fSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGZyb20gYW4gQXJyYXkgb2YgUG9pbnQgY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgcG9pbnRzXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb2ludHNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gVHJhbnNsYXRlIHRoZXNlIHByb3BlcnRpZXMgdG8gZWFjaCBGZWF0dXJlXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9uPFBvaW50Pn0gUG9pbnQgRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2ludHMgPSB0dXJmLnBvaW50cyhbXG4gKiAgIFstNzUsIDM5XSxcbiAqICAgWy04MCwgNDVdLFxuICogICBbLTc4LCA1MF1cbiAqIF0pO1xuICpcbiAqIC8vPXBvaW50c1xuICovXG5mdW5jdGlvbiBwb2ludHMoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvb3JkaW5hdGVzKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZUNvbGxlY3Rpb24oY29vcmRpbmF0ZXMubWFwKGZ1bmN0aW9uIChjb29yZHMpIHtcbiAgICAgICAgcmV0dXJuIHBvaW50KGNvb3JkcywgcHJvcGVydGllcyk7XG4gICAgfSksIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgUG9seWdvbn0ge0BsaW5rIEZlYXR1cmV9IGZyb20gYW4gQXJyYXkgb2YgTGluZWFyUmluZ3MuXG4gKlxuICogQG5hbWUgcG9seWdvblxuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIExpbmVhclJpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmU8UG9seWdvbj59IFBvbHlnb24gRmVhdHVyZVxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29uID0gdHVyZi5wb2x5Z29uKFtbWy01LCA1Ml0sIFstNCwgNTZdLCBbLTIsIDUxXSwgWy03LCA1NF0sIFstNSwgNTJdXV0sIHsgbmFtZTogJ3BvbHkxJyB9KTtcbiAqXG4gKiAvLz1wb2x5Z29uXG4gKi9cbmZ1bmN0aW9uIHBvbHlnb24oY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvb3JkaW5hdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciByaW5nID0gY29vcmRpbmF0ZXNbaV07XG4gICAgICAgIGlmIChyaW5nLmxlbmd0aCA8IDQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRWFjaCBMaW5lYXJSaW5nIG9mIGEgUG9seWdvbiBtdXN0IGhhdmUgNCBvciBtb3JlIFBvc2l0aW9ucy4nKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHJpbmdbcmluZy5sZW5ndGggLSAxXS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgZmlyc3QgcG9pbnQgb2YgUG9seWdvbiBjb250YWlucyB0d28gbnVtYmVyc1xuICAgICAgICAgICAgaWYgKGkgPT09IDAgJiYgaiA9PT0gMCAmJiAhaXNOdW1iZXIocmluZ1swXVswXSkgfHwgIWlzTnVtYmVyKHJpbmdbMF1bMV0pKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgY29udGFpbiBudW1iZXJzJyk7XG4gICAgICAgICAgICBpZiAocmluZ1tyaW5nLmxlbmd0aCAtIDFdW2pdICE9PSByaW5nWzBdW2pdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaXJzdCBhbmQgbGFzdCBQb3NpdGlvbiBhcmUgbm90IGVxdWl2YWxlbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdQb2x5Z29uJyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBQb2x5Z29ufSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259IGZyb20gYW4gQXJyYXkgb2YgUG9seWdvbiBjb29yZGluYXRlcy5cbiAqXG4gKiBAbmFtZSBwb2x5Z29uc1xuICogQHBhcmFtIHtBcnJheTxBcnJheTxBcnJheTxBcnJheTxudW1iZXI+Pj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb2x5Z29uIGNvb3JkaW5hdGVzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIHtGZWF0dXJlQ29sbGVjdGlvbjxQb2x5Z29uPn0gUG9seWdvbiBGZWF0dXJlQ29sbGVjdGlvblxuICogQGV4YW1wbGVcbiAqIHZhciBwb2x5Z29ucyA9IHR1cmYucG9seWdvbnMoW1xuICogICBbW1stNSwgNTJdLCBbLTQsIDU2XSwgWy0yLCA1MV0sIFstNywgNTRdLCBbLTUsIDUyXV1dLFxuICogICBbW1stMTUsIDQyXSwgWy0xNCwgNDZdLCBbLTEyLCA0MV0sIFstMTcsIDQ0XSwgWy0xNSwgNDJdXV0sXG4gKiBdKTtcbiAqXG4gKiAvLz1wb2x5Z29uc1xuICovXG5mdW5jdGlvbiBwb2x5Z29ucyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gQXJyYXknKTtcblxuICAgIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihjb29yZGluYXRlcy5tYXAoZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gcG9seWdvbihjb29yZHMsIHByb3BlcnRpZXMpO1xuICAgIH0pLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIExpbmVTdHJpbmd9IHtAbGluayBGZWF0dXJlfSBmcm9tIGFuIEFycmF5IG9mIFBvc2l0aW9ucy5cbiAqXG4gKiBAbmFtZSBsaW5lU3RyaW5nXG4gKiBAcGFyYW0ge0FycmF5PEFycmF5PG51bWJlcj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBQb3NpdGlvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxMaW5lU3RyaW5nPn0gTGluZVN0cmluZyBGZWF0dXJlXG4gKiBAZXhhbXBsZVxuICogdmFyIGxpbmVzdHJpbmcxID0gdHVyZi5saW5lU3RyaW5nKFtbLTI0LCA2M10sIFstMjMsIDYwXSwgWy0yNSwgNjVdLCBbLTIwLCA2OV1dLCB7bmFtZTogJ2xpbmUgMSd9KTtcbiAqIHZhciBsaW5lc3RyaW5nMiA9IHR1cmYubGluZVN0cmluZyhbWy0xNCwgNDNdLCBbLTEzLCA0MF0sIFstMTUsIDQ1XSwgWy0xMCwgNDldXSwge25hbWU6ICdsaW5lIDInfSk7XG4gKlxuICogLy89bGluZXN0cmluZzFcbiAqIC8vPWxpbmVzdHJpbmcyXG4gKi9cbmZ1bmN0aW9uIGxpbmVTdHJpbmcoY29vcmRpbmF0ZXMsIHByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgICBpZiAoIWNvb3JkaW5hdGVzKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKGNvb3JkaW5hdGVzLmxlbmd0aCA8IDIpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgbXVzdCBiZSBhbiBhcnJheSBvZiB0d28gb3IgbW9yZSBwb3NpdGlvbnMnKTtcbiAgICAvLyBDaGVjayBpZiBmaXJzdCBwb2ludCBvZiBMaW5lU3RyaW5nIGNvbnRhaW5zIHR3byBudW1iZXJzXG4gICAgaWYgKCFpc051bWJlcihjb29yZGluYXRlc1swXVsxXSkgfHwgIWlzTnVtYmVyKGNvb3JkaW5hdGVzWzBdWzFdKSkgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBtdXN0IGNvbnRhaW4gbnVtYmVycycpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnTGluZVN0cmluZycsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBjb29yZGluYXRlc1xuICAgIH0sIHByb3BlcnRpZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSB7QGxpbmsgTGluZVN0cmluZ30ge0BsaW5rIEZlYXR1cmVDb2xsZWN0aW9ufSBmcm9tIGFuIEFycmF5IG9mIExpbmVTdHJpbmcgY29vcmRpbmF0ZXMuXG4gKlxuICogQG5hbWUgbGluZVN0cmluZ3NcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIExpbmVhclJpbmdzXG4gKiBAcGFyYW0ge09iamVjdH0gW3Byb3BlcnRpZXM9e31dIGFuIE9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgdG8gYWRkIGFzIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlQ29sbGVjdGlvblxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcmV0dXJucyB7RmVhdHVyZUNvbGxlY3Rpb248TGluZVN0cmluZz59IExpbmVTdHJpbmcgRmVhdHVyZUNvbGxlY3Rpb25cbiAqIEBleGFtcGxlXG4gKiB2YXIgbGluZXN0cmluZ3MgPSB0dXJmLmxpbmVTdHJpbmdzKFtcbiAqICAgW1stMjQsIDYzXSwgWy0yMywgNjBdLCBbLTI1LCA2NV0sIFstMjAsIDY5XV0sXG4gKiAgIFtbLTE0LCA0M10sIFstMTMsIDQwXSwgWy0xNSwgNDVdLCBbLTEwLCA0OV1dXG4gKiBdKTtcbiAqXG4gKiAvLz1saW5lc3RyaW5nc1xuICovXG5mdW5jdGlvbiBsaW5lU3RyaW5ncyhjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29vcmRpbmF0ZXMpKSB0aHJvdyBuZXcgRXJyb3IoJ2Nvb3JkaW5hdGVzIG11c3QgYmUgYW4gQXJyYXknKTtcblxuICAgIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihjb29yZGluYXRlcy5tYXAoZnVuY3Rpb24gKGNvb3Jkcykge1xuICAgICAgICByZXR1cm4gbGluZVN0cmluZyhjb29yZHMsIHByb3BlcnRpZXMpO1xuICAgIH0pLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBUYWtlcyBvbmUgb3IgbW9yZSB7QGxpbmsgRmVhdHVyZXxGZWF0dXJlc30gYW5kIGNyZWF0ZXMgYSB7QGxpbmsgRmVhdHVyZUNvbGxlY3Rpb259LlxuICpcbiAqIEBuYW1lIGZlYXR1cmVDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0ZlYXR1cmVbXX0gZmVhdHVyZXMgaW5wdXQgZmVhdHVyZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9ucz17fV0gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBbb3B0aW9ucy5iYm94XSBCb3VuZGluZyBCb3ggQXJyYXkgW3dlc3QsIHNvdXRoLCBlYXN0LCBub3J0aF0gYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IFtvcHRpb25zLmlkXSBJZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHJldHVybnMge0ZlYXR1cmVDb2xsZWN0aW9ufSBGZWF0dXJlQ29sbGVjdGlvbiBvZiBGZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIHZhciBsb2NhdGlvbkEgPSB0dXJmLnBvaW50KFstNzUuMzQzLCAzOS45ODRdLCB7bmFtZTogJ0xvY2F0aW9uIEEnfSk7XG4gKiB2YXIgbG9jYXRpb25CID0gdHVyZi5wb2ludChbLTc1LjgzMywgMzkuMjg0XSwge25hbWU6ICdMb2NhdGlvbiBCJ30pO1xuICogdmFyIGxvY2F0aW9uQyA9IHR1cmYucG9pbnQoWy03NS41MzQsIDM5LjEyM10sIHtuYW1lOiAnTG9jYXRpb24gQyd9KTtcbiAqXG4gKiB2YXIgY29sbGVjdGlvbiA9IHR1cmYuZmVhdHVyZUNvbGxlY3Rpb24oW1xuICogICBsb2NhdGlvbkEsXG4gKiAgIGxvY2F0aW9uQixcbiAqICAgbG9jYXRpb25DXG4gKiBdKTtcbiAqXG4gKiAvLz1jb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGZlYXR1cmVDb2xsZWN0aW9uKGZlYXR1cmVzLCBvcHRpb25zKSB7XG4gICAgLy8gT3B0aW9uYWwgUGFyYW1ldGVyc1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghaXNPYmplY3Qob3B0aW9ucykpIHRocm93IG5ldyBFcnJvcignb3B0aW9ucyBpcyBpbnZhbGlkJyk7XG4gICAgdmFyIGJib3ggPSBvcHRpb25zLmJib3g7XG4gICAgdmFyIGlkID0gb3B0aW9ucy5pZDtcblxuICAgIC8vIFZhbGlkYXRpb25cbiAgICBpZiAoIWZlYXR1cmVzKSB0aHJvdyBuZXcgRXJyb3IoJ05vIGZlYXR1cmVzIHBhc3NlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShmZWF0dXJlcykpIHRocm93IG5ldyBFcnJvcignZmVhdHVyZXMgbXVzdCBiZSBhbiBBcnJheScpO1xuICAgIGlmIChiYm94KSB2YWxpZGF0ZUJCb3goYmJveCk7XG4gICAgaWYgKGlkKSB2YWxpZGF0ZUlkKGlkKTtcblxuICAgIC8vIE1haW5cbiAgICB2YXIgZmMgPSB7dHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJ307XG4gICAgaWYgKGlkKSBmYy5pZCA9IGlkO1xuICAgIGlmIChiYm94KSBmYy5iYm94ID0gYmJveDtcbiAgICBmYy5mZWF0dXJlcyA9IGZlYXR1cmVzO1xuICAgIHJldHVybiBmYztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8TXVsdGlMaW5lU3RyaW5nPn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aUxpbmVTdHJpbmdcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+fSBjb29yZGluYXRlcyBhbiBhcnJheSBvZiBMaW5lU3RyaW5nc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPE11bHRpTGluZVN0cmluZz59IGEgTXVsdGlMaW5lU3RyaW5nIGZlYXR1cmVcbiAqIEB0aHJvd3Mge0Vycm9yfSBpZiBubyBjb29yZGluYXRlcyBhcmUgcGFzc2VkXG4gKiBAZXhhbXBsZVxuICogdmFyIG11bHRpTGluZSA9IHR1cmYubXVsdGlMaW5lU3RyaW5nKFtbWzAsMF0sWzEwLDEwXV1dKTtcbiAqXG4gKiAvLz1tdWx0aUxpbmVcbiAqL1xuZnVuY3Rpb24gbXVsdGlMaW5lU3RyaW5nKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnTXVsdGlMaW5lU3RyaW5nJyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPE11bHRpUG9pbnQ+fSBiYXNlZCBvbiBhXG4gKiBjb29yZGluYXRlIGFycmF5LiBQcm9wZXJ0aWVzIGNhbiBiZSBhZGRlZCBvcHRpb25hbGx5LlxuICpcbiAqIEBuYW1lIG11bHRpUG9pbnRcbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8bnVtYmVyPj59IGNvb3JkaW5hdGVzIGFuIGFycmF5IG9mIFBvc2l0aW9uc1xuICogQHBhcmFtIHtPYmplY3R9IFtwcm9wZXJ0aWVzPXt9XSBhbiBPYmplY3Qgb2Yga2V5LXZhbHVlIHBhaXJzIHRvIGFkZCBhcyBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnM9e31dIE9wdGlvbmFsIFBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gW29wdGlvbnMuYmJveF0gQm91bmRpbmcgQm94IEFycmF5IFt3ZXN0LCBzb3V0aCwgZWFzdCwgbm9ydGhdIGFzc29jaWF0ZWQgd2l0aCB0aGUgRmVhdHVyZVxuICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBbb3B0aW9ucy5pZF0gSWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEByZXR1cm5zIHtGZWF0dXJlPE11bHRpUG9pbnQ+fSBhIE11bHRpUG9pbnQgZmVhdHVyZVxuICogQHRocm93cyB7RXJyb3J9IGlmIG5vIGNvb3JkaW5hdGVzIGFyZSBwYXNzZWRcbiAqIEBleGFtcGxlXG4gKiB2YXIgbXVsdGlQdCA9IHR1cmYubXVsdGlQb2ludChbWzAsMF0sWzEwLDEwXV0pO1xuICpcbiAqIC8vPW11bHRpUHRcbiAqL1xuZnVuY3Rpb24gbXVsdGlQb2ludChjb29yZGluYXRlcywgcHJvcGVydGllcywgb3B0aW9ucykge1xuICAgIGlmICghY29vcmRpbmF0ZXMpIHRocm93IG5ldyBFcnJvcignY29vcmRpbmF0ZXMgaXMgcmVxdWlyZWQnKTtcblxuICAgIHJldHVybiBmZWF0dXJlKHtcbiAgICAgICAgdHlwZTogJ011bHRpUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXNcbiAgICB9LCBwcm9wZXJ0aWVzLCBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEge0BsaW5rIEZlYXR1cmU8TXVsdGlQb2x5Z29uPn0gYmFzZWQgb24gYVxuICogY29vcmRpbmF0ZSBhcnJheS4gUHJvcGVydGllcyBjYW4gYmUgYWRkZWQgb3B0aW9uYWxseS5cbiAqXG4gKiBAbmFtZSBtdWx0aVBvbHlnb25cbiAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8QXJyYXk8QXJyYXk8bnVtYmVyPj4+Pn0gY29vcmRpbmF0ZXMgYW4gYXJyYXkgb2YgUG9seWdvbnNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxNdWx0aVBvbHlnb24+fSBhIG11bHRpcG9seWdvbiBmZWF0dXJlXG4gKiBAdGhyb3dzIHtFcnJvcn0gaWYgbm8gY29vcmRpbmF0ZXMgYXJlIHBhc3NlZFxuICogQGV4YW1wbGVcbiAqIHZhciBtdWx0aVBvbHkgPSB0dXJmLm11bHRpUG9seWdvbihbW1tbMCwwXSxbMCwxMF0sWzEwLDEwXSxbMTAsMF0sWzAsMF1dXV0pO1xuICpcbiAqIC8vPW11bHRpUG9seVxuICpcbiAqL1xuZnVuY3Rpb24gbXVsdGlQb2x5Z29uKGNvb3JkaW5hdGVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFjb29yZGluYXRlcykgdGhyb3cgbmV3IEVycm9yKCdjb29yZGluYXRlcyBpcyByZXF1aXJlZCcpO1xuXG4gICAgcmV0dXJuIGZlYXR1cmUoe1xuICAgICAgICB0eXBlOiAnTXVsdGlQb2x5Z29uJyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHtAbGluayBGZWF0dXJlPEdlb21ldHJ5Q29sbGVjdGlvbj59IGJhc2VkIG9uIGFcbiAqIGNvb3JkaW5hdGUgYXJyYXkuIFByb3BlcnRpZXMgY2FuIGJlIGFkZGVkIG9wdGlvbmFsbHkuXG4gKlxuICogQG5hbWUgZ2VvbWV0cnlDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5PEdlb21ldHJ5Pn0gZ2VvbWV0cmllcyBhbiBhcnJheSBvZiBHZW9KU09OIEdlb21ldHJpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBbcHJvcGVydGllcz17fV0gYW4gT2JqZWN0IG9mIGtleS12YWx1ZSBwYWlycyB0byBhZGQgYXMgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zPXt9XSBPcHRpb25hbCBQYXJhbWV0ZXJzXG4gKiBAcGFyYW0ge0FycmF5PG51bWJlcj59IFtvcHRpb25zLmJib3hdIEJvdW5kaW5nIEJveCBBcnJheSBbd2VzdCwgc291dGgsIGVhc3QsIG5vcnRoXSBhc3NvY2lhdGVkIHdpdGggdGhlIEZlYXR1cmVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gW29wdGlvbnMuaWRdIElkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBGZWF0dXJlXG4gKiBAcmV0dXJucyB7RmVhdHVyZTxHZW9tZXRyeUNvbGxlY3Rpb24+fSBhIEdlb0pTT04gR2VvbWV0cnlDb2xsZWN0aW9uIEZlYXR1cmVcbiAqIEBleGFtcGxlXG4gKiB2YXIgcHQgPSB7XG4gKiAgICAgXCJ0eXBlXCI6IFwiUG9pbnRcIixcbiAqICAgICAgIFwiY29vcmRpbmF0ZXNcIjogWzEwMCwgMF1cbiAqICAgICB9O1xuICogdmFyIGxpbmUgPSB7XG4gKiAgICAgXCJ0eXBlXCI6IFwiTGluZVN0cmluZ1wiLFxuICogICAgIFwiY29vcmRpbmF0ZXNcIjogWyBbMTAxLCAwXSwgWzEwMiwgMV0gXVxuICogICB9O1xuICogdmFyIGNvbGxlY3Rpb24gPSB0dXJmLmdlb21ldHJ5Q29sbGVjdGlvbihbcHQsIGxpbmVdKTtcbiAqXG4gKiAvLz1jb2xsZWN0aW9uXG4gKi9cbmZ1bmN0aW9uIGdlb21ldHJ5Q29sbGVjdGlvbihnZW9tZXRyaWVzLCBwcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gICAgaWYgKCFnZW9tZXRyaWVzKSB0aHJvdyBuZXcgRXJyb3IoJ2dlb21ldHJpZXMgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZ2VvbWV0cmllcykpIHRocm93IG5ldyBFcnJvcignZ2VvbWV0cmllcyBtdXN0IGJlIGFuIEFycmF5Jyk7XG5cbiAgICByZXR1cm4gZmVhdHVyZSh7XG4gICAgICAgIHR5cGU6ICdHZW9tZXRyeUNvbGxlY3Rpb24nLFxuICAgICAgICBnZW9tZXRyaWVzOiBnZW9tZXRyaWVzXG4gICAgfSwgcHJvcGVydGllcywgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogUm91bmQgbnVtYmVyIHRvIHByZWNpc2lvblxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBudW0gTnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj0wXSBQcmVjaXNpb25cbiAqIEByZXR1cm5zIHtudW1iZXJ9IHJvdW5kZWQgbnVtYmVyXG4gKiBAZXhhbXBsZVxuICogdHVyZi5yb3VuZCgxMjAuNDMyMSlcbiAqIC8vPTEyMFxuICpcbiAqIHR1cmYucm91bmQoMTIwLjQzMjEsIDIpXG4gKiAvLz0xMjAuNDNcbiAqL1xuZnVuY3Rpb24gcm91bmQobnVtLCBwcmVjaXNpb24pIHtcbiAgICBpZiAobnVtID09PSB1bmRlZmluZWQgfHwgbnVtID09PSBudWxsIHx8IGlzTmFOKG51bSkpIHRocm93IG5ldyBFcnJvcignbnVtIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKHByZWNpc2lvbiAmJiAhKHByZWNpc2lvbiA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKCdwcmVjaXNpb24gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpO1xuICAgIHZhciBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbiB8fCAwKTtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW0gKiBtdWx0aXBsaWVyKSAvIG11bHRpcGxpZXI7XG59XG5cbi8qKlxuICogQ29udmVydCBhIGRpc3RhbmNlIG1lYXN1cmVtZW50IChhc3N1bWluZyBhIHNwaGVyaWNhbCBFYXJ0aCkgZnJvbSByYWRpYW5zIHRvIGEgbW9yZSBmcmllbmRseSB1bml0LlxuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAbmFtZSByYWRpYW5zVG9MZW5ndGhcbiAqIEBwYXJhbSB7bnVtYmVyfSByYWRpYW5zIGluIHJhZGlhbnMgYWNyb3NzIHRoZSBzcGhlcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9J2tpbG9tZXRlcnMnXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIG9yIGtpbG9tZXRlcnMgaW5jaGVzLCB5YXJkcywgbWV0cmVzLCBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBkaXN0YW5jZVxuICovXG5mdW5jdGlvbiByYWRpYW5zVG9MZW5ndGgocmFkaWFucywgdW5pdHMpIHtcbiAgICBpZiAocmFkaWFucyA9PT0gdW5kZWZpbmVkIHx8IHJhZGlhbnMgPT09IG51bGwpIHRocm93IG5ldyBFcnJvcigncmFkaWFucyBpcyByZXF1aXJlZCcpO1xuXG4gICAgaWYgKHVuaXRzICYmIHR5cGVvZiB1bml0cyAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcigndW5pdHMgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIHZhciBmYWN0b3IgPSBmYWN0b3JzW3VuaXRzIHx8ICdraWxvbWV0ZXJzJ107XG4gICAgaWYgKCFmYWN0b3IpIHRocm93IG5ldyBFcnJvcih1bml0cyArICcgdW5pdHMgaXMgaW52YWxpZCcpO1xuICAgIHJldHVybiByYWRpYW5zICogZmFjdG9yO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBkaXN0YW5jZSBtZWFzdXJlbWVudCAoYXNzdW1pbmcgYSBzcGhlcmljYWwgRWFydGgpIGZyb20gYSByZWFsLXdvcmxkIHVuaXQgaW50byByYWRpYW5zXG4gKiBWYWxpZCB1bml0czogbWlsZXMsIG5hdXRpY2FsbWlsZXMsIGluY2hlcywgeWFyZHMsIG1ldGVycywgbWV0cmVzLCBraWxvbWV0ZXJzLCBjZW50aW1ldGVycywgZmVldFxuICpcbiAqIEBuYW1lIGxlbmd0aFRvUmFkaWFuc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpc3RhbmNlIGluIHJlYWwgdW5pdHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdHM9J2tpbG9tZXRlcnMnXSBjYW4gYmUgZGVncmVlcywgcmFkaWFucywgbWlsZXMsIG9yIGtpbG9tZXRlcnMgaW5jaGVzLCB5YXJkcywgbWV0cmVzLCBtZXRlcnMsIGtpbG9tZXRyZXMsIGtpbG9tZXRlcnMuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSByYWRpYW5zXG4gKi9cbmZ1bmN0aW9uIGxlbmd0aFRvUmFkaWFucyhkaXN0YW5jZSwgdW5pdHMpIHtcbiAgICBpZiAoZGlzdGFuY2UgPT09IHVuZGVmaW5lZCB8fCBkaXN0YW5jZSA9PT0gbnVsbCkgdGhyb3cgbmV3IEVycm9yKCdkaXN0YW5jZSBpcyByZXF1aXJlZCcpO1xuXG4gICAgaWYgKHVuaXRzICYmIHR5cGVvZiB1bml0cyAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcigndW5pdHMgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIHZhciBmYWN0b3IgPSBmYWN0b3JzW3VuaXRzIHx8ICdraWxvbWV0ZXJzJ107XG4gICAgaWYgKCFmYWN0b3IpIHRocm93IG5ldyBFcnJvcih1bml0cyArICcgdW5pdHMgaXMgaW52YWxpZCcpO1xuICAgIHJldHVybiBkaXN0YW5jZSAvIGZhY3Rvcjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgZGlzdGFuY2UgbWVhc3VyZW1lbnQgKGFzc3VtaW5nIGEgc3BoZXJpY2FsIEVhcnRoKSBmcm9tIGEgcmVhbC13b3JsZCB1bml0IGludG8gZGVncmVlc1xuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywgY2VudGltZXRlcnMsIGtpbG9tZXRyZXMsIGZlZXRcbiAqXG4gKiBAbmFtZSBsZW5ndGhUb0RlZ3JlZXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaXN0YW5jZSBpbiByZWFsIHVuaXRzXG4gKiBAcGFyYW0ge3N0cmluZ30gW3VuaXRzPSdraWxvbWV0ZXJzJ10gY2FuIGJlIGRlZ3JlZXMsIHJhZGlhbnMsIG1pbGVzLCBvciBraWxvbWV0ZXJzIGluY2hlcywgeWFyZHMsIG1ldHJlcywgbWV0ZXJzLCBraWxvbWV0cmVzLCBraWxvbWV0ZXJzLlxuICogQHJldHVybnMge251bWJlcn0gZGVncmVlc1xuICovXG5mdW5jdGlvbiBsZW5ndGhUb0RlZ3JlZXMoZGlzdGFuY2UsIHVuaXRzKSB7XG4gICAgcmV0dXJuIHJhZGlhbnNUb0RlZ3JlZXMobGVuZ3RoVG9SYWRpYW5zKGRpc3RhbmNlLCB1bml0cykpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFueSBiZWFyaW5nIGFuZ2xlIGZyb20gdGhlIG5vcnRoIGxpbmUgZGlyZWN0aW9uIChwb3NpdGl2ZSBjbG9ja3dpc2UpXG4gKiBhbmQgcmV0dXJucyBhbiBhbmdsZSBiZXR3ZWVuIDAtMzYwIGRlZ3JlZXMgKHBvc2l0aXZlIGNsb2Nrd2lzZSksIDAgYmVpbmcgdGhlIG5vcnRoIGxpbmVcbiAqXG4gKiBAbmFtZSBiZWFyaW5nVG9BemltdXRoXG4gKiBAcGFyYW0ge251bWJlcn0gYmVhcmluZyBhbmdsZSwgYmV0d2VlbiAtMTgwIGFuZCArMTgwIGRlZ3JlZXNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXNcbiAqL1xuZnVuY3Rpb24gYmVhcmluZ1RvQXppbXV0aChiZWFyaW5nKSB7XG4gICAgaWYgKGJlYXJpbmcgPT09IG51bGwgfHwgYmVhcmluZyA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2JlYXJpbmcgaXMgcmVxdWlyZWQnKTtcblxuICAgIHZhciBhbmdsZSA9IGJlYXJpbmcgJSAzNjA7XG4gICAgaWYgKGFuZ2xlIDwgMCkgYW5nbGUgKz0gMzYwO1xuICAgIHJldHVybiBhbmdsZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBhbmdsZSBpbiByYWRpYW5zIHRvIGRlZ3JlZXNcbiAqXG4gKiBAbmFtZSByYWRpYW5zVG9EZWdyZWVzXG4gKiBAcGFyYW0ge251bWJlcn0gcmFkaWFucyBhbmdsZSBpbiByYWRpYW5zXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBkZWdyZWVzIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXNcbiAqL1xuZnVuY3Rpb24gcmFkaWFuc1RvRGVncmVlcyhyYWRpYW5zKSB7XG4gICAgaWYgKHJhZGlhbnMgPT09IG51bGwgfHwgcmFkaWFucyA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ3JhZGlhbnMgaXMgcmVxdWlyZWQnKTtcblxuICAgIHZhciBkZWdyZWVzID0gcmFkaWFucyAlICgyICogTWF0aC5QSSk7XG4gICAgcmV0dXJuIGRlZ3JlZXMgKiAxODAgLyBNYXRoLlBJO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFuZ2xlIGluIGRlZ3JlZXMgdG8gcmFkaWFuc1xuICpcbiAqIEBuYW1lIGRlZ3JlZXNUb1JhZGlhbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWdyZWVzIGFuZ2xlIGJldHdlZW4gMCBhbmQgMzYwIGRlZ3JlZXNcbiAqIEByZXR1cm5zIHtudW1iZXJ9IGFuZ2xlIGluIHJhZGlhbnNcbiAqL1xuZnVuY3Rpb24gZGVncmVlc1RvUmFkaWFucyhkZWdyZWVzKSB7XG4gICAgaWYgKGRlZ3JlZXMgPT09IG51bGwgfHwgZGVncmVlcyA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ2RlZ3JlZXMgaXMgcmVxdWlyZWQnKTtcblxuICAgIHZhciByYWRpYW5zID0gZGVncmVlcyAlIDM2MDtcbiAgICByZXR1cm4gcmFkaWFucyAqIE1hdGguUEkgLyAxODA7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBsZW5ndGggdG8gdGhlIHJlcXVlc3RlZCB1bml0LlxuICogVmFsaWQgdW5pdHM6IG1pbGVzLCBuYXV0aWNhbG1pbGVzLCBpbmNoZXMsIHlhcmRzLCBtZXRlcnMsIG1ldHJlcywga2lsb21ldGVycywgY2VudGltZXRlcnMsIGZlZXRcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoIHRvIGJlIGNvbnZlcnRlZFxuICogQHBhcmFtIHtzdHJpbmd9IG9yaWdpbmFsVW5pdCBvZiB0aGUgbGVuZ3RoXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZpbmFsVW5pdD0na2lsb21ldGVycyddIHJldHVybmVkIHVuaXRcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHRoZSBjb252ZXJ0ZWQgbGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGNvbnZlcnRMZW5ndGgobGVuZ3RoLCBvcmlnaW5hbFVuaXQsIGZpbmFsVW5pdCkge1xuICAgIGlmIChsZW5ndGggPT09IG51bGwgfHwgbGVuZ3RoID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcignbGVuZ3RoIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCEobGVuZ3RoID49IDApKSB0aHJvdyBuZXcgRXJyb3IoJ2xlbmd0aCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG5cbiAgICByZXR1cm4gcmFkaWFuc1RvTGVuZ3RoKGxlbmd0aFRvUmFkaWFucyhsZW5ndGgsIG9yaWdpbmFsVW5pdCksIGZpbmFsVW5pdCB8fCAna2lsb21ldGVycycpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgYXJlYSB0byB0aGUgcmVxdWVzdGVkIHVuaXQuXG4gKiBWYWxpZCB1bml0czoga2lsb21ldGVycywga2lsb21ldHJlcywgbWV0ZXJzLCBtZXRyZXMsIGNlbnRpbWV0cmVzLCBtaWxsaW1ldGVycywgYWNyZXMsIG1pbGVzLCB5YXJkcywgZmVldCwgaW5jaGVzXG4gKiBAcGFyYW0ge251bWJlcn0gYXJlYSB0byBiZSBjb252ZXJ0ZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3JpZ2luYWxVbml0PSdtZXRlcnMnXSBvZiB0aGUgZGlzdGFuY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZmluYWxVbml0PSdraWxvbWV0ZXJzJ10gcmV0dXJuZWQgdW5pdFxuICogQHJldHVybnMge251bWJlcn0gdGhlIGNvbnZlcnRlZCBkaXN0YW5jZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0QXJlYShhcmVhLCBvcmlnaW5hbFVuaXQsIGZpbmFsVW5pdCkge1xuICAgIGlmIChhcmVhID09PSBudWxsIHx8IGFyZWEgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdhcmVhIGlzIHJlcXVpcmVkJyk7XG4gICAgaWYgKCEoYXJlYSA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKCdhcmVhIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKTtcblxuICAgIHZhciBzdGFydEZhY3RvciA9IGFyZWFGYWN0b3JzW29yaWdpbmFsVW5pdCB8fCAnbWV0ZXJzJ107XG4gICAgaWYgKCFzdGFydEZhY3RvcikgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIG9yaWdpbmFsIHVuaXRzJyk7XG5cbiAgICB2YXIgZmluYWxGYWN0b3IgPSBhcmVhRmFjdG9yc1tmaW5hbFVuaXQgfHwgJ2tpbG9tZXRlcnMnXTtcbiAgICBpZiAoIWZpbmFsRmFjdG9yKSB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgZmluYWwgdW5pdHMnKTtcblxuICAgIHJldHVybiAoYXJlYSAvIHN0YXJ0RmFjdG9yKSAqIGZpbmFsRmFjdG9yO1xufVxuXG4vKipcbiAqIGlzTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSBudW0gTnVtYmVyIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIHR1cmYuaXNOdW1iZXIoMTIzKVxuICogLy89dHJ1ZVxuICogdHVyZi5pc051bWJlcignZm9vJylcbiAqIC8vPWZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTnVtYmVyKG51bSkge1xuICAgIHJldHVybiAhaXNOYU4obnVtKSAmJiBudW0gIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkobnVtKTtcbn1cblxuLyoqXG4gKiBpc09iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gaW5wdXQgdmFyaWFibGUgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogdHVyZi5pc09iamVjdCh7ZWxldmF0aW9uOiAxMH0pXG4gKiAvLz10cnVlXG4gKiB0dXJmLmlzT2JqZWN0KCdmb28nKVxuICogLy89ZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICByZXR1cm4gKCEhaW5wdXQpICYmIChpbnB1dC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBCQm94XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXk8bnVtYmVyPn0gYmJveCBCQm94IHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEB0aHJvd3MgRXJyb3IgaWYgQkJveCBpcyBub3QgdmFsaWRcbiAqIEBleGFtcGxlXG4gKiB2YWxpZGF0ZUJCb3goWy0xODAsIC00MCwgMTEwLCA1MF0pXG4gKiAvLz1PS1xuICogdmFsaWRhdGVCQm94KFstMTgwLCAtNDBdKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlQkJveCgnRm9vJylcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3goNSlcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3gobnVsbClcbiAqIC8vPUVycm9yXG4gKiB2YWxpZGF0ZUJCb3godW5kZWZpbmVkKVxuICogLy89RXJyb3JcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCQm94KGJib3gpIHtcbiAgICBpZiAoIWJib3gpIHRocm93IG5ldyBFcnJvcignYmJveCBpcyByZXF1aXJlZCcpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShiYm94KSkgdGhyb3cgbmV3IEVycm9yKCdiYm94IG11c3QgYmUgYW4gQXJyYXknKTtcbiAgICBpZiAoYmJveC5sZW5ndGggIT09IDQgJiYgYmJveC5sZW5ndGggIT09IDYpIHRocm93IG5ldyBFcnJvcignYmJveCBtdXN0IGJlIGFuIEFycmF5IG9mIDQgb3IgNiBudW1iZXJzJyk7XG4gICAgYmJveC5mb3JFYWNoKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgICAgaWYgKCFpc051bWJlcihudW0pKSB0aHJvdyBuZXcgRXJyb3IoJ2Jib3ggbXVzdCBvbmx5IGNvbnRhaW4gbnVtYmVycycpO1xuICAgIH0pO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIElkXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcn0gaWQgSWQgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICogQHRocm93cyBFcnJvciBpZiBJZCBpcyBub3QgdmFsaWRcbiAqIEBleGFtcGxlXG4gKiB2YWxpZGF0ZUlkKFstMTgwLCAtNDAsIDExMCwgNTBdKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlSWQoWy0xODAsIC00MF0pXG4gKiAvLz1FcnJvclxuICogdmFsaWRhdGVJZCgnRm9vJylcbiAqIC8vPU9LXG4gKiB2YWxpZGF0ZUlkKDUpXG4gKiAvLz1PS1xuICogdmFsaWRhdGVJZChudWxsKVxuICogLy89RXJyb3JcbiAqIHZhbGlkYXRlSWQodW5kZWZpbmVkKVxuICogLy89RXJyb3JcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVJZChpZCkge1xuICAgIGlmICghaWQpIHRocm93IG5ldyBFcnJvcignaWQgaXMgcmVxdWlyZWQnKTtcbiAgICBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJ10uaW5kZXhPZih0eXBlb2YgaWQpID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdpZCBtdXN0IGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nJyk7XG59XG5cbi8vIERlcHJlY2F0ZWQgbWV0aG9kc1xuZnVuY3Rpb24gcmFkaWFuczJkZWdyZWVzKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYHJhZGlhbnNUb0RlZ3JlZXNgJyk7XG59XG5cbmZ1bmN0aW9uIGRlZ3JlZXMycmFkaWFucygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBkZWdyZWVzVG9SYWRpYW5zYCcpO1xufVxuXG5mdW5jdGlvbiBkaXN0YW5jZVRvRGVncmVlcygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBsZW5ndGhUb0RlZ3JlZXNgJyk7XG59XG5cbmZ1bmN0aW9uIGRpc3RhbmNlVG9SYWRpYW5zKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbWV0aG9kIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGxlbmd0aFRvUmFkaWFuc2AnKTtcbn1cblxuZnVuY3Rpb24gcmFkaWFuc1RvRGlzdGFuY2UoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgcmFkaWFuc1RvTGVuZ3RoYCcpO1xufVxuXG5mdW5jdGlvbiBiZWFyaW5nVG9BbmdsZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21ldGhvZCBoYXMgYmVlbiByZW5hbWVkIHRvIGBiZWFyaW5nVG9BemltdXRoYCcpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtZXRob2QgaGFzIGJlZW4gcmVuYW1lZCB0byBgY29udmVydExlbmd0aGAnKTtcbn1cblxuZXhwb3J0IHsgZWFydGhSYWRpdXMsIGZhY3RvcnMsIHVuaXRzRmFjdG9ycywgYXJlYUZhY3RvcnMsIGZlYXR1cmUsIGdlb21ldHJ5LCBwb2ludCwgcG9pbnRzLCBwb2x5Z29uLCBwb2x5Z29ucywgbGluZVN0cmluZywgbGluZVN0cmluZ3MsIGZlYXR1cmVDb2xsZWN0aW9uLCBtdWx0aUxpbmVTdHJpbmcsIG11bHRpUG9pbnQsIG11bHRpUG9seWdvbiwgZ2VvbWV0cnlDb2xsZWN0aW9uLCByb3VuZCwgcmFkaWFuc1RvTGVuZ3RoLCBsZW5ndGhUb1JhZGlhbnMsIGxlbmd0aFRvRGVncmVlcywgYmVhcmluZ1RvQXppbXV0aCwgcmFkaWFuc1RvRGVncmVlcywgZGVncmVlc1RvUmFkaWFucywgY29udmVydExlbmd0aCwgY29udmVydEFyZWEsIGlzTnVtYmVyLCBpc09iamVjdCwgdmFsaWRhdGVCQm94LCB2YWxpZGF0ZUlkLCByYWRpYW5zMmRlZ3JlZXMsIGRlZ3JlZXMycmFkaWFucywgZGlzdGFuY2VUb0RlZ3JlZXMsIGRpc3RhbmNlVG9SYWRpYW5zLCByYWRpYW5zVG9EaXN0YW5jZSwgYmVhcmluZ1RvQW5nbGUsIGNvbnZlcnREaXN0YW5jZSB9O1xuIiwiaW1wb3J0IHsgZ2V0UHJvcCwgcGFyc2VTZXF1ZW5jZSwgZ2V0Q29sb3IsIGNpcmNsZVRvUG9seWdvbiB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBwb2ludCwgbGluZVN0cmluZywgcG9seWdvbiB9IGZyb20gJ0B0dXJmL2hlbHBlcnMnO1xuaW1wb3J0IHRyYW5zZm9ybVRyYW5zbGF0ZSBmcm9tICdAdHVyZi90cmFuc2Zvcm0tdHJhbnNsYXRlJztcbmltcG9ydCBjbG9uZSBmcm9tICdAdHVyZi9jbG9uZSc7XG5pbXBvcnQgcHJvajQgZnJvbSAncHJvajQnO1xuZXhwb3J0IGNvbnN0IExBTkRYTUxfUElQRV9ORVRXT1JLX1BJUEUgPSAncGlwZV9uZXR3b3JrX3BpcGUnO1xuZXhwb3J0IGNvbnN0IExBTkRYTUxfUElQRV9ORVRXT1JLX1NUUlVDVCA9ICdwaXBlX25ldHdvcmtfc3RydWN0JztcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UGlwZU5ldHdvcmtzKHhtbE9iaiwgcHJvamVjdGlvbiwgb3B0cykge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gW107XG4gICAgY29uc3QgcGlwZU5ldHdvcmtzTm9kZXMgPSBnZXRQcm9wKHhtbE9iaiwgXCJMYW5kWE1MXCIsIFwiUGlwZU5ldHdvcmtzXCIpO1xuICAgIGlmICghcGlwZU5ldHdvcmtzTm9kZXMpXG4gICAgICAgIHJldHVybiBmZWF0dXJlcztcbiAgICBwaXBlTmV0d29ya3NOb2Rlcy5mb3JFYWNoKHBuID0+IHtcbiAgICAgICAgY29uc3QgcGlwZU5ldHdvcmtOb2RlcyA9IGdldFByb3AocG4sIFwiUGlwZU5ldHdvcmtcIik7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwaXBlTmV0d29ya05vZGVzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHN0cnVjdHMgPSB7fTtcbiAgICAgICAgcGlwZU5ldHdvcmtOb2Rlcy5mb3JFYWNoKHBuID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBwbi4kLm5hbWUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHBuLiQuZGVzYyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBsb2NhbFN0cnVjdHMgPSBjb252ZXJ0U3RydWN0cyhwbiwgcHJvamVjdGlvbiwgYmFzZVByb3BzLCBvcHRzKTtcbiAgICAgICAgICAgIGZlYXR1cmVzLnB1c2goLi4uT2JqZWN0LnZhbHVlcyhsb2NhbFN0cnVjdHMpLm1hcChzID0+IHMuZ2VvbWV0cnkpKTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc3RydWN0cywgbG9jYWxTdHJ1Y3RzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHBpcGVOZXR3b3JrTm9kZXMuZm9yRWFjaChwbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXNlUHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogcG4uJC5uYW1lLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwbi4kLmRlc2MsXG4gICAgICAgICAgICAgICAgbGFuZHhtbFR5cGU6IExBTkRYTUxfUElQRV9ORVRXT1JLX1BJUEUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgcGlwZXMgPSBjb252ZXJ0UGlwZXMocG4sIHN0cnVjdHMsIHByb2plY3Rpb24sIGJhc2VQcm9wcywgb3B0cyk7XG4gICAgICAgICAgICBmZWF0dXJlcy5wdXNoKC4uLnBpcGVzKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZlYXR1cmVzO1xufVxuZnVuY3Rpb24gY29udmVydFBpcGVzKHBpcGVOZXR3b3JrLCBzdHJ1Y3RzLCBwcm9qZWN0aW9uLCBiYXNlUHJvcHMsIG9wdHMpIHtcbiAgICBjb25zdCBwaXBlcyA9IFtdO1xuICAgIGNvbnN0IHBpcGVOb2RlcyA9IGdldFByb3AocGlwZU5ldHdvcmssIFwiUGlwZXNcIiwgMCwgXCJQaXBlXCIpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwaXBlTm9kZXMpKVxuICAgICAgICByZXR1cm47XG4gICAgcGlwZU5vZGVzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGNvbnN0IGNpcmNQaXBlTm9kZSA9IGdldFByb3AocCwgXCJDaXJjUGlwZVwiLCAwKTtcbiAgICAgICAgY29uc3QgbmFtZSA9IGJhc2VQcm9wcy5uYW1lID8gYmFzZVByb3BzLm5hbWUgKyAnIC0gJyArIHAuJC5uYW1lIDogcC4kLm5hbWU7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIGJhc2VQcm9wcywge1xuICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBiYXNlUHJvcHMuZGVzY3JpcHRpb24gPyBiYXNlUHJvcHMuZGVzY3JpcHRpb24gKyAnIC0gJyArIHAuJC5kZXNjIDogcC4kLmRlc2MsXG4gICAgICAgICAgICBsYW5keG1sQ29sb3I6IGdldENvbG9yKGBwaXBlLW5ldHdvcmstcGlwZS0ke25hbWV9YCwgb3B0cy5jb2xvck9wdHMpXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2lyY1BpcGVOb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gY2lyY1BpcGVOb2RlLiQ7XG4gICAgICAgICAgICBpZiAoJ2RpYW1ldGVyJyBpbiBhdHRycylcbiAgICAgICAgICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbERpYW1ldGVyID0gcGFyc2VGbG9hdChhdHRycy5kaWFtZXRlcik7XG4gICAgICAgICAgICBpZiAoJ3RoaWNrbmVzcycgaW4gYXR0cnMpXG4gICAgICAgICAgICAgICAgZmVhdHVyZVByb3BzLmxhbmR4bWxUaGlja25lc3MgPSBwYXJzZUZsb2F0KGF0dHJzLnRoaWNrbmVzcyk7XG4gICAgICAgICAgICBpZiAoJ21hdGVyaWFsJyBpbiBhdHRycylcbiAgICAgICAgICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbE1hdGVyaWFsID0gYXR0cnMubWF0ZXJpYWw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVmU3RhcnQgPSBzdHJ1Y3RzW3AuJC5yZWZTdGFydF07XG4gICAgICAgIGNvbnN0IHJlZkVuZCA9IHN0cnVjdHNbcC4kLnJlZkVuZF07XG4gICAgICAgIGlmICghcmVmU3RhcnQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIHBpcGUgXCIke2ZlYXR1cmVQcm9wcy5uYW1lfVwiIHJlZlN0YXJ0IFwiJHtwLiQucmVmU3RhcnR9XCIgIWApO1xuICAgICAgICBpZiAoIXJlZkVuZClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgcGlwZSBcIiR7ZmVhdHVyZVByb3BzLm5hbWV9XCIgcmVmRW5kIFwiJHtwLiQucmVmRW5kfVwiICFgKTtcbiAgICAgICAgY29uc3QgcGlwZSA9IGxpbmVTdHJpbmcoW1xuICAgICAgICAgICAgcmVmU3RhcnQuY2VudGVyLFxuICAgICAgICAgICAgcmVmRW5kLmNlbnRlcixcbiAgICAgICAgXSwgZmVhdHVyZVByb3BzKTtcbiAgICAgICAgcGlwZXMucHVzaChwaXBlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcGlwZXM7XG59XG5mdW5jdGlvbiBjb252ZXJ0U3RydWN0cyhwaXBlTmV0d29yaywgcHJvamVjdGlvbiwgYmFzZVByb3BzLCBvcHRzKSB7XG4gICAgY29uc3Qgc3RydWN0cyA9IHt9O1xuICAgIGNvbnN0IHN0cnVjdE5vZGVzID0gZ2V0UHJvcChwaXBlTmV0d29yaywgXCJTdHJ1Y3RzXCIsIDAsIFwiU3RydWN0XCIpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzdHJ1Y3ROb2RlcykpXG4gICAgICAgIHJldHVybjtcbiAgICBzdHJ1Y3ROb2Rlcy5mb3JFYWNoKHMgPT4ge1xuICAgICAgICBjb25zdCBjZW50ZXJOb2RlID0gZ2V0UHJvcChzLCBcIkNlbnRlclwiLCAwKTtcbiAgICAgICAgY29uc3QgcmVjdFN0cnVjdE5vZGUgPSBnZXRQcm9wKHMsIFwiUmVjdFN0cnVjdFwiLCAwKTtcbiAgICAgICAgY29uc3QgY2lyY1N0cnVjdE5vZGUgPSBnZXRQcm9wKHMsIFwiQ2lyY1N0cnVjdFwiLCAwKTtcbiAgICAgICAgY29uc3QgaW5sZXRTdHJ1Y3ROb2RlID0gZ2V0UHJvcChzLCBcIklubGV0U3RydWN0XCIsIDApO1xuICAgICAgICBjb25zdCBvdXRsZXRTdHJ1Y3ROb2RlID0gZ2V0UHJvcChzLCBcIk91dGxldFN0cnVjdFwiLCAwKTtcbiAgICAgICAgY29uc3QgY29ubmVjdGlvbk5vZGUgPSBnZXRQcm9wKHMsIFwiQ29ubmVjdGlvblwiLCAwKTtcbiAgICAgICAgY29uc3Qgc3RydWN0VHlwZSA9IHJlY3RTdHJ1Y3ROb2RlICE9PSB1bmRlZmluZWQgPyBcInJlY3RcIiA6ICgoY2lyY1N0cnVjdE5vZGUgIT09IHVuZGVmaW5lZCA/IFwiY2lyY1wiIDpcbiAgICAgICAgICAgIChpbmxldFN0cnVjdE5vZGUgIT09IHVuZGVmaW5lZCA/IFwiaW5sZXRcIiA6XG4gICAgICAgICAgICAgICAgKG91dGxldFN0cnVjdE5vZGUgIT09IHVuZGVmaW5lZCA/IFwib3V0bGV0XCIgOlxuICAgICAgICAgICAgICAgICAgICAoY29ubmVjdGlvbk5vZGUgIT09IHVuZGVmaW5lZCA/IFwiY29ubmVjdGlvblwiIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIChudWxsKSkpKSkpO1xuICAgICAgICBjb25zdCBuYW1lID0gYmFzZVByb3BzLm5hbWUgPyBiYXNlUHJvcHMubmFtZSArICcgLSAnICsgcy4kLm5hbWUgOiBzLiQubmFtZTtcbiAgICAgICAgY29uc3QgZmVhdHVyZVByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgYmFzZVByb3BzLCB7XG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGJhc2VQcm9wcy5kZXNjcmlwdGlvbiA/IGJhc2VQcm9wcy5kZXNjcmlwdGlvbiArICcgLSAnICsgcy4kLmRlc2MgOiBzLiQuZGVzYyxcbiAgICAgICAgICAgIGxhbmR4bWxUeXBlOiBMQU5EWE1MX1BJUEVfTkVUV09SS19TVFJVQ1QsXG4gICAgICAgICAgICBsYW5keG1sU3RydWN0OiBzdHJ1Y3RUeXBlLFxuICAgICAgICAgICAgbGFuZHhtbEVsZXZSaW06ICdlbGV2UmltJyBpbiBzLiQgPyBwYXJzZUZsb2F0KHMuJC5lbGV2UmltKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGxhbmR4bWxFbGV2U3VtcDogJ2VsZXZTdW1wJyBpbiBzLiQgPyBwYXJzZUZsb2F0KHMuJC5lbGV2U3VtcCkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBsYW5keG1sQ29sb3I6IGdldENvbG9yKGBwaXBlLW5ldHdvcmstc3RydWN0LSR7bmFtZX1gLCBvcHRzLmNvbG9yT3B0cylcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjaXJjU3RydWN0Tm9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRycyA9IGNpcmNTdHJ1Y3ROb2RlLiQ7XG4gICAgICAgICAgICBpZiAoJ2RpYW1ldGVyJyBpbiBhdHRycylcbiAgICAgICAgICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbERpYW1ldGVyID0gcGFyc2VGbG9hdChhdHRycy5kaWFtZXRlcik7XG4gICAgICAgICAgICBpZiAoJ3RoaWNrbmVzcycgaW4gYXR0cnMpXG4gICAgICAgICAgICAgICAgZmVhdHVyZVByb3BzLmxhbmR4bWxUaGlja25lc3MgPSBwYXJzZUZsb2F0KGF0dHJzLnRoaWNrbmVzcyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlY3RTdHJ1Y3ROb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJzID0gcmVjdFN0cnVjdE5vZGUuJDtcbiAgICAgICAgICAgIGlmICgndGhpY2tuZXNzJyBpbiBhdHRycylcbiAgICAgICAgICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbFRoaWNrbmVzcyA9IHBhcnNlRmxvYXQoYXR0cnMudGhpY2tuZXNzKTtcbiAgICAgICAgICAgIGlmICgnbGVuZ3RoJyBpbiBhdHRycylcbiAgICAgICAgICAgICAgICBmZWF0dXJlUHJvcHMubGFuZHhtbExlbmd0aCA9IHBhcnNlRmxvYXQoYXR0cnMubGVuZ3RoKTtcbiAgICAgICAgICAgIGlmICgnd2lkdGgnIGluIGF0dHJzKVxuICAgICAgICAgICAgICAgIGZlYXR1cmVQcm9wcy5sYW5keG1sV2lkdGggPSBwYXJzZUZsb2F0KGF0dHJzLndpZHRoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQYXJzZSBhbmQgY29udmVydCBjZW50ZXIgY29vcmRpbmF0ZXNcbiAgICAgICAgY29uc3Qgc2VxID0gcGFyc2VTZXF1ZW5jZShjZW50ZXJOb2RlKS5tYXAodiA9PiBwYXJzZUZsb2F0KHYpKTtcbiAgICAgICAgbGV0IGNlbnRlciA9IFtzZXFbMV0sIHNlcVswXSwgc2VxWzJdXTtcbiAgICAgICAgY2VudGVyID0gcHJvajQocHJvamVjdGlvbiwgJ1dHUzg0JywgY2VudGVyKTtcbiAgICAgICAgZmVhdHVyZVByb3BzLmxhbmR4bWxDZW50ZXJMb25naXR1ZGUgPSBjZW50ZXJbMF07XG4gICAgICAgIGZlYXR1cmVQcm9wcy5sYW5keG1sQ2VudGVyTGF0aXR1ZGUgPSBjZW50ZXJbMV07XG4gICAgICAgIGZlYXR1cmVQcm9wcy5sYW5keG1sQ2VudGVyQWx0aXR1ZGUgPSBjZW50ZXJbMl07XG4gICAgICAgIGxldCBnZW9tZXRyeTtcbiAgICAgICAgaWYgKHJlY3RTdHJ1Y3ROb2RlKSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBmZWF0dXJlUHJvcHMubGVuZ3RoID8gZmVhdHVyZVByb3BzLmxlbmd0aCA6IDE7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGZlYXR1cmVQcm9wcy53aWR0aCA/IGZlYXR1cmVQcm9wcy53aWR0aCA6IDE7XG4gICAgICAgICAgICBnZW9tZXRyeSA9IHNxdWFyZUFyb3VuZChjZW50ZXIsIGxlbmd0aCwgd2lkdGgsICdtZXRlcnMnLCBmZWF0dXJlUHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGlhbWV0ZXIgPSBmZWF0dXJlUHJvcHMubGFuZHhtbERpYW1ldGVyID8gZmVhdHVyZVByb3BzLmxhbmR4bWxEaWFtZXRlciA6IDE7XG4gICAgICAgICAgICBnZW9tZXRyeSA9IGNpcmNsZVRvUG9seWdvbihjZW50ZXIsIGRpYW1ldGVyIC8gMiwgMTI4LCBmZWF0dXJlUHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZ2VvbWV0cnkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0cnVjdCB0eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIDtcbiAgICAgICAgc3RydWN0c1tzLiQubmFtZV0gPSB7IGdlb21ldHJ5LCBjZW50ZXIgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gc3RydWN0cztcbn1cbmZ1bmN0aW9uIHNxdWFyZUFyb3VuZChjZW50ZXJDb29yZHMsIGxlbmd0aCwgd2lkdGgsIHVuaXRzLCBwcm9wZXJ0aWVzKSB7XG4gICAgY29uc3QgY2VudGVyID0gcG9pbnQoY2VudGVyQ29vcmRzKTtcbiAgICBjb25zdCBub3J0aEVhc3QgPSBjbG9uZShjZW50ZXIpO1xuICAgIHRyYW5zZm9ybVRyYW5zbGF0ZShub3J0aEVhc3QsIHdpZHRoIC8gMiwgMjcwLCB7IHVuaXRzLCBtdXRhdGU6IHRydWUgfSk7XG4gICAgdHJhbnNmb3JtVHJhbnNsYXRlKG5vcnRoRWFzdCwgbGVuZ3RoIC8gMiwgMCwgeyB1bml0cywgbXV0YXRlOiB0cnVlIH0pO1xuICAgIGNvbnN0IG5vcnRoV2VzdCA9IGNsb25lKGNlbnRlcik7XG4gICAgdHJhbnNmb3JtVHJhbnNsYXRlKG5vcnRoV2VzdCwgd2lkdGggLyAyLCA5MCwgeyB1bml0cywgbXV0YXRlOiB0cnVlIH0pO1xuICAgIHRyYW5zZm9ybVRyYW5zbGF0ZShub3J0aFdlc3QsIGxlbmd0aCAvIDIsIDAsIHsgdW5pdHMsIG11dGF0ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzb3V0aFdlc3QgPSBjbG9uZShjZW50ZXIpO1xuICAgIHRyYW5zZm9ybVRyYW5zbGF0ZShzb3V0aFdlc3QsIHdpZHRoIC8gMiwgOTAsIHsgdW5pdHMsIG11dGF0ZTogdHJ1ZSB9KTtcbiAgICB0cmFuc2Zvcm1UcmFuc2xhdGUoc291dGhXZXN0LCBsZW5ndGggLyAyLCAxODAsIHsgdW5pdHMsIG11dGF0ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzb3V0aEVhc3QgPSBjbG9uZShjZW50ZXIpO1xuICAgIHRyYW5zZm9ybVRyYW5zbGF0ZShzb3V0aEVhc3QsIHdpZHRoIC8gMiwgMjcwLCB7IHVuaXRzLCBtdXRhdGU6IHRydWUgfSk7XG4gICAgdHJhbnNmb3JtVHJhbnNsYXRlKHNvdXRoRWFzdCwgbGVuZ3RoIC8gMiwgMTgwLCB7IHVuaXRzLCBtdXRhdGU6IHRydWUgfSk7XG4gICAgY29uc3QgcG9pbnRzID0gW1xuICAgICAgICBub3J0aEVhc3QuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsIG5vcnRoV2VzdC5nZW9tZXRyeS5jb29yZGluYXRlcyxcbiAgICAgICAgc291dGhXZXN0Lmdlb21ldHJ5LmNvb3JkaW5hdGVzLCBzb3V0aEVhc3QuZ2VvbWV0cnkuY29vcmRpbmF0ZXMsXG4gICAgICAgIG5vcnRoRWFzdC5nZW9tZXRyeS5jb29yZGluYXRlc1xuICAgIF07XG4gICAgcmV0dXJuIHBvbHlnb24oW3BvaW50c10sIHByb3BlcnRpZXMpO1xufVxuIiwiaW1wb3J0IHhtbDJqcyBmcm9tICd4bWwyanMnO1xuaW1wb3J0IHsgZmVhdHVyZUNvbGxlY3Rpb24gfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBhcmVhIGZyb20gJ0B0dXJmL2FyZWEnO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmltcG9ydCB7IFByb2o0RGVmcyB9IGZyb20gJy4vcHJvamVjdGlvbic7XG5pbXBvcnQgeyBnZXRQcm9wIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IGNvbnZlcnRTdXJmYWNlcyB9IGZyb20gJy4vc3VyZmFjZSc7XG5pbXBvcnQgeyBjb252ZXJ0UGFyY2VscyB9IGZyb20gJy4vcGFyY2VsJztcbmltcG9ydCB7IGNvbnZlcnRQaXBlTmV0d29ya3MgfSBmcm9tICcuL3BpcGUtbmV0d29yayc7XG5pbXBvcnQgeyBjb252ZXJ0Q0dQb2ludHMgfSBmcm9tICcuL2NnLXBvaW50JztcbmV4cG9ydCBjb25zdCBQUk9KRUNUSU9OX0FVVE9fREVURUNUID0gJ2F1dG9fZGV0ZWN0JztcbmV4cG9ydCBjb25zdCBDT05WRVJUX1NVUkZBQ0VTID0gJ3N1cmZhY2VzJztcbmV4cG9ydCBjb25zdCBDT05WRVJUX1BBUkNFTFMgPSAncGFyY2Vscyc7XG5leHBvcnQgY29uc3QgQ09OVkVSVF9QSVBFX05FVFdPUktTID0gJ3BpcGVfbmV0d29ya3MnO1xuZXhwb3J0IGNvbnN0IENPTlZFUlRfQ0dfUE9JTlRTID0gJ2NnX3BvaW50cyc7XG5jb25zdCBjb252ZXJ0ZXJzID0ge1xuICAgIFtDT05WRVJUX1BBUkNFTFNdOiBjb252ZXJ0UGFyY2VscyxcbiAgICBbQ09OVkVSVF9TVVJGQUNFU106IGNvbnZlcnRTdXJmYWNlcyxcbiAgICBbQ09OVkVSVF9QSVBFX05FVFdPUktTXTogY29udmVydFBpcGVOZXR3b3JrcyxcbiAgICBbQ09OVkVSVF9DR19QT0lOVFNdOiBjb252ZXJ0Q0dQb2ludHMsXG59O1xuLy8gQmFzZWQgb24gYWxleGdsZWl0aCdzIHByZWxpbWluYXJ5IHdvcmtcbi8vIGdpdGh1Yi5jb20vYWxleGdsZWl0aC9sYW5kLXhtbC10by1nZW9qc29uXG5leHBvcnQgY2xhc3MgQ29udmVydGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHByb2plY3Rpb246IFBST0pFQ1RJT05fQVVUT19ERVRFQ1QsXG4gICAgICAgICAgICBlbmFibGVkQ29udmVydGVyczogW0NPTlZFUlRfU1VSRkFDRVMsIENPTlZFUlRfUEFSQ0VMUywgQ09OVkVSVF9QSVBFX05FVFdPUktTLCBDT05WRVJUX0NHX1BPSU5UU10sXG4gICAgICAgICAgICBwYXJzZXI6IHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemU6IHRydWVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwcm9qNERlZnM6IFtcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIFwiRVBTRzoyODM1NVwiLFxuICAgICAgICAgICAgICAgICAgICBcIitwcm9qPXV0bSArem9uZT01NSArc291dGggK2VsbHBzPUdSUzgwICt0b3dnczg0PTAsMCwwLDAsMCwwLDAgK3VuaXRzPW0gK25vX2RlZnNcIixcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIC4uLlByb2o0RGVmcyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBmZWF0dXJlTWFwcGVyOiAoZmVhdHVyZSwgb3B0cykgPT4gZmVhdHVyZSxcbiAgICAgICAgICAgIGNvbG9yT3B0czoge1xuICAgICAgICAgICAgICAgIGh1ZTogJ2JsdWUnLFxuICAgICAgICAgICAgICAgIGx1bWlub3NpdHk6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICBzZWVkOiAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgdG9HZW9KU09OKHhtbCwgb3B0cyA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlck9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLnBhcnNlciwgb3B0cy5wYXJzZXIpO1xuICAgICAgICBjb25zdCBwYXJzZXIgPSBuZXcgeG1sMmpzLlBhcnNlcihwYXJzZXJPcHRpb25zKTtcbiAgICAgICAgdGhpcy5jb25maWd1cmVQcm9qNChvcHRzLnByb2o0RGVmcyk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBwYXJzZXIucGFyc2VTdHJpbmcoeG1sLCAoZXJyLCB4bWxPYmopID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgbGV0IGdlb2pzb247XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZ2VvanNvbiA9IHRoaXMuY29udmVydFRvR2VvSlNPTih4bWxPYmosIG9wdHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoZ2VvanNvbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnZlcnRUb0dlb0pTT04oeG1sT2JqLCBvcHRzID0ge30pIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdE9wdGlvbnMsIG9wdHMpO1xuICAgICAgICAvLyBVc2Ugc3BlY2lmaWVkIHByb2plY3Rpb24gb3IgdHJ5IHRvIGZpbmQgb25lIGluIHRoZSBMYW5kWE1MIGZpbGVcbiAgICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHRoaXMuZ2V0TGFuZFhNTFByb2plY3Rpb24oeG1sT2JqLCBvcHRpb25zLnByb2plY3Rpb24gfHwgdGhpcy5kZWZhdWx0T3B0aW9ucy5wcm9qZWN0aW9uKTtcbiAgICAgICAgaWYgKCFwcm9qZWN0aW9uKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU291cmNlIHByb2plY3Rpb24gY2FuIG5vdCBiZSBmb3VuZCAhXCIpO1xuICAgICAgICAvLyBMaXN0IGVuYWJsZWQgY29udmVydGVyc1xuICAgICAgICBjb25zdCBlbmFibGVkQ29udmVydGVycyA9IEFycmF5LmlzQXJyYXkob3B0cy5lbmFibGVkQ29udmVydGVycykgP1xuICAgICAgICAgICAgb3B0cy5lbmFibGVkQ29udmVydGVycyA6XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRPcHRpb25zLmVuYWJsZWRDb252ZXJ0ZXJzO1xuICAgICAgICBsZXQgZmVhdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gQ29udmVydCBMYW5kWE1MIGVudGl0aWVzIHRvIEdlb0pTT04gZmVhdHVyZXNcbiAgICAgICAgZW5hYmxlZENvbnZlcnRlcnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgIGlmICghKGMgaW4gY29udmVydGVycykpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJFeGVjdXRpbmcgY29udmVydCAnJXMnLi4uXCIsIGMpO1xuICAgICAgICAgICAgY29uc3QgbmV3RmVhdHVyZXMgPSBjb252ZXJ0ZXJzW2NdKHhtbE9iaiwgcHJvamVjdGlvbiwgb3B0aW9ucyk7XG4gICAgICAgICAgICBmZWF0dXJlcy5wdXNoKC4uLm5ld0ZlYXR1cmVzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFwcGx5IGZlYXR1cmVzIG1hcHBlciBmdW5jdGlvbiBpZiBkZWZpbmVkXG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5mZWF0dXJlTWFwcGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmZWF0dXJlcyA9IGZlYXR1cmVzLm1hcChmID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5mZWF0dXJlTWFwcGVyKGYsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydCBmZWF0dXJlIGJ5IHJldmVyc2UgYXJlYVxuICAgICAgICAvLyB0byBlYXNlIHJlbmRlcmluZ1xuICAgICAgICBmZWF0dXJlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXJlYShhKSA+IGFyZWEoYikpXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgaWYgKGFyZWEoYSkgPCBhcmVhKGIpKVxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZXR1cm4gZXh0cmFjdGVkIGZlYXR1cmVzIGFzIGEgZmVhdHVyZSBjb2xsZWN0aW9uXG4gICAgICAgIHJldHVybiBmZWF0dXJlQ29sbGVjdGlvbihmZWF0dXJlcyk7XG4gICAgfVxuICAgIGNvbmZpZ3VyZVByb2o0KGFkZGl0aW9uYWxQcm9qNERlZnMpIHtcbiAgICAgICAgY29uc3QgcHJvajREZWZzID0gdGhpcy5kZWZhdWx0T3B0aW9ucy5wcm9qNERlZnMuc2xpY2UoMCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxQcm9qNERlZnMpKVxuICAgICAgICAgICAgcHJvajREZWZzLnB1c2goLi4uYWRkaXRpb25hbFByb2o0RGVmcyk7XG4gICAgICAgIHByb2o0LmRlZnMocHJvajREZWZzKTtcbiAgICB9XG4gICAgZ2V0TGFuZFhNTFByb2plY3Rpb24oeG1sT2JqLCBtYW51YWxQcm9qZWN0aW9uKSB7XG4gICAgICAgIGlmIChtYW51YWxQcm9qZWN0aW9uICE9PSBQUk9KRUNUSU9OX0FVVE9fREVURUNUKVxuICAgICAgICAgICAgcmV0dXJuIG1hbnVhbFByb2plY3Rpb247XG4gICAgICAgIGxldCBwcm9qZWN0aW9uID0gbnVsbDtcbiAgICAgICAgaWYgKCFwcm9qZWN0aW9uKVxuICAgICAgICAgICAgcHJvamVjdGlvbiA9IHRoaXMuZmluZFVUTVByb2plY3Rpb24oeG1sT2JqKTtcbiAgICAgICAgcmV0dXJuIHByb2plY3Rpb247XG4gICAgfVxuICAgIGZpbmRVVE1Qcm9qZWN0aW9uKHhtbE9iaikge1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uID0gZ2V0UHJvcCh4bWxPYmosIFwiTGFuZFhNTFwiLCBcIkNvb3JkaW5hdGVTeXN0ZW1cIiwgMCwgXCIkXCIsIFwiZGF0dW1cIik7XG4gICAgICAgIGNvbnN0IHpvbmUgPSBnZXRQcm9wKHhtbE9iaiwgXCJMYW5kWE1MXCIsIFwiQ2dQb2ludHNcIiwgMCwgXCIkXCIsIFwiem9uZU51bWJlclwiKTtcbiAgICAgICAgbGV0IHV0bVByb2plY3Rpb24gPSBudWxsO1xuICAgICAgICBpZiAocHJvamVjdGlvbiAmJiB6b25lKSB7XG4gICAgICAgICAgICB1dG1Qcm9qZWN0aW9uID0gYCtwcm9qPXV0bSArem9uZT0ke3pvbmV9ICtzb3V0aCArZWxscHM9R1JTODAgK3Rvd2dzODQ9MCwwLDAsMCwwLDAsMCArdW5pdHM9bSArbm9fZGVmcyBgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1dG1Qcm9qZWN0aW9uO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGdldFByb3AsIHBhcnNlU2VxdWVuY2UsIGdldENvbG9yIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IHBvbHlnb24gfSBmcm9tICdAdHVyZi9oZWxwZXJzJztcbmltcG9ydCBwcm9qNCBmcm9tICdwcm9qNCc7XG5leHBvcnQgY29uc3QgTEFORFhNTF9QQVJDRUwgPSAncGFyY2VsJztcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0UGFyY2Vscyh4bWxPYmosIHByb2plY3Rpb24sIG9wdHMpIHtcbiAgICBjb25zdCBvcmlnaW5hbFBvaW50cyA9IGdldFByb3AoeG1sT2JqLCBcIkxhbmRYTUxcIiwgXCJDZ1BvaW50c1wiLCAwLCBcIkNnUG9pbnRcIik7XG4gICAgY29uc3Qgb3JpZ2luYWxQYXJjZWxzID0gZ2V0UHJvcCh4bWxPYmosIFwiTGFuZFhNTFwiLCBcIlBhcmNlbHNcIiwgMCwgXCJQYXJjZWxcIik7XG4gICAgY29uc3QgcG9pbnRzID0ge307XG4gICAgY29uc3QgcG9seWdvbnMgPSBbXTtcbiAgICAvLyBQYXJzZSBvdXQgdGhlIHBvaW50c1xuICAgIGZvciAobGV0IHB0IGluIG9yaWdpbmFsUG9pbnRzKSB7XG4gICAgICAgIGNvbnN0IG9wdCA9IG9yaWdpbmFsUG9pbnRzW3B0XTtcbiAgICAgICAgY29uc3QgbmFtZSA9IG9wdC4kLm5hbWUucmVwbGFjZSgvIC9nLCAnJyk7XG4gICAgICAgIGxldCBjb29yZHMgPSBwYXJzZVNlcXVlbmNlKG9wdC5fKS5tYXAoY29vcmQgPT4gcGFyc2VGbG9hdChjb29yZCkpO1xuICAgICAgICBjb29yZHMgPSBbY29vcmRzWzFdLCBjb29yZHNbMF0sIGNvb3Jkc1syXV07XG4gICAgICAgIGNvb3JkcyA9IHByb2o0KHByb2plY3Rpb24sICdXR1M4NCcsIGNvb3Jkcyk7XG4gICAgICAgIHBvaW50c1tuYW1lXSA9IGNvb3JkcztcbiAgICB9XG4gICAgLy8gUGFyc2Ugb3V0IHRoZSBwYXJjZWxzXG4gICAgZm9yIChsZXQgcGMgaW4gb3JpZ2luYWxQYXJjZWxzKSB7XG4gICAgICAgIHZhciBvcGMgPSBvcmlnaW5hbFBhcmNlbHNbcGNdO1xuICAgICAgICB2YXIgZ2VvbSA9IG9wYy5Db29yZEdlb207XG4gICAgICAgIGlmIChnZW9tICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxldCBjb29yZHMgPSBbXTtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gc3RvcmUgdGhlIHN0YXJ0IHRvIGFkZCBhdCB0aGUgZW5kXG4gICAgICAgICAgICB2YXIgZW5kQ29vcmQgPSBudWxsO1xuICAgICAgICAgICAgdmFyIG9yaWdDb29yZHMgPSBvcGMuQ29vcmRHZW9tWzBdLkxpbmU7XG4gICAgICAgICAgICBmb3IgKGxldCBvYyBpbiBvcmlnQ29vcmRzKSB7XG4gICAgICAgICAgICAgICAgLy8gVkVSWSBpbXBvcnRhbnQgbm90ZS4gVGhpcyBjb2RlIGRvZXMgTk9UIGhhbmRsZSB0aGUgb3RoZXIgdHdvIHR5cGVzXG4gICAgICAgICAgICAgICAgLy8gb2YgY29vcmRpbmF0ZSBkZWZpbml0aW9ucywgY3VydmVzIGFuZCBpcnJlZ3VsYXIgbGluZXMuIFRPRE86IGZpeG1lLlxuICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IG9yaWdDb29yZHNbb2NdLlN0YXJ0WzBdLiQucG50UmVmO1xuICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IHVzZSB0aGUgZW5kIChpdCBwcm9iYWJseSBzaG91bGQgYmUgY2hlY2tlZCwgYmVjYXVzZSBpZiB0aGUgZW5kIGlzbid0IHRoZSBzdGFydClcbiAgICAgICAgICAgICAgICB2YXIgZW5kID0gb3JpZ0Nvb3Jkc1tvY10uRW5kWzBdLiQucG50UmVmO1xuICAgICAgICAgICAgICAgIHZhciBzdGFydFBvaW50ID0gcG9pbnRzW3N0YXJ0XTtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0UG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0ZhaWxlZCB0byBnZXQgc3RhcnQgcG9pbnQnLCBzdGFydCwgc3RhcnRQb2ludClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGNyZWF0aW5nIHRoZSBwb2x5Z29uXG4gICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5wdXNoKHBvaW50c1tzdGFydF0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVuZENvb3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgZmlyc3QgY29vcmQsIHRvIHB1dCBiYWNrIG9uIHRvIGNsb3NlIHRoZSBwb2x5Z29uXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRDb29yZCA9IHBvaW50c1tzdGFydF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29vcmRzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICBjb29yZHMucHVzaChlbmRDb29yZCk7XG4gICAgICAgICAgICAgICAgY29vcmRzID0gW2Nvb3Jkc107XG4gICAgICAgICAgICAgICAgLy8gbmFtZT1cIjEwMVwiIGNsYXNzPVwiTG90XCIgc3RhdGU9XCJwcm9wb3NlZFwiICBwYXJjZWxUeXBlPVwiU2luZ2xlXCJcbiAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogb3BjLiQubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgbGFuZHhtbENsYXNzOiBvcGMuJC5jbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgbGFuZHhtbFN0YXRlOiBvcGMuJC5zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgbGFuZHhtbFBhcmNlbFR5cGU6IG9wYy4kLnBhcmNlbFR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGxhbmR4bWxUeXBlOiBMQU5EWE1MX1BBUkNFTCxcbiAgICAgICAgICAgICAgICAgICAgbGFuZHhtbENvbG9yOiBnZXRDb2xvcihgcGFyY2VsLSR7bmFtZX1gLCBvcHRzLmNvbG9yT3B0cyksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwb2x5Z29ucy5wdXNoKHBvbHlnb24oY29vcmRzLCBwYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkNvdWxkbid0IGNyZWF0ZSBhIHBvbHlnb24gYmVjYXVzZSB3ZSBmb3VuZCBsZXNzIHRoYW4gMiBjb29yZHNcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiTm8gZ2VvbWV0cnlcIilcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcG9seWdvbnM7XG59XG4iLCJpbXBvcnQgeyBnZXRQcm9wLCBwYXJzZVNlcXVlbmNlLCBnZXRDb2xvciB9IGZyb20gJy4vdXRpbCc7XG5pbXBvcnQgeyBwb2x5Z29uIH0gZnJvbSAnQHR1cmYvaGVscGVycyc7XG5pbXBvcnQgdW5pb24gZnJvbSAnQHR1cmYvdW5pb24nO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmV4cG9ydCBjb25zdCBMQU5EWE1MX1NVUkZBQ0UgPSAnc3VyZmFjZSc7XG5leHBvcnQgZnVuY3Rpb24gY29udmVydFN1cmZhY2VzKHhtbE9iaiwgcHJvamVjdGlvbiwgb3B0cykge1xuICAgIGNvbnN0IGZlYXR1cmVzID0gW107XG4gICAgY29uc3Qgc3VyZmFjZXNDb250YWluZXJOb2RlcyA9IGdldFByb3AoeG1sT2JqLCBcIkxhbmRYTUxcIiwgXCJTdXJmYWNlc1wiKTtcbiAgICBpZiAoIXN1cmZhY2VzQ29udGFpbmVyTm9kZXMpXG4gICAgICAgIHJldHVybiBmZWF0dXJlcztcbiAgICBzdXJmYWNlc0NvbnRhaW5lck5vZGVzLmZvckVhY2goc2MgPT4ge1xuICAgICAgICBjb25zdCBhdHRycyA9IChzYy4kIHx8IHt9KTtcbiAgICAgICAgY29uc3QgYmFzZVByb3BzID0ge1xuICAgICAgICAgICAgbmFtZTogYXR0cnMubmFtZSB8fCBcIlwiLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGF0dHJzLmRlc2MsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHN1cmZhY2VOb2RlcyA9IGdldFByb3Aoc2MsIFwiU3VyZmFjZVwiKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHN1cmZhY2VOb2RlcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN1cmZhY2VOb2Rlcy5mb3JFYWNoKHMgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGJhc2VQcm9wcy5uYW1lID8gKGJhc2VQcm9wcy5uYW1lICsgJyAtICcgKyBzLiQubmFtZSkgOiBzLiQubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gYmFzZVByb3BzLmRlc2NyaXB0aW9uID8gKGJhc2VQcm9wcy5kZXNjcmlwdGlvbiArICcgLSAnICsgcy4kLmRlc2MpIDogcy4kLmRlc2M7XG4gICAgICAgICAgICBjb25zdCBmZWF0dXJlUHJvcHMgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgbGFuZHhtbFR5cGU6IExBTkRYTUxfU1VSRkFDRSxcbiAgICAgICAgICAgICAgICBsYW5keG1sQ29sb3I6IGdldENvbG9yKGBzdXJmYWNlLSR7bmFtZX1gLCBvcHRzLmNvbG9yT3B0cyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbGV0IHN1cmZhY2VGZWF0dXJlcyA9IGNvbnZlcnRCb3VuZGFyaWVzKHMsIHByb2plY3Rpb24sIGZlYXR1cmVQcm9wcywgb3B0cyk7XG4gICAgICAgICAgICBpZiAoc3VyZmFjZUZlYXR1cmVzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIGZlYXR1cmVzLnB1c2goLi4uc3VyZmFjZUZlYXR1cmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1cmZhY2VGZWF0dXJlcyA9IGNvbnZlcnRGYWNlcyhzLCBwcm9qZWN0aW9uLCBmZWF0dXJlUHJvcHMsIG9wdHMpO1xuICAgICAgICAgICAgICAgIGxldCBtZXJnZWQgPSBzdXJmYWNlRmVhdHVyZXNbMF07XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkFwcGx5aW5nIHVuaW9uIHRvICVzIGZhY2VzICglZCBmYWNlcyB0byBtZXJnZSlcIiwgbWVyZ2VkLnByb3BlcnRpZXMubmFtZSwgc3VyZmFjZUZlYXR1cmVzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBzdXJmYWNlRmVhdHVyZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHQgPSBzdXJmYWNlRmVhdHVyZXNbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5leHQpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWQgPSB1bmlvbihtZXJnZWQsIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCItLT4gQ291bGQgbm90IGFwcGx5IHVuaW9uIHRvICVzICgjJWQpXCIsIG5leHQucHJvcGVydGllcy5uYW1lLCBpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtZXJnZWQucHJvcGVydGllcyA9IGZlYXR1cmVQcm9wcztcbiAgICAgICAgICAgICAgICBmZWF0dXJlcy5wdXNoKG1lcmdlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBmZWF0dXJlcztcbn1cbmZ1bmN0aW9uIGNvbnZlcnRGYWNlcyhzdXJmYWNlLCBwcm9qZWN0aW9uLCBmZWF0dXJlUHJvcHMsIG9wdHMpIHtcbiAgICBjb25zdCBwb2ludE5vZGVzID0gZ2V0UHJvcChzdXJmYWNlLCBcIkRlZmluaXRpb25cIiwgMCwgXCJQbnRzXCIsIDAsIFwiUFwiKTtcbiAgICBjb25zdCBmYWNlTm9kZXMgPSBnZXRQcm9wKHN1cmZhY2UsIFwiRGVmaW5pdGlvblwiLCAwLCBcIkZhY2VzXCIsIDAsIFwiRlwiKTtcbiAgICBjb25zdCBwb2ludHMgPSB7fTtcbiAgICBwb2ludE5vZGVzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGxldCBwb2ludENvb3JkcyA9IHBhcnNlU2VxdWVuY2UocC5fKS5tYXAodiA9PiBwYXJzZUZsb2F0KHYpKTtcbiAgICAgICAgcG9pbnRDb29yZHMgPSBbcG9pbnRDb29yZHNbMV0sIHBvaW50Q29vcmRzWzBdLCBwb2ludENvb3Jkc1syXV07XG4gICAgICAgIHBvaW50Q29vcmRzID0gcHJvajQocHJvamVjdGlvbiwgJ1dHUzg0JywgcG9pbnRDb29yZHMpO1xuICAgICAgICBjb25zdCBwb2ludElkID0gcC4kLmlkO1xuICAgICAgICBwb2ludHNbcG9pbnRJZF0gPSB7IG5hbWU6IHAuJC5uYW1lLCBjb29yZHM6IHBvaW50Q29vcmRzIH07XG4gICAgfSk7XG4gICAgY29uc3QgZmFjZXMgPSBbXTtcbiAgICBmYWNlTm9kZXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgY29uc3QgcG9pbnRJZHMgPSBwYXJzZVNlcXVlbmNlKGYpO1xuICAgICAgICBjb25zdCBjb29yZHMgPSBbXTtcbiAgICAgICAgcG9pbnRJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBwID0gcG9pbnRzW2lkXTtcbiAgICAgICAgICAgIGNvb3Jkcy5wdXNoKHAuY29vcmRzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvb3Jkcy5wdXNoKHBvaW50c1twb2ludElkc1swXV0uY29vcmRzKTtcbiAgICAgICAgZmFjZXMucHVzaChwb2x5Z29uKFtjb29yZHNdLCBmZWF0dXJlUHJvcHMpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gWy4uLmZhY2VzXTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRCb3VuZGFyaWVzKHN1cmZhY2UsIHByb2plY3Rpb24sIGZlYXR1cmVQcm9wcywgb3B0cykge1xuICAgIGNvbnN0IGJvdW5kYXJ5Tm9kZXMgPSBnZXRQcm9wKHN1cmZhY2UsIFwiU291cmNlRGF0YVwiLCAwLCBcIkJvdW5kYXJpZXNcIiwgMCwgXCJCb3VuZGFyeVwiKTtcbiAgICBpZiAoIWJvdW5kYXJ5Tm9kZXMpXG4gICAgICAgIHJldHVybiBbXTtcbiAgICBjb25zdCBwb2x5Z29ucyA9IFtdO1xuICAgIGJvdW5kYXJ5Tm9kZXMuZm9yRWFjaChib3VuZGFyeSA9PiB7XG4gICAgICAgIGNvbnN0IHBudExpc3QzRE5vZGUgPSBnZXRQcm9wKGJvdW5kYXJ5LCAnUG50TGlzdDNEJywgMCk7XG4gICAgICAgIGNvbnN0IHNlcSA9IHBhcnNlU2VxdWVuY2UocG50TGlzdDNETm9kZSkubWFwKHAgPT4gcGFyc2VGbG9hdChwKSk7XG4gICAgICAgIGNvbnN0IGNvb3JkcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcS5sZW5ndGg7IGkgKz0gMykge1xuICAgICAgICAgICAgbGV0IGMgPSBbc2VxW2kgKyAxXSwgc2VxW2ldXTtcbiAgICAgICAgICAgIGMgPSBwcm9qNChwcm9qZWN0aW9uLCAnV0dTODQnLCBjKTtcbiAgICAgICAgICAgIGNvb3Jkcy5wdXNoKGMpO1xuICAgICAgICB9XG4gICAgICAgIGNvb3Jkcy5wdXNoKGNvb3Jkc1swXSk7XG4gICAgICAgIHBvbHlnb25zLnB1c2gocG9seWdvbihbY29vcmRzXSwgZmVhdHVyZVByb3BzKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHBvbHlnb25zO1xufVxuIiwiaW1wb3J0IHsgZ2V0UHJvcCwgcGFyc2VTZXF1ZW5jZSwgZ2V0Q29sb3IgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHByb2o0IGZyb20gJ3Byb2o0JztcbmV4cG9ydCBjb25zdCBMQU5EWE1MX1BPSU5UID0gJ2NnX3BvaW50JztcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0Q0dQb2ludHMoeG1sT2JqLCBwcm9qZWN0aW9uLCBvcHRzKSB7XG4gICAgY29uc3QgZmVhdHVyZXMgPSBbXTtcbiAgICBjb25zdCBwb2ludHNDb250YWluZXJOb2RlcyA9IGdldFByb3AoeG1sT2JqLCBcIkxhbmRYTUxcIiwgXCJDZ1BvaW50c1wiKTtcbiAgICBpZiAoIXBvaW50c0NvbnRhaW5lck5vZGVzKVxuICAgICAgICByZXR1cm4gZmVhdHVyZXM7XG4gICAgcG9pbnRzQ29udGFpbmVyTm9kZXMuZm9yRWFjaChwYyA9PiB7XG4gICAgICAgIGNvbnN0IGF0dHJzID0gKHBjLiQgfHwge30pO1xuICAgICAgICBjb25zdCBiYXNlUHJvcHMgPSB7XG4gICAgICAgICAgICBuYW1lOiBhdHRycy5uYW1lIHx8IFwiXCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogYXR0cnMuZGVzY3JpcHRpb24gfHwgXCJcIixcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcG9pbnROb2RlcyA9IGdldFByb3AocGMsIFwiQ2dQb2ludFwiKTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHBvaW50Tm9kZXMpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwb2ludE5vZGVzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gYmFzZVByb3BzLm5hbWUgPyAoYmFzZVByb3BzLm5hbWUgKyAnIC0gJyArIHAuJC5uYW1lKSA6IHAuJC5uYW1lO1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBiYXNlUHJvcHMuZGVzY3JpcHRpb24gPyAoYmFzZVByb3BzLmRlc2NyaXB0aW9uICsgJyAtICcgKyBwLiQuZGVzYykgOiBwLiQuZGVzYztcbiAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBsYW5keG1sVHlwZTogTEFORFhNTF9QT0lOVCxcbiAgICAgICAgICAgICAgICBsYW5keG1sQ29sb3I6IGdldENvbG9yKGBwb2ludC0ke25hbWV9YCwgb3B0cy5jb2xvck9wdHMpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IHBvaW50RmVhdHVyZSA9IGNvbnZlcnRQb2ludChwLCBwcm9qZWN0aW9uLCBmZWF0dXJlUHJvcHMsIG9wdHMpO1xuICAgICAgICAgICAgZmVhdHVyZXMucHVzaChwb2ludEZlYXR1cmUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmVhdHVyZXM7XG59XG5mdW5jdGlvbiBjb252ZXJ0UG9pbnQoY2dQb2ludCwgcHJvamVjdGlvbiwgZmVhdHVyZVByb3BzKSB7XG4gICAgbGV0IHBvaW50Q29vcmRzID0gcGFyc2VTZXF1ZW5jZShjZ1BvaW50Ll8pLm1hcCh2ID0+IHBhcnNlRmxvYXQodikpO1xuICAgIHBvaW50Q29vcmRzID0gW3BvaW50Q29vcmRzWzFdLCBwb2ludENvb3Jkc1swXSwgcG9pbnRDb29yZHNbMl1dO1xuICAgIHBvaW50Q29vcmRzID0gcHJvajQocHJvamVjdGlvbiwgJ1dHUzg0JywgcG9pbnRDb29yZHMpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwiRmVhdHVyZVwiLFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgICAgdHlwZTogXCJQb2ludFwiLFxuICAgICAgICAgICAgY29vcmRpbmF0ZXM6IFsuLi5wb2ludENvb3Jkc10sXG4gICAgICAgIH0sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIC4uLmZlYXR1cmVQcm9wcyxcbiAgICAgICAgICAgIGxhbmR4bWxBbHRpdHVkZTogcG9pbnRDb29yZHNbMl0sXG4gICAgICAgIH1cbiAgICB9O1xufVxuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIGV4cG9ydHMuc3RyaXBCT00gPSBmdW5jdGlvbihzdHIpIHtcbiAgICBpZiAoc3RyWzBdID09PSAnXFx1RkVGRicpIHtcbiAgICAgIHJldHVybiBzdHIuc3Vic3RyaW5nKDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuICB2YXIgYnVpbGRlciwgZGVmYXVsdHMsIGVzY2FwZUNEQVRBLCByZXF1aXJlc0NEQVRBLCB3cmFwQ0RBVEEsXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGJ1aWxkZXIgPSByZXF1aXJlKCd4bWxidWlsZGVyJyk7XG5cbiAgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJykuZGVmYXVsdHM7XG5cbiAgcmVxdWlyZXNDREFUQSA9IGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBlbnRyeSA9PT0gXCJzdHJpbmdcIiAmJiAoZW50cnkuaW5kZXhPZignJicpID49IDAgfHwgZW50cnkuaW5kZXhPZignPicpID49IDAgfHwgZW50cnkuaW5kZXhPZignPCcpID49IDApO1xuICB9O1xuXG4gIHdyYXBDREFUQSA9IGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgcmV0dXJuIFwiPCFbQ0RBVEFbXCIgKyAoZXNjYXBlQ0RBVEEoZW50cnkpKSArIFwiXV0+XCI7XG4gIH07XG5cbiAgZXNjYXBlQ0RBVEEgPSBmdW5jdGlvbihlbnRyeSkge1xuICAgIHJldHVybiBlbnRyeS5yZXBsYWNlKCddXT4nLCAnXV1dXT48IVtDREFUQVs+Jyk7XG4gIH07XG5cbiAgZXhwb3J0cy5CdWlsZGVyID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIEJ1aWxkZXIob3B0cykge1xuICAgICAgdmFyIGtleSwgcmVmLCB2YWx1ZTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgICAgcmVmID0gZGVmYXVsdHNbXCIwLjJcIl07XG4gICAgICBmb3IgKGtleSBpbiByZWYpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwocmVmLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgdmFsdWUgPSByZWZba2V5XTtcbiAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoa2V5IGluIG9wdHMpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwob3B0cywga2V5KSkgY29udGludWU7XG4gICAgICAgIHZhbHVlID0gb3B0c1trZXldO1xuICAgICAgICB0aGlzLm9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIEJ1aWxkZXIucHJvdG90eXBlLmJ1aWxkT2JqZWN0ID0gZnVuY3Rpb24ocm9vdE9iaikge1xuICAgICAgdmFyIGF0dHJrZXksIGNoYXJrZXksIHJlbmRlciwgcm9vdEVsZW1lbnQsIHJvb3ROYW1lO1xuICAgICAgYXR0cmtleSA9IHRoaXMub3B0aW9ucy5hdHRya2V5O1xuICAgICAgY2hhcmtleSA9IHRoaXMub3B0aW9ucy5jaGFya2V5O1xuICAgICAgaWYgKChPYmplY3Qua2V5cyhyb290T2JqKS5sZW5ndGggPT09IDEpICYmICh0aGlzLm9wdGlvbnMucm9vdE5hbWUgPT09IGRlZmF1bHRzWycwLjInXS5yb290TmFtZSkpIHtcbiAgICAgICAgcm9vdE5hbWUgPSBPYmplY3Qua2V5cyhyb290T2JqKVswXTtcbiAgICAgICAgcm9vdE9iaiA9IHJvb3RPYmpbcm9vdE5hbWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdE5hbWUgPSB0aGlzLm9wdGlvbnMucm9vdE5hbWU7XG4gICAgICB9XG4gICAgICByZW5kZXIgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGVsZW1lbnQsIG9iaikge1xuICAgICAgICAgIHZhciBhdHRyLCBjaGlsZCwgZW50cnksIGluZGV4LCBrZXksIHZhbHVlO1xuICAgICAgICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuY2RhdGEgJiYgcmVxdWlyZXNDREFUQShvYmopKSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQucmF3KHdyYXBDREFUQShvYmopKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVsZW1lbnQudHh0KG9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgIGZvciAoaW5kZXggaW4gb2JqKSB7XG4gICAgICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKG9iaiwgaW5kZXgpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2hpbGQgPSBvYmpbaW5kZXhdO1xuICAgICAgICAgICAgICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gY2hpbGRba2V5XTtcbiAgICAgICAgICAgICAgICBlbGVtZW50ID0gcmVuZGVyKGVsZW1lbnQuZWxlKGtleSksIGVudHJ5KS51cCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvciAoa2V5IGluIG9iaikge1xuICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChvYmosIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBjaGlsZCA9IG9ialtrZXldO1xuICAgICAgICAgICAgICBpZiAoa2V5ID09PSBhdHRya2V5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgZm9yIChhdHRyIGluIGNoaWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY2hpbGRbYXR0cl07XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LmF0dChhdHRyLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gY2hhcmtleSkge1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmNkYXRhICYmIHJlcXVpcmVzQ0RBVEEoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5yYXcod3JhcENEQVRBKGNoaWxkKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnR4dChjaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpbmRleCBpbiBjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwoY2hpbGQsIGluZGV4KSkgY29udGludWU7XG4gICAgICAgICAgICAgICAgICBlbnRyeSA9IGNoaWxkW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZW50cnkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmNkYXRhICYmIHJlcXVpcmVzQ0RBVEEoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZWxlKGtleSkucmF3KHdyYXBDREFUQShlbnRyeSkpLnVwKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZWxlKGtleSwgZW50cnkpLnVwKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSByZW5kZXIoZWxlbWVudC5lbGUoa2V5KSwgZW50cnkpLnVwKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjaGlsZCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSByZW5kZXIoZWxlbWVudC5lbGUoa2V5KSwgY2hpbGQpLnVwKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycgJiYgX3RoaXMub3B0aW9ucy5jZGF0YSAmJiByZXF1aXJlc0NEQVRBKGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQuZWxlKGtleSkucmF3KHdyYXBDREFUQShjaGlsZCkpLnVwKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkID0gJyc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5lbGUoa2V5LCBjaGlsZC50b1N0cmluZygpKS51cCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgcm9vdEVsZW1lbnQgPSBidWlsZGVyLmNyZWF0ZShyb290TmFtZSwgdGhpcy5vcHRpb25zLnhtbGRlYywgdGhpcy5vcHRpb25zLmRvY3R5cGUsIHtcbiAgICAgICAgaGVhZGxlc3M6IHRoaXMub3B0aW9ucy5oZWFkbGVzcyxcbiAgICAgICAgYWxsb3dTdXJyb2dhdGVDaGFyczogdGhpcy5vcHRpb25zLmFsbG93U3Vycm9nYXRlQ2hhcnNcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbmRlcihyb290RWxlbWVudCwgcm9vdE9iaikuZW5kKHRoaXMub3B0aW9ucy5yZW5kZXJPcHRzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIEJ1aWxkZXI7XG5cbiAgfSkoKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIGV4cG9ydHMuZGVmYXVsdHMgPSB7XG4gICAgXCIwLjFcIjoge1xuICAgICAgZXhwbGljaXRDaGFya2V5OiBmYWxzZSxcbiAgICAgIHRyaW06IHRydWUsXG4gICAgICBub3JtYWxpemU6IHRydWUsXG4gICAgICBub3JtYWxpemVUYWdzOiBmYWxzZSxcbiAgICAgIGF0dHJrZXk6IFwiQFwiLFxuICAgICAgY2hhcmtleTogXCIjXCIsXG4gICAgICBleHBsaWNpdEFycmF5OiBmYWxzZSxcbiAgICAgIGlnbm9yZUF0dHJzOiBmYWxzZSxcbiAgICAgIG1lcmdlQXR0cnM6IGZhbHNlLFxuICAgICAgZXhwbGljaXRSb290OiBmYWxzZSxcbiAgICAgIHZhbGlkYXRvcjogbnVsbCxcbiAgICAgIHhtbG5zOiBmYWxzZSxcbiAgICAgIGV4cGxpY2l0Q2hpbGRyZW46IGZhbHNlLFxuICAgICAgY2hpbGRrZXk6ICdAQCcsXG4gICAgICBjaGFyc0FzQ2hpbGRyZW46IGZhbHNlLFxuICAgICAgaW5jbHVkZVdoaXRlQ2hhcnM6IGZhbHNlLFxuICAgICAgYXN5bmM6IGZhbHNlLFxuICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgYXR0ck5hbWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgYXR0clZhbHVlUHJvY2Vzc29yczogbnVsbCxcbiAgICAgIHRhZ05hbWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgdmFsdWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgZW1wdHlUYWc6ICcnXG4gICAgfSxcbiAgICBcIjAuMlwiOiB7XG4gICAgICBleHBsaWNpdENoYXJrZXk6IGZhbHNlLFxuICAgICAgdHJpbTogZmFsc2UsXG4gICAgICBub3JtYWxpemU6IGZhbHNlLFxuICAgICAgbm9ybWFsaXplVGFnczogZmFsc2UsXG4gICAgICBhdHRya2V5OiBcIiRcIixcbiAgICAgIGNoYXJrZXk6IFwiX1wiLFxuICAgICAgZXhwbGljaXRBcnJheTogdHJ1ZSxcbiAgICAgIGlnbm9yZUF0dHJzOiBmYWxzZSxcbiAgICAgIG1lcmdlQXR0cnM6IGZhbHNlLFxuICAgICAgZXhwbGljaXRSb290OiB0cnVlLFxuICAgICAgdmFsaWRhdG9yOiBudWxsLFxuICAgICAgeG1sbnM6IGZhbHNlLFxuICAgICAgZXhwbGljaXRDaGlsZHJlbjogZmFsc2UsXG4gICAgICBwcmVzZXJ2ZUNoaWxkcmVuT3JkZXI6IGZhbHNlLFxuICAgICAgY2hpbGRrZXk6ICckJCcsXG4gICAgICBjaGFyc0FzQ2hpbGRyZW46IGZhbHNlLFxuICAgICAgaW5jbHVkZVdoaXRlQ2hhcnM6IGZhbHNlLFxuICAgICAgYXN5bmM6IGZhbHNlLFxuICAgICAgc3RyaWN0OiB0cnVlLFxuICAgICAgYXR0ck5hbWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgYXR0clZhbHVlUHJvY2Vzc29yczogbnVsbCxcbiAgICAgIHRhZ05hbWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgdmFsdWVQcm9jZXNzb3JzOiBudWxsLFxuICAgICAgcm9vdE5hbWU6ICdyb290JyxcbiAgICAgIHhtbGRlYzoge1xuICAgICAgICAndmVyc2lvbic6ICcxLjAnLFxuICAgICAgICAnZW5jb2RpbmcnOiAnVVRGLTgnLFxuICAgICAgICAnc3RhbmRhbG9uZSc6IHRydWVcbiAgICAgIH0sXG4gICAgICBkb2N0eXBlOiBudWxsLFxuICAgICAgcmVuZGVyT3B0czoge1xuICAgICAgICAncHJldHR5JzogdHJ1ZSxcbiAgICAgICAgJ2luZGVudCc6ICcgICcsXG4gICAgICAgICduZXdsaW5lJzogJ1xcbidcbiAgICAgIH0sXG4gICAgICBoZWFkbGVzczogZmFsc2UsXG4gICAgICBjaHVua1NpemU6IDEwMDAwLFxuICAgICAgZW1wdHlUYWc6ICcnLFxuICAgICAgY2RhdGE6IGZhbHNlXG4gICAgfVxuICB9O1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIHZhciBib20sIGRlZmF1bHRzLCBldmVudHMsIGlzRW1wdHksIHByb2Nlc3NJdGVtLCBwcm9jZXNzb3JzLCBzYXgsIHNldEltbWVkaWF0ZSxcbiAgICBiaW5kID0gZnVuY3Rpb24oZm4sIG1lKXsgcmV0dXJuIGZ1bmN0aW9uKCl7IHJldHVybiBmbi5hcHBseShtZSwgYXJndW1lbnRzKTsgfTsgfSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIHNheCA9IHJlcXVpcmUoJ3NheCcpO1xuXG4gIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuXG4gIGJvbSA9IHJlcXVpcmUoJy4vYm9tJyk7XG5cbiAgcHJvY2Vzc29ycyA9IHJlcXVpcmUoJy4vcHJvY2Vzc29ycycpO1xuXG4gIHNldEltbWVkaWF0ZSA9IHJlcXVpcmUoJ3RpbWVycycpLnNldEltbWVkaWF0ZTtcblxuICBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKS5kZWZhdWx0cztcblxuICBpc0VtcHR5ID0gZnVuY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSBcIm9iamVjdFwiICYmICh0aGluZyAhPSBudWxsKSAmJiBPYmplY3Qua2V5cyh0aGluZykubGVuZ3RoID09PSAwO1xuICB9O1xuXG4gIHByb2Nlc3NJdGVtID0gZnVuY3Rpb24ocHJvY2Vzc29ycywgaXRlbSwga2V5KSB7XG4gICAgdmFyIGksIGxlbiwgcHJvY2VzcztcbiAgICBmb3IgKGkgPSAwLCBsZW4gPSBwcm9jZXNzb3JzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBwcm9jZXNzID0gcHJvY2Vzc29yc1tpXTtcbiAgICAgIGl0ZW0gPSBwcm9jZXNzKGl0ZW0sIGtleSk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtO1xuICB9O1xuXG4gIGV4cG9ydHMuUGFyc2VyID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoUGFyc2VyLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFBhcnNlcihvcHRzKSB7XG4gICAgICB0aGlzLnBhcnNlU3RyaW5nUHJvbWlzZSA9IGJpbmQodGhpcy5wYXJzZVN0cmluZ1Byb21pc2UsIHRoaXMpO1xuICAgICAgdGhpcy5wYXJzZVN0cmluZyA9IGJpbmQodGhpcy5wYXJzZVN0cmluZywgdGhpcyk7XG4gICAgICB0aGlzLnJlc2V0ID0gYmluZCh0aGlzLnJlc2V0LCB0aGlzKTtcbiAgICAgIHRoaXMuYXNzaWduT3JQdXNoID0gYmluZCh0aGlzLmFzc2lnbk9yUHVzaCwgdGhpcyk7XG4gICAgICB0aGlzLnByb2Nlc3NBc3luYyA9IGJpbmQodGhpcy5wcm9jZXNzQXN5bmMsIHRoaXMpO1xuICAgICAgdmFyIGtleSwgcmVmLCB2YWx1ZTtcbiAgICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBleHBvcnRzLlBhcnNlcikpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBleHBvcnRzLlBhcnNlcihvcHRzKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgICAgcmVmID0gZGVmYXVsdHNbXCIwLjJcIl07XG4gICAgICBmb3IgKGtleSBpbiByZWYpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwocmVmLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgdmFsdWUgPSByZWZba2V5XTtcbiAgICAgICAgdGhpcy5vcHRpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGZvciAoa2V5IGluIG9wdHMpIHtcbiAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwob3B0cywga2V5KSkgY29udGludWU7XG4gICAgICAgIHZhbHVlID0gb3B0c1trZXldO1xuICAgICAgICB0aGlzLm9wdGlvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy54bWxucykge1xuICAgICAgICB0aGlzLm9wdGlvbnMueG1sbnNrZXkgPSB0aGlzLm9wdGlvbnMuYXR0cmtleSArIFwibnNcIjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9ybWFsaXplVGFncykge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy50YWdOYW1lUHJvY2Vzc29ycykge1xuICAgICAgICAgIHRoaXMub3B0aW9ucy50YWdOYW1lUHJvY2Vzc29ycyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9ucy50YWdOYW1lUHJvY2Vzc29ycy51bnNoaWZ0KHByb2Nlc3NvcnMubm9ybWFsaXplKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLnByb2Nlc3NBc3luYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNodW5rLCBlcnI7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy5yZW1haW5pbmcubGVuZ3RoIDw9IHRoaXMub3B0aW9ucy5jaHVua1NpemUpIHtcbiAgICAgICAgICBjaHVuayA9IHRoaXMucmVtYWluaW5nO1xuICAgICAgICAgIHRoaXMucmVtYWluaW5nID0gJyc7XG4gICAgICAgICAgdGhpcy5zYXhQYXJzZXIgPSB0aGlzLnNheFBhcnNlci53cml0ZShjaHVuayk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2F4UGFyc2VyLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2h1bmsgPSB0aGlzLnJlbWFpbmluZy5zdWJzdHIoMCwgdGhpcy5vcHRpb25zLmNodW5rU2l6ZSk7XG4gICAgICAgICAgdGhpcy5yZW1haW5pbmcgPSB0aGlzLnJlbWFpbmluZy5zdWJzdHIodGhpcy5vcHRpb25zLmNodW5rU2l6ZSwgdGhpcy5yZW1haW5pbmcubGVuZ3RoKTtcbiAgICAgICAgICB0aGlzLnNheFBhcnNlciA9IHRoaXMuc2F4UGFyc2VyLndyaXRlKGNodW5rKTtcbiAgICAgICAgICByZXR1cm4gc2V0SW1tZWRpYXRlKHRoaXMucHJvY2Vzc0FzeW5jKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IxKSB7XG4gICAgICAgIGVyciA9IGVycm9yMTtcbiAgICAgICAgaWYgKCF0aGlzLnNheFBhcnNlci5lcnJUaHJvd24pIHtcbiAgICAgICAgICB0aGlzLnNheFBhcnNlci5lcnJUaHJvd24gPSB0cnVlO1xuICAgICAgICAgIHJldHVybiB0aGlzLmVtaXQoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBQYXJzZXIucHJvdG90eXBlLmFzc2lnbk9yUHVzaCA9IGZ1bmN0aW9uKG9iaiwga2V5LCBuZXdWYWx1ZSkge1xuICAgICAgaWYgKCEoa2V5IGluIG9iaikpIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZXhwbGljaXRBcnJheSkge1xuICAgICAgICAgIHJldHVybiBvYmpba2V5XSA9IG5ld1ZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBvYmpba2V5XSA9IFtuZXdWYWx1ZV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghKG9ialtrZXldIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgICAgb2JqW2tleV0gPSBbb2JqW2tleV1dO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmpba2V5XS5wdXNoKG5ld1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGF0dHJrZXksIGNoYXJrZXksIG9udGV4dCwgc3RhY2s7XG4gICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgdGhpcy5zYXhQYXJzZXIgPSBzYXgucGFyc2VyKHRoaXMub3B0aW9ucy5zdHJpY3QsIHtcbiAgICAgICAgdHJpbTogZmFsc2UsXG4gICAgICAgIG5vcm1hbGl6ZTogZmFsc2UsXG4gICAgICAgIHhtbG5zOiB0aGlzLm9wdGlvbnMueG1sbnNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5zYXhQYXJzZXIuZXJyVGhyb3duID0gZmFsc2U7XG4gICAgICB0aGlzLnNheFBhcnNlci5vbmVycm9yID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIF90aGlzLnNheFBhcnNlci5yZXN1bWUoKTtcbiAgICAgICAgICBpZiAoIV90aGlzLnNheFBhcnNlci5lcnJUaHJvd24pIHtcbiAgICAgICAgICAgIF90aGlzLnNheFBhcnNlci5lcnJUaHJvd24gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoXCJlcnJvclwiLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICB0aGlzLnNheFBhcnNlci5vbmVuZCA9IChmdW5jdGlvbihfdGhpcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgaWYgKCFfdGhpcy5zYXhQYXJzZXIuZW5kZWQpIHtcbiAgICAgICAgICAgIF90aGlzLnNheFBhcnNlci5lbmRlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuZW1pdChcImVuZFwiLCBfdGhpcy5yZXN1bHRPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgdGhpcy5zYXhQYXJzZXIuZW5kZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuRVhQTElDSVRfQ0hBUktFWSA9IHRoaXMub3B0aW9ucy5leHBsaWNpdENoYXJrZXk7XG4gICAgICB0aGlzLnJlc3VsdE9iamVjdCA9IG51bGw7XG4gICAgICBzdGFjayA9IFtdO1xuICAgICAgYXR0cmtleSA9IHRoaXMub3B0aW9ucy5hdHRya2V5O1xuICAgICAgY2hhcmtleSA9IHRoaXMub3B0aW9ucy5jaGFya2V5O1xuICAgICAgdGhpcy5zYXhQYXJzZXIub25vcGVudGFnID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgICAgICAgdmFyIGtleSwgbmV3VmFsdWUsIG9iaiwgcHJvY2Vzc2VkS2V5LCByZWY7XG4gICAgICAgICAgb2JqID0ge307XG4gICAgICAgICAgb2JqW2NoYXJrZXldID0gXCJcIjtcbiAgICAgICAgICBpZiAoIV90aGlzLm9wdGlvbnMuaWdub3JlQXR0cnMpIHtcbiAgICAgICAgICAgIHJlZiA9IG5vZGUuYXR0cmlidXRlcztcbiAgICAgICAgICAgIGZvciAoa2V5IGluIHJlZikge1xuICAgICAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBpZiAoIShhdHRya2V5IGluIG9iaikgJiYgIV90aGlzLm9wdGlvbnMubWVyZ2VBdHRycykge1xuICAgICAgICAgICAgICAgIG9ialthdHRya2V5XSA9IHt9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG5ld1ZhbHVlID0gX3RoaXMub3B0aW9ucy5hdHRyVmFsdWVQcm9jZXNzb3JzID8gcHJvY2Vzc0l0ZW0oX3RoaXMub3B0aW9ucy5hdHRyVmFsdWVQcm9jZXNzb3JzLCBub2RlLmF0dHJpYnV0ZXNba2V5XSwga2V5KSA6IG5vZGUuYXR0cmlidXRlc1trZXldO1xuICAgICAgICAgICAgICBwcm9jZXNzZWRLZXkgPSBfdGhpcy5vcHRpb25zLmF0dHJOYW1lUHJvY2Vzc29ycyA/IHByb2Nlc3NJdGVtKF90aGlzLm9wdGlvbnMuYXR0ck5hbWVQcm9jZXNzb3JzLCBrZXkpIDoga2V5O1xuICAgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5tZXJnZUF0dHJzKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuYXNzaWduT3JQdXNoKG9iaiwgcHJvY2Vzc2VkS2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb2JqW2F0dHJrZXldW3Byb2Nlc3NlZEtleV0gPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBvYmpbXCIjbmFtZVwiXSA9IF90aGlzLm9wdGlvbnMudGFnTmFtZVByb2Nlc3NvcnMgPyBwcm9jZXNzSXRlbShfdGhpcy5vcHRpb25zLnRhZ05hbWVQcm9jZXNzb3JzLCBub2RlLm5hbWUpIDogbm9kZS5uYW1lO1xuICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLnhtbG5zKSB7XG4gICAgICAgICAgICBvYmpbX3RoaXMub3B0aW9ucy54bWxuc2tleV0gPSB7XG4gICAgICAgICAgICAgIHVyaTogbm9kZS51cmksXG4gICAgICAgICAgICAgIGxvY2FsOiBub2RlLmxvY2FsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc3RhY2sucHVzaChvYmopO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICB0aGlzLnNheFBhcnNlci5vbmNsb3NldGFnID0gKGZ1bmN0aW9uKF90aGlzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgY2RhdGEsIGVtcHR5U3RyLCBrZXksIG5vZGUsIG5vZGVOYW1lLCBvYmosIG9iakNsb25lLCBvbGQsIHMsIHhwYXRoO1xuICAgICAgICAgIG9iaiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgIG5vZGVOYW1lID0gb2JqW1wiI25hbWVcIl07XG4gICAgICAgICAgaWYgKCFfdGhpcy5vcHRpb25zLmV4cGxpY2l0Q2hpbGRyZW4gfHwgIV90aGlzLm9wdGlvbnMucHJlc2VydmVDaGlsZHJlbk9yZGVyKSB7XG4gICAgICAgICAgICBkZWxldGUgb2JqW1wiI25hbWVcIl07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvYmouY2RhdGEgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGNkYXRhID0gb2JqLmNkYXRhO1xuICAgICAgICAgICAgZGVsZXRlIG9iai5jZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcyA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChvYmpbY2hhcmtleV0ubWF0Y2goL15cXHMqJC8pICYmICFjZGF0YSkge1xuICAgICAgICAgICAgZW1wdHlTdHIgPSBvYmpbY2hhcmtleV07XG4gICAgICAgICAgICBkZWxldGUgb2JqW2NoYXJrZXldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy50cmltKSB7XG4gICAgICAgICAgICAgIG9ialtjaGFya2V5XSA9IG9ialtjaGFya2V5XS50cmltKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5ub3JtYWxpemUpIHtcbiAgICAgICAgICAgICAgb2JqW2NoYXJrZXldID0gb2JqW2NoYXJrZXldLnJlcGxhY2UoL1xcc3syLH0vZywgXCIgXCIpLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ialtjaGFya2V5XSA9IF90aGlzLm9wdGlvbnMudmFsdWVQcm9jZXNzb3JzID8gcHJvY2Vzc0l0ZW0oX3RoaXMub3B0aW9ucy52YWx1ZVByb2Nlc3NvcnMsIG9ialtjaGFya2V5XSwgbm9kZU5hbWUpIDogb2JqW2NoYXJrZXldO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAxICYmIGNoYXJrZXkgaW4gb2JqICYmICFfdGhpcy5FWFBMSUNJVF9DSEFSS0VZKSB7XG4gICAgICAgICAgICAgIG9iaiA9IG9ialtjaGFya2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgb2JqID0gX3RoaXMub3B0aW9ucy5lbXB0eVRhZyAhPT0gJycgPyBfdGhpcy5vcHRpb25zLmVtcHR5VGFnIDogZW1wdHlTdHI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLnZhbGlkYXRvciAhPSBudWxsKSB7XG4gICAgICAgICAgICB4cGF0aCA9IFwiL1wiICsgKChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIGksIGxlbiwgcmVzdWx0cztcbiAgICAgICAgICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBzdGFjay5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIG5vZGUgPSBzdGFja1tpXTtcbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2gobm9kZVtcIiNuYW1lXCJdKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICAgIH0pKCkpLmNvbmNhdChub2RlTmFtZSkuam9pbihcIi9cIik7XG4gICAgICAgICAgICAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciBlcnI7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiA9IF90aGlzLm9wdGlvbnMudmFsaWRhdG9yKHhwYXRoLCBzICYmIHNbbm9kZU5hbWVdLCBvYmopO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICAgICAgICAgICAgICBlcnIgPSBlcnJvcjE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVtaXQoXCJlcnJvclwiLCBlcnIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5leHBsaWNpdENoaWxkcmVuICYmICFfdGhpcy5vcHRpb25zLm1lcmdlQXR0cnMgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICghX3RoaXMub3B0aW9ucy5wcmVzZXJ2ZUNoaWxkcmVuT3JkZXIpIHtcbiAgICAgICAgICAgICAgbm9kZSA9IHt9O1xuICAgICAgICAgICAgICBpZiAoX3RoaXMub3B0aW9ucy5hdHRya2V5IGluIG9iaikge1xuICAgICAgICAgICAgICAgIG5vZGVbX3RoaXMub3B0aW9ucy5hdHRya2V5XSA9IG9ialtfdGhpcy5vcHRpb25zLmF0dHJrZXldO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBvYmpbX3RoaXMub3B0aW9ucy5hdHRya2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIV90aGlzLm9wdGlvbnMuY2hhcnNBc0NoaWxkcmVuICYmIF90aGlzLm9wdGlvbnMuY2hhcmtleSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBub2RlW190aGlzLm9wdGlvbnMuY2hhcmtleV0gPSBvYmpbX3RoaXMub3B0aW9ucy5jaGFya2V5XTtcbiAgICAgICAgICAgICAgICBkZWxldGUgb2JqW190aGlzLm9wdGlvbnMuY2hhcmtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG5vZGVbX3RoaXMub3B0aW9ucy5jaGlsZGtleV0gPSBvYmo7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb2JqID0gbm9kZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocykge1xuICAgICAgICAgICAgICBzW190aGlzLm9wdGlvbnMuY2hpbGRrZXldID0gc1tfdGhpcy5vcHRpb25zLmNoaWxka2V5XSB8fCBbXTtcbiAgICAgICAgICAgICAgb2JqQ2xvbmUgPSB7fTtcbiAgICAgICAgICAgICAgZm9yIChrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwob2JqLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBvYmpDbG9uZVtrZXldID0gb2JqW2tleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc1tfdGhpcy5vcHRpb25zLmNoaWxka2V5XS5wdXNoKG9iakNsb25lKTtcbiAgICAgICAgICAgICAgZGVsZXRlIG9ialtcIiNuYW1lXCJdO1xuICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDEgJiYgY2hhcmtleSBpbiBvYmogJiYgIV90aGlzLkVYUExJQ0lUX0NIQVJLRVkpIHtcbiAgICAgICAgICAgICAgICBvYmogPSBvYmpbY2hhcmtleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5hc3NpZ25PclB1c2gocywgbm9kZU5hbWUsIG9iaik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChfdGhpcy5vcHRpb25zLmV4cGxpY2l0Um9vdCkge1xuICAgICAgICAgICAgICBvbGQgPSBvYmo7XG4gICAgICAgICAgICAgIG9iaiA9IHt9O1xuICAgICAgICAgICAgICBvYmpbbm9kZU5hbWVdID0gb2xkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3RoaXMucmVzdWx0T2JqZWN0ID0gb2JqO1xuICAgICAgICAgICAgX3RoaXMuc2F4UGFyc2VyLmVuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBfdGhpcy5lbWl0KFwiZW5kXCIsIF90aGlzLnJlc3VsdE9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgICBvbnRleHQgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgICB2YXIgY2hhckNoaWxkLCBzO1xuICAgICAgICAgIHMgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcbiAgICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgc1tjaGFya2V5XSArPSB0ZXh0O1xuICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMuZXhwbGljaXRDaGlsZHJlbiAmJiBfdGhpcy5vcHRpb25zLnByZXNlcnZlQ2hpbGRyZW5PcmRlciAmJiBfdGhpcy5vcHRpb25zLmNoYXJzQXNDaGlsZHJlbiAmJiAoX3RoaXMub3B0aW9ucy5pbmNsdWRlV2hpdGVDaGFycyB8fCB0ZXh0LnJlcGxhY2UoL1xcXFxuL2csICcnKS50cmltKCkgIT09ICcnKSkge1xuICAgICAgICAgICAgICBzW190aGlzLm9wdGlvbnMuY2hpbGRrZXldID0gc1tfdGhpcy5vcHRpb25zLmNoaWxka2V5XSB8fCBbXTtcbiAgICAgICAgICAgICAgY2hhckNoaWxkID0ge1xuICAgICAgICAgICAgICAgICcjbmFtZSc6ICdfX3RleHRfXydcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgY2hhckNoaWxkW2NoYXJrZXldID0gdGV4dDtcbiAgICAgICAgICAgICAgaWYgKF90aGlzLm9wdGlvbnMubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgY2hhckNoaWxkW2NoYXJrZXldID0gY2hhckNoaWxkW2NoYXJrZXldLnJlcGxhY2UoL1xcc3syLH0vZywgXCIgXCIpLnRyaW0oKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzW190aGlzLm9wdGlvbnMuY2hpbGRrZXldLnB1c2goY2hhckNoaWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH0pKHRoaXMpO1xuICAgICAgdGhpcy5zYXhQYXJzZXIub250ZXh0ID0gb250ZXh0O1xuICAgICAgcmV0dXJuIHRoaXMuc2F4UGFyc2VyLm9uY2RhdGEgPSAoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRleHQpIHtcbiAgICAgICAgICB2YXIgcztcbiAgICAgICAgICBzID0gb250ZXh0KHRleHQpO1xuICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICByZXR1cm4gcy5jZGF0YSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfSkodGhpcyk7XG4gICAgfTtcblxuICAgIFBhcnNlci5wcm90b3R5cGUucGFyc2VTdHJpbmcgPSBmdW5jdGlvbihzdHIsIGNiKSB7XG4gICAgICB2YXIgZXJyO1xuICAgICAgaWYgKChjYiAhPSBudWxsKSAmJiB0eXBlb2YgY2IgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aGlzLm9uKFwiZW5kXCIsIGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICByZXR1cm4gY2IobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub24oXCJlcnJvclwiLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgc3RyID0gc3RyLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChzdHIudHJpbSgpID09PSAnJykge1xuICAgICAgICAgIHRoaXMuZW1pdChcImVuZFwiLCBudWxsKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdHIgPSBib20uc3RyaXBCT00oc3RyKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hc3luYykge1xuICAgICAgICAgIHRoaXMucmVtYWluaW5nID0gc3RyO1xuICAgICAgICAgIHNldEltbWVkaWF0ZSh0aGlzLnByb2Nlc3NBc3luYyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2F4UGFyc2VyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNheFBhcnNlci53cml0ZShzdHIpLmNsb3NlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICAgICAgZXJyID0gZXJyb3IxO1xuICAgICAgICBpZiAoISh0aGlzLnNheFBhcnNlci5lcnJUaHJvd24gfHwgdGhpcy5zYXhQYXJzZXIuZW5kZWQpKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc2F4UGFyc2VyLmVyclRocm93biA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zYXhQYXJzZXIuZW5kZWQpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZVN0cmluZ1Byb21pc2UgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oX3RoaXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIHJldHVybiBfdGhpcy5wYXJzZVN0cmluZyhzdHIsIGZ1bmN0aW9uKGVyciwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfSkodGhpcykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gUGFyc2VyO1xuXG4gIH0pKGV2ZW50cyk7XG5cbiAgZXhwb3J0cy5wYXJzZVN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgYSwgYikge1xuICAgIHZhciBjYiwgb3B0aW9ucywgcGFyc2VyO1xuICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgYiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjYiA9IGI7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG9wdGlvbnMgPSBhO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY2IgPSBhO1xuICAgICAgfVxuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBwYXJzZXIgPSBuZXcgZXhwb3J0cy5QYXJzZXIob3B0aW9ucyk7XG4gICAgcmV0dXJuIHBhcnNlci5wYXJzZVN0cmluZyhzdHIsIGNiKTtcbiAgfTtcblxuICBleHBvcnRzLnBhcnNlU3RyaW5nUHJvbWlzZSA9IGZ1bmN0aW9uKHN0ciwgYSkge1xuICAgIHZhciBvcHRpb25zLCBwYXJzZXI7XG4gICAgaWYgKHR5cGVvZiBhID09PSAnb2JqZWN0Jykge1xuICAgICAgb3B0aW9ucyA9IGE7XG4gICAgfVxuICAgIHBhcnNlciA9IG5ldyBleHBvcnRzLlBhcnNlcihvcHRpb25zKTtcbiAgICByZXR1cm4gcGFyc2VyLnBhcnNlU3RyaW5nUHJvbWlzZShzdHIpO1xuICB9O1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIHZhciBwcmVmaXhNYXRjaDtcblxuICBwcmVmaXhNYXRjaCA9IG5ldyBSZWdFeHAoLyg/IXhtbG5zKV4uKjovKTtcblxuICBleHBvcnRzLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIudG9Mb3dlckNhc2UoKTtcbiAgfTtcblxuICBleHBvcnRzLmZpcnN0Q2hhckxvd2VyQ2FzZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG4gIH07XG5cbiAgZXhwb3J0cy5zdHJpcFByZWZpeCA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZShwcmVmaXhNYXRjaCwgJycpO1xuICB9O1xuXG4gIGV4cG9ydHMucGFyc2VOdW1iZXJzID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKCFpc05hTihzdHIpKSB7XG4gICAgICBzdHIgPSBzdHIgJSAxID09PSAwID8gcGFyc2VJbnQoc3RyLCAxMCkgOiBwYXJzZUZsb2F0KHN0cik7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgZXhwb3J0cy5wYXJzZUJvb2xlYW5zID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKC9eKD86dHJ1ZXxmYWxzZSkkL2kudGVzdChzdHIpKSB7XG4gICAgICBzdHIgPSBzdHIudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xuICB9O1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG4gIHZhciBidWlsZGVyLCBkZWZhdWx0cywgcGFyc2VyLCBwcm9jZXNzb3JzLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgZGVmYXVsdHMgPSByZXF1aXJlKCcuL2RlZmF1bHRzJyk7XG5cbiAgYnVpbGRlciA9IHJlcXVpcmUoJy4vYnVpbGRlcicpO1xuXG4gIHBhcnNlciA9IHJlcXVpcmUoJy4vcGFyc2VyJyk7XG5cbiAgcHJvY2Vzc29ycyA9IHJlcXVpcmUoJy4vcHJvY2Vzc29ycycpO1xuXG4gIGV4cG9ydHMuZGVmYXVsdHMgPSBkZWZhdWx0cy5kZWZhdWx0cztcblxuICBleHBvcnRzLnByb2Nlc3NvcnMgPSBwcm9jZXNzb3JzO1xuXG4gIGV4cG9ydHMuVmFsaWRhdGlvbkVycm9yID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoVmFsaWRhdGlvbkVycm9yLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFZhbGlkYXRpb25FcnJvcihtZXNzYWdlKSB7XG4gICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiBWYWxpZGF0aW9uRXJyb3I7XG5cbiAgfSkoRXJyb3IpO1xuXG4gIGV4cG9ydHMuQnVpbGRlciA9IGJ1aWxkZXIuQnVpbGRlcjtcblxuICBleHBvcnRzLlBhcnNlciA9IHBhcnNlci5QYXJzZXI7XG5cbiAgZXhwb3J0cy5wYXJzZVN0cmluZyA9IHBhcnNlci5wYXJzZVN0cmluZztcblxuICBleHBvcnRzLnBhcnNlU3RyaW5nUHJvbWlzZSA9IHBhcnNlci5wYXJzZVN0cmluZ1Byb21pc2U7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBEaXNjb25uZWN0ZWQ6IDEsXG4gICAgUHJlY2VkaW5nOiAyLFxuICAgIEZvbGxvd2luZzogNCxcbiAgICBDb250YWluczogOCxcbiAgICBDb250YWluZWRCeTogMTYsXG4gICAgSW1wbGVtZW50YXRpb25TcGVjaWZpYzogMzJcbiAgfTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIG1vZHVsZS5leHBvcnRzID0ge1xuICAgIEVsZW1lbnQ6IDEsXG4gICAgQXR0cmlidXRlOiAyLFxuICAgIFRleHQ6IDMsXG4gICAgQ0RhdGE6IDQsXG4gICAgRW50aXR5UmVmZXJlbmNlOiA1LFxuICAgIEVudGl0eURlY2xhcmF0aW9uOiA2LFxuICAgIFByb2Nlc3NpbmdJbnN0cnVjdGlvbjogNyxcbiAgICBDb21tZW50OiA4LFxuICAgIERvY3VtZW50OiA5LFxuICAgIERvY1R5cGU6IDEwLFxuICAgIERvY3VtZW50RnJhZ21lbnQ6IDExLFxuICAgIE5vdGF0aW9uRGVjbGFyYXRpb246IDEyLFxuICAgIERlY2xhcmF0aW9uOiAyMDEsXG4gICAgUmF3OiAyMDIsXG4gICAgQXR0cmlidXRlRGVjbGFyYXRpb246IDIwMyxcbiAgICBFbGVtZW50RGVjbGFyYXRpb246IDIwNCxcbiAgICBEdW1teTogMjA1XG4gIH07XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgYXNzaWduLCBnZXRWYWx1ZSwgaXNBcnJheSwgaXNFbXB0eSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIGlzUGxhaW5PYmplY3QsXG4gICAgc2xpY2UgPSBbXS5zbGljZSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgYXNzaWduID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGksIGtleSwgbGVuLCBzb3VyY2UsIHNvdXJjZXMsIHRhcmdldDtcbiAgICB0YXJnZXQgPSBhcmd1bWVudHNbMF0sIHNvdXJjZXMgPSAyIDw9IGFyZ3VtZW50cy5sZW5ndGggPyBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkgOiBbXTtcbiAgICBpZiAoaXNGdW5jdGlvbihPYmplY3QuYXNzaWduKSkge1xuICAgICAgT2JqZWN0LmFzc2lnbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwLCBsZW4gPSBzb3VyY2VzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHNvdXJjZSA9IHNvdXJjZXNbaV07XG4gICAgICAgIGlmIChzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAgIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTtcbiAgICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbCkge1xuICAgIHJldHVybiAhIXZhbCAmJiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgfTtcblxuICBpc09iamVjdCA9IGZ1bmN0aW9uKHZhbCkge1xuICAgIHZhciByZWY7XG4gICAgcmV0dXJuICEhdmFsICYmICgocmVmID0gdHlwZW9mIHZhbCkgPT09ICdmdW5jdGlvbicgfHwgcmVmID09PSAnb2JqZWN0Jyk7XG4gIH07XG5cbiAgaXNBcnJheSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgIGlmIChpc0Z1bmN0aW9uKEFycmF5LmlzQXJyYXkpKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbCkgPT09ICdbb2JqZWN0IEFycmF5XSc7XG4gICAgfVxuICB9O1xuXG4gIGlzRW1wdHkgPSBmdW5jdGlvbih2YWwpIHtcbiAgICB2YXIga2V5O1xuICAgIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJldHVybiAhdmFsLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChrZXkgaW4gdmFsKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHZhbCwga2V5KSkgY29udGludWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfTtcblxuICBpc1BsYWluT2JqZWN0ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgdmFyIGN0b3IsIHByb3RvO1xuICAgIHJldHVybiBpc09iamVjdCh2YWwpICYmIChwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWwpKSAmJiAoY3RvciA9IHByb3RvLmNvbnN0cnVjdG9yKSAmJiAodHlwZW9mIGN0b3IgPT09ICdmdW5jdGlvbicpICYmIChjdG9yIGluc3RhbmNlb2YgY3RvcikgJiYgKEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChPYmplY3QpKTtcbiAgfTtcblxuICBnZXRWYWx1ZSA9IGZ1bmN0aW9uKG9iaikge1xuICAgIGlmIChpc0Z1bmN0aW9uKG9iai52YWx1ZU9mKSkge1xuICAgICAgcmV0dXJuIG9iai52YWx1ZU9mKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzLmFzc2lnbiA9IGFzc2lnbjtcblxuICBtb2R1bGUuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuICBtb2R1bGUuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuXG4gIG1vZHVsZS5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuXG4gIG1vZHVsZS5leHBvcnRzLmlzRW1wdHkgPSBpc0VtcHR5O1xuXG4gIG1vZHVsZS5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xuXG4gIG1vZHVsZS5leHBvcnRzLmdldFZhbHVlID0gZ2V0VmFsdWU7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBOb25lOiAwLFxuICAgIE9wZW5UYWc6IDEsXG4gICAgSW5zaWRlVGFnOiAyLFxuICAgIENsb3NlVGFnOiAzXG4gIH07XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTEF0dHJpYnV0ZSwgWE1MTm9kZTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxBdHRyaWJ1dGUgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MQXR0cmlidXRlKHBhcmVudCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMucGFyZW50Lm9wdGlvbnM7XG4gICAgICAgIHRoaXMuc3RyaW5naWZ5ID0gdGhpcy5wYXJlbnQuc3RyaW5naWZ5O1xuICAgICAgfVxuICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGF0dHJpYnV0ZSBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuc3RyaW5naWZ5Lm5hbWUobmFtZSk7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkuYXR0VmFsdWUodmFsdWUpO1xuICAgICAgdGhpcy50eXBlID0gTm9kZVR5cGUuQXR0cmlidXRlO1xuICAgICAgdGhpcy5pc0lkID0gZmFsc2U7XG4gICAgICB0aGlzLnNjaGVtYVR5cGVJbmZvID0gbnVsbDtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MQXR0cmlidXRlLnByb3RvdHlwZSwgJ25vZGVUeXBlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxBdHRyaWJ1dGUucHJvdG90eXBlLCAnb3duZXJFbGVtZW50Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUsICd0ZXh0Q29udGVudCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPSB2YWx1ZSB8fCAnJztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxBdHRyaWJ1dGUucHJvdG90eXBlLCAnbmFtZXNwYWNlVVJJJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUsICdwcmVmaXgnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MQXR0cmlidXRlLnByb3RvdHlwZSwgJ2xvY2FsTmFtZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MQXR0cmlidXRlLnByb3RvdHlwZSwgJ3NwZWNpZmllZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MQXR0cmlidXRlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTEF0dHJpYnV0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5hdHRyaWJ1dGUodGhpcywgdGhpcy5vcHRpb25zLndyaXRlci5maWx0ZXJPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9O1xuXG4gICAgWE1MQXR0cmlidXRlLnByb3RvdHlwZS5kZWJ1Z0luZm8gPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICBuYW1lID0gbmFtZSB8fCB0aGlzLm5hbWU7XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcInBhcmVudDogPFwiICsgdGhpcy5wYXJlbnQubmFtZSArIFwiPlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiYXR0cmlidXRlOiB7XCIgKyBuYW1lICsgXCJ9LCBwYXJlbnQ6IDxcIiArIHRoaXMucGFyZW50Lm5hbWUgKyBcIj5cIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MQXR0cmlidXRlLnByb3RvdHlwZS5pc0VxdWFsTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLm5hbWVzcGFjZVVSSSAhPT0gdGhpcy5uYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUucHJlZml4ICE9PSB0aGlzLnByZWZpeCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5sb2NhbE5hbWUgIT09IHRoaXMubG9jYWxOYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MQXR0cmlidXRlO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTENEYXRhLCBYTUxDaGFyYWN0ZXJEYXRhLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgWE1MQ2hhcmFjdGVyRGF0YSA9IHJlcXVpcmUoJy4vWE1MQ2hhcmFjdGVyRGF0YScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MQ0RhdGEgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxDRGF0YSwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxDRGF0YShwYXJlbnQsIHRleHQpIHtcbiAgICAgIFhNTENEYXRhLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgQ0RBVEEgdGV4dC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IFwiI2NkYXRhLXNlY3Rpb25cIjtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkNEYXRhO1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc3RyaW5naWZ5LmNkYXRhKHRleHQpO1xuICAgIH1cblxuICAgIFhNTENEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTENEYXRhLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmNkYXRhKHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxDRGF0YTtcblxuICB9KShYTUxDaGFyYWN0ZXJEYXRhKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxDaGFyYWN0ZXJEYXRhLCBYTUxOb2RlLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MQ2hhcmFjdGVyRGF0YSA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTENoYXJhY3RlckRhdGEsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MQ2hhcmFjdGVyRGF0YShwYXJlbnQpIHtcbiAgICAgIFhNTENoYXJhY3RlckRhdGEuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIHRoaXMudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUsICdkYXRhJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSA9IHZhbHVlIHx8ICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLCAndGV4dENvbnRlbnQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlID0gdmFsdWUgfHwgJyc7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxDaGFyYWN0ZXJEYXRhLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLnN1YnN0cmluZ0RhdGEgPSBmdW5jdGlvbihvZmZzZXQsIGNvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLmFwcGVuZERhdGEgPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MQ2hhcmFjdGVyRGF0YS5wcm90b3R5cGUuaW5zZXJ0RGF0YSA9IGZ1bmN0aW9uKG9mZnNldCwgYXJnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLmRlbGV0ZURhdGEgPSBmdW5jdGlvbihvZmZzZXQsIGNvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLnJlcGxhY2VEYXRhID0gZnVuY3Rpb24ob2Zmc2V0LCBjb3VudCwgYXJnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTENoYXJhY3RlckRhdGEucHJvdG90eXBlLmlzRXF1YWxOb2RlID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgaWYgKCFYTUxDaGFyYWN0ZXJEYXRhLl9fc3VwZXJfXy5pc0VxdWFsTm9kZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLmlzRXF1YWxOb2RlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmRhdGEgIT09IHRoaXMuZGF0YSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTENoYXJhY3RlckRhdGE7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTENoYXJhY3RlckRhdGEsIFhNTENvbW1lbnQsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxDaGFyYWN0ZXJEYXRhID0gcmVxdWlyZSgnLi9YTUxDaGFyYWN0ZXJEYXRhJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxDb21tZW50ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MQ29tbWVudCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxDb21tZW50KHBhcmVudCwgdGV4dCkge1xuICAgICAgWE1MQ29tbWVudC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGNvbW1lbnQgdGV4dC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IFwiI2NvbW1lbnRcIjtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkNvbW1lbnQ7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkuY29tbWVudCh0ZXh0KTtcbiAgICB9XG5cbiAgICBYTUxDb21tZW50LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTENvbW1lbnQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIuY29tbWVudCh0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MQ29tbWVudDtcblxuICB9KShYTUxDaGFyYWN0ZXJEYXRhKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBYTUxET01Db25maWd1cmF0aW9uLCBYTUxET01FcnJvckhhbmRsZXIsIFhNTERPTVN0cmluZ0xpc3Q7XG5cbiAgWE1MRE9NRXJyb3JIYW5kbGVyID0gcmVxdWlyZSgnLi9YTUxET01FcnJvckhhbmRsZXInKTtcblxuICBYTUxET01TdHJpbmdMaXN0ID0gcmVxdWlyZSgnLi9YTUxET01TdHJpbmdMaXN0Jyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxET01Db25maWd1cmF0aW9uID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTERPTUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICB2YXIgY2xvbmVkU2VsZjtcbiAgICAgIHRoaXMuZGVmYXVsdFBhcmFtcyA9IHtcbiAgICAgICAgXCJjYW5vbmljYWwtZm9ybVwiOiBmYWxzZSxcbiAgICAgICAgXCJjZGF0YS1zZWN0aW9uc1wiOiBmYWxzZSxcbiAgICAgICAgXCJjb21tZW50c1wiOiBmYWxzZSxcbiAgICAgICAgXCJkYXRhdHlwZS1ub3JtYWxpemF0aW9uXCI6IGZhbHNlLFxuICAgICAgICBcImVsZW1lbnQtY29udGVudC13aGl0ZXNwYWNlXCI6IHRydWUsXG4gICAgICAgIFwiZW50aXRpZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJlcnJvci1oYW5kbGVyXCI6IG5ldyBYTUxET01FcnJvckhhbmRsZXIoKSxcbiAgICAgICAgXCJpbmZvc2V0XCI6IHRydWUsXG4gICAgICAgIFwidmFsaWRhdGUtaWYtc2NoZW1hXCI6IGZhbHNlLFxuICAgICAgICBcIm5hbWVzcGFjZXNcIjogdHJ1ZSxcbiAgICAgICAgXCJuYW1lc3BhY2UtZGVjbGFyYXRpb25zXCI6IHRydWUsXG4gICAgICAgIFwibm9ybWFsaXplLWNoYXJhY3RlcnNcIjogZmFsc2UsXG4gICAgICAgIFwic2NoZW1hLWxvY2F0aW9uXCI6ICcnLFxuICAgICAgICBcInNjaGVtYS10eXBlXCI6ICcnLFxuICAgICAgICBcInNwbGl0LWNkYXRhLXNlY3Rpb25zXCI6IHRydWUsXG4gICAgICAgIFwidmFsaWRhdGVcIjogZmFsc2UsXG4gICAgICAgIFwid2VsbC1mb3JtZWRcIjogdHJ1ZVxuICAgICAgfTtcbiAgICAgIHRoaXMucGFyYW1zID0gY2xvbmVkU2VsZiA9IE9iamVjdC5jcmVhdGUodGhpcy5kZWZhdWx0UGFyYW1zKTtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRE9NQ29uZmlndXJhdGlvbi5wcm90b3R5cGUsICdwYXJhbWV0ZXJOYW1lcycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgWE1MRE9NU3RyaW5nTGlzdChPYmplY3Qua2V5cyh0aGlzLmRlZmF1bHRQYXJhbXMpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTERPTUNvbmZpZ3VyYXRpb24ucHJvdG90eXBlLmdldFBhcmFtZXRlciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIGlmICh0aGlzLnBhcmFtcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXNbbmFtZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRE9NQ29uZmlndXJhdGlvbi5wcm90b3R5cGUuY2FuU2V0UGFyYW1ldGVyID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBYTUxET01Db25maWd1cmF0aW9uLnByb3RvdHlwZS5zZXRQYXJhbWV0ZXIgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zW25hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVsZXRlIHRoaXMucGFyYW1zW25hbWVdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRE9NQ29uZmlndXJhdGlvbjtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTERPTUVycm9ySGFuZGxlcjtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERPTUVycm9ySGFuZGxlciA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBYTUxET01FcnJvckhhbmRsZXIoKSB7fVxuXG4gICAgWE1MRE9NRXJyb3JIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGVFcnJvciA9IGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3IpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRE9NRXJyb3JIYW5kbGVyO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MRE9NSW1wbGVtZW50YXRpb247XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxET01JbXBsZW1lbnRhdGlvbiA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBYTUxET01JbXBsZW1lbnRhdGlvbigpIHt9XG5cbiAgICBYTUxET01JbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuaGFzRmVhdHVyZSA9IGZ1bmN0aW9uKGZlYXR1cmUsIHZlcnNpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBYTUxET01JbXBsZW1lbnRhdGlvbi5wcm90b3R5cGUuY3JlYXRlRG9jdW1lbnRUeXBlID0gZnVuY3Rpb24ocXVhbGlmaWVkTmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgWE1MRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50ID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBxdWFsaWZpZWROYW1lLCBkb2N0eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgWE1MRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmNyZWF0ZUhUTUxEb2N1bWVudCA9IGZ1bmN0aW9uKHRpdGxlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgWE1MRE9NSW1wbGVtZW50YXRpb24ucHJvdG90eXBlLmdldEZlYXR1cmUgPSBmdW5jdGlvbihmZWF0dXJlLCB2ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTERPTUltcGxlbWVudGF0aW9uO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MRE9NU3RyaW5nTGlzdDtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERPTVN0cmluZ0xpc3QgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MRE9NU3RyaW5nTGlzdChhcnIpIHtcbiAgICAgIHRoaXMuYXJyID0gYXJyIHx8IFtdO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxET01TdHJpbmdMaXN0LnByb3RvdHlwZSwgJ2xlbmd0aCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFyci5sZW5ndGg7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxET01TdHJpbmdMaXN0LnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFycltpbmRleF0gfHwgbnVsbDtcbiAgICB9O1xuXG4gICAgWE1MRE9NU3RyaW5nTGlzdC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiB0aGlzLmFyci5pbmRleE9mKHN0cikgIT09IC0xO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRE9NU3RyaW5nTGlzdDtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxEVERBdHRMaXN0LCBYTUxOb2RlLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRFREQXR0TGlzdCA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTERUREF0dExpc3QsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRFREQXR0TGlzdChwYXJlbnQsIGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIFhNTERUREF0dExpc3QuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmIChlbGVtZW50TmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGVsZW1lbnQgbmFtZS4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBEVEQgYXR0cmlidXRlIG5hbWUuIFwiICsgdGhpcy5kZWJ1Z0luZm8oZWxlbWVudE5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmICghYXR0cmlidXRlVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIERURCBhdHRyaWJ1dGUgdHlwZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhlbGVtZW50TmFtZSkpO1xuICAgICAgfVxuICAgICAgaWYgKCFkZWZhdWx0VmFsdWVUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGF0dHJpYnV0ZSBkZWZhdWx0LiBcIiArIHRoaXMuZGVidWdJbmZvKGVsZW1lbnROYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlVHlwZS5pbmRleE9mKCcjJykgIT09IDApIHtcbiAgICAgICAgZGVmYXVsdFZhbHVlVHlwZSA9ICcjJyArIGRlZmF1bHRWYWx1ZVR5cGU7XG4gICAgICB9XG4gICAgICBpZiAoIWRlZmF1bHRWYWx1ZVR5cGUubWF0Y2goL14oI1JFUVVJUkVEfCNJTVBMSUVEfCNGSVhFRHwjREVGQVVMVCkkLykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBkZWZhdWx0IHZhbHVlIHR5cGU7IGV4cGVjdGVkOiAjUkVRVUlSRUQsICNJTVBMSUVELCAjRklYRUQgb3IgI0RFRkFVTFQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oZWxlbWVudE5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgJiYgIWRlZmF1bHRWYWx1ZVR5cGUubWF0Y2goL14oI0ZJWEVEfCNERUZBVUxUKSQvKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZWZhdWx0IHZhbHVlIG9ubHkgYXBwbGllcyB0byAjRklYRUQgb3IgI0RFRkFVTFQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oZWxlbWVudE5hbWUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZWxlbWVudE5hbWUgPSB0aGlzLnN0cmluZ2lmeS5uYW1lKGVsZW1lbnROYW1lKTtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkF0dHJpYnV0ZURlY2xhcmF0aW9uO1xuICAgICAgdGhpcy5hdHRyaWJ1dGVOYW1lID0gdGhpcy5zdHJpbmdpZnkubmFtZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgIHRoaXMuYXR0cmlidXRlVHlwZSA9IHRoaXMuc3RyaW5naWZ5LmR0ZEF0dFR5cGUoYXR0cmlidXRlVHlwZSk7XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdGhpcy5zdHJpbmdpZnkuZHRkQXR0RGVmYXVsdChkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gZGVmYXVsdFZhbHVlVHlwZTtcbiAgICB9XG5cbiAgICBYTUxEVERBdHRMaXN0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmR0ZEF0dExpc3QodGhpcywgdGhpcy5vcHRpb25zLndyaXRlci5maWx0ZXJPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTERUREF0dExpc3Q7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTERUREVsZW1lbnQsIFhNTE5vZGUsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxEVERFbGVtZW50ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRFRERWxlbWVudCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxEVERFbGVtZW50KHBhcmVudCwgbmFtZSwgdmFsdWUpIHtcbiAgICAgIFhNTERUREVsZW1lbnQuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBEVEQgZWxlbWVudCBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICB2YWx1ZSA9ICcoI1BDREFUQSknO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gJygnICsgdmFsdWUuam9pbignLCcpICsgJyknO1xuICAgICAgfVxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5zdHJpbmdpZnkubmFtZShuYW1lKTtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkVsZW1lbnREZWNsYXJhdGlvbjtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0cmluZ2lmeS5kdGRFbGVtZW50VmFsdWUodmFsdWUpO1xuICAgIH1cblxuICAgIFhNTERUREVsZW1lbnQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIuZHRkRWxlbWVudCh0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRFRERWxlbWVudDtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MRFRERW50aXR5LCBYTUxOb2RlLCBpc09iamVjdCxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9VdGlsaXR5JykuaXNPYmplY3Q7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRFRERW50aXR5ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRFRERW50aXR5LCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTERUREVudGl0eShwYXJlbnQsIHBlLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgWE1MRFRERW50aXR5Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGVudGl0eSBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgRFREIGVudGl0eSB2YWx1ZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBlID0gISFwZTtcbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuc3RyaW5naWZ5Lm5hbWUobmFtZSk7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5FbnRpdHlEZWNsYXJhdGlvbjtcbiAgICAgIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnN0cmluZ2lmeS5kdGRFbnRpdHlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuaW50ZXJuYWwgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCF2YWx1ZS5wdWJJRCAmJiAhdmFsdWUuc3lzSUQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQdWJsaWMgYW5kL29yIHN5c3RlbSBpZGVudGlmaWVycyBhcmUgcmVxdWlyZWQgZm9yIGFuIGV4dGVybmFsIGVudGl0eS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlLnB1YklEICYmICF2YWx1ZS5zeXNJRCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN5c3RlbSBpZGVudGlmaWVyIGlzIHJlcXVpcmVkIGZvciBhIHB1YmxpYyBleHRlcm5hbCBlbnRpdHkuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW50ZXJuYWwgPSBmYWxzZTtcbiAgICAgICAgaWYgKHZhbHVlLnB1YklEICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLnB1YklEID0gdGhpcy5zdHJpbmdpZnkuZHRkUHViSUQodmFsdWUucHViSUQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZS5zeXNJRCAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5zeXNJRCA9IHRoaXMuc3RyaW5naWZ5LmR0ZFN5c0lEKHZhbHVlLnN5c0lEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUubkRhdGEgIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMubkRhdGEgPSB0aGlzLnN0cmluZ2lmeS5kdGRORGF0YSh2YWx1ZS5uRGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGUgJiYgdGhpcy5uRGF0YSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vdGF0aW9uIGRlY2xhcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIGEgcGFyYW1ldGVyIGVudGl0eS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRERW50aXR5LnByb3RvdHlwZSwgJ3B1YmxpY0lkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHViSUQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRERW50aXR5LnByb3RvdHlwZSwgJ3N5c3RlbUlkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3lzSUQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRERW50aXR5LnByb3RvdHlwZSwgJ25vdGF0aW9uTmFtZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5EYXRhIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRERW50aXR5LnByb3RvdHlwZSwgJ2lucHV0RW5jb2RpbmcnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEVERFbnRpdHkucHJvdG90eXBlLCAneG1sRW5jb2RpbmcnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEVERFbnRpdHkucHJvdG90eXBlLCAneG1sVmVyc2lvbicsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MRFRERW50aXR5LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmR0ZEVudGl0eSh0aGlzLCB0aGlzLm9wdGlvbnMud3JpdGVyLmZpbHRlck9wdGlvbnMob3B0aW9ucykpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRFRERW50aXR5O1xuXG4gIH0pKFhNTE5vZGUpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxEVEROb3RhdGlvbiwgWE1MTm9kZSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTERURE5vdGF0aW9uID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRFRETm90YXRpb24sIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRFRETm90YXRpb24ocGFyZW50LCBuYW1lLCB2YWx1ZSkge1xuICAgICAgWE1MRFRETm90YXRpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBEVEQgbm90YXRpb24gbmFtZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAoIXZhbHVlLnB1YklEICYmICF2YWx1ZS5zeXNJRCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQdWJsaWMgb3Igc3lzdGVtIGlkZW50aWZpZXJzIGFyZSByZXF1aXJlZCBmb3IgYW4gZXh0ZXJuYWwgZW50aXR5LiBcIiArIHRoaXMuZGVidWdJbmZvKG5hbWUpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IHRoaXMuc3RyaW5naWZ5Lm5hbWUobmFtZSk7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5Ob3RhdGlvbkRlY2xhcmF0aW9uO1xuICAgICAgaWYgKHZhbHVlLnB1YklEICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5wdWJJRCA9IHRoaXMuc3RyaW5naWZ5LmR0ZFB1YklEKHZhbHVlLnB1YklEKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZS5zeXNJRCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3lzSUQgPSB0aGlzLnN0cmluZ2lmeS5kdGRTeXNJRCh2YWx1ZS5zeXNJRCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERURE5vdGF0aW9uLnByb3RvdHlwZSwgJ3B1YmxpY0lkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHViSUQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRFRETm90YXRpb24ucHJvdG90eXBlLCAnc3lzdGVtSWQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zeXNJRDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTERURE5vdGF0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmR0ZE5vdGF0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEVEROb3RhdGlvbjtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MRGVjbGFyYXRpb24sIFhNTE5vZGUsIGlzT2JqZWN0LFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgaXNPYmplY3QgPSByZXF1aXJlKCcuL1V0aWxpdHknKS5pc09iamVjdDtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgTm9kZVR5cGUgPSByZXF1aXJlKCcuL05vZGVUeXBlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxEZWNsYXJhdGlvbiA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTERlY2xhcmF0aW9uLCBzdXBlckNsYXNzKTtcblxuICAgIGZ1bmN0aW9uIFhNTERlY2xhcmF0aW9uKHBhcmVudCwgdmVyc2lvbiwgZW5jb2RpbmcsIHN0YW5kYWxvbmUpIHtcbiAgICAgIHZhciByZWY7XG4gICAgICBYTUxEZWNsYXJhdGlvbi5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgaWYgKGlzT2JqZWN0KHZlcnNpb24pKSB7XG4gICAgICAgIHJlZiA9IHZlcnNpb24sIHZlcnNpb24gPSByZWYudmVyc2lvbiwgZW5jb2RpbmcgPSByZWYuZW5jb2RpbmcsIHN0YW5kYWxvbmUgPSByZWYuc3RhbmRhbG9uZTtcbiAgICAgIH1cbiAgICAgIGlmICghdmVyc2lvbikge1xuICAgICAgICB2ZXJzaW9uID0gJzEuMCc7XG4gICAgICB9XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5EZWNsYXJhdGlvbjtcbiAgICAgIHRoaXMudmVyc2lvbiA9IHRoaXMuc3RyaW5naWZ5LnhtbFZlcnNpb24odmVyc2lvbik7XG4gICAgICBpZiAoZW5jb2RpbmcgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmVuY29kaW5nID0gdGhpcy5zdHJpbmdpZnkueG1sRW5jb2RpbmcoZW5jb2RpbmcpO1xuICAgICAgfVxuICAgICAgaWYgKHN0YW5kYWxvbmUgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN0YW5kYWxvbmUgPSB0aGlzLnN0cmluZ2lmeS54bWxTdGFuZGFsb25lKHN0YW5kYWxvbmUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFhNTERlY2xhcmF0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmRlY2xhcmF0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEZWNsYXJhdGlvbjtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MRFREQXR0TGlzdCwgWE1MRFRERWxlbWVudCwgWE1MRFRERW50aXR5LCBYTUxEVEROb3RhdGlvbiwgWE1MRG9jVHlwZSwgWE1MTmFtZWROb2RlTWFwLCBYTUxOb2RlLCBpc09iamVjdCxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9VdGlsaXR5JykuaXNPYmplY3Q7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIFhNTERUREF0dExpc3QgPSByZXF1aXJlKCcuL1hNTERUREF0dExpc3QnKTtcblxuICBYTUxEVERFbnRpdHkgPSByZXF1aXJlKCcuL1hNTERUREVudGl0eScpO1xuXG4gIFhNTERUREVsZW1lbnQgPSByZXF1aXJlKCcuL1hNTERUREVsZW1lbnQnKTtcblxuICBYTUxEVEROb3RhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRFRETm90YXRpb24nKTtcblxuICBYTUxOYW1lZE5vZGVNYXAgPSByZXF1aXJlKCcuL1hNTE5hbWVkTm9kZU1hcCcpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRG9jVHlwZSA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTERvY1R5cGUsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MRG9jVHlwZShwYXJlbnQsIHB1YklELCBzeXNJRCkge1xuICAgICAgdmFyIGNoaWxkLCBpLCBsZW4sIHJlZiwgcmVmMSwgcmVmMjtcbiAgICAgIFhNTERvY1R5cGUuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkRvY1R5cGU7XG4gICAgICBpZiAocGFyZW50LmNoaWxkcmVuKSB7XG4gICAgICAgIHJlZiA9IHBhcmVudC5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWZbaV07XG4gICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IE5vZGVUeXBlLkVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IGNoaWxkLm5hbWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuZG9jdW1lbnRPYmplY3QgPSBwYXJlbnQ7XG4gICAgICBpZiAoaXNPYmplY3QocHViSUQpKSB7XG4gICAgICAgIHJlZjEgPSBwdWJJRCwgcHViSUQgPSByZWYxLnB1YklELCBzeXNJRCA9IHJlZjEuc3lzSUQ7XG4gICAgICB9XG4gICAgICBpZiAoc3lzSUQgPT0gbnVsbCkge1xuICAgICAgICByZWYyID0gW3B1YklELCBzeXNJRF0sIHN5c0lEID0gcmVmMlswXSwgcHViSUQgPSByZWYyWzFdO1xuICAgICAgfVxuICAgICAgaWYgKHB1YklEICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5wdWJJRCA9IHRoaXMuc3RyaW5naWZ5LmR0ZFB1YklEKHB1YklEKTtcbiAgICAgIH1cbiAgICAgIGlmIChzeXNJRCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuc3lzSUQgPSB0aGlzLnN0cmluZ2lmeS5kdGRTeXNJRChzeXNJRCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY1R5cGUucHJvdG90eXBlLCAnZW50aXRpZXMnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2hpbGQsIGksIGxlbiwgbm9kZXMsIHJlZjtcbiAgICAgICAgbm9kZXMgPSB7fTtcbiAgICAgICAgcmVmID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWZbaV07XG4gICAgICAgICAgaWYgKChjaGlsZC50eXBlID09PSBOb2RlVHlwZS5FbnRpdHlEZWNsYXJhdGlvbikgJiYgIWNoaWxkLnBlKSB7XG4gICAgICAgICAgICBub2Rlc1tjaGlsZC5uYW1lXSA9IGNoaWxkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFhNTE5hbWVkTm9kZU1hcChub2Rlcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jVHlwZS5wcm90b3R5cGUsICdub3RhdGlvbnMnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2hpbGQsIGksIGxlbiwgbm9kZXMsIHJlZjtcbiAgICAgICAgbm9kZXMgPSB7fTtcbiAgICAgICAgcmVmID0gdGhpcy5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWZbaV07XG4gICAgICAgICAgaWYgKGNoaWxkLnR5cGUgPT09IE5vZGVUeXBlLk5vdGF0aW9uRGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgIG5vZGVzW2NoaWxkLm5hbWVdID0gY2hpbGQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWE1MTmFtZWROb2RlTWFwKG5vZGVzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2NUeXBlLnByb3RvdHlwZSwgJ3B1YmxpY0lkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHViSUQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jVHlwZS5wcm90b3R5cGUsICdzeXN0ZW1JZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5c0lEO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY1R5cGUucHJvdG90eXBlLCAnaW50ZXJuYWxTdWJzZXQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5lbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTERUREVsZW1lbnQodGhpcywgbmFtZSwgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5hdHRMaXN0ID0gZnVuY3Rpb24oZWxlbWVudE5hbWUsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVR5cGUsIGRlZmF1bHRWYWx1ZVR5cGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MRFREQXR0TGlzdCh0aGlzLCBlbGVtZW50TmFtZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVHlwZSwgZGVmYXVsdFZhbHVlVHlwZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUuZW50aXR5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTERUREVudGl0eSh0aGlzLCBmYWxzZSwgbmFtZSwgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2NUeXBlLnByb3RvdHlwZS5wRW50aXR5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTERUREVudGl0eSh0aGlzLCB0cnVlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLm5vdGF0aW9uID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTERURE5vdGF0aW9uKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci5kb2NUeXBlKHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLmVsZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50KG5hbWUsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUuYXR0ID0gZnVuY3Rpb24oZWxlbWVudE5hbWUsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVR5cGUsIGRlZmF1bHRWYWx1ZVR5cGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0TGlzdChlbGVtZW50TmFtZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVHlwZSwgZGVmYXVsdFZhbHVlVHlwZSwgZGVmYXVsdFZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUuZW50ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmVudGl0eShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLnBlbnQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucEVudGl0eShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLm5vdCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub3RhdGlvbihuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY1R5cGUucHJvdG90eXBlLnVwID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290KCkgfHwgdGhpcy5kb2N1bWVudE9iamVjdDtcbiAgICB9O1xuXG4gICAgWE1MRG9jVHlwZS5wcm90b3R5cGUuaXNFcXVhbE5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICBpZiAoIVhNTERvY1R5cGUuX19zdXBlcl9fLmlzRXF1YWxOb2RlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykuaXNFcXVhbE5vZGUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUubmFtZSAhPT0gdGhpcy5uYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnB1YmxpY0lkICE9PSB0aGlzLnB1YmxpY0lkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLnN5c3RlbUlkICE9PSB0aGlzLnN5c3RlbUlkKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MRG9jVHlwZTtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MRE9NQ29uZmlndXJhdGlvbiwgWE1MRE9NSW1wbGVtZW50YXRpb24sIFhNTERvY3VtZW50LCBYTUxOb2RlLCBYTUxTdHJpbmdXcml0ZXIsIFhNTFN0cmluZ2lmaWVyLCBpc1BsYWluT2JqZWN0LFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vVXRpbGl0eScpLmlzUGxhaW5PYmplY3Q7XG5cbiAgWE1MRE9NSW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL1hNTERPTUltcGxlbWVudGF0aW9uJyk7XG5cbiAgWE1MRE9NQ29uZmlndXJhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRE9NQ29uZmlndXJhdGlvbicpO1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxTdHJpbmdpZmllciA9IHJlcXVpcmUoJy4vWE1MU3RyaW5naWZpZXInKTtcblxuICBYTUxTdHJpbmdXcml0ZXIgPSByZXF1aXJlKCcuL1hNTFN0cmluZ1dyaXRlcicpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRG9jdW1lbnQgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxEb2N1bWVudCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxEb2N1bWVudChvcHRpb25zKSB7XG4gICAgICBYTUxEb2N1bWVudC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBudWxsKTtcbiAgICAgIHRoaXMubmFtZSA9IFwiI2RvY3VtZW50XCI7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5Eb2N1bWVudDtcbiAgICAgIHRoaXMuZG9jdW1lbnRVUkkgPSBudWxsO1xuICAgICAgdGhpcy5kb21Db25maWcgPSBuZXcgWE1MRE9NQ29uZmlndXJhdGlvbigpO1xuICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICAgIGlmICghb3B0aW9ucy53cml0ZXIpIHtcbiAgICAgICAgb3B0aW9ucy53cml0ZXIgPSBuZXcgWE1MU3RyaW5nV3JpdGVyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy5zdHJpbmdpZnkgPSBuZXcgWE1MU3RyaW5naWZpZXIob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ2ltcGxlbWVudGF0aW9uJywge1xuICAgICAgdmFsdWU6IG5ldyBYTUxET01JbXBsZW1lbnRhdGlvbigpXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAnZG9jdHlwZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBjaGlsZCwgaSwgbGVuLCByZWY7XG4gICAgICAgIHJlZiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNoaWxkID0gcmVmW2ldO1xuICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSBOb2RlVHlwZS5Eb2NUeXBlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ2RvY3VtZW50RWxlbWVudCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3RPYmplY3QgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICdpbnB1dEVuY29kaW5nJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAnc3RyaWN0RXJyb3JDaGVja2luZycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICd4bWxFbmNvZGluZycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCAhPT0gMCAmJiB0aGlzLmNoaWxkcmVuWzBdLnR5cGUgPT09IE5vZGVUeXBlLkRlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0uZW5jb2Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICd4bWxTdGFuZGFsb25lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoICE9PSAwICYmIHRoaXMuY2hpbGRyZW5bMF0udHlwZSA9PT0gTm9kZVR5cGUuRGVjbGFyYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblswXS5zdGFuZGFsb25lID09PSAneWVzJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxEb2N1bWVudC5wcm90b3R5cGUsICd4bWxWZXJzaW9uJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoICE9PSAwICYmIHRoaXMuY2hpbGRyZW5bMF0udHlwZSA9PT0gTm9kZVR5cGUuRGVjbGFyYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblswXS52ZXJzaW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBcIjEuMFwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAnVVJMJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnRVUkk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAnb3JpZ2luJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MRG9jdW1lbnQucHJvdG90eXBlLCAnY29tcGF0TW9kZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ2NoYXJhY3RlclNldCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTERvY3VtZW50LnByb3RvdHlwZSwgJ2NvbnRlbnRUeXBlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24od3JpdGVyKSB7XG4gICAgICB2YXIgd3JpdGVyT3B0aW9ucztcbiAgICAgIHdyaXRlck9wdGlvbnMgPSB7fTtcbiAgICAgIGlmICghd3JpdGVyKSB7XG4gICAgICAgIHdyaXRlciA9IHRoaXMub3B0aW9ucy53cml0ZXI7XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qod3JpdGVyKSkge1xuICAgICAgICB3cml0ZXJPcHRpb25zID0gd3JpdGVyO1xuICAgICAgICB3cml0ZXIgPSB0aGlzLm9wdGlvbnMud3JpdGVyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdyaXRlci5kb2N1bWVudCh0aGlzLCB3cml0ZXIuZmlsdGVyT3B0aW9ucyh3cml0ZXJPcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmRvY3VtZW50KHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24odGFnTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlVGV4dE5vZGUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVDb21tZW50ID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlQ0RBVEFTZWN0aW9uID0gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uID0gZnVuY3Rpb24odGFyZ2V0LCBkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVBdHRyaWJ1dGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFbnRpdHlSZWZlcmVuY2UgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGZ1bmN0aW9uKHRhZ25hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmltcG9ydE5vZGUgPSBmdW5jdGlvbihpbXBvcnRlZE5vZGUsIGRlZXApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmNyZWF0ZUVsZW1lbnROUyA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgcXVhbGlmaWVkTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlQXR0cmlidXRlTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudEJ5SWQgPSBmdW5jdGlvbihlbGVtZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmFkb3B0Tm9kZSA9IGZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUubm9ybWFsaXplRG9jdW1lbnQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLnJlbmFtZU5vZGUgPSBmdW5jdGlvbihub2RlLCBuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBmdW5jdGlvbihjbGFzc05hbWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVFdmVudCA9IGZ1bmN0aW9uKGV2ZW50SW50ZXJmYWNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVSYW5nZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudC5wcm90b3R5cGUuY3JlYXRlTm9kZUl0ZXJhdG9yID0gZnVuY3Rpb24ocm9vdCwgd2hhdFRvU2hvdywgZmlsdGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50LnByb3RvdHlwZS5jcmVhdGVUcmVlV2Fsa2VyID0gZnVuY3Rpb24ocm9vdCwgd2hhdFRvU2hvdywgZmlsdGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEb2N1bWVudDtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgV3JpdGVyU3RhdGUsIFhNTEF0dHJpYnV0ZSwgWE1MQ0RhdGEsIFhNTENvbW1lbnQsIFhNTERUREF0dExpc3QsIFhNTERUREVsZW1lbnQsIFhNTERUREVudGl0eSwgWE1MRFRETm90YXRpb24sIFhNTERlY2xhcmF0aW9uLCBYTUxEb2NUeXBlLCBYTUxEb2N1bWVudCwgWE1MRG9jdW1lbnRDQiwgWE1MRWxlbWVudCwgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uLCBYTUxSYXcsIFhNTFN0cmluZ1dyaXRlciwgWE1MU3RyaW5naWZpZXIsIFhNTFRleHQsIGdldFZhbHVlLCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNQbGFpbk9iamVjdCwgcmVmLFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICByZWYgPSByZXF1aXJlKCcuL1V0aWxpdHknKSwgaXNPYmplY3QgPSByZWYuaXNPYmplY3QsIGlzRnVuY3Rpb24gPSByZWYuaXNGdW5jdGlvbiwgaXNQbGFpbk9iamVjdCA9IHJlZi5pc1BsYWluT2JqZWN0LCBnZXRWYWx1ZSA9IHJlZi5nZXRWYWx1ZTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxEb2N1bWVudCA9IHJlcXVpcmUoJy4vWE1MRG9jdW1lbnQnKTtcblxuICBYTUxFbGVtZW50ID0gcmVxdWlyZSgnLi9YTUxFbGVtZW50Jyk7XG5cbiAgWE1MQ0RhdGEgPSByZXF1aXJlKCcuL1hNTENEYXRhJyk7XG5cbiAgWE1MQ29tbWVudCA9IHJlcXVpcmUoJy4vWE1MQ29tbWVudCcpO1xuXG4gIFhNTFJhdyA9IHJlcXVpcmUoJy4vWE1MUmF3Jyk7XG5cbiAgWE1MVGV4dCA9IHJlcXVpcmUoJy4vWE1MVGV4dCcpO1xuXG4gIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IHJlcXVpcmUoJy4vWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uJyk7XG5cbiAgWE1MRGVjbGFyYXRpb24gPSByZXF1aXJlKCcuL1hNTERlY2xhcmF0aW9uJyk7XG5cbiAgWE1MRG9jVHlwZSA9IHJlcXVpcmUoJy4vWE1MRG9jVHlwZScpO1xuXG4gIFhNTERUREF0dExpc3QgPSByZXF1aXJlKCcuL1hNTERUREF0dExpc3QnKTtcblxuICBYTUxEVERFbnRpdHkgPSByZXF1aXJlKCcuL1hNTERUREVudGl0eScpO1xuXG4gIFhNTERUREVsZW1lbnQgPSByZXF1aXJlKCcuL1hNTERUREVsZW1lbnQnKTtcblxuICBYTUxEVEROb3RhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRFRETm90YXRpb24nKTtcblxuICBYTUxBdHRyaWJ1dGUgPSByZXF1aXJlKCcuL1hNTEF0dHJpYnV0ZScpO1xuXG4gIFhNTFN0cmluZ2lmaWVyID0gcmVxdWlyZSgnLi9YTUxTdHJpbmdpZmllcicpO1xuXG4gIFhNTFN0cmluZ1dyaXRlciA9IHJlcXVpcmUoJy4vWE1MU3RyaW5nV3JpdGVyJyk7XG5cbiAgV3JpdGVyU3RhdGUgPSByZXF1aXJlKCcuL1dyaXRlclN0YXRlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxEb2N1bWVudENCID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTERvY3VtZW50Q0Iob3B0aW9ucywgb25EYXRhLCBvbkVuZCkge1xuICAgICAgdmFyIHdyaXRlck9wdGlvbnM7XG4gICAgICB0aGlzLm5hbWUgPSBcIj94bWxcIjtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkRvY3VtZW50O1xuICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICAgIHdyaXRlck9wdGlvbnMgPSB7fTtcbiAgICAgIGlmICghb3B0aW9ucy53cml0ZXIpIHtcbiAgICAgICAgb3B0aW9ucy53cml0ZXIgPSBuZXcgWE1MU3RyaW5nV3JpdGVyKCk7XG4gICAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9ucy53cml0ZXIpKSB7XG4gICAgICAgIHdyaXRlck9wdGlvbnMgPSBvcHRpb25zLndyaXRlcjtcbiAgICAgICAgb3B0aW9ucy53cml0ZXIgPSBuZXcgWE1MU3RyaW5nV3JpdGVyKCk7XG4gICAgICB9XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgdGhpcy53cml0ZXIgPSBvcHRpb25zLndyaXRlcjtcbiAgICAgIHRoaXMud3JpdGVyT3B0aW9ucyA9IHRoaXMud3JpdGVyLmZpbHRlck9wdGlvbnMod3JpdGVyT3B0aW9ucyk7XG4gICAgICB0aGlzLnN0cmluZ2lmeSA9IG5ldyBYTUxTdHJpbmdpZmllcihvcHRpb25zKTtcbiAgICAgIHRoaXMub25EYXRhQ2FsbGJhY2sgPSBvbkRhdGEgfHwgZnVuY3Rpb24oKSB7fTtcbiAgICAgIHRoaXMub25FbmRDYWxsYmFjayA9IG9uRW5kIHx8IGZ1bmN0aW9uKCkge307XG4gICAgICB0aGlzLmN1cnJlbnROb2RlID0gbnVsbDtcbiAgICAgIHRoaXMuY3VycmVudExldmVsID0gLTE7XG4gICAgICB0aGlzLm9wZW5UYWdzID0ge307XG4gICAgICB0aGlzLmRvY3VtZW50U3RhcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5kb2N1bWVudENvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yb290ID0gbnVsbDtcbiAgICB9XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5jcmVhdGVDaGlsZE5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgYXR0LCBhdHROYW1lLCBhdHRyaWJ1dGVzLCBjaGlsZCwgaSwgbGVuLCByZWYxLCByZWYyO1xuICAgICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5DRGF0YTpcbiAgICAgICAgICB0aGlzLmNkYXRhKG5vZGUudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkNvbW1lbnQ6XG4gICAgICAgICAgdGhpcy5jb21tZW50KG5vZGUudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkVsZW1lbnQ6XG4gICAgICAgICAgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgICAgIHJlZjEgPSBub2RlLmF0dHJpYnM7XG4gICAgICAgICAgZm9yIChhdHROYW1lIGluIHJlZjEpIHtcbiAgICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZjEsIGF0dE5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGF0dCA9IHJlZjFbYXR0TmFtZV07XG4gICAgICAgICAgICBhdHRyaWJ1dGVzW2F0dE5hbWVdID0gYXR0LnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5vZGUobm9kZS5uYW1lLCBhdHRyaWJ1dGVzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5EdW1teTpcbiAgICAgICAgICB0aGlzLmR1bW15KCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuUmF3OlxuICAgICAgICAgIHRoaXMucmF3KG5vZGUudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLlRleHQ6XG4gICAgICAgICAgdGhpcy50ZXh0KG5vZGUudmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjpcbiAgICAgICAgICB0aGlzLmluc3RydWN0aW9uKG5vZGUudGFyZ2V0LCBub2RlLnZhbHVlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIFhNTCBub2RlIHR5cGUgaXMgbm90IHN1cHBvcnRlZCBpbiBhIEpTIG9iamVjdDogXCIgKyBub2RlLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgfVxuICAgICAgcmVmMiA9IG5vZGUuY2hpbGRyZW47XG4gICAgICBmb3IgKGkgPSAwLCBsZW4gPSByZWYyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmMltpXTtcbiAgICAgICAgdGhpcy5jcmVhdGVDaGlsZE5vZGUoY2hpbGQpO1xuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gTm9kZVR5cGUuRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMudXAoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmR1bW15ID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUubm9kZSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHZhciByZWYxO1xuICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG5vZGUgbmFtZS5cIik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5yb290ICYmIHRoaXMuY3VycmVudExldmVsID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEb2N1bWVudCBjYW4gb25seSBoYXZlIG9uZSByb290IG5vZGUuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgfVxuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbmFtZSA9IGdldFZhbHVlKG5hbWUpO1xuICAgICAgaWYgKGF0dHJpYnV0ZXMgPT0gbnVsbCkge1xuICAgICAgICBhdHRyaWJ1dGVzID0ge307XG4gICAgICB9XG4gICAgICBhdHRyaWJ1dGVzID0gZ2V0VmFsdWUoYXR0cmlidXRlcyk7XG4gICAgICBpZiAoIWlzT2JqZWN0KGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIHJlZjEgPSBbYXR0cmlidXRlcywgdGV4dF0sIHRleHQgPSByZWYxWzBdLCBhdHRyaWJ1dGVzID0gcmVmMVsxXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY3VycmVudE5vZGUgPSBuZXcgWE1MRWxlbWVudCh0aGlzLCBuYW1lLCBhdHRyaWJ1dGVzKTtcbiAgICAgIHRoaXMuY3VycmVudE5vZGUuY2hpbGRyZW4gPSBmYWxzZTtcbiAgICAgIHRoaXMuY3VycmVudExldmVsKys7XG4gICAgICB0aGlzLm9wZW5UYWdzW3RoaXMuY3VycmVudExldmVsXSA9IHRoaXMuY3VycmVudE5vZGU7XG4gICAgICBpZiAodGV4dCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMudGV4dCh0ZXh0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5lbGVtZW50ID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgdmFyIGNoaWxkLCBpLCBsZW4sIG9sZFZhbGlkYXRpb25GbGFnLCByZWYxLCByb290O1xuICAgICAgaWYgKHRoaXMuY3VycmVudE5vZGUgJiYgdGhpcy5jdXJyZW50Tm9kZS50eXBlID09PSBOb2RlVHlwZS5Eb2NUeXBlKSB7XG4gICAgICAgIHRoaXMuZHRkRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkgfHwgaXNPYmplY3QobmFtZSkgfHwgaXNGdW5jdGlvbihuYW1lKSkge1xuICAgICAgICAgIG9sZFZhbGlkYXRpb25GbGFnID0gdGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbjtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICByb290ID0gbmV3IFhNTERvY3VtZW50KHRoaXMub3B0aW9ucykuZWxlbWVudCgnVEVNUF9ST09UJyk7XG4gICAgICAgICAgcm9vdC5lbGVtZW50KG5hbWUpO1xuICAgICAgICAgIHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24gPSBvbGRWYWxpZGF0aW9uRmxhZztcbiAgICAgICAgICByZWYxID0gcm9vdC5jaGlsZHJlbjtcbiAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSByZWYxLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjaGlsZCA9IHJlZjFbaV07XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUNoaWxkTm9kZShjaGlsZCk7XG4gICAgICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gTm9kZVR5cGUuRWxlbWVudCkge1xuICAgICAgICAgICAgICB0aGlzLnVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubm9kZShuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgYXR0TmFtZSwgYXR0VmFsdWU7XG4gICAgICBpZiAoIXRoaXMuY3VycmVudE5vZGUgfHwgdGhpcy5jdXJyZW50Tm9kZS5jaGlsZHJlbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdHQoKSBjYW4gb25seSBiZSB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGFuIGVsZSgpIGNhbGwgaW4gY2FsbGJhY2sgbW9kZS4gXCIgKyB0aGlzLmRlYnVnSW5mbyhuYW1lKSk7XG4gICAgICB9XG4gICAgICBpZiAobmFtZSAhPSBudWxsKSB7XG4gICAgICAgIG5hbWUgPSBnZXRWYWx1ZShuYW1lKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdChuYW1lKSkge1xuICAgICAgICBmb3IgKGF0dE5hbWUgaW4gbmFtZSkge1xuICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKG5hbWUsIGF0dE5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgICBhdHRWYWx1ZSA9IG5hbWVbYXR0TmFtZV07XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGUoYXR0TmFtZSwgYXR0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmFwcGx5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5rZWVwTnVsbEF0dHJpYnV0ZXMgJiYgKHZhbHVlID09IG51bGwpKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Tm9kZS5hdHRyaWJzW25hbWVdID0gbmV3IFhNTEF0dHJpYnV0ZSh0aGlzLCBuYW1lLCBcIlwiKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Tm9kZS5hdHRyaWJzW25hbWVdID0gbmV3IFhNTEF0dHJpYnV0ZSh0aGlzLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxUZXh0KHRoaXMsIHZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLnRleHQobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmNkYXRhID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxDRGF0YSh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5jZGF0YShub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuY29tbWVudCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5vZGUgPSBuZXcgWE1MQ29tbWVudCh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5jb21tZW50KG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5yYXcgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBub2RlID0gbmV3IFhNTFJhdyh0aGlzLCB2YWx1ZSk7XG4gICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5yYXcobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmluc3RydWN0aW9uID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgdmFyIGksIGluc1RhcmdldCwgaW5zVmFsdWUsIGxlbiwgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIGlmICh0YXJnZXQgIT0gbnVsbCkge1xuICAgICAgICB0YXJnZXQgPSBnZXRWYWx1ZSh0YXJnZXQpO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHRhcmdldC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGluc1RhcmdldCA9IHRhcmdldFtpXTtcbiAgICAgICAgICB0aGlzLmluc3RydWN0aW9uKGluc1RhcmdldCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodGFyZ2V0KSkge1xuICAgICAgICBmb3IgKGluc1RhcmdldCBpbiB0YXJnZXQpIHtcbiAgICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbCh0YXJnZXQsIGluc1RhcmdldCkpIGNvbnRpbnVlO1xuICAgICAgICAgIGluc1ZhbHVlID0gdGFyZ2V0W2luc1RhcmdldF07XG4gICAgICAgICAgdGhpcy5pbnN0cnVjdGlvbihpbnNUYXJnZXQsIGluc1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5hcHBseSgpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGUgPSBuZXcgWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRoaXMsIHRhcmdldCwgdmFsdWUpO1xuICAgICAgICB0aGlzLm9uRGF0YSh0aGlzLndyaXRlci5wcm9jZXNzaW5nSW5zdHJ1Y3Rpb24obm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpLCB0aGlzLmN1cnJlbnRMZXZlbCArIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRlY2xhcmF0aW9uID0gZnVuY3Rpb24odmVyc2lvbiwgZW5jb2RpbmcsIHN0YW5kYWxvbmUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgaWYgKHRoaXMuZG9jdW1lbnRTdGFydGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcImRlY2xhcmF0aW9uKCkgbXVzdCBiZSB0aGUgZmlyc3Qgbm9kZS5cIik7XG4gICAgICB9XG4gICAgICBub2RlID0gbmV3IFhNTERlY2xhcmF0aW9uKHRoaXMsIHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmRlY2xhcmF0aW9uKG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5kb2N0eXBlID0gZnVuY3Rpb24ocm9vdCwgcHViSUQsIHN5c0lEKSB7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBpZiAocm9vdCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcgcm9vdCBub2RlIG5hbWUuXCIpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJkdGQoKSBtdXN0IGNvbWUgYmVmb3JlIHRoZSByb290IG5vZGUuXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5jdXJyZW50Tm9kZSA9IG5ldyBYTUxEb2NUeXBlKHRoaXMsIHB1YklELCBzeXNJRCk7XG4gICAgICB0aGlzLmN1cnJlbnROb2RlLnJvb3ROb2RlTmFtZSA9IHJvb3Q7XG4gICAgICB0aGlzLmN1cnJlbnROb2RlLmNoaWxkcmVuID0gZmFsc2U7XG4gICAgICB0aGlzLmN1cnJlbnRMZXZlbCsrO1xuICAgICAgdGhpcy5vcGVuVGFnc1t0aGlzLmN1cnJlbnRMZXZlbF0gPSB0aGlzLmN1cnJlbnROb2RlO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmR0ZEVsZW1lbnQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBub2RlID0gbmV3IFhNTERUREVsZW1lbnQodGhpcywgbmFtZSwgdmFsdWUpO1xuICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIuZHRkRWxlbWVudChub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuYXR0TGlzdCA9IGZ1bmN0aW9uKGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxEVERBdHRMaXN0KHRoaXMsIGVsZW1lbnROYW1lLCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVUeXBlLCBkZWZhdWx0VmFsdWVUeXBlLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgdGhpcy5vbkRhdGEodGhpcy53cml0ZXIuZHRkQXR0TGlzdChub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuZW50aXR5ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBub2RlO1xuICAgICAgdGhpcy5vcGVuQ3VycmVudCgpO1xuICAgICAgbm9kZSA9IG5ldyBYTUxEVERFbnRpdHkodGhpcywgZmFsc2UsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmR0ZEVudGl0eShub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUucEVudGl0eSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB2YXIgbm9kZTtcbiAgICAgIHRoaXMub3BlbkN1cnJlbnQoKTtcbiAgICAgIG5vZGUgPSBuZXcgWE1MRFRERW50aXR5KHRoaXMsIHRydWUsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmR0ZEVudGl0eShub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsICsgMSksIHRoaXMuY3VycmVudExldmVsICsgMSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUubm90YXRpb24gPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICB0aGlzLm9wZW5DdXJyZW50KCk7XG4gICAgICBub2RlID0gbmV3IFhNTERURE5vdGF0aW9uKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgIHRoaXMub25EYXRhKHRoaXMud3JpdGVyLmR0ZE5vdGF0aW9uKG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKSwgdGhpcy5jdXJyZW50TGV2ZWwgKyAxKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS51cCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudExldmVsIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgZG9jdW1lbnQgbm9kZSBoYXMgbm8gcGFyZW50LlwiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmN1cnJlbnROb2RlKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnROb2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU5vZGUodGhpcy5jdXJyZW50Tm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vcGVuTm9kZSh0aGlzLmN1cnJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xvc2VOb2RlKHRoaXMub3BlblRhZ3NbdGhpcy5jdXJyZW50TGV2ZWxdKTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSB0aGlzLm9wZW5UYWdzW3RoaXMuY3VycmVudExldmVsXTtcbiAgICAgIHRoaXMuY3VycmVudExldmVsLS07XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB3aGlsZSAodGhpcy5jdXJyZW50TGV2ZWwgPj0gMCkge1xuICAgICAgICB0aGlzLnVwKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5vbkVuZCgpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5vcGVuQ3VycmVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuY3VycmVudE5vZGUpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Tm9kZS5jaGlsZHJlbiA9IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5Ob2RlKHRoaXMuY3VycmVudE5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5vcGVuTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBhdHQsIGNodW5rLCBuYW1lLCByZWYxO1xuICAgICAgaWYgKCFub2RlLmlzT3Blbikge1xuICAgICAgICBpZiAoIXRoaXMucm9vdCAmJiB0aGlzLmN1cnJlbnRMZXZlbCA9PT0gMCAmJiBub2RlLnR5cGUgPT09IE5vZGVUeXBlLkVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLnJvb3QgPSBub2RlO1xuICAgICAgICB9XG4gICAgICAgIGNodW5rID0gJyc7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlLkVsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLndyaXRlck9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgICAgIGNodW5rID0gdGhpcy53cml0ZXIuaW5kZW50KG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwpICsgJzwnICsgbm9kZS5uYW1lO1xuICAgICAgICAgIHJlZjEgPSBub2RlLmF0dHJpYnM7XG4gICAgICAgICAgZm9yIChuYW1lIGluIHJlZjEpIHtcbiAgICAgICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZjEsIG5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGF0dCA9IHJlZjFbbmFtZV07XG4gICAgICAgICAgICBjaHVuayArPSB0aGlzLndyaXRlci5hdHRyaWJ1dGUoYXR0LCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2h1bmsgKz0gKG5vZGUuY2hpbGRyZW4gPyAnPicgOiAnLz4nKSArIHRoaXMud3JpdGVyLmVuZGxpbmUobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCk7XG4gICAgICAgICAgdGhpcy53cml0ZXJPcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMud3JpdGVyT3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICAgICAgY2h1bmsgPSB0aGlzLndyaXRlci5pbmRlbnQobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCkgKyAnPCFET0NUWVBFICcgKyBub2RlLnJvb3ROb2RlTmFtZTtcbiAgICAgICAgICBpZiAobm9kZS5wdWJJRCAmJiBub2RlLnN5c0lEKSB7XG4gICAgICAgICAgICBjaHVuayArPSAnIFBVQkxJQyBcIicgKyBub2RlLnB1YklEICsgJ1wiIFwiJyArIG5vZGUuc3lzSUQgKyAnXCInO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5zeXNJRCkge1xuICAgICAgICAgICAgY2h1bmsgKz0gJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBjaHVuayArPSAnIFsnO1xuICAgICAgICAgICAgdGhpcy53cml0ZXJPcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlck9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgICAgICAgIGNodW5rICs9ICc+JztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2h1bmsgKz0gdGhpcy53cml0ZXIuZW5kbGluZShub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uRGF0YShjaHVuaywgdGhpcy5jdXJyZW50TGV2ZWwpO1xuICAgICAgICByZXR1cm4gbm9kZS5pc09wZW4gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5jbG9zZU5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICB2YXIgY2h1bms7XG4gICAgICBpZiAoIW5vZGUuaXNDbG9zZWQpIHtcbiAgICAgICAgY2h1bmsgPSAnJztcbiAgICAgICAgdGhpcy53cml0ZXJPcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlLkVsZW1lbnQpIHtcbiAgICAgICAgICBjaHVuayA9IHRoaXMud3JpdGVyLmluZGVudChub2RlLCB0aGlzLndyaXRlck9wdGlvbnMsIHRoaXMuY3VycmVudExldmVsKSArICc8LycgKyBub2RlLm5hbWUgKyAnPicgKyB0aGlzLndyaXRlci5lbmRsaW5lKG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNodW5rID0gdGhpcy53cml0ZXIuaW5kZW50KG5vZGUsIHRoaXMud3JpdGVyT3B0aW9ucywgdGhpcy5jdXJyZW50TGV2ZWwpICsgJ10+JyArIHRoaXMud3JpdGVyLmVuZGxpbmUobm9kZSwgdGhpcy53cml0ZXJPcHRpb25zLCB0aGlzLmN1cnJlbnRMZXZlbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53cml0ZXJPcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgICAgdGhpcy5vbkRhdGEoY2h1bmssIHRoaXMuY3VycmVudExldmVsKTtcbiAgICAgICAgcmV0dXJuIG5vZGUuaXNDbG9zZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5vbkRhdGEgPSBmdW5jdGlvbihjaHVuaywgbGV2ZWwpIHtcbiAgICAgIHRoaXMuZG9jdW1lbnRTdGFydGVkID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0aGlzLm9uRGF0YUNhbGxiYWNrKGNodW5rLCBsZXZlbCArIDEpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb2N1bWVudENvbXBsZXRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5vbkVuZENhbGxiYWNrKCk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRlYnVnSW5mbyA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIGlmIChuYW1lID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJub2RlOiA8XCIgKyBuYW1lICsgXCI+XCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmVsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5ub2QgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS50eHQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRhdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZGF0YSh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmNvbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21tZW50KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuaW5zID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3Rpb24odGFyZ2V0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmRlYyA9IGZ1bmN0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWNsYXJhdGlvbih2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmR0ZCA9IGZ1bmN0aW9uKHJvb3QsIHB1YklELCBzeXNJRCkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jdHlwZShyb290LCBwdWJJRCwgc3lzSUQpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5lID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUubiA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGUobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLnQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuY2RhdGEodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5jID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbW1lbnQodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxEb2N1bWVudENCLnByb3RvdHlwZS5yID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnJhdyh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmkgPSBmdW5jdGlvbih0YXJnZXQsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbih0YXJnZXQsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuYXR0ID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAodGhpcy5jdXJyZW50Tm9kZSAmJiB0aGlzLmN1cnJlbnROb2RlLnR5cGUgPT09IE5vZGVUeXBlLkRvY1R5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0TGlzdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLmEgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICh0aGlzLmN1cnJlbnROb2RlICYmIHRoaXMuY3VycmVudE5vZGUudHlwZSA9PT0gTm9kZVR5cGUuRG9jVHlwZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRMaXN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRG9jdW1lbnRDQi5wcm90b3R5cGUuZW50ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmVudGl0eShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLnBlbnQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucEVudGl0eShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTERvY3VtZW50Q0IucHJvdG90eXBlLm5vdCA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5ub3RhdGlvbihuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEb2N1bWVudENCO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTER1bW15LCBYTUxOb2RlLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgWE1MTm9kZSA9IHJlcXVpcmUoJy4vWE1MTm9kZScpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MRHVtbXkgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxEdW1teSwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxEdW1teShwYXJlbnQpIHtcbiAgICAgIFhNTER1bW15Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5EdW1teTtcbiAgICB9XG5cbiAgICBYTUxEdW1teS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxEdW1teS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxEdW1teTtcblxuICB9KShYTUxOb2RlKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgWE1MQXR0cmlidXRlLCBYTUxFbGVtZW50LCBYTUxOYW1lZE5vZGVNYXAsIFhNTE5vZGUsIGdldFZhbHVlLCBpc0Z1bmN0aW9uLCBpc09iamVjdCwgcmVmLFxuICAgIGV4dGVuZCA9IGZ1bmN0aW9uKGNoaWxkLCBwYXJlbnQpIHsgZm9yICh2YXIga2V5IGluIHBhcmVudCkgeyBpZiAoaGFzUHJvcC5jYWxsKHBhcmVudCwga2V5KSkgY2hpbGRba2V5XSA9IHBhcmVudFtrZXldOyB9IGZ1bmN0aW9uIGN0b3IoKSB7IHRoaXMuY29uc3RydWN0b3IgPSBjaGlsZDsgfSBjdG9yLnByb3RvdHlwZSA9IHBhcmVudC5wcm90b3R5cGU7IGNoaWxkLnByb3RvdHlwZSA9IG5ldyBjdG9yKCk7IGNoaWxkLl9fc3VwZXJfXyA9IHBhcmVudC5wcm90b3R5cGU7IHJldHVybiBjaGlsZDsgfSxcbiAgICBoYXNQcm9wID0ge30uaGFzT3duUHJvcGVydHk7XG5cbiAgcmVmID0gcmVxdWlyZSgnLi9VdGlsaXR5JyksIGlzT2JqZWN0ID0gcmVmLmlzT2JqZWN0LCBpc0Z1bmN0aW9uID0gcmVmLmlzRnVuY3Rpb24sIGdldFZhbHVlID0gcmVmLmdldFZhbHVlO1xuXG4gIFhNTE5vZGUgPSByZXF1aXJlKCcuL1hNTE5vZGUnKTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxBdHRyaWJ1dGUgPSByZXF1aXJlKCcuL1hNTEF0dHJpYnV0ZScpO1xuXG4gIFhNTE5hbWVkTm9kZU1hcCA9IHJlcXVpcmUoJy4vWE1MTmFtZWROb2RlTWFwJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxFbGVtZW50ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MRWxlbWVudCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxFbGVtZW50KHBhcmVudCwgbmFtZSwgYXR0cmlidXRlcykge1xuICAgICAgdmFyIGNoaWxkLCBqLCBsZW4sIHJlZjE7XG4gICAgICBYTUxFbGVtZW50Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgZWxlbWVudCBuYW1lLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgdGhpcy5uYW1lID0gdGhpcy5zdHJpbmdpZnkubmFtZShuYW1lKTtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLkVsZW1lbnQ7XG4gICAgICB0aGlzLmF0dHJpYnMgPSB7fTtcbiAgICAgIHRoaXMuc2NoZW1hVHlwZUluZm8gPSBudWxsO1xuICAgICAgaWYgKGF0dHJpYnV0ZXMgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZShhdHRyaWJ1dGVzKTtcbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnQudHlwZSA9PT0gTm9kZVR5cGUuRG9jdW1lbnQpIHtcbiAgICAgICAgdGhpcy5pc1Jvb3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRvY3VtZW50T2JqZWN0ID0gcGFyZW50O1xuICAgICAgICBwYXJlbnQucm9vdE9iamVjdCA9IHRoaXM7XG4gICAgICAgIGlmIChwYXJlbnQuY2hpbGRyZW4pIHtcbiAgICAgICAgICByZWYxID0gcGFyZW50LmNoaWxkcmVuO1xuICAgICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZjEubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICAgIGNoaWxkID0gcmVmMVtqXTtcbiAgICAgICAgICAgIGlmIChjaGlsZC50eXBlID09PSBOb2RlVHlwZS5Eb2NUeXBlKSB7XG4gICAgICAgICAgICAgIGNoaWxkLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxFbGVtZW50LnByb3RvdHlwZSwgJ3RhZ05hbWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAnbmFtZXNwYWNlVVJJJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAncHJlZml4Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAnbG9jYWxOYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxFbGVtZW50LnByb3RvdHlwZSwgJ2lkJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAnY2xhc3NOYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAnY2xhc3NMaXN0Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTEVsZW1lbnQucHJvdG90eXBlLCAnYXR0cmlidXRlcycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5hdHRyaWJ1dGVNYXAgfHwgIXRoaXMuYXR0cmlidXRlTWFwLm5vZGVzKSB7XG4gICAgICAgICAgdGhpcy5hdHRyaWJ1dGVNYXAgPSBuZXcgWE1MTmFtZWROb2RlTWFwKHRoaXMuYXR0cmlicyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlTWFwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhdHQsIGF0dE5hbWUsIGNsb25lZFNlbGYsIHJlZjE7XG4gICAgICBjbG9uZWRTZWxmID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgIGlmIChjbG9uZWRTZWxmLmlzUm9vdCkge1xuICAgICAgICBjbG9uZWRTZWxmLmRvY3VtZW50T2JqZWN0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNsb25lZFNlbGYuYXR0cmlicyA9IHt9O1xuICAgICAgcmVmMSA9IHRoaXMuYXR0cmlicztcbiAgICAgIGZvciAoYXR0TmFtZSBpbiByZWYxKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZjEsIGF0dE5hbWUpKSBjb250aW51ZTtcbiAgICAgICAgYXR0ID0gcmVmMVthdHROYW1lXTtcbiAgICAgICAgY2xvbmVkU2VsZi5hdHRyaWJzW2F0dE5hbWVdID0gYXR0LmNsb25lKCk7XG4gICAgICB9XG4gICAgICBjbG9uZWRTZWxmLmNoaWxkcmVuID0gW107XG4gICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpIHtcbiAgICAgICAgdmFyIGNsb25lZENoaWxkO1xuICAgICAgICBjbG9uZWRDaGlsZCA9IGNoaWxkLmNsb25lKCk7XG4gICAgICAgIGNsb25lZENoaWxkLnBhcmVudCA9IGNsb25lZFNlbGY7XG4gICAgICAgIHJldHVybiBjbG9uZWRTZWxmLmNoaWxkcmVuLnB1c2goY2xvbmVkQ2hpbGQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gY2xvbmVkU2VsZjtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuYXR0cmlidXRlID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHZhciBhdHROYW1lLCBhdHRWYWx1ZTtcbiAgICAgIGlmIChuYW1lICE9IG51bGwpIHtcbiAgICAgICAgbmFtZSA9IGdldFZhbHVlKG5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKGlzT2JqZWN0KG5hbWUpKSB7XG4gICAgICAgIGZvciAoYXR0TmFtZSBpbiBuYW1lKSB7XG4gICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwobmFtZSwgYXR0TmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICAgIGF0dFZhbHVlID0gbmFtZVthdHROYW1lXTtcbiAgICAgICAgICB0aGlzLmF0dHJpYnV0ZShhdHROYW1lLCBhdHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLmtlZXBOdWxsQXR0cmlidXRlcyAmJiAodmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgICAgICB0aGlzLmF0dHJpYnNbbmFtZV0gPSBuZXcgWE1MQXR0cmlidXRlKHRoaXMsIG5hbWUsIFwiXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmF0dHJpYnNbbmFtZV0gPSBuZXcgWE1MQXR0cmlidXRlKHRoaXMsIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHZhciBhdHROYW1lLCBqLCBsZW47XG4gICAgICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgYXR0cmlidXRlIG5hbWUuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICBuYW1lID0gZ2V0VmFsdWUobmFtZSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShuYW1lKSkge1xuICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSBuYW1lLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgYXR0TmFtZSA9IG5hbWVbal07XG4gICAgICAgICAgZGVsZXRlIHRoaXMuYXR0cmlic1thdHROYW1lXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuYXR0cmlic1tuYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMud3JpdGVyLmVsZW1lbnQodGhpcywgdGhpcy5vcHRpb25zLndyaXRlci5maWx0ZXJPcHRpb25zKG9wdGlvbnMpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuYXR0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmEgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgaWYgKHRoaXMuYXR0cmlicy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJzW25hbWVdLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5vZGUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICBpZiAodGhpcy5hdHRyaWJzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dHJpYnNbbmFtZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTm9kZSA9IGZ1bmN0aW9uKG5ld0F0dHIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlQXR0cmlidXRlTm9kZSA9IGZ1bmN0aW9uKG9sZEF0dHIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmdldEF0dHJpYnV0ZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIHF1YWxpZmllZE5hbWUsIHZhbHVlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUF0dHJpYnV0ZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuZ2V0QXR0cmlidXRlTm9kZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuc2V0QXR0cmlidXRlTm9kZU5TID0gZnVuY3Rpb24obmV3QXR0cikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5VGFnTmFtZU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuaGFzQXR0cmlidXRlID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlicy5oYXNPd25Qcm9wZXJ0eShuYW1lKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuaGFzQXR0cmlidXRlTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5zZXRJZEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKG5hbWUsIGlzSWQpIHtcbiAgICAgIGlmICh0aGlzLmF0dHJpYnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlic1tuYW1lXS5pc0lkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGlzSWQ7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLnNldElkQXR0cmlidXRlTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSwgaXNJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5zZXRJZEF0dHJpYnV0ZU5vZGUgPSBmdW5jdGlvbihpZEF0dHIsIGlzSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MRWxlbWVudC5wcm90b3R5cGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBmdW5jdGlvbih0YWduYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTEVsZW1lbnQucHJvdG90eXBlLmdldEVsZW1lbnRzQnlUYWdOYW1lTlMgPSBmdW5jdGlvbihuYW1lc3BhY2VVUkksIGxvY2FsTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gZnVuY3Rpb24oY2xhc3NOYW1lcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxFbGVtZW50LnByb3RvdHlwZS5pc0VxdWFsTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBpLCBqLCByZWYxO1xuICAgICAgaWYgKCFYTUxFbGVtZW50Ll9fc3VwZXJfXy5pc0VxdWFsTm9kZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLmlzRXF1YWxOb2RlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLm5hbWVzcGFjZVVSSSAhPT0gdGhpcy5uYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUucHJlZml4ICE9PSB0aGlzLnByZWZpeCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5sb2NhbE5hbWUgIT09IHRoaXMubG9jYWxOYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmF0dHJpYnMubGVuZ3RoICE9PSB0aGlzLmF0dHJpYnMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IGogPSAwLCByZWYxID0gdGhpcy5hdHRyaWJzLmxlbmd0aCAtIDE7IDAgPD0gcmVmMSA/IGogPD0gcmVmMSA6IGogPj0gcmVmMTsgaSA9IDAgPD0gcmVmMSA/ICsraiA6IC0taikge1xuICAgICAgICBpZiAoIXRoaXMuYXR0cmlic1tpXS5pc0VxdWFsTm9kZShub2RlLmF0dHJpYnNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTEVsZW1lbnQ7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MTmFtZWROb2RlTWFwO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MTmFtZWROb2RlTWFwID0gKGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIFhNTE5hbWVkTm9kZU1hcChub2Rlcykge1xuICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxOYW1lZE5vZGVNYXAucHJvdG90eXBlLCAnbGVuZ3RoJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubm9kZXMpLmxlbmd0aCB8fCAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMgPSBudWxsO1xuICAgIH07XG5cbiAgICBYTUxOYW1lZE5vZGVNYXAucHJvdG90eXBlLmdldE5hbWVkSXRlbSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVzW25hbWVdO1xuICAgIH07XG5cbiAgICBYTUxOYW1lZE5vZGVNYXAucHJvdG90eXBlLnNldE5hbWVkSXRlbSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBvbGROb2RlO1xuICAgICAgb2xkTm9kZSA9IHRoaXMubm9kZXNbbm9kZS5ub2RlTmFtZV07XG4gICAgICB0aGlzLm5vZGVzW25vZGUubm9kZU5hbWVdID0gbm9kZTtcbiAgICAgIHJldHVybiBvbGROb2RlIHx8IG51bGw7XG4gICAgfTtcblxuICAgIFhNTE5hbWVkTm9kZU1hcC5wcm90b3R5cGUucmVtb3ZlTmFtZWRJdGVtID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIG9sZE5vZGU7XG4gICAgICBvbGROb2RlID0gdGhpcy5ub2Rlc1tuYW1lXTtcbiAgICAgIGRlbGV0ZSB0aGlzLm5vZGVzW25hbWVdO1xuICAgICAgcmV0dXJuIG9sZE5vZGUgfHwgbnVsbDtcbiAgICB9O1xuXG4gICAgWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZS5pdGVtID0gZnVuY3Rpb24oaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5vZGVzW09iamVjdC5rZXlzKHRoaXMubm9kZXMpW2luZGV4XV0gfHwgbnVsbDtcbiAgICB9O1xuXG4gICAgWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZS5nZXROYW1lZEl0ZW1OUyA9IGZ1bmN0aW9uKG5hbWVzcGFjZVVSSSwgbG9jYWxOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICB9O1xuXG4gICAgWE1MTmFtZWROb2RlTWFwLnByb3RvdHlwZS5zZXROYW1lZEl0ZW1OUyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH07XG5cbiAgICBYTUxOYW1lZE5vZGVNYXAucHJvdG90eXBlLnJlbW92ZU5hbWVkSXRlbU5TID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJLCBsb2NhbE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MTmFtZWROb2RlTWFwO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgRG9jdW1lbnRQb3NpdGlvbiwgTm9kZVR5cGUsIFhNTENEYXRhLCBYTUxDb21tZW50LCBYTUxEZWNsYXJhdGlvbiwgWE1MRG9jVHlwZSwgWE1MRHVtbXksIFhNTEVsZW1lbnQsIFhNTE5hbWVkTm9kZU1hcCwgWE1MTm9kZSwgWE1MTm9kZUxpc3QsIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgWE1MUmF3LCBYTUxUZXh0LCBnZXRWYWx1ZSwgaXNFbXB0eSwgaXNGdW5jdGlvbiwgaXNPYmplY3QsIHJlZjEsXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIHJlZjEgPSByZXF1aXJlKCcuL1V0aWxpdHknKSwgaXNPYmplY3QgPSByZWYxLmlzT2JqZWN0LCBpc0Z1bmN0aW9uID0gcmVmMS5pc0Z1bmN0aW9uLCBpc0VtcHR5ID0gcmVmMS5pc0VtcHR5LCBnZXRWYWx1ZSA9IHJlZjEuZ2V0VmFsdWU7XG5cbiAgWE1MRWxlbWVudCA9IG51bGw7XG5cbiAgWE1MQ0RhdGEgPSBudWxsO1xuXG4gIFhNTENvbW1lbnQgPSBudWxsO1xuXG4gIFhNTERlY2xhcmF0aW9uID0gbnVsbDtcblxuICBYTUxEb2NUeXBlID0gbnVsbDtcblxuICBYTUxSYXcgPSBudWxsO1xuXG4gIFhNTFRleHQgPSBudWxsO1xuXG4gIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IG51bGw7XG5cbiAgWE1MRHVtbXkgPSBudWxsO1xuXG4gIE5vZGVUeXBlID0gbnVsbDtcblxuICBYTUxOb2RlTGlzdCA9IG51bGw7XG5cbiAgWE1MTmFtZWROb2RlTWFwID0gbnVsbDtcblxuICBEb2N1bWVudFBvc2l0aW9uID0gbnVsbDtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTE5vZGUgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MTm9kZShwYXJlbnQxKSB7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDE7XG4gICAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5wYXJlbnQub3B0aW9ucztcbiAgICAgICAgdGhpcy5zdHJpbmdpZnkgPSB0aGlzLnBhcmVudC5zdHJpbmdpZnk7XG4gICAgICB9XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgIHRoaXMuYmFzZVVSSSA9IG51bGw7XG4gICAgICBpZiAoIVhNTEVsZW1lbnQpIHtcbiAgICAgICAgWE1MRWxlbWVudCA9IHJlcXVpcmUoJy4vWE1MRWxlbWVudCcpO1xuICAgICAgICBYTUxDRGF0YSA9IHJlcXVpcmUoJy4vWE1MQ0RhdGEnKTtcbiAgICAgICAgWE1MQ29tbWVudCA9IHJlcXVpcmUoJy4vWE1MQ29tbWVudCcpO1xuICAgICAgICBYTUxEZWNsYXJhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRGVjbGFyYXRpb24nKTtcbiAgICAgICAgWE1MRG9jVHlwZSA9IHJlcXVpcmUoJy4vWE1MRG9jVHlwZScpO1xuICAgICAgICBYTUxSYXcgPSByZXF1aXJlKCcuL1hNTFJhdycpO1xuICAgICAgICBYTUxUZXh0ID0gcmVxdWlyZSgnLi9YTUxUZXh0Jyk7XG4gICAgICAgIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IHJlcXVpcmUoJy4vWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uJyk7XG4gICAgICAgIFhNTER1bW15ID0gcmVxdWlyZSgnLi9YTUxEdW1teScpO1xuICAgICAgICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcbiAgICAgICAgWE1MTm9kZUxpc3QgPSByZXF1aXJlKCcuL1hNTE5vZGVMaXN0Jyk7XG4gICAgICAgIFhNTE5hbWVkTm9kZU1hcCA9IHJlcXVpcmUoJy4vWE1MTmFtZWROb2RlTWFwJyk7XG4gICAgICAgIERvY3VtZW50UG9zaXRpb24gPSByZXF1aXJlKCcuL0RvY3VtZW50UG9zaXRpb24nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdub2RlTmFtZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdub2RlVHlwZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdub2RlVmFsdWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxOb2RlLnByb3RvdHlwZSwgJ3BhcmVudE5vZGUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdjaGlsZE5vZGVzJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoaWxkTm9kZUxpc3QgfHwgIXRoaXMuY2hpbGROb2RlTGlzdC5ub2Rlcykge1xuICAgICAgICAgIHRoaXMuY2hpbGROb2RlTGlzdCA9IG5ldyBYTUxOb2RlTGlzdCh0aGlzLmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVMaXN0O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTE5vZGUucHJvdG90eXBlLCAnZmlyc3RDaGlsZCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuWzBdIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdsYXN0Q2hpbGQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdwcmV2aW91c1NpYmxpbmcnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgaSA9IHRoaXMucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC5jaGlsZHJlbltpIC0gMV0gfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxOb2RlLnByb3RvdHlwZSwgJ25leHRTaWJsaW5nJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2hpbGRyZW5baSArIDFdIHx8IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MTm9kZS5wcm90b3R5cGUsICdvd25lckRvY3VtZW50Jywge1xuICAgICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQoKSB8fCBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFhNTE5vZGUucHJvdG90eXBlLCAndGV4dENvbnRlbnQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgY2hpbGQsIGosIGxlbiwgcmVmMiwgc3RyO1xuICAgICAgICBpZiAodGhpcy5ub2RlVHlwZSA9PT0gTm9kZVR5cGUuRWxlbWVudCB8fCB0aGlzLm5vZGVUeXBlID09PSBOb2RlVHlwZS5Eb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgc3RyID0gJyc7XG4gICAgICAgICAgcmVmMiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICAgICAgZm9yIChqID0gMCwgbGVuID0gcmVmMi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgICAgY2hpbGQgPSByZWYyW2pdO1xuICAgICAgICAgICAgaWYgKGNoaWxkLnRleHRDb250ZW50KSB7XG4gICAgICAgICAgICAgIHN0ciArPSBjaGlsZC50ZXh0Q29udGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuc2V0UGFyZW50ID0gZnVuY3Rpb24ocGFyZW50KSB7XG4gICAgICB2YXIgY2hpbGQsIGosIGxlbiwgcmVmMiwgcmVzdWx0cztcbiAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBwYXJlbnQub3B0aW9ucztcbiAgICAgICAgdGhpcy5zdHJpbmdpZnkgPSBwYXJlbnQuc3RyaW5naWZ5O1xuICAgICAgfVxuICAgICAgcmVmMiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICByZXN1bHRzID0gW107XG4gICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYyLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmMltqXTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKGNoaWxkLnNldFBhcmVudCh0aGlzKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZWxlbWVudCA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHZhciBjaGlsZE5vZGUsIGl0ZW0sIGosIGssIGtleSwgbGFzdENoaWxkLCBsZW4sIGxlbjEsIHJlZjIsIHJlZjMsIHZhbDtcbiAgICAgIGxhc3RDaGlsZCA9IG51bGw7XG4gICAgICBpZiAoYXR0cmlidXRlcyA9PT0gbnVsbCAmJiAodGV4dCA9PSBudWxsKSkge1xuICAgICAgICByZWYyID0gW3t9LCBudWxsXSwgYXR0cmlidXRlcyA9IHJlZjJbMF0sIHRleHQgPSByZWYyWzFdO1xuICAgICAgfVxuICAgICAgaWYgKGF0dHJpYnV0ZXMgPT0gbnVsbCkge1xuICAgICAgICBhdHRyaWJ1dGVzID0ge307XG4gICAgICB9XG4gICAgICBhdHRyaWJ1dGVzID0gZ2V0VmFsdWUoYXR0cmlidXRlcyk7XG4gICAgICBpZiAoIWlzT2JqZWN0KGF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIHJlZjMgPSBbYXR0cmlidXRlcywgdGV4dF0sIHRleHQgPSByZWYzWzBdLCBhdHRyaWJ1dGVzID0gcmVmM1sxXTtcbiAgICAgIH1cbiAgICAgIGlmIChuYW1lICE9IG51bGwpIHtcbiAgICAgICAgbmFtZSA9IGdldFZhbHVlKG5hbWUpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICAgICAgZm9yIChqID0gMCwgbGVuID0gbmFtZS5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGl0ZW0gPSBuYW1lW2pdO1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZWxlbWVudChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKG5hbWUpKSB7XG4gICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZWxlbWVudChuYW1lLmFwcGx5KCkpO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChuYW1lKSkge1xuICAgICAgICBmb3IgKGtleSBpbiBuYW1lKSB7XG4gICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwobmFtZSwga2V5KSkgY29udGludWU7XG4gICAgICAgICAgdmFsID0gbmFtZVtrZXldO1xuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbCkpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5hcHBseSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRBdHRLZXkgJiYga2V5LmluZGV4T2YodGhpcy5zdHJpbmdpZnkuY29udmVydEF0dEtleSkgPT09IDApIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuYXR0cmlidXRlKGtleS5zdWJzdHIodGhpcy5zdHJpbmdpZnkuY29udmVydEF0dEtleS5sZW5ndGgpLCB2YWwpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5zZXBhcmF0ZUFycmF5SXRlbXMgJiYgQXJyYXkuaXNBcnJheSh2YWwpICYmIGlzRW1wdHkodmFsKSkge1xuICAgICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5kdW1teSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodmFsKSAmJiBpc0VtcHR5KHZhbCkpIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZWxlbWVudChrZXkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5rZWVwTnVsbE5vZGVzICYmICh2YWwgPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZHVtbXkoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMuc2VwYXJhdGVBcnJheUl0ZW1zICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHZhbC5sZW5ndGg7IGsgPCBsZW4xOyBrKyspIHtcbiAgICAgICAgICAgICAgaXRlbSA9IHZhbFtrXTtcbiAgICAgICAgICAgICAgY2hpbGROb2RlID0ge307XG4gICAgICAgICAgICAgIGNoaWxkTm9kZVtrZXldID0gaXRlbTtcbiAgICAgICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5lbGVtZW50KGNoaWxkTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRUZXh0S2V5ICYmIGtleS5pbmRleE9mKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRUZXh0S2V5KSA9PT0gMCkge1xuICAgICAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQodmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuZWxlbWVudChrZXkpO1xuICAgICAgICAgICAgICBsYXN0Q2hpbGQuZWxlbWVudCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmVsZW1lbnQoa2V5LCB2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghdGhpcy5vcHRpb25zLmtlZXBOdWxsTm9kZXMgJiYgdGV4dCA9PT0gbnVsbCkge1xuICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmR1bW15KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRUZXh0S2V5ICYmIG5hbWUuaW5kZXhPZih0aGlzLnN0cmluZ2lmeS5jb252ZXJ0VGV4dEtleSkgPT09IDApIHtcbiAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLnRleHQodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRDRGF0YUtleSAmJiBuYW1lLmluZGV4T2YodGhpcy5zdHJpbmdpZnkuY29udmVydENEYXRhS2V5KSA9PT0gMCkge1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuY2RhdGEodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRDb21tZW50S2V5ICYmIG5hbWUuaW5kZXhPZih0aGlzLnN0cmluZ2lmeS5jb252ZXJ0Q29tbWVudEtleSkgPT09IDApIHtcbiAgICAgICAgICBsYXN0Q2hpbGQgPSB0aGlzLmNvbW1lbnQodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRSYXdLZXkgJiYgbmFtZS5pbmRleE9mKHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRSYXdLZXkpID09PSAwKSB7XG4gICAgICAgICAgbGFzdENoaWxkID0gdGhpcy5yYXcodGV4dCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMub3B0aW9ucy5pZ25vcmVEZWNvcmF0b3JzICYmIHRoaXMuc3RyaW5naWZ5LmNvbnZlcnRQSUtleSAmJiBuYW1lLmluZGV4T2YodGhpcy5zdHJpbmdpZnkuY29udmVydFBJS2V5KSA9PT0gMCkge1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMuaW5zdHJ1Y3Rpb24obmFtZS5zdWJzdHIodGhpcy5zdHJpbmdpZnkuY29udmVydFBJS2V5Lmxlbmd0aCksIHRleHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxhc3RDaGlsZCA9IHRoaXMubm9kZShuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGxhc3RDaGlsZCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBjcmVhdGUgYW55IGVsZW1lbnRzIHdpdGg6IFwiICsgbmFtZSArIFwiLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxhc3RDaGlsZDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgdmFyIGNoaWxkLCBpLCBuZXdDaGlsZCwgcmVmQ2hpbGQsIHJlbW92ZWQ7XG4gICAgICBpZiAobmFtZSAhPSBudWxsID8gbmFtZS50eXBlIDogdm9pZCAwKSB7XG4gICAgICAgIG5ld0NoaWxkID0gbmFtZTtcbiAgICAgICAgcmVmQ2hpbGQgPSBhdHRyaWJ1dGVzO1xuICAgICAgICBuZXdDaGlsZC5zZXRQYXJlbnQodGhpcyk7XG4gICAgICAgIGlmIChyZWZDaGlsZCkge1xuICAgICAgICAgIGkgPSBjaGlsZHJlbi5pbmRleE9mKHJlZkNoaWxkKTtcbiAgICAgICAgICByZW1vdmVkID0gY2hpbGRyZW4uc3BsaWNlKGkpO1xuICAgICAgICAgIGNoaWxkcmVuLnB1c2gobmV3Q2hpbGQpO1xuICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKG5ld0NoaWxkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3Q2hpbGQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5pc1Jvb3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgaW5zZXJ0IGVsZW1lbnRzIGF0IHJvb3QgbGV2ZWwuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgICB9XG4gICAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgICByZW1vdmVkID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGkpO1xuICAgICAgICBjaGlsZCA9IHRoaXMucGFyZW50LmVsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMucGFyZW50LmNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgcmVtb3ZlZDtcbiAgICAgIGlmICh0aGlzLmlzUm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgaW5zZXJ0IGVsZW1lbnRzIGF0IHJvb3QgbGV2ZWwuIFwiICsgdGhpcy5kZWJ1Z0luZm8obmFtZSkpO1xuICAgICAgfVxuICAgICAgaSA9IHRoaXMucGFyZW50LmNoaWxkcmVuLmluZGV4T2YodGhpcyk7XG4gICAgICByZW1vdmVkID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uc3BsaWNlKGkgKyAxKTtcbiAgICAgIGNoaWxkID0gdGhpcy5wYXJlbnQuZWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMucGFyZW50LmNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaSwgcmVmMjtcbiAgICAgIGlmICh0aGlzLmlzUm9vdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVtb3ZlIHRoZSByb290IGVsZW1lbnQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIFtdLnNwbGljZS5hcHBseSh0aGlzLnBhcmVudC5jaGlsZHJlbiwgW2ksIGkgLSBpICsgMV0uY29uY2F0KHJlZjIgPSBbXSkpLCByZWYyO1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50O1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5ub2RlID0gZnVuY3Rpb24obmFtZSwgYXR0cmlidXRlcywgdGV4dCkge1xuICAgICAgdmFyIGNoaWxkLCByZWYyO1xuICAgICAgaWYgKG5hbWUgIT0gbnVsbCkge1xuICAgICAgICBuYW1lID0gZ2V0VmFsdWUobmFtZSk7XG4gICAgICB9XG4gICAgICBhdHRyaWJ1dGVzIHx8IChhdHRyaWJ1dGVzID0ge30pO1xuICAgICAgYXR0cmlidXRlcyA9IGdldFZhbHVlKGF0dHJpYnV0ZXMpO1xuICAgICAgaWYgKCFpc09iamVjdChhdHRyaWJ1dGVzKSkge1xuICAgICAgICByZWYyID0gW2F0dHJpYnV0ZXMsIHRleHRdLCB0ZXh0ID0gcmVmMlswXSwgYXR0cmlidXRlcyA9IHJlZjJbMV07XG4gICAgICB9XG4gICAgICBjaGlsZCA9IG5ldyBYTUxFbGVtZW50KHRoaXMsIG5hbWUsIGF0dHJpYnV0ZXMpO1xuICAgICAgaWYgKHRleHQgIT0gbnVsbCkge1xuICAgICAgICBjaGlsZC50ZXh0KHRleHQpO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQ7XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBjaGlsZCA9IG5ldyBYTUxUZXh0KHRoaXMsIHZhbHVlKTtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuY2RhdGEgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MQ0RhdGEodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jb21tZW50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZDtcbiAgICAgIGNoaWxkID0gbmV3IFhNTENvbW1lbnQodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jb21tZW50QmVmb3JlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgcmVtb3ZlZDtcbiAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgcmVtb3ZlZCA9IHRoaXMucGFyZW50LmNoaWxkcmVuLnNwbGljZShpKTtcbiAgICAgIGNoaWxkID0gdGhpcy5wYXJlbnQuY29tbWVudCh2YWx1ZSk7XG4gICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLnBhcmVudC5jaGlsZHJlbiwgcmVtb3ZlZCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuY29tbWVudEFmdGVyID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgcmVtb3ZlZDtcbiAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgcmVtb3ZlZCA9IHRoaXMucGFyZW50LmNoaWxkcmVuLnNwbGljZShpICsgMSk7XG4gICAgICBjaGlsZCA9IHRoaXMucGFyZW50LmNvbW1lbnQodmFsdWUpO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5wYXJlbnQuY2hpbGRyZW4sIHJlbW92ZWQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnJhdyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQ7XG4gICAgICBjaGlsZCA9IG5ldyBYTUxSYXcodGhpcywgdmFsdWUpO1xuICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kdW1teSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGNoaWxkO1xuICAgICAgY2hpbGQgPSBuZXcgWE1MRHVtbXkodGhpcyk7XG4gICAgICByZXR1cm4gY2hpbGQ7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmluc3RydWN0aW9uID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgdmFyIGluc1RhcmdldCwgaW5zVmFsdWUsIGluc3RydWN0aW9uLCBqLCBsZW47XG4gICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHtcbiAgICAgICAgdGFyZ2V0ID0gZ2V0VmFsdWUodGFyZ2V0KTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gZ2V0VmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgICAgICBmb3IgKGogPSAwLCBsZW4gPSB0YXJnZXQubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBpbnNUYXJnZXQgPSB0YXJnZXRbal07XG4gICAgICAgICAgdGhpcy5pbnN0cnVjdGlvbihpbnNUYXJnZXQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHRhcmdldCkpIHtcbiAgICAgICAgZm9yIChpbnNUYXJnZXQgaW4gdGFyZ2V0KSB7XG4gICAgICAgICAgaWYgKCFoYXNQcm9wLmNhbGwodGFyZ2V0LCBpbnNUYXJnZXQpKSBjb250aW51ZTtcbiAgICAgICAgICBpbnNWYWx1ZSA9IHRhcmdldFtpbnNUYXJnZXRdO1xuICAgICAgICAgIHRoaXMuaW5zdHJ1Y3Rpb24oaW5zVGFyZ2V0LCBpbnNWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHZhbHVlID0gdmFsdWUuYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBpbnN0cnVjdGlvbiA9IG5ldyBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24odGhpcywgdGFyZ2V0LCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChpbnN0cnVjdGlvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW5zdHJ1Y3Rpb25CZWZvcmUgPSBmdW5jdGlvbih0YXJnZXQsIHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIHJlbW92ZWQ7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIHJlbW92ZWQgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaSk7XG4gICAgICBjaGlsZCA9IHRoaXMucGFyZW50Lmluc3RydWN0aW9uKHRhcmdldCwgdmFsdWUpO1xuICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5wYXJlbnQuY2hpbGRyZW4sIHJlbW92ZWQpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmluc3RydWN0aW9uQWZ0ZXIgPSBmdW5jdGlvbih0YXJnZXQsIHZhbHVlKSB7XG4gICAgICB2YXIgY2hpbGQsIGksIHJlbW92ZWQ7XG4gICAgICBpID0gdGhpcy5wYXJlbnQuY2hpbGRyZW4uaW5kZXhPZih0aGlzKTtcbiAgICAgIHJlbW92ZWQgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaSArIDEpO1xuICAgICAgY2hpbGQgPSB0aGlzLnBhcmVudC5pbnN0cnVjdGlvbih0YXJnZXQsIHZhbHVlKTtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMucGFyZW50LmNoaWxkcmVuLCByZW1vdmVkKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKSB7XG4gICAgICB2YXIgZG9jLCB4bWxkZWM7XG4gICAgICBkb2MgPSB0aGlzLmRvY3VtZW50KCk7XG4gICAgICB4bWxkZWMgPSBuZXcgWE1MRGVjbGFyYXRpb24oZG9jLCB2ZXJzaW9uLCBlbmNvZGluZywgc3RhbmRhbG9uZSk7XG4gICAgICBpZiAoZG9jLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBkb2MuY2hpbGRyZW4udW5zaGlmdCh4bWxkZWMpO1xuICAgICAgfSBlbHNlIGlmIChkb2MuY2hpbGRyZW5bMF0udHlwZSA9PT0gTm9kZVR5cGUuRGVjbGFyYXRpb24pIHtcbiAgICAgICAgZG9jLmNoaWxkcmVuWzBdID0geG1sZGVjO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9jLmNoaWxkcmVuLnVuc2hpZnQoeG1sZGVjKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBkb2Mucm9vdCgpIHx8IGRvYztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZHRkID0gZnVuY3Rpb24ocHViSUQsIHN5c0lEKSB7XG4gICAgICB2YXIgY2hpbGQsIGRvYywgZG9jdHlwZSwgaSwgaiwgaywgbGVuLCBsZW4xLCByZWYyLCByZWYzO1xuICAgICAgZG9jID0gdGhpcy5kb2N1bWVudCgpO1xuICAgICAgZG9jdHlwZSA9IG5ldyBYTUxEb2NUeXBlKGRvYywgcHViSUQsIHN5c0lEKTtcbiAgICAgIHJlZjIgPSBkb2MuY2hpbGRyZW47XG4gICAgICBmb3IgKGkgPSBqID0gMCwgbGVuID0gcmVmMi5sZW5ndGg7IGogPCBsZW47IGkgPSArK2opIHtcbiAgICAgICAgY2hpbGQgPSByZWYyW2ldO1xuICAgICAgICBpZiAoY2hpbGQudHlwZSA9PT0gTm9kZVR5cGUuRG9jVHlwZSkge1xuICAgICAgICAgIGRvYy5jaGlsZHJlbltpXSA9IGRvY3R5cGU7XG4gICAgICAgICAgcmV0dXJuIGRvY3R5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlZjMgPSBkb2MuY2hpbGRyZW47XG4gICAgICBmb3IgKGkgPSBrID0gMCwgbGVuMSA9IHJlZjMubGVuZ3RoOyBrIDwgbGVuMTsgaSA9ICsraykge1xuICAgICAgICBjaGlsZCA9IHJlZjNbaV07XG4gICAgICAgIGlmIChjaGlsZC5pc1Jvb3QpIHtcbiAgICAgICAgICBkb2MuY2hpbGRyZW4uc3BsaWNlKGksIDAsIGRvY3R5cGUpO1xuICAgICAgICAgIHJldHVybiBkb2N0eXBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBkb2MuY2hpbGRyZW4ucHVzaChkb2N0eXBlKTtcbiAgICAgIHJldHVybiBkb2N0eXBlO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS51cCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMuaXNSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSByb290IG5vZGUgaGFzIG5vIHBhcmVudC4gVXNlIGRvYygpIGlmIHlvdSBuZWVkIHRvIGdldCB0aGUgZG9jdW1lbnQgb2JqZWN0LlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBhcmVudDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUucm9vdCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICBub2RlID0gdGhpcztcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlLkRvY3VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGUucm9vdE9iamVjdDtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLmlzUm9vdCkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kb2N1bWVudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vZGU7XG4gICAgICBub2RlID0gdGhpcztcbiAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnR5cGUgPT09IE5vZGVUeXBlLkRvY3VtZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50KCkuZW5kKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5wcmV2ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgaWYgKGkgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFscmVhZHkgYXQgdGhlIGZpcnN0IG5vZGUuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnQuY2hpbGRyZW5baSAtIDFdO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGkgPSB0aGlzLnBhcmVudC5jaGlsZHJlbi5pbmRleE9mKHRoaXMpO1xuICAgICAgaWYgKGkgPT09IC0xIHx8IGkgPT09IHRoaXMucGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQWxyZWFkeSBhdCB0aGUgbGFzdCBub2RlLiBcIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmNoaWxkcmVuW2kgKyAxXTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW1wb3J0RG9jdW1lbnQgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgIHZhciBjbG9uZWRSb290O1xuICAgICAgY2xvbmVkUm9vdCA9IGRvYy5yb290KCkuY2xvbmUoKTtcbiAgICAgIGNsb25lZFJvb3QucGFyZW50ID0gdGhpcztcbiAgICAgIGNsb25lZFJvb3QuaXNSb290ID0gZmFsc2U7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2xvbmVkUm9vdCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZGVidWdJbmZvID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgdmFyIHJlZjIsIHJlZjM7XG4gICAgICBuYW1lID0gbmFtZSB8fCB0aGlzLm5hbWU7XG4gICAgICBpZiAoKG5hbWUgPT0gbnVsbCkgJiYgISgocmVmMiA9IHRoaXMucGFyZW50KSAhPSBudWxsID8gcmVmMi5uYW1lIDogdm9pZCAwKSkge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBcInBhcmVudDogPFwiICsgdGhpcy5wYXJlbnQubmFtZSArIFwiPlwiO1xuICAgICAgfSBlbHNlIGlmICghKChyZWYzID0gdGhpcy5wYXJlbnQpICE9IG51bGwgPyByZWYzLm5hbWUgOiB2b2lkIDApKSB7XG4gICAgICAgIHJldHVybiBcIm5vZGU6IDxcIiArIG5hbWUgKyBcIj5cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIm5vZGU6IDxcIiArIG5hbWUgKyBcIj4sIHBhcmVudDogPFwiICsgdGhpcy5wYXJlbnQubmFtZSArIFwiPlwiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5lbGUgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5lbGVtZW50KG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5ub2QgPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS50eHQgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dCh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmRhdCA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jZGF0YSh2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmNvbSA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21tZW50KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaW5zID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3Rpb24odGFyZ2V0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmRvYyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZG9jdW1lbnQoKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZGVjID0gZnVuY3Rpb24odmVyc2lvbiwgZW5jb2RpbmcsIHN0YW5kYWxvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlY2xhcmF0aW9uKHZlcnNpb24sIGVuY29kaW5nLCBzdGFuZGFsb25lKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuZSA9IGZ1bmN0aW9uKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgdGV4dCk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLm4gPSBmdW5jdGlvbihuYW1lLCBhdHRyaWJ1dGVzLCB0ZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2RlKG5hbWUsIGF0dHJpYnV0ZXMsIHRleHQpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS50ID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5kID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmNkYXRhKHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuYyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb21tZW50KHZhbHVlKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuciA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yYXcodmFsdWUpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pID0gZnVuY3Rpb24odGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3Rpb24odGFyZ2V0LCB2YWx1ZSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwKCk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmltcG9ydFhNTEJ1aWxkZXIgPSBmdW5jdGlvbihkb2MpIHtcbiAgICAgIHJldHVybiB0aGlzLmltcG9ydERvY3VtZW50KGRvYyk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uKG5ld0NoaWxkLCBvbGRDaGlsZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5yZW1vdmVDaGlsZCA9IGZ1bmN0aW9uKG9sZENoaWxkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkID0gZnVuY3Rpb24obmV3Q2hpbGQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaGFzQ2hpbGROb2RlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoICE9PSAwO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5jbG9uZU5vZGUgPSBmdW5jdGlvbihkZWVwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pc1N1cHBvcnRlZCA9IGZ1bmN0aW9uKGZlYXR1cmUsIHZlcnNpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5oYXNBdHRyaWJ1dGVzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5hdHRyaWJzLmxlbmd0aCAhPT0gMDtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPSBmdW5jdGlvbihvdGhlcikge1xuICAgICAgdmFyIHJlZiwgcmVzO1xuICAgICAgcmVmID0gdGhpcztcbiAgICAgIGlmIChyZWYgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmRvY3VtZW50KCkgIT09IG90aGVyLmRvY3VtZW50KCkpIHtcbiAgICAgICAgcmVzID0gRG9jdW1lbnRQb3NpdGlvbi5EaXNjb25uZWN0ZWQgfCBEb2N1bWVudFBvc2l0aW9uLkltcGxlbWVudGF0aW9uU3BlY2lmaWM7XG4gICAgICAgIGlmIChNYXRoLnJhbmRvbSgpIDwgMC41KSB7XG4gICAgICAgICAgcmVzIHw9IERvY3VtZW50UG9zaXRpb24uUHJlY2VkaW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcyB8PSBEb2N1bWVudFBvc2l0aW9uLkZvbGxvd2luZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSBlbHNlIGlmIChyZWYuaXNBbmNlc3RvcihvdGhlcikpIHtcbiAgICAgICAgcmV0dXJuIERvY3VtZW50UG9zaXRpb24uQ29udGFpbnMgfCBEb2N1bWVudFBvc2l0aW9uLlByZWNlZGluZztcbiAgICAgIH0gZWxzZSBpZiAocmVmLmlzRGVzY2VuZGFudChvdGhlcikpIHtcbiAgICAgICAgcmV0dXJuIERvY3VtZW50UG9zaXRpb24uQ29udGFpbnMgfCBEb2N1bWVudFBvc2l0aW9uLkZvbGxvd2luZztcbiAgICAgIH0gZWxzZSBpZiAocmVmLmlzUHJlY2VkaW5nKG90aGVyKSkge1xuICAgICAgICByZXR1cm4gRG9jdW1lbnRQb3NpdGlvbi5QcmVjZWRpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gRG9jdW1lbnRQb3NpdGlvbi5Gb2xsb3dpbmc7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmlzU2FtZU5vZGUgPSBmdW5jdGlvbihvdGhlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5sb29rdXBQcmVmaXggPSBmdW5jdGlvbihuYW1lc3BhY2VVUkkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaXNEZWZhdWx0TmFtZXNwYWNlID0gZnVuY3Rpb24obmFtZXNwYWNlVVJJKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmxvb2t1cE5hbWVzcGFjZVVSSSA9IGZ1bmN0aW9uKHByZWZpeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pc0VxdWFsTm9kZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBpLCBqLCByZWYyO1xuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IHRoaXMubm9kZVR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoICE9PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBmb3IgKGkgPSBqID0gMCwgcmVmMiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgMCA8PSByZWYyID8gaiA8PSByZWYyIDogaiA+PSByZWYyOyBpID0gMCA8PSByZWYyID8gKytqIDogLS1qKSB7XG4gICAgICAgIGlmICghdGhpcy5jaGlsZHJlbltpXS5pc0VxdWFsTm9kZShub2RlLmNoaWxkcmVuW2ldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmdldEZlYXR1cmUgPSBmdW5jdGlvbihmZWF0dXJlLCB2ZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLnNldFVzZXJEYXRhID0gZnVuY3Rpb24oa2V5LCBkYXRhLCBoYW5kbGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmdldFVzZXJEYXRhID0gZnVuY3Rpb24oa2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIERPTSBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkLlwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICAgIGlmICghb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG90aGVyID09PSB0aGlzIHx8IHRoaXMuaXNEZXNjZW5kYW50KG90aGVyKTtcbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUuaXNEZXNjZW5kYW50ID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgdmFyIGNoaWxkLCBpc0Rlc2NlbmRhbnRDaGlsZCwgaiwgbGVuLCByZWYyO1xuICAgICAgcmVmMiA9IHRoaXMuY2hpbGRyZW47XG4gICAgICBmb3IgKGogPSAwLCBsZW4gPSByZWYyLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmMltqXTtcbiAgICAgICAgaWYgKG5vZGUgPT09IGNoaWxkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaXNEZXNjZW5kYW50Q2hpbGQgPSBjaGlsZC5pc0Rlc2NlbmRhbnQobm9kZSk7XG4gICAgICAgIGlmIChpc0Rlc2NlbmRhbnRDaGlsZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmlzQW5jZXN0b3IgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS5pc0Rlc2NlbmRhbnQodGhpcyk7XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmlzUHJlY2VkaW5nID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgdmFyIG5vZGVQb3MsIHRoaXNQb3M7XG4gICAgICBub2RlUG9zID0gdGhpcy50cmVlUG9zaXRpb24obm9kZSk7XG4gICAgICB0aGlzUG9zID0gdGhpcy50cmVlUG9zaXRpb24odGhpcyk7XG4gICAgICBpZiAobm9kZVBvcyA9PT0gLTEgfHwgdGhpc1BvcyA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5vZGVQb3MgPCB0aGlzUG9zO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBYTUxOb2RlLnByb3RvdHlwZS5pc0ZvbGxvd2luZyA9IGZ1bmN0aW9uKG5vZGUpIHtcbiAgICAgIHZhciBub2RlUG9zLCB0aGlzUG9zO1xuICAgICAgbm9kZVBvcyA9IHRoaXMudHJlZVBvc2l0aW9uKG5vZGUpO1xuICAgICAgdGhpc1BvcyA9IHRoaXMudHJlZVBvc2l0aW9uKHRoaXMpO1xuICAgICAgaWYgKG5vZGVQb3MgPT09IC0xIHx8IHRoaXNQb3MgPT09IC0xKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBub2RlUG9zID4gdGhpc1BvcztcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MTm9kZS5wcm90b3R5cGUudHJlZVBvc2l0aW9uID0gZnVuY3Rpb24obm9kZSkge1xuICAgICAgdmFyIGZvdW5kLCBwb3M7XG4gICAgICBwb3MgPSAwO1xuICAgICAgZm91bmQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9yZWFjaFRyZWVOb2RlKHRoaXMuZG9jdW1lbnQoKSwgZnVuY3Rpb24oY2hpbGROb2RlKSB7XG4gICAgICAgIHBvcysrO1xuICAgICAgICBpZiAoIWZvdW5kICYmIGNoaWxkTm9kZSA9PT0gbm9kZSkge1xuICAgICAgICAgIHJldHVybiBmb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHJldHVybiBwb3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTE5vZGUucHJvdG90eXBlLmZvcmVhY2hUcmVlTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIGZ1bmMpIHtcbiAgICAgIHZhciBjaGlsZCwgaiwgbGVuLCByZWYyLCByZXM7XG4gICAgICBub2RlIHx8IChub2RlID0gdGhpcy5kb2N1bWVudCgpKTtcbiAgICAgIHJlZjIgPSBub2RlLmNoaWxkcmVuO1xuICAgICAgZm9yIChqID0gMCwgbGVuID0gcmVmMi5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICBjaGlsZCA9IHJlZjJbal07XG4gICAgICAgIGlmIChyZXMgPSBmdW5jKGNoaWxkKSkge1xuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzID0gdGhpcy5mb3JlYWNoVHJlZU5vZGUoY2hpbGQsIGZ1bmMpO1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxOb2RlO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MTm9kZUxpc3Q7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxOb2RlTGlzdCA9IChmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBYTUxOb2RlTGlzdChub2Rlcykge1xuICAgICAgdGhpcy5ub2RlcyA9IG5vZGVzO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxOb2RlTGlzdC5wcm90b3R5cGUsICdsZW5ndGgnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5sZW5ndGggfHwgMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTE5vZGVMaXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMubm9kZXMgPSBudWxsO1xuICAgIH07XG5cbiAgICBYTUxOb2RlTGlzdC5wcm90b3R5cGUuaXRlbSA9IGZ1bmN0aW9uKGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5ub2Rlc1tpbmRleF0gfHwgbnVsbDtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTE5vZGVMaXN0O1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTENoYXJhY3RlckRhdGEsIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbixcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIFhNTENoYXJhY3RlckRhdGEgPSByZXF1aXJlKCcuL1hNTENoYXJhY3RlckRhdGEnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocGFyZW50LCB0YXJnZXQsIHZhbHVlKSB7XG4gICAgICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgcGFyZW50KTtcbiAgICAgIGlmICh0YXJnZXQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGluc3RydWN0aW9uIHRhcmdldC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjtcbiAgICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5zdHJpbmdpZnkuaW5zVGFyZ2V0KHRhcmdldCk7XG4gICAgICB0aGlzLm5hbWUgPSB0aGlzLnRhcmdldDtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkuaW5zVmFsdWUodmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIucHJvY2Vzc2luZ0luc3RydWN0aW9uKHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5wcm90b3R5cGUuaXNFcXVhbE5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG4gICAgICBpZiAoIVhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbi5fX3N1cGVyX18uaXNFcXVhbE5vZGUuYXBwbHkodGhpcywgYXJndW1lbnRzKS5pc0VxdWFsTm9kZShub2RlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS50YXJnZXQgIT09IHRoaXMudGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MUHJvY2Vzc2luZ0luc3RydWN0aW9uO1xuXG4gIH0pKFhNTENoYXJhY3RlckRhdGEpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBYTUxOb2RlLCBYTUxSYXcsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxOb2RlID0gcmVxdWlyZSgnLi9YTUxOb2RlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxSYXcgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxSYXcsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MUmF3KHBhcmVudCwgdGV4dCkge1xuICAgICAgWE1MUmF3Ll9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIHBhcmVudCk7XG4gICAgICBpZiAodGV4dCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcmF3IHRleHQuIFwiICsgdGhpcy5kZWJ1Z0luZm8oKSk7XG4gICAgICB9XG4gICAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5SYXc7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkucmF3KHRleHQpO1xuICAgIH1cblxuICAgIFhNTFJhdy5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgIH07XG5cbiAgICBYTUxSYXcucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cml0ZXIucmF3KHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxSYXc7XG5cbiAgfSkoWE1MTm9kZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFdyaXRlclN0YXRlLCBYTUxTdHJlYW1Xcml0ZXIsIFhNTFdyaXRlckJhc2UsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxXcml0ZXJCYXNlID0gcmVxdWlyZSgnLi9YTUxXcml0ZXJCYXNlJyk7XG5cbiAgV3JpdGVyU3RhdGUgPSByZXF1aXJlKCcuL1dyaXRlclN0YXRlJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxTdHJlYW1Xcml0ZXIgPSAoZnVuY3Rpb24oc3VwZXJDbGFzcykge1xuICAgIGV4dGVuZChYTUxTdHJlYW1Xcml0ZXIsIHN1cGVyQ2xhc3MpO1xuXG4gICAgZnVuY3Rpb24gWE1MU3RyZWFtV3JpdGVyKHN0cmVhbSwgb3B0aW9ucykge1xuICAgICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgICBYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5lbmRsaW5lID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIGlmIChub2RlLmlzTGFzdFJvb3ROb2RlICYmIG9wdGlvbnMuc3RhdGUgPT09IFdyaXRlclN0YXRlLkNsb3NlVGFnKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmVuZGxpbmUuY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZG9jdW1lbnQgPSBmdW5jdGlvbihkb2MsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgaiwgaywgbGVuLCBsZW4xLCByZWYsIHJlZjEsIHJlc3VsdHM7XG4gICAgICByZWYgPSBkb2MuY2hpbGRyZW47XG4gICAgICBmb3IgKGkgPSBqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaSA9ICsraikge1xuICAgICAgICBjaGlsZCA9IHJlZltpXTtcbiAgICAgICAgY2hpbGQuaXNMYXN0Um9vdE5vZGUgPSBpID09PSBkb2MuY2hpbGRyZW4ubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMgPSB0aGlzLmZpbHRlck9wdGlvbnMob3B0aW9ucyk7XG4gICAgICByZWYxID0gZG9jLmNoaWxkcmVuO1xuICAgICAgcmVzdWx0cyA9IFtdO1xuICAgICAgZm9yIChrID0gMCwgbGVuMSA9IHJlZjEubGVuZ3RoOyBrIDwgbGVuMTsgaysrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmMVtrXTtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHRoaXMud3JpdGVDaGlsZE5vZGUoY2hpbGQsIG9wdGlvbnMsIDApKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmF0dHJpYnV0ZSA9IGZ1bmN0aW9uKGF0dCwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmF0dHJpYnV0ZS5jYWxsKHRoaXMsIGF0dCwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5jZGF0YSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5jZGF0YS5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuY29tbWVudCA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5jb21tZW50LmNhbGwodGhpcywgbm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5kZWNsYXJhdGlvbiA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy5kZWNsYXJhdGlvbi5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZG9jVHlwZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgY2hpbGQsIGosIGxlbiwgcmVmO1xuICAgICAgbGV2ZWwgfHwgKGxldmVsID0gMCk7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCc8IURPQ1RZUEUgJyArIG5vZGUucm9vdCgpLm5hbWUpO1xuICAgICAgaWYgKG5vZGUucHViSUQgJiYgbm9kZS5zeXNJRCkge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnIFBVQkxJQyBcIicgKyBub2RlLnB1YklEICsgJ1wiIFwiJyArIG5vZGUuc3lzSUQgKyAnXCInKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5zeXNJRCkge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnIFNZU1RFTSBcIicgKyBub2RlLnN5c0lEICsgJ1wiJyk7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCcgWycpO1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSh0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgICAgcmVmID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgZm9yIChqID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgY2hpbGQgPSByZWZbal07XG4gICAgICAgICAgdGhpcy53cml0ZUNoaWxkTm9kZShjaGlsZCwgb3B0aW9ucywgbGV2ZWwgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCddJyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICB0aGlzLnN0cmVhbS53cml0ZShvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2ggKyAnPicpO1xuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZWxlbWVudCA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgYXR0LCBjaGlsZCwgY2hpbGROb2RlQ291bnQsIGZpcnN0Q2hpbGROb2RlLCBqLCBsZW4sIG5hbWUsIHByZXR0eVN1cHByZXNzZWQsIHJlZiwgcmVmMTtcbiAgICAgIGxldmVsIHx8IChsZXZlbCA9IDApO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8JyArIG5vZGUubmFtZSk7XG4gICAgICByZWYgPSBub2RlLmF0dHJpYnM7XG4gICAgICBmb3IgKG5hbWUgaW4gcmVmKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZiwgbmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICBhdHQgPSByZWZbbmFtZV07XG4gICAgICAgIHRoaXMuYXR0cmlidXRlKGF0dCwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgfVxuICAgICAgY2hpbGROb2RlQ291bnQgPSBub2RlLmNoaWxkcmVuLmxlbmd0aDtcbiAgICAgIGZpcnN0Q2hpbGROb2RlID0gY2hpbGROb2RlQ291bnQgPT09IDAgPyBudWxsIDogbm9kZS5jaGlsZHJlblswXTtcbiAgICAgIGlmIChjaGlsZE5vZGVDb3VudCA9PT0gMCB8fCBub2RlLmNoaWxkcmVuLmV2ZXJ5KGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgcmV0dXJuIChlLnR5cGUgPT09IE5vZGVUeXBlLlRleHQgfHwgZS50eXBlID09PSBOb2RlVHlwZS5SYXcpICYmIGUudmFsdWUgPT09ICcnO1xuICAgICAgfSkpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dFbXB0eSkge1xuICAgICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCc+Jyk7XG4gICAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKCc8LycgKyBub2RlLm5hbWUgKyAnPicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgICAgICB0aGlzLnN0cmVhbS53cml0ZShvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2ggKyAnLz4nKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnByZXR0eSAmJiBjaGlsZE5vZGVDb3VudCA9PT0gMSAmJiAoZmlyc3RDaGlsZE5vZGUudHlwZSA9PT0gTm9kZVR5cGUuVGV4dCB8fCBmaXJzdENoaWxkTm9kZS50eXBlID09PSBOb2RlVHlwZS5SYXcpICYmIChmaXJzdENoaWxkTm9kZS52YWx1ZSAhPSBudWxsKSkge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnPicpO1xuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgICBvcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQrKztcbiAgICAgICAgcHJldHR5U3VwcHJlc3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMud3JpdGVDaGlsZE5vZGUoZmlyc3RDaGlsZE5vZGUsIG9wdGlvbnMsIGxldmVsICsgMSk7XG4gICAgICAgIG9wdGlvbnMuc3VwcHJlc3NQcmV0dHlDb3VudC0tO1xuICAgICAgICBwcmV0dHlTdXBwcmVzc2VkID0gZmFsc2U7XG4gICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgICAgdGhpcy5zdHJlYW0ud3JpdGUoJzwvJyArIG5vZGUubmFtZSArICc+Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0cmVhbS53cml0ZSgnPicgKyB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgICAgcmVmMSA9IG5vZGUuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaiA9IDAsIGxlbiA9IHJlZjEubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBjaGlsZCA9IHJlZjFbal07XG4gICAgICAgICAgdGhpcy53cml0ZUNoaWxkTm9kZShjaGlsZCwgb3B0aW9ucywgbGV2ZWwgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgIHRoaXMuc3RyZWFtLndyaXRlKHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8LycgKyBub2RlLm5hbWUgKyAnPicpO1xuICAgICAgfVxuICAgICAgdGhpcy5zdHJlYW0ud3JpdGUodGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUucHJvY2Vzc2luZ0luc3RydWN0aW9uID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLnByb2Nlc3NpbmdJbnN0cnVjdGlvbi5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLnJhdy5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHJlYW0ud3JpdGUoWE1MU3RyZWFtV3JpdGVyLl9fc3VwZXJfXy50ZXh0LmNhbGwodGhpcywgbm9kZSwgb3B0aW9ucywgbGV2ZWwpKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyZWFtV3JpdGVyLnByb3RvdHlwZS5kdGRBdHRMaXN0ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmR0ZEF0dExpc3QuY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgIH07XG5cbiAgICBYTUxTdHJlYW1Xcml0ZXIucHJvdG90eXBlLmR0ZEVsZW1lbnQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKFhNTFN0cmVhbVdyaXRlci5fX3N1cGVyX18uZHRkRWxlbWVudC5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZHRkRW50aXR5ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0cmVhbS53cml0ZShYTUxTdHJlYW1Xcml0ZXIuX19zdXBlcl9fLmR0ZEVudGl0eS5jYWxsKHRoaXMsIG5vZGUsIG9wdGlvbnMsIGxldmVsKSk7XG4gICAgfTtcblxuICAgIFhNTFN0cmVhbVdyaXRlci5wcm90b3R5cGUuZHRkTm90YXRpb24gPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLndyaXRlKFhNTFN0cmVhbVdyaXRlci5fX3N1cGVyX18uZHRkTm90YXRpb24uY2FsbCh0aGlzLCBub2RlLCBvcHRpb25zLCBsZXZlbCkpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MU3RyZWFtV3JpdGVyO1xuXG4gIH0pKFhNTFdyaXRlckJhc2UpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIFhNTFN0cmluZ1dyaXRlciwgWE1MV3JpdGVyQmFzZSxcbiAgICBleHRlbmQgPSBmdW5jdGlvbihjaGlsZCwgcGFyZW50KSB7IGZvciAodmFyIGtleSBpbiBwYXJlbnQpIHsgaWYgKGhhc1Byb3AuY2FsbChwYXJlbnQsIGtleSkpIGNoaWxkW2tleV0gPSBwYXJlbnRba2V5XTsgfSBmdW5jdGlvbiBjdG9yKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gY2hpbGQ7IH0gY3Rvci5wcm90b3R5cGUgPSBwYXJlbnQucHJvdG90eXBlOyBjaGlsZC5wcm90b3R5cGUgPSBuZXcgY3RvcigpOyBjaGlsZC5fX3N1cGVyX18gPSBwYXJlbnQucHJvdG90eXBlOyByZXR1cm4gY2hpbGQ7IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIFhNTFdyaXRlckJhc2UgPSByZXF1aXJlKCcuL1hNTFdyaXRlckJhc2UnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTFN0cmluZ1dyaXRlciA9IChmdW5jdGlvbihzdXBlckNsYXNzKSB7XG4gICAgZXh0ZW5kKFhNTFN0cmluZ1dyaXRlciwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxTdHJpbmdXcml0ZXIob3B0aW9ucykge1xuICAgICAgWE1MU3RyaW5nV3JpdGVyLl9fc3VwZXJfXy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIFhNTFN0cmluZ1dyaXRlci5wcm90b3R5cGUuZG9jdW1lbnQgPSBmdW5jdGlvbihkb2MsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgbGVuLCByLCByZWY7XG4gICAgICBvcHRpb25zID0gdGhpcy5maWx0ZXJPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgciA9ICcnO1xuICAgICAgcmVmID0gZG9jLmNoaWxkcmVuO1xuICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNoaWxkID0gcmVmW2ldO1xuICAgICAgICByICs9IHRoaXMud3JpdGVDaGlsZE5vZGUoY2hpbGQsIG9wdGlvbnMsIDApO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMucHJldHR5ICYmIHIuc2xpY2UoLW9wdGlvbnMubmV3bGluZS5sZW5ndGgpID09PSBvcHRpb25zLm5ld2xpbmUpIHtcbiAgICAgICAgciA9IHIuc2xpY2UoMCwgLW9wdGlvbnMubmV3bGluZS5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIHJldHVybiBYTUxTdHJpbmdXcml0ZXI7XG5cbiAgfSkoWE1MV3JpdGVyQmFzZSk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgWE1MU3RyaW5naWZpZXIsXG4gICAgYmluZCA9IGZ1bmN0aW9uKGZuLCBtZSl7IHJldHVybiBmdW5jdGlvbigpeyByZXR1cm4gZm4uYXBwbHkobWUsIGFyZ3VtZW50cyk7IH07IH0sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIG1vZHVsZS5leHBvcnRzID0gWE1MU3RyaW5naWZpZXIgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MU3RyaW5naWZpZXIob3B0aW9ucykge1xuICAgICAgdGhpcy5hc3NlcnRMZWdhbE5hbWUgPSBiaW5kKHRoaXMuYXNzZXJ0TGVnYWxOYW1lLCB0aGlzKTtcbiAgICAgIHRoaXMuYXNzZXJ0TGVnYWxDaGFyID0gYmluZCh0aGlzLmFzc2VydExlZ2FsQ2hhciwgdGhpcyk7XG4gICAgICB2YXIga2V5LCByZWYsIHZhbHVlO1xuICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICBpZiAoIXRoaXMub3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy52ZXJzaW9uID0gJzEuMCc7XG4gICAgICB9XG4gICAgICByZWYgPSBvcHRpb25zLnN0cmluZ2lmeSB8fCB7fTtcbiAgICAgIGZvciAoa2V5IGluIHJlZikge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICB2YWx1ZSA9IHJlZltrZXldO1xuICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsTmFtZSgnJyArIHZhbCB8fCAnJyk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS50ZXh0ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKHRoaXMudGV4dEVzY2FwZSgnJyArIHZhbCB8fCAnJykpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY2RhdGEgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICB2YWwgPSAnJyArIHZhbCB8fCAnJztcbiAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCddXT4nLCAnXV1dXT48IVtDREFUQVs+Jyk7XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIodmFsKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICB2YWwgPSAnJyArIHZhbCB8fCAnJztcbiAgICAgIGlmICh2YWwubWF0Y2goLy0tLykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29tbWVudCB0ZXh0IGNhbm5vdCBjb250YWluIGRvdWJsZS1oeXBlbjogXCIgKyB2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKHZhbCk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5yYXcgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gJycgKyB2YWwgfHwgJyc7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5hdHRWYWx1ZSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcih0aGlzLmF0dEVzY2FwZSh2YWwgPSAnJyArIHZhbCB8fCAnJykpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuaW5zVGFyZ2V0ID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKCcnICsgdmFsIHx8ICcnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmluc1ZhbHVlID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgdmFsID0gJycgKyB2YWwgfHwgJyc7XG4gICAgICBpZiAodmFsLm1hdGNoKC9cXD8+LykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwcm9jZXNzaW5nIGluc3RydWN0aW9uIHZhbHVlOiBcIiArIHZhbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIodmFsKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLnhtbFZlcnNpb24gPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICB2YWwgPSAnJyArIHZhbCB8fCAnJztcbiAgICAgIGlmICghdmFsLm1hdGNoKC8xXFwuWzAtOV0rLykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB2ZXJzaW9uIG51bWJlcjogXCIgKyB2YWwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbDtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLnhtbEVuY29kaW5nID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgdmFsID0gJycgKyB2YWwgfHwgJyc7XG4gICAgICBpZiAoIXZhbC5tYXRjaCgvXltBLVphLXpdKD86W0EtWmEtejAtOS5fLV0pKiQvKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGVuY29kaW5nOiBcIiArIHZhbCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIodmFsKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLnhtbFN0YW5kYWxvbmUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICBpZiAodmFsKSB7XG4gICAgICAgIHJldHVybiBcInllc1wiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwibm9cIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZFB1YklEID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKCcnICsgdmFsIHx8ICcnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZFN5c0lEID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKCcnICsgdmFsIHx8ICcnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZEVsZW1lbnRWYWx1ZSA9IGZ1bmN0aW9uKHZhbCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFzc2VydExlZ2FsQ2hhcignJyArIHZhbCB8fCAnJyk7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5kdGRBdHRUeXBlID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuYXNzZXJ0TGVnYWxDaGFyKCcnICsgdmFsIHx8ICcnKTtcbiAgICB9O1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmR0ZEF0dERlZmF1bHQgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIoJycgKyB2YWwgfHwgJycpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuZHRkRW50aXR5VmFsdWUgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIoJycgKyB2YWwgfHwgJycpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuZHRkTkRhdGEgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hc3NlcnRMZWdhbENoYXIoJycgKyB2YWwgfHwgJycpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY29udmVydEF0dEtleSA9ICdAJztcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5jb252ZXJ0UElLZXkgPSAnPyc7XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuY29udmVydFRleHRLZXkgPSAnI3RleHQnO1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmNvbnZlcnRDRGF0YUtleSA9ICcjY2RhdGEnO1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmNvbnZlcnRDb21tZW50S2V5ID0gJyNjb21tZW50JztcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5jb252ZXJ0UmF3S2V5ID0gJyNyYXcnO1xuXG4gICAgWE1MU3RyaW5naWZpZXIucHJvdG90eXBlLmFzc2VydExlZ2FsQ2hhciA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgdmFyIHJlZ2V4LCByZXM7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgfVxuICAgICAgcmVnZXggPSAnJztcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudmVyc2lvbiA9PT0gJzEuMCcpIHtcbiAgICAgICAgcmVnZXggPSAvW1xcMC1cXHgwOFxceDBCXFxmXFx4MEUtXFx4MUZcXHVGRkZFXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0vO1xuICAgICAgICBpZiAocmVzID0gc3RyLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIHN0cmluZzogXCIgKyBzdHIgKyBcIiBhdCBpbmRleCBcIiArIHJlcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vcHRpb25zLnZlcnNpb24gPT09ICcxLjEnKSB7XG4gICAgICAgIHJlZ2V4ID0gL1tcXDBcXHVGRkZFXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0vO1xuICAgICAgICBpZiAocmVzID0gc3RyLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIHN0cmluZzogXCIgKyBzdHIgKyBcIiBhdCBpbmRleCBcIiArIHJlcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHI7XG4gICAgfTtcblxuICAgIFhNTFN0cmluZ2lmaWVyLnByb3RvdHlwZS5hc3NlcnRMZWdhbE5hbWUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHZhciByZWdleDtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubm9WYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgICB9XG4gICAgICB0aGlzLmFzc2VydExlZ2FsQ2hhcihzdHIpO1xuICAgICAgcmVnZXggPSAvXihbOkEtWl9hLXpcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDJGRlxcdTAzNzAtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMENcXHUyMDBEXFx1MjA3MC1cXHUyMThGXFx1MkMwMC1cXHUyRkVGXFx1MzAwMS1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkZEXXxbXFx1RDgwMC1cXHVEQjdGXVtcXHVEQzAwLVxcdURGRkZdKShbXFx4MkRcXC4wLTpBLVpfYS16XFx4QjdcXHhDMC1cXHhENlxceEQ4LVxceEY2XFx4RjgtXFx1MDM3RFxcdTAzN0YtXFx1MUZGRlxcdTIwMENcXHUyMDBEXFx1MjAzRlxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkRdfFtcXHVEODAwLVxcdURCN0ZdW1xcdURDMDAtXFx1REZGRl0pKiQvO1xuICAgICAgaWYgKCFzdHIubWF0Y2gocmVnZXgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGluIG5hbWVcIik7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUudGV4dEVzY2FwZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgdmFyIGFtcHJlZ2V4O1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5ub1ZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgIH1cbiAgICAgIGFtcHJlZ2V4ID0gdGhpcy5vcHRpb25zLm5vRG91YmxlRW5jb2RpbmcgPyAvKD8hJlxcUys7KSYvZyA6IC8mL2c7XG4gICAgICByZXR1cm4gc3RyLnJlcGxhY2UoYW1wcmVnZXgsICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7JykucmVwbGFjZSgvXFxyL2csICcmI3hEOycpO1xuICAgIH07XG5cbiAgICBYTUxTdHJpbmdpZmllci5wcm90b3R5cGUuYXR0RXNjYXBlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgICB2YXIgYW1wcmVnZXg7XG4gICAgICBpZiAodGhpcy5vcHRpb25zLm5vVmFsaWRhdGlvbikge1xuICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgfVxuICAgICAgYW1wcmVnZXggPSB0aGlzLm9wdGlvbnMubm9Eb3VibGVFbmNvZGluZyA/IC8oPyEmXFxTKzspJi9nIDogLyYvZztcbiAgICAgIHJldHVybiBzdHIucmVwbGFjZShhbXByZWdleCwgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKS5yZXBsYWNlKC9cXHQvZywgJyYjeDk7JykucmVwbGFjZSgvXFxuL2csICcmI3hBOycpLnJlcGxhY2UoL1xcci9nLCAnJiN4RDsnKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIFhNTFN0cmluZ2lmaWVyO1xuXG4gIH0pKCk7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBHZW5lcmF0ZWQgYnkgQ29mZmVlU2NyaXB0IDEuMTIuN1xuKGZ1bmN0aW9uKCkge1xuICB2YXIgTm9kZVR5cGUsIFhNTENoYXJhY3RlckRhdGEsIFhNTFRleHQsXG4gICAgZXh0ZW5kID0gZnVuY3Rpb24oY2hpbGQsIHBhcmVudCkgeyBmb3IgKHZhciBrZXkgaW4gcGFyZW50KSB7IGlmIChoYXNQcm9wLmNhbGwocGFyZW50LCBrZXkpKSBjaGlsZFtrZXldID0gcGFyZW50W2tleV07IH0gZnVuY3Rpb24gY3RvcigpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGNoaWxkOyB9IGN0b3IucHJvdG90eXBlID0gcGFyZW50LnByb3RvdHlwZTsgY2hpbGQucHJvdG90eXBlID0gbmV3IGN0b3IoKTsgY2hpbGQuX19zdXBlcl9fID0gcGFyZW50LnByb3RvdHlwZTsgcmV0dXJuIGNoaWxkOyB9LFxuICAgIGhhc1Byb3AgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxDaGFyYWN0ZXJEYXRhID0gcmVxdWlyZSgnLi9YTUxDaGFyYWN0ZXJEYXRhJyk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBYTUxUZXh0ID0gKGZ1bmN0aW9uKHN1cGVyQ2xhc3MpIHtcbiAgICBleHRlbmQoWE1MVGV4dCwgc3VwZXJDbGFzcyk7XG5cbiAgICBmdW5jdGlvbiBYTUxUZXh0KHBhcmVudCwgdGV4dCkge1xuICAgICAgWE1MVGV4dC5fX3N1cGVyX18uY29uc3RydWN0b3IuY2FsbCh0aGlzLCBwYXJlbnQpO1xuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGVsZW1lbnQgdGV4dC4gXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubmFtZSA9IFwiI3RleHRcIjtcbiAgICAgIHRoaXMudHlwZSA9IE5vZGVUeXBlLlRleHQ7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5zdHJpbmdpZnkudGV4dCh0ZXh0KTtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoWE1MVGV4dC5wcm90b3R5cGUsICdpc0VsZW1lbnRDb250ZW50V2hpdGVzcGFjZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgRE9NIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQuXCIgKyB0aGlzLmRlYnVnSW5mbygpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShYTUxUZXh0LnByb3RvdHlwZSwgJ3dob2xlVGV4dCcsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBuZXh0LCBwcmV2LCBzdHI7XG4gICAgICAgIHN0ciA9ICcnO1xuICAgICAgICBwcmV2ID0gdGhpcy5wcmV2aW91c1NpYmxpbmc7XG4gICAgICAgIHdoaWxlIChwcmV2KSB7XG4gICAgICAgICAgc3RyID0gcHJldi5kYXRhICsgc3RyO1xuICAgICAgICAgIHByZXYgPSBwcmV2LnByZXZpb3VzU2libGluZztcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0gdGhpcy5kYXRhO1xuICAgICAgICBuZXh0ID0gdGhpcy5uZXh0U2libGluZztcbiAgICAgICAgd2hpbGUgKG5leHQpIHtcbiAgICAgICAgICBzdHIgPSBzdHIgKyBuZXh0LmRhdGE7XG4gICAgICAgICAgbmV4dCA9IG5leHQubmV4dFNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIFhNTFRleHQucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICB9O1xuXG4gICAgWE1MVGV4dC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLndyaXRlci50ZXh0KHRoaXMsIHRoaXMub3B0aW9ucy53cml0ZXIuZmlsdGVyT3B0aW9ucyhvcHRpb25zKSk7XG4gICAgfTtcblxuICAgIFhNTFRleHQucHJvdG90eXBlLnNwbGl0VGV4dCA9IGZ1bmN0aW9uKG9mZnNldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICBYTUxUZXh0LnByb3RvdHlwZS5yZXBsYWNlV2hvbGVUZXh0ID0gZnVuY3Rpb24oY29udGVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBET00gbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZC5cIiArIHRoaXMuZGVidWdJbmZvKCkpO1xuICAgIH07XG5cbiAgICByZXR1cm4gWE1MVGV4dDtcblxuICB9KShYTUxDaGFyYWN0ZXJEYXRhKTtcblxufSkuY2FsbCh0aGlzKTtcbiIsIi8vIEdlbmVyYXRlZCBieSBDb2ZmZWVTY3JpcHQgMS4xMi43XG4oZnVuY3Rpb24oKSB7XG4gIHZhciBOb2RlVHlwZSwgV3JpdGVyU3RhdGUsIFhNTENEYXRhLCBYTUxDb21tZW50LCBYTUxEVERBdHRMaXN0LCBYTUxEVERFbGVtZW50LCBYTUxEVERFbnRpdHksIFhNTERURE5vdGF0aW9uLCBYTUxEZWNsYXJhdGlvbiwgWE1MRG9jVHlwZSwgWE1MRHVtbXksIFhNTEVsZW1lbnQsIFhNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbiwgWE1MUmF3LCBYTUxUZXh0LCBYTUxXcml0ZXJCYXNlLCBhc3NpZ24sXG4gICAgaGFzUHJvcCA9IHt9Lmhhc093blByb3BlcnR5O1xuXG4gIGFzc2lnbiA9IHJlcXVpcmUoJy4vVXRpbGl0eScpLmFzc2lnbjtcblxuICBOb2RlVHlwZSA9IHJlcXVpcmUoJy4vTm9kZVR5cGUnKTtcblxuICBYTUxEZWNsYXJhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRGVjbGFyYXRpb24nKTtcblxuICBYTUxEb2NUeXBlID0gcmVxdWlyZSgnLi9YTUxEb2NUeXBlJyk7XG5cbiAgWE1MQ0RhdGEgPSByZXF1aXJlKCcuL1hNTENEYXRhJyk7XG5cbiAgWE1MQ29tbWVudCA9IHJlcXVpcmUoJy4vWE1MQ29tbWVudCcpO1xuXG4gIFhNTEVsZW1lbnQgPSByZXF1aXJlKCcuL1hNTEVsZW1lbnQnKTtcblxuICBYTUxSYXcgPSByZXF1aXJlKCcuL1hNTFJhdycpO1xuXG4gIFhNTFRleHQgPSByZXF1aXJlKCcuL1hNTFRleHQnKTtcblxuICBYTUxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gPSByZXF1aXJlKCcuL1hNTFByb2Nlc3NpbmdJbnN0cnVjdGlvbicpO1xuXG4gIFhNTER1bW15ID0gcmVxdWlyZSgnLi9YTUxEdW1teScpO1xuXG4gIFhNTERUREF0dExpc3QgPSByZXF1aXJlKCcuL1hNTERUREF0dExpc3QnKTtcblxuICBYTUxEVERFbGVtZW50ID0gcmVxdWlyZSgnLi9YTUxEVERFbGVtZW50Jyk7XG5cbiAgWE1MRFRERW50aXR5ID0gcmVxdWlyZSgnLi9YTUxEVERFbnRpdHknKTtcblxuICBYTUxEVEROb3RhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRFRETm90YXRpb24nKTtcblxuICBXcml0ZXJTdGF0ZSA9IHJlcXVpcmUoJy4vV3JpdGVyU3RhdGUnKTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IFhNTFdyaXRlckJhc2UgPSAoZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gWE1MV3JpdGVyQmFzZShvcHRpb25zKSB7XG4gICAgICB2YXIga2V5LCByZWYsIHZhbHVlO1xuICAgICAgb3B0aW9ucyB8fCAob3B0aW9ucyA9IHt9KTtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICByZWYgPSBvcHRpb25zLndyaXRlciB8fCB7fTtcbiAgICAgIGZvciAoa2V5IGluIHJlZikge1xuICAgICAgICBpZiAoIWhhc1Byb3AuY2FsbChyZWYsIGtleSkpIGNvbnRpbnVlO1xuICAgICAgICB2YWx1ZSA9IHJlZltrZXldO1xuICAgICAgICB0aGlzW1wiX1wiICsga2V5XSA9IHRoaXNba2V5XTtcbiAgICAgICAgdGhpc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUuZmlsdGVyT3B0aW9ucyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgICAgIHZhciBmaWx0ZXJlZE9wdGlvbnMsIHJlZiwgcmVmMSwgcmVmMiwgcmVmMywgcmVmNCwgcmVmNSwgcmVmNjtcbiAgICAgIG9wdGlvbnMgfHwgKG9wdGlvbnMgPSB7fSk7XG4gICAgICBvcHRpb25zID0gYXNzaWduKHt9LCB0aGlzLm9wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgZmlsdGVyZWRPcHRpb25zID0ge1xuICAgICAgICB3cml0ZXI6IHRoaXNcbiAgICAgIH07XG4gICAgICBmaWx0ZXJlZE9wdGlvbnMucHJldHR5ID0gb3B0aW9ucy5wcmV0dHkgfHwgZmFsc2U7XG4gICAgICBmaWx0ZXJlZE9wdGlvbnMuYWxsb3dFbXB0eSA9IG9wdGlvbnMuYWxsb3dFbXB0eSB8fCBmYWxzZTtcbiAgICAgIGZpbHRlcmVkT3B0aW9ucy5pbmRlbnQgPSAocmVmID0gb3B0aW9ucy5pbmRlbnQpICE9IG51bGwgPyByZWYgOiAnICAnO1xuICAgICAgZmlsdGVyZWRPcHRpb25zLm5ld2xpbmUgPSAocmVmMSA9IG9wdGlvbnMubmV3bGluZSkgIT0gbnVsbCA/IHJlZjEgOiAnXFxuJztcbiAgICAgIGZpbHRlcmVkT3B0aW9ucy5vZmZzZXQgPSAocmVmMiA9IG9wdGlvbnMub2Zmc2V0KSAhPSBudWxsID8gcmVmMiA6IDA7XG4gICAgICBmaWx0ZXJlZE9wdGlvbnMuZG9udFByZXR0eVRleHROb2RlcyA9IChyZWYzID0gKHJlZjQgPSBvcHRpb25zLmRvbnRQcmV0dHlUZXh0Tm9kZXMpICE9IG51bGwgPyByZWY0IDogb3B0aW9ucy5kb250cHJldHR5dGV4dG5vZGVzKSAhPSBudWxsID8gcmVmMyA6IDA7XG4gICAgICBmaWx0ZXJlZE9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCA9IChyZWY1ID0gKHJlZjYgPSBvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2gpICE9IG51bGwgPyByZWY2IDogb3B0aW9ucy5zcGFjZWJlZm9yZXNsYXNoKSAhPSBudWxsID8gcmVmNSA6ICcnO1xuICAgICAgaWYgKGZpbHRlcmVkT3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoID09PSB0cnVlKSB7XG4gICAgICAgIGZpbHRlcmVkT3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoID0gJyAnO1xuICAgICAgfVxuICAgICAgZmlsdGVyZWRPcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQgPSAwO1xuICAgICAgZmlsdGVyZWRPcHRpb25zLnVzZXIgPSB7fTtcbiAgICAgIGZpbHRlcmVkT3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5pbmRlbnQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIGluZGVudExldmVsO1xuICAgICAgaWYgKCFvcHRpb25zLnByZXR0eSB8fCBvcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnByZXR0eSkge1xuICAgICAgICBpbmRlbnRMZXZlbCA9IChsZXZlbCB8fCAwKSArIG9wdGlvbnMub2Zmc2V0ICsgMTtcbiAgICAgICAgaWYgKGluZGVudExldmVsID4gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgQXJyYXkoaW5kZW50TGV2ZWwpLmpvaW4ob3B0aW9ucy5pbmRlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmVuZGxpbmUgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgaWYgKCFvcHRpb25zLnByZXR0eSB8fCBvcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMubmV3bGluZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUuYXR0cmlidXRlID0gZnVuY3Rpb24oYXR0LCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5BdHRyaWJ1dGUoYXR0LCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByID0gJyAnICsgYXR0Lm5hbWUgKyAnPVwiJyArIGF0dC52YWx1ZSArICdcIic7XG4gICAgICB0aGlzLmNsb3NlQXR0cmlidXRlKGF0dCwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmNkYXRhID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHIgPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPCFbQ0RBVEFbJztcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICByICs9IG5vZGUudmFsdWU7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICByICs9ICddXT4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmNvbW1lbnQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8IS0tICc7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgciArPSBub2RlLnZhbHVlO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgciArPSAnIC0tPicgKyB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUuZGVjbGFyYXRpb24gPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8P3htbCc7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgciArPSAnIHZlcnNpb249XCInICsgbm9kZS52ZXJzaW9uICsgJ1wiJztcbiAgICAgIGlmIChub2RlLmVuY29kaW5nICE9IG51bGwpIHtcbiAgICAgICAgciArPSAnIGVuY29kaW5nPVwiJyArIG5vZGUuZW5jb2RpbmcgKyAnXCInO1xuICAgICAgfVxuICAgICAgaWYgKG5vZGUuc3RhbmRhbG9uZSAhPSBudWxsKSB7XG4gICAgICAgIHIgKz0gJyBzdGFuZGFsb25lPVwiJyArIG5vZGUuc3RhbmRhbG9uZSArICdcIic7XG4gICAgICB9XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICByICs9IG9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCArICc/Pic7XG4gICAgICByICs9IHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5kb2NUeXBlID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciBjaGlsZCwgaSwgbGVuLCByLCByZWY7XG4gICAgICBsZXZlbCB8fCAobGV2ZWwgPSAwKTtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICByID0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgciArPSAnPCFET0NUWVBFICcgKyBub2RlLnJvb3QoKS5uYW1lO1xuICAgICAgaWYgKG5vZGUucHViSUQgJiYgbm9kZS5zeXNJRCkge1xuICAgICAgICByICs9ICcgUFVCTElDIFwiJyArIG5vZGUucHViSUQgKyAnXCIgXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuc3lzSUQpIHtcbiAgICAgICAgciArPSAnIFNZU1RFTSBcIicgKyBub2RlLnN5c0lEICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgciArPSAnIFsnO1xuICAgICAgICByICs9IHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICAgIHJlZiA9IG5vZGUuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHJlZi5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGNoaWxkID0gcmVmW2ldO1xuICAgICAgICAgIHIgKz0gdGhpcy53cml0ZUNoaWxkTm9kZShjaGlsZCwgb3B0aW9ucywgbGV2ZWwgKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgIHIgKz0gJ10nO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgciArPSBvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2ggKyAnPic7XG4gICAgICByICs9IHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5lbGVtZW50ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciBhdHQsIGNoaWxkLCBjaGlsZE5vZGVDb3VudCwgZmlyc3RDaGlsZE5vZGUsIGksIGosIGxlbiwgbGVuMSwgbmFtZSwgcHJldHR5U3VwcHJlc3NlZCwgciwgcmVmLCByZWYxLCByZWYyO1xuICAgICAgbGV2ZWwgfHwgKGxldmVsID0gMCk7XG4gICAgICBwcmV0dHlTdXBwcmVzc2VkID0gZmFsc2U7XG4gICAgICByID0gJyc7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciArPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPCcgKyBub2RlLm5hbWU7XG4gICAgICByZWYgPSBub2RlLmF0dHJpYnM7XG4gICAgICBmb3IgKG5hbWUgaW4gcmVmKSB7XG4gICAgICAgIGlmICghaGFzUHJvcC5jYWxsKHJlZiwgbmFtZSkpIGNvbnRpbnVlO1xuICAgICAgICBhdHQgPSByZWZbbmFtZV07XG4gICAgICAgIHIgKz0gdGhpcy5hdHRyaWJ1dGUoYXR0LCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICB9XG4gICAgICBjaGlsZE5vZGVDb3VudCA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgZmlyc3RDaGlsZE5vZGUgPSBjaGlsZE5vZGVDb3VudCA9PT0gMCA/IG51bGwgOiBub2RlLmNoaWxkcmVuWzBdO1xuICAgICAgaWYgKGNoaWxkTm9kZUNvdW50ID09PSAwIHx8IG5vZGUuY2hpbGRyZW4uZXZlcnkoZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gKGUudHlwZSA9PT0gTm9kZVR5cGUuVGV4dCB8fCBlLnR5cGUgPT09IE5vZGVUeXBlLlJhdykgJiYgZS52YWx1ZSA9PT0gJyc7XG4gICAgICB9KSkge1xuICAgICAgICBpZiAob3B0aW9ucy5hbGxvd0VtcHR5KSB7XG4gICAgICAgICAgciArPSAnPic7XG4gICAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICAgIHIgKz0gJzwvJyArIG5vZGUubmFtZSArICc+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICAgIHIgKz0gb3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJy8+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmV0dHkgJiYgY2hpbGROb2RlQ291bnQgPT09IDEgJiYgKGZpcnN0Q2hpbGROb2RlLnR5cGUgPT09IE5vZGVUeXBlLlRleHQgfHwgZmlyc3RDaGlsZE5vZGUudHlwZSA9PT0gTm9kZVR5cGUuUmF3KSAmJiAoZmlyc3RDaGlsZE5vZGUudmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgciArPSAnPic7XG4gICAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICAgIG9wdGlvbnMuc3VwcHJlc3NQcmV0dHlDb3VudCsrO1xuICAgICAgICBwcmV0dHlTdXBwcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgciArPSB0aGlzLndyaXRlQ2hpbGROb2RlKGZpcnN0Q2hpbGROb2RlLCBvcHRpb25zLCBsZXZlbCArIDEpO1xuICAgICAgICBvcHRpb25zLnN1cHByZXNzUHJldHR5Q291bnQtLTtcbiAgICAgICAgcHJldHR5U3VwcHJlc3NlZCA9IGZhbHNlO1xuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICAgIHIgKz0gJzwvJyArIG5vZGUubmFtZSArICc+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3B0aW9ucy5kb250UHJldHR5VGV4dE5vZGVzKSB7XG4gICAgICAgICAgcmVmMSA9IG5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcmVmMS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY2hpbGQgPSByZWYxW2ldO1xuICAgICAgICAgICAgaWYgKChjaGlsZC50eXBlID09PSBOb2RlVHlwZS5UZXh0IHx8IGNoaWxkLnR5cGUgPT09IE5vZGVUeXBlLlJhdykgJiYgKGNoaWxkLnZhbHVlICE9IG51bGwpKSB7XG4gICAgICAgICAgICAgIG9wdGlvbnMuc3VwcHJlc3NQcmV0dHlDb3VudCsrO1xuICAgICAgICAgICAgICBwcmV0dHlTdXBwcmVzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHIgKz0gJz4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgICAgcmVmMiA9IG5vZGUuY2hpbGRyZW47XG4gICAgICAgIGZvciAoaiA9IDAsIGxlbjEgPSByZWYyLmxlbmd0aDsgaiA8IGxlbjE7IGorKykge1xuICAgICAgICAgIGNoaWxkID0gcmVmMltqXTtcbiAgICAgICAgICByICs9IHRoaXMud3JpdGVDaGlsZE5vZGUoY2hpbGQsIG9wdGlvbnMsIGxldmVsICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgICByICs9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8LycgKyBub2RlLm5hbWUgKyAnPic7XG4gICAgICAgIGlmIChwcmV0dHlTdXBwcmVzc2VkKSB7XG4gICAgICAgICAgb3B0aW9ucy5zdXBwcmVzc1ByZXR0eUNvdW50LS07XG4gICAgICAgIH1cbiAgICAgICAgciArPSB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS53cml0ZUNoaWxkTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkNEYXRhOlxuICAgICAgICAgIHJldHVybiB0aGlzLmNkYXRhKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5Db21tZW50OlxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbW1lbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkVsZW1lbnQ6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudChub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuUmF3OlxuICAgICAgICAgIHJldHVybiB0aGlzLnJhdyhub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuVGV4dDpcbiAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0KG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb246XG4gICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2luZ0luc3RydWN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgICAgY2FzZSBOb2RlVHlwZS5EdW1teTpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuRGVjbGFyYXRpb246XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGVjbGFyYXRpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkRvY1R5cGU6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZG9jVHlwZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuQXR0cmlidXRlRGVjbGFyYXRpb246XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZHRkQXR0TGlzdChub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuRWxlbWVudERlY2xhcmF0aW9uOlxuICAgICAgICAgIHJldHVybiB0aGlzLmR0ZEVsZW1lbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgICBjYXNlIE5vZGVUeXBlLkVudGl0eURlY2xhcmF0aW9uOlxuICAgICAgICAgIHJldHVybiB0aGlzLmR0ZEVudGl0eShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGNhc2UgTm9kZVR5cGUuTm90YXRpb25EZWNsYXJhdGlvbjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5kdGROb3RhdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBYTUwgbm9kZSB0eXBlOiBcIiArIG5vZGUuY29uc3RydWN0b3IubmFtZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLnByb2Nlc3NpbmdJbnN0cnVjdGlvbiA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICByID0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpICsgJzw/JztcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICByICs9IG5vZGUudGFyZ2V0O1xuICAgICAgaWYgKG5vZGUudmFsdWUpIHtcbiAgICAgICAgciArPSAnICcgKyBub2RlLnZhbHVlO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgciArPSBvcHRpb25zLnNwYWNlQmVmb3JlU2xhc2ggKyAnPz4nO1xuICAgICAgciArPSB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUucmF3ID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHIgPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgciArPSBub2RlLnZhbHVlO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkNsb3NlVGFnO1xuICAgICAgciArPSB0aGlzLmVuZGxpbmUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk5vbmU7XG4gICAgICB0aGlzLmNsb3NlTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9O1xuXG4gICAgWE1MV3JpdGVyQmFzZS5wcm90b3R5cGUudGV4dCA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICByID0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgIHIgKz0gbm9kZS52YWx1ZTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmR0ZEF0dExpc3QgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8IUFUVExJU1QnO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgIHIgKz0gJyAnICsgbm9kZS5lbGVtZW50TmFtZSArICcgJyArIG5vZGUuYXR0cmlidXRlTmFtZSArICcgJyArIG5vZGUuYXR0cmlidXRlVHlwZTtcbiAgICAgIGlmIChub2RlLmRlZmF1bHRWYWx1ZVR5cGUgIT09ICcjREVGQVVMVCcpIHtcbiAgICAgICAgciArPSAnICcgKyBub2RlLmRlZmF1bHRWYWx1ZVR5cGU7XG4gICAgICB9XG4gICAgICBpZiAobm9kZS5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgciArPSAnIFwiJyArIG5vZGUuZGVmYXVsdFZhbHVlICsgJ1wiJztcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gb3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJz4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmR0ZEVsZW1lbnQgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zLCBsZXZlbCkge1xuICAgICAgdmFyIHI7XG4gICAgICB0aGlzLm9wZW5Ob2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5PcGVuVGFnO1xuICAgICAgciA9IHRoaXMuaW5kZW50KG5vZGUsIG9wdGlvbnMsIGxldmVsKSArICc8IUVMRU1FTlQnO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLkluc2lkZVRhZztcbiAgICAgIHIgKz0gJyAnICsgbm9kZS5uYW1lICsgJyAnICsgbm9kZS52YWx1ZTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gb3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJz4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmR0ZEVudGl0eSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHRoaXMub3Blbk5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgb3B0aW9ucy5zdGF0ZSA9IFdyaXRlclN0YXRlLk9wZW5UYWc7XG4gICAgICByID0gdGhpcy5pbmRlbnQobm9kZSwgb3B0aW9ucywgbGV2ZWwpICsgJzwhRU5USVRZJztcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5JbnNpZGVUYWc7XG4gICAgICBpZiAobm9kZS5wZSkge1xuICAgICAgICByICs9ICcgJSc7XG4gICAgICB9XG4gICAgICByICs9ICcgJyArIG5vZGUubmFtZTtcbiAgICAgIGlmIChub2RlLnZhbHVlKSB7XG4gICAgICAgIHIgKz0gJyBcIicgKyBub2RlLnZhbHVlICsgJ1wiJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChub2RlLnB1YklEICYmIG5vZGUuc3lzSUQpIHtcbiAgICAgICAgICByICs9ICcgUFVCTElDIFwiJyArIG5vZGUucHViSUQgKyAnXCIgXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICAgIH0gZWxzZSBpZiAobm9kZS5zeXNJRCkge1xuICAgICAgICAgIHIgKz0gJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGUubkRhdGEpIHtcbiAgICAgICAgICByICs9ICcgTkRBVEEgJyArIG5vZGUubkRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5DbG9zZVRhZztcbiAgICAgIHIgKz0gb3B0aW9ucy5zcGFjZUJlZm9yZVNsYXNoICsgJz4nICsgdGhpcy5lbmRsaW5lKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIG9wdGlvbnMuc3RhdGUgPSBXcml0ZXJTdGF0ZS5Ob25lO1xuICAgICAgdGhpcy5jbG9zZU5vZGUobm9kZSwgb3B0aW9ucywgbGV2ZWwpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmR0ZE5vdGF0aW9uID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucywgbGV2ZWwpIHtcbiAgICAgIHZhciByO1xuICAgICAgdGhpcy5vcGVuTm9kZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuT3BlblRhZztcbiAgICAgIHIgPSB0aGlzLmluZGVudChub2RlLCBvcHRpb25zLCBsZXZlbCkgKyAnPCFOT1RBVElPTic7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuSW5zaWRlVGFnO1xuICAgICAgciArPSAnICcgKyBub2RlLm5hbWU7XG4gICAgICBpZiAobm9kZS5wdWJJRCAmJiBub2RlLnN5c0lEKSB7XG4gICAgICAgIHIgKz0gJyBQVUJMSUMgXCInICsgbm9kZS5wdWJJRCArICdcIiBcIicgKyBub2RlLnN5c0lEICsgJ1wiJztcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5wdWJJRCkge1xuICAgICAgICByICs9ICcgUFVCTElDIFwiJyArIG5vZGUucHViSUQgKyAnXCInO1xuICAgICAgfSBlbHNlIGlmIChub2RlLnN5c0lEKSB7XG4gICAgICAgIHIgKz0gJyBTWVNURU0gXCInICsgbm9kZS5zeXNJRCArICdcIic7XG4gICAgICB9XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuQ2xvc2VUYWc7XG4gICAgICByICs9IG9wdGlvbnMuc3BhY2VCZWZvcmVTbGFzaCArICc+JyArIHRoaXMuZW5kbGluZShub2RlLCBvcHRpb25zLCBsZXZlbCk7XG4gICAgICBvcHRpb25zLnN0YXRlID0gV3JpdGVyU3RhdGUuTm9uZTtcbiAgICAgIHRoaXMuY2xvc2VOb2RlKG5vZGUsIG9wdGlvbnMsIGxldmVsKTtcbiAgICAgIHJldHVybiByO1xuICAgIH07XG5cbiAgICBYTUxXcml0ZXJCYXNlLnByb3RvdHlwZS5vcGVuTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7fTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmNsb3NlTm9kZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMsIGxldmVsKSB7fTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLm9wZW5BdHRyaWJ1dGUgPSBmdW5jdGlvbihhdHQsIG9wdGlvbnMsIGxldmVsKSB7fTtcblxuICAgIFhNTFdyaXRlckJhc2UucHJvdG90eXBlLmNsb3NlQXR0cmlidXRlID0gZnVuY3Rpb24oYXR0LCBvcHRpb25zLCBsZXZlbCkge307XG5cbiAgICByZXR1cm4gWE1MV3JpdGVyQmFzZTtcblxuICB9KSgpO1xuXG59KS5jYWxsKHRoaXMpO1xuIiwiLy8gR2VuZXJhdGVkIGJ5IENvZmZlZVNjcmlwdCAxLjEyLjdcbihmdW5jdGlvbigpIHtcbiAgdmFyIE5vZGVUeXBlLCBXcml0ZXJTdGF0ZSwgWE1MRE9NSW1wbGVtZW50YXRpb24sIFhNTERvY3VtZW50LCBYTUxEb2N1bWVudENCLCBYTUxTdHJlYW1Xcml0ZXIsIFhNTFN0cmluZ1dyaXRlciwgYXNzaWduLCBpc0Z1bmN0aW9uLCByZWY7XG5cbiAgcmVmID0gcmVxdWlyZSgnLi9VdGlsaXR5JyksIGFzc2lnbiA9IHJlZi5hc3NpZ24sIGlzRnVuY3Rpb24gPSByZWYuaXNGdW5jdGlvbjtcblxuICBYTUxET01JbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vWE1MRE9NSW1wbGVtZW50YXRpb24nKTtcblxuICBYTUxEb2N1bWVudCA9IHJlcXVpcmUoJy4vWE1MRG9jdW1lbnQnKTtcblxuICBYTUxEb2N1bWVudENCID0gcmVxdWlyZSgnLi9YTUxEb2N1bWVudENCJyk7XG5cbiAgWE1MU3RyaW5nV3JpdGVyID0gcmVxdWlyZSgnLi9YTUxTdHJpbmdXcml0ZXInKTtcblxuICBYTUxTdHJlYW1Xcml0ZXIgPSByZXF1aXJlKCcuL1hNTFN0cmVhbVdyaXRlcicpO1xuXG4gIE5vZGVUeXBlID0gcmVxdWlyZSgnLi9Ob2RlVHlwZScpO1xuXG4gIFdyaXRlclN0YXRlID0gcmVxdWlyZSgnLi9Xcml0ZXJTdGF0ZScpO1xuXG4gIG1vZHVsZS5leHBvcnRzLmNyZWF0ZSA9IGZ1bmN0aW9uKG5hbWUsIHhtbGRlYywgZG9jdHlwZSwgb3B0aW9ucykge1xuICAgIHZhciBkb2MsIHJvb3Q7XG4gICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUm9vdCBlbGVtZW50IG5lZWRzIGEgbmFtZS5cIik7XG4gICAgfVxuICAgIG9wdGlvbnMgPSBhc3NpZ24oe30sIHhtbGRlYywgZG9jdHlwZSwgb3B0aW9ucyk7XG4gICAgZG9jID0gbmV3IFhNTERvY3VtZW50KG9wdGlvbnMpO1xuICAgIHJvb3QgPSBkb2MuZWxlbWVudChuYW1lKTtcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGxlc3MpIHtcbiAgICAgIGRvYy5kZWNsYXJhdGlvbihvcHRpb25zKTtcbiAgICAgIGlmICgob3B0aW9ucy5wdWJJRCAhPSBudWxsKSB8fCAob3B0aW9ucy5zeXNJRCAhPSBudWxsKSkge1xuICAgICAgICBkb2MuZHRkKG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcm9vdDtcbiAgfTtcblxuICBtb2R1bGUuZXhwb3J0cy5iZWdpbiA9IGZ1bmN0aW9uKG9wdGlvbnMsIG9uRGF0YSwgb25FbmQpIHtcbiAgICB2YXIgcmVmMTtcbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgcmVmMSA9IFtvcHRpb25zLCBvbkRhdGFdLCBvbkRhdGEgPSByZWYxWzBdLCBvbkVuZCA9IHJlZjFbMV07XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuICAgIGlmIChvbkRhdGEpIHtcbiAgICAgIHJldHVybiBuZXcgWE1MRG9jdW1lbnRDQihvcHRpb25zLCBvbkRhdGEsIG9uRW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBYTUxEb2N1bWVudChvcHRpb25zKTtcbiAgICB9XG4gIH07XG5cbiAgbW9kdWxlLmV4cG9ydHMuc3RyaW5nV3JpdGVyID0gZnVuY3Rpb24ob3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgWE1MU3RyaW5nV3JpdGVyKG9wdGlvbnMpO1xuICB9O1xuXG4gIG1vZHVsZS5leHBvcnRzLnN0cmVhbVdyaXRlciA9IGZ1bmN0aW9uKHN0cmVhbSwgb3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgWE1MU3RyZWFtV3JpdGVyKHN0cmVhbSwgb3B0aW9ucyk7XG4gIH07XG5cbiAgbW9kdWxlLmV4cG9ydHMuaW1wbGVtZW50YXRpb24gPSBuZXcgWE1MRE9NSW1wbGVtZW50YXRpb24oKTtcblxuICBtb2R1bGUuZXhwb3J0cy5ub2RlVHlwZSA9IE5vZGVUeXBlO1xuXG4gIG1vZHVsZS5leHBvcnRzLndyaXRlclN0YXRlID0gV3JpdGVyU3RhdGU7XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHRpZihfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdKSB7XG5cdFx0cmV0dXJuIF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0uZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0bG9hZGVkOiBmYWxzZSxcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG5cdG1vZHVsZS5sb2FkZWQgPSB0cnVlO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gbW9kdWxlIGV4cG9ydHMgbXVzdCBiZSByZXR1cm5lZCBmcm9tIHJ1bnRpbWUgc28gZW50cnkgaW5saW5pbmcgaXMgZGlzYWJsZWRcbi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXyg2MTI0KTtcbnJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKDMwMCk7XG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiBtb2R1bGVbJ2RlZmF1bHQnXSA6XG5cdFx0KCkgPT4gbW9kdWxlO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubm1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUucGF0aHMgPSBbXTtcblx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRyZXR1cm4gbW9kdWxlO1xufTsiXSwic291cmNlUm9vdCI6IiJ9