@digitransit-component/digitransit-component-autosuggest 3.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- !function(M,z){"object"==typeof exports&&"undefined"!=typeof module?z(exports,require("prop-types"),require("react"),require("i18next"),require("classnames"),require("react-autosuggest"),require("lodash/debounce"),require("lodash/flatten"),require("lodash/take"),require("lodash/isString"),require("lodash/orderBy"),require("lodash/uniqWith"),require("lodash/get"),require("@digitransit-component/digitransit-component-suggestion-item"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","i18next","classnames","react-autosuggest","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/get","@digitransit-component/digitransit-component-suggestion-item","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","@digitransit-component/digitransit-component-icon","lodash/isEmpty","react-modal","@digitransit-component/digitransit-component-dialog-modal"],z):z((M="undefined"!=typeof globalThis?globalThis:M||self).DTAutosuggest={},M.PropTypes,M.React,M.i18next,M.cx,M.Autosuggest,M.debounce,M.flatten,M.take,M.isString,M.orderBy,M.uniqWith,M.get,M.SuggestionItem,M.isEqual,M.memoize,M.escapeRegExp,M.cloneDeep,M.Icon,M.isEmpty,M.ReactModal,M.DialogModal)}(this,(function(M,z,b,p,O,o,c,A,q,e,n,a,W,t,d,i,r,s,u,f,R,l){"use strict";function L(M){return M&&"object"==typeof M&&"default"in M?M:{default:M}}var N=L(z),B=L(b),X=L(p),h=L(O),m=L(o),g=L(c),T=L(A),y=L(q),_=L(e),S=L(n),v=L(a),k=L(W),w=L(t),E=L(d),C=L(i),D=L(r),P=L(s),x=L(u),j=L(f),I=L(R),H=L(l);function Y(M){return Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(M){return typeof M}:function(M){return M&&"function"==typeof Symbol&&M.constructor===Symbol&&M!==Symbol.prototype?"symbol":typeof M},Y(M)}function F(M){var z=function(M,z){if("object"!=Y(M)||!M)return M;var b=M[Symbol.toPrimitive];if(void 0!==b){var p=b.call(M,z||"default");if("object"!=Y(p))return p;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===z?String:Number)(M)}(M,"string");return"symbol"==Y(z)?z:String(z)}function U(M,z,b){return(z=F(z))in M?Object.defineProperty(M,z,{value:b,enumerable:!0,configurable:!0,writable:!0}):M[z]=b,M}function G(M,z){(null==z||z>M.length)&&(z=M.length);for(var b=0,p=new Array(z);b<z;b++)p[b]=M[b];return p}function V(M,z){return function(M){if(Array.isArray(M))return M}(M)||function(M,z){var b=null==M?null:"undefined"!=typeof Symbol&&M[Symbol.iterator]||M["@@iterator"];if(null!=b){var p,O,o,c,A=[],q=!0,e=!1;try{if(o=(b=b.call(M)).next,0===z){if(Object(b)!==b)return;q=!1}else for(;!(q=(p=o.call(b)).done)&&(A.push(p.value),A.length!==z);q=!0);}catch(M){e=!0,O=M}finally{try{if(!q&&null!=b.return&&(c=b.return(),Object(c)!==c))return}finally{if(e)throw O}}return A}}(M,z)||function(M,z){if(M){if("string"==typeof M)return G(M,z);var b=Object.prototype.toString.call(M).slice(8,-1);return"Object"===b&&M.constructor&&(b=M.constructor.name),"Map"===b||"Set"===b?Array.from(M):"Arguments"===b||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(b)?G(M,z):void 0}}(M,z)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function K(M,z){return M&&z&&M===z}var Q=["stop","station","favouriteStop","favouriteStation"],J=["favouriteVehicleRentalStation","bikestation"];function Z(M){if(!M)return"";var z=M.split(":");return 0===z.length?"":`citybikes${z[0]}:bikestation:${z[1]}`}function $(M,z){var b=M.properties,p=z.properties;if("FutureRoute"===M.type&&"FutureRoute"===z.type){var O=b.origin,o=b.destination,c=p.origin,A=p.destination;return`${O.name}//${O.locality}//${o.name}//${o.locality}`===`${c.name}//${c.locality}//${A.name}//${A.locality}`}if("FutureRoute"===M.type||"FutureRoute"===z.type)return!1;if(J.includes(b.layer)&&J.includes(p.layer))return(b.gid||Z(b.labelId))===(p.gid||Z(p.labelId));if(b.gtfsId&&p.gtfsId)return b.gtfsId===p.gtfsId;if(Q.includes(b.layer)&&Q.includes(p.layer)&&b.gid&&p.gid)return b.gid===p.gid;var q=M&&M.geometry?M.geometry.coordinates:void 0,e=z&&z.geometry?z.geometry.coordinates:void 0;return!!(q&&e&&Math.abs(q[0]-e[0])<1e-6&&Math.abs(q[1]-e[1])<1e-6&&(K(b.name,p.name)||K(b.label,p.label)||K(b.address,p.address)||K(b.address,p.label)||K(b.label,p.address)))}var MM=M=>_.default(M)?M.toLowerCase():"",zM="back",bM="currentPosition",pM="favouriteStop",OM="favouriteStation",oM="favouritePlace",cM="favouriteRoute",AM="favouriteVehicleRentalStation",qM="futureRoute",eM="station",nM="selectFromMap",aM="ownLocations",WM="stop",tM="bikestation",dM="carpark",iM="bikepark",rM=M=>{var z=M.layer,b=M.type;return"stop"===z||"favouriteStop"===z||"stop"===b||"favouriteStop"===b},sM=(M,z)=>{switch(M){case bM:return 1;case zM:return.9;case nM:return.8;case aM:return.79;case OM:case oM:case pM:case cM:case AM:return.45;case qM:return.44;case eM:return _.default(z)&&0===z.indexOf("gtfs")?.43:.42;case dM:case iM:case tM:return.38;case WM:return.36;default:return.41}},uM=function(M,z){var b=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";if(!Array.isArray(z))return z;var p=z=>_.default(z)&&M&&M.test(z),O=MM(b),o=p(O),c=S.default(z,[M=>o&&p(MM(M.properties.shortName))&&0===MM(M.properties.shortName).indexOf(O)?1:0,M=>{var z=M.properties,b=z.confidence,p=z.layer,o=z.source;if(0===O.length)return sM(p,o);if(!b)return sM(p,o)+((M,z)=>_.default(M)&&0!==M.length?["name","label","address","shortName"].map((M=>z[M])).filter((M=>_.default(M)&&M.length>0)).map((z=>{var b=MM(z);return 0===b.indexOf(M)?.5+M.length/b.length:.5*M.length/(M.length+1)})).reduce(((M,z)=>z>M?z:M),0):0)(O,M.properties);switch(p){case eM:return b+(0===o.indexOf("gtfs")?.02:.01);case WM:case dM:case iM:return b-.05;case tM:return b-.04;default:return b}}],["desc","desc"]);return v.default(c,$)},fM=(M,z)=>null!=z&&-1!==M.lastIndexOf(z)?M.substring(0,M.lastIndexOf(z)-1):M;function RM(M,z,b){if("string"==typeof z&&z.length>0){var p=z.toLowerCase().trim(),O=p.includes(" ")||p.includes(",");return M.filter((M=>{var z=[];b.forEach((b=>{var p=k.default(M,b);O||"properties.label"!==b&&"address"!==b||!p||((p=p.split(",")).length>2?p.splice(p.length-2,2):p.length>1&&p.splice(p.length-1,1),p=p.join(",")),p&&(z=O?z.concat(p.toLowerCase()):z.concat(p.toLowerCase().replace(/,/g," ").split(" ")))}));for(var o=0;o<z.length;o++)if(0===z[o].indexOf(p))return!0;return!1}))}return M}function lM(M,z){return M?Object.keys(M).map((b=>{var p=z||b,O=M[b];return"object"==typeof O?lM(O,p):`${encodeURIComponent(p)}=${encodeURIComponent(O)}`})).join("&"):""}var LM=require("axios").default;function NM(M,z){return LM.get(encodeURI(M)+(z?(-1===M.search(/\?/)?"?":"&")+lM(z):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((M=>M.data))}function BM(M,z){var b=Object.keys(M);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(M);z&&(p=p.filter((function(z){return Object.getOwnPropertyDescriptor(M,z).enumerable}))),b.push.apply(b,p)}return b}function XM(M){for(var z=1;z<arguments.length;z++){var b=null!=arguments[z]?arguments[z]:{};z%2?BM(Object(b),!0).forEach((function(z){U(M,z,b[z])})):Object.getOwnPropertyDescriptors?Object.defineProperties(M,Object.getOwnPropertyDescriptors(b)):BM(Object(b)).forEach((function(z){Object.defineProperty(M,z,Object.getOwnPropertyDescriptor(b,z))}))}return M}var hM="https://api.digitransit.fi/geocoding/v1/search";function mM(M,z,b,p,O,o,c,A){var q=M?M.trim():null;if(null==q||q.length<1||c&&!c.test(q))return Promise.resolve([]);var e=o||hM,n=XM(XM(XM({text:q},z),p),{},{lang:b});if(O&&(n=XM(XM({},n),{},{sources:O})),A){var a=A.toString();n=XM(XM({},n),{},{layers:a})}return NM(e,n).then((M=>M.features))}function gM(M,z){var b=Object.keys(M);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(M);z&&(p=p.filter((function(z){return Object.getOwnPropertyDescriptor(M,z).enumerable}))),b.push.apply(b,p)}return b}function TM(M){for(var z=1;z<arguments.length;z++){var b=null!=arguments[z]?arguments[z]:{};z%2?gM(Object(b),!0).forEach((function(z){U(M,z,b[z])})):Object.getOwnPropertyDescriptors?Object.defineProperties(M,Object.getOwnPropertyDescriptors(b)):gM(Object(b)).forEach((function(z){Object.defineProperty(M,z,Object.getOwnPropertyDescriptor(b,z))}))}return M}function yM(M,z){if(!M||M.length<1)return Promise.resolve([]);var b="",p=M.map((M=>{var z="stop"===M.type?"stop":"station",p=`gtfs${M.gtfsId.split(":")[0].toLowerCase()}:${z}:GTFS:${M.gtfsId}`;return M.code&&(p+=`#${M.code}`),b+=`${p},`,TM(TM({},M),{},{gid:p})})).reduce((function(M,z){return M[z.gid]=z,M}),{});return NM(z,{ids:b.slice(0,-1)}).then((M=>M.features.map((M=>({type:"FavouriteStop",properties:{addendum:M.properties.addendum,gid:p[M.properties.gid].gid,code:p[M.properties.gid].code,gtfsId:p[M.properties.gid].gtfsId,lastUpdated:p[M.properties.gid].lastUpdated,favouriteId:p[M.properties.gid].favouriteId,address:M.properties.label,layer:rM(M.properties)?"favouriteStop":"favouriteStation"},geometry:M.geometry})))))}function _M(M,z,b){var p=RM(M,z,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return b&&(p=p.filter((M=>!b.includes(M.properties.layer)))),Promise.resolve(y.default(p,10).map((M=>{var z=TM(TM({},M),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete z.properties.confidence,z})))}var SM=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],vM=["venue","address","street"],kM=["carpark","bikepark"],wM=["stop","station"];var EM=g.default((function(M,z,b,p,O,o,c,A,q,e){var n=c.input,a=p.getPositions,W=p.getFavouriteLocations,t=p.getOldSearches,d=p.getFavouriteStops,i=p.parkingAreaSources,r=p.getLanguage,s=p.getStopAndStationsQuery,u=p.getFavouriteVehicleRentalStationsQuery,f=p.getFavouriteVehicleRentalStations,R=p.getFavouriteRoutesQuery,l=p.getFavouriteRoutes,L=p.getRoutesQuery,N=p.context,B=p.isPeliasLocationAware,X=p.minimalRegexp,h=p.lineRegexp,m=p.URL_PELIAS,g=p.URL_PELIAS_PLACE,_=p.feedIDs,S=p.geocodingSearchParams,v=p.geocodingSources,k=p.getFutureRoutes,w=p.cityBikeNetworks,E=!M||0===M.length,C=!z||0===z.length,D=a(N),P=[],x={type:"all",term:n,results:[]},j=r(N),I=B&&null!=e&&e.lat&&null!=e&&e.lon?{"focus.point.lat":e.lat.toFixed(3),"focus.point.lon":e.lon.toFixed(3)}:{},H=b?b.split("-")[1]:void 0;if(M.includes("CurrentPosition")&&"geolocation-not-supported"!==D.status&&P.push(function(M,z){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"CurrentLocation",address:z.address,lat:z.lat,lon:z.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:z.address,lat:z.lat,lon:z.lon},geometry:{type:"Point",coordinates:[z.lon,z.lat]}}]):Promise.resolve([])}(n,D)),(E||M.includes("MapPosition"))&&P.push(function(M){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"SelectFromMap",address:"SelectFromMap",lat:null,lon:null,properties:{labelId:"select-from-map",layer:"selectFromMap",address:"SelectFromMap",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(n)),M.includes("FutureRoutes")){var Y=k(N);P.push(y.default(Y,3))}if(M.includes("SelectFromOwnLocations")&&function(M){var z=M.getFavouriteLocations(M.context);if((null==z?void 0:z.length)>0)return!0;var b=M.getFavouriteVehicleRentalStations(M.context);if((null==b?void 0:b.length)>0)return!0;var p=M.getFavouriteStops(M.context);return(null==p?void 0:p.length)>0}(p)&&P.push(function(M){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"SelectFromOwnLocations",address:"SelectFromOwnLocations",lat:null,lon:null,properties:{labelId:"select-from-own-locations",layer:"ownLocations",address:"selectFromOwnLocations",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(n)),E||M.includes("Locations")){var F=S;if(z.includes("Favourite")){var U=W(N);P.push(function(M,z){return Promise.resolve(RM(M,z,["address","name"]).map((M=>({type:"FavouritePlace",properties:TM(TM({},M),{},{label:M.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[M.lon,M.lat]}}))))}(U,n)),z.includes("Back")&&P.push(Promise.resolve([{type:"back",address:"back",lat:null,lon:null,properties:{labelId:"back",layer:"back",address:"back",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]))}if(C||z.includes("Datasource")){var G=_.map((M=>`gtfs${M}`)),V=v.concat(G).join(",");P.push(mM(n,F,j,I,V,m,X,["venue","address","street"]))}if(C||z.includes("History")){var K=t(N,"endpoint"),Q=["bikestation"];Q.push(...wM),Q.push(...SM),Q.push(...kM),P.push(_M(K,n,Q))}}if(E||M.includes("ParkingAreas")){if(C||z.includes("Datasource")){var J=S;o&&10!==o&&(J.size=o);var Z=i?i.join(","):null;P.push(mM(n,J,j,I,Z,m,X,["carpark","bikepark"]).then((M=>O?O(M,H):M)))}if(C||z.includes("History")){var $=t(N),MM=["bikestation"];MM.push(...wM),MM.push(...SM),MM.push(...vM),P.push(_M($,n,MM))}}var zM=M.includes("Stops"),bM=M.includes("Stations");if(E||zM||bM){if(z.includes("Favourite")){var pM,OM=d(N);pM=OM.every((M=>"station"===M.type))?yM(OM,g).then((M=>O?O(M,H):M)):s(OM).then((M=>yM(M,g))).then((M=>O?O(M,H):M)),P.push(function(M,z,b,p){return M.then((M=>RM(M.filter((M=>"stop"===M.type?b:p)),z,["properties.name","properties.name","properties.address"])))}(pM,n,zM,bM))}if(C||z.includes("Datasource")){var oM=[];zM&&oM.push("stop"),bM&&oM.push("station");var cM=o&&10!==o?{size:o}:{};S&&S["boundary.country"]&&(cM["boundary.country"]=S["boundary.country"]),(E||M.includes("Locations"))&&(cM.dedupestops=1);var AM=_.map((M=>`gtfs${M}`)).join(",");P.push(mM(n,cM,j,I,AM,m,X,oM).then((M=>O?O(M,H):M)))}if(C||z.includes("History")){var qM=t(N).filter((M=>!M.properties.gid||M.properties.gid.includes("GTFS:"))),eM=["bikestation"];eM.push(...SM),eM.push(...vM),eM.push(...kM),zM||eM.push("stop"),bM||eM.push("station"),b?P.push(_M(qM,n,eM).then((M=>O?O(M,H):M))):P.push(_M(qM,n,eM))}}if(E||M.includes("Routes")){if(z.includes("Favourite")){var nM=l(N);P.push(R(nM,n,H,q).then((M=>O?O(M,H,"Routes"):M)))}if(P.push(L(n,_,b,q).then((M=>O?O(M,H,"Routes"):M))),C||z.includes("History")){var aM=t(N),WM=["bikestation"];b&&WM.push(...SM.filter((M=>!(M===b)))),WM.push(...wM),WM.push(...vM),WM.push(...kM),P.push(_M(aM,n,WM).then((M=>O?O(M,H,"Routes"):M)))}}if(E||M.includes("VehicleRentalStations")){if(z.includes("Favourite")){var tM=f(N);P.push(u(tM,n))}if(C||z.includes("Datasource")){var dM=o&&10!==o?{size:o}:{};P.push(mM(n,dM,j,I,w.join(","),m,X,["bikestation"]).then((M=>O?O(M,H,"VehicleRentalStations"):M)))}if(C||z.includes("History")){var iM=t(N),rM=[...wM];rM.push(...SM),rM.push(...vM),rM.push(...kM),P.push(_M(iM,n,rM))}}Promise.all(P).then(T.default).then((M=>{x.results=M})).catch((M=>{x.error=M})).then((()=>{A(TM(TM({},x),{},{results:uM(h,x.results,n)}))}))}),300,{leading:!0}),CM=M=>M.localadmin||M.locality||M.address&&M.address.lastIndexOf(",")<M.address.length-2&&M.address.substring(M.address.lastIndexOf(",")+2)||"",DM=M=>{var z=M.id,b=M.code;return b||(void 0!==z&&void 0!==z.indexOf&&-1!==z.indexOf("#")?z.substring(z.indexOf("#")+1):void 0)},PM=C.default((function(M){var z,b,p=arguments.length>1&&void 0!==arguments[1]&&arguments[1];switch(M.layer){case"currentPosition":return[M.labelId,M.address];case"selectFromMap":case"ownLocations":case"back":return[M.labelId];case"favouritePlace":return z=M.name,b=M.address,[z||b&&b.split(",")[0],"string"==typeof b?b.replace(new RegExp(`${D.default(z)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":return[M.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!p&&M.shortName?[M.gtfsId,M.mode.toLowerCase(),M.longName]:[M.shortName,M.longName,M.agency?M.agency.name:void 0];case"venue":case"address":case"street":return[M.name,M.label.replace(new RegExp(`${D.default(M.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return p?[M.name||M.label||M.address&&M.address.split(",")[0],CM(M)]:[M.name,M.id,DM(M),CM(M)];default:return[M.name||M.label||M.address&&M.address.split(",")[0],CM(M)]}}),((M,z)=>{var b=P.default(M);return b.plain=z,b}));function xM(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function jM(M,z){return M(z={exports:{}},z.exports),z.exports}var IM,HM=jM((function(M,z){M.exports=function(){var z,b;function p(){return z.apply(null,arguments)}function O(M){z=M}function o(M){return M instanceof Array||"[object Array]"===Object.prototype.toString.call(M)}function c(M){return null!=M&&"[object Object]"===Object.prototype.toString.call(M)}function A(M,z){return Object.prototype.hasOwnProperty.call(M,z)}function q(M){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(M).length;var z;for(z in M)if(A(M,z))return!1;return!0}function e(M){return void 0===M}function n(M){return"number"==typeof M||"[object Number]"===Object.prototype.toString.call(M)}function a(M){return M instanceof Date||"[object Date]"===Object.prototype.toString.call(M)}function W(M,z){var b,p=[],O=M.length;for(b=0;b<O;++b)p.push(z(M[b],b));return p}function t(M,z){for(var b in z)A(z,b)&&(M[b]=z[b]);return A(z,"toString")&&(M.toString=z.toString),A(z,"valueOf")&&(M.valueOf=z.valueOf),M}function d(M,z,b,p){return Vb(M,z,b,p,!0).utc()}function i(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function r(M){return null==M._pf&&(M._pf=i()),M._pf}function s(M){var z=null,p=!1,O=M._d&&!isNaN(M._d.getTime());return O&&(z=r(M),p=b.call(z.parsedDateParts,(function(M){return null!=M})),O=z.overflow<0&&!z.empty&&!z.invalidEra&&!z.invalidMonth&&!z.invalidWeekday&&!z.weekdayMismatch&&!z.nullInput&&!z.invalidFormat&&!z.userInvalidated&&(!z.meridiem||z.meridiem&&p),M._strict&&(O=O&&0===z.charsLeftOver&&0===z.unusedTokens.length&&void 0===z.bigHour)),null!=Object.isFrozen&&Object.isFrozen(M)?O:(M._isValid=O,M._isValid)}function u(M){var z=d(NaN);return null!=M?t(r(z),M):r(z).userInvalidated=!0,z}b=Array.prototype.some?Array.prototype.some:function(M){var z,b=Object(this),p=b.length>>>0;for(z=0;z<p;z++)if(z in b&&M.call(this,b[z],z,b))return!0;return!1};var f=p.momentProperties=[],R=!1;function l(M,z){var b,p,O,o=f.length;if(e(z._isAMomentObject)||(M._isAMomentObject=z._isAMomentObject),e(z._i)||(M._i=z._i),e(z._f)||(M._f=z._f),e(z._l)||(M._l=z._l),e(z._strict)||(M._strict=z._strict),e(z._tzm)||(M._tzm=z._tzm),e(z._isUTC)||(M._isUTC=z._isUTC),e(z._offset)||(M._offset=z._offset),e(z._pf)||(M._pf=r(z)),e(z._locale)||(M._locale=z._locale),o>0)for(b=0;b<o;b++)e(O=z[p=f[b]])||(M[p]=O);return M}function L(M){l(this,M),this._d=new Date(null!=M._d?M._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===R&&(R=!0,p.updateOffset(this),R=!1)}function N(M){return M instanceof L||null!=M&&null!=M._isAMomentObject}function B(M){!1===p.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+M)}function X(M,z){var b=!0;return t((function(){if(null!=p.deprecationHandler&&p.deprecationHandler(null,M),b){var O,o,c,q=[],e=arguments.length;for(o=0;o<e;o++){if(O="","object"==typeof arguments[o]){for(c in O+="\n["+o+"] ",arguments[0])A(arguments[0],c)&&(O+=c+": "+arguments[0][c]+", ");O=O.slice(0,-2)}else O=arguments[o];q.push(O)}B(M+"\nArguments: "+Array.prototype.slice.call(q).join("")+"\n"+(new Error).stack),b=!1}return z.apply(this,arguments)}),z)}var h,m={};function g(M,z){null!=p.deprecationHandler&&p.deprecationHandler(M,z),m[M]||(B(z),m[M]=!0)}function T(M){return"undefined"!=typeof Function&&M instanceof Function||"[object Function]"===Object.prototype.toString.call(M)}function y(M){var z,b;for(b in M)A(M,b)&&(T(z=M[b])?this[b]=z:this["_"+b]=z);this._config=M,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function _(M,z){var b,p=t({},M);for(b in z)A(z,b)&&(c(M[b])&&c(z[b])?(p[b]={},t(p[b],M[b]),t(p[b],z[b])):null!=z[b]?p[b]=z[b]:delete p[b]);for(b in M)A(M,b)&&!A(z,b)&&c(M[b])&&(p[b]=t({},p[b]));return p}function S(M){null!=M&&this.set(M)}p.suppressDeprecationWarnings=!1,p.deprecationHandler=null,h=Object.keys?Object.keys:function(M){var z,b=[];for(z in M)A(M,z)&&b.push(z);return b};var v={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function k(M,z,b){var p=this._calendar[M]||this._calendar.sameElse;return T(p)?p.call(z,b):p}function w(M,z,b){var p=""+Math.abs(M),O=z-p.length;return(M>=0?b?"+":"":"-")+Math.pow(10,Math.max(0,O)).toString().substr(1)+p}var E=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,C=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,D={},P={};function x(M,z,b,p){var O=p;"string"==typeof p&&(O=function(){return this[p]()}),M&&(P[M]=O),z&&(P[z[0]]=function(){return w(O.apply(this,arguments),z[1],z[2])}),b&&(P[b]=function(){return this.localeData().ordinal(O.apply(this,arguments),M)})}function j(M){return M.match(/\[[\s\S]/)?M.replace(/^\[|\]$/g,""):M.replace(/\\/g,"")}function I(M){var z,b,p=M.match(E);for(z=0,b=p.length;z<b;z++)P[p[z]]?p[z]=P[p[z]]:p[z]=j(p[z]);return function(z){var O,o="";for(O=0;O<b;O++)o+=T(p[O])?p[O].call(z,M):p[O];return o}}function H(M,z){return M.isValid()?(z=Y(z,M.localeData()),D[z]=D[z]||I(z),D[z](M)):M.localeData().invalidDate()}function Y(M,z){var b=5;function p(M){return z.longDateFormat(M)||M}for(C.lastIndex=0;b>=0&&C.test(M);)M=M.replace(C,p),C.lastIndex=0,b-=1;return M}var F={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function U(M){var z=this._longDateFormat[M],b=this._longDateFormat[M.toUpperCase()];return z||!b?z:(this._longDateFormat[M]=b.match(E).map((function(M){return"MMMM"===M||"MM"===M||"DD"===M||"dddd"===M?M.slice(1):M})).join(""),this._longDateFormat[M])}var G="Invalid date";function V(){return this._invalidDate}var K="%d",Q=/\d{1,2}/;function J(M){return this._ordinal.replace("%d",M)}var Z={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function $(M,z,b,p){var O=this._relativeTime[b];return T(O)?O(M,z,b,p):O.replace(/%d/i,M)}function MM(M,z){var b=this._relativeTime[M>0?"future":"past"];return T(b)?b(z):b.replace(/%s/i,z)}var zM={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function bM(M){return"string"==typeof M?zM[M]||zM[M.toLowerCase()]:void 0}function pM(M){var z,b,p={};for(b in M)A(M,b)&&(z=bM(b))&&(p[z]=M[b]);return p}var OM={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function oM(M){var z,b=[];for(z in M)A(M,z)&&b.push({unit:z,priority:OM[z]});return b.sort((function(M,z){return M.priority-z.priority})),b}var cM,AM=/\d/,qM=/\d\d/,eM=/\d{3}/,nM=/\d{4}/,aM=/[+-]?\d{6}/,WM=/\d\d?/,tM=/\d\d\d\d?/,dM=/\d\d\d\d\d\d?/,iM=/\d{1,3}/,rM=/\d{1,4}/,sM=/[+-]?\d{1,6}/,uM=/\d+/,fM=/[+-]?\d+/,RM=/Z|[+-]\d\d:?\d\d/gi,lM=/Z|[+-]\d\d(?::?\d\d)?/gi,LM=/[+-]?\d+(\.\d{1,3})?/,NM=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,BM=/^[1-9]\d?/,XM=/^([1-9]\d|\d)/;function hM(M,z,b){cM[M]=T(z)?z:function(M,p){return M&&b?b:z}}function mM(M,z){return A(cM,M)?cM[M](z._strict,z._locale):new RegExp(gM(M))}function gM(M){return TM(M.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(M,z,b,p,O){return z||b||p||O})))}function TM(M){return M.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function yM(M){return M<0?Math.ceil(M)||0:Math.floor(M)}function _M(M){var z=+M,b=0;return 0!==z&&isFinite(z)&&(b=yM(z)),b}cM={};var SM={};function vM(M,z){var b,p,O=z;for("string"==typeof M&&(M=[M]),n(z)&&(O=function(M,b){b[z]=_M(M)}),p=M.length,b=0;b<p;b++)SM[M[b]]=O}function kM(M,z){vM(M,(function(M,b,p,O){p._w=p._w||{},z(M,p._w,p,O)}))}function wM(M,z,b){null!=z&&A(SM,M)&&SM[M](z,b._a,b,M)}function EM(M){return M%4==0&&M%100!=0||M%400==0}var CM=0,DM=1,PM=2,jM=3,IM=4,HM=5,YM=6,FM=7,UM=8;function GM(M){return EM(M)?366:365}x("Y",0,0,(function(){var M=this.year();return M<=9999?w(M,4):"+"+M})),x(0,["YY",2],0,(function(){return this.year()%100})),x(0,["YYYY",4],0,"year"),x(0,["YYYYY",5],0,"year"),x(0,["YYYYYY",6,!0],0,"year"),hM("Y",fM),hM("YY",WM,qM),hM("YYYY",rM,nM),hM("YYYYY",sM,aM),hM("YYYYYY",sM,aM),vM(["YYYYY","YYYYYY"],CM),vM("YYYY",(function(M,z){z[CM]=2===M.length?p.parseTwoDigitYear(M):_M(M)})),vM("YY",(function(M,z){z[CM]=p.parseTwoDigitYear(M)})),vM("Y",(function(M,z){z[CM]=parseInt(M,10)})),p.parseTwoDigitYear=function(M){return _M(M)+(_M(M)>68?1900:2e3)};var VM,KM=JM("FullYear",!0);function QM(){return EM(this.year())}function JM(M,z){return function(b){return null!=b?($M(this,M,b),p.updateOffset(this,z),this):ZM(this,M)}}function ZM(M,z){if(!M.isValid())return NaN;var b=M._d,p=M._isUTC;switch(z){case"Milliseconds":return p?b.getUTCMilliseconds():b.getMilliseconds();case"Seconds":return p?b.getUTCSeconds():b.getSeconds();case"Minutes":return p?b.getUTCMinutes():b.getMinutes();case"Hours":return p?b.getUTCHours():b.getHours();case"Date":return p?b.getUTCDate():b.getDate();case"Day":return p?b.getUTCDay():b.getDay();case"Month":return p?b.getUTCMonth():b.getMonth();case"FullYear":return p?b.getUTCFullYear():b.getFullYear();default:return NaN}}function $M(M,z,b){var p,O,o,c,A;if(M.isValid()&&!isNaN(b)){switch(p=M._d,O=M._isUTC,z){case"Milliseconds":return void(O?p.setUTCMilliseconds(b):p.setMilliseconds(b));case"Seconds":return void(O?p.setUTCSeconds(b):p.setSeconds(b));case"Minutes":return void(O?p.setUTCMinutes(b):p.setMinutes(b));case"Hours":return void(O?p.setUTCHours(b):p.setHours(b));case"Date":return void(O?p.setUTCDate(b):p.setDate(b));case"FullYear":break;default:return}o=b,c=M.month(),A=29!==(A=M.date())||1!==c||EM(o)?A:28,O?p.setUTCFullYear(o,c,A):p.setFullYear(o,c,A)}}function Mz(M){return T(this[M=bM(M)])?this[M]():this}function zz(M,z){if("object"==typeof M){var b,p=oM(M=pM(M)),O=p.length;for(b=0;b<O;b++)this[p[b].unit](M[p[b].unit])}else if(T(this[M=bM(M)]))return this[M](z);return this}function bz(M,z){return(M%z+z)%z}function pz(M,z){if(isNaN(M)||isNaN(z))return NaN;var b=bz(z,12);return M+=(z-b)/12,1===b?EM(M)?29:28:31-b%7%2}VM=Array.prototype.indexOf?Array.prototype.indexOf:function(M){var z;for(z=0;z<this.length;++z)if(this[z]===M)return z;return-1},x("M",["MM",2],"Mo",(function(){return this.month()+1})),x("MMM",0,0,(function(M){return this.localeData().monthsShort(this,M)})),x("MMMM",0,0,(function(M){return this.localeData().months(this,M)})),hM("M",WM,BM),hM("MM",WM,qM),hM("MMM",(function(M,z){return z.monthsShortRegex(M)})),hM("MMMM",(function(M,z){return z.monthsRegex(M)})),vM(["M","MM"],(function(M,z){z[DM]=_M(M)-1})),vM(["MMM","MMMM"],(function(M,z,b,p){var O=b._locale.monthsParse(M,p,b._strict);null!=O?z[DM]=O:r(b).invalidMonth=M}));var Oz="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),oz="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),cz=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Az=NM,qz=NM;function ez(M,z){return M?o(this._months)?this._months[M.month()]:this._months[(this._months.isFormat||cz).test(z)?"format":"standalone"][M.month()]:o(this._months)?this._months:this._months.standalone}function nz(M,z){return M?o(this._monthsShort)?this._monthsShort[M.month()]:this._monthsShort[cz.test(z)?"format":"standalone"][M.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function az(M,z,b){var p,O,o,c=M.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],p=0;p<12;++p)o=d([2e3,p]),this._shortMonthsParse[p]=this.monthsShort(o,"").toLocaleLowerCase(),this._longMonthsParse[p]=this.months(o,"").toLocaleLowerCase();return b?"MMM"===z?-1!==(O=VM.call(this._shortMonthsParse,c))?O:null:-1!==(O=VM.call(this._longMonthsParse,c))?O:null:"MMM"===z?-1!==(O=VM.call(this._shortMonthsParse,c))||-1!==(O=VM.call(this._longMonthsParse,c))?O:null:-1!==(O=VM.call(this._longMonthsParse,c))||-1!==(O=VM.call(this._shortMonthsParse,c))?O:null}function Wz(M,z,b){var p,O,o;if(this._monthsParseExact)return az.call(this,M,z,b);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),p=0;p<12;p++){if(O=d([2e3,p]),b&&!this._longMonthsParse[p]&&(this._longMonthsParse[p]=new RegExp("^"+this.months(O,"").replace(".","")+"$","i"),this._shortMonthsParse[p]=new RegExp("^"+this.monthsShort(O,"").replace(".","")+"$","i")),b||this._monthsParse[p]||(o="^"+this.months(O,"")+"|^"+this.monthsShort(O,""),this._monthsParse[p]=new RegExp(o.replace(".",""),"i")),b&&"MMMM"===z&&this._longMonthsParse[p].test(M))return p;if(b&&"MMM"===z&&this._shortMonthsParse[p].test(M))return p;if(!b&&this._monthsParse[p].test(M))return p}}function tz(M,z){if(!M.isValid())return M;if("string"==typeof z)if(/^\d+$/.test(z))z=_M(z);else if(!n(z=M.localeData().monthsParse(z)))return M;var b=z,p=M.date();return p=p<29?p:Math.min(p,pz(M.year(),b)),M._isUTC?M._d.setUTCMonth(b,p):M._d.setMonth(b,p),M}function dz(M){return null!=M?(tz(this,M),p.updateOffset(this,!0),this):ZM(this,"Month")}function iz(){return pz(this.year(),this.month())}function rz(M){return this._monthsParseExact?(A(this,"_monthsRegex")||uz.call(this),M?this._monthsShortStrictRegex:this._monthsShortRegex):(A(this,"_monthsShortRegex")||(this._monthsShortRegex=Az),this._monthsShortStrictRegex&&M?this._monthsShortStrictRegex:this._monthsShortRegex)}function sz(M){return this._monthsParseExact?(A(this,"_monthsRegex")||uz.call(this),M?this._monthsStrictRegex:this._monthsRegex):(A(this,"_monthsRegex")||(this._monthsRegex=qz),this._monthsStrictRegex&&M?this._monthsStrictRegex:this._monthsRegex)}function uz(){function M(M,z){return z.length-M.length}var z,b,p,O,o=[],c=[],A=[];for(z=0;z<12;z++)b=d([2e3,z]),p=TM(this.monthsShort(b,"")),O=TM(this.months(b,"")),o.push(p),c.push(O),A.push(O),A.push(p);o.sort(M),c.sort(M),A.sort(M),this._monthsRegex=new RegExp("^("+A.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function fz(M,z,b,p,O,o,c){var A;return M<100&&M>=0?(A=new Date(M+400,z,b,p,O,o,c),isFinite(A.getFullYear())&&A.setFullYear(M)):A=new Date(M,z,b,p,O,o,c),A}function Rz(M){var z,b;return M<100&&M>=0?((b=Array.prototype.slice.call(arguments))[0]=M+400,z=new Date(Date.UTC.apply(null,b)),isFinite(z.getUTCFullYear())&&z.setUTCFullYear(M)):z=new Date(Date.UTC.apply(null,arguments)),z}function lz(M,z,b){var p=7+z-b;return-(7+Rz(M,0,p).getUTCDay()-z)%7+p-1}function Lz(M,z,b,p,O){var o,c,A=1+7*(z-1)+(7+b-p)%7+lz(M,p,O);return A<=0?c=GM(o=M-1)+A:A>GM(M)?(o=M+1,c=A-GM(M)):(o=M,c=A),{year:o,dayOfYear:c}}function Nz(M,z,b){var p,O,o=lz(M.year(),z,b),c=Math.floor((M.dayOfYear()-o-1)/7)+1;return c<1?p=c+Bz(O=M.year()-1,z,b):c>Bz(M.year(),z,b)?(p=c-Bz(M.year(),z,b),O=M.year()+1):(O=M.year(),p=c),{week:p,year:O}}function Bz(M,z,b){var p=lz(M,z,b),O=lz(M+1,z,b);return(GM(M)-p+O)/7}function Xz(M){return Nz(M,this._week.dow,this._week.doy).week}x("w",["ww",2],"wo","week"),x("W",["WW",2],"Wo","isoWeek"),hM("w",WM,BM),hM("ww",WM,qM),hM("W",WM,BM),hM("WW",WM,qM),kM(["w","ww","W","WW"],(function(M,z,b,p){z[p.substr(0,1)]=_M(M)}));var hz={dow:0,doy:6};function mz(){return this._week.dow}function gz(){return this._week.doy}function Tz(M){var z=this.localeData().week(this);return null==M?z:this.add(7*(M-z),"d")}function yz(M){var z=Nz(this,1,4).week;return null==M?z:this.add(7*(M-z),"d")}function _z(M,z){return"string"!=typeof M?M:isNaN(M)?"number"==typeof(M=z.weekdaysParse(M))?M:null:parseInt(M,10)}function Sz(M,z){return"string"==typeof M?z.weekdaysParse(M)%7||7:isNaN(M)?null:M}function vz(M,z){return M.slice(z,7).concat(M.slice(0,z))}x("d",0,"do","day"),x("dd",0,0,(function(M){return this.localeData().weekdaysMin(this,M)})),x("ddd",0,0,(function(M){return this.localeData().weekdaysShort(this,M)})),x("dddd",0,0,(function(M){return this.localeData().weekdays(this,M)})),x("e",0,0,"weekday"),x("E",0,0,"isoWeekday"),hM("d",WM),hM("e",WM),hM("E",WM),hM("dd",(function(M,z){return z.weekdaysMinRegex(M)})),hM("ddd",(function(M,z){return z.weekdaysShortRegex(M)})),hM("dddd",(function(M,z){return z.weekdaysRegex(M)})),kM(["dd","ddd","dddd"],(function(M,z,b,p){var O=b._locale.weekdaysParse(M,p,b._strict);null!=O?z.d=O:r(b).invalidWeekday=M})),kM(["d","e","E"],(function(M,z,b,p){z[p]=_M(M)}));var kz="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),wz="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ez="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Cz=NM,Dz=NM,Pz=NM;function xz(M,z){var b=o(this._weekdays)?this._weekdays:this._weekdays[M&&!0!==M&&this._weekdays.isFormat.test(z)?"format":"standalone"];return!0===M?vz(b,this._week.dow):M?b[M.day()]:b}function jz(M){return!0===M?vz(this._weekdaysShort,this._week.dow):M?this._weekdaysShort[M.day()]:this._weekdaysShort}function Iz(M){return!0===M?vz(this._weekdaysMin,this._week.dow):M?this._weekdaysMin[M.day()]:this._weekdaysMin}function Hz(M,z,b){var p,O,o,c=M.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],p=0;p<7;++p)o=d([2e3,1]).day(p),this._minWeekdaysParse[p]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[p]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[p]=this.weekdays(o,"").toLocaleLowerCase();return b?"dddd"===z?-1!==(O=VM.call(this._weekdaysParse,c))?O:null:"ddd"===z?-1!==(O=VM.call(this._shortWeekdaysParse,c))?O:null:-1!==(O=VM.call(this._minWeekdaysParse,c))?O:null:"dddd"===z?-1!==(O=VM.call(this._weekdaysParse,c))||-1!==(O=VM.call(this._shortWeekdaysParse,c))||-1!==(O=VM.call(this._minWeekdaysParse,c))?O:null:"ddd"===z?-1!==(O=VM.call(this._shortWeekdaysParse,c))||-1!==(O=VM.call(this._weekdaysParse,c))||-1!==(O=VM.call(this._minWeekdaysParse,c))?O:null:-1!==(O=VM.call(this._minWeekdaysParse,c))||-1!==(O=VM.call(this._weekdaysParse,c))||-1!==(O=VM.call(this._shortWeekdaysParse,c))?O:null}function Yz(M,z,b){var p,O,o;if(this._weekdaysParseExact)return Hz.call(this,M,z,b);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),p=0;p<7;p++){if(O=d([2e3,1]).day(p),b&&!this._fullWeekdaysParse[p]&&(this._fullWeekdaysParse[p]=new RegExp("^"+this.weekdays(O,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[p]=new RegExp("^"+this.weekdaysShort(O,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[p]=new RegExp("^"+this.weekdaysMin(O,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[p]||(o="^"+this.weekdays(O,"")+"|^"+this.weekdaysShort(O,"")+"|^"+this.weekdaysMin(O,""),this._weekdaysParse[p]=new RegExp(o.replace(".",""),"i")),b&&"dddd"===z&&this._fullWeekdaysParse[p].test(M))return p;if(b&&"ddd"===z&&this._shortWeekdaysParse[p].test(M))return p;if(b&&"dd"===z&&this._minWeekdaysParse[p].test(M))return p;if(!b&&this._weekdaysParse[p].test(M))return p}}function Fz(M){if(!this.isValid())return null!=M?this:NaN;var z=ZM(this,"Day");return null!=M?(M=_z(M,this.localeData()),this.add(M-z,"d")):z}function Uz(M){if(!this.isValid())return null!=M?this:NaN;var z=(this.day()+7-this.localeData()._week.dow)%7;return null==M?z:this.add(M-z,"d")}function Gz(M){if(!this.isValid())return null!=M?this:NaN;if(null!=M){var z=Sz(M,this.localeData());return this.day(this.day()%7?z:z-7)}return this.day()||7}function Vz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysStrictRegex:this._weekdaysRegex):(A(this,"_weekdaysRegex")||(this._weekdaysRegex=Cz),this._weekdaysStrictRegex&&M?this._weekdaysStrictRegex:this._weekdaysRegex)}function Kz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(A(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Dz),this._weekdaysShortStrictRegex&&M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Qz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(A(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pz),this._weekdaysMinStrictRegex&&M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jz(){function M(M,z){return z.length-M.length}var z,b,p,O,o,c=[],A=[],q=[],e=[];for(z=0;z<7;z++)b=d([2e3,1]).day(z),p=TM(this.weekdaysMin(b,"")),O=TM(this.weekdaysShort(b,"")),o=TM(this.weekdays(b,"")),c.push(p),A.push(O),q.push(o),e.push(p),e.push(O),e.push(o);c.sort(M),A.sort(M),q.sort(M),e.sort(M),this._weekdaysRegex=new RegExp("^("+e.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+q.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+A.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+c.join("|")+")","i")}function Zz(){return this.hours()%12||12}function $z(){return this.hours()||24}function Mb(M,z){x(M,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),z)}))}function zb(M,z){return z._meridiemParse}function bb(M){return"p"===(M+"").toLowerCase().charAt(0)}x("H",["HH",2],0,"hour"),x("h",["hh",2],0,Zz),x("k",["kk",2],0,$z),x("hmm",0,0,(function(){return""+Zz.apply(this)+w(this.minutes(),2)})),x("hmmss",0,0,(function(){return""+Zz.apply(this)+w(this.minutes(),2)+w(this.seconds(),2)})),x("Hmm",0,0,(function(){return""+this.hours()+w(this.minutes(),2)})),x("Hmmss",0,0,(function(){return""+this.hours()+w(this.minutes(),2)+w(this.seconds(),2)})),Mb("a",!0),Mb("A",!1),hM("a",zb),hM("A",zb),hM("H",WM,XM),hM("h",WM,BM),hM("k",WM,BM),hM("HH",WM,qM),hM("hh",WM,qM),hM("kk",WM,qM),hM("hmm",tM),hM("hmmss",dM),hM("Hmm",tM),hM("Hmmss",dM),vM(["H","HH"],jM),vM(["k","kk"],(function(M,z,b){var p=_M(M);z[jM]=24===p?0:p})),vM(["a","A"],(function(M,z,b){b._isPm=b._locale.isPM(M),b._meridiem=M})),vM(["h","hh"],(function(M,z,b){z[jM]=_M(M),r(b).bigHour=!0})),vM("hmm",(function(M,z,b){var p=M.length-2;z[jM]=_M(M.substr(0,p)),z[IM]=_M(M.substr(p)),r(b).bigHour=!0})),vM("hmmss",(function(M,z,b){var p=M.length-4,O=M.length-2;z[jM]=_M(M.substr(0,p)),z[IM]=_M(M.substr(p,2)),z[HM]=_M(M.substr(O)),r(b).bigHour=!0})),vM("Hmm",(function(M,z,b){var p=M.length-2;z[jM]=_M(M.substr(0,p)),z[IM]=_M(M.substr(p))})),vM("Hmmss",(function(M,z,b){var p=M.length-4,O=M.length-2;z[jM]=_M(M.substr(0,p)),z[IM]=_M(M.substr(p,2)),z[HM]=_M(M.substr(O))}));var pb=/[ap]\.?m?\.?/i,Ob=JM("Hours",!0);function ob(M,z,b){return M>11?b?"pm":"PM":b?"am":"AM"}var cb,Ab={calendar:v,longDateFormat:F,invalidDate:G,ordinal:K,dayOfMonthOrdinalParse:Q,relativeTime:Z,months:Oz,monthsShort:oz,week:hz,weekdays:kz,weekdaysMin:Ez,weekdaysShort:wz,meridiemParse:pb},qb={},eb={};function nb(M,z){var b,p=Math.min(M.length,z.length);for(b=0;b<p;b+=1)if(M[b]!==z[b])return b;return p}function ab(M){return M?M.toLowerCase().replace("_","-"):M}function Wb(M){for(var z,b,p,O,o=0;o<M.length;){for(z=(O=ab(M[o]).split("-")).length,b=(b=ab(M[o+1]))?b.split("-"):null;z>0;){if(p=db(O.slice(0,z).join("-")))return p;if(b&&b.length>=z&&nb(O,b)>=z-1)break;z--}o++}return cb}function tb(M){return!(!M||!M.match("^[^/\\\\]*$"))}function db(z){var b=null;if(void 0===qb[z]&&M&&M.exports&&tb(z))try{b=cb._abbr,xM(),ib(b)}catch(M){qb[z]=null}return qb[z]}function ib(M,z){var b;return M&&((b=e(z)?ub(M):rb(M,z))?cb=b:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+M+" not found. Did you forget to load it?")),cb._abbr}function rb(M,z){if(null!==z){var b,p=Ab;if(z.abbr=M,null!=qb[M])g("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),p=qb[M]._config;else if(null!=z.parentLocale)if(null!=qb[z.parentLocale])p=qb[z.parentLocale]._config;else{if(null==(b=db(z.parentLocale)))return eb[z.parentLocale]||(eb[z.parentLocale]=[]),eb[z.parentLocale].push({name:M,config:z}),null;p=b._config}return qb[M]=new S(_(p,z)),eb[M]&&eb[M].forEach((function(M){rb(M.name,M.config)})),ib(M),qb[M]}return delete qb[M],null}function sb(M,z){if(null!=z){var b,p,O=Ab;null!=qb[M]&&null!=qb[M].parentLocale?qb[M].set(_(qb[M]._config,z)):(null!=(p=db(M))&&(O=p._config),z=_(O,z),null==p&&(z.abbr=M),(b=new S(z)).parentLocale=qb[M],qb[M]=b),ib(M)}else null!=qb[M]&&(null!=qb[M].parentLocale?(qb[M]=qb[M].parentLocale,M===ib()&&ib(M)):null!=qb[M]&&delete qb[M]);return qb[M]}function ub(M){var z;if(M&&M._locale&&M._locale._abbr&&(M=M._locale._abbr),!M)return cb;if(!o(M)){if(z=db(M))return z;M=[M]}return Wb(M)}function fb(){return h(qb)}function Rb(M){var z,b=M._a;return b&&-2===r(M).overflow&&(z=b[DM]<0||b[DM]>11?DM:b[PM]<1||b[PM]>pz(b[CM],b[DM])?PM:b[jM]<0||b[jM]>24||24===b[jM]&&(0!==b[IM]||0!==b[HM]||0!==b[YM])?jM:b[IM]<0||b[IM]>59?IM:b[HM]<0||b[HM]>59?HM:b[YM]<0||b[YM]>999?YM:-1,r(M)._overflowDayOfYear&&(z<CM||z>PM)&&(z=PM),r(M)._overflowWeeks&&-1===z&&(z=FM),r(M)._overflowWeekday&&-1===z&&(z=UM),r(M).overflow=z),M}var lb=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Lb=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nb=/Z|[+-]\d\d(?::?\d\d)?/,Bb=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Xb=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],hb=/^\/?Date\((-?\d+)/i,mb=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,gb={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Tb(M){var z,b,p,O,o,c,A=M._i,q=lb.exec(A)||Lb.exec(A),e=Bb.length,n=Xb.length;if(q){for(r(M).iso=!0,z=0,b=e;z<b;z++)if(Bb[z][1].exec(q[1])){O=Bb[z][0],p=!1!==Bb[z][2];break}if(null==O)return void(M._isValid=!1);if(q[3]){for(z=0,b=n;z<b;z++)if(Xb[z][1].exec(q[3])){o=(q[2]||" ")+Xb[z][0];break}if(null==o)return void(M._isValid=!1)}if(!p&&null!=o)return void(M._isValid=!1);if(q[4]){if(!Nb.exec(q[4]))return void(M._isValid=!1);c="Z"}M._f=O+(o||"")+(c||""),jb(M)}else M._isValid=!1}function yb(M,z,b,p,O,o){var c=[_b(M),oz.indexOf(z),parseInt(b,10),parseInt(p,10),parseInt(O,10)];return o&&c.push(parseInt(o,10)),c}function _b(M){var z=parseInt(M,10);return z<=49?2e3+z:z<=999?1900+z:z}function Sb(M){return M.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function vb(M,z,b){return!M||wz.indexOf(M)===new Date(z[0],z[1],z[2]).getDay()||(r(b).weekdayMismatch=!0,b._isValid=!1,!1)}function kb(M,z,b){if(M)return gb[M];if(z)return 0;var p=parseInt(b,10),O=p%100;return(p-O)/100*60+O}function wb(M){var z,b=mb.exec(Sb(M._i));if(b){if(z=yb(b[4],b[3],b[2],b[5],b[6],b[7]),!vb(b[1],z,M))return;M._a=z,M._tzm=kb(b[8],b[9],b[10]),M._d=Rz.apply(null,M._a),M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),r(M).rfc2822=!0}else M._isValid=!1}function Eb(M){var z=hb.exec(M._i);null===z?(Tb(M),!1===M._isValid&&(delete M._isValid,wb(M),!1===M._isValid&&(delete M._isValid,M._strict?M._isValid=!1:p.createFromInputFallback(M)))):M._d=new Date(+z[1])}function Cb(M,z,b){return null!=M?M:null!=z?z:b}function Db(M){var z=new Date(p.now());return M._useUTC?[z.getUTCFullYear(),z.getUTCMonth(),z.getUTCDate()]:[z.getFullYear(),z.getMonth(),z.getDate()]}function Pb(M){var z,b,p,O,o,c=[];if(!M._d){for(p=Db(M),M._w&&null==M._a[PM]&&null==M._a[DM]&&xb(M),null!=M._dayOfYear&&(o=Cb(M._a[CM],p[CM]),(M._dayOfYear>GM(o)||0===M._dayOfYear)&&(r(M)._overflowDayOfYear=!0),b=Rz(o,0,M._dayOfYear),M._a[DM]=b.getUTCMonth(),M._a[PM]=b.getUTCDate()),z=0;z<3&&null==M._a[z];++z)M._a[z]=c[z]=p[z];for(;z<7;z++)M._a[z]=c[z]=null==M._a[z]?2===z?1:0:M._a[z];24===M._a[jM]&&0===M._a[IM]&&0===M._a[HM]&&0===M._a[YM]&&(M._nextDay=!0,M._a[jM]=0),M._d=(M._useUTC?Rz:fz).apply(null,c),O=M._useUTC?M._d.getUTCDay():M._d.getDay(),null!=M._tzm&&M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),M._nextDay&&(M._a[jM]=24),M._w&&void 0!==M._w.d&&M._w.d!==O&&(r(M).weekdayMismatch=!0)}}function xb(M){var z,b,p,O,o,c,A,q,e;null!=(z=M._w).GG||null!=z.W||null!=z.E?(o=1,c=4,b=Cb(z.GG,M._a[CM],Nz(Kb(),1,4).year),p=Cb(z.W,1),((O=Cb(z.E,1))<1||O>7)&&(q=!0)):(o=M._locale._week.dow,c=M._locale._week.doy,e=Nz(Kb(),o,c),b=Cb(z.gg,M._a[CM],e.year),p=Cb(z.w,e.week),null!=z.d?((O=z.d)<0||O>6)&&(q=!0):null!=z.e?(O=z.e+o,(z.e<0||z.e>6)&&(q=!0)):O=o),p<1||p>Bz(b,o,c)?r(M)._overflowWeeks=!0:null!=q?r(M)._overflowWeekday=!0:(A=Lz(b,p,O,o,c),M._a[CM]=A.year,M._dayOfYear=A.dayOfYear)}function jb(M){if(M._f!==p.ISO_8601)if(M._f!==p.RFC_2822){M._a=[],r(M).empty=!0;var z,b,O,o,c,A,q,e=""+M._i,n=e.length,a=0;for(q=(O=Y(M._f,M._locale).match(E)||[]).length,z=0;z<q;z++)o=O[z],(b=(e.match(mM(o,M))||[])[0])&&((c=e.substr(0,e.indexOf(b))).length>0&&r(M).unusedInput.push(c),e=e.slice(e.indexOf(b)+b.length),a+=b.length),P[o]?(b?r(M).empty=!1:r(M).unusedTokens.push(o),wM(o,b,M)):M._strict&&!b&&r(M).unusedTokens.push(o);r(M).charsLeftOver=n-a,e.length>0&&r(M).unusedInput.push(e),M._a[jM]<=12&&!0===r(M).bigHour&&M._a[jM]>0&&(r(M).bigHour=void 0),r(M).parsedDateParts=M._a.slice(0),r(M).meridiem=M._meridiem,M._a[jM]=Ib(M._locale,M._a[jM],M._meridiem),null!==(A=r(M).era)&&(M._a[CM]=M._locale.erasConvertYear(A,M._a[CM])),Pb(M),Rb(M)}else wb(M);else Tb(M)}function Ib(M,z,b){var p;return null==b?z:null!=M.meridiemHour?M.meridiemHour(z,b):null!=M.isPM?((p=M.isPM(b))&&z<12&&(z+=12),p||12!==z||(z=0),z):z}function Hb(M){var z,b,p,O,o,c,A=!1,q=M._f.length;if(0===q)return r(M).invalidFormat=!0,void(M._d=new Date(NaN));for(O=0;O<q;O++)o=0,c=!1,z=l({},M),null!=M._useUTC&&(z._useUTC=M._useUTC),z._f=M._f[O],jb(z),s(z)&&(c=!0),o+=r(z).charsLeftOver,o+=10*r(z).unusedTokens.length,r(z).score=o,A?o<p&&(p=o,b=z):(null==p||o<p||c)&&(p=o,b=z,c&&(A=!0));t(M,b||z)}function Yb(M){if(!M._d){var z=pM(M._i),b=void 0===z.day?z.date:z.day;M._a=W([z.year,z.month,b,z.hour,z.minute,z.second,z.millisecond],(function(M){return M&&parseInt(M,10)})),Pb(M)}}function Fb(M){var z=new L(Rb(Ub(M)));return z._nextDay&&(z.add(1,"d"),z._nextDay=void 0),z}function Ub(M){var z=M._i,b=M._f;return M._locale=M._locale||ub(M._l),null===z||void 0===b&&""===z?u({nullInput:!0}):("string"==typeof z&&(M._i=z=M._locale.preparse(z)),N(z)?new L(Rb(z)):(a(z)?M._d=z:o(b)?Hb(M):b?jb(M):Gb(M),s(M)||(M._d=null),M))}function Gb(M){var z=M._i;e(z)?M._d=new Date(p.now()):a(z)?M._d=new Date(z.valueOf()):"string"==typeof z?Eb(M):o(z)?(M._a=W(z.slice(0),(function(M){return parseInt(M,10)})),Pb(M)):c(z)?Yb(M):n(z)?M._d=new Date(z):p.createFromInputFallback(M)}function Vb(M,z,b,p,O){var A={};return!0!==z&&!1!==z||(p=z,z=void 0),!0!==b&&!1!==b||(p=b,b=void 0),(c(M)&&q(M)||o(M)&&0===M.length)&&(M=void 0),A._isAMomentObject=!0,A._useUTC=A._isUTC=O,A._l=b,A._i=M,A._f=z,A._strict=p,Fb(A)}function Kb(M,z,b,p){return Vb(M,z,b,p,!1)}p.createFromInputFallback=X("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(M){M._d=new Date(M._i+(M._useUTC?" UTC":""))})),p.ISO_8601=function(){},p.RFC_2822=function(){};var Qb=X("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var M=Kb.apply(null,arguments);return this.isValid()&&M.isValid()?M<this?this:M:u()})),Jb=X("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var M=Kb.apply(null,arguments);return this.isValid()&&M.isValid()?M>this?this:M:u()}));function Zb(M,z){var b,p;if(1===z.length&&o(z[0])&&(z=z[0]),!z.length)return Kb();for(b=z[0],p=1;p<z.length;++p)z[p].isValid()&&!z[p][M](b)||(b=z[p]);return b}function $b(){return Zb("isBefore",[].slice.call(arguments,0))}function Mp(){return Zb("isAfter",[].slice.call(arguments,0))}var zp=function(){return Date.now?Date.now():+new Date},bp=["year","quarter","month","week","day","hour","minute","second","millisecond"];function pp(M){var z,b,p=!1,O=bp.length;for(z in M)if(A(M,z)&&(-1===VM.call(bp,z)||null!=M[z]&&isNaN(M[z])))return!1;for(b=0;b<O;++b)if(M[bp[b]]){if(p)return!1;parseFloat(M[bp[b]])!==_M(M[bp[b]])&&(p=!0)}return!0}function Op(){return this._isValid}function op(){return gp(NaN)}function cp(M){var z=pM(M),b=z.year||0,p=z.quarter||0,O=z.month||0,o=z.week||z.isoWeek||0,c=z.day||0,A=z.hour||0,q=z.minute||0,e=z.second||0,n=z.millisecond||0;this._isValid=pp(z),this._milliseconds=+n+1e3*e+6e4*q+1e3*A*60*60,this._days=+c+7*o,this._months=+O+3*p+12*b,this._data={},this._locale=ub(),this._bubble()}function Ap(M){return M instanceof cp}function qp(M){return M<0?-1*Math.round(-1*M):Math.round(M)}function ep(M,z,b){var p,O=Math.min(M.length,z.length),o=Math.abs(M.length-z.length),c=0;for(p=0;p<O;p++)(b&&M[p]!==z[p]||!b&&_M(M[p])!==_M(z[p]))&&c++;return c+o}function np(M,z){x(M,0,0,(function(){var M=this.utcOffset(),b="+";return M<0&&(M=-M,b="-"),b+w(~~(M/60),2)+z+w(~~M%60,2)}))}np("Z",":"),np("ZZ",""),hM("Z",lM),hM("ZZ",lM),vM(["Z","ZZ"],(function(M,z,b){b._useUTC=!0,b._tzm=Wp(lM,M)}));var ap=/([\+\-]|\d\d)/gi;function Wp(M,z){var b,p,O=(z||"").match(M);return null===O?null:0===(p=60*(b=((O[O.length-1]||[])+"").match(ap)||["-",0,0])[1]+_M(b[2]))?0:"+"===b[0]?p:-p}function tp(M,z){var b,O;return z._isUTC?(b=z.clone(),O=(N(M)||a(M)?M.valueOf():Kb(M).valueOf())-b.valueOf(),b._d.setTime(b._d.valueOf()+O),p.updateOffset(b,!1),b):Kb(M).local()}function dp(M){return-Math.round(M._d.getTimezoneOffset())}function ip(M,z,b){var O,o=this._offset||0;if(!this.isValid())return null!=M?this:NaN;if(null!=M){if("string"==typeof M){if(null===(M=Wp(lM,M)))return this}else Math.abs(M)<16&&!b&&(M*=60);return!this._isUTC&&z&&(O=dp(this)),this._offset=M,this._isUTC=!0,null!=O&&this.add(O,"m"),o!==M&&(!z||this._changeInProgress?vp(this,gp(M-o,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,p.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?o:dp(this)}function rp(M,z){return null!=M?("string"!=typeof M&&(M=-M),this.utcOffset(M,z),this):-this.utcOffset()}function sp(M){return this.utcOffset(0,M)}function up(M){return this._isUTC&&(this.utcOffset(0,M),this._isUTC=!1,M&&this.subtract(dp(this),"m")),this}function fp(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var M=Wp(RM,this._i);null!=M?this.utcOffset(M):this.utcOffset(0,!0)}return this}function Rp(M){return!!this.isValid()&&(M=M?Kb(M).utcOffset():0,(this.utcOffset()-M)%60==0)}function lp(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Lp(){if(!e(this._isDSTShifted))return this._isDSTShifted;var M,z={};return l(z,this),(z=Ub(z))._a?(M=z._isUTC?d(z._a):Kb(z._a),this._isDSTShifted=this.isValid()&&ep(z._a,M.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Np(){return!!this.isValid()&&!this._isUTC}function Bp(){return!!this.isValid()&&this._isUTC}function Xp(){return!!this.isValid()&&this._isUTC&&0===this._offset}p.updateOffset=function(){};var hp=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,mp=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function gp(M,z){var b,p,O,o=M,c=null;return Ap(M)?o={ms:M._milliseconds,d:M._days,M:M._months}:n(M)||!isNaN(+M)?(o={},z?o[z]=+M:o.milliseconds=+M):(c=hp.exec(M))?(b="-"===c[1]?-1:1,o={y:0,d:_M(c[PM])*b,h:_M(c[jM])*b,m:_M(c[IM])*b,s:_M(c[HM])*b,ms:_M(qp(1e3*c[YM]))*b}):(c=mp.exec(M))?(b="-"===c[1]?-1:1,o={y:Tp(c[2],b),M:Tp(c[3],b),w:Tp(c[4],b),d:Tp(c[5],b),h:Tp(c[6],b),m:Tp(c[7],b),s:Tp(c[8],b)}):null==o?o={}:"object"==typeof o&&("from"in o||"to"in o)&&(O=_p(Kb(o.from),Kb(o.to)),(o={}).ms=O.milliseconds,o.M=O.months),p=new cp(o),Ap(M)&&A(M,"_locale")&&(p._locale=M._locale),Ap(M)&&A(M,"_isValid")&&(p._isValid=M._isValid),p}function Tp(M,z){var b=M&&parseFloat(M.replace(",","."));return(isNaN(b)?0:b)*z}function yp(M,z){var b={};return b.months=z.month()-M.month()+12*(z.year()-M.year()),M.clone().add(b.months,"M").isAfter(z)&&--b.months,b.milliseconds=+z-+M.clone().add(b.months,"M"),b}function _p(M,z){var b;return M.isValid()&&z.isValid()?(z=tp(z,M),M.isBefore(z)?b=yp(M,z):((b=yp(z,M)).milliseconds=-b.milliseconds,b.months=-b.months),b):{milliseconds:0,months:0}}function Sp(M,z){return function(b,p){var O;return null===p||isNaN(+p)||(g(z,"moment()."+z+"(period, number) is deprecated. Please use moment()."+z+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),O=b,b=p,p=O),vp(this,gp(b,p),M),this}}function vp(M,z,b,O){var o=z._milliseconds,c=qp(z._days),A=qp(z._months);M.isValid()&&(O=null==O||O,A&&tz(M,ZM(M,"Month")+A*b),c&&$M(M,"Date",ZM(M,"Date")+c*b),o&&M._d.setTime(M._d.valueOf()+o*b),O&&p.updateOffset(M,c||A))}gp.fn=cp.prototype,gp.invalid=op;var kp=Sp(1,"add"),wp=Sp(-1,"subtract");function Ep(M){return"string"==typeof M||M instanceof String}function Cp(M){return N(M)||a(M)||Ep(M)||n(M)||Pp(M)||Dp(M)||null==M}function Dp(M){var z,b,p=c(M)&&!q(M),O=!1,o=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],e=o.length;for(z=0;z<e;z+=1)b=o[z],O=O||A(M,b);return p&&O}function Pp(M){var z=o(M),b=!1;return z&&(b=0===M.filter((function(z){return!n(z)&&Ep(M)})).length),z&&b}function xp(M){var z,b,p=c(M)&&!q(M),O=!1,o=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(z=0;z<o.length;z+=1)b=o[z],O=O||A(M,b);return p&&O}function jp(M,z){var b=M.diff(z,"days",!0);return b<-6?"sameElse":b<-1?"lastWeek":b<0?"lastDay":b<1?"sameDay":b<2?"nextDay":b<7?"nextWeek":"sameElse"}function Ip(M,z){1===arguments.length&&(arguments[0]?Cp(arguments[0])?(M=arguments[0],z=void 0):xp(arguments[0])&&(z=arguments[0],M=void 0):(M=void 0,z=void 0));var b=M||Kb(),O=tp(b,this).startOf("day"),o=p.calendarFormat(this,O)||"sameElse",c=z&&(T(z[o])?z[o].call(this,b):z[o]);return this.format(c||this.localeData().calendar(o,this,Kb(b)))}function Hp(){return new L(this)}function Yp(M,z){var b=N(M)?M:Kb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=bM(z)||"millisecond")?this.valueOf()>b.valueOf():b.valueOf()<this.clone().startOf(z).valueOf())}function Fp(M,z){var b=N(M)?M:Kb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=bM(z)||"millisecond")?this.valueOf()<b.valueOf():this.clone().endOf(z).valueOf()<b.valueOf())}function Up(M,z,b,p){var O=N(M)?M:Kb(M),o=N(z)?z:Kb(z);return!!(this.isValid()&&O.isValid()&&o.isValid())&&("("===(p=p||"()")[0]?this.isAfter(O,b):!this.isBefore(O,b))&&(")"===p[1]?this.isBefore(o,b):!this.isAfter(o,b))}function Gp(M,z){var b,p=N(M)?M:Kb(M);return!(!this.isValid()||!p.isValid())&&("millisecond"===(z=bM(z)||"millisecond")?this.valueOf()===p.valueOf():(b=p.valueOf(),this.clone().startOf(z).valueOf()<=b&&b<=this.clone().endOf(z).valueOf()))}function Vp(M,z){return this.isSame(M,z)||this.isAfter(M,z)}function Kp(M,z){return this.isSame(M,z)||this.isBefore(M,z)}function Qp(M,z,b){var p,O,o;if(!this.isValid())return NaN;if(!(p=tp(M,this)).isValid())return NaN;switch(O=6e4*(p.utcOffset()-this.utcOffset()),z=bM(z)){case"year":o=Jp(this,p)/12;break;case"month":o=Jp(this,p);break;case"quarter":o=Jp(this,p)/3;break;case"second":o=(this-p)/1e3;break;case"minute":o=(this-p)/6e4;break;case"hour":o=(this-p)/36e5;break;case"day":o=(this-p-O)/864e5;break;case"week":o=(this-p-O)/6048e5;break;default:o=this-p}return b?o:yM(o)}function Jp(M,z){if(M.date()<z.date())return-Jp(z,M);var b=12*(z.year()-M.year())+(z.month()-M.month()),p=M.clone().add(b,"months");return-(b+(z-p<0?(z-p)/(p-M.clone().add(b-1,"months")):(z-p)/(M.clone().add(b+1,"months")-p)))||0}function Zp(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function $p(M){if(!this.isValid())return null;var z=!0!==M,b=z?this.clone().utc():this;return b.year()<0||b.year()>9999?H(b,z?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?z?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",H(b,"Z")):H(b,z?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function MO(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var M,z,b,p,O="moment",o="";return this.isLocal()||(O=0===this.utcOffset()?"moment.utc":"moment.parseZone",o="Z"),M="["+O+'("]',z=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",b="-MM-DD[T]HH:mm:ss.SSS",p=o+'[")]',this.format(M+z+b+p)}function zO(M){M||(M=this.isUtc()?p.defaultFormatUtc:p.defaultFormat);var z=H(this,M);return this.localeData().postformat(z)}function bO(M,z){return this.isValid()&&(N(M)&&M.isValid()||Kb(M).isValid())?gp({to:this,from:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function pO(M){return this.from(Kb(),M)}function OO(M,z){return this.isValid()&&(N(M)&&M.isValid()||Kb(M).isValid())?gp({from:this,to:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function oO(M){return this.to(Kb(),M)}function cO(M){var z;return void 0===M?this._locale._abbr:(null!=(z=ub(M))&&(this._locale=z),this)}p.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",p.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var AO=X("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(M){return void 0===M?this.localeData():this.locale(M)}));function qO(){return this._locale}var eO=1e3,nO=60*eO,aO=60*nO,WO=3506328*aO;function tO(M,z){return(M%z+z)%z}function dO(M,z,b){return M<100&&M>=0?new Date(M+400,z,b)-WO:new Date(M,z,b).valueOf()}function iO(M,z,b){return M<100&&M>=0?Date.UTC(M+400,z,b)-WO:Date.UTC(M,z,b)}function rO(M){var z,b;if(void 0===(M=bM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:dO,M){case"year":z=b(this.year(),0,1);break;case"quarter":z=b(this.year(),this.month()-this.month()%3,1);break;case"month":z=b(this.year(),this.month(),1);break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":z=b(this.year(),this.month(),this.date());break;case"hour":z=this._d.valueOf(),z-=tO(z+(this._isUTC?0:this.utcOffset()*nO),aO);break;case"minute":z=this._d.valueOf(),z-=tO(z,nO);break;case"second":z=this._d.valueOf(),z-=tO(z,eO)}return this._d.setTime(z),p.updateOffset(this,!0),this}function sO(M){var z,b;if(void 0===(M=bM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:dO,M){case"year":z=b(this.year()+1,0,1)-1;break;case"quarter":z=b(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":z=b(this.year(),this.month()+1,1)-1;break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":z=b(this.year(),this.month(),this.date()+1)-1;break;case"hour":z=this._d.valueOf(),z+=aO-tO(z+(this._isUTC?0:this.utcOffset()*nO),aO)-1;break;case"minute":z=this._d.valueOf(),z+=nO-tO(z,nO)-1;break;case"second":z=this._d.valueOf(),z+=eO-tO(z,eO)-1}return this._d.setTime(z),p.updateOffset(this,!0),this}function uO(){return this._d.valueOf()-6e4*(this._offset||0)}function fO(){return Math.floor(this.valueOf()/1e3)}function RO(){return new Date(this.valueOf())}function lO(){var M=this;return[M.year(),M.month(),M.date(),M.hour(),M.minute(),M.second(),M.millisecond()]}function LO(){var M=this;return{years:M.year(),months:M.month(),date:M.date(),hours:M.hours(),minutes:M.minutes(),seconds:M.seconds(),milliseconds:M.milliseconds()}}function NO(){return this.isValid()?this.toISOString():null}function BO(){return s(this)}function XO(){return t({},r(this))}function hO(){return r(this).overflow}function mO(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function gO(M,z){var b,O,o,c=this._eras||ub("en")._eras;for(b=0,O=c.length;b<O;++b)switch("string"==typeof c[b].since&&(o=p(c[b].since).startOf("day"),c[b].since=o.valueOf()),typeof c[b].until){case"undefined":c[b].until=1/0;break;case"string":o=p(c[b].until).startOf("day").valueOf(),c[b].until=o.valueOf()}return c}function TO(M,z,b){var p,O,o,c,A,q=this.eras();for(M=M.toUpperCase(),p=0,O=q.length;p<O;++p)if(o=q[p].name.toUpperCase(),c=q[p].abbr.toUpperCase(),A=q[p].narrow.toUpperCase(),b)switch(z){case"N":case"NN":case"NNN":if(c===M)return q[p];break;case"NNNN":if(o===M)return q[p];break;case"NNNNN":if(A===M)return q[p]}else if([o,c,A].indexOf(M)>=0)return q[p]}function yO(M,z){var b=M.since<=M.until?1:-1;return void 0===z?p(M.since).year():p(M.since).year()+(z-M.offset)*b}function _O(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].name;if(p[M].until<=b&&b<=p[M].since)return p[M].name}return""}function SO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].narrow;if(p[M].until<=b&&b<=p[M].since)return p[M].narrow}return""}function vO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].abbr;if(p[M].until<=b&&b<=p[M].since)return p[M].abbr}return""}function kO(){var M,z,b,O,o=this.localeData().eras();for(M=0,z=o.length;M<z;++M)if(b=o[M].since<=o[M].until?1:-1,O=this.clone().startOf("day").valueOf(),o[M].since<=O&&O<=o[M].until||o[M].until<=O&&O<=o[M].since)return(this.year()-p(o[M].since).year())*b+o[M].offset;return this.year()}function wO(M){return A(this,"_erasNameRegex")||IO.call(this),M?this._erasNameRegex:this._erasRegex}function EO(M){return A(this,"_erasAbbrRegex")||IO.call(this),M?this._erasAbbrRegex:this._erasRegex}function CO(M){return A(this,"_erasNarrowRegex")||IO.call(this),M?this._erasNarrowRegex:this._erasRegex}function DO(M,z){return z.erasAbbrRegex(M)}function PO(M,z){return z.erasNameRegex(M)}function xO(M,z){return z.erasNarrowRegex(M)}function jO(M,z){return z._eraYearOrdinalRegex||uM}function IO(){var M,z,b,p,O,o=[],c=[],A=[],q=[],e=this.eras();for(M=0,z=e.length;M<z;++M)b=TM(e[M].name),p=TM(e[M].abbr),O=TM(e[M].narrow),c.push(b),o.push(p),A.push(O),q.push(b),q.push(p),q.push(O);this._erasRegex=new RegExp("^("+q.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+c.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+o.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+A.join("|")+")","i")}function HO(M,z){x(0,[M,M.length],0,z)}function YO(M){return QO.call(this,M,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function FO(M){return QO.call(this,M,this.isoWeek(),this.isoWeekday(),1,4)}function UO(){return Bz(this.year(),1,4)}function GO(){return Bz(this.isoWeekYear(),1,4)}function VO(){var M=this.localeData()._week;return Bz(this.year(),M.dow,M.doy)}function KO(){var M=this.localeData()._week;return Bz(this.weekYear(),M.dow,M.doy)}function QO(M,z,b,p,O){var o;return null==M?Nz(this,p,O).year:(z>(o=Bz(M,p,O))&&(z=o),JO.call(this,M,z,b,p,O))}function JO(M,z,b,p,O){var o=Lz(M,z,b,p,O),c=Rz(o.year,0,o.dayOfYear);return this.year(c.getUTCFullYear()),this.month(c.getUTCMonth()),this.date(c.getUTCDate()),this}function ZO(M){return null==M?Math.ceil((this.month()+1)/3):this.month(3*(M-1)+this.month()%3)}x("N",0,0,"eraAbbr"),x("NN",0,0,"eraAbbr"),x("NNN",0,0,"eraAbbr"),x("NNNN",0,0,"eraName"),x("NNNNN",0,0,"eraNarrow"),x("y",["y",1],"yo","eraYear"),x("y",["yy",2],0,"eraYear"),x("y",["yyy",3],0,"eraYear"),x("y",["yyyy",4],0,"eraYear"),hM("N",DO),hM("NN",DO),hM("NNN",DO),hM("NNNN",PO),hM("NNNNN",xO),vM(["N","NN","NNN","NNNN","NNNNN"],(function(M,z,b,p){var O=b._locale.erasParse(M,p,b._strict);O?r(b).era=O:r(b).invalidEra=M})),hM("y",uM),hM("yy",uM),hM("yyy",uM),hM("yyyy",uM),hM("yo",jO),vM(["y","yy","yyy","yyyy"],CM),vM(["yo"],(function(M,z,b,p){var O;b._locale._eraYearOrdinalRegex&&(O=M.match(b._locale._eraYearOrdinalRegex)),b._locale.eraYearOrdinalParse?z[CM]=b._locale.eraYearOrdinalParse(M,O):z[CM]=parseInt(M,10)})),x(0,["gg",2],0,(function(){return this.weekYear()%100})),x(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),HO("gggg","weekYear"),HO("ggggg","weekYear"),HO("GGGG","isoWeekYear"),HO("GGGGG","isoWeekYear"),hM("G",fM),hM("g",fM),hM("GG",WM,qM),hM("gg",WM,qM),hM("GGGG",rM,nM),hM("gggg",rM,nM),hM("GGGGG",sM,aM),hM("ggggg",sM,aM),kM(["gggg","ggggg","GGGG","GGGGG"],(function(M,z,b,p){z[p.substr(0,2)]=_M(M)})),kM(["gg","GG"],(function(M,z,b,O){z[O]=p.parseTwoDigitYear(M)})),x("Q",0,"Qo","quarter"),hM("Q",AM),vM("Q",(function(M,z){z[DM]=3*(_M(M)-1)})),x("D",["DD",2],"Do","date"),hM("D",WM,BM),hM("DD",WM,qM),hM("Do",(function(M,z){return M?z._dayOfMonthOrdinalParse||z._ordinalParse:z._dayOfMonthOrdinalParseLenient})),vM(["D","DD"],PM),vM("Do",(function(M,z){z[PM]=_M(M.match(WM)[0])}));var $O=JM("Date",!0);function Mo(M){var z=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==M?z:this.add(M-z,"d")}x("DDD",["DDDD",3],"DDDo","dayOfYear"),hM("DDD",iM),hM("DDDD",eM),vM(["DDD","DDDD"],(function(M,z,b){b._dayOfYear=_M(M)})),x("m",["mm",2],0,"minute"),hM("m",WM,XM),hM("mm",WM,qM),vM(["m","mm"],IM);var zo=JM("Minutes",!1);x("s",["ss",2],0,"second"),hM("s",WM,XM),hM("ss",WM,qM),vM(["s","ss"],HM);var bo,po,Oo=JM("Seconds",!1);for(x("S",0,0,(function(){return~~(this.millisecond()/100)})),x(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),x(0,["SSS",3],0,"millisecond"),x(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),x(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),x(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),x(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),x(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),x(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),hM("S",iM,AM),hM("SS",iM,qM),hM("SSS",iM,eM),bo="SSSS";bo.length<=9;bo+="S")hM(bo,uM);function oo(M,z){z[YM]=_M(1e3*("0."+M))}for(bo="S";bo.length<=9;bo+="S")vM(bo,oo);function co(){return this._isUTC?"UTC":""}function Ao(){return this._isUTC?"Coordinated Universal Time":""}po=JM("Milliseconds",!1),x("z",0,0,"zoneAbbr"),x("zz",0,0,"zoneName");var qo=L.prototype;function eo(M){return Kb(1e3*M)}function no(){return Kb.apply(null,arguments).parseZone()}function ao(M){return M}qo.add=kp,qo.calendar=Ip,qo.clone=Hp,qo.diff=Qp,qo.endOf=sO,qo.format=zO,qo.from=bO,qo.fromNow=pO,qo.to=OO,qo.toNow=oO,qo.get=Mz,qo.invalidAt=hO,qo.isAfter=Yp,qo.isBefore=Fp,qo.isBetween=Up,qo.isSame=Gp,qo.isSameOrAfter=Vp,qo.isSameOrBefore=Kp,qo.isValid=BO,qo.lang=AO,qo.locale=cO,qo.localeData=qO,qo.max=Jb,qo.min=Qb,qo.parsingFlags=XO,qo.set=zz,qo.startOf=rO,qo.subtract=wp,qo.toArray=lO,qo.toObject=LO,qo.toDate=RO,qo.toISOString=$p,qo.inspect=MO,"undefined"!=typeof Symbol&&null!=Symbol.for&&(qo[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),qo.toJSON=NO,qo.toString=Zp,qo.unix=fO,qo.valueOf=uO,qo.creationData=mO,qo.eraName=_O,qo.eraNarrow=SO,qo.eraAbbr=vO,qo.eraYear=kO,qo.year=KM,qo.isLeapYear=QM,qo.weekYear=YO,qo.isoWeekYear=FO,qo.quarter=qo.quarters=ZO,qo.month=dz,qo.daysInMonth=iz,qo.week=qo.weeks=Tz,qo.isoWeek=qo.isoWeeks=yz,qo.weeksInYear=VO,qo.weeksInWeekYear=KO,qo.isoWeeksInYear=UO,qo.isoWeeksInISOWeekYear=GO,qo.date=$O,qo.day=qo.days=Fz,qo.weekday=Uz,qo.isoWeekday=Gz,qo.dayOfYear=Mo,qo.hour=qo.hours=Ob,qo.minute=qo.minutes=zo,qo.second=qo.seconds=Oo,qo.millisecond=qo.milliseconds=po,qo.utcOffset=ip,qo.utc=sp,qo.local=up,qo.parseZone=fp,qo.hasAlignedHourOffset=Rp,qo.isDST=lp,qo.isLocal=Np,qo.isUtcOffset=Bp,qo.isUtc=Xp,qo.isUTC=Xp,qo.zoneAbbr=co,qo.zoneName=Ao,qo.dates=X("dates accessor is deprecated. Use date instead.",$O),qo.months=X("months accessor is deprecated. Use month instead",dz),qo.years=X("years accessor is deprecated. Use year instead",KM),qo.zone=X("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",rp),qo.isDSTShifted=X("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Lp);var Wo=S.prototype;function to(M,z,b,p){var O=ub(),o=d().set(p,z);return O[b](o,M)}function io(M,z,b){if(n(M)&&(z=M,M=void 0),M=M||"",null!=z)return to(M,z,b,"month");var p,O=[];for(p=0;p<12;p++)O[p]=to(M,p,b,"month");return O}function ro(M,z,b,p){"boolean"==typeof M?(n(z)&&(b=z,z=void 0),z=z||""):(b=z=M,M=!1,n(z)&&(b=z,z=void 0),z=z||"");var O,o=ub(),c=M?o._week.dow:0,A=[];if(null!=b)return to(z,(b+c)%7,p,"day");for(O=0;O<7;O++)A[O]=to(z,(O+c)%7,p,"day");return A}function so(M,z){return io(M,z,"months")}function uo(M,z){return io(M,z,"monthsShort")}function fo(M,z,b){return ro(M,z,b,"weekdays")}function Ro(M,z,b){return ro(M,z,b,"weekdaysShort")}function lo(M,z,b){return ro(M,z,b,"weekdaysMin")}Wo.calendar=k,Wo.longDateFormat=U,Wo.invalidDate=V,Wo.ordinal=J,Wo.preparse=ao,Wo.postformat=ao,Wo.relativeTime=$,Wo.pastFuture=MM,Wo.set=y,Wo.eras=gO,Wo.erasParse=TO,Wo.erasConvertYear=yO,Wo.erasAbbrRegex=EO,Wo.erasNameRegex=wO,Wo.erasNarrowRegex=CO,Wo.months=ez,Wo.monthsShort=nz,Wo.monthsParse=Wz,Wo.monthsRegex=sz,Wo.monthsShortRegex=rz,Wo.week=Xz,Wo.firstDayOfYear=gz,Wo.firstDayOfWeek=mz,Wo.weekdays=xz,Wo.weekdaysMin=Iz,Wo.weekdaysShort=jz,Wo.weekdaysParse=Yz,Wo.weekdaysRegex=Vz,Wo.weekdaysShortRegex=Kz,Wo.weekdaysMinRegex=Qz,Wo.isPM=bb,Wo.meridiem=ob,ib("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(M){var z=M%10;return M+(1===_M(M%100/10)?"th":1===z?"st":2===z?"nd":3===z?"rd":"th")}}),p.lang=X("moment.lang is deprecated. Use moment.locale instead.",ib),p.langData=X("moment.langData is deprecated. Use moment.localeData instead.",ub);var Lo=Math.abs;function No(){var M=this._data;return this._milliseconds=Lo(this._milliseconds),this._days=Lo(this._days),this._months=Lo(this._months),M.milliseconds=Lo(M.milliseconds),M.seconds=Lo(M.seconds),M.minutes=Lo(M.minutes),M.hours=Lo(M.hours),M.months=Lo(M.months),M.years=Lo(M.years),this}function Bo(M,z,b,p){var O=gp(z,b);return M._milliseconds+=p*O._milliseconds,M._days+=p*O._days,M._months+=p*O._months,M._bubble()}function Xo(M,z){return Bo(this,M,z,1)}function ho(M,z){return Bo(this,M,z,-1)}function mo(M){return M<0?Math.floor(M):Math.ceil(M)}function go(){var M,z,b,p,O,o=this._milliseconds,c=this._days,A=this._months,q=this._data;return o>=0&&c>=0&&A>=0||o<=0&&c<=0&&A<=0||(o+=864e5*mo(yo(A)+c),c=0,A=0),q.milliseconds=o%1e3,M=yM(o/1e3),q.seconds=M%60,z=yM(M/60),q.minutes=z%60,b=yM(z/60),q.hours=b%24,c+=yM(b/24),A+=O=yM(To(c)),c-=mo(yo(O)),p=yM(A/12),A%=12,q.days=c,q.months=A,q.years=p,this}function To(M){return 4800*M/146097}function yo(M){return 146097*M/4800}function _o(M){if(!this.isValid())return NaN;var z,b,p=this._milliseconds;if("month"===(M=bM(M))||"quarter"===M||"year"===M)switch(z=this._days+p/864e5,b=this._months+To(z),M){case"month":return b;case"quarter":return b/3;case"year":return b/12}else switch(z=this._days+Math.round(yo(this._months)),M){case"week":return z/7+p/6048e5;case"day":return z+p/864e5;case"hour":return 24*z+p/36e5;case"minute":return 1440*z+p/6e4;case"second":return 86400*z+p/1e3;case"millisecond":return Math.floor(864e5*z)+p;default:throw new Error("Unknown unit "+M)}}function So(M){return function(){return this.as(M)}}var vo=So("ms"),ko=So("s"),wo=So("m"),Eo=So("h"),Co=So("d"),Do=So("w"),Po=So("M"),xo=So("Q"),jo=So("y"),Io=vo;function Ho(){return gp(this)}function Yo(M){return M=bM(M),this.isValid()?this[M+"s"]():NaN}function Fo(M){return function(){return this.isValid()?this._data[M]:NaN}}var Uo=Fo("milliseconds"),Go=Fo("seconds"),Vo=Fo("minutes"),Ko=Fo("hours"),Qo=Fo("days"),Jo=Fo("months"),Zo=Fo("years");function $o(){return yM(this.days()/7)}var Mc=Math.round,zc={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function bc(M,z,b,p,O){return O.relativeTime(z||1,!!b,M,p)}function pc(M,z,b,p){var O=gp(M).abs(),o=Mc(O.as("s")),c=Mc(O.as("m")),A=Mc(O.as("h")),q=Mc(O.as("d")),e=Mc(O.as("M")),n=Mc(O.as("w")),a=Mc(O.as("y")),W=o<=b.ss&&["s",o]||o<b.s&&["ss",o]||c<=1&&["m"]||c<b.m&&["mm",c]||A<=1&&["h"]||A<b.h&&["hh",A]||q<=1&&["d"]||q<b.d&&["dd",q];return null!=b.w&&(W=W||n<=1&&["w"]||n<b.w&&["ww",n]),(W=W||e<=1&&["M"]||e<b.M&&["MM",e]||a<=1&&["y"]||["yy",a])[2]=z,W[3]=+M>0,W[4]=p,bc.apply(null,W)}function Oc(M){return void 0===M?Mc:"function"==typeof M&&(Mc=M,!0)}function oc(M,z){return void 0!==zc[M]&&(void 0===z?zc[M]:(zc[M]=z,"s"===M&&(zc.ss=z-1),!0))}function cc(M,z){if(!this.isValid())return this.localeData().invalidDate();var b,p,O=!1,o=zc;return"object"==typeof M&&(z=M,M=!1),"boolean"==typeof M&&(O=M),"object"==typeof z&&(o=Object.assign({},zc,z),null!=z.s&&null==z.ss&&(o.ss=z.s-1)),p=pc(this,!O,o,b=this.localeData()),O&&(p=b.pastFuture(+this,p)),b.postformat(p)}var Ac=Math.abs;function qc(M){return(M>0)-(M<0)||+M}function ec(){if(!this.isValid())return this.localeData().invalidDate();var M,z,b,p,O,o,c,A,q=Ac(this._milliseconds)/1e3,e=Ac(this._days),n=Ac(this._months),a=this.asSeconds();return a?(M=yM(q/60),z=yM(M/60),q%=60,M%=60,b=yM(n/12),n%=12,p=q?q.toFixed(3).replace(/\.?0+$/,""):"",O=a<0?"-":"",o=qc(this._months)!==qc(a)?"-":"",c=qc(this._days)!==qc(a)?"-":"",A=qc(this._milliseconds)!==qc(a)?"-":"",O+"P"+(b?o+b+"Y":"")+(n?o+n+"M":"")+(e?c+e+"D":"")+(z||M||q?"T":"")+(z?A+z+"H":"")+(M?A+M+"M":"")+(q?A+p+"S":"")):"P0D"}var nc=cp.prototype;return nc.isValid=Op,nc.abs=No,nc.add=Xo,nc.subtract=ho,nc.as=_o,nc.asMilliseconds=vo,nc.asSeconds=ko,nc.asMinutes=wo,nc.asHours=Eo,nc.asDays=Co,nc.asWeeks=Do,nc.asMonths=Po,nc.asQuarters=xo,nc.asYears=jo,nc.valueOf=Io,nc._bubble=go,nc.clone=Ho,nc.get=Yo,nc.milliseconds=Uo,nc.seconds=Go,nc.minutes=Vo,nc.hours=Ko,nc.days=Qo,nc.weeks=$o,nc.months=Jo,nc.years=Zo,nc.humanize=cc,nc.toISOString=ec,nc.toString=ec,nc.toJSON=ec,nc.locale=cO,nc.localeData=qO,nc.toIsoString=X("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ec),nc.lang=AO,x("X",0,0,"unix"),x("x",0,0,"valueOf"),hM("x",fM),hM("X",LM),vM("X",(function(M,z,b){b._d=new Date(1e3*parseFloat(M))})),vM("x",(function(M,z,b){b._d=new Date(_M(M))})),
1
+ !function(M,z){"object"==typeof exports&&"undefined"!=typeof module?z(exports,require("prop-types"),require("react"),require("i18next"),require("classnames"),require("react-autosuggest"),require("lodash/debounce"),require("lodash/flatten"),require("lodash/take"),require("lodash/isString"),require("lodash/orderBy"),require("lodash/uniqWith"),require("lodash/get"),require("@digitransit-component/digitransit-component-suggestion-item"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","i18next","classnames","react-autosuggest","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/get","@digitransit-component/digitransit-component-suggestion-item","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","@digitransit-component/digitransit-component-icon","lodash/isEmpty","react-modal","@digitransit-component/digitransit-component-dialog-modal"],z):z((M="undefined"!=typeof globalThis?globalThis:M||self).DTAutosuggest={},M.PropTypes,M.React,M.i18next,M.cx,M.Autosuggest,M.debounce,M.flatten,M.take,M.isString,M.orderBy,M.uniqWith,M.get,M.SuggestionItem,M.isEqual,M.memoize,M.escapeRegExp,M.cloneDeep,M.Icon,M.isEmpty,M.ReactModal,M.DialogModal)}(this,(function(M,z,b,p,O,o,c,A,q,e,n,a,W,t,d,i,r,s,u,f,R,l){"use strict";function L(M){return M&&"object"==typeof M&&"default"in M?M:{default:M}}var N=L(z),B=L(b),X=L(p),h=L(O),m=L(o),g=L(c),T=L(A),y=L(q),_=L(e),S=L(n),v=L(a),k=L(W),w=L(t),E=L(d),C=L(i),D=L(r),P=L(s),x=L(u),j=L(f),I=L(R),H=L(l);function Y(M){return Y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(M){return typeof M}:function(M){return M&&"function"==typeof Symbol&&M.constructor===Symbol&&M!==Symbol.prototype?"symbol":typeof M},Y(M)}function F(M){var z=function(M,z){if("object"!=Y(M)||!M)return M;var b=M[Symbol.toPrimitive];if(void 0!==b){var p=b.call(M,z||"default");if("object"!=Y(p))return p;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===z?String:Number)(M)}(M,"string");return"symbol"==Y(z)?z:String(z)}function U(M,z,b){return(z=F(z))in M?Object.defineProperty(M,z,{value:b,enumerable:!0,configurable:!0,writable:!0}):M[z]=b,M}function G(M,z){(null==z||z>M.length)&&(z=M.length);for(var b=0,p=new Array(z);b<z;b++)p[b]=M[b];return p}function V(M,z){return function(M){if(Array.isArray(M))return M}(M)||function(M,z){var b=null==M?null:"undefined"!=typeof Symbol&&M[Symbol.iterator]||M["@@iterator"];if(null!=b){var p,O,o,c,A=[],q=!0,e=!1;try{if(o=(b=b.call(M)).next,0===z){if(Object(b)!==b)return;q=!1}else for(;!(q=(p=o.call(b)).done)&&(A.push(p.value),A.length!==z);q=!0);}catch(M){e=!0,O=M}finally{try{if(!q&&null!=b.return&&(c=b.return(),Object(c)!==c))return}finally{if(e)throw O}}return A}}(M,z)||function(M,z){if(M){if("string"==typeof M)return G(M,z);var b=Object.prototype.toString.call(M).slice(8,-1);return"Object"===b&&M.constructor&&(b=M.constructor.name),"Map"===b||"Set"===b?Array.from(M):"Arguments"===b||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(b)?G(M,z):void 0}}(M,z)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function K(M,z){return M&&z&&M===z}var Q=["stop","station","favouriteStop","favouriteStation"],J=["favouriteVehicleRentalStation","bikestation"];function Z(M){if(!M)return"";var z=M.split(":");return 0===z.length?"":`citybikes${z[0]}:bikestation:${z[1]}`}function $(M,z){var b=M.properties,p=z.properties;if("FutureRoute"===M.type&&"FutureRoute"===z.type){var O=b.origin,o=b.destination,c=p.origin,A=p.destination;return`${O.name}//${O.locality}//${o.name}//${o.locality}`===`${c.name}//${c.locality}//${A.name}//${A.locality}`}if("FutureRoute"===M.type||"FutureRoute"===z.type)return!1;if(J.includes(b.layer)&&J.includes(p.layer))return(b.gid||Z(b.labelId))===(p.gid||Z(p.labelId));if(b.gtfsId&&p.gtfsId)return b.gtfsId===p.gtfsId;if(Q.includes(b.layer)&&Q.includes(p.layer)&&b.gid&&p.gid)return b.gid===p.gid;var q=M&&M.geometry?M.geometry.coordinates:void 0,e=z&&z.geometry?z.geometry.coordinates:void 0;return!!(q&&e&&Math.abs(q[0]-e[0])<1e-6&&Math.abs(q[1]-e[1])<1e-6&&(K(b.name,p.name)||K(b.label,p.label)||K(b.address,p.address)||K(b.address,p.label)||K(b.label,p.address)))}var MM=M=>_.default(M)?M.toLowerCase():"",zM="back",bM="currentPosition",pM="favouriteStop",OM="favouriteStation",oM="favouritePlace",cM="favouriteRoute",AM="favouriteVehicleRentalStation",qM="futureRoute",eM="station",nM="selectFromMap",aM="ownLocations",WM="stop",tM="bikestation",dM="carpark",iM="bikepark",rM=M=>{var z=M.layer,b=M.type;return"stop"===z||"favouriteStop"===z||"stop"===b||"favouriteStop"===b},sM=(M,z)=>{switch(M){case bM:return 1;case zM:return.9;case nM:return.8;case aM:return.79;case OM:case oM:case pM:case cM:case AM:return.45;case qM:return.44;case eM:return _.default(z)&&0===z.indexOf("gtfs")?.43:.42;case dM:case iM:case tM:return.38;case WM:return.36;default:return.41}},uM=function(M,z){var b=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";if(!Array.isArray(z))return z;var p=z=>_.default(z)&&M&&M.test(z),O=MM(b),o=p(O),c=S.default(z,[M=>o&&p(MM(M.properties.shortName))&&0===MM(M.properties.shortName).indexOf(O)?1:0,M=>{var z=M.properties,b=z.confidence,p=z.layer,o=z.source;if(0===O.length)return sM(p,o);if(!b)return sM(p,o)+((M,z)=>_.default(M)&&0!==M.length?["name","label","address","shortName"].map((M=>z[M])).filter((M=>_.default(M)&&M.length>0)).map((z=>{var b=MM(z);return 0===b.indexOf(M)?.5+M.length/b.length:.5*M.length/(M.length+1)})).reduce(((M,z)=>z>M?z:M),0):0)(O,M.properties);switch(p){case eM:return b+(0===o.indexOf("gtfs")?.02:.01);case WM:case dM:case iM:return b-.05;case tM:return b-.04;default:return b}}],["desc","desc"]);return v.default(c,$)},fM=(M,z)=>null!=z&&-1!==M.lastIndexOf(z)?M.substring(0,M.lastIndexOf(z)-1):M;function RM(M,z,b){if("string"==typeof z&&z.length>0){var p=z.toLowerCase().trim(),O=p.includes(" ")||p.includes(",");return M.filter((M=>{var z=[];b.forEach((b=>{var p=k.default(M,b);O||"properties.label"!==b&&"address"!==b||!p||((p=p.split(",")).length>2?p.splice(p.length-2,2):p.length>1&&p.splice(p.length-1,1),p=p.join(",")),p&&(z=O?z.concat(p.toLowerCase()):z.concat(p.toLowerCase().replace(/,/g," ").split(" ")))}));for(var o=0;o<z.length;o++)if(0===z[o].indexOf(p))return!0;return!1}))}return M}function lM(M,z){return M?Object.keys(M).map((b=>{var p=z||b,O=M[b];return"object"==typeof O?lM(O,p):`${encodeURIComponent(p)}=${encodeURIComponent(O)}`})).join("&"):""}var LM=require("axios").default;function NM(M,z){return LM.get(encodeURI(M)+(z?(-1===M.search(/\?/)?"?":"&")+lM(z):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((M=>M.data))}function BM(M,z){var b=Object.keys(M);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(M);z&&(p=p.filter((function(z){return Object.getOwnPropertyDescriptor(M,z).enumerable}))),b.push.apply(b,p)}return b}function XM(M){for(var z=1;z<arguments.length;z++){var b=null!=arguments[z]?arguments[z]:{};z%2?BM(Object(b),!0).forEach((function(z){U(M,z,b[z])})):Object.getOwnPropertyDescriptors?Object.defineProperties(M,Object.getOwnPropertyDescriptors(b)):BM(Object(b)).forEach((function(z){Object.defineProperty(M,z,Object.getOwnPropertyDescriptor(b,z))}))}return M}var hM="https://api.digitransit.fi/geocoding/v1/search";function mM(M,z,b,p,O,o,c,A){var q=M?M.trim():null;if(null==q||q.length<1||c&&!c.test(q))return Promise.resolve([]);var e=o||hM,n=XM(XM(XM({text:q},z),p),{},{lang:b});if(O&&(n=XM(XM({},n),{},{sources:O})),A){var a=A.toString();n=XM(XM({},n),{},{layers:a})}return NM(e,n).then((M=>M.features))}function gM(M,z){var b=Object.keys(M);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(M);z&&(p=p.filter((function(z){return Object.getOwnPropertyDescriptor(M,z).enumerable}))),b.push.apply(b,p)}return b}function TM(M){for(var z=1;z<arguments.length;z++){var b=null!=arguments[z]?arguments[z]:{};z%2?gM(Object(b),!0).forEach((function(z){U(M,z,b[z])})):Object.getOwnPropertyDescriptors?Object.defineProperties(M,Object.getOwnPropertyDescriptors(b)):gM(Object(b)).forEach((function(z){Object.defineProperty(M,z,Object.getOwnPropertyDescriptor(b,z))}))}return M}function yM(M,z){if(!M||M.length<1)return Promise.resolve([]);var b="",p=M.map((M=>{var z="stop"===M.type?"stop":"station",p=`gtfs${M.gtfsId.split(":")[0].toLowerCase()}:${z}:GTFS:${M.gtfsId}`;return M.code&&(p+=`#${M.code}`),b+=`${p},`,TM(TM({},M),{},{gid:p})})).reduce((function(M,z){return M[z.gid]=z,M}),{});return NM(z,{ids:b.slice(0,-1)}).then((M=>M.features.map((M=>({type:"FavouriteStop",properties:{addendum:M.properties.addendum,gid:p[M.properties.gid].gid,code:p[M.properties.gid].code,gtfsId:p[M.properties.gid].gtfsId,lastUpdated:p[M.properties.gid].lastUpdated,favouriteId:p[M.properties.gid].favouriteId,address:M.properties.label,layer:rM(M.properties)?"favouriteStop":"favouriteStation"},geometry:M.geometry})))))}function _M(M,z,b){var p=RM(M,z,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return b&&(p=p.filter((M=>!b.includes(M.properties.layer)))),Promise.resolve(y.default(p,10).map((M=>{var z=TM(TM({},M),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete z.properties.confidence,z})))}var SM=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],vM=["venue","address","street"],kM=["carpark","bikepark"],wM=["stop","station"];var EM=g.default((function(M,z,b,p,O,o,c,A,q,e){var n=c.input,a=p.getPositions,W=p.getFavouriteLocations,t=p.getOldSearches,d=p.getFavouriteStops,i=p.parkingAreaSources,r=p.getLanguage,s=p.getStopAndStationsQuery,u=p.getFavouriteVehicleRentalStationsQuery,f=p.getFavouriteVehicleRentalStations,R=p.getFavouriteRoutesQuery,l=p.getFavouriteRoutes,L=p.getRoutesQuery,N=p.context,B=p.isPeliasLocationAware,X=p.minimalRegexp,h=p.lineRegexp,m=p.URL_PELIAS,g=p.URL_PELIAS_PLACE,_=p.feedIDs,S=p.geocodingSearchParams,v=p.geocodingSources,k=p.getFutureRoutes,w=p.cityBikeNetworks,E=!M||0===M.length,C=!z||0===z.length,D=a(N),P=[],x={type:"all",term:n,results:[]},j=r(N),I=B&&null!=e&&e.lat&&null!=e&&e.lon?{"focus.point.lat":e.lat.toFixed(3),"focus.point.lon":e.lon.toFixed(3)}:{},H=b?b.split("-")[1]:void 0;if(M.includes("CurrentPosition")&&"geolocation-not-supported"!==D.status&&P.push(function(M,z){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"CurrentLocation",address:z.address,lat:z.lat,lon:z.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:z.address,lat:z.lat,lon:z.lon},geometry:{type:"Point",coordinates:[z.lon,z.lat]}}]):Promise.resolve([])}(n,D)),(E||M.includes("MapPosition"))&&P.push(function(M){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"SelectFromMap",address:"SelectFromMap",lat:null,lon:null,properties:{labelId:"select-from-map",layer:"selectFromMap",address:"SelectFromMap",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(n)),M.includes("FutureRoutes")){var Y=k(N);P.push(y.default(Y,3))}if(M.includes("SelectFromOwnLocations")&&function(M){var z=M.getFavouriteLocations(M.context);if((null==z?void 0:z.length)>0)return!0;var b=M.getFavouriteVehicleRentalStations(M.context);if((null==b?void 0:b.length)>0)return!0;var p=M.getFavouriteStops(M.context);return(null==p?void 0:p.length)>0}(p)&&P.push(function(M){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"SelectFromOwnLocations",address:"SelectFromOwnLocations",lat:null,lon:null,properties:{labelId:"select-from-own-locations",layer:"ownLocations",address:"selectFromOwnLocations",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(n)),E||M.includes("Locations")){var F=S;if(z.includes("Favourite")){var U=W(N);P.push(function(M,z){return Promise.resolve(RM(M,z,["address","name"]).map((M=>({type:"FavouritePlace",properties:TM(TM({},M),{},{label:M.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[M.lon,M.lat]}}))))}(U,n)),z.includes("Back")&&P.push(Promise.resolve([{type:"back",address:"back",lat:null,lon:null,properties:{labelId:"back",layer:"back",address:"back",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]))}if(C||z.includes("Datasource")){var G=["venue","address","street"];M.includes("Stations")&&G.push("station"),P.push(mM(n,F,j,I,v.join(","),m,X,G))}if(C||z.includes("History")){var V=t(N,"endpoint"),K=["bikestation"];K.push(...wM),K.push(...SM),K.push(...kM),P.push(_M(V,n,K))}}if(E||M.includes("ParkingAreas")){if(C||z.includes("Datasource")){var Q=S;o&&10!==o&&(Q.size=o);var J=i?i.join(","):null;P.push(mM(n,Q,j,I,J,m,X,["carpark","bikepark"]).then((M=>O?O(M,H):M)))}if(C||z.includes("History")){var Z=t(N),$=["bikestation"];$.push(...wM),$.push(...SM),$.push(...vM),P.push(_M(Z,n,$))}}var MM=M.includes("Stops"),zM=M.includes("Stations");if(E||MM||zM){if(z.includes("Favourite")){var bM,pM=d(N);bM=pM.every((M=>"station"===M.type))?yM(pM,g).then((M=>O?O(M,H):M)):s(pM).then((M=>yM(M,g))).then((M=>O?O(M,H):M)),P.push(function(M,z,b,p){return M.then((M=>RM(M.filter((M=>"stop"===M.type?b:p)),z,["properties.name","properties.name","properties.address"])))}(bM,n,MM,zM))}if(C||z.includes("Datasource")){var OM=[];MM&&OM.push("stop"),zM&&OM.push("station");var oM=o&&10!==o?{size:o}:{};S&&S["boundary.country"]&&(oM["boundary.country"]=S["boundary.country"]),(E||M.includes("Locations"))&&(oM.dedupestops=1);var cM=_.map((M=>`gtfs${M}`)).join(",");P.push(mM(n,oM,j,I,cM,m,X,OM).then((M=>O?O(M,H):M)))}if(C||z.includes("History")){var AM=t(N).filter((M=>!M.properties.gid||M.properties.gid.includes("GTFS:"))),qM=["bikestation"];qM.push(...SM),qM.push(...vM),qM.push(...kM),MM||qM.push("stop"),zM||qM.push("station"),b?P.push(_M(AM,n,qM).then((M=>O?O(M,H):M))):P.push(_M(AM,n,qM))}}if(E||M.includes("Routes")){if(z.includes("Favourite")){var eM=l(N);P.push(R(eM,n,H,q).then((M=>O?O(M,H,"Routes"):M)))}if(P.push(L(n,_,b,q).then((M=>O?O(M,H,"Routes"):M))),C||z.includes("History")){var nM=t(N),aM=["bikestation"];b&&aM.push(...SM.filter((M=>!(M===b)))),aM.push(...wM),aM.push(...vM),aM.push(...kM),P.push(_M(nM,n,aM).then((M=>O?O(M,H,"Routes"):M)))}}if(E||M.includes("VehicleRentalStations")){if(z.includes("Favourite")){var WM=f(N);P.push(u(WM,n))}if(C||z.includes("Datasource")){var tM=o&&10!==o?{size:o}:{};P.push(mM(n,tM,j,I,w.join(","),m,X,["bikestation"]).then((M=>O?O(M,H,"VehicleRentalStations"):M)))}if(C||z.includes("History")){var dM=t(N),iM=[...wM];iM.push(...SM),iM.push(...vM),iM.push(...kM),P.push(_M(dM,n,iM))}}Promise.all(P).then(T.default).then((M=>{x.results=M})).catch((M=>{x.error=M})).then((()=>{A(TM(TM({},x),{},{results:uM(h,x.results,n)}))}))}),300,{leading:!0}),CM=M=>M.localadmin||M.locality||M.address&&M.address.lastIndexOf(",")<M.address.length-2&&M.address.substring(M.address.lastIndexOf(",")+2)||"",DM=M=>{var z=M.id,b=M.code;return b||(void 0!==z&&void 0!==z.indexOf&&-1!==z.indexOf("#")?z.substring(z.indexOf("#")+1):void 0)},PM=C.default((function(M){var z,b,p=arguments.length>1&&void 0!==arguments[1]&&arguments[1];switch(M.layer){case"currentPosition":return[M.labelId,M.address];case"selectFromMap":case"ownLocations":case"back":return[M.labelId];case"favouritePlace":return z=M.name,b=M.address,[z||b&&b.split(",")[0],"string"==typeof b?b.replace(new RegExp(`${D.default(z)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":return[M.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!p&&M.shortName?[M.gtfsId,M.mode.toLowerCase(),M.longName]:[M.shortName,M.longName,M.agency?M.agency.name:void 0];case"venue":case"address":case"street":return[M.name,M.label.replace(new RegExp(`${D.default(M.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return p?[M.name||M.label||M.address&&M.address.split(",")[0],CM(M)]:[M.name,M.id,DM(M),CM(M)];default:return[M.name||M.label||M.address&&M.address.split(",")[0],CM(M)]}}),((M,z)=>{var b=P.default(M);return b.plain=z,b}));function xM(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function jM(M,z){return M(z={exports:{}},z.exports),z.exports}var IM,HM=jM((function(M,z){M.exports=function(){var z,b;function p(){return z.apply(null,arguments)}function O(M){z=M}function o(M){return M instanceof Array||"[object Array]"===Object.prototype.toString.call(M)}function c(M){return null!=M&&"[object Object]"===Object.prototype.toString.call(M)}function A(M,z){return Object.prototype.hasOwnProperty.call(M,z)}function q(M){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(M).length;var z;for(z in M)if(A(M,z))return!1;return!0}function e(M){return void 0===M}function n(M){return"number"==typeof M||"[object Number]"===Object.prototype.toString.call(M)}function a(M){return M instanceof Date||"[object Date]"===Object.prototype.toString.call(M)}function W(M,z){var b,p=[],O=M.length;for(b=0;b<O;++b)p.push(z(M[b],b));return p}function t(M,z){for(var b in z)A(z,b)&&(M[b]=z[b]);return A(z,"toString")&&(M.toString=z.toString),A(z,"valueOf")&&(M.valueOf=z.valueOf),M}function d(M,z,b,p){return Vb(M,z,b,p,!0).utc()}function i(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function r(M){return null==M._pf&&(M._pf=i()),M._pf}function s(M){var z=null,p=!1,O=M._d&&!isNaN(M._d.getTime());return O&&(z=r(M),p=b.call(z.parsedDateParts,(function(M){return null!=M})),O=z.overflow<0&&!z.empty&&!z.invalidEra&&!z.invalidMonth&&!z.invalidWeekday&&!z.weekdayMismatch&&!z.nullInput&&!z.invalidFormat&&!z.userInvalidated&&(!z.meridiem||z.meridiem&&p),M._strict&&(O=O&&0===z.charsLeftOver&&0===z.unusedTokens.length&&void 0===z.bigHour)),null!=Object.isFrozen&&Object.isFrozen(M)?O:(M._isValid=O,M._isValid)}function u(M){var z=d(NaN);return null!=M?t(r(z),M):r(z).userInvalidated=!0,z}b=Array.prototype.some?Array.prototype.some:function(M){var z,b=Object(this),p=b.length>>>0;for(z=0;z<p;z++)if(z in b&&M.call(this,b[z],z,b))return!0;return!1};var f=p.momentProperties=[],R=!1;function l(M,z){var b,p,O,o=f.length;if(e(z._isAMomentObject)||(M._isAMomentObject=z._isAMomentObject),e(z._i)||(M._i=z._i),e(z._f)||(M._f=z._f),e(z._l)||(M._l=z._l),e(z._strict)||(M._strict=z._strict),e(z._tzm)||(M._tzm=z._tzm),e(z._isUTC)||(M._isUTC=z._isUTC),e(z._offset)||(M._offset=z._offset),e(z._pf)||(M._pf=r(z)),e(z._locale)||(M._locale=z._locale),o>0)for(b=0;b<o;b++)e(O=z[p=f[b]])||(M[p]=O);return M}function L(M){l(this,M),this._d=new Date(null!=M._d?M._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===R&&(R=!0,p.updateOffset(this),R=!1)}function N(M){return M instanceof L||null!=M&&null!=M._isAMomentObject}function B(M){!1===p.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+M)}function X(M,z){var b=!0;return t((function(){if(null!=p.deprecationHandler&&p.deprecationHandler(null,M),b){var O,o,c,q=[],e=arguments.length;for(o=0;o<e;o++){if(O="","object"==typeof arguments[o]){for(c in O+="\n["+o+"] ",arguments[0])A(arguments[0],c)&&(O+=c+": "+arguments[0][c]+", ");O=O.slice(0,-2)}else O=arguments[o];q.push(O)}B(M+"\nArguments: "+Array.prototype.slice.call(q).join("")+"\n"+(new Error).stack),b=!1}return z.apply(this,arguments)}),z)}var h,m={};function g(M,z){null!=p.deprecationHandler&&p.deprecationHandler(M,z),m[M]||(B(z),m[M]=!0)}function T(M){return"undefined"!=typeof Function&&M instanceof Function||"[object Function]"===Object.prototype.toString.call(M)}function y(M){var z,b;for(b in M)A(M,b)&&(T(z=M[b])?this[b]=z:this["_"+b]=z);this._config=M,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function _(M,z){var b,p=t({},M);for(b in z)A(z,b)&&(c(M[b])&&c(z[b])?(p[b]={},t(p[b],M[b]),t(p[b],z[b])):null!=z[b]?p[b]=z[b]:delete p[b]);for(b in M)A(M,b)&&!A(z,b)&&c(M[b])&&(p[b]=t({},p[b]));return p}function S(M){null!=M&&this.set(M)}p.suppressDeprecationWarnings=!1,p.deprecationHandler=null,h=Object.keys?Object.keys:function(M){var z,b=[];for(z in M)A(M,z)&&b.push(z);return b};var v={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function k(M,z,b){var p=this._calendar[M]||this._calendar.sameElse;return T(p)?p.call(z,b):p}function w(M,z,b){var p=""+Math.abs(M),O=z-p.length;return(M>=0?b?"+":"":"-")+Math.pow(10,Math.max(0,O)).toString().substr(1)+p}var E=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,C=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,D={},P={};function x(M,z,b,p){var O=p;"string"==typeof p&&(O=function(){return this[p]()}),M&&(P[M]=O),z&&(P[z[0]]=function(){return w(O.apply(this,arguments),z[1],z[2])}),b&&(P[b]=function(){return this.localeData().ordinal(O.apply(this,arguments),M)})}function j(M){return M.match(/\[[\s\S]/)?M.replace(/^\[|\]$/g,""):M.replace(/\\/g,"")}function I(M){var z,b,p=M.match(E);for(z=0,b=p.length;z<b;z++)P[p[z]]?p[z]=P[p[z]]:p[z]=j(p[z]);return function(z){var O,o="";for(O=0;O<b;O++)o+=T(p[O])?p[O].call(z,M):p[O];return o}}function H(M,z){return M.isValid()?(z=Y(z,M.localeData()),D[z]=D[z]||I(z),D[z](M)):M.localeData().invalidDate()}function Y(M,z){var b=5;function p(M){return z.longDateFormat(M)||M}for(C.lastIndex=0;b>=0&&C.test(M);)M=M.replace(C,p),C.lastIndex=0,b-=1;return M}var F={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function U(M){var z=this._longDateFormat[M],b=this._longDateFormat[M.toUpperCase()];return z||!b?z:(this._longDateFormat[M]=b.match(E).map((function(M){return"MMMM"===M||"MM"===M||"DD"===M||"dddd"===M?M.slice(1):M})).join(""),this._longDateFormat[M])}var G="Invalid date";function V(){return this._invalidDate}var K="%d",Q=/\d{1,2}/;function J(M){return this._ordinal.replace("%d",M)}var Z={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function $(M,z,b,p){var O=this._relativeTime[b];return T(O)?O(M,z,b,p):O.replace(/%d/i,M)}function MM(M,z){var b=this._relativeTime[M>0?"future":"past"];return T(b)?b(z):b.replace(/%s/i,z)}var zM={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function bM(M){return"string"==typeof M?zM[M]||zM[M.toLowerCase()]:void 0}function pM(M){var z,b,p={};for(b in M)A(M,b)&&(z=bM(b))&&(p[z]=M[b]);return p}var OM={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};function oM(M){var z,b=[];for(z in M)A(M,z)&&b.push({unit:z,priority:OM[z]});return b.sort((function(M,z){return M.priority-z.priority})),b}var cM,AM=/\d/,qM=/\d\d/,eM=/\d{3}/,nM=/\d{4}/,aM=/[+-]?\d{6}/,WM=/\d\d?/,tM=/\d\d\d\d?/,dM=/\d\d\d\d\d\d?/,iM=/\d{1,3}/,rM=/\d{1,4}/,sM=/[+-]?\d{1,6}/,uM=/\d+/,fM=/[+-]?\d+/,RM=/Z|[+-]\d\d:?\d\d/gi,lM=/Z|[+-]\d\d(?::?\d\d)?/gi,LM=/[+-]?\d+(\.\d{1,3})?/,NM=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,BM=/^[1-9]\d?/,XM=/^([1-9]\d|\d)/;function hM(M,z,b){cM[M]=T(z)?z:function(M,p){return M&&b?b:z}}function mM(M,z){return A(cM,M)?cM[M](z._strict,z._locale):new RegExp(gM(M))}function gM(M){return TM(M.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(M,z,b,p,O){return z||b||p||O})))}function TM(M){return M.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function yM(M){return M<0?Math.ceil(M)||0:Math.floor(M)}function _M(M){var z=+M,b=0;return 0!==z&&isFinite(z)&&(b=yM(z)),b}cM={};var SM={};function vM(M,z){var b,p,O=z;for("string"==typeof M&&(M=[M]),n(z)&&(O=function(M,b){b[z]=_M(M)}),p=M.length,b=0;b<p;b++)SM[M[b]]=O}function kM(M,z){vM(M,(function(M,b,p,O){p._w=p._w||{},z(M,p._w,p,O)}))}function wM(M,z,b){null!=z&&A(SM,M)&&SM[M](z,b._a,b,M)}function EM(M){return M%4==0&&M%100!=0||M%400==0}var CM=0,DM=1,PM=2,jM=3,IM=4,HM=5,YM=6,FM=7,UM=8;function GM(M){return EM(M)?366:365}x("Y",0,0,(function(){var M=this.year();return M<=9999?w(M,4):"+"+M})),x(0,["YY",2],0,(function(){return this.year()%100})),x(0,["YYYY",4],0,"year"),x(0,["YYYYY",5],0,"year"),x(0,["YYYYYY",6,!0],0,"year"),hM("Y",fM),hM("YY",WM,qM),hM("YYYY",rM,nM),hM("YYYYY",sM,aM),hM("YYYYYY",sM,aM),vM(["YYYYY","YYYYYY"],CM),vM("YYYY",(function(M,z){z[CM]=2===M.length?p.parseTwoDigitYear(M):_M(M)})),vM("YY",(function(M,z){z[CM]=p.parseTwoDigitYear(M)})),vM("Y",(function(M,z){z[CM]=parseInt(M,10)})),p.parseTwoDigitYear=function(M){return _M(M)+(_M(M)>68?1900:2e3)};var VM,KM=JM("FullYear",!0);function QM(){return EM(this.year())}function JM(M,z){return function(b){return null!=b?($M(this,M,b),p.updateOffset(this,z),this):ZM(this,M)}}function ZM(M,z){if(!M.isValid())return NaN;var b=M._d,p=M._isUTC;switch(z){case"Milliseconds":return p?b.getUTCMilliseconds():b.getMilliseconds();case"Seconds":return p?b.getUTCSeconds():b.getSeconds();case"Minutes":return p?b.getUTCMinutes():b.getMinutes();case"Hours":return p?b.getUTCHours():b.getHours();case"Date":return p?b.getUTCDate():b.getDate();case"Day":return p?b.getUTCDay():b.getDay();case"Month":return p?b.getUTCMonth():b.getMonth();case"FullYear":return p?b.getUTCFullYear():b.getFullYear();default:return NaN}}function $M(M,z,b){var p,O,o,c,A;if(M.isValid()&&!isNaN(b)){switch(p=M._d,O=M._isUTC,z){case"Milliseconds":return void(O?p.setUTCMilliseconds(b):p.setMilliseconds(b));case"Seconds":return void(O?p.setUTCSeconds(b):p.setSeconds(b));case"Minutes":return void(O?p.setUTCMinutes(b):p.setMinutes(b));case"Hours":return void(O?p.setUTCHours(b):p.setHours(b));case"Date":return void(O?p.setUTCDate(b):p.setDate(b));case"FullYear":break;default:return}o=b,c=M.month(),A=29!==(A=M.date())||1!==c||EM(o)?A:28,O?p.setUTCFullYear(o,c,A):p.setFullYear(o,c,A)}}function Mz(M){return T(this[M=bM(M)])?this[M]():this}function zz(M,z){if("object"==typeof M){var b,p=oM(M=pM(M)),O=p.length;for(b=0;b<O;b++)this[p[b].unit](M[p[b].unit])}else if(T(this[M=bM(M)]))return this[M](z);return this}function bz(M,z){return(M%z+z)%z}function pz(M,z){if(isNaN(M)||isNaN(z))return NaN;var b=bz(z,12);return M+=(z-b)/12,1===b?EM(M)?29:28:31-b%7%2}VM=Array.prototype.indexOf?Array.prototype.indexOf:function(M){var z;for(z=0;z<this.length;++z)if(this[z]===M)return z;return-1},x("M",["MM",2],"Mo",(function(){return this.month()+1})),x("MMM",0,0,(function(M){return this.localeData().monthsShort(this,M)})),x("MMMM",0,0,(function(M){return this.localeData().months(this,M)})),hM("M",WM,BM),hM("MM",WM,qM),hM("MMM",(function(M,z){return z.monthsShortRegex(M)})),hM("MMMM",(function(M,z){return z.monthsRegex(M)})),vM(["M","MM"],(function(M,z){z[DM]=_M(M)-1})),vM(["MMM","MMMM"],(function(M,z,b,p){var O=b._locale.monthsParse(M,p,b._strict);null!=O?z[DM]=O:r(b).invalidMonth=M}));var Oz="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),oz="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),cz=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Az=NM,qz=NM;function ez(M,z){return M?o(this._months)?this._months[M.month()]:this._months[(this._months.isFormat||cz).test(z)?"format":"standalone"][M.month()]:o(this._months)?this._months:this._months.standalone}function nz(M,z){return M?o(this._monthsShort)?this._monthsShort[M.month()]:this._monthsShort[cz.test(z)?"format":"standalone"][M.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function az(M,z,b){var p,O,o,c=M.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],p=0;p<12;++p)o=d([2e3,p]),this._shortMonthsParse[p]=this.monthsShort(o,"").toLocaleLowerCase(),this._longMonthsParse[p]=this.months(o,"").toLocaleLowerCase();return b?"MMM"===z?-1!==(O=VM.call(this._shortMonthsParse,c))?O:null:-1!==(O=VM.call(this._longMonthsParse,c))?O:null:"MMM"===z?-1!==(O=VM.call(this._shortMonthsParse,c))||-1!==(O=VM.call(this._longMonthsParse,c))?O:null:-1!==(O=VM.call(this._longMonthsParse,c))||-1!==(O=VM.call(this._shortMonthsParse,c))?O:null}function Wz(M,z,b){var p,O,o;if(this._monthsParseExact)return az.call(this,M,z,b);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),p=0;p<12;p++){if(O=d([2e3,p]),b&&!this._longMonthsParse[p]&&(this._longMonthsParse[p]=new RegExp("^"+this.months(O,"").replace(".","")+"$","i"),this._shortMonthsParse[p]=new RegExp("^"+this.monthsShort(O,"").replace(".","")+"$","i")),b||this._monthsParse[p]||(o="^"+this.months(O,"")+"|^"+this.monthsShort(O,""),this._monthsParse[p]=new RegExp(o.replace(".",""),"i")),b&&"MMMM"===z&&this._longMonthsParse[p].test(M))return p;if(b&&"MMM"===z&&this._shortMonthsParse[p].test(M))return p;if(!b&&this._monthsParse[p].test(M))return p}}function tz(M,z){if(!M.isValid())return M;if("string"==typeof z)if(/^\d+$/.test(z))z=_M(z);else if(!n(z=M.localeData().monthsParse(z)))return M;var b=z,p=M.date();return p=p<29?p:Math.min(p,pz(M.year(),b)),M._isUTC?M._d.setUTCMonth(b,p):M._d.setMonth(b,p),M}function dz(M){return null!=M?(tz(this,M),p.updateOffset(this,!0),this):ZM(this,"Month")}function iz(){return pz(this.year(),this.month())}function rz(M){return this._monthsParseExact?(A(this,"_monthsRegex")||uz.call(this),M?this._monthsShortStrictRegex:this._monthsShortRegex):(A(this,"_monthsShortRegex")||(this._monthsShortRegex=Az),this._monthsShortStrictRegex&&M?this._monthsShortStrictRegex:this._monthsShortRegex)}function sz(M){return this._monthsParseExact?(A(this,"_monthsRegex")||uz.call(this),M?this._monthsStrictRegex:this._monthsRegex):(A(this,"_monthsRegex")||(this._monthsRegex=qz),this._monthsStrictRegex&&M?this._monthsStrictRegex:this._monthsRegex)}function uz(){function M(M,z){return z.length-M.length}var z,b,p,O,o=[],c=[],A=[];for(z=0;z<12;z++)b=d([2e3,z]),p=TM(this.monthsShort(b,"")),O=TM(this.months(b,"")),o.push(p),c.push(O),A.push(O),A.push(p);o.sort(M),c.sort(M),A.sort(M),this._monthsRegex=new RegExp("^("+A.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+o.join("|")+")","i")}function fz(M,z,b,p,O,o,c){var A;return M<100&&M>=0?(A=new Date(M+400,z,b,p,O,o,c),isFinite(A.getFullYear())&&A.setFullYear(M)):A=new Date(M,z,b,p,O,o,c),A}function Rz(M){var z,b;return M<100&&M>=0?((b=Array.prototype.slice.call(arguments))[0]=M+400,z=new Date(Date.UTC.apply(null,b)),isFinite(z.getUTCFullYear())&&z.setUTCFullYear(M)):z=new Date(Date.UTC.apply(null,arguments)),z}function lz(M,z,b){var p=7+z-b;return-(7+Rz(M,0,p).getUTCDay()-z)%7+p-1}function Lz(M,z,b,p,O){var o,c,A=1+7*(z-1)+(7+b-p)%7+lz(M,p,O);return A<=0?c=GM(o=M-1)+A:A>GM(M)?(o=M+1,c=A-GM(M)):(o=M,c=A),{year:o,dayOfYear:c}}function Nz(M,z,b){var p,O,o=lz(M.year(),z,b),c=Math.floor((M.dayOfYear()-o-1)/7)+1;return c<1?p=c+Bz(O=M.year()-1,z,b):c>Bz(M.year(),z,b)?(p=c-Bz(M.year(),z,b),O=M.year()+1):(O=M.year(),p=c),{week:p,year:O}}function Bz(M,z,b){var p=lz(M,z,b),O=lz(M+1,z,b);return(GM(M)-p+O)/7}function Xz(M){return Nz(M,this._week.dow,this._week.doy).week}x("w",["ww",2],"wo","week"),x("W",["WW",2],"Wo","isoWeek"),hM("w",WM,BM),hM("ww",WM,qM),hM("W",WM,BM),hM("WW",WM,qM),kM(["w","ww","W","WW"],(function(M,z,b,p){z[p.substr(0,1)]=_M(M)}));var hz={dow:0,doy:6};function mz(){return this._week.dow}function gz(){return this._week.doy}function Tz(M){var z=this.localeData().week(this);return null==M?z:this.add(7*(M-z),"d")}function yz(M){var z=Nz(this,1,4).week;return null==M?z:this.add(7*(M-z),"d")}function _z(M,z){return"string"!=typeof M?M:isNaN(M)?"number"==typeof(M=z.weekdaysParse(M))?M:null:parseInt(M,10)}function Sz(M,z){return"string"==typeof M?z.weekdaysParse(M)%7||7:isNaN(M)?null:M}function vz(M,z){return M.slice(z,7).concat(M.slice(0,z))}x("d",0,"do","day"),x("dd",0,0,(function(M){return this.localeData().weekdaysMin(this,M)})),x("ddd",0,0,(function(M){return this.localeData().weekdaysShort(this,M)})),x("dddd",0,0,(function(M){return this.localeData().weekdays(this,M)})),x("e",0,0,"weekday"),x("E",0,0,"isoWeekday"),hM("d",WM),hM("e",WM),hM("E",WM),hM("dd",(function(M,z){return z.weekdaysMinRegex(M)})),hM("ddd",(function(M,z){return z.weekdaysShortRegex(M)})),hM("dddd",(function(M,z){return z.weekdaysRegex(M)})),kM(["dd","ddd","dddd"],(function(M,z,b,p){var O=b._locale.weekdaysParse(M,p,b._strict);null!=O?z.d=O:r(b).invalidWeekday=M})),kM(["d","e","E"],(function(M,z,b,p){z[p]=_M(M)}));var kz="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),wz="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ez="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Cz=NM,Dz=NM,Pz=NM;function xz(M,z){var b=o(this._weekdays)?this._weekdays:this._weekdays[M&&!0!==M&&this._weekdays.isFormat.test(z)?"format":"standalone"];return!0===M?vz(b,this._week.dow):M?b[M.day()]:b}function jz(M){return!0===M?vz(this._weekdaysShort,this._week.dow):M?this._weekdaysShort[M.day()]:this._weekdaysShort}function Iz(M){return!0===M?vz(this._weekdaysMin,this._week.dow):M?this._weekdaysMin[M.day()]:this._weekdaysMin}function Hz(M,z,b){var p,O,o,c=M.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],p=0;p<7;++p)o=d([2e3,1]).day(p),this._minWeekdaysParse[p]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[p]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[p]=this.weekdays(o,"").toLocaleLowerCase();return b?"dddd"===z?-1!==(O=VM.call(this._weekdaysParse,c))?O:null:"ddd"===z?-1!==(O=VM.call(this._shortWeekdaysParse,c))?O:null:-1!==(O=VM.call(this._minWeekdaysParse,c))?O:null:"dddd"===z?-1!==(O=VM.call(this._weekdaysParse,c))||-1!==(O=VM.call(this._shortWeekdaysParse,c))||-1!==(O=VM.call(this._minWeekdaysParse,c))?O:null:"ddd"===z?-1!==(O=VM.call(this._shortWeekdaysParse,c))||-1!==(O=VM.call(this._weekdaysParse,c))||-1!==(O=VM.call(this._minWeekdaysParse,c))?O:null:-1!==(O=VM.call(this._minWeekdaysParse,c))||-1!==(O=VM.call(this._weekdaysParse,c))||-1!==(O=VM.call(this._shortWeekdaysParse,c))?O:null}function Yz(M,z,b){var p,O,o;if(this._weekdaysParseExact)return Hz.call(this,M,z,b);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),p=0;p<7;p++){if(O=d([2e3,1]).day(p),b&&!this._fullWeekdaysParse[p]&&(this._fullWeekdaysParse[p]=new RegExp("^"+this.weekdays(O,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[p]=new RegExp("^"+this.weekdaysShort(O,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[p]=new RegExp("^"+this.weekdaysMin(O,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[p]||(o="^"+this.weekdays(O,"")+"|^"+this.weekdaysShort(O,"")+"|^"+this.weekdaysMin(O,""),this._weekdaysParse[p]=new RegExp(o.replace(".",""),"i")),b&&"dddd"===z&&this._fullWeekdaysParse[p].test(M))return p;if(b&&"ddd"===z&&this._shortWeekdaysParse[p].test(M))return p;if(b&&"dd"===z&&this._minWeekdaysParse[p].test(M))return p;if(!b&&this._weekdaysParse[p].test(M))return p}}function Fz(M){if(!this.isValid())return null!=M?this:NaN;var z=ZM(this,"Day");return null!=M?(M=_z(M,this.localeData()),this.add(M-z,"d")):z}function Uz(M){if(!this.isValid())return null!=M?this:NaN;var z=(this.day()+7-this.localeData()._week.dow)%7;return null==M?z:this.add(M-z,"d")}function Gz(M){if(!this.isValid())return null!=M?this:NaN;if(null!=M){var z=Sz(M,this.localeData());return this.day(this.day()%7?z:z-7)}return this.day()||7}function Vz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysStrictRegex:this._weekdaysRegex):(A(this,"_weekdaysRegex")||(this._weekdaysRegex=Cz),this._weekdaysStrictRegex&&M?this._weekdaysStrictRegex:this._weekdaysRegex)}function Kz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(A(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Dz),this._weekdaysShortStrictRegex&&M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Qz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(A(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pz),this._weekdaysMinStrictRegex&&M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jz(){function M(M,z){return z.length-M.length}var z,b,p,O,o,c=[],A=[],q=[],e=[];for(z=0;z<7;z++)b=d([2e3,1]).day(z),p=TM(this.weekdaysMin(b,"")),O=TM(this.weekdaysShort(b,"")),o=TM(this.weekdays(b,"")),c.push(p),A.push(O),q.push(o),e.push(p),e.push(O),e.push(o);c.sort(M),A.sort(M),q.sort(M),e.sort(M),this._weekdaysRegex=new RegExp("^("+e.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+q.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+A.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+c.join("|")+")","i")}function Zz(){return this.hours()%12||12}function $z(){return this.hours()||24}function Mb(M,z){x(M,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),z)}))}function zb(M,z){return z._meridiemParse}function bb(M){return"p"===(M+"").toLowerCase().charAt(0)}x("H",["HH",2],0,"hour"),x("h",["hh",2],0,Zz),x("k",["kk",2],0,$z),x("hmm",0,0,(function(){return""+Zz.apply(this)+w(this.minutes(),2)})),x("hmmss",0,0,(function(){return""+Zz.apply(this)+w(this.minutes(),2)+w(this.seconds(),2)})),x("Hmm",0,0,(function(){return""+this.hours()+w(this.minutes(),2)})),x("Hmmss",0,0,(function(){return""+this.hours()+w(this.minutes(),2)+w(this.seconds(),2)})),Mb("a",!0),Mb("A",!1),hM("a",zb),hM("A",zb),hM("H",WM,XM),hM("h",WM,BM),hM("k",WM,BM),hM("HH",WM,qM),hM("hh",WM,qM),hM("kk",WM,qM),hM("hmm",tM),hM("hmmss",dM),hM("Hmm",tM),hM("Hmmss",dM),vM(["H","HH"],jM),vM(["k","kk"],(function(M,z,b){var p=_M(M);z[jM]=24===p?0:p})),vM(["a","A"],(function(M,z,b){b._isPm=b._locale.isPM(M),b._meridiem=M})),vM(["h","hh"],(function(M,z,b){z[jM]=_M(M),r(b).bigHour=!0})),vM("hmm",(function(M,z,b){var p=M.length-2;z[jM]=_M(M.substr(0,p)),z[IM]=_M(M.substr(p)),r(b).bigHour=!0})),vM("hmmss",(function(M,z,b){var p=M.length-4,O=M.length-2;z[jM]=_M(M.substr(0,p)),z[IM]=_M(M.substr(p,2)),z[HM]=_M(M.substr(O)),r(b).bigHour=!0})),vM("Hmm",(function(M,z,b){var p=M.length-2;z[jM]=_M(M.substr(0,p)),z[IM]=_M(M.substr(p))})),vM("Hmmss",(function(M,z,b){var p=M.length-4,O=M.length-2;z[jM]=_M(M.substr(0,p)),z[IM]=_M(M.substr(p,2)),z[HM]=_M(M.substr(O))}));var pb=/[ap]\.?m?\.?/i,Ob=JM("Hours",!0);function ob(M,z,b){return M>11?b?"pm":"PM":b?"am":"AM"}var cb,Ab={calendar:v,longDateFormat:F,invalidDate:G,ordinal:K,dayOfMonthOrdinalParse:Q,relativeTime:Z,months:Oz,monthsShort:oz,week:hz,weekdays:kz,weekdaysMin:Ez,weekdaysShort:wz,meridiemParse:pb},qb={},eb={};function nb(M,z){var b,p=Math.min(M.length,z.length);for(b=0;b<p;b+=1)if(M[b]!==z[b])return b;return p}function ab(M){return M?M.toLowerCase().replace("_","-"):M}function Wb(M){for(var z,b,p,O,o=0;o<M.length;){for(z=(O=ab(M[o]).split("-")).length,b=(b=ab(M[o+1]))?b.split("-"):null;z>0;){if(p=db(O.slice(0,z).join("-")))return p;if(b&&b.length>=z&&nb(O,b)>=z-1)break;z--}o++}return cb}function tb(M){return!(!M||!M.match("^[^/\\\\]*$"))}function db(z){var b=null;if(void 0===qb[z]&&M&&M.exports&&tb(z))try{b=cb._abbr,xM(),ib(b)}catch(M){qb[z]=null}return qb[z]}function ib(M,z){var b;return M&&((b=e(z)?ub(M):rb(M,z))?cb=b:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+M+" not found. Did you forget to load it?")),cb._abbr}function rb(M,z){if(null!==z){var b,p=Ab;if(z.abbr=M,null!=qb[M])g("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),p=qb[M]._config;else if(null!=z.parentLocale)if(null!=qb[z.parentLocale])p=qb[z.parentLocale]._config;else{if(null==(b=db(z.parentLocale)))return eb[z.parentLocale]||(eb[z.parentLocale]=[]),eb[z.parentLocale].push({name:M,config:z}),null;p=b._config}return qb[M]=new S(_(p,z)),eb[M]&&eb[M].forEach((function(M){rb(M.name,M.config)})),ib(M),qb[M]}return delete qb[M],null}function sb(M,z){if(null!=z){var b,p,O=Ab;null!=qb[M]&&null!=qb[M].parentLocale?qb[M].set(_(qb[M]._config,z)):(null!=(p=db(M))&&(O=p._config),z=_(O,z),null==p&&(z.abbr=M),(b=new S(z)).parentLocale=qb[M],qb[M]=b),ib(M)}else null!=qb[M]&&(null!=qb[M].parentLocale?(qb[M]=qb[M].parentLocale,M===ib()&&ib(M)):null!=qb[M]&&delete qb[M]);return qb[M]}function ub(M){var z;if(M&&M._locale&&M._locale._abbr&&(M=M._locale._abbr),!M)return cb;if(!o(M)){if(z=db(M))return z;M=[M]}return Wb(M)}function fb(){return h(qb)}function Rb(M){var z,b=M._a;return b&&-2===r(M).overflow&&(z=b[DM]<0||b[DM]>11?DM:b[PM]<1||b[PM]>pz(b[CM],b[DM])?PM:b[jM]<0||b[jM]>24||24===b[jM]&&(0!==b[IM]||0!==b[HM]||0!==b[YM])?jM:b[IM]<0||b[IM]>59?IM:b[HM]<0||b[HM]>59?HM:b[YM]<0||b[YM]>999?YM:-1,r(M)._overflowDayOfYear&&(z<CM||z>PM)&&(z=PM),r(M)._overflowWeeks&&-1===z&&(z=FM),r(M)._overflowWeekday&&-1===z&&(z=UM),r(M).overflow=z),M}var lb=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Lb=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nb=/Z|[+-]\d\d(?::?\d\d)?/,Bb=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Xb=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],hb=/^\/?Date\((-?\d+)/i,mb=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,gb={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Tb(M){var z,b,p,O,o,c,A=M._i,q=lb.exec(A)||Lb.exec(A),e=Bb.length,n=Xb.length;if(q){for(r(M).iso=!0,z=0,b=e;z<b;z++)if(Bb[z][1].exec(q[1])){O=Bb[z][0],p=!1!==Bb[z][2];break}if(null==O)return void(M._isValid=!1);if(q[3]){for(z=0,b=n;z<b;z++)if(Xb[z][1].exec(q[3])){o=(q[2]||" ")+Xb[z][0];break}if(null==o)return void(M._isValid=!1)}if(!p&&null!=o)return void(M._isValid=!1);if(q[4]){if(!Nb.exec(q[4]))return void(M._isValid=!1);c="Z"}M._f=O+(o||"")+(c||""),jb(M)}else M._isValid=!1}function yb(M,z,b,p,O,o){var c=[_b(M),oz.indexOf(z),parseInt(b,10),parseInt(p,10),parseInt(O,10)];return o&&c.push(parseInt(o,10)),c}function _b(M){var z=parseInt(M,10);return z<=49?2e3+z:z<=999?1900+z:z}function Sb(M){return M.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function vb(M,z,b){return!M||wz.indexOf(M)===new Date(z[0],z[1],z[2]).getDay()||(r(b).weekdayMismatch=!0,b._isValid=!1,!1)}function kb(M,z,b){if(M)return gb[M];if(z)return 0;var p=parseInt(b,10),O=p%100;return(p-O)/100*60+O}function wb(M){var z,b=mb.exec(Sb(M._i));if(b){if(z=yb(b[4],b[3],b[2],b[5],b[6],b[7]),!vb(b[1],z,M))return;M._a=z,M._tzm=kb(b[8],b[9],b[10]),M._d=Rz.apply(null,M._a),M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),r(M).rfc2822=!0}else M._isValid=!1}function Eb(M){var z=hb.exec(M._i);null===z?(Tb(M),!1===M._isValid&&(delete M._isValid,wb(M),!1===M._isValid&&(delete M._isValid,M._strict?M._isValid=!1:p.createFromInputFallback(M)))):M._d=new Date(+z[1])}function Cb(M,z,b){return null!=M?M:null!=z?z:b}function Db(M){var z=new Date(p.now());return M._useUTC?[z.getUTCFullYear(),z.getUTCMonth(),z.getUTCDate()]:[z.getFullYear(),z.getMonth(),z.getDate()]}function Pb(M){var z,b,p,O,o,c=[];if(!M._d){for(p=Db(M),M._w&&null==M._a[PM]&&null==M._a[DM]&&xb(M),null!=M._dayOfYear&&(o=Cb(M._a[CM],p[CM]),(M._dayOfYear>GM(o)||0===M._dayOfYear)&&(r(M)._overflowDayOfYear=!0),b=Rz(o,0,M._dayOfYear),M._a[DM]=b.getUTCMonth(),M._a[PM]=b.getUTCDate()),z=0;z<3&&null==M._a[z];++z)M._a[z]=c[z]=p[z];for(;z<7;z++)M._a[z]=c[z]=null==M._a[z]?2===z?1:0:M._a[z];24===M._a[jM]&&0===M._a[IM]&&0===M._a[HM]&&0===M._a[YM]&&(M._nextDay=!0,M._a[jM]=0),M._d=(M._useUTC?Rz:fz).apply(null,c),O=M._useUTC?M._d.getUTCDay():M._d.getDay(),null!=M._tzm&&M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),M._nextDay&&(M._a[jM]=24),M._w&&void 0!==M._w.d&&M._w.d!==O&&(r(M).weekdayMismatch=!0)}}function xb(M){var z,b,p,O,o,c,A,q,e;null!=(z=M._w).GG||null!=z.W||null!=z.E?(o=1,c=4,b=Cb(z.GG,M._a[CM],Nz(Kb(),1,4).year),p=Cb(z.W,1),((O=Cb(z.E,1))<1||O>7)&&(q=!0)):(o=M._locale._week.dow,c=M._locale._week.doy,e=Nz(Kb(),o,c),b=Cb(z.gg,M._a[CM],e.year),p=Cb(z.w,e.week),null!=z.d?((O=z.d)<0||O>6)&&(q=!0):null!=z.e?(O=z.e+o,(z.e<0||z.e>6)&&(q=!0)):O=o),p<1||p>Bz(b,o,c)?r(M)._overflowWeeks=!0:null!=q?r(M)._overflowWeekday=!0:(A=Lz(b,p,O,o,c),M._a[CM]=A.year,M._dayOfYear=A.dayOfYear)}function jb(M){if(M._f!==p.ISO_8601)if(M._f!==p.RFC_2822){M._a=[],r(M).empty=!0;var z,b,O,o,c,A,q,e=""+M._i,n=e.length,a=0;for(q=(O=Y(M._f,M._locale).match(E)||[]).length,z=0;z<q;z++)o=O[z],(b=(e.match(mM(o,M))||[])[0])&&((c=e.substr(0,e.indexOf(b))).length>0&&r(M).unusedInput.push(c),e=e.slice(e.indexOf(b)+b.length),a+=b.length),P[o]?(b?r(M).empty=!1:r(M).unusedTokens.push(o),wM(o,b,M)):M._strict&&!b&&r(M).unusedTokens.push(o);r(M).charsLeftOver=n-a,e.length>0&&r(M).unusedInput.push(e),M._a[jM]<=12&&!0===r(M).bigHour&&M._a[jM]>0&&(r(M).bigHour=void 0),r(M).parsedDateParts=M._a.slice(0),r(M).meridiem=M._meridiem,M._a[jM]=Ib(M._locale,M._a[jM],M._meridiem),null!==(A=r(M).era)&&(M._a[CM]=M._locale.erasConvertYear(A,M._a[CM])),Pb(M),Rb(M)}else wb(M);else Tb(M)}function Ib(M,z,b){var p;return null==b?z:null!=M.meridiemHour?M.meridiemHour(z,b):null!=M.isPM?((p=M.isPM(b))&&z<12&&(z+=12),p||12!==z||(z=0),z):z}function Hb(M){var z,b,p,O,o,c,A=!1,q=M._f.length;if(0===q)return r(M).invalidFormat=!0,void(M._d=new Date(NaN));for(O=0;O<q;O++)o=0,c=!1,z=l({},M),null!=M._useUTC&&(z._useUTC=M._useUTC),z._f=M._f[O],jb(z),s(z)&&(c=!0),o+=r(z).charsLeftOver,o+=10*r(z).unusedTokens.length,r(z).score=o,A?o<p&&(p=o,b=z):(null==p||o<p||c)&&(p=o,b=z,c&&(A=!0));t(M,b||z)}function Yb(M){if(!M._d){var z=pM(M._i),b=void 0===z.day?z.date:z.day;M._a=W([z.year,z.month,b,z.hour,z.minute,z.second,z.millisecond],(function(M){return M&&parseInt(M,10)})),Pb(M)}}function Fb(M){var z=new L(Rb(Ub(M)));return z._nextDay&&(z.add(1,"d"),z._nextDay=void 0),z}function Ub(M){var z=M._i,b=M._f;return M._locale=M._locale||ub(M._l),null===z||void 0===b&&""===z?u({nullInput:!0}):("string"==typeof z&&(M._i=z=M._locale.preparse(z)),N(z)?new L(Rb(z)):(a(z)?M._d=z:o(b)?Hb(M):b?jb(M):Gb(M),s(M)||(M._d=null),M))}function Gb(M){var z=M._i;e(z)?M._d=new Date(p.now()):a(z)?M._d=new Date(z.valueOf()):"string"==typeof z?Eb(M):o(z)?(M._a=W(z.slice(0),(function(M){return parseInt(M,10)})),Pb(M)):c(z)?Yb(M):n(z)?M._d=new Date(z):p.createFromInputFallback(M)}function Vb(M,z,b,p,O){var A={};return!0!==z&&!1!==z||(p=z,z=void 0),!0!==b&&!1!==b||(p=b,b=void 0),(c(M)&&q(M)||o(M)&&0===M.length)&&(M=void 0),A._isAMomentObject=!0,A._useUTC=A._isUTC=O,A._l=b,A._i=M,A._f=z,A._strict=p,Fb(A)}function Kb(M,z,b,p){return Vb(M,z,b,p,!1)}p.createFromInputFallback=X("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(M){M._d=new Date(M._i+(M._useUTC?" UTC":""))})),p.ISO_8601=function(){},p.RFC_2822=function(){};var Qb=X("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var M=Kb.apply(null,arguments);return this.isValid()&&M.isValid()?M<this?this:M:u()})),Jb=X("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var M=Kb.apply(null,arguments);return this.isValid()&&M.isValid()?M>this?this:M:u()}));function Zb(M,z){var b,p;if(1===z.length&&o(z[0])&&(z=z[0]),!z.length)return Kb();for(b=z[0],p=1;p<z.length;++p)z[p].isValid()&&!z[p][M](b)||(b=z[p]);return b}function $b(){return Zb("isBefore",[].slice.call(arguments,0))}function Mp(){return Zb("isAfter",[].slice.call(arguments,0))}var zp=function(){return Date.now?Date.now():+new Date},bp=["year","quarter","month","week","day","hour","minute","second","millisecond"];function pp(M){var z,b,p=!1,O=bp.length;for(z in M)if(A(M,z)&&(-1===VM.call(bp,z)||null!=M[z]&&isNaN(M[z])))return!1;for(b=0;b<O;++b)if(M[bp[b]]){if(p)return!1;parseFloat(M[bp[b]])!==_M(M[bp[b]])&&(p=!0)}return!0}function Op(){return this._isValid}function op(){return gp(NaN)}function cp(M){var z=pM(M),b=z.year||0,p=z.quarter||0,O=z.month||0,o=z.week||z.isoWeek||0,c=z.day||0,A=z.hour||0,q=z.minute||0,e=z.second||0,n=z.millisecond||0;this._isValid=pp(z),this._milliseconds=+n+1e3*e+6e4*q+1e3*A*60*60,this._days=+c+7*o,this._months=+O+3*p+12*b,this._data={},this._locale=ub(),this._bubble()}function Ap(M){return M instanceof cp}function qp(M){return M<0?-1*Math.round(-1*M):Math.round(M)}function ep(M,z,b){var p,O=Math.min(M.length,z.length),o=Math.abs(M.length-z.length),c=0;for(p=0;p<O;p++)(b&&M[p]!==z[p]||!b&&_M(M[p])!==_M(z[p]))&&c++;return c+o}function np(M,z){x(M,0,0,(function(){var M=this.utcOffset(),b="+";return M<0&&(M=-M,b="-"),b+w(~~(M/60),2)+z+w(~~M%60,2)}))}np("Z",":"),np("ZZ",""),hM("Z",lM),hM("ZZ",lM),vM(["Z","ZZ"],(function(M,z,b){b._useUTC=!0,b._tzm=Wp(lM,M)}));var ap=/([\+\-]|\d\d)/gi;function Wp(M,z){var b,p,O=(z||"").match(M);return null===O?null:0===(p=60*(b=((O[O.length-1]||[])+"").match(ap)||["-",0,0])[1]+_M(b[2]))?0:"+"===b[0]?p:-p}function tp(M,z){var b,O;return z._isUTC?(b=z.clone(),O=(N(M)||a(M)?M.valueOf():Kb(M).valueOf())-b.valueOf(),b._d.setTime(b._d.valueOf()+O),p.updateOffset(b,!1),b):Kb(M).local()}function dp(M){return-Math.round(M._d.getTimezoneOffset())}function ip(M,z,b){var O,o=this._offset||0;if(!this.isValid())return null!=M?this:NaN;if(null!=M){if("string"==typeof M){if(null===(M=Wp(lM,M)))return this}else Math.abs(M)<16&&!b&&(M*=60);return!this._isUTC&&z&&(O=dp(this)),this._offset=M,this._isUTC=!0,null!=O&&this.add(O,"m"),o!==M&&(!z||this._changeInProgress?vp(this,gp(M-o,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,p.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?o:dp(this)}function rp(M,z){return null!=M?("string"!=typeof M&&(M=-M),this.utcOffset(M,z),this):-this.utcOffset()}function sp(M){return this.utcOffset(0,M)}function up(M){return this._isUTC&&(this.utcOffset(0,M),this._isUTC=!1,M&&this.subtract(dp(this),"m")),this}function fp(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var M=Wp(RM,this._i);null!=M?this.utcOffset(M):this.utcOffset(0,!0)}return this}function Rp(M){return!!this.isValid()&&(M=M?Kb(M).utcOffset():0,(this.utcOffset()-M)%60==0)}function lp(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Lp(){if(!e(this._isDSTShifted))return this._isDSTShifted;var M,z={};return l(z,this),(z=Ub(z))._a?(M=z._isUTC?d(z._a):Kb(z._a),this._isDSTShifted=this.isValid()&&ep(z._a,M.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Np(){return!!this.isValid()&&!this._isUTC}function Bp(){return!!this.isValid()&&this._isUTC}function Xp(){return!!this.isValid()&&this._isUTC&&0===this._offset}p.updateOffset=function(){};var hp=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,mp=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function gp(M,z){var b,p,O,o=M,c=null;return Ap(M)?o={ms:M._milliseconds,d:M._days,M:M._months}:n(M)||!isNaN(+M)?(o={},z?o[z]=+M:o.milliseconds=+M):(c=hp.exec(M))?(b="-"===c[1]?-1:1,o={y:0,d:_M(c[PM])*b,h:_M(c[jM])*b,m:_M(c[IM])*b,s:_M(c[HM])*b,ms:_M(qp(1e3*c[YM]))*b}):(c=mp.exec(M))?(b="-"===c[1]?-1:1,o={y:Tp(c[2],b),M:Tp(c[3],b),w:Tp(c[4],b),d:Tp(c[5],b),h:Tp(c[6],b),m:Tp(c[7],b),s:Tp(c[8],b)}):null==o?o={}:"object"==typeof o&&("from"in o||"to"in o)&&(O=_p(Kb(o.from),Kb(o.to)),(o={}).ms=O.milliseconds,o.M=O.months),p=new cp(o),Ap(M)&&A(M,"_locale")&&(p._locale=M._locale),Ap(M)&&A(M,"_isValid")&&(p._isValid=M._isValid),p}function Tp(M,z){var b=M&&parseFloat(M.replace(",","."));return(isNaN(b)?0:b)*z}function yp(M,z){var b={};return b.months=z.month()-M.month()+12*(z.year()-M.year()),M.clone().add(b.months,"M").isAfter(z)&&--b.months,b.milliseconds=+z-+M.clone().add(b.months,"M"),b}function _p(M,z){var b;return M.isValid()&&z.isValid()?(z=tp(z,M),M.isBefore(z)?b=yp(M,z):((b=yp(z,M)).milliseconds=-b.milliseconds,b.months=-b.months),b):{milliseconds:0,months:0}}function Sp(M,z){return function(b,p){var O;return null===p||isNaN(+p)||(g(z,"moment()."+z+"(period, number) is deprecated. Please use moment()."+z+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),O=b,b=p,p=O),vp(this,gp(b,p),M),this}}function vp(M,z,b,O){var o=z._milliseconds,c=qp(z._days),A=qp(z._months);M.isValid()&&(O=null==O||O,A&&tz(M,ZM(M,"Month")+A*b),c&&$M(M,"Date",ZM(M,"Date")+c*b),o&&M._d.setTime(M._d.valueOf()+o*b),O&&p.updateOffset(M,c||A))}gp.fn=cp.prototype,gp.invalid=op;var kp=Sp(1,"add"),wp=Sp(-1,"subtract");function Ep(M){return"string"==typeof M||M instanceof String}function Cp(M){return N(M)||a(M)||Ep(M)||n(M)||Pp(M)||Dp(M)||null==M}function Dp(M){var z,b,p=c(M)&&!q(M),O=!1,o=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],e=o.length;for(z=0;z<e;z+=1)b=o[z],O=O||A(M,b);return p&&O}function Pp(M){var z=o(M),b=!1;return z&&(b=0===M.filter((function(z){return!n(z)&&Ep(M)})).length),z&&b}function xp(M){var z,b,p=c(M)&&!q(M),O=!1,o=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(z=0;z<o.length;z+=1)b=o[z],O=O||A(M,b);return p&&O}function jp(M,z){var b=M.diff(z,"days",!0);return b<-6?"sameElse":b<-1?"lastWeek":b<0?"lastDay":b<1?"sameDay":b<2?"nextDay":b<7?"nextWeek":"sameElse"}function Ip(M,z){1===arguments.length&&(arguments[0]?Cp(arguments[0])?(M=arguments[0],z=void 0):xp(arguments[0])&&(z=arguments[0],M=void 0):(M=void 0,z=void 0));var b=M||Kb(),O=tp(b,this).startOf("day"),o=p.calendarFormat(this,O)||"sameElse",c=z&&(T(z[o])?z[o].call(this,b):z[o]);return this.format(c||this.localeData().calendar(o,this,Kb(b)))}function Hp(){return new L(this)}function Yp(M,z){var b=N(M)?M:Kb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=bM(z)||"millisecond")?this.valueOf()>b.valueOf():b.valueOf()<this.clone().startOf(z).valueOf())}function Fp(M,z){var b=N(M)?M:Kb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=bM(z)||"millisecond")?this.valueOf()<b.valueOf():this.clone().endOf(z).valueOf()<b.valueOf())}function Up(M,z,b,p){var O=N(M)?M:Kb(M),o=N(z)?z:Kb(z);return!!(this.isValid()&&O.isValid()&&o.isValid())&&("("===(p=p||"()")[0]?this.isAfter(O,b):!this.isBefore(O,b))&&(")"===p[1]?this.isBefore(o,b):!this.isAfter(o,b))}function Gp(M,z){var b,p=N(M)?M:Kb(M);return!(!this.isValid()||!p.isValid())&&("millisecond"===(z=bM(z)||"millisecond")?this.valueOf()===p.valueOf():(b=p.valueOf(),this.clone().startOf(z).valueOf()<=b&&b<=this.clone().endOf(z).valueOf()))}function Vp(M,z){return this.isSame(M,z)||this.isAfter(M,z)}function Kp(M,z){return this.isSame(M,z)||this.isBefore(M,z)}function Qp(M,z,b){var p,O,o;if(!this.isValid())return NaN;if(!(p=tp(M,this)).isValid())return NaN;switch(O=6e4*(p.utcOffset()-this.utcOffset()),z=bM(z)){case"year":o=Jp(this,p)/12;break;case"month":o=Jp(this,p);break;case"quarter":o=Jp(this,p)/3;break;case"second":o=(this-p)/1e3;break;case"minute":o=(this-p)/6e4;break;case"hour":o=(this-p)/36e5;break;case"day":o=(this-p-O)/864e5;break;case"week":o=(this-p-O)/6048e5;break;default:o=this-p}return b?o:yM(o)}function Jp(M,z){if(M.date()<z.date())return-Jp(z,M);var b=12*(z.year()-M.year())+(z.month()-M.month()),p=M.clone().add(b,"months");return-(b+(z-p<0?(z-p)/(p-M.clone().add(b-1,"months")):(z-p)/(M.clone().add(b+1,"months")-p)))||0}function Zp(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function $p(M){if(!this.isValid())return null;var z=!0!==M,b=z?this.clone().utc():this;return b.year()<0||b.year()>9999?H(b,z?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?z?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",H(b,"Z")):H(b,z?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function MO(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var M,z,b,p,O="moment",o="";return this.isLocal()||(O=0===this.utcOffset()?"moment.utc":"moment.parseZone",o="Z"),M="["+O+'("]',z=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",b="-MM-DD[T]HH:mm:ss.SSS",p=o+'[")]',this.format(M+z+b+p)}function zO(M){M||(M=this.isUtc()?p.defaultFormatUtc:p.defaultFormat);var z=H(this,M);return this.localeData().postformat(z)}function bO(M,z){return this.isValid()&&(N(M)&&M.isValid()||Kb(M).isValid())?gp({to:this,from:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function pO(M){return this.from(Kb(),M)}function OO(M,z){return this.isValid()&&(N(M)&&M.isValid()||Kb(M).isValid())?gp({from:this,to:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function oO(M){return this.to(Kb(),M)}function cO(M){var z;return void 0===M?this._locale._abbr:(null!=(z=ub(M))&&(this._locale=z),this)}p.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",p.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var AO=X("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(M){return void 0===M?this.localeData():this.locale(M)}));function qO(){return this._locale}var eO=1e3,nO=60*eO,aO=60*nO,WO=3506328*aO;function tO(M,z){return(M%z+z)%z}function dO(M,z,b){return M<100&&M>=0?new Date(M+400,z,b)-WO:new Date(M,z,b).valueOf()}function iO(M,z,b){return M<100&&M>=0?Date.UTC(M+400,z,b)-WO:Date.UTC(M,z,b)}function rO(M){var z,b;if(void 0===(M=bM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:dO,M){case"year":z=b(this.year(),0,1);break;case"quarter":z=b(this.year(),this.month()-this.month()%3,1);break;case"month":z=b(this.year(),this.month(),1);break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":z=b(this.year(),this.month(),this.date());break;case"hour":z=this._d.valueOf(),z-=tO(z+(this._isUTC?0:this.utcOffset()*nO),aO);break;case"minute":z=this._d.valueOf(),z-=tO(z,nO);break;case"second":z=this._d.valueOf(),z-=tO(z,eO)}return this._d.setTime(z),p.updateOffset(this,!0),this}function sO(M){var z,b;if(void 0===(M=bM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:dO,M){case"year":z=b(this.year()+1,0,1)-1;break;case"quarter":z=b(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":z=b(this.year(),this.month()+1,1)-1;break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":z=b(this.year(),this.month(),this.date()+1)-1;break;case"hour":z=this._d.valueOf(),z+=aO-tO(z+(this._isUTC?0:this.utcOffset()*nO),aO)-1;break;case"minute":z=this._d.valueOf(),z+=nO-tO(z,nO)-1;break;case"second":z=this._d.valueOf(),z+=eO-tO(z,eO)-1}return this._d.setTime(z),p.updateOffset(this,!0),this}function uO(){return this._d.valueOf()-6e4*(this._offset||0)}function fO(){return Math.floor(this.valueOf()/1e3)}function RO(){return new Date(this.valueOf())}function lO(){var M=this;return[M.year(),M.month(),M.date(),M.hour(),M.minute(),M.second(),M.millisecond()]}function LO(){var M=this;return{years:M.year(),months:M.month(),date:M.date(),hours:M.hours(),minutes:M.minutes(),seconds:M.seconds(),milliseconds:M.milliseconds()}}function NO(){return this.isValid()?this.toISOString():null}function BO(){return s(this)}function XO(){return t({},r(this))}function hO(){return r(this).overflow}function mO(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function gO(M,z){var b,O,o,c=this._eras||ub("en")._eras;for(b=0,O=c.length;b<O;++b)switch("string"==typeof c[b].since&&(o=p(c[b].since).startOf("day"),c[b].since=o.valueOf()),typeof c[b].until){case"undefined":c[b].until=1/0;break;case"string":o=p(c[b].until).startOf("day").valueOf(),c[b].until=o.valueOf()}return c}function TO(M,z,b){var p,O,o,c,A,q=this.eras();for(M=M.toUpperCase(),p=0,O=q.length;p<O;++p)if(o=q[p].name.toUpperCase(),c=q[p].abbr.toUpperCase(),A=q[p].narrow.toUpperCase(),b)switch(z){case"N":case"NN":case"NNN":if(c===M)return q[p];break;case"NNNN":if(o===M)return q[p];break;case"NNNNN":if(A===M)return q[p]}else if([o,c,A].indexOf(M)>=0)return q[p]}function yO(M,z){var b=M.since<=M.until?1:-1;return void 0===z?p(M.since).year():p(M.since).year()+(z-M.offset)*b}function _O(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].name;if(p[M].until<=b&&b<=p[M].since)return p[M].name}return""}function SO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].narrow;if(p[M].until<=b&&b<=p[M].since)return p[M].narrow}return""}function vO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].abbr;if(p[M].until<=b&&b<=p[M].since)return p[M].abbr}return""}function kO(){var M,z,b,O,o=this.localeData().eras();for(M=0,z=o.length;M<z;++M)if(b=o[M].since<=o[M].until?1:-1,O=this.clone().startOf("day").valueOf(),o[M].since<=O&&O<=o[M].until||o[M].until<=O&&O<=o[M].since)return(this.year()-p(o[M].since).year())*b+o[M].offset;return this.year()}function wO(M){return A(this,"_erasNameRegex")||IO.call(this),M?this._erasNameRegex:this._erasRegex}function EO(M){return A(this,"_erasAbbrRegex")||IO.call(this),M?this._erasAbbrRegex:this._erasRegex}function CO(M){return A(this,"_erasNarrowRegex")||IO.call(this),M?this._erasNarrowRegex:this._erasRegex}function DO(M,z){return z.erasAbbrRegex(M)}function PO(M,z){return z.erasNameRegex(M)}function xO(M,z){return z.erasNarrowRegex(M)}function jO(M,z){return z._eraYearOrdinalRegex||uM}function IO(){var M,z,b,p,O,o=[],c=[],A=[],q=[],e=this.eras();for(M=0,z=e.length;M<z;++M)b=TM(e[M].name),p=TM(e[M].abbr),O=TM(e[M].narrow),c.push(b),o.push(p),A.push(O),q.push(b),q.push(p),q.push(O);this._erasRegex=new RegExp("^("+q.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+c.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+o.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+A.join("|")+")","i")}function HO(M,z){x(0,[M,M.length],0,z)}function YO(M){return QO.call(this,M,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)}function FO(M){return QO.call(this,M,this.isoWeek(),this.isoWeekday(),1,4)}function UO(){return Bz(this.year(),1,4)}function GO(){return Bz(this.isoWeekYear(),1,4)}function VO(){var M=this.localeData()._week;return Bz(this.year(),M.dow,M.doy)}function KO(){var M=this.localeData()._week;return Bz(this.weekYear(),M.dow,M.doy)}function QO(M,z,b,p,O){var o;return null==M?Nz(this,p,O).year:(z>(o=Bz(M,p,O))&&(z=o),JO.call(this,M,z,b,p,O))}function JO(M,z,b,p,O){var o=Lz(M,z,b,p,O),c=Rz(o.year,0,o.dayOfYear);return this.year(c.getUTCFullYear()),this.month(c.getUTCMonth()),this.date(c.getUTCDate()),this}function ZO(M){return null==M?Math.ceil((this.month()+1)/3):this.month(3*(M-1)+this.month()%3)}x("N",0,0,"eraAbbr"),x("NN",0,0,"eraAbbr"),x("NNN",0,0,"eraAbbr"),x("NNNN",0,0,"eraName"),x("NNNNN",0,0,"eraNarrow"),x("y",["y",1],"yo","eraYear"),x("y",["yy",2],0,"eraYear"),x("y",["yyy",3],0,"eraYear"),x("y",["yyyy",4],0,"eraYear"),hM("N",DO),hM("NN",DO),hM("NNN",DO),hM("NNNN",PO),hM("NNNNN",xO),vM(["N","NN","NNN","NNNN","NNNNN"],(function(M,z,b,p){var O=b._locale.erasParse(M,p,b._strict);O?r(b).era=O:r(b).invalidEra=M})),hM("y",uM),hM("yy",uM),hM("yyy",uM),hM("yyyy",uM),hM("yo",jO),vM(["y","yy","yyy","yyyy"],CM),vM(["yo"],(function(M,z,b,p){var O;b._locale._eraYearOrdinalRegex&&(O=M.match(b._locale._eraYearOrdinalRegex)),b._locale.eraYearOrdinalParse?z[CM]=b._locale.eraYearOrdinalParse(M,O):z[CM]=parseInt(M,10)})),x(0,["gg",2],0,(function(){return this.weekYear()%100})),x(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),HO("gggg","weekYear"),HO("ggggg","weekYear"),HO("GGGG","isoWeekYear"),HO("GGGGG","isoWeekYear"),hM("G",fM),hM("g",fM),hM("GG",WM,qM),hM("gg",WM,qM),hM("GGGG",rM,nM),hM("gggg",rM,nM),hM("GGGGG",sM,aM),hM("ggggg",sM,aM),kM(["gggg","ggggg","GGGG","GGGGG"],(function(M,z,b,p){z[p.substr(0,2)]=_M(M)})),kM(["gg","GG"],(function(M,z,b,O){z[O]=p.parseTwoDigitYear(M)})),x("Q",0,"Qo","quarter"),hM("Q",AM),vM("Q",(function(M,z){z[DM]=3*(_M(M)-1)})),x("D",["DD",2],"Do","date"),hM("D",WM,BM),hM("DD",WM,qM),hM("Do",(function(M,z){return M?z._dayOfMonthOrdinalParse||z._ordinalParse:z._dayOfMonthOrdinalParseLenient})),vM(["D","DD"],PM),vM("Do",(function(M,z){z[PM]=_M(M.match(WM)[0])}));var $O=JM("Date",!0);function Mo(M){var z=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==M?z:this.add(M-z,"d")}x("DDD",["DDDD",3],"DDDo","dayOfYear"),hM("DDD",iM),hM("DDDD",eM),vM(["DDD","DDDD"],(function(M,z,b){b._dayOfYear=_M(M)})),x("m",["mm",2],0,"minute"),hM("m",WM,XM),hM("mm",WM,qM),vM(["m","mm"],IM);var zo=JM("Minutes",!1);x("s",["ss",2],0,"second"),hM("s",WM,XM),hM("ss",WM,qM),vM(["s","ss"],HM);var bo,po,Oo=JM("Seconds",!1);for(x("S",0,0,(function(){return~~(this.millisecond()/100)})),x(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),x(0,["SSS",3],0,"millisecond"),x(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),x(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),x(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),x(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),x(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),x(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),hM("S",iM,AM),hM("SS",iM,qM),hM("SSS",iM,eM),bo="SSSS";bo.length<=9;bo+="S")hM(bo,uM);function oo(M,z){z[YM]=_M(1e3*("0."+M))}for(bo="S";bo.length<=9;bo+="S")vM(bo,oo);function co(){return this._isUTC?"UTC":""}function Ao(){return this._isUTC?"Coordinated Universal Time":""}po=JM("Milliseconds",!1),x("z",0,0,"zoneAbbr"),x("zz",0,0,"zoneName");var qo=L.prototype;function eo(M){return Kb(1e3*M)}function no(){return Kb.apply(null,arguments).parseZone()}function ao(M){return M}qo.add=kp,qo.calendar=Ip,qo.clone=Hp,qo.diff=Qp,qo.endOf=sO,qo.format=zO,qo.from=bO,qo.fromNow=pO,qo.to=OO,qo.toNow=oO,qo.get=Mz,qo.invalidAt=hO,qo.isAfter=Yp,qo.isBefore=Fp,qo.isBetween=Up,qo.isSame=Gp,qo.isSameOrAfter=Vp,qo.isSameOrBefore=Kp,qo.isValid=BO,qo.lang=AO,qo.locale=cO,qo.localeData=qO,qo.max=Jb,qo.min=Qb,qo.parsingFlags=XO,qo.set=zz,qo.startOf=rO,qo.subtract=wp,qo.toArray=lO,qo.toObject=LO,qo.toDate=RO,qo.toISOString=$p,qo.inspect=MO,"undefined"!=typeof Symbol&&null!=Symbol.for&&(qo[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),qo.toJSON=NO,qo.toString=Zp,qo.unix=fO,qo.valueOf=uO,qo.creationData=mO,qo.eraName=_O,qo.eraNarrow=SO,qo.eraAbbr=vO,qo.eraYear=kO,qo.year=KM,qo.isLeapYear=QM,qo.weekYear=YO,qo.isoWeekYear=FO,qo.quarter=qo.quarters=ZO,qo.month=dz,qo.daysInMonth=iz,qo.week=qo.weeks=Tz,qo.isoWeek=qo.isoWeeks=yz,qo.weeksInYear=VO,qo.weeksInWeekYear=KO,qo.isoWeeksInYear=UO,qo.isoWeeksInISOWeekYear=GO,qo.date=$O,qo.day=qo.days=Fz,qo.weekday=Uz,qo.isoWeekday=Gz,qo.dayOfYear=Mo,qo.hour=qo.hours=Ob,qo.minute=qo.minutes=zo,qo.second=qo.seconds=Oo,qo.millisecond=qo.milliseconds=po,qo.utcOffset=ip,qo.utc=sp,qo.local=up,qo.parseZone=fp,qo.hasAlignedHourOffset=Rp,qo.isDST=lp,qo.isLocal=Np,qo.isUtcOffset=Bp,qo.isUtc=Xp,qo.isUTC=Xp,qo.zoneAbbr=co,qo.zoneName=Ao,qo.dates=X("dates accessor is deprecated. Use date instead.",$O),qo.months=X("months accessor is deprecated. Use month instead",dz),qo.years=X("years accessor is deprecated. Use year instead",KM),qo.zone=X("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",rp),qo.isDSTShifted=X("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Lp);var Wo=S.prototype;function to(M,z,b,p){var O=ub(),o=d().set(p,z);return O[b](o,M)}function io(M,z,b){if(n(M)&&(z=M,M=void 0),M=M||"",null!=z)return to(M,z,b,"month");var p,O=[];for(p=0;p<12;p++)O[p]=to(M,p,b,"month");return O}function ro(M,z,b,p){"boolean"==typeof M?(n(z)&&(b=z,z=void 0),z=z||""):(b=z=M,M=!1,n(z)&&(b=z,z=void 0),z=z||"");var O,o=ub(),c=M?o._week.dow:0,A=[];if(null!=b)return to(z,(b+c)%7,p,"day");for(O=0;O<7;O++)A[O]=to(z,(O+c)%7,p,"day");return A}function so(M,z){return io(M,z,"months")}function uo(M,z){return io(M,z,"monthsShort")}function fo(M,z,b){return ro(M,z,b,"weekdays")}function Ro(M,z,b){return ro(M,z,b,"weekdaysShort")}function lo(M,z,b){return ro(M,z,b,"weekdaysMin")}Wo.calendar=k,Wo.longDateFormat=U,Wo.invalidDate=V,Wo.ordinal=J,Wo.preparse=ao,Wo.postformat=ao,Wo.relativeTime=$,Wo.pastFuture=MM,Wo.set=y,Wo.eras=gO,Wo.erasParse=TO,Wo.erasConvertYear=yO,Wo.erasAbbrRegex=EO,Wo.erasNameRegex=wO,Wo.erasNarrowRegex=CO,Wo.months=ez,Wo.monthsShort=nz,Wo.monthsParse=Wz,Wo.monthsRegex=sz,Wo.monthsShortRegex=rz,Wo.week=Xz,Wo.firstDayOfYear=gz,Wo.firstDayOfWeek=mz,Wo.weekdays=xz,Wo.weekdaysMin=Iz,Wo.weekdaysShort=jz,Wo.weekdaysParse=Yz,Wo.weekdaysRegex=Vz,Wo.weekdaysShortRegex=Kz,Wo.weekdaysMinRegex=Qz,Wo.isPM=bb,Wo.meridiem=ob,ib("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(M){var z=M%10;return M+(1===_M(M%100/10)?"th":1===z?"st":2===z?"nd":3===z?"rd":"th")}}),p.lang=X("moment.lang is deprecated. Use moment.locale instead.",ib),p.langData=X("moment.langData is deprecated. Use moment.localeData instead.",ub);var Lo=Math.abs;function No(){var M=this._data;return this._milliseconds=Lo(this._milliseconds),this._days=Lo(this._days),this._months=Lo(this._months),M.milliseconds=Lo(M.milliseconds),M.seconds=Lo(M.seconds),M.minutes=Lo(M.minutes),M.hours=Lo(M.hours),M.months=Lo(M.months),M.years=Lo(M.years),this}function Bo(M,z,b,p){var O=gp(z,b);return M._milliseconds+=p*O._milliseconds,M._days+=p*O._days,M._months+=p*O._months,M._bubble()}function Xo(M,z){return Bo(this,M,z,1)}function ho(M,z){return Bo(this,M,z,-1)}function mo(M){return M<0?Math.floor(M):Math.ceil(M)}function go(){var M,z,b,p,O,o=this._milliseconds,c=this._days,A=this._months,q=this._data;return o>=0&&c>=0&&A>=0||o<=0&&c<=0&&A<=0||(o+=864e5*mo(yo(A)+c),c=0,A=0),q.milliseconds=o%1e3,M=yM(o/1e3),q.seconds=M%60,z=yM(M/60),q.minutes=z%60,b=yM(z/60),q.hours=b%24,c+=yM(b/24),A+=O=yM(To(c)),c-=mo(yo(O)),p=yM(A/12),A%=12,q.days=c,q.months=A,q.years=p,this}function To(M){return 4800*M/146097}function yo(M){return 146097*M/4800}function _o(M){if(!this.isValid())return NaN;var z,b,p=this._milliseconds;if("month"===(M=bM(M))||"quarter"===M||"year"===M)switch(z=this._days+p/864e5,b=this._months+To(z),M){case"month":return b;case"quarter":return b/3;case"year":return b/12}else switch(z=this._days+Math.round(yo(this._months)),M){case"week":return z/7+p/6048e5;case"day":return z+p/864e5;case"hour":return 24*z+p/36e5;case"minute":return 1440*z+p/6e4;case"second":return 86400*z+p/1e3;case"millisecond":return Math.floor(864e5*z)+p;default:throw new Error("Unknown unit "+M)}}function So(M){return function(){return this.as(M)}}var vo=So("ms"),ko=So("s"),wo=So("m"),Eo=So("h"),Co=So("d"),Do=So("w"),Po=So("M"),xo=So("Q"),jo=So("y"),Io=vo;function Ho(){return gp(this)}function Yo(M){return M=bM(M),this.isValid()?this[M+"s"]():NaN}function Fo(M){return function(){return this.isValid()?this._data[M]:NaN}}var Uo=Fo("milliseconds"),Go=Fo("seconds"),Vo=Fo("minutes"),Ko=Fo("hours"),Qo=Fo("days"),Jo=Fo("months"),Zo=Fo("years");function $o(){return yM(this.days()/7)}var Mc=Math.round,zc={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function bc(M,z,b,p,O){return O.relativeTime(z||1,!!b,M,p)}function pc(M,z,b,p){var O=gp(M).abs(),o=Mc(O.as("s")),c=Mc(O.as("m")),A=Mc(O.as("h")),q=Mc(O.as("d")),e=Mc(O.as("M")),n=Mc(O.as("w")),a=Mc(O.as("y")),W=o<=b.ss&&["s",o]||o<b.s&&["ss",o]||c<=1&&["m"]||c<b.m&&["mm",c]||A<=1&&["h"]||A<b.h&&["hh",A]||q<=1&&["d"]||q<b.d&&["dd",q];return null!=b.w&&(W=W||n<=1&&["w"]||n<b.w&&["ww",n]),(W=W||e<=1&&["M"]||e<b.M&&["MM",e]||a<=1&&["y"]||["yy",a])[2]=z,W[3]=+M>0,W[4]=p,bc.apply(null,W)}function Oc(M){return void 0===M?Mc:"function"==typeof M&&(Mc=M,!0)}function oc(M,z){return void 0!==zc[M]&&(void 0===z?zc[M]:(zc[M]=z,"s"===M&&(zc.ss=z-1),!0))}function cc(M,z){if(!this.isValid())return this.localeData().invalidDate();var b,p,O=!1,o=zc;return"object"==typeof M&&(z=M,M=!1),"boolean"==typeof M&&(O=M),"object"==typeof z&&(o=Object.assign({},zc,z),null!=z.s&&null==z.ss&&(o.ss=z.s-1)),p=pc(this,!O,o,b=this.localeData()),O&&(p=b.pastFuture(+this,p)),b.postformat(p)}var Ac=Math.abs;function qc(M){return(M>0)-(M<0)||+M}function ec(){if(!this.isValid())return this.localeData().invalidDate();var M,z,b,p,O,o,c,A,q=Ac(this._milliseconds)/1e3,e=Ac(this._days),n=Ac(this._months),a=this.asSeconds();return a?(M=yM(q/60),z=yM(M/60),q%=60,M%=60,b=yM(n/12),n%=12,p=q?q.toFixed(3).replace(/\.?0+$/,""):"",O=a<0?"-":"",o=qc(this._months)!==qc(a)?"-":"",c=qc(this._days)!==qc(a)?"-":"",A=qc(this._milliseconds)!==qc(a)?"-":"",O+"P"+(b?o+b+"Y":"")+(n?o+n+"M":"")+(e?c+e+"D":"")+(z||M||q?"T":"")+(z?A+z+"H":"")+(M?A+M+"M":"")+(q?A+p+"S":"")):"P0D"}var nc=cp.prototype;return nc.isValid=Op,nc.abs=No,nc.add=Xo,nc.subtract=ho,nc.as=_o,nc.asMilliseconds=vo,nc.asSeconds=ko,nc.asMinutes=wo,nc.asHours=Eo,nc.asDays=Co,nc.asWeeks=Do,nc.asMonths=Po,nc.asQuarters=xo,nc.asYears=jo,nc.valueOf=Io,nc._bubble=go,nc.clone=Ho,nc.get=Yo,nc.milliseconds=Uo,nc.seconds=Go,nc.minutes=Vo,nc.hours=Ko,nc.days=Qo,nc.weeks=$o,nc.months=Jo,nc.years=Zo,nc.humanize=cc,nc.toISOString=ec,nc.toString=ec,nc.toJSON=ec,nc.locale=cO,nc.localeData=qO,nc.toIsoString=X("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ec),nc.lang=AO,x("X",0,0,"unix"),x("x",0,0,"valueOf"),hM("x",fM),hM("X",LM),vM("X",(function(M,z,b){b._d=new Date(1e3*parseFloat(M))})),vM("x",(function(M,z,b){b._d=new Date(_M(M))})),
2
2
  //! moment.js
3
3
  p.version="2.30.1",O(Kb),p.fn=qo,p.min=$b,p.max=Mp,p.now=zp,p.utc=d,p.unix=eo,p.months=so,p.isDate=a,p.locale=ib,p.invalid=u,p.duration=gp,p.isMoment=N,p.weekdays=fo,p.parseZone=no,p.localeData=ub,p.isDuration=Ap,p.monthsShort=uo,p.weekdaysMin=lo,p.defineLocale=rb,p.updateLocale=sb,p.locales=fb,p.weekdaysShort=Ro,p.normalizeUnits=bM,p.relativeTimeRounding=Oc,p.relativeTimeThreshold=oc,p.calendarFormat=jp,p.prototype=qo,p.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},p}()})),YM=jM((function(M){
4
4
  //! moment-timezone.js
@@ -11,4 +11,4 @@ var z,b;z=this,b=function(M){void 0===M.version&&M.default&&(M=M.default);var z,
11
11
  var z="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),b=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",z[7],z[8],z[9]];function p(M,p,O,o){var c="";switch(O){case"s":return o?"muutaman sekunnin":"muutama sekunti";case"ss":c=o?"sekunnin":"sekuntia";break;case"m":return o?"minuutin":"minuutti";case"mm":c=o?"minuutin":"minuuttia";break;case"h":return o?"tunnin":"tunti";case"hh":c=o?"tunnin":"tuntia";break;case"d":return o?"päivän":"päivä";case"dd":c=o?"päivän":"päivää";break;case"M":return o?"kuukauden":"kuukausi";case"MM":c=o?"kuukauden":"kuukautta";break;case"y":return o?"vuoden":"vuosi";case"yy":c=o?"vuoden":"vuotta"}return c=function(M,p){return M<10?p?b[M]:z[M]:M}(M,o)+" "+c,c}return M.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:p,ss:p,m:p,mm:p,h:p,hh:p,d:p,dd:p,M:p,MM:p,y:p,yy:p},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})},b(HM)})),jM((function(M,z){var b;b=function(M){return M.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(M){var z=M%10;return M+(1==~~(M%100/10)?":e":1===z||2===z?":a":":e")},week:{dow:1,doy:4}})},b(HM)})),jM((function(M,z){var b;b=function(M){
12
12
  //! moment.js locale configuration
13
13
  function z(M,z,b,p){var O={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[M+" Tage",M+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[M+" Monate",M+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[M+" Jahre",M+" Jahren"]};return z?O[b][0]:O[b][1]}return M.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:z,mm:"%d Minuten",h:z,hh:"%d Stunden",d:z,dd:z,w:z,ww:"%d Wochen",M:z,MM:z,y:z,yy:z},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})},b(HM)})),{de:{address:"Adresse","address-place-or-business":"Adress, Ort or Geschäft","add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flug",arrival:"Ankunft",back:"Zurück",bikerentalstation:"Leihrad-Station",bus:"Bus",cancel:"Abbrechen","clear-button-label":"Löschen","clear-search-history":"Suchhistorie löschen",currentposition:"Aktuelle Position",delete:"Löschen","delete-old-searches-header":"Wollen Sie die Such-Historie löschen?",departure:"Abfahrt",destination:"Ziel","give-origin":"Start eingeben.","give-destination":"Ziel eingeben.",favourite:"Favoriten",ferry:"Fähre","future-route":"Zukünftige Verbindung",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Eigene Favoriten",loading:"Laden...","minute-short":"min",rail:"Zug",search:"Suche","search-address-or-place":"Suche anhand von Adresse oder Ortsangabe","search-button-label":"Suche","search-destination":"Suche Zielort, Linie or Haltestelle","search-destination-index":"Zielort eingeben","search-destination-results-but-no-search":"Ergebnisse in “Zielort”-Reiter anzeigen","search-no-results":"Kein Ort gefunden.","search-origin":"Suche Startort, Linie oder Haltestelle","search-origin-index":"Startort eingeben","search-position":"Standort ermitteln","search-autosuggest-label":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Aktuelle Auswahl: {{selection}}",street:"Straße",subway:"U-Bahn",station:"Station",stop:"Haltestelle","stop-near-you":"Suche Haltestellen und Linien in der Nähe","stop-near-you-bus":"Suche Buslinien or Haltestellen","stop-near-you-citybike":"Suche Leihrad-Stationen","stop-near-you-rail":"Suche Zugverbindungen oder Bahnhöfe","stop-near-you-subway":"Suche U-Bahn-Linien oder Haltestellen","stop-near-you-tram":"Suche Stadtbahn-Haltestellen-Suche","today-at":"Heute um","tomorrow-at":"Morgen um",tram:"Straßenbahn","use-own-position":"Benutze aktuellen Standort","select-from-map":"Wähle Position anhand Karte","select-from-own-locations":"Aus eigenen Favoriten auswählen",venue:"Venue","via-point":"Zwischenziel",where:"Wohin?",place:"Ort"},en:{address:"Address","address-place-or-business":"Address, place or business","add-via-button-label":"Add via point","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flight",arrival:"Arrival",back:"Back",bikepark:"Park & Ride for bikes",bikerentalstation:"Bike station",bus:"bus",cancel:"Cancel",carpark:"Park & Ride","clear-button-label":"Clear","clear-search-history":"Clear search history",currentposition:"Current position",delete:"Delete","delete-old-searches-header":"Do you want to clear the search history?",departure:"Departure",destination:"Destination","give-origin":"Enter your origin.","give-destination":"Enter your destination",favourite:"Favourite",ferry:"Ferry","future-route":"Future route",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Own locations",loading:"Loading...","minute-short":"m",platform:"Platform",rail:"Train",required:"required field",search:"Search","search-address-or-place":"Search by address or place name","search-button-label":"Search","search-destination":"Search destination, route or stop","search-destination-index":"Enter destination","search-destination-results-but-no-search":"View results in the adjacent “Destination” tab","search-no-results":"No location","search-origin":"Search origin, route or stop","search-origin-index":"Enter origin","search-position":"Detect location","search-autosuggest-label":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Current selection: {{selection}}",street:"Street",subway:"Metro",station:"Station",stop:"Stop","stop-near-you":"Search stops and routes","stop-near-you-airplane":"Search flights or airports","stop-near-you-bus":"Search bus routes or stops","stop-near-you-citybike":"Search city bike stations","stop-near-you-rail":"Search train routes or stations","stop-near-you-subway":"Search metro routes or stations ","stop-near-you-tram":"Search tram routes or stops","stop-route-station":"Bus and stop search","today-at":"today at","tomorrow-at":"tomorrow at",tram:"Tram",track:"Track","use-own-position":"Use current location","select-from-map":"Select position from map","select-from-own-locations":"Select from own locations",venue:"Venue","via-point":"Via point",where:"Where to?",place:"Location"},fi:{address:"Osoite","address-place-or-business":"Osoite, paikka tai yritys","add-via-button-label":"Lisää välipiste","add-via-duration-button-label":"Aseta välipisteelle {{index}} pysähdyksen kesto","add-via-duration-button-label-close":"Avaa välipisteen {{index}} pysähdyksen kesto valitsin","add-via-duration-button-label-open":"Sulje välipisteen {{index}} pysähdyksen kesto valitsin",airplane:"Lentokone",arrival:"Perillä",back:"Takaisin",vehiclerentalstation:"Pyöräasema",bikepark:"Liityntäpyöräparkki",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäkointi","clear-button-label":"Tyhjennä","clear-search-history":"Tyhjennä hakuhistoria",currentposition:"Tämänhetkinen sijainti",delete:"Poista","delete-old-searches-header":"Haluatko tyhjentää hakuhistorian?",departure:"Lähtöaika",destination:"Määränpää",favourite:"Suosikki",ferry:"Lautta","future-route":"Tuleva reitti","give-origin":"Lähtöpaikka","give-destination":"Määränpää",origin:"Lähtöpaikka","origin-stop-near-you":"Lähtöpaikka",ownlocations:"Omat paikat",loading:"Ladataan...","minute-short":"min",platform:"Laituri",rail:"Juna",required:"pakollinen kenttä",search:"Etsi","search-address-or-place":"Hae osoitteella tai paikan nimellä","search-button-label":"Hae","search-destination":"Hae määränpäätä, linjaa tai pysäkkiä","search-destination-index":"Syötä määränpää","search-destination-results-but-no-search":"Katso tulokset viereiseltä Määränpää-välilehdeltä","search-no-results":"Ei tuloksia","search-origin":"Hae lähtöpaikkaa, linjaa tai pysäkkiä","search-origin-index":"Syötä lähtöpaikka","search-autosuggest-label":"Paikka, linja ja pysäkkihaku.","search-autosuggest-label-instructions-desktop":"Navigoi listassa nuolinäppäimillä ja valitse enterillä.","search-autosuggest-label-instructions-mobile":"Syötä sijainti ja navigoi listassa pyyhkäisemällä.","search-autosuggest-label-move-to-destination":"Valittuasi lähtöpaikan siirrytään suoraan määränpää-kenttään.","search-autosuggest-len":" Löydettiin {{count}} ehdotus","search-autosuggest-len_plural":" Löydettiin {{count}} ehdotusta","search-current-suggestion":"Tämänhetkinen valinta: {{selection}}","search-position":"Paikanna",street:"Katu",subway:"Metro",station:"Asema",stop:"Pysäkki","stop-near-you":"Linja, pysäkki tai asema","stop-near-you-airplane":"Hae lentoja tai lentoasemaa","stop-near-you-bus":"Hae bussilinjaa tai pysäkkiä","stop-near-you-citybike":"Hae kaupunkipyöräasemaa","stop-near-you-rail":"Hae lähijunaa tai asemaa","stop-near-you-subway":"Hae metrolinjaa tai asemaa","stop-near-you-tram":"Hae raitiolinjaa tai pysäkkiä","stop-route-station":"Linja- ja pysäkkihaku","today-at":"tänään klo","tomorrow-at":"huomenna klo",tram:"Raitiovaunu",track:"Raide","use-own-position":"Käytä nykyistä sijaintia","select-from-map":"Valitse sijainti kartalta","select-from-own-locations":"Valitse omista paikoista",venue:"Paikka","via-point":"Välipiste",where:"Minne mennään?",place:"Paikka"},pl:{address:"Adres","address-place-or-business":"Adres, miejsce lub firma","add-via-button-label":"Dodaj punkt pośredni","add-via-duration-button-label":"Wybierz czas postoju dla punktu {{index}}","add-via-duration-button-label-close":"Zamknij wybornik czasu postoju w punkcie {{index}}","add-via-duration-button-label-open":"Otwórz wybornik czasu postoju w punkcie {{index}}",airplane:"Lot",arrival:"Przyjazd",back:"Wróć",bikepark:"Parkuj i Jedź dla rowerów",bikerentalstation:"Stacja rowerowa",bus:"autobus",cancel:"Anuluj",carpark:"Parkuj i Jedź","clear-button-label":"Wyczyść","clear-search-history":"Wyczyść historię wyszukiwania",currentposition:"Obecne położenie",delete:"Usuń","delete-old-searches-header":"Czy na pewno chcesz wyczyścić historię wyszukiwania?",departure:"Odjazd",destination:"Cel","give-origin":"Wprowadź swój punkt początkowy.","give-destination":"Wprowadź swój cel",favourite:"Ulubione",ferry:"Prom","future-route":"Przyszła trasa",origin:"Początek","origin-stop-near-you":"Początek",ownlocations:"Własne miejsca",loading:"Ładowanie…","minute-short":"min.",platform:"Peron",rail:"Pociąg",required:"wymagane pole",search:"Szukaj","search-address-or-place":"Szukaj po adresie lub nazwie miejsca","search-button-label":"Szukaj","search-destination":"Szukaj celu, trasy lub przystanku","search-destination-index":"Wprowadź punkt docelowy","search-destination-results-but-no-search":"Wyświetl wyniki w sąsiedniej karcie „Cel”","search-no-results":"Brak lokalizacji","search-origin":"Wyszukaj początek, koniec lub punkt pośredni","search-origin-index":"Wprowadź punkt początkowy","search-position":"Wykryj lokalizację","search-autosuggest-label":"Miejsce, lokalizacja i przystanek.","search-autosuggest-label-instructions-desktop":"Nawiguj po liście używając strzałek i wybieraj klawiszem Enter.","search-autosuggest-label-instructions-mobile":"Wprowadź lokalizację i nawiguj po liście gestami przesuwania.","search-autosuggest-label-move-to-destination":"Po wybraniu lokalizacji początkowej, automatycznie przejdziesz do pola miejsca docelowego.","search-autosuggest-len":"Dostępna jest {{count}} propozycja","search-autosuggest-len_few":"Dostępne są {{count}} propozycje","search-autosuggest-len_other":"Dostępne jest {{count}} propozycji","search-current-suggestion":"Obecny wybór: {{selection}}",street:"Ulica",subway:"Metro",station:"Stacja",stop:"Przystanek","stop-near-you":"Szukaj przystanków i tras","stop-near-you-airplane":"Szukaj lotów i lotnisk","stop-near-you-bus":"Szukaj tras autobusowych i przystanków","stop-near-you-citybike":"Szukaj stacji rowerów miejskich","stop-near-you-rail":"Szukaj tras kolejowych i przystanków","stop-near-you-subway":"Szukaj tras metra i przystanków ","stop-near-you-tram":"Szukaj tras tramwajowych i przystanków","stop-route-station":"Wyszukiwanie autobusów i przystanków","today-at":"dziś o","tomorrow-at":"jutro o",tram:"Tramwaj",track:"Tor","use-own-position":"Użyj obecnej lokalizacji","select-from-map":"Wybierz miejsce na mapie","select-from-own-locations":"Wybierz z własnych miejsc",venue:"Miejsce","via-point":"Przez punkt",where:"Dokąd?",place:"Miejsce"},sv:{address:"Adress","address-place-or-business":"Adress, plats eller företag","add-via-button-label":"Lägg till viapunkt","add-via-duration-button-label":"Ställ in varaktighet för viapunkten {{index}}","add-via-duration-button-label-close":"Stäng väljaren för varaktighet vid via-punkten {{index}}","add-via-duration-button-label-open":"Öppna väljaren för varaktighet vid via-punkten {{index}}",airplane:"Flyg",arrival:"Anländer",back:"Tillbaka",bikerentalstation:"Stadscykelstation",bikepark:"Anslutningsparkering för cyklar",bus:"Bussi",cancel:"Avbryt",carpark:"Infartsparkering","clear-button-label":"Töm","clear-search-history":"Töm sökhistoriken",currentposition:"Nuvarande position",delete:"Ta bort","delete-old-searches-header":"Vill du tömma sökhistoriken?",departure:"Avgångstid",destination:"Destination",favourite:"Favorit",ferry:"Färja","future-route":"Framtida rutt","give-destination":"Skriv in din destination","give-origin":"Skriv in din avfärdsplats",origin:"Avfärdsplats","origin-stop-near-you":"Avfärdsplats",ownlocations:"Egna platser",loading:"Laddar...","minute-short":"min",platform:"Plattform",rail:"Tåg",required:"obligatoriskt fält",search:"Sök","search-address-or-place":"Sök med adressen eller platsens namn","search-button-label":"Sök","search-destination":"Sök destination, linje eller hållplats","search-destination-index":"Skriv destination","search-destination-results-but-no-search":"Se resultaten under fliken Destination","search-no-results":"Inga sökresultat","search-origin":"Sök avfärdsplats, linje eller hållplats","search-origin-index":"Skriv avfärdsplats","search-position":"Sök position","search-autosuggest-label":"Plats, linje och hållplatssökning.","search-autosuggest-label-instructions-desktop":"Navigera listan med piltangenterna och välj med Enter-tangeten.","search-autosuggest-label-instructions-mobile":"Ange platsen och navigera i listan genom att svepa.","search-autosuggest-label-move-to-destination":"Efter att du valt avgångsplatsen tas du direkt till Destination-fältet.","search-autosuggest-len":"Hittade {{count}} förslag","search-current-suggestion":"Nuvarande val: {{selection}}",street:"Gata",subway:"Metro",station:"Station",stop:"Hållplats","stop-near-you":"Sök hållplatser eller linjer","stop-near-you-airplane":"Sök flyg eller flygplatser","stop-near-you-bus":"Sök busslinjer eller hållplatser","stop-near-you-citybike":"Sök stadscykelstationer","stop-near-you-rail":"Sök närtåger eller stationer","stop-near-you-subway":"Sök metrolinjer eller stationer","stop-near-you-tram":"Sök spårvagnlinjer eller hållplatser","stop-route-station":"Buss och stopp sökningen","today-at":"i dag kl","tomorrow-at":"i morgon",tram:"Spårvagn",track:"Spår","use-own-position":"Använd min position","select-from-map":"Välj position från kartan","select-from-own-locations":"Välj från egna platser",venue:"Mötesplats","via-point":"Via punkt",where:"Vart vill du åka?",place:"Plats"}});function $M(M,z){void 0===z&&(z={});var b=z.insertAt;if(M&&"undefined"!=typeof document){var p=document.head||document.getElementsByTagName("head")[0],O=document.createElement("style");O.type="text/css","top"===b&&p.firstChild?p.insertBefore(O,p.firstChild):p.appendChild(O),O.styleSheet?O.styleSheet.cssText=M:O.appendChild(document.createTextNode(M))}}var Mz={container:"styles_container__KXfyb",input:"styles_input__XmNBn",favourite:"styles_favourite__sjGcX",thin:"styles_thin__y3lnY",hasValue:"styles_hasValue__tzCTr",suggestionsContainerOpen:"styles_suggestionsContainerOpen__4AZDX",suggestionsContainer:"styles_suggestionsContainer__3dsEd",suggestionsList:"styles_suggestionsList__esTtR",suggestion:"styles_suggestion__7itfO",suggestionHighlighted:"styles_suggestionHighlighted__XUxvC","autosuggest-input-container":"styles_autosuggest-input-container__ZkKGO",origin:"styles_origin__ivlHi",destination:"styles_destination__y39VH","stop-route-station":"styles_stop-route-station__FneXd","autosuggest-input-icon":"styles_autosuggest-input-icon__uhYGQ","origin-stop-near-you":"styles_origin-stop-near-you__Ekwp-","clear-input":"styles_clear-input__Vx7B4","sr-only":"styles_sr-only__ZOrQT"};$M("input[type='text'] {\n margin: 0; }\n\n.styles_container__KXfyb {\n display: flex;\n width: 100%; }\n .styles_container__KXfyb .styles_input__XmNBn {\n font-size: 16px;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n display: flex;\n width: 100%;\n height: 44px;\n border-radius: 5px;\n border: solid 1px #888;\n background-color: #fff;\n padding-left: 50px;\n padding-right: 44px;\n line-height: 1.2;\n letter-spacing: -0.5px;\n color: #333;\n box-sizing: border-box;\n -moz-appearance: none;\n appearance: none; }\n .styles_container__KXfyb .styles_input__XmNBn.styles_favourite__sjGcX {\n padding-left: 47px; }\n .styles_container__KXfyb .styles_input__XmNBn.styles_thin__y3lnY {\n height: 34px; }\n .styles_container__KXfyb .styles_input__XmNBn:focus {\n background: #fff;\n outline: none;\n border: solid 1px var(--color);\n box-shadow: 0 0 2px 1px var(--hover-color); }\n @media screen and (min-width: 768px) {\n .styles_container__KXfyb .styles_input__XmNBn {\n font-size: 15px;\n height: 44px;\n padding-left: 49px; } }\n .styles_container__KXfyb .styles_input__XmNBn::-moz-placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px; }\n .styles_container__KXfyb .styles_input__XmNBn::placeholder {\n color: #666;\n opacity: 1;\n font-size: 15px; }\n\n.styles_hasValue__tzCTr {\n color: #333; }\n\n.styles_suggestionsContainerOpen__4AZDX {\n width: 100%;\n max-height: 44vh;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: solid 1px rgba(0, 0, 0, 0.1);\n overflow-x: hidden;\n overflow-y: scroll;\n position: absolute;\n background-color: white;\n top: calc(3 * 0.875rem + 9px);\n z-index: 20; }\n\n.styles_suggestionsContainer__3dsEd {\n background-color: white;\n z-index: 20; }\n .styles_suggestionsContainer__3dsEd .styles_suggestionsList__esTtR {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white; }\n .styles_suggestionsContainer__3dsEd .styles_suggestionsList__esTtR li:hover {\n background: #f4f4f5; }\n\n.styles_suggestion__7itfO {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n cursor: pointer;\n list-style: none;\n display: block;\n overflow-x: hidden;\n overflow-y: hidden;\n white-space: nowrap; }\n\n.styles_suggestionHighlighted__XUxvC {\n background-color: #f4f4f5; }\n\n.styles_autosuggest-input-container__ZkKGO {\n position: relative;\n width: 100%; }\n .styles_autosuggest-input-container__ZkKGO.styles_origin__ivlHi {\n z-index: 16; }\n .styles_autosuggest-input-container__ZkKGO.styles_destination__y39VH {\n z-index: 10; }\n .styles_autosuggest-input-container__ZkKGO.styles_stop-route-station__FneXd {\n z-index: 9; }\n\n.styles_autosuggest-input-icon__uhYGQ {\n display: flex;\n position: absolute;\n align-items: center;\n width: 16px;\n height: 100%;\n margin-top: 0;\n margin-left: 19px; }\n .styles_autosuggest-input-icon__uhYGQ svg {\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin__ivlHi svg {\n fill: #4ea700;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_destination__y39VH svg {\n fill: #ec5188;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_stop-route-station__FneXd svg, .styles_autosuggest-input-icon__uhYGQ.styles_favourite__sjGcX svg {\n fill: #888;\n width: 16px;\n height: 16px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin-stop-near-you__Ekwp- svg {\n fill: #888;\n width: 16px;\n height: 16px; }\n\nbutton.styles_clear-input__Vx7B4 {\n display: flex;\n position: absolute;\n padding: 14px 0;\n right: 0;\n width: 44px;\n height: 100%;\n color: var(--color);\n outline: none;\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.styles_clear-input__Vx7B4 svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.styles_clear-input__Vx7B4:focus {\n background-color: transparent;\n color: inherit;\n /* First apply outline that is used in Edge and Firefox */\n /* Then override outline for webkit browsers like Chrome, this has no effect on other browsers */\n outline: 5px auto -webkit-focus-ring-color; }\n button.styles_clear-input__Vx7B4:active {\n background-color: transparent;\n color: inherit; }\n button.styles_clear-input__Vx7B4:hover {\n background-color: transparent;\n color: inherit; }\n\n.styles_sr-only__ZOrQT:not(:focus, :active) {\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n");var zz={"fullscreen-root":"MobileSearch_fullscreen-root__WkMna","combobox-container":"MobileSearch_combobox-container__sRkYS","right-column":"MobileSearch_right-column__erBFe","combobox-icon":"MobileSearch_combobox-icon__xd0iZ","combobox-label":"MobileSearch_combobox-label__OqGpe",container:"MobileSearch_container__k-UVq",input:"MobileSearch_input__HbTUj","clear-input":"MobileSearch_clear-input__ILVwN",hasValue:"MobileSearch_hasValue__NYhZy",suggestion:"MobileSearch_suggestion__UBz5O",suggestionHighlighted:"MobileSearch_suggestionHighlighted__7ef5G",suggestionsContainerOpen:"MobileSearch_suggestionsContainerOpen__g7zkI",suggestionsList:"MobileSearch_suggestionsList__3pEzf","clear-search-history":"MobileSearch_clear-search-history__wblhz","mobile-modal-overlay":"MobileSearch_mobile-modal-overlay__f6Rl7","mobile-modal":"MobileSearch_mobile-modal__hNdM6","mobile-modal-content":"MobileSearch_mobile-modal-content__Yzz-V"};$M("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileSearch_fullscreen-root__WkMna {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileSearch_combobox-container__sRkYS {\n margin: 15px 10px 0;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileSearch_combobox-container__sRkYS .MobileSearch_right-column__erBFe {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileSearch_combobox-icon__xd0iZ {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none; }\n .MobileSearch_combobox-icon__xd0iZ svg {\n fill: #007ac9;\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileSearch_combobox-label__OqGpe {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333; }\n\n.MobileSearch_container__k-UVq {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileSearch_container__k-UVq .MobileSearch_input__HbTUj {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666;\n -moz-appearance: none;\n appearance: none; }\n .MobileSearch_container__k-UVq .MobileSearch_input__HbTUj:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileSearch_clear-input__ILVwN {\n display: flex;\n align-items: center;\n right: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileSearch_clear-input__ILVwN svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileSearch_clear-input__ILVwN:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__ILVwN:active {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__ILVwN:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileSearch_hasValue__NYhZy {\n color: #333; }\n\n.MobileSearch_suggestion__UBz5O {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileSearch_suggestionHighlighted__7ef5G {\n background-color: #f4f4f5; }\n\n.MobileSearch_suggestionsContainerOpen__g7zkI {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileSearch_suggestionsContainerOpen__g7zkI .MobileSearch_suggestionsList__3pEzf {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f4f4f5; }\n\n.MobileSearch_clear-search-history__wblhz {\n display: flex;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f4f4f5;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd; }\n\n.MobileSearch_mobile-modal-overlay__f6Rl7 {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileSearch_mobile-modal__hNdM6 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0; }\n .MobileSearch_mobile-modal__hNdM6.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileSearch_mobile-modal__hNdM6.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileSearch_mobile-modal-content__Yzz-V {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #fff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n");var bz={"fullscreen-root":"MobileNoScroll_fullscreen-root__zQN50","combobox-container":"MobileNoScroll_combobox-container__RDEiT","right-column":"MobileNoScroll_right-column__0P3qe","combobox-icon":"MobileNoScroll_combobox-icon__LA0rD","combobox-label":"MobileNoScroll_combobox-label__-rYsj",container:"MobileNoScroll_container__CaIIv",input:"MobileNoScroll_input__Opft5","clear-input":"MobileNoScroll_clear-input__-4SQO",hasValue:"MobileNoScroll_hasValue__jR1iW",suggestion:"MobileNoScroll_suggestion__NAWcY",suggestionHighlighted:"MobileNoScroll_suggestionHighlighted__V0GuG",suggestionsContainerOpen:"MobileNoScroll_suggestionsContainerOpen__MRa5Y",suggestionsList:"MobileNoScroll_suggestionsList__NUpJE","clear-search-history":"MobileNoScroll_clear-search-history__Cjj-1","mobile-modal-overlay":"MobileNoScroll_mobile-modal-overlay__LbLie","mobile-modal":"MobileNoScroll_mobile-modal__-Rx-A","mobile-modal-content":"MobileNoScroll_mobile-modal-content__nfrCI"};function pz(M,z){var b=Object.keys(M);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(M);z&&(p=p.filter((function(z){return Object.getOwnPropertyDescriptor(M,z).enumerable}))),b.push.apply(b,p)}return b}function Oz(M){for(var z=1;z<arguments.length;z++){var b=null!=arguments[z]?arguments[z]:{};z%2?pz(Object(b),!0).forEach((function(z){U(M,z,b[z])})):Object.getOwnPropertyDescriptors?Object.defineProperties(M,Object.getOwnPropertyDescriptors(b)):pz(Object(b)).forEach((function(z){Object.defineProperty(M,z,Object.getOwnPropertyDescriptor(b,z))}))}return M}$M("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_fullscreen-root__zQN50 {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileNoScroll_combobox-container__RDEiT {\n margin: 15px 10px 0;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileNoScroll_combobox-container__RDEiT .MobileNoScroll_right-column__0P3qe {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileNoScroll_combobox-icon__LA0rD {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none; }\n .MobileNoScroll_combobox-icon__LA0rD svg {\n fill: #007ac9;\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileNoScroll_combobox-label__-rYsj {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333; }\n\n.MobileNoScroll_container__CaIIv {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileNoScroll_container__CaIIv .MobileNoScroll_input__Opft5 {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666;\n -moz-appearance: none;\n appearance: none; }\n .MobileNoScroll_container__CaIIv .MobileNoScroll_input__Opft5:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileNoScroll_clear-input__-4SQO {\n display: flex;\n align-items: center;\n right: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileNoScroll_clear-input__-4SQO svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileNoScroll_clear-input__-4SQO:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__-4SQO:active {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__-4SQO:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileNoScroll_hasValue__jR1iW {\n color: #333; }\n\n.MobileNoScroll_suggestion__NAWcY {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_suggestionHighlighted__V0GuG {\n background-color: #f4f4f5; }\n\n.MobileNoScroll_suggestionsContainerOpen__MRa5Y {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileNoScroll_suggestionsContainerOpen__MRa5Y .MobileNoScroll_suggestionsList__NUpJE {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f4f4f5; }\n\n.MobileNoScroll_clear-search-history__Cjj-1 {\n display: flex;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', Roboto, Arial, Georgia, serif;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f4f4f5;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd; }\n\n.MobileNoScroll_mobile-modal-overlay__LbLie {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileNoScroll_mobile-modal__-Rx-A {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0; }\n .MobileNoScroll_mobile-modal__-Rx-A.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileNoScroll_mobile-modal__-Rx-A.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileNoScroll_mobile-modal-content__nfrCI {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #fff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n\n.MobileNoScroll_suggestionsContainerOpen__MRa5Y {\n -ms-overflow-style: none;\n /* Internet Explorer 10+ */\n scrollbar-width: none;\n /* Firefox */ }\n .MobileNoScroll_suggestionsContainerOpen__MRa5Y::-webkit-scrollbar {\n display: none;\n /* Safari and Chrome */ }\n");class oz extends m.default{constructor(M){super(M);var z=this;z.onSuggestionTouchMove=()=>{z.justSelectedSuggestion=!1,z.pressedSuggestion=null}}}var cz=M=>{var z,p=M.appElement,O=M.id,o=M.closeHandle,c=M.clearInput,A=M.value,q=M.suggestions,e=M.inputProps,n=M.fetchFunction,a=M.renderSuggestion,W=M.getSuggestionValue,t=M.ariaLabel,d=M.label,i=M.onSuggestionSelected,r=M.clearOldSearches,s=M.dialogHeaderText,u=M.dialogPrimaryButtonText,f=M.dialogSecondaryButtonText,R=M.clearInputButtonText,l=M.focusInput,L=M.color,N=M.hoverColor,X=M.accessiblePrimaryColor,h=M.searchOpen,m=M.fontWeights,g=M.showScroll?zz:bz,T=`${O}-input`,y=`${O}-label`,_=V(b.useState(!1),2),S=_[0],v=_[1],k=B.default.useRef();b.useEffect((()=>{I.default.setAppElement(p)}),[]);var w=b.useCallback((()=>{o()})),E=(M,z)=>{"clear-search-history"===z.suggestion.type?v(!0):z.suggestion.properties.arrowClicked||i(M,z)},C=M=>{var z=M&&(M.key||M.which||M.keyCode)||"";return!(!z||![13," ","Spacebar"].concat([32,"Enter"]).includes(z))&&(M.preventDefault(),!0)},D=M=>"clear-search-history"===M.type?"":W(M),P=M=>"clear-search-history"===M.type?B.default.createElement("button",{type:"button",className:g["clear-search-history"]},M.labelId):a(M);return l&&null!==(z=k.current)&&void 0!==z&&z.input&&k.current.input.focus(),B.default.createElement(I.default,{isOpen:h,className:g["mobile-modal"],overlayClassName:g["mobile-modal-overlay"],onAfterClose:w,shouldCloseOnEsc:!0},B.default.createElement("div",{className:g["mobile-modal-content"],style:{"--color":`${L}`,"--accessible-primary-color":X,"--hover-color":`${N}`,"--font-weight-medium":m.medium}},B.default.createElement("div",{className:g["combobox-container"],htmlFor:T},B.default.createElement("button",{type:"button",className:g["combobox-icon"],onClick:()=>w(),onKeyDown:M=>C(M)&&w(),"aria-label":f,tabIndex:0},B.default.createElement(x.default,{img:"arrow"})),B.default.createElement("span",{className:g["right-column"]},B.default.createElement("span",{className:g["combobox-label"],id:y},d),B.default.createElement(oz,{alwaysRenderSuggestions:!0,id:O,suggestions:q,onSuggestionsFetchRequested:n,getSuggestionValue:D,renderSuggestion:P,focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>!0,inputProps:Oz(Oz({},e),{},{className:`${g.input} ${g[O]||""} ${e.value?g.hasValue:""}`,autoFocus:!0}),renderInputComponent:M=>B.default.createElement(B.default.Fragment,null,B.default.createElement("input",Object.assign({"aria-label":t,id:O},M)),A&&B.default.createElement("button",{type:"button",className:g["clear-input"],onClick:c,onKeyDown:M=>C(M)&&c(),"aria-label":R},B.default.createElement(x.default,{img:"close",color:L}))),theme:g,onSuggestionSelected:E,ref:k}))),B.default.createElement(H.default,{appElement:p,isModalOpen:S,handleClose:()=>v(!1),headerText:s,primaryButtonText:u,secondaryButtonText:f,primaryButtonOnClick:()=>{r(),v(!1)},secondaryButtonOnClick:()=>v(!1),color:L,hoverColor:N,fontWeights:m})))};"production"!==process.env.NODE_ENV&&(cz.propTypes={appElement:N.default.string.isRequired,id:N.default.string.isRequired,closeHandle:N.default.func.isRequired,clearInput:N.default.func.isRequired,value:N.default.string,clearInputButtonText:N.default.string.isRequired,suggestions:N.default.arrayOf(N.default.object).isRequired,inputProps:N.default.shape({onChange:N.default.func.isRequired,onBlur:N.default.func.isRequired,value:N.default.string.isRequired,placeholder:N.default.string.isRequired,className:N.default.string.isRequired}).isRequired,fetchFunction:N.default.func.isRequired,getSuggestionValue:N.default.func.isRequired,renderSuggestion:N.default.func.isRequired,onSuggestionSelected:N.default.func.isRequired,label:N.default.string.isRequired,clearOldSearches:N.default.func.isRequired,ariaLabel:N.default.string,dialogHeaderText:N.default.string,dialogPrimaryButtonText:N.default.string,dialogSecondaryButtonText:N.default.string,focusInput:N.default.bool,color:N.default.string,hoverColor:N.default.string,accessiblePrimaryColor:N.default.string.isRequired,searchOpen:N.default.bool.isRequired,fontWeights:N.default.shape({medium:N.default.number.isRequired}).isRequired,showScroll:N.default.bool}),cz.defaultProps={value:void 0,ariaLabel:void 0,dialogHeaderText:void 0,dialogPrimaryButtonText:void 0,dialogSecondaryButtonText:void 0,focusInput:!1,color:void 0,hoverColor:void 0,showScroll:void 0};var Az,qz=jM((function(M,z){var b;"undefined"!=typeof self&&self,M.exports=(b=B.default,function(){var M={888:function(M,z,b){var p,O;O=void 0!==b.g?b.g:"undefined"!=typeof window?window:this,p=function(){return function(M){var z={ignore:"[data-scroll-ignore]",header:null,topOnEmptyHash:!0,speed:500,speedAsDuration:!1,durationMax:null,durationMin:null,clip:!0,offset:0,easing:"easeInOutCubic",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},b=function(){var M={};return Array.prototype.forEach.call(arguments,(function(z){for(var b in z){if(!z.hasOwnProperty(b))return;M[b]=z[b]}})),M},p=function(M){"#"===M.charAt(0)&&(M=M.substr(1));for(var z,b=String(M),p=b.length,O=-1,o="",c=b.charCodeAt(0);++O<p;){if(0===(z=b.charCodeAt(O)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");o+=z>=1&&z<=31||127==z||0===O&&z>=48&&z<=57||1===O&&z>=48&&z<=57&&45===c?"\\"+z.toString(16)+" ":z>=128||45===z||95===z||z>=48&&z<=57||z>=65&&z<=90||z>=97&&z<=122?b.charAt(O):"\\"+b.charAt(O)}return"#"+o},O=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},o=function(z){return z?(b=z,parseInt(M.getComputedStyle(b).height,10)+z.offsetTop):0;var b},c=function(z,b,p){0===z&&document.body.focus(),p||(z.focus(),document.activeElement!==z&&(z.setAttribute("tabindex","-1"),z.focus(),z.style.outline="none"),M.scrollTo(0,b))},A=function(z,b,p,O){if(b.emitEvents&&"function"==typeof M.CustomEvent){var o=new CustomEvent(z,{bubbles:!0,detail:{anchor:p,toggle:O}});document.dispatchEvent(o)}};return function(q,e){var n,a,W,t,d={cancelScroll:function(M){cancelAnimationFrame(t),t=null,M||A("scrollCancel",n)},animateScroll:function(p,q,e){d.cancelScroll();var a=b(n||z,e||{}),i="[object Number]"===Object.prototype.toString.call(p),r=i||!p.tagName?null:p;if(i||r){var s=M.pageYOffset;a.header&&!W&&(W=document.querySelector(a.header));var u,f,R,l=o(W),L=i?p:function(z,b,p,o){var c=0;if(z.offsetParent)do{c+=z.offsetTop,z=z.offsetParent}while(z);return c=Math.max(c-b-p,0),o&&(c=Math.min(c,O()-M.innerHeight)),c}(r,l,parseInt("function"==typeof a.offset?a.offset(p,q):a.offset,10),a.clip),N=L-s,B=O(),X=0,h=function(M,z){var b=z.speedAsDuration?z.speed:Math.abs(M/1e3*z.speed);return z.durationMax&&b>z.durationMax?z.durationMax:z.durationMin&&b<z.durationMin?z.durationMin:parseInt(b,10)}(N,a),m=function(z){u||(u=z),X+=z-u,R=s+N*function(M,z){var b;return"easeInQuad"===M.easing&&(b=z*z),"easeOutQuad"===M.easing&&(b=z*(2-z)),"easeInOutQuad"===M.easing&&(b=z<.5?2*z*z:(4-2*z)*z-1),"easeInCubic"===M.easing&&(b=z*z*z),"easeOutCubic"===M.easing&&(b=--z*z*z+1),"easeInOutCubic"===M.easing&&(b=z<.5?4*z*z*z:(z-1)*(2*z-2)*(2*z-2)+1),"easeInQuart"===M.easing&&(b=z*z*z*z),"easeOutQuart"===M.easing&&(b=1- --z*z*z*z),"easeInOutQuart"===M.easing&&(b=z<.5?8*z*z*z*z:1-8*--z*z*z*z),"easeInQuint"===M.easing&&(b=z*z*z*z*z),"easeOutQuint"===M.easing&&(b=1+--z*z*z*z*z),"easeInOutQuint"===M.easing&&(b=z<.5?16*z*z*z*z*z:1+16*--z*z*z*z*z),M.customEasing&&(b=M.customEasing(z)),b||z}(a,f=(f=0===h?0:X/h)>1?1:f),M.scrollTo(0,Math.floor(R)),function(z,b){var O=M.pageYOffset;if(z==b||O==b||(s<b&&M.innerHeight+O)>=B)return d.cancelScroll(!0),c(p,b,i),A("scrollStop",a,p,q),u=null,t=null,!0}(R,L)||(t=M.requestAnimationFrame(m),u=z)};0===M.pageYOffset&&M.scrollTo(0,0),function(M,z,b){z||history.pushState&&b.updateURL&&history.pushState({smoothScroll:JSON.stringify(b),anchor:M.id},document.title,M===document.documentElement?"#top":"#"+M.id)}(p,i,a),"matchMedia"in M&&M.matchMedia("(prefers-reduced-motion)").matches?c(p,Math.floor(L),!1):(A("scrollStart",a,p,q),d.cancelScroll(!0),M.requestAnimationFrame(m))}}},i=function(z){if(!z.defaultPrevented&&!(0!==z.button||z.metaKey||z.ctrlKey||z.shiftKey)&&"closest"in z.target&&(a=z.target.closest(q))&&"a"===a.tagName.toLowerCase()&&!z.target.closest(n.ignore)&&a.hostname===M.location.hostname&&a.pathname===M.location.pathname&&/#/.test(a.href)){var b,O;try{b=p(decodeURIComponent(a.hash))}catch(M){b=p(a.hash)}if("#"===b){if(!n.topOnEmptyHash)return;O=document.documentElement}else O=document.querySelector(b);(O=O||"#top"!==b?O:document.documentElement)&&(z.preventDefault(),function(z){if(history.replaceState&&z.updateURL&&!history.state){var b=M.location.hash;b=b||"",history.replaceState({smoothScroll:JSON.stringify(z),anchor:b||M.pageYOffset},document.title,b||M.location.href)}}(n),d.animateScroll(O,a))}},r=function(M){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(n)){var z=history.state.anchor;"string"==typeof z&&z&&!(z=document.querySelector(p(history.state.anchor)))||d.animateScroll(z,null,{updateURL:!1})}};return d.destroy=function(){n&&(document.removeEventListener("click",i,!1),M.removeEventListener("popstate",r,!1),d.cancelScroll(),n=null,a=null,W=null,t=null)},function(){if(!("querySelector"in document&&"addEventListener"in M&&"requestAnimationFrame"in M&&"closest"in M.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";d.destroy(),n=b(z,e||{}),W=n.header?document.querySelector(n.header):null,document.addEventListener("click",i,!1),n.updateURL&&n.popstate&&M.addEventListener("popstate",r,!1)}(),d}}(O)}.apply(z,[]),void 0===p||(M.exports=p)},432:function(M,z,b){var p=this&&this.__createBinding||(Object.create?function(M,z,b,p){void 0===p&&(p=b),Object.defineProperty(M,p,{enumerable:!0,get:function(){return z[b]}})}:function(M,z,b,p){void 0===p&&(p=b),M[p]=z[b]}),O=this&&this.__exportStar||function(M,z){for(var b in M)"default"===b||Object.prototype.hasOwnProperty.call(z,b)||p(z,M,b)};Object.defineProperty(z,"__esModule",{value:!0}),O(b(47),z),O(b(926),z),O(b(349),z),O(b(137),z),O(b(729),z),O(b(383),z),O(b(450),z),O(b(358),z),O(b(753),z),O(b(869),z),O(b(352),z),O(b(446),z),O(b(164),z),O(b(305),z),O(b(502),z)},349:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useArrowNavigation=void 0;var p=b(156);z.useArrowNavigation=function(M){var z=M.listItems,b=M.onArrowUpOrDown,O=(0,p.useState)(0),o=O[0],c=O[1],A=(0,p.useCallback)((function(M){c(M)}),[z]),q=function(M){var p=M.key;if(null==z?void 0:z.length)if("ArrowUp"===p)b&&b(),M.preventDefault(),A(o>0?o-1:z.length-1);else{if("ArrowDown"!==p)return;b&&b(),M.preventDefault(),o<z.length-1?A(o+1):A(0)}};return(0,p.useEffect)((function(){return window.addEventListener("keydown",q),function(){return window.removeEventListener("keydown",q)}})),(0,p.useEffect)((function(){A(0)}),[z]),{selectedIndex:o}}},446:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useDebounce=void 0;var p=b(156);z.useDebounce=function(M,z){void 0===z&&(z=300);var b=(0,p.useState)(M),O=b[0],o=b[1];return(0,p.useEffect)((function(){var b=setTimeout((function(){o(M)}),z);return function(){clearTimeout(b)}}),[M,z]),O}},164:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useElementSize=void 0;var p=b(156);z.useElementSize=function(){var M,z,b=(0,p.useRef)(null);return[b,{width:null===(M=null==b?void 0:b.current)||void 0===M?void 0:M.clientWidth,height:null===(z=null==b?void 0:b.current)||void 0===z?void 0:z.clientHeight}]},z.default=z.useElementSize},137:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useIntersectionObserver=void 0;var p=b(156);z.useIntersectionObserver=function(M){var z=(0,p.useRef)(null),b=(0,p.useState)(!1),O=b[0],o=b[1],c=function(M){var z=M[0];o(z.isIntersecting)};return(0,p.useEffect)((function(){if(window&&window.IntersectionObserver){var b=new IntersectionObserver(c,M),p=z.current;return z.current&&b.observe(z.current),function(){p&&b.unobserve(p)}}o(!1)}),[z,M]),{containerRef:z,isVisible:O}},z.default=z.useIntersectionObserver},729:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useIsBreakpoint=void 0;var p=b(156),O=b(432),o={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};z.useIsBreakpoint=function(M){var z="string"==typeof M?o[M]:M,b=(0,p.useState)(null),c=b[0],A=b[1],q=(0,p.useCallback)((function(){A(window.innerWidth)}),[]);return(0,p.useEffect)((function(){q()}),[]),(0,O.useOnResize)(q),c>=z},z.default=z.useIsBreakpoint},450:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useIsLoadingAfterError=void 0;var p=b(156);z.useIsLoadingAfterError=function(M,z){var b=(0,p.useState)(z),O=b[0],o=b[1];return(0,p.useEffect)((function(){M||o(z)}),[M,z]),M&&O}},305:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useIsMobile=void 0;var p=b(729);z.useIsMobile=function(){return!(0,p.useIsBreakpoint)("tablet")},z.default=z.useIsMobile},383:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useIsomorphicLayoutEffect=void 0;var p=b(156);z.useIsomorphicLayoutEffect="undefined"!=typeof window?p.useLayoutEffect:p.useEffect,z.default=z.useIsomorphicLayoutEffect},753:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useOnLoseFocusWithin=void 0;var p=b(156);z.useOnLoseFocusWithin=function(M){var z=M.ref,b=M.callback,O=M.watch;(0,p.useEffect)((function(){var M=function(){var M;if(O)return(null===(M=z.current)||void 0===M?void 0:M.matches(":focus-within"))?void 0:b()};return document.addEventListener("keyup",M),function(){return document.removeEventListener("keyup",M)}}),[b,z,O])},z.default=z.useOnLoseFocusWithin},502:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useOnResize=void 0;var p=b(156);z.useOnResize=function(M){(0,p.useEffect)((function(){var z=function(){M(window.innerWidth)};return window.addEventListener("resize",z,{passive:!0}),function(){return window.removeEventListener("resize",z)}}),[])},z.default=z.useOnResize},352:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useOnWindowFocus=void 0;var p=b(156);z.useOnWindowFocus=function(M){(0,p.useEffect)((function(){var z=function(){M&&"visible"===document.visibilityState&&M()};return window.addEventListener("visibilitychange",z,!1),function(){return window.removeEventListener("visibilitychange",z)}}),[M])}},47:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useOutsideReacter=void 0;var p=b(156);z.useOutsideReacter=function(M,z){function b(b){M.current&&!M.current.contains(b.target)&&z()}(0,p.useEffect)((function(){return document.addEventListener("mousedown",b),function(){document.removeEventListener("mousedown",b)}}))}},869:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useRunAfterUpdate=void 0;var p=b(156);z.useRunAfterUpdate=function(){var M=(0,p.useRef)(null);return(0,p.useEffect)((function(){M.current&&(M.current(),M.current=null)})),function(z){M.current=z}},z.default=z.useRunAfterUpdate},926:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useScrollLock=void 0;var p=b(156);z.useScrollLock=function(){return{lock:(0,p.useCallback)((function(){var M=window.scrollY+"px",z=document.body;z.style.position="fixed",z.style.top="-"+M}),[]),unlock:(0,p.useCallback)((function(){var M=document.body,z=M.style.top,b=-1*parseInt(z||"0");M.style.position="",M.style.top="",b&&window.scrollTo(0,-1*parseInt(z||"0"))}),[])}}},358:function(M,z,b){var p=this&&this.__importDefault||function(M){return M&&M.__esModule?M:{default:M}};Object.defineProperty(z,"__esModule",{value:!0}),z.useSmoothScroll=void 0;var O=b(156),o=p(b(888));z.useSmoothScroll=function(M){var z=(0,O.useRef)(null),b=M.ref,p=M.offset,c=void 0===p?0:p,A=M.speed,q=void 0===A?500:A;return(0,O.useEffect)((function(){z.current=new o.default(null,{speed:q,speedAsDuration:!0})}),[]),(0,O.useCallback)((function(){b&&z.current&&z.current.animateScroll(b.current,null,{offset:function(){return c},updateURL:!1})}),[c,b])}},156:function(M){M.exports=b}},z={};function p(b){var O=z[b];if(void 0!==O)return O.exports;var o=z[b]={exports:{}};return M[b].call(o.exports,o,o.exports,p),o.exports}return p.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(M){if("object"==typeof window)return window}}(),p(432)}())})),ez=(Az=qz)&&Az.__esModule&&Object.prototype.hasOwnProperty.call(Az,"default")?Az.default:Az;function nz(M,z){var b=Object.keys(M);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(M);z&&(p=p.filter((function(z){return Object.getOwnPropertyDescriptor(M,z).enumerable}))),b.push.apply(b,p)}return b}function az(M){for(var z=1;z<arguments.length;z++){var b=null!=arguments[z]?arguments[z]:{};z%2?nz(Object(b),!0).forEach((function(z){U(M,z,b[z])})):Object.getOwnPropertyDescriptors?Object.defineProperties(M,Object.getOwnPropertyDescriptors(b)):nz(Object(b)).forEach((function(z){Object.defineProperty(M,z,Object.getOwnPropertyDescriptor(b,z))}))}return M}JM.locale("en"),X.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}});var Wz=M=>B.default.createElement("div",{className:Mz["spinner-loader"]},M&&M.children||B.default.createElement("span",{className:Mz["sr-only"]},X.default.t("loading")));"production"!==process.env.NODE_ENV&&(Wz.propTypes={children:N.default.node}),Wz.defaultProps={children:void 0};var tz=M=>{if(M&&M.GTFS.platform){var z=M.GTFS,b=z.modes,p=z.platform;return[b&&"RAIL"===b[0]?X.default.t("track"):X.default.t("platform"),p]}};function dz(M){if("FutureRoute"!==M.type){if("SelectFromMap"===M.type)return["",X.default.t("select-from-map")];if("CurrentLocation"===M.type)return["",X.default.t("use-own-position")];if("SelectFromOwnLocations"===M.type)return["",X.default.t("select-from-own-locations")];var z,b=V(PM(M.properties,!0),2),p=b[0],O=b[1];if(M.properties.layer.toLowerCase().includes("bikerental")||M.properties.layer.toLowerCase().includes("bikestation"))return[z=X.default.t("vehiclerentalstation"),p,void 0,M.properties.labelId];if("bikepark"===M.properties.layer)return[z=X.default.t("bikepark"),p,void 0,void 0];if("carpark"===M.properties.layer)return[z=X.default.t("carpark"),p,void 0,void 0];if(M.properties.mode)z=X.default.t(M.properties.mode.toLowerCase().replace("favourite",""));else{var o=M.properties.layer.replace("route-","").toLowerCase().replace("favourite","");z=X.default.t(o)}if(M.properties.id&&("stop"===M.properties.layer||"station"===M.properties.layer)){var c,A=DM(M.properties),q=null===(c=M.properties.addendum)||void 0===c?void 0:c.GTFS.modes,e=tz(M.properties.addendum);return[z,fM(p,A),O,A,q,e]}if("favouriteStop"===M.properties.layer||"favouriteStation"===M.properties.layer){var n=M.properties,a=n.address,W=n.code;return[z,a?fM(a.split(",")[0],W):p,O,W,void 0,tz(M.properties.addendum)]}return[z,p,O]}var t=M.properties,d=t.origin,i=t.destination,r=d.locality?`, ${d.locality} foobar`:"",s=i.locality?`, ${i.locality}`:"",u=d.name,f=i.name;return[X.default.t("future-route"),`${X.default.t("origin")} ${u}${r} ${X.default.t("destination")} ${f}${s}`,M.translatedText]}function iz(M){var z=JM.unix(M.properties.time),b=M.properties.arriveBy?X.default.t("arrival"):X.default.t("departure");return b=`${b=z.isSame(JM(),"day")?`${b} ${X.default.t("today-at")}`:z.isSame(JM().add(1,"day"),"day")?`${b} ${X.default.t("tomorrow-at")}`:`${b} ${z.format("dd D.M.")}`} ${JM(z).format("HH:mm")}`}var rz=M=>"SelectFromOwnLocations"===M.type||"back"===M.type?"":function(M){var z=PM(M,!0);switch(M.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return z[1]||z[0];case"favouriteVehicleRentalStation":case"favouritePlace":return z[0];default:return z.length>1&&""!==z[1]?z.join(", "):z[1]||z[0]}}(M.properties);class sz extends B.default.Component{constructor(M){super(M),U(this,"onChange",((M,z)=>{var b=z.newValue,p=z.method,O={value:this.fInput||b||"",renderMobileSearch:this.props.isMobile};if(this.fInput=null,this.state.editing){if("enter"!==p||this.state.valid){if(this.state.typingTimer&&clearTimeout(this.state.typingTimer),"type"===p){var o=setTimeout((()=>{this.setState({typing:!1})}),1e3);O.typingTimer=o,O.typing=!0}this.setState(O)}}else O.editing=!0,this.setState(O,(()=>this.fetchFunction({value:b||""})))})),U(this,"onBlur",(()=>{this.state.renderMobileSearch||(this.state.editing&&this.input.focus(),this.setState({editing:!1,renderMobileSearch:!1,value:this.props.value}))})),U(this,"onSelected",((M,z)=>{if(this.state.valid){if("SelectFromOwnLocations"===z.suggestion.type)return void this.setState({sources:["Favourite","Back"],ownPlaces:!0,pendingSelection:z.suggestion.type,value:""},(()=>{this.fetchFunction({value:""})}));if("back"===z.suggestion.type||"FutureRoute"===z.suggestion.type)return void this.setState({sources:this.props.sources,ownPlaces:!1,pendingSelection:z.suggestion.type,suggestionIndex:z.suggestionIndex},(()=>{this.fetchFunction({value:""})}));this.selectionDone=!0,this.setState({editing:!1,value:z.suggestionValue},(()=>{this.input.blur(),this.props.handleViaPoints?this.props.handleViaPoints(z.suggestion,z.suggestionIndex):this.props.onSelect(z.suggestion,this.props.id),this.setState({renderMobileSearch:!1,sources:this.props.sources,ownPlaces:!1,suggestions:[]},(()=>{this.selectionDone=!1})),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange(),this.props.isMobile&&this.closeMobileSearch()}))}else this.setState((M=>({pendingSelection:M.value})),(()=>this.checkPendingSelection()))})),U(this,"onSuggestionsClearRequested",(()=>{this.setState({suggestions:[],sources:this.props.sources,ownPlaces:!1,editing:!1})})),U(this,"checkPendingSelection",(()=>{"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection||!this.state.valid?this.state.pendingSelection&&this.state.valid&&this.setState({pendingSelection:null,editing:!1},(()=>{this.state.suggestions.length&&(this.input.blur(),this.props.onSelect(this.state.suggestions[this.state.suggestionIndex],this.props.id),this.props.isMobile&&this.closeMobileSearch(),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange())})):this.setState({pendingSelection:null,editing:!0},(()=>{this.input.focus()}))})),U(this,"clearButton",(()=>B.default.createElement("button",{type:"button",className:Mz["clear-input"],onClick:this.clearInput,"aria-label":X.default.t("clear-button-label")},B.default.createElement(x.default,{img:"close",color:this.props.color})))),U(this,"fetchFunction",(M=>{var z=M.value,b=M.cleanExecuted;return this.setState({valid:!1,cleanExecuted:b||!1},(()=>{if(!this.selectionDone){var M,b=this.props.targets,p=j.default(b),O=j.default(b)||b.includes("Locations");this.state.ownPlaces?(M=["Locations"],(p||b.includes("Stops"))&&M.push("Stops"),(p||b.includes("Stations"))&&M.push("Stations"),(p||b.includes("VehicleRentalStations"))&&M.push("VehicleRentalStations")):p||(M=[...b],O&&!this.props.isMobile&&(j.default(this.props.sources)||this.props.sources.includes("Favourite"))&&M.push("SelectFromOwnLocations")),((M,z,b,p,O,o,c,A,q,e)=>{A(null),EM(M,z,b,p,O,o,c,A,q,e)})(M,this.state.sources&&this.state.sources.filter((M=>!(O&&"Favourite"===M&&!this.state.ownPlaces&&!this.props.isMobile))),this.props.transportMode,this.props.searchContext,this.props.filterResults,this.props.geocodingSize,{input:z||""},(M=>{if(null!=M){var b=(M.results||[]).filter((M=>"FutureRoute"!==M.type||"FutureRoute"===M.type&&M.properties.time>JM().unix())).map((M=>{if("CurrentLocation"===M.type||"SelectFromMap"===M.type||"SelectFromOwnLocations"===M.type||"back"===M.type){var z=az({},M);return z.properties.labelId=X.default.t(M.properties.labelId),z}return M}));z!==this.state.value&&z!==this.state.pendingSelection&&"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection&&"FutureRoute"!==this.state.pendingSelection||this.setState({valid:!0,suggestions:b},(()=>this.checkPendingSelection()))}}),this.props.pathOpts,this.props.refPoint)}}))})),U(this,"clearInput",(()=>{var M={editing:!0,value:"",sources:this.props.sources,ownPlaces:!1,renderMobileSearch:this.props.isMobile};this.setState(M,(()=>this.fetchFunction({value:"",cleanExecuted:!0}))),this.props.onClear&&this.props.onClear(this.props.id),this.input.focus()})),U(this,"inputClicked",(M=>{if(this.input.focus(),this.clearLocationText(),this.props.isMobile&&this.props.lock(),this.state.editing)this.props.isMobile&&!this.state.renderMobileSearch&&this.setState({renderMobileSearch:!0});else{var z={editing:!0,pendingSelection:null,renderMobileSearch:this.props.isMobile},b={editing:!0,pendingSelection:null,value:M};this.state.suggestions.length?(this.fetchFunction({value:this.state.value}),this.setState(z)):"object"!=typeof M&&M?this.setState(b,(()=>this.fetchFunction({value:M}))):this.setState(z,(()=>this.fetchFunction({value:this.state.value})))}})),U(this,"storeInputReference",(M=>{null!==M&&(this.input=M.input,this.props.storeRef&&this.props.storeRef(M.input))})),U(this,"fillInput",(M=>{this.fInput=M.properties.name;var z={editing:!0,value:M.properties.name,checkPendingSelection:M,valid:!0};this.setState(z),this.fetchFunction({value:M.properties.name}),this.input.focus()})),U(this,"renderItem",(M=>{var z="FutureRoute"===M.type?az(az({},M),{},{translatedText:iz(M)}):M,b=dz(M);return B.default.createElement(w.default,{item:z,content:b,loading:!this.state.valid,isMobile:this.props.isMobile,ariaFavouriteString:X.default.t("favourite"),color:this.props.color,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fillInput:this.fillInput,fontWeights:this.props.fontWeights,getAutoSuggestIcons:this.props.getAutoSuggestIcons,modeIconColors:this.props.modeIconColors,modeSet:this.props.modeSet})})),U(this,"closeMobileSearch",(()=>{this.props.unlock(),this.setState({renderMobileSearch:!1,value:this.props.value},(()=>{window.scrollTo(0,this.state.scrollY),this.onSuggestionsClearRequested()}))})),U(this,"keyDown",(M=>{if(!this.selectionDone){var z=M.key;if("Escape"===z&&this.setState({editing:!1}),this.state.editing)return"Enter"===z&&""!==this.state.value&&this.setState({pendingSelection:!0},(()=>{this.fetchFunction({value:this.state.value})})),void this.inputClicked();if("Enter"!==z&&"ArrowDown"!==z||""!==this.state.value){if("ArrowDown"===z&&""!==this.state.value){var b={editing:!0,value:this.state.value};this.setState(b,(()=>this.fetchFunction({value:this.state.value})))}this.state.editing||this.setState({editing:!0}),"Tab"===z&&this.onBlur()}else this.clearInput()}})),U(this,"suggestionAsAriaContent",(()=>{var M=[],z=this.state.suggestions[0];return z&&(z.type&&z.type.includes("Favourite")&&M.push(X.default.t("favourite")),M=M.concat(dz(this.state.suggestions[0]))),[...new Set(M)].join(" - ")})),U(this,"clearOldSearches",(()=>{var M=this.props.searchContext,z=M.context,b=M.clearOldSearches,p=M.clearFutureRoutes;z&&b&&(b(z),p&&p(z),this.fetchFunction({value:this.state.value}))})),U(this,"isOriginDestinationOrViapoint",(()=>"origin"===this.props.id||"destination"===this.props.id||"via-point"===this.props.id||"origin-stop-near-you"===this.props.id)),U(this,"clearLocationText",(()=>{["Valittu sijainti","Nykyinen sijaintisi","Current position","Selected location","Vald position","Använd min position","Min position","Käytä nykyistä sijaintia","Use current location","Your current location","Wybrane miejsce"].includes(this.state.value)&&this.clearInput()})),U(this,"onFocus",(()=>{this.clearLocationText();var M=window.pageYOffset;return this.setState({scrollY:M})})),JM.tz.setDefault(M.timeZone),JM.locale(M.lang),this.state={value:M.value,suggestions:[],editing:!1,valid:!0,renderMobileSearch:!1,sources:M.sources,ownPlaces:!1,typingTimer:null,typing:!1,pendingSelection:null,suggestionIndex:0,cleanExecuted:!1,scrollY:0},Object.keys(ZM).forEach((M=>{X.default.addResourceBundle(M,"translation",ZM[M])}))}shouldComponentUpdate(M,z){return!E.default(z,this.state)||!E.default(M,this.props)}componentDidUpdate(){X.default.language!==this.props.lang&&X.default.changeLanguage(this.props.lang)}UNSAFE_componentWillReceiveProps(M){M.value===this.state.value||this.state.editing||this.setState({value:M.value})}render(){X.default.language!==this.props.lang&&X.default.changeLanguage(this.props.lang);var M=this.state,z=M.value,b=M.suggestions,p=M.renderMobileSearch,O=M.cleanExecuted,o={placeholder:this.props.translatedPlaceholder?this.props.translatedPlaceholder:X.default.t(this.props.placeholder),value:z,onChange:this.onChange,onBlur:this.onBlur,className:`${Mz.input} ${this.props.isMobile&&this.props.transportMode?Mz.thin:""} ${Mz[this.props.id]||""} ${this.state.value?Mz.hasValue:""} ${this.props.inputClassName}`,onKeyDown:this.keyDown,required:this.props.required},c=this.props.id.replace("searchfield-",""),A=this.props.ariaLabel||X.default.t(c);A=A.replace("searchfield-","").concat(".");var q=this.props.required?`${X.default.t("required")}.`:"",e=this.props.isMobile?X.default.t("search-autosuggest-label-instructions-mobile"):X.default.t("search-autosuggest-label-instructions-desktop"),n="origin"===this.props.id?X.default.t("search-autosuggest-label-move-to-destination"):"",a=e.concat(" ").concat(n),W=X.default.t("search-autosuggest-len",{count:b.length}),t=()=>this.suggestionAsAriaContent()||this.props.value?X.default.t("search-current-suggestion",{selection:this.suggestionAsAriaContent().toLowerCase()||this.props.value}):"";return B.default.createElement(B.default.Fragment,null,B.default.createElement("span",{className:Mz["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&`${W} ${t()}`),this.props.isMobile&&B.default.createElement(cz,{searchOpen:p,appElement:this.props.appElement,clearOldSearches:this.clearOldSearches,id:this.props.id,clearInput:this.clearInput,value:this.state.value,suggestions:[...b,{type:"clear-search-history",labelId:X.default.t("clear-search-history")}],inputProps:az(az({},o),{},{placeholder:this.isOriginDestinationOrViapoint()?X.default.t("address-place-or-business"):o.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:rz,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:q.concat(" ").concat(A).concat(" ").concat(t()),label:this.props.mobileLabel?this.props.mobileLabel:X.default.t(this.props.id),onSuggestionSelected:this.onSelected,dialogHeaderText:X.default.t("delete-old-searches-header"),dialogPrimaryButtonText:X.default.t("delete"),dialogSecondaryButtonText:X.default.t("cancel"),clearInputButtonText:X.default.t("clear-button-label"),focusInput:O,color:this.props.color,hoverColor:this.props.hoverColor,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fontWeights:this.props.fontWeights,showScroll:this.props.showScroll}),!p&&B.default.createElement("div",{className:h.default(Mz["autosuggest-input-container"],Mz[this.props.id]),style:{"--color":`${this.props.color}`,"--hover-color":`${this.props.hoverColor}`}},this.props.icon&&B.default.createElement("div",{className:h.default(Mz["autosuggest-input-icon"],Mz[this.props.id],this.props.inputClassName&&`${this.props.inputClassName}-input-icon`),"aria-label":q.concat(" ").concat(A).concat(" ").concat(X.default.t("search-autosuggest-label"))},B.default.createElement(x.default,{img:`${this.props.icon}`})),B.default.createElement(m.default,{alwaysRenderSuggestions:this.state.editing,id:this.props.id,suggestions:b,onSuggestionsFetchRequested:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:rz,renderSuggestion:this.renderItem,inputProps:az(az({},o),{},{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>this.state.editing,highlightFirstSuggestion:!this.state.ownPlaces,theme:Mz,renderInputComponent:M=>B.default.createElement(B.default.Fragment,null,B.default.createElement("label",{className:Mz["sr-only"],htmlFor:this.props.id},t().concat(" ").concat(q).concat(" ").concat(A).concat(" ").concat(a)),B.default.createElement("input",Object.assign({"aria-label":t().concat(" ").concat(q).concat(" ").concat(A).concat(" ").concat(a),id:this.props.id,onClick:this.inputClicked,onKeyDown:this.keyDown},M)),this.state.value&&this.clearButton()),onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}U(sz,"defaultProps",{autoFocus:!1,className:"",icon:void 0,value:"",transportMode:void 0,filterResults:void 0,onClear:void 0,lang:"fi",storeRef:void 0,handleViaPoints:void 0,focusChange:void 0,getAutoSuggestIcons:void 0,sources:[],targets:void 0,isMobile:!1,isEmbedded:!1,geocodingSize:void 0,color:"#007ac9",hoverColor:"#0062a1",accessiblePrimaryColor:"#0074be",timeZone:"Europe/Helsinki",pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},ariaLabel:void 0,mobileLabel:void 0,inputClassName:"",translatedPlaceholder:void 0,fontWeights:{medium:500},modeIconColors:{"mode-bus":"#007ac9","mode-rail":"#8c4799","mode-tram":"#008151","mode-metro":"#ed8c00","mode-ferry":"#007A97","mode-citybike":"#f2b62d","mode-funicular":"#ff00ff"},required:!1,modeSet:void 0,showScroll:!1,refPoint:{}}),"production"!==process.env.NODE_ENV&&(sz.propTypes={appElement:N.default.string.isRequired,autoFocus:N.default.bool,className:N.default.string,icon:N.default.string,id:N.default.string.isRequired,placeholder:N.default.string.isRequired,translatedPlaceholder:N.default.string,value:N.default.string,searchContext:N.default.shape({URL_PELIAS:N.default.string,context:N.default.object,clearOldSearches:N.default.func,clearFutureRoutes:N.default.func}).isRequired,ariaLabel:N.default.string,onSelect:N.default.func.isRequired,transportMode:N.default.string,filterResults:N.default.func,geocodingSize:N.default.number,onClear:N.default.func,storeRef:N.default.func,handleViaPoints:N.default.func,focusChange:N.default.func,lang:N.default.string,sources:N.default.arrayOf(N.default.string),targets:N.default.arrayOf(N.default.string),isMobile:N.default.bool,color:N.default.string,hoverColor:N.default.string,accessiblePrimaryColor:N.default.string,timeZone:N.default.string,pathOpts:N.default.shape({routesPrefix:N.default.string,stopsPrefix:N.default.string}),mobileLabel:N.default.string,lock:N.default.func.isRequired,unlock:N.default.func.isRequired,refPoint:N.default.shape({address:N.default.string,lat:N.default.number,lon:N.default.number}),inputClassName:N.default.string,fontWeights:N.default.shape({medium:N.default.number}),modeIconColors:N.default.objectOf(N.default.string),getAutoSuggestIcons:N.default.objectOf(N.default.func),required:N.default.bool,modeSet:N.default.string,showScroll:N.default.bool,isEmbedded:N.default.bool});var uz,fz=(uz=sz,M=>{var z=ez.useScrollLock(),b=z.lock,p=z.unlock;return B.default.createElement(uz,Object.assign({lock:b,unlock:p},M))});M.default=fz,Object.defineProperty(M,"__esModule",{value:!0})}));
14
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaXMtZHVwbGljYXRlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWZpbHRlci1tYXRjaGluZy10by1pbnB1dC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZXhlY3V0ZS1zZWFyY2gtaW1taWRpYXRlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC10aW1lem9uZS9tb21lbnQtdGltZXpvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50LXRpbWV6b25lL2luZGV4LmpzIiwiLi4vc3JjL2hlbHBlcnMvdHJhbnNsYXRpb25zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vYmlsZVNlYXJjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaHNsLWZpL2hvb2tzL2xpYi9pbmRleC5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbC9pbmRleC5qcyIsIi4uL3NyYy9oZWxwZXJzL3dpdGhTY3JvbGxMb2NrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IFN0cmluZyhpKTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59IiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiLyoqXG4gKiAgYWNjZXB0IGVxdWFsaXR5IG9mIG5vbiBudWxsaXNoIHZhbHVlc1xuICpcbiAqIEBuYW1lIHRydUVxXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gdmFsMSBGaXJzdCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHBhcmFtMiBTZWNvbmQgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC50cnVFcSgnMicsICcyJyk7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRydUVxKHZhbDEsIHZhbDIpIHtcbiAgcmV0dXJuIHZhbDEgJiYgdmFsMiAmJiB2YWwxID09PSB2YWwyO1xufVxuIiwiaW1wb3J0IHRydUVxIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC10cnUtZXEnO1xuLyoqXG4gKiBDaGVja3MgdGhhdCBpcyBpdGVtcyBkdXBsaWNhdGVcbiAqXG4gKiBAbmFtZSBpc0R1cGxpY2F0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0xIE9iamVjdCBjb250YWluaW5nIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICoge1xuICogIHByb3BlcnRpZXMge1xuICogICAgICBndGZzSWQ6IFN0cmluZ1xuICogICAgICBnaWQ6IFN0cmluZyBmcm9tIGdlb2NvZGVyXG4gKiAgICAgIG5hbWU6IFN0cmluZ1xuICogICAgICBsYWJlbDogU3RyaW5nXG4gKiAgICAgICBhZGRyZXNzOiBTdHJpbmdcbiAqICAgICAgZ2VvbWV0cnkge1xuICogICAgICAgICBjb29yZGluYXRlcyBbTnVtYmVyIGxhdCwgTnVtYmVyIGxvbl1cbiAqICAgICAgfVxuICogIH1cbiAqIH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMiBPYmplY3Qgd2l0aCBzYW1lIGF0dHJpYnV0ZXMgYXMgaXRlbTFcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5pc0R1cGxpY2F0ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cblxuY29uc3QgZ3Rmc1N0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbicsICdmYXZvdXJpdGVTdG9wJywgJ2Zhdm91cml0ZVN0YXRpb24nXTtcbmNvbnN0IHZlaGljbGVSZW50YWxMYXllcnMgPSBbJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJywgJ2Jpa2VzdGF0aW9uJ107XG5cbmZ1bmN0aW9uIGxhYmVsSWRUb0dpZChpZCkge1xuICBpZiAoIWlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IHBhcnRzID0gaWQuc3BsaXQoJzonKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gYGNpdHliaWtlcyR7cGFydHNbMF19OmJpa2VzdGF0aW9uOiR7cGFydHNbMV19YDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEdXBsaWNhdGUoaXRlbTEsIGl0ZW0yKSB7XG4gIGNvbnN0IHByb3BzMSA9IGl0ZW0xLnByb3BlcnRpZXM7XG4gIGNvbnN0IHByb3BzMiA9IGl0ZW0yLnByb3BlcnRpZXM7XG5cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiYgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGNvbnN0IG8xID0gcHJvcHMxLm9yaWdpbjtcbiAgICBjb25zdCBkMSA9IHByb3BzMS5kZXN0aW5hdGlvbjtcbiAgICBjb25zdCBvMiA9IHByb3BzMi5vcmlnaW47XG4gICAgY29uc3QgZDIgPSBwcm9wczIuZGVzdGluYXRpb247XG5cbiAgICBjb25zdCBuYW1lMSA9IGAke28xLm5hbWV9Ly8ke28xLmxvY2FsaXR5fS8vJHtkMS5uYW1lfS8vJHtkMS5sb2NhbGl0eX1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxpdHl9Ly8ke2QyLm5hbWV9Ly8ke2QyLmxvY2FsaXR5fWA7XG5cbiAgICByZXR1cm4gbmFtZTEgPT09IG5hbWUyO1xuICB9XG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgIHZlaGljbGVSZW50YWxMYXllcnMuaW5jbHVkZXMocHJvcHMxLmxheWVyKSAmJlxuICAgIHZlaGljbGVSZW50YWxMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKVxuICApIHtcbiAgICBjb25zdCBpZDEgPSBwcm9wczEuZ2lkIHx8IGxhYmVsSWRUb0dpZChwcm9wczEubGFiZWxJZCk7XG4gICAgY29uc3QgaWQyID0gcHJvcHMyLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMyLmxhYmVsSWQpO1xuICAgIHJldHVybiBpZDEgPT09IGlkMjtcbiAgfVxuICBpZiAocHJvcHMxLmd0ZnNJZCAmJiBwcm9wczIuZ3Rmc0lkKSB7XG4gICAgcmV0dXJuIHByb3BzMS5ndGZzSWQgPT09IHByb3BzMi5ndGZzSWQ7XG4gIH1cbiAgaWYgKFxuICAgIGd0ZnNTdG9wTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczIubGF5ZXIpICYmXG4gICAgcHJvcHMxLmdpZCAmJlxuICAgIHByb3BzMi5naWRcbiAgKSB7XG4gICAgcmV0dXJuIHByb3BzMS5naWQgPT09IHByb3BzMi5naWQ7XG4gIH1cblxuICBjb25zdCBwMSA9IGl0ZW0xICYmIGl0ZW0xLmdlb21ldHJ5ID8gaXRlbTEuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHAyID0gaXRlbTIgJiYgaXRlbTIuZ2VvbWV0cnkgPyBpdGVtMi5nZW9tZXRyeS5jb29yZGluYXRlcyA6IHVuZGVmaW5lZDtcblxuICBpZiAocDEgJiYgcDIpIHtcbiAgICAvLyBib3RoIGhhdmUgZ2VvbWV0cnlcbiAgICBpZiAoTWF0aC5hYnMocDFbMF0gLSBwMlswXSkgPCAxZS02ICYmIE1hdGguYWJzKHAxWzFdIC0gcDJbMV0pIDwgMWUtNikge1xuICAgICAgLy8gbG9jYXRpb24gbWF0Y2ggaXMgbm90IGVub3VnaC4gUmVxdWlyZSBhIGNvbW1vbiBwcm9wZXJ0eVxuICAgICAgaWYgKFxuICAgICAgICB0cnVFcShwcm9wczEubmFtZSwgcHJvcHMyLm5hbWUpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmFkZHJlc3MpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5hZGRyZXNzLCBwcm9wczIubGFiZWwpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmFkZHJlc3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBpc1N0cmluZyBmcm9tICdsb2Rhc2gvaXNTdHJpbmcnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoL29yZGVyQnknO1xuaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNEdXBsaWNhdGUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZSc7XG5cbmNvbnN0IG5vcm1hbGl6ZSA9IHN0ciA9PiB7XG4gIGlmICghaXNTdHJpbmcoc3RyKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIExheWVyVHlwZSBkZXBpY3RzIHRoZSB0eXBlIG9mIHRoZSBwb2ludC1vZi1pbnRlcmVzdC5cbiAqL1xuY29uc3QgTGF5ZXJUeXBlID0ge1xuICBBZGRyZXNzOiAnYWRkcmVzcycsXG4gIEJhY2s6ICdiYWNrJyxcbiAgQ3VycmVudFBvc2l0aW9uOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgRmF2b3VyaXRlU3RvcDogJ2Zhdm91cml0ZVN0b3AnLFxuICBGYXZvdXJpdGVTdGF0aW9uOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gIEZhdm91cml0ZVBsYWNlOiAnZmF2b3VyaXRlUGxhY2UnLFxuICBGYXZvdXJpdGVSb3V0ZTogJ2Zhdm91cml0ZVJvdXRlJyxcbiAgRmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb246ICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbicsXG4gIEZ1dHVyZVJvdXRlOiAnZnV0dXJlUm91dGUnLFxuICBTdGF0aW9uOiAnc3RhdGlvbicsXG4gIFNlbGVjdEZyb21NYXA6ICdzZWxlY3RGcm9tTWFwJyxcbiAgU2VsZWN0RnJvbU93bkxvY2F0aW9uczogJ293bkxvY2F0aW9ucycsXG4gIFN0b3A6ICdzdG9wJyxcbiAgU3RyZWV0OiAnc3RyZWV0JyxcbiAgVmVudWU6ICd2ZW51ZScsXG4gIFZlaGljbGVSZW50YWxTdGF0aW9uOiAnYmlrZXN0YXRpb24nLFxuICBDYXJQYXJrOiAnY2FycGFyaycsXG4gIEJpa2VQYXJrOiAnYmlrZXBhcmsnLFxufTtcbmV4cG9ydCBjb25zdCBpc1N0b3AgPSAoeyBsYXllciwgdHlwZSB9KSA9PlxuICBsYXllciA9PT0gJ3N0b3AnIHx8XG4gIGxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgdHlwZSA9PT0gJ3N0b3AnIHx8XG4gIHR5cGUgPT09ICdmYXZvdXJpdGVTdG9wJztcblxuY29uc3QgREVGQVVMVF9ST1VURVNfUFJFRklYID0gJ2xpbmphdCc7XG5jb25zdCBERUZBVUxUX1NUT1BTX1BSRUZJWCA9ICdweXNha2l0JztcblxuZXhwb3J0IGNvbnN0IG1hcFJvdXRlID0gKGl0ZW0sIHBhdGhPcHRzKSA9PiB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHBhdGhPcHRzIHx8IHt9O1xuXG4gIGNvbnN0IHJvdXRlc1ByZWZpeCA9IG9wdHMucm91dGVzUHJlZml4IHx8IERFRkFVTFRfUk9VVEVTX1BSRUZJWDtcbiAgY29uc3Qgc3RvcHNQcmVmaXggPSBvcHRzLnN0b3BzUHJlZml4IHx8IERFRkFVTFRfU1RPUFNfUFJFRklYO1xuXG4gIGNvbnN0IGxpbmsgPSBgLyR7cm91dGVzUHJlZml4fS8ke2l0ZW0uZ3Rmc0lkfS8ke3N0b3BzUHJlZml4fWA7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1JvdXRlJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgbGF5ZXI6IGByb3V0ZS0ke2l0ZW0ubW9kZX1gLFxuICAgICAgbGluayxcbiAgICB9LFxuICAgIGdlb21ldHJ5OiB7XG4gICAgICBjb29yZGluYXRlczogbnVsbCxcbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gc2VhcmNoIHRlcm0gYWdhaW5zIHRoZSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXNcbiAqIGZvciBhIGdlb2NvZGluZyByZXN1bHQuIFRoZSBiZXN0IG1hdGNoIHdpbGwgYmUgcmV0dXJuZWQgKG1pbjogMCwgbWF4OiAxLjUpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3JtYWxpemVkVGVybSB0aGUgbm9ybWFsaXplZCBzZWFyY2ggdGVybS5cbiAqIEBwYXJhbSB7Kn0gcmVzdWx0UHJvcGVydGllcyB0aGUgZ2VvY29kaW5nIHJlc3VsdCdzIHByb3BlcnR5IGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRjaCA9IChub3JtYWxpemVkVGVybSwgcmVzdWx0UHJvcGVydGllcykgPT4ge1xuICBpZiAoIWlzU3RyaW5nKG5vcm1hbGl6ZWRUZXJtKSB8fCBub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoUHJvcHMgPSBbJ25hbWUnLCAnbGFiZWwnLCAnYWRkcmVzcycsICdzaG9ydE5hbWUnXTtcbiAgcmV0dXJuIG1hdGNoUHJvcHNcbiAgICAubWFwKG5hbWUgPT4gcmVzdWx0UHJvcGVydGllc1tuYW1lXSlcbiAgICAuZmlsdGVyKHZhbHVlID0+IGlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKVxuICAgIC5tYXAodmFsdWUgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplKHZhbHVlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDApIHtcbiAgICAgICAgLy8gZnVsbCBtYXRjaCBhdCBzdGFydC4gUmV0dXJuIG1heCByZXN1bHQgd2hlbiBtYXRjaCBpcyBmdWxsLCBub3Qgb25seSBwYXJ0aWFsXG4gICAgICAgIHJldHVybiAwLjUgKyBub3JtYWxpemVkVGVybS5sZW5ndGggLyBub3JtYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8gYmVjYXVzZSBvZiBmaWx0ZXJtYXRjaGluZ3RvaW5wdXQsIHdlIGtub3cgdGhhdCBtYXRjaCBvY2N1cnJlZCBzb21ld2hlcmVcbiAgICAgIC8vIGRvbid0IHJ1biBmaWx0ZXJtYXRjaGluZyBhZ2FpbiBidXQgZXN0aW1hdGUgcm91Z2hseTpcbiAgICAgIC8vIHRoZSBsb25nZXIgdGhlIG1hdGNoaW5nIHN0cmluZywgdGhlIGJldHRlciBjb25maWRlbmNlLCBtYXggYmVpbmcgMC41XG4gICAgICByZXR1cm4gKDAuNSAqIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCkgLyAobm9ybWFsaXplZFRlcm0ubGVuZ3RoICsgMSk7XG4gICAgfSlcbiAgICAucmVkdWNlKFxuICAgICAgKHByZXZpb3VzLCBjdXJyZW50KSA9PiAoY3VycmVudCA+IHByZXZpb3VzID8gY3VycmVudCA6IHByZXZpb3VzKSxcbiAgICAgIDAsXG4gICAgKTtcbn07XG5cbi8qKlxuICogUmFua3MgdGhlIHJlc3VsdCBiYXNlZCBvbiBpdHMgbGF5ZXIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheWVyIHRoZSBsYXllciBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgdGhlIHNvdXJjZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldExheWVyUmFuayA9IChsYXllciwgc291cmNlKSA9PiB7XG4gIHN3aXRjaCAobGF5ZXIpIHtcbiAgICBjYXNlIExheWVyVHlwZS5DdXJyZW50UG9zaXRpb246XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIExheWVyVHlwZS5CYWNrOlxuICAgICAgcmV0dXJuIDAuOTtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tTWFwOlxuICAgICAgcmV0dXJuIDAuODtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tT3duTG9jYXRpb25zOlxuICAgICAgcmV0dXJuIDAuNzk7XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RhdGlvbjpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVQbGFjZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdG9wOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVJvdXRlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuNDU7XG4gICAgY2FzZSBMYXllclR5cGUuRnV0dXJlUm91dGU6XG4gICAgICByZXR1cm4gMC40NDtcbiAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICBpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwLjQzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDAuNDI7XG4gICAgfVxuICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgIHJldHVybiAwLjM2O1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyB2ZW51ZSwgYWRkcmVzcywgc3RyZWV0LCByb3V0ZS14eHhcbiAgICAgIHJldHVybiAwLjQxO1xuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzb3J0IHRoZSByZXN1bHRzLiBPcmRlcnMgYXMgZm9sbG93czpcbiAqICAtIGN1cnJlbnQgcG9zaXRpb24gZmlyc3QgZm9yIGFuIGVtcHR5IHNlYXJjaFxuICogIC0gbWF0Y2hpbmcgcm91dGVzIGZpcnN0XG4gKiAgLSBvdGhlcndpc2UgYnkgY29uZmlkZW5jZSwgZXhjZXB0IHRoYXQ6XG4gKiAgICAtIGJvb3N0IHdlbGwgbWF0Y2hpbmcgc3RhdGlvbnMgKGVzcGVjaWFsbHkgZnJvbSBHVEZTKVxuICogICAgLSByYW5rIHN0b3BzIGxvd2VyIGFzIHRoZXkgdGVuZCB0byBvY2N1cHkgbW9zdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHNcbiAqICAtIGl0ZW1zIHdpdGggbm8gY29uZmlkZW5jZSAob2xkIHNlYXJjaGVzIGFuZCBmYXZvcml0ZXMpOlxuICogICAgLSByYW5rIGZhdm91cml0ZXMgYmV0dGVyIHRoYW4gb3JkaW5hcnkgb2xkIHNlYXJjaGVzXG4gKiAgICAtIHJhbmsgZnVsbCBtYXRjaCBiZXR0ZXIgdGhhbiBwYXJ0aWFsIG1hdGNoXG4gKiAgICAtIHJhbmsgbWF0Y2ggYXQgbWlkZGxlIHdvcmQgbG93ZXIgdGhhbiBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nXG4gKiAgICAtIHJhbmsgYmlrZSByZW50YWwgc3RhdGlvbnMgbG93ZXJcbiAqIEBwYXJhbSB7KltdfSByZXN1bHRzIFRoZSBzZWFyY2ggcmVzdWx0cyB0aGF0IHdlcmUgcmVjZWl2ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXJtIFRoZSBzZWFyY2ggdGVybSB0aGF0IHdhcyB1c2VkXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0U2VhcmNoUmVzdWx0cyA9IChsaW5lUmVnZXhwLCByZXN1bHRzLCB0ZXJtID0gJycpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgY29uc3QgaXNMaW5lSWRlbnRpZmllciA9IHZhbHVlID0+XG4gICAgaXNTdHJpbmcodmFsdWUpICYmIGxpbmVSZWdleHAgJiYgbGluZVJlZ2V4cC50ZXN0KHZhbHVlKTtcblxuICBjb25zdCBub3JtYWxpemVkVGVybSA9IG5vcm1hbGl6ZSh0ZXJtKTtcbiAgY29uc3QgaXNMaW5lU2VhcmNoID0gaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemVkVGVybSk7XG5cbiAgY29uc3Qgb3JkZXJlZFJlc3VsdHMgPSBvcmRlckJ5KFxuICAgIHJlc3VsdHMsXG4gICAgW1xuICAgICAgLy8gcmFuayBtYXRjaGluZyByb3V0ZXMgYmVzdFxuICAgICAgcmVzdWx0ID0+XG4gICAgICAgIGlzTGluZVNlYXJjaCAmJlxuICAgICAgICBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpKSAmJlxuICAgICAgICBub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMFxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcblxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWRlbmNlLCBsYXllciwgc291cmNlIH0gPSByZXN1bHQucHJvcGVydGllcztcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIC8vIERvaW5nIHNlYXJjaCB3aXRoIGVtcHR5IHN0cmluZy5cbiAgICAgICAgICAvLyBObyBjb25maWRlbmNlIHRvIG1hdGNoLCBzbyB1c2UgcmFua2VkIG9sZCBzZWFyY2hlcyBhbmQgZmF2b3VyaXRlc1xuICAgICAgICAgIHJldHVybiBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtdXN0IGhhbmRsZSBhIG1peHVwIG9mIGdlb2NvZGVyIHNlYXJjaGVzIGFuZCBpdGVtcyBhYm92ZVxuICAgICAgICAvLyBOb3JtYWwgY29uZmlkZW5jZSByYW5nZSBmcm9tIGdlb2NvZGVyIGlzIGFib3V0IDAuMyAuLiAxXG4gICAgICAgIGlmICghY29uZmlkZW5jZSkge1xuICAgICAgICAgIC8vIG5vdCBmcm9tIGdlb2NvZGVyLCBlc3RpbWF0ZSBjb25maWRlbmNlIG91cnNlbHZlc1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSkgK1xuICAgICAgICAgICAgbWF0Y2gobm9ybWFsaXplZFRlcm0sIHJlc3VsdC5wcm9wZXJ0aWVzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2VvY29kZWQgaXRlbXMgd2l0aCBjb25maWRlbmNlLCBqdXN0IGFkanVzdCBhIGxpdHRsZVxuICAgICAgICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgICAgICAgY29uc3QgYm9vc3QgPSBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwID8gMC4wMiA6IDAuMDE7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSArIGJvb3N0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDQ7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIF0sXG4gICAgWydkZXNjJywgJ2Rlc2MnXSxcbiAgKTtcblxuICByZXR1cm4gdW5pcVdpdGgob3JkZXJlZFJlc3VsdHMsIGlzRHVwbGljYXRlKTtcbn07XG5cbi8qKlxuICogUGFyc2VzIHN0b3AncyBuYW1lIHdpdGhvdXQgc3RvcCBjb2RlIGZyb20gYSBzdG9wIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCBzdG9wJ3MgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0b3BDb2RlIHN0b3AgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN0b3BOYW1lID0gKG5hbWUsIHN0b3BDb2RlKSA9PiB7XG4gIGlmIChcbiAgICBzdG9wQ29kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgc3RvcENvZGUgIT09IG51bGwgJiZcbiAgICBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAhPT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpIC0gMSk7XG4gIH1cbiAgcmV0dXJuIG5hbWU7XG59O1xuIiwiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGZpbHRlcnMgbGlzdCBtYXRjaGluZyB0byBpbnB1dC5cbiAqXG4gKiBAbmFtZSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXRcbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgTGlzdCBjb250YWluaW4gb2JqZWN0cyBlLmcoICB7XG4gKiAgICAgICAgIHR5cGU6ICdGZWF0dXJlJ1xuICogICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gKiAgICAgICAgICAgbGFiZWw6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICAgIGxheWVyOiAnYWRkcmVzcycsXG4gKiAgICAgICAgICAgbmFtZTogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIGdlb21ldHJ5OiB7IGNvb3JkaW5hdGVzOiBbbG9uLCBsYXRdIH0sXG4gKiAgICAgICB9LClcbiAqIEBwYXJhbSB7U3RyaW5nfSBJbnB1dCBJbnB1dCBnaXZlbiBmb3IgZmlsdGVyaW5nIHRoZSBsaXN0XG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgTGlzdCBvZiBmaWVsZHMgdGhhdCBsaXN0IGlzIGZpbHRlcmVkIGJ5IGUuZyAoW3Byb3BlcnRpZXMubGFiZWwsIHByb3BlcnRpZXMubmFtZV0pXG4gKiBAcmV0dXJucyB7QXJyYXl9IEZpbHRlcmVkIEFycmF5LlxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuZmlsdGVyTWF0Y2hpbmdUb0lucHV0KFt7dHlwZTogZmVhdHVyZSwgcHJvcGVydGllcyB7IC4uLiBuYW1lOiB0ZXN0YWRkcmVzczQgfSAuLi4gfV0sICd0ZXN0YWRkcmVzczQnLCAncHJvcGVydGllcy5uYW1lJyk7XG4gKiAvLz0gTGlzdCBjb250YWluaW5nIG9iamVjdCB3aXRoIGdpdmVuIG5hbWUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbHRlck1hdGNoaW5nVG9JbnB1dChsaXN0LCBJbnB1dCwgZmllbGRzKSB7XG4gIGlmICh0eXBlb2YgSW5wdXQgPT09ICdzdHJpbmcnICYmIElucHV0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBpbnB1dCA9IElucHV0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IG11bHRpV29yZCA9IGlucHV0LmluY2x1ZGVzKCcgJykgfHwgaW5wdXQuaW5jbHVkZXMoJywnKTtcbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBsZXQgcGFydHMgPSBbXTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKHBOYW1lID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gZ2V0KGl0ZW0sIHBOYW1lKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW11bHRpV29yZCAmJlxuICAgICAgICAgIChwTmFtZSA9PT0gJ3Byb3BlcnRpZXMubGFiZWwnIHx8IHBOYW1lID09PSAnYWRkcmVzcycpICYmXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBkcm9wIGxhc3QgcGFydHMgaS5lLiBjaXR5IGFuZCBuZWlnaGJvdXJob29kXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMiwgMik7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChtdWx0aVdvcmQpIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdChcbiAgICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8sL2csICcgJykuc3BsaXQoJyAnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoaW5wdXQpID09PSAwKSB7XG4gICAgICAgICAgLy8gYWNjZXB0IG1hdGNoIG9ubHkgYXQgd29yZCBzdGFydFxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cbiIsIi8qKlxuICogU2VyaWFsaXplcyBvYmplY3RzXG4gKlxuICogQG5hbWUgc2VyaWFsaXplXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gKiBAcGFyYW0ge0FueX0gcHJlZml4XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBTZXJpYWxpemVkIG9iamVjdFxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnNlcmlhbGl6ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZShvYmosIHByZWZpeCkge1xuICBpZiAoIW9iaikge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgIC5tYXAocCA9PiB7XG4gICAgICBjb25zdCBrID0gcHJlZml4IHx8IHA7XG4gICAgICBjb25zdCB2ID0gb2JqW3BdO1xuXG4gICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VyaWFsaXplKHYsIGspXG4gICAgICAgIDogYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGspfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2KX1gO1xuICAgIH0pXG4gICAgLmpvaW4oJyYnKTtcbn1cbiIsImltcG9ydCBzZXJpYWxpemUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZSc7XG4vKipcbiAqICBSZXR1cm4gUHJvbWlzZSBmb3IgYSB1cmwganNvbiBnZXQgcmVxdWVzdFxuICpcbiAqIEBuYW1lIGdldEpzb25cbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtc1xuICogQHJldHVybnMge09iamVjdH0gcmVzcG9uc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRKc29uKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXJlc3BvbnNlXG4gKi9cbmNvbnN0IGF4aW9zID0gcmVxdWlyZSgnYXhpb3MnKS5kZWZhdWx0O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRKc29uKHVybCwgcGFyYW1zKSB7XG4gIHJldHVybiBheGlvc1xuICAgIC5nZXQoXG4gICAgICBlbmNvZGVVUkkodXJsKSArXG4gICAgICAgIChwYXJhbXNcbiAgICAgICAgICA/ICh1cmwuc2VhcmNoKC9cXD8vKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplKHBhcmFtcylcbiAgICAgICAgICA6ICcnKSxcbiAgICAgIHtcbiAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG5cbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApXG4gICAgLnRoZW4ocmVzID0+IHtcbiAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBnZXRKc29uIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbic7XG5cbmNvbnN0IERFRkFVTFRfUEVMSUFTX1VSTCA9ICdodHRwczovL2FwaS5kaWdpdHJhbnNpdC5maS9nZW9jb2RpbmcvdjEvc2VhcmNoJztcbi8qKlxuICogPERFU0NSSVBUSU9OPlxuICpcbiAqIEBuYW1lIGdldEdlb2NvZGluZ1Jlc3VsdHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hQYXJhbXMgKE9wdGlvbmFsKSBQYXJhbWV0ZXJzIGFwcGVuZGVkIHRvIHVybCwgYmFzaWNhbGx5IGJveCAvIHBvbHlnb24gdG8gcmVzdHJpY3Qgc2VhcmNoIGFyZWFcbiAqIEBwYXJhbSB7U3RyaW5nfSBsYW5nIChPcHRpb25hbCkgc2VhcmNoIGxhbmd1YWdlXG4gKiBAcGFyYW0ge09iamVjdH0gZm9jdXNQb2ludCAoT3B0aW9uYWwpIE93biBQb3NpdGlvbiAoUEVMSUFTIEFQSSlcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VzIChPcHRpb25hbCkgc2VhcmNoIHNvdXJjZXMgKGUuZyBPU00sIEdURlMuLilcbiAqIEBwYXJhbSB7T2JqZWN0fSBtaW5pbWFsUmVnZXhwIChPcHRpb25hbCkgUmVnZXhwIGZvciB0ZXN0aW5nXG4gKiBAcGFyYW0geyp9IGdlb2NvZGluZ0xheWVycyAoT3B0aW9uYWwpIEFycmF5IG9mIHN0cmluZ3MgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBsYXllcnMgaXMgc2VhcmNoZWQsIGUuZy4gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0b3AnXVxuICogQHJldHVybnMge1N0cmluZ30gUmVzdWx0cyBpbiBKU09OIGZvcm1cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRHZW9jb2RpbmdSZXN1bHRzKFwicmVzdWx0XCIpO1xuICogLy89IGUuZy4ge3RleHQ6XCJyZXN1bHRcIn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgc2VhcmNoU3RyaW5nLFxuICBzZWFyY2hQYXJhbXMsXG4gIGxhbmcsXG4gIGZvY3VzUG9pbnQsXG4gIHNvdXJjZXMsXG4gIHBlbGlhc1VybCxcbiAgbWluaW1hbFJlZ2V4cCxcbiAgZ2VvY29kaW5nTGF5ZXJzLFxuKSB7XG4gIGNvbnN0IHRleHQgPSBzZWFyY2hTdHJpbmcgPyBzZWFyY2hTdHJpbmcudHJpbSgpIDogbnVsbDtcbiAgaWYgKFxuICAgIHRleHQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHRleHQgPT09IG51bGwgfHxcbiAgICB0ZXh0Lmxlbmd0aCA8IDEgfHxcbiAgICAobWluaW1hbFJlZ2V4cCAmJiAhbWluaW1hbFJlZ2V4cC50ZXN0KHRleHQpKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICBjb25zdCBQRUxJQVNfVVJMID0gcGVsaWFzVXJsIHx8IERFRkFVTFRfUEVMSUFTX1VSTDtcbiAgbGV0IG9wdHMgPSB7IHRleHQsIC4uLnNlYXJjaFBhcmFtcywgLi4uZm9jdXNQb2ludCwgbGFuZyB9O1xuICBpZiAoc291cmNlcykge1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIHNvdXJjZXMgfTtcbiAgfVxuICBpZiAoZ2VvY29kaW5nTGF5ZXJzKSB7XG4gICAgY29uc3QgbGF5ZXJzID0gZ2VvY29kaW5nTGF5ZXJzLnRvU3RyaW5nKCk7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgbGF5ZXJzIH07XG4gIH1cbiAgcmV0dXJuIGdldEpzb24oUEVMSUFTX1VSTCwgb3B0cykudGhlbihyZXMgPT4ge1xuICAgIHJldHVybiByZXMuZmVhdHVyZXM7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICdsb2Rhc2gvZmxhdHRlbic7XG5pbXBvcnQgdGFrZSBmcm9tICdsb2Rhc2gvdGFrZSc7XG5pbXBvcnQge1xuICBzb3J0U2VhcmNoUmVzdWx0cyxcbiAgaXNTdG9wLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgZmlsdGVyTWF0Y2hpbmdUb0lucHV0IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQnO1xuaW1wb3J0IGdldEdlb2NvZGluZ1Jlc3VsdHMgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cyc7XG5pbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5mdW5jdGlvbiBnZXRTdG9wc0Zyb21HZW9jb2Rpbmcoc3RvcHMsIFVSTF9QRUxJQVNfUExBQ0UpIHtcbiAgaWYgKCFzdG9wcyB8fCBzdG9wcy5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgbGV0IGdpZHMgPSAnJztcbiAgY29uc3Qgc3RvcHNXaXRoR2lkcyA9IHN0b3BzLm1hcChzdG9wID0+IHtcbiAgICBjb25zdCB0eXBlID0gc3RvcC50eXBlID09PSAnc3RvcCcgPyAnc3RvcCcgOiAnc3RhdGlvbic7XG4gICAgbGV0IGdpZCA9IGBndGZzJHtzdG9wLmd0ZnNJZC5zcGxpdCgnOicpWzBdLnRvTG93ZXJDYXNlKCl9OiR7dHlwZX06R1RGUzoke1xuICAgICAgc3RvcC5ndGZzSWRcbiAgICB9YDtcbiAgICBpZiAoc3RvcC5jb2RlKSB7XG4gICAgICBnaWQgKz0gYCMke3N0b3AuY29kZX1gO1xuICAgIH1cbiAgICBnaWRzICs9IGAke2dpZH0sYDtcbiAgICByZXR1cm4geyAuLi5zdG9wLCBnaWQgfTtcbiAgfSk7XG4gIGNvbnN0IHN0b3BTdGF0aW9uTWFwID0gc3RvcHNXaXRoR2lkcy5yZWR1Y2UoZnVuY3Rpb24gcmVkdShcbiAgICBtYXAsXG4gICAgc3RvcE9yU3RhdGlvbixcbiAgKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgbWFwW3N0b3BPclN0YXRpb24uZ2lkXSA9IHN0b3BPclN0YXRpb247XG4gICAgcmV0dXJuIG1hcDtcbiAgfSwge30pO1xuICByZXR1cm4gZ2V0SnNvbihVUkxfUEVMSUFTX1BMQUNFLCB7XG4gICAgaWRzOiBnaWRzLnNsaWNlKDAsIC0xKSxcbiAgICAvLyBsYW5nOiBjb250ZXh0LmdldFN0b3JlKCdQcmVmZXJlbmNlc1N0b3JlJykuZ2V0TGFuZ3VhZ2UoKSwgVE9ETyBlbmFibGUgdGhpcyB3aGVuIE9UUCBzdXBwb3J0cyB0cmFuc2xhdGlvbnNcbiAgfSkudGhlbihyZXMgPT4ge1xuICAgIHJldHVybiByZXMuZmVhdHVyZXMubWFwKHN0b3AgPT4ge1xuICAgICAgY29uc3QgZmF2b3VyaXRlID0ge1xuICAgICAgICB0eXBlOiAnRmF2b3VyaXRlU3RvcCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBhZGRlbmR1bTogc3RvcC5wcm9wZXJ0aWVzLmFkZGVuZHVtLFxuICAgICAgICAgIGdpZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ2lkLFxuICAgICAgICAgIGNvZGU6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmNvZGUsXG4gICAgICAgICAgZ3Rmc0lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5ndGZzSWQsXG4gICAgICAgICAgbGFzdFVwZGF0ZWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmxhc3RVcGRhdGVkLFxuICAgICAgICAgIGZhdm91cml0ZUlkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5mYXZvdXJpdGVJZCxcbiAgICAgICAgICBhZGRyZXNzOiBzdG9wLnByb3BlcnRpZXMubGFiZWwsXG4gICAgICAgICAgbGF5ZXI6IGlzU3RvcChzdG9wLnByb3BlcnRpZXMpID8gJ2Zhdm91cml0ZVN0b3AnIDogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeTogc3RvcC5nZW9tZXRyeSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gZmF2b3VyaXRlO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVzLCBpbnB1dCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIGZpbHRlck1hdGNoaW5nVG9JbnB1dChmYXZvdXJpdGVzLCBpbnB1dCwgWydhZGRyZXNzJywgJ25hbWUnXSkubWFwKGl0ZW0gPT4gKHtcbiAgICAgIHR5cGU6ICdGYXZvdXJpdGVQbGFjZScsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIGxhYmVsOiBpdGVtLm5hbWUsXG4gICAgICAgIGxheWVyOiAnZmF2b3VyaXRlUGxhY2UnLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7IHR5cGU6ICdQb2ludCcsIGNvb3JkaW5hdGVzOiBbaXRlbS5sb24sIGl0ZW0ubGF0XSB9LFxuICAgIH0pKSxcbiAgKTtcbn1cbmZ1bmN0aW9uIHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tbWFwJyxcbiAgICAgICAgICBsYXllcjogJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdDdXJyZW50TG9jYXRpb24nLFxuICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgbG9uOiBwb3NpdGlvbi5sb24sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAndXNlLW93bi1wb3NpdGlvbicsXG4gICAgICAgICAgbGF5ZXI6ICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgICAgbG9uOiBwb3NpdGlvbi5sb24sXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW3Bvc2l0aW9uLmxvbiwgcG9zaXRpb24ubGF0XSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnLFxuICAgICAgICAgIGxheWVyOiAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgICBhZGRyZXNzOiAnc2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEJhY2tTdWdnZXN0aW9uKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICB7XG4gICAgICB0eXBlOiAnYmFjaycsXG4gICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICBsYXQ6IG51bGwsXG4gICAgICBsb246IG51bGwsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGxhYmVsSWQ6ICdiYWNrJyxcbiAgICAgICAgbGF5ZXI6ICdiYWNrJyxcbiAgICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeToge1xuICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICB9LFxuICAgIH0sXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSB7XG4gIHJldHVybiBzdG9wc0FuZFN0YXRpb25zLnRoZW4oc3RvcHNTdGF0aW9ucyA9PiB7XG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IHN0b3BzU3RhdGlvbnMuZmlsdGVyKHMgPT5cbiAgICAgIHMudHlwZSA9PT0gJ3N0b3AnID8gdXNlU3RvcHMgOiB1c2VTdGF0aW9ucyxcbiAgICApO1xuICAgIHJldHVybiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoY2FuZGlkYXRlcywgaW5wdXQsIFtcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgICAncHJvcGVydGllcy5hZGRyZXNzJyxcbiAgICBdKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlck9sZFNlYXJjaGVzKG9sZFNlYXJjaGVzLCBpbnB1dCwgZHJvcExheWVycykge1xuICBsZXQgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IGZpbHRlck1hdGNoaW5nVG9JbnB1dChvbGRTZWFyY2hlcywgaW5wdXQsIFtcbiAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAncHJvcGVydGllcy5sYWJlbCcsXG4gICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgJ3Byb3BlcnRpZXMuc2hvcnROYW1lJyxcbiAgICAncHJvcGVydGllcy5sb25nTmFtZScsXG4gIF0pO1xuICBpZiAoZHJvcExheWVycykge1xuICAgIC8vIGRvbid0IHdhbnQgdGhlc2VcbiAgICBtYXRjaGluZ09sZFNlYXJjaGVzID0gbWF0Y2hpbmdPbGRTZWFyY2hlcy5maWx0ZXIoXG4gICAgICBpdGVtID0+ICFkcm9wTGF5ZXJzLmluY2x1ZGVzKGl0ZW0ucHJvcGVydGllcy5sYXllciksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRha2UobWF0Y2hpbmdPbGRTZWFyY2hlcywgMTApLm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHR5cGU6ICdPbGRTZWFyY2gnLFxuICAgICAgICB0aW1ldGFibGVDbGlja2VkOiBmYWxzZSwgLy8gcmVzZXQgbGF0ZXN0IHNlbGVjdGlvbiBhY3Rpb25cbiAgICAgICAgYXJyb3dDbGlja2VkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBkZWxldGUgbmV3SXRlbS5wcm9wZXJ0aWVzLmNvbmZpZGVuY2U7XG4gICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzRmF2b3VyaXRlcyhzZWFyY2hDb250ZXh0KSB7XG4gIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlTG9jYXRpb25zKFxuICAgIHNlYXJjaENvbnRleHQuY29udGV4dCxcbiAgKTtcbiAgaWYgKGZhdm91cml0ZUxvY2F0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zID1cbiAgICBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICBpZiAoZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zPy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZVN0b3BzKHNlYXJjaENvbnRleHQuY29udGV4dCk7XG4gIHJldHVybiBmYXZvdXJpdGVTdG9wcz8ubGVuZ3RoID4gMDtcbn1cblxuY29uc3Qgcm91dGVMYXllcnMgPSBbXG4gICdyb3V0ZS1UUkFNJyxcbiAgJ3JvdXRlLUJVUycsXG4gICdyb3V0ZS1SQUlMJyxcbiAgJ3JvdXRlLUZFUlJZJyxcbiAgJ3JvdXRlLVNVQldBWScsXG4gICdyb3V0ZS1BSVJQTEFORScsXG4gICdyb3V0ZS1GVU5JQ1VMQVInLFxuXTtcbmNvbnN0IGxvY2F0aW9uTGF5ZXJzID0gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuY29uc3QgcGFya2luZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuY29uc3Qgc3RvcExheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJ107XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIHNlYXJjaFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFJlc3VsdHMoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIHsgaW5wdXQgfSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikge1xuICBjb25zdCB7XG4gICAgZ2V0UG9zaXRpb25zLFxuICAgIGdldEZhdm91cml0ZUxvY2F0aW9ucyxcbiAgICBnZXRPbGRTZWFyY2hlcyxcbiAgICBnZXRGYXZvdXJpdGVTdG9wcyxcbiAgICBwYXJraW5nQXJlYVNvdXJjZXMsXG4gICAgZ2V0TGFuZ3VhZ2UsXG4gICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zLFxuICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVJvdXRlcyxcbiAgICBnZXRSb3V0ZXNRdWVyeSxcbiAgICBjb250ZXh0LFxuICAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogbG9jYXRpb25Bd2FyZSxcbiAgICBtaW5pbWFsUmVnZXhwLFxuICAgIGxpbmVSZWdleHAsXG4gICAgVVJMX1BFTElBUyxcbiAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgIGZlZWRJRHMsXG4gICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zLFxuICAgIGdlb2NvZGluZ1NvdXJjZXMsXG4gICAgZ2V0RnV0dXJlUm91dGVzLFxuICAgIGNpdHlCaWtlTmV0d29ya3MsXG4gIH0gPSBzZWFyY2hDb250ZXh0O1xuICAvLyBpZiBubyB0YXJnZXRzIGFyZSBwcm92aWRlZCwgc2VhcmNoIHRoZW0gYWxsLlxuICBjb25zdCBhbGxUYXJnZXRzID0gIXRhcmdldHMgfHwgdGFyZ2V0cy5sZW5ndGggPT09IDA7XG4gIC8vIGlmIG5vIHNvdXJjZXMgYXJlIHByb3ZpZGVkLCB1c2UgdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFNvdXJjZXMgPSAhc291cmNlcyB8fCBzb3VyY2VzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3NpdGlvbnMoY29udGV4dCk7XG4gIGNvbnN0IHNlYXJjaENvbXBvbmVudHMgPSBbXTtcbiAgY29uc3Qgc2VhcmNoZXMgPSB7IHR5cGU6ICdhbGwnLCB0ZXJtOiBpbnB1dCwgcmVzdWx0czogW10gfTtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShjb250ZXh0KTtcbiAgY29uc3QgZm9jdXNQb2ludCA9XG4gICAgbG9jYXRpb25Bd2FyZSAmJiByZWZQb2ludD8ubGF0ICYmIHJlZlBvaW50Py5sb25cbiAgICAgID8ge1xuICAgICAgICAgIC8vIFJvdW5kIGNvb3JkaW5hdGVzIHRvIGFwcHJveCAxIGttLCBpbiBvcmRlciB0byBpbXByb3ZlIGNhY2hpbmdcbiAgICAgICAgICAnZm9jdXMucG9pbnQubGF0JzogcmVmUG9pbnQubGF0LnRvRml4ZWQoMyksXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50Lmxvbic6IHJlZlBvaW50Lmxvbi50b0ZpeGVkKDMpLFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICBjb25zdCBtb2RlID0gdHJhbnNwb3J0TW9kZSA/IHRyYW5zcG9ydE1vZGUuc3BsaXQoJy0nKVsxXSA6IHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ0N1cnJlbnRQb3NpdGlvbicpICYmXG4gICAgcG9zaXRpb24uc3RhdHVzICE9PSAnZ2VvbG9jYXRpb24tbm90LXN1cHBvcnRlZCdcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTWFwUG9zaXRpb24nKSkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkpO1xuICB9XG4gIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdGdXR1cmVSb3V0ZXMnKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gZ2V0RnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaCh0YWtlKGl0ZW1zLCAzKSk7XG4gIH1cbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSAmJlxuICAgIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dClcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IGdldEZhdm91cml0ZUxvY2F0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZUxvY2F0aW9ucywgaW5wdXQpLFxuICAgICAgKTtcbiAgICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdCYWNrJykpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEJhY2tTdWdnZXN0aW9uKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuICAgICAgY29uc3QgZmVlZGlzID0gZmVlZElEcy5tYXAodiA9PiBgZ3RmcyR7dn1gKTtcbiAgICAgIGNvbnN0IGdlb3NvdXJjZXMgPSBnZW9jb2RpbmdTb3VyY2VzLmNvbmNhdChmZWVkaXMpLmpvaW4oJywnKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBnZW9zb3VyY2VzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQsICdlbmRwb2ludCcpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKGxvY2F0aW9uSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUGFya2luZ0FyZWFzJykpIHtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICAgIGlmIChnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5zaXplID0gZ2VvY29kaW5nU2l6ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuICAgICAgY29uc3QgZmVlZElkcyA9IHBhcmtpbmdBcmVhU291cmNlcyA/IHBhcmtpbmdBcmVhU291cmNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRJZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB1c2VTdG9wcyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJyk7XG4gIGNvbnN0IHVzZVN0YXRpb25zID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKTtcblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB1c2VTdG9wcyB8fCB1c2VTdGF0aW9ucykge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBnZXRGYXZvdXJpdGVTdG9wcyhjb250ZXh0KTtcbiAgICAgIGxldCBzdG9wc0FuZFN0YXRpb25zO1xuICAgICAgaWYgKGZhdm91cml0ZVN0b3BzLmV2ZXJ5KHN0b3AgPT4gc3RvcC50eXBlID09PSAnc3RhdGlvbicpKSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoXG4gICAgICAgICAgZmF2b3VyaXRlU3RvcHMsXG4gICAgICAgICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZVN0b3BzKVxuICAgICAgICAgIC50aGVuKGZhdm91cml0ZXMgPT5cbiAgICAgICAgICAgIGdldFN0b3BzRnJvbUdlb2NvZGluZyhmYXZvdXJpdGVzLCBVUkxfUEVMSUFTX1BMQUNFKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gW107XG4gICAgICBpZiAodXNlU3RvcHMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VTdGF0aW9ucykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBpZiAoZ2VvY29kaW5nU2VhcmNoUGFyYW1zICYmIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddID1cbiAgICAgICAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGl0dGxlIGhhY2s6IHdoZW4gc2VhcmNoaW5nIGxvY2F0aW9uIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGVkdXBlIHN0b3BzXG4gICAgICAvLyB0aGlzIGNvdWxkIGJlIGEgbmV3IGV4cGxpY2l0IHByb3BcbiAgICAgIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5kZWR1cGVzdG9wcyA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWVkaXMgPSBmZWVkSURzLm1hcCh2ID0+IGBndGZzJHt2fWApLmpvaW4oJywnKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkaXMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBzdG9wSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ucHJvcGVydGllcy5naWQpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5wcm9wZXJ0aWVzLmdpZC5pbmNsdWRlcygnR1RGUzonKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuICAgICAgaWYgKCF1c2VTdG9wcykge1xuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICghdXNlU3RhdGlvbnMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdGF0aW9uJyk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNwb3J0TW9kZSkge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlKSA6IHJlc3VsdCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycyksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1JvdXRlcycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVSb3V0ZXMgPSBnZXRGYXZvdXJpdGVSb3V0ZXMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5KGZhdm91cml0ZVJvdXRlcywgaW5wdXQsIG1vZGUsIHBhdGhPcHRzKS50aGVuKFxuICAgICAgICAgIHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICBnZXRSb3V0ZXNRdWVyeShpbnB1dCwgZmVlZElEcywgdHJhbnNwb3J0TW9kZSwgcGF0aE9wdHMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgKSxcbiAgICApO1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgcm91dGVIaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzLmZpbHRlcihpID0+ICEoaSA9PT0gdHJhbnNwb3J0TW9kZSkpKTtcbiAgICAgIH1cbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMocm91dGVIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHRzID0+XG4gICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0cyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbiA9XG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnkoXG4gICAgICAgICAgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24sXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XG4gICAgICAgIGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTAgPyB7IHNpemU6IGdlb2NvZGluZ1NpemUgfSA6IHt9O1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGNpdHlCaWtlTmV0d29ya3Muam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbLi4uc3RvcExheWVyc107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcblxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGZpbHRlck9sZFNlYXJjaGVzKGhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb21pc2UgPSBQcm9taXNlLmFsbChzZWFyY2hDb21wb25lbnRzKVxuICAgIC50aGVuKGZsYXR0ZW4pXG4gICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICBzZWFyY2hlcy5yZXN1bHRzID0gcmVzdWx0cztcbiAgICB9KVxuICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgc2VhcmNoZXMuZXJyb3IgPSBlcnI7XG4gICAgfSk7XG4gIHNlYXJjaFJlc3VsdHNQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgIGNhbGxiYWNrKHtcbiAgICAgIC4uLnNlYXJjaGVzLFxuICAgICAgcmVzdWx0czogc29ydFNlYXJjaFJlc3VsdHMobGluZVJlZ2V4cCwgc2VhcmNoZXMucmVzdWx0cywgaW5wdXQpLFxuICAgIH0pO1xuICB9KTtcbn1cblxuY29uc3QgZGVib3VuY2VkU2VhcmNoID0gZGVib3VuY2UoZ2V0U2VhcmNoUmVzdWx0cywgMzAwLCB7XG4gIGxlYWRpbmc6IHRydWUsXG59KTtcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVTZWFyY2ggPSAoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIGRhdGEsXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pID0+IHtcbiAgY2FsbGJhY2sobnVsbCk7IC8vIFRoaXMgbWVhbnMgJ3dlIGFyZSBzZWFyY2hpbmcnXG4gIGRlYm91bmNlZFNlYXJjaChcbiAgICB0YXJnZXRzLFxuICAgIHNvdXJjZXMsXG4gICAgdHJhbnNwb3J0TW9kZSxcbiAgICBzZWFyY2hDb250ZXh0LFxuICAgIGZpbHRlclJlc3VsdHMsXG4gICAgZ2VvY29kaW5nU2l6ZSxcbiAgICBkYXRhLFxuICAgIGNhbGxiYWNrLFxuICAgIHBhdGhPcHRzLFxuICAgIHJlZlBvaW50LFxuICApO1xufTtcbiIsImltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUnO1xuaW1wb3J0IGVzY2FwZVJlZ0V4cCBmcm9tICdsb2Rhc2gvZXNjYXBlUmVnRXhwJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5cbi8qKlxuICogTG9jYXRpb24gcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtMb2NhdGlvblByb3BlcnRpZXN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXIgU3VnZ2VzdGlvbiBsYXllci5cbiAqIEBwcm9wZXJ0eSB7bGF0fSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtsb259IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzcyBBZGRyZXNzLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBsb2NhbGl0eSAoY2l0eSBuYW1lKSBmb3Igc3VnZ2VzdGlvbnNcbiAqXG4gKiBAbmFtZSBnZXRMb2NhbGl0eVxuICogQHBhcmFtIHtPYmplY3R9IHN1Z2dlc3Rpb24gc3VnZ2VzdGlvbidzIHByb3BlcnRpZXMgZnJvbSBnZW9jb2Rpbmcgb3IgYSBmYXZvdXJpdGUgc3RvcC9zdGF0aW9uLlxuICogRXhwZWN0cyBsYXN0IHBhcnQgb2YgYW4gYWRkcmVzcyAoYWZ0ZXIgJywnKSB0byBjb250YWluIHRoZSBjaXR5IG5hbWUgb2YgdGhlIHN1Z2dlc3Rpb24gbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRMb2NhbGl0eSA9IHN1Z2dlc3Rpb24gPT5cbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIHN1Z2dlc3Rpb24ubG9jYWxpdHkgfHxcbiAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpIDwgc3VnZ2VzdGlvbi5hZGRyZXNzLmxlbmd0aCAtIDIgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3Muc3Vic3RyaW5nKHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpICsgMikpIHx8XG4gICcnO1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcENvZGUgPSAoeyBpZCwgY29kZSB9KSA9PiB7XG4gIGlmIChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cbiAgaWYgKFxuICAgIGlkID09PSB1bmRlZmluZWQgfHxcbiAgICB0eXBlb2YgaWQuaW5kZXhPZiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICBpZC5pbmRleE9mKCcjJykgPT09IC0xXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gaWQgZnJvbSBwZWxpYXNcbiAgcmV0dXJuIGlkLnN1YnN0cmluZyhpZC5pbmRleE9mKCcjJykgKyAxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsID0gKG5hbWUsIGFkZHJlc3MpID0+IFtcbiAgbmFtZSB8fCAoYWRkcmVzcyAmJiBhZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZydcbiAgICA/IGFkZHJlc3MucmVwbGFjZShuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChuYW1lKX0oWyAsXXwkKStgKSwgJycpXG4gICAgOiAnJyxcbl07XG5cbi8qKlxuICogRm9ybWF0IHN1Z2dlc3Rpb24tcGFpciBbbmFtZSwgYWRkcmVzc10gYnkgYHN1Z2dlc3Rpb24ubGF5ZXJgLlxuICpcbiAqIEBuYW1lIGdldE5hbWVMYWJlbFxuICogQHBhcmFtIHtMb2NhdGlvblByb3BlcnRpZXN9IHN1Z2dlc3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BsYWluXVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gRm9ybWF0dGVkIGxhYmVsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0TmFtZUxhYmVsID0gbWVtb2l6ZShcbiAgKHN1Z2dlc3Rpb24sIHBsYWluID0gZmFsc2UpID0+IHtcbiAgICBzd2l0Y2ggKHN1Z2dlc3Rpb24ubGF5ZXIpIHtcbiAgICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkLCBzdWdnZXN0aW9uLmFkZHJlc3NdO1xuICAgICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgICAgY2FzZSAnYmFjayc6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwoc3VnZ2VzdGlvbi5uYW1lLCBzdWdnZXN0aW9uLmFkZHJlc3MpO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgICAgY2FzZSAnYmlrZXN0YXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubmFtZV07XG4gICAgICBjYXNlICdmYXZvdXJpdGVSb3V0ZSc6XG4gICAgICBjYXNlICdyb3V0ZS1CVVMnOlxuICAgICAgY2FzZSAncm91dGUtVFJBTSc6XG4gICAgICBjYXNlICdyb3V0ZS1SQUlMJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVNVQldBWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GRVJSWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GVU5JQ1VMQVInOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxpdHkoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgaWYgKGZlYXQxLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgZmVhdDIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgaXNFcXVhbChnZXROYW1lTGFiZWwoZmVhdDEucHJvcGVydGllcyksIGdldE5hbWVMYWJlbChmZWF0Mi5wcm9wZXJ0aWVzKSkgJiZcbiAgICAgIGZlYXQxLnByb3BlcnRpZXMubGF5ZXIgPT09IGZlYXQyLnByb3BlcnRpZXMubGF5ZXJcbiAgICApO1xuICB9KTtcbn1cbiIsIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4zMC4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICB2YXIgZmxhZ3MgPSBudWxsLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPSBtLl9kICYmICFpc05hTihtLl9kLmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc05vd1ZhbGlkKSB7XG4gICAgICAgICAgICBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIEQ6ICdkYXRlJyxcbiAgICAgICAgZGF0ZXM6ICdkYXRlJyxcbiAgICAgICAgZGF0ZTogJ2RhdGUnLFxuICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgZGF5czogJ2RheScsXG4gICAgICAgIGRheTogJ2RheScsXG4gICAgICAgIGU6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheTogJ3dlZWtkYXknLFxuICAgICAgICBFOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXk6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgREREOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyczogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcjogJ2RheU9mWWVhcicsXG4gICAgICAgIGg6ICdob3VyJyxcbiAgICAgICAgaG91cnM6ICdob3VyJyxcbiAgICAgICAgaG91cjogJ2hvdXInLFxuICAgICAgICBtczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbTogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgICAgICBtaW51dGU6ICdtaW51dGUnLFxuICAgICAgICBNOiAnbW9udGgnLFxuICAgICAgICBtb250aHM6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAnbW9udGgnLFxuICAgICAgICBROiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmQ6ICdzZWNvbmQnLFxuICAgICAgICBnZzogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXJzOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcjogJ3dlZWtZZWFyJyxcbiAgICAgICAgR0c6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyczogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXI6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIHc6ICd3ZWVrJyxcbiAgICAgICAgd2Vla3M6ICd3ZWVrJyxcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBXOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWtzOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgeTogJ3llYXInLFxuICAgICAgICB5ZWFyczogJ3llYXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge1xuICAgICAgICBkYXRlOiA5LFxuICAgICAgICBkYXk6IDExLFxuICAgICAgICB3ZWVrZGF5OiAxMSxcbiAgICAgICAgaXNvV2Vla2RheTogMTEsXG4gICAgICAgIGRheU9mWWVhcjogNCxcbiAgICAgICAgaG91cjogMTMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAxNixcbiAgICAgICAgbWludXRlOiAxNCxcbiAgICAgICAgbW9udGg6IDgsXG4gICAgICAgIHF1YXJ0ZXI6IDcsXG4gICAgICAgIHNlY29uZDogMTUsXG4gICAgICAgIHdlZWtZZWFyOiAxLFxuICAgICAgICBpc29XZWVrWWVhcjogMSxcbiAgICAgICAgd2VlazogNSxcbiAgICAgICAgaXNvV2VlazogNSxcbiAgICAgICAgeWVhcjogMSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyA9IC9eWzEtOV1cXGQ/LywgLy8gICAgICAgICAxLTk5XG4gICAgICAgIG1hdGNoMXRvMkhhc1plcm8gPSAvXihbMS05XVxcZHxcXGQpLywgLy8gICAgICAgICAgIDAtOTlcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGQgPSBtb20uX2QsXG4gICAgICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgOiBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENTZWNvbmRzKCkgOiBkLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWludXRlcygpIDogZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENIb3VycygpIDogZC5nZXRIb3VycygpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXRlKCkgOiBkLmdldERhdGUoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RheSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXkoKSA6IGQuZ2V0RGF5KCk7XG4gICAgICAgICAgICBjYXNlICdNb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNb250aCgpIDogZC5nZXRNb250aCgpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRnVsbFllYXIoKSA6IGQuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIHZhciBkLCBpc1VUQywgeWVhciwgbW9udGgsIGRhdGU7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZCA9IG1vbS5fZDtcbiAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVENcbiAgICAgICAgICAgICAgICAgICAgPyBkLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBkLnNldE1pbGxpc2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENTZWNvbmRzKHZhbHVlKSA6IGQuc2V0U2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNaW51dGVzKHZhbHVlKSA6IGQuc2V0TWludXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDSG91cnModmFsdWUpIDogZC5zZXRIb3Vycyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXRlKHZhbHVlKSA6IGQuc2V0RGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnRGF5JzogLy8gTm90IHJlYWxcbiAgICAgICAgICAgIC8vICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF5KHZhbHVlKSA6IGQuc2V0RGF5KHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdNb250aCc6IC8vIE5vdCB1c2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHR3byB2YXJpYWJsZXNcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01vbnRoKHZhbHVlKSA6IGQuc2V0TW9udGgodmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gU2VlIGJlbG93IC4uLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG5cbiAgICAgICAgeWVhciA9IHZhbHVlO1xuICAgICAgICBtb250aCA9IG1vbS5tb250aCgpO1xuICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcbiAgICAgICAgZGF0ZSA9IGRhdGUgPT09IDI5ICYmIG1vbnRoID09PSAxICYmICFpc0xlYXBZZWFyKHllYXIpID8gMjggOiBkYXRlO1xuICAgICAgICB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgPyBkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKSk7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdmFsdWUsXG4gICAgICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcblxuICAgICAgICBkYXRlID0gZGF0ZSA8IDI5ID8gZGF0ZSA6IE1hdGgubWluKGRhdGUsIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIG1vbnRoKSk7XG4gICAgICAgIHZvaWQgKG1vbS5faXNVVENcbiAgICAgICAgICAgID8gbW9tLl9kLnNldFVUQ01vbnRoKG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBtb20uX2Quc2V0TW9udGgobW9udGgsIGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgc2hvcnRQLFxuICAgICAgICAgICAgbG9uZ1A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF5ID0gZ2V0KHRoaXMsICdEYXknKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIC8vIEVuc3VyZSBuYW1lIGlzIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb24gcmV0dXJucyBib29sZWFuXG4gICAgICAgIHJldHVybiAhIShuYW1lICYmIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXNOYW1lLFxuICAgICAgICAgICAgZXJhc0FiYnIsXG4gICAgICAgICAgICBlcmFzTmFycm93LFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZXJhc05hbWUgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpO1xuICAgICAgICAgICAgZXJhc0FiYnIgPSByZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpO1xuICAgICAgICAgICAgZXJhc05hcnJvdyA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KTtcblxuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5JyksXG4gICAgICAgIHZhbHVlT2YkMSA9IGFzTWlsbGlzZWNvbmRzO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjMwLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LXRpbWV6b25lLmpzXG4vLyEgdmVyc2lvbiA6IDAuNS40NVxuLy8hIENvcHlyaWdodCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIGdpdGh1Yi5jb20vbW9tZW50L21vbWVudC10aW1lem9uZVxuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0LypnbG9iYWwgZGVmaW5lKi9cblx0aWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ21vbWVudCcpKTsgLy8gTm9kZVxuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShbJ21vbWVudCddLCBmYWN0b3J5KTsgICAgICAgICAgICAgICAgIC8vIEFNRFxuXHR9IGVsc2Uge1xuXHRcdGZhY3Rvcnkocm9vdC5tb21lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJyb3dzZXJcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAobW9tZW50KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8vIFJlc29sdmVzIGVzNiBtb2R1bGUgbG9hZGluZyBpc3N1ZVxuXHRpZiAobW9tZW50LnZlcnNpb24gPT09IHVuZGVmaW5lZCAmJiBtb21lbnQuZGVmYXVsdCkge1xuXHRcdG1vbWVudCA9IG1vbWVudC5kZWZhdWx0O1xuXHR9XG5cblx0Ly8gRG8gbm90IGxvYWQgbW9tZW50LXRpbWV6b25lIGEgc2Vjb25kIHRpbWUuXG5cdC8vIGlmIChtb21lbnQudHogIT09IHVuZGVmaW5lZCkge1xuXHQvLyBcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgJyArIG1vbWVudC50ei52ZXJzaW9uICsgJyB3YXMgYWxyZWFkeSBsb2FkZWQgJyArIChtb21lbnQudHouZGF0YVZlcnNpb24gPyAnd2l0aCBkYXRhIGZyb20gJyA6ICd3aXRob3V0IGFueSBkYXRhJykgKyBtb21lbnQudHouZGF0YVZlcnNpb24pO1xuXHQvLyBcdHJldHVybiBtb21lbnQ7XG5cdC8vIH1cblxuXHR2YXIgVkVSU0lPTiA9IFwiMC41LjQ1XCIsXG5cdFx0em9uZXMgPSB7fSxcblx0XHRsaW5rcyA9IHt9LFxuXHRcdGNvdW50cmllcyA9IHt9LFxuXHRcdG5hbWVzID0ge30sXG5cdFx0Z3Vlc3NlcyA9IHt9LFxuXHRcdGNhY2hlZEd1ZXNzO1xuXG5cdGlmICghbW9tZW50IHx8IHR5cGVvZiBtb21lbnQudmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcblx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHJlcXVpcmVzIE1vbWVudC5qcy4gU2VlIGh0dHBzOi8vbW9tZW50anMuY29tL3RpbWV6b25lL2RvY3MvIy91c2UtaXQvYnJvd3Nlci8nKTtcblx0fVxuXG5cdHZhciBtb21lbnRWZXJzaW9uID0gbW9tZW50LnZlcnNpb24uc3BsaXQoJy4nKSxcblx0XHRtYWpvciA9ICttb21lbnRWZXJzaW9uWzBdLFxuXHRcdG1pbm9yID0gK21vbWVudFZlcnNpb25bMV07XG5cblx0Ly8gTW9tZW50LmpzIHZlcnNpb24gY2hlY2tcblx0aWYgKG1ham9yIDwgMiB8fCAobWFqb3IgPT09IDIgJiYgbWlub3IgPCA2KSkge1xuXHRcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgcmVxdWlyZXMgTW9tZW50LmpzID49IDIuNi4wLiBZb3UgYXJlIHVzaW5nIE1vbWVudC5qcyAnICsgbW9tZW50LnZlcnNpb24gKyAnLiBTZWUgbW9tZW50anMuY29tJyk7XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0VW5wYWNraW5nXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBjaGFyQ29kZVRvSW50KGNoYXJDb2RlKSB7XG5cdFx0aWYgKGNoYXJDb2RlID4gOTYpIHtcblx0XHRcdHJldHVybiBjaGFyQ29kZSAtIDg3O1xuXHRcdH0gZWxzZSBpZiAoY2hhckNvZGUgPiA2NCkge1xuXHRcdFx0cmV0dXJuIGNoYXJDb2RlIC0gMjk7XG5cdFx0fVxuXHRcdHJldHVybiBjaGFyQ29kZSAtIDQ4O1xuXHR9XG5cblx0ZnVuY3Rpb24gdW5wYWNrQmFzZTYwKHN0cmluZykge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdHBhcnRzID0gc3RyaW5nLnNwbGl0KCcuJyksXG5cdFx0XHR3aG9sZSA9IHBhcnRzWzBdLFxuXHRcdFx0ZnJhY3Rpb25hbCA9IHBhcnRzWzFdIHx8ICcnLFxuXHRcdFx0bXVsdGlwbGllciA9IDEsXG5cdFx0XHRudW0sXG5cdFx0XHRvdXQgPSAwLFxuXHRcdFx0c2lnbiA9IDE7XG5cblx0XHQvLyBoYW5kbGUgbmVnYXRpdmUgbnVtYmVyc1xuXHRcdGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDUpIHtcblx0XHRcdGkgPSAxO1xuXHRcdFx0c2lnbiA9IC0xO1xuXHRcdH1cblxuXHRcdC8vIGhhbmRsZSBkaWdpdHMgYmVmb3JlIHRoZSBkZWNpbWFsXG5cdFx0Zm9yIChpOyBpIDwgd2hvbGUubGVuZ3RoOyBpKyspIHtcblx0XHRcdG51bSA9IGNoYXJDb2RlVG9JbnQod2hvbGUuY2hhckNvZGVBdChpKSk7XG5cdFx0XHRvdXQgPSA2MCAqIG91dCArIG51bTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsXG5cdFx0Zm9yIChpID0gMDsgaSA8IGZyYWN0aW9uYWwubGVuZ3RoOyBpKyspIHtcblx0XHRcdG11bHRpcGxpZXIgPSBtdWx0aXBsaWVyIC8gNjA7XG5cdFx0XHRudW0gPSBjaGFyQ29kZVRvSW50KGZyYWN0aW9uYWwuY2hhckNvZGVBdChpKSk7XG5cdFx0XHRvdXQgKz0gbnVtICogbXVsdGlwbGllcjtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0ICogc2lnbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFycmF5VG9JbnQgKGFycmF5KSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuXHRcdFx0YXJyYXlbaV0gPSB1bnBhY2tCYXNlNjAoYXJyYXlbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGludFRvVW50aWwgKGFycmF5LCBsZW5ndGgpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRhcnJheVtpXSA9IE1hdGgucm91bmQoKGFycmF5W2kgLSAxXSB8fCAwKSArIChhcnJheVtpXSAqIDYwMDAwKSk7IC8vIG1pbnV0ZXMgdG8gbWlsbGlzZWNvbmRzXG5cdFx0fVxuXG5cdFx0YXJyYXlbbGVuZ3RoIC0gMV0gPSBJbmZpbml0eTtcblx0fVxuXG5cdGZ1bmN0aW9uIG1hcEluZGljZXMgKHNvdXJjZSwgaW5kaWNlcykge1xuXHRcdHZhciBvdXQgPSBbXSwgaTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvdXRbaV0gPSBzb3VyY2VbaW5kaWNlc1tpXV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdGZ1bmN0aW9uIHVucGFjayAoc3RyaW5nKSB7XG5cdFx0dmFyIGRhdGEgPSBzdHJpbmcuc3BsaXQoJ3wnKSxcblx0XHRcdG9mZnNldHMgPSBkYXRhWzJdLnNwbGl0KCcgJyksXG5cdFx0XHRpbmRpY2VzID0gZGF0YVszXS5zcGxpdCgnJyksXG5cdFx0XHR1bnRpbHMgID0gZGF0YVs0XS5zcGxpdCgnICcpO1xuXG5cdFx0YXJyYXlUb0ludChvZmZzZXRzKTtcblx0XHRhcnJheVRvSW50KGluZGljZXMpO1xuXHRcdGFycmF5VG9JbnQodW50aWxzKTtcblxuXHRcdGludFRvVW50aWwodW50aWxzLCBpbmRpY2VzLmxlbmd0aCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZSAgICAgICA6IGRhdGFbMF0sXG5cdFx0XHRhYmJycyAgICAgIDogbWFwSW5kaWNlcyhkYXRhWzFdLnNwbGl0KCcgJyksIGluZGljZXMpLFxuXHRcdFx0b2Zmc2V0cyAgICA6IG1hcEluZGljZXMob2Zmc2V0cywgaW5kaWNlcyksXG5cdFx0XHR1bnRpbHMgICAgIDogdW50aWxzLFxuXHRcdFx0cG9wdWxhdGlvbiA6IGRhdGFbNV0gfCAwXG5cdFx0fTtcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRab25lIG9iamVjdFxuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gWm9uZSAocGFja2VkU3RyaW5nKSB7XG5cdFx0aWYgKHBhY2tlZFN0cmluZykge1xuXHRcdFx0dGhpcy5fc2V0KHVucGFjayhwYWNrZWRTdHJpbmcpKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjbG9zZXN0IChudW0sIGFycikge1xuXHRcdHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuXHRcdGlmIChudW0gPCBhcnJbMF0pIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH0gZWxzZSBpZiAobGVuID4gMSAmJiBhcnJbbGVuIC0gMV0gPT09IEluZmluaXR5ICYmIG51bSA+PSBhcnJbbGVuIC0gMl0pIHtcblx0XHRcdHJldHVybiBsZW4gLSAxO1xuXHRcdH0gZWxzZSBpZiAobnVtID49IGFycltsZW4gLSAxXSkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblxuXHRcdHZhciBtaWQ7XG5cdFx0dmFyIGxvID0gMDtcblx0XHR2YXIgaGkgPSBsZW4gLSAxO1xuXHRcdHdoaWxlIChoaSAtIGxvID4gMSkge1xuXHRcdFx0bWlkID0gTWF0aC5mbG9vcigobG8gKyBoaSkgLyAyKTtcblx0XHRcdGlmIChhcnJbbWlkXSA8PSBudW0pIHtcblx0XHRcdFx0bG8gPSBtaWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoaSA9IG1pZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGhpO1xuXHR9XG5cblx0Wm9uZS5wcm90b3R5cGUgPSB7XG5cdFx0X3NldCA6IGZ1bmN0aW9uICh1bnBhY2tlZCkge1xuXHRcdFx0dGhpcy5uYW1lICAgICAgID0gdW5wYWNrZWQubmFtZTtcblx0XHRcdHRoaXMuYWJicnMgICAgICA9IHVucGFja2VkLmFiYnJzO1xuXHRcdFx0dGhpcy51bnRpbHMgICAgID0gdW5wYWNrZWQudW50aWxzO1xuXHRcdFx0dGhpcy5vZmZzZXRzICAgID0gdW5wYWNrZWQub2Zmc2V0cztcblx0XHRcdHRoaXMucG9wdWxhdGlvbiA9IHVucGFja2VkLnBvcHVsYXRpb247XG5cdFx0fSxcblxuXHRcdF9pbmRleCA6IGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcblx0XHRcdHZhciB0YXJnZXQgPSArdGltZXN0YW1wLFxuXHRcdFx0XHR1bnRpbHMgPSB0aGlzLnVudGlscyxcblx0XHRcdFx0aTtcblxuXHRcdFx0aSA9IGNsb3Nlc3QodGFyZ2V0LCB1bnRpbHMpO1xuXHRcdFx0aWYgKGkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y291bnRyaWVzIDogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIHpvbmVfbmFtZSA9IHRoaXMubmFtZTtcblx0XHRcdHJldHVybiBPYmplY3Qua2V5cyhjb3VudHJpZXMpLmZpbHRlcihmdW5jdGlvbiAoY291bnRyeV9jb2RlKSB7XG5cdFx0XHRcdHJldHVybiBjb3VudHJpZXNbY291bnRyeV9jb2RlXS56b25lcy5pbmRleE9mKHpvbmVfbmFtZSkgIT09IC0xO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdHBhcnNlIDogZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuXHRcdFx0dmFyIHRhcmdldCAgPSArdGltZXN0YW1wLFxuXHRcdFx0XHRvZmZzZXRzID0gdGhpcy5vZmZzZXRzLFxuXHRcdFx0XHR1bnRpbHMgID0gdGhpcy51bnRpbHMsXG5cdFx0XHRcdG1heCAgICAgPSB1bnRpbHMubGVuZ3RoIC0gMSxcblx0XHRcdFx0b2Zmc2V0LCBvZmZzZXROZXh0LCBvZmZzZXRQcmV2LCBpO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHtcblx0XHRcdFx0b2Zmc2V0ICAgICA9IG9mZnNldHNbaV07XG5cdFx0XHRcdG9mZnNldE5leHQgPSBvZmZzZXRzW2kgKyAxXTtcblx0XHRcdFx0b2Zmc2V0UHJldiA9IG9mZnNldHNbaSA/IGkgLSAxIDogaV07XG5cblx0XHRcdFx0aWYgKG9mZnNldCA8IG9mZnNldE5leHQgJiYgdHoubW92ZUFtYmlndW91c0ZvcndhcmQpIHtcblx0XHRcdFx0XHRvZmZzZXQgPSBvZmZzZXROZXh0O1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9mZnNldCA+IG9mZnNldFByZXYgJiYgdHoubW92ZUludmFsaWRGb3J3YXJkKSB7XG5cdFx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0UHJldjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YXJnZXQgPCB1bnRpbHNbaV0gLSAob2Zmc2V0ICogNjAwMDApKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9mZnNldHNbaV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldHNbbWF4XTtcblx0XHR9LFxuXG5cdFx0YWJiciA6IGZ1bmN0aW9uIChtb20pIHtcblx0XHRcdHJldHVybiB0aGlzLmFiYnJzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH0sXG5cblx0XHRvZmZzZXQgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRsb2dFcnJvcihcInpvbmUub2Zmc2V0IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygem9uZS51dGNPZmZzZXRcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH0sXG5cblx0XHR1dGNPZmZzZXQgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH1cblx0fTtcblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0Q291bnRyeSBvYmplY3Rcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIENvdW50cnkgKGNvdW50cnlfbmFtZSwgem9uZV9uYW1lcykge1xuXHRcdHRoaXMubmFtZSA9IGNvdW50cnlfbmFtZTtcblx0XHR0aGlzLnpvbmVzID0gem9uZV9uYW1lcztcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRDdXJyZW50IFRpbWV6b25lXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBPZmZzZXRBdChhdCkge1xuXHRcdHZhciB0aW1lU3RyaW5nID0gYXQudG9UaW1lU3RyaW5nKCk7XG5cdFx0dmFyIGFiYnIgPSB0aW1lU3RyaW5nLm1hdGNoKC9cXChbYS16IF0rXFwpL2kpO1xuXHRcdGlmIChhYmJyICYmIGFiYnJbMF0pIHtcblx0XHRcdC8vIDE3OjU2OjMxIEdNVC0wNjAwIChDU1QpXG5cdFx0XHQvLyAxNzo1NjozMSBHTVQtMDYwMCAoQ2VudHJhbCBTdGFuZGFyZCBUaW1lKVxuXHRcdFx0YWJiciA9IGFiYnJbMF0ubWF0Y2goL1tBLVpdL2cpO1xuXHRcdFx0YWJiciA9IGFiYnIgPyBhYmJyLmpvaW4oJycpIDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAxNzo1NjozMSBDU1Rcblx0XHRcdC8vIDE3OjU2OjMxIEdNVCswODAwICjlj7DljJfmqJnmupbmmYLplpMpXG5cdFx0XHRhYmJyID0gdGltZVN0cmluZy5tYXRjaCgvW0EtWl17Myw1fS9nKTtcblx0XHRcdGFiYnIgPSBhYmJyID8gYWJiclswXSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoYWJiciA9PT0gJ0dNVCcpIHtcblx0XHRcdGFiYnIgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5hdCA9ICthdDtcblx0XHR0aGlzLmFiYnIgPSBhYmJyO1xuXHRcdHRoaXMub2Zmc2V0ID0gYXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIFpvbmVTY29yZSh6b25lKSB7XG5cdFx0dGhpcy56b25lID0gem9uZTtcblx0XHR0aGlzLm9mZnNldFNjb3JlID0gMDtcblx0XHR0aGlzLmFiYnJTY29yZSA9IDA7XG5cdH1cblxuXHRab25lU2NvcmUucHJvdG90eXBlLnNjb3JlT2Zmc2V0QXQgPSBmdW5jdGlvbiAob2Zmc2V0QXQpIHtcblx0XHR0aGlzLm9mZnNldFNjb3JlICs9IE1hdGguYWJzKHRoaXMuem9uZS51dGNPZmZzZXQob2Zmc2V0QXQuYXQpIC0gb2Zmc2V0QXQub2Zmc2V0KTtcblx0XHRpZiAodGhpcy56b25lLmFiYnIob2Zmc2V0QXQuYXQpLnJlcGxhY2UoL1teQS1aXS9nLCAnJykgIT09IG9mZnNldEF0LmFiYnIpIHtcblx0XHRcdHRoaXMuYWJiclNjb3JlKys7XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGZpbmRDaGFuZ2UobG93LCBoaWdoKSB7XG5cdFx0dmFyIG1pZCwgZGlmZjtcblxuXHRcdHdoaWxlICgoZGlmZiA9ICgoaGlnaC5hdCAtIGxvdy5hdCkgLyAxMmU0IHwgMCkgKiA2ZTQpKSB7XG5cdFx0XHRtaWQgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUobG93LmF0ICsgZGlmZikpO1xuXHRcdFx0aWYgKG1pZC5vZmZzZXQgPT09IGxvdy5vZmZzZXQpIHtcblx0XHRcdFx0bG93ID0gbWlkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGlnaCA9IG1pZDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbG93O1xuXHR9XG5cblx0ZnVuY3Rpb24gdXNlck9mZnNldHMoKSB7XG5cdFx0dmFyIHN0YXJ0WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIDIsXG5cdFx0XHRsYXN0ID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciwgMCwgMSkpLFxuXHRcdFx0bGFzdE9mZnNldCA9IGxhc3Qub2Zmc2V0LFxuXHRcdFx0b2Zmc2V0cyA9IFtsYXN0XSxcblx0XHRcdGNoYW5nZSwgbmV4dCwgbmV4dE9mZnNldCwgaTtcblxuXHRcdGZvciAoaSA9IDE7IGkgPCA0ODsgaSsrKSB7XG5cdFx0XHRuZXh0T2Zmc2V0ID0gbmV3IERhdGUoc3RhcnRZZWFyLCBpLCAxKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXHRcdFx0aWYgKG5leHRPZmZzZXQgIT09IGxhc3RPZmZzZXQpIHtcblx0XHRcdFx0Ly8gQ3JlYXRlIE9mZnNldEF0IGhlcmUgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYWJiciBwYXJzaW5nIGJlZm9yZSBjaGVja2luZyBvZmZzZXRzXG5cdFx0XHRcdG5leHQgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyLCBpLCAxKSk7XG5cdFx0XHRcdGNoYW5nZSA9IGZpbmRDaGFuZ2UobGFzdCwgbmV4dCk7XG5cdFx0XHRcdG9mZnNldHMucHVzaChjaGFuZ2UpO1xuXHRcdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKGNoYW5nZS5hdCArIDZlNCkpKTtcblx0XHRcdFx0bGFzdCA9IG5leHQ7XG5cdFx0XHRcdGxhc3RPZmZzZXQgPSBuZXh0T2Zmc2V0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0XHRcdG9mZnNldHMucHVzaChuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyICsgaSwgMCwgMSkpKTtcblx0XHRcdG9mZnNldHMucHVzaChuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyICsgaSwgNiwgMSkpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb2Zmc2V0cztcblx0fVxuXG5cdGZ1bmN0aW9uIHNvcnRab25lU2NvcmVzIChhLCBiKSB7XG5cdFx0aWYgKGEub2Zmc2V0U2NvcmUgIT09IGIub2Zmc2V0U2NvcmUpIHtcblx0XHRcdHJldHVybiBhLm9mZnNldFNjb3JlIC0gYi5vZmZzZXRTY29yZTtcblx0XHR9XG5cdFx0aWYgKGEuYWJiclNjb3JlICE9PSBiLmFiYnJTY29yZSkge1xuXHRcdFx0cmV0dXJuIGEuYWJiclNjb3JlIC0gYi5hYmJyU2NvcmU7XG5cdFx0fVxuXHRcdGlmIChhLnpvbmUucG9wdWxhdGlvbiAhPT0gYi56b25lLnBvcHVsYXRpb24pIHtcblx0XHRcdHJldHVybiBiLnpvbmUucG9wdWxhdGlvbiAtIGEuem9uZS5wb3B1bGF0aW9uO1xuXHRcdH1cblx0XHRyZXR1cm4gYi56b25lLm5hbWUubG9jYWxlQ29tcGFyZShhLnpvbmUubmFtZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRUb0d1ZXNzZXMgKG5hbWUsIG9mZnNldHMpIHtcblx0XHR2YXIgaSwgb2Zmc2V0O1xuXHRcdGFycmF5VG9JbnQob2Zmc2V0cyk7XG5cdFx0Zm9yIChpID0gMDsgaSA8IG9mZnNldHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9mZnNldCA9IG9mZnNldHNbaV07XG5cdFx0XHRndWVzc2VzW29mZnNldF0gPSBndWVzc2VzW29mZnNldF0gfHwge307XG5cdFx0XHRndWVzc2VzW29mZnNldF1bbmFtZV0gPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGd1ZXNzZXNGb3JVc2VyT2Zmc2V0cyAob2Zmc2V0cykge1xuXHRcdHZhciBvZmZzZXRzTGVuZ3RoID0gb2Zmc2V0cy5sZW5ndGgsXG5cdFx0XHRmaWx0ZXJlZEd1ZXNzZXMgPSB7fSxcblx0XHRcdG91dCA9IFtdLFxuXHRcdFx0Y2hlY2tlZE9mZnNldHMgPSB7fSxcblx0XHRcdGksIGosIG9mZnNldCwgZ3Vlc3Nlc09mZnNldDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBvZmZzZXRzTGVuZ3RoOyBpKyspIHtcblx0XHRcdG9mZnNldCA9IG9mZnNldHNbaV0ub2Zmc2V0O1xuXHRcdFx0aWYgKGNoZWNrZWRPZmZzZXRzLmhhc093blByb3BlcnR5KG9mZnNldCkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRndWVzc2VzT2Zmc2V0ID0gZ3Vlc3Nlc1tvZmZzZXRdIHx8IHt9O1xuXHRcdFx0Zm9yIChqIGluIGd1ZXNzZXNPZmZzZXQpIHtcblx0XHRcdFx0aWYgKGd1ZXNzZXNPZmZzZXQuaGFzT3duUHJvcGVydHkoaikpIHtcblx0XHRcdFx0XHRmaWx0ZXJlZEd1ZXNzZXNbal0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjaGVja2VkT2Zmc2V0c1tvZmZzZXRdID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRmb3IgKGkgaW4gZmlsdGVyZWRHdWVzc2VzKSB7XG5cdFx0XHRpZiAoZmlsdGVyZWRHdWVzc2VzLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHRcdG91dC5wdXNoKG5hbWVzW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVidWlsZEd1ZXNzICgpIHtcblxuXHRcdC8vIHVzZSBJbnRsIEFQSSB3aGVuIGF2YWlsYWJsZSBhbmQgcmV0dXJuaW5nIHZhbGlkIHRpbWUgem9uZVxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgaW50bE5hbWUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmU7XG5cdFx0XHRpZiAoaW50bE5hbWUgJiYgaW50bE5hbWUubGVuZ3RoID4gMykge1xuXHRcdFx0XHR2YXIgbmFtZSA9IG5hbWVzW25vcm1hbGl6ZU5hbWUoaW50bE5hbWUpXTtcblx0XHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsb2dFcnJvcihcIk1vbWVudCBUaW1lem9uZSBmb3VuZCBcIiArIGludGxOYW1lICsgXCIgZnJvbSB0aGUgSW50bCBhcGksIGJ1dCBkaWQgbm90IGhhdmUgdGhhdCBkYXRhIGxvYWRlZC5cIik7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gSW50bCB1bmF2YWlsYWJsZSwgZmFsbCBiYWNrIHRvIG1hbnVhbCBndWVzc2luZy5cblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0cyA9IHVzZXJPZmZzZXRzKCksXG5cdFx0XHRvZmZzZXRzTGVuZ3RoID0gb2Zmc2V0cy5sZW5ndGgsXG5cdFx0XHRndWVzc2VzID0gZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzKG9mZnNldHMpLFxuXHRcdFx0em9uZVNjb3JlcyA9IFtdLFxuXHRcdFx0em9uZVNjb3JlLCBpLCBqO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGd1ZXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHpvbmVTY29yZSA9IG5ldyBab25lU2NvcmUoZ2V0Wm9uZShndWVzc2VzW2ldKSwgb2Zmc2V0c0xlbmd0aCk7XG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgb2Zmc2V0c0xlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHpvbmVTY29yZS5zY29yZU9mZnNldEF0KG9mZnNldHNbal0pO1xuXHRcdFx0fVxuXHRcdFx0em9uZVNjb3Jlcy5wdXNoKHpvbmVTY29yZSk7XG5cdFx0fVxuXG5cdFx0em9uZVNjb3Jlcy5zb3J0KHNvcnRab25lU2NvcmVzKTtcblxuXHRcdHJldHVybiB6b25lU2NvcmVzLmxlbmd0aCA+IDAgPyB6b25lU2NvcmVzWzBdLnpvbmUubmFtZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGZ1bmN0aW9uIGd1ZXNzIChpZ25vcmVDYWNoZSkge1xuXHRcdGlmICghY2FjaGVkR3Vlc3MgfHwgaWdub3JlQ2FjaGUpIHtcblx0XHRcdGNhY2hlZEd1ZXNzID0gcmVidWlsZEd1ZXNzKCk7XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZWRHdWVzcztcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRHbG9iYWwgTWV0aG9kc1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gbm9ybWFsaXplTmFtZSAobmFtZSkge1xuXHRcdHJldHVybiAobmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXC8vZywgJ18nKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFpvbmUgKHBhY2tlZCkge1xuXHRcdHZhciBpLCBuYW1lLCBzcGxpdCwgbm9ybWFsaXplZDtcblxuXHRcdGlmICh0eXBlb2YgcGFja2VkID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRwYWNrZWQgPSBbcGFja2VkXTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgcGFja2VkLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzcGxpdCA9IHBhY2tlZFtpXS5zcGxpdCgnfCcpO1xuXHRcdFx0bmFtZSA9IHNwbGl0WzBdO1xuXHRcdFx0bm9ybWFsaXplZCA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG5cdFx0XHR6b25lc1tub3JtYWxpemVkXSA9IHBhY2tlZFtpXTtcblx0XHRcdG5hbWVzW25vcm1hbGl6ZWRdID0gbmFtZTtcblx0XHRcdGFkZFRvR3Vlc3Nlcyhub3JtYWxpemVkLCBzcGxpdFsyXS5zcGxpdCgnICcpKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRab25lIChuYW1lLCBjYWxsZXIpIHtcblxuXHRcdG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuXG5cdFx0dmFyIHpvbmUgPSB6b25lc1tuYW1lXTtcblx0XHR2YXIgbGluaztcblxuXHRcdGlmICh6b25lIGluc3RhbmNlb2YgWm9uZSkge1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB6b25lID09PSAnc3RyaW5nJykge1xuXHRcdFx0em9uZSA9IG5ldyBab25lKHpvbmUpO1xuXHRcdFx0em9uZXNbbmFtZV0gPSB6b25lO1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0Ly8gUGFzcyBnZXRab25lIHRvIHByZXZlbnQgcmVjdXJzaW9uIG1vcmUgdGhhbiAxIGxldmVsIGRlZXBcblx0XHRpZiAobGlua3NbbmFtZV0gJiYgY2FsbGVyICE9PSBnZXRab25lICYmIChsaW5rID0gZ2V0Wm9uZShsaW5rc1tuYW1lXSwgZ2V0Wm9uZSkpKSB7XG5cdFx0XHR6b25lID0gem9uZXNbbmFtZV0gPSBuZXcgWm9uZSgpO1xuXHRcdFx0em9uZS5fc2V0KGxpbmspO1xuXHRcdFx0em9uZS5uYW1lID0gbmFtZXNbbmFtZV07XG5cdFx0XHRyZXR1cm4gem9uZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5hbWVzICgpIHtcblx0XHR2YXIgaSwgb3V0ID0gW107XG5cblx0XHRmb3IgKGkgaW4gbmFtZXMpIHtcblx0XHRcdGlmIChuYW1lcy5oYXNPd25Qcm9wZXJ0eShpKSAmJiAoem9uZXNbaV0gfHwgem9uZXNbbGlua3NbaV1dKSAmJiBuYW1lc1tpXSkge1xuXHRcdFx0XHRvdXQucHVzaChuYW1lc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dC5zb3J0KCk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDb3VudHJ5TmFtZXMgKCkge1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhjb3VudHJpZXMpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkTGluayAoYWxpYXNlcykge1xuXHRcdHZhciBpLCBhbGlhcywgbm9ybWFsMCwgbm9ybWFsMTtcblxuXHRcdGlmICh0eXBlb2YgYWxpYXNlcyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0YWxpYXNlcyA9IFthbGlhc2VzXTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0YWxpYXMgPSBhbGlhc2VzW2ldLnNwbGl0KCd8Jyk7XG5cblx0XHRcdG5vcm1hbDAgPSBub3JtYWxpemVOYW1lKGFsaWFzWzBdKTtcblx0XHRcdG5vcm1hbDEgPSBub3JtYWxpemVOYW1lKGFsaWFzWzFdKTtcblxuXHRcdFx0bGlua3Nbbm9ybWFsMF0gPSBub3JtYWwxO1xuXHRcdFx0bmFtZXNbbm9ybWFsMF0gPSBhbGlhc1swXTtcblxuXHRcdFx0bGlua3Nbbm9ybWFsMV0gPSBub3JtYWwwO1xuXHRcdFx0bmFtZXNbbm9ybWFsMV0gPSBhbGlhc1sxXTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRDb3VudHJpZXMgKGRhdGEpIHtcblx0XHR2YXIgaSwgY291bnRyeV9jb2RlLCBjb3VudHJ5X3pvbmVzLCBzcGxpdDtcblx0XHRpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoKSByZXR1cm47XG5cdFx0Zm9yIChpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNwbGl0ID0gZGF0YVtpXS5zcGxpdCgnfCcpO1xuXHRcdFx0Y291bnRyeV9jb2RlID0gc3BsaXRbMF0udG9VcHBlckNhc2UoKTtcblx0XHRcdGNvdW50cnlfem9uZXMgPSBzcGxpdFsxXS5zcGxpdCgnICcpO1xuXHRcdFx0Y291bnRyaWVzW2NvdW50cnlfY29kZV0gPSBuZXcgQ291bnRyeShcblx0XHRcdFx0Y291bnRyeV9jb2RlLFxuXHRcdFx0XHRjb3VudHJ5X3pvbmVzXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldENvdW50cnkgKG5hbWUpIHtcblx0XHRuYW1lID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuXHRcdHJldHVybiBjb3VudHJpZXNbbmFtZV0gfHwgbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHpvbmVzRm9yQ291bnRyeShjb3VudHJ5LCB3aXRoX29mZnNldCkge1xuXHRcdGNvdW50cnkgPSBnZXRDb3VudHJ5KGNvdW50cnkpO1xuXG5cdFx0aWYgKCFjb3VudHJ5KSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciB6b25lcyA9IGNvdW50cnkuem9uZXMuc29ydCgpO1xuXG5cdFx0aWYgKHdpdGhfb2Zmc2V0KSB7XG5cdFx0XHRyZXR1cm4gem9uZXMubWFwKGZ1bmN0aW9uICh6b25lX25hbWUpIHtcblx0XHRcdFx0dmFyIHpvbmUgPSBnZXRab25lKHpvbmVfbmFtZSk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmFtZTogem9uZV9uYW1lLFxuXHRcdFx0XHRcdG9mZnNldDogem9uZS51dGNPZmZzZXQobmV3IERhdGUoKSlcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB6b25lcztcblx0fVxuXG5cdGZ1bmN0aW9uIGxvYWREYXRhIChkYXRhKSB7XG5cdFx0YWRkWm9uZShkYXRhLnpvbmVzKTtcblx0XHRhZGRMaW5rKGRhdGEubGlua3MpO1xuXHRcdGFkZENvdW50cmllcyhkYXRhLmNvdW50cmllcyk7XG5cdFx0dHouZGF0YVZlcnNpb24gPSBkYXRhLnZlcnNpb247XG5cdH1cblxuXHRmdW5jdGlvbiB6b25lRXhpc3RzIChuYW1lKSB7XG5cdFx0aWYgKCF6b25lRXhpc3RzLmRpZFNob3dFcnJvcikge1xuXHRcdFx0em9uZUV4aXN0cy5kaWRTaG93RXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRsb2dFcnJvcihcIm1vbWVudC50ei56b25lRXhpc3RzKCdcIiArIG5hbWUgKyBcIicpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgIW1vbWVudC50ei56b25lKCdcIiArIG5hbWUgKyBcIicpXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gISFnZXRab25lKG5hbWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gbmVlZHNPZmZzZXQgKG0pIHtcblx0XHR2YXIgaXNVbml4VGltZXN0YW1wID0gKG0uX2YgPT09ICdYJyB8fCBtLl9mID09PSAneCcpO1xuXHRcdHJldHVybiAhIShtLl9hICYmIChtLl90em0gPT09IHVuZGVmaW5lZCkgJiYgIWlzVW5peFRpbWVzdGFtcCk7XG5cdH1cblxuXHRmdW5jdGlvbiBsb2dFcnJvciAobWVzc2FnZSkge1xuXHRcdGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdG1vbWVudC50eiBuYW1lc3BhY2Vcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIHR6IChpbnB1dCkge1xuXHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwLCAtMSksXG5cdFx0XHRuYW1lID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSxcblx0XHRcdG91dCAgPSBtb21lbnQudXRjLmFwcGx5KG51bGwsIGFyZ3MpLFxuXHRcdFx0em9uZTtcblxuXHRcdGlmICghbW9tZW50LmlzTW9tZW50KGlucHV0KSAmJiBuZWVkc09mZnNldChvdXQpICYmICh6b25lID0gZ2V0Wm9uZShuYW1lKSkpIHtcblx0XHRcdG91dC5hZGQoem9uZS5wYXJzZShvdXQpLCAnbWludXRlcycpO1xuXHRcdH1cblxuXHRcdG91dC50eihuYW1lKTtcblxuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHR0ei52ZXJzaW9uICAgICAgPSBWRVJTSU9OO1xuXHR0ei5kYXRhVmVyc2lvbiAgPSAnJztcblx0dHouX3pvbmVzICAgICAgID0gem9uZXM7XG5cdHR6Ll9saW5rcyAgICAgICA9IGxpbmtzO1xuXHR0ei5fbmFtZXMgICAgICAgPSBuYW1lcztcblx0dHouX2NvdW50cmllc1x0PSBjb3VudHJpZXM7XG5cdHR6LmFkZCAgICAgICAgICA9IGFkZFpvbmU7XG5cdHR6LmxpbmsgICAgICAgICA9IGFkZExpbms7XG5cdHR6LmxvYWQgICAgICAgICA9IGxvYWREYXRhO1xuXHR0ei56b25lICAgICAgICAgPSBnZXRab25lO1xuXHR0ei56b25lRXhpc3RzICAgPSB6b25lRXhpc3RzOyAvLyBkZXByZWNhdGVkIGluIDAuMS4wXG5cdHR6Lmd1ZXNzICAgICAgICA9IGd1ZXNzO1xuXHR0ei5uYW1lcyAgICAgICAgPSBnZXROYW1lcztcblx0dHouWm9uZSAgICAgICAgID0gWm9uZTtcblx0dHoudW5wYWNrICAgICAgID0gdW5wYWNrO1xuXHR0ei51bnBhY2tCYXNlNjAgPSB1bnBhY2tCYXNlNjA7XG5cdHR6Lm5lZWRzT2Zmc2V0ICA9IG5lZWRzT2Zmc2V0O1xuXHR0ei5tb3ZlSW52YWxpZEZvcndhcmQgICA9IHRydWU7XG5cdHR6Lm1vdmVBbWJpZ3VvdXNGb3J3YXJkID0gZmFsc2U7XG5cdHR6LmNvdW50cmllcyAgICA9IGdldENvdW50cnlOYW1lcztcblx0dHouem9uZXNGb3JDb3VudHJ5ID0gem9uZXNGb3JDb3VudHJ5O1xuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRJbnRlcmZhY2Ugd2l0aCBNb21lbnQuanNcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdHZhciBmbiA9IG1vbWVudC5mbjtcblxuXHRtb21lbnQudHogPSB0ejtcblxuXHRtb21lbnQuZGVmYXVsdFpvbmUgPSBudWxsO1xuXG5cdG1vbWVudC51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAobW9tLCBrZWVwVGltZSkge1xuXHRcdHZhciB6b25lID0gbW9tZW50LmRlZmF1bHRab25lLFxuXHRcdFx0b2Zmc2V0O1xuXG5cdFx0aWYgKG1vbS5feiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoem9uZSAmJiBuZWVkc09mZnNldChtb20pICYmICFtb20uX2lzVVRDICYmIG1vbS5pc1ZhbGlkKCkpIHtcblx0XHRcdFx0bW9tLl9kID0gbW9tZW50LnV0Yyhtb20uX2EpLl9kO1xuXHRcdFx0XHRtb20udXRjKCkuYWRkKHpvbmUucGFyc2UobW9tKSwgJ21pbnV0ZXMnKTtcblx0XHRcdH1cblx0XHRcdG1vbS5feiA9IHpvbmU7XG5cdFx0fVxuXHRcdGlmIChtb20uX3opIHtcblx0XHRcdG9mZnNldCA9IG1vbS5fei51dGNPZmZzZXQobW9tKTtcblx0XHRcdGlmIChNYXRoLmFicyhvZmZzZXQpIDwgMTYpIHtcblx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0IC8gNjA7XG5cdFx0XHR9XG5cdFx0XHRpZiAobW9tLnV0Y09mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhciB6ID0gbW9tLl96O1xuXHRcdFx0XHRtb20udXRjT2Zmc2V0KC1vZmZzZXQsIGtlZXBUaW1lKTtcblx0XHRcdFx0bW9tLl96ID0gejtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1vbS56b25lKG9mZnNldCwga2VlcFRpbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRmbi50eiA9IGZ1bmN0aW9uIChuYW1lLCBrZWVwVGltZSkge1xuXHRcdGlmIChuYW1lKSB7XG5cdFx0XHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGltZSB6b25lIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgZ290ICcgKyBuYW1lICsgJyBbJyArIHR5cGVvZiBuYW1lICsgJ10nKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3ogPSBnZXRab25lKG5hbWUpO1xuXHRcdFx0aWYgKHRoaXMuX3opIHtcblx0XHRcdFx0bW9tZW50LnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsb2dFcnJvcihcIk1vbWVudCBUaW1lem9uZSBoYXMgbm8gZGF0YSBmb3IgXCIgKyBuYW1lICsgXCIuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL3RpbWV6b25lL2RvY3MvIy9kYXRhLWxvYWRpbmcvLlwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5feikgeyByZXR1cm4gdGhpcy5fei5uYW1lOyB9XG5cdH07XG5cblx0ZnVuY3Rpb24gYWJicldyYXAgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAodGhpcy5feikgeyByZXR1cm4gdGhpcy5fei5hYmJyKHRoaXMpOyB9XG5cdFx0XHRyZXR1cm4gb2xkLmNhbGwodGhpcyk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlc2V0Wm9uZVdyYXAgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aGlzLl96ID0gbnVsbDtcblx0XHRcdHJldHVybiBvbGQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVzZXRab25lV3JhcDIgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHRoaXMuX3ogPSBudWxsO1xuXHRcdFx0cmV0dXJuIG9sZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH1cblxuXHRmbi56b25lTmFtZSAgPSBhYmJyV3JhcChmbi56b25lTmFtZSk7XG5cdGZuLnpvbmVBYmJyICA9IGFiYnJXcmFwKGZuLnpvbmVBYmJyKTtcblx0Zm4udXRjICAgICAgID0gcmVzZXRab25lV3JhcChmbi51dGMpO1xuXHRmbi5sb2NhbCAgICAgPSByZXNldFpvbmVXcmFwKGZuLmxvY2FsKTtcblx0Zm4udXRjT2Zmc2V0ID0gcmVzZXRab25lV3JhcDIoZm4udXRjT2Zmc2V0KTtcblxuXHRtb21lbnQudHouc2V0RGVmYXVsdCA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRpZiAobWFqb3IgPCAyIHx8IChtYWpvciA9PT0gMiAmJiBtaW5vciA8IDkpKSB7XG5cdFx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHNldERlZmF1bHQoKSByZXF1aXJlcyBNb21lbnQuanMgPj0gMi45LjAuIFlvdSBhcmUgdXNpbmcgTW9tZW50LmpzICcgKyBtb21lbnQudmVyc2lvbiArICcuJyk7XG5cdFx0fVxuXHRcdG1vbWVudC5kZWZhdWx0Wm9uZSA9IG5hbWUgPyBnZXRab25lKG5hbWUpIDogbnVsbDtcblx0XHRyZXR1cm4gbW9tZW50O1xuXHR9O1xuXG5cdC8vIENsb25pbmcgYSBtb21lbnQgc2hvdWxkIGluY2x1ZGUgdGhlIF96IHByb3BlcnR5LlxuXHR2YXIgbW9tZW50UHJvcGVydGllcyA9IG1vbWVudC5tb21lbnRQcm9wZXJ0aWVzO1xuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1vbWVudFByb3BlcnRpZXMpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG5cdFx0Ly8gbW9tZW50IDIuOC4xK1xuXHRcdG1vbWVudFByb3BlcnRpZXMucHVzaCgnX3onKTtcblx0XHRtb21lbnRQcm9wZXJ0aWVzLnB1c2goJ19hJyk7XG5cdH0gZWxzZSBpZiAobW9tZW50UHJvcGVydGllcykge1xuXHRcdC8vIG1vbWVudCAyLjcuMFxuXHRcdG1vbWVudFByb3BlcnRpZXMuX3ogPSBudWxsO1xuXHR9XG5cblx0Ly8gSU5KRUNUIERBVEFcblxuXHRyZXR1cm4gbW9tZW50O1xufSkpO1xuIiwidmFyIG1vbWVudCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vbW9tZW50LXRpbWV6b25lXCIpO1xubW9tZW50LnR6LmxvYWQocmVxdWlyZSgnLi9kYXRhL3BhY2tlZC9sYXRlc3QuanNvbicpKTtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXNzZScsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBPcnQgb3IgR2VzY2jDpGZ0JyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOiAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHVnJyxcbiAgICBhcnJpdmFsOiAnQW5rdW5mdCcsXG4gICAgYmFjazogJ1p1csO8Y2snLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnTGVpaHJhZC1TdGF0aW9uJyxcbiAgICBidXM6ICdCdXMnLFxuICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdMw7ZzY2hlbicsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1N1Y2hoaXN0b3JpZSBsw7ZzY2hlbicsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQWt0dWVsbGUgUG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ0zDtnNjaGVuJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnV29sbGVuIFNpZSBkaWUgU3VjaC1IaXN0b3JpZSBsw7ZzY2hlbj8nLFxuICAgIGRlcGFydHVyZTogJ0FiZmFocnQnLFxuICAgIGRlc3RpbmF0aW9uOiAnWmllbCcsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1N0YXJ0IGVpbmdlYmVuLicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnWmllbCBlaW5nZWJlbi4nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm9yaXRlbicsXG4gICAgZmVycnk6ICdGw6RocmUnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnWnVrw7xuZnRpZ2UgVmVyYmluZHVuZycsXG4gICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgb3dubG9jYXRpb25zOiAnRWlnZW5lIEZhdm9yaXRlbicsXG4gICAgbG9hZGluZzogJ0xhZGVuLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcmFpbDogJ1p1ZycsXG4gICAgc2VhcmNoOiAnU3VjaGUnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTdWNoZSBhbmhhbmQgdm9uIEFkcmVzc2Ugb2RlciBPcnRzYW5nYWJlJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTdWNoZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTdWNoZSBaaWVsb3J0LCBMaW5pZSBvciBIYWx0ZXN0ZWxsZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdaaWVsb3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnRXJnZWJuaXNzZSBpbiDigJxaaWVsb3J04oCdLVJlaXRlciBhbnplaWdlbicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0tlaW4gT3J0IGdlZnVuZGVuLicsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU3VjaGUgU3RhcnRvcnQsIExpbmllIG9kZXIgSGFsdGVzdGVsbGUnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N0YXJ0b3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1N0YW5kb3J0IGVybWl0dGVsbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICdFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQWt0dWVsbGUgQXVzd2FobDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyYcOfZScsXG4gICAgc3Vid2F5OiAnVS1CYWhuJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ0hhbHRlc3RlbGxlJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTdWNoZSBIYWx0ZXN0ZWxsZW4gdW5kIExpbmllbiBpbiBkZXIgTsOkaGUnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTdWNoZSBCdXNsaW5pZW4gb3IgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTdWNoZSBMZWlocmFkLVN0YXRpb25lbicsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTdWNoZSBadWd2ZXJiaW5kdW5nZW4gb2RlciBCYWhuaMO2ZmUnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTdWNoZSBVLUJhaG4tTGluaWVuIG9kZXIgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N1Y2hlIFN0YWR0YmFobi1IYWx0ZXN0ZWxsZW4tU3VjaGUnLFxuICAgICd0b2RheS1hdCc6ICdIZXV0ZSB1bScsXG4gICAgJ3RvbW9ycm93LWF0JzogJ01vcmdlbiB1bScsXG4gICAgdHJhbTogJ1N0cmHDn2VuYmFobicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQmVudXR6ZSBha3R1ZWxsZW4gU3RhbmRvcnQnLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV8OkaGxlIFBvc2l0aW9uIGFuaGFuZCBLYXJ0ZScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnQXVzIGVpZ2VuZW4gRmF2b3JpdGVuIGF1c3fDpGhsZW4nLFxuICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICB3aGVyZTogJ1dvaGluPycsXG4gICAgcGxhY2U6ICdPcnQnLFxuICB9LFxuICBlbjoge1xuICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZGRyZXNzLCBwbGFjZSBvciBidXNpbmVzcycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZsaWdodCcsXG4gICAgYXJyaXZhbDogJ0Fycml2YWwnLFxuICAgIGJhY2s6ICdCYWNrJyxcbiAgICBiaWtlcGFyazogJ1BhcmsgJiBSaWRlIGZvciBiaWtlcycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdCaWtlIHN0YXRpb24nLFxuICAgIGJ1czogJ2J1cycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICBjYXJwYXJrOiAnUGFyayAmIFJpZGUnLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnQ2xlYXInLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdDbGVhciBzZWFyY2ggaGlzdG9yeScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gY2xlYXIgdGhlIHNlYXJjaCBoaXN0b3J5PycsXG4gICAgZGVwYXJ0dXJlOiAnRGVwYXJ0dXJlJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnRW50ZXIgeW91ciBvcmlnaW4uJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdFbnRlciB5b3VyIGRlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvdXJpdGUnLFxuICAgIGZlcnJ5OiAnRmVycnknLFxuICAgICdmdXR1cmUtcm91dGUnOiAnRnV0dXJlIHJvdXRlJyxcbiAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICBvd25sb2NhdGlvbnM6ICdPd24gbG9jYXRpb25zJyxcbiAgICBsb2FkaW5nOiAnTG9hZGluZy4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtJyxcbiAgICBwbGF0Zm9ybTogJ1BsYXRmb3JtJyxcbiAgICByYWlsOiAnVHJhaW4nLFxuICAgIHJlcXVpcmVkOiAncmVxdWlyZWQgZmllbGQnLFxuICAgIHNlYXJjaDogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1NlYXJjaCBieSBhZGRyZXNzIG9yIHBsYWNlIG5hbWUnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTZWFyY2ggZGVzdGluYXRpb24sIHJvdXRlIG9yIHN0b3AnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnRW50ZXIgZGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdWaWV3IHJlc3VsdHMgaW4gdGhlIGFkamFjZW50IOKAnERlc3RpbmF0aW9u4oCdIHRhYicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ05vIGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTZWFyY2ggb3JpZ2luLCByb3V0ZSBvciBzdG9wJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdFbnRlciBvcmlnaW4nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnRGV0ZWN0IGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdDdXJyZW50IHNlbGVjdGlvbjoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyZWV0JyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdTdG9wJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTZWFyY2ggc3RvcHMgYW5kIHJvdXRlcycsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU2VhcmNoIGZsaWdodHMgb3IgYWlycG9ydHMnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTZWFyY2ggYnVzIHJvdXRlcyBvciBzdG9wcycsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU2VhcmNoIGNpdHkgYmlrZSBzdGF0aW9ucycsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTZWFyY2ggdHJhaW4gcm91dGVzIG9yIHN0YXRpb25zJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU2VhcmNoIG1ldHJvIHJvdXRlcyBvciBzdGF0aW9ucyAnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU2VhcmNoIHRyYW0gcm91dGVzIG9yIHN0b3BzJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1cyBhbmQgc3RvcCBzZWFyY2gnLFxuICAgICd0b2RheS1hdCc6ICd0b2RheSBhdCcsXG4gICAgJ3RvbW9ycm93LWF0JzogJ3RvbW9ycm93IGF0JyxcbiAgICB0cmFtOiAnVHJhbScsXG4gICAgdHJhY2s6ICdUcmFjaycsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnU2VsZWN0IHBvc2l0aW9uIGZyb20gbWFwJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdTZWxlY3QgZnJvbSBvd24gbG9jYXRpb25zJyxcbiAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgd2hlcmU6ICdXaGVyZSB0bz8nLFxuICAgIHBsYWNlOiAnTG9jYXRpb24nLFxuICB9LFxuICBmaToge1xuICAgIGFkZHJlc3M6ICdPc29pdGUnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ09zb2l0ZSwgcGFpa2thIHRhaSB5cml0eXMnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnQXNldGEgdsOkbGlwaXN0ZWVsbGUge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0bycsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgIGFpcnBsYW5lOiAnTGVudG9rb25lJyxcbiAgICBhcnJpdmFsOiAnUGVyaWxsw6QnLFxuICAgIGJhY2s6ICdUYWthaXNpbicsXG4gICAgdmVoaWNsZXJlbnRhbHN0YXRpb246ICdQecO2csOkYXNlbWEnLFxuICAgIGJpa2VwYXJrOiAnTGlpdHludMOkcHnDtnLDpHBhcmtraScsXG4gICAgYnVzOiAnYnVzc2knLFxuICAgIGNhbmNlbDogJ1BlcnV1dGEnLFxuICAgIGNhcnBhcms6ICdMaWl0eW50w6RweXPDpGtvaW50aScsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUeWhqZW5uw6QnLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUeWhqZW5uw6QgaGFrdWhpc3RvcmlhJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdUw6Rtw6RuaGV0a2luZW4gc2lqYWludGknLFxuICAgIGRlbGV0ZTogJ1BvaXN0YScsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0hhbHVhdGtvIHR5aGplbnTDpMOkIGhha3VoaXN0b3JpYW4/JyxcbiAgICBkZXBhcnR1cmU6ICdMw6RodMO2YWlrYScsXG4gICAgZGVzdGluYXRpb246ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgZmF2b3VyaXRlOiAnU3Vvc2lra2knLFxuICAgIGZlcnJ5OiAnTGF1dHRhJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ1R1bGV2YSByZWl0dGknLFxuICAgICdnaXZlLW9yaWdpbic6ICdMw6RodMO2cGFpa2thJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgb3JpZ2luOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgIG93bmxvY2F0aW9uczogJ09tYXQgcGFpa2F0JyxcbiAgICBsb2FkaW5nOiAnTGFkYXRhYW4uLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICBwbGF0Zm9ybTogJ0xhaXR1cmknLFxuICAgIHJhaWw6ICdKdW5hJyxcbiAgICByZXF1aXJlZDogJ3Bha29sbGluZW4ga2VudHTDpCcsXG4gICAgc2VhcmNoOiAnRXRzaScsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ0hhZSBvc29pdHRlZWxsYSB0YWkgcGFpa2FuIG5pbWVsbMOkJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdIYWUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnSGFlIG3DpMOkcsOkbnDDpMOkdMOkLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU3nDtnTDpCBtw6TDpHLDpG5ww6TDpCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ0thdHNvIHR1bG9rc2V0IHZpZXJlaXNlbHTDpCBNw6TDpHLDpG5ww6TDpC12w6RsaWxlaGRlbHTDpCcsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0VpIHR1bG9rc2lhJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdIYWUgbMOkaHTDtnBhaWtrYWEsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3nDtnTDpCBsw6RodMO2cGFpa2thJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAnTmF2aWdvaSBsaXN0YXNzYSBudW9saW7DpHBww6RpbWlsbMOkIGphIHZhbGl0c2UgZW50ZXJpbGzDpC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAnU3nDtnTDpCBzaWphaW50aSBqYSBuYXZpZ29pIGxpc3Rhc3NhIHB5eWhrw6Rpc2Vtw6RsbMOkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdWYWxpdHR1YXNpIGzDpGh0w7ZwYWlrYW4gc2lpcnJ5dMOkw6RuIHN1b3JhYW4gbcOkw6Ryw6RucMOkw6Qta2VudHTDpMOkbi4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1cycsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1c3RhJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdUw6Rtw6RuaGV0a2luZW4gdmFsaW50YToge3tzZWxlY3Rpb259fScsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdQYWlrYW5uYScsXG4gICAgc3RyZWV0OiAnS2F0dScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdBc2VtYScsXG4gICAgc3RvcDogJ1B5c8Oka2tpJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdMaW5qYSwgcHlzw6Rra2kgdGFpIGFzZW1hJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdIYWUgbGVudG9qYSB0YWkgbGVudG9hc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdIYWUgYnVzc2lsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ0hhZSBrYXVwdW5raXB5w7Zyw6Rhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnSGFlIGzDpGhpanVuYWEgdGFpIGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ0hhZSBtZXRyb2xpbmphYSB0YWkgYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ0hhZSByYWl0aW9saW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnTGluamEtIGphIHB5c8Oka2tpaGFrdScsXG4gICAgJ3RvZGF5LWF0JzogJ3TDpG7DpMOkbiBrbG8nLFxuICAgICd0b21vcnJvdy1hdCc6ICdodW9tZW5uYSBrbG8nLFxuICAgIHRyYW06ICdSYWl0aW92YXVudScsXG4gICAgdHJhY2s6ICdSYWlkZScsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1ZhbGl0c2Ugc2lqYWludGkga2FydGFsdGEnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1ZhbGl0c2Ugb21pc3RhIHBhaWtvaXN0YScsXG4gICAgdmVudWU6ICdQYWlra2EnLFxuICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgd2hlcmU6ICdNaW5uZSBtZW5uw6TDpG4/JyxcbiAgICBwbGFjZTogJ1BhaWtrYScsXG4gIH0sXG4gIHBsOiB7XG4gICAgYWRkcmVzczogJ0FkcmVzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlcywgbWllanNjZSBsdWIgZmlybWEnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdEb2RhaiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnV3liaWVyeiBjemFzIHBvc3RvanUgZGxhIHB1bmt0dSB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPdHfDs3J6IHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdMb3QnLFxuICAgIGFycml2YWw6ICdQcnp5amF6ZCcsXG4gICAgYmFjazogJ1dyw7PEhycsXG4gICAgYmlrZXBhcms6ICdQYXJrdWogaSBKZWTFuiBkbGEgcm93ZXLDs3cnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhY2phIHJvd2Vyb3dhJyxcbiAgICBidXM6ICdhdXRvYnVzJyxcbiAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgIGNhcnBhcms6ICdQYXJrdWogaSBKZWTFuicsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdXeWN6ecWbxIcnLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdXeWN6ecWbxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnT2JlY25lIHBvxYJvxbxlbmllJyxcbiAgICBkZWxldGU6ICdVc3XFhCcsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzpcbiAgICAgICdDenkgbmEgcGV3bm8gY2hjZXN6IHd5Y3p5xZtjacSHIGhpc3RvcmnEmSB3eXN6dWtpd2FuaWE/JyxcbiAgICBkZXBhcnR1cmU6ICdPZGphemQnLFxuICAgIGRlc3RpbmF0aW9uOiAnQ2VsJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnV3Byb3dhZMW6IHN3w7NqIHB1bmt0IHBvY3rEhXRrb3d5LicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnV3Byb3dhZMW6IHN3w7NqIGNlbCcsXG4gICAgZmF2b3VyaXRlOiAnVWx1YmlvbmUnLFxuICAgIGZlcnJ5OiAnUHJvbScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdQcnp5c3rFgmEgdHJhc2EnLFxuICAgIG9yaWdpbjogJ1BvY3rEhXRlaycsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1BvY3rEhXRlaycsXG4gICAgb3dubG9jYXRpb25zOiAnV8WCYXNuZSBtaWVqc2NhJyxcbiAgICBsb2FkaW5nOiAnxYFhZG93YW5pZeKApicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICBwbGF0Zm9ybTogJ1Blcm9uJyxcbiAgICByYWlsOiAnUG9jacSFZycsXG4gICAgcmVxdWlyZWQ6ICd3eW1hZ2FuZSBwb2xlJyxcbiAgICBzZWFyY2g6ICdTenVrYWonLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTenVrYWogcG8gYWRyZXNpZSBsdWIgbmF6d2llIG1pZWpzY2EnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N6dWthaicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTenVrYWogY2VsdSwgdHJhc3kgbHViIHByenlzdGFua3UnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnV3Byb3dhZMW6IHB1bmt0IGRvY2Vsb3d5JyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnV3nFm3dpZXRsIHd5bmlraSB3IHPEhXNpZWRuaWVqIGthcmNpZSDigJ5DZWzigJ0nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdCcmFrIGxva2FsaXphY2ppJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdXeXN6dWthaiBwb2N6xIV0ZWssIGtvbmllYyBsdWIgcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdXcHJvd2FkxbogcHVua3QgcG9jesSFdGtvd3knLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnV3lrcnlqIGxva2FsaXphY2rEmScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdNaWVqc2NlLCBsb2thbGl6YWNqYSBpIHByenlzdGFuZWsuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXdpZ3VqIHBvIGxpxZtjaWUgdcW8eXdhasSFYyBzdHJ6YcWCZWsgaSB3eWJpZXJhaiBrbGF3aXN6ZW0gRW50ZXIuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ1dwcm93YWTFuiBsb2thbGl6YWNqxJkgaSBuYXdpZ3VqIHBvIGxpxZtjaWUgZ2VzdGFtaSBwcnplc3V3YW5pYS4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnUG8gd3licmFuaXUgbG9rYWxpemFjamkgcG9jesSFdGtvd2VqLCBhdXRvbWF0eWN6bmllIHByemVqZHppZXN6IGRvIHBvbGEgbWllanNjYSBkb2NlbG93ZWdvLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnRG9zdMSZcG5hIGplc3Qge3tjb3VudH19IHByb3BvenljamEnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX2Zldyc6ICdEb3N0xJlwbmUgc8SFIHt7Y291bnR9fSBwcm9wb3p5Y2plJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9vdGhlcic6ICdEb3N0xJlwbmUgamVzdCB7e2NvdW50fX0gcHJvcG96eWNqaScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnT2JlY255IHd5YsOzcjoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnVWxpY2EnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhY2phJyxcbiAgICBzdG9wOiAnUHJ6eXN0YW5laycsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU3p1a2FqIHByenlzdGFua8OzdyBpIHRyYXMnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1N6dWthaiBsb3TDs3cgaSBsb3RuaXNrJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3p1a2FqIHRyYXMgYXV0b2J1c293eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTenVrYWogc3RhY2ppIHJvd2Vyw7N3IG1pZWpza2ljaCcsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTenVrYWogdHJhcyBrb2xlam93eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3p1a2FqIHRyYXMgbWV0cmEgaSBwcnp5c3RhbmvDs3cgJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N6dWthaiB0cmFzIHRyYW13YWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdXeXN6dWtpd2FuaWUgYXV0b2J1c8OzdyBpIHByenlzdGFua8OzdycsXG4gICAgJ3RvZGF5LWF0JzogJ2R6acWbIG8nLFxuICAgICd0b21vcnJvdy1hdCc6ICdqdXRybyBvJyxcbiAgICB0cmFtOiAnVHJhbXdhaicsXG4gICAgdHJhY2s6ICdUb3InLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1XFvHlqIG9iZWNuZWogbG9rYWxpemFjamknLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV3liaWVyeiBtaWVqc2NlIG5hIG1hcGllJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdXeWJpZXJ6IHogd8WCYXNueWNoIG1pZWpzYycsXG4gICAgdmVudWU6ICdNaWVqc2NlJyxcbiAgICAndmlhLXBvaW50JzogJ1ByemV6IHB1bmt0JyxcbiAgICB3aGVyZTogJ0Rva8SFZD8nLFxuICAgIHBsYWNlOiAnTWllanNjZScsXG4gIH0sXG4gIHN2OiB7XG4gICAgYWRkcmVzczogJ0FkcmVzcycsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBwbGF0cyBlbGxlciBmw7ZyZXRhZycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0zDpGdnIHRpbGwgdmlhcHVua3QnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICfDlnBwbmEgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHlnJyxcbiAgICBhcnJpdmFsOiAnQW5sw6RuZGVyJyxcbiAgICBiYWNrOiAnVGlsbGJha2EnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhZHNjeWtlbHN0YXRpb24nLFxuICAgIGJpa2VwYXJrOiAnQW5zbHV0bmluZ3NwYXJrZXJpbmcgZsO2ciBjeWtsYXInLFxuICAgIGJ1czogJ0J1c3NpJyxcbiAgICBjYW5jZWw6ICdBdmJyeXQnLFxuICAgIGNhcnBhcms6ICdJbmZhcnRzcGFya2VyaW5nJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1TDtm0nLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUw7ZtIHPDtmtoaXN0b3Jpa2VuJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdOdXZhcmFuZGUgcG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdWaWxsIGR1IHTDtm1tYSBzw7ZraGlzdG9yaWtlbj8nLFxuICAgIGRlcGFydHVyZTogJ0F2Z8OlbmdzdGlkJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvcml0JyxcbiAgICBmZXJyeTogJ0bDpHJqYScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGcmFtdGlkYSBydXR0JyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdTa3JpdiBpbiBkaW4gZGVzdGluYXRpb24nLFxuICAgICdnaXZlLW9yaWdpbic6ICdTa3JpdiBpbiBkaW4gYXZmw6RyZHNwbGF0cycsXG4gICAgb3JpZ2luOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgIG93bmxvY2F0aW9uczogJ0VnbmEgcGxhdHNlcicsXG4gICAgbG9hZGluZzogJ0xhZGRhci4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHBsYXRmb3JtOiAnUGxhdHRmb3JtJyxcbiAgICByYWlsOiAnVMOlZycsXG4gICAgcmVxdWlyZWQ6ICdvYmxpZ2F0b3Jpc2t0IGbDpGx0JyxcbiAgICBzZWFyY2g6ICdTw7ZrJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU8O2ayBtZWQgYWRyZXNzZW4gZWxsZXIgcGxhdHNlbnMgbmFtbicsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU8O2aycsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTw7ZrIGRlc3RpbmF0aW9uLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1Nrcml2IGRlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnU2UgcmVzdWx0YXRlbiB1bmRlciBmbGlrZW4gRGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdJbmdhIHPDtmtyZXN1bHRhdCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU8O2ayBhdmbDpHJkc3BsYXRzLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTa3JpdiBhdmbDpHJkc3BsYXRzJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1PDtmsgcG9zaXRpb24nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ2VyYSBsaXN0YW4gbWVkIHBpbHRhbmdlbnRlcm5hIG9jaCB2w6RsaiBtZWQgRW50ZXItdGFuZ2V0ZW4uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0FuZ2UgcGxhdHNlbiBvY2ggbmF2aWdlcmEgaSBsaXN0YW4gZ2Vub20gYXR0IHN2ZXBhLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdFZnRlciBhdHQgZHUgdmFsdCBhdmfDpW5nc3BsYXRzZW4gdGFzIGR1IGRpcmVrdCB0aWxsIERlc3RpbmF0aW9uLWbDpGx0ZXQuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdIaXR0YWRlIHt7Y291bnR9fSBmw7Zyc2xhZycsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnTnV2YXJhbmRlIHZhbDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnR2F0YScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSMOlbGxwbGF0cycsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU8O2ayBow6VsbHBsYXRzZXIgZWxsZXIgbGluamVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTw7ZrIGZseWcgZWxsZXIgZmx5Z3BsYXRzZXInLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTw7ZrIGJ1c3NsaW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTw7ZrIHN0YWRzY3lrZWxzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU8O2ayBuw6RydMOlZ2VyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1PDtmsgbWV0cm9saW5qZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1PDtmsgc3DDpXJ2YWdubGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXNzIG9jaCBzdG9wcCBzw7ZrbmluZ2VuJyxcbiAgICAndG9kYXktYXQnOiAnaSBkYWcga2wnLFxuICAgICd0b21vcnJvdy1hdCc6ICdpIG1vcmdvbicsXG4gICAgdHJhbTogJ1Nww6VydmFnbicsXG4gICAgdHJhY2s6ICdTcMOlcicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVsOkbGogcG9zaXRpb24gZnLDpW4ga2FydGFuJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWw6RsaiBmcsOlbiBlZ25hIHBsYXRzZXInLFxuICAgIHZlbnVlOiAnTcO2dGVzcGxhdHMnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHB1bmt0JyxcbiAgICB3aGVyZTogJ1ZhcnQgdmlsbCBkdSDDpWthPycsXG4gICAgcGxhY2U6ICdQbGF0cycsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRmlubmlzaCBbZmldXG4vLyEgYXV0aG9yIDogVGFybW8gQWlkYW50YXVzdGEgOiBodHRwczovL2dpdGh1Yi5jb20vYmxlYWRvZlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG51bWJlcnNQYXN0ID1cbiAgICAgICAgICAgICdub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGrDpCB2aWlzaSBrdXVzaSBzZWl0c2Vtw6RuIGthaGRla3NhbiB5aGRla3PDpG4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICcgJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbnVtYmVyc0Z1dHVyZSA9IFtcbiAgICAgICAgICAgICdub2xsYScsXG4gICAgICAgICAgICAneWhkZW4nLFxuICAgICAgICAgICAgJ2thaGRlbicsXG4gICAgICAgICAgICAna29sbWVuJyxcbiAgICAgICAgICAgICduZWxqw6RuJyxcbiAgICAgICAgICAgICd2aWlkZW4nLFxuICAgICAgICAgICAgJ2t1dWRlbicsXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs3XSxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzhdLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbOV0sXG4gICAgICAgIF07XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbXV1dGFtYW4gc2VrdW5uaW4nIDogJ211dXRhbWEgc2VrdW50aSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAnc2VrdW5uaW4nIDogJ3Nla3VudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGknO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGknO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdww6RpdsOkbicgOiAncMOkaXbDpCc7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6TDpCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXVzaSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXV0dGEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvc2knO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvdHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkgKyAnICcgKyByZXN1bHQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZlcmJhbE51bWJlcihudW1iZXIsIGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgPCAxMFxuICAgICAgICAgICAgPyBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgID8gbnVtYmVyc0Z1dHVyZVtudW1iZXJdXG4gICAgICAgICAgICAgICAgOiBudW1iZXJzUGFzdFtudW1iZXJdXG4gICAgICAgICAgICA6IG51bWJlcjtcbiAgICB9XG5cbiAgICB2YXIgZmkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmaScsIHtcbiAgICAgICAgbW9udGhzOiAndGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc8Oka3V1X2hlaW7DpGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJhc2t1dV9qb3VsdWt1dScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAndGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc8OkX2hlaW7DpF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWknLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0RvIE1NTU1bdGFdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIGw6ICdELk0uWVlZWScsXG4gICAgICAgICAgICBsbDogJ0RvIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0RvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t0w6Ruw6TDpG5dIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaHVvbWVubmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2VpbGVuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1t2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBww6TDpHN0w6QnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpdHRlbicsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3dlZGlzaCBbc3ZdXG4vLyEgYXV0aG9yIDogSmVucyBBbG0gOiBodHRwczovL2dpdGh1Yi5jb20vdWxtdXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3N2Jywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJpX2ZlYnJ1YXJpX21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ3PDtm5kYWdfbcOlbmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDtnJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzw7ZuX23DpW5fdGlzX29uc190b3JfZnJlX2zDtnInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc8O2X23DpV90aV9vbl90b19mcl9sw7YnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkIEQgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJZGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0ltb3Jnb25dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSWfDpXJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW1DDpV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tJXSBkZGRkW3NdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2bDtnIgJXMgc2VkYW4nLFxuICAgICAgICAgICAgczogJ27DpWdyYSBzZWt1bmRlcicsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgICAgIG06ICdlbiBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXInLFxuICAgICAgICAgICAgaDogJ2VuIHRpbW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltbWFyJyxcbiAgICAgICAgICAgIGQ6ICdlbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICBNOiAnZW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeTogJ2V0dCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oXFw6ZXxcXDphKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnOmUnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiBbZGVdXG4vLyEgYXV0aG9yIDogbGx1Y2hzIDogaHR0cHM6Ly9naXRodWIuY29tL2xsdWNoc1xuLy8hIGF1dGhvcjogTWVuZWxpb24gRWxlbnPDumxlOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE1pa29sYWogRGFkZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL21pazAxYWpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZGUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlO1xuXG59KSkpO1xuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBEaWFsb2dNb2RhbCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1kaWFsb2ctbW9kYWwnO1xuaW1wb3J0IEF1dG9zdWdnZXN0IGZyb20gJ3JlYWN0LWF1dG9zdWdnZXN0JztcbmltcG9ydCBtb2JpbGVTdHlsZXMgZnJvbSAnLi9Nb2JpbGVTZWFyY2guc2Nzcyc7XG5pbXBvcnQgbW9iaWxlTm9TY3JvbGxTdHlsZXMgZnJvbSAnLi9Nb2JpbGVOb1Njcm9sbC5zY3NzJztcblxuY2xhc3MgQXV0b3N1Z2dlc3RQYXRjaCBleHRlbmRzIEF1dG9zdWdnZXN0IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5vblN1Z2dlc3Rpb25Ub3VjaE1vdmUgPSAoKSA9PiB7XG4gICAgICBzZWxmLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICAgIHNlbGYucHJlc3NlZFN1Z2dlc3Rpb24gPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuY29uc3QgTW9iaWxlU2VhcmNoID0gKHtcbiAgYXBwRWxlbWVudCxcbiAgaWQsXG4gIGNsb3NlSGFuZGxlLFxuICBjbGVhcklucHV0LFxuICB2YWx1ZSxcbiAgc3VnZ2VzdGlvbnMsXG4gIGlucHV0UHJvcHMsXG4gIGZldGNoRnVuY3Rpb24sXG4gIHJlbmRlclN1Z2dlc3Rpb24sXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSxcbiAgYXJpYUxhYmVsLFxuICBsYWJlbCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXMsXG4gIGRpYWxvZ0hlYWRlclRleHQsXG4gIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0LFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0LFxuICBjbGVhcklucHV0QnV0dG9uVGV4dCxcbiAgZm9jdXNJbnB1dCxcbiAgY29sb3IsXG4gIGhvdmVyQ29sb3IsXG4gIGFjY2Vzc2libGVQcmltYXJ5Q29sb3IsXG4gIHNlYXJjaE9wZW4sXG4gIGZvbnRXZWlnaHRzLFxuICBzaG93U2Nyb2xsLFxufSkgPT4ge1xuICBjb25zdCBzdHlsZXMgPSBzaG93U2Nyb2xsID8gbW9iaWxlU3R5bGVzIDogbW9iaWxlTm9TY3JvbGxTdHlsZXM7XG5cbiAgY29uc3QgaW5wdXRJZCA9IGAke2lkfS1pbnB1dGA7XG4gIGNvbnN0IGxhYmVsSWQgPSBgJHtpZH0tbGFiZWxgO1xuXG4gIGNvbnN0IFtpc0RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgUmVhY3RNb2RhbC5zZXRBcHBFbGVtZW50KGFwcEVsZW1lbnQpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25DbG9zZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjbG9zZUhhbmRsZSgpO1xuICB9KTtcblxuICBjb25zdCBvblNlbGVjdCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAocmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgc2V0RGlhbG9nT3Blbih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKCFyZWYuc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmFycm93Q2xpY2tlZCkge1xuICAgICAgLy8gU2VsZWN0IGl0ZW0gaWYgZmlsbCBpbnB1dCBidXR0b24gaXMgbm90IHByZXNzZWQgKGRpYWdvbmFsIGFycm93IGluIHN1Z2dlc3Rpb24gaXRlbXMpXG4gICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZChlLCByZWYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gICAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gICAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICAgIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcblxuICAgIGlmICgha2V5IHx8ICFzcGFjZS5jb25jYXQoZW50ZXIpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBnZXRWYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICAgIGlmIChzdWdnZXN0aW9uLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGdldFN1Z2dlc3Rpb25WYWx1ZShzdWdnZXN0aW9uKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119PlxuICAgICAgICAgIHtpdGVtLmxhYmVsSWR9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlclN1Z2dlc3Rpb24oaXRlbSk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyRGlhbG9nTW9kYWwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fVxuICAgICAgICBpc01vZGFsT3Blbj17aXNEaWFsb2dPcGVufVxuICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgIGhlYWRlclRleHQ9e2RpYWxvZ0hlYWRlclRleHR9XG4gICAgICAgIHByaW1hcnlCdXR0b25UZXh0PXtkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17ZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzKCk7XG4gICAgICAgICAgc2V0RGlhbG9nT3BlbihmYWxzZSk7XG4gICAgICAgIH19XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICBjb2xvcj17Y29sb3J9XG4gICAgICAgIGhvdmVyQ29sb3I9e2hvdmVyQ29sb3J9XG4gICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBjbGVhckJ1dHRvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICAgIG9uQ2xpY2s9e2NsZWFySW5wdXR9XG4gICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgY2xlYXJJbnB1dCgpfVxuICAgICAgICBhcmlhLWxhYmVsPXtjbGVhcklucHV0QnV0dG9uVGV4dH1cbiAgICAgID5cbiAgICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17Y29sb3J9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWNvbnRhaW5lciddfSBodG1sRm9yPXtpbnB1dElkfT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1pY29uJ119XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb25DbG9zZSgpfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgb25DbG9zZSgpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e2RpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHR9XG4gICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgID5cbiAgICAgICAgICA8SWNvbiBpbWc9XCJhcnJvd1wiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1sncmlnaHQtY29sdW1uJ119PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfSBpZD17bGFiZWxJZH0+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxBdXRvc3VnZ2VzdFBhdGNoXG4gICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9uc1xuICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXtmZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRWYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3JlbmRlckl0ZW19XG4gICAgICAgICAgICAvLyBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2sgbXVzdCBiZSBzZXQgdG8gdHJ1ZS5cbiAgICAgICAgICAgIC8vIElmIHNldCB0byBmYWxzZSwgaW5wdXQgd29uJ3QgYmUgZm9jdXNlZCB3aGVuIHVzZXIgY2xpY2tzIG9uXG4gICAgICAgICAgICAvLyBGaWxsIGlucHV0IGJ1dHRvbiBpbiBzdWdnZXN0aW9uIGxpc3QuIChkaWFnb25hbCBhcnJvdyBpbiBzdHJlZXQgbmFtZSBpdGVtcylcbiAgICAgICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGlja1xuICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRydWV9XG4gICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogY3goXG4gICAgICAgICAgICAgICAgYCR7c3R5bGVzLmlucHV0fSAke3N0eWxlc1tpZF0gfHwgJyd9ICR7XG4gICAgICAgICAgICAgICAgICBpbnB1dFByb3BzLnZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJydcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgYXJpYS1sYWJlbD17YXJpYUxhYmVsfSBpZD17aWR9IHsuLi5wfSAvPlxuICAgICAgICAgICAgICAgIHt2YWx1ZSAmJiBjbGVhckJ1dHRvbigpfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e29uU2VsZWN0fVxuICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuICBpZiAoZm9jdXNJbnB1dCAmJiBpbnB1dFJlZi5jdXJyZW50Py5pbnB1dCkge1xuICAgIGlucHV0UmVmLmN1cnJlbnQuaW5wdXQuZm9jdXMoKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0TW9kYWxcbiAgICAgIGlzT3Blbj17c2VhcmNoT3Blbn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwnXX1cbiAgICAgIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLW92ZXJsYXknXX1cbiAgICAgIG9uQWZ0ZXJDbG9zZT17b25DbG9zZX1cbiAgICAgIHNob3VsZENsb3NlT25Fc2NcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtY29udGVudCddfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogYCR7Y29sb3J9YCxcbiAgICAgICAgICAnLS1hY2Nlc3NpYmxlLXByaW1hcnktY29sb3InOiBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yLFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogYCR7aG92ZXJDb2xvcn1gLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3JlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3JlbmRlckRpYWxvZ01vZGFsKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0TW9kYWw+XG4gICk7XG59O1xuXG5Nb2JpbGVTZWFyY2gucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsb3NlSGFuZGxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJJbnB1dEJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIHN1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub2JqZWN0KS5pc1JlcXVpcmVkLFxuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGZldGNoRnVuY3Rpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgcmVuZGVyU3VnZ2VzdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nSGVhZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvY3VzSW5wdXQ6IFByb3BUeXBlcy5ib29sLFxuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWFyY2hPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5Nb2JpbGVTZWFyY2guZGVmYXVsdFByb3BzID0ge1xuICB2YWx1ZTogdW5kZWZpbmVkLFxuICBhcmlhTGFiZWw6IHVuZGVmaW5lZCxcbiAgZGlhbG9nSGVhZGVyVGV4dDogdW5kZWZpbmVkLFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dDogdW5kZWZpbmVkLFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0OiB1bmRlZmluZWQsXG4gIGZvY3VzSW5wdXQ6IGZhbHNlLFxuICBjb2xvcjogdW5kZWZpbmVkLFxuICBob3ZlckNvbG9yOiB1bmRlZmluZWQsXG4gIHNob3dTY3JvbGw6IHVuZGVmaW5lZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1vYmlsZVNlYXJjaDtcbiIsIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4hZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJyZWFjdFwiKSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtcInJlYWN0XCJdLHQpO2Vsc2V7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/dChyZXF1aXJlKFwicmVhY3RcIikpOnQoZS5yZWFjdCk7Zm9yKHZhciBvIGluIG4pKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6ZSlbb109bltvXX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ezg4ODpmdW5jdGlvbihlLHQsbil7dmFyIG8scjtyPXZvaWQgMCE9PW4uZz9uLmc6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciB0PXtpZ25vcmU6XCJbZGF0YS1zY3JvbGwtaWdub3JlXVwiLGhlYWRlcjpudWxsLHRvcE9uRW1wdHlIYXNoOiEwLHNwZWVkOjUwMCxzcGVlZEFzRHVyYXRpb246ITEsZHVyYXRpb25NYXg6bnVsbCxkdXJhdGlvbk1pbjpudWxsLGNsaXA6ITAsb2Zmc2V0OjAsZWFzaW5nOlwiZWFzZUluT3V0Q3ViaWNcIixjdXN0b21FYXNpbmc6bnVsbCx1cGRhdGVVUkw6ITAscG9wc3RhdGU6ITAsZW1pdEV2ZW50czohMH0sbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFyZ3VtZW50cywoZnVuY3Rpb24odCl7Zm9yKHZhciBuIGluIHQpe2lmKCF0Lmhhc093blByb3BlcnR5KG4pKXJldHVybjtlW25dPXRbbl19fSkpLGV9LG89ZnVuY3Rpb24oZSl7XCIjXCI9PT1lLmNoYXJBdCgwKSYmKGU9ZS5zdWJzdHIoMSkpO2Zvcih2YXIgdCxuPVN0cmluZyhlKSxvPW4ubGVuZ3RoLHI9LTEsdT1cIlwiLGk9bi5jaGFyQ29kZUF0KDApOysrcjxvOyl7aWYoMD09PSh0PW4uY2hhckNvZGVBdChyKSkpdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyOiB0aGUgaW5wdXQgY29udGFpbnMgVSswMDAwLlwiKTt1Kz10Pj0xJiZ0PD0zMXx8MTI3PT10fHwwPT09ciYmdD49NDgmJnQ8PTU3fHwxPT09ciYmdD49NDgmJnQ8PTU3JiY0NT09PWk/XCJcXFxcXCIrdC50b1N0cmluZygxNikrXCIgXCI6dD49MTI4fHw0NT09PXR8fDk1PT09dHx8dD49NDgmJnQ8PTU3fHx0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjI/bi5jaGFyQXQocik6XCJcXFxcXCIrbi5jaGFyQXQocil9cmV0dXJuXCIjXCIrdX0scj1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG49dCxwYXJzZUludChlLmdldENvbXB1dGVkU3R5bGUobikuaGVpZ2h0LDEwKSt0Lm9mZnNldFRvcCk6MDt2YXIgbn0saT1mdW5jdGlvbih0LG4sbyl7MD09PXQmJmRvY3VtZW50LmJvZHkuZm9jdXMoKSxvfHwodC5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10JiYodC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksdC5mb2N1cygpLHQuc3R5bGUub3V0bGluZT1cIm5vbmVcIiksZS5zY3JvbGxUbygwLG4pKX0scz1mdW5jdGlvbih0LG4sbyxyKXtpZihuLmVtaXRFdmVudHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQ3VzdG9tRXZlbnQpe3ZhciB1PW5ldyBDdXN0b21FdmVudCh0LHtidWJibGVzOiEwLGRldGFpbDp7YW5jaG9yOm8sdG9nZ2xlOnJ9fSk7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh1KX19O3JldHVybiBmdW5jdGlvbihjLGEpe3ZhciBsLGYsZCx2LHA9e2NhbmNlbFNjcm9sbDpmdW5jdGlvbihlKXtjYW5jZWxBbmltYXRpb25GcmFtZSh2KSx2PW51bGwsZXx8cyhcInNjcm9sbENhbmNlbFwiLGwpfSxhbmltYXRlU2Nyb2xsOmZ1bmN0aW9uKG8sYyxhKXtwLmNhbmNlbFNjcm9sbCgpO3ZhciBmPW4obHx8dCxhfHx7fSksaD1cIltvYmplY3QgTnVtYmVyXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLG09aHx8IW8udGFnTmFtZT9udWxsOm87aWYoaHx8bSl7dmFyIHk9ZS5wYWdlWU9mZnNldDtmLmhlYWRlciYmIWQmJihkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZi5oZWFkZXIpKTt2YXIgYixnLHcsRT11KGQpLE89aD9vOmZ1bmN0aW9uKHQsbixvLHUpe3ZhciBpPTA7aWYodC5vZmZzZXRQYXJlbnQpZG97aSs9dC5vZmZzZXRUb3AsdD10Lm9mZnNldFBhcmVudH13aGlsZSh0KTtyZXR1cm4gaT1NYXRoLm1heChpLW4tbywwKSx1JiYoaT1NYXRoLm1pbihpLHIoKS1lLmlubmVySGVpZ2h0KSksaX0obSxFLHBhcnNlSW50KFwiZnVuY3Rpb25cIj09dHlwZW9mIGYub2Zmc2V0P2Yub2Zmc2V0KG8sYyk6Zi5vZmZzZXQsMTApLGYuY2xpcCksUz1PLXksXz1yKCksST0wLE09ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwZWVkQXNEdXJhdGlvbj90LnNwZWVkOk1hdGguYWJzKGUvMWUzKnQuc3BlZWQpO3JldHVybiB0LmR1cmF0aW9uTWF4JiZuPnQuZHVyYXRpb25NYXg/dC5kdXJhdGlvbk1heDp0LmR1cmF0aW9uTWluJiZuPHQuZHVyYXRpb25NaW4/dC5kdXJhdGlvbk1pbjpwYXJzZUludChuLDEwKX0oUyxmKSxMPWZ1bmN0aW9uKHQpe2J8fChiPXQpLEkrPXQtYix3PXkrUypmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVyblwiZWFzZUluUXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqdCksXCJlYXNlT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqKDItdCkpLFwiZWFzZUluT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/Mip0KnQ6KDQtMip0KSp0LTEpLFwiZWFzZUluQ3ViaWNcIj09PWUuZWFzaW5nJiYobj10KnQqdCksXCJlYXNlT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj0tLXQqdCp0KzEpLFwiZWFzZUluT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj10PC41PzQqdCp0KnQ6KHQtMSkqKDIqdC0yKSooMip0LTIpKzEpLFwiZWFzZUluUXVhcnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KSxcImVhc2VPdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPTEtIC0tdCp0KnQqdCksXCJlYXNlSW5PdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/OCp0KnQqdCp0OjEtOCotLXQqdCp0KnQpLFwiZWFzZUluUXVpbnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KnQpLFwiZWFzZU91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49MSstLXQqdCp0KnQqdCksXCJlYXNlSW5PdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/MTYqdCp0KnQqdCp0OjErMTYqLS10KnQqdCp0KnQpLGUuY3VzdG9tRWFzaW5nJiYobj1lLmN1c3RvbUVhc2luZyh0KSksbnx8dH0oZixnPShnPTA9PT1NPzA6SS9NKT4xPzE6ZyksZS5zY3JvbGxUbygwLE1hdGguZmxvb3IodykpLGZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5wYWdlWU9mZnNldDtpZih0PT1ufHxyPT1ufHwoeTxuJiZlLmlubmVySGVpZ2h0K3IpPj1fKXJldHVybiBwLmNhbmNlbFNjcm9sbCghMCksaShvLG4saCkscyhcInNjcm9sbFN0b3BcIixmLG8sYyksYj1udWxsLHY9bnVsbCwhMH0odyxPKXx8KHY9ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksYj10KX07MD09PWUucGFnZVlPZmZzZXQmJmUuc2Nyb2xsVG8oMCwwKSxmdW5jdGlvbihlLHQsbil7dHx8aGlzdG9yeS5wdXNoU3RhdGUmJm4udXBkYXRlVVJMJiZoaXN0b3J5LnB1c2hTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KG4pLGFuY2hvcjplLmlkfSxkb2N1bWVudC50aXRsZSxlPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50P1wiI3RvcFwiOlwiI1wiK2UuaWQpfShvLGgsZiksXCJtYXRjaE1lZGlhXCJpbiBlJiZlLm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIikubWF0Y2hlcz9pKG8sTWF0aC5mbG9vcihPKSwhMSk6KHMoXCJzY3JvbGxTdGFydFwiLGYsbyxjKSxwLmNhbmNlbFNjcm9sbCghMCksZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCkpfX19LGg9ZnVuY3Rpb24odCl7aWYoIXQuZGVmYXVsdFByZXZlbnRlZCYmISgwIT09dC5idXR0b258fHQubWV0YUtleXx8dC5jdHJsS2V5fHx0LnNoaWZ0S2V5KSYmXCJjbG9zZXN0XCJpbiB0LnRhcmdldCYmKGY9dC50YXJnZXQuY2xvc2VzdChjKSkmJlwiYVwiPT09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJiF0LnRhcmdldC5jbG9zZXN0KGwuaWdub3JlKSYmZi5ob3N0bmFtZT09PWUubG9jYXRpb24uaG9zdG5hbWUmJmYucGF0aG5hbWU9PT1lLmxvY2F0aW9uLnBhdGhuYW1lJiYvIy8udGVzdChmLmhyZWYpKXt2YXIgbixyO3RyeXtuPW8oZGVjb2RlVVJJQ29tcG9uZW50KGYuaGFzaCkpfWNhdGNoKGUpe249byhmLmhhc2gpfWlmKFwiI1wiPT09bil7aWYoIWwudG9wT25FbXB0eUhhc2gpcmV0dXJuO3I9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fWVsc2Ugcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pOyhyPXJ8fFwiI3RvcFwiIT09bj9yOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJih0LnByZXZlbnREZWZhdWx0KCksZnVuY3Rpb24odCl7aWYoaGlzdG9yeS5yZXBsYWNlU3RhdGUmJnQudXBkYXRlVVJMJiYhaGlzdG9yeS5zdGF0ZSl7dmFyIG49ZS5sb2NhdGlvbi5oYXNoO249bnx8XCJcIixoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KHQpLGFuY2hvcjpufHxlLnBhZ2VZT2Zmc2V0fSxkb2N1bWVudC50aXRsZSxufHxlLmxvY2F0aW9uLmhyZWYpfX0obCkscC5hbmltYXRlU2Nyb2xsKHIsZikpfX0sbT1mdW5jdGlvbihlKXtpZihudWxsIT09aGlzdG9yeS5zdGF0ZSYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGwmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsPT09SlNPTi5zdHJpbmdpZnkobCkpe3ZhciB0PWhpc3Rvcnkuc3RhdGUuYW5jaG9yO1wic3RyaW5nXCI9PXR5cGVvZiB0JiZ0JiYhKHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvKGhpc3Rvcnkuc3RhdGUuYW5jaG9yKSkpfHxwLmFuaW1hdGVTY3JvbGwodCxudWxsLHt1cGRhdGVVUkw6ITF9KX19O3JldHVybiBwLmRlc3Ryb3k9ZnVuY3Rpb24oKXtsJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKSxwLmNhbmNlbFNjcm9sbCgpLGw9bnVsbCxmPW51bGwsZD1udWxsLHY9bnVsbCl9LGZ1bmN0aW9uKCl7aWYoIShcInF1ZXJ5U2VsZWN0b3JcImluIGRvY3VtZW50JiZcImFkZEV2ZW50TGlzdGVuZXJcImluIGUmJlwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBlJiZcImNsb3Nlc3RcImluIGUuRWxlbWVudC5wcm90b3R5cGUpKXRocm93XCJTbW9vdGggU2Nyb2xsOiBUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgSmF2YVNjcmlwdCBtZXRob2RzIGFuZCBicm93c2VyIEFQSXMuXCI7cC5kZXN0cm95KCksbD1uKHQsYXx8e30pLGQ9bC5oZWFkZXI/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsLmhlYWRlcik6bnVsbCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoLCExKSxsLnVwZGF0ZVVSTCYmbC5wb3BzdGF0ZSYmZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKX0oKSxwfX0ocil9LmFwcGx5KHQsW10pLHZvaWQgMD09PW98fChlLmV4cG9ydHM9byl9LDQzMjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8se2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9OmZ1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLGVbb109dFtuXX0pLHI9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8byh0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIobig0NyksdCkscihuKDkyNiksdCkscihuKDM0OSksdCkscihuKDEzNyksdCkscihuKDcyOSksdCkscihuKDM4MyksdCkscihuKDQ1MCksdCkscihuKDM1OCksdCkscihuKDc1MyksdCkscihuKDg2OSksdCkscihuKDM1MiksdCkscihuKDQ0NiksdCkscihuKDE2NCksdCkscihuKDMwNSksdCkscihuKDUwMiksdCl9LDM0OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VBcnJvd05hdmlnYXRpb249dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUFycm93TmF2aWdhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxpc3RJdGVtcyxuPWUub25BcnJvd1VwT3JEb3duLHI9KDAsby51c2VTdGF0ZSkoMCksdT1yWzBdLGk9clsxXSxzPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbihlKXtpKGUpfSksW3RdKSxjPWZ1bmN0aW9uKGUpe3ZhciBvPWUua2V5O2lmKG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKWlmKFwiQXJyb3dVcFwiPT09byluJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHModT4wP3UtMTp0Lmxlbmd0aC0xKTtlbHNle2lmKFwiQXJyb3dEb3duXCIhPT1vKXJldHVybjtuJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHU8dC5sZW5ndGgtMT9zKHUrMSk6cygwKX19O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyl9fSkpLCgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtzKDApfSksW3RdKSx7c2VsZWN0ZWRJbmRleDp1fX19LDQ0NjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEZWJvdW5jZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRGVib3VuY2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0zMDApO3ZhciBuPSgwLG8udXNlU3RhdGUpKGUpLHI9blswXSx1PW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dShlKX0pLHQpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKX19KSxbZSx0XSkscn19LDE2NDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VFbGVtZW50U2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXt2YXIgZSx0LG49KDAsby51c2VSZWYpKG51bGwpO3JldHVybltuLHt3aWR0aDpudWxsPT09KGU9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jbGllbnRXaWR0aCxoZWlnaHQ6bnVsbD09PSh0PW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2xpZW50SGVpZ2h0fV19LHQuZGVmYXVsdD10LnVzZUVsZW1lbnRTaXplfSwxMzc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udXNlUmVmKShudWxsKSxuPSgwLG8udXNlU3RhdGUpKCExKSxyPW5bMF0sdT1uWzFdLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTt1KHQuaXNJbnRlcnNlY3RpbmcpfTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7aWYod2luZG93JiZ3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpe3ZhciBuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihpLGUpLG89dC5jdXJyZW50O3JldHVybiB0LmN1cnJlbnQmJm4ub2JzZXJ2ZSh0LmN1cnJlbnQpLGZ1bmN0aW9uKCl7byYmbi51bm9ic2VydmUobyl9fXUoITEpfSksW3QsZV0pLHtjb250YWluZXJSZWY6dCxpc1Zpc2libGU6cn19LHQuZGVmYXVsdD10LnVzZUludGVyc2VjdGlvbk9ic2VydmVyfSw3Mjk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNCcmVha3BvaW50PXZvaWQgMDt2YXIgbz1uKDE1Nikscj1uKDQzMiksdT17eHM6MSxtb2JpbGVTbWFsbDozMjAsbW9iaWxlOjM3NSx0YWJsZXQ6NzY4LHRhYmxldExhcmdlOjkyMCxkZXNrdG9wU21hbGw6MTAyNCxkZXNrdG9wOjEyNjAsZGVza3RvcExhcmdlOjE0NDB9O3QudXNlSXNCcmVha3BvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP3VbZV06ZSxuPSgwLG8udXNlU3RhdGUpKG51bGwpLGk9blswXSxzPW5bMV0sYz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtzKHdpbmRvdy5pbm5lcldpZHRoKX0pLFtdKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7YygpfSksW10pLCgwLHIudXNlT25SZXNpemUpKGMpLGk+PXR9LHQuZGVmYXVsdD10LnVzZUlzQnJlYWtwb2ludH0sNDUwOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxvLnVzZVN0YXRlKSh0KSxyPW5bMF0sdT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlfHx1KHQpfSksW2UsdF0pLGUmJnJ9fSwzMDU6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNNb2JpbGU9dm9pZCAwO3ZhciBvPW4oNzI5KTt0LnVzZUlzTW9iaWxlPWZ1bmN0aW9uKCl7cmV0dXJuISgwLG8udXNlSXNCcmVha3BvaW50KShcInRhYmxldFwiKX0sdC5kZWZhdWx0PXQudXNlSXNNb2JpbGV9LDM4MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3QsdC5kZWZhdWx0PXQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdH0sNzUzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uTG9zZUZvY3VzV2l0aGluPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbkxvc2VGb2N1c1dpdGhpbj1mdW5jdGlvbihlKXt2YXIgdD1lLnJlZixuPWUuY2FsbGJhY2sscj1lLndhdGNoOygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlO2lmKHIpcmV0dXJuKG51bGw9PT0oZT10LmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1hdGNoZXMoXCI6Zm9jdXMtd2l0aGluXCIpKT92b2lkIDA6bigpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSksZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSl9fSksW24sdCxyXSl9LHQuZGVmYXVsdD10LnVzZU9uTG9zZUZvY3VzV2l0aGlufSw1MDI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25SZXNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uUmVzaXplPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Uod2luZG93LmlubmVyV2lkdGgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LHtwYXNzaXZlOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0KX19KSxbXSl9LHQuZGVmYXVsdD10LnVzZU9uUmVzaXplfSwzNTI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25XaW5kb3dGb2N1cz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25XaW5kb3dGb2N1cz1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlJiZcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmZSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCwhMSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCl9fSksW2VdKX19LDQ3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU91dHNpZGVSZWFjdGVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPdXRzaWRlUmVhY3Rlcj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7ZS5jdXJyZW50JiYhZS5jdXJyZW50LmNvbnRhaW5zKG4udGFyZ2V0KSYmdCgpfSgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pLGZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pfX0pKX19LDg2OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VSdW5BZnRlclVwZGF0ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlUnVuQWZ0ZXJVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2UuY3VycmVudCYmKGUuY3VycmVudCgpLGUuY3VycmVudD1udWxsKX0pKSxmdW5jdGlvbih0KXtlLmN1cnJlbnQ9dH19LHQuZGVmYXVsdD10LnVzZVJ1bkFmdGVyVXBkYXRlfSw5MjY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU2Nyb2xsTG9jaz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlU2Nyb2xsTG9jaz1mdW5jdGlvbigpe3JldHVybntsb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5zY3JvbGxZK1wicHhcIix0PWRvY3VtZW50LmJvZHk7dC5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsdC5zdHlsZS50b3A9XCItXCIrZX0pLFtdKSx1bmxvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYm9keSx0PWUuc3R5bGUudG9wLG49LTEqcGFyc2VJbnQodHx8XCIwXCIpO2Uuc3R5bGUucG9zaXRpb249XCJcIixlLnN0eWxlLnRvcD1cIlwiLG4mJndpbmRvdy5zY3JvbGxUbygwLC0xKnBhcnNlSW50KHR8fFwiMFwiKSl9KSxbXSl9fX0sMzU4OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNtb290aFNjcm9sbD12b2lkIDA7dmFyIHI9bigxNTYpLHU9byhuKDg4OCkpO3QudXNlU21vb3RoU2Nyb2xsPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLHIudXNlUmVmKShudWxsKSxuPWUucmVmLG89ZS5vZmZzZXQsaT12b2lkIDA9PT1vPzA6byxzPWUuc3BlZWQsYz12b2lkIDA9PT1zPzUwMDpzO3JldHVybigwLHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bmV3IHUuZGVmYXVsdChudWxsLHtzcGVlZDpjLHNwZWVkQXNEdXJhdGlvbjohMH0pfSksW10pLCgwLHIudXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe24mJnQuY3VycmVudCYmdC5jdXJyZW50LmFuaW1hdGVTY3JvbGwobi5jdXJyZW50LG51bGwse29mZnNldDpmdW5jdGlvbigpe3JldHVybiBpfSx1cGRhdGVVUkw6ITF9KX0pLFtpLG5dKX19LDE1NjpmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZX19LG49e307ZnVuY3Rpb24gbyhlKXt2YXIgcj1uW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgdT1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKHUuZXhwb3J0cyx1LHUuZXhwb3J0cyxvKSx1LmV4cG9ydHN9cmV0dXJuIG8uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG8oNDMyKX0oKX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaTE4bmV4dCBmcm9tICdpMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgeyBleGVjdXRlU2VhcmNoIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZSc7XG5pbXBvcnQgU3VnZ2VzdGlvbkl0ZW0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtc3VnZ2VzdGlvbi1pdGVtJztcbmltcG9ydCB7XG4gIGdldE5hbWVMYWJlbCxcbiAgZ2V0U3RvcENvZGUsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCB7IGdldFN0b3BOYW1lIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGdldExhYmVsIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgJ21vbWVudC9sb2NhbGUvZmknO1xuaW1wb3J0ICdtb21lbnQvbG9jYWxlL3N2JztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9kZSc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vaGVscGVycy90cmFuc2xhdGlvbnMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuaW1wb3J0IE1vYmlsZVNlYXJjaCBmcm9tICcuL2hlbHBlcnMvTW9iaWxlU2VhcmNoJztcbmltcG9ydCB3aXRoU2Nyb2xsTG9jayBmcm9tICcuL2hlbHBlcnMvd2l0aFNjcm9sbExvY2snO1xuXG5tb21lbnQubG9jYWxlKCdlbicpO1xuXG5pMThuZXh0LmluaXQoe1xuICBmYWxsYmFja0xuZzogJ2ZpJyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICBpbnRlcnBvbGF0aW9uOiB7XG4gICAgZXNjYXBlVmFsdWU6IGZhbHNlLCAvLyBub3QgbmVlZGVkIGZvciByZWFjdCBhcyBpdCBlc2NhcGVzIGJ5IGRlZmF1bHRcbiAgfSxcbn0pO1xuXG5jb25zdCBMb2FkaW5nID0gcHJvcHMgPT4gKFxuICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydzcGlubmVyLWxvYWRlciddfT5cbiAgICB7KHByb3BzICYmIHByb3BzLmNoaWxkcmVuKSB8fCAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfT57aTE4bmV4dC50KCdsb2FkaW5nJyl9PC9zcGFuPlxuICAgICl9XG4gIDwvZGl2PlxuKTtcblxuTG9hZGluZy5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbn07XG5cbkxvYWRpbmcuZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxufTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSBhZGRlbmR1bSA9PiB7XG4gIGlmICghYWRkZW5kdW0gfHwgIWFkZGVuZHVtLkdURlMucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHsgbW9kZXMsIHBsYXRmb3JtIH0gPSBhZGRlbmR1bS5HVEZTO1xuICBjb25zdCB0eXBlID1cbiAgICBtb2RlcyAmJiBtb2Rlc1swXSA9PT0gJ1JBSUwnID8gaTE4bmV4dC50KCd0cmFjaycpIDogaTE4bmV4dC50KCdwbGF0Zm9ybScpO1xuICByZXR1cm4gW3R5cGUsIHBsYXRmb3JtXTtcbn07XG5cbmZ1bmN0aW9uIGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0pIHtcbiAgaWYgKGl0ZW0udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1tYXAnKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3VzZS1vd24tcG9zaXRpb24nKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyldO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgbGV0IFtuYW1lLCBsYWJlbF0gPSBnZXROYW1lTGFiZWwoaXRlbS5wcm9wZXJ0aWVzLCB0cnVlKTtcbiAgICBsZXQgc3VnZ2VzdGlvblR5cGU7XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VyZW50YWwnKSB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCd2ZWhpY2xlcmVudGFsc3RhdGlvbicpO1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBpdGVtLnByb3BlcnRpZXMubGFiZWxJZDtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgc3RvcENvZGVdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdiaWtlcGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdiaWtlcGFyaycpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdjYXJwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2NhcnBhcmsnKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLm1vZGUpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KFxuICAgICAgICBpdGVtLnByb3BlcnRpZXMubW9kZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxheWVyID0gaXRlbS5wcm9wZXJ0aWVzLmxheWVyXG4gICAgICAgIC5yZXBsYWNlKCdyb3V0ZS0nLCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKTtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KGxheWVyKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMuaWQgJiZcbiAgICAgIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdG9wJyB8fCBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gZ2V0U3RvcENvZGUoaXRlbS5wcm9wZXJ0aWVzKTtcbiAgICAgIGNvbnN0IG1vZGUgPSBpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0/LkdURlMubW9kZXM7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgZ2V0U3RvcE5hbWUobmFtZSwgc3RvcENvZGUpLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgc3RvcENvZGUsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0YXRpb24nXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvZGUgfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgICAgIGNvbnN0IHN0b05hbWUgPSBhZGRyZXNzID8gZ2V0U3RvcE5hbWUoYWRkcmVzcy5zcGxpdCgnLCcpWzBdLCBjb2RlKSA6IG5hbWU7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBzdG9OYW1lLCBsYWJlbCwgY29kZSwgdW5kZWZpbmVkLCBwbGF0Zm9ybV07XG4gICAgfVxuICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIGxhYmVsXTtcbiAgfVxuICBjb25zdCB7IG9yaWdpbiwgZGVzdGluYXRpb24gfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgY29uc3QgdGFpbDEgPSBvcmlnaW4ubG9jYWxpdHkgPyBgLCAke29yaWdpbi5sb2NhbGl0eX0gZm9vYmFyYCA6ICcnO1xuICBjb25zdCB0YWlsMiA9IGRlc3RpbmF0aW9uLmxvY2FsaXR5ID8gYCwgJHtkZXN0aW5hdGlvbi5sb2NhbGl0eX1gIDogJyc7XG4gIGNvbnN0IG5hbWUxID0gb3JpZ2luLm5hbWU7XG4gIGNvbnN0IG5hbWUyID0gZGVzdGluYXRpb24ubmFtZTtcbiAgcmV0dXJuIFtcbiAgICBpMThuZXh0LnQoJ2Z1dHVyZS1yb3V0ZScpLFxuICAgIGAke2kxOG5leHQudCgnb3JpZ2luJyl9ICR7bmFtZTF9JHt0YWlsMX0gJHtpMThuZXh0LnQoXG4gICAgICAnZGVzdGluYXRpb24nLFxuICAgICl9ICR7bmFtZTJ9JHt0YWlsMn1gLFxuICAgIGl0ZW0udHJhbnNsYXRlZFRleHQsXG4gIF07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSkge1xuICBjb25zdCB0aW1lID0gbW9tZW50LnVuaXgoaXRlbS5wcm9wZXJ0aWVzLnRpbWUpO1xuICBsZXQgc3RyID0gaXRlbS5wcm9wZXJ0aWVzLmFycml2ZUJ5XG4gICAgPyBpMThuZXh0LnQoJ2Fycml2YWwnKVxuICAgIDogaTE4bmV4dC50KCdkZXBhcnR1cmUnKTtcbiAgaWYgKHRpbWUuaXNTYW1lKG1vbWVudCgpLCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7aTE4bmV4dC50KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5pc1NhbWUobW9tZW50KCkuYWRkKDEsICdkYXknKSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke2kxOG5leHQudCgndG9tb3Jyb3ctYXQnKX1gO1xuICB9IGVsc2Uge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0aW1lLmZvcm1hdCgnZGQgRC5NLicpfWA7XG4gIH1cbiAgc3RyID0gYCR7c3RyfSAke21vbWVudCh0aW1lKS5mb3JtYXQoJ0hIOm1tJyl9YDtcbiAgcmV0dXJuIHN0cjtcbn1cblxuY29uc3QgZ2V0U3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gIGlmIChcbiAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gZ2V0TGFiZWwoc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzKTtcbn07XG4vKipcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICogY29uc3QgbGFuZyA9ICdmaSc7IC8vIGVuLCBmaSBvciBzdlxuICogY29uc3Qgb25TZWxlY3QgPSAoaXRlbSwgaWQpID0+IHtcbiAqICAgIC8vIEZ1bnRpb25hbGl0eSB3aGVuIHVzZXIgc2VsZWN0cyBhIHN1Z2dlc2lvbnMuIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBvbkNsZWFyID0gaWQgPT4ge1xuICogICAgLy8gQ2FsbGVkICB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjbGVhciBzZWFyY2ggc3RyaW5nIGJ1dHRvbi4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IGdldEF1dG9TdWdnZXN0SWNvbnM6IHtcbiAqICAgLy8gQ2FsbGVkIGZvciBldmVyeSBjaXR5IGJpa2Ugc3RhdGlvbiByZW5kZXJlZCBhcyBhIHNlYXJjaCBzdWdnZXN0aW9uLiBTaG91bGQgcmV0dXJuIHRoZSBpY29uIGFuZFxuICogICAvLyBjb2xvciB1c2VkIGZvciB0aGF0IHN0YXRpb24uIFR3byBpY29ucyBhcmUgYXZhaWxhYmxlLCAnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcgYW5kaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0LXNlY29uZGFyeScuXG4gKiAgIGNpdHliaWtlczogc3RhdGlvbiA9PiB7XG4gKiAgICAgIHJldHVybiBbJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnLCAnI2YyYjYyZCddO1xuICogICB9XG4gKiB9XG4gKiBjb25zdCB0cmFuc3BvcnRNb2RlID0gdW5kZWZpbmVkO1xuICogY29uc3QgcGxhY2Vob2xkZXIgPSBcInN0b3AtbmVhci15b3VcIjtcbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBPcHRpb25zIGFyZSBMb2NhdGlvbnMsIFN0b3BzLCBTdGF0aW9ucywgUm91dGVzLCBWZWhpY2xlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpIGFuZCBEYXRhc291cmNlLiBMZWF2ZSBlbXB0eSB0byB1c2UgYWxsIHNvdXJjZXMuXG4gKiByZXR1cm4gKFxuICogIDxEVEF1dG9zdWdnZXN0XG4gKiAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fSAvLyBSZXF1aXJlZC4gUm9vdCBlbGVtZW50J3MgaWQuIE5lZWRlZCBmb3IgcmVhY3QtbW9kYWwgY29tcG9uZW50LlxuICogICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAqICAgIGljb249XCJvcmlnaW5cIiAvLyBPcHRpb25hbCBTdHJpbmcgZm9yIGljb24gdGhhdCBpcyBzaG93biBsZWZ0IG9mIHNlYXJjaGZpZWxkLiB1c2VkIHdpdGggSWNvbiBsaWJyYXJ5XG4gKiAgICBpZD1cIm9yaWdpblwiIC8vIHVzZWQgZm9yIHN0eWxlIHByb3BzIGFuZCBpbmZvIGZvciBjb21wb25lbnQuXG4gKiAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9IC8vIFN0cmluZyB0aGF0IGlzIHNob3ducyBpbml0YWxseSBpbiBzZWFyY2ggZmllbGRcbiAqICAgIHZhbHVlPVwiXCIgLy8gZS5nLiB1c2VyIHR5cGVkIHN0cmluZyB0aGF0IGlzIHNob3duIGluIHNlYXJjaCBmaWVsZFxuICogICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICogICAgb25DbGVhcj17b25DbGVhcn1cbiAqICAgIGF1dG9Gb2N1cz17ZmFsc2V9IC8vIGRlZmluZXMgdGhhdCBzaG91bGQgdGhpcyBmaWVsZCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQgd2hlbiBwYWdlIGlzIGxvYWRlZC5cbiAqICAgIGxhbmc9e2xhbmd9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX0gLy8gdHJhbnNwb3J0bW9kZSB3aXRoIHdoaWNoIHdlIGZpbHRlciB0aGUgcm91dGVzLCBlLmcuIHJvdXRlLUJVU1xuICogICAgZ2VvY29kaW5nU2l6ZT17MTB9IC8vIGRlZmluZXMgaG93IG1hbnkgc3RvcHMgYW5kIHN0YXRpb25zIHRvIGZldGNoIGZyb20gZ2VvY29kaW5nLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZmlsdGVyIHRoZSByZXN1bHRzIGFuZCBzdGlsbCBnZXQgYSByZWFzb25hYmxlIGFtb3VudCBvZiBzdWdnZXN0aW9ucy5cbiAqICAgIGZpbHRlclJlc3VsdHM9e3Jlc3VsdHMgPT4gcmV0dXJuIHJlc3VsdHN9IC8vIE9wdGlvbmFsIGZpbHRlcmluZyBmdW5jdGlvbiBmb3Igcm91dGVzIGFuZCBzdG9wc1xuICogICAgaGFuZGVsVmlhUG9pbnRzPXsoKSA9PiByZXR1cm4gbnVsbCB9IC8vIE9wdGlvbmFsIFZpYSBwb2ludCBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgZm9jdXNDaGFuZ2U9eygpID0+IHJldHVybiBudWxsfSAvLyBXaGVuIHN1Z2dlc3Rpb24gaXMgc2VsZWN0ZWQsIGhhbmRsZSBjaGFuZ2luZyBmb2N1cy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc3RvcmVSZWY9eygpID0+IHJldHVybiBudWxsfSAvLyBGdW5jdGlvbmFsaXR5IHRvIHN0b3JlIHJlZnMuIEN1cnJlbmx0eSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBtb2JpbGVMYWJlbD1cIkN1c3RvbSBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQgb24gbW9iaWxlLlxuICogICAgaW5wdXRDbGFzc05hbWU9XCJcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGNsYXNzbmFtZSBhcHBsaWVkIHRvIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQgZm9yIHByb3ZpZGluZyBDU1Mgc3R5bGVzLlxuICogICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyPSAvLyBPcHRpb25hbC4gQ3VzdG9uIHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQuXG4gKi9cbmNsYXNzIERUQXV0b3N1Z2dlc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIFVSTF9QRUxJQVM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnRleHQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGNsZWFyRnV0dXJlUm91dGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZpbHRlclJlc3VsdHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGdlb2NvZGluZ1NpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc3RvcmVSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0aW1lWm9uZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHJvdXRlc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHN0b3BzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdW5sb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHJlZlBvaW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBtb2RlSWNvbkNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuZnVuYyksXG4gICAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNFbWJlZGRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogJycsXG4gICAgaWNvbjogdW5kZWZpbmVkLFxuICAgIHZhbHVlOiAnJyxcbiAgICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gICAgZmlsdGVyUmVzdWx0czogdW5kZWZpbmVkLFxuICAgIG9uQ2xlYXI6IHVuZGVmaW5lZCxcbiAgICBsYW5nOiAnZmknLFxuICAgIHN0b3JlUmVmOiB1bmRlZmluZWQsXG4gICAgaGFuZGxlVmlhUG9pbnRzOiB1bmRlZmluZWQsXG4gICAgZm9jdXNDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiB1bmRlZmluZWQsXG4gICAgc291cmNlczogW10sXG4gICAgdGFyZ2V0czogdW5kZWZpbmVkLFxuICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgICBnZW9jb2RpbmdTaXplOiB1bmRlZmluZWQsXG4gICAgY29sb3I6ICcjMDA3YWM5JyxcbiAgICBob3ZlckNvbG9yOiAnIzAwNjJhMScsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogJyMwMDc0YmUnLFxuICAgIHRpbWVab25lOiAnRXVyb3BlL0hlbHNpbmtpJyxcbiAgICBwYXRoT3B0czoge1xuICAgICAgcm91dGVzUHJlZml4OiAnbGluamF0JyxcbiAgICAgIHN0b3BzUHJlZml4OiAncHlzYWtpdCcsXG4gICAgfSxcbiAgICBhcmlhTGFiZWw6IHVuZGVmaW5lZCxcbiAgICBtb2JpbGVMYWJlbDogdW5kZWZpbmVkLFxuICAgIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgICBtb2RlSWNvbkNvbG9yczoge1xuICAgICAgJ21vZGUtYnVzJzogJyMwMDdhYzknLFxuICAgICAgJ21vZGUtcmFpbCc6ICcjOGM0Nzk5JyxcbiAgICAgICdtb2RlLXRyYW0nOiAnIzAwODE1MScsXG4gICAgICAnbW9kZS1tZXRybyc6ICcjZWQ4YzAwJyxcbiAgICAgICdtb2RlLWZlcnJ5JzogJyMwMDdBOTcnLFxuICAgICAgJ21vZGUtY2l0eWJpa2UnOiAnI2YyYjYyZCcsXG4gICAgICAnbW9kZS1mdW5pY3VsYXInOiAnI2ZmMDBmZicsXG4gICAgfSxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIHNob3dTY3JvbGw6IGZhbHNlLFxuICAgIHJlZlBvaW50OiB7fSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBtb21lbnQudHouc2V0RGVmYXVsdChwcm9wcy50aW1lWm9uZSk7XG4gICAgbW9tZW50LmxvY2FsZShwcm9wcy5sYW5nKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgIHNvdXJjZXM6IHByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgdHlwaW5nVGltZXI6IG51bGwsXG4gICAgICB0eXBpbmc6IGZhbHNlLFxuICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25JbmRleDogMCxcbiAgICAgIGNsZWFuRXhlY3V0ZWQ6IGZhbHNlLFxuICAgICAgc2Nyb2xsWTogMCxcbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaChsYW5nID0+IHtcbiAgICAgIGkxOG5leHQuYWRkUmVzb3VyY2VCdW5kbGUobGFuZywgJ3RyYW5zbGF0aW9uJywgdHJhbnNsYXRpb25zW2xhbmddKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERULTQwNzQ6IFdoZW4gYSB1c2VyJ3MgbG9jYXRpb24gaXMgdXBkYXRlZCBEVEF1dG9zdWdnZXN0IHdvdWxkIHJlLXJlbmRlciBjYXVzaW5nIHN1Z2dlc3Rpb24gbGlzdCB0byByZXNldC5cbiAgLy8gVGhpcyB3aWxsIHByZXZlbnQgaXQuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICAgIHJldHVybiAhaXNFcXVhbChuZXh0U3RhdGUsIHRoaXMuc3RhdGUpIHx8ICFpc0VxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgLy8gd2FpdCB1bnRpbCBhZGRyZXNzIGlzIHNldCBvciBnZW9sb2NhdGlvbmluZyBmYWlsc1xuICAgIGlmIChuZXh0UHJvcHMudmFsdWUgIT09IHRoaXMuc3RhdGUudmFsdWUgJiYgIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlOiBuZXh0UHJvcHMudmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZSA9IChldmVudCwgeyBuZXdWYWx1ZSwgbWV0aG9kIH0pID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiB0aGlzLmZJbnB1dCB8fCBuZXdWYWx1ZSB8fCAnJyxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICB9O1xuICAgIC8vIFJlbW92ZSBmaWxsZWQgaW5wdXQgdmFsdWUgc28gaXQgd29udCBiZSByZXVzZWQgdW5uZWNlc3NhcnlcbiAgICB0aGlzLmZJbnB1dCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIG5ld1N0YXRlLmVkaXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlIHx8ICcnIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCAhPT0gJ2VudGVyJyB8fCB0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICAvLyB0ZXN0IGFib3ZlIGRyb3BzIHVubmVjZXNzYXJ5IHVwZGF0ZVxuICAgICAgLy8gd2hlbiB1c2VyIGhpdHMgZW50ZXIgYnV0IHNlYXJjaCBpcyB1bmZpbmlzaGVkXG4gICAgICBpZiAodGhpcy5zdGF0ZS50eXBpbmdUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGF0ZS50eXBpbmdUaW1lcik7XG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09PSAndHlwZScpIHtcbiAgICAgICAgLy8gYWZ0ZXIgdGltZW91dCBydW5zLCBhcmlhIGFsZXJ0IHdpbGwgYW5ub3VuY2UgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdHlwaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZ1RpbWVyID0gdGltZXI7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB9XG4gIH07XG5cbiAgb25CbHVyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgfSk7XG4gIH07XG5cbiAgb25TZWxlY3RlZCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgaWYgKHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZXM6IFsnRmF2b3VyaXRlJywgJ0JhY2snXSxcbiAgICAgICAgICAgIG93blBsYWNlczogdHJ1ZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaycgfHxcbiAgICAgICAgcmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICBzdWdnZXN0aW9uSW5kZXg6IHJlZi5zdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3Rpb25Eb25lID0gdHJ1ZTsgLy8gc2VsZWN0aW9uIGRvbmUsIGRvIG5vdCBsZXQgdXBjb21pbmcga2V5Ym9hcmQgZXZlbnRzIGNvbmZ1c2UgdGhlIGZsb3dcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZTogcmVmLnN1Z2dlc3Rpb25WYWx1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50cykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludHMocmVmLnN1Z2dlc3Rpb24sIHJlZi5zdWdnZXN0aW9uSW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHJlZi5zdWdnZXN0aW9uLCB0aGlzLnByb3BzLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlICYmXG4gICAgICAgICAgICAoIXRoaXMucHJvcHMuaXNNb2JpbGUgfHwgdGhpcy5wcm9wcy5pc0VtYmVkZGVkKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHByZXZTdGF0ZSA9PiAoe1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHByZXZTdGF0ZS52YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgICgpID0+IHRoaXMuY2hlY2tQZW5kaW5nU2VsZWN0aW9uKCksIC8vIHNlYXJjaCBtYXkgZmluaXNoIGR1cmluZyBzdGF0ZSBjaGFuZ2VcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICB9KTtcbiAgfTtcblxuICBjaGVja1BlbmRpbmdTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ2JhY2snKSAmJlxuICAgICAgdGhpcy5zdGF0ZS52YWxpZFxuICAgICkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICAvLyBhY2NlcHQgYWZ0ZXIgYWxsIG9uZ29pbmcgc2VhcmNoZXMgaGF2ZSBmaW5pc2hlZFxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uICYmIHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIC8vIGZpbmlzaCB0aGUgc2VsZWN0aW9uIGJ5IHBpY2tpbmcgZmlyc3QgPSBiZXN0IG1hdGNoIG9yIHdpdGggJ0Z1dHVyZVJvdXRlJyBieSBzdWdnZXN0aW9uSW5kZXhcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QoXG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbdGhpcy5zdGF0ZS5zdWdnZXN0aW9uSW5kZXhdLFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlICYmXG4gICAgICAgICAgICAgICghdGhpcy5wcm9wcy5pc01vYmlsZSB8fCB0aGlzLnByb3BzLmlzRW1iZWRkZWQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNsZWFyQnV0dG9uID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgICAgb25DbGljaz17dGhpcy5jbGVhcklucHV0fVxuICAgICAgICBhcmlhLWxhYmVsPXtpMThuZXh0LnQoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcpfVxuICAgICAgPlxuICAgICAgICA8SWNvbiBpbWc9XCJjbG9zZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfTtcblxuICBmZXRjaEZ1bmN0aW9uID0gKHsgdmFsdWUsIGNsZWFuRXhlY3V0ZWQgfSkgPT4ge1xuICAgIHJldHVybiB0aGlzLnNldFN0YXRlKFxuICAgICAgeyB2YWxpZDogZmFsc2UsIGNsZWFuRXhlY3V0ZWQ6ICFjbGVhbkV4ZWN1dGVkID8gZmFsc2UgOiBjbGVhbkV4ZWN1dGVkIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkRvbmUpIHtcbiAgICAgICAgICAvLyBkbyBub3QgbGV0IGNvbXBvbmVudCBjYXN0IHVubmVjZXNzYXJ5IHJlcXVlc3RzXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0cyB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgdXNlQWxsID0gaXNFbXB0eSh0YXJnZXRzKTtcbiAgICAgICAgY29uc3QgaXNMb2NhdGlvblNlYXJjaCA9XG4gICAgICAgICAgaXNFbXB0eSh0YXJnZXRzKSB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKTtcbiAgICAgICAgbGV0IG5ld1RhcmdldHM7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm93blBsYWNlcykge1xuICAgICAgICAgIG5ld1RhcmdldHMgPSBbJ0xvY2F0aW9ucyddO1xuICAgICAgICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnU3RvcHMnKSkge1xuICAgICAgICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTdG9wcycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0YXRpb25zJykpIHtcbiAgICAgICAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgICAgICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXVzZUFsbCkge1xuICAgICAgICAgIG5ld1RhcmdldHMgPSBbLi4udGFyZ2V0c107XG4gICAgICAgICAgLy8gaW4gZGVza3RvcCwgZmF2b3JpdGVzIGFyZSBhY2Nlc3NlZCB2aWEgc3ViIHNlYXJjaFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICAgICAgICF0aGlzLnByb3BzLmlzTW9iaWxlICYmXG4gICAgICAgICAgICAoaXNFbXB0eSh0aGlzLnByb3BzLnNvdXJjZXMpIHx8XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBuZXdUYXJnZXRzLnB1c2goJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVtb3ZlICBsb2NhdGlvbiBmYXZvdXJpdGVzIGluIGRlc2t0b3Agc2VhcmNoIChjb2xsZWN0aW9uIGl0ZW0gcmVwbGFjZXMgaXQgaW4gdGFyZ2V0IGFycmF5KVxuICAgICAgICBjb25zdCBzb3VyY2VzID1cbiAgICAgICAgICB0aGlzLnN0YXRlLnNvdXJjZXMgJiZcbiAgICAgICAgICB0aGlzLnN0YXRlLnNvdXJjZXMuZmlsdGVyKFxuICAgICAgICAgICAgcyA9PlxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICAgICAgICAgICBzID09PSAnRmF2b3VyaXRlJyAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnN0YXRlLm93blBsYWNlcyAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcblxuICAgICAgICBleGVjdXRlU2VhcmNoKFxuICAgICAgICAgIG5ld1RhcmdldHMsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICB0aGlzLnByb3BzLnRyYW5zcG9ydE1vZGUsXG4gICAgICAgICAgdGhpcy5wcm9wcy5zZWFyY2hDb250ZXh0LFxuICAgICAgICAgIHRoaXMucHJvcHMuZmlsdGVyUmVzdWx0cyxcbiAgICAgICAgICB0aGlzLnByb3BzLmdlb2NvZGluZ1NpemUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5wdXQ6IHZhbHVlIHx8ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VhcmNoUmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBYWFggdHJhbnNsYXRlcyBjdXJyZW50IGxvY2F0aW9uXG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IChzZWFyY2hSZXN1bHQucmVzdWx0cyB8fCBbXSlcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uID0+XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScgfHxcbiAgICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLnRpbWUgPiBtb21lbnQoKS51bml4KCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IHsgLi4uc3VnZ2VzdGlvbiB9O1xuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC5wcm9wZXJ0aWVzLmxhYmVsSWQgPSBpMThuZXh0LnQoXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnZhbHVlIHx8XG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5jaGVja1BlbmRpbmdTZWxlY3Rpb24oKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMucHJvcHMucGF0aE9wdHMsXG4gICAgICAgICAgdGhpcy5wcm9wcy5yZWZQb2ludCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICBjbGVhcklucHV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgfTtcbiAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycsIGNsZWFuRXhlY3V0ZWQ6IHRydWUgfSksXG4gICAgKTtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkNsZWFyKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2xlYXIodGhpcy5wcm9wcy5pZCk7XG4gICAgfVxuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICBpbnB1dENsaWNrZWQgPSBpbnB1dFZhbHVlID0+IHtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgdGhpcy5jbGVhckxvY2F0aW9uVGV4dCgpO1xuICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlKSB7XG4gICAgICB0aGlzLnByb3BzLmxvY2soKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICAvLyByZXNldCBhdCBzdGFydCwganVzdCBpbiBjYXNlIHdlIG1pc3NlZCBzb21ldGhpbmdcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgICAgfTtcblxuICAgICAgLy8gRFQtMzI2MzogYWRkZWQgc3RhdGVLZXlEb3duXG4gICAgICBjb25zdCBzdGF0ZUtleURvd24gPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgIHZhbHVlOiBpbnB1dFZhbHVlLFxuICAgICAgfTtcblxuICAgICAgaWYgKCF0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAvLyBEVC0zMjYzOiBhZGRlZCBpZi1lbHNlIHN0YXRlbWVudFxuICAgICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWUgPT09ICdvYmplY3QnIHx8ICFpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShzdGF0ZUtleURvd24sICgpID0+XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogaW5wdXRWYWx1ZSB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlICYmICF0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJlbmRlck1vYmlsZVNlYXJjaDogdHJ1ZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgc3RvcmVJbnB1dFJlZmVyZW5jZSA9IGF1dG9zdWdnZXN0ID0+IHtcbiAgICBpZiAoYXV0b3N1Z2dlc3QgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuaW5wdXQgPSBhdXRvc3VnZ2VzdC5pbnB1dDtcbiAgICAgIGlmICh0aGlzLnByb3BzLnN0b3JlUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc3RvcmVSZWYoYXV0b3N1Z2dlc3QuaW5wdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBGaWxsIGlucHV0IHdoZW4gdXNlciBjbGlja3MgZmlsbCBpbnB1dCBidXR0b24gaW4gc3RyZWV0IHN1Z2dlc3Rpb24gaXRlbVxuICBmaWxsSW5wdXQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgdGhpcy5mSW5wdXQgPSBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWU7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSxcbiAgICAgIGNoZWNrUGVuZGluZ1NlbGVjdGlvbjogbmV3VmFsdWUsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSB9KTtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gIH07XG5cbiAgcmVuZGVySXRlbSA9IGl0ZW0gPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW0gPVxuICAgICAgaXRlbS50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRUZXh0OiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0pLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBpdGVtO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtKTtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1Z2dlc3Rpb25JdGVtXG4gICAgICAgIGl0ZW09e25ld0l0ZW19XG4gICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XG4gICAgICAgIGxvYWRpbmc9eyF0aGlzLnN0YXRlLnZhbGlkfVxuICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgYXJpYUZhdm91cml0ZVN0cmluZz17aTE4bmV4dC50KCdmYXZvdXJpdGUnKX1cbiAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgZmlsbElucHV0PXt0aGlzLmZpbGxJbnB1dH1cbiAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e3RoaXMucHJvcHMuZ2V0QXV0b1N1Z2dlc3RJY29uc31cbiAgICAgICAgbW9kZUljb25Db2xvcnM9e3RoaXMucHJvcHMubW9kZUljb25Db2xvcnN9XG4gICAgICAgIG1vZGVTZXQ9e3RoaXMucHJvcHMubW9kZVNldH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjbG9zZU1vYmlsZVNlYXJjaCA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnVubG9jaygpO1xuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHRoaXMuc3RhdGUuc2Nyb2xsWSk7XG4gICAgICAgIHRoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkKCk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG5cbiAga2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Eb25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXk7XG4gICAgaWYgKGtleUNvZGUgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZWRpdGluZzogZmFsc2UgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIGlmIChrZXlDb2RlID09PSAnRW50ZXInICYmIHRoaXMuc3RhdGUudmFsdWUgIT09ICcnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBwZW5kaW5nU2VsZWN0aW9uOiB0cnVlIH0sICgpID0+IHtcbiAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmlucHV0Q2xpY2tlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChrZXlDb2RlID09PSAnRW50ZXInIHx8IGtleUNvZGUgPT09ICdBcnJvd0Rvd24nKSAmJlxuICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9PT0gJydcbiAgICApIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSAnQXJyb3dEb3duJyAmJiB0aGlzLnN0YXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlLFxuICAgICAgfTtcbiAgICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZWRpdGluZzogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgfVxuICB9O1xuXG4gIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50ID0gKCkgPT4ge1xuICAgIGxldCBsYWJlbCA9IFtdO1xuICAgIGNvbnN0IGZpcnN0U3VnZ2VzdGlvbiA9IHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbMF07XG4gICAgaWYgKGZpcnN0U3VnZ2VzdGlvbikge1xuICAgICAgaWYgKGZpcnN0U3VnZ2VzdGlvbi50eXBlICYmIGZpcnN0U3VnZ2VzdGlvbi50eXBlLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgICBsYWJlbC5wdXNoKGkxOG5leHQudCgnZmF2b3VyaXRlJykpO1xuICAgICAgfVxuICAgICAgbGFiZWwgPSBsYWJlbC5jb25jYXQoZ2V0U3VnZ2VzdGlvbkNvbnRlbnQodGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1swXSkpO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQobGFiZWwpXS5qb2luKCcgLSAnKTtcbiAgfTtcblxuICBjbGVhck9sZFNlYXJjaGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGV4dCwgY2xlYXJPbGRTZWFyY2hlcywgY2xlYXJGdXR1cmVSb3V0ZXMgfSA9XG4gICAgICB0aGlzLnByb3BzLnNlYXJjaENvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQgJiYgY2xlYXJPbGRTZWFyY2hlcykge1xuICAgICAgY2xlYXJPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGlmIChjbGVhckZ1dHVyZVJvdXRlcykge1xuICAgICAgICBjbGVhckZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCA9ICgpID0+XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbicgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnZGVzdGluYXRpb24nIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ3ZpYS1wb2ludCcgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luLXN0b3AtbmVhci15b3UnO1xuXG4gIGNsZWFyTG9jYXRpb25UZXh0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtcbiAgICAgICdWYWxpdHR1IHNpamFpbnRpJyxcbiAgICAgICdOeWt5aW5lbiBzaWphaW50aXNpJyxcbiAgICAgICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICAgICdTZWxlY3RlZCBsb2NhdGlvbicsXG4gICAgICAnVmFsZCBwb3NpdGlvbicsXG4gICAgICAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICAgJ01pbiBwb3NpdGlvbicsXG4gICAgICAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAgICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICAnWW91ciBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAgICdXeWJyYW5lIG1pZWpzY2UnLFxuICAgIF07XG4gICAgaWYgKHBvc2l0aW9ucy5pbmNsdWRlcyh0aGlzLnN0YXRlLnZhbHVlKSkge1xuICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgfVxuICB9O1xuXG4gIG9uRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5jbGVhckxvY2F0aW9uVGV4dCgpO1xuXG4gICAgY29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7IHNjcm9sbFkgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmIChpMThuZXh0Lmxhbmd1YWdlICE9PSB0aGlzLnByb3BzLmxhbmcpIHtcbiAgICAgIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2UodGhpcy5wcm9wcy5sYW5nKTtcbiAgICB9XG4gICAgY29uc3QgeyB2YWx1ZSwgc3VnZ2VzdGlvbnMsIHJlbmRlck1vYmlsZVNlYXJjaCwgY2xlYW5FeGVjdXRlZCB9ID1cbiAgICAgIHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLnRyYW5zbGF0ZWRQbGFjZWhvbGRlclxuICAgICAgICA/IHRoaXMucHJvcHMudHJhbnNsYXRlZFBsYWNlaG9sZGVyXG4gICAgICAgIDogaTE4bmV4dC50KHRoaXMucHJvcHMucGxhY2Vob2xkZXIpLFxuICAgICAgdmFsdWUsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIG9uQmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICBjbGFzc05hbWU6IGN4KFxuICAgICAgICBgJHtzdHlsZXMuaW5wdXR9ICR7XG4gICAgICAgICAgdGhpcy5wcm9wcy5pc01vYmlsZSAmJiB0aGlzLnByb3BzLnRyYW5zcG9ydE1vZGUgPyBzdHlsZXMudGhpbiA6ICcnXG4gICAgICAgIH0gJHtzdHlsZXNbdGhpcy5wcm9wcy5pZF0gfHwgJyd9ICR7XG4gICAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnXG4gICAgICAgIH0gJHt0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lfWAsXG4gICAgICApLFxuICAgICAgb25LZXlEb3duOiB0aGlzLmtleURvd24sIC8vIERULTMyNjNcbiAgICAgIHJlcXVpcmVkOiB0aGlzLnByb3BzLnJlcXVpcmVkLFxuICAgIH07XG4gICAgY29uc3QgYXJpYUJhcklkID0gdGhpcy5wcm9wcy5pZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJyk7XG4gICAgbGV0IFNlYXJjaEJhcklkID0gdGhpcy5wcm9wcy5hcmlhTGFiZWwgfHwgaTE4bmV4dC50KGFyaWFCYXJJZCk7XG4gICAgU2VhcmNoQmFySWQgPSBTZWFyY2hCYXJJZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJykuY29uY2F0KCcuJyk7IC8vIEZ1bGwgc3RvcCBtYWtlcyBzY3JlZW4gcmVhZGVyIHNwZWVjaCBjbGVhcmVyLlxuICAgIGNvbnN0IGFyaWFSZXF1aXJlZFRleHQgPSB0aGlzLnByb3BzLnJlcXVpcmVkXG4gICAgICA/IGAke2kxOG5leHQudCgncmVxdWlyZWQnKX0uYFxuICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxJbnN0cnVjdGlvbnMgPSB0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICA/IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnKVxuICAgICAgOiBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCcpO1xuICAgIGNvbnN0IG1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQgPVxuICAgICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbidcbiAgICAgICAgPyBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJylcbiAgICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxUZXh0ID0gYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zXG4gICAgICAuY29uY2F0KCcgJylcbiAgICAgIC5jb25jYXQobW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCk7XG5cbiAgICBjb25zdCBhcmlhU3VnZ2VzdGlvbkxlbiA9IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbicsIHtcbiAgICAgIGNvdW50OiBzdWdnZXN0aW9ucy5sZW5ndGgsXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcmlhQ3VycmVudFN1Z2dlc3Rpb24gPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uQXNBcmlhQ29udGVudCgpIHx8IHRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGkxOG5leHQudCgnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbicsIHtcbiAgICAgICAgICBzZWxlY3Rpb246XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KCkudG9Mb3dlckNhc2UoKSB8fCB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0gcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgICAgeyF0aGlzLnN0YXRlLnR5cGluZyAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5lZGl0aW5nICYmXG4gICAgICAgICAgICBgJHthcmlhU3VnZ2VzdGlvbkxlbn0gJHthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKX1gfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLnByb3BzLmlzTW9iaWxlICYmIChcbiAgICAgICAgICA8TW9iaWxlU2VhcmNoXG4gICAgICAgICAgICBzZWFyY2hPcGVuPXtyZW5kZXJNb2JpbGVTZWFyY2h9XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzPXt0aGlzLmNsZWFyT2xkU2VhcmNoZXN9XG4gICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgIGNsZWFySW5wdXQ9e3RoaXMuY2xlYXJJbnB1dH1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e1tcbiAgICAgICAgICAgICAgLi4uc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2xlYXItc2VhcmNoLWhpc3RvcnknLFxuICAgICAgICAgICAgICAgIGxhYmVsSWQ6IGkxOG5leHQudCgnY2xlYXItc2VhcmNoLWhpc3RvcnknKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmlzT3JpZ2luRGVzdGluYXRpb25PclZpYXBvaW50KClcbiAgICAgICAgICAgICAgICA/IGkxOG5leHQudCgnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcycpXG4gICAgICAgICAgICAgICAgOiBpbnB1dFByb3BzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGZldGNoRnVuY3Rpb249e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17dGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWR9XG4gICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e2dldFN1Z2dlc3Rpb25WYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgIGNsb3NlSGFuZGxlPXt0aGlzLmNsb3NlTW9iaWxlU2VhcmNofVxuICAgICAgICAgICAgYXJpYUxhYmVsPXthcmlhUmVxdWlyZWRUZXh0XG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChhcmlhQ3VycmVudFN1Z2dlc3Rpb24oKSl9XG4gICAgICAgICAgICBsYWJlbD17XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA/IHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA6IGkxOG5leHQudCh0aGlzLnByb3BzLmlkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgIGRpYWxvZ0hlYWRlclRleHQ9e2kxOG5leHQudCgnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInKX1cbiAgICAgICAgICAgIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZScpfVxuICAgICAgICAgICAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjYW5jZWwnKX1cbiAgICAgICAgICAgIGNsZWFySW5wdXRCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcpfVxuICAgICAgICAgICAgZm9jdXNJbnB1dD17Y2xlYW5FeGVjdXRlZH1cbiAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFyZW5kZXJNb2JpbGVTZWFyY2ggJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWNvbnRhaW5lciddLFxuICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICctLWNvbG9yJzogYCR7dGhpcy5wcm9wcy5jb2xvcn1gLFxuICAgICAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGAke3RoaXMucHJvcHMuaG92ZXJDb2xvcn1gLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5pY29uICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICAgICAgc3R5bGVzW2BhdXRvc3VnZ2VzdC1pbnB1dC1pY29uYF0sXG4gICAgICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9LWlucHV0LWljb25gLFxuICAgICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgLmNvbmNhdChpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCcpKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIGltZz17YCR7dGhpcy5wcm9wcy5pY29ufWB9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxBdXRvc3VnZ2VzdFxuICAgICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9ucz17dGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2tcbiAgICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRoaXMuc3RhdGUuZWRpdGluZ31cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uPXshdGhpcy5zdGF0ZS5vd25QbGFjZXN9XG4gICAgICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119IGh0bWxGb3I9e3RoaXMucHJvcHMuaWR9PlxuICAgICAgICAgICAgICAgICAgICB7YXJpYUN1cnJlbnRTdWdnZXN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYUxhYmVsVGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmlucHV0Q2xpY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLmtleURvd259XG4gICAgICAgICAgICAgICAgICAgIHsuLi5wfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnZhbHVlICYmIHRoaXMuY2xlYXJCdXR0b24oKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnN0b3JlSW5wdXRSZWZlcmVuY2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IERUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jayA9IHdpdGhTY3JvbGxMb2NrKERUQXV0b3N1Z2dlc3QpO1xuXG5leHBvcnQgZGVmYXVsdCBEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2s7XG4iLCJpbXBvcnQgeyBnZXROYW1lTGFiZWwgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG4vKipcbiAqIFJldHVybnMgbGFiZWwgZm9yIHByb3BlcnRpZXNcbiAqXG4gKiBAbmFtZSBnZXRMYWJlbFxuICogQHBhcmFtIHsqfSBwcm9wZXJ0aWVzIG9iamVjdCB0aGF0IGNvbnRhaW5zIFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwcm9wZXJ0aWVzOiB7XG4gICAgXCJpZFwiOiBcIkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJnaWRcIjogXCJndGZzbWF0a2E6c3RhdGlvbjpHVEZTOk1BVEtBOjMxODkxNVwiLFxuICAgIFwibGF5ZXJcIjogXCJzdGF0aW9uXCIsXG4gICAgXCJzb3VyY2VcIjogXCJndGZzbWF0a2FcIixcbiAgICBcInNvdXJjZV9pZFwiOiBcIkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJuYW1lXCI6IFwiUmF1dGF0aWVudG9yaVwiLFxuICAgIFwicG9zdGFsY29kZVwiOiBcIjAwMTAwXCIsXG4gICAgXCJwb3N0YWxjb2RlX2dpZFwiOiBcIndob3NvbmZpcnN0OnBvc3RhbGNvZGU6NDIxNDc5NTY5XCIsXG4gICAgXCJjb25maWRlbmNlXCI6IDEsXG4gICAgXCJhY2N1cmFjeVwiOiBcImNlbnRyb2lkXCIsXG4gICAgXCJjb3VudHJ5XCI6IFwiU3VvbWlcIixcbiAgICBcImNvdW50cnlfZ2lkXCI6IFwid2hvc29uZmlyc3Q6Y291bnRyeTowXCIsXG4gICAgXCJjb3VudHJ5X2FcIjogXCJGSU5cIixcbiAgICBcInJlZ2lvblwiOiBcIlV1c2ltYWFcIixcbiAgICBcInJlZ2lvbl9naWRcIjogXCJ3aG9zb25maXJzdDpyZWdpb246ODU2ODMwNjdcIixcbiAgICBcImxvY2FsYWRtaW5cIjogXCJIZWxzaW5raVwiLFxuICAgIFwibG9jYWxhZG1pbl9naWRcIjogXCJ3aG9zb25maXJzdDpsb2NhbGFkbWluOjkwNzE5OTcxNVwiLFxuICAgIFwibG9jYWxpdHlcIjogXCJIZWxzaW5raVwiLFxuICAgIFwibG9jYWxpdHlfZ2lkXCI6IFwid2hvc29uZmlyc3Q6bG9jYWxpdHk6MTAxNzQ4NDE3XCIsXG4gICAgXCJuZWlnaGJvdXJob29kXCI6IFwiS2x1dXZpXCIsXG4gICAgXCJuZWlnaGJvdXJob29kX2dpZFwiOiBcIndob3NvbmZpcnN0Om5laWdoYm91cmhvb2Q6ODU4OTg4NDdcIixcbiAgICBcImxhYmVsXCI6IFwiUmF1dGF0aWVudG9yaSwga29pbGxpbmVuLCBLbHV1dmksIEhlbHNpbmtpXCJcbiAgICB9XG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRMYWJlbChwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcGFydHMgPSBnZXROYW1lTGFiZWwocHJvcGVydGllcywgdHJ1ZSk7XG4gIHN3aXRjaCAocHJvcGVydGllcy5sYXllcikge1xuICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICBjYXNlICdiYWNrJzpcbiAgICAgIHJldHVybiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgcmV0dXJuIHBhcnRzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1sxXSAhPT0gJydcbiAgICAgICAgPyBwYXJ0cy5qb2luKCcsICcpXG4gICAgICAgIDogcGFydHNbMV0gfHwgcGFydHNbMF07XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaG9va3MgZnJvbSAnQGhzbC1maS9ob29rcyc7XG5cbmNvbnN0IHdpdGhTY3JvbGxMb2NrID0gQ29tcG9uZW50ID0+IHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICBjb25zdCB7IGxvY2ssIHVubG9jayB9ID0gaG9va3MudXNlU2Nyb2xsTG9jaygpO1xuXG4gICAgcmV0dXJuIDxDb21wb25lbnQgbG9jaz17bG9ja30gdW5sb2NrPXt1bmxvY2t9IHsuLi5wcm9wc30gLz47XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2Nyb2xsTG9jaztcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJ0b1Byb3BlcnR5S2V5IiwidCIsImkiLCJyIiwiZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIm9iaiIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfYXJyYXlMaWtlVG9BcnJheSIsImFyciIsImxlbiIsImxlbmd0aCIsImFycjIiLCJBcnJheSIsIl9zbGljZWRUb0FycmF5IiwiaXNBcnJheSIsImFycmF5V2l0aEhvbGVzIiwibCIsIm4iLCJ1IiwiYSIsImYiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJpdGVyYWJsZVRvQXJyYXlMaW1pdCIsIm1pbkxlbiIsImFycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwidW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJub25JdGVyYWJsZVJlc3QiLCJ0cnVFcSIsInZhbDEiLCJ2YWwyIiwiZ3Rmc1N0b3BMYXllcnMiLCJ2ZWhpY2xlUmVudGFsTGF5ZXJzIiwibGFiZWxJZFRvR2lkIiwiaWQiLCJwYXJ0cyIsInNwbGl0IiwiaXNEdXBsaWNhdGUiLCJpdGVtMSIsIml0ZW0yIiwicHJvcHMxIiwicHJvcGVydGllcyIsInByb3BzMiIsInR5cGUiLCJvMSIsIm9yaWdpbiIsImQxIiwiZGVzdGluYXRpb24iLCJvMiIsImQyIiwibG9jYWxpdHkiLCJpbmNsdWRlcyIsImxheWVyIiwiZ2lkIiwibGFiZWxJZCIsImd0ZnNJZCIsInAxIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsInVuZGVmaW5lZCIsInAyIiwiTWF0aCIsImFicyIsImxhYmVsIiwiYWRkcmVzcyIsIm5vcm1hbGl6ZSIsInN0ciIsImlzU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJMYXllclR5cGUiLCJpc1N0b3AiLCJfcmVmIiwiZ2V0TGF5ZXJSYW5rIiwic291cmNlIiwiaW5kZXhPZiIsInNvcnRTZWFyY2hSZXN1bHRzIiwibGluZVJlZ2V4cCIsInJlc3VsdHMiLCJ0ZXJtIiwiYXJndW1lbnRzIiwiaXNMaW5lSWRlbnRpZmllciIsIm5vcm1hbGl6ZWRUZXJtIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwicmVzdWx0Iiwic2hvcnROYW1lIiwiX3Jlc3VsdCRwcm9wZXJ0aWVzIiwiY29uZmlkZW5jZSIsIm1hdGNoIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImZpbHRlciIsIm5vcm1hbGl6ZWRWYWx1ZSIsInJlZHVjZSIsInByZXZpb3VzIiwiY3VycmVudCIsInVuaXFXaXRoIiwiZ2V0U3RvcE5hbWUiLCJzdG9wQ29kZSIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwiZmlsdGVyTWF0Y2hpbmdUb0lucHV0IiwibGlzdCIsIklucHV0IiwiZmllbGRzIiwiaW5wdXQiLCJ0cmltIiwibXVsdGlXb3JkIiwiaXRlbSIsImZvckVhY2giLCJwTmFtZSIsImdldCIsInNwbGljZSIsImpvaW4iLCJjb25jYXQiLCJyZXBsYWNlIiwic2VyaWFsaXplIiwicHJlZml4Iiwia2V5cyIsInAiLCJrIiwidiIsImVuY29kZVVSSUNvbXBvbmVudCIsImF4aW9zIiwicmVxdWlyZSIsImRlZmF1bHQiLCJnZXRKc29uIiwidXJsIiwicGFyYW1zIiwiZW5jb2RlVVJJIiwic2VhcmNoIiwidGltZW91dCIsIm1ldGhvZCIsImhlYWRlcnMiLCJBY2NlcHQiLCJ0aGVuIiwicmVzIiwiZGF0YSIsIkRFRkFVTFRfUEVMSUFTX1VSTCIsImdldEdlb2NvZGluZ1Jlc3VsdHMiLCJzZWFyY2hTdHJpbmciLCJzZWFyY2hQYXJhbXMiLCJsYW5nIiwiZm9jdXNQb2ludCIsInNvdXJjZXMiLCJwZWxpYXNVcmwiLCJtaW5pbWFsUmVnZXhwIiwiZ2VvY29kaW5nTGF5ZXJzIiwidGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwiUEVMSUFTX1VSTCIsIm9wdHMiLCJfb2JqZWN0U3ByZWFkIiwibGF5ZXJzIiwiZmVhdHVyZXMiLCJnZXRTdG9wc0Zyb21HZW9jb2RpbmciLCJzdG9wcyIsIlVSTF9QRUxJQVNfUExBQ0UiLCJnaWRzIiwic3RvcFN0YXRpb25NYXAiLCJzdG9wIiwiY29kZSIsInN0b3BPclN0YXRpb24iLCJpZHMiLCJhZGRlbmR1bSIsImxhc3RVcGRhdGVkIiwiZmF2b3VyaXRlSWQiLCJmaWx0ZXJPbGRTZWFyY2hlcyIsIm9sZFNlYXJjaGVzIiwiZHJvcExheWVycyIsIm1hdGNoaW5nT2xkU2VhcmNoZXMiLCJ0YWtlIiwibmV3SXRlbSIsInRpbWV0YWJsZUNsaWNrZWQiLCJhcnJvd0NsaWNrZWQiLCJyb3V0ZUxheWVycyIsImxvY2F0aW9uTGF5ZXJzIiwicGFya2luZ0xheWVycyIsInN0b3BMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRhcmdldHMiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwiY2FsbGJhY2siLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwiZ2V0T2xkU2VhcmNoZXMiLCJnZXRGYXZvdXJpdGVTdG9wcyIsInBhcmtpbmdBcmVhU291cmNlcyIsImdldExhbmd1YWdlIiwiZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlUm91dGVzIiwiZ2V0Um91dGVzUXVlcnkiLCJjb250ZXh0IiwibG9jYXRpb25Bd2FyZSIsImlzUGVsaWFzTG9jYXRpb25Bd2FyZSIsIlVSTF9QRUxJQVMiLCJmZWVkSURzIiwiZ2VvY29kaW5nU2VhcmNoUGFyYW1zIiwiZ2VvY29kaW5nU291cmNlcyIsImdldEZ1dHVyZVJvdXRlcyIsImNpdHlCaWtlTmV0d29ya3MiLCJhbGxUYXJnZXRzIiwiYWxsU291cmNlcyIsInBvc2l0aW9uIiwic2VhcmNoQ29tcG9uZW50cyIsInNlYXJjaGVzIiwibGFuZ3VhZ2UiLCJsYXQiLCJsb24iLCJ0b0ZpeGVkIiwibW9kZSIsInN0YXR1cyIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMiLCJmZWVkaXMiLCJnZW9zb3VyY2VzIiwibG9jYXRpb25IaXN0b3J5Iiwic2l6ZSIsImZlZWRJZHMiLCJoaXN0b3J5IiwidXNlU3RvcHMiLCJ1c2VTdGF0aW9ucyIsInN0b3BzQW5kU3RhdGlvbnMiLCJldmVyeSIsInN0b3BzU3RhdGlvbnMiLCJzIiwiZmlsdGVyRmF2b3VyaXRlU3RvcHMiLCJkZWR1cGVzdG9wcyIsInN0b3BIaXN0b3J5IiwiZmF2b3VyaXRlUm91dGVzIiwicm91dGVIaXN0b3J5IiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24iLCJhbGwiLCJmbGF0dGVuIiwiY2F0Y2giLCJlcnIiLCJlcnJvciIsImxlYWRpbmciLCJnZXRMb2NhbGl0eSIsInN1Z2dlc3Rpb24iLCJsb2NhbGFkbWluIiwiZ2V0U3RvcENvZGUiLCJnZXROYW1lTGFiZWwiLCJtZW1vaXplIiwicGxhaW4iLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJsb25nTmFtZSIsImFnZW5jeSIsImNsb25lRGVlcCIsIm1vZHVsZSIsImhvb2tDYWxsYmFjayIsInNvbWUiLCJob29rcyIsImFwcGx5Iiwic2V0SG9va0NhbGxiYWNrIiwiaXNPYmplY3QiLCJoYXNPd25Qcm9wIiwiYiIsImhhc093blByb3BlcnR5IiwiaXNPYmplY3RFbXB0eSIsImdldE93blByb3BlcnR5TmFtZXMiLCJpc1VuZGVmaW5lZCIsImlzTnVtYmVyIiwiaXNEYXRlIiwiRGF0ZSIsImZuIiwiYXJyTGVuIiwiZXh0ZW5kIiwidmFsdWVPZiIsImNyZWF0ZVVUQyIsImZvcm1hdCIsImxvY2FsZSIsInN0cmljdCIsImNyZWF0ZUxvY2FsT3JVVEMiLCJ1dGMiLCJkZWZhdWx0UGFyc2luZ0ZsYWdzIiwiZW1wdHkiLCJ1bnVzZWRUb2tlbnMiLCJ1bnVzZWRJbnB1dCIsIm92ZXJmbG93IiwiY2hhcnNMZWZ0T3ZlciIsIm51bGxJbnB1dCIsImludmFsaWRFcmEiLCJpbnZhbGlkTW9udGgiLCJpbnZhbGlkRm9ybWF0IiwidXNlckludmFsaWRhdGVkIiwiaXNvIiwicGFyc2VkRGF0ZVBhcnRzIiwiZXJhIiwibWVyaWRpZW0iLCJyZmMyODIyIiwid2Vla2RheU1pc21hdGNoIiwiZ2V0UGFyc2luZ0ZsYWdzIiwibSIsIl9wZiIsImlzVmFsaWQiLCJmbGFncyIsInBhcnNlZFBhcnRzIiwiaXNOb3dWYWxpZCIsIl9kIiwiaXNOYU4iLCJnZXRUaW1lIiwiaW52YWxpZFdlZWtkYXkiLCJfc3RyaWN0IiwiYmlnSG91ciIsImlzRnJvemVuIiwiX2lzVmFsaWQiLCJjcmVhdGVJbnZhbGlkIiwiTmFOIiwiZnVuIiwidGhpcyIsIm1vbWVudFByb3BlcnRpZXMiLCJ1cGRhdGVJblByb2dyZXNzIiwiY29weUNvbmZpZyIsInRvIiwicHJvcCIsInZhbCIsIm1vbWVudFByb3BlcnRpZXNMZW4iLCJfaXNBTW9tZW50T2JqZWN0IiwiX2kiLCJfZiIsIl9sIiwiX3R6bSIsIl9pc1VUQyIsIl9vZmZzZXQiLCJfbG9jYWxlIiwiTW9tZW50IiwiY29uZmlnIiwidXBkYXRlT2Zmc2V0IiwiaXNNb21lbnQiLCJ3YXJuIiwibXNnIiwic3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzIiwiY29uc29sZSIsImRlcHJlY2F0ZSIsImZpcnN0VGltZSIsImRlcHJlY2F0aW9uSGFuZGxlciIsImFyZyIsImFyZ3MiLCJhcmdMZW4iLCJFcnJvciIsInN0YWNrIiwiZGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlU2ltcGxlIiwiaXNGdW5jdGlvbiIsIkZ1bmN0aW9uIiwic2V0IiwiX2NvbmZpZyIsIl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCIsIl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwiX29yZGluYWxQYXJzZSIsIm1lcmdlQ29uZmlncyIsInBhcmVudENvbmZpZyIsImNoaWxkQ29uZmlnIiwiTG9jYWxlIiwiZGVmYXVsdENhbGVuZGFyIiwic2FtZURheSIsIm5leHREYXkiLCJuZXh0V2VlayIsImxhc3REYXkiLCJsYXN0V2VlayIsInNhbWVFbHNlIiwiY2FsZW5kYXIiLCJtb20iLCJub3ciLCJvdXRwdXQiLCJfY2FsZW5kYXIiLCJ6ZXJvRmlsbCIsIm51bWJlciIsInRhcmdldExlbmd0aCIsImZvcmNlU2lnbiIsImFic051bWJlciIsInplcm9zVG9GaWxsIiwicG93IiwibWF4Iiwic3Vic3RyIiwiZm9ybWF0dGluZ1Rva2VucyIsImxvY2FsRm9ybWF0dGluZ1Rva2VucyIsImZvcm1hdEZ1bmN0aW9ucyIsImZvcm1hdFRva2VuRnVuY3Rpb25zIiwiYWRkRm9ybWF0VG9rZW4iLCJ0b2tlbiIsInBhZGRlZCIsIm9yZGluYWwiLCJmdW5jIiwibG9jYWxlRGF0YSIsInJlbW92ZUZvcm1hdHRpbmdUb2tlbnMiLCJtYWtlRm9ybWF0RnVuY3Rpb24iLCJhcnJheSIsImZvcm1hdE1vbWVudCIsImV4cGFuZEZvcm1hdCIsImludmFsaWREYXRlIiwicmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zIiwibG9uZ0RhdGVGb3JtYXQiLCJsYXN0SW5kZXgiLCJkZWZhdWx0TG9uZ0RhdGVGb3JtYXQiLCJMVFMiLCJMVCIsIkwiLCJMTCIsIkxMTCIsIkxMTEwiLCJfbG9uZ0RhdGVGb3JtYXQiLCJmb3JtYXRVcHBlciIsInRvVXBwZXJDYXNlIiwidG9rIiwiZGVmYXVsdEludmFsaWREYXRlIiwiX2ludmFsaWREYXRlIiwiZGVmYXVsdE9yZGluYWwiLCJkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIl9vcmRpbmFsIiwiZGVmYXVsdFJlbGF0aXZlVGltZSIsImZ1dHVyZSIsInBhc3QiLCJzcyIsIm1tIiwiaCIsImhoIiwiZCIsImRkIiwidyIsInd3IiwiTSIsIk1NIiwieSIsInl5IiwicmVsYXRpdmVUaW1lIiwid2l0aG91dFN1ZmZpeCIsInN0cmluZyIsImlzRnV0dXJlIiwiX3JlbGF0aXZlVGltZSIsInBhc3RGdXR1cmUiLCJkaWZmIiwiYWxpYXNlcyIsIkQiLCJkYXRlcyIsImRhdGUiLCJkYXlzIiwiZGF5Iiwid2Vla2RheXMiLCJ3ZWVrZGF5IiwiRSIsImlzb3dlZWtkYXlzIiwiaXNvd2Vla2RheSIsIkRERCIsImRheW9meWVhcnMiLCJkYXlvZnllYXIiLCJob3VycyIsImhvdXIiLCJtcyIsIm1pbGxpc2Vjb25kcyIsIm1pbGxpc2Vjb25kIiwibWludXRlcyIsIm1pbnV0ZSIsIm1vbnRocyIsIm1vbnRoIiwiUSIsInF1YXJ0ZXJzIiwicXVhcnRlciIsInNlY29uZHMiLCJzZWNvbmQiLCJnZyIsIndlZWt5ZWFycyIsIndlZWt5ZWFyIiwiR0ciLCJpc293ZWVreWVhcnMiLCJpc293ZWVreWVhciIsIndlZWtzIiwid2VlayIsIlciLCJpc293ZWVrcyIsImlzb3dlZWsiLCJ5ZWFycyIsInllYXIiLCJub3JtYWxpemVVbml0cyIsInVuaXRzIiwibm9ybWFsaXplT2JqZWN0VW5pdHMiLCJpbnB1dE9iamVjdCIsIm5vcm1hbGl6ZWRQcm9wIiwibm9ybWFsaXplZElucHV0IiwicHJpb3JpdGllcyIsImlzb1dlZWtkYXkiLCJkYXlPZlllYXIiLCJ3ZWVrWWVhciIsImlzb1dlZWtZZWFyIiwiaXNvV2VlayIsImdldFByaW9yaXRpemVkVW5pdHMiLCJ1bml0c09iaiIsInVuaXQiLCJwcmlvcml0eSIsInNvcnQiLCJyZWdleGVzIiwibWF0Y2gxIiwibWF0Y2gyIiwibWF0Y2gzIiwibWF0Y2g0IiwibWF0Y2g2IiwibWF0Y2gxdG8yIiwibWF0Y2gzdG80IiwibWF0Y2g1dG82IiwibWF0Y2gxdG8zIiwibWF0Y2gxdG80IiwibWF0Y2gxdG82IiwibWF0Y2hVbnNpZ25lZCIsIm1hdGNoU2lnbmVkIiwibWF0Y2hPZmZzZXQiLCJtYXRjaFNob3J0T2Zmc2V0IiwibWF0Y2hUaW1lc3RhbXAiLCJtYXRjaFdvcmQiLCJtYXRjaDF0bzJOb0xlYWRpbmdaZXJvIiwibWF0Y2gxdG8ySGFzWmVybyIsImFkZFJlZ2V4VG9rZW4iLCJyZWdleCIsInN0cmljdFJlZ2V4IiwiaXNTdHJpY3QiLCJnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4iLCJ1bmVzY2FwZUZvcm1hdCIsInJlZ2V4RXNjYXBlIiwibWF0Y2hlZCIsInAzIiwicDQiLCJhYnNGbG9vciIsImNlaWwiLCJmbG9vciIsInRvSW50IiwiYXJndW1lbnRGb3JDb2VyY2lvbiIsImNvZXJjZWROdW1iZXIiLCJpc0Zpbml0ZSIsInRva2VucyIsImFkZFBhcnNlVG9rZW4iLCJ0b2tlbkxlbiIsImFkZFdlZWtQYXJzZVRva2VuIiwiX3ciLCJhZGRUaW1lVG9BcnJheUZyb21Ub2tlbiIsIl9hIiwiaXNMZWFwWWVhciIsIllFQVIiLCJNT05USCIsIkRBVEUiLCJIT1VSIiwiTUlOVVRFIiwiU0VDT05EIiwiTUlMTElTRUNPTkQiLCJXRUVLIiwiV0VFS0RBWSIsImRheXNJblllYXIiLCJwYXJzZVR3b0RpZ2l0WWVhciIsInBhcnNlSW50IiwiZ2V0U2V0WWVhciIsIm1ha2VHZXRTZXQiLCJnZXRJc0xlYXBZZWFyIiwia2VlcFRpbWUiLCJzZXQkMSIsImlzVVRDIiwiZ2V0VVRDTWlsbGlzZWNvbmRzIiwiZ2V0TWlsbGlzZWNvbmRzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFNlY29uZHMiLCJnZXRVVENNaW51dGVzIiwiZ2V0TWludXRlcyIsImdldFVUQ0hvdXJzIiwiZ2V0SG91cnMiLCJnZXRVVENEYXRlIiwiZ2V0RGF0ZSIsImdldFVUQ0RheSIsImdldERheSIsImdldFVUQ01vbnRoIiwiZ2V0TW9udGgiLCJnZXRVVENGdWxsWWVhciIsImdldEZ1bGxZZWFyIiwic2V0VVRDTWlsbGlzZWNvbmRzIiwic2V0TWlsbGlzZWNvbmRzIiwic2V0VVRDU2Vjb25kcyIsInNldFNlY29uZHMiLCJzZXRVVENNaW51dGVzIiwic2V0TWludXRlcyIsInNldFVUQ0hvdXJzIiwic2V0SG91cnMiLCJzZXRVVENEYXRlIiwic2V0RGF0ZSIsInNldFVUQ0Z1bGxZZWFyIiwic2V0RnVsbFllYXIiLCJzdHJpbmdHZXQiLCJzdHJpbmdTZXQiLCJwcmlvcml0aXplZCIsInByaW9yaXRpemVkTGVuIiwibW9kIiwieCIsImRheXNJbk1vbnRoIiwibW9kTW9udGgiLCJtb250aHNTaG9ydCIsIm1vbnRoc1Nob3J0UmVnZXgiLCJtb250aHNSZWdleCIsIm1vbnRoc1BhcnNlIiwiZGVmYXVsdExvY2FsZU1vbnRocyIsImRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCIsIk1PTlRIU19JTl9GT1JNQVQiLCJkZWZhdWx0TW9udGhzU2hvcnRSZWdleCIsImRlZmF1bHRNb250aHNSZWdleCIsImxvY2FsZU1vbnRocyIsIl9tb250aHMiLCJpc0Zvcm1hdCIsImxvY2FsZU1vbnRoc1Nob3J0IiwiX21vbnRoc1Nob3J0IiwiaGFuZGxlU3RyaWN0UGFyc2UiLCJtb250aE5hbWUiLCJpaSIsImxsYyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiX21vbnRoc1BhcnNlIiwiX2xvbmdNb250aHNQYXJzZSIsIl9zaG9ydE1vbnRoc1BhcnNlIiwibG9jYWxlTW9udGhzUGFyc2UiLCJfbW9udGhzUGFyc2VFeGFjdCIsInNldE1vbnRoIiwibWluIiwic2V0VVRDTW9udGgiLCJnZXRTZXRNb250aCIsImdldERheXNJbk1vbnRoIiwiY29tcHV0ZU1vbnRoc1BhcnNlIiwiX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgiLCJfbW9udGhzU2hvcnRSZWdleCIsIl9tb250aHNTdHJpY3RSZWdleCIsIl9tb250aHNSZWdleCIsImNtcExlblJldiIsInNob3J0UCIsImxvbmdQIiwic2hvcnRQaWVjZXMiLCJsb25nUGllY2VzIiwibWl4ZWRQaWVjZXMiLCJjcmVhdGVEYXRlIiwiY3JlYXRlVVRDRGF0ZSIsIlVUQyIsImZpcnN0V2Vla09mZnNldCIsImRvdyIsImRveSIsImZ3ZCIsImRheU9mWWVhckZyb21XZWVrcyIsInJlc1llYXIiLCJyZXNEYXlPZlllYXIiLCJ3ZWVrT2ZZZWFyIiwicmVzV2VlayIsIndlZWtPZmZzZXQiLCJ3ZWVrc0luWWVhciIsIndlZWtPZmZzZXROZXh0IiwibG9jYWxlV2VlayIsIl93ZWVrIiwiZGVmYXVsdExvY2FsZVdlZWsiLCJsb2NhbGVGaXJzdERheU9mV2VlayIsImxvY2FsZUZpcnN0RGF5T2ZZZWFyIiwiZ2V0U2V0V2VlayIsImFkZCIsImdldFNldElTT1dlZWsiLCJwYXJzZVdlZWtkYXkiLCJ3ZWVrZGF5c1BhcnNlIiwicGFyc2VJc29XZWVrZGF5Iiwic2hpZnRXZWVrZGF5cyIsIndzIiwid2Vla2RheXNNaW4iLCJ3ZWVrZGF5c1Nob3J0Iiwid2Vla2RheXNNaW5SZWdleCIsIndlZWtkYXlzU2hvcnRSZWdleCIsIndlZWtkYXlzUmVnZXgiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXMiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCIsImRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiIsImRlZmF1bHRXZWVrZGF5c1JlZ2V4IiwiZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCIsImRlZmF1bHRXZWVrZGF5c01pblJlZ2V4IiwibG9jYWxlV2Vla2RheXMiLCJfd2Vla2RheXMiLCJsb2NhbGVXZWVrZGF5c1Nob3J0IiwiX3dlZWtkYXlzU2hvcnQiLCJsb2NhbGVXZWVrZGF5c01pbiIsIl93ZWVrZGF5c01pbiIsImhhbmRsZVN0cmljdFBhcnNlJDEiLCJ3ZWVrZGF5TmFtZSIsIl93ZWVrZGF5c1BhcnNlIiwiX3Nob3J0V2Vla2RheXNQYXJzZSIsIl9taW5XZWVrZGF5c1BhcnNlIiwibG9jYWxlV2Vla2RheXNQYXJzZSIsIl93ZWVrZGF5c1BhcnNlRXhhY3QiLCJfZnVsbFdlZWtkYXlzUGFyc2UiLCJnZXRTZXREYXlPZldlZWsiLCJnZXRTZXRMb2NhbGVEYXlPZldlZWsiLCJnZXRTZXRJU09EYXlPZldlZWsiLCJjb21wdXRlV2Vla2RheXNQYXJzZSIsIl93ZWVrZGF5c1N0cmljdFJlZ2V4IiwiX3dlZWtkYXlzUmVnZXgiLCJfd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4IiwiX3dlZWtkYXlzU2hvcnRSZWdleCIsIl93ZWVrZGF5c01pblN0cmljdFJlZ2V4IiwiX3dlZWtkYXlzTWluUmVnZXgiLCJtaW5wIiwic2hvcnRwIiwibG9uZ3AiLCJtaW5QaWVjZXMiLCJoRm9ybWF0Iiwia0Zvcm1hdCIsImxvd2VyY2FzZSIsIm1hdGNoTWVyaWRpZW0iLCJfbWVyaWRpZW1QYXJzZSIsImxvY2FsZUlzUE0iLCJjaGFyQXQiLCJrSW5wdXQiLCJfaXNQbSIsImlzUE0iLCJfbWVyaWRpZW0iLCJwb3MiLCJwb3MxIiwicG9zMiIsImRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlIiwiZ2V0U2V0SG91ciIsImxvY2FsZU1lcmlkaWVtIiwiaXNMb3dlciIsImdsb2JhbExvY2FsZSIsImJhc2VDb25maWciLCJkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwibWVyaWRpZW1QYXJzZSIsImxvY2FsZXMiLCJsb2NhbGVGYW1pbGllcyIsImNvbW1vblByZWZpeCIsImFycjEiLCJtaW5sIiwibm9ybWFsaXplTG9jYWxlIiwiY2hvb3NlTG9jYWxlIiwibmFtZXMiLCJqIiwibG9hZExvY2FsZSIsImlzTG9jYWxlTmFtZVNhbmUiLCJvbGRMb2NhbGUiLCJleHBvcnRzIiwiX2FiYnIiLCJnZXRTZXRHbG9iYWxMb2NhbGUiLCJ2YWx1ZXMiLCJnZXRMb2NhbGUiLCJkZWZpbmVMb2NhbGUiLCJhYmJyIiwicGFyZW50TG9jYWxlIiwidXBkYXRlTG9jYWxlIiwidG1wTG9jYWxlIiwibGlzdExvY2FsZXMiLCJjaGVja092ZXJmbG93IiwiX292ZXJmbG93RGF5T2ZZZWFyIiwiX292ZXJmbG93V2Vla3MiLCJfb3ZlcmZsb3dXZWVrZGF5IiwiZXh0ZW5kZWRJc29SZWdleCIsImJhc2ljSXNvUmVnZXgiLCJ0elJlZ2V4IiwiaXNvRGF0ZXMiLCJpc29UaW1lcyIsImFzcE5ldEpzb25SZWdleCIsIm9ic09mZnNldHMiLCJVVCIsIkdNVCIsIkVEVCIsIkVTVCIsIkNEVCIsIkNTVCIsIk1EVCIsIk1TVCIsIlBEVCIsIlBTVCIsImNvbmZpZ0Zyb21JU08iLCJhbGxvd1RpbWUiLCJkYXRlRm9ybWF0IiwidGltZUZvcm1hdCIsInR6Rm9ybWF0IiwiZXhlYyIsImlzb0RhdGVzTGVuIiwiaXNvVGltZXNMZW4iLCJjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0IiwiZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyIsInllYXJTdHIiLCJtb250aFN0ciIsImRheVN0ciIsImhvdXJTdHIiLCJtaW51dGVTdHIiLCJzZWNvbmRTdHIiLCJ1bnRydW5jYXRlWWVhciIsInByZXByb2Nlc3NSRkMyODIyIiwiY2hlY2tXZWVrZGF5Iiwid2Vla2RheVN0ciIsInBhcnNlZElucHV0IiwiY2FsY3VsYXRlT2Zmc2V0Iiwib2JzT2Zmc2V0IiwibWlsaXRhcnlPZmZzZXQiLCJudW1PZmZzZXQiLCJobSIsImNvbmZpZ0Zyb21SRkMyODIyIiwicGFyc2VkQXJyYXkiLCJjb25maWdGcm9tU3RyaW5nIiwiY3JlYXRlRnJvbUlucHV0RmFsbGJhY2siLCJkZWZhdWx0cyIsImMiLCJjdXJyZW50RGF0ZUFycmF5Iiwibm93VmFsdWUiLCJfdXNlVVRDIiwiY29uZmlnRnJvbUFycmF5IiwiY3VycmVudERhdGUiLCJleHBlY3RlZFdlZWtkYXkiLCJ5ZWFyVG9Vc2UiLCJkYXlPZlllYXJGcm9tV2Vla0luZm8iLCJfZGF5T2ZZZWFyIiwiX25leHREYXkiLCJ0ZW1wIiwid2Vla2RheU92ZXJmbG93IiwiY3VyV2VlayIsImNyZWF0ZUxvY2FsIiwiSVNPXzg2MDEiLCJSRkNfMjgyMiIsInNraXBwZWQiLCJzdHJpbmdMZW5ndGgiLCJ0b3RhbFBhcnNlZElucHV0TGVuZ3RoIiwibWVyaWRpZW1GaXhXcmFwIiwiZXJhc0NvbnZlcnRZZWFyIiwiaXNQbSIsIm1lcmlkaWVtSG91ciIsImNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheSIsInRlbXBDb25maWciLCJiZXN0TW9tZW50Iiwic2NvcmVUb0JlYXQiLCJjdXJyZW50U2NvcmUiLCJ2YWxpZEZvcm1hdEZvdW5kIiwiYmVzdEZvcm1hdElzVmFsaWQiLCJjb25maWdmTGVuIiwic2NvcmUiLCJjb25maWdGcm9tT2JqZWN0IiwiZGF5T3JEYXRlIiwiY3JlYXRlRnJvbUNvbmZpZyIsInByZXBhcmVDb25maWciLCJwcmVwYXJzZSIsImNvbmZpZ0Zyb21JbnB1dCIsInByb3RvdHlwZU1pbiIsIm90aGVyIiwicHJvdG90eXBlTWF4IiwicGlja0J5IiwibW9tZW50cyIsIm9yZGVyaW5nIiwiaXNEdXJhdGlvblZhbGlkIiwidW5pdEhhc0RlY2ltYWwiLCJvcmRlckxlbiIsInBhcnNlRmxvYXQiLCJpc1ZhbGlkJDEiLCJjcmVhdGVJbnZhbGlkJDEiLCJjcmVhdGVEdXJhdGlvbiIsIkR1cmF0aW9uIiwiZHVyYXRpb24iLCJfbWlsbGlzZWNvbmRzIiwiX2RheXMiLCJfZGF0YSIsIl9idWJibGUiLCJpc0R1cmF0aW9uIiwiYWJzUm91bmQiLCJyb3VuZCIsImNvbXBhcmVBcnJheXMiLCJhcnJheTEiLCJhcnJheTIiLCJkb250Q29udmVydCIsImxlbmd0aERpZmYiLCJkaWZmcyIsIm9mZnNldCIsInNlcGFyYXRvciIsInV0Y09mZnNldCIsInNpZ24iLCJvZmZzZXRGcm9tU3RyaW5nIiwiY2h1bmtPZmZzZXQiLCJtYXRjaGVyIiwibWF0Y2hlcyIsImNsb25lV2l0aE9mZnNldCIsIm1vZGVsIiwiY2xvbmUiLCJzZXRUaW1lIiwibG9jYWwiLCJnZXREYXRlT2Zmc2V0IiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRTZXRPZmZzZXQiLCJrZWVwTG9jYWxUaW1lIiwia2VlcE1pbnV0ZXMiLCJsb2NhbEFkanVzdCIsIl9jaGFuZ2VJblByb2dyZXNzIiwiYWRkU3VidHJhY3QiLCJnZXRTZXRab25lIiwic2V0T2Zmc2V0VG9VVEMiLCJzZXRPZmZzZXRUb0xvY2FsIiwic3VidHJhY3QiLCJzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCIsInRab25lIiwiaGFzQWxpZ25lZEhvdXJPZmZzZXQiLCJpc0RheWxpZ2h0U2F2aW5nVGltZSIsImlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCIsIl9pc0RTVFNoaWZ0ZWQiLCJ0b0FycmF5IiwiaXNMb2NhbCIsImlzVXRjT2Zmc2V0IiwiaXNVdGMiLCJhc3BOZXRSZWdleCIsImlzb1JlZ2V4IiwicmV0IiwiZGlmZlJlcyIsInBhcnNlSXNvIiwibW9tZW50c0RpZmZlcmVuY2UiLCJpbnAiLCJwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlIiwiYmFzZSIsImlzQWZ0ZXIiLCJpc0JlZm9yZSIsImNyZWF0ZUFkZGVyIiwiZGlyZWN0aW9uIiwicGVyaW9kIiwidG1wIiwiaXNBZGRpbmciLCJpbnZhbGlkIiwiaXNNb21lbnRJbnB1dCIsImlzTnVtYmVyT3JTdHJpbmdBcnJheSIsImlzTW9tZW50SW5wdXRPYmplY3QiLCJwcm9wZXJ0eSIsIm9iamVjdFRlc3QiLCJwcm9wZXJ0eVRlc3QiLCJwcm9wZXJ0eUxlbiIsImFycmF5VGVzdCIsImRhdGFUeXBlVGVzdCIsImlzQ2FsZW5kYXJTcGVjIiwiZ2V0Q2FsZW5kYXJGb3JtYXQiLCJteU1vbWVudCIsImNhbGVuZGFyJDEiLCJ0aW1lIiwiZm9ybWF0cyIsInNvZCIsInN0YXJ0T2YiLCJjYWxlbmRhckZvcm1hdCIsImxvY2FsSW5wdXQiLCJlbmRPZiIsImlzQmV0d2VlbiIsImluY2x1c2l2aXR5IiwibG9jYWxGcm9tIiwibG9jYWxUbyIsImlzU2FtZSIsImlucHV0TXMiLCJpc1NhbWVPckFmdGVyIiwiaXNTYW1lT3JCZWZvcmUiLCJhc0Zsb2F0IiwidGhhdCIsInpvbmVEZWx0YSIsIm1vbnRoRGlmZiIsIndob2xlTW9udGhEaWZmIiwiYW5jaG9yIiwidG9JU09TdHJpbmciLCJrZWVwT2Zmc2V0IiwidG9EYXRlIiwiaW5zcGVjdCIsImRhdGV0aW1lIiwic3VmZml4Iiwiem9uZSIsImlucHV0U3RyaW5nIiwiZGVmYXVsdEZvcm1hdFV0YyIsImRlZmF1bHRGb3JtYXQiLCJwb3N0Zm9ybWF0IiwiaHVtYW5pemUiLCJmcm9tTm93IiwidG9Ob3ciLCJuZXdMb2NhbGVEYXRhIiwiTVNfUEVSX1NFQ09ORCIsIk1TX1BFUl9NSU5VVEUiLCJNU19QRVJfSE9VUiIsIk1TX1BFUl80MDBfWUVBUlMiLCJtb2QkMSIsImRpdmlkZW5kIiwiZGl2aXNvciIsImxvY2FsU3RhcnRPZkRhdGUiLCJ1dGNTdGFydE9mRGF0ZSIsInN0YXJ0T2ZEYXRlIiwidW5peCIsInRvT2JqZWN0IiwidG9KU09OIiwiaXNWYWxpZCQyIiwicGFyc2luZ0ZsYWdzIiwiaW52YWxpZEF0IiwiY3JlYXRpb25EYXRhIiwibG9jYWxlRXJhcyIsImVyYXMiLCJfZXJhcyIsInNpbmNlIiwidW50aWwiLCJsb2NhbGVFcmFzUGFyc2UiLCJlcmFOYW1lIiwibmFycm93IiwibG9jYWxlRXJhc0NvbnZlcnRZZWFyIiwiZGlyIiwiZ2V0RXJhTmFtZSIsImdldEVyYU5hcnJvdyIsImdldEVyYUFiYnIiLCJnZXRFcmFZZWFyIiwiZXJhc05hbWVSZWdleCIsImNvbXB1dGVFcmFzUGFyc2UiLCJfZXJhc05hbWVSZWdleCIsIl9lcmFzUmVnZXgiLCJlcmFzQWJiclJlZ2V4IiwiX2VyYXNBYmJyUmVnZXgiLCJlcmFzTmFycm93UmVnZXgiLCJfZXJhc05hcnJvd1JlZ2V4IiwibWF0Y2hFcmFBYmJyIiwibWF0Y2hFcmFOYW1lIiwibWF0Y2hFcmFOYXJyb3ciLCJtYXRjaEVyYVllYXJPcmRpbmFsIiwiX2VyYVllYXJPcmRpbmFsUmVnZXgiLCJlcmFzTmFtZSIsImVyYXNBYmJyIiwiZXJhc05hcnJvdyIsImFiYnJQaWVjZXMiLCJuYW1lUGllY2VzIiwibmFycm93UGllY2VzIiwiYWRkV2Vla1llYXJGb3JtYXRUb2tlbiIsImdldHRlciIsImdldFNldFdlZWtZZWFyIiwiZ2V0U2V0V2Vla1llYXJIZWxwZXIiLCJnZXRTZXRJU09XZWVrWWVhciIsImdldElTT1dlZWtzSW5ZZWFyIiwiZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyIiwiZ2V0V2Vla3NJblllYXIiLCJ3ZWVrSW5mbyIsImdldFdlZWtzSW5XZWVrWWVhciIsIndlZWtzVGFyZ2V0Iiwic2V0V2Vla0FsbCIsImRheU9mWWVhckRhdGEiLCJnZXRTZXRRdWFydGVyIiwiZXJhc1BhcnNlIiwiZXJhWWVhck9yZGluYWxQYXJzZSIsImdldFNldERheU9mTW9udGgiLCJnZXRTZXREYXlPZlllYXIiLCJnZXRTZXRNaW51dGUiLCJnZXRTZXRNaWxsaXNlY29uZCIsImdldFNldFNlY29uZCIsInBhcnNlTXMiLCJnZXRab25lQWJiciIsImdldFpvbmVOYW1lIiwicHJvdG8iLCJjcmVhdGVVbml4IiwiY3JlYXRlSW5ab25lIiwicGFyc2Vab25lIiwicHJlUGFyc2VQb3N0Rm9ybWF0IiwiZm9yIiwiZXJhTmFycm93IiwiZXJhQWJiciIsImVyYVllYXIiLCJpc29XZWVrcyIsIndlZWtzSW5XZWVrWWVhciIsImlzb1dlZWtzSW5ZZWFyIiwiaXNvV2Vla3NJbklTT1dlZWtZZWFyIiwiaXNEU1QiLCJ6b25lQWJiciIsInpvbmVOYW1lIiwiaXNEU1RTaGlmdGVkIiwicHJvdG8kMSIsImdldCQxIiwiaW5kZXgiLCJmaWVsZCIsInNldHRlciIsImxpc3RNb250aHNJbXBsIiwib3V0IiwibGlzdFdlZWtkYXlzSW1wbCIsImxvY2FsZVNvcnRlZCIsInNoaWZ0IiwibGlzdE1vbnRocyIsImxpc3RNb250aHNTaG9ydCIsImxpc3RXZWVrZGF5cyIsImxpc3RXZWVrZGF5c1Nob3J0IiwibGlzdFdlZWtkYXlzTWluIiwiZmlyc3REYXlPZlllYXIiLCJmaXJzdERheU9mV2VlayIsImxhbmdEYXRhIiwibWF0aEFicyIsImFkZFN1YnRyYWN0JDEiLCJhZGQkMSIsInN1YnRyYWN0JDEiLCJhYnNDZWlsIiwiYnViYmxlIiwibW9udGhzRnJvbURheXMiLCJtb250aHNUb0RheXMiLCJkYXlzVG9Nb250aHMiLCJhcyIsIm1ha2VBcyIsImFsaWFzIiwiYXNNaWxsaXNlY29uZHMiLCJhc1NlY29uZHMiLCJhc01pbnV0ZXMiLCJhc0hvdXJzIiwiYXNEYXlzIiwiYXNXZWVrcyIsImFzTW9udGhzIiwiYXNRdWFydGVycyIsImFzWWVhcnMiLCJ2YWx1ZU9mJDEiLCJjbG9uZSQxIiwiZ2V0JDIiLCJtYWtlR2V0dGVyIiwidGhyZXNob2xkcyIsInN1YnN0aXR1dGVUaW1lQWdvIiwicmVsYXRpdmVUaW1lJDEiLCJwb3NOZWdEdXJhdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nIiwicm91bmRpbmdGdW5jdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCIsInRocmVzaG9sZCIsImxpbWl0IiwiYXJnV2l0aFN1ZmZpeCIsImFyZ1RocmVzaG9sZHMiLCJ3aXRoU3VmZml4IiwidGgiLCJhc3NpZ24iLCJhYnMkMSIsInRvSVNPU3RyaW5nJDEiLCJ0b3RhbFNpZ24iLCJ5bVNpZ24iLCJkYXlzU2lnbiIsImhtc1NpZ24iLCJ0b3RhbCIsInByb3RvJDIiLCJ0b0lzb1N0cmluZyIsInZlcnNpb24iLCJyZWxhdGl2ZVRpbWVSb3VuZGluZyIsInJlbGF0aXZlVGltZVRocmVzaG9sZCIsIkhUTUw1X0ZNVCIsIkRBVEVUSU1FX0xPQ0FMIiwiREFURVRJTUVfTE9DQUxfU0VDT05EUyIsIkRBVEVUSU1FX0xPQ0FMX01TIiwiVElNRSIsIlRJTUVfU0VDT05EUyIsIlRJTUVfTVMiLCJmYWN0b3J5Iiwicm9vdCIsIm1vbWVudCIsImNhY2hlZEd1ZXNzIiwiem9uZXMiLCJsaW5rcyIsImNvdW50cmllcyIsImd1ZXNzZXMiLCJsb2dFcnJvciIsIm1vbWVudFZlcnNpb24iLCJtYWpvciIsIm1pbm9yIiwiY2hhckNvZGVUb0ludCIsImNoYXJDb2RlIiwidW5wYWNrQmFzZTYwIiwid2hvbGUiLCJmcmFjdGlvbmFsIiwibXVsdGlwbGllciIsImNoYXJDb2RlQXQiLCJhcnJheVRvSW50IiwibWFwSW5kaWNlcyIsImluZGljZXMiLCJ1bnBhY2siLCJvZmZzZXRzIiwidW50aWxzIiwiSW5maW5pdHkiLCJpbnRUb1VudGlsIiwiYWJicnMiLCJwb3B1bGF0aW9uIiwiWm9uZSIsInBhY2tlZFN0cmluZyIsIl9zZXQiLCJDb3VudHJ5IiwiY291bnRyeV9uYW1lIiwiem9uZV9uYW1lcyIsIk9mZnNldEF0IiwiYXQiLCJ0aW1lU3RyaW5nIiwidG9UaW1lU3RyaW5nIiwiWm9uZVNjb3JlIiwib2Zmc2V0U2NvcmUiLCJhYmJyU2NvcmUiLCJmaW5kQ2hhbmdlIiwibG93IiwiaGlnaCIsIm1pZCIsInNvcnRab25lU2NvcmVzIiwibG9jYWxlQ29tcGFyZSIsImFkZFRvR3Vlc3NlcyIsImd1ZXNzZXNGb3JVc2VyT2Zmc2V0cyIsImd1ZXNzZXNPZmZzZXQiLCJvZmZzZXRzTGVuZ3RoIiwiZmlsdGVyZWRHdWVzc2VzIiwiY2hlY2tlZE9mZnNldHMiLCJyZWJ1aWxkR3Vlc3MiLCJpbnRsTmFtZSIsIkludGwiLCJEYXRlVGltZUZvcm1hdCIsInJlc29sdmVkT3B0aW9ucyIsInRpbWVab25lIiwibm9ybWFsaXplTmFtZSIsInpvbmVTY29yZSIsImNoYW5nZSIsIm5leHRPZmZzZXQiLCJzdGFydFllYXIiLCJsYXN0IiwibGFzdE9mZnNldCIsInVzZXJPZmZzZXRzIiwiem9uZVNjb3JlcyIsImdldFpvbmUiLCJzY29yZU9mZnNldEF0IiwiYWRkWm9uZSIsInBhY2tlZCIsIm5vcm1hbGl6ZWQiLCJjYWxsZXIiLCJsaW5rIiwiYWRkTGluayIsIm5vcm1hbDAiLCJub3JtYWwxIiwibmVlZHNPZmZzZXQiLCJpc1VuaXhUaW1lc3RhbXAiLCJtZXNzYWdlIiwidHoiLCJwYXJzZSIsInVucGFja2VkIiwiX2luZGV4IiwidGltZXN0YW1wIiwibnVtIiwibG8iLCJoaSIsImNsb3Nlc3QiLCJ6b25lX25hbWUiLCJjb3VudHJ5X2NvZGUiLCJvZmZzZXROZXh0Iiwib2Zmc2V0UHJldiIsInRhcmdldCIsIm1vdmVBbWJpZ3VvdXNGb3J3YXJkIiwibW92ZUludmFsaWRGb3J3YXJkIiwib2Zmc2V0QXQiLCJkYXRhVmVyc2lvbiIsIl96b25lcyIsIl9saW5rcyIsIl9uYW1lcyIsIl9jb3VudHJpZXMiLCJsb2FkIiwiY291bnRyeV96b25lcyIsImFkZENvdW50cmllcyIsInpvbmVFeGlzdHMiLCJkaWRTaG93RXJyb3IiLCJndWVzcyIsImlnbm9yZUNhY2hlIiwiem9uZXNGb3JDb3VudHJ5IiwiY291bnRyeSIsIndpdGhfb2Zmc2V0Iiwib2xkIiwiYWJicldyYXAiLCJfeiIsInJlc2V0Wm9uZVdyYXAiLCJkZWZhdWx0Wm9uZSIsInoiLCJzZXREZWZhdWx0IiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJ0cmFuc2xhdGlvbnMiLCJudW1iZXJzUGFzdCIsIm51bWJlcnNGdXR1cmUiLCJ0cmFuc2xhdGUiLCJ2ZXJiYWxOdW1iZXIiLCJsbCIsImxsbCIsImxsbGwiLCJwcm9jZXNzUmVsYXRpdmVUaW1lIiwibW9udGhzUGFyc2VFeGFjdCIsIndlZWtkYXlzUGFyc2VFeGFjdCIsImRlIiwiYWlycGxhbmUiLCJhcnJpdmFsIiwiYmFjayIsImJpa2VyZW50YWxzdGF0aW9uIiwiYnVzIiwiY2FuY2VsIiwiY3VycmVudHBvc2l0aW9uIiwiZGVsZXRlIiwiZGVwYXJ0dXJlIiwiZmF2b3VyaXRlIiwiZmVycnkiLCJvd25sb2NhdGlvbnMiLCJsb2FkaW5nIiwicmFpbCIsInN0cmVldCIsInN1YndheSIsInN0YXRpb24iLCJ0cmFtIiwidmVudWUiLCJ3aGVyZSIsInBsYWNlIiwiZW4iLCJiaWtlcGFyayIsImNhcnBhcmsiLCJwbGF0Zm9ybSIsInJlcXVpcmVkIiwidHJhY2siLCJmaSIsInZlaGljbGVyZW50YWxzdGF0aW9uIiwicGwiLCJzdiIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJBdXRvc3VnZ2VzdFBhdGNoIiwiQXV0b3N1Z2dlc3QiLCJwcm9wcyIsInN1cGVyIiwic2VsZiIsIm9uU3VnZ2VzdGlvblRvdWNoTW92ZSIsImp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24iLCJwcmVzc2VkU3VnZ2VzdGlvbiIsIk1vYmlsZVNlYXJjaCIsIl9pbnB1dFJlZiRjdXJyZW50IiwiYXBwRWxlbWVudCIsImNsb3NlSGFuZGxlIiwiY2xlYXJJbnB1dCIsInN1Z2dlc3Rpb25zIiwiaW5wdXRQcm9wcyIsImZldGNoRnVuY3Rpb24iLCJyZW5kZXJTdWdnZXN0aW9uIiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiYXJpYUxhYmVsIiwib25TdWdnZXN0aW9uU2VsZWN0ZWQiLCJjbGVhck9sZFNlYXJjaGVzIiwiZGlhbG9nSGVhZGVyVGV4dCIsImRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0IiwiZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dCIsImNsZWFySW5wdXRCdXR0b25UZXh0IiwiZm9jdXNJbnB1dCIsImNvbG9yIiwiaG92ZXJDb2xvciIsImFjY2Vzc2libGVQcmltYXJ5Q29sb3IiLCJzZWFyY2hPcGVuIiwiZm9udFdlaWdodHMiLCJzdHlsZXMiLCJzaG93U2Nyb2xsIiwibW9iaWxlU3R5bGVzIiwibW9iaWxlTm9TY3JvbGxTdHlsZXMiLCJpbnB1dElkIiwiX3VzZVN0YXRlMiIsInVzZVN0YXRlIiwiaXNEaWFsb2dPcGVuIiwic2V0RGlhbG9nT3BlbiIsImlucHV0UmVmIiwiUmVhY3QiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJSZWFjdE1vZGFsIiwic2V0QXBwRWxlbWVudCIsIm9uQ2xvc2UiLCJ1c2VDYWxsYmFjayIsIm9uU2VsZWN0IiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJ3aGljaCIsImtleUNvZGUiLCJwcmV2ZW50RGVmYXVsdCIsImdldFZhbHVlIiwicmVuZGVySXRlbSIsImNsYXNzTmFtZSIsImZvY3VzIiwiaXNPcGVuIiwib3ZlcmxheUNsYXNzTmFtZSIsIm9uQWZ0ZXJDbG9zZSIsInNob3VsZENsb3NlT25Fc2MiLCJtZWRpdW0iLCJodG1sRm9yIiwib25DbGljayIsIm9uS2V5RG93biIsInRhYkluZGV4IiwiSWNvbiIsImltZyIsImFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIiwib25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkIiwiZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrIiwic2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMiLCJoYXNWYWx1ZSIsImF1dG9Gb2N1cyIsInJlbmRlcklucHV0Q29tcG9uZW50IiwiRnJhZ21lbnQiLCJ0aGVtZSIsIkRpYWxvZ01vZGFsIiwiaXNNb2RhbE9wZW4iLCJoYW5kbGVDbG9zZSIsImhlYWRlclRleHQiLCJwcmltYXJ5QnV0dG9uVGV4dCIsInNlY29uZGFyeUJ1dHRvblRleHQiLCJwcmltYXJ5QnV0dG9uT25DbGljayIsInNlY29uZGFyeUJ1dHRvbk9uQ2xpY2siLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwiYXJyYXlPZiIsIm9iamVjdCIsInNoYXBlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJwbGFjZWhvbGRlciIsImJvb2wiLCJkZWZhdWx0UHJvcHMiLCJnIiwid2luZG93IiwiaWdub3JlIiwiaGVhZGVyIiwidG9wT25FbXB0eUhhc2giLCJzcGVlZCIsInNwZWVkQXNEdXJhdGlvbiIsImR1cmF0aW9uTWF4IiwiZHVyYXRpb25NaW4iLCJjbGlwIiwiZWFzaW5nIiwiY3VzdG9tRWFzaW5nIiwidXBkYXRlVVJMIiwicG9wc3RhdGUiLCJlbWl0RXZlbnRzIiwiSW52YWxpZENoYXJhY3RlckVycm9yIiwiYm9keSIsInNjcm9sbEhlaWdodCIsImRvY3VtZW50RWxlbWVudCIsIm9mZnNldEhlaWdodCIsImNsaWVudEhlaWdodCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJvZmZzZXRUb3AiLCJhY3RpdmVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwib3V0bGluZSIsInNjcm9sbFRvIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiZGV0YWlsIiwidG9nZ2xlIiwiZGlzcGF0Y2hFdmVudCIsImNhbmNlbFNjcm9sbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiYW5pbWF0ZVNjcm9sbCIsInRhZ05hbWUiLCJwYWdlWU9mZnNldCIsInF1ZXJ5U2VsZWN0b3IiLCJPIiwib2Zmc2V0UGFyZW50IiwiaW5uZXJIZWlnaHQiLCJTIiwiXyIsIkkiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwdXNoU3RhdGUiLCJzbW9vdGhTY3JvbGwiLCJKU09OIiwic3RyaW5naWZ5IiwidGl0bGUiLCJtYXRjaE1lZGlhIiwiZGVmYXVsdFByZXZlbnRlZCIsImJ1dHRvbiIsIm1ldGFLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJob3N0bmFtZSIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJocmVmIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaGFzaCIsInJlcGxhY2VTdGF0ZSIsInN0YXRlIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9fY3JlYXRlQmluZGluZyIsImNyZWF0ZSIsIl9fZXhwb3J0U3RhciIsInVzZUFycm93TmF2aWdhdGlvbiIsImxpc3RJdGVtcyIsIm9uQXJyb3dVcE9yRG93biIsInNlbGVjdGVkSW5kZXgiLCJ1c2VEZWJvdW5jZSIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJ1c2VFbGVtZW50U2l6ZSIsIndpZHRoIiwiY2xpZW50V2lkdGgiLCJ1c2VJbnRlcnNlY3Rpb25PYnNlcnZlciIsImlzSW50ZXJzZWN0aW5nIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiY29udGFpbmVyUmVmIiwiaXNWaXNpYmxlIiwidXNlSXNCcmVha3BvaW50IiwieHMiLCJtb2JpbGVTbWFsbCIsIm1vYmlsZSIsInRhYmxldCIsInRhYmxldExhcmdlIiwiZGVza3RvcFNtYWxsIiwiZGVza3RvcCIsImRlc2t0b3BMYXJnZSIsImlubmVyV2lkdGgiLCJ1c2VPblJlc2l6ZSIsInVzZUlzTG9hZGluZ0FmdGVyRXJyb3IiLCJ1c2VJc01vYmlsZSIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VPbkxvc2VGb2N1c1dpdGhpbiIsIndhdGNoIiwicGFzc2l2ZSIsInVzZU9uV2luZG93Rm9jdXMiLCJ2aXNpYmlsaXR5U3RhdGUiLCJ1c2VPdXRzaWRlUmVhY3RlciIsImNvbnRhaW5zIiwidXNlUnVuQWZ0ZXJVcGRhdGUiLCJ1c2VTY3JvbGxMb2NrIiwibG9jayIsInNjcm9sbFkiLCJ0b3AiLCJ1bmxvY2siLCJfX2ltcG9ydERlZmF1bHQiLCJfX2VzTW9kdWxlIiwidXNlU21vb3RoU2Nyb2xsIiwiZ2xvYmFsVGhpcyIsImluaXQiLCJmYWxsYmFja0xuZyIsImRlZmF1bHROUyIsImludGVycG9sYXRpb24iLCJlc2NhcGVWYWx1ZSIsIkxvYWRpbmciLCJjaGlsZHJlbiIsImkxOG5leHQiLCJub2RlIiwiZ2V0UGxhdGZvcm0iLCJHVEZTIiwiX2FkZGVuZHVtJEdURlMiLCJtb2RlcyIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfZ2V0TmFtZUxhYmVsMiIsIl9pdGVtJHByb3BlcnRpZXMkYWRkZSIsIl9pdGVtJHByb3BlcnRpZXMiLCJfaXRlbSRwcm9wZXJ0aWVzMiIsInRhaWwxIiwidGFpbDIiLCJuYW1lMSIsIm5hbWUyIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lIiwiYXJyaXZlQnkiLCJnZXRMYWJlbCIsIkRUQXV0b3N1Z2dlc3QiLCJDb21wb25lbnQiLCJuZXdWYWx1ZSIsIm5ld1N0YXRlIiwiZklucHV0IiwicmVuZGVyTW9iaWxlU2VhcmNoIiwiaXNNb2JpbGUiLCJlZGl0aW5nIiwidmFsaWQiLCJ0eXBpbmdUaW1lciIsInRpbWVyIiwic2V0U3RhdGUiLCJ0eXBpbmciLCJvd25QbGFjZXMiLCJwZW5kaW5nU2VsZWN0aW9uIiwic3VnZ2VzdGlvbkluZGV4Iiwic2VsZWN0aW9uRG9uZSIsInN1Z2dlc3Rpb25WYWx1ZSIsImJsdXIiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsImlzRW1iZWRkZWQiLCJjbG9zZU1vYmlsZVNlYXJjaCIsInByZXZTdGF0ZSIsImNoZWNrUGVuZGluZ1NlbGVjdGlvbiIsIl9yZWYyIiwiY2xlYW5FeGVjdXRlZCIsIm5ld1RhcmdldHMiLCJ1c2VBbGwiLCJpc0VtcHR5IiwiaXNMb2NhdGlvblNlYXJjaCIsImV4ZWN1dGVTZWFyY2giLCJzZWFyY2hSZXN1bHQiLCJ0cmFuc2xhdGVkIiwib25DbGVhciIsImlucHV0VmFsdWUiLCJjbGVhckxvY2F0aW9uVGV4dCIsInN0YXRlS2V5RG93biIsImF1dG9zdWdnZXN0Iiwic3RvcmVSZWYiLCJjb250ZW50IiwiU3VnZ2VzdGlvbkl0ZW0iLCJhcmlhRmF2b3VyaXRlU3RyaW5nIiwiZmlsbElucHV0IiwiZ2V0QXV0b1N1Z2dlc3RJY29ucyIsIm1vZGVJY29uQ29sb3JzIiwibW9kZVNldCIsIm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCIsImlucHV0Q2xpY2tlZCIsImZpcnN0U3VnZ2VzdGlvbiIsIlNldCIsIl90aGlzJHByb3BzJHNlYXJjaENvbiIsImNsZWFyRnV0dXJlUm91dGVzIiwiYWRkUmVzb3VyY2VCdW5kbGUiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0UHJvcHMiLCJuZXh0U3RhdGUiLCJpc0VxdWFsIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY2hhbmdlTGFuZ3VhZ2UiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsInJlbmRlciIsIl90aGlzJHN0YXRlIiwidHJhbnNsYXRlZFBsYWNlaG9sZGVyIiwidGhpbiIsImlucHV0Q2xhc3NOYW1lIiwia2V5RG93biIsImFyaWFCYXJJZCIsIlNlYXJjaEJhcklkIiwiYXJpYVJlcXVpcmVkVGV4dCIsImFyaWFMYWJlbEluc3RydWN0aW9ucyIsIm1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQiLCJhcmlhTGFiZWxUZXh0IiwiYXJpYVN1Z2dlc3Rpb25MZW4iLCJjb3VudCIsImFyaWFDdXJyZW50U3VnZ2VzdGlvbiIsInN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50Iiwic2VsZWN0aW9uIiwicm9sZSIsImlzT3JpZ2luRGVzdGluYXRpb25PclZpYXBvaW50IiwibW9iaWxlTGFiZWwiLCJvblNlbGVjdGVkIiwiY3giLCJpY29uIiwib25Gb2N1cyIsImhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbiIsImNsZWFyQnV0dG9uIiwic3RvcmVJbnB1dFJlZmVyZW5jZSIsInJvdXRlc1ByZWZpeCIsInN0b3BzUHJlZml4Iiwib2JqZWN0T2YiLCJEVEF1dG9zdWdnZXN0V2l0aFNj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
14
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hcnJheUxpa2VUb0FycmF5LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXJyYXlXaXRoSG9sZXMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vbm9uSXRlcmFibGVSZXN0LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaXMtZHVwbGljYXRlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWZpbHRlci1tYXRjaGluZy10by1pbnB1dC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZXhlY3V0ZS1zZWFyY2gtaW1taWRpYXRlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC10aW1lem9uZS9tb21lbnQtdGltZXpvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50LXRpbWV6b25lL2luZGV4LmpzIiwiLi4vc3JjL2hlbHBlcnMvdHJhbnNsYXRpb25zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vYmlsZVNlYXJjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaHNsLWZpL2hvb2tzL2xpYi9pbmRleC5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbC9pbmRleC5qcyIsIi4uL3NyYy9oZWxwZXJzL3dpdGhTY3JvbGxMb2NrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59IiwiaW1wb3J0IF90eXBlb2YgZnJvbSBcIi4vdHlwZW9mLmpzXCI7XG5pbXBvcnQgdG9QcmltaXRpdmUgZnJvbSBcIi4vdG9QcmltaXRpdmUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuICB2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuICByZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IFN0cmluZyhpKTtcbn0iLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiBvYmo7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHtcbiAgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7XG4gIGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgYXJyMltpXSA9IGFycltpXTtcbiAgcmV0dXJuIGFycjI7XG59IiwiaW1wb3J0IGFycmF5V2l0aEhvbGVzIGZyb20gXCIuL2FycmF5V2l0aEhvbGVzLmpzXCI7XG5pbXBvcnQgaXRlcmFibGVUb0FycmF5TGltaXQgZnJvbSBcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIjtcbmltcG9ydCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSBmcm9tIFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiO1xuaW1wb3J0IG5vbkl0ZXJhYmxlUmVzdCBmcm9tIFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkge1xuICByZXR1cm4gYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IHVuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgbm9uSXRlcmFibGVSZXN0KCk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBsKSB7XG4gIHZhciB0ID0gbnVsbCA9PSByID8gbnVsbCA6IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByW1N5bWJvbC5pdGVyYXRvcl0gfHwgcltcIkBAaXRlcmF0b3JcIl07XG4gIGlmIChudWxsICE9IHQpIHtcbiAgICB2YXIgZSxcbiAgICAgIG4sXG4gICAgICBpLFxuICAgICAgdSxcbiAgICAgIGEgPSBbXSxcbiAgICAgIGYgPSAhMCxcbiAgICAgIG8gPSAhMTtcbiAgICB0cnkge1xuICAgICAgaWYgKGkgPSAodCA9IHQuY2FsbChyKSkubmV4dCwgMCA9PT0gbCkge1xuICAgICAgICBpZiAoT2JqZWN0KHQpICE9PSB0KSByZXR1cm47XG4gICAgICAgIGYgPSAhMTtcbiAgICAgIH0gZWxzZSBmb3IgKDsgIShmID0gKGUgPSBpLmNhbGwodCkpLmRvbmUpICYmIChhLnB1c2goZS52YWx1ZSksIGEubGVuZ3RoICE9PSBsKTsgZiA9ICEwKTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICBvID0gITAsIG4gPSByO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWYgJiYgbnVsbCAhPSB0W1wicmV0dXJuXCJdICYmICh1ID0gdFtcInJldHVyblwiXSgpLCBPYmplY3QodSkgIT09IHUpKSByZXR1cm47XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAobykgdGhyb3cgbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH1cbn0iLCJpbXBvcnQgYXJyYXlMaWtlVG9BcnJheSBmcm9tIFwiLi9hcnJheUxpa2VUb0FycmF5LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gIGlmICghbykgcmV0dXJuO1xuICBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcbiAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7XG4gIGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7XG4gIHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG59IiwiLyoqXG4gKiAgYWNjZXB0IGVxdWFsaXR5IG9mIG5vbiBudWxsaXNoIHZhbHVlc1xuICpcbiAqIEBuYW1lIHRydUVxXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gdmFsMSBGaXJzdCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHBhcmFtMiBTZWNvbmQgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC50cnVFcSgnMicsICcyJyk7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRydUVxKHZhbDEsIHZhbDIpIHtcbiAgcmV0dXJuIHZhbDEgJiYgdmFsMiAmJiB2YWwxID09PSB2YWwyO1xufVxuIiwiaW1wb3J0IHRydUVxIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC10cnUtZXEnO1xuLyoqXG4gKiBDaGVja3MgdGhhdCBpcyBpdGVtcyBkdXBsaWNhdGVcbiAqXG4gKiBAbmFtZSBpc0R1cGxpY2F0ZVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0xIE9iamVjdCBjb250YWluaW5nIGZvbGxvd2luZyBhdHRyaWJ1dGVzOlxuICoge1xuICogIHByb3BlcnRpZXMge1xuICogICAgICBndGZzSWQ6IFN0cmluZ1xuICogICAgICBnaWQ6IFN0cmluZyBmcm9tIGdlb2NvZGVyXG4gKiAgICAgIG5hbWU6IFN0cmluZ1xuICogICAgICBsYWJlbDogU3RyaW5nXG4gKiAgICAgICBhZGRyZXNzOiBTdHJpbmdcbiAqICAgICAgZ2VvbWV0cnkge1xuICogICAgICAgICBjb29yZGluYXRlcyBbTnVtYmVyIGxhdCwgTnVtYmVyIGxvbl1cbiAqICAgICAgfVxuICogIH1cbiAqIH1cbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMiBPYmplY3Qgd2l0aCBzYW1lIGF0dHJpYnV0ZXMgYXMgaXRlbTFcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtdXRpbC5pc0R1cGxpY2F0ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cblxuY29uc3QgZ3Rmc1N0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbicsICdmYXZvdXJpdGVTdG9wJywgJ2Zhdm91cml0ZVN0YXRpb24nXTtcbmNvbnN0IHZlaGljbGVSZW50YWxMYXllcnMgPSBbJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJywgJ2Jpa2VzdGF0aW9uJ107XG5cbmZ1bmN0aW9uIGxhYmVsSWRUb0dpZChpZCkge1xuICBpZiAoIWlkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IHBhcnRzID0gaWQuc3BsaXQoJzonKTtcbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gYGNpdHliaWtlcyR7cGFydHNbMF19OmJpa2VzdGF0aW9uOiR7cGFydHNbMV19YDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNEdXBsaWNhdGUoaXRlbTEsIGl0ZW0yKSB7XG4gIGNvbnN0IHByb3BzMSA9IGl0ZW0xLnByb3BlcnRpZXM7XG4gIGNvbnN0IHByb3BzMiA9IGl0ZW0yLnByb3BlcnRpZXM7XG5cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiYgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGNvbnN0IG8xID0gcHJvcHMxLm9yaWdpbjtcbiAgICBjb25zdCBkMSA9IHByb3BzMS5kZXN0aW5hdGlvbjtcbiAgICBjb25zdCBvMiA9IHByb3BzMi5vcmlnaW47XG4gICAgY29uc3QgZDIgPSBwcm9wczIuZGVzdGluYXRpb247XG5cbiAgICBjb25zdCBuYW1lMSA9IGAke28xLm5hbWV9Ly8ke28xLmxvY2FsaXR5fS8vJHtkMS5uYW1lfS8vJHtkMS5sb2NhbGl0eX1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxpdHl9Ly8ke2QyLm5hbWV9Ly8ke2QyLmxvY2FsaXR5fWA7XG5cbiAgICByZXR1cm4gbmFtZTEgPT09IG5hbWUyO1xuICB9XG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKFxuICAgIHZlaGljbGVSZW50YWxMYXllcnMuaW5jbHVkZXMocHJvcHMxLmxheWVyKSAmJlxuICAgIHZlaGljbGVSZW50YWxMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKVxuICApIHtcbiAgICBjb25zdCBpZDEgPSBwcm9wczEuZ2lkIHx8IGxhYmVsSWRUb0dpZChwcm9wczEubGFiZWxJZCk7XG4gICAgY29uc3QgaWQyID0gcHJvcHMyLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMyLmxhYmVsSWQpO1xuICAgIHJldHVybiBpZDEgPT09IGlkMjtcbiAgfVxuICBpZiAocHJvcHMxLmd0ZnNJZCAmJiBwcm9wczIuZ3Rmc0lkKSB7XG4gICAgcmV0dXJuIHByb3BzMS5ndGZzSWQgPT09IHByb3BzMi5ndGZzSWQ7XG4gIH1cbiAgaWYgKFxuICAgIGd0ZnNTdG9wTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczIubGF5ZXIpICYmXG4gICAgcHJvcHMxLmdpZCAmJlxuICAgIHByb3BzMi5naWRcbiAgKSB7XG4gICAgcmV0dXJuIHByb3BzMS5naWQgPT09IHByb3BzMi5naWQ7XG4gIH1cblxuICBjb25zdCBwMSA9IGl0ZW0xICYmIGl0ZW0xLmdlb21ldHJ5ID8gaXRlbTEuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHAyID0gaXRlbTIgJiYgaXRlbTIuZ2VvbWV0cnkgPyBpdGVtMi5nZW9tZXRyeS5jb29yZGluYXRlcyA6IHVuZGVmaW5lZDtcblxuICBpZiAocDEgJiYgcDIpIHtcbiAgICAvLyBib3RoIGhhdmUgZ2VvbWV0cnlcbiAgICBpZiAoTWF0aC5hYnMocDFbMF0gLSBwMlswXSkgPCAxZS02ICYmIE1hdGguYWJzKHAxWzFdIC0gcDJbMV0pIDwgMWUtNikge1xuICAgICAgLy8gbG9jYXRpb24gbWF0Y2ggaXMgbm90IGVub3VnaC4gUmVxdWlyZSBhIGNvbW1vbiBwcm9wZXJ0eVxuICAgICAgaWYgKFxuICAgICAgICB0cnVFcShwcm9wczEubmFtZSwgcHJvcHMyLm5hbWUpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmFkZHJlc3MpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5hZGRyZXNzLCBwcm9wczIubGFiZWwpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmFkZHJlc3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBpc1N0cmluZyBmcm9tICdsb2Rhc2gvaXNTdHJpbmcnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoL29yZGVyQnknO1xuaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNEdXBsaWNhdGUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZSc7XG5cbmNvbnN0IG5vcm1hbGl6ZSA9IHN0ciA9PiB7XG4gIGlmICghaXNTdHJpbmcoc3RyKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIExheWVyVHlwZSBkZXBpY3RzIHRoZSB0eXBlIG9mIHRoZSBwb2ludC1vZi1pbnRlcmVzdC5cbiAqL1xuY29uc3QgTGF5ZXJUeXBlID0ge1xuICBBZGRyZXNzOiAnYWRkcmVzcycsXG4gIEJhY2s6ICdiYWNrJyxcbiAgQ3VycmVudFBvc2l0aW9uOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgRmF2b3VyaXRlU3RvcDogJ2Zhdm91cml0ZVN0b3AnLFxuICBGYXZvdXJpdGVTdGF0aW9uOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gIEZhdm91cml0ZVBsYWNlOiAnZmF2b3VyaXRlUGxhY2UnLFxuICBGYXZvdXJpdGVSb3V0ZTogJ2Zhdm91cml0ZVJvdXRlJyxcbiAgRmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb246ICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbicsXG4gIEZ1dHVyZVJvdXRlOiAnZnV0dXJlUm91dGUnLFxuICBTdGF0aW9uOiAnc3RhdGlvbicsXG4gIFNlbGVjdEZyb21NYXA6ICdzZWxlY3RGcm9tTWFwJyxcbiAgU2VsZWN0RnJvbU93bkxvY2F0aW9uczogJ293bkxvY2F0aW9ucycsXG4gIFN0b3A6ICdzdG9wJyxcbiAgU3RyZWV0OiAnc3RyZWV0JyxcbiAgVmVudWU6ICd2ZW51ZScsXG4gIFZlaGljbGVSZW50YWxTdGF0aW9uOiAnYmlrZXN0YXRpb24nLFxuICBDYXJQYXJrOiAnY2FycGFyaycsXG4gIEJpa2VQYXJrOiAnYmlrZXBhcmsnLFxufTtcbmV4cG9ydCBjb25zdCBpc1N0b3AgPSAoeyBsYXllciwgdHlwZSB9KSA9PlxuICBsYXllciA9PT0gJ3N0b3AnIHx8XG4gIGxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgdHlwZSA9PT0gJ3N0b3AnIHx8XG4gIHR5cGUgPT09ICdmYXZvdXJpdGVTdG9wJztcblxuY29uc3QgREVGQVVMVF9ST1VURVNfUFJFRklYID0gJ2xpbmphdCc7XG5jb25zdCBERUZBVUxUX1NUT1BTX1BSRUZJWCA9ICdweXNha2l0JztcblxuZXhwb3J0IGNvbnN0IG1hcFJvdXRlID0gKGl0ZW0sIHBhdGhPcHRzKSA9PiB7XG4gIGlmIChpdGVtID09PSBudWxsIHx8IGl0ZW0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgb3B0cyA9IHBhdGhPcHRzIHx8IHt9O1xuXG4gIGNvbnN0IHJvdXRlc1ByZWZpeCA9IG9wdHMucm91dGVzUHJlZml4IHx8IERFRkFVTFRfUk9VVEVTX1BSRUZJWDtcbiAgY29uc3Qgc3RvcHNQcmVmaXggPSBvcHRzLnN0b3BzUHJlZml4IHx8IERFRkFVTFRfU1RPUFNfUFJFRklYO1xuXG4gIGNvbnN0IGxpbmsgPSBgLyR7cm91dGVzUHJlZml4fS8ke2l0ZW0uZ3Rmc0lkfS8ke3N0b3BzUHJlZml4fWA7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1JvdXRlJyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAuLi5pdGVtLFxuICAgICAgbGF5ZXI6IGByb3V0ZS0ke2l0ZW0ubW9kZX1gLFxuICAgICAgbGluayxcbiAgICB9LFxuICAgIGdlb21ldHJ5OiB7XG4gICAgICBjb29yZGluYXRlczogbnVsbCxcbiAgICB9LFxuICB9O1xufTtcblxuLyoqXG4gKiBUcmllcyB0byBtYXRjaCB0aGUgZ2l2ZW4gc2VhcmNoIHRlcm0gYWdhaW5zIHRoZSBjb2xsZWN0aW9uIG9mIHByb3BlcnRpZXNcbiAqIGZvciBhIGdlb2NvZGluZyByZXN1bHQuIFRoZSBiZXN0IG1hdGNoIHdpbGwgYmUgcmV0dXJuZWQgKG1pbjogMCwgbWF4OiAxLjUpLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBub3JtYWxpemVkVGVybSB0aGUgbm9ybWFsaXplZCBzZWFyY2ggdGVybS5cbiAqIEBwYXJhbSB7Kn0gcmVzdWx0UHJvcGVydGllcyB0aGUgZ2VvY29kaW5nIHJlc3VsdCdzIHByb3BlcnR5IGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBtYXRjaCA9IChub3JtYWxpemVkVGVybSwgcmVzdWx0UHJvcGVydGllcykgPT4ge1xuICBpZiAoIWlzU3RyaW5nKG5vcm1hbGl6ZWRUZXJtKSB8fCBub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGNvbnN0IG1hdGNoUHJvcHMgPSBbJ25hbWUnLCAnbGFiZWwnLCAnYWRkcmVzcycsICdzaG9ydE5hbWUnXTtcbiAgcmV0dXJuIG1hdGNoUHJvcHNcbiAgICAubWFwKG5hbWUgPT4gcmVzdWx0UHJvcGVydGllc1tuYW1lXSlcbiAgICAuZmlsdGVyKHZhbHVlID0+IGlzU3RyaW5nKHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwKVxuICAgIC5tYXAodmFsdWUgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gbm9ybWFsaXplKHZhbHVlKTtcbiAgICAgIGlmIChub3JtYWxpemVkVmFsdWUuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDApIHtcbiAgICAgICAgLy8gZnVsbCBtYXRjaCBhdCBzdGFydC4gUmV0dXJuIG1heCByZXN1bHQgd2hlbiBtYXRjaCBpcyBmdWxsLCBub3Qgb25seSBwYXJ0aWFsXG4gICAgICAgIHJldHVybiAwLjUgKyBub3JtYWxpemVkVGVybS5sZW5ndGggLyBub3JtYWxpemVkVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuICAgICAgLy8gYmVjYXVzZSBvZiBmaWx0ZXJtYXRjaGluZ3RvaW5wdXQsIHdlIGtub3cgdGhhdCBtYXRjaCBvY2N1cnJlZCBzb21ld2hlcmVcbiAgICAgIC8vIGRvbid0IHJ1biBmaWx0ZXJtYXRjaGluZyBhZ2FpbiBidXQgZXN0aW1hdGUgcm91Z2hseTpcbiAgICAgIC8vIHRoZSBsb25nZXIgdGhlIG1hdGNoaW5nIHN0cmluZywgdGhlIGJldHRlciBjb25maWRlbmNlLCBtYXggYmVpbmcgMC41XG4gICAgICByZXR1cm4gKDAuNSAqIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCkgLyAobm9ybWFsaXplZFRlcm0ubGVuZ3RoICsgMSk7XG4gICAgfSlcbiAgICAucmVkdWNlKFxuICAgICAgKHByZXZpb3VzLCBjdXJyZW50KSA9PiAoY3VycmVudCA+IHByZXZpb3VzID8gY3VycmVudCA6IHByZXZpb3VzKSxcbiAgICAgIDAsXG4gICAgKTtcbn07XG5cbi8qKlxuICogUmFua3MgdGhlIHJlc3VsdCBiYXNlZCBvbiBpdHMgbGF5ZXIgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxheWVyIHRoZSBsYXllciBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgdGhlIHNvdXJjZSBwcm9wZXJ0eS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldExheWVyUmFuayA9IChsYXllciwgc291cmNlKSA9PiB7XG4gIHN3aXRjaCAobGF5ZXIpIHtcbiAgICBjYXNlIExheWVyVHlwZS5DdXJyZW50UG9zaXRpb246XG4gICAgICByZXR1cm4gMTtcbiAgICBjYXNlIExheWVyVHlwZS5CYWNrOlxuICAgICAgcmV0dXJuIDAuOTtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tTWFwOlxuICAgICAgcmV0dXJuIDAuODtcbiAgICBjYXNlIExheWVyVHlwZS5TZWxlY3RGcm9tT3duTG9jYXRpb25zOlxuICAgICAgcmV0dXJuIDAuNzk7XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RhdGlvbjpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVQbGFjZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdG9wOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVJvdXRlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuNDU7XG4gICAgY2FzZSBMYXllclR5cGUuRnV0dXJlUm91dGU6XG4gICAgICByZXR1cm4gMC40NDtcbiAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICBpZiAoaXNTdHJpbmcoc291cmNlKSAmJiBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAwLjQzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIDAuNDI7XG4gICAgfVxuICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgIHJldHVybiAwLjM2O1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyB2ZW51ZSwgYWRkcmVzcywgc3RyZWV0LCByb3V0ZS14eHhcbiAgICAgIHJldHVybiAwLjQxO1xuICB9XG59O1xuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzb3J0IHRoZSByZXN1bHRzLiBPcmRlcnMgYXMgZm9sbG93czpcbiAqICAtIGN1cnJlbnQgcG9zaXRpb24gZmlyc3QgZm9yIGFuIGVtcHR5IHNlYXJjaFxuICogIC0gbWF0Y2hpbmcgcm91dGVzIGZpcnN0XG4gKiAgLSBvdGhlcndpc2UgYnkgY29uZmlkZW5jZSwgZXhjZXB0IHRoYXQ6XG4gKiAgICAtIGJvb3N0IHdlbGwgbWF0Y2hpbmcgc3RhdGlvbnMgKGVzcGVjaWFsbHkgZnJvbSBHVEZTKVxuICogICAgLSByYW5rIHN0b3BzIGxvd2VyIGFzIHRoZXkgdGVuZCB0byBvY2N1cHkgbW9zdCBvZiB0aGUgc2VhcmNoIHJlc3VsdHNcbiAqICAtIGl0ZW1zIHdpdGggbm8gY29uZmlkZW5jZSAob2xkIHNlYXJjaGVzIGFuZCBmYXZvcml0ZXMpOlxuICogICAgLSByYW5rIGZhdm91cml0ZXMgYmV0dGVyIHRoYW4gb3JkaW5hcnkgb2xkIHNlYXJjaGVzXG4gKiAgICAtIHJhbmsgZnVsbCBtYXRjaCBiZXR0ZXIgdGhhbiBwYXJ0aWFsIG1hdGNoXG4gKiAgICAtIHJhbmsgbWF0Y2ggYXQgbWlkZGxlIHdvcmQgbG93ZXIgdGhhbiBtYXRjaCBhdCB0aGUgYmVnaW5uaW5nXG4gKiAgICAtIHJhbmsgYmlrZSByZW50YWwgc3RhdGlvbnMgbG93ZXJcbiAqIEBwYXJhbSB7KltdfSByZXN1bHRzIFRoZSBzZWFyY2ggcmVzdWx0cyB0aGF0IHdlcmUgcmVjZWl2ZWRcbiAqIEBwYXJhbSB7U3RyaW5nfSB0ZXJtIFRoZSBzZWFyY2ggdGVybSB0aGF0IHdhcyB1c2VkXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0U2VhcmNoUmVzdWx0cyA9IChsaW5lUmVnZXhwLCByZXN1bHRzLCB0ZXJtID0gJycpID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cbiAgY29uc3QgaXNMaW5lSWRlbnRpZmllciA9IHZhbHVlID0+XG4gICAgaXNTdHJpbmcodmFsdWUpICYmIGxpbmVSZWdleHAgJiYgbGluZVJlZ2V4cC50ZXN0KHZhbHVlKTtcblxuICBjb25zdCBub3JtYWxpemVkVGVybSA9IG5vcm1hbGl6ZSh0ZXJtKTtcbiAgY29uc3QgaXNMaW5lU2VhcmNoID0gaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemVkVGVybSk7XG5cbiAgY29uc3Qgb3JkZXJlZFJlc3VsdHMgPSBvcmRlckJ5KFxuICAgIHJlc3VsdHMsXG4gICAgW1xuICAgICAgLy8gcmFuayBtYXRjaGluZyByb3V0ZXMgYmVzdFxuICAgICAgcmVzdWx0ID0+XG4gICAgICAgIGlzTGluZVNlYXJjaCAmJlxuICAgICAgICBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpKSAmJlxuICAgICAgICBub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMFxuICAgICAgICAgID8gMVxuICAgICAgICAgIDogMCxcblxuICAgICAgcmVzdWx0ID0+IHtcbiAgICAgICAgY29uc3QgeyBjb25maWRlbmNlLCBsYXllciwgc291cmNlIH0gPSByZXN1bHQucHJvcGVydGllcztcbiAgICAgICAgaWYgKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIC8vIERvaW5nIHNlYXJjaCB3aXRoIGVtcHR5IHN0cmluZy5cbiAgICAgICAgICAvLyBObyBjb25maWRlbmNlIHRvIG1hdGNoLCBzbyB1c2UgcmFua2VkIG9sZCBzZWFyY2hlcyBhbmQgZmF2b3VyaXRlc1xuICAgICAgICAgIHJldHVybiBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtdXN0IGhhbmRsZSBhIG1peHVwIG9mIGdlb2NvZGVyIHNlYXJjaGVzIGFuZCBpdGVtcyBhYm92ZVxuICAgICAgICAvLyBOb3JtYWwgY29uZmlkZW5jZSByYW5nZSBmcm9tIGdlb2NvZGVyIGlzIGFib3V0IDAuMyAuLiAxXG4gICAgICAgIGlmICghY29uZmlkZW5jZSkge1xuICAgICAgICAgIC8vIG5vdCBmcm9tIGdlb2NvZGVyLCBlc3RpbWF0ZSBjb25maWRlbmNlIG91cnNlbHZlc1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBnZXRMYXllclJhbmsobGF5ZXIsIHNvdXJjZSkgK1xuICAgICAgICAgICAgbWF0Y2gobm9ybWFsaXplZFRlcm0sIHJlc3VsdC5wcm9wZXJ0aWVzKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2VvY29kZWQgaXRlbXMgd2l0aCBjb25maWRlbmNlLCBqdXN0IGFkanVzdCBhIGxpdHRsZVxuICAgICAgICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgICAgICAgY29uc3QgYm9vc3QgPSBzb3VyY2UuaW5kZXhPZignZ3RmcycpID09PSAwID8gMC4wMiA6IDAuMDE7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSArIGJvb3N0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkNhclBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuVmVoaWNsZVJlbnRhbFN0YXRpb246XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDQ7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIF0sXG4gICAgWydkZXNjJywgJ2Rlc2MnXSxcbiAgKTtcblxuICByZXR1cm4gdW5pcVdpdGgob3JkZXJlZFJlc3VsdHMsIGlzRHVwbGljYXRlKTtcbn07XG5cbi8qKlxuICogUGFyc2VzIHN0b3AncyBuYW1lIHdpdGhvdXQgc3RvcCBjb2RlIGZyb20gYSBzdG9wIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYWJlbCBzdG9wJ3MgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0b3BDb2RlIHN0b3AgY29kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFN0b3BOYW1lID0gKG5hbWUsIHN0b3BDb2RlKSA9PiB7XG4gIGlmIChcbiAgICBzdG9wQ29kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgc3RvcENvZGUgIT09IG51bGwgJiZcbiAgICBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAhPT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIG5hbWUuc3Vic3RyaW5nKDAsIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpIC0gMSk7XG4gIH1cbiAgcmV0dXJuIG5hbWU7XG59O1xuIiwiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGZpbHRlcnMgbGlzdCBtYXRjaGluZyB0byBpbnB1dC5cbiAqXG4gKiBAbmFtZSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXRcbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgTGlzdCBjb250YWluaW4gb2JqZWN0cyBlLmcoICB7XG4gKiAgICAgICAgIHR5cGU6ICdGZWF0dXJlJ1xuICogICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gKiAgICAgICAgICAgbGFiZWw6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICAgIGxheWVyOiAnYWRkcmVzcycsXG4gKiAgICAgICAgICAgbmFtZTogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIGdlb21ldHJ5OiB7IGNvb3JkaW5hdGVzOiBbbG9uLCBsYXRdIH0sXG4gKiAgICAgICB9LClcbiAqIEBwYXJhbSB7U3RyaW5nfSBJbnB1dCBJbnB1dCBnaXZlbiBmb3IgZmlsdGVyaW5nIHRoZSBsaXN0XG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgTGlzdCBvZiBmaWVsZHMgdGhhdCBsaXN0IGlzIGZpbHRlcmVkIGJ5IGUuZyAoW3Byb3BlcnRpZXMubGFiZWwsIHByb3BlcnRpZXMubmFtZV0pXG4gKiBAcmV0dXJucyB7QXJyYXl9IEZpbHRlcmVkIEFycmF5LlxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuZmlsdGVyTWF0Y2hpbmdUb0lucHV0KFt7dHlwZTogZmVhdHVyZSwgcHJvcGVydGllcyB7IC4uLiBuYW1lOiB0ZXN0YWRkcmVzczQgfSAuLi4gfV0sICd0ZXN0YWRkcmVzczQnLCAncHJvcGVydGllcy5uYW1lJyk7XG4gKiAvLz0gTGlzdCBjb250YWluaW5nIG9iamVjdCB3aXRoIGdpdmVuIG5hbWUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbHRlck1hdGNoaW5nVG9JbnB1dChsaXN0LCBJbnB1dCwgZmllbGRzKSB7XG4gIGlmICh0eXBlb2YgSW5wdXQgPT09ICdzdHJpbmcnICYmIElucHV0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBpbnB1dCA9IElucHV0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IG11bHRpV29yZCA9IGlucHV0LmluY2x1ZGVzKCcgJykgfHwgaW5wdXQuaW5jbHVkZXMoJywnKTtcbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBsZXQgcGFydHMgPSBbXTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKHBOYW1lID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gZ2V0KGl0ZW0sIHBOYW1lKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW11bHRpV29yZCAmJlxuICAgICAgICAgIChwTmFtZSA9PT0gJ3Byb3BlcnRpZXMubGFiZWwnIHx8IHBOYW1lID09PSAnYWRkcmVzcycpICYmXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBkcm9wIGxhc3QgcGFydHMgaS5lLiBjaXR5IGFuZCBuZWlnaGJvdXJob29kXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMiwgMik7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChtdWx0aVdvcmQpIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdChcbiAgICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8sL2csICcgJykuc3BsaXQoJyAnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoaW5wdXQpID09PSAwKSB7XG4gICAgICAgICAgLy8gYWNjZXB0IG1hdGNoIG9ubHkgYXQgd29yZCBzdGFydFxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cbiIsIi8qKlxuICogU2VyaWFsaXplcyBvYmplY3RzXG4gKlxuICogQG5hbWUgc2VyaWFsaXplXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gKiBAcGFyYW0ge0FueX0gcHJlZml4XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBTZXJpYWxpemVkIG9iamVjdFxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnNlcmlhbGl6ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZShvYmosIHByZWZpeCkge1xuICBpZiAoIW9iaikge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgIC5tYXAocCA9PiB7XG4gICAgICBjb25zdCBrID0gcHJlZml4IHx8IHA7XG4gICAgICBjb25zdCB2ID0gb2JqW3BdO1xuXG4gICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VyaWFsaXplKHYsIGspXG4gICAgICAgIDogYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGspfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2KX1gO1xuICAgIH0pXG4gICAgLmpvaW4oJyYnKTtcbn1cbiIsImltcG9ydCBzZXJpYWxpemUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZSc7XG4vKipcbiAqICBSZXR1cm4gUHJvbWlzZSBmb3IgYSB1cmwganNvbiBnZXQgcmVxdWVzdFxuICpcbiAqIEBuYW1lIGdldEpzb25cbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtc1xuICogQHJldHVybnMge09iamVjdH0gcmVzcG9uc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRKc29uKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXJlc3BvbnNlXG4gKi9cbmNvbnN0IGF4aW9zID0gcmVxdWlyZSgnYXhpb3MnKS5kZWZhdWx0O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRKc29uKHVybCwgcGFyYW1zKSB7XG4gIHJldHVybiBheGlvc1xuICAgIC5nZXQoXG4gICAgICBlbmNvZGVVUkkodXJsKSArXG4gICAgICAgIChwYXJhbXNcbiAgICAgICAgICA/ICh1cmwuc2VhcmNoKC9cXD8vKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplKHBhcmFtcylcbiAgICAgICAgICA6ICcnKSxcbiAgICAgIHtcbiAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG5cbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApXG4gICAgLnRoZW4ocmVzID0+IHtcbiAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBnZXRKc29uIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbic7XG5cbmNvbnN0IERFRkFVTFRfUEVMSUFTX1VSTCA9ICdodHRwczovL2FwaS5kaWdpdHJhbnNpdC5maS9nZW9jb2RpbmcvdjEvc2VhcmNoJztcbi8qKlxuICogPERFU0NSSVBUSU9OPlxuICpcbiAqIEBuYW1lIGdldEdlb2NvZGluZ1Jlc3VsdHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hQYXJhbXMgKE9wdGlvbmFsKSBQYXJhbWV0ZXJzIGFwcGVuZGVkIHRvIHVybCwgYmFzaWNhbGx5IGJveCAvIHBvbHlnb24gdG8gcmVzdHJpY3Qgc2VhcmNoIGFyZWFcbiAqIEBwYXJhbSB7U3RyaW5nfSBsYW5nIChPcHRpb25hbCkgc2VhcmNoIGxhbmd1YWdlXG4gKiBAcGFyYW0ge09iamVjdH0gZm9jdXNQb2ludCAoT3B0aW9uYWwpIE93biBQb3NpdGlvbiAoUEVMSUFTIEFQSSlcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VzIChPcHRpb25hbCkgc2VhcmNoIHNvdXJjZXMgKGUuZyBPU00sIEdURlMuLilcbiAqIEBwYXJhbSB7T2JqZWN0fSBtaW5pbWFsUmVnZXhwIChPcHRpb25hbCkgUmVnZXhwIGZvciB0ZXN0aW5nXG4gKiBAcGFyYW0geyp9IGdlb2NvZGluZ0xheWVycyAoT3B0aW9uYWwpIEFycmF5IG9mIHN0cmluZ3MgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBsYXllcnMgaXMgc2VhcmNoZWQsIGUuZy4gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0b3AnXVxuICogQHJldHVybnMge1N0cmluZ30gUmVzdWx0cyBpbiBKU09OIGZvcm1cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRHZW9jb2RpbmdSZXN1bHRzKFwicmVzdWx0XCIpO1xuICogLy89IGUuZy4ge3RleHQ6XCJyZXN1bHRcIn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgc2VhcmNoU3RyaW5nLFxuICBzZWFyY2hQYXJhbXMsXG4gIGxhbmcsXG4gIGZvY3VzUG9pbnQsXG4gIHNvdXJjZXMsXG4gIHBlbGlhc1VybCxcbiAgbWluaW1hbFJlZ2V4cCxcbiAgZ2VvY29kaW5nTGF5ZXJzLFxuKSB7XG4gIGNvbnN0IHRleHQgPSBzZWFyY2hTdHJpbmcgPyBzZWFyY2hTdHJpbmcudHJpbSgpIDogbnVsbDtcbiAgaWYgKFxuICAgIHRleHQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHRleHQgPT09IG51bGwgfHxcbiAgICB0ZXh0Lmxlbmd0aCA8IDEgfHxcbiAgICAobWluaW1hbFJlZ2V4cCAmJiAhbWluaW1hbFJlZ2V4cC50ZXN0KHRleHQpKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICBjb25zdCBQRUxJQVNfVVJMID0gcGVsaWFzVXJsIHx8IERFRkFVTFRfUEVMSUFTX1VSTDtcbiAgbGV0IG9wdHMgPSB7IHRleHQsIC4uLnNlYXJjaFBhcmFtcywgLi4uZm9jdXNQb2ludCwgbGFuZyB9O1xuICBpZiAoc291cmNlcykge1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIHNvdXJjZXMgfTtcbiAgfVxuICBpZiAoZ2VvY29kaW5nTGF5ZXJzKSB7XG4gICAgY29uc3QgbGF5ZXJzID0gZ2VvY29kaW5nTGF5ZXJzLnRvU3RyaW5nKCk7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgbGF5ZXJzIH07XG4gIH1cbiAgcmV0dXJuIGdldEpzb24oUEVMSUFTX1VSTCwgb3B0cykudGhlbihyZXMgPT4ge1xuICAgIHJldHVybiByZXMuZmVhdHVyZXM7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICdsb2Rhc2gvZmxhdHRlbic7XG5pbXBvcnQgdGFrZSBmcm9tICdsb2Rhc2gvdGFrZSc7XG5pbXBvcnQge1xuICBzb3J0U2VhcmNoUmVzdWx0cyxcbiAgaXNTdG9wLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgZmlsdGVyTWF0Y2hpbmdUb0lucHV0IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQnO1xuaW1wb3J0IGdldEdlb2NvZGluZ1Jlc3VsdHMgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cyc7XG5pbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5mdW5jdGlvbiBnZXRTdG9wc0Zyb21HZW9jb2Rpbmcoc3RvcHMsIFVSTF9QRUxJQVNfUExBQ0UpIHtcbiAgaWYgKCFzdG9wcyB8fCBzdG9wcy5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgbGV0IGdpZHMgPSAnJztcbiAgY29uc3Qgc3RvcHNXaXRoR2lkcyA9IHN0b3BzLm1hcChzdG9wID0+IHtcbiAgICBjb25zdCB0eXBlID0gc3RvcC50eXBlID09PSAnc3RvcCcgPyAnc3RvcCcgOiAnc3RhdGlvbic7XG4gICAgbGV0IGdpZCA9IGBndGZzJHtzdG9wLmd0ZnNJZC5zcGxpdCgnOicpWzBdLnRvTG93ZXJDYXNlKCl9OiR7dHlwZX06R1RGUzoke1xuICAgICAgc3RvcC5ndGZzSWRcbiAgICB9YDtcbiAgICBpZiAoc3RvcC5jb2RlKSB7XG4gICAgICBnaWQgKz0gYCMke3N0b3AuY29kZX1gO1xuICAgIH1cbiAgICBnaWRzICs9IGAke2dpZH0sYDtcbiAgICByZXR1cm4geyAuLi5zdG9wLCBnaWQgfTtcbiAgfSk7XG4gIGNvbnN0IHN0b3BTdGF0aW9uTWFwID0gc3RvcHNXaXRoR2lkcy5yZWR1Y2UoZnVuY3Rpb24gcmVkdShcbiAgICBtYXAsXG4gICAgc3RvcE9yU3RhdGlvbixcbiAgKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgbWFwW3N0b3BPclN0YXRpb24uZ2lkXSA9IHN0b3BPclN0YXRpb247XG4gICAgcmV0dXJuIG1hcDtcbiAgfSwge30pO1xuICByZXR1cm4gZ2V0SnNvbihVUkxfUEVMSUFTX1BMQUNFLCB7XG4gICAgaWRzOiBnaWRzLnNsaWNlKDAsIC0xKSxcbiAgICAvLyBsYW5nOiBjb250ZXh0LmdldFN0b3JlKCdQcmVmZXJlbmNlc1N0b3JlJykuZ2V0TGFuZ3VhZ2UoKSwgVE9ETyBlbmFibGUgdGhpcyB3aGVuIE9UUCBzdXBwb3J0cyB0cmFuc2xhdGlvbnNcbiAgfSkudGhlbihyZXMgPT4ge1xuICAgIHJldHVybiByZXMuZmVhdHVyZXMubWFwKHN0b3AgPT4ge1xuICAgICAgY29uc3QgZmF2b3VyaXRlID0ge1xuICAgICAgICB0eXBlOiAnRmF2b3VyaXRlU3RvcCcsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBhZGRlbmR1bTogc3RvcC5wcm9wZXJ0aWVzLmFkZGVuZHVtLFxuICAgICAgICAgIGdpZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ2lkLFxuICAgICAgICAgIGNvZGU6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmNvZGUsXG4gICAgICAgICAgZ3Rmc0lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5ndGZzSWQsXG4gICAgICAgICAgbGFzdFVwZGF0ZWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmxhc3RVcGRhdGVkLFxuICAgICAgICAgIGZhdm91cml0ZUlkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5mYXZvdXJpdGVJZCxcbiAgICAgICAgICBhZGRyZXNzOiBzdG9wLnByb3BlcnRpZXMubGFiZWwsXG4gICAgICAgICAgbGF5ZXI6IGlzU3RvcChzdG9wLnByb3BlcnRpZXMpID8gJ2Zhdm91cml0ZVN0b3AnIDogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeTogc3RvcC5nZW9tZXRyeSxcbiAgICAgIH07XG4gICAgICByZXR1cm4gZmF2b3VyaXRlO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVzLCBpbnB1dCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIGZpbHRlck1hdGNoaW5nVG9JbnB1dChmYXZvdXJpdGVzLCBpbnB1dCwgWydhZGRyZXNzJywgJ25hbWUnXSkubWFwKGl0ZW0gPT4gKHtcbiAgICAgIHR5cGU6ICdGYXZvdXJpdGVQbGFjZScsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIGxhYmVsOiBpdGVtLm5hbWUsXG4gICAgICAgIGxheWVyOiAnZmF2b3VyaXRlUGxhY2UnLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7IHR5cGU6ICdQb2ludCcsIGNvb3JkaW5hdGVzOiBbaXRlbS5sb24sIGl0ZW0ubGF0XSB9LFxuICAgIH0pKSxcbiAgKTtcbn1cbmZ1bmN0aW9uIHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tbWFwJyxcbiAgICAgICAgICBsYXllcjogJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdDdXJyZW50TG9jYXRpb24nLFxuICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgbG9uOiBwb3NpdGlvbi5sb24sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAndXNlLW93bi1wb3NpdGlvbicsXG4gICAgICAgICAgbGF5ZXI6ICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgICAgbG9uOiBwb3NpdGlvbi5sb24sXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW3Bvc2l0aW9uLmxvbiwgcG9zaXRpb24ubGF0XSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnLFxuICAgICAgICAgIGxheWVyOiAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgICBhZGRyZXNzOiAnc2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEJhY2tTdWdnZXN0aW9uKCkge1xuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICB7XG4gICAgICB0eXBlOiAnYmFjaycsXG4gICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICBsYXQ6IG51bGwsXG4gICAgICBsb246IG51bGwsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGxhYmVsSWQ6ICdiYWNrJyxcbiAgICAgICAgbGF5ZXI6ICdiYWNrJyxcbiAgICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeToge1xuICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICB9LFxuICAgIH0sXG4gIF0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSB7XG4gIHJldHVybiBzdG9wc0FuZFN0YXRpb25zLnRoZW4oc3RvcHNTdGF0aW9ucyA9PiB7XG4gICAgY29uc3QgY2FuZGlkYXRlcyA9IHN0b3BzU3RhdGlvbnMuZmlsdGVyKHMgPT5cbiAgICAgIHMudHlwZSA9PT0gJ3N0b3AnID8gdXNlU3RvcHMgOiB1c2VTdGF0aW9ucyxcbiAgICApO1xuICAgIHJldHVybiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoY2FuZGlkYXRlcywgaW5wdXQsIFtcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgICAncHJvcGVydGllcy5hZGRyZXNzJyxcbiAgICBdKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlck9sZFNlYXJjaGVzKG9sZFNlYXJjaGVzLCBpbnB1dCwgZHJvcExheWVycykge1xuICBsZXQgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IGZpbHRlck1hdGNoaW5nVG9JbnB1dChvbGRTZWFyY2hlcywgaW5wdXQsIFtcbiAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAncHJvcGVydGllcy5sYWJlbCcsXG4gICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgJ3Byb3BlcnRpZXMuc2hvcnROYW1lJyxcbiAgICAncHJvcGVydGllcy5sb25nTmFtZScsXG4gIF0pO1xuICBpZiAoZHJvcExheWVycykge1xuICAgIC8vIGRvbid0IHdhbnQgdGhlc2VcbiAgICBtYXRjaGluZ09sZFNlYXJjaGVzID0gbWF0Y2hpbmdPbGRTZWFyY2hlcy5maWx0ZXIoXG4gICAgICBpdGVtID0+ICFkcm9wTGF5ZXJzLmluY2x1ZGVzKGl0ZW0ucHJvcGVydGllcy5sYXllciksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgIHRha2UobWF0Y2hpbmdPbGRTZWFyY2hlcywgMTApLm1hcChpdGVtID0+IHtcbiAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7XG4gICAgICAgIC4uLml0ZW0sXG4gICAgICAgIHR5cGU6ICdPbGRTZWFyY2gnLFxuICAgICAgICB0aW1ldGFibGVDbGlja2VkOiBmYWxzZSwgLy8gcmVzZXQgbGF0ZXN0IHNlbGVjdGlvbiBhY3Rpb25cbiAgICAgICAgYXJyb3dDbGlja2VkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgICBkZWxldGUgbmV3SXRlbS5wcm9wZXJ0aWVzLmNvbmZpZGVuY2U7XG4gICAgICByZXR1cm4gbmV3SXRlbTtcbiAgICB9KSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gaGFzRmF2b3VyaXRlcyhzZWFyY2hDb250ZXh0KSB7XG4gIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlTG9jYXRpb25zKFxuICAgIHNlYXJjaENvbnRleHQuY29udGV4dCxcbiAgKTtcbiAgaWYgKGZhdm91cml0ZUxvY2F0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zID1cbiAgICBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICBpZiAoZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zPy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZVN0b3BzKHNlYXJjaENvbnRleHQuY29udGV4dCk7XG4gIHJldHVybiBmYXZvdXJpdGVTdG9wcz8ubGVuZ3RoID4gMDtcbn1cblxuY29uc3Qgcm91dGVMYXllcnMgPSBbXG4gICdyb3V0ZS1UUkFNJyxcbiAgJ3JvdXRlLUJVUycsXG4gICdyb3V0ZS1SQUlMJyxcbiAgJ3JvdXRlLUZFUlJZJyxcbiAgJ3JvdXRlLVNVQldBWScsXG4gICdyb3V0ZS1BSVJQTEFORScsXG4gICdyb3V0ZS1GVU5JQ1VMQVInLFxuXTtcbmNvbnN0IGxvY2F0aW9uTGF5ZXJzID0gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuY29uc3QgcGFya2luZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuY29uc3Qgc3RvcExheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJ107XG5cbi8qKlxuICogRXhlY3V0ZXMgdGhlIHNlYXJjaFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFJlc3VsdHMoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIHsgaW5wdXQgfSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikge1xuICBjb25zdCB7XG4gICAgZ2V0UG9zaXRpb25zLFxuICAgIGdldEZhdm91cml0ZUxvY2F0aW9ucyxcbiAgICBnZXRPbGRTZWFyY2hlcyxcbiAgICBnZXRGYXZvdXJpdGVTdG9wcyxcbiAgICBwYXJraW5nQXJlYVNvdXJjZXMsXG4gICAgZ2V0TGFuZ3VhZ2UsXG4gICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zLFxuICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVJvdXRlcyxcbiAgICBnZXRSb3V0ZXNRdWVyeSxcbiAgICBjb250ZXh0LFxuICAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogbG9jYXRpb25Bd2FyZSxcbiAgICBtaW5pbWFsUmVnZXhwLFxuICAgIGxpbmVSZWdleHAsXG4gICAgVVJMX1BFTElBUyxcbiAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgIGZlZWRJRHMsXG4gICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zLFxuICAgIGdlb2NvZGluZ1NvdXJjZXMsXG4gICAgZ2V0RnV0dXJlUm91dGVzLFxuICAgIGNpdHlCaWtlTmV0d29ya3MsXG4gIH0gPSBzZWFyY2hDb250ZXh0O1xuICAvLyBpZiBubyB0YXJnZXRzIGFyZSBwcm92aWRlZCwgc2VhcmNoIHRoZW0gYWxsLlxuICBjb25zdCBhbGxUYXJnZXRzID0gIXRhcmdldHMgfHwgdGFyZ2V0cy5sZW5ndGggPT09IDA7XG4gIC8vIGlmIG5vIHNvdXJjZXMgYXJlIHByb3ZpZGVkLCB1c2UgdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFNvdXJjZXMgPSAhc291cmNlcyB8fCBzb3VyY2VzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3NpdGlvbnMoY29udGV4dCk7XG4gIGNvbnN0IHNlYXJjaENvbXBvbmVudHMgPSBbXTtcbiAgY29uc3Qgc2VhcmNoZXMgPSB7IHR5cGU6ICdhbGwnLCB0ZXJtOiBpbnB1dCwgcmVzdWx0czogW10gfTtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShjb250ZXh0KTtcbiAgY29uc3QgZm9jdXNQb2ludCA9XG4gICAgbG9jYXRpb25Bd2FyZSAmJiByZWZQb2ludD8ubGF0ICYmIHJlZlBvaW50Py5sb25cbiAgICAgID8ge1xuICAgICAgICAgIC8vIFJvdW5kIGNvb3JkaW5hdGVzIHRvIGFwcHJveCAxIGttLCBpbiBvcmRlciB0byBpbXByb3ZlIGNhY2hpbmdcbiAgICAgICAgICAnZm9jdXMucG9pbnQubGF0JzogcmVmUG9pbnQubGF0LnRvRml4ZWQoMyksXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50Lmxvbic6IHJlZlBvaW50Lmxvbi50b0ZpeGVkKDMpLFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICBjb25zdCBtb2RlID0gdHJhbnNwb3J0TW9kZSA/IHRyYW5zcG9ydE1vZGUuc3BsaXQoJy0nKVsxXSA6IHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ0N1cnJlbnRQb3NpdGlvbicpICYmXG4gICAgcG9zaXRpb24uc3RhdHVzICE9PSAnZ2VvbG9jYXRpb24tbm90LXN1cHBvcnRlZCdcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTWFwUG9zaXRpb24nKSkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkpO1xuICB9XG4gIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdGdXR1cmVSb3V0ZXMnKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gZ2V0RnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaCh0YWtlKGl0ZW1zLCAzKSk7XG4gIH1cbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSAmJlxuICAgIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dClcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IGdldEZhdm91cml0ZUxvY2F0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZUxvY2F0aW9ucywgaW5wdXQpLFxuICAgICAgKTtcbiAgICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdCYWNrJykpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEJhY2tTdWdnZXN0aW9uKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuICAgICAgaWYgKHRhcmdldHMuaW5jbHVkZXMoJ1N0YXRpb25zJykpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0YXRpb24nKTsgLy8gc2VhcmNoIHN0YXRpb25zIGZyb20gT1NNXG4gICAgICB9XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZ2VvY29kaW5nU291cmNlcy5qb2luKCcsJyksXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgbG9jYXRpb25IaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCwgJ2VuZHBvaW50Jyk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMobG9jYXRpb25IaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycyksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdQYXJraW5nQXJlYXMnKSkge1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2VvY29kaW5nU2VhcmNoUGFyYW1zO1xuICAgICAgaWYgKGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTApIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zLnNpemUgPSBnZW9jb2RpbmdTaXplO1xuICAgICAgfVxuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydjYXJwYXJrJywgJ2Jpa2VwYXJrJ107XG4gICAgICBjb25zdCBmZWVkSWRzID0gcGFya2luZ0FyZWFTb3VyY2VzID8gcGFya2luZ0FyZWFTb3VyY2VzLmpvaW4oJywnKSA6IG51bGw7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZmVlZElkcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVzZVN0b3BzID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RvcHMnKTtcbiAgY29uc3QgdXNlU3RhdGlvbnMgPSB0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpO1xuXG4gIGlmIChhbGxUYXJnZXRzIHx8IHVzZVN0b3BzIHx8IHVzZVN0YXRpb25zKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IGdldEZhdm91cml0ZVN0b3BzKGNvbnRleHQpO1xuICAgICAgbGV0IHN0b3BzQW5kU3RhdGlvbnM7XG4gICAgICBpZiAoZmF2b3VyaXRlU3RvcHMuZXZlcnkoc3RvcCA9PiBzdG9wLnR5cGUgPT09ICdzdGF0aW9uJykpIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BzRnJvbUdlb2NvZGluZyhcbiAgICAgICAgICBmYXZvdXJpdGVTdG9wcyxcbiAgICAgICAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkoZmF2b3VyaXRlU3RvcHMpXG4gICAgICAgICAgLnRoZW4oZmF2b3VyaXRlcyA9PlxuICAgICAgICAgICAgZ2V0U3RvcHNGcm9tR2VvY29kaW5nKGZhdm91cml0ZXMsIFVSTF9QRUxJQVNfUExBQ0UpLFxuICAgICAgICAgIClcbiAgICAgICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlckZhdm91cml0ZVN0b3BzKHN0b3BzQW5kU3RhdGlvbnMsIGlucHV0LCB1c2VTdG9wcywgdXNlU3RhdGlvbnMpLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbXTtcbiAgICAgIGlmICh1c2VTdG9wcykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RvcCcpO1xuICAgICAgfVxuICAgICAgaWYgKHVzZVN0YXRpb25zKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdGF0aW9uJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIGlmIChnZW9jb2RpbmdTZWFyY2hQYXJhbXMgJiYgZ2VvY29kaW5nU2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J10pIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J10gPVxuICAgICAgICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddO1xuICAgICAgfVxuICAgICAgLy8gYSBsaXR0bGUgaGFjazogd2hlbiBzZWFyY2hpbmcgbG9jYXRpb24gZGF0YSwgYXV0b21hdGljYWxseSBkZWR1cGUgc3RvcHNcbiAgICAgIC8vIHRoaXMgY291bGQgYmUgYSBuZXcgZXhwbGljaXQgcHJvcFxuICAgICAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zLmRlZHVwZXN0b3BzID0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZlZWRzID0gZmVlZElEcy5tYXAodiA9PiBgZ3RmcyR7dn1gKS5qb2luKCcsJyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZmVlZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBzdG9wSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ucHJvcGVydGllcy5naWQpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5wcm9wZXJ0aWVzLmdpZC5pbmNsdWRlcygnR1RGUzonKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuICAgICAgaWYgKCF1c2VTdG9wcykge1xuICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICghdXNlU3RhdGlvbnMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdGF0aW9uJyk7XG4gICAgICB9XG4gICAgICBpZiAodHJhbnNwb3J0TW9kZSkge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlKSA6IHJlc3VsdCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycyksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1JvdXRlcycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVSb3V0ZXMgPSBnZXRGYXZvdXJpdGVSb3V0ZXMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5KGZhdm91cml0ZVJvdXRlcywgaW5wdXQsIG1vZGUsIHBhdGhPcHRzKS50aGVuKFxuICAgICAgICAgIHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICBnZXRSb3V0ZXNRdWVyeShpbnB1dCwgZmVlZElEcywgdHJhbnNwb3J0TW9kZSwgcGF0aE9wdHMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgKSxcbiAgICApO1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgcm91dGVIaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzLmZpbHRlcihpID0+ICEoaSA9PT0gdHJhbnNwb3J0TW9kZSkpKTtcbiAgICAgIH1cbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMocm91dGVIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHRzID0+XG4gICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0cyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbiA9XG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnkoXG4gICAgICAgICAgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24sXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XG4gICAgICAgIGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTAgPyB7IHNpemU6IGdlb2NvZGluZ1NpemUgfSA6IHt9O1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGNpdHlCaWtlTmV0d29ya3Muam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbLi4uc3RvcExheWVyc107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcblxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGZpbHRlck9sZFNlYXJjaGVzKGhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb21pc2UgPSBQcm9taXNlLmFsbChzZWFyY2hDb21wb25lbnRzKVxuICAgIC50aGVuKGZsYXR0ZW4pXG4gICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICBzZWFyY2hlcy5yZXN1bHRzID0gcmVzdWx0cztcbiAgICB9KVxuICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgc2VhcmNoZXMuZXJyb3IgPSBlcnI7XG4gICAgfSk7XG4gIHNlYXJjaFJlc3VsdHNQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgIGNhbGxiYWNrKHtcbiAgICAgIC4uLnNlYXJjaGVzLFxuICAgICAgcmVzdWx0czogc29ydFNlYXJjaFJlc3VsdHMobGluZVJlZ2V4cCwgc2VhcmNoZXMucmVzdWx0cywgaW5wdXQpLFxuICAgIH0pO1xuICB9KTtcbn1cblxuY29uc3QgZGVib3VuY2VkU2VhcmNoID0gZGVib3VuY2UoZ2V0U2VhcmNoUmVzdWx0cywgMzAwLCB7XG4gIGxlYWRpbmc6IHRydWUsXG59KTtcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVTZWFyY2ggPSAoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIGRhdGEsXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pID0+IHtcbiAgY2FsbGJhY2sobnVsbCk7IC8vIFRoaXMgbWVhbnMgJ3dlIGFyZSBzZWFyY2hpbmcnXG4gIGRlYm91bmNlZFNlYXJjaChcbiAgICB0YXJnZXRzLFxuICAgIHNvdXJjZXMsXG4gICAgdHJhbnNwb3J0TW9kZSxcbiAgICBzZWFyY2hDb250ZXh0LFxuICAgIGZpbHRlclJlc3VsdHMsXG4gICAgZ2VvY29kaW5nU2l6ZSxcbiAgICBkYXRhLFxuICAgIGNhbGxiYWNrLFxuICAgIHBhdGhPcHRzLFxuICAgIHJlZlBvaW50LFxuICApO1xufTtcbiIsImltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnbG9kYXNoL21lbW9pemUnO1xuaW1wb3J0IGVzY2FwZVJlZ0V4cCBmcm9tICdsb2Rhc2gvZXNjYXBlUmVnRXhwJztcbmltcG9ydCBjbG9uZURlZXAgZnJvbSAnbG9kYXNoL2Nsb25lRGVlcCc7XG5cbi8qKlxuICogTG9jYXRpb24gcHJvcGVydGllcy5cbiAqIEB0eXBlZGVmIHtMb2NhdGlvblByb3BlcnRpZXN9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbGF5ZXIgU3VnZ2VzdGlvbiBsYXllci5cbiAqIEBwcm9wZXJ0eSB7bGF0fSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtsb259IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYWRkcmVzcyBBZGRyZXNzLlxuICovXG5cbi8qKlxuICogUmV0dXJucyBsb2NhbGl0eSAoY2l0eSBuYW1lKSBmb3Igc3VnZ2VzdGlvbnNcbiAqXG4gKiBAbmFtZSBnZXRMb2NhbGl0eVxuICogQHBhcmFtIHtPYmplY3R9IHN1Z2dlc3Rpb24gc3VnZ2VzdGlvbidzIHByb3BlcnRpZXMgZnJvbSBnZW9jb2Rpbmcgb3IgYSBmYXZvdXJpdGUgc3RvcC9zdGF0aW9uLlxuICogRXhwZWN0cyBsYXN0IHBhcnQgb2YgYW4gYWRkcmVzcyAoYWZ0ZXIgJywnKSB0byBjb250YWluIHRoZSBjaXR5IG5hbWUgb2YgdGhlIHN1Z2dlc3Rpb24gbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7U3RyaW5nfSAgQ2l0eSBuYW1lIG9yIGVtcHR5IHN0cmluZ1xuICovXG5jb25zdCBnZXRMb2NhbGl0eSA9IHN1Z2dlc3Rpb24gPT5cbiAgc3VnZ2VzdGlvbi5sb2NhbGFkbWluIHx8XG4gIHN1Z2dlc3Rpb24ubG9jYWxpdHkgfHxcbiAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpIDwgc3VnZ2VzdGlvbi5hZGRyZXNzLmxlbmd0aCAtIDIgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3Muc3Vic3RyaW5nKHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpICsgMikpIHx8XG4gICcnO1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcENvZGUgPSAoeyBpZCwgY29kZSB9KSA9PiB7XG4gIGlmIChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cbiAgaWYgKFxuICAgIGlkID09PSB1bmRlZmluZWQgfHxcbiAgICB0eXBlb2YgaWQuaW5kZXhPZiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICBpZC5pbmRleE9mKCcjJykgPT09IC0xXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gaWQgZnJvbSBwZWxpYXNcbiAgcmV0dXJuIGlkLnN1YnN0cmluZyhpZC5pbmRleE9mKCcjJykgKyAxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsID0gKG5hbWUsIGFkZHJlc3MpID0+IFtcbiAgbmFtZSB8fCAoYWRkcmVzcyAmJiBhZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZydcbiAgICA/IGFkZHJlc3MucmVwbGFjZShuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChuYW1lKX0oWyAsXXwkKStgKSwgJycpXG4gICAgOiAnJyxcbl07XG5cbi8qKlxuICogRm9ybWF0IHN1Z2dlc3Rpb24tcGFpciBbbmFtZSwgYWRkcmVzc10gYnkgYHN1Z2dlc3Rpb24ubGF5ZXJgLlxuICpcbiAqIEBuYW1lIGdldE5hbWVMYWJlbFxuICogQHBhcmFtIHtMb2NhdGlvblByb3BlcnRpZXN9IHN1Z2dlc3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BsYWluXVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gRm9ybWF0dGVkIGxhYmVsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0TmFtZUxhYmVsID0gbWVtb2l6ZShcbiAgKHN1Z2dlc3Rpb24sIHBsYWluID0gZmFsc2UpID0+IHtcbiAgICBzd2l0Y2ggKHN1Z2dlc3Rpb24ubGF5ZXIpIHtcbiAgICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkLCBzdWdnZXN0aW9uLmFkZHJlc3NdO1xuICAgICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgICAgY2FzZSAnYmFjayc6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwoc3VnZ2VzdGlvbi5uYW1lLCBzdWdnZXN0aW9uLmFkZHJlc3MpO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgICAgY2FzZSAnYmlrZXN0YXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubmFtZV07XG4gICAgICBjYXNlICdmYXZvdXJpdGVSb3V0ZSc6XG4gICAgICBjYXNlICdyb3V0ZS1CVVMnOlxuICAgICAgY2FzZSAncm91dGUtVFJBTSc6XG4gICAgICBjYXNlICdyb3V0ZS1SQUlMJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVNVQldBWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GRVJSWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GVU5JQ1VMQVInOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmlkLFxuICAgICAgICAgICAgICBnZXRTdG9wQ29kZShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxpdHkoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RhdGlvbic6XG4gICAgICBjYXNlICdzdGF0aW9uJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgaWYgKGZlYXQxLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgZmVhdDIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgaXNFcXVhbChnZXROYW1lTGFiZWwoZmVhdDEucHJvcGVydGllcyksIGdldE5hbWVMYWJlbChmZWF0Mi5wcm9wZXJ0aWVzKSkgJiZcbiAgICAgIGZlYXQxLnByb3BlcnRpZXMubGF5ZXIgPT09IGZlYXQyLnByb3BlcnRpZXMubGF5ZXJcbiAgICApO1xuICB9KTtcbn1cbiIsIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4zMC4xXG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICB2YXIgZmxhZ3MgPSBudWxsLFxuICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBmYWxzZSxcbiAgICAgICAgICAgIGlzTm93VmFsaWQgPSBtLl9kICYmICFpc05hTihtLl9kLmdldFRpbWUoKSk7XG4gICAgICAgIGlmIChpc05vd1ZhbGlkKSB7XG4gICAgICAgICAgICBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKTtcbiAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7XG4gICAgICAgIEQ6ICdkYXRlJyxcbiAgICAgICAgZGF0ZXM6ICdkYXRlJyxcbiAgICAgICAgZGF0ZTogJ2RhdGUnLFxuICAgICAgICBkOiAnZGF5JyxcbiAgICAgICAgZGF5czogJ2RheScsXG4gICAgICAgIGRheTogJ2RheScsXG4gICAgICAgIGU6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheXM6ICd3ZWVrZGF5JyxcbiAgICAgICAgd2Vla2RheTogJ3dlZWtkYXknLFxuICAgICAgICBFOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXlzOiAnaXNvV2Vla2RheScsXG4gICAgICAgIGlzb3dlZWtkYXk6ICdpc29XZWVrZGF5JyxcbiAgICAgICAgREREOiAnZGF5T2ZZZWFyJyxcbiAgICAgICAgZGF5b2Z5ZWFyczogJ2RheU9mWWVhcicsXG4gICAgICAgIGRheW9meWVhcjogJ2RheU9mWWVhcicsXG4gICAgICAgIGg6ICdob3VyJyxcbiAgICAgICAgaG91cnM6ICdob3VyJyxcbiAgICAgICAgaG91cjogJ2hvdXInLFxuICAgICAgICBtczogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbWlsbGlzZWNvbmRzOiAnbWlsbGlzZWNvbmQnLFxuICAgICAgICBtaWxsaXNlY29uZDogJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgbTogJ21pbnV0ZScsXG4gICAgICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgICAgICBtaW51dGU6ICdtaW51dGUnLFxuICAgICAgICBNOiAnbW9udGgnLFxuICAgICAgICBtb250aHM6ICdtb250aCcsXG4gICAgICAgIG1vbnRoOiAnbW9udGgnLFxuICAgICAgICBROiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXJzOiAncXVhcnRlcicsXG4gICAgICAgIHF1YXJ0ZXI6ICdxdWFydGVyJyxcbiAgICAgICAgczogJ3NlY29uZCcsXG4gICAgICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgICAgICBzZWNvbmQ6ICdzZWNvbmQnLFxuICAgICAgICBnZzogJ3dlZWtZZWFyJyxcbiAgICAgICAgd2Vla3llYXJzOiAnd2Vla1llYXInLFxuICAgICAgICB3ZWVreWVhcjogJ3dlZWtZZWFyJyxcbiAgICAgICAgR0c6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIGlzb3dlZWt5ZWFyczogJ2lzb1dlZWtZZWFyJyxcbiAgICAgICAgaXNvd2Vla3llYXI6ICdpc29XZWVrWWVhcicsXG4gICAgICAgIHc6ICd3ZWVrJyxcbiAgICAgICAgd2Vla3M6ICd3ZWVrJyxcbiAgICAgICAgd2VlazogJ3dlZWsnLFxuICAgICAgICBXOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWtzOiAnaXNvV2VlaycsXG4gICAgICAgIGlzb3dlZWs6ICdpc29XZWVrJyxcbiAgICAgICAgeTogJ3llYXInLFxuICAgICAgICB5ZWFyczogJ3llYXInLFxuICAgICAgICB5ZWFyOiAneWVhcicsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge1xuICAgICAgICBkYXRlOiA5LFxuICAgICAgICBkYXk6IDExLFxuICAgICAgICB3ZWVrZGF5OiAxMSxcbiAgICAgICAgaXNvV2Vla2RheTogMTEsXG4gICAgICAgIGRheU9mWWVhcjogNCxcbiAgICAgICAgaG91cjogMTMsXG4gICAgICAgIG1pbGxpc2Vjb25kOiAxNixcbiAgICAgICAgbWludXRlOiAxNCxcbiAgICAgICAgbW9udGg6IDgsXG4gICAgICAgIHF1YXJ0ZXI6IDcsXG4gICAgICAgIHNlY29uZDogMTUsXG4gICAgICAgIHdlZWtZZWFyOiAxLFxuICAgICAgICBpc29XZWVrWWVhcjogMSxcbiAgICAgICAgd2VlazogNSxcbiAgICAgICAgaXNvV2VlazogNSxcbiAgICAgICAgeWVhcjogMSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyA9IC9eWzEtOV1cXGQ/LywgLy8gICAgICAgICAxLTk5XG4gICAgICAgIG1hdGNoMXRvMkhhc1plcm8gPSAvXihbMS05XVxcZHxcXGQpLywgLy8gICAgICAgICAgIDAtOTlcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGQgPSBtb20uX2QsXG4gICAgICAgICAgICBpc1VUQyA9IG1vbS5faXNVVEM7XG5cbiAgICAgICAgc3dpdGNoICh1bml0KSB7XG4gICAgICAgICAgICBjYXNlICdNaWxsaXNlY29uZHMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkgOiBkLmdldE1pbGxpc2Vjb25kcygpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENTZWNvbmRzKCkgOiBkLmdldFNlY29uZHMoKTtcbiAgICAgICAgICAgIGNhc2UgJ01pbnV0ZXMnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDTWludXRlcygpIDogZC5nZXRNaW51dGVzKCk7XG4gICAgICAgICAgICBjYXNlICdIb3Vycyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENIb3VycygpIDogZC5nZXRIb3VycygpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXRlKCkgOiBkLmdldERhdGUoKTtcbiAgICAgICAgICAgIGNhc2UgJ0RheSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENEYXkoKSA6IGQuZ2V0RGF5KCk7XG4gICAgICAgICAgICBjYXNlICdNb250aCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVVRDID8gZC5nZXRVVENNb250aCgpIDogZC5nZXRNb250aCgpO1xuICAgICAgICAgICAgY2FzZSAnRnVsbFllYXInOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc1VUQyA/IGQuZ2V0VVRDRnVsbFllYXIoKSA6IGQuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE5hTjsgLy8gSnVzdCBpbiBjYXNlXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIHZhciBkLCBpc1VUQywgeWVhciwgbW9udGgsIGRhdGU7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpIHx8IGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZCA9IG1vbS5fZDtcbiAgICAgICAgaXNVVEMgPSBtb20uX2lzVVRDO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSAnTWlsbGlzZWNvbmRzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAoaXNVVENcbiAgICAgICAgICAgICAgICAgICAgPyBkLnNldFVUQ01pbGxpc2Vjb25kcyh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBkLnNldE1pbGxpc2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnU2Vjb25kcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENTZWNvbmRzKHZhbHVlKSA6IGQuc2V0U2Vjb25kcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnTWludXRlcyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENNaW51dGVzKHZhbHVlKSA6IGQuc2V0TWludXRlcyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnSG91cnMnOlxuICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDSG91cnModmFsdWUpIDogZC5zZXRIb3Vycyh2YWx1ZSkpO1xuICAgICAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZvaWQgKGlzVVRDID8gZC5zZXRVVENEYXRlKHZhbHVlKSA6IGQuc2V0RGF0ZSh2YWx1ZSkpO1xuICAgICAgICAgICAgLy8gY2FzZSAnRGF5JzogLy8gTm90IHJlYWxcbiAgICAgICAgICAgIC8vICAgIHJldHVybiB2b2lkIChpc1VUQyA/IGQuc2V0VVRDRGF5KHZhbHVlKSA6IGQuc2V0RGF5KHZhbHVlKSk7XG4gICAgICAgICAgICAvLyBjYXNlICdNb250aCc6IC8vIE5vdCB1c2VkIGJlY2F1c2Ugd2UgbmVlZCB0byBwYXNzIHR3byB2YXJpYWJsZXNcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdm9pZCAoaXNVVEMgPyBkLnNldFVUQ01vbnRoKHZhbHVlKSA6IGQuc2V0TW9udGgodmFsdWUpKTtcbiAgICAgICAgICAgIGNhc2UgJ0Z1bGxZZWFyJzpcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gU2VlIGJlbG93IC4uLlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIEp1c3QgaW4gY2FzZVxuICAgICAgICB9XG5cbiAgICAgICAgeWVhciA9IHZhbHVlO1xuICAgICAgICBtb250aCA9IG1vbS5tb250aCgpO1xuICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcbiAgICAgICAgZGF0ZSA9IGRhdGUgPT09IDI5ICYmIG1vbnRoID09PSAxICYmICFpc0xlYXBZZWFyKHllYXIpID8gMjggOiBkYXRlO1xuICAgICAgICB2b2lkIChpc1VUQ1xuICAgICAgICAgICAgPyBkLnNldFVUQ0Z1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBkLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXRlKSk7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJOb0xlYWRpbmdaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1vbnRoID0gdmFsdWUsXG4gICAgICAgICAgICBkYXRlID0gbW9tLmRhdGUoKTtcblxuICAgICAgICBkYXRlID0gZGF0ZSA8IDI5ID8gZGF0ZSA6IE1hdGgubWluKGRhdGUsIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIG1vbnRoKSk7XG4gICAgICAgIHZvaWQgKG1vbS5faXNVVENcbiAgICAgICAgICAgID8gbW9tLl9kLnNldFVUQ01vbnRoKG1vbnRoLCBkYXRlKVxuICAgICAgICAgICAgOiBtb20uX2Quc2V0TW9udGgobW9udGgsIGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgc2hvcnRQLFxuICAgICAgICAgICAgbG9uZ1A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQID0gcmVnZXhFc2NhcGUodGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUCA9IHJlZ2V4RXNjYXBlKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25nUCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdQKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRQKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGF5ID0gZ2V0KHRoaXMsICdEYXknKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8yTm9MZWFkaW5nWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIC8vIEVuc3VyZSBuYW1lIGlzIGF2YWlsYWJsZSBhbmQgZnVuY3Rpb24gcmV0dXJucyBib29sZWFuXG4gICAgICAgIHJldHVybiAhIShuYW1lICYmIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXNOYW1lLFxuICAgICAgICAgICAgZXJhc0FiYnIsXG4gICAgICAgICAgICBlcmFzTmFycm93LFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZXJhc05hbWUgPSByZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpO1xuICAgICAgICAgICAgZXJhc0FiYnIgPSByZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpO1xuICAgICAgICAgICAgZXJhc05hcnJvdyA9IHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KTtcblxuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKGVyYXNOYW1lKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChlcmFzTmFycm93KTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goZXJhc05hbWUpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChlcmFzQWJicik7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGVyYXNOYXJyb3cpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpICsgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIsIG1hdGNoMXRvMk5vTGVhZGluZ1plcm8pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yLCBtYXRjaDF0bzJIYXNaZXJvKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMiwgbWF0Y2gxdG8ySGFzWmVybyk7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5JyksXG4gICAgICAgIHZhbHVlT2YkMSA9IGFzTWlsbGlzZWNvbmRzO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjMwLjEnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LXRpbWV6b25lLmpzXG4vLyEgdmVyc2lvbiA6IDAuNS40NVxuLy8hIENvcHlyaWdodCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIGdpdGh1Yi5jb20vbW9tZW50L21vbWVudC10aW1lem9uZVxuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0LypnbG9iYWwgZGVmaW5lKi9cblx0aWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ21vbWVudCcpKTsgLy8gTm9kZVxuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShbJ21vbWVudCddLCBmYWN0b3J5KTsgICAgICAgICAgICAgICAgIC8vIEFNRFxuXHR9IGVsc2Uge1xuXHRcdGZhY3Rvcnkocm9vdC5tb21lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJyb3dzZXJcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAobW9tZW50KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8vIFJlc29sdmVzIGVzNiBtb2R1bGUgbG9hZGluZyBpc3N1ZVxuXHRpZiAobW9tZW50LnZlcnNpb24gPT09IHVuZGVmaW5lZCAmJiBtb21lbnQuZGVmYXVsdCkge1xuXHRcdG1vbWVudCA9IG1vbWVudC5kZWZhdWx0O1xuXHR9XG5cblx0Ly8gRG8gbm90IGxvYWQgbW9tZW50LXRpbWV6b25lIGEgc2Vjb25kIHRpbWUuXG5cdC8vIGlmIChtb21lbnQudHogIT09IHVuZGVmaW5lZCkge1xuXHQvLyBcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgJyArIG1vbWVudC50ei52ZXJzaW9uICsgJyB3YXMgYWxyZWFkeSBsb2FkZWQgJyArIChtb21lbnQudHouZGF0YVZlcnNpb24gPyAnd2l0aCBkYXRhIGZyb20gJyA6ICd3aXRob3V0IGFueSBkYXRhJykgKyBtb21lbnQudHouZGF0YVZlcnNpb24pO1xuXHQvLyBcdHJldHVybiBtb21lbnQ7XG5cdC8vIH1cblxuXHR2YXIgVkVSU0lPTiA9IFwiMC41LjQ1XCIsXG5cdFx0em9uZXMgPSB7fSxcblx0XHRsaW5rcyA9IHt9LFxuXHRcdGNvdW50cmllcyA9IHt9LFxuXHRcdG5hbWVzID0ge30sXG5cdFx0Z3Vlc3NlcyA9IHt9LFxuXHRcdGNhY2hlZEd1ZXNzO1xuXG5cdGlmICghbW9tZW50IHx8IHR5cGVvZiBtb21lbnQudmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcblx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHJlcXVpcmVzIE1vbWVudC5qcy4gU2VlIGh0dHBzOi8vbW9tZW50anMuY29tL3RpbWV6b25lL2RvY3MvIy91c2UtaXQvYnJvd3Nlci8nKTtcblx0fVxuXG5cdHZhciBtb21lbnRWZXJzaW9uID0gbW9tZW50LnZlcnNpb24uc3BsaXQoJy4nKSxcblx0XHRtYWpvciA9ICttb21lbnRWZXJzaW9uWzBdLFxuXHRcdG1pbm9yID0gK21vbWVudFZlcnNpb25bMV07XG5cblx0Ly8gTW9tZW50LmpzIHZlcnNpb24gY2hlY2tcblx0aWYgKG1ham9yIDwgMiB8fCAobWFqb3IgPT09IDIgJiYgbWlub3IgPCA2KSkge1xuXHRcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgcmVxdWlyZXMgTW9tZW50LmpzID49IDIuNi4wLiBZb3UgYXJlIHVzaW5nIE1vbWVudC5qcyAnICsgbW9tZW50LnZlcnNpb24gKyAnLiBTZWUgbW9tZW50anMuY29tJyk7XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0VW5wYWNraW5nXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBjaGFyQ29kZVRvSW50KGNoYXJDb2RlKSB7XG5cdFx0aWYgKGNoYXJDb2RlID4gOTYpIHtcblx0XHRcdHJldHVybiBjaGFyQ29kZSAtIDg3O1xuXHRcdH0gZWxzZSBpZiAoY2hhckNvZGUgPiA2NCkge1xuXHRcdFx0cmV0dXJuIGNoYXJDb2RlIC0gMjk7XG5cdFx0fVxuXHRcdHJldHVybiBjaGFyQ29kZSAtIDQ4O1xuXHR9XG5cblx0ZnVuY3Rpb24gdW5wYWNrQmFzZTYwKHN0cmluZykge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdHBhcnRzID0gc3RyaW5nLnNwbGl0KCcuJyksXG5cdFx0XHR3aG9sZSA9IHBhcnRzWzBdLFxuXHRcdFx0ZnJhY3Rpb25hbCA9IHBhcnRzWzFdIHx8ICcnLFxuXHRcdFx0bXVsdGlwbGllciA9IDEsXG5cdFx0XHRudW0sXG5cdFx0XHRvdXQgPSAwLFxuXHRcdFx0c2lnbiA9IDE7XG5cblx0XHQvLyBoYW5kbGUgbmVnYXRpdmUgbnVtYmVyc1xuXHRcdGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDUpIHtcblx0XHRcdGkgPSAxO1xuXHRcdFx0c2lnbiA9IC0xO1xuXHRcdH1cblxuXHRcdC8vIGhhbmRsZSBkaWdpdHMgYmVmb3JlIHRoZSBkZWNpbWFsXG5cdFx0Zm9yIChpOyBpIDwgd2hvbGUubGVuZ3RoOyBpKyspIHtcblx0XHRcdG51bSA9IGNoYXJDb2RlVG9JbnQod2hvbGUuY2hhckNvZGVBdChpKSk7XG5cdFx0XHRvdXQgPSA2MCAqIG91dCArIG51bTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsXG5cdFx0Zm9yIChpID0gMDsgaSA8IGZyYWN0aW9uYWwubGVuZ3RoOyBpKyspIHtcblx0XHRcdG11bHRpcGxpZXIgPSBtdWx0aXBsaWVyIC8gNjA7XG5cdFx0XHRudW0gPSBjaGFyQ29kZVRvSW50KGZyYWN0aW9uYWwuY2hhckNvZGVBdChpKSk7XG5cdFx0XHRvdXQgKz0gbnVtICogbXVsdGlwbGllcjtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0ICogc2lnbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFycmF5VG9JbnQgKGFycmF5KSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuXHRcdFx0YXJyYXlbaV0gPSB1bnBhY2tCYXNlNjAoYXJyYXlbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGludFRvVW50aWwgKGFycmF5LCBsZW5ndGgpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRhcnJheVtpXSA9IE1hdGgucm91bmQoKGFycmF5W2kgLSAxXSB8fCAwKSArIChhcnJheVtpXSAqIDYwMDAwKSk7IC8vIG1pbnV0ZXMgdG8gbWlsbGlzZWNvbmRzXG5cdFx0fVxuXG5cdFx0YXJyYXlbbGVuZ3RoIC0gMV0gPSBJbmZpbml0eTtcblx0fVxuXG5cdGZ1bmN0aW9uIG1hcEluZGljZXMgKHNvdXJjZSwgaW5kaWNlcykge1xuXHRcdHZhciBvdXQgPSBbXSwgaTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvdXRbaV0gPSBzb3VyY2VbaW5kaWNlc1tpXV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdGZ1bmN0aW9uIHVucGFjayAoc3RyaW5nKSB7XG5cdFx0dmFyIGRhdGEgPSBzdHJpbmcuc3BsaXQoJ3wnKSxcblx0XHRcdG9mZnNldHMgPSBkYXRhWzJdLnNwbGl0KCcgJyksXG5cdFx0XHRpbmRpY2VzID0gZGF0YVszXS5zcGxpdCgnJyksXG5cdFx0XHR1bnRpbHMgID0gZGF0YVs0XS5zcGxpdCgnICcpO1xuXG5cdFx0YXJyYXlUb0ludChvZmZzZXRzKTtcblx0XHRhcnJheVRvSW50KGluZGljZXMpO1xuXHRcdGFycmF5VG9JbnQodW50aWxzKTtcblxuXHRcdGludFRvVW50aWwodW50aWxzLCBpbmRpY2VzLmxlbmd0aCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZSAgICAgICA6IGRhdGFbMF0sXG5cdFx0XHRhYmJycyAgICAgIDogbWFwSW5kaWNlcyhkYXRhWzFdLnNwbGl0KCcgJyksIGluZGljZXMpLFxuXHRcdFx0b2Zmc2V0cyAgICA6IG1hcEluZGljZXMob2Zmc2V0cywgaW5kaWNlcyksXG5cdFx0XHR1bnRpbHMgICAgIDogdW50aWxzLFxuXHRcdFx0cG9wdWxhdGlvbiA6IGRhdGFbNV0gfCAwXG5cdFx0fTtcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRab25lIG9iamVjdFxuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gWm9uZSAocGFja2VkU3RyaW5nKSB7XG5cdFx0aWYgKHBhY2tlZFN0cmluZykge1xuXHRcdFx0dGhpcy5fc2V0KHVucGFjayhwYWNrZWRTdHJpbmcpKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBjbG9zZXN0IChudW0sIGFycikge1xuXHRcdHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuXHRcdGlmIChudW0gPCBhcnJbMF0pIHtcblx0XHRcdHJldHVybiAwO1xuXHRcdH0gZWxzZSBpZiAobGVuID4gMSAmJiBhcnJbbGVuIC0gMV0gPT09IEluZmluaXR5ICYmIG51bSA+PSBhcnJbbGVuIC0gMl0pIHtcblx0XHRcdHJldHVybiBsZW4gLSAxO1xuXHRcdH0gZWxzZSBpZiAobnVtID49IGFycltsZW4gLSAxXSkge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblxuXHRcdHZhciBtaWQ7XG5cdFx0dmFyIGxvID0gMDtcblx0XHR2YXIgaGkgPSBsZW4gLSAxO1xuXHRcdHdoaWxlIChoaSAtIGxvID4gMSkge1xuXHRcdFx0bWlkID0gTWF0aC5mbG9vcigobG8gKyBoaSkgLyAyKTtcblx0XHRcdGlmIChhcnJbbWlkXSA8PSBudW0pIHtcblx0XHRcdFx0bG8gPSBtaWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoaSA9IG1pZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGhpO1xuXHR9XG5cblx0Wm9uZS5wcm90b3R5cGUgPSB7XG5cdFx0X3NldCA6IGZ1bmN0aW9uICh1bnBhY2tlZCkge1xuXHRcdFx0dGhpcy5uYW1lICAgICAgID0gdW5wYWNrZWQubmFtZTtcblx0XHRcdHRoaXMuYWJicnMgICAgICA9IHVucGFja2VkLmFiYnJzO1xuXHRcdFx0dGhpcy51bnRpbHMgICAgID0gdW5wYWNrZWQudW50aWxzO1xuXHRcdFx0dGhpcy5vZmZzZXRzICAgID0gdW5wYWNrZWQub2Zmc2V0cztcblx0XHRcdHRoaXMucG9wdWxhdGlvbiA9IHVucGFja2VkLnBvcHVsYXRpb247XG5cdFx0fSxcblxuXHRcdF9pbmRleCA6IGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcblx0XHRcdHZhciB0YXJnZXQgPSArdGltZXN0YW1wLFxuXHRcdFx0XHR1bnRpbHMgPSB0aGlzLnVudGlscyxcblx0XHRcdFx0aTtcblxuXHRcdFx0aSA9IGNsb3Nlc3QodGFyZ2V0LCB1bnRpbHMpO1xuXHRcdFx0aWYgKGkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y291bnRyaWVzIDogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIHpvbmVfbmFtZSA9IHRoaXMubmFtZTtcblx0XHRcdHJldHVybiBPYmplY3Qua2V5cyhjb3VudHJpZXMpLmZpbHRlcihmdW5jdGlvbiAoY291bnRyeV9jb2RlKSB7XG5cdFx0XHRcdHJldHVybiBjb3VudHJpZXNbY291bnRyeV9jb2RlXS56b25lcy5pbmRleE9mKHpvbmVfbmFtZSkgIT09IC0xO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdHBhcnNlIDogZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuXHRcdFx0dmFyIHRhcmdldCAgPSArdGltZXN0YW1wLFxuXHRcdFx0XHRvZmZzZXRzID0gdGhpcy5vZmZzZXRzLFxuXHRcdFx0XHR1bnRpbHMgID0gdGhpcy51bnRpbHMsXG5cdFx0XHRcdG1heCAgICAgPSB1bnRpbHMubGVuZ3RoIC0gMSxcblx0XHRcdFx0b2Zmc2V0LCBvZmZzZXROZXh0LCBvZmZzZXRQcmV2LCBpO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHtcblx0XHRcdFx0b2Zmc2V0ICAgICA9IG9mZnNldHNbaV07XG5cdFx0XHRcdG9mZnNldE5leHQgPSBvZmZzZXRzW2kgKyAxXTtcblx0XHRcdFx0b2Zmc2V0UHJldiA9IG9mZnNldHNbaSA/IGkgLSAxIDogaV07XG5cblx0XHRcdFx0aWYgKG9mZnNldCA8IG9mZnNldE5leHQgJiYgdHoubW92ZUFtYmlndW91c0ZvcndhcmQpIHtcblx0XHRcdFx0XHRvZmZzZXQgPSBvZmZzZXROZXh0O1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9mZnNldCA+IG9mZnNldFByZXYgJiYgdHoubW92ZUludmFsaWRGb3J3YXJkKSB7XG5cdFx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0UHJldjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YXJnZXQgPCB1bnRpbHNbaV0gLSAob2Zmc2V0ICogNjAwMDApKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9mZnNldHNbaV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldHNbbWF4XTtcblx0XHR9LFxuXG5cdFx0YWJiciA6IGZ1bmN0aW9uIChtb20pIHtcblx0XHRcdHJldHVybiB0aGlzLmFiYnJzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH0sXG5cblx0XHRvZmZzZXQgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRsb2dFcnJvcihcInpvbmUub2Zmc2V0IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygem9uZS51dGNPZmZzZXRcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH0sXG5cblx0XHR1dGNPZmZzZXQgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH1cblx0fTtcblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0Q291bnRyeSBvYmplY3Rcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIENvdW50cnkgKGNvdW50cnlfbmFtZSwgem9uZV9uYW1lcykge1xuXHRcdHRoaXMubmFtZSA9IGNvdW50cnlfbmFtZTtcblx0XHR0aGlzLnpvbmVzID0gem9uZV9uYW1lcztcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRDdXJyZW50IFRpbWV6b25lXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBPZmZzZXRBdChhdCkge1xuXHRcdHZhciB0aW1lU3RyaW5nID0gYXQudG9UaW1lU3RyaW5nKCk7XG5cdFx0dmFyIGFiYnIgPSB0aW1lU3RyaW5nLm1hdGNoKC9cXChbYS16IF0rXFwpL2kpO1xuXHRcdGlmIChhYmJyICYmIGFiYnJbMF0pIHtcblx0XHRcdC8vIDE3OjU2OjMxIEdNVC0wNjAwIChDU1QpXG5cdFx0XHQvLyAxNzo1NjozMSBHTVQtMDYwMCAoQ2VudHJhbCBTdGFuZGFyZCBUaW1lKVxuXHRcdFx0YWJiciA9IGFiYnJbMF0ubWF0Y2goL1tBLVpdL2cpO1xuXHRcdFx0YWJiciA9IGFiYnIgPyBhYmJyLmpvaW4oJycpIDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAxNzo1NjozMSBDU1Rcblx0XHRcdC8vIDE3OjU2OjMxIEdNVCswODAwICjlj7DljJfmqJnmupbmmYLplpMpXG5cdFx0XHRhYmJyID0gdGltZVN0cmluZy5tYXRjaCgvW0EtWl17Myw1fS9nKTtcblx0XHRcdGFiYnIgPSBhYmJyID8gYWJiclswXSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoYWJiciA9PT0gJ0dNVCcpIHtcblx0XHRcdGFiYnIgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5hdCA9ICthdDtcblx0XHR0aGlzLmFiYnIgPSBhYmJyO1xuXHRcdHRoaXMub2Zmc2V0ID0gYXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIFpvbmVTY29yZSh6b25lKSB7XG5cdFx0dGhpcy56b25lID0gem9uZTtcblx0XHR0aGlzLm9mZnNldFNjb3JlID0gMDtcblx0XHR0aGlzLmFiYnJTY29yZSA9IDA7XG5cdH1cblxuXHRab25lU2NvcmUucHJvdG90eXBlLnNjb3JlT2Zmc2V0QXQgPSBmdW5jdGlvbiAob2Zmc2V0QXQpIHtcblx0XHR0aGlzLm9mZnNldFNjb3JlICs9IE1hdGguYWJzKHRoaXMuem9uZS51dGNPZmZzZXQob2Zmc2V0QXQuYXQpIC0gb2Zmc2V0QXQub2Zmc2V0KTtcblx0XHRpZiAodGhpcy56b25lLmFiYnIob2Zmc2V0QXQuYXQpLnJlcGxhY2UoL1teQS1aXS9nLCAnJykgIT09IG9mZnNldEF0LmFiYnIpIHtcblx0XHRcdHRoaXMuYWJiclNjb3JlKys7XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGZpbmRDaGFuZ2UobG93LCBoaWdoKSB7XG5cdFx0dmFyIG1pZCwgZGlmZjtcblxuXHRcdHdoaWxlICgoZGlmZiA9ICgoaGlnaC5hdCAtIGxvdy5hdCkgLyAxMmU0IHwgMCkgKiA2ZTQpKSB7XG5cdFx0XHRtaWQgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUobG93LmF0ICsgZGlmZikpO1xuXHRcdFx0aWYgKG1pZC5vZmZzZXQgPT09IGxvdy5vZmZzZXQpIHtcblx0XHRcdFx0bG93ID0gbWlkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGlnaCA9IG1pZDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbG93O1xuXHR9XG5cblx0ZnVuY3Rpb24gdXNlck9mZnNldHMoKSB7XG5cdFx0dmFyIHN0YXJ0WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIDIsXG5cdFx0XHRsYXN0ID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciwgMCwgMSkpLFxuXHRcdFx0bGFzdE9mZnNldCA9IGxhc3Qub2Zmc2V0LFxuXHRcdFx0b2Zmc2V0cyA9IFtsYXN0XSxcblx0XHRcdGNoYW5nZSwgbmV4dCwgbmV4dE9mZnNldCwgaTtcblxuXHRcdGZvciAoaSA9IDE7IGkgPCA0ODsgaSsrKSB7XG5cdFx0XHRuZXh0T2Zmc2V0ID0gbmV3IERhdGUoc3RhcnRZZWFyLCBpLCAxKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuXHRcdFx0aWYgKG5leHRPZmZzZXQgIT09IGxhc3RPZmZzZXQpIHtcblx0XHRcdFx0Ly8gQ3JlYXRlIE9mZnNldEF0IGhlcmUgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYWJiciBwYXJzaW5nIGJlZm9yZSBjaGVja2luZyBvZmZzZXRzXG5cdFx0XHRcdG5leHQgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyLCBpLCAxKSk7XG5cdFx0XHRcdGNoYW5nZSA9IGZpbmRDaGFuZ2UobGFzdCwgbmV4dCk7XG5cdFx0XHRcdG9mZnNldHMucHVzaChjaGFuZ2UpO1xuXHRcdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKGNoYW5nZS5hdCArIDZlNCkpKTtcblx0XHRcdFx0bGFzdCA9IG5leHQ7XG5cdFx0XHRcdGxhc3RPZmZzZXQgPSBuZXh0T2Zmc2V0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0XHRcdG9mZnNldHMucHVzaChuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyICsgaSwgMCwgMSkpKTtcblx0XHRcdG9mZnNldHMucHVzaChuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyICsgaSwgNiwgMSkpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb2Zmc2V0cztcblx0fVxuXG5cdGZ1bmN0aW9uIHNvcnRab25lU2NvcmVzIChhLCBiKSB7XG5cdFx0aWYgKGEub2Zmc2V0U2NvcmUgIT09IGIub2Zmc2V0U2NvcmUpIHtcblx0XHRcdHJldHVybiBhLm9mZnNldFNjb3JlIC0gYi5vZmZzZXRTY29yZTtcblx0XHR9XG5cdFx0aWYgKGEuYWJiclNjb3JlICE9PSBiLmFiYnJTY29yZSkge1xuXHRcdFx0cmV0dXJuIGEuYWJiclNjb3JlIC0gYi5hYmJyU2NvcmU7XG5cdFx0fVxuXHRcdGlmIChhLnpvbmUucG9wdWxhdGlvbiAhPT0gYi56b25lLnBvcHVsYXRpb24pIHtcblx0XHRcdHJldHVybiBiLnpvbmUucG9wdWxhdGlvbiAtIGEuem9uZS5wb3B1bGF0aW9uO1xuXHRcdH1cblx0XHRyZXR1cm4gYi56b25lLm5hbWUubG9jYWxlQ29tcGFyZShhLnpvbmUubmFtZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRUb0d1ZXNzZXMgKG5hbWUsIG9mZnNldHMpIHtcblx0XHR2YXIgaSwgb2Zmc2V0O1xuXHRcdGFycmF5VG9JbnQob2Zmc2V0cyk7XG5cdFx0Zm9yIChpID0gMDsgaSA8IG9mZnNldHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9mZnNldCA9IG9mZnNldHNbaV07XG5cdFx0XHRndWVzc2VzW29mZnNldF0gPSBndWVzc2VzW29mZnNldF0gfHwge307XG5cdFx0XHRndWVzc2VzW29mZnNldF1bbmFtZV0gPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGd1ZXNzZXNGb3JVc2VyT2Zmc2V0cyAob2Zmc2V0cykge1xuXHRcdHZhciBvZmZzZXRzTGVuZ3RoID0gb2Zmc2V0cy5sZW5ndGgsXG5cdFx0XHRmaWx0ZXJlZEd1ZXNzZXMgPSB7fSxcblx0XHRcdG91dCA9IFtdLFxuXHRcdFx0Y2hlY2tlZE9mZnNldHMgPSB7fSxcblx0XHRcdGksIGosIG9mZnNldCwgZ3Vlc3Nlc09mZnNldDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBvZmZzZXRzTGVuZ3RoOyBpKyspIHtcblx0XHRcdG9mZnNldCA9IG9mZnNldHNbaV0ub2Zmc2V0O1xuXHRcdFx0aWYgKGNoZWNrZWRPZmZzZXRzLmhhc093blByb3BlcnR5KG9mZnNldCkpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRndWVzc2VzT2Zmc2V0ID0gZ3Vlc3Nlc1tvZmZzZXRdIHx8IHt9O1xuXHRcdFx0Zm9yIChqIGluIGd1ZXNzZXNPZmZzZXQpIHtcblx0XHRcdFx0aWYgKGd1ZXNzZXNPZmZzZXQuaGFzT3duUHJvcGVydHkoaikpIHtcblx0XHRcdFx0XHRmaWx0ZXJlZEd1ZXNzZXNbal0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjaGVja2VkT2Zmc2V0c1tvZmZzZXRdID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRmb3IgKGkgaW4gZmlsdGVyZWRHdWVzc2VzKSB7XG5cdFx0XHRpZiAoZmlsdGVyZWRHdWVzc2VzLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHRcdG91dC5wdXNoKG5hbWVzW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVidWlsZEd1ZXNzICgpIHtcblxuXHRcdC8vIHVzZSBJbnRsIEFQSSB3aGVuIGF2YWlsYWJsZSBhbmQgcmV0dXJuaW5nIHZhbGlkIHRpbWUgem9uZVxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgaW50bE5hbWUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmU7XG5cdFx0XHRpZiAoaW50bE5hbWUgJiYgaW50bE5hbWUubGVuZ3RoID4gMykge1xuXHRcdFx0XHR2YXIgbmFtZSA9IG5hbWVzW25vcm1hbGl6ZU5hbWUoaW50bE5hbWUpXTtcblx0XHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsb2dFcnJvcihcIk1vbWVudCBUaW1lem9uZSBmb3VuZCBcIiArIGludGxOYW1lICsgXCIgZnJvbSB0aGUgSW50bCBhcGksIGJ1dCBkaWQgbm90IGhhdmUgdGhhdCBkYXRhIGxvYWRlZC5cIik7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gSW50bCB1bmF2YWlsYWJsZSwgZmFsbCBiYWNrIHRvIG1hbnVhbCBndWVzc2luZy5cblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0cyA9IHVzZXJPZmZzZXRzKCksXG5cdFx0XHRvZmZzZXRzTGVuZ3RoID0gb2Zmc2V0cy5sZW5ndGgsXG5cdFx0XHRndWVzc2VzID0gZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzKG9mZnNldHMpLFxuXHRcdFx0em9uZVNjb3JlcyA9IFtdLFxuXHRcdFx0em9uZVNjb3JlLCBpLCBqO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGd1ZXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHpvbmVTY29yZSA9IG5ldyBab25lU2NvcmUoZ2V0Wm9uZShndWVzc2VzW2ldKSwgb2Zmc2V0c0xlbmd0aCk7XG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgb2Zmc2V0c0xlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHpvbmVTY29yZS5zY29yZU9mZnNldEF0KG9mZnNldHNbal0pO1xuXHRcdFx0fVxuXHRcdFx0em9uZVNjb3Jlcy5wdXNoKHpvbmVTY29yZSk7XG5cdFx0fVxuXG5cdFx0em9uZVNjb3Jlcy5zb3J0KHNvcnRab25lU2NvcmVzKTtcblxuXHRcdHJldHVybiB6b25lU2NvcmVzLmxlbmd0aCA+IDAgPyB6b25lU2NvcmVzWzBdLnpvbmUubmFtZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGZ1bmN0aW9uIGd1ZXNzIChpZ25vcmVDYWNoZSkge1xuXHRcdGlmICghY2FjaGVkR3Vlc3MgfHwgaWdub3JlQ2FjaGUpIHtcblx0XHRcdGNhY2hlZEd1ZXNzID0gcmVidWlsZEd1ZXNzKCk7XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZWRHdWVzcztcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRHbG9iYWwgTWV0aG9kc1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gbm9ybWFsaXplTmFtZSAobmFtZSkge1xuXHRcdHJldHVybiAobmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXC8vZywgJ18nKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFpvbmUgKHBhY2tlZCkge1xuXHRcdHZhciBpLCBuYW1lLCBzcGxpdCwgbm9ybWFsaXplZDtcblxuXHRcdGlmICh0eXBlb2YgcGFja2VkID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRwYWNrZWQgPSBbcGFja2VkXTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgcGFja2VkLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzcGxpdCA9IHBhY2tlZFtpXS5zcGxpdCgnfCcpO1xuXHRcdFx0bmFtZSA9IHNwbGl0WzBdO1xuXHRcdFx0bm9ybWFsaXplZCA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG5cdFx0XHR6b25lc1tub3JtYWxpemVkXSA9IHBhY2tlZFtpXTtcblx0XHRcdG5hbWVzW25vcm1hbGl6ZWRdID0gbmFtZTtcblx0XHRcdGFkZFRvR3Vlc3Nlcyhub3JtYWxpemVkLCBzcGxpdFsyXS5zcGxpdCgnICcpKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRab25lIChuYW1lLCBjYWxsZXIpIHtcblxuXHRcdG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuXG5cdFx0dmFyIHpvbmUgPSB6b25lc1tuYW1lXTtcblx0XHR2YXIgbGluaztcblxuXHRcdGlmICh6b25lIGluc3RhbmNlb2YgWm9uZSkge1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB6b25lID09PSAnc3RyaW5nJykge1xuXHRcdFx0em9uZSA9IG5ldyBab25lKHpvbmUpO1xuXHRcdFx0em9uZXNbbmFtZV0gPSB6b25lO1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0Ly8gUGFzcyBnZXRab25lIHRvIHByZXZlbnQgcmVjdXJzaW9uIG1vcmUgdGhhbiAxIGxldmVsIGRlZXBcblx0XHRpZiAobGlua3NbbmFtZV0gJiYgY2FsbGVyICE9PSBnZXRab25lICYmIChsaW5rID0gZ2V0Wm9uZShsaW5rc1tuYW1lXSwgZ2V0Wm9uZSkpKSB7XG5cdFx0XHR6b25lID0gem9uZXNbbmFtZV0gPSBuZXcgWm9uZSgpO1xuXHRcdFx0em9uZS5fc2V0KGxpbmspO1xuXHRcdFx0em9uZS5uYW1lID0gbmFtZXNbbmFtZV07XG5cdFx0XHRyZXR1cm4gem9uZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5hbWVzICgpIHtcblx0XHR2YXIgaSwgb3V0ID0gW107XG5cblx0XHRmb3IgKGkgaW4gbmFtZXMpIHtcblx0XHRcdGlmIChuYW1lcy5oYXNPd25Qcm9wZXJ0eShpKSAmJiAoem9uZXNbaV0gfHwgem9uZXNbbGlua3NbaV1dKSAmJiBuYW1lc1tpXSkge1xuXHRcdFx0XHRvdXQucHVzaChuYW1lc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dC5zb3J0KCk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDb3VudHJ5TmFtZXMgKCkge1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhjb3VudHJpZXMpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkTGluayAoYWxpYXNlcykge1xuXHRcdHZhciBpLCBhbGlhcywgbm9ybWFsMCwgbm9ybWFsMTtcblxuXHRcdGlmICh0eXBlb2YgYWxpYXNlcyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0YWxpYXNlcyA9IFthbGlhc2VzXTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0YWxpYXMgPSBhbGlhc2VzW2ldLnNwbGl0KCd8Jyk7XG5cblx0XHRcdG5vcm1hbDAgPSBub3JtYWxpemVOYW1lKGFsaWFzWzBdKTtcblx0XHRcdG5vcm1hbDEgPSBub3JtYWxpemVOYW1lKGFsaWFzWzFdKTtcblxuXHRcdFx0bGlua3Nbbm9ybWFsMF0gPSBub3JtYWwxO1xuXHRcdFx0bmFtZXNbbm9ybWFsMF0gPSBhbGlhc1swXTtcblxuXHRcdFx0bGlua3Nbbm9ybWFsMV0gPSBub3JtYWwwO1xuXHRcdFx0bmFtZXNbbm9ybWFsMV0gPSBhbGlhc1sxXTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRDb3VudHJpZXMgKGRhdGEpIHtcblx0XHR2YXIgaSwgY291bnRyeV9jb2RlLCBjb3VudHJ5X3pvbmVzLCBzcGxpdDtcblx0XHRpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoKSByZXR1cm47XG5cdFx0Zm9yIChpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNwbGl0ID0gZGF0YVtpXS5zcGxpdCgnfCcpO1xuXHRcdFx0Y291bnRyeV9jb2RlID0gc3BsaXRbMF0udG9VcHBlckNhc2UoKTtcblx0XHRcdGNvdW50cnlfem9uZXMgPSBzcGxpdFsxXS5zcGxpdCgnICcpO1xuXHRcdFx0Y291bnRyaWVzW2NvdW50cnlfY29kZV0gPSBuZXcgQ291bnRyeShcblx0XHRcdFx0Y291bnRyeV9jb2RlLFxuXHRcdFx0XHRjb3VudHJ5X3pvbmVzXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldENvdW50cnkgKG5hbWUpIHtcblx0XHRuYW1lID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuXHRcdHJldHVybiBjb3VudHJpZXNbbmFtZV0gfHwgbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHpvbmVzRm9yQ291bnRyeShjb3VudHJ5LCB3aXRoX29mZnNldCkge1xuXHRcdGNvdW50cnkgPSBnZXRDb3VudHJ5KGNvdW50cnkpO1xuXG5cdFx0aWYgKCFjb3VudHJ5KSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciB6b25lcyA9IGNvdW50cnkuem9uZXMuc29ydCgpO1xuXG5cdFx0aWYgKHdpdGhfb2Zmc2V0KSB7XG5cdFx0XHRyZXR1cm4gem9uZXMubWFwKGZ1bmN0aW9uICh6b25lX25hbWUpIHtcblx0XHRcdFx0dmFyIHpvbmUgPSBnZXRab25lKHpvbmVfbmFtZSk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmFtZTogem9uZV9uYW1lLFxuXHRcdFx0XHRcdG9mZnNldDogem9uZS51dGNPZmZzZXQobmV3IERhdGUoKSlcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB6b25lcztcblx0fVxuXG5cdGZ1bmN0aW9uIGxvYWREYXRhIChkYXRhKSB7XG5cdFx0YWRkWm9uZShkYXRhLnpvbmVzKTtcblx0XHRhZGRMaW5rKGRhdGEubGlua3MpO1xuXHRcdGFkZENvdW50cmllcyhkYXRhLmNvdW50cmllcyk7XG5cdFx0dHouZGF0YVZlcnNpb24gPSBkYXRhLnZlcnNpb247XG5cdH1cblxuXHRmdW5jdGlvbiB6b25lRXhpc3RzIChuYW1lKSB7XG5cdFx0aWYgKCF6b25lRXhpc3RzLmRpZFNob3dFcnJvcikge1xuXHRcdFx0em9uZUV4aXN0cy5kaWRTaG93RXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRsb2dFcnJvcihcIm1vbWVudC50ei56b25lRXhpc3RzKCdcIiArIG5hbWUgKyBcIicpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgIW1vbWVudC50ei56b25lKCdcIiArIG5hbWUgKyBcIicpXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gISFnZXRab25lKG5hbWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gbmVlZHNPZmZzZXQgKG0pIHtcblx0XHR2YXIgaXNVbml4VGltZXN0YW1wID0gKG0uX2YgPT09ICdYJyB8fCBtLl9mID09PSAneCcpO1xuXHRcdHJldHVybiAhIShtLl9hICYmIChtLl90em0gPT09IHVuZGVmaW5lZCkgJiYgIWlzVW5peFRpbWVzdGFtcCk7XG5cdH1cblxuXHRmdW5jdGlvbiBsb2dFcnJvciAobWVzc2FnZSkge1xuXHRcdGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdG1vbWVudC50eiBuYW1lc3BhY2Vcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIHR6IChpbnB1dCkge1xuXHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwLCAtMSksXG5cdFx0XHRuYW1lID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSxcblx0XHRcdG91dCAgPSBtb21lbnQudXRjLmFwcGx5KG51bGwsIGFyZ3MpLFxuXHRcdFx0em9uZTtcblxuXHRcdGlmICghbW9tZW50LmlzTW9tZW50KGlucHV0KSAmJiBuZWVkc09mZnNldChvdXQpICYmICh6b25lID0gZ2V0Wm9uZShuYW1lKSkpIHtcblx0XHRcdG91dC5hZGQoem9uZS5wYXJzZShvdXQpLCAnbWludXRlcycpO1xuXHRcdH1cblxuXHRcdG91dC50eihuYW1lKTtcblxuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHR0ei52ZXJzaW9uICAgICAgPSBWRVJTSU9OO1xuXHR0ei5kYXRhVmVyc2lvbiAgPSAnJztcblx0dHouX3pvbmVzICAgICAgID0gem9uZXM7XG5cdHR6Ll9saW5rcyAgICAgICA9IGxpbmtzO1xuXHR0ei5fbmFtZXMgICAgICAgPSBuYW1lcztcblx0dHouX2NvdW50cmllc1x0PSBjb3VudHJpZXM7XG5cdHR6LmFkZCAgICAgICAgICA9IGFkZFpvbmU7XG5cdHR6LmxpbmsgICAgICAgICA9IGFkZExpbms7XG5cdHR6LmxvYWQgICAgICAgICA9IGxvYWREYXRhO1xuXHR0ei56b25lICAgICAgICAgPSBnZXRab25lO1xuXHR0ei56b25lRXhpc3RzICAgPSB6b25lRXhpc3RzOyAvLyBkZXByZWNhdGVkIGluIDAuMS4wXG5cdHR6Lmd1ZXNzICAgICAgICA9IGd1ZXNzO1xuXHR0ei5uYW1lcyAgICAgICAgPSBnZXROYW1lcztcblx0dHouWm9uZSAgICAgICAgID0gWm9uZTtcblx0dHoudW5wYWNrICAgICAgID0gdW5wYWNrO1xuXHR0ei51bnBhY2tCYXNlNjAgPSB1bnBhY2tCYXNlNjA7XG5cdHR6Lm5lZWRzT2Zmc2V0ICA9IG5lZWRzT2Zmc2V0O1xuXHR0ei5tb3ZlSW52YWxpZEZvcndhcmQgICA9IHRydWU7XG5cdHR6Lm1vdmVBbWJpZ3VvdXNGb3J3YXJkID0gZmFsc2U7XG5cdHR6LmNvdW50cmllcyAgICA9IGdldENvdW50cnlOYW1lcztcblx0dHouem9uZXNGb3JDb3VudHJ5ID0gem9uZXNGb3JDb3VudHJ5O1xuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRJbnRlcmZhY2Ugd2l0aCBNb21lbnQuanNcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdHZhciBmbiA9IG1vbWVudC5mbjtcblxuXHRtb21lbnQudHogPSB0ejtcblxuXHRtb21lbnQuZGVmYXVsdFpvbmUgPSBudWxsO1xuXG5cdG1vbWVudC51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAobW9tLCBrZWVwVGltZSkge1xuXHRcdHZhciB6b25lID0gbW9tZW50LmRlZmF1bHRab25lLFxuXHRcdFx0b2Zmc2V0O1xuXG5cdFx0aWYgKG1vbS5feiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoem9uZSAmJiBuZWVkc09mZnNldChtb20pICYmICFtb20uX2lzVVRDICYmIG1vbS5pc1ZhbGlkKCkpIHtcblx0XHRcdFx0bW9tLl9kID0gbW9tZW50LnV0Yyhtb20uX2EpLl9kO1xuXHRcdFx0XHRtb20udXRjKCkuYWRkKHpvbmUucGFyc2UobW9tKSwgJ21pbnV0ZXMnKTtcblx0XHRcdH1cblx0XHRcdG1vbS5feiA9IHpvbmU7XG5cdFx0fVxuXHRcdGlmIChtb20uX3opIHtcblx0XHRcdG9mZnNldCA9IG1vbS5fei51dGNPZmZzZXQobW9tKTtcblx0XHRcdGlmIChNYXRoLmFicyhvZmZzZXQpIDwgMTYpIHtcblx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0IC8gNjA7XG5cdFx0XHR9XG5cdFx0XHRpZiAobW9tLnV0Y09mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhciB6ID0gbW9tLl96O1xuXHRcdFx0XHRtb20udXRjT2Zmc2V0KC1vZmZzZXQsIGtlZXBUaW1lKTtcblx0XHRcdFx0bW9tLl96ID0gejtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1vbS56b25lKG9mZnNldCwga2VlcFRpbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRmbi50eiA9IGZ1bmN0aW9uIChuYW1lLCBrZWVwVGltZSkge1xuXHRcdGlmIChuYW1lKSB7XG5cdFx0XHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGltZSB6b25lIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgZ290ICcgKyBuYW1lICsgJyBbJyArIHR5cGVvZiBuYW1lICsgJ10nKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3ogPSBnZXRab25lKG5hbWUpO1xuXHRcdFx0aWYgKHRoaXMuX3opIHtcblx0XHRcdFx0bW9tZW50LnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsb2dFcnJvcihcIk1vbWVudCBUaW1lem9uZSBoYXMgbm8gZGF0YSBmb3IgXCIgKyBuYW1lICsgXCIuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL3RpbWV6b25lL2RvY3MvIy9kYXRhLWxvYWRpbmcvLlwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5feikgeyByZXR1cm4gdGhpcy5fei5uYW1lOyB9XG5cdH07XG5cblx0ZnVuY3Rpb24gYWJicldyYXAgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAodGhpcy5feikgeyByZXR1cm4gdGhpcy5fei5hYmJyKHRoaXMpOyB9XG5cdFx0XHRyZXR1cm4gb2xkLmNhbGwodGhpcyk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlc2V0Wm9uZVdyYXAgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aGlzLl96ID0gbnVsbDtcblx0XHRcdHJldHVybiBvbGQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVzZXRab25lV3JhcDIgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHRoaXMuX3ogPSBudWxsO1xuXHRcdFx0cmV0dXJuIG9sZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH1cblxuXHRmbi56b25lTmFtZSAgPSBhYmJyV3JhcChmbi56b25lTmFtZSk7XG5cdGZuLnpvbmVBYmJyICA9IGFiYnJXcmFwKGZuLnpvbmVBYmJyKTtcblx0Zm4udXRjICAgICAgID0gcmVzZXRab25lV3JhcChmbi51dGMpO1xuXHRmbi5sb2NhbCAgICAgPSByZXNldFpvbmVXcmFwKGZuLmxvY2FsKTtcblx0Zm4udXRjT2Zmc2V0ID0gcmVzZXRab25lV3JhcDIoZm4udXRjT2Zmc2V0KTtcblxuXHRtb21lbnQudHouc2V0RGVmYXVsdCA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRpZiAobWFqb3IgPCAyIHx8IChtYWpvciA9PT0gMiAmJiBtaW5vciA8IDkpKSB7XG5cdFx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHNldERlZmF1bHQoKSByZXF1aXJlcyBNb21lbnQuanMgPj0gMi45LjAuIFlvdSBhcmUgdXNpbmcgTW9tZW50LmpzICcgKyBtb21lbnQudmVyc2lvbiArICcuJyk7XG5cdFx0fVxuXHRcdG1vbWVudC5kZWZhdWx0Wm9uZSA9IG5hbWUgPyBnZXRab25lKG5hbWUpIDogbnVsbDtcblx0XHRyZXR1cm4gbW9tZW50O1xuXHR9O1xuXG5cdC8vIENsb25pbmcgYSBtb21lbnQgc2hvdWxkIGluY2x1ZGUgdGhlIF96IHByb3BlcnR5LlxuXHR2YXIgbW9tZW50UHJvcGVydGllcyA9IG1vbWVudC5tb21lbnRQcm9wZXJ0aWVzO1xuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1vbWVudFByb3BlcnRpZXMpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG5cdFx0Ly8gbW9tZW50IDIuOC4xK1xuXHRcdG1vbWVudFByb3BlcnRpZXMucHVzaCgnX3onKTtcblx0XHRtb21lbnRQcm9wZXJ0aWVzLnB1c2goJ19hJyk7XG5cdH0gZWxzZSBpZiAobW9tZW50UHJvcGVydGllcykge1xuXHRcdC8vIG1vbWVudCAyLjcuMFxuXHRcdG1vbWVudFByb3BlcnRpZXMuX3ogPSBudWxsO1xuXHR9XG5cblx0Ly8gSU5KRUNUIERBVEFcblxuXHRyZXR1cm4gbW9tZW50O1xufSkpO1xuIiwidmFyIG1vbWVudCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vbW9tZW50LXRpbWV6b25lXCIpO1xubW9tZW50LnR6LmxvYWQocmVxdWlyZSgnLi9kYXRhL3BhY2tlZC9sYXRlc3QuanNvbicpKTtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXNzZScsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBPcnQgb3IgR2VzY2jDpGZ0JyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOiAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHVnJyxcbiAgICBhcnJpdmFsOiAnQW5rdW5mdCcsXG4gICAgYmFjazogJ1p1csO8Y2snLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnTGVpaHJhZC1TdGF0aW9uJyxcbiAgICBidXM6ICdCdXMnLFxuICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdMw7ZzY2hlbicsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1N1Y2hoaXN0b3JpZSBsw7ZzY2hlbicsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQWt0dWVsbGUgUG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ0zDtnNjaGVuJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnV29sbGVuIFNpZSBkaWUgU3VjaC1IaXN0b3JpZSBsw7ZzY2hlbj8nLFxuICAgIGRlcGFydHVyZTogJ0FiZmFocnQnLFxuICAgIGRlc3RpbmF0aW9uOiAnWmllbCcsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1N0YXJ0IGVpbmdlYmVuLicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnWmllbCBlaW5nZWJlbi4nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm9yaXRlbicsXG4gICAgZmVycnk6ICdGw6RocmUnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnWnVrw7xuZnRpZ2UgVmVyYmluZHVuZycsXG4gICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgb3dubG9jYXRpb25zOiAnRWlnZW5lIEZhdm9yaXRlbicsXG4gICAgbG9hZGluZzogJ0xhZGVuLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcmFpbDogJ1p1ZycsXG4gICAgc2VhcmNoOiAnU3VjaGUnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTdWNoZSBhbmhhbmQgdm9uIEFkcmVzc2Ugb2RlciBPcnRzYW5nYWJlJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTdWNoZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTdWNoZSBaaWVsb3J0LCBMaW5pZSBvciBIYWx0ZXN0ZWxsZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdaaWVsb3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnRXJnZWJuaXNzZSBpbiDigJxaaWVsb3J04oCdLVJlaXRlciBhbnplaWdlbicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0tlaW4gT3J0IGdlZnVuZGVuLicsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU3VjaGUgU3RhcnRvcnQsIExpbmllIG9kZXIgSGFsdGVzdGVsbGUnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N0YXJ0b3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1N0YW5kb3J0IGVybWl0dGVsbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICdFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQWt0dWVsbGUgQXVzd2FobDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyYcOfZScsXG4gICAgc3Vid2F5OiAnVS1CYWhuJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ0hhbHRlc3RlbGxlJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTdWNoZSBIYWx0ZXN0ZWxsZW4gdW5kIExpbmllbiBpbiBkZXIgTsOkaGUnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTdWNoZSBCdXNsaW5pZW4gb3IgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTdWNoZSBMZWlocmFkLVN0YXRpb25lbicsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTdWNoZSBadWd2ZXJiaW5kdW5nZW4gb2RlciBCYWhuaMO2ZmUnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTdWNoZSBVLUJhaG4tTGluaWVuIG9kZXIgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N1Y2hlIFN0YWR0YmFobi1IYWx0ZXN0ZWxsZW4tU3VjaGUnLFxuICAgICd0b2RheS1hdCc6ICdIZXV0ZSB1bScsXG4gICAgJ3RvbW9ycm93LWF0JzogJ01vcmdlbiB1bScsXG4gICAgdHJhbTogJ1N0cmHDn2VuYmFobicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQmVudXR6ZSBha3R1ZWxsZW4gU3RhbmRvcnQnLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV8OkaGxlIFBvc2l0aW9uIGFuaGFuZCBLYXJ0ZScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnQXVzIGVpZ2VuZW4gRmF2b3JpdGVuIGF1c3fDpGhsZW4nLFxuICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICB3aGVyZTogJ1dvaGluPycsXG4gICAgcGxhY2U6ICdPcnQnLFxuICB9LFxuICBlbjoge1xuICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZGRyZXNzLCBwbGFjZSBvciBidXNpbmVzcycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZsaWdodCcsXG4gICAgYXJyaXZhbDogJ0Fycml2YWwnLFxuICAgIGJhY2s6ICdCYWNrJyxcbiAgICBiaWtlcGFyazogJ1BhcmsgJiBSaWRlIGZvciBiaWtlcycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdCaWtlIHN0YXRpb24nLFxuICAgIGJ1czogJ2J1cycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICBjYXJwYXJrOiAnUGFyayAmIFJpZGUnLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnQ2xlYXInLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdDbGVhciBzZWFyY2ggaGlzdG9yeScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gY2xlYXIgdGhlIHNlYXJjaCBoaXN0b3J5PycsXG4gICAgZGVwYXJ0dXJlOiAnRGVwYXJ0dXJlJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnRW50ZXIgeW91ciBvcmlnaW4uJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdFbnRlciB5b3VyIGRlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvdXJpdGUnLFxuICAgIGZlcnJ5OiAnRmVycnknLFxuICAgICdmdXR1cmUtcm91dGUnOiAnRnV0dXJlIHJvdXRlJyxcbiAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICBvd25sb2NhdGlvbnM6ICdPd24gbG9jYXRpb25zJyxcbiAgICBsb2FkaW5nOiAnTG9hZGluZy4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtJyxcbiAgICBwbGF0Zm9ybTogJ1BsYXRmb3JtJyxcbiAgICByYWlsOiAnVHJhaW4nLFxuICAgIHJlcXVpcmVkOiAncmVxdWlyZWQgZmllbGQnLFxuICAgIHNlYXJjaDogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1NlYXJjaCBieSBhZGRyZXNzIG9yIHBsYWNlIG5hbWUnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTZWFyY2ggZGVzdGluYXRpb24sIHJvdXRlIG9yIHN0b3AnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnRW50ZXIgZGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdWaWV3IHJlc3VsdHMgaW4gdGhlIGFkamFjZW50IOKAnERlc3RpbmF0aW9u4oCdIHRhYicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ05vIGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTZWFyY2ggb3JpZ2luLCByb3V0ZSBvciBzdG9wJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdFbnRlciBvcmlnaW4nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnRGV0ZWN0IGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdDdXJyZW50IHNlbGVjdGlvbjoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyZWV0JyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdTdG9wJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTZWFyY2ggc3RvcHMgYW5kIHJvdXRlcycsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU2VhcmNoIGZsaWdodHMgb3IgYWlycG9ydHMnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTZWFyY2ggYnVzIHJvdXRlcyBvciBzdG9wcycsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU2VhcmNoIGNpdHkgYmlrZSBzdGF0aW9ucycsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTZWFyY2ggdHJhaW4gcm91dGVzIG9yIHN0YXRpb25zJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU2VhcmNoIG1ldHJvIHJvdXRlcyBvciBzdGF0aW9ucyAnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU2VhcmNoIHRyYW0gcm91dGVzIG9yIHN0b3BzJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1cyBhbmQgc3RvcCBzZWFyY2gnLFxuICAgICd0b2RheS1hdCc6ICd0b2RheSBhdCcsXG4gICAgJ3RvbW9ycm93LWF0JzogJ3RvbW9ycm93IGF0JyxcbiAgICB0cmFtOiAnVHJhbScsXG4gICAgdHJhY2s6ICdUcmFjaycsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnU2VsZWN0IHBvc2l0aW9uIGZyb20gbWFwJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdTZWxlY3QgZnJvbSBvd24gbG9jYXRpb25zJyxcbiAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgd2hlcmU6ICdXaGVyZSB0bz8nLFxuICAgIHBsYWNlOiAnTG9jYXRpb24nLFxuICB9LFxuICBmaToge1xuICAgIGFkZHJlc3M6ICdPc29pdGUnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ09zb2l0ZSwgcGFpa2thIHRhaSB5cml0eXMnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnQXNldGEgdsOkbGlwaXN0ZWVsbGUge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0bycsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgIGFpcnBsYW5lOiAnTGVudG9rb25lJyxcbiAgICBhcnJpdmFsOiAnUGVyaWxsw6QnLFxuICAgIGJhY2s6ICdUYWthaXNpbicsXG4gICAgdmVoaWNsZXJlbnRhbHN0YXRpb246ICdQecO2csOkYXNlbWEnLFxuICAgIGJpa2VwYXJrOiAnTGlpdHludMOkcHnDtnLDpHBhcmtraScsXG4gICAgYnVzOiAnYnVzc2knLFxuICAgIGNhbmNlbDogJ1BlcnV1dGEnLFxuICAgIGNhcnBhcms6ICdMaWl0eW50w6RweXPDpGtvaW50aScsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUeWhqZW5uw6QnLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUeWhqZW5uw6QgaGFrdWhpc3RvcmlhJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdUw6Rtw6RuaGV0a2luZW4gc2lqYWludGknLFxuICAgIGRlbGV0ZTogJ1BvaXN0YScsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0hhbHVhdGtvIHR5aGplbnTDpMOkIGhha3VoaXN0b3JpYW4/JyxcbiAgICBkZXBhcnR1cmU6ICdMw6RodMO2YWlrYScsXG4gICAgZGVzdGluYXRpb246ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgZmF2b3VyaXRlOiAnU3Vvc2lra2knLFxuICAgIGZlcnJ5OiAnTGF1dHRhJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ1R1bGV2YSByZWl0dGknLFxuICAgICdnaXZlLW9yaWdpbic6ICdMw6RodMO2cGFpa2thJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgb3JpZ2luOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgIG93bmxvY2F0aW9uczogJ09tYXQgcGFpa2F0JyxcbiAgICBsb2FkaW5nOiAnTGFkYXRhYW4uLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICBwbGF0Zm9ybTogJ0xhaXR1cmknLFxuICAgIHJhaWw6ICdKdW5hJyxcbiAgICByZXF1aXJlZDogJ3Bha29sbGluZW4ga2VudHTDpCcsXG4gICAgc2VhcmNoOiAnRXRzaScsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ0hhZSBvc29pdHRlZWxsYSB0YWkgcGFpa2FuIG5pbWVsbMOkJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdIYWUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnSGFlIG3DpMOkcsOkbnDDpMOkdMOkLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU3nDtnTDpCBtw6TDpHLDpG5ww6TDpCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ0thdHNvIHR1bG9rc2V0IHZpZXJlaXNlbHTDpCBNw6TDpHLDpG5ww6TDpC12w6RsaWxlaGRlbHTDpCcsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0VpIHR1bG9rc2lhJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdIYWUgbMOkaHTDtnBhaWtrYWEsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3nDtnTDpCBsw6RodMO2cGFpa2thJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAnTmF2aWdvaSBsaXN0YXNzYSBudW9saW7DpHBww6RpbWlsbMOkIGphIHZhbGl0c2UgZW50ZXJpbGzDpC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAnU3nDtnTDpCBzaWphaW50aSBqYSBuYXZpZ29pIGxpc3Rhc3NhIHB5eWhrw6Rpc2Vtw6RsbMOkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdWYWxpdHR1YXNpIGzDpGh0w7ZwYWlrYW4gc2lpcnJ5dMOkw6RuIHN1b3JhYW4gbcOkw6Ryw6RucMOkw6Qta2VudHTDpMOkbi4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1cycsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1c3RhJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdUw6Rtw6RuaGV0a2luZW4gdmFsaW50YToge3tzZWxlY3Rpb259fScsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdQYWlrYW5uYScsXG4gICAgc3RyZWV0OiAnS2F0dScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdBc2VtYScsXG4gICAgc3RvcDogJ1B5c8Oka2tpJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdMaW5qYSwgcHlzw6Rra2kgdGFpIGFzZW1hJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdIYWUgbGVudG9qYSB0YWkgbGVudG9hc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdIYWUgYnVzc2lsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ0hhZSBrYXVwdW5raXB5w7Zyw6Rhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnSGFlIGzDpGhpanVuYWEgdGFpIGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ0hhZSBtZXRyb2xpbmphYSB0YWkgYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ0hhZSByYWl0aW9saW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnTGluamEtIGphIHB5c8Oka2tpaGFrdScsXG4gICAgJ3RvZGF5LWF0JzogJ3TDpG7DpMOkbiBrbG8nLFxuICAgICd0b21vcnJvdy1hdCc6ICdodW9tZW5uYSBrbG8nLFxuICAgIHRyYW06ICdSYWl0aW92YXVudScsXG4gICAgdHJhY2s6ICdSYWlkZScsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1ZhbGl0c2Ugc2lqYWludGkga2FydGFsdGEnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1ZhbGl0c2Ugb21pc3RhIHBhaWtvaXN0YScsXG4gICAgdmVudWU6ICdQYWlra2EnLFxuICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgd2hlcmU6ICdNaW5uZSBtZW5uw6TDpG4/JyxcbiAgICBwbGFjZTogJ1BhaWtrYScsXG4gIH0sXG4gIHBsOiB7XG4gICAgYWRkcmVzczogJ0FkcmVzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlcywgbWllanNjZSBsdWIgZmlybWEnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdEb2RhaiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnV3liaWVyeiBjemFzIHBvc3RvanUgZGxhIHB1bmt0dSB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPdHfDs3J6IHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdMb3QnLFxuICAgIGFycml2YWw6ICdQcnp5amF6ZCcsXG4gICAgYmFjazogJ1dyw7PEhycsXG4gICAgYmlrZXBhcms6ICdQYXJrdWogaSBKZWTFuiBkbGEgcm93ZXLDs3cnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhY2phIHJvd2Vyb3dhJyxcbiAgICBidXM6ICdhdXRvYnVzJyxcbiAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgIGNhcnBhcms6ICdQYXJrdWogaSBKZWTFuicsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdXeWN6ecWbxIcnLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdXeWN6ecWbxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnT2JlY25lIHBvxYJvxbxlbmllJyxcbiAgICBkZWxldGU6ICdVc3XFhCcsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzpcbiAgICAgICdDenkgbmEgcGV3bm8gY2hjZXN6IHd5Y3p5xZtjacSHIGhpc3RvcmnEmSB3eXN6dWtpd2FuaWE/JyxcbiAgICBkZXBhcnR1cmU6ICdPZGphemQnLFxuICAgIGRlc3RpbmF0aW9uOiAnQ2VsJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnV3Byb3dhZMW6IHN3w7NqIHB1bmt0IHBvY3rEhXRrb3d5LicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnV3Byb3dhZMW6IHN3w7NqIGNlbCcsXG4gICAgZmF2b3VyaXRlOiAnVWx1YmlvbmUnLFxuICAgIGZlcnJ5OiAnUHJvbScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdQcnp5c3rFgmEgdHJhc2EnLFxuICAgIG9yaWdpbjogJ1BvY3rEhXRlaycsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1BvY3rEhXRlaycsXG4gICAgb3dubG9jYXRpb25zOiAnV8WCYXNuZSBtaWVqc2NhJyxcbiAgICBsb2FkaW5nOiAnxYFhZG93YW5pZeKApicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICBwbGF0Zm9ybTogJ1Blcm9uJyxcbiAgICByYWlsOiAnUG9jacSFZycsXG4gICAgcmVxdWlyZWQ6ICd3eW1hZ2FuZSBwb2xlJyxcbiAgICBzZWFyY2g6ICdTenVrYWonLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTenVrYWogcG8gYWRyZXNpZSBsdWIgbmF6d2llIG1pZWpzY2EnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N6dWthaicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTenVrYWogY2VsdSwgdHJhc3kgbHViIHByenlzdGFua3UnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnV3Byb3dhZMW6IHB1bmt0IGRvY2Vsb3d5JyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnV3nFm3dpZXRsIHd5bmlraSB3IHPEhXNpZWRuaWVqIGthcmNpZSDigJ5DZWzigJ0nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdCcmFrIGxva2FsaXphY2ppJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdXeXN6dWthaiBwb2N6xIV0ZWssIGtvbmllYyBsdWIgcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdXcHJvd2FkxbogcHVua3QgcG9jesSFdGtvd3knLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnV3lrcnlqIGxva2FsaXphY2rEmScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdNaWVqc2NlLCBsb2thbGl6YWNqYSBpIHByenlzdGFuZWsuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXdpZ3VqIHBvIGxpxZtjaWUgdcW8eXdhasSFYyBzdHJ6YcWCZWsgaSB3eWJpZXJhaiBrbGF3aXN6ZW0gRW50ZXIuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ1dwcm93YWTFuiBsb2thbGl6YWNqxJkgaSBuYXdpZ3VqIHBvIGxpxZtjaWUgZ2VzdGFtaSBwcnplc3V3YW5pYS4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnUG8gd3licmFuaXUgbG9rYWxpemFjamkgcG9jesSFdGtvd2VqLCBhdXRvbWF0eWN6bmllIHByemVqZHppZXN6IGRvIHBvbGEgbWllanNjYSBkb2NlbG93ZWdvLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnRG9zdMSZcG5hIGplc3Qge3tjb3VudH19IHByb3BvenljamEnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX2Zldyc6ICdEb3N0xJlwbmUgc8SFIHt7Y291bnR9fSBwcm9wb3p5Y2plJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9vdGhlcic6ICdEb3N0xJlwbmUgamVzdCB7e2NvdW50fX0gcHJvcG96eWNqaScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnT2JlY255IHd5YsOzcjoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnVWxpY2EnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhY2phJyxcbiAgICBzdG9wOiAnUHJ6eXN0YW5laycsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU3p1a2FqIHByenlzdGFua8OzdyBpIHRyYXMnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1N6dWthaiBsb3TDs3cgaSBsb3RuaXNrJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3p1a2FqIHRyYXMgYXV0b2J1c293eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTenVrYWogc3RhY2ppIHJvd2Vyw7N3IG1pZWpza2ljaCcsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTenVrYWogdHJhcyBrb2xlam93eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3p1a2FqIHRyYXMgbWV0cmEgaSBwcnp5c3RhbmvDs3cgJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N6dWthaiB0cmFzIHRyYW13YWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdXeXN6dWtpd2FuaWUgYXV0b2J1c8OzdyBpIHByenlzdGFua8OzdycsXG4gICAgJ3RvZGF5LWF0JzogJ2R6acWbIG8nLFxuICAgICd0b21vcnJvdy1hdCc6ICdqdXRybyBvJyxcbiAgICB0cmFtOiAnVHJhbXdhaicsXG4gICAgdHJhY2s6ICdUb3InLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1XFvHlqIG9iZWNuZWogbG9rYWxpemFjamknLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV3liaWVyeiBtaWVqc2NlIG5hIG1hcGllJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdXeWJpZXJ6IHogd8WCYXNueWNoIG1pZWpzYycsXG4gICAgdmVudWU6ICdNaWVqc2NlJyxcbiAgICAndmlhLXBvaW50JzogJ1ByemV6IHB1bmt0JyxcbiAgICB3aGVyZTogJ0Rva8SFZD8nLFxuICAgIHBsYWNlOiAnTWllanNjZScsXG4gIH0sXG4gIHN2OiB7XG4gICAgYWRkcmVzczogJ0FkcmVzcycsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBwbGF0cyBlbGxlciBmw7ZyZXRhZycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0zDpGdnIHRpbGwgdmlhcHVua3QnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICfDlnBwbmEgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHlnJyxcbiAgICBhcnJpdmFsOiAnQW5sw6RuZGVyJyxcbiAgICBiYWNrOiAnVGlsbGJha2EnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhZHNjeWtlbHN0YXRpb24nLFxuICAgIGJpa2VwYXJrOiAnQW5zbHV0bmluZ3NwYXJrZXJpbmcgZsO2ciBjeWtsYXInLFxuICAgIGJ1czogJ0J1c3NpJyxcbiAgICBjYW5jZWw6ICdBdmJyeXQnLFxuICAgIGNhcnBhcms6ICdJbmZhcnRzcGFya2VyaW5nJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1TDtm0nLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUw7ZtIHPDtmtoaXN0b3Jpa2VuJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdOdXZhcmFuZGUgcG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdWaWxsIGR1IHTDtm1tYSBzw7ZraGlzdG9yaWtlbj8nLFxuICAgIGRlcGFydHVyZTogJ0F2Z8OlbmdzdGlkJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvcml0JyxcbiAgICBmZXJyeTogJ0bDpHJqYScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGcmFtdGlkYSBydXR0JyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdTa3JpdiBpbiBkaW4gZGVzdGluYXRpb24nLFxuICAgICdnaXZlLW9yaWdpbic6ICdTa3JpdiBpbiBkaW4gYXZmw6RyZHNwbGF0cycsXG4gICAgb3JpZ2luOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgIG93bmxvY2F0aW9uczogJ0VnbmEgcGxhdHNlcicsXG4gICAgbG9hZGluZzogJ0xhZGRhci4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHBsYXRmb3JtOiAnUGxhdHRmb3JtJyxcbiAgICByYWlsOiAnVMOlZycsXG4gICAgcmVxdWlyZWQ6ICdvYmxpZ2F0b3Jpc2t0IGbDpGx0JyxcbiAgICBzZWFyY2g6ICdTw7ZrJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU8O2ayBtZWQgYWRyZXNzZW4gZWxsZXIgcGxhdHNlbnMgbmFtbicsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU8O2aycsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTw7ZrIGRlc3RpbmF0aW9uLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1Nrcml2IGRlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnU2UgcmVzdWx0YXRlbiB1bmRlciBmbGlrZW4gRGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdJbmdhIHPDtmtyZXN1bHRhdCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU8O2ayBhdmbDpHJkc3BsYXRzLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTa3JpdiBhdmbDpHJkc3BsYXRzJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1PDtmsgcG9zaXRpb24nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ2VyYSBsaXN0YW4gbWVkIHBpbHRhbmdlbnRlcm5hIG9jaCB2w6RsaiBtZWQgRW50ZXItdGFuZ2V0ZW4uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0FuZ2UgcGxhdHNlbiBvY2ggbmF2aWdlcmEgaSBsaXN0YW4gZ2Vub20gYXR0IHN2ZXBhLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdFZnRlciBhdHQgZHUgdmFsdCBhdmfDpW5nc3BsYXRzZW4gdGFzIGR1IGRpcmVrdCB0aWxsIERlc3RpbmF0aW9uLWbDpGx0ZXQuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdIaXR0YWRlIHt7Y291bnR9fSBmw7Zyc2xhZycsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnTnV2YXJhbmRlIHZhbDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnR2F0YScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSMOlbGxwbGF0cycsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU8O2ayBow6VsbHBsYXRzZXIgZWxsZXIgbGluamVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTw7ZrIGZseWcgZWxsZXIgZmx5Z3BsYXRzZXInLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTw7ZrIGJ1c3NsaW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTw7ZrIHN0YWRzY3lrZWxzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU8O2ayBuw6RydMOlZ2VyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1PDtmsgbWV0cm9saW5qZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1PDtmsgc3DDpXJ2YWdubGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXNzIG9jaCBzdG9wcCBzw7ZrbmluZ2VuJyxcbiAgICAndG9kYXktYXQnOiAnaSBkYWcga2wnLFxuICAgICd0b21vcnJvdy1hdCc6ICdpIG1vcmdvbicsXG4gICAgdHJhbTogJ1Nww6VydmFnbicsXG4gICAgdHJhY2s6ICdTcMOlcicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVsOkbGogcG9zaXRpb24gZnLDpW4ga2FydGFuJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWw6RsaiBmcsOlbiBlZ25hIHBsYXRzZXInLFxuICAgIHZlbnVlOiAnTcO2dGVzcGxhdHMnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHB1bmt0JyxcbiAgICB3aGVyZTogJ1ZhcnQgdmlsbCBkdSDDpWthPycsXG4gICAgcGxhY2U6ICdQbGF0cycsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRmlubmlzaCBbZmldXG4vLyEgYXV0aG9yIDogVGFybW8gQWlkYW50YXVzdGEgOiBodHRwczovL2dpdGh1Yi5jb20vYmxlYWRvZlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG51bWJlcnNQYXN0ID1cbiAgICAgICAgICAgICdub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGrDpCB2aWlzaSBrdXVzaSBzZWl0c2Vtw6RuIGthaGRla3NhbiB5aGRla3PDpG4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICcgJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbnVtYmVyc0Z1dHVyZSA9IFtcbiAgICAgICAgICAgICdub2xsYScsXG4gICAgICAgICAgICAneWhkZW4nLFxuICAgICAgICAgICAgJ2thaGRlbicsXG4gICAgICAgICAgICAna29sbWVuJyxcbiAgICAgICAgICAgICduZWxqw6RuJyxcbiAgICAgICAgICAgICd2aWlkZW4nLFxuICAgICAgICAgICAgJ2t1dWRlbicsXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs3XSxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzhdLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbOV0sXG4gICAgICAgIF07XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbXV1dGFtYW4gc2VrdW5uaW4nIDogJ211dXRhbWEgc2VrdW50aSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAnc2VrdW5uaW4nIDogJ3Nla3VudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGknO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGknO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdww6RpdsOkbicgOiAncMOkaXbDpCc7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6TDpCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXVzaSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXV0dGEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvc2knO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvdHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkgKyAnICcgKyByZXN1bHQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZlcmJhbE51bWJlcihudW1iZXIsIGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgPCAxMFxuICAgICAgICAgICAgPyBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgID8gbnVtYmVyc0Z1dHVyZVtudW1iZXJdXG4gICAgICAgICAgICAgICAgOiBudW1iZXJzUGFzdFtudW1iZXJdXG4gICAgICAgICAgICA6IG51bWJlcjtcbiAgICB9XG5cbiAgICB2YXIgZmkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmaScsIHtcbiAgICAgICAgbW9udGhzOiAndGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc8Oka3V1X2hlaW7DpGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJhc2t1dV9qb3VsdWt1dScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAndGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc8OkX2hlaW7DpF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWknLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0RvIE1NTU1bdGFdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIGw6ICdELk0uWVlZWScsXG4gICAgICAgICAgICBsbDogJ0RvIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0RvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t0w6Ruw6TDpG5dIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaHVvbWVubmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2VpbGVuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1t2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBww6TDpHN0w6QnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpdHRlbicsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3dlZGlzaCBbc3ZdXG4vLyEgYXV0aG9yIDogSmVucyBBbG0gOiBodHRwczovL2dpdGh1Yi5jb20vdWxtdXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3N2Jywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJpX2ZlYnJ1YXJpX21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ3PDtm5kYWdfbcOlbmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDtnJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzw7ZuX23DpW5fdGlzX29uc190b3JfZnJlX2zDtnInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc8O2X23DpV90aV9vbl90b19mcl9sw7YnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkIEQgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJZGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0ltb3Jnb25dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSWfDpXJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW1DDpV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tJXSBkZGRkW3NdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2bDtnIgJXMgc2VkYW4nLFxuICAgICAgICAgICAgczogJ27DpWdyYSBzZWt1bmRlcicsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgICAgIG06ICdlbiBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXInLFxuICAgICAgICAgICAgaDogJ2VuIHRpbW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltbWFyJyxcbiAgICAgICAgICAgIGQ6ICdlbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICBNOiAnZW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeTogJ2V0dCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oXFw6ZXxcXDphKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnOmUnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiBbZGVdXG4vLyEgYXV0aG9yIDogbGx1Y2hzIDogaHR0cHM6Ly9naXRodWIuY29tL2xsdWNoc1xuLy8hIGF1dGhvcjogTWVuZWxpb24gRWxlbnPDumxlOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE1pa29sYWogRGFkZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL21pazAxYWpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZGUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlO1xuXG59KSkpO1xuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBEaWFsb2dNb2RhbCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1kaWFsb2ctbW9kYWwnO1xuaW1wb3J0IEF1dG9zdWdnZXN0IGZyb20gJ3JlYWN0LWF1dG9zdWdnZXN0JztcbmltcG9ydCBtb2JpbGVTdHlsZXMgZnJvbSAnLi9Nb2JpbGVTZWFyY2guc2Nzcyc7XG5pbXBvcnQgbW9iaWxlTm9TY3JvbGxTdHlsZXMgZnJvbSAnLi9Nb2JpbGVOb1Njcm9sbC5zY3NzJztcblxuY2xhc3MgQXV0b3N1Z2dlc3RQYXRjaCBleHRlbmRzIEF1dG9zdWdnZXN0IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5vblN1Z2dlc3Rpb25Ub3VjaE1vdmUgPSAoKSA9PiB7XG4gICAgICBzZWxmLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICAgIHNlbGYucHJlc3NlZFN1Z2dlc3Rpb24gPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuY29uc3QgTW9iaWxlU2VhcmNoID0gKHtcbiAgYXBwRWxlbWVudCxcbiAgaWQsXG4gIGNsb3NlSGFuZGxlLFxuICBjbGVhcklucHV0LFxuICB2YWx1ZSxcbiAgc3VnZ2VzdGlvbnMsXG4gIGlucHV0UHJvcHMsXG4gIGZldGNoRnVuY3Rpb24sXG4gIHJlbmRlclN1Z2dlc3Rpb24sXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSxcbiAgYXJpYUxhYmVsLFxuICBsYWJlbCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXMsXG4gIGRpYWxvZ0hlYWRlclRleHQsXG4gIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0LFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0LFxuICBjbGVhcklucHV0QnV0dG9uVGV4dCxcbiAgZm9jdXNJbnB1dCxcbiAgY29sb3IsXG4gIGhvdmVyQ29sb3IsXG4gIGFjY2Vzc2libGVQcmltYXJ5Q29sb3IsXG4gIHNlYXJjaE9wZW4sXG4gIGZvbnRXZWlnaHRzLFxuICBzaG93U2Nyb2xsLFxufSkgPT4ge1xuICBjb25zdCBzdHlsZXMgPSBzaG93U2Nyb2xsID8gbW9iaWxlU3R5bGVzIDogbW9iaWxlTm9TY3JvbGxTdHlsZXM7XG5cbiAgY29uc3QgaW5wdXRJZCA9IGAke2lkfS1pbnB1dGA7XG4gIGNvbnN0IGxhYmVsSWQgPSBgJHtpZH0tbGFiZWxgO1xuXG4gIGNvbnN0IFtpc0RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgUmVhY3RNb2RhbC5zZXRBcHBFbGVtZW50KGFwcEVsZW1lbnQpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25DbG9zZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjbG9zZUhhbmRsZSgpO1xuICB9KTtcblxuICBjb25zdCBvblNlbGVjdCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAocmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgc2V0RGlhbG9nT3Blbih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKCFyZWYuc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmFycm93Q2xpY2tlZCkge1xuICAgICAgLy8gU2VsZWN0IGl0ZW0gaWYgZmlsbCBpbnB1dCBidXR0b24gaXMgbm90IHByZXNzZWQgKGRpYWdvbmFsIGFycm93IGluIHN1Z2dlc3Rpb24gaXRlbXMpXG4gICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZChlLCByZWYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gICAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gICAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICAgIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcblxuICAgIGlmICgha2V5IHx8ICFzcGFjZS5jb25jYXQoZW50ZXIpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBnZXRWYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICAgIGlmIChzdWdnZXN0aW9uLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGdldFN1Z2dlc3Rpb25WYWx1ZShzdWdnZXN0aW9uKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119PlxuICAgICAgICAgIHtpdGVtLmxhYmVsSWR9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlclN1Z2dlc3Rpb24oaXRlbSk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyRGlhbG9nTW9kYWwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fVxuICAgICAgICBpc01vZGFsT3Blbj17aXNEaWFsb2dPcGVufVxuICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgIGhlYWRlclRleHQ9e2RpYWxvZ0hlYWRlclRleHR9XG4gICAgICAgIHByaW1hcnlCdXR0b25UZXh0PXtkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17ZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzKCk7XG4gICAgICAgICAgc2V0RGlhbG9nT3BlbihmYWxzZSk7XG4gICAgICAgIH19XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICBjb2xvcj17Y29sb3J9XG4gICAgICAgIGhvdmVyQ29sb3I9e2hvdmVyQ29sb3J9XG4gICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBjbGVhckJ1dHRvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICAgIG9uQ2xpY2s9e2NsZWFySW5wdXR9XG4gICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgY2xlYXJJbnB1dCgpfVxuICAgICAgICBhcmlhLWxhYmVsPXtjbGVhcklucHV0QnV0dG9uVGV4dH1cbiAgICAgID5cbiAgICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17Y29sb3J9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWNvbnRhaW5lciddfSBodG1sRm9yPXtpbnB1dElkfT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1pY29uJ119XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb25DbG9zZSgpfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgb25DbG9zZSgpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e2RpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHR9XG4gICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgID5cbiAgICAgICAgICA8SWNvbiBpbWc9XCJhcnJvd1wiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1sncmlnaHQtY29sdW1uJ119PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfSBpZD17bGFiZWxJZH0+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxBdXRvc3VnZ2VzdFBhdGNoXG4gICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9uc1xuICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXtmZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRWYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3JlbmRlckl0ZW19XG4gICAgICAgICAgICAvLyBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2sgbXVzdCBiZSBzZXQgdG8gdHJ1ZS5cbiAgICAgICAgICAgIC8vIElmIHNldCB0byBmYWxzZSwgaW5wdXQgd29uJ3QgYmUgZm9jdXNlZCB3aGVuIHVzZXIgY2xpY2tzIG9uXG4gICAgICAgICAgICAvLyBGaWxsIGlucHV0IGJ1dHRvbiBpbiBzdWdnZXN0aW9uIGxpc3QuIChkaWFnb25hbCBhcnJvdyBpbiBzdHJlZXQgbmFtZSBpdGVtcylcbiAgICAgICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGlja1xuICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRydWV9XG4gICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogY3goXG4gICAgICAgICAgICAgICAgYCR7c3R5bGVzLmlucHV0fSAke3N0eWxlc1tpZF0gfHwgJyd9ICR7XG4gICAgICAgICAgICAgICAgICBpbnB1dFByb3BzLnZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJydcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgYXJpYS1sYWJlbD17YXJpYUxhYmVsfSBpZD17aWR9IHsuLi5wfSAvPlxuICAgICAgICAgICAgICAgIHt2YWx1ZSAmJiBjbGVhckJ1dHRvbigpfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e29uU2VsZWN0fVxuICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuICBpZiAoZm9jdXNJbnB1dCAmJiBpbnB1dFJlZi5jdXJyZW50Py5pbnB1dCkge1xuICAgIGlucHV0UmVmLmN1cnJlbnQuaW5wdXQuZm9jdXMoKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0TW9kYWxcbiAgICAgIGlzT3Blbj17c2VhcmNoT3Blbn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwnXX1cbiAgICAgIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLW92ZXJsYXknXX1cbiAgICAgIG9uQWZ0ZXJDbG9zZT17b25DbG9zZX1cbiAgICAgIHNob3VsZENsb3NlT25Fc2NcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtY29udGVudCddfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogYCR7Y29sb3J9YCxcbiAgICAgICAgICAnLS1hY2Nlc3NpYmxlLXByaW1hcnktY29sb3InOiBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yLFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogYCR7aG92ZXJDb2xvcn1gLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3JlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3JlbmRlckRpYWxvZ01vZGFsKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0TW9kYWw+XG4gICk7XG59O1xuXG5Nb2JpbGVTZWFyY2gucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsb3NlSGFuZGxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJJbnB1dEJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIHN1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub2JqZWN0KS5pc1JlcXVpcmVkLFxuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGZldGNoRnVuY3Rpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgcmVuZGVyU3VnZ2VzdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nSGVhZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvY3VzSW5wdXQ6IFByb3BUeXBlcy5ib29sLFxuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWFyY2hPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5Nb2JpbGVTZWFyY2guZGVmYXVsdFByb3BzID0ge1xuICB2YWx1ZTogdW5kZWZpbmVkLFxuICBhcmlhTGFiZWw6IHVuZGVmaW5lZCxcbiAgZGlhbG9nSGVhZGVyVGV4dDogdW5kZWZpbmVkLFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dDogdW5kZWZpbmVkLFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0OiB1bmRlZmluZWQsXG4gIGZvY3VzSW5wdXQ6IGZhbHNlLFxuICBjb2xvcjogdW5kZWZpbmVkLFxuICBob3ZlckNvbG9yOiB1bmRlZmluZWQsXG4gIHNob3dTY3JvbGw6IHVuZGVmaW5lZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1vYmlsZVNlYXJjaDtcbiIsIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4hZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJyZWFjdFwiKSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtcInJlYWN0XCJdLHQpO2Vsc2V7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/dChyZXF1aXJlKFwicmVhY3RcIikpOnQoZS5yZWFjdCk7Zm9yKHZhciBvIGluIG4pKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6ZSlbb109bltvXX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ezg4ODpmdW5jdGlvbihlLHQsbil7dmFyIG8scjtyPXZvaWQgMCE9PW4uZz9uLmc6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciB0PXtpZ25vcmU6XCJbZGF0YS1zY3JvbGwtaWdub3JlXVwiLGhlYWRlcjpudWxsLHRvcE9uRW1wdHlIYXNoOiEwLHNwZWVkOjUwMCxzcGVlZEFzRHVyYXRpb246ITEsZHVyYXRpb25NYXg6bnVsbCxkdXJhdGlvbk1pbjpudWxsLGNsaXA6ITAsb2Zmc2V0OjAsZWFzaW5nOlwiZWFzZUluT3V0Q3ViaWNcIixjdXN0b21FYXNpbmc6bnVsbCx1cGRhdGVVUkw6ITAscG9wc3RhdGU6ITAsZW1pdEV2ZW50czohMH0sbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFyZ3VtZW50cywoZnVuY3Rpb24odCl7Zm9yKHZhciBuIGluIHQpe2lmKCF0Lmhhc093blByb3BlcnR5KG4pKXJldHVybjtlW25dPXRbbl19fSkpLGV9LG89ZnVuY3Rpb24oZSl7XCIjXCI9PT1lLmNoYXJBdCgwKSYmKGU9ZS5zdWJzdHIoMSkpO2Zvcih2YXIgdCxuPVN0cmluZyhlKSxvPW4ubGVuZ3RoLHI9LTEsdT1cIlwiLGk9bi5jaGFyQ29kZUF0KDApOysrcjxvOyl7aWYoMD09PSh0PW4uY2hhckNvZGVBdChyKSkpdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyOiB0aGUgaW5wdXQgY29udGFpbnMgVSswMDAwLlwiKTt1Kz10Pj0xJiZ0PD0zMXx8MTI3PT10fHwwPT09ciYmdD49NDgmJnQ8PTU3fHwxPT09ciYmdD49NDgmJnQ8PTU3JiY0NT09PWk/XCJcXFxcXCIrdC50b1N0cmluZygxNikrXCIgXCI6dD49MTI4fHw0NT09PXR8fDk1PT09dHx8dD49NDgmJnQ8PTU3fHx0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjI/bi5jaGFyQXQocik6XCJcXFxcXCIrbi5jaGFyQXQocil9cmV0dXJuXCIjXCIrdX0scj1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG49dCxwYXJzZUludChlLmdldENvbXB1dGVkU3R5bGUobikuaGVpZ2h0LDEwKSt0Lm9mZnNldFRvcCk6MDt2YXIgbn0saT1mdW5jdGlvbih0LG4sbyl7MD09PXQmJmRvY3VtZW50LmJvZHkuZm9jdXMoKSxvfHwodC5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10JiYodC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksdC5mb2N1cygpLHQuc3R5bGUub3V0bGluZT1cIm5vbmVcIiksZS5zY3JvbGxUbygwLG4pKX0scz1mdW5jdGlvbih0LG4sbyxyKXtpZihuLmVtaXRFdmVudHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQ3VzdG9tRXZlbnQpe3ZhciB1PW5ldyBDdXN0b21FdmVudCh0LHtidWJibGVzOiEwLGRldGFpbDp7YW5jaG9yOm8sdG9nZ2xlOnJ9fSk7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh1KX19O3JldHVybiBmdW5jdGlvbihjLGEpe3ZhciBsLGYsZCx2LHA9e2NhbmNlbFNjcm9sbDpmdW5jdGlvbihlKXtjYW5jZWxBbmltYXRpb25GcmFtZSh2KSx2PW51bGwsZXx8cyhcInNjcm9sbENhbmNlbFwiLGwpfSxhbmltYXRlU2Nyb2xsOmZ1bmN0aW9uKG8sYyxhKXtwLmNhbmNlbFNjcm9sbCgpO3ZhciBmPW4obHx8dCxhfHx7fSksaD1cIltvYmplY3QgTnVtYmVyXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLG09aHx8IW8udGFnTmFtZT9udWxsOm87aWYoaHx8bSl7dmFyIHk9ZS5wYWdlWU9mZnNldDtmLmhlYWRlciYmIWQmJihkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZi5oZWFkZXIpKTt2YXIgYixnLHcsRT11KGQpLE89aD9vOmZ1bmN0aW9uKHQsbixvLHUpe3ZhciBpPTA7aWYodC5vZmZzZXRQYXJlbnQpZG97aSs9dC5vZmZzZXRUb3AsdD10Lm9mZnNldFBhcmVudH13aGlsZSh0KTtyZXR1cm4gaT1NYXRoLm1heChpLW4tbywwKSx1JiYoaT1NYXRoLm1pbihpLHIoKS1lLmlubmVySGVpZ2h0KSksaX0obSxFLHBhcnNlSW50KFwiZnVuY3Rpb25cIj09dHlwZW9mIGYub2Zmc2V0P2Yub2Zmc2V0KG8sYyk6Zi5vZmZzZXQsMTApLGYuY2xpcCksUz1PLXksXz1yKCksST0wLE09ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwZWVkQXNEdXJhdGlvbj90LnNwZWVkOk1hdGguYWJzKGUvMWUzKnQuc3BlZWQpO3JldHVybiB0LmR1cmF0aW9uTWF4JiZuPnQuZHVyYXRpb25NYXg/dC5kdXJhdGlvbk1heDp0LmR1cmF0aW9uTWluJiZuPHQuZHVyYXRpb25NaW4/dC5kdXJhdGlvbk1pbjpwYXJzZUludChuLDEwKX0oUyxmKSxMPWZ1bmN0aW9uKHQpe2J8fChiPXQpLEkrPXQtYix3PXkrUypmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVyblwiZWFzZUluUXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqdCksXCJlYXNlT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqKDItdCkpLFwiZWFzZUluT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/Mip0KnQ6KDQtMip0KSp0LTEpLFwiZWFzZUluQ3ViaWNcIj09PWUuZWFzaW5nJiYobj10KnQqdCksXCJlYXNlT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj0tLXQqdCp0KzEpLFwiZWFzZUluT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj10PC41PzQqdCp0KnQ6KHQtMSkqKDIqdC0yKSooMip0LTIpKzEpLFwiZWFzZUluUXVhcnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KSxcImVhc2VPdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPTEtIC0tdCp0KnQqdCksXCJlYXNlSW5PdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/OCp0KnQqdCp0OjEtOCotLXQqdCp0KnQpLFwiZWFzZUluUXVpbnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KnQpLFwiZWFzZU91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49MSstLXQqdCp0KnQqdCksXCJlYXNlSW5PdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/MTYqdCp0KnQqdCp0OjErMTYqLS10KnQqdCp0KnQpLGUuY3VzdG9tRWFzaW5nJiYobj1lLmN1c3RvbUVhc2luZyh0KSksbnx8dH0oZixnPShnPTA9PT1NPzA6SS9NKT4xPzE6ZyksZS5zY3JvbGxUbygwLE1hdGguZmxvb3IodykpLGZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5wYWdlWU9mZnNldDtpZih0PT1ufHxyPT1ufHwoeTxuJiZlLmlubmVySGVpZ2h0K3IpPj1fKXJldHVybiBwLmNhbmNlbFNjcm9sbCghMCksaShvLG4saCkscyhcInNjcm9sbFN0b3BcIixmLG8sYyksYj1udWxsLHY9bnVsbCwhMH0odyxPKXx8KHY9ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksYj10KX07MD09PWUucGFnZVlPZmZzZXQmJmUuc2Nyb2xsVG8oMCwwKSxmdW5jdGlvbihlLHQsbil7dHx8aGlzdG9yeS5wdXNoU3RhdGUmJm4udXBkYXRlVVJMJiZoaXN0b3J5LnB1c2hTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KG4pLGFuY2hvcjplLmlkfSxkb2N1bWVudC50aXRsZSxlPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50P1wiI3RvcFwiOlwiI1wiK2UuaWQpfShvLGgsZiksXCJtYXRjaE1lZGlhXCJpbiBlJiZlLm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIikubWF0Y2hlcz9pKG8sTWF0aC5mbG9vcihPKSwhMSk6KHMoXCJzY3JvbGxTdGFydFwiLGYsbyxjKSxwLmNhbmNlbFNjcm9sbCghMCksZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCkpfX19LGg9ZnVuY3Rpb24odCl7aWYoIXQuZGVmYXVsdFByZXZlbnRlZCYmISgwIT09dC5idXR0b258fHQubWV0YUtleXx8dC5jdHJsS2V5fHx0LnNoaWZ0S2V5KSYmXCJjbG9zZXN0XCJpbiB0LnRhcmdldCYmKGY9dC50YXJnZXQuY2xvc2VzdChjKSkmJlwiYVwiPT09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJiF0LnRhcmdldC5jbG9zZXN0KGwuaWdub3JlKSYmZi5ob3N0bmFtZT09PWUubG9jYXRpb24uaG9zdG5hbWUmJmYucGF0aG5hbWU9PT1lLmxvY2F0aW9uLnBhdGhuYW1lJiYvIy8udGVzdChmLmhyZWYpKXt2YXIgbixyO3RyeXtuPW8oZGVjb2RlVVJJQ29tcG9uZW50KGYuaGFzaCkpfWNhdGNoKGUpe249byhmLmhhc2gpfWlmKFwiI1wiPT09bil7aWYoIWwudG9wT25FbXB0eUhhc2gpcmV0dXJuO3I9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fWVsc2Ugcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pOyhyPXJ8fFwiI3RvcFwiIT09bj9yOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJih0LnByZXZlbnREZWZhdWx0KCksZnVuY3Rpb24odCl7aWYoaGlzdG9yeS5yZXBsYWNlU3RhdGUmJnQudXBkYXRlVVJMJiYhaGlzdG9yeS5zdGF0ZSl7dmFyIG49ZS5sb2NhdGlvbi5oYXNoO249bnx8XCJcIixoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KHQpLGFuY2hvcjpufHxlLnBhZ2VZT2Zmc2V0fSxkb2N1bWVudC50aXRsZSxufHxlLmxvY2F0aW9uLmhyZWYpfX0obCkscC5hbmltYXRlU2Nyb2xsKHIsZikpfX0sbT1mdW5jdGlvbihlKXtpZihudWxsIT09aGlzdG9yeS5zdGF0ZSYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGwmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsPT09SlNPTi5zdHJpbmdpZnkobCkpe3ZhciB0PWhpc3Rvcnkuc3RhdGUuYW5jaG9yO1wic3RyaW5nXCI9PXR5cGVvZiB0JiZ0JiYhKHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvKGhpc3Rvcnkuc3RhdGUuYW5jaG9yKSkpfHxwLmFuaW1hdGVTY3JvbGwodCxudWxsLHt1cGRhdGVVUkw6ITF9KX19O3JldHVybiBwLmRlc3Ryb3k9ZnVuY3Rpb24oKXtsJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKSxwLmNhbmNlbFNjcm9sbCgpLGw9bnVsbCxmPW51bGwsZD1udWxsLHY9bnVsbCl9LGZ1bmN0aW9uKCl7aWYoIShcInF1ZXJ5U2VsZWN0b3JcImluIGRvY3VtZW50JiZcImFkZEV2ZW50TGlzdGVuZXJcImluIGUmJlwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBlJiZcImNsb3Nlc3RcImluIGUuRWxlbWVudC5wcm90b3R5cGUpKXRocm93XCJTbW9vdGggU2Nyb2xsOiBUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgSmF2YVNjcmlwdCBtZXRob2RzIGFuZCBicm93c2VyIEFQSXMuXCI7cC5kZXN0cm95KCksbD1uKHQsYXx8e30pLGQ9bC5oZWFkZXI/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsLmhlYWRlcik6bnVsbCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoLCExKSxsLnVwZGF0ZVVSTCYmbC5wb3BzdGF0ZSYmZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKX0oKSxwfX0ocil9LmFwcGx5KHQsW10pLHZvaWQgMD09PW98fChlLmV4cG9ydHM9byl9LDQzMjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8se2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9OmZ1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLGVbb109dFtuXX0pLHI9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8byh0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIobig0NyksdCkscihuKDkyNiksdCkscihuKDM0OSksdCkscihuKDEzNyksdCkscihuKDcyOSksdCkscihuKDM4MyksdCkscihuKDQ1MCksdCkscihuKDM1OCksdCkscihuKDc1MyksdCkscihuKDg2OSksdCkscihuKDM1MiksdCkscihuKDQ0NiksdCkscihuKDE2NCksdCkscihuKDMwNSksdCkscihuKDUwMiksdCl9LDM0OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VBcnJvd05hdmlnYXRpb249dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUFycm93TmF2aWdhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxpc3RJdGVtcyxuPWUub25BcnJvd1VwT3JEb3duLHI9KDAsby51c2VTdGF0ZSkoMCksdT1yWzBdLGk9clsxXSxzPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbihlKXtpKGUpfSksW3RdKSxjPWZ1bmN0aW9uKGUpe3ZhciBvPWUua2V5O2lmKG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKWlmKFwiQXJyb3dVcFwiPT09byluJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHModT4wP3UtMTp0Lmxlbmd0aC0xKTtlbHNle2lmKFwiQXJyb3dEb3duXCIhPT1vKXJldHVybjtuJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHU8dC5sZW5ndGgtMT9zKHUrMSk6cygwKX19O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyl9fSkpLCgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtzKDApfSksW3RdKSx7c2VsZWN0ZWRJbmRleDp1fX19LDQ0NjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEZWJvdW5jZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRGVib3VuY2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0zMDApO3ZhciBuPSgwLG8udXNlU3RhdGUpKGUpLHI9blswXSx1PW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dShlKX0pLHQpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKX19KSxbZSx0XSkscn19LDE2NDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VFbGVtZW50U2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXt2YXIgZSx0LG49KDAsby51c2VSZWYpKG51bGwpO3JldHVybltuLHt3aWR0aDpudWxsPT09KGU9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jbGllbnRXaWR0aCxoZWlnaHQ6bnVsbD09PSh0PW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2xpZW50SGVpZ2h0fV19LHQuZGVmYXVsdD10LnVzZUVsZW1lbnRTaXplfSwxMzc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udXNlUmVmKShudWxsKSxuPSgwLG8udXNlU3RhdGUpKCExKSxyPW5bMF0sdT1uWzFdLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTt1KHQuaXNJbnRlcnNlY3RpbmcpfTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7aWYod2luZG93JiZ3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpe3ZhciBuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihpLGUpLG89dC5jdXJyZW50O3JldHVybiB0LmN1cnJlbnQmJm4ub2JzZXJ2ZSh0LmN1cnJlbnQpLGZ1bmN0aW9uKCl7byYmbi51bm9ic2VydmUobyl9fXUoITEpfSksW3QsZV0pLHtjb250YWluZXJSZWY6dCxpc1Zpc2libGU6cn19LHQuZGVmYXVsdD10LnVzZUludGVyc2VjdGlvbk9ic2VydmVyfSw3Mjk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNCcmVha3BvaW50PXZvaWQgMDt2YXIgbz1uKDE1Nikscj1uKDQzMiksdT17eHM6MSxtb2JpbGVTbWFsbDozMjAsbW9iaWxlOjM3NSx0YWJsZXQ6NzY4LHRhYmxldExhcmdlOjkyMCxkZXNrdG9wU21hbGw6MTAyNCxkZXNrdG9wOjEyNjAsZGVza3RvcExhcmdlOjE0NDB9O3QudXNlSXNCcmVha3BvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP3VbZV06ZSxuPSgwLG8udXNlU3RhdGUpKG51bGwpLGk9blswXSxzPW5bMV0sYz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtzKHdpbmRvdy5pbm5lcldpZHRoKX0pLFtdKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7YygpfSksW10pLCgwLHIudXNlT25SZXNpemUpKGMpLGk+PXR9LHQuZGVmYXVsdD10LnVzZUlzQnJlYWtwb2ludH0sNDUwOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxvLnVzZVN0YXRlKSh0KSxyPW5bMF0sdT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlfHx1KHQpfSksW2UsdF0pLGUmJnJ9fSwzMDU6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNNb2JpbGU9dm9pZCAwO3ZhciBvPW4oNzI5KTt0LnVzZUlzTW9iaWxlPWZ1bmN0aW9uKCl7cmV0dXJuISgwLG8udXNlSXNCcmVha3BvaW50KShcInRhYmxldFwiKX0sdC5kZWZhdWx0PXQudXNlSXNNb2JpbGV9LDM4MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3QsdC5kZWZhdWx0PXQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdH0sNzUzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uTG9zZUZvY3VzV2l0aGluPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbkxvc2VGb2N1c1dpdGhpbj1mdW5jdGlvbihlKXt2YXIgdD1lLnJlZixuPWUuY2FsbGJhY2sscj1lLndhdGNoOygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlO2lmKHIpcmV0dXJuKG51bGw9PT0oZT10LmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1hdGNoZXMoXCI6Zm9jdXMtd2l0aGluXCIpKT92b2lkIDA6bigpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSksZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSl9fSksW24sdCxyXSl9LHQuZGVmYXVsdD10LnVzZU9uTG9zZUZvY3VzV2l0aGlufSw1MDI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25SZXNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uUmVzaXplPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Uod2luZG93LmlubmVyV2lkdGgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LHtwYXNzaXZlOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0KX19KSxbXSl9LHQuZGVmYXVsdD10LnVzZU9uUmVzaXplfSwzNTI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25XaW5kb3dGb2N1cz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25XaW5kb3dGb2N1cz1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlJiZcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmZSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCwhMSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCl9fSksW2VdKX19LDQ3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU91dHNpZGVSZWFjdGVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPdXRzaWRlUmVhY3Rlcj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7ZS5jdXJyZW50JiYhZS5jdXJyZW50LmNvbnRhaW5zKG4udGFyZ2V0KSYmdCgpfSgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pLGZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pfX0pKX19LDg2OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VSdW5BZnRlclVwZGF0ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlUnVuQWZ0ZXJVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2UuY3VycmVudCYmKGUuY3VycmVudCgpLGUuY3VycmVudD1udWxsKX0pKSxmdW5jdGlvbih0KXtlLmN1cnJlbnQ9dH19LHQuZGVmYXVsdD10LnVzZVJ1bkFmdGVyVXBkYXRlfSw5MjY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU2Nyb2xsTG9jaz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlU2Nyb2xsTG9jaz1mdW5jdGlvbigpe3JldHVybntsb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5zY3JvbGxZK1wicHhcIix0PWRvY3VtZW50LmJvZHk7dC5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsdC5zdHlsZS50b3A9XCItXCIrZX0pLFtdKSx1bmxvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYm9keSx0PWUuc3R5bGUudG9wLG49LTEqcGFyc2VJbnQodHx8XCIwXCIpO2Uuc3R5bGUucG9zaXRpb249XCJcIixlLnN0eWxlLnRvcD1cIlwiLG4mJndpbmRvdy5zY3JvbGxUbygwLC0xKnBhcnNlSW50KHR8fFwiMFwiKSl9KSxbXSl9fX0sMzU4OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNtb290aFNjcm9sbD12b2lkIDA7dmFyIHI9bigxNTYpLHU9byhuKDg4OCkpO3QudXNlU21vb3RoU2Nyb2xsPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLHIudXNlUmVmKShudWxsKSxuPWUucmVmLG89ZS5vZmZzZXQsaT12b2lkIDA9PT1vPzA6byxzPWUuc3BlZWQsYz12b2lkIDA9PT1zPzUwMDpzO3JldHVybigwLHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bmV3IHUuZGVmYXVsdChudWxsLHtzcGVlZDpjLHNwZWVkQXNEdXJhdGlvbjohMH0pfSksW10pLCgwLHIudXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe24mJnQuY3VycmVudCYmdC5jdXJyZW50LmFuaW1hdGVTY3JvbGwobi5jdXJyZW50LG51bGwse29mZnNldDpmdW5jdGlvbigpe3JldHVybiBpfSx1cGRhdGVVUkw6ITF9KX0pLFtpLG5dKX19LDE1NjpmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZX19LG49e307ZnVuY3Rpb24gbyhlKXt2YXIgcj1uW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgdT1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKHUuZXhwb3J0cyx1LHUuZXhwb3J0cyxvKSx1LmV4cG9ydHN9cmV0dXJuIG8uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG8oNDMyKX0oKX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaTE4bmV4dCBmcm9tICdpMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgeyBleGVjdXRlU2VhcmNoIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZSc7XG5pbXBvcnQgU3VnZ2VzdGlvbkl0ZW0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtc3VnZ2VzdGlvbi1pdGVtJztcbmltcG9ydCB7XG4gIGdldE5hbWVMYWJlbCxcbiAgZ2V0U3RvcENvZGUsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCB7IGdldFN0b3BOYW1lIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGdldExhYmVsIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgJ21vbWVudC9sb2NhbGUvZmknO1xuaW1wb3J0ICdtb21lbnQvbG9jYWxlL3N2JztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9kZSc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vaGVscGVycy90cmFuc2xhdGlvbnMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuaW1wb3J0IE1vYmlsZVNlYXJjaCBmcm9tICcuL2hlbHBlcnMvTW9iaWxlU2VhcmNoJztcbmltcG9ydCB3aXRoU2Nyb2xsTG9jayBmcm9tICcuL2hlbHBlcnMvd2l0aFNjcm9sbExvY2snO1xuXG5tb21lbnQubG9jYWxlKCdlbicpO1xuXG5pMThuZXh0LmluaXQoe1xuICBmYWxsYmFja0xuZzogJ2ZpJyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICBpbnRlcnBvbGF0aW9uOiB7XG4gICAgZXNjYXBlVmFsdWU6IGZhbHNlLCAvLyBub3QgbmVlZGVkIGZvciByZWFjdCBhcyBpdCBlc2NhcGVzIGJ5IGRlZmF1bHRcbiAgfSxcbn0pO1xuXG5jb25zdCBMb2FkaW5nID0gcHJvcHMgPT4gKFxuICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydzcGlubmVyLWxvYWRlciddfT5cbiAgICB7KHByb3BzICYmIHByb3BzLmNoaWxkcmVuKSB8fCAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfT57aTE4bmV4dC50KCdsb2FkaW5nJyl9PC9zcGFuPlxuICAgICl9XG4gIDwvZGl2PlxuKTtcblxuTG9hZGluZy5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbn07XG5cbkxvYWRpbmcuZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxufTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSBhZGRlbmR1bSA9PiB7XG4gIGlmICghYWRkZW5kdW0gfHwgIWFkZGVuZHVtLkdURlMucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHsgbW9kZXMsIHBsYXRmb3JtIH0gPSBhZGRlbmR1bS5HVEZTO1xuICBjb25zdCB0eXBlID1cbiAgICBtb2RlcyAmJiBtb2Rlc1swXSA9PT0gJ1JBSUwnID8gaTE4bmV4dC50KCd0cmFjaycpIDogaTE4bmV4dC50KCdwbGF0Zm9ybScpO1xuICByZXR1cm4gW3R5cGUsIHBsYXRmb3JtXTtcbn07XG5cbmZ1bmN0aW9uIGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0pIHtcbiAgaWYgKGl0ZW0udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1tYXAnKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3VzZS1vd24tcG9zaXRpb24nKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyldO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgbGV0IFtuYW1lLCBsYWJlbF0gPSBnZXROYW1lTGFiZWwoaXRlbS5wcm9wZXJ0aWVzLCB0cnVlKTtcbiAgICBsZXQgc3VnZ2VzdGlvblR5cGU7XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VyZW50YWwnKSB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCd2ZWhpY2xlcmVudGFsc3RhdGlvbicpO1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBpdGVtLnByb3BlcnRpZXMubGFiZWxJZDtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgc3RvcENvZGVdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdiaWtlcGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdiaWtlcGFyaycpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdjYXJwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2NhcnBhcmsnKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLm1vZGUpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KFxuICAgICAgICBpdGVtLnByb3BlcnRpZXMubW9kZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxheWVyID0gaXRlbS5wcm9wZXJ0aWVzLmxheWVyXG4gICAgICAgIC5yZXBsYWNlKCdyb3V0ZS0nLCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKTtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KGxheWVyKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMuaWQgJiZcbiAgICAgIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdG9wJyB8fCBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gZ2V0U3RvcENvZGUoaXRlbS5wcm9wZXJ0aWVzKTtcbiAgICAgIGNvbnN0IG1vZGUgPSBpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0/LkdURlMubW9kZXM7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgZ2V0U3RvcE5hbWUobmFtZSwgc3RvcENvZGUpLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgc3RvcENvZGUsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0YXRpb24nXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvZGUgfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgICAgIGNvbnN0IHN0b05hbWUgPSBhZGRyZXNzID8gZ2V0U3RvcE5hbWUoYWRkcmVzcy5zcGxpdCgnLCcpWzBdLCBjb2RlKSA6IG5hbWU7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBzdG9OYW1lLCBsYWJlbCwgY29kZSwgdW5kZWZpbmVkLCBwbGF0Zm9ybV07XG4gICAgfVxuICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIGxhYmVsXTtcbiAgfVxuICBjb25zdCB7IG9yaWdpbiwgZGVzdGluYXRpb24gfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgY29uc3QgdGFpbDEgPSBvcmlnaW4ubG9jYWxpdHkgPyBgLCAke29yaWdpbi5sb2NhbGl0eX0gZm9vYmFyYCA6ICcnO1xuICBjb25zdCB0YWlsMiA9IGRlc3RpbmF0aW9uLmxvY2FsaXR5ID8gYCwgJHtkZXN0aW5hdGlvbi5sb2NhbGl0eX1gIDogJyc7XG4gIGNvbnN0IG5hbWUxID0gb3JpZ2luLm5hbWU7XG4gIGNvbnN0IG5hbWUyID0gZGVzdGluYXRpb24ubmFtZTtcbiAgcmV0dXJuIFtcbiAgICBpMThuZXh0LnQoJ2Z1dHVyZS1yb3V0ZScpLFxuICAgIGAke2kxOG5leHQudCgnb3JpZ2luJyl9ICR7bmFtZTF9JHt0YWlsMX0gJHtpMThuZXh0LnQoXG4gICAgICAnZGVzdGluYXRpb24nLFxuICAgICl9ICR7bmFtZTJ9JHt0YWlsMn1gLFxuICAgIGl0ZW0udHJhbnNsYXRlZFRleHQsXG4gIF07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSkge1xuICBjb25zdCB0aW1lID0gbW9tZW50LnVuaXgoaXRlbS5wcm9wZXJ0aWVzLnRpbWUpO1xuICBsZXQgc3RyID0gaXRlbS5wcm9wZXJ0aWVzLmFycml2ZUJ5XG4gICAgPyBpMThuZXh0LnQoJ2Fycml2YWwnKVxuICAgIDogaTE4bmV4dC50KCdkZXBhcnR1cmUnKTtcbiAgaWYgKHRpbWUuaXNTYW1lKG1vbWVudCgpLCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7aTE4bmV4dC50KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5pc1NhbWUobW9tZW50KCkuYWRkKDEsICdkYXknKSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke2kxOG5leHQudCgndG9tb3Jyb3ctYXQnKX1gO1xuICB9IGVsc2Uge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0aW1lLmZvcm1hdCgnZGQgRC5NLicpfWA7XG4gIH1cbiAgc3RyID0gYCR7c3RyfSAke21vbWVudCh0aW1lKS5mb3JtYXQoJ0hIOm1tJyl9YDtcbiAgcmV0dXJuIHN0cjtcbn1cblxuY29uc3QgZ2V0U3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gIGlmIChcbiAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gZ2V0TGFiZWwoc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzKTtcbn07XG4vKipcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICogY29uc3QgbGFuZyA9ICdmaSc7IC8vIGVuLCBmaSBvciBzdlxuICogY29uc3Qgb25TZWxlY3QgPSAoaXRlbSwgaWQpID0+IHtcbiAqICAgIC8vIEZ1bnRpb25hbGl0eSB3aGVuIHVzZXIgc2VsZWN0cyBhIHN1Z2dlc2lvbnMuIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBvbkNsZWFyID0gaWQgPT4ge1xuICogICAgLy8gQ2FsbGVkICB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjbGVhciBzZWFyY2ggc3RyaW5nIGJ1dHRvbi4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IGdldEF1dG9TdWdnZXN0SWNvbnM6IHtcbiAqICAgLy8gQ2FsbGVkIGZvciBldmVyeSBjaXR5IGJpa2Ugc3RhdGlvbiByZW5kZXJlZCBhcyBhIHNlYXJjaCBzdWdnZXN0aW9uLiBTaG91bGQgcmV0dXJuIHRoZSBpY29uIGFuZFxuICogICAvLyBjb2xvciB1c2VkIGZvciB0aGF0IHN0YXRpb24uIFR3byBpY29ucyBhcmUgYXZhaWxhYmxlLCAnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcgYW5kaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0LXNlY29uZGFyeScuXG4gKiAgIGNpdHliaWtlczogc3RhdGlvbiA9PiB7XG4gKiAgICAgIHJldHVybiBbJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnLCAnI2YyYjYyZCddO1xuICogICB9XG4gKiB9XG4gKiBjb25zdCB0cmFuc3BvcnRNb2RlID0gdW5kZWZpbmVkO1xuICogY29uc3QgcGxhY2Vob2xkZXIgPSBcInN0b3AtbmVhci15b3VcIjtcbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBPcHRpb25zIGFyZSBMb2NhdGlvbnMsIFN0b3BzLCBTdGF0aW9ucywgUm91dGVzLCBWZWhpY2xlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpIGFuZCBEYXRhc291cmNlLiBMZWF2ZSBlbXB0eSB0byB1c2UgYWxsIHNvdXJjZXMuXG4gKiByZXR1cm4gKFxuICogIDxEVEF1dG9zdWdnZXN0XG4gKiAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fSAvLyBSZXF1aXJlZC4gUm9vdCBlbGVtZW50J3MgaWQuIE5lZWRlZCBmb3IgcmVhY3QtbW9kYWwgY29tcG9uZW50LlxuICogICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAqICAgIGljb249XCJvcmlnaW5cIiAvLyBPcHRpb25hbCBTdHJpbmcgZm9yIGljb24gdGhhdCBpcyBzaG93biBsZWZ0IG9mIHNlYXJjaGZpZWxkLiB1c2VkIHdpdGggSWNvbiBsaWJyYXJ5XG4gKiAgICBpZD1cIm9yaWdpblwiIC8vIHVzZWQgZm9yIHN0eWxlIHByb3BzIGFuZCBpbmZvIGZvciBjb21wb25lbnQuXG4gKiAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9IC8vIFN0cmluZyB0aGF0IGlzIHNob3ducyBpbml0YWxseSBpbiBzZWFyY2ggZmllbGRcbiAqICAgIHZhbHVlPVwiXCIgLy8gZS5nLiB1c2VyIHR5cGVkIHN0cmluZyB0aGF0IGlzIHNob3duIGluIHNlYXJjaCBmaWVsZFxuICogICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICogICAgb25DbGVhcj17b25DbGVhcn1cbiAqICAgIGF1dG9Gb2N1cz17ZmFsc2V9IC8vIGRlZmluZXMgdGhhdCBzaG91bGQgdGhpcyBmaWVsZCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQgd2hlbiBwYWdlIGlzIGxvYWRlZC5cbiAqICAgIGxhbmc9e2xhbmd9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX0gLy8gdHJhbnNwb3J0bW9kZSB3aXRoIHdoaWNoIHdlIGZpbHRlciB0aGUgcm91dGVzLCBlLmcuIHJvdXRlLUJVU1xuICogICAgZ2VvY29kaW5nU2l6ZT17MTB9IC8vIGRlZmluZXMgaG93IG1hbnkgc3RvcHMgYW5kIHN0YXRpb25zIHRvIGZldGNoIGZyb20gZ2VvY29kaW5nLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZmlsdGVyIHRoZSByZXN1bHRzIGFuZCBzdGlsbCBnZXQgYSByZWFzb25hYmxlIGFtb3VudCBvZiBzdWdnZXN0aW9ucy5cbiAqICAgIGZpbHRlclJlc3VsdHM9e3Jlc3VsdHMgPT4gcmV0dXJuIHJlc3VsdHN9IC8vIE9wdGlvbmFsIGZpbHRlcmluZyBmdW5jdGlvbiBmb3Igcm91dGVzIGFuZCBzdG9wc1xuICogICAgaGFuZGVsVmlhUG9pbnRzPXsoKSA9PiByZXR1cm4gbnVsbCB9IC8vIE9wdGlvbmFsIFZpYSBwb2ludCBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgZm9jdXNDaGFuZ2U9eygpID0+IHJldHVybiBudWxsfSAvLyBXaGVuIHN1Z2dlc3Rpb24gaXMgc2VsZWN0ZWQsIGhhbmRsZSBjaGFuZ2luZyBmb2N1cy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc3RvcmVSZWY9eygpID0+IHJldHVybiBudWxsfSAvLyBGdW5jdGlvbmFsaXR5IHRvIHN0b3JlIHJlZnMuIEN1cnJlbmx0eSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBtb2JpbGVMYWJlbD1cIkN1c3RvbSBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQgb24gbW9iaWxlLlxuICogICAgaW5wdXRDbGFzc05hbWU9XCJcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGNsYXNzbmFtZSBhcHBsaWVkIHRvIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQgZm9yIHByb3ZpZGluZyBDU1Mgc3R5bGVzLlxuICogICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyPSAvLyBPcHRpb25hbC4gQ3VzdG9uIHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQuXG4gKi9cbmNsYXNzIERUQXV0b3N1Z2dlc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIFVSTF9QRUxJQVM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnRleHQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGNsZWFyRnV0dXJlUm91dGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZpbHRlclJlc3VsdHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGdlb2NvZGluZ1NpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc3RvcmVSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0aW1lWm9uZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHJvdXRlc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHN0b3BzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdW5sb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHJlZlBvaW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBtb2RlSWNvbkNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuZnVuYyksXG4gICAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNFbWJlZGRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogJycsXG4gICAgaWNvbjogdW5kZWZpbmVkLFxuICAgIHZhbHVlOiAnJyxcbiAgICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gICAgZmlsdGVyUmVzdWx0czogdW5kZWZpbmVkLFxuICAgIG9uQ2xlYXI6IHVuZGVmaW5lZCxcbiAgICBsYW5nOiAnZmknLFxuICAgIHN0b3JlUmVmOiB1bmRlZmluZWQsXG4gICAgaGFuZGxlVmlhUG9pbnRzOiB1bmRlZmluZWQsXG4gICAgZm9jdXNDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiB1bmRlZmluZWQsXG4gICAgc291cmNlczogW10sXG4gICAgdGFyZ2V0czogdW5kZWZpbmVkLFxuICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgICBnZW9jb2RpbmdTaXplOiB1bmRlZmluZWQsXG4gICAgY29sb3I6ICcjMDA3YWM5JyxcbiAgICBob3ZlckNvbG9yOiAnIzAwNjJhMScsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogJyMwMDc0YmUnLFxuICAgIHRpbWVab25lOiAnRXVyb3BlL0hlbHNpbmtpJyxcbiAgICBwYXRoT3B0czoge1xuICAgICAgcm91dGVzUHJlZml4OiAnbGluamF0JyxcbiAgICAgIHN0b3BzUHJlZml4OiAncHlzYWtpdCcsXG4gICAgfSxcbiAgICBhcmlhTGFiZWw6IHVuZGVmaW5lZCxcbiAgICBtb2JpbGVMYWJlbDogdW5kZWZpbmVkLFxuICAgIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgICBtb2RlSWNvbkNvbG9yczoge1xuICAgICAgJ21vZGUtYnVzJzogJyMwMDdhYzknLFxuICAgICAgJ21vZGUtcmFpbCc6ICcjOGM0Nzk5JyxcbiAgICAgICdtb2RlLXRyYW0nOiAnIzAwODE1MScsXG4gICAgICAnbW9kZS1tZXRybyc6ICcjZWQ4YzAwJyxcbiAgICAgICdtb2RlLWZlcnJ5JzogJyMwMDdBOTcnLFxuICAgICAgJ21vZGUtY2l0eWJpa2UnOiAnI2YyYjYyZCcsXG4gICAgICAnbW9kZS1mdW5pY3VsYXInOiAnI2ZmMDBmZicsXG4gICAgfSxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIHNob3dTY3JvbGw6IGZhbHNlLFxuICAgIHJlZlBvaW50OiB7fSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBtb21lbnQudHouc2V0RGVmYXVsdChwcm9wcy50aW1lWm9uZSk7XG4gICAgbW9tZW50LmxvY2FsZShwcm9wcy5sYW5nKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgIHNvdXJjZXM6IHByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgdHlwaW5nVGltZXI6IG51bGwsXG4gICAgICB0eXBpbmc6IGZhbHNlLFxuICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25JbmRleDogMCxcbiAgICAgIGNsZWFuRXhlY3V0ZWQ6IGZhbHNlLFxuICAgICAgc2Nyb2xsWTogMCxcbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaChsYW5nID0+IHtcbiAgICAgIGkxOG5leHQuYWRkUmVzb3VyY2VCdW5kbGUobGFuZywgJ3RyYW5zbGF0aW9uJywgdHJhbnNsYXRpb25zW2xhbmddKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERULTQwNzQ6IFdoZW4gYSB1c2VyJ3MgbG9jYXRpb24gaXMgdXBkYXRlZCBEVEF1dG9zdWdnZXN0IHdvdWxkIHJlLXJlbmRlciBjYXVzaW5nIHN1Z2dlc3Rpb24gbGlzdCB0byByZXNldC5cbiAgLy8gVGhpcyB3aWxsIHByZXZlbnQgaXQuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICAgIHJldHVybiAhaXNFcXVhbChuZXh0U3RhdGUsIHRoaXMuc3RhdGUpIHx8ICFpc0VxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgLy8gd2FpdCB1bnRpbCBhZGRyZXNzIGlzIHNldCBvciBnZW9sb2NhdGlvbmluZyBmYWlsc1xuICAgIGlmIChuZXh0UHJvcHMudmFsdWUgIT09IHRoaXMuc3RhdGUudmFsdWUgJiYgIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlOiBuZXh0UHJvcHMudmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZSA9IChldmVudCwgeyBuZXdWYWx1ZSwgbWV0aG9kIH0pID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiB0aGlzLmZJbnB1dCB8fCBuZXdWYWx1ZSB8fCAnJyxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICB9O1xuICAgIC8vIFJlbW92ZSBmaWxsZWQgaW5wdXQgdmFsdWUgc28gaXQgd29udCBiZSByZXVzZWQgdW5uZWNlc3NhcnlcbiAgICB0aGlzLmZJbnB1dCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIG5ld1N0YXRlLmVkaXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlIHx8ICcnIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCAhPT0gJ2VudGVyJyB8fCB0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICAvLyB0ZXN0IGFib3ZlIGRyb3BzIHVubmVjZXNzYXJ5IHVwZGF0ZVxuICAgICAgLy8gd2hlbiB1c2VyIGhpdHMgZW50ZXIgYnV0IHNlYXJjaCBpcyB1bmZpbmlzaGVkXG4gICAgICBpZiAodGhpcy5zdGF0ZS50eXBpbmdUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGF0ZS50eXBpbmdUaW1lcik7XG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09PSAndHlwZScpIHtcbiAgICAgICAgLy8gYWZ0ZXIgdGltZW91dCBydW5zLCBhcmlhIGFsZXJ0IHdpbGwgYW5ub3VuY2UgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdHlwaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZ1RpbWVyID0gdGltZXI7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB9XG4gIH07XG5cbiAgb25CbHVyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgfSk7XG4gIH07XG5cbiAgb25TZWxlY3RlZCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgaWYgKHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZXM6IFsnRmF2b3VyaXRlJywgJ0JhY2snXSxcbiAgICAgICAgICAgIG93blBsYWNlczogdHJ1ZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaycgfHxcbiAgICAgICAgcmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICBzdWdnZXN0aW9uSW5kZXg6IHJlZi5zdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3Rpb25Eb25lID0gdHJ1ZTsgLy8gc2VsZWN0aW9uIGRvbmUsIGRvIG5vdCBsZXQgdXBjb21pbmcga2V5Ym9hcmQgZXZlbnRzIGNvbmZ1c2UgdGhlIGZsb3dcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZTogcmVmLnN1Z2dlc3Rpb25WYWx1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50cykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludHMocmVmLnN1Z2dlc3Rpb24sIHJlZi5zdWdnZXN0aW9uSW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHJlZi5zdWdnZXN0aW9uLCB0aGlzLnByb3BzLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlICYmXG4gICAgICAgICAgICAoIXRoaXMucHJvcHMuaXNNb2JpbGUgfHwgdGhpcy5wcm9wcy5pc0VtYmVkZGVkKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHByZXZTdGF0ZSA9PiAoe1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHByZXZTdGF0ZS52YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgICgpID0+IHRoaXMuY2hlY2tQZW5kaW5nU2VsZWN0aW9uKCksIC8vIHNlYXJjaCBtYXkgZmluaXNoIGR1cmluZyBzdGF0ZSBjaGFuZ2VcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICB9KTtcbiAgfTtcblxuICBjaGVja1BlbmRpbmdTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ2JhY2snKSAmJlxuICAgICAgdGhpcy5zdGF0ZS52YWxpZFxuICAgICkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICAvLyBhY2NlcHQgYWZ0ZXIgYWxsIG9uZ29pbmcgc2VhcmNoZXMgaGF2ZSBmaW5pc2hlZFxuICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uICYmIHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIC8vIGZpbmlzaCB0aGUgc2VsZWN0aW9uIGJ5IHBpY2tpbmcgZmlyc3QgPSBiZXN0IG1hdGNoIG9yIHdpdGggJ0Z1dHVyZVJvdXRlJyBieSBzdWdnZXN0aW9uSW5kZXhcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QoXG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbdGhpcy5zdGF0ZS5zdWdnZXN0aW9uSW5kZXhdLFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmlkLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlICYmXG4gICAgICAgICAgICAgICghdGhpcy5wcm9wcy5pc01vYmlsZSB8fCB0aGlzLnByb3BzLmlzRW1iZWRkZWQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIGNsZWFyQnV0dG9uID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgICAgb25DbGljaz17dGhpcy5jbGVhcklucHV0fVxuICAgICAgICBhcmlhLWxhYmVsPXtpMThuZXh0LnQoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcpfVxuICAgICAgPlxuICAgICAgICA8SWNvbiBpbWc9XCJjbG9zZVwiIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfTtcblxuICBmZXRjaEZ1bmN0aW9uID0gKHsgdmFsdWUsIGNsZWFuRXhlY3V0ZWQgfSkgPT4ge1xuICAgIHJldHVybiB0aGlzLnNldFN0YXRlKFxuICAgICAgeyB2YWxpZDogZmFsc2UsIGNsZWFuRXhlY3V0ZWQ6ICFjbGVhbkV4ZWN1dGVkID8gZmFsc2UgOiBjbGVhbkV4ZWN1dGVkIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkRvbmUpIHtcbiAgICAgICAgICAvLyBkbyBub3QgbGV0IGNvbXBvbmVudCBjYXN0IHVubmVjZXNzYXJ5IHJlcXVlc3RzXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0cyB9ID0gdGhpcy5wcm9wcztcbiAgICAgICAgY29uc3QgdXNlQWxsID0gaXNFbXB0eSh0YXJnZXRzKTtcbiAgICAgICAgY29uc3QgaXNMb2NhdGlvblNlYXJjaCA9XG4gICAgICAgICAgaXNFbXB0eSh0YXJnZXRzKSB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKTtcbiAgICAgICAgbGV0IG5ld1RhcmdldHM7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm93blBsYWNlcykge1xuICAgICAgICAgIG5ld1RhcmdldHMgPSBbJ0xvY2F0aW9ucyddO1xuICAgICAgICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnU3RvcHMnKSkge1xuICAgICAgICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTdG9wcycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0YXRpb25zJykpIHtcbiAgICAgICAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgICAgICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXVzZUFsbCkge1xuICAgICAgICAgIG5ld1RhcmdldHMgPSBbLi4udGFyZ2V0c107XG4gICAgICAgICAgLy8gaW4gZGVza3RvcCwgZmF2b3JpdGVzIGFyZSBhY2Nlc3NlZCB2aWEgc3ViIHNlYXJjaFxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICAgICAgICF0aGlzLnByb3BzLmlzTW9iaWxlICYmXG4gICAgICAgICAgICAoaXNFbXB0eSh0aGlzLnByb3BzLnNvdXJjZXMpIHx8XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBuZXdUYXJnZXRzLnB1c2goJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVtb3ZlICBsb2NhdGlvbiBmYXZvdXJpdGVzIGluIGRlc2t0b3Agc2VhcmNoIChjb2xsZWN0aW9uIGl0ZW0gcmVwbGFjZXMgaXQgaW4gdGFyZ2V0IGFycmF5KVxuICAgICAgICBjb25zdCBzb3VyY2VzID1cbiAgICAgICAgICB0aGlzLnN0YXRlLnNvdXJjZXMgJiZcbiAgICAgICAgICB0aGlzLnN0YXRlLnNvdXJjZXMuZmlsdGVyKFxuICAgICAgICAgICAgcyA9PlxuICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIGlzTG9jYXRpb25TZWFyY2ggJiZcbiAgICAgICAgICAgICAgICBzID09PSAnRmF2b3VyaXRlJyAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnN0YXRlLm93blBsYWNlcyAmJlxuICAgICAgICAgICAgICAgICF0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcblxuICAgICAgICBleGVjdXRlU2VhcmNoKFxuICAgICAgICAgIG5ld1RhcmdldHMsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICB0aGlzLnByb3BzLnRyYW5zcG9ydE1vZGUsXG4gICAgICAgICAgdGhpcy5wcm9wcy5zZWFyY2hDb250ZXh0LFxuICAgICAgICAgIHRoaXMucHJvcHMuZmlsdGVyUmVzdWx0cyxcbiAgICAgICAgICB0aGlzLnByb3BzLmdlb2NvZGluZ1NpemUsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaW5wdXQ6IHZhbHVlIHx8ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2VhcmNoUmVzdWx0ID0+IHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBYWFggdHJhbnNsYXRlcyBjdXJyZW50IGxvY2F0aW9uXG4gICAgICAgICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IChzZWFyY2hSZXN1bHQucmVzdWx0cyB8fCBbXSlcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uID0+XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScgfHxcbiAgICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgJiZcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLnRpbWUgPiBtb21lbnQoKS51bml4KCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IHsgLi4uc3VnZ2VzdGlvbiB9O1xuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC5wcm9wZXJ0aWVzLmxhYmVsSWQgPSBpMThuZXh0LnQoXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnZhbHVlIHx8XG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5jaGVja1BlbmRpbmdTZWxlY3Rpb24oKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMucHJvcHMucGF0aE9wdHMsXG4gICAgICAgICAgdGhpcy5wcm9wcy5yZWZQb2ludCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICBjbGVhcklucHV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgfTtcbiAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycsIGNsZWFuRXhlY3V0ZWQ6IHRydWUgfSksXG4gICAgKTtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkNsZWFyKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2xlYXIodGhpcy5wcm9wcy5pZCk7XG4gICAgfVxuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICBpbnB1dENsaWNrZWQgPSBpbnB1dFZhbHVlID0+IHtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgdGhpcy5jbGVhckxvY2F0aW9uVGV4dCgpO1xuICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlKSB7XG4gICAgICB0aGlzLnByb3BzLmxvY2soKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICAvLyByZXNldCBhdCBzdGFydCwganVzdCBpbiBjYXNlIHdlIG1pc3NlZCBzb21ldGhpbmdcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgICAgfTtcblxuICAgICAgLy8gRFQtMzI2MzogYWRkZWQgc3RhdGVLZXlEb3duXG4gICAgICBjb25zdCBzdGF0ZUtleURvd24gPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgIHZhbHVlOiBpbnB1dFZhbHVlLFxuICAgICAgfTtcblxuICAgICAgaWYgKCF0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAvLyBEVC0zMjYzOiBhZGRlZCBpZi1lbHNlIHN0YXRlbWVudFxuICAgICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWUgPT09ICdvYmplY3QnIHx8ICFpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShzdGF0ZUtleURvd24sICgpID0+XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogaW5wdXRWYWx1ZSB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlICYmICF0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJlbmRlck1vYmlsZVNlYXJjaDogdHJ1ZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgc3RvcmVJbnB1dFJlZmVyZW5jZSA9IGF1dG9zdWdnZXN0ID0+IHtcbiAgICBpZiAoYXV0b3N1Z2dlc3QgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuaW5wdXQgPSBhdXRvc3VnZ2VzdC5pbnB1dDtcbiAgICAgIGlmICh0aGlzLnByb3BzLnN0b3JlUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc3RvcmVSZWYoYXV0b3N1Z2dlc3QuaW5wdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBGaWxsIGlucHV0IHdoZW4gdXNlciBjbGlja3MgZmlsbCBpbnB1dCBidXR0b24gaW4gc3RyZWV0IHN1Z2dlc3Rpb24gaXRlbVxuICBmaWxsSW5wdXQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgdGhpcy5mSW5wdXQgPSBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWU7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSxcbiAgICAgIGNoZWNrUGVuZGluZ1NlbGVjdGlvbjogbmV3VmFsdWUsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSB9KTtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gIH07XG5cbiAgcmVuZGVySXRlbSA9IGl0ZW0gPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW0gPVxuICAgICAgaXRlbS50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRUZXh0OiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0pLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBpdGVtO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtKTtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1Z2dlc3Rpb25JdGVtXG4gICAgICAgIGl0ZW09e25ld0l0ZW19XG4gICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XG4gICAgICAgIGxvYWRpbmc9eyF0aGlzLnN0YXRlLnZhbGlkfVxuICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgYXJpYUZhdm91cml0ZVN0cmluZz17aTE4bmV4dC50KCdmYXZvdXJpdGUnKX1cbiAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgZmlsbElucHV0PXt0aGlzLmZpbGxJbnB1dH1cbiAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e3RoaXMucHJvcHMuZ2V0QXV0b1N1Z2dlc3RJY29uc31cbiAgICAgICAgbW9kZUljb25Db2xvcnM9e3RoaXMucHJvcHMubW9kZUljb25Db2xvcnN9XG4gICAgICAgIG1vZGVTZXQ9e3RoaXMucHJvcHMubW9kZVNldH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjbG9zZU1vYmlsZVNlYXJjaCA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnVubG9jaygpO1xuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHRoaXMuc3RhdGUuc2Nyb2xsWSk7XG4gICAgICAgIHRoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkKCk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG5cbiAga2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Eb25lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXk7XG4gICAgaWYgKGtleUNvZGUgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZWRpdGluZzogZmFsc2UgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIGlmIChrZXlDb2RlID09PSAnRW50ZXInICYmIHRoaXMuc3RhdGUudmFsdWUgIT09ICcnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBwZW5kaW5nU2VsZWN0aW9uOiB0cnVlIH0sICgpID0+IHtcbiAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmlucHV0Q2xpY2tlZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChrZXlDb2RlID09PSAnRW50ZXInIHx8IGtleUNvZGUgPT09ICdBcnJvd0Rvd24nKSAmJlxuICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA9PT0gJydcbiAgICApIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSAnQXJyb3dEb3duJyAmJiB0aGlzLnN0YXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlLFxuICAgICAgfTtcbiAgICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgZWRpdGluZzogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ1RhYicpIHtcbiAgICAgIHRoaXMub25CbHVyKCk7XG4gICAgfVxuICB9O1xuXG4gIHN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50ID0gKCkgPT4ge1xuICAgIGxldCBsYWJlbCA9IFtdO1xuICAgIGNvbnN0IGZpcnN0U3VnZ2VzdGlvbiA9IHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbMF07XG4gICAgaWYgKGZpcnN0U3VnZ2VzdGlvbikge1xuICAgICAgaWYgKGZpcnN0U3VnZ2VzdGlvbi50eXBlICYmIGZpcnN0U3VnZ2VzdGlvbi50eXBlLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgICBsYWJlbC5wdXNoKGkxOG5leHQudCgnZmF2b3VyaXRlJykpO1xuICAgICAgfVxuICAgICAgbGFiZWwgPSBsYWJlbC5jb25jYXQoZ2V0U3VnZ2VzdGlvbkNvbnRlbnQodGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1swXSkpO1xuICAgIH1cbiAgICByZXR1cm4gWy4uLm5ldyBTZXQobGFiZWwpXS5qb2luKCcgLSAnKTtcbiAgfTtcblxuICBjbGVhck9sZFNlYXJjaGVzID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgY29udGV4dCwgY2xlYXJPbGRTZWFyY2hlcywgY2xlYXJGdXR1cmVSb3V0ZXMgfSA9XG4gICAgICB0aGlzLnByb3BzLnNlYXJjaENvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQgJiYgY2xlYXJPbGRTZWFyY2hlcykge1xuICAgICAgY2xlYXJPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGlmIChjbGVhckZ1dHVyZVJvdXRlcykge1xuICAgICAgICBjbGVhckZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCA9ICgpID0+XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbicgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnZGVzdGluYXRpb24nIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ3ZpYS1wb2ludCcgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luLXN0b3AtbmVhci15b3UnO1xuXG4gIGNsZWFyTG9jYXRpb25UZXh0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtcbiAgICAgICdWYWxpdHR1IHNpamFpbnRpJyxcbiAgICAgICdOeWt5aW5lbiBzaWphaW50aXNpJyxcbiAgICAgICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICAgICdTZWxlY3RlZCBsb2NhdGlvbicsXG4gICAgICAnVmFsZCBwb3NpdGlvbicsXG4gICAgICAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICAgJ01pbiBwb3NpdGlvbicsXG4gICAgICAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAgICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICAnWW91ciBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAgICdXeWJyYW5lIG1pZWpzY2UnLFxuICAgIF07XG4gICAgaWYgKHBvc2l0aW9ucy5pbmNsdWRlcyh0aGlzLnN0YXRlLnZhbHVlKSkge1xuICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgfVxuICB9O1xuXG4gIG9uRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5jbGVhckxvY2F0aW9uVGV4dCgpO1xuXG4gICAgY29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7IHNjcm9sbFkgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmIChpMThuZXh0Lmxhbmd1YWdlICE9PSB0aGlzLnByb3BzLmxhbmcpIHtcbiAgICAgIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2UodGhpcy5wcm9wcy5sYW5nKTtcbiAgICB9XG4gICAgY29uc3QgeyB2YWx1ZSwgc3VnZ2VzdGlvbnMsIHJlbmRlck1vYmlsZVNlYXJjaCwgY2xlYW5FeGVjdXRlZCB9ID1cbiAgICAgIHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLnRyYW5zbGF0ZWRQbGFjZWhvbGRlclxuICAgICAgICA/IHRoaXMucHJvcHMudHJhbnNsYXRlZFBsYWNlaG9sZGVyXG4gICAgICAgIDogaTE4bmV4dC50KHRoaXMucHJvcHMucGxhY2Vob2xkZXIpLFxuICAgICAgdmFsdWUsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIG9uQmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICBjbGFzc05hbWU6IGN4KFxuICAgICAgICBgJHtzdHlsZXMuaW5wdXR9ICR7XG4gICAgICAgICAgdGhpcy5wcm9wcy5pc01vYmlsZSAmJiB0aGlzLnByb3BzLnRyYW5zcG9ydE1vZGUgPyBzdHlsZXMudGhpbiA6ICcnXG4gICAgICAgIH0gJHtzdHlsZXNbdGhpcy5wcm9wcy5pZF0gfHwgJyd9ICR7XG4gICAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnXG4gICAgICAgIH0gJHt0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lfWAsXG4gICAgICApLFxuICAgICAgb25LZXlEb3duOiB0aGlzLmtleURvd24sIC8vIERULTMyNjNcbiAgICAgIHJlcXVpcmVkOiB0aGlzLnByb3BzLnJlcXVpcmVkLFxuICAgIH07XG4gICAgY29uc3QgYXJpYUJhcklkID0gdGhpcy5wcm9wcy5pZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJyk7XG4gICAgbGV0IFNlYXJjaEJhcklkID0gdGhpcy5wcm9wcy5hcmlhTGFiZWwgfHwgaTE4bmV4dC50KGFyaWFCYXJJZCk7XG4gICAgU2VhcmNoQmFySWQgPSBTZWFyY2hCYXJJZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJykuY29uY2F0KCcuJyk7IC8vIEZ1bGwgc3RvcCBtYWtlcyBzY3JlZW4gcmVhZGVyIHNwZWVjaCBjbGVhcmVyLlxuICAgIGNvbnN0IGFyaWFSZXF1aXJlZFRleHQgPSB0aGlzLnByb3BzLnJlcXVpcmVkXG4gICAgICA/IGAke2kxOG5leHQudCgncmVxdWlyZWQnKX0uYFxuICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxJbnN0cnVjdGlvbnMgPSB0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICA/IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnKVxuICAgICAgOiBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCcpO1xuICAgIGNvbnN0IG1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQgPVxuICAgICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbidcbiAgICAgICAgPyBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJylcbiAgICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxUZXh0ID0gYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zXG4gICAgICAuY29uY2F0KCcgJylcbiAgICAgIC5jb25jYXQobW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCk7XG5cbiAgICBjb25zdCBhcmlhU3VnZ2VzdGlvbkxlbiA9IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbicsIHtcbiAgICAgIGNvdW50OiBzdWdnZXN0aW9ucy5sZW5ndGgsXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcmlhQ3VycmVudFN1Z2dlc3Rpb24gPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uQXNBcmlhQ29udGVudCgpIHx8IHRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGkxOG5leHQudCgnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbicsIHtcbiAgICAgICAgICBzZWxlY3Rpb246XG4gICAgICAgICAgICB0aGlzLnN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KCkudG9Mb3dlckNhc2UoKSB8fCB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0gcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgICAgeyF0aGlzLnN0YXRlLnR5cGluZyAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5lZGl0aW5nICYmXG4gICAgICAgICAgICBgJHthcmlhU3VnZ2VzdGlvbkxlbn0gJHthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKX1gfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLnByb3BzLmlzTW9iaWxlICYmIChcbiAgICAgICAgICA8TW9iaWxlU2VhcmNoXG4gICAgICAgICAgICBzZWFyY2hPcGVuPXtyZW5kZXJNb2JpbGVTZWFyY2h9XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzPXt0aGlzLmNsZWFyT2xkU2VhcmNoZXN9XG4gICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgIGNsZWFySW5wdXQ9e3RoaXMuY2xlYXJJbnB1dH1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e1tcbiAgICAgICAgICAgICAgLi4uc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2xlYXItc2VhcmNoLWhpc3RvcnknLFxuICAgICAgICAgICAgICAgIGxhYmVsSWQ6IGkxOG5leHQudCgnY2xlYXItc2VhcmNoLWhpc3RvcnknKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmlzT3JpZ2luRGVzdGluYXRpb25PclZpYXBvaW50KClcbiAgICAgICAgICAgICAgICA/IGkxOG5leHQudCgnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcycpXG4gICAgICAgICAgICAgICAgOiBpbnB1dFByb3BzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGZldGNoRnVuY3Rpb249e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17dGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWR9XG4gICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e2dldFN1Z2dlc3Rpb25WYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgIGNsb3NlSGFuZGxlPXt0aGlzLmNsb3NlTW9iaWxlU2VhcmNofVxuICAgICAgICAgICAgYXJpYUxhYmVsPXthcmlhUmVxdWlyZWRUZXh0XG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChhcmlhQ3VycmVudFN1Z2dlc3Rpb24oKSl9XG4gICAgICAgICAgICBsYWJlbD17XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA/IHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA6IGkxOG5leHQudCh0aGlzLnByb3BzLmlkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgIGRpYWxvZ0hlYWRlclRleHQ9e2kxOG5leHQudCgnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInKX1cbiAgICAgICAgICAgIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZScpfVxuICAgICAgICAgICAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjYW5jZWwnKX1cbiAgICAgICAgICAgIGNsZWFySW5wdXRCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcpfVxuICAgICAgICAgICAgZm9jdXNJbnB1dD17Y2xlYW5FeGVjdXRlZH1cbiAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFyZW5kZXJNb2JpbGVTZWFyY2ggJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWNvbnRhaW5lciddLFxuICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICctLWNvbG9yJzogYCR7dGhpcy5wcm9wcy5jb2xvcn1gLFxuICAgICAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGAke3RoaXMucHJvcHMuaG92ZXJDb2xvcn1gLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5pY29uICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICAgICAgc3R5bGVzW2BhdXRvc3VnZ2VzdC1pbnB1dC1pY29uYF0sXG4gICAgICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9LWlucHV0LWljb25gLFxuICAgICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgLmNvbmNhdChpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCcpKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIGltZz17YCR7dGhpcy5wcm9wcy5pY29ufWB9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxBdXRvc3VnZ2VzdFxuICAgICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9ucz17dGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2tcbiAgICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRoaXMuc3RhdGUuZWRpdGluZ31cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uPXshdGhpcy5zdGF0ZS5vd25QbGFjZXN9XG4gICAgICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119IGh0bWxGb3I9e3RoaXMucHJvcHMuaWR9PlxuICAgICAgICAgICAgICAgICAgICB7YXJpYUN1cnJlbnRTdWdnZXN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYUxhYmVsVGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmlucHV0Q2xpY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLmtleURvd259XG4gICAgICAgICAgICAgICAgICAgIHsuLi5wfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnZhbHVlICYmIHRoaXMuY2xlYXJCdXR0b24oKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnN0b3JlSW5wdXRSZWZlcmVuY2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IERUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jayA9IHdpdGhTY3JvbGxMb2NrKERUQXV0b3N1Z2dlc3QpO1xuXG5leHBvcnQgZGVmYXVsdCBEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2s7XG4iLCJpbXBvcnQgeyBnZXROYW1lTGFiZWwgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG4vKipcbiAqIFJldHVybnMgbGFiZWwgZm9yIHByb3BlcnRpZXNcbiAqXG4gKiBAbmFtZSBnZXRMYWJlbFxuICogQHBhcmFtIHsqfSBwcm9wZXJ0aWVzIG9iamVjdCB0aGF0IGNvbnRhaW5zIFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwcm9wZXJ0aWVzOiB7XG4gICAgXCJpZFwiOiBcIkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJnaWRcIjogXCJndGZzbWF0a2E6c3RhdGlvbjpHVEZTOk1BVEtBOjMxODkxNVwiLFxuICAgIFwibGF5ZXJcIjogXCJzdGF0aW9uXCIsXG4gICAgXCJzb3VyY2VcIjogXCJndGZzbWF0a2FcIixcbiAgICBcInNvdXJjZV9pZFwiOiBcIkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJuYW1lXCI6IFwiUmF1dGF0aWVudG9yaVwiLFxuICAgIFwicG9zdGFsY29kZVwiOiBcIjAwMTAwXCIsXG4gICAgXCJwb3N0YWxjb2RlX2dpZFwiOiBcIndob3NvbmZpcnN0OnBvc3RhbGNvZGU6NDIxNDc5NTY5XCIsXG4gICAgXCJjb25maWRlbmNlXCI6IDEsXG4gICAgXCJhY2N1cmFjeVwiOiBcImNlbnRyb2lkXCIsXG4gICAgXCJjb3VudHJ5XCI6IFwiU3VvbWlcIixcbiAgICBcImNvdW50cnlfZ2lkXCI6IFwid2hvc29uZmlyc3Q6Y291bnRyeTowXCIsXG4gICAgXCJjb3VudHJ5X2FcIjogXCJGSU5cIixcbiAgICBcInJlZ2lvblwiOiBcIlV1c2ltYWFcIixcbiAgICBcInJlZ2lvbl9naWRcIjogXCJ3aG9zb25maXJzdDpyZWdpb246ODU2ODMwNjdcIixcbiAgICBcImxvY2FsYWRtaW5cIjogXCJIZWxzaW5raVwiLFxuICAgIFwibG9jYWxhZG1pbl9naWRcIjogXCJ3aG9zb25maXJzdDpsb2NhbGFkbWluOjkwNzE5OTcxNVwiLFxuICAgIFwibG9jYWxpdHlcIjogXCJIZWxzaW5raVwiLFxuICAgIFwibG9jYWxpdHlfZ2lkXCI6IFwid2hvc29uZmlyc3Q6bG9jYWxpdHk6MTAxNzQ4NDE3XCIsXG4gICAgXCJuZWlnaGJvdXJob29kXCI6IFwiS2x1dXZpXCIsXG4gICAgXCJuZWlnaGJvdXJob29kX2dpZFwiOiBcIndob3NvbmZpcnN0Om5laWdoYm91cmhvb2Q6ODU4OTg4NDdcIixcbiAgICBcImxhYmVsXCI6IFwiUmF1dGF0aWVudG9yaSwga29pbGxpbmVuLCBLbHV1dmksIEhlbHNpbmtpXCJcbiAgICB9XG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRMYWJlbChwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcGFydHMgPSBnZXROYW1lTGFiZWwocHJvcGVydGllcywgdHJ1ZSk7XG4gIHN3aXRjaCAocHJvcGVydGllcy5sYXllcikge1xuICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICBjYXNlICdiYWNrJzpcbiAgICAgIHJldHVybiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgcmV0dXJuIHBhcnRzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1sxXSAhPT0gJydcbiAgICAgICAgPyBwYXJ0cy5qb2luKCcsICcpXG4gICAgICAgIDogcGFydHNbMV0gfHwgcGFydHNbMF07XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaG9va3MgZnJvbSAnQGhzbC1maS9ob29rcyc7XG5cbmNvbnN0IHdpdGhTY3JvbGxMb2NrID0gQ29tcG9uZW50ID0+IHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICBjb25zdCB7IGxvY2ssIHVubG9jayB9ID0gaG9va3MudXNlU2Nyb2xsTG9jaygpO1xuXG4gICAgcmV0dXJuIDxDb21wb25lbnQgbG9jaz17bG9ja30gdW5sb2NrPXt1bmxvY2t9IHsuLi5wcm9wc30gLz47XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2Nyb2xsTG9jaztcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJ0b1Byb3BlcnR5S2V5IiwidCIsImkiLCJyIiwiZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIm9iaiIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfYXJyYXlMaWtlVG9BcnJheSIsImFyciIsImxlbiIsImxlbmd0aCIsImFycjIiLCJBcnJheSIsIl9zbGljZWRUb0FycmF5IiwiaXNBcnJheSIsImFycmF5V2l0aEhvbGVzIiwibCIsIm4iLCJ1IiwiYSIsImYiLCJuZXh0IiwiZG9uZSIsInB1c2giLCJpdGVyYWJsZVRvQXJyYXlMaW1pdCIsIm1pbkxlbiIsImFycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwidW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJub25JdGVyYWJsZVJlc3QiLCJ0cnVFcSIsInZhbDEiLCJ2YWwyIiwiZ3Rmc1N0b3BMYXllcnMiLCJ2ZWhpY2xlUmVudGFsTGF5ZXJzIiwibGFiZWxJZFRvR2lkIiwiaWQiLCJwYXJ0cyIsInNwbGl0IiwiaXNEdXBsaWNhdGUiLCJpdGVtMSIsIml0ZW0yIiwicHJvcHMxIiwicHJvcGVydGllcyIsInByb3BzMiIsInR5cGUiLCJvMSIsIm9yaWdpbiIsImQxIiwiZGVzdGluYXRpb24iLCJvMiIsImQyIiwibG9jYWxpdHkiLCJpbmNsdWRlcyIsImxheWVyIiwiZ2lkIiwibGFiZWxJZCIsImd0ZnNJZCIsInAxIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsInVuZGVmaW5lZCIsInAyIiwiTWF0aCIsImFicyIsImxhYmVsIiwiYWRkcmVzcyIsIm5vcm1hbGl6ZSIsInN0ciIsImlzU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJMYXllclR5cGUiLCJpc1N0b3AiLCJfcmVmIiwiZ2V0TGF5ZXJSYW5rIiwic291cmNlIiwiaW5kZXhPZiIsInNvcnRTZWFyY2hSZXN1bHRzIiwibGluZVJlZ2V4cCIsInJlc3VsdHMiLCJ0ZXJtIiwiYXJndW1lbnRzIiwiaXNMaW5lSWRlbnRpZmllciIsIm5vcm1hbGl6ZWRUZXJtIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwicmVzdWx0Iiwic2hvcnROYW1lIiwiX3Jlc3VsdCRwcm9wZXJ0aWVzIiwiY29uZmlkZW5jZSIsIm1hdGNoIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImZpbHRlciIsIm5vcm1hbGl6ZWRWYWx1ZSIsInJlZHVjZSIsInByZXZpb3VzIiwiY3VycmVudCIsInVuaXFXaXRoIiwiZ2V0U3RvcE5hbWUiLCJzdG9wQ29kZSIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwiZmlsdGVyTWF0Y2hpbmdUb0lucHV0IiwibGlzdCIsIklucHV0IiwiZmllbGRzIiwiaW5wdXQiLCJ0cmltIiwibXVsdGlXb3JkIiwiaXRlbSIsImZvckVhY2giLCJwTmFtZSIsImdldCIsInNwbGljZSIsImpvaW4iLCJjb25jYXQiLCJyZXBsYWNlIiwic2VyaWFsaXplIiwicHJlZml4Iiwia2V5cyIsInAiLCJrIiwidiIsImVuY29kZVVSSUNvbXBvbmVudCIsImF4aW9zIiwicmVxdWlyZSIsImRlZmF1bHQiLCJnZXRKc29uIiwidXJsIiwicGFyYW1zIiwiZW5jb2RlVVJJIiwic2VhcmNoIiwidGltZW91dCIsIm1ldGhvZCIsImhlYWRlcnMiLCJBY2NlcHQiLCJ0aGVuIiwicmVzIiwiZGF0YSIsIkRFRkFVTFRfUEVMSUFTX1VSTCIsImdldEdlb2NvZGluZ1Jlc3VsdHMiLCJzZWFyY2hTdHJpbmciLCJzZWFyY2hQYXJhbXMiLCJsYW5nIiwiZm9jdXNQb2ludCIsInNvdXJjZXMiLCJwZWxpYXNVcmwiLCJtaW5pbWFsUmVnZXhwIiwiZ2VvY29kaW5nTGF5ZXJzIiwidGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwiUEVMSUFTX1VSTCIsIm9wdHMiLCJfb2JqZWN0U3ByZWFkIiwibGF5ZXJzIiwiZmVhdHVyZXMiLCJnZXRTdG9wc0Zyb21HZW9jb2RpbmciLCJzdG9wcyIsIlVSTF9QRUxJQVNfUExBQ0UiLCJnaWRzIiwic3RvcFN0YXRpb25NYXAiLCJzdG9wIiwiY29kZSIsInN0b3BPclN0YXRpb24iLCJpZHMiLCJhZGRlbmR1bSIsImxhc3RVcGRhdGVkIiwiZmF2b3VyaXRlSWQiLCJmaWx0ZXJPbGRTZWFyY2hlcyIsIm9sZFNlYXJjaGVzIiwiZHJvcExheWVycyIsIm1hdGNoaW5nT2xkU2VhcmNoZXMiLCJ0YWtlIiwibmV3SXRlbSIsInRpbWV0YWJsZUNsaWNrZWQiLCJhcnJvd0NsaWNrZWQiLCJyb3V0ZUxheWVycyIsImxvY2F0aW9uTGF5ZXJzIiwicGFya2luZ0xheWVycyIsInN0b3BMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRhcmdldHMiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwiY2FsbGJhY2siLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwiZ2V0T2xkU2VhcmNoZXMiLCJnZXRGYXZvdXJpdGVTdG9wcyIsInBhcmtpbmdBcmVhU291cmNlcyIsImdldExhbmd1YWdlIiwiZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlUm91dGVzIiwiZ2V0Um91dGVzUXVlcnkiLCJjb250ZXh0IiwibG9jYXRpb25Bd2FyZSIsImlzUGVsaWFzTG9jYXRpb25Bd2FyZSIsIlVSTF9QRUxJQVMiLCJmZWVkSURzIiwiZ2VvY29kaW5nU2VhcmNoUGFyYW1zIiwiZ2VvY29kaW5nU291cmNlcyIsImdldEZ1dHVyZVJvdXRlcyIsImNpdHlCaWtlTmV0d29ya3MiLCJhbGxUYXJnZXRzIiwiYWxsU291cmNlcyIsInBvc2l0aW9uIiwic2VhcmNoQ29tcG9uZW50cyIsInNlYXJjaGVzIiwibGFuZ3VhZ2UiLCJsYXQiLCJsb24iLCJ0b0ZpeGVkIiwibW9kZSIsInN0YXR1cyIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMiLCJsb2NhdGlvbkhpc3RvcnkiLCJzaXplIiwiZmVlZElkcyIsImhpc3RvcnkiLCJ1c2VTdG9wcyIsInVzZVN0YXRpb25zIiwic3RvcHNBbmRTdGF0aW9ucyIsImV2ZXJ5Iiwic3RvcHNTdGF0aW9ucyIsInMiLCJmaWx0ZXJGYXZvdXJpdGVTdG9wcyIsImRlZHVwZXN0b3BzIiwiZmVlZHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uIiwiYWxsIiwiZmxhdHRlbiIsImNhdGNoIiwiZXJyIiwiZXJyb3IiLCJsZWFkaW5nIiwiZ2V0TG9jYWxpdHkiLCJzdWdnZXN0aW9uIiwibG9jYWxhZG1pbiIsImdldFN0b3BDb2RlIiwiZ2V0TmFtZUxhYmVsIiwibWVtb2l6ZSIsInBsYWluIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJjbG9uZURlZXAiLCJtb2R1bGUiLCJob29rQ2FsbGJhY2siLCJzb21lIiwiaG9va3MiLCJhcHBseSIsInNldEhvb2tDYWxsYmFjayIsImlzT2JqZWN0IiwiaGFzT3duUHJvcCIsImIiLCJoYXNPd25Qcm9wZXJ0eSIsImlzT2JqZWN0RW1wdHkiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiaXNVbmRlZmluZWQiLCJpc051bWJlciIsImlzRGF0ZSIsIkRhdGUiLCJmbiIsImFyckxlbiIsImV4dGVuZCIsInZhbHVlT2YiLCJjcmVhdGVVVEMiLCJmb3JtYXQiLCJsb2NhbGUiLCJzdHJpY3QiLCJjcmVhdGVMb2NhbE9yVVRDIiwidXRjIiwiZGVmYXVsdFBhcnNpbmdGbGFncyIsImVtcHR5IiwidW51c2VkVG9rZW5zIiwidW51c2VkSW5wdXQiLCJvdmVyZmxvdyIsImNoYXJzTGVmdE92ZXIiLCJudWxsSW5wdXQiLCJpbnZhbGlkRXJhIiwiaW52YWxpZE1vbnRoIiwiaW52YWxpZEZvcm1hdCIsInVzZXJJbnZhbGlkYXRlZCIsImlzbyIsInBhcnNlZERhdGVQYXJ0cyIsImVyYSIsIm1lcmlkaWVtIiwicmZjMjgyMiIsIndlZWtkYXlNaXNtYXRjaCIsImdldFBhcnNpbmdGbGFncyIsIm0iLCJfcGYiLCJpc1ZhbGlkIiwiZmxhZ3MiLCJwYXJzZWRQYXJ0cyIsImlzTm93VmFsaWQiLCJfZCIsImlzTmFOIiwiZ2V0VGltZSIsImludmFsaWRXZWVrZGF5IiwiX3N0cmljdCIsImJpZ0hvdXIiLCJpc0Zyb3plbiIsIl9pc1ZhbGlkIiwiY3JlYXRlSW52YWxpZCIsIk5hTiIsImZ1biIsInRoaXMiLCJtb21lbnRQcm9wZXJ0aWVzIiwidXBkYXRlSW5Qcm9ncmVzcyIsImNvcHlDb25maWciLCJ0byIsInByb3AiLCJ2YWwiLCJtb21lbnRQcm9wZXJ0aWVzTGVuIiwiX2lzQU1vbWVudE9iamVjdCIsIl9pIiwiX2YiLCJfbCIsIl90em0iLCJfaXNVVEMiLCJfb2Zmc2V0IiwiX2xvY2FsZSIsIk1vbWVudCIsImNvbmZpZyIsInVwZGF0ZU9mZnNldCIsImlzTW9tZW50Iiwid2FybiIsIm1zZyIsInN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyIsImNvbnNvbGUiLCJkZXByZWNhdGUiLCJmaXJzdFRpbWUiLCJkZXByZWNhdGlvbkhhbmRsZXIiLCJhcmciLCJhcmdzIiwiYXJnTGVuIiwiRXJyb3IiLCJzdGFjayIsImRlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZVNpbXBsZSIsImlzRnVuY3Rpb24iLCJGdW5jdGlvbiIsInNldCIsIl9jb25maWciLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQiLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIl9vcmRpbmFsUGFyc2UiLCJtZXJnZUNvbmZpZ3MiLCJwYXJlbnRDb25maWciLCJjaGlsZENvbmZpZyIsIkxvY2FsZSIsImRlZmF1bHRDYWxlbmRhciIsInNhbWVEYXkiLCJuZXh0RGF5IiwibmV4dFdlZWsiLCJsYXN0RGF5IiwibGFzdFdlZWsiLCJzYW1lRWxzZSIsImNhbGVuZGFyIiwibW9tIiwibm93Iiwib3V0cHV0IiwiX2NhbGVuZGFyIiwiemVyb0ZpbGwiLCJudW1iZXIiLCJ0YXJnZXRMZW5ndGgiLCJmb3JjZVNpZ24iLCJhYnNOdW1iZXIiLCJ6ZXJvc1RvRmlsbCIsInBvdyIsIm1heCIsInN1YnN0ciIsImZvcm1hdHRpbmdUb2tlbnMiLCJsb2NhbEZvcm1hdHRpbmdUb2tlbnMiLCJmb3JtYXRGdW5jdGlvbnMiLCJmb3JtYXRUb2tlbkZ1bmN0aW9ucyIsImFkZEZvcm1hdFRva2VuIiwidG9rZW4iLCJwYWRkZWQiLCJvcmRpbmFsIiwiZnVuYyIsImxvY2FsZURhdGEiLCJyZW1vdmVGb3JtYXR0aW5nVG9rZW5zIiwibWFrZUZvcm1hdEZ1bmN0aW9uIiwiYXJyYXkiLCJmb3JtYXRNb21lbnQiLCJleHBhbmRGb3JtYXQiLCJpbnZhbGlkRGF0ZSIsInJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyIsImxvbmdEYXRlRm9ybWF0IiwibGFzdEluZGV4IiwiZGVmYXVsdExvbmdEYXRlRm9ybWF0IiwiTFRTIiwiTFQiLCJMIiwiTEwiLCJMTEwiLCJMTExMIiwiX2xvbmdEYXRlRm9ybWF0IiwiZm9ybWF0VXBwZXIiLCJ0b1VwcGVyQ2FzZSIsInRvayIsImRlZmF1bHRJbnZhbGlkRGF0ZSIsIl9pbnZhbGlkRGF0ZSIsImRlZmF1bHRPcmRpbmFsIiwiZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbCIsImRlZmF1bHRSZWxhdGl2ZVRpbWUiLCJmdXR1cmUiLCJwYXN0Iiwic3MiLCJtbSIsImgiLCJoaCIsImQiLCJkZCIsInciLCJ3dyIsIk0iLCJNTSIsInkiLCJ5eSIsInJlbGF0aXZlVGltZSIsIndpdGhvdXRTdWZmaXgiLCJzdHJpbmciLCJpc0Z1dHVyZSIsIl9yZWxhdGl2ZVRpbWUiLCJwYXN0RnV0dXJlIiwiZGlmZiIsImFsaWFzZXMiLCJEIiwiZGF0ZXMiLCJkYXRlIiwiZGF5cyIsImRheSIsIndlZWtkYXlzIiwid2Vla2RheSIsIkUiLCJpc293ZWVrZGF5cyIsImlzb3dlZWtkYXkiLCJEREQiLCJkYXlvZnllYXJzIiwiZGF5b2Z5ZWFyIiwiaG91cnMiLCJob3VyIiwibXMiLCJtaWxsaXNlY29uZHMiLCJtaWxsaXNlY29uZCIsIm1pbnV0ZXMiLCJtaW51dGUiLCJtb250aHMiLCJtb250aCIsIlEiLCJxdWFydGVycyIsInF1YXJ0ZXIiLCJzZWNvbmRzIiwic2Vjb25kIiwiZ2ciLCJ3ZWVreWVhcnMiLCJ3ZWVreWVhciIsIkdHIiwiaXNvd2Vla3llYXJzIiwiaXNvd2Vla3llYXIiLCJ3ZWVrcyIsIndlZWsiLCJXIiwiaXNvd2Vla3MiLCJpc293ZWVrIiwieWVhcnMiLCJ5ZWFyIiwibm9ybWFsaXplVW5pdHMiLCJ1bml0cyIsIm5vcm1hbGl6ZU9iamVjdFVuaXRzIiwiaW5wdXRPYmplY3QiLCJub3JtYWxpemVkUHJvcCIsIm5vcm1hbGl6ZWRJbnB1dCIsInByaW9yaXRpZXMiLCJpc29XZWVrZGF5IiwiZGF5T2ZZZWFyIiwid2Vla1llYXIiLCJpc29XZWVrWWVhciIsImlzb1dlZWsiLCJnZXRQcmlvcml0aXplZFVuaXRzIiwidW5pdHNPYmoiLCJ1bml0IiwicHJpb3JpdHkiLCJzb3J0IiwicmVnZXhlcyIsIm1hdGNoMSIsIm1hdGNoMiIsIm1hdGNoMyIsIm1hdGNoNCIsIm1hdGNoNiIsIm1hdGNoMXRvMiIsIm1hdGNoM3RvNCIsIm1hdGNoNXRvNiIsIm1hdGNoMXRvMyIsIm1hdGNoMXRvNCIsIm1hdGNoMXRvNiIsIm1hdGNoVW5zaWduZWQiLCJtYXRjaFNpZ25lZCIsIm1hdGNoT2Zmc2V0IiwibWF0Y2hTaG9ydE9mZnNldCIsIm1hdGNoVGltZXN0YW1wIiwibWF0Y2hXb3JkIiwibWF0Y2gxdG8yTm9MZWFkaW5nWmVybyIsIm1hdGNoMXRvMkhhc1plcm8iLCJhZGRSZWdleFRva2VuIiwicmVnZXgiLCJzdHJpY3RSZWdleCIsImlzU3RyaWN0IiwiZ2V0UGFyc2VSZWdleEZvclRva2VuIiwidW5lc2NhcGVGb3JtYXQiLCJyZWdleEVzY2FwZSIsIm1hdGNoZWQiLCJwMyIsInA0IiwiYWJzRmxvb3IiLCJjZWlsIiwiZmxvb3IiLCJ0b0ludCIsImFyZ3VtZW50Rm9yQ29lcmNpb24iLCJjb2VyY2VkTnVtYmVyIiwiaXNGaW5pdGUiLCJ0b2tlbnMiLCJhZGRQYXJzZVRva2VuIiwidG9rZW5MZW4iLCJhZGRXZWVrUGFyc2VUb2tlbiIsIl93IiwiYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4iLCJfYSIsImlzTGVhcFllYXIiLCJZRUFSIiwiTU9OVEgiLCJEQVRFIiwiSE9VUiIsIk1JTlVURSIsIlNFQ09ORCIsIk1JTExJU0VDT05EIiwiV0VFSyIsIldFRUtEQVkiLCJkYXlzSW5ZZWFyIiwicGFyc2VUd29EaWdpdFllYXIiLCJwYXJzZUludCIsImdldFNldFllYXIiLCJtYWtlR2V0U2V0IiwiZ2V0SXNMZWFwWWVhciIsImtlZXBUaW1lIiwic2V0JDEiLCJpc1VUQyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImdldE1pbGxpc2Vjb25kcyIsImdldFVUQ1NlY29uZHMiLCJnZXRTZWNvbmRzIiwiZ2V0VVRDTWludXRlcyIsImdldE1pbnV0ZXMiLCJnZXRVVENIb3VycyIsImdldEhvdXJzIiwiZ2V0VVRDRGF0ZSIsImdldERhdGUiLCJnZXRVVENEYXkiLCJnZXREYXkiLCJnZXRVVENNb250aCIsImdldE1vbnRoIiwiZ2V0VVRDRnVsbFllYXIiLCJnZXRGdWxsWWVhciIsInNldFVUQ01pbGxpc2Vjb25kcyIsInNldE1pbGxpc2Vjb25kcyIsInNldFVUQ1NlY29uZHMiLCJzZXRTZWNvbmRzIiwic2V0VVRDTWludXRlcyIsInNldE1pbnV0ZXMiLCJzZXRVVENIb3VycyIsInNldEhvdXJzIiwic2V0VVRDRGF0ZSIsInNldERhdGUiLCJzZXRVVENGdWxsWWVhciIsInNldEZ1bGxZZWFyIiwic3RyaW5nR2V0Iiwic3RyaW5nU2V0IiwicHJpb3JpdGl6ZWQiLCJwcmlvcml0aXplZExlbiIsIm1vZCIsIngiLCJkYXlzSW5Nb250aCIsIm1vZE1vbnRoIiwibW9udGhzU2hvcnQiLCJtb250aHNTaG9ydFJlZ2V4IiwibW9udGhzUmVnZXgiLCJtb250aHNQYXJzZSIsImRlZmF1bHRMb2NhbGVNb250aHMiLCJkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQiLCJNT05USFNfSU5fRk9STUFUIiwiZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXgiLCJkZWZhdWx0TW9udGhzUmVnZXgiLCJsb2NhbGVNb250aHMiLCJfbW9udGhzIiwiaXNGb3JtYXQiLCJsb2NhbGVNb250aHNTaG9ydCIsIl9tb250aHNTaG9ydCIsImhhbmRsZVN0cmljdFBhcnNlIiwibW9udGhOYW1lIiwiaWkiLCJsbGMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsIl9tb250aHNQYXJzZSIsIl9sb25nTW9udGhzUGFyc2UiLCJfc2hvcnRNb250aHNQYXJzZSIsImxvY2FsZU1vbnRoc1BhcnNlIiwiX21vbnRoc1BhcnNlRXhhY3QiLCJzZXRNb250aCIsIm1pbiIsInNldFVUQ01vbnRoIiwiZ2V0U2V0TW9udGgiLCJnZXREYXlzSW5Nb250aCIsImNvbXB1dGVNb250aHNQYXJzZSIsIl9tb250aHNTaG9ydFN0cmljdFJlZ2V4IiwiX21vbnRoc1Nob3J0UmVnZXgiLCJfbW9udGhzU3RyaWN0UmVnZXgiLCJfbW9udGhzUmVnZXgiLCJjbXBMZW5SZXYiLCJzaG9ydFAiLCJsb25nUCIsInNob3J0UGllY2VzIiwibG9uZ1BpZWNlcyIsIm1peGVkUGllY2VzIiwiY3JlYXRlRGF0ZSIsImNyZWF0ZVVUQ0RhdGUiLCJVVEMiLCJmaXJzdFdlZWtPZmZzZXQiLCJkb3ciLCJkb3kiLCJmd2QiLCJkYXlPZlllYXJGcm9tV2Vla3MiLCJyZXNZZWFyIiwicmVzRGF5T2ZZZWFyIiwid2Vla09mWWVhciIsInJlc1dlZWsiLCJ3ZWVrT2Zmc2V0Iiwid2Vla3NJblllYXIiLCJ3ZWVrT2Zmc2V0TmV4dCIsImxvY2FsZVdlZWsiLCJfd2VlayIsImRlZmF1bHRMb2NhbGVXZWVrIiwibG9jYWxlRmlyc3REYXlPZldlZWsiLCJsb2NhbGVGaXJzdERheU9mWWVhciIsImdldFNldFdlZWsiLCJhZGQiLCJnZXRTZXRJU09XZWVrIiwicGFyc2VXZWVrZGF5Iiwid2Vla2RheXNQYXJzZSIsInBhcnNlSXNvV2Vla2RheSIsInNoaWZ0V2Vla2RheXMiLCJ3cyIsIndlZWtkYXlzTWluIiwid2Vla2RheXNTaG9ydCIsIndlZWtkYXlzTWluUmVnZXgiLCJ3ZWVrZGF5c1Nob3J0UmVnZXgiLCJ3ZWVrZGF5c1JlZ2V4IiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzIiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4iLCJkZWZhdWx0V2Vla2RheXNSZWdleCIsImRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXgiLCJkZWZhdWx0V2Vla2RheXNNaW5SZWdleCIsImxvY2FsZVdlZWtkYXlzIiwiX3dlZWtkYXlzIiwibG9jYWxlV2Vla2RheXNTaG9ydCIsIl93ZWVrZGF5c1Nob3J0IiwibG9jYWxlV2Vla2RheXNNaW4iLCJfd2Vla2RheXNNaW4iLCJoYW5kbGVTdHJpY3RQYXJzZSQxIiwid2Vla2RheU5hbWUiLCJfd2Vla2RheXNQYXJzZSIsIl9zaG9ydFdlZWtkYXlzUGFyc2UiLCJfbWluV2Vla2RheXNQYXJzZSIsImxvY2FsZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNQYXJzZUV4YWN0IiwiX2Z1bGxXZWVrZGF5c1BhcnNlIiwiZ2V0U2V0RGF5T2ZXZWVrIiwiZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrIiwiZ2V0U2V0SVNPRGF5T2ZXZWVrIiwiY29tcHV0ZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1JlZ2V4IiwiX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1Nob3J0UmVnZXgiLCJfd2Vla2RheXNNaW5TdHJpY3RSZWdleCIsIl93ZWVrZGF5c01pblJlZ2V4IiwibWlucCIsInNob3J0cCIsImxvbmdwIiwibWluUGllY2VzIiwiaEZvcm1hdCIsImtGb3JtYXQiLCJsb3dlcmNhc2UiLCJtYXRjaE1lcmlkaWVtIiwiX21lcmlkaWVtUGFyc2UiLCJsb2NhbGVJc1BNIiwiY2hhckF0Iiwia0lucHV0IiwiX2lzUG0iLCJpc1BNIiwiX21lcmlkaWVtIiwicG9zIiwicG9zMSIsInBvczIiLCJkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSIsImdldFNldEhvdXIiLCJsb2NhbGVNZXJpZGllbSIsImlzTG93ZXIiLCJnbG9iYWxMb2NhbGUiLCJiYXNlQ29uZmlnIiwiZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIm1lcmlkaWVtUGFyc2UiLCJsb2NhbGVzIiwibG9jYWxlRmFtaWxpZXMiLCJjb21tb25QcmVmaXgiLCJhcnIxIiwibWlubCIsIm5vcm1hbGl6ZUxvY2FsZSIsImNob29zZUxvY2FsZSIsIm5hbWVzIiwiaiIsImxvYWRMb2NhbGUiLCJpc0xvY2FsZU5hbWVTYW5lIiwib2xkTG9jYWxlIiwiZXhwb3J0cyIsIl9hYmJyIiwiZ2V0U2V0R2xvYmFsTG9jYWxlIiwidmFsdWVzIiwiZ2V0TG9jYWxlIiwiZGVmaW5lTG9jYWxlIiwiYWJiciIsInBhcmVudExvY2FsZSIsInVwZGF0ZUxvY2FsZSIsInRtcExvY2FsZSIsImxpc3RMb2NhbGVzIiwiY2hlY2tPdmVyZmxvdyIsIl9vdmVyZmxvd0RheU9mWWVhciIsIl9vdmVyZmxvd1dlZWtzIiwiX292ZXJmbG93V2Vla2RheSIsImV4dGVuZGVkSXNvUmVnZXgiLCJiYXNpY0lzb1JlZ2V4IiwidHpSZWdleCIsImlzb0RhdGVzIiwiaXNvVGltZXMiLCJhc3BOZXRKc29uUmVnZXgiLCJvYnNPZmZzZXRzIiwiVVQiLCJHTVQiLCJFRFQiLCJFU1QiLCJDRFQiLCJDU1QiLCJNRFQiLCJNU1QiLCJQRFQiLCJQU1QiLCJjb25maWdGcm9tSVNPIiwiYWxsb3dUaW1lIiwiZGF0ZUZvcm1hdCIsInRpbWVGb3JtYXQiLCJ0ekZvcm1hdCIsImV4ZWMiLCJpc29EYXRlc0xlbiIsImlzb1RpbWVzTGVuIiwiY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCIsImV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MiLCJ5ZWFyU3RyIiwibW9udGhTdHIiLCJkYXlTdHIiLCJob3VyU3RyIiwibWludXRlU3RyIiwic2Vjb25kU3RyIiwidW50cnVuY2F0ZVllYXIiLCJwcmVwcm9jZXNzUkZDMjgyMiIsImNoZWNrV2Vla2RheSIsIndlZWtkYXlTdHIiLCJwYXJzZWRJbnB1dCIsImNhbGN1bGF0ZU9mZnNldCIsIm9ic09mZnNldCIsIm1pbGl0YXJ5T2Zmc2V0IiwibnVtT2Zmc2V0IiwiaG0iLCJjb25maWdGcm9tUkZDMjgyMiIsInBhcnNlZEFycmF5IiwiY29uZmlnRnJvbVN0cmluZyIsImNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrIiwiZGVmYXVsdHMiLCJjIiwiY3VycmVudERhdGVBcnJheSIsIm5vd1ZhbHVlIiwiX3VzZVVUQyIsImNvbmZpZ0Zyb21BcnJheSIsImN1cnJlbnREYXRlIiwiZXhwZWN0ZWRXZWVrZGF5IiwieWVhclRvVXNlIiwiZGF5T2ZZZWFyRnJvbVdlZWtJbmZvIiwiX2RheU9mWWVhciIsIl9uZXh0RGF5IiwidGVtcCIsIndlZWtkYXlPdmVyZmxvdyIsImN1cldlZWsiLCJjcmVhdGVMb2NhbCIsIklTT184NjAxIiwiUkZDXzI4MjIiLCJza2lwcGVkIiwic3RyaW5nTGVuZ3RoIiwidG90YWxQYXJzZWRJbnB1dExlbmd0aCIsIm1lcmlkaWVtRml4V3JhcCIsImVyYXNDb252ZXJ0WWVhciIsImlzUG0iLCJtZXJpZGllbUhvdXIiLCJjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkiLCJ0ZW1wQ29uZmlnIiwiYmVzdE1vbWVudCIsInNjb3JlVG9CZWF0IiwiY3VycmVudFNjb3JlIiwidmFsaWRGb3JtYXRGb3VuZCIsImJlc3RGb3JtYXRJc1ZhbGlkIiwiY29uZmlnZkxlbiIsInNjb3JlIiwiY29uZmlnRnJvbU9iamVjdCIsImRheU9yRGF0ZSIsImNyZWF0ZUZyb21Db25maWciLCJwcmVwYXJlQ29uZmlnIiwicHJlcGFyc2UiLCJjb25maWdGcm9tSW5wdXQiLCJwcm90b3R5cGVNaW4iLCJvdGhlciIsInByb3RvdHlwZU1heCIsInBpY2tCeSIsIm1vbWVudHMiLCJvcmRlcmluZyIsImlzRHVyYXRpb25WYWxpZCIsInVuaXRIYXNEZWNpbWFsIiwib3JkZXJMZW4iLCJwYXJzZUZsb2F0IiwiaXNWYWxpZCQxIiwiY3JlYXRlSW52YWxpZCQxIiwiY3JlYXRlRHVyYXRpb24iLCJEdXJhdGlvbiIsImR1cmF0aW9uIiwiX21pbGxpc2Vjb25kcyIsIl9kYXlzIiwiX2RhdGEiLCJfYnViYmxlIiwiaXNEdXJhdGlvbiIsImFic1JvdW5kIiwicm91bmQiLCJjb21wYXJlQXJyYXlzIiwiYXJyYXkxIiwiYXJyYXkyIiwiZG9udENvbnZlcnQiLCJsZW5ndGhEaWZmIiwiZGlmZnMiLCJvZmZzZXQiLCJzZXBhcmF0b3IiLCJ1dGNPZmZzZXQiLCJzaWduIiwib2Zmc2V0RnJvbVN0cmluZyIsImNodW5rT2Zmc2V0IiwibWF0Y2hlciIsIm1hdGNoZXMiLCJjbG9uZVdpdGhPZmZzZXQiLCJtb2RlbCIsImNsb25lIiwic2V0VGltZSIsImxvY2FsIiwiZ2V0RGF0ZU9mZnNldCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0U2V0T2Zmc2V0Iiwia2VlcExvY2FsVGltZSIsImtlZXBNaW51dGVzIiwibG9jYWxBZGp1c3QiLCJfY2hhbmdlSW5Qcm9ncmVzcyIsImFkZFN1YnRyYWN0IiwiZ2V0U2V0Wm9uZSIsInNldE9mZnNldFRvVVRDIiwic2V0T2Zmc2V0VG9Mb2NhbCIsInN1YnRyYWN0Iiwic2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQiLCJ0Wm9uZSIsImhhc0FsaWduZWRIb3VyT2Zmc2V0IiwiaXNEYXlsaWdodFNhdmluZ1RpbWUiLCJpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQiLCJfaXNEU1RTaGlmdGVkIiwidG9BcnJheSIsImlzTG9jYWwiLCJpc1V0Y09mZnNldCIsImlzVXRjIiwiYXNwTmV0UmVnZXgiLCJpc29SZWdleCIsInJldCIsImRpZmZSZXMiLCJwYXJzZUlzbyIsIm1vbWVudHNEaWZmZXJlbmNlIiwiaW5wIiwicG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZSIsImJhc2UiLCJpc0FmdGVyIiwiaXNCZWZvcmUiLCJjcmVhdGVBZGRlciIsImRpcmVjdGlvbiIsInBlcmlvZCIsInRtcCIsImlzQWRkaW5nIiwiaW52YWxpZCIsImlzTW9tZW50SW5wdXQiLCJpc051bWJlck9yU3RyaW5nQXJyYXkiLCJpc01vbWVudElucHV0T2JqZWN0IiwicHJvcGVydHkiLCJvYmplY3RUZXN0IiwicHJvcGVydHlUZXN0IiwicHJvcGVydHlMZW4iLCJhcnJheVRlc3QiLCJkYXRhVHlwZVRlc3QiLCJpc0NhbGVuZGFyU3BlYyIsImdldENhbGVuZGFyRm9ybWF0IiwibXlNb21lbnQiLCJjYWxlbmRhciQxIiwidGltZSIsImZvcm1hdHMiLCJzb2QiLCJzdGFydE9mIiwiY2FsZW5kYXJGb3JtYXQiLCJsb2NhbElucHV0IiwiZW5kT2YiLCJpc0JldHdlZW4iLCJpbmNsdXNpdml0eSIsImxvY2FsRnJvbSIsImxvY2FsVG8iLCJpc1NhbWUiLCJpbnB1dE1zIiwiaXNTYW1lT3JBZnRlciIsImlzU2FtZU9yQmVmb3JlIiwiYXNGbG9hdCIsInRoYXQiLCJ6b25lRGVsdGEiLCJtb250aERpZmYiLCJ3aG9sZU1vbnRoRGlmZiIsImFuY2hvciIsInRvSVNPU3RyaW5nIiwia2VlcE9mZnNldCIsInRvRGF0ZSIsImluc3BlY3QiLCJkYXRldGltZSIsInN1ZmZpeCIsInpvbmUiLCJpbnB1dFN0cmluZyIsImRlZmF1bHRGb3JtYXRVdGMiLCJkZWZhdWx0Rm9ybWF0IiwicG9zdGZvcm1hdCIsImh1bWFuaXplIiwiZnJvbU5vdyIsInRvTm93IiwibmV3TG9jYWxlRGF0YSIsIk1TX1BFUl9TRUNPTkQiLCJNU19QRVJfTUlOVVRFIiwiTVNfUEVSX0hPVVIiLCJNU19QRVJfNDAwX1lFQVJTIiwibW9kJDEiLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJsb2NhbFN0YXJ0T2ZEYXRlIiwidXRjU3RhcnRPZkRhdGUiLCJzdGFydE9mRGF0ZSIsInVuaXgiLCJ0b09iamVjdCIsInRvSlNPTiIsImlzVmFsaWQkMiIsInBhcnNpbmdGbGFncyIsImludmFsaWRBdCIsImNyZWF0aW9uRGF0YSIsImxvY2FsZUVyYXMiLCJlcmFzIiwiX2VyYXMiLCJzaW5jZSIsInVudGlsIiwibG9jYWxlRXJhc1BhcnNlIiwiZXJhTmFtZSIsIm5hcnJvdyIsImxvY2FsZUVyYXNDb252ZXJ0WWVhciIsImRpciIsImdldEVyYU5hbWUiLCJnZXRFcmFOYXJyb3ciLCJnZXRFcmFBYmJyIiwiZ2V0RXJhWWVhciIsImVyYXNOYW1lUmVnZXgiLCJjb21wdXRlRXJhc1BhcnNlIiwiX2VyYXNOYW1lUmVnZXgiLCJfZXJhc1JlZ2V4IiwiZXJhc0FiYnJSZWdleCIsIl9lcmFzQWJiclJlZ2V4IiwiZXJhc05hcnJvd1JlZ2V4IiwiX2VyYXNOYXJyb3dSZWdleCIsIm1hdGNoRXJhQWJiciIsIm1hdGNoRXJhTmFtZSIsIm1hdGNoRXJhTmFycm93IiwibWF0Y2hFcmFZZWFyT3JkaW5hbCIsIl9lcmFZZWFyT3JkaW5hbFJlZ2V4IiwiZXJhc05hbWUiLCJlcmFzQWJiciIsImVyYXNOYXJyb3ciLCJhYmJyUGllY2VzIiwibmFtZVBpZWNlcyIsIm5hcnJvd1BpZWNlcyIsImFkZFdlZWtZZWFyRm9ybWF0VG9rZW4iLCJnZXR0ZXIiLCJnZXRTZXRXZWVrWWVhciIsImdldFNldFdlZWtZZWFySGVscGVyIiwiZ2V0U2V0SVNPV2Vla1llYXIiLCJnZXRJU09XZWVrc0luWWVhciIsImdldElTT1dlZWtzSW5JU09XZWVrWWVhciIsImdldFdlZWtzSW5ZZWFyIiwid2Vla0luZm8iLCJnZXRXZWVrc0luV2Vla1llYXIiLCJ3ZWVrc1RhcmdldCIsInNldFdlZWtBbGwiLCJkYXlPZlllYXJEYXRhIiwiZ2V0U2V0UXVhcnRlciIsImVyYXNQYXJzZSIsImVyYVllYXJPcmRpbmFsUGFyc2UiLCJnZXRTZXREYXlPZk1vbnRoIiwiZ2V0U2V0RGF5T2ZZZWFyIiwiZ2V0U2V0TWludXRlIiwiZ2V0U2V0TWlsbGlzZWNvbmQiLCJnZXRTZXRTZWNvbmQiLCJwYXJzZU1zIiwiZ2V0Wm9uZUFiYnIiLCJnZXRab25lTmFtZSIsInByb3RvIiwiY3JlYXRlVW5peCIsImNyZWF0ZUluWm9uZSIsInBhcnNlWm9uZSIsInByZVBhcnNlUG9zdEZvcm1hdCIsImZvciIsImVyYU5hcnJvdyIsImVyYUFiYnIiLCJlcmFZZWFyIiwiaXNvV2Vla3MiLCJ3ZWVrc0luV2Vla1llYXIiLCJpc29XZWVrc0luWWVhciIsImlzb1dlZWtzSW5JU09XZWVrWWVhciIsImlzRFNUIiwiem9uZUFiYnIiLCJ6b25lTmFtZSIsImlzRFNUU2hpZnRlZCIsInByb3RvJDEiLCJnZXQkMSIsImluZGV4IiwiZmllbGQiLCJzZXR0ZXIiLCJsaXN0TW9udGhzSW1wbCIsIm91dCIsImxpc3RXZWVrZGF5c0ltcGwiLCJsb2NhbGVTb3J0ZWQiLCJzaGlmdCIsImxpc3RNb250aHMiLCJsaXN0TW9udGhzU2hvcnQiLCJsaXN0V2Vla2RheXMiLCJsaXN0V2Vla2RheXNTaG9ydCIsImxpc3RXZWVrZGF5c01pbiIsImZpcnN0RGF5T2ZZZWFyIiwiZmlyc3REYXlPZldlZWsiLCJsYW5nRGF0YSIsIm1hdGhBYnMiLCJhZGRTdWJ0cmFjdCQxIiwiYWRkJDEiLCJzdWJ0cmFjdCQxIiwiYWJzQ2VpbCIsImJ1YmJsZSIsIm1vbnRoc0Zyb21EYXlzIiwibW9udGhzVG9EYXlzIiwiZGF5c1RvTW9udGhzIiwiYXMiLCJtYWtlQXMiLCJhbGlhcyIsImFzTWlsbGlzZWNvbmRzIiwiYXNTZWNvbmRzIiwiYXNNaW51dGVzIiwiYXNIb3VycyIsImFzRGF5cyIsImFzV2Vla3MiLCJhc01vbnRocyIsImFzUXVhcnRlcnMiLCJhc1llYXJzIiwidmFsdWVPZiQxIiwiY2xvbmUkMSIsImdldCQyIiwibWFrZUdldHRlciIsInRocmVzaG9sZHMiLCJzdWJzdGl0dXRlVGltZUFnbyIsInJlbGF0aXZlVGltZSQxIiwicG9zTmVnRHVyYXRpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyIsInJvdW5kaW5nRnVuY3Rpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJ0aHJlc2hvbGQiLCJsaW1pdCIsImFyZ1dpdGhTdWZmaXgiLCJhcmdUaHJlc2hvbGRzIiwid2l0aFN1ZmZpeCIsInRoIiwiYXNzaWduIiwiYWJzJDEiLCJ0b0lTT1N0cmluZyQxIiwidG90YWxTaWduIiwieW1TaWduIiwiZGF5c1NpZ24iLCJobXNTaWduIiwidG90YWwiLCJwcm90byQyIiwidG9Jc29TdHJpbmciLCJ2ZXJzaW9uIiwicmVsYXRpdmVUaW1lUm91bmRpbmciLCJyZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTCIsIkRBVEVUSU1FX0xPQ0FMX1NFQ09ORFMiLCJEQVRFVElNRV9MT0NBTF9NUyIsIlRJTUUiLCJUSU1FX1NFQ09ORFMiLCJUSU1FX01TIiwiZmFjdG9yeSIsInJvb3QiLCJtb21lbnQiLCJjYWNoZWRHdWVzcyIsInpvbmVzIiwibGlua3MiLCJjb3VudHJpZXMiLCJndWVzc2VzIiwibG9nRXJyb3IiLCJtb21lbnRWZXJzaW9uIiwibWFqb3IiLCJtaW5vciIsImNoYXJDb2RlVG9JbnQiLCJjaGFyQ29kZSIsInVucGFja0Jhc2U2MCIsIndob2xlIiwiZnJhY3Rpb25hbCIsIm11bHRpcGxpZXIiLCJjaGFyQ29kZUF0IiwiYXJyYXlUb0ludCIsIm1hcEluZGljZXMiLCJpbmRpY2VzIiwidW5wYWNrIiwib2Zmc2V0cyIsInVudGlscyIsIkluZmluaXR5IiwiaW50VG9VbnRpbCIsImFiYnJzIiwicG9wdWxhdGlvbiIsIlpvbmUiLCJwYWNrZWRTdHJpbmciLCJfc2V0IiwiQ291bnRyeSIsImNvdW50cnlfbmFtZSIsInpvbmVfbmFtZXMiLCJPZmZzZXRBdCIsImF0IiwidGltZVN0cmluZyIsInRvVGltZVN0cmluZyIsIlpvbmVTY29yZSIsIm9mZnNldFNjb3JlIiwiYWJiclNjb3JlIiwiZmluZENoYW5nZSIsImxvdyIsImhpZ2giLCJtaWQiLCJzb3J0Wm9uZVNjb3JlcyIsImxvY2FsZUNvbXBhcmUiLCJhZGRUb0d1ZXNzZXMiLCJndWVzc2VzRm9yVXNlck9mZnNldHMiLCJndWVzc2VzT2Zmc2V0Iiwib2Zmc2V0c0xlbmd0aCIsImZpbHRlcmVkR3Vlc3NlcyIsImNoZWNrZWRPZmZzZXRzIiwicmVidWlsZEd1ZXNzIiwiaW50bE5hbWUiLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJyZXNvbHZlZE9wdGlvbnMiLCJ0aW1lWm9uZSIsIm5vcm1hbGl6ZU5hbWUiLCJ6b25lU2NvcmUiLCJjaGFuZ2UiLCJuZXh0T2Zmc2V0Iiwic3RhcnRZZWFyIiwibGFzdCIsImxhc3RPZmZzZXQiLCJ1c2VyT2Zmc2V0cyIsInpvbmVTY29yZXMiLCJnZXRab25lIiwic2NvcmVPZmZzZXRBdCIsImFkZFpvbmUiLCJwYWNrZWQiLCJub3JtYWxpemVkIiwiY2FsbGVyIiwibGluayIsImFkZExpbmsiLCJub3JtYWwwIiwibm9ybWFsMSIsIm5lZWRzT2Zmc2V0IiwiaXNVbml4VGltZXN0YW1wIiwibWVzc2FnZSIsInR6IiwicGFyc2UiLCJ1bnBhY2tlZCIsIl9pbmRleCIsInRpbWVzdGFtcCIsIm51bSIsImxvIiwiaGkiLCJjbG9zZXN0Iiwiem9uZV9uYW1lIiwiY291bnRyeV9jb2RlIiwib2Zmc2V0TmV4dCIsIm9mZnNldFByZXYiLCJ0YXJnZXQiLCJtb3ZlQW1iaWd1b3VzRm9yd2FyZCIsIm1vdmVJbnZhbGlkRm9yd2FyZCIsIm9mZnNldEF0IiwiZGF0YVZlcnNpb24iLCJfem9uZXMiLCJfbGlua3MiLCJfbmFtZXMiLCJfY291bnRyaWVzIiwibG9hZCIsImNvdW50cnlfem9uZXMiLCJhZGRDb3VudHJpZXMiLCJ6b25lRXhpc3RzIiwiZGlkU2hvd0Vycm9yIiwiZ3Vlc3MiLCJpZ25vcmVDYWNoZSIsInpvbmVzRm9yQ291bnRyeSIsImNvdW50cnkiLCJ3aXRoX29mZnNldCIsIm9sZCIsImFiYnJXcmFwIiwiX3oiLCJyZXNldFpvbmVXcmFwIiwiZGVmYXVsdFpvbmUiLCJ6Iiwic2V0RGVmYXVsdCIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwidHJhbnNsYXRpb25zIiwibnVtYmVyc1Bhc3QiLCJudW1iZXJzRnV0dXJlIiwidHJhbnNsYXRlIiwidmVyYmFsTnVtYmVyIiwibGwiLCJsbGwiLCJsbGxsIiwicHJvY2Vzc1JlbGF0aXZlVGltZSIsIm1vbnRoc1BhcnNlRXhhY3QiLCJ3ZWVrZGF5c1BhcnNlRXhhY3QiLCJkZSIsImFpcnBsYW5lIiwiYXJyaXZhbCIsImJhY2siLCJiaWtlcmVudGFsc3RhdGlvbiIsImJ1cyIsImNhbmNlbCIsImN1cnJlbnRwb3NpdGlvbiIsImRlbGV0ZSIsImRlcGFydHVyZSIsImZhdm91cml0ZSIsImZlcnJ5Iiwib3dubG9jYXRpb25zIiwibG9hZGluZyIsInJhaWwiLCJzdHJlZXQiLCJzdWJ3YXkiLCJzdGF0aW9uIiwidHJhbSIsInZlbnVlIiwid2hlcmUiLCJwbGFjZSIsImVuIiwiYmlrZXBhcmsiLCJjYXJwYXJrIiwicGxhdGZvcm0iLCJyZXF1aXJlZCIsInRyYWNrIiwiZmkiLCJ2ZWhpY2xlcmVudGFsc3RhdGlvbiIsInBsIiwic3YiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZG9jdW1lbnQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiQXV0b3N1Z2dlc3RQYXRjaCIsIkF1dG9zdWdnZXN0IiwicHJvcHMiLCJzdXBlciIsInNlbGYiLCJvblN1Z2dlc3Rpb25Ub3VjaE1vdmUiLCJqdXN0U2VsZWN0ZWRTdWdnZXN0aW9uIiwicHJlc3NlZFN1Z2dlc3Rpb24iLCJNb2JpbGVTZWFyY2giLCJfaW5wdXRSZWYkY3VycmVudCIsImFwcEVsZW1lbnQiLCJjbG9zZUhhbmRsZSIsImNsZWFySW5wdXQiLCJzdWdnZXN0aW9ucyIsImlucHV0UHJvcHMiLCJmZXRjaEZ1bmN0aW9uIiwicmVuZGVyU3VnZ2VzdGlvbiIsImdldFN1Z2dlc3Rpb25WYWx1ZSIsImFyaWFMYWJlbCIsIm9uU3VnZ2VzdGlvblNlbGVjdGVkIiwiY2xlYXJPbGRTZWFyY2hlcyIsImRpYWxvZ0hlYWRlclRleHQiLCJkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dCIsImRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQiLCJjbGVhcklucHV0QnV0dG9uVGV4dCIsImZvY3VzSW5wdXQiLCJjb2xvciIsImhvdmVyQ29sb3IiLCJhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yIiwic2VhcmNoT3BlbiIsImZvbnRXZWlnaHRzIiwic3R5bGVzIiwic2hvd1Njcm9sbCIsIm1vYmlsZVN0eWxlcyIsIm1vYmlsZU5vU2Nyb2xsU3R5bGVzIiwiaW5wdXRJZCIsIl91c2VTdGF0ZTIiLCJ1c2VTdGF0ZSIsImlzRGlhbG9nT3BlbiIsInNldERpYWxvZ09wZW4iLCJpbnB1dFJlZiIsIlJlYWN0IiwidXNlUmVmIiwidXNlRWZmZWN0IiwiUmVhY3RNb2RhbCIsInNldEFwcEVsZW1lbnQiLCJvbkNsb3NlIiwidXNlQ2FsbGJhY2siLCJvblNlbGVjdCIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsImV2ZW50Iiwid2hpY2giLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJnZXRWYWx1ZSIsInJlbmRlckl0ZW0iLCJjbGFzc05hbWUiLCJmb2N1cyIsImlzT3BlbiIsIm92ZXJsYXlDbGFzc05hbWUiLCJvbkFmdGVyQ2xvc2UiLCJzaG91bGRDbG9zZU9uRXNjIiwibWVkaXVtIiwiaHRtbEZvciIsIm9uQ2xpY2siLCJvbktleURvd24iLCJ0YWJJbmRleCIsIkljb24iLCJpbWciLCJhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyIsIm9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCIsImZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayIsInNob3VsZFJlbmRlclN1Z2dlc3Rpb25zIiwiaGFzVmFsdWUiLCJhdXRvRm9jdXMiLCJyZW5kZXJJbnB1dENvbXBvbmVudCIsIkZyYWdtZW50IiwidGhlbWUiLCJEaWFsb2dNb2RhbCIsImlzTW9kYWxPcGVuIiwiaGFuZGxlQ2xvc2UiLCJoZWFkZXJUZXh0IiwicHJpbWFyeUJ1dHRvblRleHQiLCJzZWNvbmRhcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJzZWNvbmRhcnlCdXR0b25PbkNsaWNrIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaXNSZXF1aXJlZCIsImFycmF5T2YiLCJvYmplY3QiLCJzaGFwZSIsIm9uQ2hhbmdlIiwib25CbHVyIiwicGxhY2Vob2xkZXIiLCJib29sIiwiZGVmYXVsdFByb3BzIiwiZyIsIndpbmRvdyIsImlnbm9yZSIsImhlYWRlciIsInRvcE9uRW1wdHlIYXNoIiwic3BlZWQiLCJzcGVlZEFzRHVyYXRpb24iLCJkdXJhdGlvbk1heCIsImR1cmF0aW9uTWluIiwiY2xpcCIsImVhc2luZyIsImN1c3RvbUVhc2luZyIsInVwZGF0ZVVSTCIsInBvcHN0YXRlIiwiZW1pdEV2ZW50cyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsImJvZHkiLCJzY3JvbGxIZWlnaHQiLCJkb2N1bWVudEVsZW1lbnQiLCJvZmZzZXRIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0Iiwib2Zmc2V0VG9wIiwiYWN0aXZlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsIm91dGxpbmUiLCJzY3JvbGxUbyIsIkN1c3RvbUV2ZW50IiwiYnViYmxlcyIsImRldGFpbCIsInRvZ2dsZSIsImRpc3BhdGNoRXZlbnQiLCJjYW5jZWxTY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGwiLCJ0YWdOYW1lIiwicGFnZVlPZmZzZXQiLCJxdWVyeVNlbGVjdG9yIiwiTyIsIm9mZnNldFBhcmVudCIsImlubmVySGVpZ2h0IiwiUyIsIl8iLCJJIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHVzaFN0YXRlIiwic21vb3RoU2Nyb2xsIiwiSlNPTiIsInN0cmluZ2lmeSIsInRpdGxlIiwibWF0Y2hNZWRpYSIsImRlZmF1bHRQcmV2ZW50ZWQiLCJidXR0b24iLCJtZXRhS2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwiaG9zdG5hbWUiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwiaHJlZiIsImRlY29kZVVSSUNvbXBvbmVudCIsImhhc2giLCJyZXBsYWNlU3RhdGUiLCJzdGF0ZSIsImRlc3Ryb3kiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfX2NyZWF0ZUJpbmRpbmciLCJjcmVhdGUiLCJfX2V4cG9ydFN0YXIiLCJ1c2VBcnJvd05hdmlnYXRpb24iLCJsaXN0SXRlbXMiLCJvbkFycm93VXBPckRvd24iLCJzZWxlY3RlZEluZGV4IiwidXNlRGVib3VuY2UiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwidXNlRWxlbWVudFNpemUiLCJ3aWR0aCIsImNsaWVudFdpZHRoIiwidXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJpc0ludGVyc2VjdGluZyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsInVub2JzZXJ2ZSIsImNvbnRhaW5lclJlZiIsImlzVmlzaWJsZSIsInVzZUlzQnJlYWtwb2ludCIsInhzIiwibW9iaWxlU21hbGwiLCJtb2JpbGUiLCJ0YWJsZXQiLCJ0YWJsZXRMYXJnZSIsImRlc2t0b3BTbWFsbCIsImRlc2t0b3AiLCJkZXNrdG9wTGFyZ2UiLCJpbm5lcldpZHRoIiwidXNlT25SZXNpemUiLCJ1c2VJc0xvYWRpbmdBZnRlckVycm9yIiwidXNlSXNNb2JpbGUiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlT25Mb3NlRm9jdXNXaXRoaW4iLCJ3YXRjaCIsInBhc3NpdmUiLCJ1c2VPbldpbmRvd0ZvY3VzIiwidmlzaWJpbGl0eVN0YXRlIiwidXNlT3V0c2lkZVJlYWN0ZXIiLCJjb250YWlucyIsInVzZVJ1bkFmdGVyVXBkYXRlIiwidXNlU2Nyb2xsTG9jayIsImxvY2siLCJzY3JvbGxZIiwidG9wIiwidW5sb2NrIiwiX19pbXBvcnREZWZhdWx0IiwiX19lc01vZHVsZSIsInVzZVNtb290aFNjcm9sbCIsImdsb2JhbFRoaXMiLCJpbml0IiwiZmFsbGJhY2tMbmciLCJkZWZhdWx0TlMiLCJpbnRlcnBvbGF0aW9uIiwiZXNjYXBlVmFsdWUiLCJMb2FkaW5nIiwiY2hpbGRyZW4iLCJpMThuZXh0Iiwibm9kZSIsImdldFBsYXRmb3JtIiwiR1RGUyIsIl9hZGRlbmR1bSRHVEZTIiwibW9kZXMiLCJnZXRTdWdnZXN0aW9uQ29udGVudCIsInN1Z2dlc3Rpb25UeXBlIiwiX2dldE5hbWVMYWJlbDIiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJfaXRlbSRwcm9wZXJ0aWVzIiwiX2l0ZW0kcHJvcGVydGllczIiLCJ0YWlsMSIsInRhaWwyIiwibmFtZTEiLCJuYW1lMiIsInRyYW5zbGF0ZWRUZXh0IiwidHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSIsImFycml2ZUJ5IiwiZ2V0TGFiZWwiLCJEVEF1dG9zdWdnZXN0IiwiQ29tcG9uZW50IiwibmV3VmFsdWUiLCJuZXdTdGF0ZSIsImZJbnB1dCIsInJlbmRlck1vYmlsZVNlYXJjaCIsImlzTW9iaWxlIiwiZWRpdGluZyIsInZhbGlkIiwidHlwaW5nVGltZXIiLCJ0aW1lciIsInNldFN0YXRlIiwidHlwaW5nIiwib3duUGxhY2VzIiwicGVuZGluZ1NlbGVjdGlvbiIsInN1Z2dlc3Rpb25JbmRleCIsInNlbGVjdGlvbkRvbmUiLCJzdWdnZXN0aW9uVmFsdWUiLCJibHVyIiwiaGFuZGxlVmlhUG9pbnRzIiwiZm9jdXNDaGFuZ2UiLCJpc0VtYmVkZGVkIiwiY2xvc2VNb2JpbGVTZWFyY2giLCJwcmV2U3RhdGUiLCJjaGVja1BlbmRpbmdTZWxlY3Rpb24iLCJfcmVmMiIsImNsZWFuRXhlY3V0ZWQiLCJuZXdUYXJnZXRzIiwidXNlQWxsIiwiaXNFbXB0eSIsImlzTG9jYXRpb25TZWFyY2giLCJleGVjdXRlU2VhcmNoIiwic2VhcmNoUmVzdWx0IiwidHJhbnNsYXRlZCIsIm9uQ2xlYXIiLCJpbnB1dFZhbHVlIiwiY2xlYXJMb2NhdGlvblRleHQiLCJzdGF0ZUtleURvd24iLCJhdXRvc3VnZ2VzdCIsInN0b3JlUmVmIiwiY29udGVudCIsIlN1Z2dlc3Rpb25JdGVtIiwiYXJpYUZhdm91cml0ZVN0cmluZyIsImZpbGxJbnB1dCIsImdldEF1dG9TdWdnZXN0SWNvbnMiLCJtb2RlSWNvbkNvbG9ycyIsIm1vZGVTZXQiLCJvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQiLCJpbnB1dENsaWNrZWQiLCJmaXJzdFN1Z2dlc3Rpb24iLCJTZXQiLCJfdGhpcyRwcm9wcyRzZWFyY2hDb24iLCJjbGVhckZ1dHVyZVJvdXRlcyIsImFkZFJlc291cmNlQnVuZGxlIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwibmV4dFByb3BzIiwibmV4dFN0YXRlIiwiaXNFcXVhbCIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNoYW5nZUxhbmd1YWdlIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJyZW5kZXIiLCJfdGhpcyRzdGF0ZSIsInRyYW5zbGF0ZWRQbGFjZWhvbGRlciIsInRoaW4iLCJpbnB1dENsYXNzTmFtZSIsImtleURvd24iLCJhcmlhQmFySWQiLCJTZWFyY2hCYXJJZCIsImFyaWFSZXF1aXJlZFRleHQiLCJhcmlhTGFiZWxJbnN0cnVjdGlvbnMiLCJtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0IiwiYXJpYUxhYmVsVGV4dCIsImFyaWFTdWdnZXN0aW9uTGVuIiwiY291bnQiLCJhcmlhQ3VycmVudFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uQXNBcmlhQ29udGVudCIsInNlbGVjdGlvbiIsInJvbGUiLCJpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCIsIm1vYmlsZUxhYmVsIiwib25TZWxlY3RlZCIsImN4IiwiaWNvbiIsIm9uRm9jdXMiLCJoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24iLCJjbGVhckJ1dHRvbiIsInN0b3JlSW5wdXRSZWZlcmVuY2UiLCJyb3V0ZXNQcmVmaXgiLCJzdG9wc1ByZWZpeCIsIm9iamVjdE9mIiwiRFRBdXRvc3VnZ2VzdFdpdGhT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